summaryrefslogtreecommitdiff
path: root/mcon
diff options
context:
space:
mode:
authorrmanfredi <rmanfredi@190e5f8e-a817-0410-acf6-e9863daed9af>2006-08-24 12:32:52 +0000
committerrmanfredi <rmanfredi@190e5f8e-a817-0410-acf6-e9863daed9af>2006-08-24 12:32:52 +0000
commit8bfc5756fb68e0b13d7e7c0073ad5b9a4790d1b6 (patch)
treedee05e98bc53766d609ef2a3a07a5672627d812c /mcon
Moving project to sourceforge.
git-svn-id: https://dist.svn.sourceforge.net/svnroot/dist/trunk/dist@1 190e5f8e-a817-0410-acf6-e9863daed9af
Diffstat (limited to 'mcon')
-rw-r--r--mcon/INTRO109
-rw-r--r--mcon/Jmakefile93
-rwxr-xr-xmcon/Makefile.SH378
-rw-r--r--mcon/NOTES174
-rw-r--r--mcon/README24
-rw-r--r--mcon/U/AAAAA.U46
-rw-r--r--mcon/U/Begin.U39
-rw-r--r--mcon/U/Checkcc.U135
-rw-r--r--mcon/U/Chk_MANI.U88
-rw-r--r--mcon/U/Chk_whoami.U25
-rw-r--r--mcon/U/Compile.U63
-rw-r--r--mcon/U/Config_h.U114
-rw-r--r--mcon/U/Config_sh.U110
-rw-r--r--mcon/U/Configdir.U28
-rw-r--r--mcon/U/Cppsym.U286
-rw-r--r--mcon/U/Cross.U349
-rw-r--r--mcon/U/Csym.U97
-rw-r--r--mcon/U/End.U27
-rw-r--r--mcon/U/Extract.U105
-rw-r--r--mcon/U/Extractall.U51
-rw-r--r--mcon/U/Filexp.U69
-rw-r--r--mcon/U/Findhdr.U126
-rw-r--r--mcon/U/Finish.U141
-rw-r--r--mcon/U/Getfile.U339
-rw-r--r--mcon/U/Guess.U228
-rw-r--r--mcon/U/Head.U282
-rw-r--r--mcon/U/Inhdr.U77
-rw-r--r--mcon/U/Init.U81
-rw-r--r--mcon/U/Inlibc.U64
-rw-r--r--mcon/U/Instruct.U116
-rw-r--r--mcon/U/Loc.U381
-rw-r--r--mcon/U/Loc_sed.U33
-rw-r--r--mcon/U/Magic_h.U43
-rw-r--r--mcon/U/MailAuthor.U192
-rw-r--r--mcon/U/MailList.U82
-rw-r--r--mcon/U/Mkdirp.U51
-rw-r--r--mcon/U/Mksymlinks.U90
-rw-r--r--mcon/U/Myinit.U26
-rw-r--r--mcon/U/Myread.U199
-rw-r--r--mcon/U/Nothing.U19
-rw-r--r--mcon/U/Null.U20
-rw-r--r--mcon/U/Obsol_h.U28
-rw-r--r--mcon/U/Obsol_sh.U27
-rw-r--r--mcon/U/Oldconfig.U687
-rw-r--r--mcon/U/Oldsym.U66
-rw-r--r--mcon/U/Options.U363
-rw-r--r--mcon/U/Prefixit.U68
-rw-r--r--mcon/U/Prefixup.U38
-rw-r--r--mcon/U/Rcs.U34
-rw-r--r--mcon/U/Setvar.U50
-rw-r--r--mcon/U/Signal.U271
-rw-r--r--mcon/U/Tr.U103
-rw-r--r--mcon/U/Typedef.U63
-rw-r--r--mcon/U/Unix.U64
-rw-r--r--mcon/U/Warn.U57
-rw-r--r--mcon/U/Warn_v7EXT.U34
-rw-r--r--mcon/U/Warn_v7ND.U33
-rw-r--r--mcon/U/Whoa.U51
-rw-r--r--mcon/U/abortsig.U79
-rw-r--r--mcon/U/active.U50
-rw-r--r--mcon/U/afs.U55
-rw-r--r--mcon/U/alignbytes.U64
-rw-r--r--mcon/U/archlib.U125
-rw-r--r--mcon/U/archname.U76
-rw-r--r--mcon/U/baserev.U22
-rw-r--r--mcon/U/basicshell.U47
-rw-r--r--mcon/U/bin.U88
-rw-r--r--mcon/U/bitpbyte.U74
-rw-r--r--mcon/U/byteorder.U99
-rw-r--r--mcon/U/cc.U58
-rw-r--r--mcon/U/ccflags.U403
-rw-r--r--mcon/U/cf_email.U58
-rw-r--r--mcon/U/cf_name.U72
-rw-r--r--mcon/U/cf_who.U62
-rw-r--r--mcon/U/charorder.U143
-rw-r--r--mcon/U/charsize.U58
-rw-r--r--mcon/U/contains.U43
-rw-r--r--mcon/U/cpp_stuff.U157
-rw-r--r--mcon/U/cpp_trad.U41
-rw-r--r--mcon/U/cppfilecom.U204
-rw-r--r--mcon/U/cppstdin.U249
-rw-r--r--mcon/U/d_NOFILE.U189
-rw-r--r--mcon/U/d_NeWS.U101
-rw-r--r--mcon/U/d_PORTAR.U79
-rw-r--r--mcon/U/d_SHM_MAC.U141
-rw-r--r--mcon/U/d_access.U74
-rw-r--r--mcon/U/d_alarm.U33
-rw-r--r--mcon/U/d_attribut.U64
-rw-r--r--mcon/U/d_bcmp.U44
-rw-r--r--mcon/U/d_bcopy.U44
-rw-r--r--mcon/U/d_brokstat.U75
-rw-r--r--mcon/U/d_bsdjmp.U86
-rw-r--r--mcon/U/d_byacc.U33
-rw-r--r--mcon/U/d_bzero.U44
-rw-r--r--mcon/U/d_casti32.U87
-rw-r--r--mcon/U/d_castneg.U143
-rw-r--r--mcon/U/d_cbrt.U32
-rw-r--r--mcon/U/d_charsprf.U52
-rw-r--r--mcon/U/d_chown.U33
-rw-r--r--mcon/U/d_chroot.U33
-rw-r--r--mcon/U/d_chsize.U32
-rw-r--r--mcon/U/d_ckeypad.U54
-rw-r--r--mcon/U/d_closedir.U107
-rw-r--r--mcon/U/d_const.U66
-rw-r--r--mcon/U/d_crypt.U76
-rw-r--r--mcon/U/d_csh.U62
-rw-r--r--mcon/U/d_ctermid.U31
-rw-r--r--mcon/U/d_cuserid.U34
-rw-r--r--mcon/U/d_dbl_dig.U61
-rw-r--r--mcon/U/d_debugging.U42
-rw-r--r--mcon/U/d_difftime.U33
-rw-r--r--mcon/U/d_dlerror.U46
-rw-r--r--mcon/U/d_dlopen.U45
-rw-r--r--mcon/U/d_dosuid.U169
-rw-r--r--mcon/U/d_drem.U35
-rw-r--r--mcon/U/d_dup2.U31
-rw-r--r--mcon/U/d_eofpipe.U93
-rw-r--r--mcon/U/d_euc2jis.U32
-rw-r--r--mcon/U/d_fchmod.U32
-rw-r--r--mcon/U/d_fchown.U32
-rw-r--r--mcon/U/d_fcntl.U31
-rw-r--r--mcon/U/d_fd_set.U138
-rw-r--r--mcon/U/d_ffs.U33
-rw-r--r--mcon/U/d_fgetpos.U31
-rw-r--r--mcon/U/d_flexfnam.U77
-rw-r--r--mcon/U/d_flock.U31
-rw-r--r--mcon/U/d_fmod.U34
-rw-r--r--mcon/U/d_fork.U33
-rw-r--r--mcon/U/d_fsetpos.U31
-rw-r--r--mcon/U/d_ftime.U78
-rw-r--r--mcon/U/d_ftrncate.U31
-rw-r--r--mcon/U/d_gconvert.U147
-rw-r--r--mcon/U/d_getgrps.U33
-rw-r--r--mcon/U/d_gethbynm.U32
-rw-r--r--mcon/U/d_gethent.U31
-rw-r--r--mcon/U/d_gethid.U31
-rw-r--r--mcon/U/d_gethname.U287
-rw-r--r--mcon/U/d_getlogin.U34
-rw-r--r--mcon/U/d_getopt.U31
-rw-r--r--mcon/U/d_getpagsz.U104
-rw-r--r--mcon/U/d_getpgid.U34
-rw-r--r--mcon/U/d_getpgrp.U108
-rw-r--r--mcon/U/d_getpgrp2.U32
-rw-r--r--mcon/U/d_getppid.U34
-rw-r--r--mcon/U/d_getprior.U31
-rw-r--r--mcon/U/d_getpwent.U40
-rw-r--r--mcon/U/d_getwd.U41
-rw-r--r--mcon/U/d_gnulibc.U98
-rw-r--r--mcon/U/d_group.U23
-rw-r--r--mcon/U/d_havetlib.U125
-rw-r--r--mcon/U/d_hidnet.U68
-rw-r--r--mcon/U/d_htonl.U88
-rw-r--r--mcon/U/d_inetaton.U34
-rw-r--r--mcon/U/d_inetd.U70
-rw-r--r--mcon/U/d_internet.U52
-rw-r--r--mcon/U/d_isascii.U57
-rw-r--r--mcon/U/d_itimer.U32
-rw-r--r--mcon/U/d_keepsig.U81
-rw-r--r--mcon/U/d_killpg.U33
-rw-r--r--mcon/U/d_link.U31
-rw-r--r--mcon/U/d_linuxstd.U55
-rw-r--r--mcon/U/d_locconv.U33
-rw-r--r--mcon/U/d_lockf.U33
-rw-r--r--mcon/U/d_lstat.U31
-rw-r--r--mcon/U/d_mblen.U34
-rw-r--r--mcon/U/d_mbstowcs.U32
-rw-r--r--mcon/U/d_mbtowc.U32
-rw-r--r--mcon/U/d_memalign.U29
-rw-r--r--mcon/U/d_memccpy.U33
-rw-r--r--mcon/U/d_memchr.U32
-rw-r--r--mcon/U/d_memcmp.U35
-rw-r--r--mcon/U/d_memcpy.U35
-rw-r--r--mcon/U/d_memmove.U34
-rw-r--r--mcon/U/d_memset.U35
-rw-r--r--mcon/U/d_mkdir.U33
-rw-r--r--mcon/U/d_mkfifo.U36
-rw-r--r--mcon/U/d_mktime.U33
-rw-r--r--mcon/U/d_mmap.U31
-rw-r--r--mcon/U/d_msem_lck.U28
-rw-r--r--mcon/U/d_msg.U45
-rw-r--r--mcon/U/d_msgctl.U31
-rw-r--r--mcon/U/d_msgget.U31
-rw-r--r--mcon/U/d_msgrcv.U31
-rw-r--r--mcon/U/d_msgsnd.U31
-rw-r--r--mcon/U/d_msync.U31
-rw-r--r--mcon/U/d_munmap.U31
-rw-r--r--mcon/U/d_newsadm.U72
-rw-r--r--mcon/U/d_nice.U33
-rw-r--r--mcon/U/d_nolnbuf.U99
-rw-r--r--mcon/U/d_normsig.U57
-rw-r--r--mcon/U/d_open3.U90
-rw-r--r--mcon/U/d_passwd.U23
-rw-r--r--mcon/U/d_pathconf.U55
-rw-r--r--mcon/U/d_pause.U34
-rw-r--r--mcon/U/d_perror.U44
-rw-r--r--mcon/U/d_pidcheck.U75
-rw-r--r--mcon/U/d_pipe.U34
-rw-r--r--mcon/U/d_poll.U36
-rw-r--r--mcon/U/d_popen.U31
-rw-r--r--mcon/U/d_portable.U71
-rw-r--r--mcon/U/d_pread.U29
-rw-r--r--mcon/U/d_preadv.U30
-rw-r--r--mcon/U/d_psignal.U31
-rw-r--r--mcon/U/d_pwrite.U29
-rw-r--r--mcon/U/d_pwritev.U30
-rw-r--r--mcon/U/d_raster.U57
-rw-r--r--mcon/U/d_rdchk.U33
-rw-r--r--mcon/U/d_readdir.U79
-rw-r--r--mcon/U/d_readlink.U34
-rw-r--r--mcon/U/d_regcmp.U80
-rw-r--r--mcon/U/d_rename.U33
-rw-r--r--mcon/U/d_rmdir.U32
-rw-r--r--mcon/U/d_rusage.U36
-rw-r--r--mcon/U/d_safebcpy.U124
-rw-r--r--mcon/U/d_safemcpy.U127
-rw-r--r--mcon/U/d_sanemcmp.U88
-rw-r--r--mcon/U/d_sbrk.U31
-rw-r--r--mcon/U/d_scandir.U31
-rw-r--r--mcon/U/d_scannl.U74
-rw-r--r--mcon/U/d_scorfl.U58
-rw-r--r--mcon/U/d_select.U33
-rw-r--r--mcon/U/d_sem.U45
-rw-r--r--mcon/U/d_semctl.U31
-rw-r--r--mcon/U/d_semget.U31
-rw-r--r--mcon/U/d_semop.U31
-rw-r--r--mcon/U/d_setegid.U32
-rw-r--r--mcon/U/d_seteuid.U32
-rw-r--r--mcon/U/d_setgrps.U33
-rw-r--r--mcon/U/d_setlnbuf.U36
-rw-r--r--mcon/U/d_setlocale.U33
-rw-r--r--mcon/U/d_setpgid.U37
-rw-r--r--mcon/U/d_setpgrp.U116
-rw-r--r--mcon/U/d_setpgrp2.U32
-rw-r--r--mcon/U/d_setprior.U31
-rw-r--r--mcon/U/d_setregid.U46
-rw-r--r--mcon/U/d_setreuid.U46
-rw-r--r--mcon/U/d_setrgid.U32
-rw-r--r--mcon/U/d_setruid.U32
-rw-r--r--mcon/U/d_setsid.U34
-rw-r--r--mcon/U/d_sgndchr.U59
-rw-r--r--mcon/U/d_shm.U45
-rw-r--r--mcon/U/d_shmat.U93
-rw-r--r--mcon/U/d_shmctl.U31
-rw-r--r--mcon/U/d_shmdt.U31
-rw-r--r--mcon/U/d_shmget.U31
-rw-r--r--mcon/U/d_sigaction.U61
-rw-r--r--mcon/U/d_sigblock.U31
-rw-r--r--mcon/U/d_sighold.U31
-rw-r--r--mcon/U/d_siglist.U39
-rw-r--r--mcon/U/d_sigsetjmp.U105
-rw-r--r--mcon/U/d_sigsetmk.U41
-rw-r--r--mcon/U/d_sigvec.U79
-rw-r--r--mcon/U/d_sjis2jis.U32
-rw-r--r--mcon/U/d_socket.U123
-rw-r--r--mcon/U/d_speedopt.U62
-rw-r--r--mcon/U/d_stat.U31
-rw-r--r--mcon/U/d_statblks.U46
-rw-r--r--mcon/U/d_stdstdio.U325
-rw-r--r--mcon/U/d_strccmp.U38
-rw-r--r--mcon/U/d_strchr.U95
-rw-r--r--mcon/U/d_strcoll.U33
-rw-r--r--mcon/U/d_strcspn.U32
-rw-r--r--mcon/U/d_strctcpy.U53
-rw-r--r--mcon/U/d_strdup.U32
-rw-r--r--mcon/U/d_strerror.U117
-rw-r--r--mcon/U/d_strftime.U31
-rw-r--r--mcon/U/d_strstr.U31
-rw-r--r--mcon/U/d_strtod.U34
-rw-r--r--mcon/U/d_strtok.U35
-rw-r--r--mcon/U/d_strtol.U32
-rw-r--r--mcon/U/d_strtoul.U34
-rw-r--r--mcon/U/d_strxfrm.U33
-rw-r--r--mcon/U/d_su_chown.U41
-rw-r--r--mcon/U/d_symlink.U32
-rw-r--r--mcon/U/d_syscall.U31
-rw-r--r--mcon/U/d_sysconf.U34
-rw-r--r--mcon/U/d_syslog.U44
-rw-r--r--mcon/U/d_system.U31
-rw-r--r--mcon/U/d_table.U34
-rw-r--r--mcon/U/d_tcgtpgrp.U34
-rw-r--r--mcon/U/d_tcstpgrp.U34
-rw-r--r--mcon/U/d_time.U66
-rw-r--r--mcon/U/d_times.U74
-rw-r--r--mcon/U/d_tminsys.U41
-rw-r--r--mcon/U/d_truncate.U31
-rw-r--r--mcon/U/d_tzmin.U53
-rw-r--r--mcon/U/d_tzname.U42
-rw-r--r--mcon/U/d_ulimit.U31
-rw-r--r--mcon/U/d_umask.U34
-rw-r--r--mcon/U/d_usendir.U79
-rw-r--r--mcon/U/d_usleep.U31
-rw-r--r--mcon/U/d_uwait.U123
-rw-r--r--mcon/U/d_vfork.U91
-rw-r--r--mcon/U/d_voidsig.U89
-rw-r--r--mcon/U/d_volatile.U74
-rw-r--r--mcon/U/d_vprintf.U81
-rw-r--r--mcon/U/d_wait3.U31
-rw-r--r--mcon/U/d_wait4.U30
-rw-r--r--mcon/U/d_waitpid.U31
-rw-r--r--mcon/U/d_wcstombs.U32
-rw-r--r--mcon/U/d_wctomb.U34
-rw-r--r--mcon/U/d_wifstat.U87
-rw-r--r--mcon/U/d_xdrs.U42
-rw-r--r--mcon/U/defeditor.U45
-rw-r--r--mcon/U/doublesize.U58
-rw-r--r--mcon/U/ebcdic.U58
-rw-r--r--mcon/U/errnolist.U106
-rw-r--r--mcon/U/etc.U42
-rw-r--r--mcon/U/filexp.U30
-rw-r--r--mcon/U/floatsize.U58
-rw-r--r--mcon/U/fpostype.U39
-rw-r--r--mcon/U/fpu.U73
-rw-r--r--mcon/U/gccvers.U117
-rw-r--r--mcon/U/gidtype.U61
-rw-r--r--mcon/U/groupstype.U63
-rw-r--r--mcon/U/h_fcntl.U23
-rw-r--r--mcon/U/h_sysfile.U23
-rw-r--r--mcon/U/i_arpainet.U31
-rw-r--r--mcon/U/i_db.U146
-rw-r--r--mcon/U/i_dbm.U79
-rw-r--r--mcon/U/i_dirent.U146
-rw-r--r--mcon/U/i_dld.U34
-rw-r--r--mcon/U/i_dlfcn.U34
-rw-r--r--mcon/U/i_fcntl.U61
-rw-r--r--mcon/U/i_float.U35
-rw-r--r--mcon/U/i_gdbm.U53
-rw-r--r--mcon/U/i_grp.U31
-rw-r--r--mcon/U/i_inttypes.U35
-rw-r--r--mcon/U/i_limits.U33
-rw-r--r--mcon/U/i_locale.U32
-rw-r--r--mcon/U/i_malloc.U31
-rw-r--r--mcon/U/i_math.U34
-rw-r--r--mcon/U/i_memory.U65
-rw-r--r--mcon/U/i_ndbm.U53
-rw-r--r--mcon/U/i_neterrno.U65
-rw-r--r--mcon/U/i_niin.U45
-rw-r--r--mcon/U/i_pwd.U162
-rw-r--r--mcon/U/i_regex.U35
-rw-r--r--mcon/U/i_sfio.U32
-rw-r--r--mcon/U/i_stddef.U32
-rw-r--r--mcon/U/i_stdlib.U32
-rw-r--r--mcon/U/i_string.U62
-rw-r--r--mcon/U/i_sysdir.U34
-rw-r--r--mcon/U/i_sysfile.U60
-rw-r--r--mcon/U/i_sysioctl.U202
-rw-r--r--mcon/U/i_sysmman.U34
-rw-r--r--mcon/U/i_sysndir.U31
-rw-r--r--mcon/U/i_sysparam.U31
-rw-r--r--mcon/U/i_sysresrc.U34
-rw-r--r--mcon/U/i_sysselct.U39
-rw-r--r--mcon/U/i_syssock.U32
-rw-r--r--mcon/U/i_sysstat.U32
-rw-r--r--mcon/U/i_systable.U32
-rw-r--r--mcon/U/i_systimeb.U55
-rw-r--r--mcon/U/i_systimes.U31
-rw-r--r--mcon/U/i_systwgcf.U31
-rw-r--r--mcon/U/i_systypes.U34
-rw-r--r--mcon/U/i_sysun.U35
-rw-r--r--mcon/U/i_syswait.U34
-rw-r--r--mcon/U/i_termio.U123
-rw-r--r--mcon/U/i_time.U171
-rw-r--r--mcon/U/i_unistd.U31
-rw-r--r--mcon/U/i_utime.U31
-rw-r--r--mcon/U/i_values.U35
-rw-r--r--mcon/U/i_varhdr.U164
-rw-r--r--mcon/U/i_vfork.U40
-rw-r--r--mcon/U/i_whoami.U35
-rw-r--r--mcon/U/inc.U39
-rw-r--r--mcon/U/install.U194
-rw-r--r--mcon/U/intsize.U124
-rw-r--r--mcon/U/ipc.U171
-rw-r--r--mcon/U/issymlink.U85
-rw-r--r--mcon/U/kernel.U63
-rw-r--r--mcon/U/lex.U67
-rw-r--r--mcon/U/lib.U54
-rw-r--r--mcon/U/libc.U405
-rw-r--r--mcon/U/libdbm.U47
-rw-r--r--mcon/U/libflex.U65
-rw-r--r--mcon/U/libnlist.U49
-rw-r--r--mcon/U/libnm.U45
-rw-r--r--mcon/U/libpth.U132
-rw-r--r--mcon/U/libs.U242
-rw-r--r--mcon/U/libyacc.U64
-rw-r--r--mcon/U/lintlib.U38
-rw-r--r--mcon/U/lns.U41
-rw-r--r--mcon/U/locdist.U174
-rw-r--r--mcon/U/longsize.U24
-rw-r--r--mcon/U/lseektype.U40
-rw-r--r--mcon/U/maildir.U41
-rw-r--r--mcon/U/mailer.U61
-rw-r--r--mcon/U/mailfile.U56
-rw-r--r--mcon/U/make.U60
-rw-r--r--mcon/U/mallocsrc.U171
-rw-r--r--mcon/U/man1dir.U147
-rw-r--r--mcon/U/man3dir.U158
-rw-r--r--mcon/U/manfmt.U118
-rw-r--r--mcon/U/mansrc.U150
-rw-r--r--mcon/U/mboxchar.U70
-rw-r--r--mcon/U/mkdep.U268
-rw-r--r--mcon/U/models.U214
-rw-r--r--mcon/U/modetype.U40
-rw-r--r--mcon/U/myhostname.U284
-rw-r--r--mcon/U/n.U45
-rw-r--r--mcon/U/nametype.U134
-rw-r--r--mcon/U/nblock_io.U254
-rw-r--r--mcon/U/newslevel.U53
-rw-r--r--mcon/U/newslib.U61
-rw-r--r--mcon/U/newsspool.U52
-rw-r--r--mcon/U/nis.U168
-rw-r--r--mcon/U/nlist_pfx.U135
-rw-r--r--mcon/U/orderlib.U95
-rw-r--r--mcon/U/orgname.U65
-rw-r--r--mcon/U/packadmin.U33
-rw-r--r--mcon/U/package.U56
-rw-r--r--mcon/U/pager.U59
-rw-r--r--mcon/U/patchlevel.U35
-rw-r--r--mcon/U/perlpath.U56
-rw-r--r--mcon/U/pidtype.U39
-rw-r--r--mcon/U/pkgsrc.U26
-rw-r--r--mcon/U/prefix.U80
-rw-r--r--mcon/U/prefshell.U60
-rw-r--r--mcon/U/privlib.U96
-rw-r--r--mcon/U/prototype.U118
-rw-r--r--mcon/U/ptrsize.U58
-rw-r--r--mcon/U/randbits.U83
-rw-r--r--mcon/U/randfunc.U164
-rw-r--r--mcon/U/rcs_branch.U43
-rw-r--r--mcon/U/registers.U103
-rw-r--r--mcon/U/rootid.U35
-rw-r--r--mcon/U/sbrksmart.U85
-rw-r--r--mcon/U/sbrktype.U44
-rw-r--r--mcon/U/scriptdir.U110
-rw-r--r--mcon/U/selecttype.U109
-rw-r--r--mcon/U/sh.U92
-rw-r--r--mcon/U/shm_for.U118
-rw-r--r--mcon/U/sig_name.U157
-rw-r--r--mcon/U/sitearch.U94
-rw-r--r--mcon/U/sitelib.U97
-rw-r--r--mcon/U/sizetype.U40
-rw-r--r--mcon/U/so.U50
-rw-r--r--mcon/U/sockopt.U88
-rw-r--r--mcon/U/spitshell.U107
-rw-r--r--mcon/U/src.U92
-rw-r--r--mcon/U/ssizetype.U91
-rw-r--r--mcon/U/startperl.U95
-rw-r--r--mcon/U/startsh.U50
-rw-r--r--mcon/U/stdchar.U40
-rw-r--r--mcon/U/sunscanf.U55
-rw-r--r--mcon/U/sysman.U50
-rw-r--r--mcon/U/trnl.U59
-rw-r--r--mcon/U/uidtype.U57
-rw-r--r--mcon/U/usenm.U144
-rw-r--r--mcon/U/usesocks.U46
-rw-r--r--mcon/U/usrinc.U93
-rw-r--r--mcon/U/vaproto.U65
-rw-r--r--mcon/U/voidflags.U168
-rw-r--r--mcon/U/warnflags.U55
-rw-r--r--mcon/U/yacc.U90
-rw-r--r--mcon/configure144
-rw-r--r--mcon/files/Internal.U20
-rw-r--r--mcon/files/README6
-rw-r--r--mcon/files/d_function.U31
-rw-r--r--mcon/files/dir.U47
-rw-r--r--mcon/files/file.U47
-rw-r--r--mcon/files/i_include.U32
-rw-r--r--mcon/files/keyword.U54
-rw-r--r--mcon/files/locate.U47
-rw-r--r--mcon/files/question.U58
-rw-r--r--mcon/files/rcshead.U15
-rw-r--r--mcon/files/shell.U68
-rw-r--r--mcon/files/type.U47
-rwxr-xr-xmcon/makegloss.SH217
-rw-r--r--mcon/man/Jmakefile24
-rwxr-xr-xmcon/man/Makefile.SH167
-rwxr-xr-xmcon/man/mconfig.SH2103
-rwxr-xr-xmcon/man/mlint.SH559
-rwxr-xr-xmcon/man/mxref.SH133
-rwxr-xr-xmcon/mconfig.SH182
-rwxr-xr-xmcon/mlint.SH136
-rwxr-xr-xmcon/mxref.SH146
-rw-r--r--mcon/pl/common.pl289
-rw-r--r--mcon/pl/configure.pl245
-rw-r--r--mcon/pl/cosmetic.pl114
-rw-r--r--mcon/pl/depend.pl138
-rw-r--r--mcon/pl/eval.pl300
-rw-r--r--mcon/pl/extract.pl109
-rw-r--r--mcon/pl/files.pl109
-rw-r--r--mcon/pl/gensym.pl22
-rw-r--r--mcon/pl/init.pl55
-rw-r--r--mcon/pl/lint.pl1411
-rw-r--r--mcon/pl/locate.pl153
-rw-r--r--mcon/pl/makefile.pl176
-rw-r--r--mcon/pl/obsolete.pl103
-rw-r--r--mcon/pl/order.pl42
-rw-r--r--mcon/pl/tsort.pl166
-rw-r--r--mcon/pl/wanted.pl263
-rw-r--r--mcon/pl/xref.pl67
-rw-r--r--mcon/pl/xwant.pl149
498 files changed, 41607 insertions, 0 deletions
diff --git a/mcon/INTRO b/mcon/INTRO
new file mode 100644
index 0000000..51f4417
--- /dev/null
+++ b/mcon/INTRO
@@ -0,0 +1,109 @@
+This is a quick introduction to metaconfig.
+
+Metaconfig is a combination of a methodology and a program that will
+help you write portable programs. It is well known that all UN*X
+systems are not the same. Instead of writing lots of #ifdef/#endif for
+each machine the program is ported on, it seems better to directly rely
+on the actual possibilities of the system, without having to consider
+whether it comes from HP or SUN. The idea is to write the program using
+some symbols, known by a "unit", for all the hardware- or kernel-
+specific parts of code. A metaconfig unit will automatically define the
+symbol or not, depending on the system. Source files are scanned by
+metaconfig and the necessary units are loaded and put into a shell
+script called Configure. Running the Configure script will
+automatically determine a suitable value for each symbol.
+
+How does a Configure script work ? It studies the environment it runs on
+by extracting names in the C library, by compiling some small sample C
+programs, and by asking questions when in doubt, always providing a
+computed default answer.
+
+Here is a small example.
+
+It is said in the glossary of the symbols that RENAME is defined if the
+rename routine is available to rename files. Without metaconfig, we
+could write (for each occurrence of a "rename" in the code):
+
+#if defined(HP-UX-7.0) || defined(SUN) || defined(BSD)
+ rename(old, new);
+#else
+ unlink(new);
+ link(old, new);
+ unlink(old);
+#endif
+
+With the help of metaconfig, we shall write (once !):
+
+#ifndef HAS_RENAME
+int rename(old, new)
+char *old, *new;
+{
+ (void) unlink(new);
+ if (-1 != link(old, new))
+ return unlink(old);
+ else
+ return -1;
+}
+#endif
+
+ ....
+
+ rename(old, new);
+
+
+And that's all. The Configure script will check whether `rename' is
+available on the target machine and accordingly define the RENAME
+symbol. It is even more powerful that it may appear on a first glance,
+because "rename" was not there on old SUNOS3 systems or HP-UX older than
+6.5 (for series 800) and 7.0 (for series 300). You cannot rely on the
+fact that the target machine has the latest OS release !
+
+Another problem is to determine whether a C program should include
+<time.h>, <sys/time.h> or <sys/time.h> with KERNEL defined. With
+metaconfig, you simply write:
+
+#ifdef I_TIME
+# include <time.h>
+#endif
+#ifdef I_SYS_TIME
+# include <sys/time.h>
+#endif
+#ifdef I_SYS_TIME_KERNEL
+# define KERNEL
+# include <sys/time.h>
+# undef KERNEL
+#endif
+
+and the Configure script will generate a small C program, compile it,
+and correctly define one of the three symbols I_TIME, I_SYS_TIME and
+I_SYS_TIME_KERNEL.
+
+Another kind of precious information can be collected by a Configure
+script. For instance, the symbol USE_STRUCT_COPY will be defined if the
+C compiler can copy structures. It is up to the programmer to use this
+information, of course. The symbol VOIDSIG will be defined if the
+system declares "void (*signal())()" instead of "int (*signal())()".
+Thus you can say:
+
+#ifdef VOIDSIG
+extern void (*signal())();
+#else
+extern int (*signal())();
+#endif
+
+and no suspicious warning will be emitted by the C compiler.
+
+Finally, Configure can help you in shell scripts or in makefile. By
+using a file called Makefile.SH, which will be run through a shell to
+produce a Makefile, you can use the variable substitution feature. The
+variable $ranlib will be set to 'ranlib' or to ': ' (null statement) in
+a makefile, which is useful for random libraries generation. Likewise,
+the variable $bin will hold the full path for installing binaries (a
+question will be issued by Configure).
+
+Needless to say, an initial amount of time must be spent before being
+able to use metaconfig. The proper symbols must be known, and the
+program must be prepared to deal with all the possible configurations.
+But likewise, it will adapt itself to a greater number of systems
+without any further source code modification.
+
diff --git a/mcon/Jmakefile b/mcon/Jmakefile
new file mode 100644
index 0000000..559ba87
--- /dev/null
+++ b/mcon/Jmakefile
@@ -0,0 +1,93 @@
+/*
+ * Jmakefile for metaconfig
+ */
+
+;# $Id: Jmakefile,v 3.0.1.4 1995/07/25 13:23:09 ram Exp ram $
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: Jmakefile,v $
+;# Revision 3.0.1.4 1995/07/25 13:23:09 ram
+;# patch56: installs the GNU configure-like front-end to Configure
+;#
+;# Revision 3.0.1.3 1994/01/24 13:42:29 ram
+;# patch16: added dependency generation stage
+;#
+;# Revision 3.0.1.2 1993/11/02 10:40:01 ram
+;# patch14: now invokes perload explicitely via perl executable
+;#
+;# Revision 3.0.1.1 1993/08/25 08:46:44 ram
+;# patch6: split unit installation to avoid shell command line overflow
+;#
+;# Revision 3.0 1993/08/18 12:04:40 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+
+SetSubdirs(man)
+AllTarget(Glossary)
+
+Glossary: makegloss
+ chmod +x makegloss
+ ./makegloss
+
+SimpleShellScriptTarget(makegloss)
+
+>PRIVLIB /* We need the privlib definition */
+>SCRIPTDIR /* As well as the script directory */
+
+MakeInstallDirectories($(PRIVLIB) $(PRIVLIB)/U)
+InstallNonExec(Glossary,$(PRIVLIB))
+InstallScript(makegloss,$(PRIVLIB))
+InstallScript(configure,$(PRIVLIB))
+
+/* Split install list to avoid make overflow */
+InstallMultipleFlags(U/[a-d]*.U,$(PRIVLIB)/U,-m 444)
+InstallMultipleFlags(U/[A-Ze-z]*.U,$(PRIVLIB)/U,-m 444)
+
+/*
+ * Build up dataloading versions of metalint, metaconfig and metaxref.
+ */
+
+#define SimpleDataloadTarget(file,datafile) @!\
+++BIN datafile @!\
+AllTarget(datafile file) @!\
+SimpleShellScriptTarget(file) @!\
+datafile: file @@\
+ perl $(TOP)/bin/perload -o file > $@ @@\
+ chmod +rx $@ @!\
+ @!\
+InstallScript(datafile,$(SCRIPTDIR))
+
+SimpleDataloadTarget(mconfig,metaconfig)
+SimpleDataloadTarget(mlint,metalint)
+SimpleDataloadTarget(mxref,metaxref)
+
+BINFILES = \
+|expand f!$(BIN)!
+ !f:^meta=m \
+-expand \\
+
+BINSH = \
+|expand f!$(BINFILES)!
+ !f.SH \
+-expand \\
+
+>SED
+>RM
+>MKDEP
+
+depend::
+ ($(SED) '/^# DO NOT DELETE/q' Makefile && \
+ grep '^\$$grep' $(BINSH) | \
+ $(SED) -e "s/^.*' \([^ ]*\) >>\([^ ]*\)/\2: \1/" \
+ ) > Makefile.new
+ cp Makefile Makefile.bak
+ cp Makefile.new Makefile
+ $(RM) Makefile.new
+
diff --git a/mcon/Makefile.SH b/mcon/Makefile.SH
new file mode 100755
index 0000000..cf4798e
--- /dev/null
+++ b/mcon/Makefile.SH
@@ -0,0 +1,378 @@
+: Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL55]
+: $X-Id: Jmake.tmpl,v 3.0.1.2 1995/01/11 14:50:21 ram Exp ram $
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+CURRENT=mcon
+DIR=`echo $CURRENT/ | sed -e 's/\.\///g'`
+echo "Extracting ${DIR}Makefile (with variable substitutions)"
+
+INSTALL=`echo $install | sed -e 's,\./i,\$(TOP)/i,'`
+INSTALLDIR=`echo $installdir | sed -e 's,\./i,\$(TOP)/i,'`
+DATE=`date`
+
+$spitshell >Makefile <<!GROK!THIS!
+########################################################################
+# Makefile generated from Makefile.SH on $DATE
+
+SHELL = /bin/sh
+JMAKE = jmake
+TOP = ..
+CURRENT = $CURRENT
+DIR = $DIR
+INSTALL = $INSTALL
+INSTALLDIR = $INSTALLDIR
+
+########################################################################
+# Parameters set by Configure -- edit config.sh if changes are needed
+
+CTAGS = ctags
+MAKE = make
+MKDEP = $mkdep \$(DPFLAGS) --
+MV = $mv
+PRIVLIB = $installprivlib
+RM = $rm -f
+SCRIPTDIR = $installscript
+SED = $sed
+
+########################################################################
+# Automatically generated parameters -- do not edit
+
+SUBDIRS = man
+BIN = metaconfig metalint metaxref
+
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+########################################################################
+# Jmake rules for building libraries, programs, scripts, and data files
+# $X-Id: Jmake.rules,v 3.0.1.3 1995/03/21 08:35:28 ram Exp ram $
+########################################################################
+# Force 'make depend' to be performed first -- do not edit
+
+.FORCE_DEPEND::
+
+all:: .FORCE_DEPEND
+
+########################################################################
+# Start of Jmakefile
+
+# $X-Id: Jmakefile,v 3.0.1.4 1995/07/25 13:23:09 ram Exp ram $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $X-Log: Jmakefile,v $
+# Revision 3.0.1.4 1995/07/25 13:23:09 ram
+# patch56: installs the GNU configure-like front-end to Configure
+#
+# Revision 3.0.1.3 1994/01/24 13:42:29 ram
+# patch16: added dependency generation stage
+#
+# Revision 3.0.1.2 1993/11/02 10:40:01 ram
+# patch14: now invokes perload explicitely via perl executable
+#
+# Revision 3.0.1.1 1993/08/25 08:46:44 ram
+# patch6: split unit installation to avoid shell command line overflow
+#
+# Revision 3.0 1993/08/18 12:04:40 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+all:: Glossary
+
+local_realclean::
+ $(RM) Glossary
+
+Glossary: makegloss
+ chmod +x makegloss
+ ./makegloss
+
+all:: makegloss
+
+local_realclean::
+ $(RM) makegloss
+
+makegloss: makegloss.SH
+ /bin/sh makegloss.SH
+
+
+install::
+ @for dir in $(PRIVLIB) $(PRIVLIB)/U; do \
+ case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ (set -x; test -d $$dir || $(INSTALLDIR) $$dir); \
+ done
+
+deinstall::
+ $(RM) -r $(PRIVLIB) $(PRIVLIB)/U
+
+install:: Glossary
+ $(INSTALL) -c -m 444 Glossary $(PRIVLIB)
+
+deinstall::
+ $(RM) $(PRIVLIB)/Glossary
+
+install:: makegloss
+ $(INSTALL) -c -m 555 makegloss $(PRIVLIB)
+
+deinstall::
+ $(RM) $(PRIVLIB)/makegloss
+
+install:: configure
+ $(INSTALL) -c -m 555 configure $(PRIVLIB)
+
+deinstall::
+ $(RM) $(PRIVLIB)/configure
+
+install:: U/[a-d]*.U
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for i in U/[a-d]*.U; do \
+ (set -x; $(INSTALL) -c -m 444 $$i $(PRIVLIB)/U); \
+ done
+
+deinstall::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for i in U/[a-d]*.U; do \
+ (set -x; $(RM) $(PRIVLIB)/U/$$i); \
+ done
+
+install:: U/[A-Ze-z]*.U
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for i in U/[A-Ze-z]*.U; do \
+ (set -x; $(INSTALL) -c -m 444 $$i $(PRIVLIB)/U); \
+ done
+
+deinstall::
+ @case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for i in U/[A-Ze-z]*.U; do \
+ (set -x; $(RM) $(PRIVLIB)/U/$$i); \
+ done
+
+all:: metaconfig mconfig
+
+local_realclean::
+ $(RM) metaconfig mconfig
+
+all:: mconfig
+
+local_realclean::
+ $(RM) mconfig
+
+mconfig: mconfig.SH
+ /bin/sh mconfig.SH
+
+metaconfig: mconfig
+ perl $(TOP)/bin/perload -o mconfig > $@
+ chmod +rx $@
+
+install:: metaconfig
+ $(INSTALL) -c -m 555 metaconfig $(SCRIPTDIR)
+
+deinstall::
+ $(RM) $(SCRIPTDIR)/metaconfig
+
+all:: metalint mlint
+
+local_realclean::
+ $(RM) metalint mlint
+
+all:: mlint
+
+local_realclean::
+ $(RM) mlint
+
+mlint: mlint.SH
+ /bin/sh mlint.SH
+
+metalint: mlint
+ perl $(TOP)/bin/perload -o mlint > $@
+ chmod +rx $@
+
+install:: metalint
+ $(INSTALL) -c -m 555 metalint $(SCRIPTDIR)
+
+deinstall::
+ $(RM) $(SCRIPTDIR)/metalint
+
+all:: metaxref mxref
+
+local_realclean::
+ $(RM) metaxref mxref
+
+all:: mxref
+
+local_realclean::
+ $(RM) mxref
+
+mxref: mxref.SH
+ /bin/sh mxref.SH
+
+metaxref: mxref
+ perl $(TOP)/bin/perload -o mxref > $@
+ chmod +rx $@
+
+install:: metaxref
+ $(INSTALL) -c -m 555 metaxref $(SCRIPTDIR)
+
+deinstall::
+ $(RM) $(SCRIPTDIR)/metaxref
+
+BINFILES = \
+ mconfig \
+ mlint \
+ mxref
+
+BINSH = \
+ mconfig.SH \
+ mlint.SH \
+ mxref.SH
+
+depend::
+ ($(SED) '/^# DO NOT DELETE/q' Makefile && \
+ grep '^\$$grep' $(BINSH) | \
+ $(SED) -e "s/^.*' \([^ ]*\) >>\([^ ]*\)/\2: \1/" \
+ ) > Makefile.new
+ cp Makefile Makefile.bak
+ cp Makefile.new Makefile
+ $(RM) Makefile.new
+
+########################################################################
+# Common rules for all Makefiles -- do not edit
+
+emptyrule::
+
+clean: sub_clean local_clean
+realclean: sub_realclean local_realclean
+clobber: sub_clobber local_clobber
+
+local_clean::
+ $(RM) core *~ *.o
+
+local_realclean:: local_clean
+
+local_clobber:: local_realclean
+ $(RM) Makefile config.sh
+
+Makefile.SH: Jmakefile
+ -@if test -f $(TOP)/.package; then \
+ if test -f Makefile.SH; then \
+ echo " $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~"; \
+ $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~; \
+ fi; \
+ echo " $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT)" ; \
+ $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT) ; \
+ else touch $@; exit 0; fi
+
+Makefile: Makefile.SH
+ /bin/sh Makefile.SH
+
+tags::
+ $(CTAGS) -w *.[ch]
+ $(CTAGS) -xw *.[ch] > tags
+
+local_clobber::
+ $(RM) tags
+
+########################################################################
+# Rules for building in sub-directories -- do not edit
+
+subdirs:
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS) ;\
+ do \
+ (cd $$i ; echo $(VERB) "in $(DIR)$$i..."; \
+ $(MAKE) $(MFLAGS) $(FLAGS) $(TARGET)); \
+ done
+
+install::
+ @$(MAKE) subdirs TARGET=install VERB="Installing" FLAGS=
+
+deinstall::
+ @$(MAKE) subdirs TARGET=deinstall VERB="Deinstalling" FLAGS=
+
+install.man::
+ @$(MAKE) subdirs TARGET=install.man VERB="Installing man pages" FLAGS=
+
+deinstall.man::
+ @$(MAKE) subdirs TARGET=deinstall.man VERB="Deinstalling man pages" FLAGS=
+
+sub_clean::
+ @$(MAKE) subdirs TARGET=clean VERB="Cleaning" FLAGS=
+ @echo "Back to $(CURRENT) for "clean...
+
+sub_realclean::
+ @$(MAKE) subdirs TARGET=realclean VERB="Real cleaning" FLAGS=
+ @echo "Back to $(CURRENT) for "realclean...
+
+sub_clobber::
+ @$(MAKE) subdirs TARGET=clobber VERB="Clobbering" FLAGS=
+ @echo "Back to $(CURRENT) for "clobber...
+
+tag::
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS) ;\
+ do \
+ (cd $$i ; echo "Tagging" "in $(DIR)$$i..."; \
+ $(MAKE) $(MFLAGS) tag); \
+ done
+
+Makefiles::
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS);\
+ do \
+ echo "Making "Makefiles" in $(DIR)$$i..."; \
+ (cd $$i || exit 1; \
+ if test ! -f Makefile; then /bin/sh Makefile.SH; fi; \
+ $(MAKE) $(MFLAGS) Makefiles) \
+ done
+
+Makefiles.SH:: Makefile.SH
+ @case '${MFLAGS}' in *[ik]*) set +e;; esac; \
+ for i in $(SUBDIRS);\
+ do \
+ case "$(DIR)$$i/" in \
+ */*/*/*/) newtop=../../../..;; \
+ */*/*/) newtop=../../..;; \
+ */*/) newtop=../..;; \
+ */) newtop=..;; \
+ esac; \
+ case "$(TOP)" in \
+ /*) newtop="$(TOP)" ;; \
+ esac; \
+ echo "Making Makefiles.SH in $(DIR)$$i..."; \
+ (cd $$i || exit 1; $(MAKE) $(MFLAGS) -f ../Makefile \
+ Makefile TOP=$$newtop CURRENT=$(DIR)$$i;\
+ $(MAKE) $(MFLAGS) Makefiles.SH) \
+ done
+
+all::
+ @$(MAKE) subdirs TARGET=all VERB="Making all" FLAGS=
+
+########################################################################
+# Dependencies generated by make depend
+# DO NOT DELETE THIS LINE -- make depend relies on it
+
+# Put nothing here or make depend will gobble it up
+.FORCE_DEPEND::
+ @echo "You must run 'make depend' in $(TOP) first."; exit 1
+!NO!SUBS!
+chmod 644 Makefile
+$eunicefix Makefile
+
diff --git a/mcon/NOTES b/mcon/NOTES
new file mode 100644
index 0000000..b6762e0
--- /dev/null
+++ b/mcon/NOTES
@@ -0,0 +1,174 @@
+This file shortly documents the built-in interpreter and other new
+features from metaconfig.
+
+The notion of "conditional unit" has been added. In the ?MAKE: line,
+each unit whose name begins with a "+" will not be loaded in the
+Configure script unless its exact value is a mandatory. The default
+value specified in ?DEF: will be used instead. If no ?DEF: line is
+found, then the symbol is initialized with a null default value.
+
+In the config.h.SH file, only the necessary symbols are loaded. Note
+that the format in ?H: line has changed. It is no longer necessary to
+write ?H:?%1: to get a line included in config.h. First of all, the %1
+symbol is not defined any more. Secondly, the unit's name is now %< and
+it does not matter whether the name appears first in the ?MAKE: line or
+not. Lastly, metaconfig can guess for itself whether to include a
+symbol or not.
+
+Sometimes, it is necessary to force a given value, because metaconfig is
+not smart enough to guess 100% of the time. See voidflags.U for an
+example (look at the ?C: and ?H: lines and read the comments).
+
+The Myread.U unit changed. It is now able to do variable substitutions,
+and it sets the prompt correctly if there is no supplied default. Thus,
+instead of the old:
+
+ dflt=y
+ rp="Question? [$dflt]"
+ $echo $n "$rp $c"
+ . myread
+
+you must now write:
+
+ dflt=y
+ rp='Question?'
+ . myread
+
+and 'myread' will take care of echoing the question with the default
+put in square brakets.
+
+Likewise, question asking for filenames or pathnames may now use the Getfile.U
+unit to take care of all the burden. The presetting is the same as for myread
+and the answer is finally held in $ans. But the variable $fn must be set to
+indicate the type of file and enable/disable some of the sanity checks. See
+leading comments in Getfile.U. Here is a simple example to locate the active
+file:
+
+ dflt='~news/lib'
+ fn='l~:active'
+ rp='Where is the active file?'
+ . getfile
+ active="$ans"
+
+The user may answer the question by using ~substitution and giving only the
+directory where the active file is located (in which case getfile will try
+to locate a file named 'active' in that directory). A full path may also be
+given of course, if the basename of the file is not 'active'.
+
+The units are now filtered by a built-in interpreter before getting
+loaded in Configure. That way, a Configure script can be more or less
+tuned. See d_gethname.U for a complex example.
+
+All the interpreter commands start with a leading '@'. Possible
+commands include:
+
+o if/elsif/else/end is the traditional conditional construct.
+o define <symbol> tells metaconfig the <symbol> is to be defined.
+
+Expressions in conditional constructs can include the &&, || and !
+operator with same meaning as in the shell. Backslash at the end of a
+line stands for the continuation character. All the symbols in the
+expression stands for themselves, and their value is true if they are
+defined/wanted and false otherwise.
+
+It is possible to include shell and perl test. All the text enclosed in
+single brackets as {<text>} is expanded in a shell as
+
+ if <text> >/dev/null 2>&1; then exit 0; else exit 1; fi
+
+whereas text in double brackets as {{<text>}} is expanded in perl as
+
+ if (<text> {exit 0;} else {exit 1;}
+
+and the exit status is used in the standard way to get a boolean value
+(i.e 0 is true and everything else is false). See Oldconfig.U for an
+example.
+
+Metaconfig's interpreter has standard C operator priority, but you may
+force the evaluation order with parenthesis. A simple error recovery
+attempt is made, so that you should get meaningful error messages.
+
+The simple test ?sym: means "keep the remaining of the line iff the
+symbol is defined" and %sym: is the same for non-definedness.
+
+Some special symbols may be put in a unit and will get expanded,
+provided the ?MAKE: command line is 'wipe' and not 'add'. Here are the
+available symbols:
+
+ <PACKAGENAME> is the name $package as found in .package
+ <MAINTLOC> is the $maintloc variable as found in .pakcage
+ <VERSION> is metaconfig's version number
+ <PATCHLEVEL> is metaconfig's patchlevel
+ <DATE> is the current frozen date as given by `date`
+
+A 'wipe'ed unit is passed through the interpreter too.
+
+It is also possible to declare a symbol obsolete. A warning message
+will be issued if the symbol is used and the Glossary mentions it.
+the "Obsolete" clause. The syntax is:
+
+ ?C:symbol (obsolete list):
+ ?S:symbol (obsolete list):
+
+If metaconfig is used with the -o option, it will generate code to remap
+those old symbols to the new ones, so the old code does not have to be changed
+right away. If you do not use -o, the Obsolete file will still be generated
+to warn you about obsolete symbols but no maping will be done.
+
+The new ?W: line can be use to tie up the destiny of some symbols. The syntax
+is:
+
+ ?W:shell symbols list:C symbol list
+
+and the symbols in the shell list will be defined if one of the C symbols is.
+For instance, unit d_const.U uses the following:
+
+ ?W:%<:const
+
+so that any 'const' usage in the C code will have %< (the unit name) handled
+as a wanted symbol. In particular, this has the interesting side effect of
+loading the unit into Configure when the 'const' keyword is used.
+
+This shell symbol list part may be left empty. For example unit i_time.U uses:
+
+ ?W::timezone
+
+for its side effect: the symbol 'timezone' may now be part of the interpreter
+tests to conditionally load some code into Configure when struct timezone is
+used.
+
+C symbol aliasing can be used to let metaconfig know that the symbol comment
+is to be loaded in config_h.SH even when the main symbol is not used in C.
+For instance, d_const.U writes:
+
+ ?C:HASCONST ~ %<:
+
+so that the HASCONST hype is loaded iff the unit (%<) is wanted. This is why
+the ?H: lines are also explicitely tied to the wanted-ness of the d_const
+symbol, by writing:
+
+ ?H:?%<:#$d_const HASCONST /**/
+ ?H:?%<:#ifndef HASCONST
+ ?H:?%<:#define const
+ ?H:?%<:#endif
+ ?H:.
+
+because we want all those lines to appear in config_h.SH as soon as the d_const
+unit is loaded into Configure.
+
+Because of the new -s (silent) option of Configure, the important messages which
+are to appear even in silent mode must be written on file descriptor #4. Others
+will simply not be echoed under -s. Note that all the questions and default
+answers are written on #4. You should write:
+
+ echo " "
+ echo "Checking to see if......" >&4
+ .....
+ echo "Yes, it does"
+
+which will have the traditional behaviour unless -s is used, in which case only
+the line
+
+ Checking to see if.....
+
+will echo on the terminal.
diff --git a/mcon/README b/mcon/README
new file mode 100644
index 0000000..0a6b26e
--- /dev/null
+++ b/mcon/README
@@ -0,0 +1,24 @@
+This is the root directory for metaconfig.
+
+If you are new to metaconfig, you may wish to have a look at the INTRO
+file, which gives a quick introduction.
+
+The metaconfig you have here is a modified version of Larry Wall's 2.0
+release. The units themselves have been ripped off from some Configure
+scripts (perl 4.0, elm 2.3). They all carry a copyright from me, which
+is not true, but it was automatically produced and I had no time yet to
+set the proper copyrights for each unit.
+
+Although metaconfig, as being part of dist, is covered by the Artistic
+License, a Configure script is not copyrighted and belongs to the
+public domain. Units can be copyrighted, and credits for each unit may
+appear in the generated Configure script, at the author's request.
+
+The manual page for metaconfig is not up-to-date. The built-in
+interpreter and the changes are documented in NOTES.
+
+The units that come from dist 2.0 need to be changed. A script should be
+provided in the final release to do an automatic conversion, which will
+be fine 90% of the time. If you want to see how new features can be used,
+I would recommend you to have a look at Oldconfig.U, d_gethname.U and
+voidflags.U.
diff --git a/mcon/U/AAAAA.U b/mcon/U/AAAAA.U
new file mode 100644
index 0000000..b2f6211
--- /dev/null
+++ b/mcon/U/AAAAA.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: AAAAA.U,v $
+?RCS: Revision 3.0.1.4 1994/06/20 06:50:26 ram
+?RCS: patch30: changes from Jarkko Hietaniemi are tagged with JHI
+?RCS:
+?RCS: Revision 3.0.1.3 1994/05/06 14:01:39 ram
+?RCS: patch23: initials for Wayne Davison are now WED
+?RCS: patch23: added initials for new unit contributor Andy Dougherty
+?RCS:
+?RCS: Revision 3.0.1.2 1994/01/24 14:01:09 ram
+?RCS: patch16: make metalint shut up on special unit definition for All target
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 15:43:57 ram
+?RCS: patch10: documents initials used for Wayne Davison's contributions
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:44 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: The purpose of this file is to supply the head of the Makefile created
+?X: by metaconfig. For this reason it must be first in alphabetical order.
+?X: The leading '+' in front of the unit name is a hint for metalint, since
+?X: the use of that special unit name as a "made" unit is legitimate here.
+?X:
+?MAKE:+All: Finish
+?X:
+?X: Throughout the units, the following initials are used to identify comments:
+?X:
+?X: HMS: Harlan Stenn
+?X: RAM: Raphael Manfredi
+?X: WED: Wayne Davison (was WAD by mistake--RAM)
+?X: ADO: Andy Dougherty
+?X: JHI: Jarkko Hietaniemi
+?X:
+?X: Agreed, this is a weird place to document it, but I couldn't find a better
+?X: place to do so. I've bet on the curiosity of users, who would probably
+?X: want to know what's in this strangely-named file--RAM.
diff --git a/mcon/U/Begin.U b/mcon/U/Begin.U
new file mode 100644
index 0000000..c05d239
--- /dev/null
+++ b/mcon/U/Begin.U
@@ -0,0 +1,39 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Begin.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 14:56:35 ram
+?RCS: patch61: added Extractall dependency
+?RCS:
+?RCS: Revision 3.0.1.2 1995/01/30 14:25:08 ram
+?RCS: patch49: avoid an empty rmlist: systems might choke on it (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/31 09:32:20 ram
+?RCS: patch44: created
+?RCS:
+?X:
+?X: This file comes after option processing had been done and after all
+?X: the default values have been set up. It marks the beginning of questions.
+?X: It is important that Options be listed *after* Myinit to ensure that the
+?X: default initializations performed by Init and Myinit will not clobber
+?X: any setting done on the command line via -D or -U.
+?X:
+?MAKE:Begin: Myinit Options package Extractall
+?MAKE: -pick add $@ %<
+: Eunice requires " " instead of "", can you believe it
+echo " "
+: Here we go...
+echo "Beginning of configuration questions for $package."
+
+?X: Make sure the rm below is given a non-empty list for some systems.
+?X: This is run only when within the UU directory, hence we can safely
+?X: attempt to rm a non-existent 'X' file...
+trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
+
diff --git a/mcon/U/Checkcc.U b/mcon/U/Checkcc.U
new file mode 100644
index 0000000..ac1b513
--- /dev/null
+++ b/mcon/U/Checkcc.U
@@ -0,0 +1,135 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 2000, Jarkko Hietaniemi
+?RCS:
+?X:
+?X: This unit produces a bit of shell code that must be dotted in order
+?X: to make quick check on whether the current C compiler is working.
+?X:
+?MAKE:Checkcc ccname ccversion: Myread Warn startsh cat contains test
+?MAKE: -pick add $@ %<
+?S:ccname:
+?S: This can set either by hints files or by Configure. If using
+?S: gcc, this is gcc, and if not, usually equal to cc, unimpressive, no?
+?S: Some platforms, however, make good use of this by storing the
+?S: flavor of the C compiler being used here. For example if using
+?S: the Sun WorkShop suite, ccname will be 'workshop'.
+?S:.
+?S:ccversion:
+?S: This can set either by hints files or by Configure. If using
+?S: a (non-gcc) vendor cc, this variable may contain a version for
+?S: the compiler.
+?S:.
+?F:./checkcc ./trygcc !checktmp
+?V:despair
+?T:trygcc
+?LINT:extern cc rm ccflags ldflags
+?LINT:change cc ccflags
+?LINT:usefile checktmp
+?INIT:ccname=''
+?INIT:ccversion=''
+: generate the trygcc script for later perusal
+cat <<EOS >trygcc
+$startsh
+EOS
+cat <<'EOSC' >>trygcc
+case "$cc" in
+'') ;;
+*) $rm -f try try.*
+ $cat >try.c <<EOM
+int main(int argc, char *argv[]) {
+ (void) argc;
+ (void) argv;
+ return 0;
+}
+EOM
+ if $cc -o try $ccflags $ldflags try.c; then
+ :
+ else
+ echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
+ despair=yes
+ trygcc=yes
+ case "$cc" in
+ *gcc*) trygcc=no ;;
+ esac
+ case "`$cc -v -c try.c 2>&1`" in
+ *gcc*) trygcc=no ;;
+ esac
+ if $test X"$trygcc" = Xyes; then
+ if gcc -o try -c try.c; then
+ echo " "
+ echo "You seem to have a working gcc, though." >&4
+ rp="Would you like to use it?"
+ dflt=y
+ if $test -f myread; then
+ . ./myread
+ else
+ if $test -f UU/myread; then
+ . ./UU/myread
+ else
+ echo "Cannot find myread, sorry. Aborting." >&2
+ exit 1
+ fi
+ fi
+ case "$ans" in
+ [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no;
+?X: Look whether we have 'call-back units' generated by hints that would
+?X: seemingly affect the compiling environment.
+ $cat *.cbu >checktmp 2>/dev/null
+ if $contains ccflags checktmp >/dev/null; then
+ ./warn <<EOM
+Any previous setting of the C compiler flags has been lost.
+It may be necessary to pass -Dcc=gcc to Configure right away.
+EOM
+ fi;;
+ esac
+ fi
+ fi
+ fi
+ $rm -f try try.*
+ ;;
+esac
+EOSC
+
+: generate the checkcc script for later perusal
+cat <<EOS >checkcc
+$startsh
+EOS
+cat <<'EOSC' >>checkcc
+case "$cc" in
+'') ;;
+*) $rm -f try try.*
+ $cat >try.c <<EOM
+int main(int argc, char *argv[]) {
+ (void) argc;
+ (void) argv;
+ return 0;
+}
+EOM
+ if $cc -o try $ccflags $ldflags try.c; then
+ :
+ else
+ if $test X"$despair" = Xyes; then
+ echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
+ fi
+ $cat >&4 <<EOM
+You need to find a working C compiler.
+Either (purchase and) install the C compiler supplied by your OS vendor,
+or for a free C compiler try http://gcc.gnu.org/
+I cannot continue any further, aborting.
+EOM
+ exit 1
+ fi
+ $rm -f try try.*
+ ;;
+esac
+EOSC
+
diff --git a/mcon/U/Chk_MANI.U b/mcon/U/Chk_MANI.U
new file mode 100644
index 0000000..121ce9d
--- /dev/null
+++ b/mcon/U/Chk_MANI.U
@@ -0,0 +1,88 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Chk_MANI.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 14:57:25 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/31 09:33:14 ram
+?RCS: patch44: now lists Begin instead of Myinit in its dependencies
+?RCS: patch44: leading comment now explains how this unit is included
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:45 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit checks the package by making sure every file listed in MANIFEST
+?X: is present. It is systematically "included" via the Finish unit (which
+?X: is always present in every Configure script), although it may result in
+?X: an empty inclusion when no MANIFEST is present.
+?X:
+?MAKE:Chk_MANI: Begin c n rsrc
+?MAKE: -pick wipe $@ %<
+?T:filelist ans tmppwd
+?X: This check happens at metaconfig-time, so it's ok to hard-code the path.
+@if {test -f ../MANIFEST}
+: Now test for existence of everything in MANIFEST
+echo " "
+if test -f "$rsrc/MANIFEST"; then
+ echo "First let's make sure your kit is complete. Checking..." >&4
+?X:
+?X: Files spelled uppercased and beginning with PACK are produced by the
+?X: shell archive builder and may be removed by the user. Usually, they are
+?X: not listed in the MANIFEST file, but you never know...
+?X:
+?X: "split -l" is the new way of running a split, but we also try the older way
+?X:
+ awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \
+ (split -l 50 2>/dev/null || split -50)
+ rm -f missing
+ tmppwd=`pwd`
+ for filelist in x??; do
+ (cd "$rsrc"; ls `cat "$tmppwd/$filelist"` \
+ >/dev/null 2>>"$tmppwd/missing")
+ done
+ if test -s missing; then
+ cat missing >&4
+ cat >&4 <<'EOM'
+
+THIS PACKAGE SEEMS TO BE INCOMPLETE.
+
+You have the option of continuing the configuration process, despite the
+distinct possibility that your kit is damaged, by typing 'y'es. If you
+do, don't blame me if something goes wrong. I advise you to type 'n'o
+and contact the author (<MAINTLOC>).
+
+EOM
+?X: Can't use $echo at this early stage
+ echo $n "Continue? [n] $c" >&4
+ read ans
+ case "$ans" in
+ y*)
+ echo "Continuing..." >&4
+ rm -f missing
+ ;;
+ *)
+?X:
+?X: Use kill and not exit, so that the trap gets executed to clean up
+?X:
+ echo "ABORTING..." >&4
+ kill $$
+ ;;
+ esac
+ else
+ echo "Looks good..."
+ fi
+else
+ echo "There is no MANIFEST file. I hope your kit is complete !"
+fi
+rm -f missing x??
+
+@end
diff --git a/mcon/U/Chk_whoami.U b/mcon/U/Chk_whoami.U
new file mode 100644
index 0000000..a18ae1d
--- /dev/null
+++ b/mcon/U/Chk_whoami.U
@@ -0,0 +1,25 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Chk_whoami.U,v $
+?RCS: Revision 3.0 1993/08/18 12:04:46 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit makes sure we don't try to include whoami.h if uname() exists.
+?X:
+?MAKE:Chk_whoami: d_uname i_whoami
+?MAKE: -pick add $@ %<
+?LINT:change i_whoami
+: weed out incompatibilities
+case "$d_uname" in
+ "$define") i_whoami="$undef" ;;
+esac
+
diff --git a/mcon/U/Compile.U b/mcon/U/Compile.U
new file mode 100644
index 0000000..a8af2e0
--- /dev/null
+++ b/mcon/U/Compile.U
@@ -0,0 +1,63 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 1998 Andy Dougherty
+?RCS:
+?RCS: You may distribute under the terms of either the GNU General Public
+?RCS: License or the Artistic License, as specified in the README file.
+?RCS:
+?RCS:
+?X:
+?X: This unit is just a quick shorthand for the compile command
+?X: to be used in all the other metaconfig units.
+?X:
+?MAKE:Compile: +cc +optimize +ccflags +ldflags +libs
+?MAKE: -pick add $@ %<
+?LINT:define compile compile_ok
+?V:compile compile_ok mc_file
+?S:compile:
+?S: This shell variable is used internally by Configure to provide
+?S: a convenient shorthand for the typical compile command, namely
+?S: $cc $optimize $ccflags $ldflags -o $1 $1.c $libs > /dev/null 2>&1
+?S: Note that the output filename does _not_ include the _exe
+?S: extension. Instead we assume that the linker will be
+?S: "helpful" and automatically appending the correct suffix.
+?S: OS/2 users will apparently need to supply the -Zexe flag to
+?S: get this behavior.
+?S:
+?S: To use this variable, say something like:
+?S: echo 'int main() { exit(0); }' > try.c
+?S: set try
+?S: if eval $compile; then
+?S: echo "success" # and do whatever . . .
+?S: else
+?S: echo "failure" # and do whatever . . .
+?S: fi
+?S: To add extra flags cc flags (e.g. -DWHATEVER) just put them
+?S: in $*, e.g.
+?S: set try -DTRY_THIS_FLAG
+?S:.
+?S:compile_ok:
+?S: This shell variable is used internally by Configure to provide
+?S: a convenient shorthand for the typical compile command that you
+?S: expect to work ok. It is the same as $compile, except we
+?S: deliberately let the user see any error messages.
+?S:.
+: define a shorthand compile call
+compile='
+mc_file=$1;
+shift;
+$cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
+: define a shorthand compile call for compilations that should be ok.
+compile_ok='
+mc_file=$1;
+shift;
+$cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
+
diff --git a/mcon/U/Config_h.U b/mcon/U/Config_h.U
new file mode 100644
index 0000000..04336c2
--- /dev/null
+++ b/mcon/U/Config_h.U
@@ -0,0 +1,114 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Config_h.U,v $
+?RCS: Revision 3.0.1.5 1997/02/28 14:57:43 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0.1.4 1995/09/25 09:10:49 ram
+?RCS: patch59: commented the purpose of the #un-def directive
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/30 14:25:39 ram
+?RCS: patch49: typo fixes in leading config.h comment (WED)
+?RCS:
+?RCS: Revision 3.0.1.2 1993/08/24 12:13:20 ram
+?RCS: patch3: added TOP as a local shell temporary variable
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/19 06:42:20 ram
+?RCS: patch1: leading config.sh searching was not aborting properly
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:47 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This file ends up producing the config_h.SH script, which is run to produce
+?X: the config.h file. The file ./.Config_h below contains all the ?H: lines
+?X: extracted out of all the units. Metaconfig itself adds the !GROK!THIS!.
+?X: Note that this code isn't included into Configure, but must be shipped with.
+?X:
+?X: For those who wish to know why the file is config_h.SH instead of the more
+?X: natural config.h.SH, well... it is to support systems like MS-DOG. Only one
+?X: 'dot' is allowed within the file name, as it is part of the "extension" of
+?X: the file. MS-DOG will not let you have two 'dots' because that would mean
+?X: two "extensions".
+?X:
+?MAKE:Config_h: Id End Config_sh Obsol_h myuname cf_time cf_by package src
+?MAKE: -pick c_h_weed $@ %<
+?MAKE: -pick c_h_weed $@ ./Config_h
+?MAKE: -pick c_h_weed $@ ./Obsol_h
+?T:CONFIG TOP
+?LINT:unclosed !GROK!THIS!
+?LINT:extern CONFIG_H CONFIG_SH
+?LINT:change CONFIG_H CONFIG_SH
+?LINT:nocomment
+case "$CONFIG_SH" in
+'') CONFIG_SH=config.sh;;
+esac
+case "$CONFIG_H" in
+'') CONFIG_H=config.h;;
+esac
+case $CONFIG in
+'')
+ if test -f $CONFIG_SH; then TOP=.;
+ elif test -f ../$CONFIG_SH; then TOP=..;
+ elif test -f ../../$CONFIG_SH; then TOP=../..;
+ elif test -f ../../../$CONFIG_SH; then TOP=../../..;
+ elif test -f ../../../../$CONFIG_SH; then TOP=../../../..;
+ else
+ echo "Can't find $CONFIG_SH."; exit 1
+ fi
+ . $TOP/$CONFIG_SH
+ ;;
+esac
+?X: Make sure we are in the directory where the .SH file is located.
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting $CONFIG_H (with variable substitutions)"
+?X:
+?X: Since we unconditionally translate leading #undef into /*#define, we're
+?X: stuck when we really want to have a #undef in config.h. That's why there
+?X: is provision here for #un-def, which is translated back into #undef after
+?X: all original #undef have been processed.
+?X:
+?X: Previously, we changed all
+?X: #undef FOO /**/
+?X: into
+?X: /*#define FOO /**/
+?X: The xlc compiler (available on IBM's AIX) complains that this is
+?X: an illegal attempt to write a nested comment, and warns against it.
+?X: There's apparently no way to shut the compiler up, either.
+?X: This sed command from Hallvard B Furuseth <h.b.furuseth@usit.uio.no>
+?X: changes it to
+?X: /*#define FOO / **/
+sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un-def!#undef!'
+/*
+ * This file was produced by running the config_h.SH script, which
+ * gets its values from $CONFIG_SH, which is generally produced by
+ * running Configure.
+ *
+ * Feel free to modify any of this as the need arises. Note, however,
+ * that running config_h.SH again will wipe out any changes you've made.
+ * For a more permanent change edit $CONFIG_SH and rerun config_h.SH.
+ *
+ * \$Id$
+ */
+
+/*
+ * Package name : $package
+ * Source directory : $src
+ * Configuration time: $cf_time
+ * Configured by : $cf_by
+ * Target system : $myuname
+ */
+
+#ifndef _config_h_
+#define _config_h_
+
diff --git a/mcon/U/Config_sh.U b/mcon/U/Config_sh.U
new file mode 100644
index 0000000..3d71a2e
--- /dev/null
+++ b/mcon/U/Config_sh.U
@@ -0,0 +1,110 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Config_sh.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 14:57:53 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0.1.2 1995/01/11 14:53:31 ram
+?RCS: patch45: moved path stripping from d_portable.U to end of Configure
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 15:50:37 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:48 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit ends up producing the config.sh script, which contains all the
+?X: definitions figured out by Configure. The add.Config_sh command knows
+?X: which variables need to be remembered. It also adds the EOT (ends the
+?X: here document redirection with variable substitution).
+?X:
+?MAKE:Config_sh: cf_time cf_by test spitshell startsh myuname Myread \
+ End Obsol_sh Loc +d_portable package src cat sed
+?MAKE: -pick add.Config_sh $@ %<
+?MAKE: -pick add $@ ./Obsol_sh
+?MAKE: -pick close.Config_sh $@ %<
+?F:!config.over !config.arch
+?T:file sfile xsed
+?LINT:unclosed EOT
+: back to where it started
+if test -d ../UU; then
+ cd ..
+fi
+
+: configuration may be unconditionally patched via a 'config.arch' file
+if $test -f config.arch; then
+ echo "I see a config.arch file, loading it." >&4
+ . ./config.arch
+fi
+
+: configuration may be patched via a 'config.over' file
+if $test -f config.over; then
+ echo " "
+ dflt=y
+ rp='I see a config.over file. Do you wish to load it?'
+ . UU/myread
+ case "$ans" in
+ n*) echo "OK, I'll ignore it.";;
+ *) . ./config.over
+ echo "Configuration override changes have been loaded."
+ ;;
+ esac
+fi
+
+@if d_portable
+: in case they want portability, strip down executable paths
+?X:
+?X: Strip down paths in located executables. For each file, e.g. vi, there
+?X: is a $vi variable whose value is for instance '/usr/bin/vi'. By resetting
+?X: $vi to 'vi', we rely on the PATH variable to locate the executable...
+?X: In order to allow vi='/usr/bin/nvi' which will strip down to vi='nvi',
+?X: we can't just say 'eval $file="\$file"', we have to recourse to sed.
+?X: We don't use basename since it is less portable than sed.
+?X:
+case "$d_portable" in
+"$define")
+ echo " "
+ echo "Stripping down executable paths..." >&4
+ xsed=$sed
+ for file in $loclist $trylist; do
+ eval sfile="\$$file"
+ sfile=`echo $sfile | $xsed -e 's,.*/\(.*\),\1,'`
+ eval $file="$sfile"
+ done
+ ;;
+esac
+
+@end
+: create config.sh file
+echo " "
+echo "Creating config.sh..." >&4
+$spitshell <<EOT >config.sh
+$startsh
+#
+# This file was produced by running the Configure script. It holds all the
+# definitions figured out by Configure. Should you modify one of these values,
+# do not forget to propagate your changes by running "Configure -der". You may
+# instead choose to run each of the .SH files by yourself, or "Configure -S".
+#
+
+# Package name : $package
+# Source directory : $src
+# Configuration time: $cf_time
+# Configured by : $cf_by
+# Target system : $myuname
+
+EOT
+?X: Command line options are saved by the Options.U unit in the
+?X: temporary file UU/cmdline.opt
+$test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
+$spitshell <<EOT >>config.sh
+
diff --git a/mcon/U/Configdir.U b/mcon/U/Configdir.U
new file mode 100644
index 0000000..1dfcf70
--- /dev/null
+++ b/mcon/U/Configdir.U
@@ -0,0 +1,28 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Configdir.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 14:58:36 ram
+?RCS: patch61: have README explicitely mention the package name
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:49 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:Configdir: package
+?MAKE: -pick add $@ %<
+: create .config dir to save info across Configure sessions
+test -d ../.config || mkdir ../.config
+cat >../.config/README <<EOF
+This directory created by Configure to save information that should
+persist across sessions for $package.
+
+You may safely delete it if you wish.
+EOF
+
diff --git a/mcon/U/Cppsym.U b/mcon/U/Cppsym.U
new file mode 100644
index 0000000..ab6bf7c
--- /dev/null
+++ b/mcon/U/Cppsym.U
@@ -0,0 +1,286 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Cppsym.U,v $
+?RCS: Revision 3.0.1.5 1995/05/12 11:59:11 ram
+?RCS: patch54: split awk command onto two lines for older awks (ADO)
+?RCS:
+?RCS: Revision 3.0.1.4 1995/01/11 14:55:57 ram
+?RCS: patch45: new cc vs. cpp symbol checking suggested by JHI
+?RCS: patch45: added more cpp symbols (JHI)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/10/29 15:51:32 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS: patch36: new symbols ardent and titan (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/06/20 06:53:32 ram
+?RCS: patch30: extended cpp symbol lookup list (JHI)
+?RCS: patch30: renamed attrlist symbol into al for brevity
+?RCS:
+?RCS: Revision 3.0.1.1 1993/12/15 08:14:14 ram
+?RCS: patch15: added new cpp symbols __bsdi__ and BSD_NET2
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a shell script called Cppsym, which can be used to
+?X: determine whether any in a list of symbols is defined by the C compilation
+?X: chain (C preprocessor symbols plus C compiler native ones).
+?X: It can determine the status of any symbol, though the symbols in $al
+?X: are more easily determined. If you want to add to $al you can do
+?X: it in Myinit.U.
+?X:
+?MAKE:Cppsym ccsymbols cppsymbols cppccsymbols: run \
+ eunicefix Guess awk cat tr sed sort rm startsh osname \
+ +cc gccversion test comm uniq echo Options trnl \
+ optimize ccflags ldflags libs
+?MAKE: -pick add $@ %<
+?S:ccsymbols:
+?S: The variable contains the symbols defined by the C compiler alone.
+?S: The symbols defined by cpp or by cc when it calls cpp are not in
+?S: this list, see cppsymbols and cppccsymbols.
+?S: The list is a space-separated list of symbol=value tokens.
+?S:.
+?S:cppsymbols:
+?S: The variable contains the symbols defined by the C preprocessor
+?S: alone. The symbols defined by cc or by cc when it calls cpp are
+?S: not in this list, see ccsymbols and cppccsymbols.
+?S: The list is a space-separated list of symbol=value tokens.
+?S:.
+?S:cppccsymbols:
+?S: The variable contains the symbols defined by the C compiler
+?S: when it calls cpp. The symbols defined by the cc alone or cpp
+?S: alone are not in this list, see ccsymbols and cppsymbols.
+?S: The list is a space-separated list of symbol=value tokens.
+?S:.
+?T:also symbols i postprocess_cc_v flags
+?F:./Cppsym
+?F:!Cppsym.true !Cppsym.know !ccsym.com !ccsym.cpp !ccsym.own
+: determine known pre-processor and compiler symbols
+echo " "
+$echo "Guessing which symbols your C compiler and preprocessor define..." >&4
+?X:
+?X: The symbol list is in alpha order for ease of maintenance...
+?X:
+?X: Lots of new symbols (mostly rummaged from gcc), courtesy of
+?X: Jarkko Hietaniemi <jhi@snakemail.hut.fi> -- RAM, 06/06/94
+?X:
+?X: If your symbol is mixed case, just add it as-is.
+?X: All symbols will be transformed to both all-lower and all-upper.
+?X: Also drop any leading/trailing underscores, the scan will try all those.
+?X:
+$cat <<'EOSH' > Cppsym.know
+a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
+AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
+alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
+ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
+BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
+BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
+bull c cadmus clipper CMU COFF COMPILER_VERSION
+concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
+CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
+Dynix DynixPTX ELF encore EPI EXTENSIONS FAVOR_BSD
+FILE_OFFSET_BITS FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
+GLIBC GLIBC_MINOR
+GNU_SOURCE GNUC GNUC_MINOR GNU_LIBRARY GO32 gould GOULD_PN
+H3050R H3050RX hbullx20 hcx host_mips
+hp200 hp300 hp700 HP700 hp800 hp9000
+hp9000s200 hp9000s300 hp9000s400 hp9000s500
+hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
+i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
+IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
+INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
+LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
+LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
+Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
+LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
+M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
+M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
+M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
+MATH_HAS_NO_SIDE_EFFECTS
+mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
+mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
+mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
+MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
+mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
+NetBSD news1500 news1700 news1800 news1900 news3700
+news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
+ns32016 ns32332 ns32k nsc32000
+OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
+pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
+pc532 pdp11 PGC PIC plexus PORTAR posix
+POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
+POSIX_C_SOURCE POSIX_SOURCE POWER
+PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
+riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
+SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
+sony sony_news sonyrisc sparc sparclite spectrum
+stardent stdc STDC_EXT stratos sun sun3 sun386
+Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
+SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
+SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
+sysV68 sysV88 Tek4132 Tek4300 titan
+TM3200 TM5400 TM5600
+tower tower32 tower32_200 tower32_600 tower32_700
+tower32_800 tower32_850 tss
+u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
+ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
+unix UNIX95 UNIX99 unixpc unos
+USE_BSD USE_FILE_OFFSET64 USE_GNU USE_ISOC9X USE_LARGEFILE USE_LARGEFILE64
+USE_MISC USE_POSIX USE_POSIX199309 USE_POSIX199506 USE_POSIX2
+USE_REENTRANT USE_SVID USE_UNIX98 USE_XOPEN USE_XOPEN_EXTENDED
+USGr4 USGr4_2
+Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
+XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
+XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
+z8000
+EOSH
+?X: Maybe put other stuff here too.
+cat <<EOSH >>Cppsym.know
+$osname
+EOSH
+./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
+./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
+$cat Cppsym.know > Cppsym.c
+$cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
+$rm -f Cppsym.a Cppsym.b Cppsym.c
+cat <<EOSH > Cppsym
+$startsh
+if $test \$# -gt 0; then
+ echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
+ if $test -s Cppsym.got; then
+ $rm -f Cppsym.got
+ exit 0
+ fi
+ $rm -f Cppsym.got
+ exit 1
+else
+ $tr " " "$trnl" | ./Cppsym.try
+ exit 0
+fi
+EOSH
+chmod +x Cppsym
+$eunicefix Cppsym
+?X: The below awk script will die a horrible death if
+?X: some of the tested symbols are not long ints.
+?X: Also, we do not make difference between just defined and defined zero.
+cat <<EOSH > Cppsym.try
+$startsh
+cat <<'EOCP' > try.c
+#include <stdio.h>
+int main() {
+EOCP
+?X: The length($1) command guards against possible empty entries.
+?X: The awk snippet is know to give heartburn to UNICOS/mk awk.
+$awk \\
+EOSH
+cat <<'EOSH' >> Cppsym.try
+'length($1) > 0 {
+ printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", (long)%s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
+ printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", (long)_%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
+ printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", (long)__%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
+ printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", (long)__%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
+}' >> try.c
+echo 'return 0;}' >> try.c
+EOSH
+cat <<EOSH >> Cppsym.try
+flags="$ccflags"
+case "$osname-$gccversion" in
+irix-) flags="\$flags -woff 1178" ;;
+os2-*) flags="\$flags -Zlinker /PM:VIO" ;;
+esac
+$cc -o try $optimize \$flags $ldflags try.c $libs && $run ./try
+EOSH
+chmod +x Cppsym.try
+$eunicefix Cppsym.try
+./Cppsym < Cppsym.know > Cppsym.true
+: now check the C compiler for additional symbols
+?X: suggested by Jarkko Hietaniemi <jhi@snakemail.hut.fi>, thanks!
+postprocess_cc_v=''
+case "$osname" in
+aix) postprocess_cc_v="|$tr , ' '" ;;
+esac
+$cat >ccsym <<EOS
+$startsh
+$cat >tmp.c <<EOF
+extern int foo;
+EOF
+for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
+do
+ case "\$i" in
+ -D*) echo "\$i" | $sed 's/^-D//';;
+ -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A//' | $sed 's/\(.*\)(\(.*\))/\1=\2/';;
+ esac
+done
+$rm -f try.c
+EOS
+postprocess_cc_v=''
+chmod +x ccsym
+$eunicefix ccsym
+./ccsym > ccsym1.raw
+?X: AIX complains if $uniq is passed an empty file. ($sort apparently
+?X: doesn't care.) --AD 14 July 1998
+if $test -s ccsym1.raw; then
+ $sort ccsym1.raw | $uniq >ccsym.raw
+else
+ mv ccsym1.raw ccsym.raw
+fi
+
+?X: canonicalize symbols for easier sort/uniq/comm usage: append =1 if no = sign
+?X: the awk script must be on two lines for older awk programs, sigh! -- ADO
+$awk '/\=/ { print $0; next }
+ { print $0"=1" }' ccsym.raw >ccsym.list
+$awk '/\=/ { print $0; next }
+ { print $0"=1" }' Cppsym.true >ccsym.true
+$comm -13 ccsym.true ccsym.list >ccsym.own
+$comm -12 ccsym.true ccsym.list >ccsym.com
+$comm -23 ccsym.true ccsym.list >ccsym.cpp
+also=''
+if $test -z ccsym.raw; then
+ echo "Your C compiler doesn't seem to define any symbols!" >&4
+ echo " "
+ echo "However, your C preprocessor defines the following symbols:"
+ $cat Cppsym.true
+ ccsymbols=''
+ cppsymbols=`$cat Cppsym.true`
+ cppsymbols=`echo $cppsymbols`
+ cppccsymbols="$cppsymbols"
+else
+ if $test -s ccsym.com; then
+ echo "Your C compiler and pre-processor define these symbols:"
+ $sed -e 's/\(..*\)=.*/\1/' ccsym.com
+ also='also '
+ symbols='ones'
+ cppccsymbols=`$cat ccsym.com`
+ cppccsymbols=`echo $cppccsymbols`
+ $test "$silent" || sleep 1
+ fi
+ if $test -s ccsym.cpp; then
+ $test "$also" && echo " "
+ echo "Your C pre-processor ${also}defines the following symbols:"
+ $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
+ also='further '
+ cppsymbols=`$cat ccsym.cpp`
+ cppsymbols=`echo $cppsymbols`
+ $test "$silent" || sleep 1
+ fi
+ if $test -s ccsym.own; then
+ $test "$also" && echo " "
+ echo "Your C compiler ${also}defines the following cpp symbols:"
+ $sed -e 's/\(..*\)=1/\1/' ccsym.own
+ $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
+ ccsymbols=`$cat ccsym.own`
+ ccsymbols=`echo $ccsymbols`
+ $test "$silent" || sleep 1
+ fi
+fi
+$rm -f Cppsym.know Cppsym.true
+
diff --git a/mcon/U/Cross.U b/mcon/U/Cross.U
new file mode 100644
index 0000000..feaef31
--- /dev/null
+++ b/mcon/U/Cross.U
@@ -0,0 +1,349 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 2001 Jarkko Hietaniemi
+?RCS:
+?MAKE:run to from targetarch usecrosscompile: src awk cat grep test rm \
+ echo sed mkdir cp touch chmod
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:usecrosscompile:
+?S: This variable conditionally defines the USE_CROSS_COMPILE symbol,
+?S: and indicates that our package has been cross-compiled.
+?S:.
+?S:run:
+?S: This variable contains the command used by Configure
+?S: to copy and execute a cross-compiled executable in the
+?S: target host. Useful and available only during the build.
+?S: Empty string '' if not cross-compiling.
+?S:.
+?S:from:
+?S: This variable contains the command used by Configure
+?S: to copy files from the target host. Useful and available
+?S: only during the build.
+?S: The string ':' if not cross-compiling.
+?S:.
+?S:to:
+?S: This variable contains the command used by Configure
+?S: to copy to from the target host. Useful and available
+?S: only during the build.
+?S: The string ':' if not cross-compiling.
+?S:.
+?S:targetarch:
+?S: If cross-compiling, this variable contains the target architecture.
+?S: If not, this will be empty.
+?S:.
+?C:USE_CROSS_COMPILE:
+?C: This symbol, if defined, indicates that the package is being
+?C: cross-compiled.
+?C:.
+?C:CROSS_TARGET_ARCH:
+?C: This symbol, if defined, indicates the target architecture
+?C: the package has been cross-compiled to.
+?C: Undefined if not a cross-compile.
+?C:.
+?H:?usecrosscompile:#ifndef USE_CROSS_COMPILE
+?H:?usecrosscompile:#$usecrosscompile USE_CROSS_COMPILE /**/
+?H:?usecrosscompile:#define CROSS_TARGET_ARCH "$targetarch" /**/
+?H:?usecrosscompile:#endif
+?H:.
+?T:croak pwd exe f q i j cwd
+?LINT:extern usecrosscompile
+?LINT:extern cc
+?LINT:extern usrinc
+?LINT:change usrinc
+?LINT:change ar
+?LINT:change nm
+?LINT:change ranlib
+?LINT:extern targethost
+?LINT:extern targetdir
+?LINT:change targetdir
+?LINT:extern targetuser
+?LINT:change targetuser
+?LINT:extern targetrun
+?LINT:extern targetfrom
+?LINT:extern targetto
+?LINT:extern targetmkdir
+?LINT:change targetrun
+?LINT:change targetfrom
+?LINT:change targetto
+?LINT:change targetmkdir
+?LINT:extern incpth
+?LINT:extern libpth
+?LINT:change incpth
+?LINT:change libpth
+?LINT:extern locincpth
+?LINT:extern loclibpth
+?LINT:change locincpth
+?LINT:change loclibpth
+: setup for possible cross-compilation
+run=''
+to=:
+from=:
+usecrosscompile='undef'
+targetarch=''
+case "$usecrosscompile" in
+$define|true|[yY]*)
+@if { test -d ../Cross }
+?X:
+?X: Cross-compilation is enabled when there is a 'Cross' directory found
+?X: at the root of the package. This directory must contain the following
+?X: entries for defining the cross-compilation process:
+?X:
+?X: FIXME FIXME
+?X: WE MUST DISTINGUISH BETWEEN LOCAL cross-compiling AND REMOTE ONE
+?X: ACTUALLY, REMOTE COMPILATION SHOULD BE CONFIGURED INTERACTIVELY
+?X: IT WILL COPY ALL THE FILES FROM THE MANIFEST DOWN TO THE REMOTE DIR...
+?X: (and copy things like 'mkdep', etc...)
+?X:
+ $echo "Cross-compiling..."
+ croak=''
+ case "$cc" in
+ *-*-gcc)
+?X: A cross-compiling gcc, probably.
+ targetarch=`$echo $cc|$sed 's/-gcc$//'`
+ ar=$targetarch-ar
+?X: leave out ld, choosing it is more complex
+ nm=$targetarch-nm
+ ranlib=$targetarch-ranlib
+ $echo 'extern int foo;' > try.c
+ set X `$cc -v -E try.c 2>&1 | \
+ $awk '/^#include </,/^End of search /'|$grep '/include'`
+ shift
+ if $test $# -gt 0; then
+ incpth="$incpth $*"
+ incpth="`$echo $incpth|$sed 's/^ //'`"
+ echo "Guessing incpth '$incpth'." >&4
+ for i in $*; do
+ j="`$echo $i|$sed 's,/include$,/lib,'`"
+ if $test -d $j; then
+ libpth="$libpth $j"
+ fi
+ done
+ libpth="`$echo $libpth|$sed 's/^ //'`"
+ echo "Guessing libpth '$libpth'." >&4
+ fi
+ $rm -f try.c
+ ;;
+ esac
+ case "$targetarch" in
+ '') echo "Targetarch not defined." >&4; croak=y ;;
+ *) echo "Using targetarch $targetarch." >&4 ;;
+ esac
+ case "$incpth" in
+ '') echo "Incpth not defined." >&4; croak=y ;;
+ *) echo "Using incpth '$incpth'." >&4 ;;
+ esac
+ case "$libpth" in
+ '') echo "Libpth not defined." >&4; croak=y ;;
+ *) echo "Using libpth '$libpth'." >&4 ;;
+ esac
+ case "$usrinc" in
+ '')
+ for i in $incpth; do
+ if $test -f $i/errno.h -a -f $i/stdio.h -a -f $i/time.h; then
+ usrinc=$i
+ echo "Guessing usrinc $usrinc." >&4
+ break
+ fi
+ done
+ case "$usrinc" in
+ '') echo "Usrinc not defined." >&4; croak=y ;;
+ esac
+ ;;
+ *) echo "Using usrinc $usrinc." >&4 ;;
+ esac
+ case "$targethost" in
+ '') echo "Targethost not defined." >&4; croak=y ;;
+ *) echo "Using targethost $targethost." >&4
+ esac
+ locincpth=' '
+ loclibpth=' '
+ case "$croak" in
+ y) echo "Cannot continue, aborting." >&4; exit 1 ;;
+ esac
+ case "$src" in
+ /*) run=$src/Cross/run
+ targetmkdir=$src/Cross/mkdir
+ to=$src/Cross/to
+ from=$src/Cross/from
+ ;;
+ *) pwd=`$test -f ../Configure & cd ..; pwd`
+ run=$pwd/Cross/run
+ targetmkdir=$pwd/Cross/mkdir
+ to=$pwd/Cross/to
+ from=$pwd/Cross/from
+ ;;
+ esac
+ case "$targetrun" in
+ '') targetrun=ssh ;;
+ esac
+ case "$targetto" in
+ '') targetto=scp ;;
+ esac
+ case "$targetfrom" in
+ '') targetfrom=scp ;;
+ esac
+ run=$run-$targetrun
+ to=$to-$targetto
+ from=$from-$targetfrom
+ case "$targetdir" in
+ '')
+ targetdir=/tmp
+ echo "Guessing targetdir $targetdir." >&4
+ ;;
+ esac
+ case "$targetuser" in
+ '')
+ targetuser=root
+ echo "Guessing targetuser $targetuser." >&4
+ ;;
+ esac
+ case "$targetfrom" in
+ scp) q=-q ;;
+ *) q='' ;;
+ esac
+ case "$targetrun" in
+ ssh|rsh)
+ $cat >$run <<EOF
+#!/bin/sh
+case "\$1" in
+-cwd)
+ shift
+ cwd=\$1
+ shift
+ ;;
+esac
+case "\$cwd" in
+'') cwd=$targetdir ;;
+esac
+exe=\$1
+shift
+if $test ! -f \$exe.xok; then
+ $to \$exe
+ $touch \$exe.xok
+fi
+$targetrun -l $targetuser $targethost "cd \$cwd && ./\$exe \$@"
+EOF
+ ;;
+ *) echo "Unknown targetrun '$targetrun'" >&4
+ exit 1
+ ;;
+ esac
+ case "$targetmkdir" in
+ */Cross/mkdir)
+ $cat >$targetmkdir <<EOF
+#!/bin/sh
+$targetrun -l $targetuser $targethost "mkdir -p \$@"
+EOF
+ $chmod a+rx $targetmkdir
+ ;;
+ *) echo "Unknown targetmkdir '$targetmkdir'" >&4
+ exit 1
+ ;;
+ esac
+ case "$targetto" in
+ scp|rcp)
+ $cat >$to <<EOF
+#!/bin/sh
+for f in \$@
+do
+ case "\$f" in
+ /*)
+ $targetmkdir \`dirname \$f\`
+ $targetto $q \$f $targetuser@$targethost:\$f || exit 1
+ ;;
+ *)
+ $targetmkdir $targetdir/\`dirname \$f\`
+ $targetto $q \$f $targetuser@$targethost:$targetdir/\$f || exit 1
+ ;;
+ esac
+done
+exit 0
+EOF
+ ;;
+ cp) $cat >$to <<EOF
+#!/bin/sh
+for f in \$@
+do
+ case "\$f" in
+ /*)
+ $mkdir -p $targetdir/\`dirname \$f\`
+ $cp \$f $targetdir/\$f || exit 1
+ ;;
+ *)
+ $targetmkdir $targetdir/\`dirname \$f\`
+ $cp \$f $targetdir/\$f || exit 1
+ ;;
+ esac
+done
+exit 0
+EOF
+ ;;
+ *) echo "Unknown targetto '$targetto'" >&4
+ exit 1
+ ;;
+ esac
+ case "$targetfrom" in
+ scp|rcp)
+ $cat >$from <<EOF
+#!/bin/sh
+for f in \$@
+do
+ $rm -f \$f
+ $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
+done
+exit 0
+EOF
+ ;;
+ cp) $cat >$from <<EOF
+#!/bin/sh
+for f in \$@
+do
+ $rm -f \$f
+ cp $targetdir/\$f . || exit 1
+done
+exit 0
+EOF
+ ;;
+ *) echo "Unknown targetfrom '$targetfrom'" >&4
+ exit 1
+ ;;
+ esac
+ if $test ! -f $run; then
+ echo "Target 'run' script '$run' not found." >&4
+ else
+ $chmod a+rx $run
+ fi
+ if $test ! -f $to; then
+ echo "Target 'to' script '$to' not found." >&4
+ else
+ $chmod a+rx $to
+ fi
+ if $test ! -f $from; then
+ echo "Target 'from' script '$from' not found." >&4
+ else
+ $chmod a+rx $from
+ fi
+ if $test ! -f $run -o ! -f $to -o ! -f $from; then
+ exit 1
+ fi
+ $cat >&4 <<EOF
+Using '$run' for remote execution,
+and '$from' and '$to'
+for remote file transfer.
+EOF
+@else
+ echo "Cross-compilation is not supported for this package." >&4
+ exit 1
+@end
+ ;;
+esac
+
diff --git a/mcon/U/Csym.U b/mcon/U/Csym.U
new file mode 100644
index 0000000..e7c7c4b
--- /dev/null
+++ b/mcon/U/Csym.U
@@ -0,0 +1,97 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Csym.U,v $
+?RCS: Revision 3.0.1.4 1995/07/25 13:36:29 ram
+?RCS: patch56: re-arranged compile line to include ldflags before objects
+?RCS: patch56: added quotes for OS/2 support
+?RCS:
+?RCS: Revision 3.0.1.3 1995/05/12 12:00:33 ram
+?RCS: patch54: fixed C test program to bypasss gcc builtin type checks (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/31 09:34:13 ram
+?RCS: patch44: added Options to the MAKE line since it's no longer in Init.U
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/25 14:00:05 ram
+?RCS: patch6: added ldflags as a conditional dependency and to compile line
+?RCS: patch6: a final double quote was missing in csym variable after eval
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:Csym: Options contains libc libs runnm +cc +ccflags +ldflags rm
+?MAKE: -pick add $@ %<
+?LINT:define csym
+?LINT:use libc
+?S:csym:
+?S: This shell variable is used internally by Configure to check
+?S: wether a given C symbol is defined or not. A typical use is:
+?S: set symbol result [-fva] [previous]
+?S: eval $csym
+?S: That will set result to 'true' if the function [-f], variable [-v]
+?S: or array [-a] is defined, 'false' otherwise. If a previous value is
+?S: given and the -r flag was provided on the command line, that value
+?S: is reused without questioning.
+?S:.
+?V:csym
+?T:tval tx tlook tf tdc tc
+: is a C symbol defined?
+csym='tlook=$1;
+case "$3" in
+-v) tf=libc.tmp; tc=""; tdc="";;
+-a) tf=libc.tmp; tc="[0]"; tdc="[]";;
+*) tlook="^$1\$"; tf=libc.list; tc=""; tdc="()";;
+esac;
+tx=yes;
+case "$reuseval-$4" in
+true-) ;;
+true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
+esac;
+case "$tx" in
+yes)
+ case "$runnm" in
+ true)
+ if $contains $tlook $tf >/dev/null 2>&1;
+ then tval=true;
+ else tval=false;
+ fi;;
+ *)
+?X:
+?X: We use 'char' instead of 'int' to try to circumvent overzealous
+?X: optimizing compilers using built-in prototypes for commonly used
+?X: routines to complain when seeing a different external declaration. For
+?X: instance, gcc 2.6.3 fails if we use 'int' and we attempt a test against
+?X: memcpy() on machines where sizeof(int) == sizeof(char *) (the usual return
+?X: type), the compiler assuming it's a built-in declaration given that the
+?X: returned size matches. At least with 'char' we are safe! -- RAM, for ADO
+?X:
+?X: Let's thank GNU cc for making our lifes so easy! :-)
+?X: (An alternative for the future would be to use our knowledge about gcc
+?X: to force a -fno-builtin option in the compile test, in case the 'char'
+?X: trick is obsoleted by future gcc releases). -- RAM
+?X:
+?X: Lastly, gcc 3.4 otimizes &missing == 0 away, so we use + 2 instead now.
+?X: The GNU folks like to do weird things, don't they? -- RAM, 2004-06-05
+?X:
+ echo "extern char $1$tdc; int main() { return &$1$tc + 2; }" > t.c;
+ if $cc $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
+ then tval=true;
+ else tval=false;
+ fi;
+ $rm -f t t.c;;
+ esac;;
+*)
+ case "$tval" in
+ $define) tval=true;;
+ *) tval=false;;
+ esac;;
+esac;
+eval "$2=$tval"'
+
diff --git a/mcon/U/End.U b/mcon/U/End.U
new file mode 100644
index 0000000..165b5af
--- /dev/null
+++ b/mcon/U/End.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: End.U,v $
+?RCS: Revision 3.0 1993/08/18 12:04:51 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit serves as the goal which forces make to choose all the units that
+?X: ask questions. The $W on the ?MAKE: line is the list of all symbols wanted.
+?X: To force any unit to be included, copy this unit to your private U directory
+?X: and add the name of the unit desired to the ?MAKE: dependency line.
+?X:
+?MAKE:End: $W
+?MAKE: -pick add $@ %<
+?LINT:use $W
+: end of configuration questions
+echo " "
+echo "End of configuration questions."
+
diff --git a/mcon/U/Extract.U b/mcon/U/Extract.U
new file mode 100644
index 0000000..d01d324
--- /dev/null
+++ b/mcon/U/Extract.U
@@ -0,0 +1,105 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Extract.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 14:58:52 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 15:51:46 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:52 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a shell script which can be doted in order to extract
+?X: .SH files with variable substitutions.
+?X:
+?X: When running Configure from a remote directory ($src is not '.'),
+?X: then the files will be created in that directory, so beware!
+?X:
+?MAKE:Extract: Mkdirp src
+?MAKE: -pick add $@ %<
+?F:./extract
+?T:CONFIG SRC dir file
+: script used to extract .SH files with variable substitutions
+cat >extract <<EOS
+CONFIG=true
+SRC="$src"
+EOS
+cat >>extract <<'EOS'
+echo "Doing variable substitutions on .SH files..."
+if test -f "$SRC/MANIFEST"; then
+ set x `awk '{print $1}' <$SRC/MANIFEST | grep '\.SH'`
+else
+ echo "(Looking for .SH files under the source directory.)"
+ set x `(cd "$SRC"; find . -name "*.SH" -print)`
+fi
+shift
+case $# in
+0) set x `(cd "$SRC"; echo *.SH)`; shift;;
+esac
+if test ! -f "$SRC/$1"; then
+ shift
+fi
+for file in $*; do
+ case "$SRC" in
+ ".")
+ case "$file" in
+ */*)
+ dir=`expr X$file : 'X\(.*\)/'`
+ file=`expr X$file : 'X.*/\(.*\)'`
+ (cd $dir && . ./$file)
+ ;;
+ *)
+ . ./$file
+ ;;
+ esac
+ ;;
+ *)
+?X:
+?X: When running Configure remotely ($src is not '.'), we cannot source
+?X: the files directly, since that would wrongly cause the extraction
+?X: where the source lie instead of withing the current directory. Therefore,
+?X: we need to 'sh <file' then, which is okay since they will source the
+?X: existing config.sh file. It's not possible to use:
+?X: ../src/Configure -S -O -Dsomething
+?X: unfortunately since no new config.sh with the -Dsomething override
+?X: will be created before running the .SH files. A minor buglet.
+?X:
+?X: Note that we must create the directory hierarchy ourselves if it does
+?X: not exist already, and that is done through a shell emulation of the
+?X: 'mkdir -p' command. We don't want to use the $installdir metaconfig
+?X: symbol here since that would require too much to be configured for
+?X: this simple extraction task that may happen quickly with 'Configure -S'.
+?X: -- RAM, 18/03/96
+?X:
+ case "$file" in
+ */*)
+ dir=`expr X$file : 'X\(.*\)/'`
+ file=`expr X$file : 'X.*/\(.*\)'`
+ ./mkdirp $dir
+ sh <"$SRC/$dir/$file"
+ ;;
+ *)
+ sh <"$SRC/$file"
+ ;;
+ esac
+ ;;
+ esac
+done
+if test -f "$SRC/config_h.SH"; then
+ if test ! -f config.h; then
+?X: oops, they left it out of MANIFEST, probably, so do it anyway.
+ sh <"$SRC/config_h.SH"
+ fi
+fi
+EOS
+
diff --git a/mcon/U/Extractall.U b/mcon/U/Extractall.U
new file mode 100644
index 0000000..e764c20
--- /dev/null
+++ b/mcon/U/Extractall.U
@@ -0,0 +1,51 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Extractall.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:00:43 ram
+?RCS: patch61: created
+?RCS:
+?X:
+?X: If extraction has been requested, load the configuration file, perform
+?X: the extraction and exit.
+?X:
+?X: This unit was originally a part of Options.U. It had to be removed from
+?X: it to prevent a dependency cycle: Extract -> src -> Options -> Extract
+?X: The Begin.U unit now requires us before beginning to do anything
+?X: interesting, to ensure proper semantics. -- RAM, 15/03/96
+?X:
+?MAKE:Extractall: Extract Options
+?MAKE: -pick wipe $@ %<
+: extract files and exit if asked to do so
+case "$extractsh" in
+true)
+?X: Undo the forced silent=true when -S was supplied, by probing realsilent
+?X: which was set iff -s was also given. See Options.U for details.
+ case "$realsilent" in
+ true) ;;
+ *) exec 1>&4;;
+ esac
+ case "$config_sh" in
+ '') config_sh='config.sh';;
+ esac
+ echo " "
+ echo "Fetching answers from $config_sh..."
+ cd ..
+ . $config_sh
+ test "$override" && . ./optdef.sh
+ echo " "
+?X: extract has to be run from the top directory, not within UU.
+ . UU/extract
+ rm -rf UU
+ echo "Extraction done."
+ exit 0
+ ;;
+esac
+
diff --git a/mcon/U/Filexp.U b/mcon/U/Filexp.U
new file mode 100644
index 0000000..7602808
--- /dev/null
+++ b/mcon/U/Filexp.U
@@ -0,0 +1,69 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Filexp.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 15:52:53 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS: patch36: added HOME to the ?T: line since metalint now checks ${HOME}
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:03:00 ram
+?RCS: patch23: made sure error status from csh is propagated (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:53 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a shell script which will expand filenames beginning
+?X: with tildes. The script is deleted at the end of Configure.
+?X:
+?MAKE:Filexp: startsh sed test expr eunicefix
+?MAKE: -pick add $@ %<
+?F:./filexp
+?T:HOME LOGDIR dir me name failed
+: set up shell script to do ~ expansion
+cat >filexp <<EOSS
+$startsh
+: expand filename
+case "\$1" in
+ ~/*|~)
+ echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
+ ;;
+ ~*)
+ if $test -f /bin/csh; then
+ /bin/csh -f -c "glob \$1"
+ failed=\$?
+ echo ""
+ exit \$failed
+ else
+ name=\`$expr x\$1 : '..\([^/]*\)'\`
+ dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
+ if $test ! -d "\$dir"; then
+ me=\`basename \$0\`
+ echo "\$me: can't locate home directory for: \$name" >&2
+ exit 1
+ fi
+ case "\$1" in
+ */*)
+ echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
+ ;;
+ *)
+ echo \$dir
+ ;;
+ esac
+ fi
+ ;;
+*)
+ echo \$1
+ ;;
+esac
+EOSS
+chmod +x filexp
+$eunicefix filexp
+
diff --git a/mcon/U/Findhdr.U b/mcon/U/Findhdr.U
new file mode 100644
index 0000000..50f7ba7
--- /dev/null
+++ b/mcon/U/Findhdr.U
@@ -0,0 +1,126 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Thomas Neumann <tom@smart.bo.open.de>
+?RCS:
+?RCS: $Log: Findhdr.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 15:53:08 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:03:56 ram
+?RCS: patch23: cppminus must be after other cppflags, not before
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:54 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a findhdr script which is used to locate the header
+?X: files in $usrinc or other stranger places using cpp capabilities. The
+?X: script is given an include file base name, like 'stdio.h' or 'sys/file.h'
+?X: and it returns the full path of the include file and a zero status or an
+?X: empty string with an error status if the file could not be located.
+?X:
+?MAKE:Findhdr: grep test tr rm +usrinc awk cat startsh \
+ cppstdin cppminus +cppflags eunicefix osname
+?MAKE: -pick add $@ %<
+?LINT:define fieldn
+?S:fieldn:
+?S: This variable is used internally by Configure. It contains the position
+?S: of the included file name in cpp output. That is to say, when cpp
+?S: pre-processes a #include <file> line, it replaces it by a # line which
+?S: contains the original position in the input file and the full name of
+?S: included file, between "quotes".
+?S:.
+?V:fieldn
+?F:./findhdr !fieldn
+?T:cline pos wanted name awkprg cppfilter testaccess status usrincdir
+: determine filename position in cpp output
+echo " "
+echo "Computing filename position in cpp output for #include directives..." >&4
+echo '#include <stdio.h>' > foo.c
+case "$osname" in
+vos)
+ testaccess=-e
+?X: VOS: path component separator is >
+ cppfilter="tr '\\\\>' '/' |"
+ ;;
+*)
+ testaccess=-r
+ cppfilter=''
+ ;;
+esac
+$cat >fieldn <<EOF
+$startsh
+$cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
+$grep '^[ ]*#.*stdio\.h' | \
+while read cline; do
+ pos=1
+ set \$cline
+ while $test \$# -gt 0; do
+ if $test $testaccess \`echo \$1 | $tr -d '"'\`; then
+ echo "\$pos"
+ exit 0
+ fi
+ shift
+ pos=\`expr \$pos + 1\`
+ done
+done
+EOF
+chmod +x fieldn
+fieldn=`./fieldn`
+$rm -f foo.c fieldn
+case $fieldn in
+'') pos='???';;
+1) pos=first;;
+2) pos=second;;
+3) pos=third;;
+*) pos="${fieldn}th";;
+esac
+echo "Your cpp writes the filename in the $pos field of the line."
+
+?X: To locate a header file, we cannot simply check for $usrinc/file.h, since
+?X: some machine have the headers in weird places and our only hope is that
+?X: the C pre-processor will know how to find those headers. Thank you NexT!
+: locate header file
+$cat >findhdr <<EOF
+$startsh
+wanted=\$1
+name=''
+for usrincdir in $usrinc; do
+ if test -f \$usrincdir/\$wanted; then
+ echo "\$usrincdir/\$wanted"
+ exit 0
+ fi
+done
+awkprg='{ print \$$fieldn }'
+echo "#include <\$wanted>" > foo\$\$.c
+$cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
+$cppfilter $grep "^[ ]*#.*\$wanted" | \
+while read cline; do
+ name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
+ case "\$name" in
+ *[/\\\\]\$wanted) echo "\$name"; exit 1;;
+ *[\\\\/]\$wanted) echo "\$name"; exit 1;;
+ *) exit 2;;
+ esac
+done
+?X: status = 0: grep returned 0 lines, case statement not executed
+?X: status = 1: headerfile found
+?X: status = 2: while loop executed, no headerfile found
+status=\$?
+$rm -f foo\$\$.c
+if test \$status -eq 1; then
+ exit 0
+fi
+exit 1
+EOF
+chmod +x findhdr
+$eunicefix findhdr
+
diff --git a/mcon/U/Finish.U b/mcon/U/Finish.U
new file mode 100644
index 0000000..2ed7bd9
--- /dev/null
+++ b/mcon/U/Finish.U
@@ -0,0 +1,141 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Finish.U,v $
+?RCS: Revision 3.0.1.6 1995/02/15 14:09:30 ram
+?RCS: patch51: now clearer about how to edit config.sh at the prompt (WED)
+?RCS:
+?RCS: Revision 3.0.1.5 1994/10/29 15:53:14 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.4 1994/05/06 14:19:37 ram
+?RCS: patch23: added blank lines around 'End of Configure'
+?RCS:
+?RCS: Revision 3.0.1.3 1993/10/16 13:46:09 ram
+?RCS: patch12: replaced Config_h by Magic_h in the dependency line
+?RCS:
+?RCS: Revision 3.0.1.2 1993/09/13 15:45:26 ram
+?RCS: patch10: fixed shell evaluation w/o shell escape while in silent mode
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/30 08:55:59 ram
+?RCS: patch8: prevents myread from blocking on empty answers, exceptionally
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:55 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit is the very last one in the Configure script. It runs all the
+?X: SH files, which among other things produce config.h and (usually) Makefile.
+?X: It offers to do a make depend if the Makefile contains that target.
+?X:
+?MAKE:Finish: Chk_MANI Extract Myread Oldsym Magic_h cat rm contains \
+ test package make
+?MAKE: -pick add $@ %<
+?F:!config.sh
+?T:pwd
+: Finish up by extracting the .SH files
+case "$alldone" in
+exit)
+ $rm -rf UU
+ echo "Extraction done."
+ exit 0
+ ;;
+cont)
+ ;;
+'')
+ dflt=''
+ nostick=true
+ $cat <<EOM
+
+If you'd like to make any changes to the config.sh file before I begin
+to configure things, do it as a shell escape now (e.g. !vi config.sh).
+
+EOM
+ rp="Press return or use a shell escape to edit config.sh:"
+ . UU/myread
+ nostick=''
+ case "$ans" in
+ '') ;;
+ *) : in case they cannot read
+ sh 1>&4 -c "$ans";;
+ esac
+ ;;
+esac
+
+: if this fails, just run all the .SH files by hand
+. ./config.sh
+
+?X:
+?X: Turn silent mode off from now on (we want a verbose file extraction).
+?X: This means we have to explicitely test for '$silent' from now on to
+?X: strip off any verbose messages.
+?X:
+echo " "
+exec 1>&4
+pwd=`pwd`
+. ./UU/extract
+cd "$pwd"
+
+if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
+ dflt=y
+ case "$silent" in
+ true) ;;
+ *)
+ $cat <<EOM
+
+Now you need to generate make dependencies by running "$make depend".
+You might prefer to run it in background: "$make depend > makedepend.out &"
+It can take a while, so you might not want to run it right now.
+
+EOM
+ ;;
+ esac
+ rp="Run $make depend now?"
+ . UU/myread
+ case "$ans" in
+ y*)
+ $make depend && echo "Now you must run '$make'."
+ ;;
+ *)
+ echo "You must run '$make depend' then '$make'."
+ ;;
+ esac
+elif test -f [Mm]akefile; then
+ echo " "
+ echo "Now you must run a $make."
+else
+ echo "Configure done."
+fi
+
+if $test -f Policy.sh; then
+ $cat <<EOM
+
+If you compile $package on a different machine or from a different object
+directory, copy the Policy.sh file from this object directory to the
+new one before you run Configure -- this will help you with most of
+the policy defaults.
+
+EOM
+fi
+if $test -f UU/config.msg; then
+ echo "Hmm. I also noted the following information while running:"
+ echo " "
+ $cat UU/config.msg >&4
+fi
+?X:
+?X: kit*isdone files are left over by shell archives built using the makedist
+?X: script which comes from dist, while ark*isdone files are left over by
+?X: the cshar archive maker.
+?X:
+$rm -f kit*isdone ark*isdone
+$rm -rf UU
+
+: End of Configure
+
diff --git a/mcon/U/Getfile.U b/mcon/U/Getfile.U
new file mode 100644
index 0000000..fe917ad
--- /dev/null
+++ b/mcon/U/Getfile.U
@@ -0,0 +1,339 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Getfile.U,v $
+?RCS: Revision 3.0.1.7 1997/02/28 15:01:06 ram
+?RCS: patch61: getfile script now begins with "startsh"
+?RCS:
+?RCS: Revision 3.0.1.6 1995/02/15 14:11:00 ram
+?RCS: patch51: was not working if ~'s allowed with d_portable on (WED)
+?RCS:
+?RCS: Revision 3.0.1.5 1995/01/11 15:11:25 ram
+?RCS: patch45: added support for escaping answers to skip various checks
+?RCS: patch45: modified message issued after file expansion
+?RCS:
+?RCS: Revision 3.0.1.4 1994/10/29 15:53:19 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.3 1994/05/06 14:23:36 ram
+?RCS: patch23: getfile could be confused by file name in "locate" requests
+?RCS: patch23: new 'p' directive to assume file is in people's path (WED)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/01/24 14:01:31 ram
+?RCS: patch16: added metalint hint on changed 'ans' variable
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 15:46:27 ram
+?RCS: patch10: minor format problems and misspellings fixed
+?RCS: patch10: now performs from package dir and not from UU subdir
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a bit of shell code that must be dotted in in order
+?X: to get a file name and make some sanity checks. Optionally, a ~name
+?X: expansion is performed.
+?X:
+?X: To use this unit, $rp and $dflt must hold the question and the
+?X: default answer, which will be passed as-is to the myread script.
+?X: The $fn variable must hold the file type (f or d, for file/directory).
+?X: If $gfpth is set to a list of space-separated list of directories,
+?X: those are prefixes for the filename. Unless $gfpthkeep is set to 'y',
+?X: gfpth is cleared on return from Getfile.
+?X:
+?X: If is is followed by a ~, then ~name substitution will occur. Upon return,
+?X: $ans is set with the filename value. If a / is specified, then only a full
+?X: path name is accepted (but ~ substitution occurs before, if needed). The
+?X: expanded path name is returned in that case.
+?X:
+?X: If a + is specified, the existence checks are skipped. This usually means
+?X: the file/directory is under the full control of the program.
+?X:
+?X: If the 'n' (none) type is used, then the user may answer none.
+?X: The 'e' (expand) switch may be used to bypass d_portable, expanding ~name.
+?X:
+?X: If the 'l' (locate) type is used, then it must end with a ':' and then a
+?X: file name. If the answer is a directory, the file name will be appended
+?X: before testing for file existence. This is useful in locate-style
+?X: questions like "where is the active file?". In that case, one should
+?X: use:
+?X:
+?X: dflt='~news/lib'
+?X: fn='l~:active'
+?X: rp='Where is the active file?'
+?X: . ./getfile
+?X: active="$ans"
+?X:
+?X: If the 'p' (path) letter is specified along with 'l', then an answer
+?X: without a leading / will be expected to be found in everyone's path.
+?X:
+?X: It is also possible to include a comma-separated list of items within
+?X: parentheses to specify which items should be accepted as-is with no
+?X: further checks. This is useful when for instance a full path is expected
+?X: but the user may escape out via "magical" answers.
+?X:
+?X: If the answer to the question is 'none', then the existence checks are
+?X: skipped and the empty string is returned.
+?X:
+?MAKE:Getfile: d_portable contains startsh Myread Filexp tr trnl
+?MAKE: -pick add $@ %<
+?V:ansexp:fn gfpth gfpthkeep
+?F:./getfile
+?T:tilde type what orig_rp orig_dflt fullpath already redo skip none_ok \
+ value exp_file nopath_ok loc_file fp pf dir direxp
+?LINT:change ans
+?LINT:change gfpth
+: now set up to get a file name
+cat <<EOS >getfile
+$startsh
+EOS
+cat <<'EOSC' >>getfile
+tilde=''
+fullpath=''
+already=''
+skip=''
+none_ok=''
+exp_file=''
+nopath_ok=''
+orig_rp="$rp"
+orig_dflt="$dflt"
+case "$gfpth" in
+'') gfpth='.' ;;
+esac
+
+?X: Begin by stripping out any (...) grouping.
+case "$fn" in
+*\(*)
+ : getfile will accept an answer from the comma-separated list
+ : enclosed in parentheses even if it does not meet other criteria.
+ expr "$fn" : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
+ fn=`echo $fn | sed 's/(.*)//'`
+ ;;
+esac
+
+?X: Catch up 'locate' requests early, so that we may strip the file name
+?X: before looking at the one-letter commands, in case the file name contains
+?X: one of them. Reported by Wayne Davison <davison@borland.com>.
+case "$fn" in
+*:*)
+ loc_file=`expr $fn : '.*:\(.*\)'`
+ fn=`expr $fn : '\(.*\):.*'`
+ ;;
+esac
+
+case "$fn" in
+*~*) tilde=true;;
+esac
+case "$fn" in
+*/*) fullpath=true;;
+esac
+case "$fn" in
+*+*) skip=true;;
+esac
+case "$fn" in
+*n*) none_ok=true;;
+esac
+case "$fn" in
+*e*) exp_file=true;;
+esac
+case "$fn" in
+*p*) nopath_ok=true;;
+esac
+
+case "$fn" in
+*f*) type='File';;
+*d*) type='Directory';;
+*l*) type='Locate';;
+esac
+
+what="$type"
+case "$what" in
+Locate) what='File';;
+esac
+
+case "$exp_file" in
+'')
+ case "$d_portable" in
+ "$define") ;;
+ *) exp_file=true;;
+ esac
+ ;;
+esac
+
+cd ..
+while test "$type"; do
+ redo=''
+ rp="$orig_rp"
+ dflt="$orig_dflt"
+ case "$tilde" in
+ true) rp="$rp (~name ok)";;
+ esac
+ . UU/myread
+?X: check for allowed escape sequence which may be accepted verbatim.
+ if test -f UU/getfile.ok && \
+ $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
+ then
+ value="$ans"
+ ansexp="$ans"
+ break
+ fi
+ case "$ans" in
+ none)
+ value=''
+ ansexp=''
+ case "$none_ok" in
+ true) type='';;
+ esac
+ ;;
+ *)
+ case "$tilde" in
+ '') value="$ans"
+ ansexp="$ans";;
+ *)
+ value=`UU/filexp $ans`
+ case $? in
+ 0)
+ if test "$ans" != "$value"; then
+ echo "(That expands to $value on this system.)"
+ fi
+ ;;
+ *) value="$ans";;
+ esac
+ ansexp="$value"
+ case "$exp_file" in
+ '') value="$ans";;
+ esac
+ ;;
+ esac
+ case "$fullpath" in
+ true)
+?X: Perform all the checks on ansexp and not value since when d_portable
+?X: is defined, the original un-expanded answer which is stored in value
+?X: would lead to "non-existent" error messages whilst ansexp has been
+?X: properly expanded. -- Fixed by Jan.Djarv@sa.erisoft.se (Jan Djarv)
+?X: Always expand ~user if '/' was requested
+ case "$ansexp" in
+ /*) value="$ansexp" ;;
+?X: Allow for c:/some/path
+ [a-zA-Z]:/*) value="$ansexp" ;;
+ *)
+ redo=true
+ case "$already" in
+ true)
+ echo "I shall only accept a full path name, as in /bin/ls." >&4
+ echo "Use a ! shell escape if you wish to check pathnames." >&4
+ ;;
+ *)
+ echo "Please give a full path name, starting with slash." >&4
+ case "$tilde" in
+ true)
+ echo "Note that using ~name is ok provided it expands well." >&4
+ already=true
+ ;;
+ esac
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ case "$redo" in
+ '')
+ case "$type" in
+ File)
+ for fp in $gfpth; do
+ if test "X$fp" = X.; then
+ pf="$ansexp"
+ else
+ pf="$fp/$ansexp"
+ fi
+ if test -f "$pf"; then
+ type=''
+ elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
+ then
+ echo "($value is not a plain file, but that's ok.)"
+ type=''
+ fi
+ if test X"$type" = X; then
+ value="$pf"
+ break
+ fi
+ done
+ ;;
+ Directory)
+ for fp in $gfpth; do
+ if test "X$fp" = X.; then
+ dir="$ans"
+ direxp="$ansexp"
+ else
+ dir="$fp/$ansexp"
+ direxp="$fp/$ansexp"
+ fi
+ if test -d "$direxp"; then
+ type=''
+ value="$dir"
+ break
+ fi
+ done
+ ;;
+ Locate)
+ if test -d "$ansexp"; then
+ echo "(Looking for $loc_file in directory $value.)"
+ value="$value/$loc_file"
+ ansexp="$ansexp/$loc_file"
+ fi
+ if test -f "$ansexp"; then
+ type=''
+ fi
+ case "$nopath_ok" in
+ true) case "$value" in
+ */*) ;;
+ *) echo "Assuming $value will be in people's path."
+ type=''
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+
+ case "$skip" in
+ true) type='';
+ esac
+
+ case "$type" in
+ '') ;;
+ *)
+ if test "$fastread" = yes; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ rp="$what $value doesn't exist. Use that name anyway?"
+ . UU/myread
+ dflt=''
+ case "$ans" in
+ y*) type='';;
+ *) echo " ";;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+done
+cd UU
+ans="$value"
+rp="$orig_rp"
+dflt="$orig_dflt"
+rm -f getfile.ok
+test "X$gfpthkeep" != Xy && gfpth=""
+EOSC
+
diff --git a/mcon/U/Guess.U b/mcon/U/Guess.U
new file mode 100644
index 0000000..3459325
--- /dev/null
+++ b/mcon/U/Guess.U
@@ -0,0 +1,228 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Guess.U,v $
+?RCS: Revision 3.0.1.5 1995/07/25 13:37:14 ram
+?RCS: patch56: now knows about OS/2 platforms
+?RCS:
+?RCS: Revision 3.0.1.4 1994/10/29 15:53:55 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS: patch36: call ./xenix explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0.1.3 1993/12/15 08:14:35 ram
+?RCS: patch15: variable d_bsd was not always set properly
+?RCS:
+?RCS: Revision 3.0.1.2 1993/08/30 08:57:14 ram
+?RCS: patch8: fixed comment which wrongly attributed the usrinc symbol
+?RCS: patch8: no more ugly messages when no /usr/include/ctype.h
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/27 14:37:37 ram
+?RCS: patch7: added support for OSF/1 machines
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:57 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit hazards some guesses as to what the general nature of the system
+?X: is. The information it collects here is used primarily to establish default
+?X: answers to other questions.
+?X:
+?MAKE:Guess d_eunice d_xenix d_bsd d_linux d_dos d_os2: cat test echo n c \
+ contains rm tr Loc eunicefix
+?MAKE: -pick add $@ %<
+?S:d_eunice:
+?S: This variable conditionally defines the symbols EUNICE_SYSTEM, which
+?S: alerts the C program that it must deal with ideosyncracies of VMS.
+?S:.
+?S:d_xenix:
+?S: This variable conditionally defines the symbol XENIX_SYSTEM, which alerts
+?S: the C program that it runs under Xenix.
+?S:.
+?S:d_dos:
+?S: This symbol conditionally defines the symbol DOS_SYSTEM when running on
+?S: DOS with DJGPP or Cygwin.
+?S:.
+?S:d_os2:
+?S: This symbol conditionally defines the symbol OS2_SYSTEM when running on
+?S: an OS/2 system.
+?S:.
+?S:d_bsd:
+?S: This symbol conditionally defines the symbol BSD_SYSTEM when running on a
+?S: BSD system.
+?S:.
+?S:d_linux:
+?S: This symbol conditionally defines the symbol LINUX_SYSTEM when running
+?S: on a Linux system.
+?S:.
+?C:EUNICE_SYSTEM (EUNICE):
+?C: This symbol, if defined, indicates that the program is being compiled
+?C: under the EUNICE package under VMS. The program will need to handle
+?C: things like files that don't go away the first time you unlink them,
+?C: due to version numbering. It will also need to compensate for lack
+?C: of a respectable link() command.
+?C:.
+?C:VMS_SYSTEM (VMS):
+?C: This symbol, if defined, indicates that the program is running under
+?C: VMS. It is currently only set in conjunction with the EUNICE symbol.
+?C:.
+?C:XENIX_SYSTEM (XENIX):
+?C: This symbol, if defined, indicates that the program is running under
+?C: Xenix (at least 3.0 ?).
+?C:.
+?C:DOS_SYSTEM:
+?C: This symbol, if defined, indicates that the program is running under
+?C: DOS with DJGPP.
+?C:.
+?C:OS2_SYSTEM:
+?C: This symbol, if defined, indicates that the program is running under
+?C: an OS/2 system.
+?C:.
+?C:BSD_SYSTEM:
+?C: This symbol, if defined, indicates that the program is running under
+?C: a BSD system.
+?C:.
+?C:LINUX_SYSTEM:
+?C: This symbol, if defined, indicates that the program is running under
+?C: a Linux system.
+?C:.
+?H:#$d_eunice EUNICE_SYSTEM /**/
+?H:#$d_eunice VMS_SYSTEM /**/
+?H:#$d_xenix XENIX_SYSTEM /**/
+?H:#$d_dos DOS_SYSTEM /**/
+?H:#$d_os2 OS2_SYSTEM /**/
+?H:#$d_bsd BSD_SYSTEM /**/
+?H:#$d_linux LINUX_SYSTEM /**/
+?H:.
+?F:./bsd ./usg ./v7 ./osf1 ./eunice ./xenix ./venix ./dos ./os2 ./gnu ./linux
+?T:xxx DJGPP MACHTYPE
+: make some quick guesses about what we are up against
+echo " "
+$echo $n "Hmm... $c"
+echo exit 1 >bsd
+echo exit 1 >usg
+echo exit 1 >v7
+echo exit 1 >osf1
+echo exit 1 >eunice
+echo exit 1 >xenix
+echo exit 1 >venix
+echo exit 1 >os2
+echo exit 1 >gnu
+echo exit 1 >linux
+echo exit 1 >dos
+d_bsd="$undef"
+d_linux="$undef"
+d_dos="$undef"
+d_os2="$undef"
+?X:
+?X: Do not use 'usrinc', or we get a circular dependency. because
+?X: usrinc is defined in usrinc.U, which relies on us...
+?X:
+$cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
+if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
+then
+ echo "Looks kind of like an OSF/1 system, but we'll see..."
+ echo exit 0 >osf1
+elif test `echo abc | $tr a-z A-Z` = Abc ; then
+ xxx=`./loc addbib blurfl $pth`
+ if $test -f $xxx; then
+ echo "Looks kind of like a USG system with BSD features, but we'll see..."
+ echo exit 0 >bsd
+ echo exit 0 >usg
+ else
+ if $contains SIGTSTP foo >/dev/null 2>&1 ; then
+ echo "Looks kind of like an extended USG system, but we'll see..."
+ else
+ echo "Looks kind of like a USG system, but we'll see..."
+ fi
+ echo exit 0 >usg
+ fi
+elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
+ echo "Looks kind of like a BSD system, but we'll see..."
+ d_bsd="$define"
+ echo exit 0 >bsd
+elif
+ $rm --version 2>/dev/null >foo;
+ $contains "Free Software Foundation" foo >/dev/null
+then
+ xxx=`uname`
+ echo exit 0 >gnu
+ echo "Looks kind of like a GNU/$xxx system, but we'll see..."
+ if $test X$xxx = XLinux; then
+ d_linux="$define"
+ echo exit 0 >linux
+ fi
+else
+ echo "Looks kind of like a Version 7 system, but we'll see..."
+ echo exit 0 >v7
+fi
+case "$eunicefix" in
+*unixtovms*)
+ $cat <<'EOI'
+There is, however, a strange, musty smell in the air that reminds me of
+something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
+EOI
+ echo exit 0 >eunice
+ d_eunice="$define"
+: it so happens the Eunice I know will not run shell scripts in Unix format
+ ;;
+*)
+ echo " "
+ echo "Congratulations. You aren't running Eunice."
+ d_eunice="$undef"
+ ;;
+esac
+case "$p_" in
+:) ;;
+*)
+ $cat <<'EOI'
+I have the feeling something is not exactly right, however...don't tell me...
+EOI
+ if test -n "$DJGPP"; then
+ case "X${MACHTYPE:-nonesuchmach}" in
+ cygwin) echo "hah!... you're running under Cygwin!";;
+ *) echo "got it... you're running DOS with DJGPP!";;
+ esac
+ echo exit 0 >dos
+ d_dos="$define"
+ else
+ $cat <<'EOI'
+lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
+EOI
+ echo exit 0 >os2
+ d_os2="$define"
+ fi
+ ;;
+esac
+if test -f /xenix; then
+ echo "Actually, this looks more like a XENIX system..."
+ echo exit 0 >xenix
+ d_xenix="$define"
+else
+ echo " "
+ echo "It's not Xenix..."
+ d_xenix="$undef"
+fi
+chmod +x xenix
+$eunicefix xenix
+if test -f /venix; then
+ echo "Actually, this looks more like a VENIX system..."
+ echo exit 0 >venix
+else
+ echo " "
+ if ./xenix; then
+ : null
+ else
+ echo "Nor is it Venix..."
+ fi
+fi
+chmod +x bsd usg v7 osf1 eunice xenix venix dos os2 gnu linux
+$eunicefix bsd usg v7 osf1 eunice xenix venix dos os2 gnu linux
+$rm -f foo
+
diff --git a/mcon/U/Head.U b/mcon/U/Head.U
new file mode 100644
index 0000000..1ee0e6b
--- /dev/null
+++ b/mcon/U/Head.U
@@ -0,0 +1,282 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Head.U,v $
+?RCS: Revision 3.0.1.9 1997/02/28 15:02:09 ram
+?RCS: patch61: make sure we unset CDPATH for shells that support this
+?RCS: patch61: improved Korn shell detection and handling
+?RCS:
+?RCS: Revision 3.0.1.8 1995/07/25 13:40:02 ram
+?RCS: patch56: added SVR4-ish /opt directories to path list (ADO)
+?RCS: patch56: OS/2 platforms are using another path separator
+?RCS:
+?RCS: Revision 3.0.1.7 1995/03/21 08:46:15 ram
+?RCS: patch52: definition of paths wrongly added spurious ':' chars
+?RCS:
+?RCS: Revision 3.0.1.6 1994/10/29 15:54:19 ram
+?RCS: patch36: make sure ENV is unset before calling /bin/ksh
+?RCS:
+?RCS: Revision 3.0.1.5 1994/08/29 16:03:44 ram
+?RCS: patch32: now sets PATH only using existing directories
+?RCS:
+?RCS: Revision 3.0.1.4 1994/06/20 06:54:28 ram
+?RCS: patch30: now computes its invocation name into 'me'
+?RCS: patch30: symbol me is made visible to all units read-only
+?RCS:
+?RCS: Revision 3.0.1.3 1993/12/15 08:15:07 ram
+?RCS: patch15: added /sbin:/usr/sbin:/usr/libexec in PATH for BSD/386
+?RCS:
+?RCS: Revision 3.0.1.2 1993/11/10 17:32:35 ram
+?RCS: patch14: ensure PATH is reset to '.' before testing for alias
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/27 14:38:07 ram
+?RCS: patch7: not all 'test' programs support the -x option
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:58 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This is the very first unit in the Configure script. It is mostly just
+?X: things to keep people from getting into a tizzy right off the bat.
+?X:
+?MAKE:Head:
+?MAKE: -pick wipe $@ %<
+?V:PATH p_ _exe me newsh
+?T:argv Id p paths OS2_SHELL DJGPP
+?T:inksh needksh avoidksh newsh changesh reason
+?F:!*
+?LINT:extern ENV CDPATH SHELL MACHTYPE
+?LINT:change ENV CDPATH
+?LINT:nocomment
+#! /bin/sh
+#
+# If these # comments don't work, trim them. Don't worry about any other
+# shell scripts, Configure will trim # comments from them for you.
+#
+# (If you are trying to port this package to a machine without sh,
+# I would suggest you have a look at the prototypical config_h.SH file
+# and edit it to reflect your system. Some packages may include samples
+# of config.h for certain machines, so you might look for one of those.)
+#
+?X:
+?X: NOTE THAT A CONFIGURE SCRIPT IS IN THE PUBLIC DOMAIN (whether or not
+?X: the software which uses it is in the public domain).
+?X:
+# Yes, you may rip this off to use in other distribution packages. This
+# script belongs to the public domain and cannot be copyrighted.
+#
+?X:
+?X: WE ASK YOU NOT TO REMOVE OR ALTER THE FOLLOWING PARAGRAPH, PLEASE:
+?X:
+# Note: this Configure script was generated automatically. Rather than
+# working with this copy of Configure, you may wish to get metaconfig.
+# The dist package (which contains metaconfig) is available at
+# http://sourceforge.net/projects/dist/
+?X:
+?X: NOTA BENE:
+?X: If you develop you own version of metaconfig based on this work,
+?X: you have to add some comments telling that the script was generated
+?X: by your version, not mine: It credits your work.
+?X:
+
+# $Id$
+#
+# Generated on <DATE> [metaconfig <VERSION> PL<PATCHLEVEL>]
+
+cat >c1$$ <<EOF
+ARGGGHHHH!!!!!
+
+SCO csh still thinks true is false. Write to SCO today and tell them that next
+year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
+
+(Actually, Configure ought to just patch csh in place. Hmm. Hmmmmm. All
+we'd have to do is go in and swap the && and || tokens, wherever they are.)
+
+[End of diatribe. We now return you to your regularly scheduled programming...]
+EOF
+cat >c2$$ <<EOF
+
+OOPS! You naughty creature! You didn't run Configure with sh!
+I will attempt to remedy the situation by running sh for you...
+EOF
+
+true || cat c1$$ c2$$
+true || exec sh $0 $argv:q
+
+(exit $?0) || cat c2$$
+(exit $?0) || exec sh $0 $argv:q
+rm -f c1$$ c2$$
+
+: compute my invocation name
+me=$0
+case "$0" in
+*/*)
+ me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
+ test "$me" || me=$0
+ ;;
+esac
+
+?X:
+?X: To be able to run under OS/2, we must detect that early enough to use
+?X: the proper path separator, stored in $p_. It is : on UNIX and ; on
+?X: DOSish systems such as OS/2.
+?X:
+: Proper separator for the PATH environment variable
+p_=:
+: On OS/2 this directory should exist if this is not floppy only system ":-]"
+if test -d c:/. ; then
+ if test -n "$OS2_SHELL"; then
+ p_=\;
+ PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
+?X: That's a bug in ksh5.22
+ OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
+ elif test -n "$DJGPP"; then
+ case "X${MACHTYPE:-nonesuchmach}" in
+ *cygwin) ;;
+ *) p_=\; ;;
+ esac
+ fi
+fi
+
+?X:
+?X: There are two schools of thoughts here. Some people correctly argue that
+?X: the user has a better chance than we do of setting a reasonable PATH and
+?X: others argue that Configure is the best place there is to set up a suitable
+?X: PATH. Well, here we try to compromize by keeping the user's PATH and
+?X: appending some directories which are known to work on some machine or the
+?X: other. The rationale behind this being that a novice user might not have a
+?X: proper environment variable set, and some directories like /etc (where
+?X: chown is located on some BSD systems) may be missing--RAM.
+?X:
+?X: SVR4 adds an /opt directory for optional packages. Some sites use
+?X: various permutations on /opt as opposed to /usr or /usr/local.-- ADO
+?X:
+?X: We only add directories that are not already in the PATH of the
+?X: user and the directories must exist also.
+?X:
+: Proper PATH setting
+paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
+paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
+paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
+paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
+paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
+paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
+paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
+paths="$paths /sbin /usr/sbin /usr/libexec"
+paths="$paths /system/gnu_library/bin"
+
+for p in $paths
+do
+ case "$p_$PATH$p_" in
+ *$p_$p$p_*) ;;
+ *) test -d $p && PATH=$PATH$p_$p ;;
+ esac
+done
+
+PATH=.$p_$PATH
+export PATH
+
+: shall we be using ksh?
+inksh=''
+needksh=''
+avoidksh=''
+newsh=/bin/ksh
+changesh=''
+?X: Use (alias -x) and not (alias) since zsh and bash recognize the alias
+?X: builtin but not the -x option which is typically ksh...
+?X: We need to set up PATH before calling the "alias" built-in since some
+?X: systems like HP-UX have a binary called /bin/alias.
+if (PATH=.; alias -x) >/dev/null 2>&1; then
+ inksh=true
+fi
+?X: On HP-UX, large Configure scripts may exercise a bug in /bin/sh, use ksh
+if test -f /hp-ux -a -f /bin/ksh; then
+ needksh='to avoid sh bug in "here document" expansion'
+fi
+?X: On AIX4, /bin/sh is really ksh and it causes problems, use sh
+if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
+ if test X`/usr/bin/uname -v` = X4; then
+ avoidksh="to avoid AIX 4's /bin/sh"
+ newsh=/usr/bin/bsh
+ fi
+fi
+?X: On Digital UNIX, /bin/sh may start up buggy /bin/ksh, use sh
+if test -f /osf_boot -a -f /usr/sbin/setld; then
+ if test X`/usr/bin/uname -s` = XOSF1; then
+ avoidksh="to avoid Digital UNIX' ksh"
+ newsh=/bin/sh
+?X: if BIN_SH is set to 'xpg4', sh will start up ksh
+ unset BIN_SH
+ fi
+fi
+?X: If we are not in ksh and need it, then feed us back to it
+case "$inksh/$needksh" in
+/[a-z]*)
+?X: Clear ENV to avoid any ~/.kshrc that could alias cd or whatever...
+?X: Don't use "unset ENV", that is not portable enough
+ ENV=''
+ changesh=true
+ reason="$needksh"
+ ;;
+esac
+?X: If we are in ksh and must avoid it, then feed us back to a new shell
+case "$inksh/$avoidksh" in
+true/[a-z]*)
+ changesh=true
+ reason="$avoidksh"
+ ;;
+esac
+?X: Warn them if they use ksh on other systems, which are those where
+?X: we don't need ksh nor want to avoid it explicitely, yet are using it.
+case "$inksh/$needksh-$avoidksh-" in
+true/--)
+ cat <<EOM
+(I see you are using the Korn shell. Some ksh's blow up on $me,
+mainly on older exotic systems. If yours does, try the Bourne shell instead.)
+EOM
+ ;;
+esac
+case "$changesh" in
+true)
+ export newsh
+ echo "(Feeding myself to $newsh $reason.)"
+?X: Make sure they didn't say sh <Configure by checking whether $0 ends
+?X: with Configure or not. If they did say sh <../../Configure, then too
+?X: bad for them anyway, since we lost that path indication...
+?X: Otherwise, execing $0 ensures we keep the full remote source dir
+?X: indication for src.U.
+ case "$0" in
+ Configure|*/Configure) exec $newsh $0 "$@";;
+ *) exec $newsh Configure "$@";;
+ esac
+ ;;
+esac
+
+?X: Unset CDPATH to avoid surprises when using cd under some shells
+?X: Can't unset it because that's not portable to very old shells.
+?X: Can't set it to '' because then bash 2.02 won't do "cd UU" --AD 6/98.
+?X: Don't want to set it to '.' because then ksh prints out the
+?X: name of the directory every time you cd to it. --AD 6/98
+?X: In order to inflict the least harm, change it only if it's set.
+: if needed, set CDPATH to a harmless value that is not chatty
+case "$CDPATH" in
+'') ;;
+*) case "$SHELL" in
+ *bash*) CDPATH='.' ;;
+ *) CDPATH='' ;;
+ esac
+ ;;
+esac
+
+: Configure runs within the UU subdirectory
+test -d UU || mkdir UU
+?X: Use ./* to avoid any confirmation prompts from enhanced shells -- WED
+cd UU && rm -f ./*
+
diff --git a/mcon/U/Inhdr.U b/mcon/U/Inhdr.U
new file mode 100644
index 0000000..e06282f
--- /dev/null
+++ b/mcon/U/Inhdr.U
@@ -0,0 +1,77 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Inhdr.U,v $
+?RCS: Revision 3.0.1.2 1995/05/12 12:01:31 ram
+?RCS: patch54: deleted tabs that caused some /bin/sh to core dump (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 15:55:01 ram
+?RCS: patch36: call ./whoa explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit checks wether a set of header files exists or not.
+?X: If the first header is not found, the function tries to locate
+?X: the next header, and so on, until one is found or there is no
+?X: more header in the list.
+?X:
+?X: To use it, say:
+?X: set header i_header [ header2 i_header2 ... ]
+?X: eval $inhdr
+?X:
+?MAKE:Inhdr: test Findhdr Whoa
+?MAKE: -pick add $@ %<
+?LINT:define inhdr
+?V:inhdr
+?S:inhdr:
+?S: This shell variable is used internally by Configure to check
+?S: wether a set of headers exist or not. A typical use is:
+?S: set header i_header [ header2 i_header2 ... ]
+?S: eval $inhdr
+?S: That will print a message, saying wether header was found or
+?S: not and set i_header* accordingly. If the first header is not
+?S: found, we try the next one, until the list is empty or one is found.
+?S:.
+?T:xxx xxf var td xxnf tu yyy instead was cont
+: define an alternate in-header-list? function
+inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
+cont=true; xxf="echo \"<\$1> found.\" >&4";
+case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
+*) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
+esac;
+case $# in 4) instead=instead;; *) instead="at last";; esac;
+while $test "$cont"; do
+ xxx=`./findhdr $1`
+ var=$2; eval "was=\$$2";
+ if $test "$xxx" && $test -r "$xxx";
+ then eval $xxf;
+?X: Next line shifted left 1 tabstop to avoid sh core dump on MachTen 2.1.1.
+ eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
+ cont="";
+ else eval $xxnf;
+?X: Likewise, the next line has been shifted left 1 tabstop -- ADO, 08/03/95
+ eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
+ set $yyy; shift; shift; yyy=$@;
+ case $# in 0) cont="";;
+ 2) xxf="echo \"but I found <\$1> $instead.\" >&4";
+ xxnf="echo \"and I did not find <\$1> either.\" >&4";;
+ *) xxf="echo \"but I found <\$1\> instead.\" >&4";
+ xxnf="echo \"there is no <\$1>, ...\" >&4";;
+ esac;
+done;
+?X: Remaining values are set to 'undef'
+while $test "$yyy";
+do set $yyy; var=$2; eval "was=\$$2";
+ eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
+ set $yyy; shift; shift; yyy=$@;
+done'
+
diff --git a/mcon/U/Init.U b/mcon/U/Init.U
new file mode 100644
index 0000000..892579d
--- /dev/null
+++ b/mcon/U/Init.U
@@ -0,0 +1,81 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Init.U,v $
+?RCS: Revision 3.0.1.1 1994/10/31 09:45:59 ram
+?RCS: patch44: removed Options from MAKE to prevent Init overrides
+?RCS: patch44: option processing now done after Myinit thanks to new Begin.U
+?RCS: patch44: moved "Beginning of configuration questions" to Begin.U
+?RCS: patch44: moved signal trapping instruction to Begin.U as well
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:02 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This file initializes certain default variables used by Configure. They
+?X: may be overridden or added to by definitions in Myinit.U.
+?X:
+?MAKE:Init eunicefix _exe: Null
+?MAKE: -pick add $@ %<
+?MAKE: -pick weed $@ ./Init
+?S:eunicefix:
+?S: When running under Eunice this variable contains a command which will
+?S: convert a shell script to the proper form of text file for it to be
+?S: executable by the shell. On other systems it is a no-op.
+?S:.
+?S:_exe (exe_ext):
+?S: This variable defines the extension used for executable files.
+?S: For unix it is empty. Other possible values include '.exe'.
+?S: DJGPP, Cygwin and OS/2 use '.exe'. Stratus VOS uses '.pm'.
+?S: On operating systems which do not require a specific extension
+?S: for executable files, this variable is empty.
+?S:.
+?V:define undef smallmach:rmlist
+?X:
+?X: Throughout the units, one may make use of $define and $undef to reference
+?X: a defined symbol or an undefined one. There is no need to add them in
+?X: the dependency line since this unit makes them visible via ?V:, and
+?X: everyone inherits from those symbols since by convention Init.U is the
+?X: root dependency.
+?X:
+?T: DJGPP
+: Initialize wide constants
+define='define'
+undef='undef'
+smallmach='pdp11 i8086 z8000 i80286 iAPX286'
+rmlist=''
+
+: We must find out about Eunice early
+eunicefix=':'
+if test -f /etc/unixtovms; then
+ eunicefix=/etc/unixtovms
+fi
+if test -f /etc/unixtovms.exe; then
+ eunicefix=/etc/unixtovms.exe
+fi
+
+: Set executable suffix now -- needed before hints available
+if test -f "/libs/version.library"; then
+ : Amiga OS
+ _exe=""
+elif test -f "/system/gnu_library/bin/ar.pm"; then
+ : Stratus VOS
+ _exe=".pm"
+elif test -n "$DJGPP"; then
+ : DOS DJGPP
+ _exe=".exe"
+elif test -d c:/. ; then
+ : OS/2 or cygwin
+ _exe=".exe"
+else
+ : All other UNIX systems
+ _exe=""
+fi
+
diff --git a/mcon/U/Inlibc.U b/mcon/U/Inlibc.U
new file mode 100644
index 0000000..64fd37a
--- /dev/null
+++ b/mcon/U/Inlibc.U
@@ -0,0 +1,64 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Inlibc.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 15:55:08 ram
+?RCS: patch36: call ./whoa explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:03 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit checks for the definition of a given function.
+?X:
+?X: To use it, say:
+?X: set function d_func
+?X: eval $inlibc
+?X:
+?MAKE:Inlibc: Csym Whoa Oldconfig
+?MAKE: -pick add $@ %<
+?LINT:define inlibc
+?V:inlibc
+?S:inlibc:
+?S: This shell variable is used internally by Configure to check
+?S: wether a given function is defined or not. A typical use is:
+?S: set function d_func
+?S: eval $inlibc
+?S: That will print a message, saying wether function was found or
+?S: not and set d_func accordingly.
+?S:.
+?T:was tx sym tres td tu var
+: define an is-in-libc? function
+inlibc='echo " "; td=$define; tu=$undef;
+sym=$1; var=$2; eval "was=\$$2";
+tx=yes;
+case "$reuseval$was" in
+true) ;;
+true*) tx=no;;
+esac;
+case "$tx" in
+yes)
+ set $sym tres -f;
+ eval $csym;
+ case "$tres" in
+ true)
+ echo "$sym() found." >&4;
+ case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
+ *)
+ echo "$sym() NOT found." >&4;
+ case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
+ esac;;
+*)
+ case "$was" in
+ $define) echo "$sym() found." >&4;;
+ *) echo "$sym() NOT found." >&4;;
+ esac;;
+esac'
+
diff --git a/mcon/U/Instruct.U b/mcon/U/Instruct.U
new file mode 100644
index 0000000..deccaf8
--- /dev/null
+++ b/mcon/U/Instruct.U
@@ -0,0 +1,116 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Instruct.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:02:55 ram
+?RCS: patch61: logname / whoami sequence rewritten to use case
+?RCS:
+?RCS: Revision 3.0.1.2 1995/02/15 14:11:34 ram
+?RCS: patch51: author name now appears at the end of the paragraph (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1995/01/11 15:12:05 ram
+?RCS: patch45: now documents the & escape to turn -d on at the read prompt
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:04 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit spew out the directions that we want everyone to read. I try to
+?X: keep the first "pagefull" much less than a page since they don't know it
+?X: isn't going to go shooting off the top of the screen, and we don't want
+?X: to panic them yet.
+?X:
+?MAKE:Instruct: Myread Configdir contains
+?MAKE: -pick wipe $@ %<
+?T:user needman firsttime
+: general instructions
+needman=true
+firsttime=true
+user=`(logname) 2>/dev/null`
+case "$user" in
+'') user=`whoami 2>&1`;;
+esac
+if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
+ firsttime=false
+ echo " "
+ rp='Would you like to see the instructions?'
+ dflt=n
+ . ./myread
+ case "$ans" in
+ [yY]*) ;;
+ *) needman=false;;
+ esac
+fi
+if $needman; then
+ cat <<EOH
+
+This installation shell script will examine your system and ask you questions
+to determine how the <PACKAGENAME> package should be installed. If you get
+stuck on a question, you may use a ! shell escape to start a subshell or
+execute a command. Many of the questions will have default answers in square
+brackets; typing carriage return will give you the default.
+
+On some of the questions which ask for file or directory names you are allowed
+to use the ~name construct to specify the login directory belonging to "name",
+even if you don't have a shell which knows about that. Questions where this is
+allowed will be marked "(~name ok)".
+
+EOH
+ rp=''
+ dflt='Type carriage return to continue'
+ . ./myread
+ cat <<'EOH'
+
+The prompter used in this script allows you to use shell variables and
+backticks in your answers. You may use $1, $2, etc... to refer to the words
+in the default answer, as if the default line was a set of arguments given to a
+script shell. This means you may also use $* to repeat the whole default line,
+so you do not have to re-type everything to add something to the default.
+
+Everytime there is a substitution, you will have to confirm. If there is an
+error (e.g. an unmatched backtick), the default answer will remain unchanged
+and you will be prompted again.
+
+If you are in a hurry, you may run 'Configure -d'. This will bypass nearly all
+the questions and use the computed defaults (or the previous answers if there
+was already a config.sh file). Type 'Configure -h' for a list of options.
+You may also start interactively and then answer '& -d' at any prompt to turn
+on the non-interactive behaviour for the remainder of the execution.
+
+EOH
+ . ./myread
+ cat <<EOH
+
+Much effort has been expended to ensure that this shell script will run on any
+Unix system. If despite that it blows up on yours, your best bet is to edit
+Configure and run it again. If you can't run Configure for some reason,
+you'll have to generate a config.sh file by hand. Whatever problems you
+have, let me (<MAINTLOC>) know how I blew it.
+
+This installation script affects things in two ways:
+
+1) it may do direct variable substitutions on some of the files included
+ in this kit.
+2) it builds a config.h file for inclusion in C programs. You may edit
+ any of these files as the need arises after running this script.
+
+If you make a mistake on a question, there is no easy way to back up to it
+currently. The easiest thing to do is to edit config.sh and rerun all the SH
+files. Configure will offer to let you do this before it runs the SH files.
+
+EOH
+?X: In case they played with the prompter...
+ dflt='Type carriage return to continue'
+ . ./myread
+ case "$firsttime" in
+ true) echo $user >>../.config/instruct;;
+ esac
+fi
+
diff --git a/mcon/U/Loc.U b/mcon/U/Loc.U
new file mode 100644
index 0000000..bf8c056
--- /dev/null
+++ b/mcon/U/Loc.U
@@ -0,0 +1,381 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Loc.U,v $
+?RCS: Revision 3.0.1.10 1997/02/28 15:04:16 ram
+?RCS: patch61: allow users to specify paths on the command line
+?RCS: patch61: will now substitute cp for ln if not supported
+?RCS:
+?RCS: Revision 3.0.1.9 1995/09/25 09:11:24 ram
+?RCS: patch59: commented the purpose of the #un-def directive
+?RCS: patch59: abort Configure run when mandatory command is missing
+?RCS:
+?RCS: Revision 3.0.1.8 1995/07/25 13:40:40 ram
+?RCS: patch56: now knows about OS/2 platforms
+?RCS:
+?RCS: Revision 3.0.1.7 1995/01/11 15:13:37 ram
+?RCS: patch45: protected "sh -c" within backquotes for Linux and SGI
+?RCS: patch45: added path lookup for the 'comm' program
+?RCS:
+?RCS: Revision 3.0.1.6 1994/10/29 15:56:14 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS: patch36: be careful and guard against wildcard searching (ADO)
+?RCS:
+?RCS: Revision 3.0.1.5 1994/06/20 06:54:55 ram
+?RCS: patch30: now locates find
+?RCS:
+?RCS: Revision 3.0.1.4 1994/05/13 15:18:15 ram
+?RCS: patch27: added byacc to the trylist (ADO)
+?RCS: patch27: lint lines reformatted (ADO)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/01/24 14:01:44 ram
+?RCS: patch16: added metalint hint on changed PATH variable
+?RCS:
+?RCS: Revision 3.0.1.2 1993/12/15 08:16:52 ram
+?RCS: patch15: now set _test variable when test is built-in
+?RCS: patch15: fixed rare cases where echo is not needed
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 15:47:13 ram
+?RCS: patch10: test program not always in /bin/test (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:05 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a shell script "loc" which can be used to find out
+?X: where in a list of directories something is. It then uses loc to
+?X: determine the location of commonly used programs. It leaves loc sitting
+?X: around for other Configure units to use, but arranges for its demise
+?X: at the end of Configure.
+?X:
+?X: To add a new program to find, add it both to the ?MAKE: line and to either
+?X: the loclist or trylist variable.
+?X:
+?X: I put startsh at the end of the dependency list, in order to avoid the
+?X: loading of the spitshell unit before the instructions.
+?X:
+?MAKE:Loc Mcc awk ar bash bison byacc cat chgrp chmod chown \
+ comm compress cp cpio cpp csh date echo egrep emacs expr find flex \
+ gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \
+ make mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \
+ shar sleep smail sort submit tail tar tbl tee test touch tr troff \
+ uname uniq uuname vi zcat zip: eunicefix n c startsh Instruct Warn
+?MAKE: -pick weed $@ %<
+?LINT: describe Mcc awk ar bash bison byacc cat chgrp chmod chown \
+ comm compress cp cpio cpp csh date echo egrep emacs expr find flex \
+ gmake gzip grep inews ksh less line lint ln lp lpr ls mail mailx \
+ make mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \
+ shar sleep smail sort submit tail tar tbl tee test touch tr troff \
+ uname uniq uuname vi zcat zip
+?V::pth loclist trylist
+?F:./loc
+?T:thisthing thing xxx dir file say DJGPP
+?T:_test _grep _cp _gmake _egrep _ln _make dflt
+?LINT: change PATH
+: find out where common programs are
+echo " "
+echo "Locating common programs..." >&4
+cat <<EOSC >loc
+$startsh
+case \$# in
+0) exit 1;;
+esac
+thing=\$1
+shift
+dflt=\$1
+shift
+for dir in \$*; do
+ case "\$thing" in
+ .)
+ if test -d \$dir/\$thing; then
+ echo \$dir
+ exit 0
+ fi
+ ;;
+ *)
+?X: Be careful in case thing includes wildcards that might expand to multiple
+?X: files. Choose the last one. This happens when searching for shared
+?X: libraries with version numbers. How to choose which one we want is
+?X: probably an insoluble problem, in general.
+?X: Some folks leave things like libc.so.orig around w/o read
+?X: permission. A -r test would handle that, but since ./loc is
+?X: also used to find executables (which are installed w/o read
+?X: permission on SCO ODT 3.0, we can't include the -r test.
+ for thisthing in \$dir/\$thing; do
+ : just loop through to pick last item
+ done
+ if test -f \$thisthing; then
+ echo \$thisthing
+ exit 0
+ elif test -f \$thisthing$_exe; then
+ echo \$thisthing
+ exit 0
+ elif test -f \$dir/\$thing.exe; then
+ if test -n "$DJGPP"; then
+ echo \$dir/\$thing.exe
+ else
+ : on Eunice apparently
+ echo \$dir/\$thing
+ fi
+ exit 0
+ fi
+ ;;
+ esac
+done
+echo \$dflt
+exit 1
+EOSC
+chmod +x loc
+$eunicefix loc
+loclist="
+?awk:awk
+?cat:cat
+?chgrp:chgrp
+?chmod:chmod
+?chown:chown
+?comm:comm
+?cp:cp
+?echo:echo
+?expr:expr
+?find:find
+?grep:grep
+?ls:ls
+?mkdir:mkdir
+?mv:mv
+?rm:rm
+?sed:sed
+?sleep:sleep
+?sort:sort
+?tail:tail
+?touch:touch
+?tr:tr
+?uniq:uniq
+"
+trylist="
+?Mcc:Mcc
+?ar:ar
+?bash:bash
+?bison:bison
+?byacc:byacc
+?compress:compress
+?cpio:cpio
+?cpp:cpp
+?csh:csh
+?date:date
+?egrep:egrep
+?emacs:emacs
+?flex:flex
+?gmake:gmake
+?gzip:gzip
+?inews:inews
+?ksh:ksh
+?less:less
+?line:line
+?lint:lint
+?ln:ln
+?lp:lp
+?lpr:lpr
+?mail:mail
+?mailx:mailx
+?make:make
+?more:more
+?nm:nm
+?nroff:nroff
+?perl:perl
+?pg:pg
+?pmake:pmake
+?pr:pr
+?rmail:rmail
+?sendmail:sendmail
+?shar:shar
+?smail:smail
+?submit:submit
+?tar:tar
+?tbl:tbl
+?tee:tee
+?test:test
+?troff:troff
+?uname:uname
+?uuname:uuname
+?vi:vi
+?zcat:zcat
+?zip:zip
+"
+?LINT: set awk ar bash bison byacc cat chgrp chmod chown \
+ comm compress cp cpio cpp csh date echo emacs expr find flex \
+ gmake gzip grep inews ksh less line lint lp lpr ls mail mailx \
+ mkdir more mv nm nroff perl pg pmake pr rm rmail sed sendmail \
+ shar sleep smail sort submit tail tar tbl tee touch tr troff \
+ uname uniq uuname vi zcat zip
+pth=`echo $PATH | sed -e "s/$p_/ /g"`
+pth="$pth /lib /usr/lib"
+for file in $loclist; do
+?X:
+?X: Allow them to -Dmake=pmake on the command line for instance...
+?X: If the file is not fully qualified, as in -Dmake=pmake, then we
+?X: look the for the specified command (pmake here). If they say
+?X: -Dmake=/sbin/make for instance, then we make sure the file
+?X: exists, or we die...
+?X:
+ eval xxx=\$$file
+ case "$xxx" in
+ /*|?:[\\/]*)
+ if test -f "$xxx"; then
+ : ok
+ else
+ ./warn "no $xxx -- ignoring your setting for $file."
+ xxx=`./loc $file $file $pth`
+ fi
+ ;;
+ '') xxx=`./loc $file $file $pth`;;
+ *) xxx=`./loc $xxx $xxx $pth`;;
+ esac
+ eval $file=$xxx$_exe
+ eval _$file=$xxx
+ case "$xxx" in
+ /*)
+ echo $file is in $xxx.
+ ;;
+?X: Under OS/2, we have PC-like paths
+ ?:[\\/]*)
+ echo $file is in $xxx.
+ ;;
+ *)
+ echo "I don't know where '$file' is, and my life depends on it." >&4
+ echo "Go find a public domain implementation or fix your PATH setting!" >&4
+ exit 1
+ ;;
+ esac
+done
+echo " "
+echo "Don't worry if any of the following aren't found..."
+say=offhand
+for file in $trylist; do
+?X: Allow them to -Dmake=pmake on the command line for instance (see above)
+ eval xxx=\$$file
+ case "$xxx" in
+ /*|?:[\\/]*)
+ if test -f "$xxx"; then
+ : ok
+ else
+ ./warn "no $xxx -- ignoring your setting for $file."
+ xxx=`./loc $file $file $pth`
+ fi
+ ;;
+ '') xxx=`./loc $file $file $pth`;;
+ *) xxx=`./loc $xxx $xxx $pth`;;
+ esac
+ eval $file=$xxx$_exe
+ eval _$file=$xxx
+ case "$xxx" in
+ /*)
+ echo $file is in $xxx.
+ ;;
+?X: Under OS/2, we have PC-like paths
+ ?:[\\/]*)
+ echo $file is in $xxx.
+ ;;
+ *)
+ echo "I don't see $file out there, $say."
+ say=either
+ ;;
+ esac
+done
+case "$egrep" in
+egrep)
+ echo "Substituting grep for egrep."
+ egrep=$grep
+ _egrep=$_grep
+ ;;
+esac
+@if ln
+case "$ln" in
+ln)
+ echo "Substituting cp for ln."
+ ln=$cp
+ _ln=$_cp
+ ;;
+esac
+@end
+@if make || gmake
+case "$make" in
+make)
+ case "$gmake" in
+ gmake)
+ echo "I can't find make or gmake, and my life depends on it." >&4
+ echo "Go find a public domain implementation or fix your PATH setting!" >&4
+ exit 1
+ ;;
+ esac
+ ;;
+esac
+case "$gmake" in
+gmake) ;;
+*) # We can't have osname yet.
+ if test -f "/system/gnu_library/bin/ar.pm"; then # Stratus VOS
+ # Assume that gmake, if found, is definitely GNU make
+ # and prefer it over the system make.
+ echo "Substituting gmake for make."
+ make=$gmake
+ _make=$_gmake
+ fi
+ ;;
+esac
+@end
+case "$test" in
+test)
+ echo "Hopefully test is built into your sh."
+ ;;
+*)
+ if `sh -c "PATH= test true" >/dev/null 2>&1`; then
+ echo "Using the test built into your sh."
+?X:
+?X: We need to set both test and _test, since Oldconfig.U will use the _test
+?X: value to systematically restore computed paths, which may be wrong if
+?X: we choose to load an old config.sh generated on another platform.
+?X:
+ test=test
+ _test=test
+ fi
+ ;;
+esac
+?LINT:change n c
+case "$echo" in
+echo)
+ echo "Hopefully echo is built into your sh."
+ ;;
+?X: For those rare cases where we don't need $echo...
+'') ;;
+*)
+ echo " "
+echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
+ $echo $n "hi there$c" >foo1
+ echo $n "hi there$c" >foo2
+ if cmp foo1 foo2 >/dev/null 2>&1; then
+ echo "They are compatible. In fact, they may be identical."
+ else
+ case "$n" in
+ '-n') n='' c='\c';;
+ *) n='-n' c='';;
+ esac
+ cat <<FOO
+They are not compatible! You are probably running ksh on a non-USG system.
+I'll have to use $echo instead of the builtin, since Bourne shell doesn't
+have echo built in and we may have to run some Bourne shell scripts. That
+means I'll have to use '$n$c' to suppress newlines now. Life is ridiculous.
+
+FOO
+ $echo $n "The star should be here-->$c"
+ $echo "*"
+ fi
+ $rm -f foo1 foo2
+ ;;
+esac
+
diff --git a/mcon/U/Loc_sed.U b/mcon/U/Loc_sed.U
new file mode 100644
index 0000000..f61a876
--- /dev/null
+++ b/mcon/U/Loc_sed.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?X: This is used in perl.c.
+?MAKE:full_sed: sed
+?MAKE: -pick add $@ %<
+?S:full_sed:
+?S: This variable contains the full pathname to 'sed', whether or
+?S: not the user has specified 'portability'. This is only used
+?S: in the compiled C program, and we assume that all systems which
+?S: can share this executable will have the same full pathname to
+?S: 'sed.'
+?S:.
+?X: Yes, I know about the C symbol PORTABLE, but I think sed
+?X: is unlikely to move, and I'm too lazy to add all the
+?X: #ifdef PORTABLE sections to the perl source.
+?X:
+?C:LOC_SED:
+?C: This symbol holds the complete pathname to the sed program.
+?C:.
+?H:#define LOC_SED "$full_sed" /**/
+?H:.
+: Store the full pathname to the sed program for use in the C program
+full_sed=$sed
+
diff --git a/mcon/U/Magic_h.U b/mcon/U/Magic_h.U
new file mode 100644
index 0000000..8e2556c
--- /dev/null
+++ b/mcon/U/Magic_h.U
@@ -0,0 +1,43 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Magic_h.U,v $
+?RCS: Revision 3.0.1.2 1993/11/10 17:32:58 ram
+?RCS: patch14: forgot to mention Id in the dependencies
+?RCS:
+?RCS: Revision 3.0.1.1 1993/10/16 13:46:59 ram
+?RCS: patch12: created for ?M: lines support (magic symbols)
+?RCS:
+?X:
+?X: This file ends up producing the confmagic.h include, which is used to
+?X: automagically remap some C symbols via cpp redefinitions.
+?X:
+?X: The file ./Magic_h below contains all the ?M: lines extracted out of all
+?X: the units. Metaconfig itself adds the final #endif statement.
+?X: Note that this code isn't included into Configure, but must be shipped with.
+?X:
+?MAKE:Magic_h: Id Config_h
+?MAKE: -pick cm_h_weed $@ %<
+?MAKE: -pick cm_h_weed $@ ./Magic_h
+?LINT:nocomment
+/*
+ * This file was produced by running metaconfig and is intended to be included
+ * after config.h and after all the other needed includes have been dealt with.
+ *
+ * This file may be empty, and should not be edited. Rerun metaconfig instead.
+ * If you wish to get rid of this magic, remove this file and rerun metaconfig
+ * without the -M option.
+ *
+ * $Id$
+ */
+
+#ifndef _confmagic_h_
+#define _confmagic_h_
+
diff --git a/mcon/U/MailAuthor.U b/mcon/U/MailAuthor.U
new file mode 100644
index 0000000..61c226a
--- /dev/null
+++ b/mcon/U/MailAuthor.U
@@ -0,0 +1,192 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Graham Stoney <greyham@research.canon.oz.au>
+?RCS:
+?RCS: $Log: MailAuthor.U,v $
+?RCS: Revision 3.0.1.5 1997/02/28 15:04:41 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0.1.4 1994/08/29 16:05:09 ram
+?RCS: patch32: avoid message sending if they said no previously
+?RCS:
+?RCS: Revision 3.0.1.3 1993/10/16 13:47:30 ram
+?RCS: patch12: now makes sure user-specified address is in Internet format
+?RCS:
+?RCS: Revision 3.0.1.2 1993/09/13 15:48:49 ram
+?RCS: patch10: reverted to original intent by the Author himself
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/27 14:38:38 ram
+?RCS: patch7: now prompts user for its e-mail address
+?RCS: patch7: no longer silent when mail has been sent
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:06 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?RCS:
+?X:
+?X: This unit asks the user to please send a message to the author.
+?X: To force inclusion of this unit, you must add it's name to the
+?X: dependancies on the MAKE line in your private copy of End.U.
+?X: This allows a smart mailagent program to automatically let users know
+?X: when their package is out of date, and to allow users to be notified of
+?X: any future patches.
+?X:
+?MAKE:MailAuthor mailpatches notifypatches usermail: test cat mailer \
+ package Myread patchlevel baserev rm rsrc Oldconfig Configdir
+?MAKE: -pick wipe $@ %<
+?S:mailpatches:
+?S: Indicates whether the user would like future patches to be mailed
+?S: directly to them.
+?S:.
+?S:notifypatches:
+?S: Indicates whether the user would like notification of future patches
+?S: mailed to them.
+?S:.
+?S:usermail:
+?S: This variable is used internally by Configure to keep track of the
+?S: user e-mail address, where notifications or patches should be sent.
+?S: A '-' value means the return address will be extracted by parsing
+?S: the mail headers.
+?S:.
+?T:opt mailpatches notifypatches atsh status
+: notify author that his package is used
+if $test -f ../.config/mailauthor &&
+ cmp $rsrc/patchlevel.h ../.config/mailauthor >/dev/null 2>&1
+then
+ status="say that you're using $package";
+ case "$mailpatches" in
+ true) status='have patches mailed to you as they are issued';;
+ esac
+ case "$notifypatches" in
+ true) status='be notified when new patches are issued';;
+ esac
+ $cat <<EOM
+
+You have already sent the author of $package (<MAINTLOC>) mail to
+$status. If you wish, you may modify
+your previous request by sending a new mail with different options.
+
+EOM
+ rp='Should I send a status update to <MAINTLOC>?'
+ dflt=n
+else
+ $cat <<EOM
+
+If you are able to send mail to the Internet, the author of $package would
+really appreciate you letting me send off a quick note, just to say that you've
+tried it. The author is more likely to spend time maintaining $package if it's
+known that many people are using it, and you can even ask to get sent new
+patches automagically this way if you wish. To protect your privacy, all I'll
+say in the mail is the version of $package that you're using.
+
+EOM
+ rp='Should I send mail to <MAINTLOC>?'
+ dflt=y
+?X: Ensure default is 'n' if question has been asked already, in case they
+?X: run Configure -d next time and answered 'n' the first time. Therefore,
+?X: an empty nomail will be created later on even if no mail is sent.
+ $test -f ../.config/nomail && dflt=n
+fi
+. ./myread
+case "$ans" in
+[yY]*)
+ echo " "
+ echo "Great! Your cooperation is really appreciated."
+ $cat <<EOM
+
+Some braindead sites do not set a proper return address in the From: header of
+their outgoing mail, making it impossible to reply to mail they generate.
+If your site is broken in this way, write to your system administrator and get
+it fixed!!! In the mean time, you can manually specify the Internet e-mail
+address by which the author can get back to you, should there be a need to do
+so. If manually specified, it should be something like "user@domain.top".
+If your mail system generates addresses correctly, specify "none".
+
+EOM
+ case "$usermail" in
+ '-'|'') dflt=none;;
+ *) dflt="$usermail";;
+ esac
+ rp='Manually specify a return address to use:'
+ . ./myread
+ case "$ans" in
+ none|*@*.*)
+ case "$ans" in
+ none) usermail='-';;
+ *) usermail="$ans";;
+ esac
+ ;;
+ *)
+ echo "(Address does not look like an Internet one -- ignoring it.)"
+?X:
+?X: If we can't trust their mailer or their return address, it's highly
+?X: suggested that they only register and don't ask to get anything from
+?X: the author, since it's likely to bounce in null-land -- RAM.
+?X:
+ usermail='-'
+ mailpatches=false
+ notifypatches=false
+ ;;
+ esac
+ echo " "
+ opt=''
+ rp='Would you like to have new patches automatically mailed to you?'
+ case "$mailpatches" in
+ true) dflt=y;;
+ *) dflt=n;;
+ esac
+ . ./myread
+ case "$ans" in
+ [yY]*) opt=' mailpatches'; mailpatches=true;;
+ *)
+ mailpatches=false
+ echo " "
+ rp='Ok, would you like to simply be notified of new patches?'
+ case "$notifypatches" in
+ false) dflt=n;;
+ *) dflt=y;;
+ esac
+ . ./myread
+ echo " "
+ case "$ans" in
+ [yY]*) opt=' notifypatches'; notifypatches=true;;
+ *)
+ echo "Fine, I'll simply say that you've tried it then."
+ notifypatches=false
+ ;;
+ esac
+ ;;
+ esac
+ echo "Sending mail to <MAINTLOC>..." >&4
+?X: Bizarre hack here. We can't just put @SH in the hereis lines below, because
+?X: metaconfig will interpret it as a command, and there's no quoting mechanism.
+?X: Do it via a variable instead.
+ atsh='@SH'
+ $mailer <MAINTLOC> <<EOM >/dev/null 2>&1
+Subject: Command
+Precedence: junk
+To: <MAINTLOC>
+
+$atsh package $usermail $package $baserev $patchlevel$opt
+EOM
+ $rm -f ../.config/mailauthor ../.config/nomail
+ cp $rsrc/patchlevel.h ../.config/mailauthor
+ ;;
+*)
+ case "$dflt" in
+ "y")
+ echo "Oh well, maybe next time."
+ cp /dev/null ../.config/nomail
+ ;;
+ esac
+ ;;
+esac
+
diff --git a/mcon/U/MailList.U b/mcon/U/MailList.U
new file mode 100644
index 0000000..e9fb039
--- /dev/null
+++ b/mcon/U/MailList.U
@@ -0,0 +1,82 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Graham Stoney <greyham@research.canon.oz.au>
+?RCS:
+?RCS: $Log: MailList.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:01:49 ram
+?RCS: patch16: created
+?RCS:
+?RCS:
+?X:
+?X: This unit offers the user the option of subscribing to the mailing
+?X: list. To force inclusion of this unit, you must add it's name to the
+?X: dependancies on the MAKE line in your private copy of End.U.
+?X: The address of the mailing list server must be set via a "list_request=..."
+?X: entry in the .package file. This is usually done by running packinit and
+?X: answering the proper questions.
+?X:
+?MAKE:MailList: cat mailer package Myread cf_name cf_email
+?MAKE: -pick wipe $@ %<
+?T:list_request list_sub list_unsub list_name
+?X:
+?X: The cf_name dependency is used through list_sub when the mailing list
+?X: manager happens to be listserv, whereas cf_email is used whith majordomo
+?X: or when the mailing list request address is scanned by a human. Since
+?X: they do not appear within the unit itself, we need a lint hint.
+?X:
+?LINT:use cf_name cf_email
+: offer to join the mailing list
+list_request='<$list_request>'
+list_sub="<$list_sub>"
+list_unsub="<$list_unsub>"
+list_name="<$list_name>"
+$cat <<EOM
+
+There is a mailing list for discussion about $package and related issues.
+This is the preferred place to ask questions about the program and discuss
+modifications and additions with the author and other users. If you are able
+to send mail to the Internet, you are encouraged to subscribe. You need only
+ever subscribe once, and you can unsubscribe automatically at any time in the
+future. If you have already subscribed and you wish to unsubscribe now, you
+may do so by answering "unsubscribe". Answer "subscribe" to subscribe to the
+list.
+
+EOM
+rp="Subscribe to or unsubscribe from the $list_name mailing list?"
+dflt=neither
+. ./myread
+case "$ans" in
+[sS]*) $cat <<EOM
+
+You will be sent a message from the list server to let you know when your
+subscription has been successful and telling you how to submit articles and
+how to unsubscribe again when necessary. You may also unsubscribe by running
+this script again and asking it to do so for you.
+
+EOM
+ echo "Sending mail to subscribe you to the $list_name list..." >&4
+ $mailer $list_request <<EOM >/dev/null 2>&1
+Precedence: junk
+To: $list_request
+
+$list_sub
+EOM
+ ;;
+[uU]*) echo "Sending mail to unsubscribe you from the $list_name list..." >&4
+ $mailer $list_request <<EOM >/dev/null 2>&1
+Precedence: junk
+To: $list_request
+
+$list_unsub
+EOM
+ ;;
+esac
+
diff --git a/mcon/U/Mkdirp.U b/mcon/U/Mkdirp.U
new file mode 100644
index 0000000..bad6081
--- /dev/null
+++ b/mcon/U/Mkdirp.U
@@ -0,0 +1,51 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Extract.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 14:58:52 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 15:51:46 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:04:52 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a shell script which can launched to create a
+?X: directory path like "mkdir -p" would do.
+?X:
+?MAKE:Mkdirp: eunicefix startsh
+?MAKE: -pick add $@ %<
+?F:./mkdirp
+?T:name create file
+: script used to emulate mkdir -p
+cat >mkdirp <<EOS
+$startsh
+EOS
+cat >>mkdirp <<'EOS'
+name=$1;
+create="";
+while test $name; do
+ if test ! -d "$name"; then
+ create="$name $create"
+ name=`echo $name | sed -e "s|^[^/]*$||"`
+ name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`
+ else
+ name=""
+ fi
+done
+for file in $create; do
+ mkdir $file
+done
+EOS
+chmod +x mkdirp
+$eunicefix mkdirp
+
diff --git a/mcon/U/Mksymlinks.U b/mcon/U/Mksymlinks.U
new file mode 100644
index 0000000..92318a8
--- /dev/null
+++ b/mcon/U/Mksymlinks.U
@@ -0,0 +1,90 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 2000, Jarkko Hietaniemi
+?RCS:
+?X:
+?X: This unit allows the duplication of the source tree to the current
+?X: directory via symbolic links. This must be requested explicitly
+?X: by them issuing a -Dmksymlinks on the command line.
+?X:
+?MAKE:Mksymlinks: Mkdirp lns issymlink src rsrc pkgsrc
+?MAKE: -pick add $@ %<
+?F:!UU
+?T: dir filename tmppwd filelist
+?LINT:extern mksymlinks
+@if {test -f ../MANIFEST}
+: Duplicate the tree with symbolic links if -Dmksymlinks was supplied
+case "$mksymlinks" in
+$define|true|[yY]*)
+ echo " "
+ case "$src" in
+ ''|'.') echo "Cannot create symlinks in the original directory." >&4
+ exit 1
+ ;;
+ *) case "$lns:$issymlink" in
+ *"ln"*" -s:"*"test -"?)
+ echo "Creating the symbolic links..." >&4
+ echo "(First creating the subdirectories...)" >&4
+ cd ..
+ awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | \
+ sort -u | while true
+ do
+ read dir
+ test -z "$dir" && break
+ ./UU/mkdirp $dir 2>/dev/null
+ if test -d $dir; then
+ : ok
+ else
+ echo "Failed to create '$dir'. Aborting." >&4
+ exit 1
+ fi
+ done
+ echo "(Now creating the symlinks...)" >&4
+ awk '{print $1}' $src/MANIFEST | while true; do
+ read filename
+ test -z "$filename" && break
+ if test -f $filename; then
+ if $issymlink $filename; then
+ rm -f $filename
+ fi
+ fi
+ if test -f $filename; then
+ echo "$filename already exists, not symlinking."
+ else
+?X: Note that the following works because "$pkgsrc" is absolute
+ ln -s $pkgsrc/$filename $filename
+ fi
+ done
+?X: Check that everything was correctly copied
+ echo "(Checking current directory...)" >&4
+ cd UU
+ awk '$1 !~ /PACK[A-Z]+/ {print $1}' "$rsrc/MANIFEST" | \
+ (split -l 50 2>/dev/null || split -50)
+ rm -f missing
+ tmppwd=`pwd`
+ for filelist in x??; do
+ (cd ..; ls `cat "$tmppwd/$filelist"` \
+ >/dev/null 2>>"$tmppwd/missing")
+ done
+ if test -s missing; then
+ echo "Failed duplication of source tree. Aborting." >&4
+ exit 1
+ fi
+ ;;
+ *) echo "(I cannot figure out how to do symbolic links, ignoring!)" >&4
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+esac
+
+@end
diff --git a/mcon/U/Myinit.U b/mcon/U/Myinit.U
new file mode 100644
index 0000000..0ab97f4
--- /dev/null
+++ b/mcon/U/Myinit.U
@@ -0,0 +1,26 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Myinit.U,v $
+?RCS: Revision 3.0.1.1 1994/10/31 09:47:29 ram
+?RCS: patch44: leading comment states this unit comes before option processing
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:07 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: If you want to initialize any default values, copy this unit to your
+?X: personal U directory and add the assignments to the end. This file
+?X: is included after variables are initialized but before any old
+?X: config.sh file is read in and before any Configure switch processing.
+?X:
+?MAKE:Myinit: Init
+?MAKE: -pick add $@ %<
+?LINT: nocomment
diff --git a/mcon/U/Myread.U b/mcon/U/Myread.U
new file mode 100644
index 0000000..330f503
--- /dev/null
+++ b/mcon/U/Myread.U
@@ -0,0 +1,199 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Myread.U,v $
+?RCS: Revision 3.0.1.6 1997/02/28 15:05:39 ram
+?RCS: patch61: myread script now starts with a "startsh"
+?RCS: patch61: miscellaneous fixes
+?RCS:
+?RCS: Revision 3.0.1.5 1995/01/11 15:14:22 ram
+?RCS: patch45: added & escape allowing user to turn on -d from the prompt
+?RCS:
+?RCS: Revision 3.0.1.4 1994/10/31 09:48:04 ram
+?RCS: patch44: added Options to the MAKE line since it's no longer in Init.U
+?RCS:
+?RCS: Revision 3.0.1.3 1994/10/29 15:56:20 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.2 1993/08/30 08:57:59 ram
+?RCS: patch8: added new visible 'nostick' symbol, mainly for Finish.U
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/27 14:39:20 ram
+?RCS: patch7: now sticks to the question when no default and empty answer
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a bit of shell code that must be dotted in in order
+?X: to do a read. It allows for shell escapes, default assignment and
+?X: parameter evaluation.
+?X:
+?X: To use this unit, $rp and $dflt must hold the question and the
+?X: default answer. The question will be printed by the script itself.
+?X: Neither $rp nor $dflt is altered by the script.
+?X:
+?X: The myread script will stick to the question if no default is proposed
+?X: and the user answer is empty, which prevents mistakes. However, at the
+?X: end of Configure, there is an exception to this rule (Finish.U) where we
+?X: set nostick to a non-empty value to allow the Return key to play its role!
+?X:
+?MAKE:Myread: Options startsh n c trnl
+?MAKE: -pick add $@ %<
+?V:ans:dflt rp nostick
+?F:./myread
+?T:COLUMNS xxxm rp dflt answ aok myecho
+?LINT:change fastread
+?X: Some shells (Ultrix) do not understand ${COLUMNS:-80}, sigh!
+: compute the number of columns on the terminal for proper question formatting
+case "$COLUMNS" in
+'') COLUMNS='80';;
+esac
+
+: set up the echo used in my read
+?X:
+?X: This variable is intended to be eval'ed. It will echo the two
+?X: variables $rp and $dflt (provided this latter has a non null value).
+?X: It is mainly used by the myread script to echo the questions.
+?X:
+?X: The $n and $c below are substituted before Loc does its silly echo check
+?X: so don't put a $ on the echo below so we get builtin, even if $echo is
+?X: pointing to /bin/echo.
+?X:
+myecho="case \"\$xxxm\" in
+'') echo $n \"\$rp $c\" >&4;;
+*) case \"\$rp\" in
+ '') echo $n \"[\$xxxm] $c\";;
+ *)
+ if test \`echo \"\$rp [\$xxxm] \" | wc -c\` -ge $COLUMNS; then
+ echo \"\$rp\" >&4
+ echo $n \"[\$xxxm] $c\" >&4
+ else
+ echo $n \"\$rp [\$xxxm] $c\" >&4
+ fi
+ ;;
+ esac;;
+esac"
+
+: now set up to do reads with possible shell escape and default assignment
+cat <<EOSC >myread
+$startsh
+?X:
+?X: Save value of default -- do not alter original in case of eval
+?X:
+xxxm=\$dflt
+$myecho
+?X:
+?X: If there is no default, then stop, regardless of the value in fastread.
+?X: In silent mode, no new-line is to be echoed if the question is empty,
+?X: since this is used to wait for the "return" key.
+?X:
+ans='!'
+case "\$fastread" in
+yes) case "\$dflt" in
+ '') ;;
+ *) ans='';
+ case "\$silent-\$rp" in
+ true-) ;;
+ *) echo " " >&4;;
+ esac;;
+ esac;;
+*) case "\$silent" in
+ true) case "\$rp" in
+ '') ans='';;
+ esac;;
+ esac;;
+esac
+while expr "X\$ans" : "X!" >/dev/null; do
+ read answ
+?X:
+?X: Run 'eval' on the answer, in order to do variable substitution, in case
+?X: the user types $HOME or $WHATEVER. Variables must be evaluated now.
+?X: Typing '\$HOME' won't currently prevent from substitution -- use '\\$HOME'
+?X: The $1 .. $9 and $*, as well as $@, are available to refer to the
+?X: default value.
+?X:
+ set x \$xxxm
+ shift
+ aok=''; eval "ans=\\"\$answ\\"" && aok=y
+ case "\$answ" in
+?X:
+?X: Use "!" and not a plain ! because of a bug in BSD 4.4 shell
+?X: (reported by Wayne Davison)
+?X: We must handle the shell escapes before dealing with possible variable
+?X: substitution, since the shell we're launching in that case will be able
+?X: to do it as well as we can -- RAM, 15/03/96
+?X
+ "!")
+ sh 1>&4
+ echo " "
+ $myecho
+ ;;
+ !*)
+ set x \`expr "X\$ans" : "X!\(.*\)\$"\`
+ shift
+ sh 1>&4 -c "\$*"
+ echo " "
+ $myecho
+ ;;
+ "\$ans")
+ case "\$ans" in
+?X:
+?X: Answers starting with & are hooks allowing to dynamically turn on/off
+?X: some Configure options. That's for the future. -- RAM, 09/01/95
+?X: Today, we only recognize '& -d' to mean 'go on as if Configure -d, which
+?X: is a hardwired behaviour compatible with our general scheme.
+?X:
+ \\&*)
+ set x \`expr "X\$ans" : "X&\(.*\)\$"\`
+ shift
+ case "\$1" in
+ -d)
+ fastread=yes
+ echo "(OK, I'll run with -d after this question.)" >&4
+ ;;
+ -*)
+ echo "*** Sorry, \$1 not supported yet." >&4
+ ;;
+ esac
+ $myecho
+ ans=!
+ ;;
+ esac;;
+ *)
+ case "\$aok" in
+ y)
+ echo "*** Substitution done -- please confirm."
+ xxxm="\$ans"
+ ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
+ xxxm="\$ans"
+ ans=!
+ ;;
+ *)
+ echo "*** Error -- try again."
+ ans=!
+ ;;
+ esac
+ $myecho
+ ;;
+ esac
+?X: Stick in myread if no default answer and nothing was answered
+ case "\$ans\$xxxm\$nostick" in
+ '')
+ ans=!
+ $myecho
+ ;;
+ esac
+done
+case "\$ans" in
+'') ans="\$xxxm";;
+esac
+EOSC
+
diff --git a/mcon/U/Nothing.U b/mcon/U/Nothing.U
new file mode 100644
index 0000000..fe40801
--- /dev/null
+++ b/mcon/U/Nothing.U
@@ -0,0 +1,19 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Nothing.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:09 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: The purpose of this file is to supply an empty target for the private
+?X: Makefile built by metaconfig to order the units.
+?X:
+?MAKE:Nothing: Head
diff --git a/mcon/U/Null.U b/mcon/U/Null.U
new file mode 100644
index 0000000..bb218b0
--- /dev/null
+++ b/mcon/U/Null.U
@@ -0,0 +1,20 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Null.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:10 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit ends up producing shell code to set all variables to ''. This
+?X: probably isn't necessary, but I'm paranoid. About certain things.
+?X:
+?MAKE:Null: Head
+?MAKE: -pick add.Null $@ %<
diff --git a/mcon/U/Obsol_h.U b/mcon/U/Obsol_h.U
new file mode 100644
index 0000000..1061aa9
--- /dev/null
+++ b/mcon/U/Obsol_h.U
@@ -0,0 +1,28 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Obsol_h.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:11 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This file is prepended to .MT/Obsol_h if that file is not empty. That file
+?X: contains the necessary mappings of new symbols to obsolete ones.
+?X:
+?MAKE:Obsol_h:
+?MAKE: -pick prepend $@ ./Obsol_h
+?LINT:nocomment
+/*
+ * The following symbols are obsolete. They are mapped to the the new
+ * symbols only to ease the transition process. The sources should be
+ * updated so as to use the new symbols only, as the support for these
+ * obsolete symbols may end without notice.
+ */
+
diff --git a/mcon/U/Obsol_sh.U b/mcon/U/Obsol_sh.U
new file mode 100644
index 0000000..0a976bf
--- /dev/null
+++ b/mcon/U/Obsol_sh.U
@@ -0,0 +1,27 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Obsol_sh.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:11 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This file is prepended to .MT/Obsol_sh if that file is not empty. That file
+?X: contains the necessary mappings of new symbols to obsolete ones.
+?X:
+?MAKE:Obsol_sh:
+?MAKE: -pick prepend $@ ./Obsol_sh
+?LINT:nocomment
+#
+# The following symbols are obsolete. They are mapped to the the new
+# symbols only to ease the transition process. The sources should be
+# updated so as to use the new symbols only, since supporting of those
+# obsolete symbols may end without notice.
+#
diff --git a/mcon/U/Oldconfig.U b/mcon/U/Oldconfig.U
new file mode 100644
index 0000000..9e079dd
--- /dev/null
+++ b/mcon/U/Oldconfig.U
@@ -0,0 +1,687 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Oldconfig.U,v $
+?RCS: Revision 3.0.1.10 1997/02/28 15:06:39 ram
+?RCS: patch61: added support for src.U
+?RCS: patch61: new OSNAME define
+?RCS: patch61: can now sense new OSes
+?RCS:
+?RCS: Revision 3.0.1.9 1995/07/25 13:40:51 ram
+?RCS: patch56: now knows about OS/2 platforms
+?RCS:
+?RCS: Revision 3.0.1.8 1995/05/12 12:04:18 ram
+?RCS: patch54: config.sh reload logic now knows about new -K switch
+?RCS: patch54: cleaned up and extended osvers for DEC OSF/1 (ADO)
+?RCS: patch54: added MachTen detection (ADO)
+?RCS:
+?RCS: Revision 3.0.1.7 1995/02/15 14:13:41 ram
+?RCS: patch51: adapted osvers computation for AIX (ADO)
+?RCS:
+?RCS: Revision 3.0.1.6 1995/01/30 14:27:15 ram
+?RCS: patch49: unit Options.U now exports file optdef.sh, not a variable
+?RCS: patch49: update code for myuname changed (WED)
+?RCS:
+?RCS: Revision 3.0.1.5 1995/01/11 15:15:36 ram
+?RCS: patch45: added quotes around the INITPROG variable (ADO)
+?RCS: patch45: allows variable overriding after config file loading
+?RCS:
+?RCS: Revision 3.0.1.4 1994/10/29 15:57:05 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS: patch36: merged with the version used for perl5's Configure (ADO)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/05/06 14:24:17 ram
+?RCS: patch23: added support for osf1 hints
+?RCS: patch23: new support for solaris and i386 systems (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/01/24 14:05:02 ram
+?RCS: patch16: added post-processing on myuname for Xenix targets
+?RCS: patch16: message proposing config.sh defaults made consistent
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 15:56:32 ram
+?RCS: patch10: force use of config.sh when -d option is used (WAD)
+?RCS: patch10: complain about non-existent hint files (WAD)
+?RCS: patch10: added Options dependency for fastread variable
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:12 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit tries to remember what we did last time we ran Configure, mostly
+?X: for the sake of setting defaults.
+?X:
+?MAKE:Oldconfig hint myuname osname osvers: Instruct Myread Checkcc \
+ Mksymlinks Loc Options Tr src trnl ln uname sh awk sed test cat grep \
+ rm lns tr n c contains targetarch
+?MAKE: -pick wipe $@ %<
+?S:myuname:
+?S: The output of 'uname -a' if available, otherwise the hostname. On Xenix,
+?S: pseudo variables assignments in the output are stripped, thank you. The
+?S: whole thing is then lower-cased.
+?S:.
+?S:hint:
+?S: Gives the type of hints used for previous answers. May be one of
+?S: "default", "recommended" or "previous".
+?S:.
+?S:osname:
+?S: This variable contains the operating system name (e.g. sunos,
+?S: solaris, hpux, etc.). It can be useful later on for setting
+?S: defaults. Any spaces are replaced with underscores. It is set
+?S: to a null string if we can't figure it out.
+?S:.
+?S:osvers:
+?S: This variable contains the operating system version (e.g.
+?S: 4.1.3, 5.2, etc.). It is primarily used for helping select
+?S: an appropriate hints file, but might be useful elsewhere for
+?S: setting defaults. It is set to '' if we can't figure it out.
+?S: We try to be flexible about how much of the version number
+?S: to keep, e.g. if 4.1.1, 4.1.2, and 4.1.3 are essentially the
+?S: same for this package, hints files might just be os_4.0 or
+?S: os_4.1, etc., not keeping separate files for each little release.
+?S:.
+?C:OSNAME:
+?C: This symbol contains the name of the operating system, as determined
+?C: by Configure. You shouldn't rely on it too much; the specific
+?C: feature tests from Configure are generally more reliable.
+?C:.
+?C:OSVERS:
+?C: This symbol contains the version of the operating system, as determined
+?C: by Configure. You shouldn't rely on it too much; the specific
+?C: feature tests from Configure are generally more reliable.
+?C:.
+?H:#define OSNAME "$osname" /**/
+?H:#define OSVERS "$osvers" /**/
+?H:.
+?F:!config.sh
+?T:tmp tmp_n tmp_c tmp_sh file
+?T:xxxxfile xxxfile xxfile xfile hintfile newmyuname
+?T:tans _ isesix INITPROG DJGPP has_uname
+?D:osname=''
+?LINT:change n c sh
+?LINT:extern hostarch
+?LINT:change hostarch
+: Determine the name of the machine
+myuname=`$uname -a 2>/dev/null`
+$test -z "$myuname" && myuname=`hostname 2>/dev/null`
+?X: Special mention for Xenix, whose 'uname -a' gives us output like this:
+?X: sysname=XENIX
+?X: nodename=whatever
+?X: release=2.3.2 .. etc...
+?X: Therefore, we strip all this variable assignment junk and remove all the
+?X: new lines to keep the myuname variable sane... --RAM
+myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
+ ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
+?X: Save the value we just computed to reset myuname after we get done here.
+newmyuname="$myuname"
+$test -f "$uname$_exe" && has_uname=y
+
+: Guessing of the OS name -- half the following guesses are probably wrong...
+: If you have better tests or hints, please send them to the metaconfig
+: authors and to <MAINTLOC>
+$test -f /irix && osname=irix
+$test -f /xenix && osname=sco_xenix
+$test -f /dynix && osname=dynix
+$test -f /dnix && osname=dnix
+$test -f /lynx.os && osname=lynxos
+$test -f /unicos && osname=unicos && osvers=`$uname -r`
+$test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
+$test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
+$test -f /bin/mips && /bin/mips && osname=mips
+$test -d /NextApps && set X `hostinfo | $grep 'NeXT Mach.*:' | \
+ $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
+$test -d /usr/apollo/bin && osname=apollo
+$test -f /etc/saf/_sactab && osname=svr4
+$test -d /usr/include/minix && osname=minix
+$test -f /system/gnu_library/bin/ar.pm && osname=vos
+if $test -d /MachTen -o -d /MachTen_Folder; then
+?X: MachTen uname -a output looks like
+?X: xxx 4 0.0 Macintosh
+?X: MachTen /sbin/version output looks like
+?X: MachTen 4.0 Mon Aug 28 10:18:00 1995
+?X: MachTen 3.x had the 'version' command in /usr/etc/version.
+ osname=machten
+ if $test -x /sbin/version; then
+ osvers=`/sbin/version | $awk '{print $2}' |
+ $sed -e 's/[A-Za-z]$//'`
+ elif $test -x /usr/etc/version; then
+ osvers=`/usr/etc/version | $awk '{print $2}' |
+ $sed -e 's/[A-Za-z]$//'`
+ else
+ osvers="$2.$3"
+ fi
+fi
+$test -f /sys/posix.dll &&
+ $test -f /usr/bin/what &&
+ set X `/usr/bin/what /sys/posix.dll` &&
+ $test "$3" = UWIN &&
+ osname=uwin &&
+ osvers="$5"
+?X: If we have uname, we already computed a suitable uname -a output, correctly
+?X: formatted for Xenix, and it lies in $myuname.
+if $test "X$has_uname" != X; then
+ set X $myuname
+ shift
+ case "$5" in
+ fps*) osname=fps ;;
+ mips*)
+ case "$4" in
+ umips) osname=umips ;;
+ *) osname=mips ;;
+ esac;;
+ [23]100) osname=mips ;;
+ next*) osname=next ;;
+?X: Interactive Unix.
+ i386*)
+ tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
+ if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
+ osname='sco'
+ osvers=$tmp
+ elif $test -f /etc/kconfig; then
+ osname=isc
+ if $test "$lns" = "$ln -s"; then
+ osvers=4
+ elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
+ osvers=3
+ elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
+ osvers=2
+ fi
+ fi
+ tmp=''
+ ;;
+?X: MS-DOS djgpp uname -a output looks like:
+?X: ms-dos xxx 6 22 pc
+?X: $1 is the "dos flavor" (need not be "ms-dos").
+?X: $2 is the node name
+?X: $3 and $4 are version/subversion
+?X: $5 is always "pc", but that might not be unique to DJGPP.
+?X: (e.g. Solaris_x86 has $5 = i86pc, which doesn't actually conflict,
+?X: but it's close enought that I can easily imagine other vendors also
+?X: using variants of pc* in $5.)
+?X: The "DJGPP" environment variable is always set when djgpp is active.
+ pc*)
+ if $test -n "$DJGPP"; then
+ osname=dos
+ osvers=djgpp
+ fi
+ ;;
+ esac
+ case "$1" in
+ aix) osname=aix
+?X: aix 4.1 uname -a output looks like
+?X: AIX foo 1 4 000123456789
+?X: where $4 is the major release number and $3 is the (minor) version.
+?X: More detail on the version is available with the oslevel command.
+?X: in 3.2.x, it output a string (see case statements below). In 4.1,
+?X: it puts out something like 4.1.1.0
+ tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
+ case "$tmp" in
+ 'not found') osvers="$4"."$3" ;;
+ '<3240'|'<>3240') osvers=3.2.0 ;;
+ '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
+ '=3250'|'>3250') osvers=3.2.5 ;;
+ *) osvers=$tmp;;
+ esac
+ ;;
+ bsd386) osname=bsd386
+ osvers=`$uname -r`
+ ;;
+ cygwin*) osname=cygwin
+ osvers="$3"
+ ;;
+ *dc.osx) osname=dcosx
+ osvers="$3"
+ ;;
+ dnix) osname=dnix
+ osvers="$3"
+ ;;
+ domainos) osname=apollo
+ osvers="$3"
+ ;;
+ dgux) osname=dgux
+ osvers="$3"
+ ;;
+?X: uname -a returns
+?X: DYNIX/ptx xxx 4.0 V4.1.2 i386
+ dynixptx*) osname=dynixptx
+ osvers=`echo "$4"|sed 's/^v//'`
+ ;;
+ freebsd) osname=freebsd
+ osvers="$3" ;;
+ genix) osname=genix ;;
+?X: HP-UX uname -a gives something like
+?X: HP-UX foobar B.10.20 A 9000/735 2016483812 two-user license
+?X: Preserve the full 10.20 string instead of the previous plain '10'.
+?X: Thanks to Graham Barr. --AD 6/30/1998
+ hp*) osname=hpux
+ osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
+ ;;
+ irix*) osname=irix
+ case "$3" in
+ 4*) osvers=4 ;;
+ 5*) osvers=5 ;;
+ *) osvers="$3" ;;
+ esac
+ ;;
+ linux) osname=linux
+ case "$3" in
+ *) osvers="$3" ;;
+ esac
+ ;;
+ MiNT) osname=mint
+ ;;
+ netbsd*) osname=netbsd
+ osvers="$3"
+ ;;
+ news-os) osvers="$3"
+ case "$3" in
+ 4*) osname=newsos4 ;;
+ *) osname=newsos ;;
+ esac
+ ;;
+ next*) osname=next ;;
+ nonstop-ux) osname=nonstopux ;;
+ openbsd) osname=openbsd
+ osvers="$3"
+ ;;
+ POSIX-BC | posix-bc ) osname=posix-bc
+ osvers="$3"
+ ;;
+ powerux | power_ux | powermax_os | powermaxos | \
+ powerunix | power_unix) osname=powerux
+ osvers="$3"
+ ;;
+ qnx) osname=qnx
+ osvers="$4"
+ ;;
+ solaris) osname=solaris
+ case "$3" in
+ 5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
+ *) osvers="$3" ;;
+ esac
+ ;;
+ sunos) osname=sunos
+ case "$3" in
+ 5*) osname=solaris
+ osvers=`echo $3 | $sed 's/^5/2/g'` ;;
+ *) osvers="$3" ;;
+ esac
+ ;;
+ titanos) osname=titanos
+ case "$3" in
+ 1*) osvers=1 ;;
+ 2*) osvers=2 ;;
+ 3*) osvers=3 ;;
+ 4*) osvers=4 ;;
+ *) osvers="$3" ;;
+ esac
+ ;;
+ ultrix) osname=ultrix
+ osvers="$3"
+ ;;
+ osf1|mls+) case "$5" in
+ alpha)
+?X: DEC OSF/1 myuname -a output looks like: osf1 xxxx t3.2 123.4 alpha
+?X: where the version number can be something like [xvt]n.n
+ osname=dec_osf
+?X: sizer knows the minor minor version: the letter
+ osvers=`sizer -v | awk '{print $3}' | \
+ ./tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
+ case "$osvers" in
+ [1-9].[0-9]*) ;;
+ *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
+ esac
+ ;;
+ hp*) osname=hp_osf1 ;;
+ mips) osname=mips_osf1 ;;
+?X: hp and mips were unsupported Technology Releases -- ADO, 24/10/94
+ esac
+ ;;
+ unixware) osname=svr5
+ osvers="$4"
+ ;;
+ uts) osname=uts
+ osvers="$3"
+ ;;
+ vos) osvers="$3"
+ ;;
+ $2) case "$osname" in
+ *isc*) ;;
+ *freebsd*) ;;
+ svr*)
+ : svr4.x or possibly later
+ case "svr$3" in
+ ${osname}*)
+ osname=svr$3
+ osvers=$4
+ ;;
+ esac
+ case "$osname" in
+ svr4.0)
+ : Check for ESIX
+ if $test -f /stand/boot ; then
+ eval `$grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
+ if $test -n "$INITPROG" -a -f "$INITPROG"; then
+ isesix=`strings -a $INITPROG | \
+ $grep 'ESIX SYSTEM V/386 Release 4.0'`
+ if $test -n "$isesix"; then
+ osname=esix4
+ fi
+ fi
+ fi
+ ;;
+ esac
+ ;;
+ *) if $test -f /etc/systemid; then
+ osname=sco
+ set `echo $3 | $sed 's/\./ /g'` $4
+ if $test -f $src/hints/sco_$1_$2_$3.sh; then
+ osvers=$1.$2.$3
+ elif $test -f $src/hints/sco_$1_$2.sh; then
+ osvers=$1.$2
+ elif $test -f $src/hints/sco_$1.sh; then
+ osvers=$1
+ fi
+ else
+ case "$osname" in
+ '') : Still unknown. Probably a generic Sys V.
+ osname="sysv"
+ osvers="$3"
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ ;;
+ *) case "$osname" in
+ '') : Still unknown. Probably a generic BSD.
+ osname="$1"
+ osvers="$3"
+ ;;
+ esac
+ ;;
+ esac
+else
+?X: Try to identify sony's NEWS-OS (BSD unix)
+ if $test -f /vmunix -a -f $src/hints/news_os.sh; then
+ (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
+ if $contains news-os UU/kernel.what >/dev/null 2>&1; then
+ osname=news_os
+ fi
+ $rm -f UU/kernel.what
+?X: Maybe it's OS/2 or DOS or something similar
+ elif $test -d c:/.; then
+ set X $myuname
+ osname=os2
+ osvers="$5"
+ fi
+fi
+
+: Try to determine whether config.sh was made on this system
+case "$config_sh" in
+'')
+?X: indentation wrong on purpose--RAM
+dflt=n
+case "$knowitall" in
+'')
+ if test -f ../config.sh; then
+ if $contains myuname= ../config.sh >/dev/null 2>&1; then
+ eval "`$grep myuname= ../config.sh`"
+ fi
+ if test "X$myuname" = "X$newmyuname"; then
+ dflt=y
+ fi
+ fi
+ ;;
+*) dflt=y;;
+esac
+
+: Get old answers from config file if it was generated on the same system
+hint=default
+if $test -f ../config.sh; then
+ echo " "
+ rp="I see a config.sh file. Shall I use it to set the defaults?"
+ . ./myread
+ case "$ans" in
+ n*|N*) echo "OK, I'll ignore it."
+ mv ../config.sh ../config.sh.old
+ myuname="$newmyuname"
+ ;;
+ *) echo "Fetching default answers from your old config.sh file..." >&4
+ tmp_n="$n"
+ tmp_c="$c"
+ tmp_sh="$sh"
+ . ../config.sh
+ cp ../config.sh .
+ n="$tmp_n"
+ c="$tmp_c"
+ hint=previous
+ ;;
+ esac
+fi
+?X: remember, case indentation is wrong--RAM
+;;
+*)
+ echo " "
+ echo "Fetching default answers from $config_sh..." >&4
+ tmp_n="$n"
+ tmp_c="$c"
+ tmp_sh="$sh"
+ cd ..
+?X: preserve symbolic links, if any
+ cp $config_sh config.sh 2>/dev/null
+ chmod +w config.sh
+ . ./config.sh
+ cd UU
+ cp ../config.sh .
+ n="$tmp_n"
+ c="$tmp_c"
+ hint=previous
+ ;;
+esac
+?X: Older versions did not always set $sh.
+case "$sh" in
+'') sh="$tmp_sh" ;;
+esac
+$test "$override" && . ./optdef.sh
+
+: Restore computed paths
+for file in $loclist $trylist; do
+ eval $file="\$_$file"
+done
+
+. ./checkcc
+?X: Cross-compiling support
+case "$targetarch" in
+'') ;;
+*) hostarch=$osname
+ osname=`echo $targetarch|sed 's,^[^-]*-,,'`
+ osvers=''
+ ;;
+esac
+
+@if {test -d ../hints}
+: Offer them some hints based on their OS
+cd ..
+?X: Since we are now at the root of the source tree, we must use $src
+?X: to access the sources and not $rsrc. See src.U for details...
+if $test ! -f config.sh; then
+ $cat <<EOM
+
+First time through, eh? I have some defaults handy for some systems
+that need some extra help getting the Configure answers right:
+
+EOM
+ (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/ /g' >&4
+ dflt=''
+
+ : Now look for a hint file osname_osvers, unless one has been
+ : specified already.
+ case "$hintfile" in
+ ''|' ')
+ file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
+ : Also try without trailing minor version numbers.
+ xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
+ xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
+ xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
+ xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
+ case "$file" in
+ '') dflt=none ;;
+ *) case "$osvers" in
+ '') dflt=$file
+ ;;
+ *) if $test -f $src/hints/$file.sh ; then
+ dflt=$file
+ elif $test -f $src/hints/$xfile.sh ; then
+ dflt=$xfile
+ elif $test -f $src/hints/$xxfile.sh ; then
+ dflt=$xxfile
+ elif $test -f $src/hints/$xxxfile.sh ; then
+ dflt=$xxxfile
+ elif $test -f $src/hints/$xxxxfile.sh ; then
+ dflt=$xxxxfile
+ elif $test -f "$src/hints/${osname}.sh" ; then
+ dflt="${osname}"
+ else
+ dflt=none
+ fi
+ ;;
+ esac
+ ;;
+ esac
+ if $test -f Policy.sh ; then
+ case "$dflt" in
+ *Policy*) ;;
+ none) dflt="Policy" ;;
+ *) dflt="Policy $dflt" ;;
+ esac
+ fi
+ ;;
+ *)
+ dflt=`echo $hintfile | $sed 's/\.sh$//'`
+ ;;
+ esac
+
+ if $test -f Policy.sh ; then
+ $cat <<EOM
+
+There's also a Policy hint file available, which should make the
+site-specific (policy) questions easier to answer.
+EOM
+
+ fi
+
+ $cat <<EOM
+
+You may give one or more space-separated answers, or "none" if appropriate.
+A well-behaved OS will have no hints, so answering "none" or just "Policy"
+is a good thing. DO NOT give a wrong version or a wrong OS.
+
+EOM
+
+ rp="Which of these apply, if any?"
+ . UU/myread
+ tans=$ans
+ for file in $tans; do
+ if $test X$file = XPolicy -a -f Policy.sh; then
+ . Policy.sh
+ $cat Policy.sh >> UU/config.sh
+ elif $test -f $src/hints/$file.sh; then
+ . $src/hints/$file.sh
+ $cat $src/hints/$file.sh >> UU/config.sh
+ elif $test X"$tans" = X -o X"$tans" = Xnone ; then
+ : nothing
+ else
+ : Give one chance to correct a possible typo.
+ echo "$file.sh does not exist"
+ dflt=$file
+ rp="hint to use instead?"
+ . UU/myread
+ for file in $ans; do
+ if $test -f "$src/hints/$file.sh"; then
+ . $src/hints/$file.sh
+ $cat $src/hints/$file.sh >> UU/config.sh
+ elif $test X$ans = X -o X$ans = Xnone ; then
+ : nothing
+ else
+ echo "$file.sh does not exist -- ignored."
+ fi
+ done
+ fi
+ done
+
+ hint=recommended
+ : Remember our hint file for later.
+ if $test -f "$src/hints/$file.sh" ; then
+ hintfile="$file"
+ else
+ hintfile=''
+ fi
+fi
+cd UU
+?X: From here on, we must use $rsrc instead of $src
+
+@end
+: Process their -A options
+. ./posthint.sh
+
+@if osname || osvers
+: Ask them to confirm the OS name
+cat << EOM
+
+Configure uses the operating system name and version to set some defaults.
+The default value is probably right if the name rings a bell. Otherwise,
+since spelling matters for me, either accept the default or answer "none"
+to leave it blank.
+
+EOM
+@end
+@if osname
+case "$osname" in
+ ''|' ')
+ case "$hintfile" in
+ ''|' '|none) dflt=none ;;
+ *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
+ esac
+ ;;
+ *) dflt="$osname" ;;
+esac
+rp="Operating system name?"
+. ./myread
+case "$ans" in
+none) osname='' ;;
+*) osname=`echo "$ans" | $sed -e 's/[ ][ ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
+esac
+@end
+@if osvers
+@if osname
+echo " "
+@end
+case "$osvers" in
+ ''|' ')
+ case "$hintfile" in
+ ''|' '|none) dflt=none ;;
+ *) dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
+ dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
+ case "$dflt" in
+ ''|' ') dflt=none ;;
+ esac
+ ;;
+ esac
+ ;;
+ *) dflt="$osvers" ;;
+esac
+rp="Operating system version?"
+. ./myread
+case "$ans" in
+none) osvers='' ;;
+*) osvers="$ans" ;;
+esac
+
+@end
diff --git a/mcon/U/Oldsym.U b/mcon/U/Oldsym.U
new file mode 100644
index 0000000..8b11133
--- /dev/null
+++ b/mcon/U/Oldsym.U
@@ -0,0 +1,66 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Oldsym.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:06:58 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:13 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit follows the creation of the config.sh file. It adds some
+?X: special symbols: defines from patchlevel.h file if any and CONFIG,
+?X: which is set to true. Then, we try to keep all the new symbols that
+?X: may come from a hint file or a previous config.sh file.
+?X:
+?MAKE:Oldsym: Config_sh Options test hint src sed sort uniq
+?MAKE: -pick add $@ %<
+?T:CONFIG sym tmp
+?F:!UU
+: add special variables
+$test -f $src/patchlevel.h && \
+awk '/^#define/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
+echo "CONFIG=true" >>config.sh
+
+: propagate old symbols
+if $test -f UU/config.sh; then
+?X: Make sure each symbol is unique in oldconfig.sh
+ <UU/config.sh $sort | $uniq >UU/oldconfig.sh
+?X:
+?X: All the symbols that appear twice come only from config.sh (hence the
+?X: two config.sh in the command line). These symbols will be removed by
+?X: the uniq -u command. The oldsyms file thus contains all the symbols
+?X: that did not appear in the produced config.sh (Larry Wall).
+?X:
+?X: Do not touch the -u flag of uniq. This means you too, Jarkko.
+?X:
+ $sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' \
+ config.sh config.sh UU/oldconfig.sh |\
+ $sort | $uniq -u >UU/oldsyms
+ set X `cat UU/oldsyms`
+ shift
+ case $# in
+ 0) ;;
+ *)
+ cat <<EOM
+Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
+EOM
+ echo ": Variables propagated from previous config.sh file." >>config.sh
+ for sym in `cat UU/oldsyms`; do
+ echo " Propagating $hint variable "'$'"$sym..."
+ eval 'tmp="$'"${sym}"'"'
+ echo "$tmp" | \
+ sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
+ done
+ ;;
+ esac
+fi
+
diff --git a/mcon/U/Options.U b/mcon/U/Options.U
new file mode 100644
index 0000000..a38f565
--- /dev/null
+++ b/mcon/U/Options.U
@@ -0,0 +1,363 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Options.U,v $
+?RCS: Revision 3.0.1.7 1997/02/28 15:08:15 ram
+?RCS: patch61: optdef.sh now starts with a "startsh"
+?RCS: patch61: moved some code from Head.U
+?RCS:
+?RCS: Revision 3.0.1.6 1995/09/25 09:14:46 ram
+?RCS: patch59: protected option parsing code against 'echo -*' option failure
+?RCS:
+?RCS: Revision 3.0.1.5 1995/05/12 12:04:52 ram
+?RCS: patch54: added -K option for experts
+?RCS:
+?RCS: Revision 3.0.1.4 1995/01/30 14:27:52 ram
+?RCS: patch49: this unit now exports file optdef.sh, not a variable
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/11 15:19:00 ram
+?RCS: patch45: new -O option allowing -D and -U to override config.sh setttings
+?RCS: patch45: file optdef.sh is no longer removed after sourcing
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 15:58:06 ram
+?RCS: patch36: ensure option definition file is removed before appending
+?RCS: patch36: protect variable definitions with spaces in them
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 06:55:44 ram
+?RCS: patch30: now uses new me symbol to tag error messages
+?RCS: patch30: new -D and -U options to define/undef symbols (JHI)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:14 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: Command line parsing. It is really important that the variables used here
+?X: be not listed in the MAKE line, or they will be saved in config.sh and
+?X: loading this file to fetch default answers would clobber the values set
+?X: herein.
+?X:
+?MAKE:Options: startsh
+?MAKE: -pick wipe $@ %<
+?V:reuseval alldone error realsilent silent extractsh fastread \
+ override knowitall: config_sh
+?T:arg argn symbol config_arg0 config_args config_argc xxx yyy zzz uuu
+?T:args_exp args_sep arg_exp
+?F:!Configure
+?F:./optdef.sh ./cmdline.opt ./posthint.sh ./cmdl.opt
+: Save command line options in file UU/cmdline.opt for later use in
+: generating config.sh.
+?X: This temporary file will be read by Oldsym.U. I used a temporary
+?X: file to preserve all sorts of potential command line quotes and
+?X: also because we don't know in advance how many variables we'll
+?X: need, so I can't actually declare them on the MAKE line.
+?X: The config_args variable won't be quite correct if Configure is
+?X: fed something like ./Configure -Dcc="gcc -B/usr/ccs/bin/"
+?X: since the quotes are gone by the time we see them. You'd have to
+?X: reconstruct the command line from the config_arg? lines, but since
+?X: I don't imagine anyone actually having to do that, I'm not going
+?X: to worry too much.
+cat > cmdline.opt <<EOSH
+: Configure command line arguments.
+config_arg0='$0'
+config_args='$*'
+config_argc=$#
+EOSH
+argn=1
+args_exp=''
+args_sep=''
+for arg in "$@"; do
+ cat >>cmdline.opt <<EOSH
+config_arg$argn='$arg'
+EOSH
+?X: Extreme backslashitis: replace each ' by '"'"'
+ cat <<EOC | sed -e "s/'/'"'"'"'"'"'"'/g" > cmdl.opt
+$arg
+EOC
+ arg_exp=`cat cmdl.opt`
+ args_exp="$args_exp$args_sep'$arg_exp'"
+ argn=`expr $argn + 1`
+ args_sep=' '
+done
+?X: args_exp is good for restarting self: eval "set X $args_exp"; shift; $0 "$@"
+?X: used by hints/os2.sh in Perl, for instance
+rm -f cmdl.opt
+
+: produce awk script to parse command line options
+cat >options.awk <<'EOF'
+BEGIN {
+ optstr = "A:dD:eEf:hKOrsSU:V"; # getopt-style specification
+
+ len = length(optstr);
+ for (i = 1; i <= len; i++) {
+ c = substr(optstr, i, 1);
+?X: some older awk's do not have the C ?: construct
+ if (i < len) a = substr(optstr, i + 1, 1); else a = "";
+ if (a == ":") {
+ arg[c] = 1;
+ i++;
+ }
+ opt[c] = 1;
+ }
+}
+{
+ expect = 0;
+ str = $0;
+ if (substr(str, 1, 1) != "-") {
+ printf("'%s'\n", str);
+ next;
+ }
+ len = length($0);
+ for (i = 2; i <= len; i++) {
+ c = substr(str, i, 1);
+ if (!opt[c]) {
+ printf("-%s\n", substr(str, i));
+ next;
+ }
+ printf("-%s\n", c);
+ if (arg[c]) {
+ if (i < len)
+ printf("'%s'\n", substr(str, i + 1));
+ else
+ expect = 1;
+ next;
+ }
+ }
+}
+END {
+ if (expect)
+ print "?";
+}
+EOF
+
+: process the command line options
+?X: Use "$@" to keep arguments with spaces in them from being split apart.
+?X: For the same reason, awk will output quoted arguments and the final eval
+?X: removes them and sets a proper $* array. An 'X' is prependend to each
+?X: argument before being fed to echo to guard against 'echo -x', where -x
+?X: would be understood as an echo option! It is removed before feeding awk.
+set X `for arg in "$@"; do echo "X$arg"; done |
+ sed -e s/X// | awk -f options.awk`
+eval "set $*"
+shift
+rm -f options.awk
+
+: set up default values
+fastread=''
+reuseval=false
+config_sh=''
+alldone=''
+error=''
+silent=''
+extractsh=''
+override=''
+knowitall=''
+rm -f optdef.sh posthint.sh
+cat >optdef.sh <<EOS
+$startsh
+EOS
+
+?X:
+?X: Given that we now have the possibility to execute Configure remotely
+?X: thanks to the new src.U support, we have to face the possibility
+?X: of having to ask where the source lie, which means we need the Myread.U
+?X: stuff and possibly other things that might echo something on the
+?X: screen...
+?X:
+?X: That's not pretty, and might be confusing in 99% of the time. So...
+?X: We introduce a new realsilent variable which is set when -s is given,
+?X: and we force silent=true if -S is supplied. The Extractall.U unit
+?X: will then undo the >&4 redirection based on the value of the
+?X: realsilent variable... -- RAM, 18/93/96
+?X:
+
+: option parsing
+while test $# -gt 0; do
+ case "$1" in
+ -d) shift; fastread=yes;;
+ -e) shift; alldone=cont;;
+ -f)
+ shift
+ cd ..
+ if test -r "$1"; then
+ config_sh="$1"
+ else
+ echo "$me: cannot read config file $1." >&2
+ error=true
+ fi
+ cd UU
+ shift;;
+ -h) shift; error=true;;
+ -r) shift; reuseval=true;;
+ -s) shift; silent=true; realsilent=true;;
+ -E) shift; alldone=exit;;
+ -K) shift; knowitall=true;;
+ -O) shift; override=true;;
+ -S) shift; silent=true; extractsh=true;;
+ -D)
+ shift
+ case "$1" in
+ *=)
+ echo "$me: use '-U symbol=', not '-D symbol='." >&2
+ echo "$me: ignoring -D $1" >&2
+ ;;
+ *=*) echo "$1" | \
+ sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
+ *) echo "$1='define'" >> optdef.sh;;
+ esac
+ shift
+ ;;
+ -U)
+ shift
+ case "$1" in
+ *=) echo "$1" >> optdef.sh;;
+ *=*)
+ echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
+ echo "$me: ignoring -U $1" >&2
+ ;;
+ *) echo "$1='undef'" >> optdef.sh;;
+ esac
+ shift
+ ;;
+ -A)
+ shift
+ xxx=''
+ yyy="$1"
+ zzz=''
+ uuu=undef
+ case "$yyy" in
+ *=*) zzz=`echo "$yyy"|sed 's!=.*!!'`
+ case "$zzz" in
+ *:*) zzz='' ;;
+ *) xxx=append
+ zzz=" "`echo "$yyy"|sed 's!^[^=]*=!!'`
+ yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
+ esac
+ ;;
+ esac
+ case "$xxx" in
+ '') case "$yyy" in
+ *:*) xxx=`echo "$yyy"|sed 's!:.*!!'`
+ yyy=`echo "$yyy"|sed 's!^[^:]*:!!'`
+ zzz=`echo "$yyy"|sed 's!^[^=]*=!!'`
+ yyy=`echo "$yyy"|sed 's!=.*!!'` ;;
+ *) xxx=`echo "$yyy"|sed 's!:.*!!'`
+ yyy=`echo "$yyy"|sed 's!^[^:]*:!!'` ;;
+ esac
+ ;;
+ esac
+ case "$xxx" in
+ append)
+ echo "$yyy=\"\${$yyy}$zzz\"" >> posthint.sh ;;
+ clear)
+ echo "$yyy=''" >> posthint.sh ;;
+ define)
+ case "$zzz" in
+ '') zzz=define ;;
+ esac
+ echo "$yyy='$zzz'" >> posthint.sh ;;
+ eval)
+ echo "eval \"$yyy=$zzz\"" >> posthint.sh ;;
+ prepend)
+ echo "$yyy=\"$zzz\${$yyy}\"" >> posthint.sh ;;
+ undef)
+ case "$zzz" in
+ '') zzz="$uuu" ;;
+ esac
+ echo "$yyy=$zzz" >> posthint.sh ;;
+ *) echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
+ esac
+ shift
+ ;;
+ -V) echo "$me generated by metaconfig <VERSION> PL<PATCHLEVEL>." >&2
+ exit 0;;
+ --) break;;
+ -*) echo "$me: unknown option $1" >&2; shift; error=true;;
+ *) break;;
+ esac
+done
+
+case "$error" in
+true)
+ cat >&2 <<EOM
+Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
+ [-U symbol] [-U symbol=] [-A command:symbol...]
+ -d : use defaults for all answers.
+ -e : go on without questioning past the production of config.sh.
+ -f : specify an alternate default configuration file.
+ -h : print this help message and exit (with an error status).
+ -r : reuse C symbols value if possible (skips costly nm extraction).
+ -s : silent mode, only echoes questions and essential information.
+ -D : define symbol to have some value:
+ -D symbol symbol gets the value 'define'
+ -D symbol=value symbol gets the value 'value'
+ -E : stop at the end of questions, after having produced config.sh.
+ -K : do not use unless you know what you are doing.
+ -O : let -D and -U override definitions from loaded configuration file.
+ -S : perform variable substitutions on all .SH files (can mix with -f)
+ -U : undefine symbol:
+ -U symbol symbol gets the value 'undef'
+ -U symbol= symbol gets completely empty
+ -A : manipulate symbol after the platform specific hints have been applied:
+ -A symbol=value append " "value to symbol
+ -A append:symbol=value append value to symbol
+ -A define:symbol=value define symbol to have value
+ -A clear:symbol define symbol to be ''
+ -A define:symbol define symbol to be 'define'
+ -A eval:symbol=value define symbol to be eval of value
+ -A prepend:symbol=value prepend value to symbol
+ -A undef:symbol define symbol to be 'undef'
+ -A undef:symbol= define symbol to be ''
+ -V : print version number and exit (with a zero status).
+EOM
+ exit 1
+ ;;
+esac
+
+?X:
+?X: Unless they specified either -S or both -d and -e/E, make sure we're
+?X: running interactively, i.e. attached to a terminal. Moved from Head.U to
+?X: be able to handle batch configurations...
+?X:
+?X: We have to hardwire the Configure name and cannot use $me, since if they
+?X: said 'sh <Configure', then $me is 'sh'...
+?X:
+: Sanity checks
+case "$fastread$alldone" in
+yescont|yesexit) ;;
+*)
+ case "$extractsh" in
+ true) ;;
+ *)
+ if test ! -t 0; then
+ echo "Say 'sh Configure', not 'sh <Configure'"
+ exit 1
+ fi
+ ;;
+ esac
+ ;;
+esac
+
+?X: In silent mode, the standard output is closed. Questions are asked by
+?X: outputing on file descriptor #4, which is the original stdout descriptor.
+?X: This filters out all the "junk", since all the needed information is written
+?X: on #4. Note that ksh will not let us redirect output if the file descriptor
+?X: has not be defined yet, unlike sh, hence the following line...--RAM.
+exec 4>&1
+case "$silent" in
+true) exec 1>/dev/null;;
+esac
+
+: run the defines and the undefines, if any, but leave the file out there...
+touch optdef.sh
+. ./optdef.sh
+: create the posthint manipulation script and leave the file out there...
+?X: this file will be perused by Oldconfig.U
+touch posthint.sh
+
diff --git a/mcon/U/Prefixit.U b/mcon/U/Prefixit.U
new file mode 100644
index 0000000..dae8dba
--- /dev/null
+++ b/mcon/U/Prefixit.U
@@ -0,0 +1,68 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Prefixit.U,v $
+?RCS: Revision 3.0.1.1 1995/01/30 14:29:22 ram
+?RCS: patch49: created
+?RCS:
+?X:
+?X: Used as: "set dflt var dir; eval $prefixit" to set $dflt to be
+?X: $prefix/dir by default, or the previous $var depending on certain
+?X: conditions:
+?X: - If the $oldprefix variable is empty, then $prefix holds the same
+?X: value as on previous runs. Therefore, reuse $var if set, otherwise
+?X: set $dflt to $prefix/dir.
+?X: - If $oldprefix is not empty, then set $dflt to $prefix/dir if $var
+?X: is empty (first run). Otherwise, if $var is $oldprefix/dir, then
+?X: change it to $prefix/dir. If none of the above, reuse the old $var.
+?X:
+?X: When dir is omitted, the dflt variable is set to $var if prefix did not
+?X: change, to an empty value otherwise. If dir=none, then a single space
+?X: in var is kept as-is, even if the prefix changes.
+?X:
+?MAKE:Prefixit: prefix oldprefix
+?MAKE: -pick add $@ %<
+?LINT:define prefixit
+?S:prefixit:
+?S: This shell variable is used internally by Configure to reset
+?S: the leading installation prefix correctly when it is changed.
+?S: set dflt var [dir]
+?S: eval $prefixit
+?S: That will set $dflt to $var or $prefix/dir depending on the
+?S: value of $var and $oldprefix.
+?S:.
+?V:prefixit
+?T:tp
+: set the prefixit variable, to compute a suitable default value
+prefixit='case "$3" in
+""|none)
+ case "$oldprefix" in
+ "") eval "$1=\"\$$2\"";;
+ *)
+ case "$3" in
+ "") eval "$1=";;
+ none)
+ eval "tp=\"\$$2\"";
+ case "$tp" in
+ ""|" ") eval "$1=\"\$$2\"";;
+ *) eval "$1=";;
+ esac;;
+ esac;;
+ esac;;
+*)
+ eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
+ case "$tp" in
+ --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
+ /*-$oldprefix/*|\~*-$oldprefix/*)
+ eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
+ *) eval "$1=\"\$$2\"";;
+ esac;;
+esac'
+
diff --git a/mcon/U/Prefixup.U b/mcon/U/Prefixup.U
new file mode 100644
index 0000000..46b0b15
--- /dev/null
+++ b/mcon/U/Prefixup.U
@@ -0,0 +1,38 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Prefixup.U,v $
+?RCS: Revision 3.0.1.1 1995/01/30 14:30:40 ram
+?RCS: patch49: created
+?RCS:
+?X:
+?X: Used as: "set dflt; eval $prefixup" to set $dflt to be $prefix/dir
+?X: instead of $prefixexp/dir, in case portability was involved somehow
+?X: and $prefix uses ~name expansion.
+?X:
+?MAKE:Prefixup: prefix prefixexp
+?MAKE: -pick add $@ %<
+?LINT:define prefixup
+?S:prefixup:
+?S: This shell variable is used internally by Configure to reset
+?S: the leading installation prefix correctly when $prefix uses
+?S: ~name expansion.
+?S: set dflt
+?S: eval $prefixup
+?S: That will set $dflt to $prefix/dir if it was $prefixexp/dir and
+?S: $prefix differs from $prefixexp.
+?S:.
+?V:prefixup
+: set the prefixup variable, to restore leading tilda escape
+prefixup='case "$prefixexp" in
+"$prefix") ;;
+*) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
+esac'
+
diff --git a/mcon/U/Rcs.U b/mcon/U/Rcs.U
new file mode 100644
index 0000000..255fcb6
--- /dev/null
+++ b/mcon/U/Rcs.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Rcs.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:15 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This is a unit that helps people who write SH scripts and keep them under
+?X: RCS, but don't think to protect the $Log and other $Id keywords from
+?X: variable substitution (or people like me who do not like to).
+?X:
+?MAKE:Author Date Header Id Locker Log RCSfile Revision Source State: Oldconfig
+?MAKE: -pick weed $@ %<
+?LINT:describe Author Date Header Id Locker Log RCSfile Revision Source State
+: preserve RCS keywords in files with variable substitution, grrr
+?Author:Author='$Author'
+?Date:Date='$Date'
+?Header:Header='$Header'
+?Id:Id='$Id'
+?$Locker'
+?Log:Log='$Log'
+?RCSfile:RCSfile='$RCSfile'
+?Revision:Revision='$Revision'
+?Source:Source='$Source'
+?State:State='$State'
+
diff --git a/mcon/U/Setvar.U b/mcon/U/Setvar.U
new file mode 100644
index 0000000..75b640c
--- /dev/null
+++ b/mcon/U/Setvar.U
@@ -0,0 +1,50 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Setvar.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 15:58:28 ram
+?RCS: patch36: call ./whoa explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:16 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a variable that is intended to be eval'ed in
+?X: order to define/undefine a symbol. A consistency check is made
+?X: regarding any previous value and a warning is issued if there
+?X: is any discrepancy.
+?X:
+?X: To use it, say:
+?X: val=<value>
+?X: set d_variable
+?X: eval $setvar
+?X:
+?MAKE:Setvar: Whoa
+?MAKE: -pick add $@ %<
+?LINT:define setvar
+?S:setvar:
+?S: This shell variable is used internally by Configure to set a value
+?S: to a given symbol that is defined or not. A typical use is:
+?S: val=<value computed>
+?S: set d_variable
+?S: eval $setvar
+?S: That will print a message in case the $val value is not the same
+?S: as the previous value of $d_variable.
+?S:.
+?V:setvar:val
+?T:var was td tu
+: function used to set '$1' to '$val'
+setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
+case "$val$was" in
+$define$undef) . ./whoa; eval "$var=\$td";;
+$undef$define) . ./whoa; eval "$var=\$tu";;
+*) eval "$var=$val";;
+esac'
+
diff --git a/mcon/U/Signal.U b/mcon/U/Signal.U
new file mode 100644
index 0000000..6ac5eb8
--- /dev/null
+++ b/mcon/U/Signal.U
@@ -0,0 +1,271 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Signal.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:20:01 ram
+?RCS: patch61: created
+?RCS:
+?X:
+?X: This unit produces three files:
+?X:
+?X: 1- A signal.c file, which, when compiled and run, produces an output like:
+?X:
+?X: HUP 1
+?X: INT 2
+?X: QUIT 3
+?X: etc...
+?X:
+?X: 2- A signal.awk script to parse the output of signal.c, fill
+?X: in gaps (up to NSIG) and move duplicates to the end.
+?X:
+?X: 3- A signal_cmd script to compile signal.c and run it
+?X: through sort -n -k 2 | uniq | awk -f signal.awk.
+?X: (we try also sort -n +1 since some old hosts don't grok sort -k)
+?X: (This is called signal_cmd to avoid OS/2 confusion with
+?X: signal.cmd vs. signal.
+?X: The signal_cmd script also falls back on checking signals one at a
+?X: time in case the signal.c program fails. On at least one version of
+?X: Linux 2.1.x, the header file #define'd SIGRTMAX to a symbol that
+?X: is not defined by the compiler/linker. :-(. Further, on that same
+?X: version of Linux, the user had a defective C-shell that gave an
+?X: incorrect list for kill -l, so the fall-back didn't work.
+?X:
+?X: This unit is then used by sig_name.U.
+?X:
+?MAKE:Signal: test tr rm awk cat grep startsh eunicefix sed sort uniq \
+ Findhdr cppstdin +cppflags cppminus Compile trnl run
+?MAKE: -pick add $@ %<
+?X:all files declared as "public" since they're used from other units
+?F:signal.c signal_cmd signal.lst signal signal.awk
+?T: xx xxx xxxfiles
+?LINT:use rm run
+: Trace out the files included by signal.h, then look for SIGxxx names.
+?X: Remove SIGARRAYSIZE used by HPUX.
+?X: Remove SIGSTKSIZE used by Linux.
+?X: Remove SIGSTKSZ used by Posix.
+?X: Remove SIGTYP void lines used by OS2.
+?X: Some cpps, like os390, dont give the file name anywhere
+if [ "X$fieldn" = X ]; then
+ : Just make some guesses. We check them later.
+ xxx='/usr/include/signal.h /usr/include/sys/signal.h'
+else
+ xxx=`echo '#include <signal.h>' |
+ $cppstdin $cppminus $cppflags 2>/dev/null |
+ $grep '^[ ]*#.*include' |
+ $awk "{print \\$$fieldn}" | $sed 's!"!!g' | \
+ $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
+fi
+?X: Check this list of files to be sure we have parsed the cpp output ok.
+?X: This will also avoid potentially non-existent files, such
+?X: as ../foo/bar.h
+xxxfiles=''
+?X: Add /dev/null in case the $xxx list is empty.
+for xx in $xxx /dev/null ; do
+ $test -f "$xx" && xxxfiles="$xxxfiles $xx"
+done
+?X: If we have found no files, at least try signal.h
+case "$xxxfiles" in
+'') xxxfiles=`./findhdr signal.h` ;;
+esac
+xxx=`awk '
+$1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
+ print substr($2, 4, 20)
+}
+$1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
+ print substr($3, 4, 20)
+}' $xxxfiles`
+: Append some common names just in case the awk scan failed.
+xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
+xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
+xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
+xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
+xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
+
+: generate a few handy files for later
+$cat > signal.c <<'EOCP'
+#include <sys/types.h>
+#include <signal.h>
+#include <stdio.h>
+int main() {
+
+/* Strange style to avoid deeply-nested #if/#else/#endif */
+#ifndef NSIG
+# ifdef _NSIG
+# define NSIG (_NSIG)
+# endif
+#endif
+
+#ifndef NSIG
+# ifdef SIGMAX
+# define NSIG (SIGMAX+1)
+# endif
+#endif
+
+#ifndef NSIG
+# ifdef SIG_MAX
+# define NSIG (SIG_MAX+1)
+# endif
+#endif
+
+#ifndef NSIG
+# ifdef MAXSIG
+# define NSIG (MAXSIG+1)
+# endif
+#endif
+
+#ifndef NSIG
+# ifdef MAX_SIG
+# define NSIG (MAX_SIG+1)
+# endif
+#endif
+
+#ifndef NSIG
+# ifdef SIGARRAYSIZE
+# define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
+# endif
+#endif
+
+#ifndef NSIG
+# ifdef _sys_nsig
+# define NSIG (_sys_nsig) /* Solaris 2.5 */
+# endif
+#endif
+
+/* Default to some arbitrary number that's big enough to get most
+ of the common signals.
+*/
+#ifndef NSIG
+# define NSIG 50
+#endif
+
+printf("NSIG %d\n", NSIG);
+
+#ifndef JUST_NSIG
+
+EOCP
+
+echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
+{
+ printf "#ifdef SIG"; printf $1; printf "\n"
+ printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
+ printf $1; printf ");\n"
+ printf "#endif\n"
+}
+END {
+ printf "#endif /* JUST_NSIG */\n";
+ printf "exit(0);\n}\n";
+}
+' >>signal.c
+$cat >signal.awk <<'EOP'
+BEGIN { ndups = 0 }
+$1 ~ /^NSIG$/ { nsig = $2 }
+($1 !~ /^NSIG$/) && (NF == 2) {
+ if ($2 > maxsig) { maxsig = $2 }
+ if (sig_name[$2]) {
+ dup_name[ndups] = $1
+ dup_num[ndups] = $2
+ ndups++
+ }
+ else {
+ sig_name[$2] = $1
+ sig_num[$2] = $2
+ }
+}
+END {
+ if (nsig == 0) {
+ nsig = maxsig + 1
+ }
+ printf("NSIG %d\n", nsig);
+ for (n = 1; n < nsig; n++) {
+ if (sig_name[n]) {
+ printf("%s %d\n", sig_name[n], sig_num[n])
+ }
+ else {
+ printf("NUM%d %d\n", n, n)
+ }
+ }
+ for (n = 0; n < ndups; n++) {
+ printf("%s %d\n", dup_name[n], dup_num[n])
+ }
+}
+EOP
+$cat >signal_cmd <<EOS
+$startsh
+if $test -s signal.lst; then
+ echo "Using your existing signal.lst file"
+ exit 0
+fi
+xxx="$xxx"
+EOS
+?X: Avoid variable interpolation problems, especially with
+?X: xxx, which contains newlines.
+$cat >>signal_cmd <<'EOS'
+
+set signal
+if eval $compile_ok; then
+ $run ./signal$_exe | ($sort -n -k 2 2>/dev/null || $sort -n +1) | \
+ $uniq | $awk -f signal.awk >signal.lst
+else
+ echo "(I can't seem be able to compile the whole test program)" >&4
+ echo "(I'll try it in little pieces.)" >&4
+ set signal -DJUST_NSIG
+ if eval $compile_ok; then
+ $run ./signal$_exe > signal.nsg
+ $cat signal.nsg
+ else
+ echo "I can't seem to figure out how many signals you have." >&4
+ echo "Guessing 50." >&4
+ echo 'NSIG 50' > signal.nsg
+ fi
+ : Now look at all the signal names, one at a time.
+ for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
+ $cat > signal.c <<EOCP
+#include <sys/types.h>
+#include <signal.h>
+#include <stdio.h>
+int main() {
+printf("$xx %d\n", SIG${xx});
+return 0;
+}
+EOCP
+ set signal
+ if eval $compile; then
+ echo "SIG${xx} found."
+ $run ./signal$_exe >> signal.ls1
+ else
+ echo "SIG${xx} NOT found."
+ fi
+ done
+ if $test -s signal.ls1; then
+ $cat signal.nsg signal.ls1 |
+ $sort -n | $uniq | $awk -f signal.awk >signal.lst
+ fi
+
+fi
+if $test -s signal.lst; then
+ :
+else
+ echo "(AAK! I can't compile the test programs -- Guessing)" >&4
+ echo 'kill -l' >signal
+ set X `csh -f <signal`
+ $rm -f signal
+ shift
+ case $# in
+ 0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
+ esac
+ echo $@ | $tr ' ' $trnl | \
+ $awk '{ printf "%s %d\n", $1, ++s; }
+ END { printf "NSIG %d\n", ++s }' >signal.lst
+fi
+$rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
+EOS
+chmod a+x signal_cmd
+$eunicefix signal_cmd
+
diff --git a/mcon/U/Tr.U b/mcon/U/Tr.U
new file mode 100644
index 0000000..a7320fe
--- /dev/null
+++ b/mcon/U/Tr.U
@@ -0,0 +1,103 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Tr.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 18:00:54 ram
+?RCS: patch43: forgot to quote $@ to protect against "evil" characters
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 15:58:35 ram
+?RCS: patch36: created
+?RCS:
+?X:
+?X: This unit produces a bit of shell code that must be dotted in in order
+?X: to do a character translation. It catches translations to uppercase or
+?X: to lowercase, and then invokes the real tr to perform the job.
+?X:
+?X: This unit is necessary on HP machines (HP strikes again!) with non-ascii
+?X: ROMAN8-charset, where normal letters are not arranged in a row, so a-z
+?X: covers not the whole alphabet but lots of special chars. This was reported
+?X: by Andreas Sahlbach <a.sahlbach@tu-bs.de>.
+?X:
+?X: Units performing a tr '[A-Z]' '[a-z]' or the other way round should include
+?X: us in their dependency and use ./tr instead.
+?X:
+?MAKE:Tr: startsh tr eunicefix
+?MAKE: -pick add $@ %<
+?F:./tr
+?T:up low LC_ALL
+: see whether [:lower:] and [:upper:] are supported character classes
+echo " "
+case "`echo AbyZ | LC_ALL=C $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
+ABYZ)
+ echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
+ up='[:upper:]'
+ low='[:lower:]'
+ ;;
+*) # There is a discontinuity in EBCDIC between 'I' and 'J'
+ # (0xc9 and 0xd1), therefore that is a nice testing point.
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | LC_ALL=C $tr '[I-J]' '[i-j]' 2>/dev/null`" in
+ ij) up='[A-Z]'
+ low='[a-z]'
+ ;;
+ esac
+ fi
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | LC_ALL=C $tr I-J i-j 2>/dev/null`" in
+ ij) up='A-Z'
+ low='a-z'
+ ;;
+ esac
+ fi
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | od -x 2>/dev/null`" in
+ *C9D1*|*c9d1*)
+ echo "Hey, this might be EBCDIC." >&4
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | \
+ LC_ALL=C $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
+ ij) up='[A-IJ-RS-Z]'
+ low='[a-ij-rs-z]'
+ ;;
+ esac
+ fi
+ if test "X$up" = X -o "X$low" = X; then
+ case "`echo IJ | LC_ALL=C $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
+ ij) up='A-IJ-RS-Z'
+ low='a-ij-rs-z'
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ fi
+esac
+case "`echo IJ | LC_ALL=C $tr \"$up\" \"$low\" 2>/dev/null`" in
+ij)
+ echo "Using $up and $low to convert case." >&4
+ ;;
+*)
+ echo "I don't know how to translate letters from upper to lower case." >&4
+ echo "Your tr is not acting any way I know of." >&4
+ exit 1
+ ;;
+esac
+: set up the translation script tr, must be called with ./tr of course
+cat >tr <<EOSC
+$startsh
+case "\$1\$2" in
+'[A-Z][a-z]') LC_ALL=C exec $tr '$up' '$low';;
+'[a-z][A-Z]') LC_ALL=C exec $tr '$low' '$up';;
+esac
+LC_ALL=C exec $tr "\$@"
+EOSC
+chmod +x tr
+$eunicefix tr
+
diff --git a/mcon/U/Typedef.U b/mcon/U/Typedef.U
new file mode 100644
index 0000000..fd16777
--- /dev/null
+++ b/mcon/U/Typedef.U
@@ -0,0 +1,63 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Typedef.U,v $
+?RCS: Revision 3.0.1.3 1995/07/25 13:42:07 ram
+?RCS: patch56: added backslash escapes within evals to prevent space problems
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:01:16 ram
+?RCS: patch36: don't clobber visible 'val' variable, use 'varval' instead
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:05:14 ram
+?RCS: patch32: created
+?RCS:
+?X:
+?X: This unit checks for the definition of a given typedef.
+?X:
+?X: To use it, say:
+?X: set typedef val_t default [includes]
+?X: eval $typedef
+?X:
+?MAKE:Typedef: cppstdin cppminus cppflags rm contains Oldconfig
+?MAKE: -pick add $@ %<
+?F:!temp.c
+?LINT:define typedef
+?V:typedef
+?S:typedef:
+?S: This shell variable is used internally by Configure to check
+?S: wether a given typedef is defined or not. A typical use is:
+?S: set typedef val_t default [includes]
+?S: eval $typedef
+?S: That will return val_t set to default if the typedef was not found,
+?S: to typedef otherwise. If no includes are specified, look in sys/types.h.
+?S:.
+?T:type var def inclist varval inc
+: define an is-a-typedef? function
+typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
+case "$inclist" in
+"") inclist="sys/types.h";;
+esac;
+eval "varval=\$$var";
+case "$varval" in
+"")
+ $rm -f temp.c;
+ for inc in $inclist; do
+ echo "#include <$inc>" >>temp.c;
+ done;
+ $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
+ if $contains $type temp.E >/dev/null 2>&1; then
+ eval "$var=\$type";
+ else
+ eval "$var=\$def";
+ fi;
+ $rm -f temp.?;;
+*) eval "$var=\$varval";;
+esac'
+
diff --git a/mcon/U/Unix.U b/mcon/U/Unix.U
new file mode 100644
index 0000000..4c05c7b
--- /dev/null
+++ b/mcon/U/Unix.U
@@ -0,0 +1,64 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Unix.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:20:06 ram
+?RCS: patch61: created
+?RCS:
+?X:
+?X: The purpose of this unit is to define things that are common accross all
+?X: known UNIX platforms. If Configure is ported/used on a non-UNIX
+?X: environment, then some of the following variables can be redefined in hint
+?X: files.
+?X:
+?MAKE:Unix _a _o firstmakefile archobjs: Oldconfig
+?MAKE: -pick add $@ %<
+?S:_a (lib_ext):
+?S: This variable defines the extension used for ordinary libraries.
+?S: For unix, it is '.a'. The '.' is included. Other possible
+?S: values include '.lib'.
+?S:.
+?S:_o (obj_ext):
+?S: This variable defines the extension used for object files.
+?S: For unix, it is '.o'. The '.' is included. Other possible
+?S: values include '.obj'.
+?S:.
+?S:firstmakefile:
+?S: This variable defines the first file searched by make. On unix,
+?S: it is makefile (then Makefile). On case-insensitive systems,
+?S: it might be something else. This is only used to deal with
+?S: convoluted make depend tricks.
+?S:.
+?S:archobjs:
+?S: This variable defines any additional objects that must be linked
+?S: in with the program on this architecture. On unix, it is usually
+?S: empty. It is typically used to include emulations of unix calls
+?S: or other facilities. For perl on OS/2, for example, this would
+?S: include os2/os2.obj.
+?S:.
+?INIT:: Extra object files, if any, needed on this platform.
+?INIT:archobjs=''
+: Define several unixisms.
+: Hints files or command line option can be used to override them.
+case "$_a" in
+'') _a='.a';;
+esac
+case "$_o" in
+'') _o='.o';;
+esac
+
+@if firstmakefile
+: Which makefile gets called first. This is used by make depend.
+case "$firstmakefile" in
+'') firstmakefile='makefile';;
+esac
+
+@end
diff --git a/mcon/U/Warn.U b/mcon/U/Warn.U
new file mode 100644
index 0000000..ffab53e
--- /dev/null
+++ b/mcon/U/Warn.U
@@ -0,0 +1,57 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Extract.U,v $
+?X:
+?X: This unit produces a shell script which can be run in order to emit
+?X: an important warning to the user, which will be remembered and shown
+?X: at the end of the Configure run as well.
+?X:
+?X: A typical use would be:
+?X:
+?X: ./warn <<EOM
+?X: Problem with your C compiler: can't turn debugging on.
+?X: EOM
+?X:
+?X: or:
+?X:
+?X: ./warn "Problem with your C compiler: can't turn debugging on."
+?X:
+?X: Which will both display to the user:
+?X:
+?X: *** WARNING:
+?X: *** Problem with your C compiler: can't turn debugging on.
+?X: ***
+?X:
+?MAKE:Warn: startsh eunicefix
+?MAKE: -pick add $@ %<
+?F:./warn
+: script used to emit important warnings
+cat >warn <<EOS
+$startsh
+?X: Read the whole warning message from stdin into a temporary file
+?X: when no argument was supplied.
+if test \$# -gt 0; then
+ echo "\$@" >msg
+else
+ cat >msg
+fi
+?X: Emit the warning, prefixing all lines with '*** '
+echo "*** WARNING:" >&4
+sed -e 's/^/*** /' <msg >&4
+echo "*** " >&4
+?X: Save the warning in the logs, which will be shown again at the end
+cat msg >>config.msg
+echo " " >>config.msg
+rm -f msg
+EOS
+chmod +x warn
+$eunicefix warn
+
diff --git a/mcon/U/Warn_v7EXT.U b/mcon/U/Warn_v7EXT.U
new file mode 100644
index 0000000..d015400
--- /dev/null
+++ b/mcon/U/Warn_v7EXT.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Warn_v7EXT.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:01:42 ram
+?RCS: patch36: call ./v7 explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:17 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit issues warnings to V7 sites that they are living dangerously.
+?X: This unit needs to get mentioned in End.U to get included.
+?X:
+?MAKE:Warn_v7EXT: package Guess
+?MAKE: -pick add $@ %<
+: Warnings
+if ./v7; then
+ cat <<EOM
+
+NOTE: the V7 compiler may ignore some #undefs that $package uses. If so,
+you may get messages about redefining EXT. Some V7 compilers also have
+difficulties with #defines near buffer boundaries, so beware. You may have
+to play with the spacing in some .h files, believe it or not.
+EOM
+fi
+
diff --git a/mcon/U/Warn_v7ND.U b/mcon/U/Warn_v7ND.U
new file mode 100644
index 0000000..d7ef599
--- /dev/null
+++ b/mcon/U/Warn_v7ND.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Warn_v7ND.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:01:46 ram
+?RCS: patch36: call ./v7 explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:18 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit warns V7 sites that they may not have a non-blocking read.
+?X: This unit needs to be mentioned in End.U to get included.
+?X:
+?MAKE:Warn_v7ND: package Guess
+?MAKE: -pick add $@ %<
+: Warnings
+if ./v7; then
+ cat <<EOM
+
+NOTE: many V7 systems do not have a way to do a non-blocking read. If you
+don't have any of FIONREAD, O_NDELAY, or rdchk(), the $package package
+may not work as well as it might. It might not work at all.
+EOM
+fi
+
diff --git a/mcon/U/Whoa.U b/mcon/U/Whoa.U
new file mode 100644
index 0000000..7519fac
--- /dev/null
+++ b/mcon/U/Whoa.U
@@ -0,0 +1,51 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Whoa.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:21:21 ram
+?RCS: patch61: whoa script now starts with leading "startsh"
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:02:01 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:19 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit produces a bit of shell code that must be dotted in in order
+?X: to warn the user in case a change into a variable is noticed.
+?X:
+?X: To use this unit, $was must hold the old value that has changed. Upon
+?X: exit, the two variables $td and $tu are set to the correct value for
+?X: respectively defining or undefining a variable. For instance, if $vas was
+?X: $undef, but now $var is $define, after calling . whoa, you should use
+?X: eval "$var=\$tu" to finally set $var to the correct value. See unit Inlibc.
+?X:
+?MAKE:Whoa: Myread startsh hint
+?MAKE: -pick add $@ %<
+?F:./whoa
+?T:var was
+?LINT:change td tu
+: set up the script used to warn in case of inconsistency
+cat <<EOS >whoa
+$startsh
+EOS
+cat <<'EOSC' >>whoa
+dflt=y
+echo " "
+echo "*** WHOA THERE!!! ***" >&4
+echo " The $hint value for \$$var on this machine was \"$was\"!" >&4
+rp=" Keep the $hint value?"
+. ./myread
+case "$ans" in
+y) td=$was; tu=$was;;
+esac
+EOSC
+
diff --git a/mcon/U/abortsig.U b/mcon/U/abortsig.U
new file mode 100644
index 0000000..a13f30f
--- /dev/null
+++ b/mcon/U/abortsig.U
@@ -0,0 +1,79 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: abortsig.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:02:19 ram
+?RCS: patch36: call ./usg explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:20 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:abortsig: Myread Oldconfig Guess cat +cc ccflags rm
+?MAKE: -pick add $@ %<
+?S:abortsig:
+?S: This variable holds the name of the signal used by the abort() call.
+?S:.
+?C:ABORTSIG:
+?C: This symbol holds the signal number (symbol) used by the abort() call. To
+?C: actually define the signal symbol, <signal.h> should be included.
+?C:.
+?H:#define ABORTSIG $abortsig /**/
+?H:.
+?T:signal
+: which signal is sent by abort ?
+echo " "
+case "$abortsig" in
+'')
+ echo "Checking to see which signal is sent to the process by abort()..." >&4
+ echo "abort" > abort.sh
+ chmod +x abort.sh
+?X: SIGABRT should replace SIGIOT on USG machines in a near future (1991).
+ for signal in SIGIOT SIGILL SIGABRT; do
+ case "$abortsig" in
+ '') $cat >abort.c <<EOP
+#include <signal.h>
+caught() { exit(0); }
+int main()
+{
+#ifdef $signal
+ signal($signal, caught);
+#endif
+ if (-1 == abort())
+ exit(1);
+ exit(1);
+}
+EOP
+?X: We have to use the abort.sh script otherwise sh behaves strangely on AIX.
+ if $cc $ccflags -o abort abort.c >/dev/null 2>&1; then
+ (./abort.sh) >/dev/null 2>&1
+ case $? in
+ 0) abortsig="$signal";;
+ esac
+ fi
+ ;;
+ esac
+ done
+ ;;
+esac
+case "$abortsig" in
+'') echo "(I wasn't able to compute the signal name--guessing)"
+ if ./usg; then
+ dflt="SIGIOT"
+ else
+ dflt="SIGILL"
+ fi;;
+*) dflt="$abortsig"
+ ;;
+esac
+rp="Which signal does abort() send to the process (signal name)?"
+. ./myread
+abortsig="$ans"
+$rm -f core abort.sh abort abort.c
+
diff --git a/mcon/U/active.U b/mcon/U/active.U
new file mode 100644
index 0000000..3a1a65c
--- /dev/null
+++ b/mcon/U/active.U
@@ -0,0 +1,50 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: active.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:21 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:active activeexp: newslib Oldconfig Getfile
+?MAKE: -pick add $@ %<
+?S:active:
+?S: The name of the active file for the news system. This file contains
+?S: the list of active newsgroups. The name may have ~ on the front.
+?S: The variable myactive is the expanded form.
+?S:.
+?S:activeexp (myactive):
+?S: This is the same as the active variable, but is filename expanded
+?S: so that later Configure units can look at the active file if desired.
+?S:.
+?C:ACTIVE:
+?C: The name of the active file for the news system. This file contains
+?C: the list of active newsgroups. The name may have ~ on the front.
+?C:.
+?C:ACTIVE_EXP:
+?C: This is the same as ACTIVE, but is filename expanded at configuration
+?C: time, for programs that do not want to deal with it themselves.
+?C:.
+?H:#define ACTIVE "$active" /**/
+?H:#define ACTIVE_EXP "$activeexp" /**/
+?H:.
+: locate active file
+echo " "
+case "$active" in
+'')
+ dflt=$newslib/active
+ ;;
+*) dflt="$active";;
+esac
+fn=l~:active
+rp='Where is the active file?'
+. ./getfile
+active="$ans"
+activeexp="$ansexp"
+
diff --git a/mcon/U/afs.U b/mcon/U/afs.U
new file mode 100644
index 0000000..4cf024b
--- /dev/null
+++ b/mcon/U/afs.U
@@ -0,0 +1,55 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: afs.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:23:06 ram
+?RCS: patch61: can now explicitely tell Configure whether AFS is running
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/24 12:24:43 ram
+?RCS: patch3: created
+?RCS:
+?MAKE:afs afsroot: test
+?MAKE: -pick add $@ %<
+?S:afs:
+?S: This variable is set to 'true' if AFS (Andrew File System) is used
+?S: on the system, 'false' otherwise. It is possible to override this
+?S: with a hint value or command line option, but you'd better know
+?S: what you are doing.
+?S:.
+?S:afsroot:
+?S: This variable is by default set to '/afs'. In the unlikely case
+?S: this is not the correct root, it is possible to override this with
+?S: a hint value or command line option. This will be used in subsequent
+?S: tests for AFSness in the configure and test process.
+?S:.
+: allow them to override the AFS root
+case "$afsroot" in
+'') afsroot=/afs ;;
+*) afsroot=$afsroot ;;
+esac
+
+: is AFS running?
+echo " "
+case "$afs" in
+$define|true) afs=true ;;
+$undef|false) afs=false ;;
+*) if $test -d $afsroot; then
+ afs=true
+ else
+ afs=false
+ fi
+ ;;
+esac
+if $afs; then
+ echo "AFS may be running... I'll be extra cautious then..." >&4
+else
+ echo "AFS does not seem to be running..." >&4
+fi
+
diff --git a/mcon/U/alignbytes.U b/mcon/U/alignbytes.U
new file mode 100644
index 0000000..f31ec80
--- /dev/null
+++ b/mcon/U/alignbytes.U
@@ -0,0 +1,64 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: alignbytes.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 16:02:28 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:25:20 ram
+?RCS: patch23: avoid ALIGNBYTES, since it conflicts on NetBSD
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:23 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:alignbytes: Myread cat cc ccflags rm
+?MAKE: -pick add $@ %<
+?S:alignbytes:
+?S: This variable holds the number of bytes required to align a
+?S: double. Usual values are 2, 4 and 8.
+?S:.
+?X: This used to be called ALIGNBYTES, but that conflicts with
+?X: <machines/param.h> in NetBSD.
+?C:MEM_ALIGNBYTES (ALIGNBYTES):
+?C: This symbol contains the number of bytes required to align a
+?C: double. Usual values are 2, 4 and 8.
+?C:.
+?H:#define MEM_ALIGNBYTES $alignbytes /**/
+?H:.
+?F:!try
+: check for alignment requirements
+echo " "
+case "$alignbytes" in
+'') echo "Checking alignment constraints..." >&4
+ $cat >try.c <<'EOCP'
+struct foobar {
+ char foo;
+ double bar;
+} try;
+int main()
+{
+ printf("%d\n", (char *)&try.bar - (char *)&try.foo);
+}
+EOCP
+ if $cc $ccflags try.c -o try >/dev/null 2>&1; then
+ dflt=`./try`
+ else
+ dflt='8'
+ echo "(I can't seem to compile the test program...)"
+ fi
+ ;;
+*) dflt="$alignbytes"
+ ;;
+esac
+rp="Doubles must be aligned on a how-many-byte boundary?"
+. ./myread
+alignbytes="$ans"
+$rm -f try.c try
+
diff --git a/mcon/U/archlib.U b/mcon/U/archlib.U
new file mode 100644
index 0000000..d0c2b29
--- /dev/null
+++ b/mcon/U/archlib.U
@@ -0,0 +1,125 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: archlib.U,v $
+?RCS: Revision 3.0.1.5 1997/02/28 15:23:38 ram
+?RCS: patch61: skip existence checks for archlib
+?RCS:
+?RCS: Revision 3.0.1.4 1995/09/25 09:15:18 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.3 1995/02/15 14:14:14 ram
+?RCS: patch51: architecture name is now computed by a separate unit
+?RCS:
+?RCS: Revision 3.0.1.2 1995/01/30 14:32:22 ram
+?RCS: patch49: archname is now systematically recomputed
+?RCS: patch49: can now handle installation prefix changes (from WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:02:36 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_archlib archlib archlibexp installarchlib: archname afs spackage \
+ cat Getfile Loc Oldconfig prefixexp privlib test Prefixit Prefixup
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:d_archlib:
+?S: This variable conditionally defines ARCHLIB to hold the pathname
+?S: of architecture-dependent library files for $package. If
+?S: $archlib is the same as $privlib, then this is set to undef.
+?S:.
+?S:archlib:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put architecture-dependent public library files for $package.
+?S: It is most often a local directory such as /usr/local/lib.
+?S: Programs using this variable must be prepared to deal
+?S: with filename expansion.
+?S:.
+?S:archlibexp:
+?S: This variable is the same as the archlib variable, but is
+?S: filename expanded at configuration time, for convenient use.
+?S:.
+?S:installarchlib:
+?S: This variable is really the same as archlibexp but may differ on
+?S: those systems using AFS. For extra portability, only this variable
+?S: should be used in makefiles.
+?S:.
+?C:ARCHLIB:
+?C: This variable, if defined, holds the name of the directory in
+?C: which the user wants to put architecture-dependent public
+?C: library files for $package. It is most often a local directory
+?C: such as /usr/local/lib. Programs using this variable must be
+?C: prepared to deal with filename expansion. If ARCHLIB is the
+?C: same as PRIVLIB, it is not defined, since presumably the
+?C: program already searches PRIVLIB.
+?C:.
+?C:ARCHLIB_EXP:
+?C: This symbol contains the ~name expanded version of ARCHLIB, to be used
+?C: in programs that are not prepared to deal with ~ expansion at run-time.
+?C:.
+?H:#$d_archlib ARCHLIB "$archlib" /**/
+?H:#$d_archlib ARCHLIB_EXP "$archlibexp" /**/
+?H:.
+: determine where public architecture dependent libraries go
+set archlib archlib
+eval $prefixit
+case "$archlib" in
+'')
+ case "$privlib" in
+ '')
+ dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib`
+ set dflt
+ eval $prefixup
+ ;;
+ *) dflt="$privlib/$archname";;
+ esac
+ ;;
+*) dflt="$archlib";;
+esac
+cat <<EOM
+
+$spackage contains architecture-dependent library files. If you are
+sharing libraries in a heterogeneous environment, you might store
+these files in a separate location. Otherwise, you can just include
+them with the rest of the public library files.
+
+EOM
+fn=d+~
+rp='Where do you want to put the public architecture-dependent libraries?'
+. ./getfile
+archlib="$ans"
+archlibexp="$ansexp"
+
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+private files reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installarchlib" in
+ '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installarchlib";;
+ esac
+ fn=de~
+ rp='Where will architecture-dependent library files be installed?'
+ . ./getfile
+ installarchlib="$ans"
+else
+ installarchlib="$archlibexp"
+fi
+if $test X"$archlib" = X"$privlib"; then
+ d_archlib="$undef"
+else
+ d_archlib="$define"
+fi
+
diff --git a/mcon/U/archname.U b/mcon/U/archname.U
new file mode 100644
index 0000000..231e159
--- /dev/null
+++ b/mcon/U/archname.U
@@ -0,0 +1,76 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: archname.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:24:32 ram
+?RCS: patch61: changed the way the archname is mangled from uname
+?RCS:
+?RCS: Revision 3.0.1.2 1995/05/12 12:05:24 ram
+?RCS: patch54: protect against spaces in "uname -m" output (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1995/02/15 14:14:21 ram
+?RCS: patch51: created
+?RCS:
+?MAKE:archname myarchname: sed Loc Myread Oldconfig osname test rm
+?MAKE: -pick add $@ %<
+?S:archname:
+?S: This variable is a short name to characterize the current
+?S: architecture. It is used mainly to construct the default archlib.
+?S:.
+?S:myarchname:
+?S: This variable holds the architecture name computed by Configure in
+?S: a previous run. It is not intended to be perused by any user and
+?S: should never be set in a hint file.
+?S:.
+?C:ARCHNAME:
+?C: This symbol holds a string representing the architecture name.
+?C: It may be used to construct an architecture-dependant pathname
+?C: where library files may be held under a private library, for
+?C: instance.
+?C:.
+?H:#define ARCHNAME "$archname" /**/
+?H:.
+?T:xxx tarch
+: determine the architecture name
+echo " "
+?X: We always recompute archname in case osname changes. However, we need
+?X: to be careful since, as ADO rightfully pointed out, some systems pick
+?X: silly architecture names (0001307135000-aix on AIX or 9000/715-ux under
+?X: HP-UX). Therefore, we allow hint files to superseed our guess and ask
+?X: the user for confirmation.
+if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
+ tarch=`arch`"-$osname"
+elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
+ if uname -m > tmparch 2>&1 ; then
+ tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
+ -e 's/$/'"-$osname/" tmparch`
+ else
+ tarch="$osname"
+ fi
+ $rm -f tmparch
+else
+ tarch="$osname"
+fi
+case "$myarchname" in
+''|"$tarch") ;;
+*)
+ echo "(Your architecture name used to be $myarchname.)"
+ archname=''
+ ;;
+esac
+case "$archname" in
+'') dflt="$tarch";;
+*) dflt="$archname";;
+esac
+rp='What is your architecture name'
+. ./myread
+archname="$ans"
+myarchname="$tarch"
+
diff --git a/mcon/U/baserev.U b/mcon/U/baserev.U
new file mode 100644
index 0000000..3fc675c
--- /dev/null
+++ b/mcon/U/baserev.U
@@ -0,0 +1,22 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: baserev.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:24 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:baserev: Null
+?MAKE: -pick wipe $@ %<
+?S:baserev:
+?S: The base revision level of this package, from the .package file.
+?S:.
+: set the base revision
+baserev=<BASEREV>
+
diff --git a/mcon/U/basicshell.U b/mcon/U/basicshell.U
new file mode 100644
index 0000000..b5ccfbc
--- /dev/null
+++ b/mcon/U/basicshell.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: basicshell.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:25 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:basicshell: Getfile Oldconfig bash csh ksh sh
+?MAKE: -pick add $@ %<
+?S:basicshell:
+?S: This variable contains the eventual value of the BASICSHELL symbol,
+?S: which contains the full name of the basic script shell on this
+?S: system. Usual values are /bin/sh, /bin/ksh, /bin/csh.
+?S:.
+?C:BASICSHELL:
+?C: This symbol contains the full name of the basic script shell on this
+?C: system. Usual values are /bin/sh, /bin/ksh, /bin/csh.
+?C:.
+?H:#define BASICSHELL "$basicshell" /**/
+?H:.
+: find the most basic shell for scripts
+echo " "
+case "$basicshell" in
+'')
+ case "$sh $bash $csh $ksh" in
+ */sh*) dflt="$sh" ;;
+ */ksh*) dflt="$ksh" ;;
+ */csh*) dflt="$csh" ;;
+ */bash*) dflt="$bash" ;;
+ *) dflt='/bin/sh' ;;
+ esac
+ ;;
+*)
+ dflt="$basicshell";;
+esac
+fn=f
+rp="Give the full path name of the most basic shell used on your system"
+. ./getfile
+basicshell=$ans
+
diff --git a/mcon/U/bin.U b/mcon/U/bin.U
new file mode 100644
index 0000000..81c0a96
--- /dev/null
+++ b/mcon/U/bin.U
@@ -0,0 +1,88 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: bin.U,v $
+?RCS: Revision 3.0.1.4 1995/09/25 09:15:32 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/30 14:32:40 ram
+?RCS: patch49: can now handle installation prefix changes (from WED)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:05:28 ram
+?RCS: patch32: now uses installation prefix
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 15:56:51 ram
+?RCS: patch10: made prompting more explicit (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:26 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:bin binexp installbin: Prefixit Getfile Oldconfig afs cat test
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:bin:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put publicly executable images for the package in question. It
+?S: is most often a local directory such as /usr/local/bin. Programs using
+?S: this variable must be prepared to deal with ~name substitution.
+?S:.
+?S:binexp:
+?S: This is the same as the bin variable, but is filename expanded at
+?S: configuration time, for use in your makefiles.
+?S:.
+?S:installbin:
+?S: This variable is the same as binexp unless AFS is running in which case
+?S: the user is explicitely prompted for it. This variable should always
+?S: be used in your makefiles for maximum portability.
+?S:.
+?C:BIN:
+?C: This symbol holds the path of the bin directory where the package will
+?C: be installed. Program must be prepared to deal with ~name substitution.
+?C:.
+?C:BIN_EXP:
+?C: This symbol is the filename expanded version of the BIN symbol, for
+?C: programs that do not want to deal with that at run-time.
+?C:.
+?H:#define BIN "$bin" /**/
+?H:#define BIN_EXP "$binexp" /**/
+?H:.
+?D:bin='/usr/local/bin'
+: determine where public executables go
+echo " "
+set dflt bin bin
+eval $prefixit
+fn=d~
+rp='Pathname where the public executables will reside?'
+. ./getfile
+if $test "X$ansexp" != "X$binexp"; then
+ installbin=''
+fi
+bin="$ans"
+binexp="$ansexp"
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+executables reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installbin" in
+ '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installbin";;
+ esac
+ fn=de~
+ rp='Where will public executables be installed?'
+ . ./getfile
+ installbin="$ans"
+else
+ installbin="$binexp"
+fi
+
diff --git a/mcon/U/bitpbyte.U b/mcon/U/bitpbyte.U
new file mode 100644
index 0000000..c56ac01
--- /dev/null
+++ b/mcon/U/bitpbyte.U
@@ -0,0 +1,74 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: bitpbyte.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:02:54 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:27 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:bitpbyte: cat rm Myread +cc +ccflags
+?MAKE: -pick add $@ %<
+?S:bitpbyte:
+?S: This variable contains the value of the BITS_PER_BYTE symbol, which
+?S: indicates to the C program how many bits there are in a byte.
+?S:.
+?C:BITS_PER_BYTE:
+?C: This symbol contains the number of bits in a byte, so that the C
+?C: preprocessor can make decisions based on it.
+?C:.
+?H:#define BITS_PER_BYTE $bitpbyte /**/
+?H:.
+?F:!try
+: check for length of byte
+echo " "
+case "$bitpbyte" in
+'')
+ echo "Checking to see how many bits there are in a byte..." >&4
+ $cat >try.c <<'EOCP'
+#include <stdio.h>
+?X: Standard C requires a macro CHAR_BIT in <limits.h>
+#ifdef __STDC__
+#include <limits.h>
+#ifndef CHAR_BIT
+#define CHAR_BIT 8
+#endif
+#ifndef BITSPERBYTE
+#define BITSPERBYTE CHAR_BIT
+#endif
+#else
+?X: On non standard C, try with <values.h>
+#include <values.h>
+#ifndef BITSPERBYTE
+#define BITSPERBYTE 8
+#endif
+#endif
+int main()
+{
+ printf("%d\n", BITSPERBYTE);
+}
+EOCP
+ if $cc $ccflags -o try try.c >/dev/null 2>&1 ; then
+ dflt=`./try`
+ else
+ dflt='8'
+ echo "(I can't seem to compile the test program. Guessing...)"
+ fi
+ ;;
+*)
+ dflt="$bitpbyte"
+ ;;
+esac
+rp="What is the length of a byte (in bits)?"
+. ./myread
+bitpbyte="$ans"
+$rm -f try.c try
+
diff --git a/mcon/U/byteorder.U b/mcon/U/byteorder.U
new file mode 100644
index 0000000..a337080
--- /dev/null
+++ b/mcon/U/byteorder.U
@@ -0,0 +1,99 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: byteorder.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:24:55 ram
+?RCS: patch61: no longer ask the user if the test runs ok
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:02:58 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:28 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:byteorder: cat Myread Oldconfig Loc +cc +ccflags rm
+?MAKE: -pick add $@ %<
+?S:byteorder:
+?S: This variable holds the byte order. In the following, larger digits
+?S: indicate more significance. The variable byteorder is either 4321
+?S: on a big-endian machine, or 1234 on a little-endian, or 87654321
+?S: on a Cray ... or 3412 with weird order !
+?S:.
+?C:BYTEORDER:
+?C: This symbol hold the hexadecimal constant defined in byteorder,
+?C: i.e. 0x1234 or 0x4321, etc...
+?C:.
+?H:#define BYTEORDER 0x$byteorder /* large digits for MSB */
+?H:.
+?T:xxx_prompt
+?F:!try
+: check for ordering of bytes in a long
+case "$byteorder" in
+'')
+ $cat <<'EOM'
+
+In the following, larger digits indicate more significance. A big-endian
+machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
+little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
+machines may have weird orders like 3412. A Cray will report 87654321. If
+the test program works the default is probably right.
+I'm now running the test program...
+EOM
+ $cat >try.c <<'EOCP'
+#include <stdio.h>
+int main()
+{
+ int i;
+ union {
+ unsigned long l;
+ char c[sizeof(long)];
+ } u;
+
+ if (sizeof(long) > 4)
+ u.l = (0x08070605L << 32) | 0x04030201L;
+ else
+ u.l = 0x04030201L;
+ for (i = 0; i < sizeof(long); i++)
+ printf("%c", u.c[i]+'0');
+ printf("\n");
+ exit(0);
+}
+EOCP
+ xxx_prompt=y
+ if $cc $ccflags -o try try.c >/dev/null 2>&1 && ./try > /dev/null; then
+ dflt=`./try`
+ case "$dflt" in
+ [1-4][1-4][1-4][1-4]|12345678|87654321)
+ echo "(The test program ran ok.)"
+ echo "byteorder=$dflt"
+ xxx_prompt=n
+ ;;
+ ????|????????) echo "(The test program ran ok.)" ;;
+ *) echo "(The test program didn't run right for some reason.)" ;;
+ esac
+ else
+ dflt='4321'
+ cat <<'EOM'
+(I can't seem to compile the test program. Guessing big-endian...)
+EOM
+ fi
+ case "$xxx_prompt" in
+ y)
+ rp="What is the order of bytes in a long?"
+ . ./myread
+ byteorder="$ans"
+ ;;
+ *) byteorder=$dflt
+ ;;
+ esac
+ ;;
+esac
+$rm -f try.c try
+
diff --git a/mcon/U/cc.U b/mcon/U/cc.U
new file mode 100644
index 0000000..15366ff
--- /dev/null
+++ b/mcon/U/cc.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: cc.U,v $
+?RCS: Revision 3.0.1.4 1995/05/12 12:06:47 ram
+?RCS: patch54: may now abort Configure when cc does not work
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/11 15:20:11 ram
+?RCS: patch45: changed gcc checking message to a more explicit one (WED)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:04:29 ram
+?RCS: patch36: detect gcc even when not called as 'gcc' (ADO)
+?RCS: patch36: simplified gcc version checking (ADO)
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:26:06 ram
+?RCS: patch23: added support for gcc version (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:30 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:cc: Myread Oldconfig Checkcc test
+?MAKE: -pick add $@ %<
+?S:cc:
+?S: This variable holds the name of a command to execute a C compiler which
+?S: can resolve multiple global references that happen to have the same
+?S: name. Usual values are 'cc' and 'gcc'.
+?S: Fervent ANSI compilers may be called 'c89'. AIX has xlc.
+?S:.
+?F:!cc.cbu
+?D:cc='cc'
+: Determine the C compiler to be used
+echo " "
+case "$cc" in
+'') dflt=cc;;
+*) dflt="$cc";;
+esac
+rp="Use which C compiler?"
+. ./myread
+cc="$ans"
+
+: See whether they have no cc but they do have gcc
+. ./trygcc
+?X: Look for a hint-file generated 'call-back-unit'. Now that the
+?X: user has specified the compiler, we may need to set or change some
+?X: other defaults.
+if $test -f cc.cbu; then
+ . ./cc.cbu
+fi
+. ./checkcc
+
diff --git a/mcon/U/ccflags.U b/mcon/U/ccflags.U
new file mode 100644
index 0000000..8e61474
--- /dev/null
+++ b/mcon/U/ccflags.U
@@ -0,0 +1,403 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: ccflags.U,v $
+?RCS: Revision 3.0.1.9 1997/02/28 15:27:07 ram
+?RCS: patch61: removed support for NO_PROTOTYPE detection on SCO
+?RCS: patch61: new locincpth variable
+?RCS: patch61: added info on the "additional ld flags" question
+?RCS:
+?RCS: Revision 3.0.1.8 1995/07/25 13:48:54 ram
+?RCS: patch56: re-arranged compile line to include ldflags before objects
+?RCS:
+?RCS: Revision 3.0.1.7 1995/05/12 12:08:33 ram
+?RCS: patch54: now checks for cc/ccflags/ldflags coherency
+?RCS:
+?RCS: Revision 3.0.1.6 1994/10/29 16:07:02 ram
+?RCS: patch36: gcc versionning no longer relies on the C compiler's name
+?RCS: patch36: simplified check for gcc version checking (ADO)
+?RCS:
+?RCS: Revision 3.0.1.5 1994/08/29 16:06:35 ram
+?RCS: patch32: propagate -posix flag from ccflags to ldflags
+?RCS:
+?RCS: Revision 3.0.1.4 1994/05/06 14:28:45 ram
+?RCS: patch23: -fpcc-struct-return only needed in gcc 1.x (ADO)
+?RCS: patch23: cppflags now computed on an option-by-option basis
+?RCS: patch23: magically added cc flags now only done the first time
+?RCS:
+?RCS: Revision 3.0.1.3 1993/09/13 15:58:29 ram
+?RCS: patch10: explicitely mention -DDEBUG just in case they need it (WAD)
+?RCS: patch10: removed all the "tans" variable usage (WAD)
+?RCS:
+?RCS: Revision 3.0.1.2 1993/08/27 14:39:38 ram
+?RCS: patch7: added support for OSF/1 machines
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/25 14:00:24 ram
+?RCS: patch6: added defaults for cppflags, ccflags and ldflags
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:31 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:ccflags ldflags lkflags cppflags optimize locincpth: test cat \
+ Myread Guess Options Oldconfig gccversion mips_type +usrinc \
+ package contains rm +cc cppstdin cppminus cpprun cpplast libpth \
+ loclibpth hint
+?MAKE: -pick add $@ %<
+?S:ccflags:
+?S: This variable contains any additional C compiler flags desired by
+?S: the user. It is up to the Makefile to use this.
+?S:.
+?S:cppflags:
+?S: This variable holds the flags that will be passed to the C pre-
+?S: processor. It is up to the Makefile to use it.
+?S:.
+?S:optimize:
+?S: This variable contains any optimizer/debugger flag that should be used.
+?S: It is up to the Makefile to use it.
+?S:.
+?S:ldflags:
+?S: This variable contains any additional C loader flags desired by
+?S: the user. It is up to the Makefile to use this.
+?S:.
+?S:lkflags:
+?S: This variable contains any additional C partial linker flags desired by
+?S: the user. It is up to the Makefile to use this.
+?S:.
+?S:locincpth:
+?S: This variable contains a list of additional directories to be
+?S: searched by the compiler. The appropriate -I directives will
+?S: be added to ccflags. This is intended to simplify setting
+?S: local directories from the Configure command line.
+?S: It's not much, but it parallels the loclibpth stuff in libpth.U.
+?S:.
+?T:inctest thisincl xxx flag inclwanted ftry previous thislibdir
+?F:!cpp.c
+?D:cppflags=''
+?D:ccflags=''
+?D:ldflags=''
+?D:optimize=''
+?INIT:: Possible local include directories to search.
+?INIT:: Set locincpth to "" in a hint file to defeat local include searches.
+?INIT:locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
+?INIT:locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
+?INIT::
+?INIT:: no include file wanted by default
+?INIT:inclwanted=''
+?INIT:
+: determine optimize, if desired, or use for debug flag also
+case "$optimize" in
+' '|$undef) dflt='none';;
+'') dflt='-O';;
+*) dflt="$optimize";;
+esac
+$cat <<EOH
+
+Some C compilers have problems with their optimizers. By default, $package
+compiles with the -O flag to use the optimizer. Alternately, you might want
+to use the symbolic debugger, which uses the -g flag (on traditional Unix
+systems). Either flag can be specified here. To use neither flag, specify
+the word "none".
+
+EOH
+rp="What optimizer/debugger flag should be used?"
+. ./myread
+optimize="$ans"
+case "$optimize" in
+'none') optimize=" ";;
+esac
+
+dflt=''
+: We will not override a previous value, but we might want to
+: augment a hint file
+case "$hint" in
+default|recommended)
+ case "$gccversion" in
+ 1*) dflt='-fpcc-struct-return' ;;
+ esac
+?X: check for POSIXized ISC
+ case "$gccversion" in
+ 2*) if test -d /etc/conf/kconfig.d &&
+ $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
+ then
+ dflt="$dflt -posix"
+ fi
+ ;;
+ esac
+?X: turn warnings on if they're using gcc
+ case "$gccversion" in
+ 1*|2*) dflt="$dflt -Wall";;
+?X: starting with version 3, add "-W -Wall -Wformat=2" by default
+ *) dflt="$dflt -W -Wall -Wformat=2";;
+ esac
+ ;;
+esac
+
+?X: In USG mode, a MIPS system may need some BSD includes
+case "$mips_type" in
+*BSD*|'') inclwanted="$locincpth $usrinc";;
+*) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
+esac
+for thisincl in $inclwanted; do
+ if $test -d $thisincl; then
+ if $test x$thisincl != x$usrinc; then
+ case "$dflt" in
+ *$thisincl*);;
+ *) dflt="$dflt -I$thisincl";;
+ esac
+ fi
+ fi
+done
+
+?X: Include test function (header, symbol)
+inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
+ xxx=true;
+elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
+ xxx=true;
+else
+ xxx=false;
+fi;
+if $xxx; then
+ case "$dflt" in
+ *$2*);;
+ *) dflt="$dflt -D$2";;
+ esac;
+fi'
+
+?X:
+?X: OSF/1 uses __LANGUAGE_C__ instead of LANGUAGE_C
+?X:
+if ./osf1; then
+ set signal.h __LANGUAGE_C__; eval $inctest
+else
+ set signal.h LANGUAGE_C; eval $inctest
+fi
+
+case "$hint" in
+default|recommended) dflt="$ccflags $dflt" ;;
+*) dflt="$ccflags";;
+esac
+
+case "$dflt" in
+''|' ') dflt=none;;
+esac
+$cat <<EOH
+
+Your C compiler may want other flags. For this question you should include
+-I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
+but you should NOT include libraries or ld flags like -lwhatever.
+
+To use no flags, specify the word "none".
+
+EOH
+?X: strip leading space
+set X $dflt
+shift
+dflt=${1+"$@"}
+rp="Any additional cc flags?"
+. ./myread
+case "$ans" in
+none) ccflags='';;
+*) ccflags="$ans";;
+esac
+
+: the following weeds options from ccflags that are of no interest to cpp
+cppflags="$ccflags"
+case "$gccversion" in
+1*) cppflags="$cppflags -D__GNUC__"
+esac
+case "$mips_type" in
+'');;
+*BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
+esac
+case "$cppflags" in
+'');;
+*)
+ echo " "
+ echo "Let me guess what the preprocessor flags are..." >&4
+ set X $cppflags
+ shift
+ cppflags=''
+ $cat >cpp.c <<'EOM'
+#define BLURFL foo
+
+BLURFL xx LFRULB
+EOM
+?X:
+?X: For each cc flag, try it out with both cppstdin and cpprun, since the
+?X: first is almost surely a cc wrapper. We have to try both in case
+?X: of cc flags like '-Olimit 2900' that are actually two words...
+?X:
+ previous=''
+ for flag in $*
+ do
+ case "$flag" in
+ -*) ftry="$flag";;
+ *) ftry="$previous $flag";;
+ esac
+ if $cppstdin -DLFRULB=bar $ftry $cppminus <cpp.c \
+ >cpp1.out 2>/dev/null && \
+ $cpprun -DLFRULB=bar $ftry $cpplast <cpp.c \
+ >cpp2.out 2>/dev/null && \
+ $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
+ $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
+ then
+ cppflags="$cppflags $ftry"
+ previous=''
+ else
+ previous="$flag"
+ fi
+ done
+ set X $cppflags
+ shift
+ cppflags=${1+"$@"}
+ case "$cppflags" in
+ *-*) echo "They appear to be: $cppflags";;
+ esac
+ $rm -f cpp.c cpp?.out
+ ;;
+esac
+
+: flags used in final linking phase
+case "$ldflags" in
+'') if ./venix; then
+ dflt='-i -z'
+ else
+ dflt=''
+ fi
+ case "$ccflags" in
+ *-posix*) dflt="$dflt -posix" ;;
+ esac
+ ;;
+*) dflt="$ldflags";;
+esac
+
+: Try to guess additional flags to pick up local libraries.
+for thislibdir in $libpth; do
+ case " $loclibpth " in
+ *" $thislibdir "*)
+ case "$dflt " in
+ *"-L$thislibdir "*) ;;
+ *) dflt="$dflt -L$thislibdir" ;;
+ esac
+ ;;
+ esac
+done
+
+case "$dflt" in
+'') dflt='none' ;;
+*) set X $dflt; shift; dflt="$@";;
+esac
+
+$cat <<EOH
+
+Your C linker may need flags. For this question you should
+include -L/whatever and any other flags used by the C linker, but you
+should NOT include libraries like -lwhatever.
+
+Make sure you include the appropriate -L/path flags if your C linker
+does not normally search all of the directories you specified above,
+namely
+ $libpth
+To use no flags, specify the word "none".
+
+EOH
+
+rp="Any additional ld flags (NOT including libraries)?"
+. ./myread
+case "$ans" in
+none) ldflags='';;
+*) ldflags="$ans";;
+esac
+rmlist="$rmlist pdp11"
+
+@if lkflags
+: partial linking may need other flags
+case "$lkflags" in
+'') case "$ldflags" in
+ '') dflt='none';;
+ *) dflt="$ldflags";;
+ esac;;
+*) dflt="$lkflags";;
+esac
+echo " "
+rp="Partial linking flags to be used (NOT including -r)?"
+. ./myread
+case "$ans" in
+none) lkflags='';;
+*) lkflags="$ans";;
+esac
+
+@end
+?X:
+?X: If the user changes compilers after selecting a hint file, it's
+?X: possible that the suggested ccflags/ldflags will be wrong. Try to
+?X: compile and run a simple test program. Let the user see all the
+?X: error messages. -- ADO and RAM
+?X:
+: coherency check
+echo " "
+echo "Checking your choice of C compiler and flags for coherency..." >&4
+?X: Strip extra blanks in case some of the following variables are empty
+set X $cc $optimize $ccflags $ldflags -o try try.c
+shift
+$cat >try.msg <<EOM
+I've tried to compile and run a simple program with:
+
+ $*
+ ./try
+
+and I got the following output:
+
+EOM
+$cat > try.c <<'EOF'
+#include <stdio.h>
+int main() { exit(0); }
+EOF
+dflt=y
+?X: Use "sh -c" to avoid error messages tagged with leading "Configure:".
+?X: We need to try the resulting executable, because cc might yield a 0 status
+?X: even when ld failed, in which case the executable will not run properly,
+?X: if its x bit is set at all...
+if sh -c "$cc $optimize $ccflags $ldflags -o try try.c" >>try.msg 2>&1; then
+ if sh -c './try' >>try.msg 2>&1; then
+ dflt=n
+ else
+ echo "The program compiled OK, but exited with status $?." >>try.msg
+ rp="You have a problem. Shall I abort Configure"
+ dflt=y
+ fi
+else
+ echo "I can't compile the test program." >>try.msg
+ rp="You have a BIG problem. Shall I abort Configure"
+ dflt=y
+fi
+case "$dflt" in
+y)
+ $cat try.msg >&4
+?X: using -K will prevent default aborting--maybe they're cross compiling?
+ case "$knowitall" in
+ '')
+ echo "(The supplied flags might be incorrect with this C compiler.)"
+ ;;
+ *) dflt=n;;
+ esac
+ echo " "
+ . ./myread
+ case "$ans" in
+ n*|N*) ;;
+ *) echo "Ok. Stopping Configure." >&4
+ exit 1
+ ;;
+ esac
+ ;;
+n) echo "OK, that should do.";;
+esac
+$rm -f try try.* core
+
diff --git a/mcon/U/cf_email.U b/mcon/U/cf_email.U
new file mode 100644
index 0000000..caad32e
--- /dev/null
+++ b/mcon/U/cf_email.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: cf_email.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:05:06 ram
+?RCS: patch16: created
+?RCS:
+?RCS:
+?MAKE:cf_email: cat cf_by myhostname mydomain Oldconfig Myread
+?MAKE: -pick add $@ %<
+?S:cf_email:
+?S: Electronic mail address of the person who ran Configure. This can be
+?S: used by units that require the user's e-mail, like MailList.U.
+?S:.
+?T:cont
+: determine the e-mail address of the user who is running us
+$cat <<EOM
+
+I need to get your e-mail address in Internet format if possible, i.e.
+something like user@host.domain. Please answer accurately since I have
+no easy means to double check it. The default value provided below
+is most probably close to reality but may not be valid from outside
+your organization...
+
+EOM
+cont=x
+while test "$cont"; do
+ case "$cf_email" in
+ '') dflt="$cf_by@$myhostname$mydomain";;
+ *) dflt="$cf_email";;
+ esac
+ rp='What is your e-mail address?'
+ . ./myread
+ cf_email="$ans"
+ case "$cf_email" in
+ *@*.*) cont='' ;;
+ *)
+ rp='Address does not look like an Internet one. Use it anyway?'
+ case "$fastread" in
+ yes) dflt=y ;;
+ *) dflt=n ;;
+ esac
+ . ./myread
+ case "$ans" in
+ y*) cont='' ;;
+ *) echo " " ;;
+ esac
+ ;;
+ esac
+done
+
diff --git a/mcon/U/cf_name.U b/mcon/U/cf_name.U
new file mode 100644
index 0000000..c1ea650
--- /dev/null
+++ b/mcon/U/cf_name.U
@@ -0,0 +1,72 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Graham Stoney <greyham@research.canon.oz.au>
+?RCS:
+?RCS: $Log: cf_name.U,v $
+?RCS: Revision 3.0.1.2 1994/05/06 14:29:36 ram
+?RCS: patch23: fixed user name computation from /etc/passwd in bsd systems
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:05:11 ram
+?RCS: patch16: created
+?RCS:
+?RCS:
+?MAKE:+cf_name: cf_by passcat Filexp nametype cat test
+?MAKE: -pick add $@ %<
+?S:cf_name:
+?S: Full name of the person who ran the Configure script and answered the
+?S: questions. This can be used by units that require the user's full name.
+?S: This variable is for internal use only.
+?S:.
+?T:xxx fn NAME
+: figure out their full name
+case "$NAME" in
+'') case "$nametype" in
+ other)
+ fn=`./filexp ~/.fullname`
+ xxx=usg
+ $test -f $fn && xxx=other
+ ;;
+ *)
+ xxx="$nametype"
+ ;;
+ esac
+
+ case "$xxx" in
+ bsd)
+ cf_name=`$passcat | grep "^$cf_by:" | \
+ sed -e 's/^[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\):.*/\1/' \
+ -e 's/,.*//'`
+ ;;
+ usg)
+ cf_name=`$passcat | grep "^$cf_by:" | \
+ sed -e 's/^[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\):.*/\1/' \
+ -e 's/[^-]*-\(.*\)(.*)/\1/'`
+ ;;
+ *)
+ cf_name=`$cat $fn`
+ ;;
+ esac
+ ;;
+*)
+ cf_name="$NAME"
+ ;;
+esac
+?X:
+?X: In the original unit, Graham asked for the user name, in case the above
+?X: code was unable to figure it out correctly. Since now cf_name has been
+?X: made an internal variable only (i.e. it is not saved in config.sh), letting
+?X: the user override the computed default each time would be a pain.
+?X: Therefore, I have decided to trust the above code to get it right, and for
+?X: those rare cases where it will fail, too bad :-) --RAM.
+?X:
+echo " "
+echo "Pleased to meet you, $cf_name."
+
diff --git a/mcon/U/cf_who.U b/mcon/U/cf_who.U
new file mode 100644
index 0000000..2643d24
--- /dev/null
+++ b/mcon/U/cf_who.U
@@ -0,0 +1,62 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: cf_who.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:28:50 ram
+?RCS: patch61: new computation method avoiding use of temporary file
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:42:34 ram
+?RCS: patch23: login name now computed the hard way
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:32 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: Oldconfig dependency is there to ensure computation occurs after old values
+?X: from config.sh have been loaded, so that we can supersede them.
+?X:
+?MAKE:cf_time cf_by: date Oldconfig
+?MAKE: -pick add $@ %<
+?S:cf_time:
+?S: Holds the output of the "date" command when the configuration file was
+?S: produced. This is used to tag both config.sh and config_h.SH.
+?S:.
+?S:cf_by:
+?S: Login name of the person who ran the Configure script and answered the
+?S: questions. This is used to tag both config.sh and config_h.SH.
+?S:.
+?LINT:change LC_ALL LANGUAGE
+: who configured the system
+?X: Ensure English date -- Jarkko Hietaniemi
+cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
+?X:
+?X: Leave a white space between first two '(' for ksh. The sub-shell is needed
+?X: on some machines to avoid the error message when logname is not found; e.g.
+?X: on SUN-OS 3.2, (logname || whoami) would not execute whoami if logname was
+?X: not found. Sigh!
+?X:
+?X: Convex had a broken logname executable which returned a non-zero status,
+?X: and that broke the previous:
+?X: cf_by=`( (logname) 2>/dev/null || whoami) 2>&1`
+?X: Switch to emergency mode... -- RAM, 19/04/94
+?X:
+?X: Parens needed to avoid error message if the program does not exist.
+?X: Uses case instead of $test so it can be put before $test is defined.
+?X: Don't redirect to a file because on Ultrix (under script?) logname
+?X: outputs a blank line first. This method will apparently work.
+cf_by=`(logname) 2>/dev/null`
+case "$cf_by" in
+"")
+ cf_by=`(whoami) 2>/dev/null`
+ case "$cf_by" in
+ "") cf_by=unknown ;;
+ esac ;;
+esac
+
diff --git a/mcon/U/charorder.U b/mcon/U/charorder.U
new file mode 100644
index 0000000..8ed5428
--- /dev/null
+++ b/mcon/U/charorder.U
@@ -0,0 +1,143 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: charorder.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:07:08 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:33 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:chorder_int chorder_short chorder_long: Myread cat +cc +ccflags rm
+?MAKE: -pick add $@ %<
+?S:chorder_short (d_cos d_bos):
+?S: Holds the value describing the byte ordering of characters in a short.
+?S: On a Big-Endian machine, that would be "c0c1".
+?S:.
+?S:chorder_int (charoder):
+?S: Holds the value describing the byte ordering of characters in an int.
+?S: For instance, on a Big-Endian machine, this would be: "c0c1c2c3".
+?S:.
+?S:chorder_long (d_col d_bol):
+?S: Holds the value describing the byte ordering of characters in a long.
+?S: On a 64 bits Big-Endian machine, that would yield: "c0c1c2c3c4c5c6c7".
+?S:.
+?C:CHAR_ORDER_SHORT:
+?C: Holds the byte ordering of characters in a short. It's a string
+?C: value like "c0c1" on a Big-Endian machine.
+?C:.
+?C:CHAR_ORDER_INT:
+?C: Holds the byte ordering of characters in an int. It's a string
+?C: value like "c0c1c2c3" on a Big-Endian machine.
+?C:.
+?C:CHAR_ORDER_LONG:
+?C: Holds the byte ordering of characters in a long. It's a string
+?C: value like "c0c1c2c3c4c5c6c7" on a 64 bits Big-Endian machine.
+?C:.
+?H:#define CHAR_ORDER_SHORT "$chorder_short" /* byte order in a short */
+?H:#define CHAR_ORDER_INT "$chorder_int" /* byte order in an int */
+?H:#define CHAR_ORDER_LONG "$chorder_long" /* byte order in a long */
+?H:.
+?F:!byteorder
+: check for character ordering
+echo " "
+echo "Checking out byte order..." >&4
+$cat >byteorder.c <<'EOCP'
+#include <stdio.h>
+
+main(argc, argv)
+ int argc;
+ char *argv[]; {
+ int i;
+ int max;
+ union {
+ short u_s;
+ int u_i;
+ long u_l;
+ char u_c[sizeof(long)];
+ } u;
+ switch (argv[1][0]) {
+ case 'l':
+ u.u_l = 0L;
+ /* HMS: ASSERT: sizeof(long) < 10. */
+ for(i = 0; i < sizeof(long); ++i) {
+ u.u_l *= 0x100L;
+ u.u_l += (0xc0 + i);
+ }
+ max = sizeof(long);
+ break;
+ case 's':
+ u.u_s = 0;
+ /* HMS: ASSERT: sizeof(short) < 10. */
+ for(i = 0; i < sizeof(short); ++i) {
+ u.u_s *= 0x100L;
+ u.u_s += (0xc0 + i);
+ }
+ max = sizeof(short);
+ break;
+ case 'i':
+ u.u_i = 0;
+ /* RAM: ASSERT: sizeof(int) < 10. */
+ for(i = 0; i < sizeof(int); ++i) {
+ u.u_l *= 0x100L;
+ u.u_l += (0xc0 + i);
+ }
+ max = sizeof(int);
+ break;
+ default:
+ max = 0;
+ break;
+ }
+ for(i = 0; i < max; i++) {
+ printf("%x", u.u_c[i] & 0x00FF);
+ }
+ printf("\n");
+ exit(0);
+}
+EOCP
+if $cc $ccflags -o byteorder byteorder.c >/dev/null 2>&1 ; then
+ : null statement
+@if chorder_short
+ chorder_short=`./byteorder s`
+@end
+@if chorder_int
+ chorder_int=`./byteorder i`
+@end
+@if chorder_long
+ chorder_long=`./byteorder l`
+@end
+else
+ $cat <<EOM
+(I can't seem to get my test program to work. Guessing 32 bits big-endian.)
+EOM
+ chorder_short="c0c1"
+ chorder_int="c0c1c2c3"
+ chorder_long="c0c1c2c3"
+fi
+@if chorder_short
+dflt=$chorder_short
+rp='What is the order of characters in a short?'
+. ./myread
+chorder_short="$ans"
+@end
+@if chorder_int
+dflt=$chorder_int
+rp='What is the order of characters in an int?'
+. ./myread
+chorder_int="$ans"
+@end
+@if chorder_long
+dflt=$chorder_long
+rp='What is the order of characters in a long?'
+. ./myread
+chorder_long="$ans"
+@end
+$rm -f byteorder* core
+
diff --git a/mcon/U/charsize.U b/mcon/U/charsize.U
new file mode 100644
index 0000000..ba6b9b3
--- /dev/null
+++ b/mcon/U/charsize.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: charsize.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:07:13 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:34 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:charsize: cat rm Myread +cc +ccflags
+?MAKE: -pick add $@ %<
+?S:charsize:
+?S: This variable contains the value of the CHARSIZE symbol, which
+?S: indicates to the C program how many bytes there are in a character.
+?S:.
+?C:CHARSIZE:
+?C: This symbol contains the size of a char, so that the C preprocessor
+?C: can make decisions based on it.
+?C:.
+?H:#define CHARSIZE $charsize /**/
+?H:.
+?F:!try
+: check for length of character
+echo " "
+case "$charsize" in
+'')
+ echo "Checking to see how big your characters are..." >&4
+ $cat >try.c <<'EOCP'
+#include <stdio.h>
+int main()
+{
+ printf("%d\n", sizeof(char));
+}
+EOCP
+ if $cc $ccflags -o try try.c >/dev/null 2>&1 ; then
+ dflt=`./try`
+ else
+ dflt='1'
+ echo "(I can't seem to compile the test program. Guessing...)"
+ fi
+ ;;
+*)
+ dflt="$charsize"
+ ;;
+esac
+rp="What is the size of a character (in bytes)?"
+. ./myread
+charsize="$ans"
+$rm -f try.c try
+
diff --git a/mcon/U/contains.U b/mcon/U/contains.U
new file mode 100644
index 0000000..fcfd216
--- /dev/null
+++ b/mcon/U/contains.U
@@ -0,0 +1,43 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: contains.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:35 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:contains: Nothing
+?MAKE: -pick add $@ %<
+?S:contains:
+?S: This variable holds the command to do a grep with a proper return
+?S: status. On most sane systems it is simply "grep". On insane systems
+?S: it is a grep followed by a cat followed by a test. This variable
+?S: is primarily for the use of other Configure units.
+?S:.
+: Some greps do not return status, grrr.
+echo "grimblepritz" >grimble
+if grep blurfldyick grimble >/dev/null 2>&1 ; then
+ contains=contains
+elif grep grimblepritz grimble >/dev/null 2>&1 ; then
+ contains=grep
+else
+ contains=contains
+fi
+rm -f grimble
+: the following should work in any shell
+case "$contains" in
+contains*)
+ echo " "
+ echo "AGH! Grep doesn't return a status. Attempting remedial action."
+ cat >contains <<'EOSS'
+grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
+EOSS
+chmod +x contains
+esac
+
diff --git a/mcon/U/cpp_stuff.U b/mcon/U/cpp_stuff.U
new file mode 100644
index 0000000..2473ef2
--- /dev/null
+++ b/mcon/U/cpp_stuff.U
@@ -0,0 +1,157 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: cpp_stuff.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:30:48 ram
+?RCS: patch61: added cute quoting trick for wild stringify support
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:08:24 ram
+?RCS: patch36: now uses cppstdin instead of plain cpp for consistency (ADO)
+?RCS: patch36: remove temporary files when done
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:36 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:cpp_stuff cpp_quote: cat contains cppstdin cppflags cppminus rm Warn \
+ package
+?MAKE: -pick add $@ %<
+?S:cpp_stuff:
+?S: This variable contains an identification of the catenation mechanism
+?S: used by the C preprocessor.
+?S:.
+?S:cpp_quote:
+?S: This variable is set to either '"' or '' depending on whether the
+?S: pre-processor pre-dates ANSI or not. It is used in the production of
+?S: the SQuoTe() and EQuoTe() macros, and was introduced to overcome a bug
+?S: in gcc 3.x whereby the pre-processor complained loudly about the
+?S: unterminated strings.
+?S:.
+?C:CAT2:
+?C: This macro catenates 2 tokens together.
+?C:.
+?C:CAT3:
+?C: This macro catenates 3 tokens together.
+?C:.
+?C:CAT4:
+?C: This macro catenates 4 tokens together.
+?C:.
+?C:CAT5:
+?C: This macro catenates 5 tokens together.
+?C:.
+?C:STRINGIFY:
+?C: This macro surrounds its token with double quotes.
+?C:.
+?C:SCAT2:
+?C: This macro catenates 2 tokens together and stringifies the result.
+?C:.
+?C:SCAT3:
+?C: This macro catenates 3 tokens together and stringifies the result.
+?C:.
+?C:SCAT4:
+?C: This macro catenates 4 tokens together and stringifies the result.
+?C:.
+?C:SCAT5:
+?C: This macro catenates 5 tokens together and stringifies the result.
+?C:.
+?H:?%<:#if $cpp_stuff == 1
+?H:?CAT2:#define CAT2(a,b)a/**/b
+?H:?CAT3:#define CAT3(a,b,c)a/**/b/**/c
+?H:?CAT4:#define CAT4(a,b,c,d)a/**/b/**/c/**/d
+?H:?CAT5:#define CAT5(a,b,c,d,e)a/**/b/**/c/**/d/**/e
+?H:?STRINGIFY:#define STRINGIFY(a)"a"
+?H:?%<:#define SQuoTe(a)${cpp_quote}a
+?H:?%<:#define EQuoTe(a)a${cpp_quote}
+?H:?SCAT2:#define SCAT2(a,b)EQuoTe(SQuoTe(a)b)
+?H:?SCAT3:#define SCAT3(a,b,c)EQuoTe(SQuoTe(a)b/**/c)
+?H:?SCAT4:#define SCAT4(a,b,c,d)EQuoTe(SQuoTe(a)b/**/c/**/d)
+?H:?SCAT5:#define SCAT5(a,b,c,d,e)EQuoTe(SQuoTe(a)b/**/c/**/d/**/e)
+?H:?%<:#endif
+?H:?%<:#if $cpp_stuff == 42
+?X: The additional level of indirection enables these macros to be
+?X: used as arguments to other macros. See K&R 2nd ed., page 231.
+?H:?%<:#define CaTiFy(a,b) a ## b
+?H:?%<:#define CAT2(a,b) CaTiFy(a,b)
+?H:?CAT3:#define CAT3(a,b,c) CAT2(CaTiFy(a,b),c)
+?H:?CAT4:#define CAT4(a,b,c,d) CAT2(CaTiFy(a,b), CaTiFy(c,d))
+?H:?CAT5:#define CAT5(a,b,c,d,e) CAT2(CAT2(CaTiFy(a,b), CaTiFy(c,d)), e)
+?H:?%<:#define StGiFy(a)# a
+?H:?STRINGIFY:#define STRINGIFY(a)StGiFy(a)
+?H:?SCAT2:#define SCAT2(a,b)StGiFy(a) StGiFy(b)
+?H:?SCAT3:#define SCAT3(a,b,c)StGiFy(a) StGiFy(b) StGiFy(c)
+?H:?SCAT4:#define SCAT4(a,b,c,d)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d)
+?H:?SCAT5:#define SCAT5(a,b,c,d,e)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d) StGiFy(e)
+?H:?%<:#endif
+?H:?%<:#if $cpp_stuff != 1 && $cpp_stuff != 42
+?H:?%<:#include "Bletch: How does this C preprocessor catenate tokens?"
+?H:?%<:#endif
+?H:.
+?W:%<:CAT2 CAT3 CAT4 CAT5 STRINGIFY SCAT2 SCAT3 SCAT4 SCAT5
+?F:!cpp_stuff.c
+?LINT:known StGiFy EQuoTe SQuoTe CaTiFy
+: how do we catenate cpp tokens here?
+echo " "
+echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
+cpp_quote=''
+$cat >cpp_stuff.c <<'EOCP'
+#define RCAT(a,b)a/**/b
+#define ACAT(a,b)a ## b
+RCAT(Rei,ser)
+ACAT(Cir,cus)
+EOCP
+$cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
+if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
+ echo "Oh! Smells like ANSI's been here."
+ echo "We can catify or stringify, separately or together!"
+ cpp_stuff=42
+elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
+ echo "Ah, yes! The good old days!"
+ cpp_stuff=1
+ $cat >cpp_stuff.c <<'EOCP'
+#define SQuoTe(a)"a
+#define EQuoTe(a)a"
+#define CAT2(a,b)EQuoTe(SQuoTe(a)b)
+CAT2(Vic,tory)
+EOCP
+ $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
+ if $contains '"Victory"' cpp_stuff.out >/dev/null 2>&1; then
+ echo "I'll resort to a cute trick to also be able to stringify."
+ cpp_quote='"'
+ else
+ $cat <<EOM
+However, in the good old days we don't know how to stringify and
+catify at the same time...
+@if SCAT2 || SCAT3 || SCAT4 || SCAT5
+You might have to edit the values of the SCAT[2-5] macros in config.h...
+@else
+Hopefully, $package does not need this feature.
+@end
+EOM
+ fi
+else
+ ./warn <<EOM
+I can't seem to be able to catenate tokens with your cpp.
+@if CAT2 || CAT3 || CAT4 || CAT5 || SCAT2 || SCAT3 || SCAT4 || SCAT5
+You're going to have to edit the values of the following
+macros in config.h:
+
+@if CAT2 || CAT3 || CAT4 || CAT5
+ CAT[2-5]
+@end
+@if SCAT2 || SCAT3 || SCAT4 || SCAT5
+ SCAT[2-5]
+@end
+
+in order to let me compile.
+@end
+EOM
+ cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
+fi
+$rm -f cpp_stuff.*
+
diff --git a/mcon/U/cpp_trad.U b/mcon/U/cpp_trad.U
new file mode 100644
index 0000000..7b0fa85
--- /dev/null
+++ b/mcon/U/cpp_trad.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: cpp_stuff.U,v $
+?MAKE:cpp_trad: cpp cat contains rm
+?MAKE: -pick add $@ %<
+?S:cpp_trad:
+?S: This variable contains the program to run to get traditional C
+?S: preprocessor semantics and not ISO C semantics: we want something
+?S: that knows as little about C as possible to use as a more general
+?S: purpose preprocessor.
+?S:.
+?F:!foo.c !foo.cpp
+: how do we get traditional cpp semantics?
+echo " "
+echo "Checking to see how to get traditional cpp semantics..." >&4
+$cat >foo.c <<'EOF'
+#define A(x) x
+#define B(y) y
+A(a)B(b)
+EOF
+if $cpp foo.c >foo.cpp; $contains ab foo.cpp >/dev/null 2>&1; then
+ echo "Plain '$cpp' works just fine."
+ cpp_trad="$cpp"
+elif $cpp -traditional foo.c >foo.cpp; \
+ $contains ab foo.cpp >/dev/null 2>&1; then
+ echo "We'll use '$cpp -traditional' to get proper semantics."
+ cpp_trad="$cpp -traditional"
+else
+ echo "I don't know how to get traditional semantics with '$cpp'." >&4
+ cpp_trad="$cpp"
+fi
+$rm -f foo.c foo.cpp
+
diff --git a/mcon/U/cppfilecom.U b/mcon/U/cppfilecom.U
new file mode 100644
index 0000000..d796ce8
--- /dev/null
+++ b/mcon/U/cppfilecom.U
@@ -0,0 +1,204 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Orginal Author: Graham Stoney <greyham@research.canon.oz.au>
+?RCS:
+?RCS: $Log: cppfilecom.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:37 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:cppfilecom cppstdinflags d_cppignhdrs d_cppcanstdin: \
+ contains package test Myread Oldconfig Loc Setvar cpp cc cat rm
+?MAKE: -pick add $@ %<
+?S:cppfilecom:
+?S: This variable contains the first part of the string which will invoke
+?S: the C preprocessor a file and produce to standard output, preserving
+?S: comments. Typical value of "cc -E -C" or "/lib/cpp -C".
+?S:.
+?S:cppstdinflags:
+?S: This variable contains any flags necessary to get cppfilecom to read
+?S: from the standard input.
+?S:.
+?S:d_cppignhdrs:
+?S: This symbol conditionally defines CPP_IGN_HDRS if CPP_FILE_COM ignores
+?S: *.h files.
+?S:.
+?S:d_cppcanstdin:
+?S: This symbol conditionally defines CPP_CAN_STDIN if CPP_FILE_COM can
+?S: read standard input directly.
+?S:.
+?C:CPP_FILE_COM (CPPFILECOM):
+?C: This symbol contains the first part of the string which will invoke
+?C: the C preprocessor a file and produce to standard output, preserving
+?C: comments. Typical value of "cc -E -C" or "/lib/cpp -C".
+?C:.
+?C:CPP_STDIN_FLAGS (CPPSTDINFLAGS):
+?C: This variable contains any flags necessary to get CPP_FILE_COM to
+?C: read from the standard input.
+?C:.
+?C:CPP_IGN_HDRS (CPPIGNHDRS):
+?C: This symbol is defined if CPP_FILE_COM ignores *.h files.
+?C:.
+?C:CPP_CAN_STDIN (CPPCANSTDIN):
+?C: This symbol is defined if CPP_FILE_COM can read standard input
+?C: directly.
+?C:.
+?H:#define CPP_FILE_COM "$cppfilecom"
+?H:#define CPP_STDIN_FLAGS "$cppstdinflags"
+?H:#$d_cppignhdrs CPP_IGN_HDRS /* does CPP ignore .h files? */
+?H:#$d_cppcanstdin CPP_CAN_STDIN /* can CPP read stdin directly? */
+?H:.
+?T:cont
+?F:!testcpp.c !testcpp.h !testcpp.out
+?LINT:set d_cppcanstdin d_cppignhdrs
+?LINT:usefile testcpp.c testcpp.out
+: see how we invoke the C preprocessor
+$cat <<EOM
+
+$package needs to be able to preprocess its input files in a mode which
+preserves comments, which is often not the default behaviour. It should run
+the C preprocessor you will use when compiling your own source code, which
+should be ISO/ANSI C compliant if you want $package to handle the latest
+standard C. I will try to guess, but I might guess wrongly because it is not
+necessarily the same preprocessor used to build $package.
+
+EOM
+$cat <<'EOT' >testcpp.c
+#define ABC abc
+#define XYZ xyz
+ABC.XYZ
+/* comment */
+EOT
+:
+if $test "X$cppfilecom" != "X" && \
+ $cppfilecom testcpp.c </dev/null >testcpp.out 2>/dev/null && \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+then
+ echo "You used to use $cppfilecom so we'll use that again."
+elif echo 'Maybe "'$cc' -E -C" will work...' && \
+ $cc -E -C testcpp.c </dev/null >testcpp.out 2>/dev/null && \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+then
+ echo "It works!"
+ cppfilecom="$cc -E -C"
+elif echo 'Nope...maybe "'"$cc"' -P -C" will work...' && \
+ $cc -P -C testcpp.c </dev/null >testcpp.out 2>/dev/null && \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+then
+ echo "Yup, that does."
+ cppfilecom="$cc -P -C"
+elif echo 'No such luck, maybe "'"$cpp"' -C" will work...' && \
+ $cpp -C testcpp.c </dev/null >testcpp.out 2>/dev/null && \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+then
+ echo "Yup, it does."
+ cppfilecom="$cpp -C"
+else
+ cppfilecom=''
+ $cat <<'EOM'
+I can't find a C preprocessor that will preserve comments. Please name one.
+EOM
+fi
+:
+dflt="$cppfilecom"
+cont=true
+while $test "$cont" ; do
+ echo " "
+ rp="How should $package run your preprocessor preserving comments?"
+ . ./myread
+ cppfilecom="$ans"
+ $cppfilecom testcpp.c >testcpp.out 2>&1
+ if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+ then
+ echo "OK, that will do."
+ cont=''
+ else
+ echo "Sorry, I can't get that to work."
+ fi
+done
+
+@if CPP_IGN_HDRS || d_cppignhdrs
+: Now see if it ignores header files.
+cp testcpp.c testcpp.h
+$cppfilecom testcpp.h >testcpp.out 2>&1
+if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+then
+ echo "Terrific; it processes .h files passed on the command line too."
+ val="$undef"
+else
+ echo "It ignores .h files on the command line; pity."
+ val="$define"
+fi
+set d_cppignhdrs
+eval $setvar
+
+@end
+@if CPP_STDIN_FLAGS || CPP_CAN_STDIN || cppstdinflags || d_cppcanstdin
+: Now see how to send stdin to it.
+echo " "
+cp testcpp.c testcpp.h
+$cppfilecom <testcpp.h >testcpp.out 2>&1
+if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+then
+ echo "Great; and it will read stdin if passed no arguments."
+ val="$define"
+ cppstdinflags=''
+else
+ $cppfilecom - <testcpp.h >testcpp.out 2>&1
+ if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+ then
+ echo "Great; and it can read stdin by passing it '-'."
+ val="$define"
+ cppstdinflags='-'
+ else
+ $cat <<FOO
+Unfortunately, I can't find an easy way to get that preprocessor to read from
+standard input. Do you know any flags I can pass it to get it to do so?
+If that preprocessor can't read directly form standard input, answer 'none'.
+
+FOO
+ val='dunno'
+ while $test "$val" = "dunno"; do
+ rp='Flags to get preprocessor to read stdin?'
+ dflt='none'
+ . ./myread
+ if $test $ans = 'none'; then
+ echo "Oh well, if $package wants it done, it will do it for itself."
+ val="$undef"
+ else
+ $cppfilecom $ans <testcpp.h >testcpp.out 2>&1
+ if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 && \
+ $contains comment testcpp.out >/dev/null 2>&1
+ then
+ echo "Good; that works fine."
+ val="$define"
+ cppstdinflags="$ans"
+ else
+ echo "Sorry, I couldn't get that to work."
+ fi
+ fi
+ done
+ fi
+fi
+set d_cppcanstdin
+eval $setvar
+
+@end
+: cleanup cpp test files anyway
+$rm -f testcpp.*
+
diff --git a/mcon/U/cppstdin.U b/mcon/U/cppstdin.U
new file mode 100644
index 0000000..85d556d
--- /dev/null
+++ b/mcon/U/cppstdin.U
@@ -0,0 +1,249 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: cppstdin.U,v $
+?RCS: Revision 3.0.1.4 1994/10/29 16:08:34 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.3 1994/01/24 14:05:38 ram
+?RCS: patch16: comment for CPPLAST was missing
+?RCS:
+?RCS: Revision 3.0.1.2 1993/12/15 08:18:58 ram
+?RCS: patch15: new variables cpprun and cpplast, guaranteed wrapper-free
+?RCS: patch15: cppstdin now tries to use cc, even at the cost of a wrapper
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/25 14:00:53 ram
+?RCS: patch6: remove wrapper when not actually used
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:38 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:cppstdin cppminus cpprun cpplast: contains test Myread Oldconfig Loc \
+ cpp +cc rm hint osname gccversion startsh eunicefix
+?MAKE: -pick add $@ %<
+?S:cppstdin:
+?S: This variable contains the command which will invoke the C
+?S: preprocessor on standard input and put the output to stdout.
+?S: It is primarily used by other Configure units that ask about
+?S: preprocessor symbols.
+?S:.
+?S:cppminus:
+?S: This variable contains the second part of the string which will invoke
+?S: the C preprocessor on the standard input and produce to standard
+?S: output. This variable will have the value "-" if cppstdin needs
+?S: a minus to specify standard input, otherwise the value is "".
+?S:.
+?S:cpprun:
+?S: This variable contains the command which will invoke a C preprocessor
+?S: on standard input and put the output to stdout. It is guaranteed not
+?S: to be a wrapper and may be a null string if no preprocessor can be
+?S: made directly available. This preprocessor might be different from the
+?S: one used by the C compiler. Don't forget to append cpplast after the
+?S: preprocessor options.
+?S:.
+?S:cpplast:
+?S: This variable has the same functionality as cppminus, only it applies to
+?S: cpprun and not cppstdin.
+?S:.
+?C:CPPSTDIN:
+?C: This symbol contains the first part of the string which will invoke
+?C: the C preprocessor on the standard input and produce to standard
+?C: output. Typical value of "cc -E" or "/lib/cpp", but it can also
+?C: call a wrapper. See CPPRUN.
+?C:.
+?C:CPPMINUS:
+?C: This symbol contains the second part of the string which will invoke
+?C: the C preprocessor on the standard input and produce to standard
+?C: output. This symbol will have the value "-" if CPPSTDIN needs a minus
+?C: to specify standard input, otherwise the value is "".
+?C:.
+?C:CPPRUN:
+?C: This symbol contains the string which will invoke a C preprocessor on
+?C: the standard input and produce to standard output. It needs to end
+?C: with CPPLAST, after all other preprocessor flags have been specified.
+?C: The main difference with CPPSTDIN is that this program will never be a
+?C: pointer to a shell wrapper, i.e. it will be empty if no preprocessor is
+?C: available directly to the user. Note that it may well be different from
+?C: the preprocessor used to compile the C program.
+?C:.
+?C:CPPLAST:
+?C: This symbol is intended to be used along with CPPRUN in the same manner
+?C: symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "".
+?C:.
+?H:#define CPPSTDIN "$cppstdin"
+?H:#define CPPMINUS "$cppminus"
+?H:#define CPPRUN "$cpprun"
+?H:#define CPPLAST "$cpplast"
+?H:.
+?F:cppstdin !testcpp.out !testcpp.c
+?T:wrapper x_cpp x_minus ok
+: see how we invoke the C preprocessor
+echo " "
+echo "Now, how can we feed standard input to your C preprocessor..." >&4
+cat <<'EOT' >testcpp.c
+#define ABC abc
+#define XYZ xyz
+ABC.XYZ
+EOT
+cd ..
+if $test ! -f cppstdin; then
+ echo "$startsh" >cppstdin
+if $test "X$osname" = "Xaix" -a "X$gccversion" = X; then
+?X: AIX cc -E doesn't show the absolute headerfile
+?X: locations but we'll cheat by using the -M flag.
+ echo 'cat >.$$.c; rm -f .$$.u; '"$cc"' ${1+"$@"} -M -c .$$.c 2>/dev/null; \
+ test -s .$$.u && \
+ awk '"'"'$2 ~ /\.h$/ { print "# 0 \""$2"\"" }'"'"' .$$.u; \
+ rm -f .$$.o .$$.u; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >> cppstdin
+else
+ echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >>cppstdin
+fi; else
+ echo "Keeping your $hint cppstdin wrapper."
+fi
+chmod 755 cppstdin
+$eunicefix cppstdin
+wrapper=`pwd`/cppstdin
+ok='false'
+cd UU
+
+?X:
+?X: We'll run the cpp tests again if we don't have any valid C preprocessor
+?X: yet or don't know how to proceed without a wrapper (in which case cpprun
+?X: is empty and that's really annoying...)
+?X:
+if $test "X$cppstdin" != "X" && \
+ $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+then
+ echo "You used to use $cppstdin $cppminus so we'll use that again."
+ case "$cpprun" in
+ '') echo "But let's see if we can live without a wrapper..." ;;
+ *)
+ if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+ then
+ echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
+ ok='true'
+ else
+ echo "(However, $cpprun $cpplast does not work, let's see...)"
+ fi
+ ;;
+ esac
+else
+ case "$cppstdin" in
+ '') ;;
+ *)
+ echo "Good old $cppstdin $cppminus does not seem to be of any help..."
+ ;;
+ esac
+fi
+
+if $ok; then
+ : nothing
+elif echo 'Maybe "'"$cc"' -E" will work...'; \
+ $cc -E <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "Yup, it does."
+ x_cpp="$cc -E"
+ x_minus='';
+elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
+ $cc -E - <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "Yup, it does."
+ x_cpp="$cc -E"
+ x_minus='-';
+elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
+ $cc -P <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "Yipee, that works!"
+ x_cpp="$cc -P"
+ x_minus='';
+elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
+ $cc -P - <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "At long last!"
+ x_cpp="$cc -P"
+ x_minus='-';
+elif echo 'No such luck, maybe "'$cpp'" will work...'; \
+ $cpp <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "It works!"
+ x_cpp="$cpp"
+ x_minus='';
+elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
+ $cpp - <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "Hooray, it works! I was beginning to wonder."
+ x_cpp="$cpp"
+ x_minus='-';
+elif echo 'Uh-uh. Time to get fancy. Trying a wrapper...'; \
+ $wrapper <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ x_cpp="$wrapper"
+ x_minus=''
+ echo "Eureka!"
+else
+ dflt=''
+ rp="No dice. I can't find a C preprocessor. Name one:"
+ . ./myread
+ x_cpp="$ans"
+ x_minus=''
+ $x_cpp <testcpp.c >testcpp.out 2>&1
+ if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
+ echo "OK, that will do." >&4
+ else
+echo "Sorry, I can't get that to work. Go find one and rerun Configure." >&4
+ exit 1
+ fi
+fi
+
+case "$ok" in
+false)
+ cppstdin="$x_cpp"
+ cppminus="$x_minus"
+ cpprun="$x_cpp"
+ cpplast="$x_minus"
+?X:
+?X: If /lib/cpp is used, try using a wrapper to increase our chances to have
+?X: the C compiler and our $cppstdin agree on the same symbols... However,
+?X: since cpprun is guaranteed not to be a wrapper, we must clear it if the
+?X: only preprocessor we found was a wrapper, with all our luck...
+?X:
+ set X $x_cpp
+ shift
+ case "$1" in
+ "$cpp")
+ echo "Perhaps can we force $cc -E using a wrapper..."
+ if $wrapper <testcpp.c >testcpp.out 2>&1; \
+ $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
+ then
+ echo "Yup, we can."
+ cppstdin="$wrapper"
+ cppminus='';
+ else
+ echo "Nope, we'll have to live without it..."
+ fi
+ ;;
+ esac
+ case "$cpprun" in
+ "$wrapper")
+ cpprun=''
+ cpplast=''
+ ;;
+ esac
+ ;;
+esac
+
+case "$cppstdin" in
+"$wrapper"|'cppstdin') ;;
+*) $rm -f $wrapper;;
+esac
+$rm -f testcpp.c testcpp.out
+
diff --git a/mcon/U/d_NOFILE.U b/mcon/U/d_NOFILE.U
new file mode 100644
index 0000000..7685cd1
--- /dev/null
+++ b/mcon/U/d_NOFILE.U
@@ -0,0 +1,189 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_NOFILE.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:08:38 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:39 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:nofile d_gettblsz tablesize: Myread Guess cat +cc +ccflags +libs \
+ test rm Csym
+?MAKE: -pick add $@ %<
+?S:nofile:
+?S: This variable contains the number of file descriptors available to the
+?S: process.
+?S:.
+?S:d_gettblsz:
+?S: This variable conditionally handles remapping of the getdtablesize()
+?S: subroutine to ulimit(4,0), or the NOFILE manifest constant.
+?S:.
+?S:tablesize:
+?S: This variable contains either the 'NOFILE' constant or 'ulimit(4, 0L)'
+?S: and is used as the remapped value for the getdtablesize() macro.
+?S:.
+?C:getdtablesize:
+?C: This catches use of the getdtablesize() subroutine, and remaps it
+?C: to either ulimit(4,0) or NOFILE, if getdtablesize() isn't available.
+?C:.
+?C:VAL_NOFILE:
+?C: This symbol contains the number of file descriptors available to the
+?C: process, as determined at configuration time. Unless a static constant
+?C: is needed, you should rely on getdtablesize() to obtain that number.
+?C:.
+?H:#$d_gettblsz getdtablesize() $tablesize /**/
+?H:#define VAL_NOFILE $nofile /* Number of file descriptors */
+?H:.
+?F:!nofile
+?T:d_ulimit4 val
+: see if getdtablesize exists
+echo " "
+?X: Revert logical value (d_gettblsz is undef iff getdtablesize is present)
+case "$d_gettblsz" in
+$define) d_gettblsz="$undef";;
+$undef) d_gettblsz="$define";;
+esac
+if set getdtablesize val -f d_gettblsz; eval $csym; $val; then
+ echo 'getdtablesize() found.' >&4
+ d_gettblsz="$undef"
+ tablesize=''
+@if VAL_NOFILE || nofile
+ $cat >nofile.c <<'EOCP'
+#include <stdio.h>
+int main()
+{
+ printf("%d\n", getdtablesize());
+}
+EOCP
+ nofile=''
+ if $cc $ccflags -o nofile nofile.c $libs >/dev/null 2>&1; then
+ nofile=`./nofile 2>/dev/null`
+ fi
+ if $test "$nofile"; then
+ echo "(You have $nofile file descriptors available per process.)"
+ else
+ nofile='20'
+ if ./bsd; then
+ nofile='64'
+ fi
+ echo "(Hmm... Let's say you have $nofile file descriptors available.)"
+ fi
+@end
+else
+ echo 'getdtablesize() NOT found...' >&4
+ if set ulimit val -f; eval $csym; $val; then
+ echo 'Maybe ulimit(4,0) will work...'
+ $cat >nofile.c <<'EOCP'
+#include <stdio.h>
+#ifdef GETPARAM_H
+#include <sys/param.h>
+#endif
+int main()
+{
+ printf("%d %d\n",
+#ifdef NOFILE
+ NOFILE,
+#else
+ 0,
+#endif
+ ulimit(4,0));
+ exit(0);
+}
+EOCP
+ if $cc $ccflags -DGETPARAM_H -o nofile nofile.c $libs >/dev/null 2>&1 \
+ || $cc $ccflags -o nofile nofile.c $libs >/dev/null 2>&1 ; then
+ set `./nofile`
+ d_gettblsz=$1
+ d_ulimit4=$2
+ if $test "$d_ulimit4" -lt 0; then
+ echo "Your ulimit() call doesn't tell me what I want to know."
+ echo "We'll just use NOFILE in this case."
+ nofile=$d_gettblsz
+ d_gettblsz="$define"
+ tablesize='NOFILE'
+ else
+ if $test "$d_gettblsz" -gt 0; then
+ echo "Your system defines NOFILE to be $d_gettblsz, and" >&4
+ else
+ echo "I had trouble getting NOFILE from your system, but" >&4
+ fi
+echo "ulimit returns $d_ulimit4 as the number of available file descriptors." >&4
+ dflt='y';
+ echo " "
+ rp='Should I use ulimit to get the number of available file descriptors?'
+ . ./myread
+ case "$ans" in
+ y*)
+ nofile=$d_ulimit4
+ d_gettblsz="$define"
+ tablesize='ulimit(4, 0L)'
+ echo "Using ulimit(4,0)."
+ ;;
+ *)
+ nofile=$d_gettblsz
+ d_gettblsz="$define"
+ tablesize='NOFILE'
+ echo "Using NOFILE."
+ ;;
+ esac
+ fi
+ else
+ echo "Strange, I couldn't get my test program to compile."
+ echo "We'll just use NOFILE in this case."
+ d_gettblsz="$define"
+ tablesize='NOFILE'
+ nofile=''
+ fi
+ else
+ echo 'Using NOFILE instead.'
+ d_gettblsz="$define"
+ tablesize='NOFILE'
+ nofile=''
+ fi
+fi
+@if VAL_NOFILE || nofile
+case "$nofile" in
+'')
+ $cat >nofile.c <<'EOCP'
+#include <stdio.h>
+#ifdef GETPARAM_H
+#include <sys/param.h>
+#endif
+int main()
+{
+ printf("%d\n",
+#ifdef NOFILE
+ NOFILE,
+#else
+ 0,
+#endif
+ );
+ exit(0);
+}
+EOCP
+ if $cc $ccflags -DGETPARAM_H -o nofile nofile.c $libs >/dev/null 2>&1 \
+ || $cc $ccflags -o nofile nofile.c $libs >/dev/null 2>&1 ; then
+ nofile=`./nofile 2>/dev/null`
+ fi
+ if $test "$nofile"; then
+ echo "(You have $nofile file descriptors available per process.)"
+ else
+ nofile='20'
+ if ./bsd; then
+ nofile='64'
+ fi
+ echo "(Hmm... Let's say you have $nofile file descriptors available.)"
+ fi
+ ;;
+esac
+@end
+$rm -f nofile*
+
diff --git a/mcon/U/d_NeWS.U b/mcon/U/d_NeWS.U
new file mode 100644
index 0000000..29d1539
--- /dev/null
+++ b/mcon/U/d_NeWS.U
@@ -0,0 +1,101 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_NeWS.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:39 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_news d_news0 d_newshome d_textcan: test rm Myread Getfile
+?MAKE: -pick add $@ %<
+?S:d_news:
+?S: Set if running NeWS 1.1
+?S:.
+?S:d_news0:
+?S: Set if running NeWS 1.0
+?S:.
+?S:d_newshome:
+?S: Path to the top directory of the NeWS structure.
+?S:.
+?S:d_textcan:
+?S: Path to where the textcan.ps stuff is...
+?S:.
+?C:HAS_NEWS1_1 (NEWS1_1):
+?C: This symbol defined if running NeWS 1.1.
+?C:.
+?C:HAS_NEWS1_0 (NEWS1_0):
+?C: This symbol defined if running NeWS 1.0.
+?C:.
+?C:TEXTCAN:
+?C: Tells path to where the textcan.ps stuff is...
+?C:.
+?H:#$d_news HAS_NEWS1_1 /**/
+?H:#$d_news0 HAS_NEWS1_0 /**/
+?H:#define TEXTCAN $d_textcan /**/
+?H:.
+?INIT:: default path for NeWS
+?INIT:d_newshome="/usr/NeWS"
+?INIT:
+: Check to see what version of NeWS is being run?
+cd ..
+echo " "
+echo "Now for the interesting stuff... Lets see what kind of NeWS"
+echo "they grow round here...."
+echo " "
+dflt='y'
+if $test -d $d_newshome; then
+ d_newshome=`(cd $d_newshome ; /bin/pwd)`
+ echo "Ah...found myself a NeWS in $d_newshome..."
+ dflt='y'
+ rp="Is this the NeWS you want your children to grow up with?"
+ . UU/myread
+fi
+while $test $ans = "n"; do
+dflt=$d_newshome
+fn=d
+rp="Path to NeWS you want:"
+. UU/getfile
+d_newshome=$ans
+
+echo " "
+if $test ! -d $d_newshome/lib; then
+ echo "ARG! No lib directory in $d_newshome!!!"
+ : heavy medicine. I wonder what the disease is...
+ $rm -f kit*isdone
+ $rm -rf UU
+ : bye bye
+ set -t; echo "Sorry... no NeWS is bad news..."
+fi
+
+if $test -r $d_newshome/lib/NeWS/colors.ps ; then
+ echo 'Ahh... your running NeWS 1.1! Boy... that makes stuff easy....'
+ echo " "
+ d_news="$define"
+ d_news0="$undef"
+ if $test -r $d_newshome/lib/NeWS/textcan.ps; then
+ d_textcan=$d_newshome/lib/NeWS
+ echo "The textcan.ps stuff seems to be in : $d_textcan"
+ else
+ d_textcan=$d_newshome/clientsrc/client/nterm
+ if $test ! -r $d_textcan/textcan.ps; then
+ d_news="$undef"
+ d_news0="$define"
+ echo 'Hmm... must have been fooled... gotta be NeWS 1.1 beta!'
+ else
+ echo "The textcan.ps stuff seems to be in : $d_textcan"
+ fi
+ fi
+else
+ echo 'snif... snif... I smell the dilapidated smell of NeWS 1.0..'
+ echo 'Some things will not work under NeWS 1.0...'
+ d_news="$undef"
+ d_news0="$define"
+fi
+cd UU
+
diff --git a/mcon/U/d_PORTAR.U b/mcon/U/d_PORTAR.U
new file mode 100644
index 0000000..55251c7
--- /dev/null
+++ b/mcon/U/d_PORTAR.U
@@ -0,0 +1,79 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_PORTAR.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:08:42 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:40 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_PORTAR: cat +cc rm Setvar
+?MAKE: -pick add $@ %<
+?S:d_PORTAR:
+?S: This variable conditionally handles definition of PORTAR,
+?S: a creation of greater minds than I can imagine.
+?S:.
+?C:PORTAR:
+?C: This manifest constant must be defined to 1 for some implementations
+?C: of ar.h to get the portable ar most everybody uses.
+?C:.
+?L:ar_fmag:
+?L:ARFMAG:
+?L:SARMAG:
+?H:#$d_PORTAR PORTAR 1 /**/
+?H:.
+?F:!portar
+?LINT:set d_PORTAR
+: see if we need to define PORTAR
+echo " "
+echo 'Checking to see if we need to define PORTAR for portable archives...' >&4
+$cat >portar.c <<'EOCP'
+#include <ar.h>
+int main() {
+ char *arfmag = ARFMAG;
+ int sarmag = SARMAG;
+ struct ar_hdr arh;
+
+ strncpy(arh.ar_fmag, arfmag, 2);
+
+#ifdef PORTAR
+ printf("D\n");
+#else
+ printf("U\n");
+#endif
+ exit(0);}
+EOCP
+if $cc -o portar portar.c >/dev/null 2>&1 || \
+ $cc -DPORTAR=1 -o portar portar.c >/dev/null 2>&1 ; then
+ case "`./portar`" in
+ D)
+ val="$define"
+ echo "We'll be defining PORTAR for you."
+ ;;
+ U)
+ val="$undef"
+ echo "We don't seem to need PORTAR defined here."
+ ;;
+ *)
+ val="$define"
+ echo "(My test program gave me an unexpected value!)"
+ echo "I'll just define PORTAR to be sure."
+ ;;
+ esac
+else
+ echo "(Strange, I couldn't get my test program to compile.)"
+ echo "We'll just define PORTAR in this case."
+ val="$define"
+fi
+set d_PORTAR
+eval $setvar
+$rm -f portar*
+
diff --git a/mcon/U/d_SHM_MAC.U b/mcon/U/d_SHM_MAC.U
new file mode 100644
index 0000000..f8e87aa
--- /dev/null
+++ b/mcon/U/d_SHM_MAC.U
@@ -0,0 +1,141 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_SHM_MAC.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:41 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_SHM_MAC d_SHM_PRM d_SHM_SEG d_SHM_IMMU: cat d_shm test rm +cc +ccflags
+?MAKE: -pick add $@ %<
+?S:d_SHM_MAC:
+?S: Sometimes, the SHMLBA manifest needs sys/sysmacros.h, usually for
+?S: the ctob() macro.
+?S:.
+?S:d_SHM_PRM:
+?S: Sometimes, the SHMLBA manifest needs sys/param.h, usually for the
+?S: NBPC constant.
+?S:.
+?S:d_SHM_SEG:
+?S: Sometimes, the SHMLBA manifest needs sys/seg.h, usually for the
+?S: SNUMSHFT constant.
+?S:.
+?S:d_SHM_IMMU:
+?S: Sometimes, the SHMLBA manifest needs sys/immu.h, usually for the
+?S: stob() macro.
+?S:.
+?C:SHMLBA_WANTS_SYSMACROS:
+?C: This value tells us to include <sys/sysmacros.h> because SHMLBA
+?C: needs something from there, probably the ctob() macro.
+?C:.
+?C:SHMLBA_WANTS_PARAM:
+?C: This value tells us to include <sys/param.h> because SHMLBA needs
+?C: something from there, probably the NBPC constant.
+?C:.
+?C:SHMLBA_WANTS_SEG:
+?C: This value tells us to include <sys/seg.h> because SHMLBA needs
+?C: something from there, probably the SNUMSHFT constant.
+?C:.
+?C:SHMLBA_WANTS_IMMU:
+?C: This value tells us to include <sys/immu.h> because SHMLBA needs
+?C: something from there, probably the stob() macro. (tower_600 only?)
+?C:.
+?H:#$d_SHM_MAC SHMLBA_WANTS_SYSMACROS /* SHMLBA wants ctob()? */
+?H:#$d_SHM_PRM SHMLBA_WANTS_PARAM /* SHMLBA wants NBPC? */
+?H:#$d_SHM_SEG SHMLBA_WANTS_SEG /* SHMLBA wants SNUMSHFT? */
+?H:#$d_SHM_IMMU SHMLBA_WANTS_IMMU /* SHMLBA wants stob()? */
+?H:.
+?T:flags D_sys_immu D_sys_seg D_sys_sysmacros D_sys_param
+: check for SHMLBA braindamage
+d_SHM_MAC="$undef"
+d_SHM_PRM="$undef"
+d_SHM_SEG="$undef"
+d_SHM_IMMU="$undef"
+if $test "$d_shm" = "$define" ; then
+ echo " "
+ $cat >&4 <<EOM
+Checking to see if SHMLBA needs additional headers.
+The headers I'll be checking are:
+
+ sys/macros.h (for the ctob() macro)
+ sys/param.h (for NBPC)
+ sys/seg.h (for SNUMSHFT)
+ sys/immu.h (for the stob() macro)
+
+EOM
+ $cat >shm_mac.c <<'EOCP'
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#ifdef I_SYS_IMMU
+#include <sys/immu.h>
+#endif
+#ifdef I_SYS_SYSMACROS
+#include <sys/sysmacros.h>
+#endif
+#ifdef I_SYS_PARAM
+#include <sys/param.h>
+#endif
+#ifdef I_SYS_SEG
+#include <sys/seg.h>
+#endif
+
+int main() {
+ int foo = SHMLBA ;
+ }
+EOCP
+ flags='xxx'
+ for D_sys_immu in '' '-DI_SYS_IMMU'; do
+ for D_sys_seg in '' '-DI_SYS_SEG'; do
+ for D_sys_sysmacros in '' '-DI_SYS_SYSMACROS'; do
+ for D_sys_param in '' '-DI_SYS_PARAM'; do
+ case "$flags" in
+ 'xxx')
+ case "$D_sys_immu$D_sys_param$D_sys_sysmacros$D_sys_seg" in
+ '')
+ echo "Trying it normally..."
+ ;;
+ *)
+ echo "Trying $D_sys_immu $D_sys_param $D_sys_sysmacros $D_sys_seg"
+ ;;
+ esac
+ if $cc $ccflags \
+ $D_sys_immu $D_sys_param $D_sys_sysmacros $D_sys_seg \
+ -o shm_mac shm_mac.c >/dev/null 2>&1 ; then
+ set X $D_sys_immu $D_sys_param $D_sys_sysmacros $D_sys_seg
+ shift
+ flags="$*"
+ echo "Succeeded with $flags"
+ fi
+ ;;
+ esac
+ done
+ done
+ done
+ done
+ case "$flags" in
+ xxx)
+ echo "I don't know how to keep SHMLBA happy. Good luck!"
+ ;;
+ esac
+ case "$flags" in
+ *I_SYS_PARAM*) d_SHM_PRM="$define";;
+ esac
+ case "$flags" in
+ *I_SYS_SYSMACROS*) d_SHM_MAC="$define";;
+ esac
+ case "$flags" in
+ *I_SYS_SEG*) d_SHM_SEG="$define";;
+ esac
+ case "$flags" in
+ *I_SYS_IMMU*) d_SHM_IMMU="$define";;
+ esac
+fi
+$rm -f shm_mac*
+
diff --git a/mcon/U/d_access.U b/mcon/U/d_access.U
new file mode 100644
index 0000000..2e1db7d
--- /dev/null
+++ b/mcon/U/d_access.U
@@ -0,0 +1,74 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_access.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_access: test +cc cat +cppflags h_fcntl h_sysfile rm Inlibc Findhdr
+?MAKE: -pick add $@ %<
+?S:d_access:
+?S: This variable conditionally defines HAS_ACCESS if the access() system
+?S: call is available to check for access permissions using real IDs.
+?S:.
+?C:HAS_ACCESS:
+?C: This manifest constant lets the C program know that the access()
+?C: system call is available to check for accessibility using real UID/GID.
+?C: (always present on UNIX.)
+?C:.
+?H:#$d_access HAS_ACCESS /**/
+?H:.
+?W:%<:R_OK W_OK X_OK F_OK
+?LINT:set d_access
+?LINT:change h_fcntl h_sysfile
+: access call always available on UNIX
+set access d_access
+eval $inlibc
+
+: locate the flags for 'access()'
+case "$d_access" in
+"$define")
+ echo " "
+ $cat >access.c <<'EOCP'
+#include <sys/types.h>
+#ifdef I_FCNTL
+#include <fcntl.h>
+#endif
+#ifdef I_SYS_FILE
+#include <sys/file.h>
+#endif
+#ifdef I_UNISTD
+#include <unistd.h>
+#endif
+int main() {
+ exit(R_OK);
+}
+EOCP
+ : check sys/file.h first, no particular reason here
+ if $test `./findhdr sys/file.h` && \
+ $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
+ h_sysfile=true;
+ echo "<sys/file.h> defines the *_OK access constants." >&4
+ elif $test `./findhdr fcntl.h` && \
+ $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
+ h_fcntl=true;
+ echo "<fcntl.h> defines the *_OK access constants." >&4
+@if I_UNISTD
+ elif $test `./findhdr unistd.h` && \
+ $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
+ echo "<unistd.h> defines the *_OK access constants." >&4
+@end
+ else
+ echo "I can't find the four *_OK access constants--I'll use mine." >&4
+ fi
+ ;;
+esac
+$rm -f access*
+
diff --git a/mcon/U/d_alarm.U b/mcon/U/d_alarm.U
new file mode 100644
index 0000000..589d125
--- /dev/null
+++ b/mcon/U/d_alarm.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_alarm.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:06:58 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_alarm: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_alarm:
+?S: This variable conditionally defines the HAS_ALARM symbol, which
+?S: indicates to the C program that the alarm() routine is available.
+?S:.
+?C:HAS_ALARM :
+?C: This symbol, if defined, indicates that the alarm routine is
+?C: available.
+?C:.
+?H:#$d_alarm HAS_ALARM /**/
+?H:.
+?LINT:set d_alarm
+: see if alarm exists
+set alarm d_alarm
+eval $inlibc
+
diff --git a/mcon/U/d_attribut.U b/mcon/U/d_attribut.U
new file mode 100644
index 0000000..8ff5422
--- /dev/null
+++ b/mcon/U/d_attribut.U
@@ -0,0 +1,64 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_attribut.U,v $
+?RCS: Revision 3.0.1.3 1995/01/30 14:33:45 ram
+?RCS: patch49: test C program now includes <stdio.h> (WED)
+?RCS:
+?RCS: Revision 3.0.1.2 1995/01/11 15:25:47 ram
+?RCS: patch45: fixed typo in the d_attribut variable (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:08:55 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_attribut: Myread Oldconfig cat cc ccflags rm Setvar contains
+?MAKE: -pick add $@ %<
+?S:d_attribut (d_attrib):
+?S: This variable conditionally defines HASATTRIBUTE, which
+?S: indicates the C compiler can check for function attributes,
+?S: such as printf formats.
+?S:.
+?C:HASATTRIBUTE ~ %< (GNUC_ATTRIBUTE_CHECK):
+?C: This symbol indicates the C compiler can check for function attributes,
+?C: such as printf formats. This is normally only supported by GNU cc.
+?C:.
+?H:?%<:#$d_attribut HASATTRIBUTE /**/
+?H:?%<:#ifndef HASATTRIBUTE
+?H:?%<:#define __attribute__(_arg_)
+?H:?%<:#endif
+?H:.
+?W:%<:__attribute__
+?LINT:set d_attribut
+?LINT:known __attribute__
+: Look for GNU-cc style attribute checking
+echo " "
+echo "Checking whether your compiler can handle __attribute__ ..." >&4
+$cat >attrib.c <<'EOCP'
+#include <stdio.h>
+void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
+EOCP
+if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
+ if $contains 'warning' attrib.out >/dev/null 2>&1; then
+ echo "Your C compiler doesn't fully support __attribute__."
+ val="$undef"
+ else
+ echo "Your C compiler supports __attribute__."
+ val="$define"
+ fi
+else
+ echo "Your C compiler doesn't seem to understand __attribute__ at all."
+ val="$undef"
+fi
+set d_attribut
+eval $setvar
+$rm -f attrib*
+
diff --git a/mcon/U/d_bcmp.U b/mcon/U/d_bcmp.U
new file mode 100644
index 0000000..ae2e4bd
--- /dev/null
+++ b/mcon/U/d_bcmp.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_bcmp.U,v $
+?RCS: Revision 3.0.1.2 1993/10/16 13:47:52 ram
+?RCS: patch12: added magic support for bcmp()
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:00:44 ram
+?RCS: patch10: now only defines HAS_BCMP, no macro remap on memcmp (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_bcmp: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_bcmp:
+?S: This variable conditionally defines the HAS_BCMP symbol if
+?S: the bcmp() routine is available to compare strings.
+?S:.
+?C:HAS_BCMP:
+?C: This symbol is defined if the bcmp() routine is available to
+?C: compare blocks of memory.
+?C:.
+?H:#$d_bcmp HAS_BCMP /**/
+?H:.
+?M:bcmp: HAS_BCMP
+?M:#ifndef HAS_BCMP
+?M:#ifndef bcmp
+?M:#define bcmp(s,d,l) memcmp((s),(d),(l))
+?M:#endif
+?M:#endif
+?M:.
+?LINT:set d_bcmp
+: see if bcmp exists
+set bcmp d_bcmp
+eval $inlibc
+
diff --git a/mcon/U/d_bcopy.U b/mcon/U/d_bcopy.U
new file mode 100644
index 0000000..2ae3ad8
--- /dev/null
+++ b/mcon/U/d_bcopy.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_bcopy.U,v $
+?RCS: Revision 3.0.1.2 1993/10/16 13:48:04 ram
+?RCS: patch12: added magic support for bcopy()
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:01:11 ram
+?RCS: patch10: now only defines HAS_BCOPY, no macro remap on memcpy (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:44 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_bcopy: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_bcopy:
+?S: This variable conditionally defines the HAS_BCOPY symbol if
+?S: the bcopy() routine is available to copy strings.
+?S:.
+?C:HAS_BCOPY:
+?C: This symbol is defined if the bcopy() routine is available to
+?C: copy blocks of memory.
+?C:.
+?H:#$d_bcopy HAS_BCOPY /**/
+?H:.
+?M:bcopy: HAS_BCOPY
+?M:#ifndef HAS_BCOPY
+?M:#ifndef bcopy
+?M:#define bcopy(s,d,l) memcpy((d),(s),(l))
+?M:#endif
+?M:#endif
+?M:.
+?LINT:set d_bcopy
+: see if bcopy exists
+set bcopy d_bcopy
+eval $inlibc
+
diff --git a/mcon/U/d_brokstat.U b/mcon/U/d_brokstat.U
new file mode 100644
index 0000000..a330dba
--- /dev/null
+++ b/mcon/U/d_brokstat.U
@@ -0,0 +1,75 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_brokstat.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:30:53 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:d_brokstat: cat contains cppstdin cppminus +cppflags rm Setvar
+?MAKE: -pick add $@ %<
+?S:d_brokstat:
+?S: This variable conditionally defines STAT_MACROS_BROKEN if some
+?S: of the S_IS*() macros from <sys/stat.h> give false positive on
+?S: regular files.
+?S:.
+?C:STAT_MACROS_BROKEN:
+?C: This symbol, if defined, indicates that the S_IS*() stat macros
+?C: such as S_ISBLK() give false positive and are thus unusable.
+?C: Your best bet is then to supply your own set.
+?C:.
+?H:#$d_brokstat STAT_MACROS_BROKEN /**/
+?H:.
+?F:!try.c !try
+?LINT:set d_brokstat
+?LINT:usefile try
+?X: This test inspired by autoconf -- RAM, 28/02/97
+: are stat macros sane?
+echo " "
+echo "Checking whether your stat() macros are broken..."
+$cat >try.c <<'EOC'
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if defined(S_ISBLK) && defined(S_IFDIR)
+#if S_ISBLK(S_IFDIR)
+Broken
+#endif
+#endif
+
+#if defined(S_ISBLK) && defined(S_IFCHR)
+#if S_ISBLK(S_IFCHR)
+Broken
+#endif
+#endif
+
+#if defined(S_ISLNK) && defined(S_IFREG)
+#if S_ISLNK(S_IFREG)
+Broken.
+#endif
+#endif
+
+#if defined(S_ISSOCK) && defined(S_IFREG)
+#if S_ISSOCK(S_IFREG)
+Broken.
+#endif
+#endif
+EOC
+$cppstdin $cppflags $cppminus <try.c 2>/dev/null >try
+if $contains Broken try >/dev/null 2>&1; then
+ echo "Alas, they are. I'll use my own macro set then." >&4
+ val="$define"
+else
+ echo "Nope, working just fine." >&4
+ val="$undef"
+fi
+$rm -f try try.c
+set d_brokstat
+eval $setvar
+
diff --git a/mcon/U/d_bsdjmp.U b/mcon/U/d_bsdjmp.U
new file mode 100644
index 0000000..da2f496
--- /dev/null
+++ b/mcon/U/d_bsdjmp.U
@@ -0,0 +1,86 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_bsdjmp.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:31:10 ram
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:09:09 ram
+?RCS: patch36: call ./usg explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:45 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_bsdjmp: Guess Setvar cat +cc libs rm
+?MAKE: -pick add $@ %<
+?S:d_bsdjmp:
+?S: This variable conditionally defines USE_BSDJMP if BSD _setjmp and
+?S: _longjmp routines are available to do non-local gotos without saving
+?S: or restoring the signal mask flag.
+?S:.
+?C:USE_BSDJMP (BSDJMP):
+?C: This symbol, if defined, indicates that the BSD _setjmp and _longjmp
+?C: routines are available to do non-local gotos wihtout saving or restoring
+?C: the signal mask flag.
+?C:.
+?H:#$d_bsdjmp USE_BSDJMP /**/
+?H:.
+?F:!set
+?LINT:set d_bsdjmp
+: see if _setjmp and _longjmp exists
+?X: We can't check for these symbols with Inlibc because of the leading "_"
+echo " "
+case "$d_bsdjmp" in
+'')
+ $cat >set.c <<EOP
+#include <setjmp.h>
+jmp_buf env;
+int set = 1;
+int main()
+{
+ if (_setjmp(env))
+ exit(set);
+ set = 0;
+ _longjmp(env, 1);
+ exit(1);
+}
+EOP
+ if $cc -o set set.c $libs >/dev/null 2>&1; then
+ if ./set >/dev/null 2>&1; then
+ echo "Good! You have BSD _setjmp and _longjmp routines." >&4
+ val="$define"
+ else
+ $cat <<EOM
+Uh-Oh! You have BSD _setjmp and _longjmp, but they do not work properly!!
+EOM
+ val="$undef"
+ fi
+ else
+ if ./usg; then
+ echo "You do not have _setjmp and _longjmp, but that's fine." >&4
+ else
+ cat <<EOM
+It sounds strange for a BSD system to miss _setjmp and _longjmp, but that's ok.
+EOM
+ fi
+ val="$undef"
+ fi
+ ;;
+*) val="$d_bsdjmp"
+ case "$d_bsdjmp" in
+ $define) echo "Good! You have BSD _setjmp and _longjmp routines." >&4;;
+ $undef) echo "You do not have _setjmp and _longjmp, but that's fine." >&4;;
+ esac
+ ;;
+esac
+set d_bsdjmp
+eval $setvar
+$rm -f set.c set
+
diff --git a/mcon/U/d_byacc.U b/mcon/U/d_byacc.U
new file mode 100644
index 0000000..aa02d79
--- /dev/null
+++ b/mcon/U/d_byacc.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_byacc.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:31:14 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:d_byacc: byacc Setvar
+?MAKE: -pick add $@ %<
+?S:d_byacc:
+?S: This variable indicates whether byacc is available.
+?S: If the user has specified 'portability', then Makefile.SH
+?S: sees $byacc='byacc' whether or not the user actually has
+?S: byacc. This variable allows us to determine in a makefile
+?S: if we really have byacc.
+?S:.
+?LINT:set d_byacc
+: Check if we really have byacc
+case "$byacc" in
+''|'byacc') val="$undef" ;;
+*) val="$define" ;;
+esac
+set d_byacc
+eval $setvar
+
diff --git a/mcon/U/d_bzero.U b/mcon/U/d_bzero.U
new file mode 100644
index 0000000..6c7d87b
--- /dev/null
+++ b/mcon/U/d_bzero.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_bzero.U,v $
+?RCS: Revision 3.0.1.2 1993/10/16 13:48:15 ram
+?RCS: patch12: added magic support for bzero()
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:01:33 ram
+?RCS: patch10: now only defines HAS_BZERO, no macro remap on memset (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:46 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_bzero: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_bzero:
+?S: This variable conditionally defines the HAS_BZERO symbol if
+?S: the bzero() routine is available to set memory to 0.
+?S:.
+?C:HAS_BZERO:
+?C: This symbol is defined if the bzero() routine is available to
+?C: set a memory block to 0.
+?C:.
+?H:#$d_bzero HAS_BZERO /**/
+?H:.
+?M:bzero: HAS_BZERO
+?M:#ifndef HAS_BZERO
+?M:#ifndef bzero
+?M:#define bzero(s,l) memset((s),0,(l))
+?M:#endif
+?M:#endif
+?M:.
+?LINT:set d_bzero
+: see if bzero exists
+set bzero d_bzero
+eval $inlibc
+
diff --git a/mcon/U/d_casti32.U b/mcon/U/d_casti32.U
new file mode 100644
index 0000000..7d24f08
--- /dev/null
+++ b/mcon/U/d_casti32.U
@@ -0,0 +1,87 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_casti32.U,v $
+?RCS: Revision 3.0.1.3 1995/05/12 12:10:45 ram
+?RCS: patch54: made sure cc and ccflags are conditional dependencies
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:09:37 ram
+?RCS: patch36: declare signal handler correctly (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:06 ram
+?RCS: patch32: created by ADO
+?RCS:
+?X:
+?X: Can the compiler cast large floats to 32-bit integers?
+?X:
+?MAKE:d_casti32: cat +cc +ccflags rm intsize Setvar test signal_t
+?MAKE: -pick add $@ %<
+?S:d_casti32:
+?S: This variable conditionally defines CASTI32, which indicates
+?S: whether the C compiler can cast large floats to 32-bit ints.
+?S:.
+?C:CASTI32:
+?C: This symbol is defined if the C compiler can cast negative
+?C: or large floating point numbers to 32-bit ints.
+?C:.
+?T:xxx yyy
+?H:#$d_casti32 CASTI32 /**/
+?H:.
+?F:!try
+?LINT:set d_casti32
+: check for ability to cast large floats to 32-bit ints.
+echo " "
+echo 'Checking whether your C compiler can cast large floats to int32.' >&4
+if $test "$intsize" -eq 4; then
+ xxx=int
+else
+ xxx=long
+fi
+$cat >try.c <<EOCP
+#include <sys/types.h>
+#include <signal.h>
+$signal_t blech() { exit(3); }
+int main()
+{
+ $xxx i32;
+ double f;
+ int result = 0;
+ signal(SIGFPE, blech);
+
+ f = (double) 0x7fffffff;
+ f = 10 * f;
+ i32 = ($xxx) f;
+
+ if (i32 != ($xxx) f)
+ result |= 1;
+ exit(result);
+}
+EOCP
+if $cc $ccflags -o try try.c >/dev/null 2>&1; then
+ ./try
+ yyy=$?
+else
+ echo "(I can't seem to compile the test program--assuming it can't)"
+ yyy=1
+fi
+case "$yyy" in
+0) val="$define"
+ echo "Yup, it can."
+ ;;
+*) val="$undef"
+ echo "Nope, it can't."
+ ;;
+esac
+set d_casti32
+eval $setvar
+$rm -f try try.*
+
diff --git a/mcon/U/d_castneg.U b/mcon/U/d_castneg.U
new file mode 100644
index 0000000..ce879df
--- /dev/null
+++ b/mcon/U/d_castneg.U
@@ -0,0 +1,143 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_castneg.U,v $
+?RCS: Revision 3.0.1.2 1995/05/12 12:11:21 ram
+?RCS: patch54: made sure cc and ccflags are conditional dependencies
+?RCS: patch54: added improved test case for Interactive Unix
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:10:50 ram
+?RCS: patch36: don't forget to tell user about compilation failures (ADO)
+?RCS: patch36: declare signal handler correctly using 'signal_t' (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:47 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: Can the compiler cast negative / odd floats to unsigned values.
+?X:
+?MAKE:d_castneg castflags: cat +cc +ccflags rm Setvar signal_t
+?MAKE: -pick add $@ %<
+?S:d_castneg:
+?S: This variable conditionally defines CASTNEG, which indicates
+?S: wether the C compiler can cast negative float to unsigned.
+?S:.
+?S:castflags:
+?S: This variable contains a flag that precise difficulties the
+?S: compiler has casting odd floating values to unsigned long:
+?S: 0 = ok
+?S: 1 = couldn't cast < 0
+?S: 2 = couldn't cast >= 0x80000000
+?S: 4 = couldn't cast in argument expression list
+?S:.
+?C:CASTNEGFLOAT:
+?C: This symbol is defined if the C compiler can cast negative
+?C: numbers to unsigned longs, ints and shorts.
+?C:.
+?C:CASTFLAGS:
+?C: This symbol contains flags that say what difficulties the compiler
+?C: has casting odd floating values to unsigned long:
+?C: 0 = ok
+?C: 1 = couldn't cast < 0
+?C: 2 = couldn't cast >= 0x80000000
+?C: 4 = couldn't cast in argument expression list
+?C:.
+?H:#$d_castneg CASTNEGFLOAT /**/
+?H:#define CASTFLAGS $castflags /**/
+?H:.
+?F:!try
+?LINT:set d_castneg
+: check for ability to cast negative floats to unsigned
+echo " "
+echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
+$cat >try.c <<EOCP
+#include <sys/types.h>
+#include <signal.h>
+$signal_t blech() { exit(7); }
+$signal_t blech_in_list() { exit(4); }
+unsigned long dummy_long(p) unsigned long p; { return p; }
+unsigned int dummy_int(p) unsigned int p; { return p; }
+unsigned short dummy_short(p) unsigned short p; { return p; }
+int main()
+{
+ double f = -123.;
+ unsigned long along;
+ unsigned int aint;
+ unsigned short ashort;
+ int result = 0;
+
+ signal(SIGFPE, blech);
+ along = (unsigned long)f;
+ aint = (unsigned int)f;
+ ashort = (unsigned short)f;
+ if (along != (unsigned long)-123)
+ result |= 1;
+ if (aint != (unsigned int)-123)
+ result |= 1;
+ if (ashort != (unsigned short)-123)
+ result |= 1;
+ f = (double)0x40000000;
+ f = f + f;
+ along = 0;
+ along = (unsigned long)f;
+ if (along != 0x80000000)
+ result |= 2;
+ f -= 1.;
+ along = 0;
+ along = (unsigned long)f;
+ if (along != 0x7fffffff)
+ result |= 1;
+ f += 2.;
+ along = 0;
+ along = (unsigned long)f;
+ if (along != 0x80000001)
+ result |= 2;
+ if (result)
+ exit(result);
+?X:
+?X: The following is a test for Interactive Unix Version 4.1, which
+?X: has an 'improved' compiler which can correctly cast negative
+?X: floats in expression lists, but apparently not in argument lists.
+?X: Contributed by Winfried Koenig <win@incom.rhein-main.de>
+?X:
+ signal(SIGFPE, blech_in_list);
+ f = 123.;
+ along = dummy_long((unsigned long)f);
+ aint = dummy_int((unsigned int)f);
+ ashort = dummy_short((unsigned short)f);
+ if (along != (unsigned long)123)
+ result |= 4;
+ if (aint != (unsigned int)123)
+ result |= 4;
+ if (ashort != (unsigned short)123)
+ result |= 4;
+ exit(result);
+
+}
+EOCP
+if $cc $ccflags -o try try.c >/dev/null 2>&1; then
+ ./try
+ castflags=$?
+else
+ echo "(I can't seem to compile the test program--assuming it can't)"
+ castflags=7
+fi
+case "$castflags" in
+0) val="$define"
+ echo "Yup, it can."
+ ;;
+*) val="$undef"
+ echo "Nope, it can't."
+ ;;
+esac
+set d_castneg
+eval $setvar
+$rm -f try.*
+
diff --git a/mcon/U/d_cbrt.U b/mcon/U/d_cbrt.U
new file mode 100644
index 0000000..11f8baa
--- /dev/null
+++ b/mcon/U/d_cbrt.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_cbrt.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:48 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_cbrt: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_cbrt:
+?S: This variable conditionally defines the CBRT symbol, which
+?S: indicates to the C program that the cbrt() (cube root) function
+?S: is available.
+?S:.
+?C:HAS_CBRT (CBRT):
+?C: This symbol, if defined, indicates that the cbrt() (cube root)
+?C: function is available.
+?C:.
+?H:#$d_cbrt HAS_CBRT /**/
+?H:.
+?LINT:set d_cbrt
+: see if cbrt exists
+set cbrt d_cbrt
+eval $inlibc
+
diff --git a/mcon/U/d_charsprf.U b/mcon/U/d_charsprf.U
new file mode 100644
index 0000000..c7d5522
--- /dev/null
+++ b/mcon/U/d_charsprf.U
@@ -0,0 +1,52 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_charsprf.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:49 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_charsprf: cat rm +cc Setvar
+?MAKE: -pick add $@ %<
+?S:d_charsprf:
+?S: This variable conditionally defines CHARSPRINTF if this system
+?S: declares "char *sprintf()" in stdio.h. The trend seems to be to
+?S: declare it as "int sprintf()".
+?S:.
+?C:CHARSPRINTF:
+?C: This symbol is defined if this system declares "char *sprintf()" in
+?C: stdio.h. The trend seems to be to declare it as "int sprintf()". It
+?C: is up to the package author to declare sprintf correctly based on the
+?C: symbol.
+?C:.
+?H:#$d_charsprf CHARSPRINTF /**/
+?H:.
+?F:!ucbsprf.c !ucbsprf
+?LINT:set d_charsprf
+: see if sprintf is declared as int or pointer to char
+echo " "
+$cat >ucbsprf.c <<'EOF'
+int main()
+{
+ int sprintf();
+ char buf[10];
+ exit((unsigned long)sprintf(buf,"%s","foo") > 10L);
+}
+EOF
+if $cc -o ucbsprf ucbsprf.c >/dev/null 2>&1 && ./ucbsprf; then
+ echo "Your sprintf() returns (int)." >&4
+ val="$undef"
+else
+ echo "Your sprintf() returns (char*)." >&4
+ val="$define"
+fi
+set d_charsprf
+eval $setvar
+$rm -f ucbsprf*
+
diff --git a/mcon/U/d_chown.U b/mcon/U/d_chown.U
new file mode 100644
index 0000000..c0fff39
--- /dev/null
+++ b/mcon/U/d_chown.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_chown.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:14 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_chown: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_chown:
+?S: This variable conditionally defines the HAS_CHOWN symbol, which
+?S: indicates to the C program that the chown() routine is available.
+?S:.
+?C:HAS_CHOWN :
+?C: This symbol, if defined, indicates that the chown routine is
+?C: available.
+?C:.
+?H:#$d_chown HAS_CHOWN /**/
+?H:.
+?LINT:set d_chown
+: see if chown exists
+set chown d_chown
+eval $inlibc
+
diff --git a/mcon/U/d_chroot.U b/mcon/U/d_chroot.U
new file mode 100644
index 0000000..c31ef3c
--- /dev/null
+++ b/mcon/U/d_chroot.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_chroot.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:17 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_chroot: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_chroot:
+?S: This variable conditionally defines the HAS_CHROOT symbol, which
+?S: indicates to the C program that the chroot() routine is available.
+?S:.
+?C:HAS_CHROOT :
+?C: This symbol, if defined, indicates that the chroot routine is
+?C: available.
+?C:.
+?H:#$d_chroot HAS_CHROOT /**/
+?H:.
+?LINT:set d_chroot
+: see if chroot exists
+set chroot d_chroot
+eval $inlibc
+
diff --git a/mcon/U/d_chsize.U b/mcon/U/d_chsize.U
new file mode 100644
index 0000000..236effb
--- /dev/null
+++ b/mcon/U/d_chsize.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_chsize.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_chsize: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_chsize:
+?S: This variable conditionally defines the CHSIZE symbol, which
+?S: indicates to the C program that the chsize() routine is available
+?S: to truncate files. You might need a -lx to get this routine.
+?S:.
+?C:HAS_CHSIZE (CHSIZE):
+?C: This symbol, if defined, indicates that the chsize routine is available
+?C: to truncate files. You might need a -lx to get this routine.
+?C:.
+?H:#$d_chsize HAS_CHSIZE /**/
+?H:.
+?LINT:set d_chsize
+: see if chsize exists
+set chsize d_chsize
+eval $inlibc
+
diff --git a/mcon/U/d_ckeypad.U b/mcon/U/d_ckeypad.U
new file mode 100644
index 0000000..0430877
--- /dev/null
+++ b/mcon/U/d_ckeypad.U
@@ -0,0 +1,54 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_ckeypad.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_ckeypad: cat cc termlib Setvar
+?MAKE: -pick add $@ %<
+?S:d_ckeypad:
+?S: This variable controls the definition of HAS_CURSES_KEYPAD,
+?S: which tells the application that the keypad() curses function
+?S: is available.
+?S:.
+?C:HAS_CURSES_KEYPAD:
+?C: This symbol indicates the availability of the keypad() function
+?C: of the curses library.
+?C:.
+?H:#$d_ckeypad HAS_CURSES_KEYPAD /**/
+?H:.
+?LINT:set d_ckeypad
+: check for the "keypad()" function in the curses library
+echo " "
+case "$termlib" in
+'')
+ echo "You don't have a curses library, so I won't waste time looking" >&4
+ echo "to see if has the keypad() function." >&4
+*)
+echo "Checking the curses library ($termlib) for the keypad() function..." >&4
+ $cat >c_keypad.c <<'EOCP'
+#include <curses.h>
+int main() {
+ keypad(stdscr, TRUE);
+ exit(0);
+}
+EOCP
+ if $cc c_keypad.c >c_keypad.out 2>&1 ; then
+ val=$define
+ echo "It appears to have the keypad() function."
+ else
+ val=$undef
+ echo "Your curses library doesn't appear to have the keypad() function."
+ fi
+esac
+set d_ckeypad
+eval $setvar
+
diff --git a/mcon/U/d_closedir.U b/mcon/U/d_closedir.U
new file mode 100644
index 0000000..071f242
--- /dev/null
+++ b/mcon/U/d_closedir.U
@@ -0,0 +1,107 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_closedir.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:31:26 ram
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:11:18 ram
+?RCS: patch36: added 'ldflags' to the test compile line (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:21 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_closedir d_void_closedir: Inlibc i_dirent i_sysdir i_sysndir \
+ cc ccflags ldflags libs Setvar rm
+?MAKE: -pick add $@ %<
+?S:d_closedir:
+?S: This variable conditionally defines HAS_CLOSEDIR if closedir() is
+?S: available.
+?S:.
+?C:HAS_CLOSEDIR:
+?C: This symbol, if defined, indicates that the closedir() routine is
+?C: available.
+?C:.
+?H:#$d_closedir HAS_CLOSEDIR /**/
+?H:.
+?S:d_void_closedir:
+?S: This variable conditionally defines VOID_CLOSEDIR if closedir()
+?S: does not return a value.
+?S:.
+?C:VOID_CLOSEDIR:
+?C: This symbol, if defined, indicates that the closedir() routine
+?C: does not return a value.
+?C:.
+?H:#$d_void_closedir VOID_CLOSEDIR /**/
+?H:.
+?F:!closedir
+?LINT:set d_closedir d_void_closedir
+: see if closedir exists
+set closedir d_closedir
+eval $inlibc
+
+@if VOID_CLOSEDIR || d_void_closedir
+?X: The following contortions are designed so we can call closedir()
+?X: and check whether it returns a value. The contortions are designed
+?X: to portably pick up the correct directory header, for those
+?X: systems that support various mutually incompatible directory functions.
+?X: This is from perl5's perl.h
+case "$d_closedir" in
+"$define")
+ echo " "
+ echo "Checking whether closedir() returns a status..." >&4
+ cat > closedir.c <<EOM
+#$i_dirent I_DIRENT /**/
+#$i_sysdir I_SYS_DIR /**/
+#$i_sysndir I_SYS_NDIR /**/
+
+#if defined(I_DIRENT)
+#include <dirent.h>
+#if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
+#include <sys/dir.h>
+#endif
+#else
+#ifdef I_SYS_NDIR
+#include <sys/ndir.h>
+#else
+#ifdef I_SYS_DIR
+#ifdef hp9000s500
+#include <ndir.h> /* may be wrong in the future */
+#else
+#include <sys/dir.h>
+#endif
+#endif
+#endif
+#endif
+int main() { return closedir(opendir(".")); }
+EOM
+ if $cc $ccflags $ldflags -o closedir closedir.c $libs > /dev/null 2>&1; then
+ if ./closedir > /dev/null 2>&1 ; then
+ echo "Yes, it does."
+ val="$undef"
+ else
+ echo "No, it doesn't."
+ val="$define"
+ fi
+ else
+ echo "(I can't seem to compile the test program--assuming it doesn't)"
+ val="$define"
+ fi
+ ;;
+*)
+ val="$undef";
+ ;;
+esac
+set d_void_closedir
+eval $setvar
+$rm -f closedir*
+@end
diff --git a/mcon/U/d_const.U b/mcon/U/d_const.U
new file mode 100644
index 0000000..4801d09
--- /dev/null
+++ b/mcon/U/d_const.U
@@ -0,0 +1,66 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_const.U,v $
+?RCS: Revision 3.0.1.1 1993/11/10 17:33:41 ram
+?RCS: patch14: stronger const check with added typedef for MIPS cc
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:51 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_const: cat rm cc ccflags Setvar
+?MAKE: -pick add $@ %<
+?S:d_const:
+?S: This variable conditionally defines the HASCONST symbol, which
+?S: indicates to the C program that this C compiler knows about the
+?S: const type.
+?S:.
+?C:HASCONST ~ %<:
+?C: This symbol, if defined, indicates that this C compiler knows about
+?C: the const type. There is no need to actually test for that symbol
+?C: within your programs. The mere use of the "const" keyword will
+?C: trigger the necessary tests.
+?C:.
+?H:?%<:#$d_const HASCONST /**/
+?H:?%<:#ifndef HASCONST
+?H:?%<:#define const
+?H:?%<:#endif
+?H:.
+?W:%<:const
+?F:const.c const.o
+?LINT:set d_const
+?LINT:known const
+: check for const keyword
+echo " "
+echo 'Checking to see if your C compiler knows about "const"...' >&4
+$cat >const.c <<'EOCP'
+?X: mmcg@bruce.cs.monash.edu.au reports that:
+?X: The MIPS cc compiler (V2.10) on a dec 5000 running Ultrix 4.2A
+?X: pretends to understand `const' but doesn't - it'll also fail to
+?X: handle typedefs properly if they're declared const. To guard
+?X: against this, boost up the test by using an explicit typedef...
+typedef struct spug { int drokk; } spug;
+int main()
+{
+ const char *foo;
+ const spug y;
+}
+EOCP
+if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
+ val="$define"
+ echo "Yup, it does."
+else
+ val="$undef"
+ echo "Nope, it doesn't."
+fi
+set d_const
+eval $setvar
+$rm -f const.c const.o
+
diff --git a/mcon/U/d_crypt.U b/mcon/U/d_crypt.U
new file mode 100644
index 0000000..84906e6
--- /dev/null
+++ b/mcon/U/d_crypt.U
@@ -0,0 +1,76 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_crypt.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:31:47 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:52 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_crypt cryptlib: Loc test xlibpth libpth Csym Setvar _a Inlibc
+?MAKE: -pick add $@ %<
+?S:d_crypt:
+?S: This variable conditionally defines the CRYPT symbol, which
+?S: indicates to the C program that the crypt() routine is available
+?S: to encrypt passwords and the like.
+?S:.
+?S:cryptlib:
+?S: This variable holds -lcrypt or the path to a libcrypt.a archive if
+?S: the crypt() function is not defined in the standard C library. It is
+?S: up to the Makefile to use this.
+?S:.
+?C:HAS_CRYPT (CRYPT):
+?C: This symbol, if defined, indicates that the crypt routine is available
+?C: to encrypt passwords and the like.
+?C:.
+?H:#$d_crypt HAS_CRYPT /**/
+?H:.
+?LINT:set d_crypt
+?T:val
+: see if crypt exists
+echo " "
+set crypt d_crypt
+eval $inlibc
+case "$d_crypt" in
+$define) cryptlib='' ;;
+*) if set crypt val -f d_crypt; eval $csym; $val; then
+ echo 'crypt() found.' >&4
+ val="$define"
+ cryptlib=''
+ else
+ cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
+ if $test -z "$cryptlib"; then
+ cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
+ else
+ cryptlib=-lcrypt
+ fi
+ if $test -z "$cryptlib"; then
+ cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
+ else
+ cryptlib=-lcrypt
+ fi
+ if $test -z "$cryptlib"; then
+ cryptlib=`./loc libcrypt$_a "" $libpth`
+ else
+ cryptlib=-lcrypt
+ fi
+ if $test -z "$cryptlib"; then
+ echo 'crypt() NOT found.' >&4
+ val="$undef"
+ else
+ val="$define"
+ fi
+ fi
+ set d_crypt
+ eval $setvar
+ ;;
+esac
+
diff --git a/mcon/U/d_csh.U b/mcon/U/d_csh.U
new file mode 100644
index 0000000..c0a792e
--- /dev/null
+++ b/mcon/U/d_csh.U
@@ -0,0 +1,62 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_csh.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:32:18 ram
+?RCS: patch61: added full_csh to preserve the full path even when portable
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:53 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_csh full_csh: csh Setvar
+?MAKE: -pick add $@ %<
+?S:d_csh:
+?S: This variable conditionally defines the CSH symbol, which
+?S: indicates to the C program that the C-shell exists.
+?S:.
+?S:full_csh:
+?S: This variable contains the full pathname to 'csh', whether or
+?S: not the user has specified 'portability'. This is only used
+?S: in the compiled C program, and we assume that all systems which
+?S: can share this executable will have the same full pathname to
+?S: 'csh.'
+?S:.
+?C:HAS_CSH:
+?C: This symbol, if defined, indicates that the C-shell exists.
+?C:.
+?C:CSH:
+?C: This symbol, if defined, contains the full pathname of csh.
+?C:.
+?X: Previously, I just did $d_csh CSH "$full_csh", but that caused
+?X: problems on VMS where the config.sh extraction program changes
+?X: $undef to a real cpp undef, and they then had #undef CSH ""
+?X: which the compiler didn't like. It's easy to work around this,
+?X: so I did. --AD 3/1998.
+?X: And we don't want to define CSH if !HAS_CSH, but we don't want
+?X: those lines in config.h if they don't need CSH, so protect with ?CSH
+?X: and not ?%<. --RAM, 15/02/2004
+?H:?%<:#$d_csh HAS_CSH /**/
+?H:?CSH:#ifdef HAS_CSH
+?H:?CSH:#define CSH "$full_csh" /**/
+?H:?CSH:#endif
+?H:.
+?LINT:set d_csh
+: get csh whereabouts
+case "$csh" in
+'csh') val="$undef" ;;
+*) val="$define" ;;
+esac
+set d_csh
+eval $setvar
+: Respect a hint or command line value for full_csh.
+case "$full_csh" in
+'') full_csh=$csh ;;
+esac
+
diff --git a/mcon/U/d_ctermid.U b/mcon/U/d_ctermid.U
new file mode 100644
index 0000000..5f1f7ee
--- /dev/null
+++ b/mcon/U/d_ctermid.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_ctermid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:54 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_ctermid: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_ctermid:
+?S: This variable conditionally defines CTERMID if ctermid() is
+?S: available to generate filename for terminal.
+?S:.
+?C:HAS_CTERMID (CTERMID):
+?C: This symbol, if defined, indicates that the ctermid routine is
+?C: available to generate filename for terminal.
+?C:.
+?H:#$d_ctermid HAS_CTERMID /**/
+?H:.
+?LINT:set d_ctermid
+: see if ctermid exists
+set ctermid d_ctermid
+eval $inlibc
+
diff --git a/mcon/U/d_cuserid.U b/mcon/U/d_cuserid.U
new file mode 100644
index 0000000..a6d46c5
--- /dev/null
+++ b/mcon/U/d_cuserid.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_cuserid.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:25 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_cuserid: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_cuserid:
+?S: This variable conditionally defines the HAS_CUSERID symbol, which
+?S: indicates to the C program that the cuserid() routine is available
+?S: to get character login names.
+?S:.
+?C:HAS_CUSERID :
+?C: This symbol, if defined, indicates that the cuserid routine is
+?C: available to get character login names.
+?C:.
+?H:#$d_cuserid HAS_CUSERID /**/
+?H:.
+?LINT:set d_cuserid
+: see if cuserid exists
+set cuserid d_cuserid
+eval $inlibc
+
diff --git a/mcon/U/d_dbl_dig.U b/mcon/U/d_dbl_dig.U
new file mode 100644
index 0000000..aa53e73
--- /dev/null
+++ b/mcon/U/d_dbl_dig.U
@@ -0,0 +1,61 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_dbl_dig.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:28 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_dbl_dig: Myread contains cat rm Setvar i_limits i_float \
+ cppstdin cppflags cppminus
+?MAKE: -pick add $@ %<
+?S:d_dbl_dig:
+?S: This variable conditionally defines d_dbl_dig if this system's
+?S: header files provide DBL_DIG, which is the number of significant
+?S: digits in a double precision number.
+?S:.
+?C:HAS_DBL_DIG:
+?C: This symbol, if defined, indicates that this system's <float.h>
+?C: or <limits.h> defines the symbol DBL_DIG, which is the number
+?C: of significant digits in a double precision number. If this
+?C: symbol is not defined, a guess of 15 is usually pretty good.
+?C:.
+?H:#$d_dbl_dig HAS_DBL_DIG /* */
+?H:.
+?F:!dbl_dig.c
+?LINT:set d_dbl_dig
+: See if number of significant digits in a double precision number is known
+echo " "
+$cat >dbl_dig.c <<EOM
+#$i_limits I_LIMITS
+#$i_float I_FLOAT
+#ifdef I_LIMITS
+#include <limits.h>
+#endif
+#ifdef I_FLOAT
+#include <float.h>
+#endif
+#ifdef DBL_DIG
+printf("Contains DBL_DIG");
+#endif
+EOM
+$cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
+if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
+ echo "DBL_DIG found." >&4
+ val="$define"
+else
+ echo "DBL_DIG NOT found." >&4
+ val="$undef"
+fi
+$rm -f dbl_dig.?
+set d_dbl_dig
+eval $setvar
+
diff --git a/mcon/U/d_debugging.U b/mcon/U/d_debugging.U
new file mode 100644
index 0000000..fabe096
--- /dev/null
+++ b/mcon/U/d_debugging.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_debugging: Myread Setvar spackage cat
+?MAKE: -pick add $@ %<
+?S:d_debugging:
+?S: This variable conditionally defines the DEBUGGING symbol.
+?S:.
+?C:DEBUGGING:
+?C: This symbol, when defined, activates extra debugging.
+?C:.
+?H:#$d_debugging DEBUGGING
+?H:.
+?LINT:set d_debugging
+: see whether debugging should be turned on
+$cat <<EOM
+
+$spackage comes with a debugging option. Enabling that option will
+compile extra debugging code that may slow-down the execution and/or
+bloat the size of the executable by a significant amount.
+
+EOM
+case "$d_debugging" in
+"$define") dflt=y;;
+*) dflt=n;;
+esac
+rp='Enable extra debugging code'
+. ./myread
+val="$undef"
+case "$ans" in
+y|Y) val="$define";;
+esac
+set d_debugging
+eval $setvar
+
diff --git a/mcon/U/d_difftime.U b/mcon/U/d_difftime.U
new file mode 100644
index 0000000..364ccbc
--- /dev/null
+++ b/mcon/U/d_difftime.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_difftime.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:31 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_difftime: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_difftime:
+?S: This variable conditionally defines the HAS_DIFFTIME symbol, which
+?S: indicates to the C program that the difftime() routine is available.
+?S:.
+?C:HAS_DIFFTIME :
+?C: This symbol, if defined, indicates that the difftime routine is
+?C: available.
+?C:.
+?H:#$d_difftime HAS_DIFFTIME /**/
+?H:.
+?LINT:set d_difftime
+: see if difftime exists
+set difftime d_difftime
+eval $inlibc
+
diff --git a/mcon/U/d_dlerror.U b/mcon/U/d_dlerror.U
new file mode 100644
index 0000000..a3bb995
--- /dev/null
+++ b/mcon/U/d_dlerror.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_dlerror.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 13:52:49 ram
+?RCS: patch56: force compile-link test since symbol might lie in crt0.o (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:11:23 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_dlerror: Inlibc runnm
+?MAKE: -pick add $@ %<
+?S:d_dlerror:
+?S: This variable conditionally defines the HAS_DLERROR symbol, which
+?S: indicates to the C program that the dlerror() routine is available.
+?S:.
+?C:HAS_DLERROR :
+?C: This symbol, if defined, indicates that the dlerror routine is
+?C: available to return a string describing the last error that
+?C: occurred from a call to dlopen(), dlclose() or dlsym().
+?C:.
+?H:#$d_dlerror HAS_DLERROR /**/
+?H:.
+?T: xxx_runnm
+?LINT:set d_dlerror
+?X: We don't permanently change runnm, but we do temporarily.
+?LINT: change runnm
+: see if dlerror exists
+?X: On NetBSD and FreeBSD, dlerror might be available, but it is in
+?X: /usr/lib/crt0.o, not in any of the libraries. Therefore, do not
+?X: use the nm extraction, but use a real compile and link test instead.
+xxx_runnm="$runnm"
+runnm=false
+set dlerror d_dlerror
+eval $inlibc
+runnm="$xxx_runnm"
+
diff --git a/mcon/U/d_dlopen.U b/mcon/U/d_dlopen.U
new file mode 100644
index 0000000..ad62c53
--- /dev/null
+++ b/mcon/U/d_dlopen.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_dlopen.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 13:52:56 ram
+?RCS: patch56: force compile-link test since symbol might lie in crt0.o (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:34 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_dlopen: Inlibc runnm
+?MAKE: -pick add $@ %<
+?S:d_dlopen:
+?S: This variable conditionally defines the HAS_DLOPEN symbol, which
+?S: indicates to the C program that the dlopen() routine is available.
+?S:.
+?C:HAS_DLOPEN :
+?C: This symbol, if defined, indicates that the dlopen routine is
+?C: available.
+?C:.
+?H:#$d_dlopen HAS_DLOPEN /**/
+?H:.
+?T: xxx_runnm
+?LINT:set d_dlopen
+?X: We don't permanently change runnm, but we do temporarily.
+?LINT: change runnm
+: see if dlopen exists
+?X: On NetBSD and FreeBSD, dlopen is available, but it is in
+?X: /usr/lib/crt0.o, not in any of the libraries. Therefore, do not
+?X: use the nm extraction, but use a real compile and link test instead.
+xxx_runnm="$runnm"
+runnm=false
+set dlopen d_dlopen
+eval $inlibc
+runnm="$xxx_runnm"
+
diff --git a/mcon/U/d_dosuid.U b/mcon/U/d_dosuid.U
new file mode 100644
index 0000000..a584e1a
--- /dev/null
+++ b/mcon/U/d_dosuid.U
@@ -0,0 +1,169 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Tye McQueen <tye@metronet.com> added safe setuid script checks.
+?RCS:
+?RCS: $Log: d_dosuid.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:33:03 ram
+?RCS: patch61: moved unit to TOP via a ?Y: layout directive
+?RCS: patch61: tell them /dev/fd is not about floppy disks
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:12:08 ram
+?RCS: patch36: added checks for secure setuid scripts (Tye McQueen)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:55 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_dosuid d_suidsafe: cat contains ls rm test Myread Setvar \
+ Oldconfig Guess package hint
+?MAKE: -pick add $@ %<
+?S:d_suidsafe:
+?S: This variable conditionally defines SETUID_SCRIPTS_ARE_SECURE_NOW
+?S: if setuid scripts can be secure. This test looks in /dev/fd/.
+?S:.
+?S:d_dosuid:
+?S: This variable conditionally defines the symbol DOSUID, which
+?S: tells the C program that it should insert setuid emulation code
+?S: on hosts which have setuid #! scripts disabled.
+?S:.
+?C:SETUID_SCRIPTS_ARE_SECURE_NOW:
+?C: This symbol, if defined, indicates that the bug that prevents
+?C: setuid scripts from being secure is not present in this kernel.
+?C:.
+?C:DOSUID:
+?C: This symbol, if defined, indicates that the C program should
+?C: check the script that it is executing for setuid/setgid bits, and
+?C: attempt to emulate setuid/setgid on systems that have disabled
+?C: setuid #! scripts because the kernel can't do it securely.
+?C: It is up to the package designer to make sure that this emulation
+?C: is done securely. Among other things, it should do an fstat on
+?C: the script it just opened to make sure it really is a setuid/setgid
+?C: script, it should make sure the arguments passed correspond exactly
+?C: to the argument on the #! line, and it should not trust any
+?C: subprocesses to which it must pass the filename rather than the
+?C: file descriptor of the script to be executed.
+?C:.
+?H:#$d_suidsafe SETUID_SCRIPTS_ARE_SECURE_NOW /**/
+?H:#$d_dosuid DOSUID /**/
+?H:.
+?Y:TOP
+?F:!reflect
+?LINT: set d_suidsafe
+?LINT: set d_dosuid
+: see if setuid scripts can be secure
+$cat <<EOM
+
+Some kernels have a bug that prevents setuid #! scripts from being
+secure. Some sites have disabled setuid #! scripts because of this.
+
+First let's decide if your kernel supports secure setuid #! scripts.
+(If setuid #! scripts would be secure but have been disabled anyway,
+don't say that they are secure if asked.)
+
+EOM
+
+val="$undef"
+if $test -d /dev/fd; then
+ echo "#!$ls" >reflect
+ chmod +x,u+s reflect
+ ./reflect >flect 2>&1
+ if $contains "/dev/fd" flect >/dev/null; then
+ echo "Congratulations, your kernel has secure setuid scripts!" >&4
+ val="$define"
+ else
+ $cat <<EOM
+If you are not sure if they are secure, I can check but I'll need a
+username and password different from the one you are using right now.
+If you don't have such a username or don't want me to test, simply
+enter 'none'.
+
+EOM
+ rp='Other username to test security of setuid scripts with?'
+ dflt='none'
+ . ./myread
+ case "$ans" in
+ n|none)
+ case "$d_suidsafe" in
+ '') echo "I'll assume setuid scripts are *not* secure." >&4
+ dflt=n;;
+ "$undef")
+ echo "Well, the $hint value is *not* secure." >&4
+ dflt=n;;
+ *) echo "Well, the $hint value *is* secure." >&4
+ dflt=y;;
+ esac
+ ;;
+ *)
+ $rm -f reflect flect
+ echo "#!$ls" >reflect
+ chmod +x,u+s reflect
+ echo >flect
+ chmod a+w flect
+ echo '"su" will (probably) prompt you for '"$ans's password."
+ su $ans -c './reflect >flect'
+ if $contains "/dev/fd" flect >/dev/null; then
+ echo "Okay, it looks like setuid scripts are secure." >&4
+ dflt=y
+ else
+ echo "I don't think setuid scripts are secure." >&4
+ dflt=n
+ fi
+ ;;
+ esac
+ rp='Does your kernel have *secure* setuid scripts?'
+ . ./myread
+ case "$ans" in
+ [yY]*) val="$define";;
+ *) val="$undef";;
+ esac
+ fi
+else
+ echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
+ echo "(That's for file descriptors, not floppy disks.)"
+ val="$undef"
+fi
+set d_suidsafe
+eval $setvar
+
+$rm -f reflect flect
+
+: now see if they want to do setuid emulation
+echo " "
+val="$undef"
+case "$d_suidsafe" in
+"$define")
+ val="$undef"
+ echo "No need to emulate SUID scripts since they are secure here." >& 4
+ ;;
+*)
+ $cat <<EOM
+Some systems have disabled setuid scripts, especially systems where
+setuid scripts cannot be secure. On systems where setuid scripts have
+been disabled, the setuid/setgid bits on scripts are currently
+useless. It is possible for $package to detect those bits and emulate
+setuid/setgid in a secure fashion. This emulation will only work if
+setuid scripts have been disabled in your kernel.
+
+EOM
+ case "$d_dosuid" in
+ "$define") dflt=y ;;
+ *) dflt=n ;;
+ esac
+ rp="Do you want to do setuid/setgid emulation?"
+ . ./myread
+ case "$ans" in
+ [yY]*) val="$define";;
+ *) val="$undef";;
+ esac
+ ;;
+esac
+set d_dosuid
+eval $setvar
+
diff --git a/mcon/U/d_drem.U b/mcon/U/d_drem.U
new file mode 100644
index 0000000..4da2414
--- /dev/null
+++ b/mcon/U/d_drem.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_drem.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:12:14 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_drem: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_drem:
+?S: This variable conditionally defines the HAS_DREM symbol, which
+?S: indicates to the C program that the drem() routine is available.
+?S:.
+?C:HAS_DREM :
+?C: This symbol, if defined, indicates that the drem routine is
+?C: available. This routine is roughly the same as fmod, i.e. it
+?C: computes the remainder r=x-n*y, where n=rint(x/y), whereas fmod
+?C: uses n=trunc(x/y).
+?C:.
+?H:#$d_drem HAS_DREM /**/
+?H:.
+?LINT:set d_drem
+: see if drem exists
+set drem d_drem
+eval $inlibc
+
diff --git a/mcon/U/d_dup2.U b/mcon/U/d_dup2.U
new file mode 100644
index 0000000..070bfaa
--- /dev/null
+++ b/mcon/U/d_dup2.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_dup2.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_dup2: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_dup2:
+?S: This variable conditionally defines HAS_DUP2 if dup2() is
+?S: available to duplicate file descriptors.
+?S:.
+?C:HAS_DUP2 (DUP2):
+?C: This symbol, if defined, indicates that the dup2 routine is
+?C: available to duplicate file descriptors.
+?C:.
+?H:#$d_dup2 HAS_DUP2 /**/
+?H:.
+?LINT:set d_dup2
+: see if dup2 exists
+set dup2 d_dup2
+eval $inlibc
+
diff --git a/mcon/U/d_eofpipe.U b/mcon/U/d_eofpipe.U
new file mode 100644
index 0000000..86b30a5
--- /dev/null
+++ b/mcon/U/d_eofpipe.U
@@ -0,0 +1,93 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_eofpipe.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:12:40 ram
+?RCS: patch36: call ./bsd explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:57 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_eofpipe: cat +cc +ccflags +libs rm Oldconfig Guess echo n c
+?MAKE: -pick add $@ %<
+?S:d_eofpipe:
+?S: This variable conditionally defines the EOFPIPE symbol, which
+?S: indicates to the C program that select will correctly detect the EOF
+?S: condition when pipe is closed from the other end.
+?S:.
+?C:EOFPIPE:
+?C: This symbol, if defined, indicates that EOF condition will be detected
+?C: by the reader of the pipe when it is closed by the writing process.
+?C: That is, a select() call on that file descriptor will not block when
+?C: only an EOF remains (typical behaviour for BSD systems).
+?C:.
+?H:#$d_eofpipe EOFPIPE /**/
+?H:.
+?F:!mpipe
+: see if pipe correctly gives the EOF condition
+echo " "
+case "$d_eofpipe" in
+'')
+ echo "Let's see if your pipes return EOF to select() upon closing..." >&4
+ $cat >pipe.c <<'EOP'
+int main()
+{
+ int pd[2];
+ int mask;
+
+ pipe(pd);
+ if (0 == fork()) {
+ close(pd[0]);
+ close(pd[1]);
+ exit(0);
+ }
+
+ close(pd[1]);
+ mask = 1 << pd[0];
+ alarm(2);
+ select(32, &mask, (int *) 0, (int *) 0, (char *) 0);
+ if (0 == read(pd[0], &mask, 1))
+ exit(0);
+
+ exit(1);
+}
+EOP
+ if $cc $ccflags -o pipe pipe.c $libs >/dev/null 2>&1; then
+?X: Use a script to avoid the possible 'alarm call' message
+ echo "./pipe || exit 1" > mpipe
+ chmod +x mpipe
+ ./mpipe >/dev/null 2>&1
+ case $? in
+ 0) d_eofpipe="$define";;
+ *) d_eofpipe="$undef";;
+ esac
+ else
+ echo "(The test program did not compile correctly -- Guessing.)"
+ if ./bsd; then
+ d_eofpipe="$define"
+ else
+ d_eofpipe="$undef"
+ fi
+ fi
+ case "$d_eofpipe" in
+ "$define") echo "Yes, they do.";;
+ *) echo "No, they don't! (sigh)";;
+ esac
+ ;;
+*)
+ $echo $n "Your pipes $c"
+ case "$d_eofpipe" in
+ "$define") echo "allow select() to see EOF upon closing.";;
+ *) echo "won't let select() see EOF on closing.";;
+ esac
+ ;;
+esac
+$rm -f *pipe* core
+
diff --git a/mcon/U/d_euc2jis.U b/mcon/U/d_euc2jis.U
new file mode 100644
index 0000000..a80406d
--- /dev/null
+++ b/mcon/U/d_euc2jis.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_euc2jis.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:58 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_euc2jis: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_euc2jis:
+?S: This variable conditionally defines the HAS_EUC2JIS symbol, which
+?S: indicates to the C program that the euc2jis() routine is available
+?S: to convert EUC to JIS.
+?S:.
+?C:HAS_EUC2JIS:
+?C: This symbol, if defined, indicates that the euc2jis routine is
+?C: available to convert EUC to JIS.
+?C:.
+?H:#$d_euc2jis HAS_EUC2JIS /**/
+?H:.
+?LINT:set d_euc2jis
+: see if euc2jis exists
+set euc2jis d_euc2jis
+eval $inlibc
+
diff --git a/mcon/U/d_fchmod.U b/mcon/U/d_fchmod.U
new file mode 100644
index 0000000..1939d78
--- /dev/null
+++ b/mcon/U/d_fchmod.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_fchmod.U,v $
+?RCS: Revision 3.0 1993/08/18 12:05:59 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_fchmod: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_fchmod:
+?S: This variable conditionally defines the HAS_FCHMOD symbol, which
+?S: indicates to the C program that the fchmod() routine is available
+?S: to change mode of opened files.
+?S:.
+?C:HAS_FCHMOD (FCHMOD):
+?C: This symbol, if defined, indicates that the fchmod routine is available
+?C: to change mode of opened files. If unavailable, use chmod().
+?C:.
+?H:#$d_fchmod HAS_FCHMOD /**/
+?H:.
+?LINT:set d_fchmod
+: see if fchmod exists
+set fchmod d_fchmod
+eval $inlibc
+
diff --git a/mcon/U/d_fchown.U b/mcon/U/d_fchown.U
new file mode 100644
index 0000000..0efbbe2
--- /dev/null
+++ b/mcon/U/d_fchown.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_fchown.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_fchown: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_fchown:
+?S: This variable conditionally defines the HAS_FCHOWN symbol, which
+?S: indicates to the C program that the fchown() routine is available
+?S: to change ownership of opened files.
+?S:.
+?C:HAS_FCHOWN (FCHOWN):
+?C: This symbol, if defined, indicates that the fchown routine is available
+?C: to change ownership of opened files. If unavailable, use chown().
+?C:.
+?H:#$d_fchown HAS_FCHOWN /**/
+?H:.
+?LINT:set d_fchown
+: see if fchown exists
+set fchown d_fchown
+eval $inlibc
+
diff --git a/mcon/U/d_fcntl.U b/mcon/U/d_fcntl.U
new file mode 100644
index 0000000..24ea9b2
--- /dev/null
+++ b/mcon/U/d_fcntl.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_fcntl.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_fcntl: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_fcntl:
+?S: This variable conditionally defines the HAS_FCNTL symbol, and indicates
+?S: whether the fcntl() function exists
+?S:.
+?C:HAS_FCNTL:
+?C: This symbol, if defined, indicates to the C program that
+?C: the fcntl() function exists.
+?C:.
+?H:#$d_fcntl HAS_FCNTL /**/
+?H:.
+?LINT:set d_fcntl
+: see if this is an fcntl system
+set fcntl d_fcntl
+eval $inlibc
+
diff --git a/mcon/U/d_fd_set.U b/mcon/U/d_fd_set.U
new file mode 100644
index 0000000..8e13de2
--- /dev/null
+++ b/mcon/U/d_fd_set.U
@@ -0,0 +1,138 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_fd_set.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:33:16 ram
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.2 1994/06/20 06:57:23 ram
+?RCS: patch30: extended scope for fd_set checks (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:06:27 ram
+?RCS: patch16: comments for HAS_FD_* symbols were not consistent
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:02 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_fd_set d_fd_macros d_fds_bits: cat +cc +ccflags rm Oldconfig \
+ d_socket i_systime i_sysselct
+?MAKE: -pick add $@ %<
+?S:d_fd_set:
+?S: This variable contains the eventual value of the HAS_FD_SET symbol,
+?S: which indicates if your C compiler knows about the fd_set typedef.
+?S:.
+?S:d_fd_macros:
+?S: This variable contains the eventual value of the HAS_FD_MACROS symbol,
+?S: which indicates if your C compiler knows about the macros which
+?S: manipulate an fd_set.
+?S:.
+?S:d_fds_bits:
+?S: This variable contains the eventual value of the HAS_FDS_BITS symbol,
+?S: which indicates if your fd_set typedef contains the fds_bits member.
+?S: If you have an fd_set typedef, but the dweebs who installed it did
+?S: a half-fast job and neglected to provide the macros to manipulate
+?S: an fd_set, HAS_FDS_BITS will let us know how to fix the gaffe.
+?S:.
+?C:HAS_FD_SET:
+?C: This symbol, when defined, indicates presence of the fd_set typedef
+?C: in <sys/types.h>
+?C:.
+?C:HAS_FD_MACROS:
+?C: This symbol, when defined, indicates presence of the macros used to
+?C: manipulate an fd_set.
+?C:.
+?C:HAS_FDS_BITS:
+?C: This symbol, when defined, indicates presence of the fds_bits member in
+?C: fd_set. This knowledge is useful if fd_set is available but the macros
+?C: aren't.
+?C:.
+?H:#$d_fd_set HAS_FD_SET /**/
+?H:#$d_fd_macros HAS_FD_MACROS /**/
+?H:#$d_fds_bits HAS_FDS_BITS /**/
+?H:.
+?F:!fd_set
+: check for fd_set items
+$cat <<EOM
+
+Checking to see how well your C compiler handles fd_set and friends ...
+EOM
+?X: The FD_SET macros can be in strange places. On some SysV-based
+?X: systems, they are in <sys/bsdtypes.h>, which is included (perhaps)
+?X: by <sys/socket.h>. We won't force people to include
+?X: <sys/bsdtypes.h> because it might introduce other
+?X: incompatibilities.
+$cat >fd_set.c <<EOCP
+#$i_systime I_SYS_TIME
+#$i_sysselct I_SYS_SELECT
+#$d_socket HAS_SOCKET
+#include <sys/types.h>
+#ifdef HAS_SOCKET
+#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
+#endif
+#ifdef I_SYS_TIME
+#include <sys/time.h>
+#endif
+#ifdef I_SYS_SELECT
+#include <sys/select.h>
+#endif
+int main() {
+ fd_set fds;
+
+#ifdef TRYBITS
+ if(fds.fds_bits);
+#endif
+
+#if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
+ exit(0);
+#else
+ exit(1);
+#endif
+}
+EOCP
+if $cc $ccflags -DTRYBITS -o fd_set fd_set.c >fd_set.out 2>&1 ; then
+ d_fds_bits="$define"
+ d_fd_set="$define"
+ echo "Well, your system knows about the normal fd_set typedef..." >&4
+ if ./fd_set; then
+ echo "and you have the normal fd_set macros (just as I'd expect)." >&4
+ d_fd_macros="$define"
+ else
+ $cat >&4 <<'EOM'
+but not the normal fd_set macros! Gaaack! I'll have to cover for you.
+EOM
+ d_fd_macros="$undef"
+ fi
+else
+ $cat <<'EOM'
+Hmm, your compiler has some difficulty with fd_set. Checking further...
+EOM
+ if $cc $ccflags -o fd_set fd_set.c >fd_set.out 2>&1 ; then
+ d_fds_bits="$undef"
+ d_fd_set="$define"
+ echo "Well, your system has some sort of fd_set available..." >&4
+ if ./fd_set; then
+ echo "and you have the normal fd_set macros." >&4
+ d_fd_macros="$define"
+ else
+ $cat <<'EOM'
+but not the normal fd_set macros! Gross! More work for me...
+EOM
+ d_fd_macros="$undef"
+ fi
+ else
+ echo "Well, you got zip. That's OK, I can roll my own fd_set stuff." >&4
+ d_fd_set="$undef"
+ d_fds_bits="$undef"
+ d_fd_macros="$undef"
+ fi
+fi
+$rm -f fd_set*
+
+
diff --git a/mcon/U/d_ffs.U b/mcon/U/d_ffs.U
new file mode 100644
index 0000000..cda3896
--- /dev/null
+++ b/mcon/U/d_ffs.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_ffs.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:03 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_ffs: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_ffs:
+?S: This variable conditionally defines the HAS_FFS symbol, which
+?S: indicates to the C program that the ffs() routine is available
+?S: to find the first bit which is set in its integer argument.
+?S:.
+?C:HAS_FFS:
+?C: This symbol, if defined, indicates that the ffs routine is available
+?C: to find the first bit set in its argument. If it's not available,
+?C: roll your own.
+?C:.
+?H:#$d_ffs HAS_FFS /**/
+?H:.
+?LINT:set d_ffs
+: see if ffs exists
+set ffs d_ffs
+eval $inlibc
+
diff --git a/mcon/U/d_fgetpos.U b/mcon/U/d_fgetpos.U
new file mode 100644
index 0000000..8553f96
--- /dev/null
+++ b/mcon/U/d_fgetpos.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_fgetpos.U,v $
+?RCS: Revision 3.0.1.1 1994/06/20 06:57:33 ram
+?RCS: patch30: created
+?RCS:
+?MAKE:d_fgetpos: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_fgetpos:
+?S: This variable conditionally defines HAS_FGETPOS if fgetpos() is
+?S: available to get the file position indicator.
+?S:.
+?C:HAS_FGETPOS:
+?C: This symbol, if defined, indicates that the fgetpos routine is
+?C: available to get the file position indicator, similar to ftell().
+?C:.
+?H:#$d_fgetpos HAS_FGETPOS /**/
+?H:.
+?LINT:set d_fgetpos
+: see if fgetpos exists
+set fgetpos d_fgetpos
+eval $inlibc
+
diff --git a/mcon/U/d_flexfnam.U b/mcon/U/d_flexfnam.U
new file mode 100644
index 0000000..0f53a0b
--- /dev/null
+++ b/mcon/U/d_flexfnam.U
@@ -0,0 +1,77 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_flexfnam.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:04 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_flexfnam: cat rm test Setvar
+?MAKE: -pick add $@ %<
+?S:d_flexfnam:
+?S: This variable conditionally defines the FLEXFILENAMES symbol, which
+?S: indicates that the system supports filenames longer than 14 characters.
+?S:.
+?C:FLEXFILENAMES:
+?C: This symbol, if defined, indicates that the system supports filenames
+?C: longer than 14 characters.
+?C:.
+?H:#$d_flexfnam FLEXFILENAMES /**/
+?H:.
+?T:first second
+?LINT:set d_flexfnam
+: see if we can have long filenames
+echo " "
+?X:
+?X: We have to test in both /tmp and . because of NFS (remote server may allow
+?X: long filenames while the local filesystem cannot support them). If at least
+?X: one of those file systems cannot support long filenames, then we assume the
+?X: whole system can't.
+?X:
+rmlist="$rmlist /tmp/cf$$"
+$test -d /tmp/cf$$ || mkdir /tmp/cf$$
+first=123456789abcdef
+second=/tmp/cf$$/$first
+$rm -f $first $second
+if (echo hi >$first) 2>/dev/null; then
+ if $test -f 123456789abcde; then
+ echo 'You cannot have filenames longer than 14 characters. Sigh.' >&4
+ val="$undef"
+ else
+ if (echo hi >$second) 2>/dev/null; then
+ if $test -f /tmp/cf$$/123456789abcde; then
+ $cat <<'EOM'
+That's peculiar... You can have filenames longer than 14 characters, but only
+on some of the filesystems. Maybe you are using NFS. Anyway, to avoid problems
+I shall consider your system cannot support long filenames at all.
+EOM
+ val="$undef"
+ else
+ echo 'You can have filenames longer than 14 characters.' >&4
+ val="$define"
+ fi
+ else
+ $cat <<'EOM'
+How confusing! Some of your filesystems are sane enough to allow filenames
+longer than 14 characters but some others like /tmp can't even think about them.
+So, for now on, I shall assume your kernel does not allow them at all.
+EOM
+ val="$undef"
+ fi
+ fi
+else
+ $cat <<'EOM'
+You can't have filenames longer than 14 chars. You can't even think about them!
+EOM
+ val="$undef"
+fi
+set d_flexfnam
+eval $setvar
+$rm -rf /tmp/cf$$ 123456789abcde*
+
diff --git a/mcon/U/d_flock.U b/mcon/U/d_flock.U
new file mode 100644
index 0000000..c3252e3
--- /dev/null
+++ b/mcon/U/d_flock.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_flock.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:05 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_flock: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_flock:
+?S: This variable conditionally defines HAS_FLOCK if flock() is
+?S: available to do file locking.
+?S:.
+?C:HAS_FLOCK (FLOCK):
+?C: This symbol, if defined, indicates that the flock routine is
+?C: available to do file locking.
+?C:.
+?H:#$d_flock HAS_FLOCK /**/
+?H:.
+?LINT:set d_flock
+: see if flock exists
+set flock d_flock
+eval $inlibc
+
diff --git a/mcon/U/d_fmod.U b/mcon/U/d_fmod.U
new file mode 100644
index 0000000..bad72e7
--- /dev/null
+++ b/mcon/U/d_fmod.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_fmod.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:12:46 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_fmod: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_fmod:
+?S: This variable conditionally defines the HAS_FMOD symbol, which
+?S: indicates to the C program that the fmod() routine is available.
+?S: See also d_drem for the drem() routine which does roughly the same.
+?S:.
+?C:HAS_FMOD :
+?C: This symbol, if defined, indicates that the fmod routine is
+?C: available to compute the remainder r=x-n*y where n=trunc(x/y).
+?C:.
+?H:#$d_fmod HAS_FMOD /**/
+?H:.
+?LINT:set d_fmod
+: see if fmod exists
+set fmod d_fmod
+eval $inlibc
+
diff --git a/mcon/U/d_fork.U b/mcon/U/d_fork.U
new file mode 100644
index 0000000..796aee3
--- /dev/null
+++ b/mcon/U/d_fork.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_fork.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:38 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_fork: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_fork:
+?S: This variable conditionally defines the HAS_FORK symbol, which
+?S: indicates to the C program that the fork() routine is available.
+?S:.
+?C:HAS_FORK :
+?C: This symbol, if defined, indicates that the fork routine is
+?C: available.
+?C:.
+?H:#$d_fork HAS_FORK /**/
+?H:.
+?LINT:set d_fork
+: see if fork exists
+set fork d_fork
+eval $inlibc
+
diff --git a/mcon/U/d_fsetpos.U b/mcon/U/d_fsetpos.U
new file mode 100644
index 0000000..ce3d195
--- /dev/null
+++ b/mcon/U/d_fsetpos.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_fsetpos.U,v $
+?RCS: Revision 3.0.1.1 1994/06/20 06:57:38 ram
+?RCS: patch30: created
+?RCS:
+?MAKE:d_fsetpos: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_fsetpos:
+?S: This variable conditionally defines HAS_FSETPOS if fsetpos() is
+?S: available to set the file position indicator.
+?S:.
+?C:HAS_FSETPOS:
+?C: This symbol, if defined, indicates that the fsetpos routine is
+?C: available to set the file position indicator, similar to fseek().
+?C:.
+?H:#$d_fsetpos HAS_FSETPOS /**/
+?H:.
+?LINT:set d_fsetpos
+: see if fsetpos exists
+set fsetpos d_fsetpos
+eval $inlibc
+
diff --git a/mcon/U/d_ftime.U b/mcon/U/d_ftime.U
new file mode 100644
index 0000000..0e41cc7
--- /dev/null
+++ b/mcon/U/d_ftime.U
@@ -0,0 +1,78 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_ftime.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:06 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_ftime d_gettimeod: Inlibc Setvar
+?MAKE: -pick add $@ %<
+?S:d_ftime:
+?S: This variable conditionally defines the HAS_FTIME symbol, which indicates
+?S: that the ftime() routine exists. The ftime() routine is basically
+?S: a sub-second accuracy clock.
+?S:.
+?S:d_gettimeod:
+?S: This variable conditionally defines the HAS_GETTIMEOFDAY symbol, which
+?S: indicates that the gettimeofday() system call exists (to obtain a
+?S: sub-second accuracy clock). You should probably include <sys/resource.h>.
+?S:.
+?C:HAS_FTIME (FTIMER):
+?C: This symbol, if defined, indicates that the ftime() routine exists.
+?C: It is basically a sub-second accuracy clock, but is less accurate
+?C: than gettimeofday(2) anyway. The type "Timeval" should be used to
+?C: refer to "struct timeb".
+?C:.
+?C:HAS_GETTIMEOFDAY (GETTIMEOFDAY):
+?C: This symbol, if defined, indicates that the gettimeofday() system
+?C: call is available for a sub-second accuracy clock. Usually, the file
+?C: <sys/resource.h> needs to be included (see I_SYS_RESOURCE).
+?C: The type "Timeval" should be used to refer to "struct timeval".
+?C:.
+?H:#$d_ftime HAS_FTIME /**/
+?H:#$d_gettimeod HAS_GETTIMEOFDAY /**/
+?H:?%<:@if HAS_FTIME
+?H:?%<:#ifdef HAS_FTIME
+?H:?%<:#define Timeval struct timeb /* Structure used by ftime() */
+?H:?%<:#endif
+?H:?%<:@end
+?H:?%<:@if HAS_GETTIMEOFDAY
+?H:?%<:#ifdef HAS_GETTIMEOFDAY
+?H:?%<:#define Timeval struct timeval /* Structure used by gettimeofday() */
+?H:?%<:#endif
+?H:?%<:@end
+?H:.
+?X:FIXME
+?X:?I:?d_ftime:i_systimeb
+?X:?I:?d_gettimeod:i_sysresrc
+?LINT:set d_gettimeod d_ftime
+?LINT:known Timeval
+: see if gettimeofday or ftime exists
+?X:
+?X: Give priority to gettimeofday(2) because timing is more accurate
+?X:
+set gettimeofday d_gettimeod
+eval $inlibc
+case "$d_gettimeod" in
+"$undef")
+ set ftime d_ftime
+ eval $inlibc
+ ;;
+*)
+ val="$undef"; set d_ftime; eval $setvar
+ ;;
+esac
+case "$d_gettimeod$d_ftime" in
+"$undef$undef")
+ echo " "
+ echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
+ ;;
+esac
+
diff --git a/mcon/U/d_ftrncate.U b/mcon/U/d_ftrncate.U
new file mode 100644
index 0000000..29202b2
--- /dev/null
+++ b/mcon/U/d_ftrncate.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_ftrncate.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:07 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_ftrncate: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_ftrncate (d_ftruncate):
+?S: This variable conditionally defines the HAS_FTRUNCATE symbol, which
+?S: indicates to the C program that the ftruncate() subroutine exists.
+?S:.
+?C:HAS_FTRUNCATE:
+?C: This symbol, if defined, indicates that the ftruncate() subroutine
+?C: exists.
+?C:.
+?H:#$d_ftrncate HAS_FTRUNCATE /**/
+?H:.
+?LINT:set d_ftrncate
+: see if ftruncate exists
+set ftruncate d_ftrncate
+eval $inlibc
+
diff --git a/mcon/U/d_gconvert.U b/mcon/U/d_gconvert.U
new file mode 100644
index 0000000..367da20
--- /dev/null
+++ b/mcon/U/d_gconvert.U
@@ -0,0 +1,147 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_gconvert.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:33:38 ram
+?RCS: patch61: integrated new unit from perl5
+?RCS:
+?RCS: Revision 3.0.1.2 1995/07/25 13:55:59 ram
+?RCS: patch56: improved comments about the Gconvert macro (ADO)
+?RCS: patch56: force compile-link test since it may exist but be unusable (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:12:51 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_Gconvert: cat cc ccflags ldflags libs Inlibc rm _o
+?MAKE: -pick add $@ %<
+?S:d_Gconvert:
+?S: This variable holds what Gconvert is defined as to convert
+?S: floating point numbers into strings. It could be 'gconvert'
+?S: or a more complex macro emulating gconvert with gcvt() or sprintf.
+?S:.
+?C:Gconvert:
+?C: This preprocessor macro is defined to convert a floating point
+?C: number to a string without a trailing decimal point. This
+?C: emulates the behavior of sprintf("%g"), but is sometimes much more
+?C: efficient. If gconvert() is not available, but gcvt() drops the
+?C: trailing decimal point, then gcvt() is used. If all else fails,
+?C: a macro using sprintf("%g") is used. Arguments for the Gconvert
+?C: macro are: value, number of digits, whether trailing zeros should
+?C: be retained, and the output buffer.
+?C: Possible values are:
+?C: d_Gconvert='gconvert((x),(n),(t),(b))'
+?C: d_Gconvert='gcvt((x),(n),(b))'
+?C: d_Gconvert='sprintf((b),"%.*g",(n),(x))'
+?C: The last two assume trailing zeros should not be kept.
+?C:.
+?H:#define Gconvert(x,n,t,b) $d_Gconvert
+?H:.
+?T: xxx_list xxx_convert
+?F:!try
+?X:
+: Check how to convert floats to strings.
+echo " "
+echo "Checking for an efficient way to convert floats to strings."
+?X: We want to be sure to drop trailing decimal points (perl5
+?X: needs this).
+$cat >try.c <<'EOP'
+#ifdef TRY_gconvert
+#define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
+char *myname = "gconvert";
+#endif
+#ifdef TRY_gcvt
+#define Gconvert(x,n,t,b) gcvt((x),(n),(b))
+char *myname = "gcvt";
+#endif
+#ifdef TRY_sprintf
+#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
+char *myname = "sprintf";
+#endif
+
+#include <stdio.h>
+
+int
+checkit(expect, got)
+char *expect;
+char *got;
+{
+ if (strcmp(expect, got)) {
+ printf("%s oddity: Expected %s, got %s\n",
+ myname, expect, got);
+ exit(1);
+ }
+}
+
+int
+int main()
+{
+ char buf[64];
+ buf[63] = '\0';
+
+ /* This must be 1st test on (which?) platform */
+ /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
+ Gconvert(0.1, 8, 0, buf);
+ checkit("0.1", buf);
+
+ Gconvert(1.0, 8, 0, buf);
+ checkit("1", buf);
+
+ Gconvert(0.0, 8, 0, buf);
+ checkit("0", buf);
+
+ Gconvert(-1.0, 8, 0, buf);
+ checkit("-1", buf);
+
+ /* Some Linux gcvt's give 1.e+5 here. */
+ Gconvert(100000.0, 8, 0, buf);
+ checkit("100000", buf);
+
+ /* Some Linux gcvt's give -1.e+5 here. */
+ Gconvert(-100000.0, 8, 0, buf);
+ checkit("-100000", buf);
+
+ exit(0);
+}
+EOP
+?X: List of order in which to search for functions.
+?X: Usual order of efficiency is gconvert gcvt sprintf
+?X: Respect a previous or hinted value.
+case "$d_Gconvert" in
+gconvert*) xxx_list='gconvert gcvt sprintf' ;;
+gcvt*) xxx_list='gcvt gconvert sprintf' ;;
+sprintf*) xxx_list='sprintf gconvert gcvt' ;;
+*) xxx_list='gconvert gcvt sprintf' ;;
+esac
+
+for xxx_convert in $xxx_list; do
+ echo "Trying $xxx_convert"
+ $rm -f try try$_o
+ if $cc $ccflags -DTRY_$xxx_convert $ldflags -o try \
+ try.c $libs > /dev/null 2>&1 ; then
+ echo "$xxx_convert" found. >&4
+ if ./try; then
+ echo "I'll use $xxx_convert to convert floats into a string." >&4
+ break;
+ else
+ echo "...But $xxx_convert didn't work as I expected."
+ fi
+ else
+ echo "$xxx_convert NOT found." >&4
+ fi
+done
+
+case "$xxx_convert" in
+gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
+gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
+*) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
+esac
+
diff --git a/mcon/U/d_getgrps.U b/mcon/U/d_getgrps.U
new file mode 100644
index 0000000..0cd16ea
--- /dev/null
+++ b/mcon/U/d_getgrps.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getgrps.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getgrps: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_getgrps:
+?S: This variable conditionally defines the HAS_GETGROUPS symbol, which
+?S: indicates to the C program that the getgroups() routine is available
+?S: to get the list of process groups.
+?S:.
+?C:HAS_GETGROUPS (GETGROUPS):
+?C: This symbol, if defined, indicates that the getgroups() routine is
+?C: available to get the list of process groups. If unavailable, multiple
+?C: groups are probably not supported.
+?C:.
+?H:#$d_getgrps HAS_GETGROUPS /**/
+?H:.
+?LINT:set d_getgrps
+: see if getgroups exists
+set getgroups d_getgrps
+eval $inlibc
+
diff --git a/mcon/U/d_gethbynm.U b/mcon/U/d_gethbynm.U
new file mode 100644
index 0000000..a7040ed
--- /dev/null
+++ b/mcon/U/d_gethbynm.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_gethbynm.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_gethbynm: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_gethbynm (d_gethhstby):
+?S: This variable conditionally defines the HAS_GETHOSTBYNAME symbol, which
+?S: indicates to the C program that the gethostbyname() routine is available
+?S: to lookup host names in some data base or other.
+?S:.
+?C:HAS_GETHOSTBYNAME (GETHOSTBYNAME):
+?C: This symbol, if defined, indicates that the gethostbyname() routine is
+?C: available to lookup host names in some data base or other.
+?C:.
+?H:#$d_gethbynm HAS_GETHOSTBYNAME /**/
+?H:.
+?LINT:set d_gethbynm
+: see if gethostbyname exists
+set gethostbyname d_gethbynm
+eval $inlibc
+
diff --git a/mcon/U/d_gethent.U b/mcon/U/d_gethent.U
new file mode 100644
index 0000000..fa1427f
--- /dev/null
+++ b/mcon/U/d_gethent.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_gethent.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:09 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_gethent: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_gethent:
+?S: This variable conditionally defines HAS_GETHOSTENT if gethostent() is
+?S: available to dup file descriptors.
+?S:.
+?C:HAS_GETHOSTENT (GETHOSTENT):
+?C: This symbol, if defined, indicates that the gethostent routine is
+?C: available to lookup host names in some data base or other.
+?C:.
+?H:#$d_gethent HAS_GETHOSTENT /**/
+?H:.
+?LINT:set d_gethent
+: see if gethostent exists
+set gethostent d_gethent
+eval $inlibc
+
diff --git a/mcon/U/d_gethid.U b/mcon/U/d_gethid.U
new file mode 100644
index 0000000..d19c9f8
--- /dev/null
+++ b/mcon/U/d_gethid.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_gethid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:10 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_gethid: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_gethid:
+?S: This variable conditionally defines HAS_GETHOSTID if gethostid() is
+?S: available to get the host id.
+?S:.
+?C:HAS_GETHOSTID (GETHOSTID):
+?C: This symbol, if defined, indicates that the gethostid system call is
+?C: available to get the host id.
+?C:.
+?H:#$d_gethid HAS_GETHOSTID /**/
+?H:.
+?LINT:set d_gethid
+: see if gethid exists
+set gethostid d_gethid
+eval $inlibc
+
diff --git a/mcon/U/d_gethname.U b/mcon/U/d_gethname.U
new file mode 100644
index 0000000..8ce181f
--- /dev/null
+++ b/mcon/U/d_gethname.U
@@ -0,0 +1,287 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_gethname.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:13:00 ram
+?RCS: patch36: call ./xenix explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:11 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_gethname d_uname d_phostname aphostname: phostname cat \
+ myhostname package d_portable Loc echo n c +i_whoami +usrinc \
+ Myread Guess Oldconfig Csym
+?MAKE: -pick add $@ %<
+?S:d_gethname:
+?S: This variable conditionally defines the HAS_GETHOSTNAME symbol, which
+?S: indicates to the C program that the gethostname() routine may be
+?S: used to derive the host name.
+?S:.
+?S:d_uname:
+?S: This variable conditionally defines the HAS_UNAME symbol, which
+?S: indicates to the C program that the uname() routine may be
+?S: used to derive the host name.
+?S:.
+?S:d_phostname:
+?S: This variable conditionally defines the PHOSTNAME symbol, which
+?S: contains the shell command which, when fed to popen(), may be
+?S: used to derive the host name.
+?S:.
+?S:aphostname:
+?S: Thie variable contains the command which can be used to compute the
+?S: host name. The command is fully qualified by its absolute path, to make
+?S: it safe when used by a process with super-user privileges.
+?S:.
+?C:HAS_GETHOSTNAME (GETHOSTNAME):
+?C: This symbol, if defined, indicates that the C program may use the
+?C: gethostname() routine to derive the host name. See also HAS_UNAME
+?C: and PHOSTNAME.
+?C:.
+?C:HAS_UNAME (UNAME):
+?C: This symbol, if defined, indicates that the C program may use the
+?C: uname() routine to derive the host name. See also HAS_GETHOSTNAME
+?C: and PHOSTNAME.
+?C:.
+?C:PHOSTNAME:
+?C: This symbol, if defined, indicates that the C program may use the
+?C: contents of PHOSTNAME as a command to feed to the popen() routine
+?C: to derive the host name. See also HAS_GETHOSTNAME and HAS_UNAME.
+?C: Note that the command uses a fully qualified path, so that it is safe
+?C: even if used by a process with super-user privileges.
+?C:.
+?H:#$d_gethname HAS_GETHOSTNAME /**/
+?H:#$d_uname HAS_UNAME /**/
+?H:#$d_phostname PHOSTNAME "$aphostname" /* How to get the host name */
+?H:.
+?T:file val call
+?LINT:change i_whoami
+: see how we will look up host name
+echo " "
+if false; then
+ : dummy stub to allow use of elif
+@if HAS_GETHOSTNAME
+elif set gethostname val -f d_gethname; eval $csym; $val; then
+ echo 'gethostname() found.' >&4
+ d_gethname="$define"
+ call=gethostname
+@end
+@if HAS_UNAME
+elif set uname val -f d_uname; eval $csym; $val; then
+ if ./xenix; then
+ $cat <<'EOM'
+uname() was found, but you're running xenix, and older versions of xenix
+have a broken uname(). If you don't really know whether your xenix is old
+enough to have a broken system call, use the default answer.
+
+EOM
+ dflt=y
+ case "$d_uname" in
+ "$define") dflt=n;;
+ esac
+ rp='Is your uname() broken?'
+ . ./myread
+ case "$ans" in
+ n*) d_uname="$define"; call=uname;;
+ esac
+ else
+ echo 'uname() found.' >&4
+ d_uname="$define"
+ call=uname
+ fi
+@end
+fi
+case "$d_gethname" in
+'') d_gethname="$undef";;
+esac
+case "$d_uname" in
+'') d_uname="$undef";;
+esac
+@if PHOSTNAME || MYHOSTNAME
+case "$d_uname$d_gethname" in
+*define*)
+ dflt=n
+ cat <<EOM
+
+Every now and then someone has a $call() that lies about the hostname
+but can't be fixed for political or economic reasons. If you wish, I can
+@if MYHOSTNAME && PHOSTNAME
+pretend $call() isn't there and maybe compile in the hostname or
+compute it from the '$phostname' command at run-time.
+@elsif MYHOSTNAME
+pretend $call() isn't there and maybe compile in the hostname.
+@elsif PHOSTNAME
+pretend $call() isn't there and maybe compute hostname at run-time
+thanks to the '$phostname' command.
+@elsif WHOAMI
+get the hostname from whomai.h (provided you have one).
+@else
+simply ignore your host name and use someting like "noname" instead.
+@end
+
+EOM
+ rp="Shall I ignore $call() from now on?"
+ . ./myread
+ case "$ans" in
+ y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
+ esac;;
+esac
+@end
+@if PHOSTNAME || aphostname
+?X: Compute the full path name for the command
+case "$phostname" in
+'') aphostname='';;
+*) case "$aphostname" in
+ /*) ;;
+ *) set X $phostname
+ shift
+ file=$1
+ shift
+ file=`./loc $file $file $pth`
+ aphostname=`echo $file $*`
+ ;;
+ esac
+ ;;
+esac
+@end
+@if PHOSTNAME && MYHOSTNAME
+case "$d_uname$d_gethname" in
+*define*) ;;
+*)
+ case "$phostname" in
+ '') ;;
+ *)
+ $cat <<EOT
+
+There is no gethostname() or uname() on this system. You have two
+possibilities at this point:
+
+1) You can have your host name ($myhostname) compiled into $package, which
+ lets $package start up faster, but makes your binaries non-portable, or
+2) you can have $package use a
+
+ popen("$aphostname","r")
+
+ which will start slower but be more portable.
+
+@ if WHOAMI
+Option 1 will give you the option of using whoami.h if you have one.
+@ end
+If you want option 2 but with a different command, you can edit config.sh at
+the end of this shell script.
+
+EOT
+ case "$d_phostname" in
+ "$define") dflt=n;;
+ "$undef") dflt=y;;
+ '')
+ case "$d_portable" in
+ "$define") dflt=n ;;
+ *) dflt=y ;;
+ esac;;
+ esac
+ rp="Do you want your host name compiled in?"
+ . ./myread
+ case "$ans" in
+ n*) d_phostname="$define" ;;
+ *) aphostname=''; d_phostname="$undef";;
+ esac;;
+ esac
+ case "$aphostname" in
+ '')
+@ if WHOAMI
+ case "$i_whoami" in
+ "$define")
+ dflt=y
+ $cat <<EOM
+
+No hostname function--you can either use the whoami.h file, which has this line:
+
+ `grep sysname $usrinc/whoami.h`
+
+or you can have the name we came up with earlier ($myhostname) hardwired in.
+EOM
+ rp="Use whoami.h to get hostname?"
+ . ./myread
+ case "$ans" in
+ n*) i_whoami="$undef";;
+ esac
+ ;;
+ "$undef")
+ $cat <<EOM
+No hostname function and no whoami.h -- hardwiring "$myhostname".
+EOM
+ ;;
+ esac;;
+@ else
+ echo 'No hostname function -- hardwiring "'$myhostname'".' >&4;;
+@ end
+ esac;;
+esac
+@elsif PHOSTNAME
+case "$d_uname$d_gethname" in
+*define*) ;;
+*)
+ case "$phostname" in
+ '')
+@ if WHOAMI
+ case "$i_whoami" in
+ "$define")
+ $cat <<EOM
+
+No hostname function--we'll use the whoami.h file, which has this line:
+
+ `grep sysname $usrinc/whoami.h`
+
+EOM
+ ;;
+ *) echo "There will be no way for $package to get your hostname." >&4;;
+ esac;;
+@ else
+ echo "There will be no way for $package to get your hostname." >&4;;
+@ end
+ *)
+ echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
+ ;;
+ esac;;
+esac
+@elsif MYHOSTNAME
+case "$d_uname$d_gethname" in
+*define*) ;;
+*)
+@ if WHOAMI
+ case "$i_whoami" in
+ "$define")
+ dflt=y
+ $cat <<EOM
+
+No hostname function--you can either use the whoami.h file, which has this line:
+
+ `grep sysname $usrinc/whoami.h`
+
+or you can have the name we came up with earlier ($myhostname) hardwired in.
+EOM
+ rp="Use whoami.h to get hostname?"
+ . ./myread
+ case "$ans" in
+ n*) i_whoami="$undef";;
+ esac
+ ;;
+ "$undef")
+ echo 'No whoami.h--hardwiring "'$myhostname'".' >&4;;
+ esac;;
+@ else
+ echo 'Hardwiring "'$myhostname'".' >&4;;
+@ end
+esac
+@end
+case "$d_phostname" in
+'') d_phostname="$undef";;
+esac
+
diff --git a/mcon/U/d_getlogin.U b/mcon/U/d_getlogin.U
new file mode 100644
index 0000000..abb9dd5
--- /dev/null
+++ b/mcon/U/d_getlogin.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_getlogin.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:41 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_getlogin: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_getlogin:
+?S: This variable conditionally defines the HAS_GETLOGIN symbol, which
+?S: indicates to the C program that the getlogin() routine is available
+?S: to get the login name.
+?S:.
+?C:HAS_GETLOGIN :
+?C: This symbol, if defined, indicates that the getlogin routine is
+?C: available to get the login name.
+?C:.
+?H:#$d_getlogin HAS_GETLOGIN /**/
+?H:.
+?LINT:set d_getlogin
+: see if getlogin exists
+set getlogin d_getlogin
+eval $inlibc
+
diff --git a/mcon/U/d_getopt.U b/mcon/U/d_getopt.U
new file mode 100644
index 0000000..c5438b4
--- /dev/null
+++ b/mcon/U/d_getopt.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getopt.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:13 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getopt: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_getopt:
+?S: This variable conditionally defines the HAS_GETOPT symbol, which
+?S: indicates that the getopt() routine exists. The getopt() routine
+?S: parses command line options in a standard fashion.
+?S:.
+?C:HAS_GETOPT (GETOPT):
+?C: This symbol, if defined, indicates that the getopt() routine exists.
+?C:.
+?H:#$d_getopt HAS_GETOPT /**/
+?H:.
+?LINT:set d_getopt
+: see if getopt exists
+set getopt d_getopt
+eval $inlibc
+
diff --git a/mcon/U/d_getpagsz.U b/mcon/U/d_getpagsz.U
new file mode 100644
index 0000000..6083653
--- /dev/null
+++ b/mcon/U/d_getpagsz.U
@@ -0,0 +1,104 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getpagsz.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:13:10 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:14 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getpagsz pagesize: Oldconfig Myread Inlibc cat contains +cc +ccflags \
+ libs rm Findhdr
+?MAKE: -pick add $@ %<
+?S:d_getpagsz:
+?S: This variable conditionally defines HAS_GETPAGESIZE if getpagesize()
+?S: is available to get the system page size.
+?S:.
+?S:pagesize (pagsize):
+?S: This variable holds the size in bytes of a system page.
+?S:.
+?C:HAS_GETPAGESIZE (GETPAGESIZE):
+?C: This symbol, if defined, indicates that the getpagesize system call
+?C: is available to get system page size, which is the granularity of
+?C: many memory management calls.
+?C:.
+?X: Don't name it PAGESIZE, this is sometimes used by <sys/param.h>
+?C:PAGESIZE_VALUE (PAGSIZE):
+?C: This symbol holds the size in bytes of a system page (obtained via
+?C: the getpagesize() system call at configuration time or asked to the
+?C: user if the system call is not available).
+?C:.
+?H:#$d_getpagsz HAS_GETPAGESIZE /**/
+?H:#define PAGESIZE_VALUE $pagesize /* System page size, in bytes */
+?H:.
+?F:!page
+?T:guess
+?LINT:set d_getpagsz
+: see if getpagesize exists
+set getpagesize d_getpagsz
+eval $inlibc
+
+@if pagesize || PAGESIZE_VALUE
+: determine the system page size
+echo " "
+guess=' (OK to guess)'
+case "$pagesize" in
+'')
+ $cat >page.c <<EOP
+extern int getpagesize();
+int main()
+{
+ printf("%d\n", getpagesize());
+}
+EOP
+ echo "Computing the granularity of memory management calls..." >&4
+ dflt='4096'
+ case "$d_getpagsz" in
+ "$define")
+ if $cc $ccflags -o page page.c $libs >/dev/null 2>&1; then
+ dflt=`./page`
+ guess=''
+ else
+ echo "(I can't seem to compile the test program--guessing)"
+ fi
+ ;;
+ *)
+ if $cc $ccflags -o page page.c $libs -lPW >/dev/null 2>&1; then
+ dflt=`./page`
+ guess=''
+ echo "(For your eyes only: I used the getpagesize() from -lPW.)"
+ else
+ if $contains PAGESIZE `./findhdr sys/param.h` >/dev/null 2>&1; then
+ $cat >page.c <<EOP
+#include <sys/param.h>
+int main()
+{
+ printf("%d\n", PAGESIZE);
+}
+EOP
+ if $cc $ccflags -o page page.c $libs >/dev/null 2>&1; then
+ dflt=`./page`
+ guess=''
+ echo "(Using value of PAGESIZE found in <sys/param.h>.)"
+ fi
+ fi
+ fi
+ ;;
+ esac
+ ;;
+*) dflt="$pagesize"; guess='';;
+esac
+rp="What is the system page size, in bytes$guess?"
+. ./myread
+pagesize=$ans
+$rm -f page.c page
+
+@end
diff --git a/mcon/U/d_getpgid.U b/mcon/U/d_getpgid.U
new file mode 100644
index 0000000..de6a1a7
--- /dev/null
+++ b/mcon/U/d_getpgid.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getpgid.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:33:44 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:d_getpgid: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_getpgid:
+?S: This variable conditionally defines the HAS_GETPGID symbol, which
+?S: indicates to the C program that the getpgid(pid) function
+?S: is available to get the process group id.
+?S:.
+?C:HAS_GETPGID:
+?C: This symbol, if defined, indicates to the C program that
+?C: the getpgid(pid) function is available to get the
+?C: process group id.
+?C:.
+?H:#$d_getpgid HAS_GETPGID /**/
+?H:.
+?LINT:set d_getpgid
+: see if getpgid exists
+set getpgid d_getpgid
+eval $inlibc
+
diff --git a/mcon/U/d_getpgrp.U b/mcon/U/d_getpgrp.U
new file mode 100644
index 0000000..bc5f5d2
--- /dev/null
+++ b/mcon/U/d_getpgrp.U
@@ -0,0 +1,108 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getpgrp.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:34:28 ram
+?RCS: patch61: new USE_BSD_GETPGRP to detect the getpgrp() flavour
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:15 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getpgrp d_bsdgetpgrp: Guess Inlibc Setvar cat rm \
+ +cc +ccflags +ldflags +libs i_unistd
+?MAKE: -pick add $@ %<
+?S:d_getpgrp:
+?S: This variable conditionally defines HAS_GETPGRP if getpgrp() is
+?S: available to get the current process group.
+?S:.
+?S:d_bsdgetpgrp:
+?S: This variable conditionally defines USE_BSD_GETPGRP if
+?S: getpgrp needs one arguments whereas USG one needs none.
+?S:.
+?C:HAS_GETPGRP (GETPGRP):
+?C: This symbol, if defined, indicates that the getpgrp routine is
+?C: available to get the current process group.
+?C:.
+?C:USE_BSD_GETPGRP:
+?C: This symbol, if defined, indicates that getpgrp needs one
+?C: arguments whereas USG one needs none.
+?C:.
+?H:#$d_getpgrp HAS_GETPGRP /**/
+?H:#$d_bsdgetpgrp USE_BSD_GETPGRP /**/
+?H:.
+?F:!set !set.c
+?T:xxx
+?LINT:set d_getpgrp d_bsdgetpgrp
+: see if getpgrp exists
+set getpgrp d_getpgrp
+eval $inlibc
+
+@if USE_BSD_GETPGRP || d_bsdgetpgrp
+case "$d_getpgrp" in
+"$define")
+ echo " "
+ echo "Checking to see which flavor of getpgrp is in use..."
+ $cat >set.c <<EOP
+#$i_unistd I_UNISTD
+#include <sys/types.h>
+#ifdef I_UNISTD
+# include <unistd.h>
+#endif
+int main()
+{
+ if (getuid() == 0) {
+ printf("(I see you are running Configure as super-user...)\n");
+ setuid(1);
+ }
+#ifdef TRY_BSD_PGRP
+ if (getpgrp(1) == 0)
+ exit(0);
+#else
+ if (getpgrp() > 0)
+ exit(0);
+#endif
+ exit(1);
+}
+EOP
+ if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1
+ && ./set
+ then
+ echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
+ val="$define"
+ elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
+ echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
+ val="$undef"
+ else
+ echo "I can't seem to compile and run the test program."
+ if ./usg; then
+ xxx="a USG one, i.e. you use getpgrp()."
+ else
+ # SVR4 systems can appear rather BSD-ish.
+ case "$i_unistd" in
+ $undef)
+ xxx="a BSD one, i.e. you use getpgrp(pid)."
+ val="$define"
+ ;;
+ $define)
+ xxx="probably a USG one, i.e. you use getpgrp()."
+ val="$undef"
+ ;;
+ esac
+ fi
+ echo "Assuming your getpgrp is $xxx" >&4
+ fi
+ ;;
+*) val="$undef";;
+esac
+set d_bsdgetpgrp
+eval $setvar
+$rm -f set set.c
+@end
+
diff --git a/mcon/U/d_getpgrp2.U b/mcon/U/d_getpgrp2.U
new file mode 100644
index 0000000..3aa5e1d
--- /dev/null
+++ b/mcon/U/d_getpgrp2.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getpgrp2.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:15 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getpgrp2: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_getpgrp2:
+?S: This variable conditionally defines the HAS_GETPGRP2 symbol, which
+?S: indicates to the C program that the getpgrp2() (as in DG/UX) routine
+?S: is available to get the current process group.
+?S:.
+?C:HAS_GETPGRP2 (GETPGRP2):
+?C: This symbol, if defined, indicates that the getpgrp2() (as in DG/UX)
+?C: routine is available to get the current process group.
+?C:.
+?H:#$d_getpgrp2 HAS_GETPGRP2 /**/
+?H:.
+?LINT:set d_getpgrp2
+: see if getpgrp2 exists
+set getpgrp2 d_getpgrp2
+eval $inlibc
+
diff --git a/mcon/U/d_getppid.U b/mcon/U/d_getppid.U
new file mode 100644
index 0000000..6754924
--- /dev/null
+++ b/mcon/U/d_getppid.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_getppid.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:45 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_getppid: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_getppid:
+?S: This variable conditionally defines the HAS_GETPPID symbol, which
+?S: indicates to the C program that the getppid() routine is available
+?S: to get the parent process ID.
+?S:.
+?C:HAS_GETPPID :
+?C: This symbol, if defined, indicates that the getppid routine is
+?C: available to get the parent process ID.
+?C:.
+?H:#$d_getppid HAS_GETPPID /**/
+?H:.
+?LINT:set d_getppid
+: see if getppid exists
+set getppid d_getppid
+eval $inlibc
+
diff --git a/mcon/U/d_getprior.U b/mcon/U/d_getprior.U
new file mode 100644
index 0000000..0397f1c
--- /dev/null
+++ b/mcon/U/d_getprior.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getprior.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:16 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getprior: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_getprior:
+?S: This variable conditionally defines HAS_GETPRIORITY if getpriority()
+?S: is available to get a process's priority.
+?S:.
+?C:HAS_GETPRIORITY (GETPRIORITY):
+?C: This symbol, if defined, indicates that the getpriority routine is
+?C: available to get a process's priority.
+?C:.
+?H:#$d_getprior HAS_GETPRIORITY /**/
+?H:.
+: see if getpriority exists
+?LINT:set d_getprior
+set getpriority d_getprior
+eval $inlibc
+
diff --git a/mcon/U/d_getpwent.U b/mcon/U/d_getpwent.U
new file mode 100644
index 0000000..fbec685
--- /dev/null
+++ b/mcon/U/d_getpwent.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getpwent.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:17 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getpwent: Csym Setvar
+?MAKE: -pick add $@ %<
+?S:d_getpwent:
+?S: This variable conditionally defines the HAS_GETPWENT symbol, which
+?S: indicates to the C program that it should use the getpwent()
+?S: routine instead of the getpw() routine.
+?S:.
+?C:HAS_GETPWENT (GETPWENT):
+?C: This symbol, if defined, indicates that the getpwent() routine
+?C: should be used instead of the getpw() routine.
+?C:.
+?H:#$d_getpwent HAS_GETPWENT /**/
+?H:.
+?LINT:set d_getpwent
+: see if there is a getpwent
+echo " "
+if set getpwent val -f d_getpwent; eval $csym; $val; then
+ echo "getpwent() found." >&4
+ val="$define"
+else
+ echo "No getpwent() found -- will use getpw() instead." >&4
+ val="$undef"
+fi
+set d_getpwent
+eval $setvar
+
diff --git a/mcon/U/d_getwd.U b/mcon/U/d_getwd.U
new file mode 100644
index 0000000..987e93b
--- /dev/null
+++ b/mcon/U/d_getwd.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_getwd.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:18 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_getwd: Csym Setvar
+?MAKE: -pick add $@ %<
+?S:d_getwd:
+?S: This variable conditionally defines HAS_GETWD if getwd() is
+?S: available to get working directory. If not, you should
+?S: probably use getcwd().
+?S:.
+?C:HAS_GETWD (GETWD):
+?C: This symbol, if defined, indicates that the getwd routine is
+?C: available to get working directory. If not, you should
+?C: probably use getcwd().
+?C:.
+?H:#$d_getwd HAS_GETWD /**/
+?H:.
+?LINT:set d_getwd
+: see if getwd exists
+echo " "
+if set getwd val -f d_getwd; eval $csym; $val; then
+ echo 'getwd() found.' >&4
+ val="$define"
+else
+ echo 'getwd() not found. Assuming getcwd() exists.' >&4
+ val="$undef"
+fi
+set d_getwd
+eval $setvar
+
diff --git a/mcon/U/d_gnulibc.U b/mcon/U/d_gnulibc.U
new file mode 100644
index 0000000..ead5dfa
--- /dev/null
+++ b/mcon/U/d_gnulibc.U
@@ -0,0 +1,98 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996,1998 Andy Dougherty
+?RCS: Copyright (c) 1996, Sven Verdoolaege
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:d_gnulibc gnulibc_version: Myread Oldconfig Setvar rm \
+ cat Compile run
+?MAKE: -pick add $@ %<
+?S:d_gnulibc:
+?S: Defined if we're dealing with the GNU C Library.
+?S:.
+?S:gnulibc_version:
+?S: This variable contains the version number of the GNU C library.
+?S: It is usually something like '2.2.5'. It is a plain '' if this
+?S: is not the GNU C library, or if the version is unknown.
+?S:.
+?C:HAS_GNULIBC ~ %<:
+?C: This symbol, if defined, indicates to the C program that
+?C: the GNU C library is being used. A better check is to use
+?C: the __GLIBC__ and __GLIBC_MINOR__ symbols supplied with glibc.
+?C:.
+?H:?%<:#$d_gnulibc HAS_GNULIBC /**/
+?H:?%<:#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE)
+?H:?%<:#define _GNU_SOURCE
+?H:?%<:#endif
+?H:.
+?F:!glibc.ver !try.c !try
+?LINT: set d_gnulibc
+?LINT: usefile try.c
+?LINT: known _GNU_SOURCE
+?X: gnulibc can be executed by calling __libc_main().
+?X: Ulrich Drepper doesn't think any other libc does that,
+?X: but we check if it says 'GNU C Library' to be sure.
+?X:
+?X: Alas, as of 3/1998 glibc 2.0.7 reportedly isn't going to
+?X: have __libc_main() anymore. :-(. Fortunately, all released
+?X: versions of glibc 2.x.x _do_ have CPP variables. For 2.0.6,
+?X: they are:
+?X: #define __GLIBC__ 2
+?X: #define__GLIBC_MINOR__ 0.
+?X: (The '6' isn't available :-(.
+?X: glibc2.1 will also have
+?X: extern const char * __gnu_get_libc_release(void);
+?X: extern const char * __gnu_get_libc_version(void);
+?X: functions. --thanks to Andreas Jaeger. --AD 6/1998.
+?X: Although the exact format isn't documented, __gnu_get_libc_version()
+?X: returns a simple string '2.1.3' in glibc 2.1.3.
+?X:
+: determine whether we are using a GNU C library
+echo " "
+echo "Checking for GNU C Library..." >&4
+cat >try.c <<'EOCP'
+/* Find out version of GNU C library. __GLIBC__ and __GLIBC_MINOR__
+ alone are insufficient to distinguish different versions, such as
+ 2.0.6 and 2.0.7. The function gnu_get_libc_version() appeared in
+ libc version 2.1.0. A. Dougherty, June 3, 2002.
+*/
+#include <stdio.h>
+int main(void)
+{
+#ifdef __GLIBC__
+# ifdef __GLIBC_MINOR__
+# if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
+# include <gnu/libc-version.h>
+ printf("%s\n", gnu_get_libc_version());
+# else
+ printf("%d.%d\n", __GLIBC__, __GLIBC_MINOR__);
+# endif
+# else
+ printf("%d\n", __GLIBC__);
+# endif
+ return 0;
+#else
+ return 1;
+#endif
+}
+EOCP
+set try
+if eval $compile_ok && $run ./try > glibc.ver; then
+ val="$define"
+ gnulibc_version=`$cat glibc.ver`
+ echo "You are using the GNU C Library version $gnulibc_version"
+else
+ val="$undef"
+ gnulibc_version=''
+ echo "You are not using the GNU C Library"
+fi
+$rm -f try try.* glibc.ver
+set d_gnulibc
+eval $setvar
+
diff --git a/mcon/U/d_group.U b/mcon/U/d_group.U
new file mode 100644
index 0000000..af841a7
--- /dev/null
+++ b/mcon/U/d_group.U
@@ -0,0 +1,23 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_group.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:34:52 ram
+?RCS: patch61: useless unit dropped.
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:07:48 ram
+?RCS: patch32: created by ADO
+?RCS:
+?X:
+?X: Useless unit dropped.
+?X:
+?LINT:empty
diff --git a/mcon/U/d_havetlib.U b/mcon/U/d_havetlib.U
new file mode 100644
index 0000000..b564e65
--- /dev/null
+++ b/mcon/U/d_havetlib.U
@@ -0,0 +1,125 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_havetlib.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:36:31 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS: patch61: likewise for .o replaced by $_o
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:44:06 ram
+?RCS: patch23: added AIX support to accept shared lib stub as termlib (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:19 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_havetlib termlib: cat contains Myread Loc Filexp Oldconfig libpth \
+ test uname _a _o
+?MAKE: -pick add $@ %<
+?S:d_havetlib:
+?S: This variable conditionally defines the HAS_TERMLIB symbol, which
+?S: indicates to the C program that termlib-style routines are available.
+?S:.
+?S:termlib:
+?S: This variable contains the argument to pass to the loader to get
+?S: termlib-style routines. It is up to the Makefile.SH to make sure
+?S: the value gets to the right command. Note that on many systems the
+?S: termlib routines are emulated by the curses or terminfo library.
+?S:.
+?C:HAS_TERMLIB (HAVETERMLIB):
+?C: This symbol, when defined, indicates that termlib-style routines
+?C: are available. There is nothing to include.
+?C:.
+?H:#$d_havetlib HAS_TERMLIB /**/
+?H:.
+?T:xxx
+: where do we get termlib routines from
+echo " "
+xxx=`./loc libcurses$_a x $libpth`
+case "$xxx" in
+/*)
+ ar t $xxx >grimble
+ if $contains tputs$_o grimble >/dev/null 2>&1; then
+ termlib='-lcurses'
+ d_havetlib="$define"
+ echo "Terminfo library found." >&4
+ elif $test "x`$uname 2>/dev/null`" = xAIX; then
+ # Ok, do the AIX shr.o fun thing
+ /usr/ccs/bin/nm -en $xxx 2>/dev/null >grimble
+ if $contains '^tputs .*|extern|' grimble >/dev/null 2>&1; then
+ termlib='-lcurses'
+ d_havetlib="$define"
+ echo "AIX Terminfo library found." >&4
+ else
+ xxx=x
+ fi
+ else
+ xxx=x
+ fi
+ rm -f grimble
+ ;;
+esac
+case "$xxx" in
+x)
+ xxx=`./loc libtermlib$_a x $libpth`
+ case "$xxx" in
+ /usr/lib*|/lib*)
+ termlib='-ltermlib'
+ d_havetlib="$define"
+ echo "Termlib library found." >&4
+ ;;
+ /*)
+ termlib="$xxx"
+ d_havetlib="$define"
+ echo "Termlib library found." >&4
+ ;;
+ *)
+ xxx=`./loc libtermcap$_a x $libpth`
+ case "$xxx" in
+ /usr/lib*|/lib*)
+ termlib='-ltermcap'
+ d_havetlib="$define"
+ echo "Termcap library found." >&4
+ ;;
+ /*)
+ termlib="$xxx"
+ d_havetlib="$define"
+ echo "Termcap library found." >&4
+ ;;
+ *)
+ case "$termlib" in
+ '')
+ dflt=y
+rp="Your system appears to NOT have termlib-style routines. Is this true?"
+ . ./myread
+ case "$ans" in
+ n*|f*) d_havetlib="$define"
+ $cat <<'EOM'
+Then where are the termlib-style routines kept? Specify either -llibname
+or a full pathname (~name ok).
+
+EOM
+ dflt=''
+ rp='Specify termlib path:'
+ . ./myread
+ termlib=`./filexp $ans`
+ ;;
+ *)
+ d_havetlib="$undef"
+ termlib=''
+ echo "You will have to play around with term.c then." >&4
+ ;;
+ esac
+ echo " ";;
+ *) echo "You said termlib was $termlib before." >&4;;
+ esac;;
+ esac;;
+ esac;;
+esac
+
diff --git a/mcon/U/d_hidnet.U b/mcon/U/d_hidnet.U
new file mode 100644
index 0000000..ce952f4
--- /dev/null
+++ b/mcon/U/d_hidnet.U
@@ -0,0 +1,68 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_hidnet.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:20 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_hidnet hiddennet: cat sed myhostname mydomain Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:d_hidnet:
+?S: This variable conditionally defines the symbol HIDDEN_NET, which
+?S: tells the C program that it should pretend it is on a different
+?S: host for purposes of advertising a mailing address.
+?S:.
+?S:hiddennet:
+?S: This variable contains the value eventually given to the symbol
+?S: HIDDEN_NET, if d_hidnet defines it. If defined, it's the name
+?S: of the host which serves as the mail server for a network that
+?S: is invisible to the outside world.
+?S:.
+?C:HIDDEN_NET (HIDDENNET):
+?C: This symbol, if defined, contains the host name that you want to
+?C: advertise to the outside world. This name can be different from
+?C: your actual host name, as long as the machine you specify knows
+?C: how to forward mail to you.
+?C:.
+?H:#$d_hidnet HIDDEN_NET "$hiddennet" /**/
+?H:.
+: now get the host name to advertise as our mailing address
+case "$hiddennet" in
+'') dflt=n;;
+*) dflt=y;;
+esac
+$cat <<EOM
+
+Some sites are on "hidden" networks, in the sense that the network appears
+to the outside world as a single machine. The advertised name of any host
+on this hidden network is the name of one machine on the local network which
+knows how to forward mail to any other host on the hidden network.
+
+Do you wish to advertise a different hostname to the world than the one your
+own host ($myhostname$mydomain) has?
+
+EOM
+rp='Use "hidden" network?'
+. ./myread
+case "$ans" in
+n*) d_hidnet="$undef" hiddennet='';;
+*)
+ d_hidnet="$define"
+ echo " "
+ case "$hiddennet" in
+ '') dflt=`echo $mydomain | $sed -e 's/^\.//'`;;
+ *) dflt="$hiddennet";;
+ esac
+ rp='What hostname do you wish to advertise?'
+ . ./myread
+ hiddennet="$ans"
+ ;;
+esac
+
diff --git a/mcon/U/d_htonl.U b/mcon/U/d_htonl.U
new file mode 100644
index 0000000..82b176d
--- /dev/null
+++ b/mcon/U/d_htonl.U
@@ -0,0 +1,88 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_htonl.U,v $
+?RCS: Revision 3.0.1.2 1994/08/29 16:09:25 ram
+?RCS: patch32: now properly handles htonl() and friends when macros (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:45:00 ram
+?RCS: patch23: now also check for htonl() macro (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:22 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_htonl: Inlibc Setvar i_niin i_sysin cat rm contains \
+ cppstdin cppflags cppminus
+?MAKE: -pick add $@ %<
+?S:d_htonl:
+?S: This variable conditionally defines HAS_HTONL if htonl() and its
+?S: friends are available to do network order byte swapping.
+?S:.
+?C:HAS_HTONL (HTONL):
+?C: This symbol, if defined, indicates that the htonl() routine (and
+?C: friends htons() ntohl() ntohs()) are available to do network
+?C: order byte swapping.
+?C:.
+?C:HAS_HTONS (HTONS):
+?C: This symbol, if defined, indicates that the htons() routine (and
+?C: friends htonl() ntohl() ntohs()) are available to do network
+?C: order byte swapping.
+?C:.
+?C:HAS_NTOHL (NTOHL):
+?C: This symbol, if defined, indicates that the ntohl() routine (and
+?C: friends htonl() htons() ntohs()) are available to do network
+?C: order byte swapping.
+?C:.
+?C:HAS_NTOHS (NTOHS):
+?C: This symbol, if defined, indicates that the ntohs() routine (and
+?C: friends htonl() htons() ntohl()) are available to do network
+?C: order byte swapping.
+?C:.
+?H:#$d_htonl HAS_HTONL /**/
+?H:#$d_htonl HAS_HTONS /**/
+?H:#$d_htonl HAS_NTOHL /**/
+?H:#$d_htonl HAS_NTOHS /**/
+?H:.
+?F:!htonl.c
+?LINT:set d_htonl
+: see if htonl --and friends-- exists
+val=''
+set htonl val
+eval $inlibc
+
+: Maybe they are macros.
+case "$val" in
+$undef)
+ $cat >htonl.c <<EOM
+#include <stdio.h>
+#include <sys/types.h>
+#$i_niin I_NETINET_IN
+#$i_sysin I_SYS_IN
+#ifdef I_NETINET_IN
+#include <netinet/in.h>
+#endif
+#ifdef I_SYS_IN
+#include <sys/in.h>
+#endif
+#ifdef htonl
+printf("Defined as a macro.");
+#endif
+EOM
+ $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
+ if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
+ val="$define"
+ echo "But it seems to be defined as a macro." >&4
+ fi
+ $rm -f htonl.?
+ ;;
+esac
+set d_htonl
+eval $setvar
+
diff --git a/mcon/U/d_inetaton.U b/mcon/U/d_inetaton.U
new file mode 100644
index 0000000..d3a4607
--- /dev/null
+++ b/mcon/U/d_inetaton.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Spider Boardman
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_inetaton.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:36:35 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:d_inetaton: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_inetaton:
+?S: This variable conditionally defines the HAS_INET_ATON symbol, which
+?S: indicates to the C program that the inet_aton() function is available
+?S: to parse IP address "dotted-quad" strings.
+?S:.
+?C:HAS_INET_ATON:
+?C: This symbol, if defined, indicates to the C program that the
+?C: inet_aton() function is available to parse IP address "dotted-quad"
+?C: strings.
+?C:.
+?H:#$d_inetaton HAS_INET_ATON /**/
+?H:.
+?LINT:set d_inetaton
+: check whether inet_aton exists
+set inet_aton d_inetaton
+eval $inlibc
+
diff --git a/mcon/U/d_inetd.U b/mcon/U/d_inetd.U
new file mode 100644
index 0000000..02881ad
--- /dev/null
+++ b/mcon/U/d_inetd.U
@@ -0,0 +1,70 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_inetd.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:23 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_inetd: cat test package Myread Setvar
+?MAKE: -pick add $@ %<
+?S:d_inetd:
+?S: This symbol conditionally defines USE_INETD which indicates to the C
+?S: program that the initial socket connection will be done via inetd.
+?S:.
+?C:USE_INETD (INETD):
+?C: This symbol if defined indicates to the C program that inetd will be
+?C: in charge of the initial socket connection. The file descriptors 0 and
+?C: 1 have been dup()ed from the original connected socket descriptor and
+?C: are ready for send() and recv().
+?C:.
+?H:#$d_inetd USE_INETD /**/
+?H:.
+?LINT:set d_inetd
+: ask whether initial socket connection is to be done via inetd
+echo " "
+dflt=n
+case "$d_inetd" in
+'') if $test -f /etc/inetd.conf; then
+ $cat <<EOM
+Your system provides a so called "Internet super-server", the inetd daemon.
+Network services like ftp or rlogin are usually handled via ftpd and rlogind
+daemons. Without inetd, these daemons must always be running for the service
+to be on. On the contrary, inetd listens to specific ports defined in file
+/etc/inetd.conf and will run the appropriate daemon upon request. This scheme
+avoids eating up the process table and memory with useless daemons.
+
+I can set up things so that internet connections for $package will be done
+using inetd, in which case you will have to edit /etc/inetd.conf to add some
+specific informations.
+
+EOM
+ dflt=y
+ else
+ $cat <<EOM
+I do not see any trace of a configuration file for inetd, hence I assume your
+system does not support the so called "Internet super-server". This means
+$package will need to have a daemon process running on this machine to allow
+network connections.
+
+EOM
+ fi;;
+*) case "$d_inetd" in
+ "$define") dflt=y;;
+ esac;;
+esac
+rp='Do you wish to use inetd for network connections?'
+. ./myread
+val="$undef"
+case "$ans" in
+y*|Y*) val="$define";;
+esac
+set d_inetd
+eval $setvar
+
diff --git a/mcon/U/d_internet.U b/mcon/U/d_internet.U
new file mode 100644
index 0000000..ca2d3fc
--- /dev/null
+++ b/mcon/U/d_internet.U
@@ -0,0 +1,52 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_internet.U,v $
+?RCS: Revision 3.0.1.1 1993/09/13 16:02:04 ram
+?RCS: patch10: most mailers support Internet addresses nowadays (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:24 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_internet: Myread Oldconfig Setvar
+?MAKE: -pick add $@ %<
+?S:d_internet:
+?S: This variable conditionally defines the INTERNET symbol, which
+?S: indicates to the C program that there is a mailer available which
+?S: supports internet-style addresses (user@site.domain).
+?S:.
+?C:INTERNET:
+?C: This symbol, if defined, indicates that there is a mailer available
+?C: which supports internet-style addresses (user@site.domain).
+?C:.
+?H:#$d_internet INTERNET /**/
+?H:.
+?LINT:set d_internet
+: check for internet mailer
+dflt=y
+case "$d_internet" in
+"$undef") dflt=n;;
+esac
+cat <<EOM
+
+Most mailers can deliver mail to addresses of the INTERNET persuasion,
+such as user@host.edu. Some older mailers, however, require the complete
+path to the destination to be specified in the address.
+
+EOM
+rp="Does your mailer understand INTERNET addresses?"
+. ./myread
+case "$ans" in
+y*) val="$define";;
+*) val="$undef";;
+esac
+set d_internet
+eval $setvar
+
diff --git a/mcon/U/d_isascii.U b/mcon/U/d_isascii.U
new file mode 100644
index 0000000..a4a0fff
--- /dev/null
+++ b/mcon/U/d_isascii.U
@@ -0,0 +1,57 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_isascii.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 16:13:39 ram
+?RCS: patch36: added 'ldflags' to the test compile line (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:09:32 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_isascii: cc cat ccflags ldflags rm libs Setvar
+?MAKE: -pick add $@ %<
+?S:d_isascii:
+?S: This variable conditionally defines the HAS_ISASCII constant,
+?S: which indicates to the C program that isascii() is available.
+?S:.
+?C:HAS_ISASCII:
+?C: This manifest constant lets the C program know that isascii
+?C: is available.
+?C:.
+?H:#$d_isascii HAS_ISASCII /**/
+?H:.
+?LINT:set d_isascii
+?X: Can't use Inlibc because isascii() might be a macro.
+: Look for isascii
+echo " "
+$cat >isascii.c <<'EOCP'
+#include <stdio.h>
+#include <ctype.h>
+int main() {
+ int c = 'A';
+ if (isascii(c))
+ exit(0);
+ else
+ exit(1);
+}
+EOCP
+if $cc $ccflags $ldflags -o isascii isascii.c $libs >/dev/null 2>&1 ; then
+ echo "isascii() found." >&4
+ val="$define"
+else
+ echo "isascii() NOT found." >&4
+ val="$undef"
+fi
+set d_isascii
+eval $setvar
+$rm -f isascii*
+
diff --git a/mcon/U/d_itimer.U b/mcon/U/d_itimer.U
new file mode 100644
index 0000000..027112e
--- /dev/null
+++ b/mcon/U/d_itimer.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_itimer.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:25 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_itimer: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_itimer:
+?S: This variable conditionally defines the HAS_ITIMER symbol, which
+?S: indicates that the setitimer() routine exists. The setitimer()
+?S: routine supports sub-second accuracy for one real-time and two
+?S: cpu clocks.
+?S:.
+?C:HAS_ITIMER (ITIMER):
+?C: This symbol, if defined, indicates that the setitimer() routine exists.
+?C:.
+?H:#$d_itimer HAS_ITIMER /**/
+?H:.
+?LINT:set d_itimer
+: see if setitimer exists
+set setitimer d_itimer
+eval $inlibc
+
diff --git a/mcon/U/d_keepsig.U b/mcon/U/d_keepsig.U
new file mode 100644
index 0000000..43a8f88
--- /dev/null
+++ b/mcon/U/d_keepsig.U
@@ -0,0 +1,81 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_keepsig.U,v $
+?RCS: Revision 3.0.1.4 1995/07/25 13:57:56 ram
+?RCS: patch56: made cc and ccflags optional dependencies
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/11 15:26:25 ram
+?RCS: patch45: protected "sh -c" within backquotes for Linux and SGI
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:13:59 ram
+?RCS: patch36: call ./bsd explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0.1.1 1993/10/16 13:48:47 ram
+?RCS: patch12: comment for SIGNALS_KEPT was the other way round
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:26 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_keepsig: cat Compile rm Guess contains echo n c Setvar run
+?MAKE: -pick add $@ %<
+?S:d_keepsig:
+?S: This variable contains the eventual value of the SIGNALS_KEPT symbol,
+?S: which indicates to the C program if signal handlers need not reinstated
+?S: after receipt of a signal.
+?S:.
+?C:SIGNALS_KEPT (PERSISTENT_SIGNAL):
+?C: This symbol is defined if signal handlers needn't be reinstated after
+?C: receipt of a signal.
+?C:.
+?H:#$d_keepsig SIGNALS_KEPT /**/
+?H:.
+?F:!try !try.out
+?LINT:set d_keepsig
+: see if signals are kept
+val="$undef";
+echo " "
+echo "Checking to see if signal handlers stick around..." >&4
+$cat >try.c <<'EOCP'
+foo() {}
+
+int main()
+{
+ signal(2, foo);
+ kill(getpid(), 2);
+ kill(getpid(), 2);
+ printf("abc\n");
+}
+EOCP
+set try
+if eval $compile; then
+?X: On AIX a single ./try will not work (with ksh)
+?X: Backquotes required on Linux and SGI (prevents "ambiguous output redirect")
+?X: (reported by Xavier LeVourch <xavierl@eiffel.com>)
+ echo `sh -c $run ./try >try.out 2>/dev/null` >/dev/null
+ if $contains abc try.out >/dev/null 2>&1; then
+ echo "Yes, they do."
+ val="$define";
+ else
+ echo "No, they don't."
+ fi
+else
+ $echo $n "(I can't seem to compile the test program. Assuming $c"
+ if ./bsd; then
+ echo "they do.)"
+ val="$define"
+ else
+ echo "they don't.)"
+ fi
+fi
+set d_keepsig
+eval $setvar
+$rm -f try*
+
diff --git a/mcon/U/d_killpg.U b/mcon/U/d_killpg.U
new file mode 100644
index 0000000..220932a
--- /dev/null
+++ b/mcon/U/d_killpg.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_killpg.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:27 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_killpg: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_killpg:
+?S: This variable conditionally defines the HAS_KILLPG symbol, which
+?S: indicates to the C program that the killpg() routine is available
+?S: to kill process groups.
+?S:.
+?C:HAS_KILLPG (KILLPG):
+?C: This symbol, if defined, indicates that the killpg routine is available
+?C: to kill process groups. If unavailable, you probably should use kill
+?C: with a negative process number.
+?C:.
+?H:#$d_killpg HAS_KILLPG /**/
+?H:.
+?LINT:set d_killpg
+: see if killpg exists
+set killpg d_killpg
+eval $inlibc
+
diff --git a/mcon/U/d_link.U b/mcon/U/d_link.U
new file mode 100644
index 0000000..cd5d889
--- /dev/null
+++ b/mcon/U/d_link.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_link.U,v $
+?RCS: Revision 3.0.1.1 1993/08/25 14:01:13 ram
+?RCS: patch6: created for completeness
+?RCS:
+?MAKE:d_link: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_link:
+?S: This variable conditionally defines HAS_LINK if link() is
+?S: available to create hard links.
+?S:.
+?C:HAS_LINK:
+?C: This symbol, if defined, indicates that the link routine is
+?C: available to create hard links.
+?C:.
+?H:#$d_link HAS_LINK /**/
+?H:.
+?LINT:set d_link
+: see if link exists
+set link d_link
+eval $inlibc
+
diff --git a/mcon/U/d_linuxstd.U b/mcon/U/d_linuxstd.U
new file mode 100644
index 0000000..a18890a
--- /dev/null
+++ b/mcon/U/d_linuxstd.U
@@ -0,0 +1,55 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_linuxstd.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:14:05 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_linuxstd: d_stdstdio cppstdin cppflags cppminus \
+ contains rm Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_linuxstd:
+?S: This variable conditionally defines USE_LINUX_STDIO if this system
+?S: has a FILE structure declaring _IO_read_base, _IO_read_ptr,
+?S: and _IO_read_end in stdio.h.
+?S:.
+?C:USE_LINUX_STDIO:
+?C: This symbol is defined if this system has a FILE structure declaring
+?C: _IO_read_base, _IO_read_ptr, and _IO_read_end in stdio.h.
+?C:.
+?H:#$d_linuxstd USE_LINUX_STDIO /**/
+?H:.
+?T:xxx
+?LINT:set d_linuxstd
+: see if stdio is like that in linux
+case "$d_stdstdio" in
+"$undef")
+ echo " "
+ xxx=`./findhdr stdio.h`
+ $cppstdin $cppflags $cppminus < "$xxx" > stdio.E
+ if $contains 'char.*_IO_read_base' stdio.E >/dev/null 2>&1 && \
+ $contains '_IO_read_ptr' stdio.E >/dev/null 2>&1 && \
+ $contains '_IO_read_end' stdio.E >/dev/null 2>&1 ; then
+ echo "Your stdio looks like linux." >&4
+ val="$define"
+ else
+ echo "You don't have linux stdio, either." >&4
+ val="$undef"
+ fi
+ $rm -f stdio.E
+ ;;
+*) val="$undef" ;;
+esac
+
+set d_linuxstd
+eval $setvar
+
diff --git a/mcon/U/d_locconv.U b/mcon/U/d_locconv.U
new file mode 100644
index 0000000..a7bec1f
--- /dev/null
+++ b/mcon/U/d_locconv.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_locconv.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:14:11 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_locconv: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_locconv:
+?S: This variable conditionally defines HAS_LOCALECONV if localeconv() is
+?S: available for numeric and monetary formatting conventions.
+?S:.
+?C:HAS_LOCALECONV:
+?C: This symbol, if defined, indicates that the localeconv routine is
+?C: available for numeric and monetary formatting conventions.
+?C:.
+?H:#$d_locconv HAS_LOCALECONV /**/
+?H:.
+?LINT:set d_locconv
+: see if localeconv exists
+set localeconv d_locconv
+eval $inlibc
+
diff --git a/mcon/U/d_lockf.U b/mcon/U/d_lockf.U
new file mode 100644
index 0000000..062f753
--- /dev/null
+++ b/mcon/U/d_lockf.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_lockf.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:09:36 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_lockf: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_lockf:
+?S: This variable conditionally defines HAS_LOCKF if lockf() is
+?S: available to do file locking.
+?S:.
+?C:HAS_LOCKF (LOCKF):
+?C: This symbol, if defined, indicates that the lockf routine is
+?C: available to do file locking.
+?C:.
+?H:#$d_lockf HAS_LOCKF /**/
+?H:.
+?LINT:set d_lockf
+: see if lockf exists
+set lockf d_lockf
+eval $inlibc
+
diff --git a/mcon/U/d_lstat.U b/mcon/U/d_lstat.U
new file mode 100644
index 0000000..4d5bc46
--- /dev/null
+++ b/mcon/U/d_lstat.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_lstat.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:28 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_lstat: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_lstat:
+?S: This variable conditionally defines HAS_LSTAT if lstat() is
+?S: available to do file stats on symbolic links.
+?S:.
+?C:HAS_LSTAT (LSTAT):
+?C: This symbol, if defined, indicates that the lstat routine is
+?C: available to do file stats on symbolic links.
+?C:.
+?H:#$d_lstat HAS_LSTAT /**/
+?H:.
+?LINT:set d_lstat
+: see if lstat exists
+set lstat d_lstat
+eval $inlibc
+
diff --git a/mcon/U/d_mblen.U b/mcon/U/d_mblen.U
new file mode 100644
index 0000000..b990066
--- /dev/null
+++ b/mcon/U/d_mblen.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_mblen.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:09:40 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_mblen: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_mblen:
+?S: This variable conditionally defines the HAS_MBLEN symbol, which
+?S: indicates to the C program that the mblen() routine is available
+?S: to find the number of bytes in a multibye character.
+?S:.
+?C:HAS_MBLEN:
+?C: This symbol, if defined, indicates that the mblen routine is available
+?C: to find the number of bytes in a multibye character.
+?C:.
+?H:#$d_mblen HAS_MBLEN /**/
+?H:.
+?LINT:set d_mblen
+: see if mblen exists
+set mblen d_mblen
+eval $inlibc
+
diff --git a/mcon/U/d_mbstowcs.U b/mcon/U/d_mbstowcs.U
new file mode 100644
index 0000000..c73ca45
--- /dev/null
+++ b/mcon/U/d_mbstowcs.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_mbstowcs.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:29 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_mbstowcs: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_mbstowcs:
+?S: This variable conditionally defines the HAS_MBSTOWCS symbol, which
+?S: indicates to the C program that the mbstowcs() routine is available
+?S: to convert a multibyte string into a wide character string.
+?S:.
+?C:HAS_MBSTOWCS (MBSTOWCS):
+?C: This symbol, if defined, indicates that the mbstowcs routine is
+?C: available to covert a multibyte string into a wide character string.
+?C:.
+?H:#$d_mbstowcs HAS_MBSTOWCS /**/
+?H:.
+?LINT:set d_mbstowcs
+: see if mbstowcs exists
+set mbstowcs d_mbstowcs
+eval $inlibc
+
diff --git a/mcon/U/d_mbtowc.U b/mcon/U/d_mbtowc.U
new file mode 100644
index 0000000..ea24f92
--- /dev/null
+++ b/mcon/U/d_mbtowc.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_mbtowc.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:30 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_mbtowc: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_mbtowc:
+?S: This variable conditionally defines the HAS_MBTOWC symbol, which
+?S: indicates to the C program that the mbtowc() routine is available
+?S: to convert multibyte to a wide character.
+?S:.
+?C:HAS_MBTOWC (MBTOWC):
+?C: This symbol, if defined, indicates that the mbtowc routine is available
+?C: to covert a multibyte to a wide character.
+?C:.
+?H:#$d_mbtowc HAS_MBTOWC /**/
+?H:.
+?LINT:set d_mbtowc
+: see if mbtowc exists
+set mbtowc d_mbtowc
+eval $inlibc
+
diff --git a/mcon/U/d_memalign.U b/mcon/U/d_memalign.U
new file mode 100644
index 0000000..a27a559
--- /dev/null
+++ b/mcon/U/d_memalign.U
@@ -0,0 +1,29 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_memalign.U,v $
+?RCS:
+?MAKE:d_memalign: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_memalign:
+?S: This variable conditionally defines the HAS_MEMALIGN symbol, which
+?S: indicates to the C program that the memalign() routine is available.
+?S:.
+?C:HAS_MEMALIGN :
+?C: This symbol, if defined, indicates that the memalign routine is
+?C: available to allocate aligned memory.
+?C:.
+?H:#$d_memalign HAS_MEMALIGN /**/
+?H:.
+?LINT:set d_memalign
+: see if memalign exists
+set memalign d_memalign
+eval $inlibc
+
diff --git a/mcon/U/d_memccpy.U b/mcon/U/d_memccpy.U
new file mode 100644
index 0000000..386ee30
--- /dev/null
+++ b/mcon/U/d_memccpy.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_memccpy.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:31 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_memccpy: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_memccpy:
+?S: This variable conditionally defines the HAS_MEMCCPY symbol, which
+?S: indicates to the C program that the memccpy() routine is available
+?S: to copy a character into a block of memory.
+?S:.
+?C:HAS_MEMCCPY (MEMCCPY):
+?C: This symbol, if defined, indicates that the memccpy routine is available
+?C: to copy a character into a block of memory. Otherwise you should
+?C: roll your own.
+?C:.
+?H:#$d_memccpy HAS_MEMCCPY /**/
+?H:.
+?LINT:set d_memccpy
+: see if memccpy exists
+set memccpy d_memccpy
+eval $inlibc
+
diff --git a/mcon/U/d_memchr.U b/mcon/U/d_memchr.U
new file mode 100644
index 0000000..00b5b87
--- /dev/null
+++ b/mcon/U/d_memchr.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_memchr.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:32 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_memchr: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_memchr:
+?S: This variable conditionally defines the HAS_MEMCHR symbol, which
+?S: indicates to the C program that the memchr() routine is available
+?S: to scan a block of memory for a character.
+?S:.
+?C:HAS_MEMCHR:
+?C: This symbol, if defined, indicates that the memchr routine is available
+?C: to scan a block of memory for a character. If undefined, roll your own.
+?C:.
+?H:#$d_memchr HAS_MEMCHR /**/
+?H:.
+?LINT:set d_memchr
+: see if memchr exists
+set memchr d_memchr
+eval $inlibc
+
diff --git a/mcon/U/d_memcmp.U b/mcon/U/d_memcmp.U
new file mode 100644
index 0000000..1761865
--- /dev/null
+++ b/mcon/U/d_memcmp.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_memcmp.U,v $
+?RCS: Revision 3.0.1.1 1993/09/13 16:02:35 ram
+?RCS: patch10: removed text recommending bcmp over memcmp (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:33 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_memcmp: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_memcmp:
+?S: This variable conditionally defines the HAS_MEMCMP symbol, which
+?S: indicates to the C program that the memcmp() routine is available
+?S: to compare blocks of memory.
+?S:.
+?C:HAS_MEMCMP (MEMCMP):
+?C: This symbol, if defined, indicates that the memcmp routine is available
+?C: to compare blocks of memory.
+?C:.
+?H:#$d_memcmp HAS_MEMCMP /**/
+?H:.
+?LINT:set d_memcmp
+: see if memcmp exists
+set memcmp d_memcmp
+eval $inlibc
+
diff --git a/mcon/U/d_memcpy.U b/mcon/U/d_memcpy.U
new file mode 100644
index 0000000..b500662
--- /dev/null
+++ b/mcon/U/d_memcpy.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_memcpy.U,v $
+?RCS: Revision 3.0.1.1 1993/09/13 16:02:58 ram
+?RCS: patch10: removed text recommending bcopy over memcpy (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:34 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_memcpy: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_memcpy:
+?S: This variable conditionally defines the HAS_MEMCPY symbol, which
+?S: indicates to the C program that the memcpy() routine is available
+?S: to copy blocks of memory.
+?S:.
+?C:HAS_MEMCPY (MEMCPY):
+?C: This symbol, if defined, indicates that the memcpy routine is available
+?C: to copy blocks of memory.
+?C:.
+?H:#$d_memcpy HAS_MEMCPY /**/
+?H:.
+?LINT:set d_memcpy
+: see if memcpy exists
+set memcpy d_memcpy
+eval $inlibc
+
diff --git a/mcon/U/d_memmove.U b/mcon/U/d_memmove.U
new file mode 100644
index 0000000..34280e0
--- /dev/null
+++ b/mcon/U/d_memmove.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_memmove.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:35 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_memmove: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_memmove:
+?S: This variable conditionally defines the HAS_MEMMOVE symbol, which
+?S: indicates to the C program that the memmove() routine is available
+?S: to copy potentatially overlapping blocks of memory.
+?S:.
+?C:HAS_MEMMOVE:
+?C: This symbol, if defined, indicates that the memmove routine is available
+?C: to copy potentially overlapping blocks of memory. This should be used
+?C: only when HAS_SAFE_BCOPY is not defined. If neither is there, roll your
+?C: own version.
+?C:.
+?H:#$d_memmove HAS_MEMMOVE /**/
+?H:.
+?LINT:set d_memmove
+: see if memmove exists
+set memmove d_memmove
+eval $inlibc
+
diff --git a/mcon/U/d_memset.U b/mcon/U/d_memset.U
new file mode 100644
index 0000000..812c4de
--- /dev/null
+++ b/mcon/U/d_memset.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_memset.U,v $
+?RCS: Revision 3.0.1.1 1993/09/13 16:03:11 ram
+?RCS: patch10: removed text recommending bzero over memset (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:36 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_memset: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_memset:
+?S: This variable conditionally defines the HAS_MEMSET symbol, which
+?S: indicates to the C program that the memset() routine is available
+?S: to set blocks of memory.
+?S:.
+?C:HAS_MEMSET (MEMSET):
+?C: This symbol, if defined, indicates that the memset routine is available
+?C: to set blocks of memory.
+?C:.
+?H:#$d_memset HAS_MEMSET /**/
+?H:.
+?LINT:set d_memset
+: see if memset exists
+set memset d_memset
+eval $inlibc
+
diff --git a/mcon/U/d_mkdir.U b/mcon/U/d_mkdir.U
new file mode 100644
index 0000000..9cb6961
--- /dev/null
+++ b/mcon/U/d_mkdir.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_mkdir.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:37 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_mkdir: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_mkdir:
+?S: This variable conditionally defines the HAS_MKDIR symbol, which
+?S: indicates to the C program that the mkdir() routine is available
+?S: to create directories..
+?S:.
+?C:HAS_MKDIR (MKDIR):
+?C: This symbol, if defined, indicates that the mkdir routine is available
+?C: to create directories. Otherwise you should fork off a new process to
+?C: exec /bin/mkdir.
+?C:.
+?H:#$d_mkdir HAS_MKDIR /**/
+?H:.
+?LINT:set d_mkdir
+: see if mkdir exists
+set mkdir d_mkdir
+eval $inlibc
+
diff --git a/mcon/U/d_mkfifo.U b/mcon/U/d_mkfifo.U
new file mode 100644
index 0000000..cca2262
--- /dev/null
+++ b/mcon/U/d_mkfifo.U
@@ -0,0 +1,36 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_mkfifo.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:14:17 ram
+?RCS: patch36: created by ADO
+?RCS:
+?RCS:
+?MAKE:d_mkfifo: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_mkfifo:
+?S: This variable conditionally defines the HAS_MKFIFO symbol, which
+?S: indicates to the C program that the mkfifo() routine is available.
+?S:.
+?C:HAS_MKFIFO :
+?C: This symbol, if defined, indicates that the mkfifo routine is
+?C: available to create FIFOs. Otherwise, mknod should be able to
+?C: do it for you. However, if mkfifo is there, mknod might require
+?C: super-user privileges which mkfifo will not.
+?C:.
+?H:#$d_mkfifo HAS_MKFIFO /**/
+?H:.
+?LINT:set d_mkfifo
+: see if mkfifo exists
+set mkfifo d_mkfifo
+eval $inlibc
+
diff --git a/mcon/U/d_mktime.U b/mcon/U/d_mktime.U
new file mode 100644
index 0000000..fd62716
--- /dev/null
+++ b/mcon/U/d_mktime.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_mktime.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:09:44 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_mktime: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_mktime:
+?S: This variable conditionally defines the HAS_MKTIME symbol, which
+?S: indicates to the C program that the mktime() routine is available.
+?S:.
+?C:HAS_MKTIME :
+?C: This symbol, if defined, indicates that the mktime routine is
+?C: available.
+?C:.
+?H:#$d_mktime HAS_MKTIME /**/
+?H:.
+?LINT:set d_mktime
+: see if mktime exists
+set mktime d_mktime
+eval $inlibc
+
diff --git a/mcon/U/d_mmap.U b/mcon/U/d_mmap.U
new file mode 100644
index 0000000..ad5448e
--- /dev/null
+++ b/mcon/U/d_mmap.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_mmap.U,v $
+?RCS: Revision 3.0.1.1 1993/12/15 08:19:12 ram
+?RCS: patch15: created
+?RCS:
+?MAKE:d_mmap: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_mmap:
+?S: This variable conditionally defines HAS_MMAP if mmap() is
+?S: available to map a file into memory.
+?S:.
+?C:HAS_MMAP:
+?C: This symbol, if defined, indicates that the mmap system call is
+?C: available to map a file into memory.
+?C:.
+?H:#$d_mmap HAS_MMAP /**/
+?H:.
+?LINT:set d_mmap
+: see if mmap exists
+set mmap d_mmap
+eval $inlibc
+
diff --git a/mcon/U/d_msem_lck.U b/mcon/U/d_msem_lck.U
new file mode 100644
index 0000000..80308a4
--- /dev/null
+++ b/mcon/U/d_msem_lck.U
@@ -0,0 +1,28 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_msem_lck.U,v $
+?MAKE:d_msem_lck: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_msem_lck:
+?S: This variable conditionally defines HAS_MSEM_LOCK if msem_lock() is
+?S: available, thereby indicating kernel support for memory semaphores.
+?S:.
+?C:HAS_MSEM_LOCK:
+?C: This symbol, if defined, indicates that memory semaphores are
+?C: available to protect mmap()'ed regions.
+?C:.
+?H:#$d_msem_lck HAS_MSEM_LOCK /**/
+?H:.
+?LINT:set d_msem_lck
+: see if msem_lock exists
+set msem_lock d_msem_lck
+eval $inlibc
+
diff --git a/mcon/U/d_msg.U b/mcon/U/d_msg.U
new file mode 100644
index 0000000..7f090da
--- /dev/null
+++ b/mcon/U/d_msg.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_msg.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:37 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_msg: test d_msgctl d_msgget d_msgsnd d_msgrcv Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_msg:
+?S: This variable conditionally defines the HAS_MSG symbol, which
+?S: indicates that the entire msg*(2) library is present.
+?S:.
+?C:HAS_MSG:
+?C: This symbol, if defined, indicates that the entire msg*(2) library is
+?C: supported (IPC mechanism based on message queues).
+?C:.
+?H:#$d_msg HAS_MSG /**/
+?H:.
+?T:h_msg
+?LINT:set d_msg
+: see how much of the 'msg*(2)' library is present.
+h_msg=true
+echo " "
+case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
+*"$undef"*) h_msg=false;;
+esac
+: we could also check for sys/ipc.h ...
+if $h_msg && $test `./findhdr sys/msg.h`; then
+ echo "You have the full msg*(2) library." >&4
+ val="$define"
+else
+ echo "You don't have the full msg*(2) library." >&4
+ val="$undef"
+fi
+set d_msg
+eval $setvar
+
diff --git a/mcon/U/d_msgctl.U b/mcon/U/d_msgctl.U
new file mode 100644
index 0000000..4f50ad3
--- /dev/null
+++ b/mcon/U/d_msgctl.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_msgctl.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:38 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_msgctl: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_msgctl:
+?S: This variable conditionally defines the HAS_MSGCTL symbol, which
+?S: indicates to the C program that the msgctl() routine is available.
+?S:.
+?C:HAS_MSGCTL:
+?C: This symbol, if defined, indicates that the msgctl() routine is
+?C: available to perform message control operations.
+?C:.
+?H:#$d_msgctl HAS_MSGCTL /**/
+?H:.
+?LINT:set d_msgctl
+: see if msgctl exists
+set msgctl d_msgctl
+eval $inlibc
+
diff --git a/mcon/U/d_msgget.U b/mcon/U/d_msgget.U
new file mode 100644
index 0000000..8313591
--- /dev/null
+++ b/mcon/U/d_msgget.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_msgget.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:39 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_msgget: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_msgget:
+?S: This variable conditionally defines the HAS_MSGGET symbol, which
+?S: indicates to the C program that the msgget() routine is available.
+?S:.
+?C:HAS_MSGGET:
+?C: This symbol, if defined, indicates that the msgget() routine is
+?C: available to get a new message queue.
+?C:.
+?H:#$d_msgget HAS_MSGGET /**/
+?H:.
+?LINT:set d_msgget
+: see if msgget exists
+set msgget d_msgget
+eval $inlibc
+
diff --git a/mcon/U/d_msgrcv.U b/mcon/U/d_msgrcv.U
new file mode 100644
index 0000000..9f7c27e
--- /dev/null
+++ b/mcon/U/d_msgrcv.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_msgrcv.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:40 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_msgrcv: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_msgrcv:
+?S: This variable conditionally defines the HAS_MSGRCV symbol, which
+?S: indicates to the C program that the msgrcv() routine is available.
+?S:.
+?C:HAS_MSGRCV:
+?C: This symbol, if defined, indicates that the msgrcv() routine is
+?C: available to extract a message from the message queue.
+?C:.
+?H:#$d_msgrcv HAS_MSGRCV /**/
+?H:.
+?LINT:set d_msgrcv
+: see if msgrcv exists
+set msgrcv d_msgrcv
+eval $inlibc
+
diff --git a/mcon/U/d_msgsnd.U b/mcon/U/d_msgsnd.U
new file mode 100644
index 0000000..924d59a
--- /dev/null
+++ b/mcon/U/d_msgsnd.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_msgsnd.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:41 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_msgsnd: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_msgsnd:
+?S: This variable conditionally defines the HAS_MSGSND symbol, which
+?S: indicates to the C program that the msgsnd() routine is available.
+?S:.
+?C:HAS_MSGSND:
+?C: This symbol, if defined, indicates that the msgsnd() routine is
+?C: available to send a message into the message queue.
+?C:.
+?H:#$d_msgsnd HAS_MSGSND /**/
+?H:.
+?LINT:set d_msgsnd
+: see if msgsnd exists
+set msgsnd d_msgsnd
+eval $inlibc
+
diff --git a/mcon/U/d_msync.U b/mcon/U/d_msync.U
new file mode 100644
index 0000000..49db7e2
--- /dev/null
+++ b/mcon/U/d_msync.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_msync.U,v $
+?RCS: Revision 3.0.1.1 1993/12/15 08:19:17 ram
+?RCS: patch15: created
+?RCS:
+?MAKE:d_msync: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_msync:
+?S: This variable conditionally defines HAS_MSYNC if msync() is
+?S: available to synchronize a mapped file.
+?S:.
+?C:HAS_MSYNC:
+?C: This symbol, if defined, indicates that the msync system call is
+?C: available to synchronize a mapped file.
+?C:.
+?H:#$d_msync HAS_MSYNC /**/
+?H:.
+?LINT:set d_msync
+: see if msync exists
+set msync d_msync
+eval $inlibc
+
diff --git a/mcon/U/d_munmap.U b/mcon/U/d_munmap.U
new file mode 100644
index 0000000..d1cc5a0
--- /dev/null
+++ b/mcon/U/d_munmap.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_munmap.U,v $
+?RCS: Revision 3.0.1.1 1993/12/15 08:19:22 ram
+?RCS: patch15: created
+?RCS:
+?MAKE:d_munmap: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_munmap:
+?S: This variable conditionally defines HAS_MUNMAP if munmap() is
+?S: available to unmap a region mapped by mmap().
+?S:.
+?C:HAS_MUNMAP:
+?C: This symbol, if defined, indicates that the munmap system call is
+?C: available to unmap a region, usually mapped by mmap().
+?C:.
+?H:#$d_munmap HAS_MUNMAP /**/
+?H:.
+?LINT:set d_munmap
+: see if munmap exists
+set munmap d_munmap
+eval $inlibc
+
diff --git a/mcon/U/d_newsadm.U b/mcon/U/d_newsadm.U
new file mode 100644
index 0000000..cd13f41
--- /dev/null
+++ b/mcon/U/d_newsadm.U
@@ -0,0 +1,72 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_newsadm.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:36:53 ram
+?RCS: patch61: added Guess dependency
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:14:33 ram
+?RCS: patch36: call ./eunice explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_newsadm newsadmin: cat contains Guess Setvar Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:d_newsadm:
+?S: This variable conditionally defines the NEWS_ADMIN symbol, which
+?S: indicates to the C program that there is a user who is in charge
+?S: of news administration.
+?S:.
+?S:newsadmin:
+?S: This variable holds the login name of the news administrator, if any.
+?S:.
+?C:NEWS_ADMIN (NEWSADMIN):
+?C: This symbol, if defined, contains the login name of the news
+?C: administrator.
+?C:.
+?H:#$d_newsadm NEWS_ADMIN "$newsadmin" /**/
+?H:.
+?LINT:set d_newsadm
+: get news administrator name
+case "$newsadmin" in
+'')
+ if $contains "^news:" /etc/passwd >/dev/null 2>&1 ; then
+ dflt=news
+ elif $contains "^usenet:" /etc/passwd >/dev/null 2>&1 ; then
+ dflt=usenet
+ elif ./eunice; then
+ dflt=system
+ else
+ dflt=root
+ fi
+ ;;
+*)
+ dflt="$newsadmin"
+ ;;
+esac
+$cat <<'EOM'
+
+Many systems keep their news in a private directory, or have a non-superuser
+in charge of administering news. (If you don't have such a user, take the
+default answer.) I need the login name (not directory) which is used for
+news administration.
+
+EOM
+rp="News admin login?"
+. ./myread
+newsadmin="$ans"
+case "$newsadmin" in
+root) val="$undef" ;;
+*) val="$define" ;;
+esac
+set d_newsadm
+eval $setvar
+
diff --git a/mcon/U/d_nice.U b/mcon/U/d_nice.U
new file mode 100644
index 0000000..3ca22a6
--- /dev/null
+++ b/mcon/U/d_nice.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_nice.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:09:48 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_nice: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_nice:
+?S: This variable conditionally defines the HAS_NICE symbol, which
+?S: indicates to the C program that the nice() routine is available.
+?S:.
+?C:HAS_NICE :
+?C: This symbol, if defined, indicates that the nice routine is
+?C: available.
+?C:.
+?H:#$d_nice HAS_NICE /**/
+?H:.
+?LINT:set d_nice
+: see if nice exists
+set nice d_nice
+eval $inlibc
+
diff --git a/mcon/U/d_nolnbuf.U b/mcon/U/d_nolnbuf.U
new file mode 100644
index 0000000..9e63280
--- /dev/null
+++ b/mcon/U/d_nolnbuf.U
@@ -0,0 +1,99 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_nolnbuf.U,v $
+?RCS: Revision 3.0.1.1 1994/05/06 14:46:07 ram
+?RCS: patch23: avoid looping in the "see that again?" prompt (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:43 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_nolnbuf: test +cc cat rm Setvar Myread
+?MAKE: -pick add $@ %<
+?S:d_nolnbuf:
+?S: This variable conditionally defines the NOLINEBUF symbol, which
+?S: indicates to the C program that stdout is not buffered, so that
+?S: the program can call setbuf() or setlinebuf() for efficiency.
+?S:.
+?C:NOLINEBUF:
+?C: This symbol, if defined, indicates that stdout is not buffered, so that
+?C: the program can call setbuf() or setlinebuf() for efficiency.
+?C:.
+?H:#$d_nolnbuf NOLINEBUF /**/
+?H:.
+?T:xxx
+?F:!blurfl
+?LINT:set d_nolnbuf
+: check for buffering of stdout
+echo " "
+case "$d_nolnbuf" in
+'')
+ $cat <<'EOT' >blurfl.c
+#include <stdio.h>
+int main()
+{
+ int i;
+
+ for (i = 0; i < 5; i++) {
+ putchar(i+'a');
+ sleep(1);
+ }
+ putchar('\n');
+}
+EOT
+ $cc -o blurfl blurfl.c >/dev/null 2>&1;
+ $rm -f blurfl.c
+ $cat >&4 <<'EOM'
+Checking for buffering of stdout to terminal.
+
+Observe the following characters as they are printed out, to see whether they
+print out all at once, or with a 1 second pause between each of them. If they
+print out one by one, you don't have buffering. If they print together (after
+about a 5 second pause), you do have buffering.
+
+EOM
+ dflt='Type return to start printing the test characters'
+ rp=''
+ . ./myread
+ xxx=y
+ while $test "$xxx" = 'y'; do
+ ./blurfl 1>&4
+ dflt=n
+ rp='Would you like to see that again?'
+ . ./myread
+ case "$ans" in
+ [yY]*) xxx="y";;
+ *) xxx="n";;
+ esac
+ done
+ dflt=y
+ rp="Do you have buffering (printed all at once)?"
+ . ./myread
+ case "$ans" in
+ n*) val="$define";;
+ *) val="$undef";;
+ esac
+ ;;
+*)
+ case "$d_nolnbuf" in
+ "$define") dflt=n;;
+ *) dflt=y;;
+ esac
+ rp="Do you have buffering on stdout to terminals?"
+ . ./myread
+ case "$ans" in
+ n*) val="$define";;
+ *) val="$undef";;
+ esac
+ ;;
+esac
+set d_nolnbuf
+eval $setvar
+
diff --git a/mcon/U/d_normsig.U b/mcon/U/d_normsig.U
new file mode 100644
index 0000000..ae3c7e5
--- /dev/null
+++ b/mcon/U/d_normsig.U
@@ -0,0 +1,57 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_normsig.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:37:03 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:14:48 ram
+?RCS: patch36: call ./bsd explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:44 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_normsig jobslib: test Setvar Guess _a
+?MAKE: -pick add $@ %<
+?S:d_normsig:
+?S: This variable conditionally defines the NORMSIG symbol, which
+?S: indicates to the C program that the normal signal handling routines
+?S: should be used, as opposed to the ones in 4.1bsd (sigset, etc.).
+?S:.
+?S:jobslib:
+?S: This variable holds the argument to be passed to the loader to include
+?S: the strange signal handling routines from 4.1bsd. On systems that
+?S: have NORMSIG defined this variable is null.
+?S:.
+?C:NORMSIG:
+?C: This symbol, if defined, indicates that normal signal handling routines
+?C: should be used, as opposed to the ones in 4.1bsd (sigset, etc.).
+?C:.
+?H:#$d_normsig NORMSIG /**/
+?H:.
+?LINT:set d_normsig
+: see if we need -ljobs and if we have sigset, etc.
+echo " "
+if $test -r /usr/lib/libjobs$_a || $test -r /usr/local/lib/libjobs$_a ; then
+ echo "Jobs library found." >&4
+ val="$undef"
+ jobslib='-ljobs'
+else
+ if ./bsd; then
+ echo "No jobs library found. (I suppose this is at least 4.2...)" >&4
+ else
+ echo "No jobs library found. (That's okay, we all have our faults.)" >&4
+ fi
+ val="$define"
+ jobslib=''
+fi
+set d_normsig
+eval $setvar
+
diff --git a/mcon/U/d_open3.U b/mcon/U/d_open3.U
new file mode 100644
index 0000000..4d24d51
--- /dev/null
+++ b/mcon/U/d_open3.U
@@ -0,0 +1,90 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_open3.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:37:12 ram
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.1 1995/07/25 13:58:26 ram
+?RCS: patch56: added knowledge of the O_NONBLOCK symbol
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:44 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_open3: test +cc cat +cppflags h_fcntl h_sysfile rm Setvar Findhdr Warn
+?MAKE: -pick add $@ %<
+?X: It would be easy to separate the h_O_stuff from this.
+?X: Is there a reason to do so? -- HMS
+?S:d_open3:
+?S: This variable conditionally defines the HAS_OPEN3 manifest constant,
+?S: which indicates to the C program that the 3 argument version of
+?S: the open(2) function is available.
+?S:.
+?C:HAS_OPEN3 (OPEN3):
+?C: This manifest constant lets the C program know that the three
+?C: argument form of open(2) is available.
+?C:.
+?H:#$d_open3 HAS_OPEN3 /**/
+?H:.
+?W:%<:O_RDONLY O_WRONLY O_RDWR O_NDELAY O_APPEND O_SYNC O_CREAT O_TRUNC
+?W:%<:O_EXCL O_NONBLOCK
+?F:!open3
+?LINT:set d_open3
+?LINT:change h_fcntl h_sysfile
+: Locate the flags for 'open()'
+echo " "
+$cat >open3.c <<'EOCP'
+#include <sys/types.h>
+#ifdef I_FCNTL
+#include <fcntl.h>
+#endif
+#ifdef I_SYS_FILE
+#include <sys/file.h>
+#endif
+int main() {
+ if(O_RDONLY);
+#ifdef O_TRUNC
+ exit(0);
+#else
+ exit(1);
+#endif
+}
+EOCP
+: check sys/file.h first to get FREAD on Sun
+if $test `./findhdr sys/file.h` && \
+ $cc $cppflags "-DI_SYS_FILE" -o open3 open3.c >/dev/null 2>&1 ; then
+ h_sysfile=true;
+ echo "<sys/file.h> defines the O_* constants..." >&4
+ if ./open3; then
+ echo "and you have the 3 argument form of open()." >&4
+ val="$define"
+ else
+ echo "but not the 3 argument form of open(). Oh, well." >&4
+ val="$undef"
+ fi
+elif $test `./findhdr fcntl.h` && \
+ $cc "-DI_FCNTL" -o open3 open3.c >/dev/null 2>&1 ; then
+ h_fcntl=true;
+ echo "<fcntl.h> defines the O_* constants..." >&4
+ if ./open3; then
+ echo "and you have the 3 argument form of open()." >&4
+ val="$define"
+ else
+ echo "but not the 3 argument form of open(). Oh, well." >&4
+ val="$undef"
+ fi
+else
+ val="$undef"
+ ./warn "I can't find the O_* constant definitions! You got problems."
+fi
+set d_open3
+eval $setvar
+$rm -f open3*
+
diff --git a/mcon/U/d_passwd.U b/mcon/U/d_passwd.U
new file mode 100644
index 0000000..2504e6c
--- /dev/null
+++ b/mcon/U/d_passwd.U
@@ -0,0 +1,23 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_passwd.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:37:21 ram
+?RCS: patch61: useless unit dropped.
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:09:51 ram
+?RCS: patch32: created by ADO
+?RCS:
+?X:
+?X: Useless unit dropped.
+?X:
+?LINT:empty
diff --git a/mcon/U/d_pathconf.U b/mcon/U/d_pathconf.U
new file mode 100644
index 0000000..b39ccb5
--- /dev/null
+++ b/mcon/U/d_pathconf.U
@@ -0,0 +1,55 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_pathconf.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:14:54 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_pathconf d_fpathconf: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_pathconf:
+?S: This variable conditionally defines the HAS_PATHCONF symbol, which
+?S: indicates to the C program that the pathconf() routine is available
+?S: to determine file-system related limits and options associated
+?S: with a given filename.
+?S:.
+?S:d_fpathconf:
+?S: This variable conditionally defines the HAS_FPATHCONF symbol, which
+?S: indicates to the C program that the pathconf() routine is available
+?S: to determine file-system related limits and options associated
+?S: with a given open file descriptor.
+?S:.
+?C:HAS_PATHCONF:
+?C: This symbol, if defined, indicates that pathconf() is available
+?C: to determine file-system related limits and options associated
+?C: with a given filename.
+?C:.
+?C:HAS_FPATHCONF:
+?C: This symbol, if defined, indicates that pathconf() is available
+?C: to determine file-system related limits and options associated
+?C: with a given open file descriptor.
+?C:.
+?H:#$d_pathconf HAS_PATHCONF /**/
+?H:#$d_fpathconf HAS_FPATHCONF /**/
+?H:.
+?LINT:set d_pathconf
+?LINT:set d_fpathconf
+: see if pathconf exists
+set pathconf d_pathconf
+eval $inlibc
+
+@if d_fpathconf || HAS_FPATHCONF
+: see if fpathconf exists
+set fpathconf d_fpathconf
+eval $inlibc
+
+@end
diff --git a/mcon/U/d_pause.U b/mcon/U/d_pause.U
new file mode 100644
index 0000000..f161b4f
--- /dev/null
+++ b/mcon/U/d_pause.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_pause.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:09:54 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_pause: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_pause:
+?S: This variable conditionally defines the HAS_PAUSE symbol, which
+?S: indicates to the C program that the pause() routine is available
+?S: to suspend a process until a signal is received.
+?S:.
+?C:HAS_PAUSE :
+?C: This symbol, if defined, indicates that the pause routine is
+?C: available to suspend a process until a signal is received.
+?C:.
+?H:#$d_pause HAS_PAUSE /**/
+?H:.
+?LINT:set d_pause
+: see if pause exists
+set pause d_pause
+eval $inlibc
+
diff --git a/mcon/U/d_perror.U b/mcon/U/d_perror.U
new file mode 100644
index 0000000..56df478
--- /dev/null
+++ b/mcon/U/d_perror.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_perror.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:11:38 ram
+?RCS: patch32: always define HAS_PERROR even when not used in C code
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:45 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_perror: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_perror:
+?S: This variable conditionally remaps perror to a null action and
+?S: defines the symbol HAS_PERROR, which indicates to the C program
+?S: that the perror() routine is not available to print system
+?S: error messages.
+?S:.
+?C:HAS_PERROR ~ %<:
+?C: This symbol, if defined, indicates that the perror() routine is
+?C: available to print system error messages. If not defined, you should
+?C: use your own diagnostic routine...
+?C:.
+?C:perror ~ %<:
+?C: This symbol is maped to null if the perror() routine is not
+?C: available to print system error messages.
+?C:.
+?H:?%<:#$d_perror HAS_PERROR /**/
+?H:?%<:#ifndef HAS_PERROR
+?H:?%<:#define perror(s) ; /* mapped to a null statement */
+?H:?%<:#endif
+?H:.
+?LINT:set d_perror
+: see if perror exists
+set perror d_perror
+eval $inlibc
+
diff --git a/mcon/U/d_pidcheck.U b/mcon/U/d_pidcheck.U
new file mode 100644
index 0000000..6744334
--- /dev/null
+++ b/mcon/U/d_pidcheck.U
@@ -0,0 +1,75 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_pidcheck.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:37:55 ram
+?RCS: patch61: replaced .o with $_o all over the place
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:46 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_pidcheck: cat rm +cc _o
+?MAKE: -pick add $@ %<
+?S:d_pidcheck:
+?S: This variable conditionally defines the variable PIDCHECK
+?S: which indicates that kill(pid, 0) will check for an active pid.
+?S:.
+?C:PIDCHECK:
+?C: This symbol, if defined, means that the kill(pid, 0) will
+?C: check for an active pid (i.e. the kernel will run all the
+?C: necessary pid checks, but no signal is actually sent).
+?C:.
+?H:#$d_pidcheck PIDCHECK /**/
+?H:.
+?F:!try
+: check for "kill(pid, 0)"
+echo " "
+case "$d_pidcheck" in
+"$define")
+echo "I already know your system supports kill(pid, 0) for pid checks." >&4
+ ;;
+"$undef")
+echo "We both know your system does not support signal #0 for pid checks." >&4
+ ;;
+*)
+ echo "Checking to see if kill(pid, 0) works..." >&4
+ $cat >try.c <<'EOCP'
+int main()
+ {
+ int pid, status0, status9;
+
+ if ((pid = fork()) == 0)
+ {
+ sleep(30);
+ exit(1);
+ }
+ status0 = kill(pid, 0);
+ status9 = kill(pid, 9);
+ exit(status0 == status9);
+ }
+EOCP
+ if $cc -o try try.c >/dev/null 2>&1 ; then
+ if ./try >/dev/null 2>&1 ; then
+ echo "Yes, it does marvels."
+ d_pidcheck="$undef"
+ else
+ d_pidcheck="$define"
+ echo "No, it doesn't."
+ fi
+ else
+ echo "(I was unable to compile the test program.)"
+ echo "Your system does not appear to support kill(pid, 0)."
+ d_pidcheck="$undef"
+ fi
+ $rm -f try.c try$_o try
+ ;;
+esac
+
diff --git a/mcon/U/d_pipe.U b/mcon/U/d_pipe.U
new file mode 100644
index 0000000..e139dd0
--- /dev/null
+++ b/mcon/U/d_pipe.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_pipe.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:11:44 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_pipe: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_pipe:
+?S: This variable conditionally defines the HAS_PIPE symbol, which
+?S: indicates to the C program that the pipe() routine is available
+?S: to create an inter-process channel.
+?S:.
+?C:HAS_PIPE :
+?C: This symbol, if defined, indicates that the pipe routine is
+?C: available to create an inter-process channel.
+?C:.
+?H:#$d_pipe HAS_PIPE /**/
+?H:.
+?LINT:set d_pipe
+: see if pipe exists
+set pipe d_pipe
+eval $inlibc
+
diff --git a/mcon/U/d_poll.U b/mcon/U/d_poll.U
new file mode 100644
index 0000000..f07ef0e
--- /dev/null
+++ b/mcon/U/d_poll.U
@@ -0,0 +1,36 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_poll.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:38:17 ram
+?RCS: patch61: mention that <poll.h> can be included if HAS_POLL defined
+?RCS:
+?RCS: Revision 3.0.1.1 1995/01/11 15:26:31 ram
+?RCS: patch45: created
+?RCS:
+?MAKE:d_poll: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_poll:
+?S: This variable conditionally defines the HAS_POLL symbol, which
+?S: indicates to the C program that the poll() routine is available
+?S: to poll active file descriptors.
+?S:.
+?C:HAS_POLL :
+?C: This symbol, if defined, indicates that the poll routine is
+?C: available to poll active file descriptors. You may safely
+?C: include <poll.h> when this symbol is defined.
+?C:.
+?H:#$d_poll HAS_POLL /**/
+?H:.
+?LINT:set d_poll
+: see if poll exists
+set poll d_poll
+eval $inlibc
+
diff --git a/mcon/U/d_popen.U b/mcon/U/d_popen.U
new file mode 100644
index 0000000..73d5d43
--- /dev/null
+++ b/mcon/U/d_popen.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_popen.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:47 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_popen: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_popen:
+?S: This variable conditionally defines HAS_POPEN if popen() is
+?S: available to open a pipe from a process.
+?S:.
+?C:HAS_POPEN (POPEN):
+?C: This symbol, if defined, indicates that the popen routine is
+?C: available to open a pipe from a process.
+?C:.
+?H:#$d_popen HAS_POPEN /**/
+?H:.
+?LINT:set d_popen
+: see if popen exists
+set popen d_popen
+eval $inlibc
+
diff --git a/mcon/U/d_portable.U b/mcon/U/d_portable.U
new file mode 100644
index 0000000..36389b4
--- /dev/null
+++ b/mcon/U/d_portable.U
@@ -0,0 +1,71 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_portable.U,v $
+?RCS: Revision 3.0.1.2 1995/01/11 15:28:52 ram
+?RCS: patch45: executable path stripping moved to the end in Config_sh.U
+?RCS:
+?RCS: Revision 3.0.1.1 1993/12/15 08:21:17 ram
+?RCS: patch15: did not strip variables properly when needed
+?RCS: patch15: now also strips down variables from trylist
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:48 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: The Loc unit is wanted to get the definition of all the locating variables.
+?X:
+?MAKE:d_portable: cat Loc Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:d_portable:
+?S: This variable conditionally defines the PORTABLE symbol, which
+?S: indicates to the C program that it should not assume that it is
+?S: running on the machine it was compiled on.
+?S:.
+?C:PORTABLE:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: not assume that it is running on the machine it was compiled on.
+?C: The program should be prepared to look up the host name, translate
+?C: generic filenames, use PATH, etc.
+?C:.
+?H:#$d_portable PORTABLE /**/
+?H:.
+?D:d_portable=''
+: decide how portable to be
+case "$d_portable" in
+"$define") dflt=y;;
+*) dflt=n;;
+esac
+$cat <<'EOH'
+
+I can set things up so that your shell scripts and binaries are more portable,
+at what may be a noticable cost in performance. In particular, if you
+ask to be portable, the following happens:
+
+ 1) Shell scripts will rely on the PATH variable rather than using
+ the paths derived above.
+ 2) ~username interpretations will be done at run time rather than
+ by Configure.
+@if PHOSTNAME
+ 3) The system name will be determined at run time, if at all possible.
+@end
+
+EOH
+rp="Do you expect to run these scripts and binaries on multiple machines?"
+. ./myread
+case "$ans" in
+ y*) d_portable="$define"
+?X:
+?X: Paths will be stripped down (/usr/bin/vi -> vi) in Config_sh.U if needed.
+?X:
+ ;;
+ *) d_portable="$undef" ;;
+esac
+
diff --git a/mcon/U/d_pread.U b/mcon/U/d_pread.U
new file mode 100644
index 0000000..6f55bb6
--- /dev/null
+++ b/mcon/U/d_pread.U
@@ -0,0 +1,29 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_pread.U,v $
+?RCS:
+?MAKE:d_pread: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_pread:
+?S: This variable conditionally defines the HAS_PREAD symbol, which
+?S: indicates to the C program that the pread() routine is available.
+?S:.
+?C:HAS_PREAD :
+?C: This symbol, if defined, indicates that the pread routine is
+?C: available to perform reads on a file descriptor at a given offset.
+?C:.
+?H:#$d_pread HAS_PREAD /**/
+?H:.
+?LINT:set d_pread
+: see if pread exists
+set pread d_pread
+eval $inlibc
+
diff --git a/mcon/U/d_preadv.U b/mcon/U/d_preadv.U
new file mode 100644
index 0000000..f0ee540
--- /dev/null
+++ b/mcon/U/d_preadv.U
@@ -0,0 +1,30 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_preadv.U,v $
+?RCS:
+?MAKE:d_preadv: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_preadv:
+?S: This variable conditionally defines the HAS_PREADV symbol, which
+?S: indicates to the C program that the preadv() routine is available.
+?S:.
+?C:HAS_PREADV :
+?C: This symbol, if defined, indicates that the preadv routine is
+?C: available to perform vectored reads on a file descriptor at a
+?C: given offset.
+?C:.
+?H:#$d_preadv HAS_PREADV /**/
+?H:.
+?LINT:set d_preadv
+: see if preadv exists
+set preadv d_preadv
+eval $inlibc
+
diff --git a/mcon/U/d_psignal.U b/mcon/U/d_psignal.U
new file mode 100644
index 0000000..b6bbdc5
--- /dev/null
+++ b/mcon/U/d_psignal.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_psignal.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:49 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_psignal: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_psignal:
+?S: This variable conditionally defines the HAS_PSIGNAL symbol, which
+?S: indicates that the psignal() routine exists. The psignal() routine
+?S: prints a description of a signal on the standard error output.
+?S:.
+?C:HAS_PSIGNAL (PSIGNAL):
+?C: This symbol, if defined, indicates that the psignal() routine exists.
+?C:.
+?H:#$d_psignal HAS_PSIGNAL /**/
+?H:.
+?LINT:set d_psignal
+: see if psignal exists
+set psignal d_psignal
+eval $inlibc
+
diff --git a/mcon/U/d_pwrite.U b/mcon/U/d_pwrite.U
new file mode 100644
index 0000000..f72fe58
--- /dev/null
+++ b/mcon/U/d_pwrite.U
@@ -0,0 +1,29 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_pwrite.U,v $
+?RCS:
+?MAKE:d_pwrite: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_pwrite:
+?S: This variable conditionally defines the HAS_PWRITE symbol, which
+?S: indicates to the C program that the pwrite() routine is available.
+?S:.
+?C:HAS_PWRITE :
+?C: This symbol, if defined, indicates that the pwrite routine is
+?C: available to perform writes on a file descriptor at a given offset.
+?C:.
+?H:#$d_pwrite HAS_PWRITE /**/
+?H:.
+?LINT:set d_pwrite
+: see if pwrite exists
+set pwrite d_pwrite
+eval $inlibc
+
diff --git a/mcon/U/d_pwritev.U b/mcon/U/d_pwritev.U
new file mode 100644
index 0000000..15e96dc
--- /dev/null
+++ b/mcon/U/d_pwritev.U
@@ -0,0 +1,30 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_pwritev.U,v $
+?RCS:
+?MAKE:d_pwritev: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_pwritev:
+?S: This variable conditionally defines the HAS_PWRITEV symbol, which
+?S: indicates to the C program that the pwritev() routine is available.
+?S:.
+?C:HAS_PWRITEV :
+?C: This symbol, if defined, indicates that the pwritev routine is
+?C: available to perform vectored writes on a file descriptor at a
+?C: given offset.
+?C:.
+?H:#$d_pwritev HAS_PWRITEV /**/
+?H:.
+?LINT:set d_pwritev
+: see if pwritev exists
+set pwritev d_pwritev
+eval $inlibc
+
diff --git a/mcon/U/d_raster.U b/mcon/U/d_raster.U
new file mode 100644
index 0000000..7159de7
--- /dev/null
+++ b/mcon/U/d_raster.U
@@ -0,0 +1,57 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_raster.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_raster rasterlib: cat test Setvar Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:d_raster:
+?S: Conditionally defines RASTER_TEK if this is a raster tech machine.
+?S:.
+?S:rasterlib (d_rasterlib):
+?S: Set to the needed compile flag if this is a raster tech machine.
+?S: It is up to the Makefile to use this variable.
+?S:.
+?C:RASTER_TEK:
+?C: Defined if this is a rastertech machine.
+?C:.
+?H:#$d_raster RASTER_TEK /**/
+?H:.
+?LINT:set d_raster
+: See if this is a raster tech machine.
+val="$undef"
+rasterlib=''
+if $test -r /dev/mirage; then
+ $cat <<'EOM'
+
+You seem to have a mirage device... this is normally associated with a raster
+technologies graphics workstation. If this is right, you may want to use raster
+tech in this program.
+
+EOM
+ dflt=y
+ case "$d_raster" in
+ "$undef") dflt=n;;
+ esac
+ rp='Use raster tech?'
+ . ./myread
+ case "$ans" in
+ y*) val="$define";;
+ esac
+fi
+set d_raster
+eval $setvar
+
+case "$d_raster" in
+"$define") rasterlib='-lphigs';;
+esac
+
diff --git a/mcon/U/d_rdchk.U b/mcon/U/d_rdchk.U
new file mode 100644
index 0000000..0d45342
--- /dev/null
+++ b/mcon/U/d_rdchk.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_rdchk.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:51 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_rdchk: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_rdchk:
+?S: This variable conditionally defines the HAS_RDCHK symbol, which
+?S: indicates to the C program that the rdchk() routine is available
+?S: to find out if there is input pending on an IO channel.
+?S:.
+?C:HAS_RDCHK (RDCHK):
+?C: This symbol, if defined, indicates that the rdchk routine is available
+?C: to find out if there is input pending on an IO channel. Generally
+?C: the routine is used only if FIONREAD and O_NDELAY aren't available.
+?C:.
+?H:#$d_rdchk HAS_RDCHK /**/
+?H:.
+?LINT:set d_rdchk
+: see if rdchk exists
+set rdchk d_rdchk
+eval $inlibc
+
diff --git a/mcon/U/d_readdir.U b/mcon/U/d_readdir.U
new file mode 100644
index 0000000..3b2b484
--- /dev/null
+++ b/mcon/U/d_readdir.U
@@ -0,0 +1,79 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_readdir.U,v $
+?RCS: Revision 3.0.1.1 1994/05/06 14:46:37 ram
+?RCS: patch23: added support for seekdir, telldir and rewinddir (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:52 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X: Force checking for <dirent.h> inclusion
+?X:INC: i_dirent
+?MAKE:d_readdir d_seekdir d_telldir d_rewinddir: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_readdir:
+?S: This variable conditionally defines HAS_READDIR if readdir() is
+?S: available to read directory entries.
+?S:.
+?C:HAS_READDIR (READDIR):
+?C: This symbol, if defined, indicates that the readdir routine is
+?C: available to read directory entries. You may have to include
+?C: <dirent.h>. See I_DIRENT.
+?C:.
+?H:#$d_readdir HAS_READDIR /**/
+?H:.
+?S:d_seekdir:
+?S: This variable conditionally defines HAS_SEEKDIR if seekdir() is
+?S: available.
+?S:.
+?C:HAS_SEEKDIR:
+?C: This symbol, if defined, indicates that the seekdir routine is
+?C: available. You may have to include <dirent.h>. See I_DIRENT.
+?C:.
+?H:#$d_seekdir HAS_SEEKDIR /**/
+?H:.
+?S:d_telldir:
+?S: This variable conditionally defines HAS_TELLDIR if telldir() is
+?S: available.
+?S:.
+?C:HAS_TELLDIR:
+?C: This symbol, if defined, indicates that the telldir routine is
+?C: available. You may have to include <dirent.h>. See I_DIRENT.
+?C:.
+?H:#$d_telldir HAS_TELLDIR /**/
+?H:.
+?S:d_rewinddir:
+?S: This variable conditionally defines HAS_REWINDDIR if rewinddir() is
+?S: available.
+?S:.
+?C:HAS_REWINDDIR:
+?C: This symbol, if defined, indicates that the rewinddir routine is
+?C: available. You may have to include <dirent.h>. See I_DIRENT.
+?C:.
+?H:#$d_rewinddir HAS_REWINDDIR /**/
+?H:.
+?LINT:set d_readdir d_seekdir d_telldir d_rewinddir
+: see if readdir and friends exist
+set readdir d_readdir
+eval $inlibc
+@if d_seekdir || HAS_SEEKDIR
+set seekdir d_seekdir
+eval $inlibc
+@end
+@if d_telldir || HAS_TELLDIR
+set telldir d_telldir
+eval $inlibc
+@end
+@if d_rewinddir || HAS_REWINDDIR
+set rewinddir d_rewinddir
+eval $inlibc
+@end
+
diff --git a/mcon/U/d_readlink.U b/mcon/U/d_readlink.U
new file mode 100644
index 0000000..ed6f06a
--- /dev/null
+++ b/mcon/U/d_readlink.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_readlink.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:11:52 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_readlink: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_readlink:
+?S: This variable conditionally defines the HAS_READLINK symbol, which
+?S: indicates to the C program that the readlink() routine is available
+?S: to read the value of a symbolic link.
+?S:.
+?C:HAS_READLINK :
+?C: This symbol, if defined, indicates that the readlink routine is
+?C: available to read the value of a symbolic link.
+?C:.
+?H:#$d_readlink HAS_READLINK /**/
+?H:.
+?LINT:set d_readlink
+: see if readlink exists
+set readlink d_readlink
+eval $inlibc
+
diff --git a/mcon/U/d_regcmp.U b/mcon/U/d_regcmp.U
new file mode 100644
index 0000000..50fe24c
--- /dev/null
+++ b/mcon/U/d_regcmp.U
@@ -0,0 +1,80 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_regcmp.U,v $
+?RCS: Revision 3.0.1.1 1995/01/30 14:34:45 ram
+?RCS: patch49: now looks for POSIX regcomp() routine
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:53 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_regcmp d_re_comp d_regcomp: Csym cat
+?MAKE: -pick add $@ %<
+?S:d_regcomp:
+?S: This variable conditionally defines the HAS_REGCOMP symbol, which
+?S: indicates to the C program that the regcomp() routine is available
+?S: for regular patern matching (usally on POSIX.2 conforming systems).
+?S:.
+?S:d_regcmp:
+?S: This variable conditionally defines the HAS_REGCMP symbol, which
+?S: indicates to the C program that the regcmp() routine is available
+?S: for regular patern matching (usally on System V).
+?S:.
+?S:d_re_comp:
+?S: This variable conditionally defines the HAS_RECOMP symbol, which
+?S: indicates to the C program that the re_comp() routine is available
+?S: for regular patern matching (usally on BSD). If so, it is likely that
+?S: re_exec() exists.
+?S:.
+?C:HAS_REGCOMP (REGCOMP):
+?C: This symbol, if defined, indicates that the regcomp() routine is
+?C: available to do some regular patern matching (usually on POSIX.2
+?C: conforming systems).
+?C:.
+?C:HAS_REGCMP (REGCMP):
+?C: This symbol, if defined, indicates that the regcmp() routine is
+?C: available to do some regular patern matching (usually on System V).
+?C:.
+?C:HAS_RECOMP (RECOMP):
+?C: This symbol, if defined, indicates that the re_comp() routine is
+?C: available to do some regular patern matching (usually on BSD). If so,
+?C: it is likely that re_exec() be available.
+?C:.
+?H:#$d_regcomp HAS_REGCOMP /* POSIX.2 */
+?H:#$d_regcmp HAS_REGCMP /* sysV */
+?H:#$d_re_comp HAS_RECOMP /* BSD */
+?H:.
+?T:val
+: see if regcomp, regcmp, or re_comp exist, for regular pattern matching
+echo " "
+if set regcomp val -f d_regcomp; eval $csym; $val; then
+ echo 'regcomp() found.' >&4
+ d_regcomp="$define"
+ d_regcmp="$undef"
+ d_re_comp="$undef"
+elif set regcmp val -f d_regcmp; eval $csym; $val; then
+ echo 'regcmp() found.' >&4
+ d_regcmp="$define"
+ d_regcomp="$undef"
+ d_re_comp="$undef"
+elif set re_comp val -f d_re_comp; eval $csym; $val; then
+ echo 're_comp() found, assuming re_exec() also exists.' >&4
+ d_re_comp="$define"
+ d_regcomp="$undef"
+ d_regcmp="$undef"
+else
+ $cat >&4 <<EOM
+No regcomp(), regcmp() nor re_comp() found !! No regular pattern matching.
+EOM
+ d_regcmp="$undef"
+ d_re_comp="$undef"
+ d_regcomp="$undef"
+fi
+
diff --git a/mcon/U/d_rename.U b/mcon/U/d_rename.U
new file mode 100644
index 0000000..20b3305
--- /dev/null
+++ b/mcon/U/d_rename.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_rename.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:54 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_rename: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_rename:
+?S: This variable conditionally defines the HAS_RENAME symbol, which
+?S: indicates to the C program that the rename() routine is available
+?S: to rename files.
+?S:.
+?C:HAS_RENAME (RENAME):
+?C: This symbol, if defined, indicates that the rename routine is available
+?C: to rename files. Otherwise you should do the unlink(), link(), unlink()
+?C: trick.
+?C:.
+?H:#$d_rename HAS_RENAME /**/
+?H:.
+?LINT:set d_rename
+: see if rename exists
+set rename d_rename
+eval $inlibc
+
diff --git a/mcon/U/d_rmdir.U b/mcon/U/d_rmdir.U
new file mode 100644
index 0000000..078a6a0
--- /dev/null
+++ b/mcon/U/d_rmdir.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_rmdir.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_rmdir: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_rmdir:
+?S: This variable conditionally defines HAS_RMDIR if rmdir() is
+?S: available to remove directories.
+?S:.
+?C:HAS_RMDIR (RMDIR):
+?C: This symbol, if defined, indicates that the rmdir routine is
+?C: available to remove directories. Otherwise you should fork off a
+?C: new process to exec /bin/rmdir.
+?C:.
+?H:#$d_rmdir HAS_RMDIR /**/
+?H:.
+?LINT:set d_rmdir
+: see if rmdir exists
+set rmdir d_rmdir
+eval $inlibc
+
diff --git a/mcon/U/d_rusage.U b/mcon/U/d_rusage.U
new file mode 100644
index 0000000..a2d1c33
--- /dev/null
+++ b/mcon/U/d_rusage.U
@@ -0,0 +1,36 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_rusage.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:57 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X: We may need to include <sys/resource.h> and <sys/time.h> FIXME
+?X:INC: i_sysresrc i_systime
+?MAKE:d_rusage: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_rusage (d_getrusg):
+?S: This variable conditionally defines the HAS_GETRUSAGE symbol, which
+?S: indicates that the getrusage() routine exists. The getrusage() routine
+?S: supports sub-second accuracy for process cpu accounting. You may need
+?S: to include <sys/resource.h> and <sys/time.h>.
+?S:.
+?C:HAS_GETRUSAGE (RUSAGE GETRUSAGE):
+?C: This symbol, if defined, indicates that the getrusage() routine is
+?C: available to get process statistics with a sub-second accuracy.
+?C: Inclusion of <sys/resource.h> and <sys/time.h> may be necessary.
+?C:.
+?H:#$d_rusage HAS_GETRUSAGE /**/
+?H:.
+?LINT:set d_rusage
+: see if getrusage exists
+set getrusage d_rusage
+eval $inlibc
+
diff --git a/mcon/U/d_safebcpy.U b/mcon/U/d_safebcpy.U
new file mode 100644
index 0000000..f30aff7
--- /dev/null
+++ b/mcon/U/d_safebcpy.U
@@ -0,0 +1,124 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_safebcpy.U,v $
+?RCS: Revision 3.0.1.4 1997/02/28 15:40:58 ram
+?RCS: patch61: improved overlapping copy check
+?RCS: patch61: comfort them if they have memmove
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.3 1995/07/25 13:58:40 ram
+?RCS: patch56: re-arranged compile line to include ldflags before objects
+?RCS:
+?RCS: Revision 3.0.1.2 1995/01/11 15:29:23 ram
+?RCS: patch45: added 'ldflags' to the test compile line (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:49:03 ram
+?RCS: patch23: ensure string is not optimized in read-only memory (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:58 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_safebcpy: cat d_bcopy +cc +optimize +ccflags +ldflags +libs rm \
+ d_memmove i_memory i_stdlib i_string i_unistd Oldconfig Setvar
+?MAKE: -pick add $@ %<
+?S:d_safebcpy:
+?S: This variable conditionally defines the HAS_SAFE_BCOPY symbol if
+?S: the bcopy() routine can do overlapping copies.
+?S:.
+?C:HAS_SAFE_BCOPY (SAFE_BCOPY):
+?C: This symbol, if defined, indicates that the bcopy routine is available
+?C: to copy potentially overlapping memory blocks. Otherwise you should
+?C: probably use memmove() or memcpy(). If neither is defined, roll your
+?C: own version.
+?C:.
+?H:#$d_safebcpy HAS_SAFE_BCOPY /**/
+?H:.
+?F:!safebcpy
+?LINT: set d_safebcpy
+: can bcopy handle overlapping blocks?
+?X: assume the worst
+val="$undef"
+case "$d_bcopy" in
+"$define")
+ echo " "
+ echo "Checking to see if your bcopy() can do overlapping copies..." >&4
+ $cat >foo.c <<EOCP
+#$i_memory I_MEMORY
+#$i_stdlib I_STDLIB
+#$i_string I_STRING
+#$i_unistd I_UNISTD
+EOCP
+ $cat >>foo.c <<'EOCP'
+#include <stdio.h>
+#ifdef I_MEMORY
+# include <memory.h>
+#endif
+#ifdef I_STDLIB
+# include <stdlib.h>
+#endif
+#ifdef I_STRING
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#ifdef I_UNISTD
+# include <unistd.h> /* Needed for NetBSD */
+#endif
+int main()
+{
+char buf[128], abc[128];
+char *b;
+int len;
+int off;
+int align;
+
+?X: Copy "abcde..." string to char abc[] so that gcc doesn't
+?X: try to store the string in read-only memory.
+bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
+
+for (align = 7; align >= 0; align--) {
+ for (len = 36; len; len--) {
+ b = buf+align;
+ bcopy(abc, b, len);
+ for (off = 1; off <= len; off++) {
+ bcopy(b, b+off, len);
+ bcopy(b+off, b, len);
+ if (bcmp(b, abc, len))
+ exit(1);
+ }
+ }
+}
+exit(0);
+}
+EOCP
+ if $cc $optimize $ccflags $ldflags \
+ -o safebcpy foo.c $libs >/dev/null 2>&1; then
+ if ./safebcpy 2>/dev/null; then
+ echo "Yes, it can."
+ val="$define"
+ else
+ echo "It can't, sorry."
+ case "$d_memmove" in
+ "$define") echo "But that's Ok since you have memmove()." ;;
+ esac
+ fi
+ else
+ echo "(I can't compile the test program, so we'll assume not...)"
+ case "$d_memmove" in
+ "$define") echo "But that's Ok since you have memmove()." ;;
+ esac
+ fi
+ ;;
+esac
+$rm -f foo.* safebcpy core
+set d_safebcpy
+eval $setvar
+
diff --git a/mcon/U/d_safemcpy.U b/mcon/U/d_safemcpy.U
new file mode 100644
index 0000000..d59475b
--- /dev/null
+++ b/mcon/U/d_safemcpy.U
@@ -0,0 +1,127 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_safemcpy.U,v $
+?RCS: Revision 3.0.1.5 1997/02/28 15:41:12 ram
+?RCS: patch61: improved overlapping copy check
+?RCS: patch61: comfort them if they have memmove
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.4 1995/07/25 13:58:46 ram
+?RCS: patch56: re-arranged compile line to include ldflags before objects
+?RCS:
+?RCS: Revision 3.0.1.3 1995/03/21 08:47:26 ram
+?RCS: patch52: swapped two first arguments of memcpy() calls
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:15:10 ram
+?RCS: patch36: added 'ldflags' to the test compile line (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:53:12 ram
+?RCS: patch23: ensure string is not optimized in read-only memory (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:58 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_safemcpy: cat d_memcpy +cc +optimize +ccflags +libs +ldflags rm \
+ d_memmove i_memory i_stdlib i_string i_unistd Oldconfig Setvar
+?MAKE: -pick add $@ %<
+?S:d_safemcpy:
+?S: This variable conditionally defines the HAS_SAFE_MEMCPY symbol if
+?S: the memcpy() routine can do overlapping copies.
+?S:.
+?C:HAS_SAFE_MEMCPY (SAFE_MEMCPY):
+?C: This symbol, if defined, indicates that the memcpy routine is available
+?C: to copy potentially overlapping memory blocks. Otherwise you should
+?C: probably use memmove() or memcpy(). If neither is defined, roll your
+?C: own version.
+?C:.
+?H:#$d_safemcpy HAS_SAFE_MEMCPY /**/
+?H:.
+?F:!safemcpy
+?LINT: set d_safemcpy
+: can memcpy handle overlapping blocks?
+?X: assume the worst
+val="$undef"
+case "$d_memcpy" in
+"$define")
+ echo " "
+ echo "Checking to see if your memcpy() can do overlapping copies..." >&4
+ $cat >foo.c <<EOCP
+#$i_memory I_MEMORY
+#$i_stdlib I_STDLIB
+#$i_string I_STRING
+#$i_unistd I_UNISTD
+EOCP
+ $cat >>foo.c <<'EOCP'
+#include <stdio.h>
+#ifdef I_MEMORY
+# include <memory.h>
+#endif
+#ifdef I_STDLIB
+# include <stdlib.h>
+#endif
+#ifdef I_STRING
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#ifdef I_UNISTD
+# include <unistd.h> /* Needed for NetBSD */
+#endif
+int main()
+{
+char buf[128], abc[128];
+char *b;
+int len;
+int off;
+int align;
+
+/* Copy "abcde..." string to char abc[] so that gcc doesn't
+ try to store the string in read-only memory. */
+memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
+
+for (align = 7; align >= 0; align--) {
+ for (len = 36; len; len--) {
+ b = buf+align;
+ memcpy(b, abc, len);
+ for (off = 1; off <= len; off++) {
+ memcpy(b+off, b, len);
+ memcpy(b, b+off, len);
+ if (memcmp(b, abc, len))
+ exit(1);
+ }
+ }
+}
+exit(0);
+}
+EOCP
+ if $cc $optimize $ccflags $ldflags \
+ -o safemcpy foo.c $libs >/dev/null 2>&1; then
+ if ./safemcpy 2>/dev/null; then
+ echo "Yes, it can."
+ val="$define"
+ else
+ echo "It can't, sorry."
+ case "$d_memmove" in
+ "$define") echo "But that's Ok since you have memmove()." ;;
+ esac
+ fi
+ else
+ echo "(I can't compile the test program, so we'll assume not...)"
+ case "$d_memmove" in
+ "$define") echo "But that's Ok since you have memmove()." ;;
+ esac
+ fi
+ ;;
+esac
+$rm -f foo.* safemcpy core
+set d_safemcpy
+eval $setvar
+
diff --git a/mcon/U/d_sanemcmp.U b/mcon/U/d_sanemcmp.U
new file mode 100644
index 0000000..07d1f84
--- /dev/null
+++ b/mcon/U/d_sanemcmp.U
@@ -0,0 +1,88 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sanemcmp.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:41:19 ram
+?RCS: patch61: created
+?RCS:
+?RCS:
+?MAKE:d_sanemcmp: cat d_memcmp +cc +optimize +ccflags +libs +ldflags rm \
+ i_memory i_stdlib i_string i_unistd Oldconfig Setvar
+?MAKE: -pick add $@ %<
+?S:d_sanemcmp:
+?S: This variable conditionally defines the HAS_SANE_MEMCMP symbol if
+?S: the memcpy() routine is available and can be used to compare relative
+?S: magnitudes of chars with their high bits set.
+?S:.
+?C:HAS_SANE_MEMCMP:
+?C: This symbol, if defined, indicates that the memcmp routine is available
+?C: and can be used to compare relative magnitudes of chars with their high
+?C: bits set. If it is not defined, roll your own version.
+?C:.
+?H:#$d_sanemcmp HAS_SANE_MEMCMP /**/
+?H:.
+?F:!sanemcmp
+?LINT: set d_sanemcmp
+: can memcmp be trusted to compare relative magnitude?
+?X: assume the worst
+val="$undef"
+case "$d_memcmp" in
+"$define")
+ echo " "
+ echo \
+ "Checking to see if your memcmp() can compare relative magnitude..." >&4
+ $cat >foo.c <<EOCP
+#$i_memory I_MEMORY
+#$i_stdlib I_STDLIB
+#$i_string I_STRING
+#$i_unistd I_UNISTD
+EOCP
+ $cat >>foo.c <<'EOCP'
+#include <stdio.h>
+#ifdef I_MEMORY
+# include <memory.h>
+#endif
+#ifdef I_STDLIB
+# include <stdlib.h>
+#endif
+#ifdef I_STRING
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#ifdef I_UNISTD
+# include <unistd.h> /* Needed for NetBSD */
+#endif
+int main()
+{
+char a = -1;
+char b = 0;
+if ((a < b) && memcmp(&a, &b, 1) < 0)
+ exit(1);
+exit(0);
+}
+EOCP
+ if $cc $optimize $ccflags $ldflags \
+ -o sanemcmp foo.c $libs >/dev/null 2>&1; then
+ if ./sanemcmp 2>/dev/null; then
+ echo "Yes, it can."
+ val="$define"
+ else
+ echo "No, it can't (it uses signed chars)."
+ fi
+ else
+ echo "(I can't compile the test program, so we'll assume not...)"
+ fi
+ ;;
+esac
+$rm -f foo.* sanemcmp core
+set d_sanemcmp
+eval $setvar
+
diff --git a/mcon/U/d_sbrk.U b/mcon/U/d_sbrk.U
new file mode 100644
index 0000000..3e3ab1f
--- /dev/null
+++ b/mcon/U/d_sbrk.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sbrk.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:06:31 ram
+?RCS: patch16: created
+?RCS:
+?MAKE:d_sbrk: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_sbrk:
+?S: This variable conditionally defines HAS_SBRK if sbrk() is
+?S: available to add more core to the process.
+?S:.
+?C:HAS_SBRK:
+?C: This symbol, if defined, indicates that the sbrk system call is
+?C: available to add/relase core. Always true on Unix.
+?C:.
+?H:#$d_sbrk HAS_SBRK /**/
+?H:.
+?LINT:set d_sbrk
+: see if sbrk exists
+set sbrk d_sbrk
+eval $inlibc
+
diff --git a/mcon/U/d_scandir.U b/mcon/U/d_scandir.U
new file mode 100644
index 0000000..5bffb17
--- /dev/null
+++ b/mcon/U/d_scandir.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_scandir.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:06:35 ram
+?RCS: patch16: created
+?RCS:
+?MAKE:d_scandir: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_scandir:
+?S: This variable conditionally defines HAS_SCANDIR if scandir() is
+?S: available to scan a directory.
+?S:.
+?C:HAS_SCANDIR:
+?C: This symbol, if defined, indicates that the scandir routine is
+?C: available to scan a directory.
+?C:.
+?H:#$d_scandir HAS_SCANDIR /**/
+?H:.
+?LINT:set d_scandir
+: see if scandir exists
+set scandir d_scandir
+eval $inlibc
+
diff --git a/mcon/U/d_scannl.U b/mcon/U/d_scannl.U
new file mode 100644
index 0000000..74c0a3f
--- /dev/null
+++ b/mcon/U/d_scannl.U
@@ -0,0 +1,74 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_scannl.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:41:27 ram
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.1 1995/07/25 13:59:12 ram
+?RCS: patch56: made cc and ccflags optional dependencies
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:00 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: Does the scanf routine read "\n" corretly ? This is was not
+?X: the case on AIX...
+?X:
+?MAKE:d_scannl: cat +cc +ccflags rm Setvar
+?MAKE: -pick add $@ %<
+?S:d_scannl:
+?S: This variable conditionally defines SCAN_NL, which indicates
+?S: wether the C library routines scanf() and friends can deal with
+?S: a '\n' in the input correctly. They do most of the time.
+?S:.
+?C:SCAN_NL:
+?C: This symbol is defined if the C library routines scanf() and friends
+?C: can deal with a '\n' in the input correctly, so that you can say
+?C: scanf("%d\n"); instead of scanf("%d"); getc(c); to handle the '\n'.
+?C:.
+?H:#$d_scannl SCAN_NL /* scanf("%d\n") works */
+?H:.
+?F:!try
+?LINT:set d_scannl
+: does scanf handle "\n" correctly ?
+echo " "
+val="$define"
+?X: I really want to say "\n" instead of '\n', becasue I am refering
+?X: to the string given as argument to scanf().
+echo 'Let'"'"'s see if scanf() handles "\\n" correctly...' >&4
+$cat >try.c <<'EOCP'
+int main()
+{
+ int i = 0, j = 0;
+ scanf("%d\n%d", &i, &j);
+ if (j != 3)
+ exit(1);
+ exit(0);
+}
+EOCP
+if $cc $ccflags -o try try.c >/dev/null 2>&1; then
+ if ./try <<'EOD'
+2
+3
+EOD
+ then
+ echo "Yes, it does."
+ else
+ echo "No, it doesn't."
+ val="$undef"
+ fi
+else
+ echo "(I can't seem to compile the test program. Assuming it does.)"
+fi
+set d_scannl
+eval $setvar
+$rm -f try.* try
+
diff --git a/mcon/U/d_scorfl.U b/mcon/U/d_scorfl.U
new file mode 100644
index 0000000..c42e1bf
--- /dev/null
+++ b/mcon/U/d_scorfl.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_scorfl.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_scorfl: cat Myread Oldconfig nametype Setvar
+?MAKE: -pick add $@ %<
+?S:d_scorfl:
+?S: This variable conditionally defines the SCOREFULL symbol, which
+?S: indicates to the C program that any scoreboard kept by the program
+?S: should be kept on the basis of the user's full name as opposed to
+?S: the user's login name.
+?S:.
+?C:SCOREFULL:
+?C: This symbol, if defined, indicates that any scoreboard kept by the
+?C: program should be kept on the basis of the user's full name as opposed
+?C: to the user's login name. If the user can change his full name he
+?C: can enter multiple scores if this is defined.
+?C:.
+?H:#$d_scorfl SCOREFULL /**/
+?H:.
+?LINT:set d_scorfl
+: see how they want the scoreboard kept
+case "$d_scorfl" in
+"$define") dflt=y ;;
+*) dflt=n ;;
+esac
+case "$nametype" in
+other) val="$undef" ;;
+*)
+ $cat <<'EOM'
+
+The scoreboard can be kept with one score per login name, or one score per full
+name. If users can change their full name, or if there is more than one person
+on your system with the same full name, you should keep the score by login name
+(the full name is still printed).
+
+EOM
+ rp='Do you want the scoreboard kept by full name?'
+ . ./myread
+ case "$ans" in
+ y*) val="$define" ;;
+ *) val="$undef" ;;
+ esac
+ ;;
+esac
+set d_scorfl
+eval $setvar
+
diff --git a/mcon/U/d_select.U b/mcon/U/d_select.U
new file mode 100644
index 0000000..86b2d73
--- /dev/null
+++ b/mcon/U/d_select.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_select.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:02 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_select: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_select:
+?S: This variable conditionally defines HAS_SELECT if select() is
+?S: available to select active file descriptors. A <sys/time.h>
+?S: inclusion may be necessary for the timeout field.
+?S:.
+?C:HAS_SELECT:
+?C: This symbol, if defined, indicates that the select routine is
+?C: available to select active file descriptors. If the timeout field
+?C: is used, <sys/time.h> may need to be included.
+?C:.
+?H:#$d_select HAS_SELECT /**/
+?H:.
+?LINT:set d_select
+: see if select exists
+set select d_select
+eval $inlibc
+
diff --git a/mcon/U/d_sem.U b/mcon/U/d_sem.U
new file mode 100644
index 0000000..f00a820
--- /dev/null
+++ b/mcon/U/d_sem.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sem.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:03 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_sem: test d_semctl d_semget d_semop Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_sem:
+?S: This variable conditionally defines the HAS_SEM symbol, which
+?S: indicates that the entire sem*(2) library is present.
+?S:.
+?C:HAS_SEM:
+?C: This symbol, if defined, indicates that the entire sem*(2) library is
+?C: supported.
+?C:.
+?H:#$d_sem HAS_SEM /**/
+?H:.
+?T:h_sem
+?LINT:set d_sem
+: see how much of the 'sem*(2)' library is present.
+h_sem=true
+echo " "
+case "$d_semctl$d_semget$d_semop" in
+*"$undef"*) h_sem=false;;
+esac
+: we could also check for sys/ipc.h ...
+if $h_sem && $test `./findhdr sys/sem.h`; then
+ echo "You have the full sem*(2) library." >&4
+ val="$define"
+else
+ echo "You don't have the full sem*(2) library." >&4
+ val="$undef"
+fi
+set d_sem
+eval $setvar
+
diff --git a/mcon/U/d_semctl.U b/mcon/U/d_semctl.U
new file mode 100644
index 0000000..4029c55
--- /dev/null
+++ b/mcon/U/d_semctl.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_semctl.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:04 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_semctl: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_semctl:
+?S: This variable conditionally defines the HAS_SEMCTL symbol, which
+?S: indicates to the C program that the semctl() routine is available.
+?S:.
+?C:HAS_SEMCTL:
+?C: This symbol, if defined, indicates that the semctl() routine is
+?C: available to perform semaphore control operations.
+?C:.
+?H:#$d_semctl HAS_SEMCTL /**/
+?H:.
+?LINT:set d_semctl
+: see if semctl exists
+set semctl d_semctl
+eval $inlibc
+
diff --git a/mcon/U/d_semget.U b/mcon/U/d_semget.U
new file mode 100644
index 0000000..2d78fcb
--- /dev/null
+++ b/mcon/U/d_semget.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_semget.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:05 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_semget: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_semget:
+?S: This variable conditionally defines the HAS_SEMGET symbol, which
+?S: indicates to the C program that the semget() routine is available.
+?S:.
+?C:HAS_SEMGET:
+?C: This symbol, if defined, indicates that the semget() routine is
+?C: available to get a set of semaphores.
+?C:.
+?H:#$d_semget HAS_SEMGET /**/
+?H:.
+?LINT:set d_semget
+: see if semget exists
+set semget d_semget
+eval $inlibc
+
diff --git a/mcon/U/d_semop.U b/mcon/U/d_semop.U
new file mode 100644
index 0000000..ba05864
--- /dev/null
+++ b/mcon/U/d_semop.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_semop.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:05 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_semop: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_semop:
+?S: This variable conditionally defines the HAS_SEMOP symbol, which
+?S: indicates to the C program that the semop() routine is available.
+?S:.
+?C:HAS_SEMOP:
+?C: This symbol, if defined, indicates that the semop() routine is
+?C: available to execute semaphore operations.
+?C:.
+?H:#$d_semop HAS_SEMOP /**/
+?H:.
+?LINT:set d_semop
+: see if semop exists
+set semop d_semop
+eval $inlibc
+
diff --git a/mcon/U/d_setegid.U b/mcon/U/d_setegid.U
new file mode 100644
index 0000000..f4c63a8
--- /dev/null
+++ b/mcon/U/d_setegid.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setegid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:07 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setegid: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_setegid:
+?S: This variable conditionally defines the HAS_SETEGID symbol, which
+?S: indicates to the C program that the setegid() routine is available
+?S: to change the effective gid of the current program.
+?S:.
+?C:HAS_SETEGID (SETEGID):
+?C: This symbol, if defined, indicates that the setegid routine is available
+?C: to change the effective gid of the current program.
+?C:.
+?H:#$d_setegid HAS_SETEGID /**/
+?H:.
+?LINT:set d_setegid
+: see if setegid exists
+set setegid d_setegid
+eval $inlibc
+
diff --git a/mcon/U/d_seteuid.U b/mcon/U/d_seteuid.U
new file mode 100644
index 0000000..b1a34c3
--- /dev/null
+++ b/mcon/U/d_seteuid.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_seteuid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_seteuid: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_seteuid:
+?S: This variable conditionally defines the HAS_SETEUID symbol, which
+?S: indicates to the C program that the seteuid() routine is available
+?S: to change the effective uid of the current program.
+?S:.
+?C:HAS_SETEUID (SETEUID):
+?C: This symbol, if defined, indicates that the seteuid routine is available
+?C: to change the effective uid of the current program.
+?C:.
+?H:#$d_seteuid HAS_SETEUID /**/
+?H:.
+?LINT:set d_seteuid
+: see if seteuid exists
+set seteuid d_seteuid
+eval $inlibc
+
diff --git a/mcon/U/d_setgrps.U b/mcon/U/d_setgrps.U
new file mode 100644
index 0000000..7fc874e
--- /dev/null
+++ b/mcon/U/d_setgrps.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setgrps.U,v $
+?RCS: Revision 3.0 1993/08/18 12:06:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setgrps: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_setgrps:
+?S: This variable conditionally defines the HAS_SETGROUPS symbol, which
+?S: indicates to the C program that the setgroups() routine is available
+?S: to set the list of process groups.
+?S:.
+?C:HAS_SETGROUPS:
+?C: This symbol, if defined, indicates that the setgroups() routine is
+?C: available to set the list of process groups. If unavailable, multiple
+?C: groups are probably not supported.
+?C:.
+?H:#$d_setgrps HAS_SETGROUPS /**/
+?H:.
+?LINT:set d_setgrps
+: see if setgroups exists
+set setgroups d_setgrps
+eval $inlibc
+
diff --git a/mcon/U/d_setlnbuf.U b/mcon/U/d_setlnbuf.U
new file mode 100644
index 0000000..dffe971
--- /dev/null
+++ b/mcon/U/d_setlnbuf.U
@@ -0,0 +1,36 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_setlnbuf.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:11:57 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_setlinebuf: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_setlinebuf:
+?S: This variable conditionally defines the HAS_SETLINEBUF symbol, which
+?S: indicates to the C program that the setlinebuf() routine is available
+?S: to change stderr or stdout from block-buffered or unbuffered to a
+?S: line-buffered mode.
+?S:.
+?C:HAS_SETLINEBUF :
+?C: This symbol, if defined, indicates that the setlinebuf routine is
+?C: available to change stderr or stdout from block-buffered or unbuffered
+?C: to a line-buffered mode.
+?C:.
+?H:#$d_setlinebuf HAS_SETLINEBUF /**/
+?H:.
+?LINT:set d_setlinebuf
+: see if setlinebuf exists
+set setlinebuf d_setlinebuf
+eval $inlibc
+
diff --git a/mcon/U/d_setlocale.U b/mcon/U/d_setlocale.U
new file mode 100644
index 0000000..09228cb
--- /dev/null
+++ b/mcon/U/d_setlocale.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_setlocale.U,v $
+?RCS: Revision 3.0.1.1 1994/06/20 06:57:51 ram
+?RCS: patch30: created
+?RCS:
+?MAKE:d_setlocale: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_setlocale:
+?S: This variable conditionally defines HAS_SETLOCALE if setlocale() is
+?S: available to handle locale-specific ctype implementations.
+?S:.
+?C:HAS_SETLOCALE:
+?C: This symbol, if defined, indicates that the setlocale routine is
+?C: available to handle locale-specific ctype implementations.
+?C:.
+?H:#$d_setlocale HAS_SETLOCALE /**/
+?H:.
+?LINT:set d_setlocale
+: see if setlocale exists
+set setlocale d_setlocale
+eval $inlibc
+
diff --git a/mcon/U/d_setpgid.U b/mcon/U/d_setpgid.U
new file mode 100644
index 0000000..f34e9a3
--- /dev/null
+++ b/mcon/U/d_setpgid.U
@@ -0,0 +1,37 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setpgid.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:41:49 ram
+?RCS: patch61: reworded symbol comments
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:06:40 ram
+?RCS: patch16: created
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setpgid: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_setpgid:
+?S: This variable conditionally defines the HAS_SETPGID symbol if the
+?S: setpgid(pid, gpid) function is available to set process group ID.
+?S:.
+?C:HAS_SETPGID:
+?C: This symbol, if defined, indicates that the setpgid(pid, gpid)
+?C: routine is available to set process group ID.
+?C:.
+?H:#$d_setpgid HAS_SETPGID /**/
+?H:.
+?LINT:set d_setpgid
+: see if setpgid exists
+set setpgid d_setpgid
+eval $inlibc
+
diff --git a/mcon/U/d_setpgrp.U b/mcon/U/d_setpgrp.U
new file mode 100644
index 0000000..08716e4
--- /dev/null
+++ b/mcon/U/d_setpgrp.U
@@ -0,0 +1,116 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setpgrp.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:44:16 ram
+?RCS: patch61: obsoleted USE_BSDGRP in favor of USE_BSD_SETPGRP
+?RCS: patch61: another unit now also defines a USE_BSD_GETPGRP
+?RCS: patch61: fallback for test program failure improved
+?RCS:
+?RCS: Revision 3.0.1.2 1995/07/25 13:59:30 ram
+?RCS: patch56: re-arranged compile line to include ldflags before objects
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:15:37 ram
+?RCS: patch36: added 'ldflags' to the test compile line (ADO)
+?RCS: patch36: call ./usg explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:09 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setpgrp d_bsdsetpgrp: cat rm +cc +libs +ccflags \
+ +ldflags Inlibc Guess Setvar i_unistd
+?MAKE: -pick add $@ %<
+?S:d_setpgrp:
+?S: This variable conditionally defines HAS_SETPGRP if setpgrp() is
+?S: available to set the current process group.
+?S:.
+?S:d_bsdsetpgrp (d_bsdpgrp):
+?S: This variable conditionally defines USE_BSD_SETPGRP if
+?S: setpgrp needs two arguments whereas USG one needs none.
+?S: See also d_setpgid for a POSIX interface.
+?S:.
+?C:HAS_SETPGRP (SETPGRP):
+?C: This symbol, if defined, indicates that the setpgrp routine is
+?C: available to set the current process group.
+?C:.
+?C:USE_BSD_SETPGRP (USE_BSDPGRP BSDPGRP):
+?C: This symbol, if defined, indicates that setpgrp needs two
+?C: arguments whereas USG one needs none. See also HAS_SETPGID
+?C: for a POSIX interface.
+?C:.
+?H:#$d_setpgrp HAS_SETPGRP /**/
+?H:#$d_bsdsetpgrp USE_BSD_SETPGRP /**/
+?H:.
+?F:!set.c !set
+?T:xxx
+?LINT:set d_setpgrp d_bsdsetpgrp
+: see if setpgrp exists
+set setpgrp d_setpgrp
+eval $inlibc
+
+@if USE_BSD_SETPGRP || d_bsdsetpgrp
+case "$d_setpgrp" in
+"$define")
+ echo " "
+ echo "Checking to see which flavor of setpgrp is in use..."
+ $cat >set.c <<EOP
+#$i_unistd I_UNISTD
+#include <sys/types.h>
+#ifdef I_UNISTD
+# include <unistd.h>
+#endif
+int main()
+{
+ if (getuid() == 0) {
+ printf("(I see you are running Configure as super-user...)\n");
+ setuid(1);
+ }
+#ifdef TRY_BSD_PGRP
+ if (-1 == setpgrp(1, 1))
+ exit(0);
+#else
+ if (setpgrp() != -1)
+ exit(0);
+#endif
+ exit(1);
+}
+EOP
+ if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
+ echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
+ val="$define"
+ elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
+ echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
+ val="$undef"
+ else
+ echo "(I can't seem to compile and run the test program.)"
+ if ./usg; then
+ xxx="a USG one, i.e. you use setpgrp()."
+ else
+ # SVR4 systems can appear rather BSD-ish.
+ case "$i_unistd" in
+ $undef)
+ xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
+ val="$define"
+ ;;
+ $define)
+ xxx="probably a USG one, i.e. you use setpgrp()."
+ val="$undef"
+ ;;
+ esac
+ fi
+ echo "Assuming your setpgrp is $xxx" >&4
+ fi
+ ;;
+*) val="$undef";;
+esac
+set d_bsdsetpgrp
+eval $setvar
+$rm -f set set.c
+@end
diff --git a/mcon/U/d_setpgrp2.U b/mcon/U/d_setpgrp2.U
new file mode 100644
index 0000000..665077d
--- /dev/null
+++ b/mcon/U/d_setpgrp2.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setpgrp2.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:10 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setpgrp2: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_setpgrp2:
+?S: This variable conditionally defines the HAS_SETPGRP2 symbol, which
+?S: indicates to the C program that the setpgrp2() (as in DG/UX) routine
+?S: is available to set the current process group.
+?S:.
+?C:HAS_SETPGRP2 (SETPGRP2):
+?C: This symbol, if defined, indicates that the setpgrp2() (as in DG/UX)
+?C: routine is available to set the current process group.
+?C:.
+?H:#$d_setpgrp2 HAS_SETPGRP2 /**/
+?H:.
+?LINT:set d_setpgrp2
+: see if setpgrp2 exists
+set setpgrp2 d_setpgrp2
+eval $inlibc
+
diff --git a/mcon/U/d_setprior.U b/mcon/U/d_setprior.U
new file mode 100644
index 0000000..9f0ad79
--- /dev/null
+++ b/mcon/U/d_setprior.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setprior.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:11 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setprior: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_setprior:
+?S: This variable conditionally defines HAS_SETPRIORITY if setpriority()
+?S: is available to set a process's priority.
+?S:.
+?C:HAS_SETPRIORITY (SETPRIORITY):
+?C: This symbol, if defined, indicates that the setpriority routine is
+?C: available to set a process's priority.
+?C:.
+?H:#$d_setprior HAS_SETPRIORITY /**/
+?H:.
+?LINT:set d_setprior
+: see if setpriority exists
+set setpriority d_setprior
+eval $inlibc
+
diff --git a/mcon/U/d_setregid.U b/mcon/U/d_setregid.U
new file mode 100644
index 0000000..642a006
--- /dev/null
+++ b/mcon/U/d_setregid.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setregid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:12 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setregid d_setresgid: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_setregid:
+?S: This variable conditionally defines HAS_SETREGID if setregid() is
+?S: available to change the real and effective gid of the current
+?S: process.
+?S:.
+?S:d_setresgid:
+?S: This variable conditionally defines HAS_SETRESGID if setresgid() is
+?S: available to change the real, effective and saved gid of the current
+?S: process.
+?S:.
+?C:HAS_SETREGID (SETREGID):
+?C: This symbol, if defined, indicates that the setregid routine is
+?C: available to change the real and effective gid of the current
+?C: process.
+?C:.
+?C:HAS_SETRESGID (SETRESGID):
+?C: This symbol, if defined, indicates that the setresgid routine is
+?C: available to change the real, effective and saved gid of the current
+?C: process.
+?C:.
+?H:#$d_setregid HAS_SETREGID /**/
+?H:#$d_setresgid HAS_SETRESGID /**/
+?H:.
+?LINT: set d_setregid d_setresgid
+: see if setregid exists
+set setregid d_setregid
+eval $inlibc
+set setresgid d_setresgid
+eval $inlibc
+
diff --git a/mcon/U/d_setreuid.U b/mcon/U/d_setreuid.U
new file mode 100644
index 0000000..2d829d6
--- /dev/null
+++ b/mcon/U/d_setreuid.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setreuid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:13 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setreuid d_setresuid: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_setreuid:
+?S: This variable conditionally defines HAS_SETREUID if setreuid() is
+?S: available to change the real and effective uid of the current
+?S: process.
+?S:.
+?S:d_setresuid:
+?S: This variable conditionally defines HAS_SETREUID if setresuid() is
+?S: available to change the real, effective and saved uid of the current
+?S: process.
+?S:.
+?C:HAS_SETREUID (SETREUID):
+?C: This symbol, if defined, indicates that the setreuid routine is
+?C: available to change the real and effective uid of the current
+?C: process.
+?C:.
+?C:HAS_SETRESUID (SETRESUID):
+?C: This symbol, if defined, indicates that the setresuid routine is
+?C: available to change the real, effective and saved uid of the current
+?C: process.
+?C:.
+?H:#$d_setreuid HAS_SETREUID /**/
+?H:#$d_setresuid HAS_SETRESUID /**/
+?H:.
+?LINT:set d_setreuid d_setresuid
+: see if setreuid exists
+set setreuid d_setreuid
+eval $inlibc
+set setresuid d_setresuid
+eval $inlibc
+
diff --git a/mcon/U/d_setrgid.U b/mcon/U/d_setrgid.U
new file mode 100644
index 0000000..04d1770
--- /dev/null
+++ b/mcon/U/d_setrgid.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setrgid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:14 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setrgid: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_setrgid:
+?S: This variable conditionally defines the HAS_SETRGID symbol, which
+?S: indicates to the C program that the setrgid() routine is available
+?S: to change the real gid of the current program.
+?S:.
+?C:HAS_SETRGID (SETRGID):
+?C: This symbol, if defined, indicates that the setrgid routine is available
+?C: to change the real gid of the current program.
+?C:.
+?H:#$d_setrgid HAS_SETRGID /**/
+?H:.
+?LINT:set d_setrgid
+: see if setrgid exists
+set setrgid d_setrgid
+eval $inlibc
+
diff --git a/mcon/U/d_setruid.U b/mcon/U/d_setruid.U
new file mode 100644
index 0000000..900ca25
--- /dev/null
+++ b/mcon/U/d_setruid.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setruid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:15 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setruid: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_setruid:
+?S: This variable conditionally defines the HAS_SETRUID symbol, which
+?S: indicates to the C program that the setruid() routine is available
+?S: to change the real uid of the current program.
+?S:.
+?C:HAS_SETRUID (SETRUID):
+?C: This symbol, if defined, indicates that the setruid routine is available
+?C: to change the real uid of the current program.
+?C:.
+?H:#$d_setruid HAS_SETRUID /**/
+?H:.
+?LINT:set d_setruid
+: see if setruid exists
+set setruid d_setruid
+eval $inlibc
+
diff --git a/mcon/U/d_setsid.U b/mcon/U/d_setsid.U
new file mode 100644
index 0000000..c9e4113
--- /dev/null
+++ b/mcon/U/d_setsid.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_setsid.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:06:49 ram
+?RCS: patch16: created
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:05:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_setsid: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_setsid:
+?S: This variable conditionally defines HAS_SETSID if setsid() is
+?S: available to set the process group ID.
+?S:.
+?C:HAS_SETSID:
+?C: This symbol, if defined, indicates that the setsid routine is
+?C: available to set the process group ID.
+?C:.
+?H:#$d_setsid HAS_SETSID /**/
+?H:.
+?LINT:set d_setsid
+: see if setsid exists
+set setsid d_setsid
+eval $inlibc
+
diff --git a/mcon/U/d_sgndchr.U b/mcon/U/d_sgndchr.U
new file mode 100644
index 0000000..08179c9
--- /dev/null
+++ b/mcon/U/d_sgndchr.U
@@ -0,0 +1,59 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sgndchr.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:44:25 ram
+?RCS: patch61: added a ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.1 1995/07/25 14:00:24 ram
+?RCS: patch56: made cc and ccflags optional dependencies
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:16 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_sgndchr: cat rm +cc +ccflags Setvar
+?MAKE: -pick add $@ %<
+?S:d_sgndchr:
+?S: This variable conditionally defines the SIGNEDCHAR symbol, which
+?S: indicates to the C program that signed characters are available.
+?S:.
+?C:SIGNEDCHAR:
+?C: This symbol, if defined, indicates that characters are a signed type.
+?C: If not defined, things declared as signed characters (and that make
+?C: use of negative values) should probably be declared as shorts instead.
+?C:.
+?H:#$d_sgndchr SIGNEDCHAR /**/
+?H:.
+?F:!try
+?LINT:set d_sgndchr
+: check for signed chars
+echo " "
+echo "Checking to see if your C compiler can do signed chars..." >&4
+$cat >try.c <<'EOCP'
+int main()
+{
+ char c = 0;
+
+ c--;
+ exit(c >= 0);
+}
+EOCP
+$cc $ccflags -o try try.c
+if ./try; then
+ val="$define"
+ echo "It certainly can."
+else
+ val="$undef"
+ echo "It can't. I'll have to make some things type short."
+fi
+set d_sgndchr
+eval $setvar
+$rm -f try*
+
diff --git a/mcon/U/d_shm.U b/mcon/U/d_shm.U
new file mode 100644
index 0000000..eba4c56
--- /dev/null
+++ b/mcon/U/d_shm.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_shm.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:17 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_shm: test d_shmctl d_shmget d_shmat d_shmdt Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_shm:
+?S: This variable conditionally defines the HAS_SHM symbol, which
+?S: indicates that the entire shm*(2) library is present.
+?S:.
+?C:HAS_SHM:
+?C: This symbol, if defined, indicates that the entire shm*(2) library is
+?C: supported.
+?C:.
+?H:#$d_shm HAS_SHM /**/
+?H:.
+?T:h_shm
+?LINT:set d_shm
+: see how much of the 'shm*(2)' library is present.
+h_shm=true
+echo " "
+case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
+*"$undef"*) h_shm=false;;
+esac
+: we could also check for sys/ipc.h ...
+if $h_shm && $test `./findhdr sys/shm.h`; then
+ echo "You have the full shm*(2) library." >&4
+ val="$define"
+else
+ echo "You don't have the full shm*(2) library." >&4
+ val="$undef"
+fi
+set d_shm
+eval $setvar
+
diff --git a/mcon/U/d_shmat.U b/mcon/U/d_shmat.U
new file mode 100644
index 0000000..4646fc5
--- /dev/null
+++ b/mcon/U/d_shmat.U
@@ -0,0 +1,93 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_shmat.U,v $
+?RCS: Revision 3.0.1.3 1995/07/25 14:04:23 ram
+?RCS: patch56: use findhdr to find <sys/shm.h>, to get the right one (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/13 15:18:56 ram
+?RCS: patch27: added new symbol HAS_SHMAT_PROTOTYPE (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 14:54:18 ram
+?RCS: patch23: new Shmat_t symbol to declare return type of shmat()
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:18 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_shmat shmattype d_shmatprototype: Inlibc cat +cc +ccflags \
+ rm cppstdin cppflags cppminus Findhdr Setvar contains
+?MAKE: -pick add $@ %<
+?S:d_shmat:
+?S: This variable conditionally defines the HAS_SHMAT symbol, which
+?S: indicates to the C program that the shmat() routine is available.
+?S:.
+?S:shmattype:
+?S: This symbol contains the type of pointer returned by shmat().
+?S: It can be 'void *' or 'char *'.
+?S:.
+?S:d_shmatprototype:
+?S: This variable conditionally defines the HAS_SHMAT_PROTOTYPE
+?S: symbol, which indicates that sys/shm.h has a prototype for
+?S: shmat.
+?S:.
+?C:HAS_SHMAT:
+?C: This symbol, if defined, indicates that the shmat() routine is
+?C: available to attach a shared memory segment to the process space.
+?C:.
+?C:Shmat_t:
+?C: This symbol holds the return type of the shmat() system call.
+?C: Usually set to 'void *' or 'char *'.
+?C:.
+?C:HAS_SHMAT_PROTOTYPE:
+?C: This symbol, if defined, indicates that the sys/shm.h includes
+?C: a prototype for shmat(). Otherwise, it is up to the program to
+?C: guess one. Shmat_t shmat _((int, Shmat_t, int)) is a good guess,
+?C: but not always right so it should be emitted by the program only
+?C: when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs.
+?C:.
+?H:#$d_shmat HAS_SHMAT /**/
+?H:#define Shmat_t $shmattype /**/
+?H:#$d_shmatprototype HAS_SHMAT_PROTOTYPE /**/
+?H:.
+?LINT:set d_shmat d_shmatprototype
+?T:xxx
+: see if shmat exists
+set shmat d_shmat
+eval $inlibc
+: see what shmat returns
+case "$d_shmat" in
+"$define")
+ $cat >shmat.c <<'END'
+#include <sys/shm.h>
+void *shmat();
+END
+ if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
+ shmattype='void *'
+ else
+ shmattype='char *'
+ fi
+ echo "and it returns ($shmattype)." >&4
+ : see if a prototype for shmat is available
+ xxx=`./findhdr sys/shm.h`
+ $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
+ if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
+ val="$define"
+ else
+ val="$undef"
+ fi
+ $rm -f shmat.[co]
+ ;;
+*)
+ val="$undef"
+ ;;
+esac
+set d_shmatprototype
+eval $setvar
+
diff --git a/mcon/U/d_shmctl.U b/mcon/U/d_shmctl.U
new file mode 100644
index 0000000..fc7415e
--- /dev/null
+++ b/mcon/U/d_shmctl.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_shmctl.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:18 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_shmctl: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_shmctl:
+?S: This variable conditionally defines the HAS_SHMCTL symbol, which
+?S: indicates to the C program that the shmctl() routine is available.
+?S:.
+?C:HAS_SHMCTL:
+?C: This symbol, if defined, indicates that the shmctl() routine is
+?C: available to perform shared memory control operations.
+?C:.
+?H:#$d_shmctl HAS_SHMCTL /**/
+?H:.
+?LINT:set d_shmctl
+: see if shmctl exists
+set shmctl d_shmctl
+eval $inlibc
+
diff --git a/mcon/U/d_shmdt.U b/mcon/U/d_shmdt.U
new file mode 100644
index 0000000..aab2aa6
--- /dev/null
+++ b/mcon/U/d_shmdt.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_shmdt.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:19 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_shmdt: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_shmdt:
+?S: This variable conditionally defines the HAS_SHMDT symbol, which
+?S: indicates to the C program that the shmdt() routine is available.
+?S:.
+?C:HAS_SHMDT:
+?C: This symbol, if defined, indicates that the shmdt() routine is
+?C: available to detach a shared memory segment from the process space.
+?C:.
+?H:#$d_shmdt HAS_SHMDT /**/
+?H:.
+?LINT:set d_shmdt
+: see if shmdt exists
+set shmdt d_shmdt
+eval $inlibc
+
diff --git a/mcon/U/d_shmget.U b/mcon/U/d_shmget.U
new file mode 100644
index 0000000..86359a0
--- /dev/null
+++ b/mcon/U/d_shmget.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_shmget.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:20 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_shmget: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_shmget:
+?S: This variable conditionally defines the HAS_SHMGET symbol, which
+?S: indicates to the C program that the shmget() routine is available.
+?S:.
+?C:HAS_SHMGET:
+?C: This symbol, if defined, indicates that the shmget() routine is
+?C: available to request a shared memory segment from the kernel.
+?C:.
+?H:#$d_shmget HAS_SHMGET /**/
+?H:.
+?LINT:set d_shmget
+: see if shmget exists
+set shmget d_shmget
+eval $inlibc
+
diff --git a/mcon/U/d_sigaction.U b/mcon/U/d_sigaction.U
new file mode 100644
index 0000000..782f27e
--- /dev/null
+++ b/mcon/U/d_sigaction.U
@@ -0,0 +1,61 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sigaction.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:44:29 ram
+?RCS: patch61: created
+?RCS:
+?RCS:
+?MAKE:d_sigaction: Csym Setvar cat cc ccflags ldflags libs rm _o
+?MAKE: -pick add $@ %<
+?S:d_sigaction:
+?S: This variable conditionally defines the HAS_SIGACTION symbol, which
+?S: indicates that the Vr4 sigaction() routine is available.
+?S:.
+?C:HAS_SIGACTION:
+?C: This symbol, if defined, indicates that Vr4's sigaction() routine
+?C: is available.
+?C:.
+?H:#$d_sigaction HAS_SIGACTION /**/
+?H:.
+?T:val
+?LINT:set d_sigaction
+: see if we have sigaction
+echo " "
+if set sigaction val -f d_sigaction; eval $csym; $val; then
+ echo 'sigaction() found.' >&4
+ val="$define"
+else
+ echo 'sigaction NOT found.' >&4
+ val="$undef"
+fi
+?X:
+?X: Solaris 2.5_x86 with SunWorks Pro C 3.0.1 doesn't have a complete
+?X: sigaction structure if compiled with cc -Xc. This compile test
+?X: will fail then. <doughera@lafcol.lafayette.edu>
+?X:
+$cat > set.c <<'EOP'
+#include <stdio.h>
+#include <sys/types.h>
+#include <signal.h>
+int main()
+{
+ struct sigaction act, oact;
+}
+EOP
+if $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1; then
+ :
+else
+ echo "But you don't seem to have a useable struct sigaction." >&4
+ val="$undef"
+fi
+set d_sigaction; eval $setvar
+$rm -f set set$_o set.c
+
diff --git a/mcon/U/d_sigblock.U b/mcon/U/d_sigblock.U
new file mode 100644
index 0000000..15554b7
--- /dev/null
+++ b/mcon/U/d_sigblock.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sigblock.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:21 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_sigblock: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_sigblock:
+?S: This variable conditionally defines HAS_SIGBLOCK if sigblock() is
+?S: available to block signal reception.
+?S:.
+?C:HAS_SIGBLOCK:
+?C: This symbol, if defined, indicates that the sigblock routine is
+?C: available to block signal reception.
+?C:.
+?H:#$d_sigblock HAS_SIGBLOCK /**/
+?H:.
+?LINT:set d_sigblock
+: see if sigblock exists
+set sigblock d_sigblock
+eval $inlibc
+
diff --git a/mcon/U/d_sighold.U b/mcon/U/d_sighold.U
new file mode 100644
index 0000000..31dabaa
--- /dev/null
+++ b/mcon/U/d_sighold.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sighold.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:21 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_sighold: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_sighold:
+?S: This variable conditionally defines HAS_SIGHOLD if sighold() is
+?S: available to hold signals.
+?S:.
+?C:HAS_SIGHOLD:
+?C: This symbol, if defined, indicates that the sighold routine is
+?C: available to hold signals.
+?C:.
+?H:#$d_sighold HAS_SIGHOLD /**/
+?H:.
+?LINT:set d_sighold
+: see if sighold exists
+set sighold d_sighold
+eval $inlibc
+
diff --git a/mcon/U/d_siglist.U b/mcon/U/d_siglist.U
new file mode 100644
index 0000000..6b24db8
--- /dev/null
+++ b/mcon/U/d_siglist.U
@@ -0,0 +1,39 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_siglist.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:22 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_siglist: Csym Setvar
+?MAKE: -pick add $@ %<
+?S:d_siglist:
+?S: This variable conditionally defines HAS_SYS_SIGLIST if sys_siglist[] is
+?S: available to translate signal numbers to strings.
+?S:.
+?C:HAS_SYS_SIGLIST (SYS_SIGLIST):
+?C: This symbol, if defined, indicates that the sys_siglist array is
+?C: available to translate signal numbers to strings.
+?C:.
+?H:#$d_siglist HAS_SYS_SIGLIST /**/
+?H:.
+?LINT:set d_siglist
+: see if sys_siglist[] exist
+echo " "
+if set sys_siglist val -a d_siglist; eval $csym; $val; then
+ echo "You have sys_siglist[] for signal description." >&4
+ val="$define"
+else
+ echo "You don't have sys_siglist[]." >&4
+ val="$undef"
+fi
+set d_siglist
+eval $setvar
+
diff --git a/mcon/U/d_sigsetjmp.U b/mcon/U/d_sigsetjmp.U
new file mode 100644
index 0000000..427933f
--- /dev/null
+++ b/mcon/U/d_sigsetjmp.U
@@ -0,0 +1,105 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: You may distribute under the terms of either the GNU General Public
+?RCS: License or the Artistic License, as specified in the README file.
+?RCS:
+?RCS: $Log: d_sigsetjmp.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:44:33 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:d_sigsetjmp: Setvar cat +cc +ccflags +ldflags libs rm
+?MAKE: -pick add $@ %<
+?S:d_sigsetjmp:
+?S: This variable conditionally defines the HAS_SIGSETJMP symbol,
+?S: which indicates that the sigsetjmp() routine is available to
+?S: call setjmp() and optionally save the process's signal mask.
+?S:.
+?C:HAS_SIGSETJMP:
+?C: This variable indicates to the C program that the sigsetjmp()
+?C: routine is available to save the calling process's registers
+?C: and stack environment for later use by siglongjmp(), and
+?C: to optionally save the process's signal mask. See
+?C: Sigjmp_buf, Sigsetjmp, and Siglongjmp.
+?C:.
+?C:Sigjmp_buf:
+?C: This is the buffer type to be used with Sigsetjmp and Siglongjmp.
+?C:.
+?C:Sigsetjmp:
+?C: This macro is used in the same way as sigsetjmp(), but will invoke
+?C: traditional setjmp() if sigsetjmp isn't available.
+?C: See HAS_SIGSETJMP.
+?C:.
+?C:Siglongjmp:
+?C: This macro is used in the same way as siglongjmp(), but will invoke
+?C: traditional longjmp() if siglongjmp isn't available.
+?C: See HAS_SIGSETJMP.
+?C:.
+?H:?%<:#$d_sigsetjmp HAS_SIGSETJMP /**/
+?H:?%<:#ifdef HAS_SIGSETJMP
+?H:?%<:#define Sigjmp_buf sigjmp_buf
+?H:?%<:#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask))
+?H:?%<:#define Siglongjmp(buf,retval) siglongjmp((buf),(retval))
+?H:?%<:#else
+?H:?%<:#define Sigjmp_buf jmp_buf
+?H:?%<:#define Sigsetjmp(buf,save_mask) setjmp((buf))
+?H:?%<:#define Siglongjmp(buf,retval) longjmp((buf),(retval))
+?H:?%<:#endif
+?H:.
+?W:%<:Sigjmp_buf Sigsetjmp Siglongjmp
+?F:!set
+?LINT:set d_sigsetjmp
+: see if sigsetjmp exists
+?X: We can't check for these symbols with Inlibc because sigsetjmp
+?X: is (sometimes? always?) a macro under GCC
+echo " "
+case "$d_sigsetjmp" in
+'')
+ $cat >set.c <<'EOP'
+#include <setjmp.h>
+sigjmp_buf env;
+int set = 1;
+int main()
+{
+ if (sigsetjmp(env,1))
+ exit(set);
+ set = 0;
+ siglongjmp(env, 1);
+ exit(1);
+}
+EOP
+ if $cc $ccflags $ldflags -o set set.c $libs > /dev/null 2>&1 ; then
+ if ./set >/dev/null 2>&1; then
+ echo "POSIX sigsetjmp found." >&4
+ val="$define"
+ else
+ $cat >&4 <<EOM
+Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
+I'll ignore them.
+EOM
+ val="$undef"
+ fi
+ else
+ echo "sigsetjmp not found." >&4
+ val="$undef"
+ fi
+ ;;
+*) val="$d_sigsetjmp"
+ case "$d_sigsetjmp" in
+ $define) echo "POSIX sigsetjmp found." >&4;;
+ $undef) echo "sigsetjmp not found." >&4;;
+ esac
+ ;;
+esac
+set d_sigsetjmp
+eval $setvar
+$rm -f set.c set
+
diff --git a/mcon/U/d_sigsetmk.U b/mcon/U/d_sigsetmk.U
new file mode 100644
index 0000000..ff07e8d
--- /dev/null
+++ b/mcon/U/d_sigsetmk.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sigsetmk.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:23 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_sigsetmk: Csym Setvar
+?MAKE: -pick add $@ %<
+?S:d_sigsetmk:
+?S: This variable conditionally defines the HAS_SIGSETMASK symbol, which
+?S: indicates to the C program that the sigsetmask() routine is available
+?S: to set current signal mask.
+?S:.
+?C:HAS_SIGSETMASK (SIGSETMASK):
+?C: This symbol, if defined, indicates that the sigsetmask() routine is
+?C: available to set current signal mask. Otherwise, you should probably
+?C: emulate this by using signal(), but fear race conditions...
+?C:.
+?H:#$d_sigsetmk HAS_SIGSETMASK /**/
+?H:.
+?LINT:set d_sigsetmk
+: see if sigsetmask exists
+echo " "
+if set sigsetmask val -f d_sigsetmk; eval $csym; $val; then
+ echo 'sigsetmask() found.' >&4
+ val="$define"
+else
+ echo "sigsetmask() not found -- We'll use signal()." >&4
+ val="$undef"
+fi
+set d_sigsetmk
+eval $setvar
+
diff --git a/mcon/U/d_sigvec.U b/mcon/U/d_sigvec.U
new file mode 100644
index 0000000..cfff2f1
--- /dev/null
+++ b/mcon/U/d_sigvec.U
@@ -0,0 +1,79 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sigvec.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:45:37 ram
+?RCS: patch61: there is now a separate routine for sigaction()
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:24 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X: d_sigvec.U, from d_ftime.U 1.0
+?X:
+?MAKE:d_sigvec d_sigvectr d_sigintrp: Csym Inlibc Setvar
+?MAKE: -pick add $@ %<
+?S:d_sigvec:
+?S: This variable conditionally defines the HAS_SIGVEC symbol, which indicates
+?S: that BSD reliable signals are supported.
+?S:.
+?S:d_sigvectr:
+?S: This variable conditionally defines the HAS_SIGVECTOR symbol, which
+?S: indicates that the sigvec() routine is called sigvector() instead, for
+?S: reasons known only to Hewlett-Packard.
+?S:.
+?S:d_sigintrp:
+?S: This variable conditionally defines the HAS_SIGINTRP symbol, which
+?S: indicates that the siginterrupt() routine is available.
+?S:.
+?C:HAS_SIGVEC (SIGVEC):
+?C: This symbol, if defined, indicates that BSD reliable signals are
+?C: supported.
+?C:.
+?C:HAS_SIGVECTOR (SIGVECTOR):
+?C: This symbol, if defined, indicates that the sigvec() routine is called
+?C: sigvector() instead, and that sigspace() is provided instead of
+?C: sigstack(). This is probably only true for HP-UX.
+?C:.
+?C:HAS_SIGINTRP (SIGINTRP):
+?C: This symbol, if defined, indicates that the siginterrupt() routine
+?C: is available.
+?C:.
+?H:#$d_sigvec HAS_SIGVEC /**/
+?H:#$d_sigvectr HAS_SIGVECTOR /**/
+?H:#$d_sigintrp HAS_SIGINTRP /**/
+?H:.
+?T:val
+?LINT:set d_sigvec d_sigintrp
+@if d_sigvectr || d_sigvec || HAS_SIGVEC || HAS_SIGVECTOR
+: see if sigvector exists -- since sigvec will match the substring
+echo " "
+if set sigvector val -f d_sigvectr; eval $csym; $val; then
+ echo 'sigvector() found--you must be running HP-UX.' >&4
+ val="$define"; set d_sigvectr; eval $setvar
+ val="$define"; set d_sigvec; eval $setvar
+else
+: try the original name
+ d_sigvectr="$undef"
+ if set sigvec val -f d_sigvec; eval $csym; $val; then
+ echo 'sigvec() found.' >&4
+ val="$define"; set d_sigvec; eval $setvar
+ else
+ echo 'sigvec() not found--race conditions with signals may occur.' >&4
+ val="$undef"; set d_sigvec; eval $setvar
+ fi
+fi
+
+@end
+@if d_sigintrp || HAS_SIGINTRP
+: see if we have siginterrupt
+set siginterrupt d_sigintrp
+eval $inlibc
+
+@end
diff --git a/mcon/U/d_sjis2jis.U b/mcon/U/d_sjis2jis.U
new file mode 100644
index 0000000..e74eeb7
--- /dev/null
+++ b/mcon/U/d_sjis2jis.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_sjis2jis.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:25 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_sjis2jis: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_sjis2jis:
+?S: This variable conditionally defines the HAS_SJIS2JIS symbol, which
+?S: indicates to the C program that the sjis2jis() routine is available
+?S: to convert SJIS to JIS.
+?S:.
+?C:HAS_SJIS2JIS:
+?C: This symbol, if defined, indicates that the sjis2jis routine is
+?C: available to convert SJIS to JIS.
+?C:.
+?H:#$d_sjis2jis HAS_SJIS2JIS /**/
+?H:.
+?LINT:set d_sjis2jis
+: see if sjis2jis exists
+set sjis2jis d_sjis2jis
+eval $inlibc
+
diff --git a/mcon/U/d_socket.U b/mcon/U/d_socket.U
new file mode 100644
index 0000000..f7d59d4
--- /dev/null
+++ b/mcon/U/d_socket.U
@@ -0,0 +1,123 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_socket.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:46:00 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:08:04 ram
+?RCS: patch16: can now safely declare private nm_extract in dependencies
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:26 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_socket d_oldsock d_sockpair socketlib sockethdr: contains libc \
+ echo n c nm_opt nm_extract Inlibc Csym _a
+?MAKE: -pick add $@ %<
+?S:d_socket:
+?S: This variable conditionally defines HAS_SOCKET, which indicates
+?S: that the BSD socket interface is supported.
+?S:.
+?S:d_sockpair:
+?S: This variable conditionally defines the HAS_SOCKETPAIR symbol, which
+?S: indicates that the BSD socketpair() is supported.
+?S:.
+?S:d_oldsock:
+?S: This variable conditionally defines the OLDSOCKET symbol, which
+?S: indicates that the BSD socket interface is based on 4.1c and not 4.2.
+?S:.
+?S:socketlib:
+?S: This variable has the names of any libraries needed for socket support.
+?S:.
+?S:sockethdr:
+?S: This variable has any cpp -I flags needed for socket support.
+?S:.
+?C:HAS_SOCKET (SOCKET):
+?C: This symbol, if defined, indicates that the BSD socket interface is
+?C: supported.
+?C:.
+?C:HAS_SOCKETPAIR (SOCKETPAIR):
+?C: This symbol, if defined, indicates that the BSD socketpair() call is
+?C: supported.
+?C:.
+?C:USE_OLDSOCKET (OLDSOCKET):
+?C: This symbol, if defined, indicates that the 4.1c BSD socket interface
+?C: is supported instead of the 4.2/4.3 BSD socket interface. For instance,
+?C: there is no setsockopt() call.
+?C:.
+?H:#$d_socket HAS_SOCKET /**/
+?H:#$d_sockpair HAS_SOCKETPAIR /**/
+?H:#$d_oldsock USE_OLDSOCKET /**/
+?H:.
+?T:val
+?LINT:use libc
+?LINT:set d_sockpair
+: see whether socket exists
+socketlib=''
+sockethdr=''
+echo " "
+$echo $n "Hmm... $c" >&4
+if set socket val -f d_socket; eval $csym; $val; then
+ echo "Looks like you have Berkeley networking support." >&4
+ d_socket="$define"
+?X: now check for advanced features
+ if set setsockopt val -f; eval $csym; $val; then
+ d_oldsock="$undef"
+ else
+ echo "...but it uses the old 4.1c interface, rather than 4.2" >&4
+ d_oldsock="$define"
+ fi
+else
+?X: HP-UX, for one, puts all the socket stuff in socklib.o. Note that if we
+?X: come here on HP-UX, then we must have used nm to get symbols, or we really
+?X: don't have sockets anyway...
+ if $contains socklib libc.list >/dev/null 2>&1; then
+ echo "Looks like you have Berkeley networking support." >&4
+ d_socket="$define"
+ : we will have to assume that it supports the 4.2 BSD interface
+ d_oldsock="$undef"
+ else
+ echo "You don't have Berkeley networking in libc$_a..." >&4
+?X: look for an optional networking library
+ if test -f /usr/lib/libnet$_a; then
+?X: space between two '(' needed for ksh
+ ( (nm $nm_opt /usr/lib/libnet$_a | eval $nm_extract) || \
+ ar t /usr/lib/libnet$_a) 2>/dev/null >> libc.list
+ if $contains socket libc.list >/dev/null 2>&1; then
+ echo "...but the Wollongong group seems to have hacked it in." >&4
+ socketlib="-lnet"
+ sockethdr="-I/usr/netinclude"
+ d_socket="$define"
+?X: now check for advanced features
+ if $contains setsockopt libc.list >/dev/null 2>&1; then
+ d_oldsock="$undef"
+ else
+ echo "...using the old 4.1c interface, rather than 4.2" >&4
+ d_oldsock="$define"
+ fi
+ else
+ echo "or even in libnet$_a, which is peculiar." >&4
+ d_socket="$undef"
+ d_oldsock="$undef"
+ fi
+ else
+ echo "or anywhere else I see." >&4
+ d_socket="$undef"
+ d_oldsock="$undef"
+ fi
+ fi
+fi
+
+@if HAS_SOCKETPAIR || d_sockpair
+: see if socketpair exists
+set socketpair d_sockpair
+eval $inlibc
+
+@end
diff --git a/mcon/U/d_speedopt.U b/mcon/U/d_speedopt.U
new file mode 100644
index 0000000..4c2043c
--- /dev/null
+++ b/mcon/U/d_speedopt.U
@@ -0,0 +1,62 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_speedopt.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:15:51 ram
+?RCS: patch36: call ./Cppsym explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:27 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_speedopt: Myread Cppsym Oldconfig cat models Setvar
+?MAKE: -pick add $@ %<
+?S:d_speedopt:
+?S: This variable conditionally defines the SPEED_OVER_MEM symbol, which
+?S: indicates to the C program that it can burn memory in order to save
+?S: CPU time.
+?S:.
+?C:SPEED_OVER_MEM (SPEEDOVERMEM):
+?C: This symbol, if defined, indicates that the program can use more
+?C: memory in order to reduce CPU time. The symbol doesn't say whether
+?C: we are more interested in saving text space or data space.
+?C:.
+?H:#$d_speedopt SPEED_OVER_MEM /**/
+?H:.
+?LINT:set d_speedopt
+: do we want speed at the expense of memory
+$cat <<'EOM'
+
+I can try to optimize this package for either speed or memory. If you have
+limited address space you may wish to optimize for memory. Otherwise you
+should probably optimize for speed.
+
+EOM
+case "$d_speedopt" in
+'') if ./Cppsym $smallmach; then
+ case "$models" in
+ *large*|*huge*) dflt=speed;;
+ *) dflt=memory;;
+ esac
+ else
+ dflt=speed
+ fi
+ ;;
+*define*) dflt=speed;;
+*) dflt=memory;;
+esac
+rp="What to optimize for?"
+. ./myread
+case "$ans" in
+mem*) val="$undef";;
+*) val="$define";;
+esac
+set d_speedopt
+eval $setvar
+
diff --git a/mcon/U/d_stat.U b/mcon/U/d_stat.U
new file mode 100644
index 0000000..d669876
--- /dev/null
+++ b/mcon/U/d_stat.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_stat.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:28 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_stat: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_stat:
+?S: This variable conditionally defines HAS_STAT if stat() is
+?S: available to get file status.
+?S:.
+?C:HAS_STAT (STAT):
+?C: This symbol, if defined, indicates that the stat routine is
+?C: available to get file status.
+?C:.
+?H:#$d_stat HAS_STAT /**/
+?H:.
+?LINT:set d_stat
+: see if stat exists
+set stat d_stat
+eval $inlibc
+
diff --git a/mcon/U/d_statblks.U b/mcon/U/d_statblks.U
new file mode 100644
index 0000000..9a22166
--- /dev/null
+++ b/mcon/U/d_statblks.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_statblks.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:29 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_statblks: contains Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_statblks:
+?S: This variable conditionally defines USE_STAT_BLOCKS if this system
+?S: has a stat structure declaring st_blksize and st_blocks.
+?S:.
+?C:USE_STAT_BLOCKS (STATBLOCKS):
+?C: This symbol is defined if this system has a stat structure declaring
+?C: st_blksize and st_blocks.
+?C:.
+?H:#$d_statblks USE_STAT_BLOCKS /**/
+?H:.
+?T:xxx
+?LINT:set d_statblks
+: see if stat knows about block sizes
+echo " "
+xxx=`./findhdr sys/stat.h`
+if $contains 'st_blocks;' "$xxx" >/dev/null 2>&1 ; then
+ if $contains 'st_blksize;' "$xxx" >/dev/null 2>&1 ; then
+ echo "Your stat() knows about block sizes." >&4
+ val="$define"
+ else
+ echo "Your stat() doesn't know about block sizes." >&4
+ val="$undef"
+ fi
+else
+ echo "Your stat() doesn't know about block sizes." >&4
+ val="$undef"
+fi
+set d_statblks
+eval $setvar
+
diff --git a/mcon/U/d_stdstdio.U b/mcon/U/d_stdstdio.U
new file mode 100644
index 0000000..b04acbc
--- /dev/null
+++ b/mcon/U/d_stdstdio.U
@@ -0,0 +1,325 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Tye McQueen <tye@metronet.com>
+?RCS:
+?RCS: $Log: d_stdstdio.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:46:32 ram
+?RCS: patch61: merged with perl5's unit
+?RCS:
+?RCS: Revision 3.0.1.2 1995/07/25 14:06:54 ram
+?RCS: patch56: typo fix on ?C: line for FILE_bufsiz
+?RCS: patch56: fixed unbalanced parenthesis (ADO)
+?RCS: patch56: check whether FILE_cnt and FILE_ptr can be assigned to (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1995/05/12 12:12:11 ram
+?RCS: patch54: complete rewrite by Tye McQueen to fit modern systems
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:31 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_stdstdio d_stdiobase stdio_ptr stdio_cnt stdio_base \
+ stdio_bufsiz d_stdio_cnt_lval d_stdio_ptr_lval stdio_filbuf: cat \
+ +cc +ccflags contains +ldflags +libs rm \
+ Setvar Findhdr Oldconfig
+?MAKE: -pick add $@ %<
+?S:d_stdstdio:
+?S: This variable conditionally defines USE_STDIO_PTR if this system
+?S: has a FILE structure declaring usable _ptr and _cnt fields (or
+?S: equivalent) in stdio.h.
+?S:.
+?S:stdio_ptr:
+?S: This variable defines how, given a FILE pointer, fp, to access the
+?S: _ptr field (or equivalent) of stdio.h's FILE structure. This will
+?S: be used to define the macro FILE_ptr(fp).
+?S:.
+?S:d_stdio_ptr_lval:
+?S: This variable conditionally defines STDIO_PTR_LVALUE if the
+?S: FILE_ptr macro can be used as an lvalue.
+?S:.
+?S:stdio_cnt:
+?S: This variable defines how, given a FILE pointer, fp, to access the
+?S: _cnt field (or equivalent) of stdio.h's FILE structure. This will
+?S: be used to define the macro FILE_cnt(fp).
+?S:.
+?S:d_stdio_cnt_lval:
+?S: This variable conditionally defines STDIO_CNT_LVALUE if the
+?S: FILE_cnt macro can be used as an lvalue.
+?S:.
+?S:stdio_filbuf:
+?S: This variable defines how, given a FILE pointer, fp, to tell
+?S: stdio to refill it's internal buffers (?). This will
+?S: be used to define the macro FILE_filbuf(fp).
+?S:.
+?S:d_stdiobase:
+?S: This variable conditionally defines USE_STDIO_BASE if this system
+?S: has a FILE structure declaring a usable _base field (or equivalent)
+?S: in stdio.h.
+?S:.
+?S:stdio_base:
+?S: This variable defines how, given a FILE pointer, fp, to access the
+?S: _base field (or equivalent) of stdio.h's FILE structure. This will
+?S: be used to define the macro FILE_base(fp).
+?S:.
+?S:stdio_bufsiz:
+?S: This variable defines how, given a FILE pointer, fp, to determine
+?S: the number of bytes store in the I/O buffer pointer to by the
+?S: _base field (or equivalent) of stdio.h's FILE structure. This will
+?S: be used to define the macro FILE_bufsiz(fp).
+?S:.
+?C:USE_STDIO_PTR ~ d_stdstdio (USE_STD_STDIO STDSTDIO):
+?C: This symbol is defined if the _ptr and _cnt fields (or similar)
+?C: of the stdio FILE structure can be used to access the stdio buffer
+?C: for a file handle. If this is defined, then the FILE_ptr(fp)
+?C: and FILE_cnt(fp) macros will also be defined and should be used
+?C: to access these fields.
+?C:.
+?C:FILE_ptr:
+?C: This macro is used to access the _ptr field (or equivalent) of the
+?C: FILE structure pointed to by its argument. This macro will always be
+?C: defined if USE_STDIO_PTR is defined.
+?C:.
+?C:STDIO_PTR_LVALUE:
+?C: This symbol is defined if the FILE_ptr macro can be used as an
+?C: lvalue.
+?C:.
+?C:FILE_cnt:
+?C: This macro is used to access the _cnt field (or equivalent) of the
+?C: FILE structure pointed to by its argument. This macro will always be
+?C: defined if USE_STDIO_PTR is defined.
+?C:.
+?C:STDIO_CNT_LVALUE:
+?C: This symbol is defined if the FILE_cnt macro can be used as an
+?C: lvalue.
+?C:.
+?C:FILE_filbuf:
+?C: This macro is used to access the internal stdio _filbuf function
+?C: (or equivalent), if STDIO_CNT_LVALUE and STDIO_PTR_LVALUE
+?C: are defined. It is typically either _filbuf or __filbuf.
+?C: This macro will only be defined if both STDIO_CNT_LVALUE and
+?C: STDIO_PTR_LVALUE are defined.
+?C:.
+?H:?d_stdstdio:#$d_stdstdio USE_STDIO_PTR /**/
+?H:?d_stdstdio:#ifdef USE_STDIO_PTR
+?H:#define FILE_ptr(fp) $stdio_ptr
+?H:#$d_stdio_ptr_lval STDIO_PTR_LVALUE /**/
+?H:#define FILE_cnt(fp) $stdio_cnt
+?H:#$d_stdio_cnt_lval STDIO_CNT_LVALUE /**/
+?H:?d_stdstdio:#if defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE)
+?H:#define FILE_filbuf(fp) $stdio_filbuf /**/
+?H:?d_stdstdio:#endif
+?H:?d_stdstdio:#endif
+?H:.
+?W:d_stdstdio:FILE_ptr FILE_cnt FILE_filbuf
+?C:USE_STDIO_BASE ~ d_stdiobase:
+?C: This symbol is defined if the _base field (or similar) of the
+?C: stdio FILE structure can be used to access the stdio buffer for
+?C: a file handle. If this is defined, then the FILE_base(fp) macro
+?C: will also be defined and should be used to access this field.
+?C: Also, the FILE_bufsiz(fp) macro will be defined and should be used
+?C: to determine the number of bytes in the buffer. USE_STDIO_BASE
+?C: will never be defined unless USE_STDIO_PTR is.
+?C:.
+?C:FILE_base:
+?C: This macro is used to access the _base field (or equivalent) of the
+?C: FILE structure pointed to by its argument. This macro will always be
+?C: defined if USE_STDIO_BASE is defined.
+?C:.
+?C:FILE_bufsiz:
+?C: This macro is used to determine the number of bytes in the I/O
+?C: buffer pointed to by _base field (or equivalent) of the FILE
+?C: structure pointed to its argument. This macro will always be defined
+?C: if USE_STDIO_BASE is defined.
+?C:.
+?H:?d_stdiobase:#$d_stdiobase USE_STDIO_BASE /**/
+?H:?d_stdiobase:#ifdef USE_STDIO_BASE
+?H:#define FILE_base(fp) $stdio_base
+?H:#define FILE_bufsiz(fp) $stdio_bufsiz
+?H:?d_stdiobase:#endif
+?H:.
+?W:d_stdiobase:FILE_base FILE_bufsiz
+?LINT:set d_stdstdio d_stdiobase
+?T:ptr_lval cnt_lval filbuf xxx
+?F:!try
+: see if _ptr and _cnt from stdio act std
+echo " "
+if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
+ echo "(Looks like you have stdio.h from Linux.)"
+ case "$stdio_ptr" in
+ '') stdio_ptr='((fp)->_IO_read_ptr)'
+ ptr_lval=$define
+ ;;
+ *) ptr_lval=$d_stdio_ptr_lval;;
+ esac
+ case "$stdio_cnt" in
+ '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
+ cnt_lval=$undef
+ ;;
+ *) cnt_lval=$d_stdio_cnt_lval;;
+ esac
+ case "$stdio_base" in
+ '') stdio_base='((fp)->_IO_read_base)';;
+ esac
+ case "$stdio_bufsiz" in
+ '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
+ esac
+else
+ case "$stdio_ptr" in
+ '') stdio_ptr='((fp)->_ptr)'
+ ptr_lval=$define
+ ;;
+ *) ptr_lval=$d_stdio_ptr_lval;;
+ esac
+ case "$stdio_cnt" in
+ '') stdio_cnt='((fp)->_cnt)'
+ cnt_lval=$define
+ ;;
+ *) cnt_lval=$d_stdio_cnt_lval;;
+ esac
+ case "$stdio_base" in
+ '') stdio_base='((fp)->_base)';;
+ esac
+ case "$stdio_bufsiz" in
+ '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
+ esac
+fi
+: test whether _ptr and _cnt really work
+echo "Checking how std your stdio is..." >&4
+$cat >try.c <<EOP
+#include <stdio.h>
+#define FILE_ptr(fp) $stdio_ptr
+#define FILE_cnt(fp) $stdio_cnt
+int main() {
+ FILE *fp = fopen("try.c", "r");
+ char c = getc(fp);
+ if (
+ 18 <= FILE_cnt(fp) &&
+ strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
+ )
+ exit(0);
+ exit(1);
+}
+EOP
+val="$undef"
+if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1; then
+ if ./try; then
+ echo "Your stdio acts pretty std."
+ val="$define"
+ else
+ echo "Your stdio isn't very std."
+ fi
+else
+ echo "Your stdio doesn't appear very std."
+fi
+$rm -f try.c try
+set d_stdstdio
+eval $setvar
+
+@if STDIO_PTR_LVALUE || d_stdio_ptr_lval
+: Can _ptr be used as an lvalue?
+?X: Only makes sense if we have a known stdio implementation.
+case "$d_stdstdio$ptr_lval" in
+$define$define) val=$define ;;
+*) val=$undef ;;
+esac
+set d_stdio_ptr_lval
+eval $setvar
+
+@end
+@if STDIO_CNT_LVALUE || d_stdio_cnt_lval
+: Can _cnt be used as an lvalue?
+?X: Only makes sense if we have a known stdio implementation.
+case "$d_stdstdio$cnt_lval" in
+$define$define) val=$define ;;
+*) val=$undef ;;
+esac
+set d_stdio_cnt_lval
+eval $setvar
+
+@end
+@if FILE_filbuf
+: How to access the stdio _filbuf or __filbuf function.
+: If this fails, check how the getc macro in stdio.h works.
+case "${d_stdio_ptr_lval}${d_stdio_cnt_lval}" in
+${define}${define})
+ : Try hint value, if any, then _filbuf, __filbuf, _fill, then punt.
+ : _fill is for OS/2.
+ xxx='notok'
+ for filbuf in $stdio_filbuf '_filbuf(fp)' '__filbuf(fp) ' '_fill(fp)' ; do
+ $cat >try.c <<EOP
+#include <stdio.h>
+#define FILE_ptr(fp) $stdio_ptr
+#define FILE_cnt(fp) $stdio_cnt
+#define FILE_filbuf(fp) $filbuf
+int main() {
+ FILE *fp = fopen("try.c", "r");
+ int c;
+ c = getc(fp);
+ c = FILE_filbuf(fp); /* Just looking for linker errors.*/
+ exit(0);
+}
+EOP
+ if $cc $ccflags $ldflags -o try try.c $libs >/dev/null 2>&1 && ./try; then
+ echo "Your stdio appears to use $filbuf"
+ stdio_filbuf="$filbuf"
+ xxx='ok'
+ break
+ else
+ echo "Hmm. $filbuf doesn't seem to work."
+ fi
+ $rm -f try.c try
+ done
+ case "$xxx" in
+ notok) echo "I can't figure out how to access _filbuf"
+ echo "I'll just have to work around it."
+ d_stdio_ptr_lval="$undef"
+ d_stdio_cnt_lval="$undef"
+ ;;
+ esac
+ ;;
+esac
+@end
+@if d_stdiobase || USE_STDIO_BASE || FILE_base || FILE_bufsiz
+: see if _base is also standard
+val="$undef"
+case "$d_stdstdio" in
+$define)
+ $cat >try.c <<EOP
+#include <stdio.h>
+#define FILE_base(fp) $stdio_base
+#define FILE_bufsiz(fp) $stdio_bufsiz
+int main() {
+ FILE *fp = fopen("try.c", "r");
+ char c = getc(fp);
+ if (
+ 19 <= FILE_bufsiz(fp) &&
+ strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
+ )
+ exit(0);
+ exit(1);
+}
+EOP
+ if $cc $ccflags $ldflags -o try try.c $libs > /dev/null 2>&1; then
+ if ./try; then
+ echo "And its _base field acts std."
+ val="$define"
+ else
+ echo "But its _base field isn't std."
+ fi
+ else
+ echo "However, it seems to be lacking the _base field."
+ fi
+ $rm -f try.c try
+ ;;
+esac
+set d_stdiobase
+eval $setvar
+
+@end
diff --git a/mcon/U/d_strccmp.U b/mcon/U/d_strccmp.U
new file mode 100644
index 0000000..0b36c24
--- /dev/null
+++ b/mcon/U/d_strccmp.U
@@ -0,0 +1,38 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strccmp.U,v $
+?RCS: Revision 3.0.1.2 1994/05/06 14:54:34 ram
+?RCS: patch23: fixed a typo (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:04:39 ram
+?RCS: patch10: created (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:06:24 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strccmp: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_strccmp:
+?S: This variable conditionally defines the HAS_STRCASECMP symbol, which
+?S: indicates to the C program that the strcasecmp() routine is available
+?S: for case-insensitive string compares.
+?S:.
+?C:HAS_STRCASECMP:
+?C: This symbol, if defined, indicates that the strcasecmp() routine is
+?C: available for case-insensitive string compares.
+?C:.
+?H:#$d_strccmp HAS_STRCASECMP /**/
+?H:.
+?LINT:set d_strccmp
+: see if strcasecmp exists
+set strcasecmp d_strccmp
+eval $inlibc
+
diff --git a/mcon/U/d_strchr.U b/mcon/U/d_strchr.U
new file mode 100644
index 0000000..ce28b6e
--- /dev/null
+++ b/mcon/U/d_strchr.U
@@ -0,0 +1,95 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strchr.U,v $
+?RCS: Revision 3.0.1.2 1993/10/16 13:49:20 ram
+?RCS: patch12: added support for HAS_INDEX
+?RCS: patch12: added magic for index() and rindex()
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:05:26 ram
+?RCS: patch10: now only defines HAS_STRCHR, no macro remap of index (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:32 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strchr d_index: contains strings Setvar Myread Oldconfig Csym
+?MAKE: -pick add $@ %<
+?S:d_strchr:
+?S: This variable conditionally defines HAS_STRCHR if strchr() and
+?S: strrchr() are available for string searching.
+?S:.
+?S:d_index:
+?S: This variable conditionally defines HAS_INDEX if index() and
+?S: rindex() are available for string searching.
+?S:.
+?C:HAS_STRCHR:
+?C: This symbol is defined to indicate that the strchr()/strrchr()
+?C: functions are available for string searching. If not, try the
+?C: index()/rindex() pair.
+?C:.
+?C:HAS_INDEX:
+?C: This symbol is defined to indicate that the index()/rindex()
+?C: functions are available for string searching.
+?C:.
+?H:#$d_strchr HAS_STRCHR /**/
+?H:#$d_index HAS_INDEX /**/
+?H:.
+?M:index: HAS_INDEX
+?M:#ifndef HAS_INDEX
+?M:#ifndef index
+?M:#define index strchr
+?M:#endif
+?M:#endif
+?M:.
+?M:rindex: HAS_INDEX
+?M:#ifndef HAS_INDEX
+?M:#ifndef rindex
+?M:#define rindex strrchr
+?M:#endif
+?M:#endif
+?M:.
+?T:vali
+?LINT:set d_strchr d_index
+: index or strchr
+echo " "
+if set index val -f; eval $csym; $val; then
+ if set strchr val -f d_strchr; eval $csym; $val; then
+ if $contains strchr "$strings" >/dev/null 2>&1 ; then
+?X: has index, strchr, and strchr in string header
+ val="$define"
+ vali="$undef"
+ echo "strchr() found." >&4
+ else
+?X: has index, strchr, and no strchr in string header
+ val="$undef"
+ vali="$define"
+ echo "index() found." >&4
+ fi
+ else
+?X: has only index, no strchr, string header is a moot point
+ val="$undef"
+ vali="$define"
+ echo "index() found." >&4
+ fi
+else
+ if set strchr val -f d_strchr; eval $csym; $val; then
+ val="$define"
+ vali="$undef"
+ echo "strchr() found." >&4
+ else
+ echo "No index() or strchr() found!" >&4
+ val="$undef"
+ vali="$undef"
+ fi
+fi
+set d_strchr; eval $setvar
+val="$vali"
+set d_index; eval $setvar
+
diff --git a/mcon/U/d_strcoll.U b/mcon/U/d_strcoll.U
new file mode 100644
index 0000000..0ba2ba1
--- /dev/null
+++ b/mcon/U/d_strcoll.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_strcoll.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:12:01 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_strcoll: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_strcoll:
+?S: This variable conditionally defines HAS_STRCOLL if strcoll() is
+?S: available to compare strings using collating information.
+?S:.
+?C:HAS_STRCOLL:
+?C: This symbol, if defined, indicates that the strcoll routine is
+?C: available to compare strings using collating information.
+?C:.
+?H:#$d_strcoll HAS_STRCOLL /**/
+?H:.
+?LINT:set d_strcoll
+: see if strcoll exists
+set strcoll d_strcoll
+eval $inlibc
+
diff --git a/mcon/U/d_strcspn.U b/mcon/U/d_strcspn.U
new file mode 100644
index 0000000..04097ef
--- /dev/null
+++ b/mcon/U/d_strcspn.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strcspn.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:33 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strcspn: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_strcspn:
+?S: This variable conditionally defines the HAS_STRCSPN symbol, which
+?S: indicates to the C program that the strcspn() routine is available
+?S: to scan strings.
+?S:.
+?C:HAS_STRCSPN (STRCSPN):
+?C: This symbol, if defined, indicates that the strcspn routine is
+?C: available to scan strings.
+?C:.
+?H:#$d_strcspn HAS_STRCSPN /**/
+?H:.
+?LINT:set d_strcspn
+: see if strcspn exists
+set strcspn d_strcspn
+eval $inlibc
+
diff --git a/mcon/U/d_strctcpy.U b/mcon/U/d_strctcpy.U
new file mode 100644
index 0000000..a44597e
--- /dev/null
+++ b/mcon/U/d_strctcpy.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strctcpy.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:34 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strctcpy: cat rm cc Setvar
+?MAKE: -pick add $@ %<
+?S:d_strctcpy:
+?S: This variable conditionally defines the USE_STRUCT_COPY symbol, which
+?S: indicates to the C program that this C compiler knows how to copy
+?S: structures.
+?S:.
+?C:USE_STRUCT_COPY (STRUCTCOPY):
+?C: This symbol, if defined, indicates that this C compiler knows how
+?C: to copy structures. If undefined, you'll need to use a block copy
+?C: routine of some sort instead.
+?C:.
+?H:#$d_strctcpy USE_STRUCT_COPY /**/
+?H:.
+?LINT:set d_strctcpy
+: check for structure copying
+echo " "
+echo "Checking to see if your C compiler can copy structs..." >&4
+$cat >try.c <<'EOCP'
+int main()
+{
+ struct blurfl {
+ int dyick;
+ } foo, bar;
+
+ foo = bar;
+}
+EOCP
+if $cc -c try.c >/dev/null 2>&1 ; then
+ val="$define"
+ echo "Yup, it can."
+else
+ val="$undef"
+ echo "Nope, it can't."
+fi
+set d_strctcpy
+eval $setvar
+$rm -f try.*
+
diff --git a/mcon/U/d_strdup.U b/mcon/U/d_strdup.U
new file mode 100644
index 0000000..9a948a9
--- /dev/null
+++ b/mcon/U/d_strdup.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strdup.U,v $
+?RCS: Revision 3.0.1.1 1993/12/15 08:21:41 ram
+?RCS: patch15: created
+?RCS:
+?MAKE:d_strdup: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_strdup:
+?S: This variable conditionally defines HAS_STRDUP if strdup() is
+?S: available to duplicate strings in memory.
+?S:.
+?C:HAS_STRDUP:
+?C: This symbol, if defined, indicates that the strdup routine is
+?C: available to duplicate strings in memory. Otherwise, roll up
+?C: your own...
+?C:.
+?H:#$d_strdup HAS_STRDUP /**/
+?H:.
+?LINT:set d_strdup
+: see if strdup exists
+set strdup d_strdup
+eval $inlibc
+
diff --git a/mcon/U/d_strerror.U b/mcon/U/d_strerror.U
new file mode 100644
index 0000000..4949630
--- /dev/null
+++ b/mcon/U/d_strerror.U
@@ -0,0 +1,117 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strerror.U,v $
+?RCS: Revision 3.0.1.3 1994/05/13 15:20:27 ram
+?RCS: patch27: now uses new macro support for cleaner Strerror def
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/06 14:58:26 ram
+?RCS: patch23: renamed strerror into Strerror to protect name space (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:08:56 ram
+?RCS: patch16: protected code looking for sys_errnolist[] with @if
+?RCS: patch16: added default value for d_sysernlst
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:35 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strerror d_syserrlst d_sysernlst d_strerrm: contains Csym Findhdr
+?MAKE: -pick add $@ %<
+?S:d_strerror:
+?S: This variable conditionally defines HAS_STRERROR if strerror() is
+?S: available to translate error numbers to strings.
+?S:.
+?S:d_syserrlst:
+?S: This variable conditionally defines HAS_SYS_ERRLIST if sys_errlist[] is
+?S: available to translate error numbers to strings.
+?S:.
+?S:d_sysernlst:
+?S: This variable conditionally defines HAS_SYS_ERRNOLIST if sys_errnolist[]
+?S: is available to translate error numbers to the symbolic name.
+?S:.
+?S:d_strerrm:
+?S: This variable holds what Strerrr is defined as to translate an error
+?S: code condition into an error message string. It could be 'strerror'
+?S: or a more complex macro emulating strrror with sys_errlist[], or the
+?S: "unknown" string when both strerror and sys_errlist are missing.
+?S:.
+?C:HAS_STRERROR (STRERROR):
+?C: This symbol, if defined, indicates that the strerror routine is
+?C: available to translate error numbers to strings. See the writeup
+?C: of Strerror() in this file before you try to define your own.
+?C:.
+?C:HAS_SYS_ERRLIST (SYSERRLIST):
+?C: This symbol, if defined, indicates that the sys_errlist array is
+?C: available to translate error numbers to strings. The extern int
+?C: sys_nerr gives the size of that table.
+?C:.
+?C:HAS_SYS_ERRNOLIST (SYSERRNOLIST):
+?C: This symbol, if defined, indicates that the sys_errnolist array is
+?C: available to translate an errno code into its symbolic name (e.g.
+?C: ENOENT). The extern int sys_nerrno gives the size of that table.
+?C:.
+?C:Strerror:
+?C: This preprocessor symbol is defined as a macro if strerror() is
+?C: not available to translate error numbers to strings but sys_errlist[]
+?C: array is there.
+?C:.
+?H:#$d_strerror HAS_STRERROR /**/
+?H:#$d_syserrlst HAS_SYS_ERRLIST /**/
+?H:#$d_sysernlst HAS_SYS_ERRNOLIST /**/
+?H:#define Strerror(e) $d_strerrm
+?H:.
+?D:d_sysernlst=''
+?T:xxx val
+: see if strerror and/or sys_errlist[] exist
+echo " "
+if set strerror val -f d_strerror; eval $csym; $val; then
+ echo 'strerror() found.' >&4
+ d_strerror="$define"
+ d_strerrm='strerror(e)'
+ if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
+ echo "(You also have sys_errlist[], so we could roll our own strerror.)"
+ d_syserrlst="$define"
+ else
+ echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
+ d_syserrlst="$undef"
+ fi
+elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
+ $contains '#[ ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
+ echo 'strerror() found in string header.' >&4
+ d_strerror="$define"
+ d_strerrm='strerror(e)'
+ if set sys_errlist val -a d_syserrlst; eval $csym; $val; then
+ echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
+ d_syserrlst="$define"
+ else
+ echo "(You don't appear to have any sys_errlist[], how can this be?)"
+ d_syserrlst="$undef"
+ fi
+elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
+echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
+ d_strerror="$undef"
+ d_syserrlst="$define"
+ d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
+else
+ echo 'strerror() and sys_errlist[] NOT found.' >&4
+ d_strerror="$undef"
+ d_syserrlst="$undef"
+ d_strerrm='"unknown"'
+fi
+@if d_sysernlst || HAS_SYS_ERRNOLIST
+if set sys_errnolist val -a d_sysernlst; eval $csym; $val; then
+ echo "(Symbolic error codes can be fetched via the sys_errnolist[] array.)"
+ d_sysernlst="$define"
+else
+ echo "(However, I can't extract the symbolic error code out of errno.)"
+ d_sysernlst="$undef"
+fi
+@end
+
diff --git a/mcon/U/d_strftime.U b/mcon/U/d_strftime.U
new file mode 100644
index 0000000..c634105
--- /dev/null
+++ b/mcon/U/d_strftime.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strftime.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:36 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strftime: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_strftime:
+?S: This variable conditionally defines HAS_STRFTIME if strftime() is
+?S: available to format locale-specific times.
+?S:.
+?C:HAS_STRFTIME:
+?C: This symbol, if defined, indicates that the strftime routine is
+?C: available to format locale-specific times.
+?C:.
+?H:#$d_strftime HAS_STRFTIME /**/
+?H:.
+?LINT:set d_strftime
+: see if strftime exists
+set strftime d_strftime
+eval $inlibc
+
diff --git a/mcon/U/d_strstr.U b/mcon/U/d_strstr.U
new file mode 100644
index 0000000..022359a
--- /dev/null
+++ b/mcon/U/d_strstr.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strstr.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:37 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strstr: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_strstr:
+?S: This variable conditionally defines HAS_STRSTR if strstr() is
+?S: available to find substrings.
+?S:.
+?C:HAS_STRSTR (STRSTR):
+?C: This symbol, if defined, indicates that the strstr routine is
+?C: available to find substrings.
+?C:.
+?H:#$d_strstr HAS_STRSTR /**/
+?H:.
+?LINT:set d_strstr
+: see if strstr exists
+set strstr d_strstr
+eval $inlibc
+
diff --git a/mcon/U/d_strtod.U b/mcon/U/d_strtod.U
new file mode 100644
index 0000000..13e6dee
--- /dev/null
+++ b/mcon/U/d_strtod.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strtod.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:46:36 ram
+?RCS: patch61: created
+?RCS:
+?RCS:
+?MAKE:d_strtod: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_strtod:
+?S: This variable conditionally defines the HAS_STRTOD symbol, which
+?S: indicates to the C program that the strtod() routine is available
+?S: to provide better numeric string conversion than atof().
+?S:.
+?C:HAS_STRTOD (STRTOD):
+?C: This symbol, if defined, indicates that the strtod routine is
+?C: available to provide better numeric string conversion than atof().
+?C:.
+?H:#$d_strtod HAS_STRTOD /**/
+?H:.
+?LINT:set d_strtod
+: see if strtod exists
+set strtod d_strtod
+eval $inlibc
+
diff --git a/mcon/U/d_strtok.U b/mcon/U/d_strtok.U
new file mode 100644
index 0000000..d6cf2f1
--- /dev/null
+++ b/mcon/U/d_strtok.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strtok.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:38 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: The strtok routine now appears to be a standard one, but it was
+?X: missing in early BSD systems.
+?X:
+?MAKE:d_strtok: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_strtok:
+?S: This variable conditionally defines HAS_STRTOK if strtok() is
+?S: available to scan strings for tokens.
+?S:.
+?C:HAS_STRTOK (STRTOK):
+?C: This symbol, if defined, indicates that the strtok routine is
+?C: available to scan strings for tokens.
+?C:.
+?H:#$d_strtok HAS_STRTOK /**/
+?H:.
+?LINT:set d_strtok
+: see if strtok exists
+set strtok d_strtok
+eval $inlibc
+
diff --git a/mcon/U/d_strtol.U b/mcon/U/d_strtol.U
new file mode 100644
index 0000000..1d84274
--- /dev/null
+++ b/mcon/U/d_strtol.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strtol.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:39 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_strtol: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_strtol:
+?S: This variable conditionally defines the HAS_STRTOL symbol, which
+?S: indicates to the C program that the strtol() routine is available
+?S: to provide better numeric string conversion than atoi() and friends.
+?S:.
+?C:HAS_STRTOL (STRTOL):
+?C: This symbol, if defined, indicates that the strtol routine is available
+?C: to provide better numeric string conversion than atoi() and friends.
+?C:.
+?H:#$d_strtol HAS_STRTOL /**/
+?H:.
+?LINT:set d_strtol
+: see if strtol exists
+set strtol d_strtol
+eval $inlibc
+
diff --git a/mcon/U/d_strtoul.U b/mcon/U/d_strtoul.U
new file mode 100644
index 0000000..54d79e4
--- /dev/null
+++ b/mcon/U/d_strtoul.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_strtoul.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:46:43 ram
+?RCS: patch61: created
+?RCS:
+?RCS:
+?MAKE:d_strtoul: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_strtoul:
+?S: This variable conditionally defines the HAS_STRTOUL symbol, which
+?S: indicates to the C program that the strtoul() routine is available
+?S: to provide conversion of strings to unsigned long.
+?S:.
+?C:HAS_STRTOUL (STRTOUL):
+?C: This symbol, if defined, indicates that the strtoul routine is
+?C: available to provide conversion of strings to unsigned long.
+?C:.
+?H:#$d_strtoul HAS_STRTOUL /**/
+?H:.
+?LINT:set d_strtoul
+: see if strtoul exists
+set strtoul d_strtoul
+eval $inlibc
+
diff --git a/mcon/U/d_strxfrm.U b/mcon/U/d_strxfrm.U
new file mode 100644
index 0000000..898a30f
--- /dev/null
+++ b/mcon/U/d_strxfrm.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_strxfrm.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:12:04 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_strxfrm: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_strxfrm:
+?S: This variable conditionally defines HAS_STRXFRM if strxfrm() is
+?S: available to transform strings.
+?S:.
+?C:HAS_STRXFRM:
+?C: This symbol, if defined, indicates that the strxfrm() routine is
+?C: available to transform strings.
+?C:.
+?H:#$d_strxfrm HAS_STRXFRM /**/
+?H:.
+?LINT:set d_strxfrm
+: see if strxfrm exists
+set strxfrm d_strxfrm
+eval $inlibc
+
diff --git a/mcon/U/d_su_chown.U b/mcon/U/d_su_chown.U
new file mode 100644
index 0000000..b43993c
--- /dev/null
+++ b/mcon/U/d_su_chown.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_su_chown.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:40 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_su_chown: Csym Setvar
+?MAKE: -pick add $@ %<
+?S:d_su_chown (d_rootchown):
+?S: This variable conditionally defines the SU_CHOWN symbol, which
+?S: indicates to the C program that only root can chown() the owner
+?S: of a file.
+?S:.
+?C:SU_CHOWN (ROOT_CHOWN):
+?C: This symbol, if defined, indicates that the system allows only root
+?C: can change the owner of a file with chown().
+?C:.
+?H:#$d_su_chown SU_CHOWN /**/
+?H:.
+?LINT:set d_su_chown
+: see if 'chown()' is restricted.
+: but not too hard, as it is late and I am tired. -- HMS
+echo " "
+if set setreuid val -f d_su_chown; eval $csym; $val; then
+ echo 'It looks like only root can chown() the owner of a file.' >&4
+ val="$define"
+else
+ echo 'It looks like root or the owner can chown() a file away.' >&4
+ val="$undef"
+fi
+set d_su_chown
+eval $setvar
+
diff --git a/mcon/U/d_symlink.U b/mcon/U/d_symlink.U
new file mode 100644
index 0000000..f95c4da
--- /dev/null
+++ b/mcon/U/d_symlink.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_symlink.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:41 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_symlink: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_symlink:
+?S: This variable conditionally defines the HAS_SYMLINK symbol, which
+?S: indicates to the C program that the symlink() routine is available
+?S: to create symbolic links.
+?S:.
+?C:HAS_SYMLINK (SYMLINK):
+?C: This symbol, if defined, indicates that the symlink routine is available
+?C: to create symbolic links.
+?C:.
+?H:#$d_symlink HAS_SYMLINK /**/
+?H:.
+?LINT:set d_symlink
+: see if symlink exists
+set symlink d_symlink
+eval $inlibc
+
diff --git a/mcon/U/d_syscall.U b/mcon/U/d_syscall.U
new file mode 100644
index 0000000..4620b04
--- /dev/null
+++ b/mcon/U/d_syscall.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_syscall.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_syscall: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_syscall:
+?S: This variable conditionally defines HAS_SYSCALL if syscall() is
+?S: available call arbitrary system calls.
+?S:.
+?C:HAS_SYSCALL (SYSCALL):
+?C: This symbol, if defined, indicates that the syscall routine is
+?C: available to call arbitrary system calls. If undefined, that's tough.
+?C:.
+?H:#$d_syscall HAS_SYSCALL /**/
+?H:.
+?LINT:set d_syscall
+: see if syscall exists
+set syscall d_syscall
+eval $inlibc
+
diff --git a/mcon/U/d_sysconf.U b/mcon/U/d_sysconf.U
new file mode 100644
index 0000000..13c6177
--- /dev/null
+++ b/mcon/U/d_sysconf.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_sysconf.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:15:57 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:d_sysconf: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_sysconf:
+?S: This variable conditionally defines the HAS_SYSCONF symbol, which
+?S: indicates to the C program that the sysconf() routine is available
+?S: to determine system related limits and options.
+?S:.
+?C:HAS_SYSCONF:
+?C: This symbol, if defined, indicates that sysconf() is available
+?C: to determine system related limits and options.
+?C:.
+?H:#$d_sysconf HAS_SYSCONF /**/
+?H:.
+?LINT:set d_sysconf
+: see if sysconf exists
+set sysconf d_sysconf
+eval $inlibc
+
diff --git a/mcon/U/d_syslog.U b/mcon/U/d_syslog.U
new file mode 100644
index 0000000..8245d48
--- /dev/null
+++ b/mcon/U/d_syslog.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_syslog.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:46:56 ram
+?RCS: patch61: replaced .o with $_o all over the place
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:43 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_syslog: test Csym Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_syslog:
+?S: This variable conditionally defines the HAS_SYSLOG symbol, which
+?S: indicates to the C program that syslog() exists on this system.
+?S:.
+?C:HAS_SYSLOG (LIBSYSLOG):
+?C: This symbol, if defined, indicates that the program can rely on the
+?C: system providing syslog(). Otherwise, the syslog code provided by
+?C: the package should be used.
+?C:.
+?H:#$d_syslog HAS_SYSLOG /**/
+?H:.
+?LINT:set d_syslog
+: see if syslog is available
+echo " "
+if $test `./findhdr syslog.h` && \
+ (set syslog val -f d_syslog; eval $csym; $val); then
+ echo "syslog() found." >&4
+ val="$define"
+else
+ echo "syslog() not found in your C library." >&4
+ val="$undef"
+fi
+set d_syslog
+eval $setvar
+
diff --git a/mcon/U/d_system.U b/mcon/U/d_system.U
new file mode 100644
index 0000000..cd8737c
--- /dev/null
+++ b/mcon/U/d_system.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_system.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:44 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_system: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_system:
+?S: This variable conditionally defines HAS_SYSTEM if system() is
+?S: available to issue a shell command.
+?S:.
+?C:HAS_SYSTEM (SYSTEM):
+?C: This symbol, if defined, indicates that the system routine is
+?C: available to issue a shell command.
+?C:.
+?H:#$d_system HAS_SYSTEM /**/
+?H:.
+?LINT:set d_system
+: see if system exists
+set system d_system
+eval $inlibc
+
diff --git a/mcon/U/d_table.U b/mcon/U/d_table.U
new file mode 100644
index 0000000..1144456
--- /dev/null
+++ b/mcon/U/d_table.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_table.U,v $
+?RCS: Revision 3.0.1.2 1993/11/10 17:34:14 ram
+?RCS: patch14: wrongly mentionned an obsolete symbol
+?RCS:
+?RCS: Revision 3.0.1.1 1993/10/16 13:49:29 ram
+?RCS: patch12: created
+?RCS:
+?MAKE:d_table: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_table:
+?S: This variable conditionally defines HAS_TABLE if table() is
+?S: available to examine/update elements from a system table.
+?S:.
+?C:HAS_TABLE:
+?C: This symbol, if defined, indicates that the OSF/1 table() system
+?C: call is available to examine/update items from a system table.
+?C:.
+?H:#$d_table HAS_TABLE /**/
+?H:.
+?LINT:set d_table
+: see if table exists
+set table d_table
+eval $inlibc
+
diff --git a/mcon/U/d_tcgtpgrp.U b/mcon/U/d_tcgtpgrp.U
new file mode 100644
index 0000000..61d0f59
--- /dev/null
+++ b/mcon/U/d_tcgtpgrp.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_tcgtpgrp.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:12:08 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_tcgetpgrp: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_tcgetpgrp:
+?S: This variable conditionally defines the HAS_TCGETPGRP symbol, which
+?S: indicates to the C program that the tcgetpgrp() routine is available.
+?S: to get foreground process group ID.
+?S:.
+?C:HAS_TCGETPGRP :
+?C: This symbol, if defined, indicates that the tcgetpgrp routine is
+?C: available to get foreground process group ID.
+?C:.
+?H:#$d_tcgetpgrp HAS_TCGETPGRP /**/
+?H:.
+?LINT:set d_tcgetpgrp
+: see if tcgetpgrp exists
+set tcgetpgrp d_tcgetpgrp
+eval $inlibc
+
diff --git a/mcon/U/d_tcstpgrp.U b/mcon/U/d_tcstpgrp.U
new file mode 100644
index 0000000..ba7aa42
--- /dev/null
+++ b/mcon/U/d_tcstpgrp.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_tcstpgrp.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:12:11 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_tcsetpgrp: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_tcsetpgrp:
+?S: This variable conditionally defines the HAS_TCSETPGRP symbol, which
+?S: indicates to the C program that the tcsetpgrp() routine is available
+?S: to set foreground process group ID.
+?S:.
+?C:HAS_TCSETPGRP :
+?C: This symbol, if defined, indicates that the tcsetpgrp routine is
+?C: available to set foreground process group ID.
+?C:.
+?H:#$d_tcsetpgrp HAS_TCSETPGRP /**/
+?H:.
+?LINT:set d_tcsetpgrp
+: see if tcsetpgrp exists
+set tcsetpgrp d_tcsetpgrp
+eval $inlibc
+
diff --git a/mcon/U/d_time.U b/mcon/U/d_time.U
new file mode 100644
index 0000000..8e5efa7
--- /dev/null
+++ b/mcon/U/d_time.U
@@ -0,0 +1,66 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_time.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 14:07:43 ram
+?RCS: patch56: typo fix, sytem -> system
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:16:38 ram
+?RCS: patch36: now uses new Typedef unit to compute type information (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:45 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X: Maybe <sys/types.h> should be included?
+?X:INC: i_systypes
+?MAKE:d_time timetype: Csym Setvar Findhdr Myread Typedef
+?MAKE: -pick add $@ %<
+?S:d_time:
+?S: This variable conditionally defines the HAS_TIME symbol, which indicates
+?S: that the time() routine exists. The time() routine is normaly
+?S: provided on UNIX systems.
+?S:.
+?S:timetype:
+?S: This variable holds the type returned by time(). It can be long,
+?S: or time_t on BSD sites (in which case <sys/types.h> should be
+?S: included). Anyway, the type Time_t should be used.
+?S:.
+?C:HAS_TIME (TIMER):
+?C: This symbol, if defined, indicates that the time() routine exists.
+?C:.
+?C:Time_t (TIMETYPE):
+?C: This symbol holds the type returned by time(). It can be long,
+?C: or time_t on BSD sites (in which case <sys/types.h> should be
+?C: included).
+?C:.
+?H:#$d_time HAS_TIME /**/
+?H:#define Time_t $timetype /* Time type */
+?H:.
+?LINT:set d_time
+: see if time exists
+echo " "
+if set time val -f d_time; eval $csym; $val; then
+ echo 'time() found.' >&4
+ val="$define"
+ set time_t timetype long stdio.h sys/types.h
+ eval $typedef
+ dflt="$timetype"
+ echo " "
+ rp="What type is returned by time() on this system?"
+ . ./myread
+ timetype="$ans"
+else
+ echo 'time() not found, hope that will do.' >&4
+ val="$undef"
+ timetype='int';
+fi
+set d_time
+eval $setvar
+
diff --git a/mcon/U/d_times.U b/mcon/U/d_times.U
new file mode 100644
index 0000000..c22c31f
--- /dev/null
+++ b/mcon/U/d_times.U
@@ -0,0 +1,74 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_times.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 14:07:50 ram
+?RCS: patch56: typo fix, sytem -> system
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:14:00 ram
+?RCS: patch32: now uses new Typedef unit to compute type information
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:46 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: What is the type returned by times() ?
+?X:
+?X: Force inclusion of <sys/types.h>
+?X:INC: i_systypes
+?MAKE:d_times clocktype: Csym Myread Typedef i_systimes
+?MAKE: -pick add $@ %<
+?S:d_times:
+?S: This variable conditionally defines the HAS_TIMES symbol, which indicates
+?S: that the times() routine exists. The times() routine is normaly
+?S: provided on UNIX systems. You may have to include <sys/times.h>.
+?S:.
+?S:clocktype:
+?S: This variable holds the type returned by times(). It can be long,
+?S: or clock_t on BSD sites (in which case <sys/types.h> should be
+?S: included).
+?S:.
+?C:HAS_TIMES (TIMES):
+?C: This symbol, if defined, indicates that the times() routine exists.
+?C: Note that this became obsolete on some systems (SUNOS), which now
+?C: use getrusage(). It may be necessary to include <sys/times.h>.
+?C:.
+?C:Clock_t (CLOCKTYPE):
+?C: This symbol holds the type returned by times(). It can be long,
+?C: or clock_t on BSD sites (in which case <sys/types.h> should be
+?C: included).
+?C:.
+?H:#$d_times HAS_TIMES /**/
+?H:#define Clock_t $clocktype /* Clock time */
+?H:.
+?T:val inc
+: see if times exists
+echo " "
+if set times val -f d_times; eval $csym; $val; then
+ echo 'times() found.' >&4
+ d_times="$define"
+ inc=''
+ case "$i_systimes" in
+ "$define") inc='sys/times.h';;
+ esac
+ set clock_t clocktype long stdio.h sys/types.h $inc
+ eval $typedef
+ dflt="$clocktype"
+ echo " "
+ rp="What type is returned by times() on this system?"
+ . ./myread
+ clocktype="$ans"
+else
+ echo 'times() NOT found, hope that will do.' >&4
+ d_times="$undef"
+?X: The following is needed for typedef (won't like an empty variable)
+ clocktype='int'
+fi
+
diff --git a/mcon/U/d_tminsys.U b/mcon/U/d_tminsys.U
new file mode 100644
index 0000000..3c81057
--- /dev/null
+++ b/mcon/U/d_tminsys.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_tminsys.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:47 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_tminsys: contains Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_tminsys:
+?S: This variable conditionally defines TM_IN_SYS if this system
+?S: declares "struct tm" in <sys/time.h> rather than <time.h>.
+?S:.
+?C:TM_IN_SYS (TMINSYS):
+?C: This symbol is defined if this system declares "struct tm" in
+?C: in <sys/time.h> rather than <time.h>. We can't just say
+?C: -I/usr/include/sys because some systems have both time files, and
+?C: the -I trick gets the wrong one.
+?C:.
+?H:#$d_tminsys TM_IN_SYS /**/
+?H:.
+?LINT:set d_tminsys
+: see if struct tm is defined in sys/time.h
+echo " "
+if $contains 'struct tm' `./findhdr time.h` >/dev/null 2>&1 ; then
+ echo "You have struct tm defined in <time.h> rather than <sys/time.h>." >&4
+ val="$undef"
+else
+ echo "You have struct tm defined in <sys/time.h> rather than <time.h>." >&4
+ val="$define"
+fi
+set d_tminsys
+eval $setvar
+
diff --git a/mcon/U/d_truncate.U b/mcon/U/d_truncate.U
new file mode 100644
index 0000000..75ca730
--- /dev/null
+++ b/mcon/U/d_truncate.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_truncate.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:48 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_truncate: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_truncate:
+?S: This variable conditionally defines HAS_TRUNCATE if truncate() is
+?S: available to truncate files.
+?S:.
+?C:HAS_TRUNCATE (TRUNCATE):
+?C: This symbol, if defined, indicates that the truncate routine is
+?C: available to truncate files.
+?C:.
+?H:#$d_truncate HAS_TRUNCATE /**/
+?H:.
+?LINT:set d_truncate
+: see if truncate exists
+set truncate d_truncate
+eval $inlibc
+
diff --git a/mcon/U/d_tzmin.U b/mcon/U/d_tzmin.U
new file mode 100644
index 0000000..23f4c9d
--- /dev/null
+++ b/mcon/U/d_tzmin.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_tzmin.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:16:58 ram
+?RCS: patch36: call ./bsd explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:49 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_tzmin: contains cppstdin cppminus timeincl rm Setvar Guess
+?MAKE: -pick add $@ %<
+?S:d_tzmin:
+?S: This symbol conditionally defines TZ_MINUTESWEST if the system uses
+?S: tz_minuteswest in time header instead of timezone.
+?S:.
+?C:TZ_MINUTESWEST:
+?C: This symbol is defined if this system uses tz_minuteswest
+?C: in time header instead of timezone.
+?C: If not defined, you may have to use struct timeb and ftime() rather
+?C: than the new gettimeofday() system call.
+?C:.
+?H:#$d_tzmin TZ_MINUTESWEST /**/
+?H:.
+?LINT:set d_tzmin
+: see if tz_minuteswest is defined in time header
+echo " "
+val="$undef"
+$cppstdin $cppminus < $timeincl > try 2>&1
+if $contains 'tz_minuteswest' try >/dev/null 2>&1; then
+echo "You have tz_minuteswest defined in $timeincl rather than timezone." >&4
+ val="$define"
+elif $contains 'timezone' try >/dev/null 2>&1; then
+echo "You have timezone defined in $timeincl rather than tz_minuteswest." >&4
+else
+ echo "Your $timeincl file looks strange." >&4
+fi
+if ./bsd; then
+ case "$d_tzmin" in
+ "$undef") echo "(Maybe your system is an USG one after all?)";;
+ esac
+fi
+set d_tzmin
+eval $setvar
+$rm -f try
+
diff --git a/mcon/U/d_tzname.U b/mcon/U/d_tzname.U
new file mode 100644
index 0000000..4cc2302
--- /dev/null
+++ b/mcon/U/d_tzname.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_tzname.U,v $
+?RCS: Revision 3.0.1.2 1994/08/29 16:14:43 ram
+?RCS: patch32: forgot to set proper value in the val variable
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 06:57:55 ram
+?RCS: patch30: created
+?RCS:
+?MAKE:d_tzname: Csym Setvar
+?MAKE: -pick add $@ %<
+?S:d_tzname:
+?S: This variable conditionally defines HAS_TZNAME if tzname[] is
+?S: available to access timezone names.
+?S:.
+?C:HAS_TZNAME:
+?C: This symbol, if defined, indicates that the tzname[] array is
+?C: available to access timezone names.
+?C:.
+?H:#$d_tzname HAS_TZNAME /**/
+?H:.
+?LINT:set d_tzname
+: see if tzname[] exists
+echo " "
+if set tzname val -a d_tzname; eval $csym; $val; then
+ val="$define"
+ echo 'tzname[] found.' >&4
+else
+ val="$undef"
+ echo 'tzname[] NOT found.' >&4
+fi
+set d_tzname
+eval $setvar
+
diff --git a/mcon/U/d_ulimit.U b/mcon/U/d_ulimit.U
new file mode 100644
index 0000000..da2e54a
--- /dev/null
+++ b/mcon/U/d_ulimit.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_ulimit.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:51 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_ulimit: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_ulimit:
+?S: This variable conditionally defines HAS_ULIMIT if ulimit() is
+?S: available to get the user limits.
+?S:.
+?C:HAS_ULIMIT (ULIMIT):
+?C: This symbol, if defined, indicates that the ulimit system call is
+?C: available to get the user limits.
+?C:.
+?H:#$d_ulimit HAS_ULIMIT /**/
+?H:.
+?LINT:set d_ulimit
+: see if ulimit exists
+set ulimit d_ulimit
+eval $inlibc
+
diff --git a/mcon/U/d_umask.U b/mcon/U/d_umask.U
new file mode 100644
index 0000000..bee9d02
--- /dev/null
+++ b/mcon/U/d_umask.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_umask.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:14:50 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_umask: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_umask:
+?S: This variable conditionally defines the HAS_UMASK symbol, which
+?S: indicates to the C program that the umask() routine is available.
+?S: to set and get the value of the file creation mask.
+?S:.
+?C:HAS_UMASK :
+?C: This symbol, if defined, indicates that the umask routine is
+?C: available to set and get the value of the file creation mask.
+?C:.
+?H:#$d_umask HAS_UMASK /**/
+?H:.
+?LINT:set d_umask
+: see if umask exists
+set umask d_umask
+eval $inlibc
+
diff --git a/mcon/U/d_usendir.U b/mcon/U/d_usendir.U
new file mode 100644
index 0000000..21484c3
--- /dev/null
+++ b/mcon/U/d_usendir.U
@@ -0,0 +1,79 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_usendir.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:47:34 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS: patch61: likewise for .o replaced by $_o
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:52 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_usendir i_ndir ndirlib: test Setvar Findhdr d_readdir _a
+?MAKE: -pick add $@ %<
+?S:d_usendir:
+?S: This variable conditionally defines the EMULATE_NDIR symbol, which
+?S: indicates to the C program that it should compile the ndir.c code
+?S: provided with the package.
+?S:.
+?S:i_ndir (d_libndir):
+?S: This variable conditionally defines the I_NDIR symbol, which
+?S: indicates to the C program that it should include the system's
+?S: version of ndir.h, rather than the one with this package.
+?S:.
+?S:ndirlib:
+?S: The name of the library to include at linking stage to resolve ndir
+?S: symbols. It is up to the makefile to use this value.
+?S:.
+?C:EMULATE_NDIR (USENDIR):
+?C: This symbol, if defined, indicates that the program should compile
+?C: the ndir.c code provided with the package.
+?C:.
+?C:I_NDIR (LIBNDIR):
+?C: This symbol, if defined, indicates that the program should include the
+?C: system's version of ndir.h, rather than the one with this package.
+?C:.
+?H:#$d_usendir EMULATE_NDIR /**/
+?H:#$i_ndir I_NDIR /**/
+?H:.
+?T:val2
+?LINT: set d_usendir i_ndir
+: see if there are directory access routines out there
+echo " "
+if $test `./findhdr ndir.h` && \
+ ( $test -r /usr/lib/libndir$_a || $test -r /usr/local/lib/libndir$_a ); then
+ echo "Ndir library found." >&4
+ if $test -r /usr/lib/libndir$_a; then
+ ndirlib='-lndir'
+ else
+ ndirlib="/usr/local/lib/libndir$_a"
+ fi
+ val2="$define"
+ val="$undef"
+else
+ ndirlib=''
+ val2="$undef"
+ case "$d_readdir" in
+ "$define")
+ echo "No ndir library found, but you have readdir() so we'll use that." >&4
+ val="$undef";
+ ;;
+ *)
+ echo "No ndir library found." >&4
+ val="$define"
+ ;;
+ esac
+fi
+set d_usendir
+eval $setvar
+val="$val2"
+set i_ndir
+eval $setvar
+
diff --git a/mcon/U/d_usleep.U b/mcon/U/d_usleep.U
new file mode 100644
index 0000000..b6dee14
--- /dev/null
+++ b/mcon/U/d_usleep.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_usleep.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:53 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_usleep: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_usleep:
+?S: This variable conditionally defines HAS_USLEEP if usleep() is
+?S: available to do high granularity sleeps.
+?S:.
+?C:HAS_USLEEP (USLEEP):
+?C: This symbol, if defined, indicates that the usleep routine is
+?C: available to let the process sleep on a sub-second accuracy.
+?C:.
+?H:#$d_usleep HAS_USLEEP /**/
+?H:.
+?LINT:set d_usleep
+: see if usleep exists
+set usleep d_usleep
+eval $inlibc
+
diff --git a/mcon/U/d_uwait.U b/mcon/U/d_uwait.U
new file mode 100644
index 0000000..e05eb8d
--- /dev/null
+++ b/mcon/U/d_uwait.U
@@ -0,0 +1,123 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_uwait.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:10:49 ram
+?RCS: patch16: added knowledge about wait3()
+?RCS: patch16: revised 'union wait' look-up algorithm
+?RCS: patch16: fixed make dependency line accordingly
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:54 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_uwait d_uwait3: cat contains cppstdin cppminus +cppflags rm \
+ Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_uwait:
+?S: This symbol conditionally defines UNION_WAIT which indicates to the C
+?S: program that argument for the wait() system call should be declared as
+?S: 'union wait status' instead of 'int status'.
+?S:.
+?S:d_uwait3:
+?S: This symbol conditionally defines UNION_WAIT3 which indicates to the C
+?S: program that the first argument for the wait3() system call should be
+?S: declared as 'union wait status' instead of 'int status'.
+?S:.
+?C:UNION_WAIT:
+?C: This symbol if defined indicates to the C program that the argument
+?C: for the wait() system call should be declared as 'union wait status'
+?C: instead of 'int status'. You probably need to include <sys/wait.h>
+?C: in the former case (see I_SYSWAIT).
+?C:.
+?C:UNION_WAIT3:
+?C: This symbol if defined indicates to the C program that the first argument
+?C: for the wait3() system call should be declared as 'union wait status'
+?C: instead of 'int status'. You probably need to include <sys/wait.h>
+?C: in the former case (see I_SYSWAIT). It seems safe to assume that the
+?C: same rule applies to the second parameter of wait4().
+?C:.
+?H:#$d_uwait UNION_WAIT /**/
+?H:#$d_uwait3 UNION_WAIT3 /**/
+?H:.
+?T:val2 flags f also
+?LINT:set d_uwait d_uwait3
+: see if union wait is available
+echo " "
+?X:
+?X: Unfortunately, we can't just grep <sys/wait.h> for "union wait" because
+?X: some weird systems (did I hear HP-UX?) define union wait only when _BSD
+?X: is defined. The same thing happens on OSF/1, who is pushing weirdness to
+?X: its limits by requiring wait() to use (int *) but wait3() to use
+?X: (union wait *), unless _BSD is defined and -lbsd is used, in which case
+?X: wait() also expects (union wait *). Aaargh!!--RAM
+?X:
+set X $cppflags
+shift
+flags=''
+also=''
+for f in $*; do
+ case "$f" in
+ *NO_PROTO*) ;;
+ *) flags="$flags $f";;
+ esac
+done
+$cat `./findhdr sys/wait.h` /dev/null | \
+ $cppstdin $flags $cppminus >wait.out 2>/dev/null
+if $contains 'union.*wait.*{' wait.out >/dev/null 2>&1 ; then
+ echo "Looks like your <sys/wait.h> knows about 'union wait'..." >&4
+ val="$define"
+@if UNION_WAIT
+ also='also '
+ if $contains 'extern.*wait[ ]*([ ]*int' wait.out >/dev/null 2>&1
+ then
+ echo "But wait() seems to expect an 'int' pointer (POSIX way)." >&4
+ val="$undef"
+ also=''
+ elif $contains 'extern.*wait[ ]*([ ]*union' wait.out >/dev/null 2>&1
+ then
+ echo "And indeed wait() expects an 'union wait' pointer (BSD way)." >&4
+ else
+ echo "So we'll use that for wait()." >&4
+ fi
+@end
+@if UNION_WAIT3 || d_uwait3
+ val2="$define"
+@end
+@if UNION_WAIT3
+ if $contains 'extern.*wait3[ ]*([ ]*int' wait.out >/dev/null 2>&1
+ then
+ echo "However wait3() seems to expect an 'int' pointer, weird." >&4
+ val2="$undef"
+ elif $contains 'extern.*wait3[ ]*([ ]*union' wait.out >/dev/null 2>&1
+ then
+ echo "And wait3() ${also}expects an 'union wait' pointer, fine." >&4
+ else
+ echo "As expected, wait3() ${also}uses an 'union wait' pointer." >&4
+ fi
+@end
+else
+ echo "No trace of 'union wait' in <sys/wait.h>..." >&4
+ val="$undef"
+@if UNION_WAIT && UNION_WAIT3
+ echo "Both wait() and wait3() will use a plain 'int' pointer then." >&4
+@elsif UNION_WAIT
+ echo "Your wait() should be happy with a plain 'int' pointer." >&4
+@elsif UNION_WAIT3
+ echo "Your wait3() should be happy with a plain 'int' pointer." >&4
+@end
+fi
+set d_uwait
+eval $setvar
+@if UNION_WAIT3 || d_uwait3
+val="$val2"; set d_uwait3
+eval $setvar
+@end
+$rm -f wait.out
+
diff --git a/mcon/U/d_vfork.U b/mcon/U/d_vfork.U
new file mode 100644
index 0000000..9bd7089
--- /dev/null
+++ b/mcon/U/d_vfork.U
@@ -0,0 +1,91 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_vfork.U,v $
+?RCS: Revision 3.0.1.6 1994/08/29 16:18:21 ram
+?RCS: patch32: set default to 'y' the first time
+?RCS:
+?RCS: Revision 3.0.1.5 1994/06/20 06:59:14 ram
+?RCS: patch30: usevfork was not always properly set
+?RCS:
+?RCS: Revision 3.0.1.4 1994/05/13 15:20:56 ram
+?RCS: patch27: modified to avoid spurious Whoa warnings (ADO)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/05/06 14:59:09 ram
+?RCS: patch23: now explicitely ask whether vfork() should be used (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1993/10/16 13:49:39 ram
+?RCS: patch12: added magic for vfork()
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:06:57 ram
+?RCS: patch10: removed automatic remapping of vfork on fork (WAD)
+?RCS: patch10: added compatibility code for older config.sh (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:55 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_vfork usevfork: Inlibc Myread Oldconfig Setvar
+?MAKE: -pick add $@ %<
+?S:d_vfork:
+?S: This variable conditionally defines the HAS_VFORK symbol, which
+?S: indicates the vfork() routine is available.
+?S:.
+?S:usevfork:
+?S: This variable is set to true when the user accepts to use vfork.
+?S: It is set to false when no vfork is available or when the user
+?S: explicitely requests not to use vfork.
+?S:.
+?C:HAS_VFORK (VFORK):
+?C: This symbol, if defined, indicates that vfork() exists.
+?C:.
+?H:#$d_vfork HAS_VFORK /**/
+?H:.
+?M:vfork: HAS_VFORK
+?M:#ifndef HAS_VFORK
+?M:#define vfork fork
+?M:#endif
+?M:.
+?LINT:set d_vfork
+: see if there is a vfork
+val=''
+set vfork val
+eval $inlibc
+
+: Ok, but do we want to use it. vfork is reportedly unreliable in
+: perl on Solaris 2.x, and probably elsewhere.
+case "$val" in
+$define)
+ echo " "
+ case "$usevfork" in
+ false) dflt='n';;
+ *) dflt='y';;
+ esac
+ rp="Some systems have problems with vfork(). Do you want to use it?"
+ . ./myread
+ case "$ans" in
+ y|Y) ;;
+ *)
+ echo "Ok, we won't use vfork()."
+ val="$undef"
+ ;;
+ esac
+ ;;
+esac
+?X:
+?X: Only set it when final value is known to avoid spurious Whoas
+?X: Then set usevfork accordingly to the current value, for next run
+?X:
+set d_vfork
+eval $setvar
+case "$d_vfork" in
+$define) usevfork='true';;
+*) usevfork='false';;
+esac
+
diff --git a/mcon/U/d_voidsig.U b/mcon/U/d_voidsig.U
new file mode 100644
index 0000000..d91dc51
--- /dev/null
+++ b/mcon/U/d_voidsig.U
@@ -0,0 +1,89 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_voidsig.U,v $
+?RCS: Revision 3.0.1.3 1995/05/12 12:12:46 ram
+?RCS: patch54: made cppflags dependency optional
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:20:35 ram
+?RCS: patch32: now sets signal_t only once d_voidsig is known (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 06:59:54 ram
+?RCS: patch30: now properly sets signal_t when re-using previous value
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_voidsig signal_t: rm contains cppstdin cppminus +cppflags test Myread \
+ Oldconfig Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_voidsig:
+?S: This variable conditionally defines VOIDSIG if this system
+?S: declares "void (*signal(...))()" in signal.h. The old way was to
+?S: declare it as "int (*signal(...))()".
+?S:.
+?S:signal_t:
+?S: This variable holds the type of the signal handler (void or int).
+?S:.
+?C:VOIDSIG:
+?C: This symbol is defined if this system declares "void (*signal(...))()" in
+?C: signal.h. The old way was to declare it as "int (*signal(...))()". It
+?C: is up to the package author to declare things correctly based on the
+?C: symbol.
+?C:.
+?C:Signal_t (SIGNAL_T):
+?C: This symbol's value is either "void" or "int", corresponding to the
+?C: appropriate return type of a signal handler. Thus, you can declare
+?C: a signal handler using "Signal_t (*handler)()", and define the
+?C: handler using "Signal_t handler(sig)".
+?C:.
+?H:#$d_voidsig VOIDSIG /**/
+?H:#define Signal_t $signal_t /* Signal handler's return type */
+?H:.
+?T:xxx
+?LINT:set d_voidsig
+: see if signal is declared as pointer to function returning int or void
+echo " "
+xxx=`./findhdr signal.h`
+$test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
+if $contains 'int.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
+ echo "You have int (*signal())() instead of void." >&4
+ val="$undef"
+elif $contains 'void.*\*[ ]*signal' $$.tmp >/dev/null 2>&1 ; then
+ echo "You have void (*signal())() instead of int." >&4
+ val="$define"
+elif $contains 'extern[ ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
+ echo "You have int (*signal())() instead of void." >&4
+ val="$undef"
+else
+ case "$d_voidsig" in
+ '')
+ echo "I can't determine whether signal handler returns void or int..." >&4
+ dflt=void
+ rp="What type does your signal handler return?"
+ . ./myread
+ case "$ans" in
+ v*) val="$define";;
+ *) val="$undef";;
+ esac;;
+ "$define")
+ echo "As you already told me, signal handler returns void." >&4;;
+ *)
+ echo "As you already told me, signal handler returns int." >&4;;
+ esac
+fi
+set d_voidsig
+eval $setvar
+case "$d_voidsig" in
+"$define") signal_t="void";;
+*) signal_t="int";;
+esac
+$rm -f $$.tmp
+
diff --git a/mcon/U/d_volatile.U b/mcon/U/d_volatile.U
new file mode 100644
index 0000000..f94ca4f
--- /dev/null
+++ b/mcon/U/d_volatile.U
@@ -0,0 +1,74 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_volatile.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 14:08:49 ram
+?RCS: patch56: made cc and ccflags optional dependencies
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/09 11:49:51 ram
+?RCS: patch9: volatile definition was swapped over with undef
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:07:57 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_volatile: cat +cc +ccflags rm Setvar
+?MAKE: -pick add $@ %<
+?S:d_volatile:
+?S: This variable conditionally defines the HASVOLATILE symbol, which
+?S: indicates to the C program that this C compiler knows about the
+?S: volatile declaration.
+?S:.
+?C:HASVOLATILE ~ %<:
+?C: This symbol, if defined, indicates that this C compiler knows about
+?C: the volatile declaration.
+?C:.
+?H:?%<:#$d_volatile HASVOLATILE /**/
+?H:?%<:#ifndef HASVOLATILE
+?H:?%<:#define volatile
+?H:?%<:#endif
+?H:.
+?W:%<:volatile
+?LINT:set d_volatile
+?LINT:known volatile
+: check for volatile keyword
+echo " "
+echo 'Checking to see if your C compiler knows about "volatile"...' >&4
+$cat >try.c <<'EOCP'
+int main()
+{
+?X:
+?X: The following seven lines added by Bill Campbell <billc@sierra.com>
+?X: detect that MIPS compilers do not handle volatile in all situations.
+?X:
+ typedef struct _goo_struct goo_struct;
+ goo_struct * volatile goo = ((goo_struct *)0);
+ struct _goo_struct {
+ long long_int;
+ int reg_int;
+ char char_var;
+ };
+ typedef unsigned short foo_t;
+ char *volatile foo;
+ volatile int bar;
+ volatile foo_t blech;
+ foo = foo;
+}
+EOCP
+if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
+ val="$define"
+ echo "Yup, it does."
+else
+ val="$undef"
+ echo "Nope, it doesn't."
+fi
+set d_volatile
+eval $setvar
+$rm -f try.*
+
diff --git a/mcon/U/d_vprintf.U b/mcon/U/d_vprintf.U
new file mode 100644
index 0000000..f74422d
--- /dev/null
+++ b/mcon/U/d_vprintf.U
@@ -0,0 +1,81 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_vprintf.U,v $
+?RCS: Revision 3.0 1993/08/18 12:07:59 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_vprintf d_charvspr: Guess cat +cc +ccflags Csym Setvar
+?MAKE: -pick add $@ %<
+?S:d_vprintf:
+?S: This variable conditionally defines the HAS_VPRINTF symbol, which
+?S: indicates to the C program that the vprintf() routine is available
+?S: to printf with a pointer to an argument list.
+?S:.
+?S:d_charvspr:
+?S: This variable conditionally defines CHARVSPRINTF if this system
+?S: has vsprintf returning type (char*). The trend seems to be to
+?S: declare it as "int vsprintf()".
+?S:.
+?C:HAS_VPRINTF (VPRINTF):
+?C: This symbol, if defined, indicates that the vprintf routine is available
+?C: to printf with a pointer to an argument list. If unavailable, you
+?C: may need to write your own, probably in terms of _doprnt().
+?C:.
+?C:USE_CHAR_VSPRINTF (CHARVSPRINTF):
+?C: This symbol is defined if this system has vsprintf() returning type
+?C: (char*). The trend seems to be to declare it as "int vsprintf()". It
+?C: is up to the package author to declare vsprintf correctly based on the
+?C: symbol.
+?C:.
+?H:#$d_vprintf HAS_VPRINTF /**/
+?H:#$d_charvspr USE_CHAR_VSPRINTF /**/
+?H:.
+?F:!vprintf !vprintf.c
+?T:val2
+?LINT:set d_vprintf d_charvspr
+: see if vprintf exists
+echo " "
+if set vprintf val -f d_vprintf; eval $csym; $val; then
+ echo 'vprintf() found.' >&4
+ val="$define"
+ $cat >vprintf.c <<'EOF'
+#include <varargs.h>
+
+int main() { xxx("foo"); }
+
+xxx(va_alist)
+va_dcl
+{
+ va_list args;
+ char buf[10];
+
+ va_start(args);
+ exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
+}
+EOF
+ if $cc $ccflags -o vprintf vprintf.c >/dev/null 2>&1 && ./vprintf; then
+ echo "Your vsprintf() returns (int)." >&4
+ val2="$undef"
+ else
+ echo "Your vsprintf() returns (char*)." >&4
+ val2="$define"
+ fi
+else
+ echo 'vprintf() NOT found.' >&4
+ val="$undef"
+ val2="$undef"
+fi
+set d_vprintf
+eval $setvar
+val=$val2
+set d_charvspr
+eval $setvar
+
diff --git a/mcon/U/d_wait3.U b/mcon/U/d_wait3.U
new file mode 100644
index 0000000..16a92b0
--- /dev/null
+++ b/mcon/U/d_wait3.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_wait3.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_wait3: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_wait3:
+?S: This variable conditionally defines the HAS_WAIT3 symbol, which
+?S: indicates to the C program that the wait3() subroutine exists.
+?S:.
+?C:HAS_WAIT3:
+?C: This symbol, if defined, indicates that the wait3() subroutine
+?C: exists.
+?C:.
+?H:#$d_wait3 HAS_WAIT3 /**/
+?H:.
+?LINT:set d_wait3
+: see if 'wait3()' exists
+set wait3 d_wait3
+eval $inlibc
+
diff --git a/mcon/U/d_wait4.U b/mcon/U/d_wait4.U
new file mode 100644
index 0000000..eadb82b
--- /dev/null
+++ b/mcon/U/d_wait4.U
@@ -0,0 +1,30 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_wait4.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_wait4: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_wait4:
+?S: This variable conditionally defines the HAS_WAIT4 symbol, which
+?S: indicates the wait4() routine is available.
+?S:.
+?C:HAS_WAIT4 (WAIT4):
+?C: This symbol, if defined, indicates that wait4() exists.
+?C:.
+?H:#$d_wait4 HAS_WAIT4 /**/
+?H:.
+?LINT:set d_wait4
+: see if there is a wait4
+set wait4 d_wait4
+eval $inlibc
+
diff --git a/mcon/U/d_waitpid.U b/mcon/U/d_waitpid.U
new file mode 100644
index 0000000..f0e4c53
--- /dev/null
+++ b/mcon/U/d_waitpid.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_waitpid.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:02 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_waitpid: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_waitpid:
+?S: This variable conditionally defines HAS_WAITPID if waitpid() is
+?S: available to wait for child process.
+?S:.
+?C:HAS_WAITPID (WAITPID):
+?C: This symbol, if defined, indicates that the waitpid routine is
+?C: available to wait for child process.
+?C:.
+?H:#$d_waitpid HAS_WAITPID /**/
+?H:.
+?LINT:set d_waitpid
+: see if waitpid exists
+set waitpid d_waitpid
+eval $inlibc
+
diff --git a/mcon/U/d_wcstombs.U b/mcon/U/d_wcstombs.U
new file mode 100644
index 0000000..e68ff9d
--- /dev/null
+++ b/mcon/U/d_wcstombs.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_wcstombs.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:03 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_wcstombs: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_wcstombs:
+?S: This variable conditionally defines the HAS_WCSTOMBS symbol, which
+?S: indicates to the C program that the wcstombs() routine is available
+?S: to convert wide character strings to multibyte strings.
+?S:.
+?C:HAS_WCSTOMBS:
+?C: This symbol, if defined, indicates that the wcstombs routine is
+?C: available to convert wide character strings to multibyte strings.
+?C:.
+?H:#$d_wcstombs HAS_WCSTOMBS /**/
+?H:.
+?LINT:set d_wcstombs
+: see if wcstombs exists
+set wcstombs d_wcstombs
+eval $inlibc
+
diff --git a/mcon/U/d_wctomb.U b/mcon/U/d_wctomb.U
new file mode 100644
index 0000000..41724ab
--- /dev/null
+++ b/mcon/U/d_wctomb.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: d_wctomb.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:20:43 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:d_wctomb: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_wctomb:
+?S: This variable conditionally defines the HAS_WCTOMB symbol, which
+?S: indicates to the C program that the wctomb() routine is available
+?S: to convert a wide character to a multibyte.
+?S:.
+?C:HAS_WCTOMB (WCTOMB):
+?C: This symbol, if defined, indicates that the wctomb routine is available
+?C: to covert a wide character to a multibyte.
+?C:.
+?H:#$d_wctomb HAS_WCTOMB /**/
+?H:.
+?LINT:set d_wctomb
+: see if wctomb exists
+set wctomb d_wctomb
+eval $inlibc
+
diff --git a/mcon/U/d_wifstat.U b/mcon/U/d_wifstat.U
new file mode 100644
index 0000000..c78684e
--- /dev/null
+++ b/mcon/U/d_wifstat.U
@@ -0,0 +1,87 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_wifstat.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:47:43 ram
+?RCS: patch61: added a ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.2 1995/07/25 14:09:10 ram
+?RCS: patch56: re-arranged compile line to include ldflags before objects
+?RCS:
+?RCS: Revision 3.0.1.1 1995/03/21 08:47:46 ram
+?RCS: patch52: created
+?RCS:
+?MAKE:d_wifstat: d_uwait +cc +ccflags +ldflags +libs Oldconfig cat rm
+?MAKE: -pick add $@ %<
+?S:d_wifstat:
+?S: This symbol conditionally defines USE_WIFSTAT if the C program can
+?S: safely use the WIFxxx macros with the kind of wait() parameter
+?S: declared in the program (see UNION_WAIT), or if it can't. Should
+?S: only matter on HP-UX, where the macros are incorrectly written and
+?S: therefore cause programs using them with an 'union wait' variable
+?S: to not compile properly.
+?S:.
+?C:USE_WIFSTAT:
+?C: This symbol, if defined, indicates to the C program that the argument
+?C: for the WIFxxx set of macros such as WIFSIGNALED or WIFEXITED can
+?C: be of the same kind as the one used to hold the wait() status. Should
+?C: only matter on HP-UX, where the macros are incorrectly written and
+?C: therefore cause programs using them with an 'union wait' variable
+?C: to not compile properly. See also UNION_WAIT.
+?C:.
+?H:#$d_wifstat USE_WIFSTAT /**/
+?H:.
+?T:type
+?F:!foo
+: see if we can use WIFxxx macros
+echo " "
+case "$d_wifstat" in
+"$define") echo "As before, you can safely use WIFEXITED and friends!" >&4;;
+"$undef") echo "You still can't use WIFEXITED and friends!" >&4;;
+*)
+ echo "Let's see whether you can use the WIFEXITED(status) macro and its"
+ case "$d_uwait" in
+ "$define") type='union wait';;
+ *) type='int';;
+ esac
+ echo "friends with status declared as '$type status'..."
+ $cat >foo.c <<EOCP
+#include <sys/types.h>
+#include <sys/wait.h>
+
+int main()
+{
+ $type status;
+ int e = 0;
+
+#ifdef WIFEXITED
+ if (WIFEXITED(status))
+ printf("\n");
+ exit(0);
+#else
+ exit(2);
+#endif
+}
+EOCP
+ d_wifstat="$undef"
+ if $cc $ccflags $ldflags -o foo foo.c $libs >/dev/null 2>&1; then
+ if ./foo >/dev/null; then
+ echo "Great! Looks like we can use the WIFxxx macros." >&4
+ d_wifstat="$define"
+ else
+ echo "You don't seem to have WIFxxx macros, but that's ok." >&4
+ fi
+ else
+ echo "Apparently you can't use WIFxxx macros properly." >&4
+ fi
+ $rm -f foo.* foo core
+ ;;
+esac
+
diff --git a/mcon/U/d_xdrs.U b/mcon/U/d_xdrs.U
new file mode 100644
index 0000000..cef7c0e
--- /dev/null
+++ b/mcon/U/d_xdrs.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_xdrs.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:04 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_xdrs: cat Csym Setvar
+?MAKE: -pick add $@ %<
+?S:d_xdrs:
+?S: This symbol conditionally defines HAS_XDRS which indicates to the C
+?S: program that XDR serialization routines are available.
+?S:.
+?C:HAS_XDRS (XDRS):
+?C: This symbol if defined indicates to the C program that the XDR
+?C: serialization routines are available to transfer data accross
+?C: various architectures.
+?C:.
+?H:#$d_xdrs HAS_XDRS /**/
+?H:.
+?LINT:set d_xdrs
+: see if XDR is available
+echo " "
+if set xdr_int val -f d_xdrs; eval $csym; $val; then
+ echo "Ahh! You have XDR routines for network communications." >&4
+ val="$define"
+else
+ $cat >&4 <<EOM
+Sigh! You do not have XDR routines -- Network communications may be hazardous.
+EOM
+ val="$undef"
+fi
+set d_xdrs
+eval $setvar
+
diff --git a/mcon/U/defeditor.U b/mcon/U/defeditor.U
new file mode 100644
index 0000000..799afd3
--- /dev/null
+++ b/mcon/U/defeditor.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: defeditor.U,v $
+?RCS: Revision 3.0.1.1 1995/01/11 15:30:16 ram
+?RCS: patch45: can now use the 'vi' variable since path stripping is deferred
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:05 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:defeditor: Getfile Oldconfig Loc vi
+?MAKE: -pick add $@ %<
+?S:defeditor:
+?S: This variable contains the eventual value of the DEFEDITOR symbol,
+?S: which contains the name of the default editor.
+?S:.
+?C:DEFEDITOR:
+?C: This symbol contains the full pathname of the default editor.
+?C:.
+?H:#define DEFEDITOR "$defeditor" /**/
+?H:.
+: determine default editor
+echo " "
+case "$defeditor" in
+'')
+ case "$vi" in
+ */*) dflt="$vi";;
+ *) dflt=/usr/ucb/vi;;
+ esac
+ ;;
+*) dflt="$defeditor"
+ ;;
+esac
+fn=f/
+rp="What is the default editor on your system?"
+. ./getfile
+defeditor="$ans"
+
diff --git a/mcon/U/doublesize.U b/mcon/U/doublesize.U
new file mode 100644
index 0000000..8637c1e
--- /dev/null
+++ b/mcon/U/doublesize.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: doublesize.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:17:06 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:06 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:doublesize: cat rm Myread +cc +ccflags
+?MAKE: -pick add $@ %<
+?S:doublesize:
+?S: This variable contains the value of the DOUBLESIZE symbol, which
+?S: indicates to the C program how many bytes there are in a double.
+?S:.
+?C:DOUBLESIZE:
+?C: This symbol contains the size of a double, so that the C preprocessor
+?C: can make decisions based on it.
+?C:.
+?H:#define DOUBLESIZE $doublesize /**/
+?H:.
+?F:!try
+: check for length of double
+echo " "
+case "$doublesize" in
+'')
+ echo "Checking to see how big your double precision numbers are..." >&4
+ $cat >try.c <<'EOCP'
+#include <stdio.h>
+int main()
+{
+ printf("%d\n", sizeof(double));
+}
+EOCP
+ if $cc $ccflags -o try try.c >/dev/null 2>&1 ; then
+ dflt=`./try`
+ else
+ dflt='8'
+ echo "(I can't seem to compile the test program. Guessing...)"
+ fi
+ ;;
+*)
+ dflt="$doublesize"
+ ;;
+esac
+rp="What is the size of a double precision number (in bytes)?"
+. ./myread
+doublesize="$ans"
+$rm -f try.c try
+
diff --git a/mcon/U/ebcdic.U b/mcon/U/ebcdic.U
new file mode 100644
index 0000000..6a05eef
--- /dev/null
+++ b/mcon/U/ebcdic.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 1998 Andy Dougherty
+?RCS:
+?RCS: Original author Jarkko Hietaniemi <jhi@iki.fi>
+?RCS: Merged into dist by Andy Dougherty July 13, 1998
+?RCS:
+?MAKE:ebcdic: Compile Setvar cat rm run
+?MAKE: -pick add $@ %<
+?S:ebcdic:
+?S: This variable conditionally defines EBCDIC if this
+?S: system uses EBCDIC encoding. Among other things, this
+?S: means that the character ranges are not contiguous.
+?S: See trnl.U
+?S:.
+?C:EBCDIC:
+?C: This symbol, if defined, indicates that this system uses
+?C: EBCDIC encoding.
+?C:.
+?H:#$ebcdic EBCDIC /**/
+?H:.
+?F:!try
+?LINT:set ebcdic
+: look whether system uses EBCDIC
+echo " "
+echo "Determining whether or not we are on an EBCDIC system..." >&4
+$cat >try.c <<'EOM'
+int main()
+{
+ if ('M'==0xd4) return 0;
+ return 1;
+}
+EOM
+val=$undef
+set try
+if eval $compile_ok; then
+ if $run ./try; then
+ echo "You seem to speak EBCDIC." >&4
+ val="$define"
+ else
+ echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
+ fi
+else
+ echo "I'm unable to compile the test program." >&4
+ echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
+fi
+$rm -f try try.*
+set ebcdic
+eval $setvar
+
diff --git a/mcon/U/errnolist.U b/mcon/U/errnolist.U
new file mode 100644
index 0000000..d9f5a37
--- /dev/null
+++ b/mcon/U/errnolist.U
@@ -0,0 +1,106 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: errnolist.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:48:01 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS: patch61: likewise for .o replaced by $_o
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:10:54 ram
+?RCS: patch16: created
+?RCS:
+?MAKE:errnolist errnolist_SH errnolist_a errnolist_c errnolist_o: cat +cc \
+ +ccflags +libs +d_sysernlst _a _o
+?MAKE: -pick add $@ %<
+?S:errnolist:
+?S: This variable holds the base name of a file containing the
+?S: definition of the sys_errnolist array, if the C library
+?S: doesn't provide it already. Otherwise, its value is empty.
+?S: The following lines should be included in your Makefile.SH:
+?S:
+?S: case "$errnolist" in
+?S: '') ;;
+?S: *)
+?S: $spitshell >>Makefile <<!GROK!THIS!
+?S: $errnolist_c: $errnolist_SH $errnolist_a
+?S: sh ./$errnolist_SH
+?S:
+?S: !GROK!THIS!
+?S: ;;
+?S: esac
+?S:
+?S: You may define the 'errnolist' variable in your Myinit.U if you
+?S: wish to override its default value "errnolist".
+?S:.
+?S:errnolist_SH:
+?S: This is the name of a file which will generate errnolistc.
+?S:.
+?S:errnolist_a:
+?S: This is the name of the awk script called by errnolist_SH.
+?S:.
+?S:errnolist_c:
+?S: This is the name of a generated C file which provides the
+?S: definition of the sys_errnolist array.
+?S:.
+?S:errnolist_o:
+?S: This is the name of the object file which provides the
+?S: definition of the sys_errnolist array, if the C library
+?S: doesn't provide it already. Otherwise, its value is empty.
+?S:.
+?INIT:errnolist=errnolist
+: check for sys_errnolist
+@if d_sysernlst || HAS_SYS_ERRNOLIST
+case "$d_sysernlst" in
+"$define")
+ errnolist=''
+ errnolist_SH=''
+ errnolist_a=''
+ errnolist_c=''
+ errnolist_o=''
+ ;;
+*)
+ echo " "
+ echo "I'll make sure your Makefile provides sys_errnolist in $errnolist.c"
+ errnolist_SH=$errnolist.SH
+ errnolist_a=$errnolist$_a
+ errnolist_c=$errnolist.c
+ errnolist_o=$errnolist$_o
+ ;;
+esac
+@else
+echo " "
+$cat <<EOM
+Checking to see if your C library provides us with sys_errnolist[]...
+EOM
+$cat >errnolist.c <<'EOCP'
+extern char *sys_errnolist[];
+int main() {
+ char *p0 = sys_errnolist[0];
+ char *p1 = sys_errnolist[1];
+
+ return (p0 == p1); /* Make sure they're not optimized away */
+}
+EOCP
+if $cc $ccflags -o errnolist errnolist.c $libs >/dev/null 2>&1 ; then
+ echo "It does."
+ errnolist=''
+ errnolist_SH=''
+ errnolist_a=''
+ errnolist_c=''
+ errnolist_o=''
+else
+ echo "I'll make sure your Makefile provides sys_errnolist in $errnolist.c"
+ errnolist_SH=$errnolist.SH
+ errnolist_a=$errnolist$_a
+ errnolist_c=$errnolist.c
+ errnolist_o=$errnolist$_o
+fi
+@end
+
diff --git a/mcon/U/etc.U b/mcon/U/etc.U
new file mode 100644
index 0000000..4414fbd
--- /dev/null
+++ b/mcon/U/etc.U
@@ -0,0 +1,42 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: etc.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:07 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:etc etcexp: Getfile Loc Oldconfig
+?MAKE: -pick add $@ %<
+?S:etc:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put "administrative" executable images for the package in question.
+?S: It is most often a local directory such as /usr/local/etc. Programs
+?S: relying on this variable must be prepared to deal with ~name
+?S: substitutions.
+?S:.
+?S:etcexp:
+?S: This is the same as the etc variable, but is filename expanded at
+?S: configuration time, for convenient use in makefiles.
+?S:.
+: determine where administrative executables go
+case "$etc" in
+'')
+ dflt=`./loc . /local/etc /usr/local/etc /local/etc /usr/etc /etc`
+ ;;
+*)
+ dflt="$etc"
+ ;;
+esac
+fn=d~
+rp='Where should the administrative executables go?'
+. ./getfile
+etc="$ans"
+etcexp="$ansexp"
+
diff --git a/mcon/U/filexp.U b/mcon/U/filexp.U
new file mode 100644
index 0000000..73bf64d
--- /dev/null
+++ b/mcon/U/filexp.U
@@ -0,0 +1,30 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: filexp.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:filexp: privlib
+?MAKE: -pick add $@ %<
+?S:filexp:
+?S: This symbol contains the full pathname of the filexp script, in case we
+?S: are saving the script for posterity.
+?S:.
+: must not allow self reference
+case "$privlib" in
+ /*)
+ filexp=$privlib/filexp
+ ;;
+ *)
+ filexp=`pwd`/filexp
+ ;;
+esac
+
diff --git a/mcon/U/floatsize.U b/mcon/U/floatsize.U
new file mode 100644
index 0000000..efc958a
--- /dev/null
+++ b/mcon/U/floatsize.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: floatsize.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:17:09 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:09 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:floatsize: cat rm Myread +cc +ccflags
+?MAKE: -pick add $@ %<
+?S:floatsize:
+?S: This variable contains the value of the FLOATSIZE symbol, which
+?S: indicates to the C program how many bytes there are in a float.
+?S:.
+?C:FLOATSIZE:
+?C: This symbol contains the size of a float, so that the C preprocessor
+?C: can make decisions based on it.
+?C:.
+?H:#define FLOATSIZE $floatsize /**/
+?H:.
+?F:!try
+: check for length of float
+echo " "
+case "$floatsize" in
+'')
+ echo "Checking to see how big your floating point numbers are..." >&4
+ $cat >try.c <<'EOCP'
+#include <stdio.h>
+int main()
+{
+ printf("%d\n", sizeof(float));
+}
+EOCP
+ if $cc $ccflags -o try try.c >/dev/null 2>&1 ; then
+ dflt=`./try`
+ else
+ dflt='4'
+ echo "(I can't seem to compile the test program. Guessing...)"
+ fi
+ ;;
+*)
+ dflt="$floatsize"
+ ;;
+esac
+rp="What is the size of a floating point number (in bytes)?"
+. ./myread
+floatsize="$ans"
+$rm -f try.c try
+
diff --git a/mcon/U/fpostype.U b/mcon/U/fpostype.U
new file mode 100644
index 0000000..8270ba9
--- /dev/null
+++ b/mcon/U/fpostype.U
@@ -0,0 +1,39 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: fpostype.U,v $
+?RCS: Revision 3.0.1.2 1994/08/29 16:20:52 ram
+?RCS: patch32: now uses new Typedef unit to compute type information
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 06:59:59 ram
+?RCS: patch30: created
+?RCS:
+?MAKE:fpostype: Myread Typedef
+?MAKE: -pick add $@ %<
+?S:fpostype:
+?S: This variable defines Fpos_t to be something like fpost_t, long,
+?S: uint, or whatever type is used to declare file positions in libc.
+?S:.
+?C:Fpos_t:
+?C: This symbol holds the type used to declare file positions in libc.
+?C: It can be fpos_t, long, uint, etc... It may be necessary to include
+?C: <sys/types.h> to get any typedef'ed information.
+?C:.
+?H:#define Fpos_t $fpostype /* File position type */
+?H:.
+: see what type file positions are declared as in the library
+set fpos_t fpostype long stdio.h sys/types.h
+eval $typedef
+echo " "
+dflt="$fpostype"
+rp="What is the type for file position used by fsetpos()?"
+. ./myread
+fpostype="$ans"
+
diff --git a/mcon/U/fpu.U b/mcon/U/fpu.U
new file mode 100644
index 0000000..5e6cb09
--- /dev/null
+++ b/mcon/U/fpu.U
@@ -0,0 +1,73 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: fpu.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:10 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:fpu: test cat cc Myread
+?MAKE: -pick add $@ %<
+?S:fpu (fpunit):
+?S: Set to be the compile flag for the local floating point unit.
+?S:.
+?C:FPU (FPUNIT):
+?C: String containing the flags for the local floating point unit.
+?C:.
+?H:#define FPU "$fpu" /**/
+?H:.
+: see what floating point compile flags should be used.
+fpu=''
+if $test -r /dev/fpa; then
+ $cat>fpa.c << GOOP
+ main(){return(1);}
+GOOP
+ $cc -ffpa -o fpa fpa.c
+ fpa > fpa.out 2>&1
+ if $test ! -s fpa.out; then
+ dflt='y'
+ $cat <<'EOM'
+
+You seem to have a sun fpa... I can compile the code to use the fpa but it will
+mean that the code can ONLY run on a machine with a fpa...
+
+EOM
+ rp="Should I compile for fpa?"
+ . ./myread
+ if $test $ans = "n"; then
+ fpu=''
+ else
+ fpu='-ffpa'
+ fi
+ else
+ $cat <<'EOM'
+
+You have the fpa device but I can't seem to use it. Maybe you should talk to
+your sysadmin about this. For now, I am not going to compile it in.
+
+EOM
+ fi
+fi
+if $test "$fpu" = ''; then
+ if $test -r /usr/etc/mc68881version; then
+ dflt='y'
+ $cat <<'EOM'
+
+There also seems to be the pieces for a 68881. If I compile this in, it will
+work on almost all Sun 3's except for a few Sun-3/50s without a 68881...
+
+EOM
+ rp="Should I compile for a 68881?"
+ . ./myread
+ if $test $ans = "y"; then
+ fpu='-f68881'
+ fi
+ fi
+fi
+
diff --git a/mcon/U/gccvers.U b/mcon/U/gccvers.U
new file mode 100644
index 0000000..afd520f
--- /dev/null
+++ b/mcon/U/gccvers.U
@@ -0,0 +1,117 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 2000, Jarkko Hietaniemi
+?RCS:
+?MAKE:gccversion gccosandvers: cat cpp rm +cc \
+ Mcc Myread Guess Options Oldconfig Loc osname osvers grep run ccname
+?MAKE: -pick add $@ %<
+?S:gccversion:
+?S: If GNU cc (gcc) is used, this variable holds '1' or '3' (for instance)
+?S: to indicate whether the compiler is version 1 or 3. This is used in
+?S: setting some of the default cflags. It is set to '' if not gcc.
+?S:.
+?S:gccosandvers:
+?S: If GNU cc (gcc) is used, this variable the operating system and
+?S: version used to compile the gcc. It is set to '' if not gcc,
+?S: or if nothing useful can be parsed as the os version.
+?S:.
+?T:gccshortvers incdir d
+?F:!try.c !try
+?LINT:extern locincpth ccflags ldflags
+?LINT:change locincpth ccname cpp
+: Check whether they have gcc in any guise.
+echo " "
+echo "Checking for GNU cc in disguise and/or its version number..." >&4
+$cat >try.c <<EOM
+#include <stdio.h>
+int main() {
+#ifdef __GNUC__
+#ifdef __VERSION__
+ printf("%s\n", __VERSION__);
+#else
+ printf("%s\n", "1");
+#endif
+#endif
+ exit(0);
+}
+EOM
+if $cc -o try $ccflags $ldflags try.c >/dev/null 2>&1; then
+ gccversion=`$run ./try`
+ case "$gccversion" in
+ '') echo "You are not using GNU cc." ;;
+ *) echo "You are using GNU cc $gccversion."
+ ccname=gcc
+ ;;
+ esac
+else
+ echo " "
+ echo "*** WHOA THERE!!! ***" >&4
+ echo " Your C compiler \"$cc\" doesn't seem to be working!" >&4
+?X: using -K will prevent aborting--maybe they're cross compiling?
+ case "$knowitall" in
+ '')
+ echo " You'd better start hunting for one and let me know about it." >&4
+ exit 1
+ ;;
+ esac
+fi
+$rm -f try try.*
+case "$gccversion" in
+1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
+esac
+case "$gccversion" in
+'') gccosandvers='' ;;
+*) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
+ gccosandvers=`$cc -v 2>&1 | \
+ $grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
+ gccshortvers=''
+ case "$gccosandvers" in
+ $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
+ $osname$osvers) ;; # looking good
+ $osname*) cat <<EOM >&4
+
+*** WHOA THERE!!! ***
+
+ Your gcc has not been compiled for the exact release of
+ your operating system ($gccosandvers versus $osname$osvers).
+
+ In general it is a good idea to keep gcc synchronized with
+ the operating system because otherwise serious problems
+ may ensue when trying to compile software, like Perl.
+
+ I'm trying to be optimistic here, though, and will continue.
+ If later during the configuration and build icky compilation
+ problems appear (headerfile conflicts being the most common
+ manifestation), I suggest reinstalling the gcc to match
+ your operating system release.
+
+EOM
+ ;;
+ *) gccosandvers='' ;; # failed to parse, better be silent
+ esac
+ ;;
+esac
+case "$ccname" in
+'') ccname="$cc" ;;
+esac
+
+: gcc 3.1 complains about adding -Idirectories that it already knows about,
+: so we will take those off from locincpth.
+case "$gccversion" in
+3*)
+ echo "main(){}">try.c
+ for incdir in `$cc -v -c try.c 2>&1 | \
+ sed '1,/^#include <\.\.\.>/d;/^End of search list/,$d;s/^ //'` ; do
+ locincpth=`echo $locincpth | sed s!$incdir!!`
+ done
+ $rm -f try try.*
+esac
+
diff --git a/mcon/U/gidtype.U b/mcon/U/gidtype.U
new file mode 100644
index 0000000..58b693e
--- /dev/null
+++ b/mcon/U/gidtype.U
@@ -0,0 +1,61 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: gidtype.U,v $
+?RCS: Revision 3.0.1.3 1994/08/29 16:21:44 ram
+?RCS: patch32: now uses new Typedef unit to compute type information
+?RCS: patch32: removed useless usage of Setvar (for now)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/13 15:21:07 ram
+?RCS: patch27: added lint hint
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:01:51 ram
+?RCS: patch23: protected gidtype setting via setvar (ADO)
+?RCS: patch23: made Gid_t comment more explicit (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:11 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:gidtype: Myread Typedef Findhdr
+?MAKE: -pick add $@ %<
+?S:gidtype:
+?S: This variable defines Gid_t to be something like gid_t, int,
+?S: ushort, or whatever type is used to declare the return type
+?S: of getgid(). Typically, it is the type of group ids in the kernel.
+?S:.
+?C:Gid_t (GIDTYPE):
+?C: This symbol holds the return type of getgid() and the type of
+?C: argument to setrgid() and related functions. Typically,
+?C: it is the type of group ids in the kernel. It can be int, ushort,
+?C: uid_t, etc... It may be necessary to include <sys/types.h> to get
+?C: any typedef'ed information.
+?C:.
+?H:#define Gid_t $gidtype /* Type for getgid(), etc... */
+?H:.
+?T:xxx
+: see what type gids are declared as in the kernel
+set gid_t gidtype xxx stdio.h sys/types.h
+eval $typedef
+case "$gidtype" in
+xxx)
+ xxx=`./findhdr sys/user.h`
+ set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
+ case $1 in
+ unsigned) dflt="$1 $2" ;;
+ *) dflt="$1" ;;
+ esac
+ ;;
+*) dflt="$gidtype";;
+esac
+echo " "
+rp="What is the type for group ids returned by getgid()?"
+. ./myread
+gidtype="$ans"
+
diff --git a/mcon/U/groupstype.U b/mcon/U/groupstype.U
new file mode 100644
index 0000000..39727f1
--- /dev/null
+++ b/mcon/U/groupstype.U
@@ -0,0 +1,63 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: groupstype.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 16:18:08 ram
+?RCS: patch36: no longer uses Setvar to set 'groupstype' (ADO)
+?RCS: patch36: typo fix in the word 'argument' (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 07:00:18 ram
+?RCS: patch30: created by ADO
+?RCS:
+?MAKE:groupstype: gidtype d_getgrps Myread Oldconfig Findhdr cat d_setgrps
+?MAKE: -pick add $@ %<
+?INIT:groupstype=''
+?S:groupstype:
+?S: This variable defines Groups_t to be something like gid_t, int,
+?S: ushort, or whatever type is used for the second argument to
+?S: getgroups() and setgroups(). Usually, this is the same as
+?S: gidtype (gid_t), but sometimes it isn't.
+?S:.
+?C:Groups_t (GROUPSTYPE):
+?C: This symbol holds the type used for the second argument to
+?C: getgroups() and setgroups(). Usually, this is the same as
+?C: gidtype (gid_t) , but sometimes it isn't.
+?C: It can be int, ushort, gid_t, etc...
+?C: It may be necessary to include <sys/types.h> to get any
+?C: typedef'ed information. This is only required if you have
+?C: getgroups() or setgroups()..
+?C:.
+?H:?%<:#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
+?H:?%<:#define Groups_t $groupstype /* Type for 2nd arg to [sg]etgroups() */
+?H:?%<:#endif
+?H:.
+?W:%<:getgroups HAS_GETGROUPS setgroups HAS_SETGROUPS
+: Find type of 2nd arg to 'getgroups()' and 'setgroups()'
+echo " "
+case "$d_getgrps$d_setgrps" in
+*define*)
+ case "$groupstype" in
+ '') dflt="$gidtype" ;;
+ *) dflt="$groupstype" ;;
+ esac
+ $cat <<EOM
+What type of pointer is the second argument to getgroups() and setgroups()?
+Usually this is the same as group ids, $gidtype, but not always.
+
+EOM
+ rp='What type pointer is the second argument to getgroups() and setgroups()?'
+ . ./myread
+ groupstype="$ans"
+ ;;
+*) groupstype="$gidtype";;
+esac
+
diff --git a/mcon/U/h_fcntl.U b/mcon/U/h_fcntl.U
new file mode 100644
index 0000000..293ebd5
--- /dev/null
+++ b/mcon/U/h_fcntl.U
@@ -0,0 +1,23 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: h_fcntl.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:12 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:h_fcntl: Nothing
+?MAKE: -pick add $@ %<
+?S:h_fcntl:
+?S: This is variable gets set in various places to tell i_fcntl that
+?S: <fcntl.h> should be included.
+?S:.
+: Initialize h_fcntl
+h_fcntl=false
+
diff --git a/mcon/U/h_sysfile.U b/mcon/U/h_sysfile.U
new file mode 100644
index 0000000..c35135b
--- /dev/null
+++ b/mcon/U/h_sysfile.U
@@ -0,0 +1,23 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: h_sysfile.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:13 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:h_sysfile: Nothing
+?MAKE: -pick add $@ %<
+?S:h_sysfile:
+?S: This is variable gets set in various places to tell i_sys_file that
+?S: <sys/file.h> should be included.
+?S:.
+: Initialize h_sysfile
+h_sysfile=false
+
diff --git a/mcon/U/i_arpainet.U b/mcon/U/i_arpainet.U
new file mode 100644
index 0000000..a00ff0d
--- /dev/null
+++ b/mcon/U/i_arpainet.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_arpainet.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:15 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_arpainet: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_arpainet:
+?S: This variable conditionally defines the I_ARPA_INET symbol,
+?S: and indicates whether a C program should include <arpa/inet.h>.
+?S:.
+?C:I_ARPA_INET:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <arpa/inet.h> to get inet_addr and friends declarations.
+?C:.
+?H:#$i_arpainet I_ARPA_INET /**/
+?H:.
+?LINT:set i_arpainet
+: see if arpa/inet.h has to be included
+set arpa/inet.h i_arpainet
+eval $inhdr
+
diff --git a/mcon/U/i_db.U b/mcon/U/i_db.U
new file mode 100644
index 0000000..98c52c2
--- /dev/null
+++ b/mcon/U/i_db.U
@@ -0,0 +1,146 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: i_db.U,v $
+?RCS: Revision 3.0.1.3 1995/07/25 14:10:22 ram
+?RCS: patch56: conditionally use const in test programs (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1995/05/12 12:14:42 ram
+?RCS: patch54: extended for more intimate DB probing (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:21:50 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:i_db db_hashtype db_prefixtype: Inhdr +cc +ccflags rm contains cat \
+ d_const
+?MAKE: -pick add $@ %<
+?S:i_db:
+?S: This variable conditionally defines the I_DB symbol, and indicates
+?S: whether a C program may include Berkeley's DB include file <db.h>.
+?S:.
+?S:db_hashtype:
+?S: This variable contains the type of the hash structure element
+?S: in the <db.h> header file. In older versions of DB, it was
+?S: int, while in newer ones it is u_int32_t.
+?S:.
+?S:db_prefixtype:
+?S: This variable contains the type of the prefix structure element
+?S: in the <db.h> header file. In older versions of DB, it was
+?S: int, while in newer ones it is size_t.
+?S:.
+?C:I_DB:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include Berkeley's DB include file <db.h>.
+?C:.
+?C:DB_Prefix_t:
+?C: This symbol contains the type of the prefix structure element
+?C: in the <db.h> header file. In older versions of DB, it was
+?C: int, while in newer ones it is u_int32_t.
+?C:.
+?C:DB_Hash_t:
+?C: This symbol contains the type of the prefix structure element
+?C: in the <db.h> header file. In older versions of DB, it was
+?C: int, while in newer ones it is size_t.
+?C:.
+?H:#$i_db I_DB /**/
+?H:#define DB_Hash_t $db_hashtype /**/
+?H:#define DB_Prefix_t $db_prefixtype /**/
+?H:.
+?LINT:set i_db
+: see if this is a db.h system
+set db.h i_db
+eval $inhdr
+
+@if DB_Hash_t
+case "$i_db" in
+define)
+ : Check the return type needed for hash
+ echo " "
+ echo "Checking return type needed for hash for Berkeley DB ..." >&4
+ $cat >try.c <<EOCP
+#$d_const HASCONST
+#ifndef HASCONST
+#define const
+#endif
+#include <sys/types.h>
+#include <db.h>
+u_int32_t hash_cb (ptr, size)
+const void *ptr;
+size_t size;
+{
+}
+HASHINFO info;
+int main()
+{
+ info.hash = hash_cb;
+}
+EOCP
+ if $cc $ccflags -c try.c >try.out 2>&1 ; then
+ if $contains warning try.out >>/dev/null 2>&1 ; then
+ db_hashtype='int'
+ else
+ db_hashtype='u_int32_t'
+ fi
+ else
+ echo "I can't seem to compile the test program." >&4
+ db_hashtype=int
+ fi
+ $rm -f try.*
+ echo "Your version of Berkeley DB uses $db_hashtype for hash."
+ ;;
+*) db_hashtype=int
+ ;;
+esac
+
+@end
+@if DB_Prefix_t
+case "$i_db" in
+define)
+ : Check the return type needed for prefix
+ echo " "
+ echo "Checking return type needed for prefix for Berkeley DB ..." >&4
+ cat >try.c <<EOCP
+#$d_const HASCONST
+#ifndef HASCONST
+#define const
+#endif
+#include <sys/types.h>
+#include <db.h>
+size_t prefix_cb (key1, key2)
+const DBT *key1;
+const DBT *key2;
+{
+}
+BTREEINFO info;
+int main()
+{
+ info.prefix = prefix_cb;
+}
+EOCP
+ if $cc $ccflags -c try.c >try.out 2>&1 ; then
+ if $contains warning try.out >>/dev/null 2>&1 ; then
+ db_prefixtype='int'
+ else
+ db_prefixtype='size_t'
+ fi
+ else
+ echo "I can't seem to compile the test program." >&4
+ db_prefixtype='int'
+ fi
+ $rm -f try.*
+ echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
+ ;;
+*) db_prefixtype='int'
+ ;;
+esac
+
+@end
diff --git a/mcon/U/i_dbm.U b/mcon/U/i_dbm.U
new file mode 100644
index 0000000..a0e5c13
--- /dev/null
+++ b/mcon/U/i_dbm.U
@@ -0,0 +1,79 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_dbm.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:48:20 ram
+?RCS: patch61: added I_RPCSVC_DBM check
+?RCS:
+?RCS: Revision 3.0.1.1 1995/05/12 12:16:05 ram
+?RCS: patch54: made more robust by checking both header and lib (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:15 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_dbm i_rpcsvcdbm: Inhdr Inlibc Setvar
+?MAKE: -pick add $@ %<
+?S:i_dbm (d_odbm):
+?S: This variable conditionally defines the I_DBM symbol, which
+?S: indicates to the C program that <dbm.h> exists and should
+?S: be included.
+?S:.
+?S:i_rpcsvcdbm:
+?S: This variable conditionally defines the I_RPCSVC_DBM symbol, which
+?S: indicates to the C program that <rpcsvc/dbm.h> exists and should
+?S: be included. Some System V systems might need this instead of <dbm.h>.
+?S:.
+?C:I_DBM (HAS_ODBM ODBM):
+?C: This symbol, if defined, indicates that <dbm.h> exists and should
+?C: be included.
+?C:.
+?C:I_RPCSVC_DBM:
+?C: This symbol, if defined, indicates that <rpcsvc/dbm.h> exists and
+?C: should be included.
+?C:.
+?H:#$i_dbm I_DBM /**/
+?H:#$i_rpcsvcdbm I_RPCSVC_DBM /**/
+?H:.
+?T:d_dbmclose
+?LINT:set i_dbm i_rpcsvcdbm
+: see if dbm.h is available
+?X: We might just have the header, not the library.
+?X: We look for dbmclose() rather than dbminit() because
+?X: some versions of SCO Unix have -ldbm, but are missing dbmclose(). -- ADO
+?X: Some System V systems have <rpcsvc/dbm.h> instead of <dbm.h>.
+: see if dbmclose exists
+set dbmclose d_dbmclose
+eval $inlibc
+
+case "$d_dbmclose" in
+$define)
+ set dbm.h i_dbm
+ eval $inhdr
+ case "$i_dbm" in
+ $define)
+ val="$undef"
+ set i_rpcsvcdbm
+ eval $setvar
+ ;;
+ *) set rpcsvc/dbm.h i_rpcsvcdbm
+ eval $inhdr
+ ;;
+ esac
+ ;;
+*) echo "We won't be including <dbm.h>"
+ val="$undef"
+ set i_dbm
+ eval $setvar
+ val="$undef"
+ set i_rpcsvcdbm
+ eval $setvar
+ ;;
+esac
+
diff --git a/mcon/U/i_dirent.U b/mcon/U/i_dirent.U
new file mode 100644
index 0000000..65e192e
--- /dev/null
+++ b/mcon/U/i_dirent.U
@@ -0,0 +1,146 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_dirent.U,v $
+?RCS: Revision 3.0.1.4 1994/10/29 16:20:01 ram
+?RCS: patch36: failed scanning for 'd_namlen' with missing <dirent.h> (ADO)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/06/20 07:01:25 ram
+?RCS: patch30: added direntrytype for hints, merely for NeXT (ADO)
+?RCS: patch30: now checks for both struct dirent and direct (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/13 15:22:37 ram
+?RCS: patch27: new variable direntrytype for proper type setting (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:11:15 ram
+?RCS: patch16: added new Direntry_t pseudo-type for directory entries
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:17 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit looks whether there is a dirent system or not
+?X:
+?MAKE:i_dirent d_dirnamlen direntrytype: test contains Setvar \
+ Myread Findhdr cppstdin cppflags cppminus rm
+?MAKE: -pick add $@ %<
+?S:i_dirent:
+?S: This variable conditionally defines I_DIRENT, which indicates
+?S: to the C program that it should include <dirent.h>.
+?S:.
+?S:d_dirnamlen:
+?S: This variable conditionally defines DIRNAMLEN, which indicates
+?S: to the C program that the length of directory entry names is
+?S: provided by a d_namelen field.
+?S:.
+?S:direntrytype:
+?S: This symbol is set to 'struct direct' or 'struct dirent' depending on
+?S: whether dirent is available or not. You should use this pseudo type to
+?S: portably declare your directory entries.
+?S:.
+?C:I_DIRENT:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <dirent.h>. Using this symbol also triggers the definition
+?C: of the Direntry_t define which ends up being 'struct dirent' or
+?C: 'struct direct' depending on the availability of <dirent.h>.
+?C:.
+?C:DIRNAMLEN:
+?C: This symbol, if defined, indicates to the C program that the length
+?C: of directory entry names is provided by a d_namlen field. Otherwise
+?C: you need to do strlen() on the d_name field.
+?C:.
+?C:Direntry_t:
+?C: This symbol is set to 'struct direct' or 'struct dirent' depending on
+?C: whether dirent is available or not. You should use this pseudo type to
+?C: portably declare your directory entries.
+?C:.
+?H:#$i_dirent I_DIRENT /**/
+?H:#$d_dirnamlen DIRNAMLEN /**/
+?H:?%<:@if I_DIRENT && Direntry_t
+?H:?%<:#define Direntry_t $direntrytype
+?H:?%<:@end
+?H:.
+?T:xinc guess1 guess2
+?LINT:set i_dirent d_dirnamlen
+: see if this is a dirent system
+echo " "
+if xinc=`./findhdr dirent.h`; $test "$xinc"; then
+ val="$define"
+ echo "<dirent.h> found." >&4
+else
+ val="$undef"
+ if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
+ echo "<sys/dir.h> found." >&4
+ echo " "
+ else
+ xinc=`./findhdr sys/ndir.h`
+ fi
+ echo "<dirent.h> NOT found." >&4
+fi
+set i_dirent
+eval $setvar
+
+?X: Use struct dirent or struct direct? If we're using dirent.h,
+?X: it's probably struct dirent, but apparently not always.
+?X: Assume $xinc still contains the name of the header file we're using.
+@if direntrytype || Direntry_t
+: Look for type of directory structure.
+echo " "
+$cppstdin $cppflags $cppminus < "$xinc" > try.c
+
+case "$direntrytype" in
+''|' ')
+ case "$i_dirent" in
+ $define) guess1='struct dirent' ;;
+ *) guess1='struct direct' ;;
+ esac
+ ;;
+*) guess1="$direntrytype"
+ ;;
+esac
+
+case "$guess1" in
+'struct dirent') guess2='struct direct' ;;
+*) guess2='struct dirent' ;;
+esac
+
+if $contains "$guess1" try.c >/dev/null 2>&1; then
+ direntrytype="$guess1"
+ echo "Your directory entries are $direntrytype." >&4
+elif $contains "$guess2" try.c >/dev/null 2>&1; then
+ direntrytype="$guess2"
+ echo "Your directory entries seem to be $direntrytype." >&4
+else
+ echo "I don't recognize your system's directory entries." >&4
+ rp="What type is used for directory entries on this system?"
+ dflt="$guess1"
+ . ./myread
+ direntrytype="$ans"
+fi
+$rm -f try.c
+
+@end
+
+@if d_dirnamlen || DIRNAMLEN
+: see if the directory entry stores field length
+echo " "
+$cppstdin $cppflags $cppminus < "$xinc" > try.c
+if $contains 'd_namlen' try.c >/dev/null 2>&1; then
+ echo "Good, your directory entry keeps length information in d_namlen." >&4
+ val="$define"
+else
+ echo "Your directory entry does not know about the d_namlen field." >&4
+ val="$undef"
+fi
+set d_dirnamlen
+eval $setvar
+$rm -f try.c
+
+@end
diff --git a/mcon/U/i_dld.U b/mcon/U/i_dld.U
new file mode 100644
index 0000000..531d914
--- /dev/null
+++ b/mcon/U/i_dld.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: i_dld.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:20:07 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:i_dld: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_dld:
+?S: This variable conditionally defines the I_DLD symbol, which
+?S: indicates to the C program that <dld.h> (GNU dynamic loading)
+?S: exists and should be included.
+?S:.
+?C:I_DLD:
+?C: This symbol, if defined, indicates that <dld.h> exists and should
+?C: be included before using GNU dynamic loading features.
+?C:.
+?H:#$i_dld I_DLD /**/
+?H:.
+?LINT:set i_dld
+: see if dld is available
+set dld.h i_dld
+eval $inhdr
+
diff --git a/mcon/U/i_dlfcn.U b/mcon/U/i_dlfcn.U
new file mode 100644
index 0000000..c0808ce
--- /dev/null
+++ b/mcon/U/i_dlfcn.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: i_dlfcn.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:21:53 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:i_dlfcn: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_dlfcn:
+?S: This variable conditionally defines the I_DLFCN symbol, which
+?S: indicates to the C program that <dlfcn.h> exists and should
+?S: be included.
+?S:.
+?C:I_DLFCN:
+?C: This symbol, if defined, indicates that <dlfcn.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_dlfcn I_DLFCN /**/
+?H:.
+?LINT:set i_dlfcn
+: see if dlfcn is available
+set dlfcn.h i_dlfcn
+eval $inhdr
+
diff --git a/mcon/U/i_fcntl.U b/mcon/U/i_fcntl.U
new file mode 100644
index 0000000..048eaff
--- /dev/null
+++ b/mcon/U/i_fcntl.U
@@ -0,0 +1,61 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_fcntl.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:18 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_fcntl: h_fcntl h_sysfile +i_sysfile Inhdr Setvar
+?MAKE: -pick add $@ %<
+?S:i_fcntl:
+?S: This variable controls the value of I_FCNTL (which tells
+?S: the C program to include <fcntl.h>).
+?S:.
+?C:I_FCNTL (HDR_O_STUFF FCNTL):
+?C: This manifest constant tells the C program to include <fcntl.h>.
+?C:.
+?H:#$i_fcntl I_FCNTL /**/
+?H:.
+?T:val
+?X: Make line lists +i_sysfile to ensure tests for <sys/file.h> will be
+?X: conducted prior tests for <fcntl.h>, hece making sure the h_sysfile
+?X: variable is correctly set when we reach that unit.
+?LINT:set i_fcntl
+?LINT:use i_sysfile
+?LINT:change h_fcntl
+: see if fcntl.h is there
+val=''
+set fcntl.h val
+eval $inhdr
+
+: see if we can include fcntl.h
+case "$val" in
+"$define")
+ echo " "
+ if $h_fcntl; then
+ val="$define"
+ echo "We'll be including <fcntl.h>." >&4
+ else
+ val="$undef"
+ if $h_sysfile; then
+ echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
+ else
+ echo "We won't be including <fcntl.h>." >&4
+ fi
+ fi
+ ;;
+*)
+ h_fcntl=false
+ val="$undef"
+ ;;
+esac
+set i_fcntl
+eval $setvar
+
diff --git a/mcon/U/i_float.U b/mcon/U/i_float.U
new file mode 100644
index 0000000..1b060d3
--- /dev/null
+++ b/mcon/U/i_float.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: i_float.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:21:57 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:i_float: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_float:
+?S: This variable conditionally defines the I_FLOAT symbol, and indicates
+?S: whether a C program may include <float.h> to get symbols like DBL_MAX
+?S: or DBL_MIN, i.e. machine dependent floating point values.
+?S:.
+?C:I_FLOAT:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <float.h> to get definition of symbols like DBL_MAX or
+?C: DBL_MIN, i.e. machine dependent floating point values.
+?C:.
+?H:#$i_float I_FLOAT /**/
+?H:.
+?LINT:set i_float
+: see if this is a float.h system
+set float.h i_float
+eval $inhdr
+
diff --git a/mcon/U/i_gdbm.U b/mcon/U/i_gdbm.U
new file mode 100644
index 0000000..c9cdbf0
--- /dev/null
+++ b/mcon/U/i_gdbm.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_gdbm.U,v $
+?RCS: Revision 3.0.1.1 1995/05/12 12:16:39 ram
+?RCS: patch54: made more robust by checking both header and lib (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:19 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_gdbm: Inhdr Inlibc Setvar
+?MAKE: -pick add $@ %<
+?S:i_gdbm (d_gdbm):
+?S: This variable conditionally defines the I_GDBM symbol, which
+?S: indicates to the C program that <gdbm.h> exists and should
+?S: be included.
+?S:.
+?C:I_GDBM (HAS_GDBM):
+?C: This symbol, if defined, indicates that <gdbm.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_gdbm I_GDBM /**/
+?H:.
+?T:t_gdbm d_gdbm_open
+?LINT:set i_gdbm
+: see if gdbm.h is available
+?X: t_gdbm is a tentative check. We might just have the .h, not the lib -- ADO
+set gdbm.h t_gdbm
+eval $inhdr
+case "$t_gdbm" in
+$define)
+ : see if gdbm_open exists
+ set gdbm_open d_gdbm_open
+ eval $inlibc
+ case "$d_gdbm_open" in
+ $undef)
+ t_gdbm="$undef"
+ echo "We won't be including <gdbm.h>"
+ ;;
+ esac
+ ;;
+esac
+val="$t_gdbm"
+set i_gdbm
+eval $setvar
+
diff --git a/mcon/U/i_grp.U b/mcon/U/i_grp.U
new file mode 100644
index 0000000..95cdb07
--- /dev/null
+++ b/mcon/U/i_grp.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_grp.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:20 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_grp: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_grp:
+?S: This variable conditionally defines the I_GRP symbol, and indicates
+?S: whether a C program should include <grp.h>.
+?S:.
+?C:I_GRP:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <grp.h>.
+?C:.
+?H:#$i_grp I_GRP /**/
+?H:.
+?LINT:set i_grp
+: see if this is an grp system
+set grp.h i_grp
+eval $inhdr
+
diff --git a/mcon/U/i_inttypes.U b/mcon/U/i_inttypes.U
new file mode 100644
index 0000000..d9f0573
--- /dev/null
+++ b/mcon/U/i_inttypes.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysun.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit looks wether <inttypes.h> is available or not
+?X:
+?MAKE:i_inttypes: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_inttypes:
+?S: This variable conditionally defines I_INTTYPES, which indicates
+?S: to the C program that it should include <inttypes.h> to get
+?S: format conversions of integer types.
+?S:.
+?C:I_INTTYPES:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <inttypes.h> to get format conversions of integer types.
+?C:.
+?H:#$i_inttypes I_INTTYPES /**/
+?H:.
+?LINT:set i_inttypes
+: see if this is a inttypes.h system
+set inttypes.h i_inttypes
+eval $inhdr
+
diff --git a/mcon/U/i_limits.U b/mcon/U/i_limits.U
new file mode 100644
index 0000000..eb15e2d
--- /dev/null
+++ b/mcon/U/i_limits.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_limits.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:20 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_limits: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_limits:
+?S: This variable conditionally defines the I_LIMITS symbol, and indicates
+?S: whether a C program may include <limits.h> to get symbols like WORD_BIT
+?S: and friends.
+?S:.
+?C:I_LIMITS:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <limits.h> to get definition of symbols like WORD_BIT or
+?C: LONG_MAX, i.e. machine dependant limitations.
+?C:.
+?H:#$i_limits I_LIMITS /**/
+?H:.
+?LINT:set i_limits
+: see if this is a limits.h system
+set limits.h i_limits
+eval $inhdr
+
diff --git a/mcon/U/i_locale.U b/mcon/U/i_locale.U
new file mode 100644
index 0000000..e0eb168
--- /dev/null
+++ b/mcon/U/i_locale.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_locale.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:48:23 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:i_locale: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_locale:
+?S: This variable conditionally defines the I_LOCALE symbol,
+?S: and indicates whether a C program should include <locale.h>.
+?S:.
+?C:I_LOCALE:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <locale.h>.
+?C:.
+?H:#$i_locale I_LOCALE /**/
+?H:.
+?LINT:set i_locale
+: see if locale.h is available
+set locale.h i_locale
+eval $inhdr
+
diff --git a/mcon/U/i_malloc.U b/mcon/U/i_malloc.U
new file mode 100644
index 0000000..ad98898
--- /dev/null
+++ b/mcon/U/i_malloc.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_malloc.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:21 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_malloc: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_malloc:
+?S: This variable conditionally defines the I_MALLOC symbol, and indicates
+?S: whether a C program should include <malloc.h>.
+?S:.
+?C:I_MALLOC:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <malloc.h>.
+?C:.
+?H:#$i_malloc I_MALLOC /**/
+?H:.
+?LINT:set i_malloc
+: see if this is a malloc.h system
+set malloc.h i_malloc
+eval $inhdr
+
diff --git a/mcon/U/i_math.U b/mcon/U/i_math.U
new file mode 100644
index 0000000..c3cd1d5
--- /dev/null
+++ b/mcon/U/i_math.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: i_math.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:21:59 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:i_math: Inhdr
+?MAKE: -pick add $@ %<
+?X: Are there really systems that *DON'T* have math.h?
+?S:i_math:
+?S: This variable conditionally defines the I_MATH symbol, and indicates
+?S: whether a C program may include <math.h>.
+?S:.
+?C:I_MATH:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <math.h>.
+?C:.
+?H:#$i_math I_MATH /**/
+?H:.
+?LINT:set i_math
+: see if this is a math.h system
+set math.h i_math
+eval $inhdr
+
diff --git a/mcon/U/i_memory.U b/mcon/U/i_memory.U
new file mode 100644
index 0000000..ab5244d
--- /dev/null
+++ b/mcon/U/i_memory.U
@@ -0,0 +1,65 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_memory.U,v $
+?RCS: Revision 3.0.1.3 1994/06/20 07:01:55 ram
+?RCS: patch30: cosmetic changes
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/13 15:23:56 ram
+?RCS: patch27: modified to avoid spurious Whoa warnings (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:02:25 ram
+?RCS: patch23: avoid conflicts with <string.h>
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:22 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_memory: Inhdr strings cppstdin cppflags cppminus contains rm Setvar
+?MAKE: -pick add $@ %<
+?S:i_memory:
+?S: This variable conditionally defines the I_MEMORY symbol, and indicates
+?S: whether a C program should include <memory.h>.
+?S:.
+?C:I_MEMORY:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <memory.h>.
+?C:.
+?H:#$i_memory I_MEMORY /**/
+?H:.
+?LINT:set i_memory
+?X:
+?X: Unfortunately, the definitions of memory functions sometimes
+?X: conflict with those in <string.h>. We'll assume that if
+?X: <string.h> contains memcpy, then we don't need memory.h
+?X:
+: see if memory.h is available.
+val=''
+set memory.h val
+eval $inhdr
+
+: See if it conflicts with string.h
+case "$val" in
+$define)
+ case "$strings" in
+ '') ;;
+ *)
+ $cppstdin $cppflags $cppminus < $strings > mem.h
+ if $contains 'memcpy' mem.h >/dev/null 2>&1; then
+ echo " "
+ echo "We won't be including <memory.h>."
+ val="$undef"
+ fi
+ $rm -f mem.h
+ ;;
+ esac
+esac
+set i_memory
+eval $setvar
+
diff --git a/mcon/U/i_ndbm.U b/mcon/U/i_ndbm.U
new file mode 100644
index 0000000..8b7eda4
--- /dev/null
+++ b/mcon/U/i_ndbm.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_ndbm.U,v $
+?RCS: Revision 3.0.1.1 1995/05/12 12:16:53 ram
+?RCS: patch54: made more robust by checking both header and lib (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:23 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_ndbm: Inhdr Inlibc Setvar
+?MAKE: -pick add $@ %<
+?S:i_ndbm (d_ndbm):
+?S: This variable conditionally defines the I_NDBM symbol, which
+?S: indicates to the C program that <ndbm.h> exists and should
+?S: be included.
+?S:.
+?C:I_NDBM (HAS_NDBM NDBM):
+?C: This symbol, if defined, indicates that <ndbm.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_ndbm I_NDBM /**/
+?H:.
+?T:t_ndbm d_dbm_open
+?LINT:set i_ndbm
+: see if ndbm.h is available
+?X: t_ndbm is a tentative check. We might just have the .h, not the lib -- ADO
+set ndbm.h t_ndbm
+eval $inhdr
+case "$t_ndbm" in
+$define)
+ : see if dbm_open exists
+ set dbm_open d_dbm_open
+ eval $inlibc
+ case "$d_dbm_open" in
+ $undef)
+ t_ndbm="$undef"
+ echo "We won't be including <ndbm.h>"
+ ;;
+ esac
+ ;;
+esac
+val="$t_ndbm"
+set i_ndbm
+eval $setvar
+
diff --git a/mcon/U/i_neterrno.U b/mcon/U/i_neterrno.U
new file mode 100644
index 0000000..a8de2aa
--- /dev/null
+++ b/mcon/U/i_neterrno.U
@@ -0,0 +1,65 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: i_neterrno.U,v $
+?RCS: Revision 3.0.1.3 1994/10/29 16:20:29 ram
+?RCS: patch36: forgot to initialize 'val' to an empty value (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:22:10 ram
+?RCS: patch32: removed spurious echo
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 07:02:05 ram
+?RCS: patch30: created by ADO
+?RCS:
+?MAKE:i_neterrno: Inhdr +cc +ccflags rm Setvar
+?MAKE: -pick add $@ %<
+?S:i_neterrno:
+?S: This variable conditionally defines the I_NET_ERRNO symbol, which
+?S: indicates to the C program that <net/errno.h> exists and should
+?S: be included.
+?S:.
+?C:I_NET_ERRNO:
+?C: This symbol, if defined, indicates that <net/errno.h> exists and
+?C: should be included.
+?C:.
+?H:#$i_neterrno I_NET_ERRNO /**/
+?H:.
+?LINT:set i_neterrno
+: see if net/errno.h is available
+val=''
+set net/errno.h val
+eval $inhdr
+
+: Unfortunately, it causes problems on some systems. Arrgh.
+case "$val" in
+$define)
+ cat > try.c <<'EOM'
+#include <stdio.h>
+#include <errno.h>
+#include <net/errno.h>
+int func()
+{
+ return ENOTSOCK;
+}
+EOM
+ if $cc $ccflags -c try.c >/dev/null 2>&1; then
+ echo "We'll be including <net/errno.h>." >&4
+ else
+ echo "We won't be including <net/errno.h>." >&4
+ val="$undef"
+ fi
+ $rm -f try.* try
+ ;;
+esac
+set i_neterrno
+eval $setvar
+
diff --git a/mcon/U/i_niin.U b/mcon/U/i_niin.U
new file mode 100644
index 0000000..0e90b3a
--- /dev/null
+++ b/mcon/U/i_niin.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_niin.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:24 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit looks wether <netinet/in.h> is available or not
+?X:
+?MAKE:i_niin i_sysin: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_niin:
+?S: This variable conditionally defines I_NETINET_IN, which indicates
+?S: to the C program that it should include <netinet/in.h>. Otherwise,
+?S: you may try <sys/in.h>.
+?S:.
+?S:i_sysin:
+?S: This variable conditionally defines I_SYS_IN, which indicates
+?S: to the C program that it should include <sys/in.h> instead of
+?S: <netinet/in.h>.
+?S:.
+?C:I_NETINET_IN:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <netinet/in.h>. Otherwise, you may try <sys/in.h>.
+?C:.
+?C:I_SYS_IN (I_SYSIN):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/in.h> instead of <netinet/in.h>.
+?C:.
+?H:#$i_niin I_NETINET_IN /**/
+?H:#$i_sysin I_SYS_IN /**/
+?H:.
+?LINT:set i_niin i_sysin
+: see if this is a netinet/in.h or sys/in.h system
+set netinet/in.h i_niin sys/in.h i_sysin
+eval $inhdr
+
diff --git a/mcon/U/i_pwd.U b/mcon/U/i_pwd.U
new file mode 100644
index 0000000..09f4219
--- /dev/null
+++ b/mcon/U/i_pwd.U
@@ -0,0 +1,162 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_pwd.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 14:10:57 ram
+?RCS: patch56: use setvar so hint file values can override our guesses (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:03:27 ram
+?RCS: patch23: had forgotten cppminus in cppstdin test (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:25 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit checks whether there is a pwd system or not
+?X:
+?MAKE:i_pwd d_pwquota d_pwage d_pwchange d_pwclass d_pwexpire d_pwcomment: \
+ contains rm cppstdin cppflags cppminus Inhdr Findhdr Setvar
+?MAKE: -pick add $@ %<
+?S:i_pwd:
+?S: This variable conditionally defines I_PWD, which indicates
+?S: to the C program that it should include <pwd.h>.
+?S:.
+?S:d_pwquota:
+?S: This varaible conditionally defines PWQUOTA, which indicates
+?S: that struct passwd contains pw_quota.
+?S:.
+?S:d_pwage:
+?S: This varaible conditionally defines PWAGE, which indicates
+?S: that struct passwd contains pw_age.
+?S:.
+?S:d_pwchange:
+?S: This varaible conditionally defines PWCHANGE, which indicates
+?S: that struct passwd contains pw_change.
+?S:.
+?S:d_pwclass:
+?S: This varaible conditionally defines PWCLASS, which indicates
+?S: that struct passwd contains pw_class.
+?S:.
+?S:d_pwexpire:
+?S: This varaible conditionally defines PWEXPIRE, which indicates
+?S: that struct passwd contains pw_expire.
+?S:.
+?S:d_pwcomment:
+?S: This varaible conditionally defines PWCOMMENT, which indicates
+?S: that struct passwd contains pw_comment.
+?S:.
+?C:I_PWD:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <pwd.h>.
+?C:.
+?C:PWQUOTA:
+?C: This symbol, if defined, indicates to the C program that struct passwd
+?C: contains pw_quota.
+?C:.
+?C:PWAGE:
+?C: This symbol, if defined, indicates to the C program that struct passwd
+?C: contains pw_age.
+?C:.
+?C:PWCHANGE:
+?C: This symbol, if defined, indicates to the C program that struct passwd
+?C: contains pw_change.
+?C:.
+?C:PWCLASS:
+?C: This symbol, if defined, indicates to the C program that struct passwd
+?C: contains pw_class.
+?C:.
+?C:PWEXPIRE:
+?C: This symbol, if defined, indicates to the C program that struct passwd
+?C: contains pw_expire.
+?C:.
+?C:PWCOMMENT:
+?C: This symbol, if defined, indicates to the C program that struct passwd
+?C: contains pw_comment.
+?C:.
+?H:#$i_pwd I_PWD /**/
+?H:#$d_pwquota PWQUOTA /**/
+?H:#$d_pwage PWAGE /**/
+?H:#$d_pwchange PWCHANGE /**/
+?H:#$d_pwclass PWCLASS /**/
+?H:#$d_pwexpire PWEXPIRE /**/
+?H:#$d_pwcomment PWCOMMENT /**/
+?H:.
+?LINT: set i_pwd d_pwquota d_pwage d_pwchange d_pwclass d_pwexpire d_pwcomment
+?T:xxx
+: see if this is a pwd.h system
+set pwd.h i_pwd
+eval $inhdr
+
+case "$i_pwd" in
+$define)
+ xxx=`./findhdr pwd.h`
+ $cppstdin $cppflags $cppminus < $xxx >$$.h
+
+ if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
+ val="$define"
+ else
+ val="$undef"
+ fi
+ set d_pwquota
+ eval $setvar
+
+ if $contains 'pw_age' $$.h >/dev/null 2>&1; then
+ val="$define"
+ else
+ val="$undef"
+ fi
+ set d_pwage
+ eval $setvar
+
+ if $contains 'pw_change' $$.h >/dev/null 2>&1; then
+ val="$define"
+ else
+ val="$undef"
+ fi
+ set d_pwchange
+ eval $setvar
+
+ if $contains 'pw_class' $$.h >/dev/null 2>&1; then
+ val="$define"
+ else
+ val="$undef"
+ fi
+ set d_pwclass
+ eval $setvar
+
+ if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
+ val="$define"
+ else
+ val="$undef"
+ fi
+ set d_pwexpire
+ eval $setvar
+
+ if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
+ val="$define"
+ else
+ val="$undef"
+ fi
+ set d_pwcomment
+ eval $setvar
+
+ $rm -f $$.h
+ ;;
+*)
+ val="$undef";
+ set d_pwquota; eval $setvar
+ set d_pwage; eval $setvar
+ set d_pwchange; eval $setvar
+ set d_pwclass; eval $setvar
+ set d_pwexpire; eval $setvar
+ set d_pwcomment; eval $setvar
+ ;;
+esac
+
diff --git a/mcon/U/i_regex.U b/mcon/U/i_regex.U
new file mode 100644
index 0000000..2599bbc
--- /dev/null
+++ b/mcon/U/i_regex.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Sidney C. Smith <scsmith@cbda9.apgea.army.mil>
+?RCS:
+?RCS: $Log: i_regex.U,v $
+?RCS: Revision 3.0.1.1 1995/01/30 14:35:45 ram
+?RCS: patch49: created
+?RCS:
+?RCS:
+?MAKE:i_regex: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_regex:
+?S: This variable conditionally defines the I_REGEX symbol, which
+?S: indicates to the C program that <regex.h> exists and should
+?S: be included.
+?S:.
+?C:I_REGEX:
+?C: This symbol, if defined, indicates that <regex.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_regex I_REGEX /**/
+?H:.
+?LINT:set i_regex
+: see if regex is available
+set regex.h i_regex
+eval $inhdr
+
diff --git a/mcon/U/i_sfio.U b/mcon/U/i_sfio.U
new file mode 100644
index 0000000..0dde99f
--- /dev/null
+++ b/mcon/U/i_sfio.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sfio.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:48:27 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:i_sfio: Inhdr Setvar
+?MAKE: -pick add $@ %<
+?S:i_sfio:
+?S: This variable conditionally defines the I_SFIO symbol,
+?S: and indicates whether a C program should include <sfio.h>.
+?S:.
+?C:I_SFIO:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sfio.h>.
+?C:.
+?H:#$i_sfio I_SFIO /**/
+?H:.
+?LINT:set i_sfio
+: see if sfio.h is available
+set sfio.h i_sfio
+eval $inhdr
+
diff --git a/mcon/U/i_stddef.U b/mcon/U/i_stddef.U
new file mode 100644
index 0000000..5d34a99
--- /dev/null
+++ b/mcon/U/i_stddef.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_stddef.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:27 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_stddef: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_stddef:
+?S: This variable conditionally defines the I_STDDEF symbol, which
+?S: indicates to the C program that <stddef.h> exists and should
+?S: be included.
+?S:.
+?C:I_STDDEF:
+?C: This symbol, if defined, indicates that <stddef.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_stddef I_STDDEF /**/
+?H:.
+?LINT:set i_stddef
+: see if stddef is available
+set stddef.h i_stddef
+eval $inhdr
+
diff --git a/mcon/U/i_stdlib.U b/mcon/U/i_stdlib.U
new file mode 100644
index 0000000..d570918
--- /dev/null
+++ b/mcon/U/i_stdlib.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_stdlib.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:27 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_stdlib: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_stdlib:
+?S: This variable conditionally defines the I_STDLIB symbol, which
+?S: indicates to the C program that <stdlib.h> exists and should
+?S: be included.
+?S:.
+?C:I_STDLIB:
+?C: This symbol, if defined, indicates that <stdlib.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_stdlib I_STDLIB /**/
+?H:.
+?LINT:set i_stdlib
+: see if stdlib is available
+set stdlib.h i_stdlib
+eval $inhdr
+
diff --git a/mcon/U/i_string.U b/mcon/U/i_string.U
new file mode 100644
index 0000000..ce8bdfa
--- /dev/null
+++ b/mcon/U/i_string.U
@@ -0,0 +1,62 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_string.U,v $
+?RCS: Revision 3.0.1.2 1993/10/16 13:50:12 ram
+?RCS: patch12: special units Loc and Guess were missing from dependencies
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:07:26 ram
+?RCS: patch10: removed "(Actually, this looks more like...)" messages (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:28 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: See if we should include <string.h> or <strings.h>
+?X:
+?MAKE:i_string strings: test Setvar Findhdr Warn
+?MAKE: -pick add $@ %<
+?S:i_string:
+?S: This variable conditionally defines the I_STRING symbol, which
+?S: indicates that <string.h> should be included rather than <strings.h>.
+?S:.
+?S:strings:
+?S: This variable holds the full path of the string header that will be
+?S: used. Typically /usr/include/string.h or /usr/include/strings.h.
+?S:.
+?C:I_STRING:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <string.h> (USG systems) instead of <strings.h> (BSD systems).
+?C:.
+?H:#$i_string I_STRING /**/
+?H:.
+?LINT:set i_string
+: see which of string.h or strings.h is needed
+echo " "
+strings=`./findhdr string.h`
+if $test "$strings" && $test -r "$strings"; then
+ echo "Using <string.h> instead of <strings.h>." >&4
+ val="$define"
+else
+ val="$undef"
+ strings=`./findhdr strings.h`
+ if $test "$strings" && $test -r "$strings"; then
+ echo "Using <strings.h> instead of <string.h>." >&4
+ else
+ ./warn "No string header found -- You'll surely have problems."
+ fi
+fi
+set i_string
+eval $setvar
+case "$i_string" in
+"$undef") strings=`./findhdr strings.h`;;
+*) strings=`./findhdr string.h`;;
+esac
+
diff --git a/mcon/U/i_sysdir.U b/mcon/U/i_sysdir.U
new file mode 100644
index 0000000..1fa9092
--- /dev/null
+++ b/mcon/U/i_sysdir.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysdir.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:22:30 ram
+?RCS: patch32: fixed typo in I_SYS_DIR symbol name
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:30 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_sysdir: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysdir:
+?S: This variable conditionally defines the I_SYS_DIR symbol, and indicates
+?S: whether a C program should include <sys/dir.h>.
+?S:.
+?C:I_SYS_DIR (I_SYSDIR):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/dir.h>.
+?C:.
+?H:#$i_sysdir I_SYS_DIR /**/
+?H:.
+?LINT:set i_sysdir
+: see if this is an sysdir system
+set sys/dir.h i_sysdir
+eval $inhdr
+
diff --git a/mcon/U/i_sysfile.U b/mcon/U/i_sysfile.U
new file mode 100644
index 0000000..b8d8b9a
--- /dev/null
+++ b/mcon/U/i_sysfile.U
@@ -0,0 +1,60 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysfile.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 14:11:36 ram
+?RCS: patch56: removed <> characters from comment, per metalint suggestion
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/25 14:01:23 ram
+?RCS: patch6: added default for i_sysfile
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:31 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_sysfile: h_sysfile Inhdr Setvar
+?MAKE: -pick add $@ %<
+?S:i_sysfile:
+?S: This variable conditionally defines the I_SYS_FILE symbol, and indicates
+?S: whether a C program should include <sys/file.h> to get R_OK and friends.
+?S:.
+?C:I_SYS_FILE (I_SYSFILE):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/file.h> to get definition of R_OK and friends.
+?C:.
+?H:#$i_sysfile I_SYS_FILE /**/
+?H:.
+?T:val
+?D:i_sysfile=''
+?LINT:change h_sysfile
+?LINT:set i_sysfile
+: see if this is a sys/file.h system
+val=''
+set sys/file.h val
+eval $inhdr
+
+: do we need to include sys/file.h ?
+case "$val" in
+"$define")
+ echo " "
+ if $h_sysfile; then
+ val="$define"
+ echo "We'll be including <sys/file.h>." >&4
+ else
+ val="$undef"
+ echo "We won't be including <sys/file.h>." >&4
+ fi
+ ;;
+*)
+ h_sysfile=false
+ ;;
+esac
+set i_sysfile
+eval $setvar
+
diff --git a/mcon/U/i_sysioctl.U b/mcon/U/i_sysioctl.U
new file mode 100644
index 0000000..a7c35e0
--- /dev/null
+++ b/mcon/U/i_sysioctl.U
@@ -0,0 +1,202 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysioctl.U,v $
+?RCS: Revision 3.0.1.2 1994/05/06 15:04:57 ram
+?RCS: patch23: added knowledge for <sys/filio.h> (WED)
+?RCS: patch23: optimized amount of findhdr calls
+?RCS:
+?RCS: Revision 3.0.1.1 1993/11/10 17:36:09 ram
+?RCS: patch14: now use a compiler check for TIOCNOTTY because of HP-UX 9.x
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:32 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_sysioctl i_bsdioctl i_sysfilio i_syssockio d_voidtty: test contains \
+ cat i_termio i_termios i_sgtty Setvar Findhdr +cc rm Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysioctl:
+?S: This variable conditionally defines the I_SYS_IOCTL symbol, which
+?S: indicates to the C program that <sys/ioctl.h> exists and should
+?S: be included.
+?S:.
+?S:i_sysfilio:
+?S: This variable conditionally defines the I_SYS_FILIO symbol, which
+?S: indicates to the C program that <sys/filio.h> exists and should
+?S: be included in preference to <sys/ioctl.h>.
+?S:.
+?S:i_bsdioctl:
+?S: This variable conditionally defines the I_SYS_BSDIOCTL symbol, which
+?S: indicates to the C program that <sys/bsdioctl.h> exists and should
+?S: be included.
+?S:.
+?S:i_syssockio:
+?S: This variable conditionally defines I_SYS_SOCKIO to indicate to the
+?S: C program that socket ioctl codes may be found in <sys/sockio.h>
+?S: instead of <sys/ioctl.h>.
+?S:.
+?S:d_voidtty:
+?S: This variable conditionally defines USE_IOCNOTTY to indicate that the
+?S: ioctl() call with TIOCNOTTY should be used to void tty association.
+?S: Otherwise (on USG probably), it is enough to close the standard file
+?S: decriptors and do a setpgrp().
+?S:.
+?C:I_SYS_IOCTL (I_SYSIOCTL):
+?C: This symbol, if defined, indicates that <sys/ioctl.h> exists and should
+?C: be included. Otherwise, include <sgtty.h> or <termio.h>.
+?C:.
+?C:I_SYS_FILIO:
+?C: This symbol, if defined, indicates that <sys/filio.h> exists and
+?C: should be included instead of <sys/ioctl.h>.
+?C:.
+?C:I_SYS_BSDIOCTL (I_BSDIOCTL):
+?C: This symbol, if defined, indicates that <sys/bsdioctl.h> exists and should
+?C: be included. Otherwise, try <sys/ioctl.h>. This is primarly intended for
+?C: definitions of sockets options, like SIOCATMARK.
+?C:.
+?C:I_SYS_SOCKIO (I_SYSSOCKIO):
+?C: This symbol, if defined, indicates the <sys/sockio.h> should be included
+?C: to get socket ioctl options, like SIOCATMARK.
+?C:.
+?C:USE_TIOCNOTTY (VOIDTTY):
+?C: This symbol, if defined indicate to the C program that the ioctl()
+?C: call with TIOCNOTTY should be used to void tty association.
+?C: Otherwise (on USG probably), it is enough to close the standard file
+?C: decriptors and do a setpgrp().
+?C:.
+?H:#$i_sysioctl I_SYS_IOCTL /**/
+?H:#$i_sysfilio I_SYS_FILIO /**/
+?H:#$i_bsdioctl I_SYS_BSDIOCTL /**/
+?H:#$i_syssockio I_SYS_SOCKIO /**/
+?H:#$d_voidtty USE_TIOCNOTTY /**/
+?H:.
+?T:xxx
+: see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
+?LINT:set i_sysfilio
+set sys/filio.h i_sysfilio
+eval $inhdr
+echo " "
+if $test `./findhdr sys/ioctl.h`; then
+ val="$define"
+ echo '<sys/ioctl.h> found.' >&4
+else
+ val="$undef"
+ if $test $i_sysfilio = "$define"; then
+ echo '<sys/ioctl.h> NOT found.' >&4
+ else
+ $test $i_sgtty = "$define" && xxx="sgtty.h"
+ $test $i_termio = "$define" && xxx="termio.h"
+ $test $i_termios = "$define" && xxx="termios.h"
+echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
+ fi
+fi
+?LINT:set i_sysioctl
+set i_sysioctl
+eval $setvar
+
+@if I_BSDIOCTL || i_bsdioctl
+?X:
+?X: The only machine I know where this inclusion was necessary is a
+?X: BULL DPX 5000 (a French machine).
+?X:
+: see if socket ioctl defs are in sys/bsdioctl or sys/ioctl
+echo " "
+xxx=`./findhdr sys/bsdioctl.h`
+if $test "$xxx"; then
+ if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
+ val="$define"
+ echo "You have socket ioctls defined in <sys/bsdioctl.h>." >&4
+ else
+ val="$undef"
+ echo "No socket ioctls found in <sys/bsdioctl.h>." >&4
+ fi
+else
+ val="$undef"
+ echo "<sys/bsdioctl.h> not found, but that's ok." >&4
+fi
+?LINT:set i_bsdioctl
+set i_bsdioctl
+eval $setvar
+
+@end
+@if I_SYSSOCKIO || i_syssockio
+: see if socket ioctl defs are in sys/sockio.h
+echo " "
+xxx=`./findhdr sys/sockio.h`
+if $test "$xxx"; then
+ if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
+ val="$define"
+ echo "You have socket ioctls defined in <sys/sockio.h>." >&4
+ else
+ val="$undef"
+ echo "No socket ioctls found in <sys/sockio.h>." >&4
+ fi
+else
+ val="$undef"
+@if I_BSDIOCTL
+ case "$i_bsdioctl" in
+ "$define") $cat <<EOM
+<sys/sockio.h> not found, using ioctls from <sys/bsdioctl.h>.
+EOM
+ ;;
+ *) $cat <<EOM
+<sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
+EOM
+ ;;
+ esac
+@else
+ $cat <<EOM
+<sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
+EOM
+@end
+fi
+?LINT:set i_syssockio
+set i_syssockio
+eval $setvar
+
+@end
+@if VOIDTTY || d_voidtty
+: check how to void tty association
+echo " "
+case "$i_sysioctl" in
+"$define") xxx='sys/ioctl.h';;
+?X: otherwise $xxx was set during the determination of i_sysioctl, above.
+esac
+?X:
+?X: Can't use $contains here since HP-UX 9.x has TIOCNOTTY between a pair
+?X: of #ifdef/#endif and is never actually defined. Oh well...
+?X:
+$cat > tcio.c <<EOM
+#include <sys/types.h> /* Just in case */
+#include <$xxx>
+
+int main()
+{
+#ifdef TIOCNOTTY
+ exit(0);
+#else
+ exit(1);
+#endif
+}
+EOM
+if ($cc -o tcio tcio.c && ./tcio) >/dev/null 2>&1; then
+ val="$define"
+ echo "TIOCNOTTY found in <$xxx>." >&4
+ echo "Using ioctl() call on /dev/tty to void tty association." >&4
+else
+ val="$undef"
+ echo "Closing standard file descriptors should void tty association." >&4
+fi
+?LINT:set d_voidtty
+set d_voidtty
+eval $setvar
+$rm -f tcio tcio.? core
+
+@end
diff --git a/mcon/U/i_sysmman.U b/mcon/U/i_sysmman.U
new file mode 100644
index 0000000..8e88249
--- /dev/null
+++ b/mcon/U/i_sysmman.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysmman.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:11:20 ram
+?RCS: patch16: created
+?RCS:
+?X:
+?X: Look wether <sys/mman.h> needs to be included.
+?X:
+?MAKE:i_sysmman: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysmman:
+?S: This variable conditionally defines the I_SYS_MMAN symbol,
+?S: and indicates whether a C program should include <sys/mman.h>.
+?S:.
+?C:I_SYS_MMAN:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/mman.h>.
+?C:.
+?H:#$i_sysmman I_SYS_MMAN /**/
+?H:.
+?LINT:set i_sysmman
+: see if sys/mman.h has to be included
+set sys/mman.h i_sysmman
+eval $inhdr
+
diff --git a/mcon/U/i_sysndir.U b/mcon/U/i_sysndir.U
new file mode 100644
index 0000000..8c24648
--- /dev/null
+++ b/mcon/U/i_sysndir.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysndir.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:33 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_sysndir: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysndir:
+?S: This variable conditionally defines the I_SYS_NDIR symbol, and indicates
+?S: whether a C program should include <sys/ndir.h>.
+?S:.
+?C:I_SYS_NDIR (I_SYSNDIR):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/ndir.h>.
+?C:.
+?H:#$i_sysndir I_SYS_NDIR /**/
+?H:.
+?LINT:set i_sysndir
+: see if this is an sysndir system
+set sys/ndir.h i_sysndir
+eval $inhdr
+
diff --git a/mcon/U/i_sysparam.U b/mcon/U/i_sysparam.U
new file mode 100644
index 0000000..ffa6f39
--- /dev/null
+++ b/mcon/U/i_sysparam.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysparam.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:22:43 ram
+?RCS: patch32: created
+?RCS:
+?MAKE:i_sysparam: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysparam:
+?S: This variable conditionally defines the I_SYS_PARAM symbol, and indicates
+?S: whether a C program should include <sys/param.h>.
+?S:.
+?C:I_SYS_PARAM:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/param.h>.
+?C:.
+?H:#$i_sysparam I_SYS_PARAM /**/
+?H:.
+?LINT:set i_sysparam
+: see if this is a sys/param system
+set sys/param.h i_sysparam
+eval $inhdr
+
diff --git a/mcon/U/i_sysresrc.U b/mcon/U/i_sysresrc.U
new file mode 100644
index 0000000..8d6f59b
--- /dev/null
+++ b/mcon/U/i_sysresrc.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysresrc.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:34 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: Look wether <sys/resource.h> needs to be included
+?X:
+?MAKE:i_sysresrc: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysresrc:
+?S: This variable conditionally defines the I_SYS_RESOURCE symbol,
+?S: and indicates whether a C program should include <sys/resource.h>.
+?S:.
+?C:I_SYS_RESOURCE (I_SYSRESOURCE):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/resource.h>.
+?C:.
+?H:#$i_sysresrc I_SYS_RESOURCE /**/
+?H:.
+?LINT:set i_sysresrc
+: see if sys/resource.h has to be included
+set sys/resource.h i_sysresrc
+eval $inhdr
+
diff --git a/mcon/U/i_sysselct.U b/mcon/U/i_sysselct.U
new file mode 100644
index 0000000..9f24002
--- /dev/null
+++ b/mcon/U/i_sysselct.U
@@ -0,0 +1,39 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysselct.U,v $
+?RCS: Revision 3.0.1.1 1993/08/25 14:01:33 ram
+?RCS: patch6: added default for i_sysselct
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:35 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: Look wether <sys/select.h> exists
+?X:
+?MAKE:i_sysselct: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysselct:
+?S: This variable conditionally defines I_SYS_SELECT, which indicates
+?S: to the C program that it should include <sys/select.h> in order to
+?S: get the definition of struct timeval.
+?S:.
+?C:I_SYS_SELECT (I_SYSSELECT):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/select.h> in order to get definition of struct timeval.
+?C:.
+?H:#$i_sysselct I_SYS_SELECT /**/
+?H:.
+?D:i_sysselct=''
+?LINT:set i_sysselct
+: see if sys/select.h has to be included
+set sys/select.h i_sysselct
+eval $inhdr
+
diff --git a/mcon/U/i_syssock.U b/mcon/U/i_syssock.U
new file mode 100644
index 0000000..5788eca
--- /dev/null
+++ b/mcon/U/i_syssock.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_syssock.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:36 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_syssock: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_syssock:
+?S: This variable conditionally defines the I_SYS_SOCKET symbol, and indicates
+?S: whether a C program should include <sys/socket.h> before performing socket
+?S: operations.
+?S:.
+?C:I_SYS_SOCKET:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/socket.h> before performing socket calls.
+?C:.
+?H:#$i_syssock I_SYS_SOCKET /**/
+?H:.
+?LINT:set i_syssock
+: see if this is a sys/socket.h system
+set sys/socket.h i_syssock
+eval $inhdr
+
diff --git a/mcon/U/i_sysstat.U b/mcon/U/i_sysstat.U
new file mode 100644
index 0000000..c010999
--- /dev/null
+++ b/mcon/U/i_sysstat.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysstat.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:48:30 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:i_sysstat: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysstat:
+?S: This variable conditionally defines the I_SYS_STAT symbol,
+?S: and indicates whether a C program should include <sys/stat.h>.
+?S:.
+?C:I_SYS_STAT (I_SYSSTAT):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/stat.h>.
+?C:.
+?H:#$i_sysstat I_SYS_STAT /**/
+?H:.
+?LINT:set i_sysstat
+: see if sys/stat.h is available
+set sys/stat.h i_sysstat
+eval $inhdr
+
diff --git a/mcon/U/i_systable.U b/mcon/U/i_systable.U
new file mode 100644
index 0000000..7e94d4a
--- /dev/null
+++ b/mcon/U/i_systable.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_systable.U,v $
+?RCS: Revision 3.0.1.1 1993/10/16 13:50:20 ram
+?RCS: patch12: created
+?RCS:
+?RCS:
+?MAKE:i_systable: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_systable:
+?S: This variable conditionally defines the I_SYS_TABLE symbol, and
+?S: indicates whether a C program should include <sys/table.h>.
+?S:.
+?C:I_SYS_TABLE:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/table.h> for the OSF/1 table() system call.
+?C:.
+?H:#$i_systable I_SYS_TABLE /**/
+?H:.
+?LINT:set i_systable
+: see if this is an OSF sys/table system
+set sys/table.h i_systable
+eval $inhdr
+
diff --git a/mcon/U/i_systimeb.U b/mcon/U/i_systimeb.U
new file mode 100644
index 0000000..29a89c8
--- /dev/null
+++ b/mcon/U/i_systimeb.U
@@ -0,0 +1,55 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_systimeb.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:37 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit looks wether <sys/timeb.h> should be included
+?X: or not when using ftime() (for struct timeb definition).
+?X:
+?X: Force looking for <sys/time.h> for struct timeb.
+?X:INC: i_systime
+?MAKE:i_systimeb: test contains Loc Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:i_systimeb:
+?S: This variable conditionally defines I_SYS_TIMEB, which indicates
+?S: to the C program that it should include <sys/timeb.h>.
+?S:.
+?C:I_SYS_TIMEB (I_SYSTIMEB):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/timeb.h>, in order to define struct timeb (some systems
+?C: define this in <sys/time.h>). This is useful when using ftime().
+?C: You should include <sys/time.h> if I_SYS_TIMEB is not defined,
+?C: nor is I_SYS_TIME.
+?C:.
+?H:#$i_systimeb I_SYS_TIMEB /**/
+?H:.
+?T:xxx
+?LINT:set i_systimeb
+: see where struct timeb is defined
+echo " "
+xxx=`./findhdr sys/timeb.h`
+if $test "$xxx"; then
+ if $contains 'struct timeb' $xxx >/dev/null 2>&1; then
+ val="$define"
+ echo "You have struct timeb defined in <sys/timeb.h>." >&4
+ else
+ val="$undef"
+ echo "Assuming struct timeb is defined in <sys/time.h>." >&4
+ fi
+else
+ val="$undef"
+echo "No <sys/timeb.h> -- Assuming struct timeb is defined in <sys/time.h>." >&4
+fi
+set i_systimeb
+eval $setvar
+
diff --git a/mcon/U/i_systimes.U b/mcon/U/i_systimes.U
new file mode 100644
index 0000000..41066e2
--- /dev/null
+++ b/mcon/U/i_systimes.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_systimes.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:39 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_systimes: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_systimes:
+?S: This variable conditionally defines the I_SYS_TIMES symbol, and indicates
+?S: whether a C program should include <sys/times.h>.
+?S:.
+?C:I_SYS_TIMES (I_SYSTIMES):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/times.h>.
+?C:.
+?H:#$i_systimes I_SYS_TIMES /**/
+?H:.
+?LINT:set i_systimes
+: see if this is a sys/times.h system
+set sys/times.h i_systimes
+eval $inhdr
+
diff --git a/mcon/U/i_systwgcf.U b/mcon/U/i_systwgcf.U
new file mode 100644
index 0000000..eac12fb
--- /dev/null
+++ b/mcon/U/i_systwgcf.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_systwgcf.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:39 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_systwgcf: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_systwgcf:
+?S: This variable conditionally defines the I_SYS_TWG_CF symbol, and
+?S: indicates whether a C program should include sys/twg_config.h.
+?S:.
+?C:I_SYS_TWG_CF:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include sys/twg_config.h.
+?C:.
+?H:#$i_systwgcf I_SYS_TWG_CF /**/
+?H:.
+?LINT:set i_systwgcf
+: see if this is a sys/twg_config.h system
+set sys/twg_config.h i_systwgcf
+eval $inhdr
+
diff --git a/mcon/U/i_systypes.U b/mcon/U/i_systypes.U
new file mode 100644
index 0000000..c94e654
--- /dev/null
+++ b/mcon/U/i_systypes.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_systypes.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:41 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: Look wether <sys/types.h> needs to be included.
+?X:
+?MAKE:i_systypes: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_systypes:
+?S: This variable conditionally defines the I_SYS_TYPES symbol,
+?S: and indicates whether a C program should include <sys/types.h>.
+?S:.
+?C:I_SYS_TYPES (I_SYSTYPES):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/types.h>.
+?C:.
+?H:#$i_systypes I_SYS_TYPES /**/
+?H:.
+?LINT:set i_systypes
+: see if sys/types.h has to be included
+set sys/types.h i_systypes
+eval $inhdr
+
diff --git a/mcon/U/i_sysun.U b/mcon/U/i_sysun.U
new file mode 100644
index 0000000..2da3b11
--- /dev/null
+++ b/mcon/U/i_sysun.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_sysun.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit looks wether <sys/un.h> is available or not
+?X:
+?MAKE:i_sysun: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_sysun:
+?S: This variable conditionally defines I_SYS_UN, which indicates
+?S: to the C program that it should include <sys/un.h> to get UNIX
+?S: domain socket definitions.
+?S:.
+?C:I_SYS_UN:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/un.h> to get UNIX domain socket definitions.
+?C:.
+?H:#$i_sysun I_SYS_UN /**/
+?H:.
+?LINT:set i_sysun
+: see if this is a sys/un.h system
+set sys/un.h i_sysun
+eval $inhdr
+
diff --git a/mcon/U/i_syswait.U b/mcon/U/i_syswait.U
new file mode 100644
index 0000000..9830fac
--- /dev/null
+++ b/mcon/U/i_syswait.U
@@ -0,0 +1,34 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_syswait.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit looks wether <sys/wait.h> is available or not
+?X:
+?MAKE:i_syswait: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_syswait:
+?S: This variable conditionally defines I_SYS_WAIT, which indicates
+?S: to the C program that it should include <sys/wait.h>.
+?S:.
+?C:I_SYS_WAIT (I_SYSWAIT):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/wait.h>.
+?C:.
+?H:#$i_syswait I_SYS_WAIT /**/
+?H:.
+?LINT:set i_syswait
+: see if this is a syswait system
+set sys/wait.h i_syswait
+eval $inhdr
+
diff --git a/mcon/U/i_termio.U b/mcon/U/i_termio.U
new file mode 100644
index 0000000..1f564ea
--- /dev/null
+++ b/mcon/U/i_termio.U
@@ -0,0 +1,123 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_termio.U,v $
+?RCS: Revision 3.0.1.4 1994/10/29 16:20:54 ram
+?RCS: patch36: call ./usg and ./Cppsym explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0.1.3 1994/08/29 16:26:38 ram
+?RCS: patch32: don't include all threee I_* symbols in config.h
+?RCS: patch32: (had forgotten to undo this part last time)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/13 15:25:03 ram
+?RCS: patch27: undone ADO's fix in previous patch since it was useless
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:05:23 ram
+?RCS: patch23: now include all three defines in config.h (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:44 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_termio i_sgtty i_termios: test Inlibc Cppsym Guess Setvar Findhdr Warn
+?MAKE: -pick add $@ %<
+?S:i_termio:
+?S: This variable conditionally defines the I_TERMIO symbol, which
+?S: indicates to the C program that it should include <termio.h> rather
+?S: than <sgtty.h>.
+?S:.
+?S:i_termios:
+?S: This variable conditionally defines the I_TERMIOS symbol, which
+?S: indicates to the C program that the POSIX <termios.h> file is
+?S: to be included.
+?S:.
+?S:i_sgtty:
+?S: This variable conditionally defines the I_SGTTY symbol, which
+?S: indicates to the C program that it should include <sgtty.h> rather
+?S: than <termio.h>.
+?S:.
+?C:I_TERMIO:
+?C: This symbol, if defined, indicates that the program should include
+?C: <termio.h> rather than <sgtty.h>. There are also differences in
+?C: the ioctl() calls that depend on the value of this symbol.
+?C:.
+?C:I_TERMIOS:
+?C: This symbol, if defined, indicates that the program should include
+?C: the POSIX termios.h rather than sgtty.h or termio.h.
+?C: There are also differences in the ioctl() calls that depend on the
+?C: value of this symbol.
+?C:.
+?C:I_SGTTY:
+?C: This symbol, if defined, indicates that the program should include
+?C: <sgtty.h> rather than <termio.h>. There are also differences in
+?C: the ioctl() calls that depend on the value of this symbol.
+?C:.
+?H:#$i_termio I_TERMIO /**/
+?H:#$i_termios I_TERMIOS /**/
+?H:#$i_sgtty I_SGTTY /**/
+?H:.
+?T:val2 val3
+?LINT:set i_termio i_sgtty i_termios
+: see if this is a termio system
+val="$undef"
+val2="$undef"
+val3="$undef"
+?X: Prefer POSIX-approved termios.h over all else
+if $test `./findhdr termios.h`; then
+ set tcsetattr i_termios
+ eval $inlibc
+ val3="$i_termios"
+fi
+echo " "
+case "$val3" in
+"$define") echo "You have POSIX termios.h... good!" >&4;;
+*) if ./Cppsym pyr; then
+ case "`/bin/universe`" in
+ ucb) if $test `./findhdr sgtty.h`; then
+ val2="$define"
+ echo "<sgtty.h> found." >&4
+ else
+ echo "System is pyramid with BSD universe."
+ ./warn "<sgtty.h> not found--you could have problems."
+ fi;;
+ *) if $test `./findhdr termio.h`; then
+ val="$define"
+ echo "<termio.h> found." >&4
+ else
+ echo "System is pyramid with USG universe."
+ ./warn "<termio.h> not found--you could have problems."
+ fi;;
+ esac
+?X: Start with USG to avoid problems if both usg/bsd was guessed
+ elif ./usg; then
+ if $test `./findhdr termio.h`; then
+ echo "<termio.h> found." >&4
+ val="$define"
+ elif $test `./findhdr sgtty.h`; then
+ echo "<sgtty.h> found." >&4
+ val2="$define"
+ else
+ ./warn "Neither <termio.h> nor <sgtty.h> found--cross fingers!"
+ fi
+ else
+ if $test `./findhdr sgtty.h`; then
+ echo "<sgtty.h> found." >&4
+ val2="$define"
+ elif $test `./findhdr termio.h`; then
+ echo "<termio.h> found." >&4
+ val="$define"
+ else
+ ./warn "Neither <sgtty.h> nor <termio.h> found--cross fingers!"
+ fi
+ fi;;
+esac
+set i_termio; eval $setvar
+val=$val2; set i_sgtty; eval $setvar
+val=$val3; set i_termios; eval $setvar
+
diff --git a/mcon/U/i_time.U b/mcon/U/i_time.U
new file mode 100644
index 0000000..cdf1519
--- /dev/null
+++ b/mcon/U/i_time.U
@@ -0,0 +1,171 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_time.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:45 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit finds which "time" include to use. If 'timezone' is used by the
+?X: program, we also try to find which header should be included. Eventually,
+?X: we look for <sys/select.h> if I_SYSSELECT is used, to get struct timeval.
+?X:
+?MAKE:i_time i_systime i_systimek timeincl: cat cc ccflags contains rm \
+ echo n c +i_sysselct Findhdr
+?MAKE: -pick add $@ %<
+?S:i_time:
+?S: This variable conditionally defines I_TIME, which indicates
+?S: to the C program that it should include <time.h>.
+?S:.
+?S:i_systime:
+?S: This variable conditionally defines I_SYS_TIME, which indicates
+?S: to the C program that it should include <sys/time.h>.
+?S:.
+?S:i_systimek:
+?S: This variable conditionally defines I_SYS_TIME_KERNEL, which
+?S: indicates to the C program that it should include <sys/time.h>
+?S: with KERNEL defined.
+?S:.
+?S:timeincl:
+?S: This variable holds the full path of the included time header(s).
+?S:.
+?C:I_TIME (USE_TIME_H):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <time.h>.
+?C:.
+?C:I_SYS_TIME (I_SYSTIME USE_SYS_TIME_H NO_TIME_WITH_SYS_TIME):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/time.h>.
+?C:.
+?C:I_SYS_TIME_KERNEL (I_SYSTIMEKERNEL):
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <sys/time.h> with KERNEL defined.
+?C:.
+?H:#$i_time I_TIME /**/
+?H:#$i_systime I_SYS_TIME /**/
+?H:#$i_systimek I_SYS_TIME_KERNEL /**/
+?H:.
+?W::timezone
+?T:xselect flags sysselect s_timeval s_timezone
+?LINT:change i_sysselct
+: see if we should include time.h, sys/time.h, or both
+echo " "
+echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
+$echo $n "I'm now running the test program...$c"
+$cat >try.c <<'EOCP'
+#include <sys/types.h>
+#ifdef I_TIME
+#include <time.h>
+#endif
+#ifdef I_SYSTIME
+#ifdef SYSTIMEKERNEL
+#define KERNEL
+#endif
+#include <sys/time.h>
+#endif
+#ifdef I_SYSSELECT
+#include <sys/select.h>
+#endif
+int main()
+{
+ struct tm foo;
+#ifdef S_TIMEVAL
+ struct timeval bar;
+#endif
+#ifdef S_TIMEZONE
+ struct timezone tzp;
+#endif
+ if (foo.tm_sec == foo.tm_sec)
+ exit(0);
+#ifdef S_TIMEVAL
+ if (bar.tv_sec == bar.tv_sec)
+ exit(0);
+#endif
+ exit(1);
+}
+EOCP
+flags=''
+@if I_SYSSELECT
+if $contains 'timeval.*{' `./findhdr sys/select.h` >/dev/null 2>&1; then
+ xselect='-DI_SYSSELECT'
+else
+ xselect=''
+fi
+@end
+@if timezone
+for s_timezone in '-DS_TIMEZONE' ''; do
+@else
+s_timezone=''
+@end
+?X: Every package is given a try with 'struct timeval'
+@if I_SYSSELECT
+for sysselect in $xselect ''; do
+@else
+sysselect=''
+@end
+for s_timeval in '-DS_TIMEVAL' ''; do
+for i_systimek in '' '-DSYSTIMEKERNEL'; do
+for i_time in '' '-DI_TIME'; do
+for i_systime in '-DI_SYSTIME' ''; do
+ case "$flags" in
+ '') $echo $n ".$c"
+ if $cc $ccflags \
+ $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone \
+ -o try try.c >/dev/null 2>&1 ; then
+ set X $i_time $i_systime $i_systimek $sysselect $s_timeval
+ shift
+ flags="$*"
+ echo " "
+ $echo $n "Succeeded with $flags$c"
+ fi
+ ;;
+ esac
+done
+done
+done
+done
+@if I_SYSSELECT
+done
+@end
+@if timezone
+done
+@end
+timeincl=''
+echo " "
+case "$flags" in
+*SYSTIMEKERNEL*) i_systimek="$define"
+ timeincl=`./findhdr sys/time.h`
+ echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
+*) i_systimek="$undef";;
+esac
+case "$flags" in
+*I_TIME*) i_time="$define"
+ timeincl=`./findhdr time.h`" $timeincl"
+ echo "We'll include <time.h>." >&4;;
+*) i_time="$undef";;
+esac
+case "$flags" in
+*I_SYSTIME*) i_systime="$define"
+ timeincl=`./findhdr sys/time.h`" $timeincl"
+ echo "We'll include <sys/time.h>." >&4;;
+*) i_systime="$undef";;
+esac
+@if I_SYSSELECT
+case "$flags" in
+*I_SYSSELECT*) i_sysselct="$define"
+ timeincl=`./findhdr sys/select.h`" $timeincl"
+ echo "We'll also include <sys/select.h> to get struct timeval." >&4;;
+*) case "$i_sysselct" in
+ '') i_sysselct="$undef";;
+ esac
+esac
+@end
+$rm -f try.c try
+
diff --git a/mcon/U/i_unistd.U b/mcon/U/i_unistd.U
new file mode 100644
index 0000000..3e199ab
--- /dev/null
+++ b/mcon/U/i_unistd.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_unistd.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:46 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_unistd: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_unistd:
+?S: This variable conditionally defines the I_UNISTD symbol, and indicates
+?S: whether a C program should include <unistd.h>.
+?S:.
+?C:I_UNISTD:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <unistd.h>.
+?C:.
+?H:#$i_unistd I_UNISTD /**/
+?H:.
+?LINT:set i_unistd
+: see if this is a unistd.h system
+set unistd.h i_unistd
+eval $inhdr
+
diff --git a/mcon/U/i_utime.U b/mcon/U/i_utime.U
new file mode 100644
index 0000000..23601e7
--- /dev/null
+++ b/mcon/U/i_utime.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_utime.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:47 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_utime: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_utime:
+?S: This variable conditionally defines the I_UTIME symbol, and indicates
+?S: whether a C program should include <utime.h>.
+?S:.
+?C:I_UTIME:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <utime.h>.
+?C:.
+?H:#$i_utime I_UTIME /**/
+?H:.
+?LINT:set i_utime
+: see if this is an utime system
+set utime.h i_utime
+eval $inhdr
+
diff --git a/mcon/U/i_values.U b/mcon/U/i_values.U
new file mode 100644
index 0000000..6ff6d2b
--- /dev/null
+++ b/mcon/U/i_values.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_values.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:48:34 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:i_values: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_values:
+?S: This variable conditionally defines the I_VALUES symbol, and indicates
+?S: whether a C program may include <values.h> to get symbols like MAXLONG
+?S: and friends.
+?S:.
+?C:I_VALUES:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <values.h> to get definition of symbols like MINFLOAT or
+?C: MAXLONG, i.e. machine dependant limitations. Probably, you
+?C: should use <limits.h> instead, if it is available.
+?C:.
+?H:#$i_values I_VALUES /**/
+?H:.
+?LINT:set i_values
+: see if this is a values.h system
+set values.h i_values
+eval $inhdr
+
diff --git a/mcon/U/i_varhdr.U b/mcon/U/i_varhdr.U
new file mode 100644
index 0000000..d7629d4
--- /dev/null
+++ b/mcon/U/i_varhdr.U
@@ -0,0 +1,164 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_varhdr.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:54:42 ram
+?RCS: patch61: varargs script now starts with leading "startsh"
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:21:02 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/13 15:26:05 ram
+?RCS: patch27: this unit now supersedes old i_stdarg.U and i_varargs.U
+?RCS: patch27: modified to avoid spurious Whoa warnings (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:49 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_stdarg i_varargs i_varhdr: cat +cc +ccflags rm test Setvar \
+ Findhdr Warn startsh _o
+?MAKE: -pick add $@ %<
+?S:i_stdarg:
+?S: This variable conditionally defines the I_STDARG symbol, which
+?S: indicates to the C program that <stdarg.h> exists and should
+?S: be included.
+?S:.
+?S:i_varargs:
+?S: This variable conditionally defines I_VARARGS, which indicates
+?S: to the C program that it should include <varargs.h>.
+?S:.
+?S:i_varhdr:
+?S: Contains the name of the header to be included to get va_dcl definition.
+?S: Typically one of varargs.h or stdarg.h.
+?S:.
+?C:I_STDARG:
+?C: This symbol, if defined, indicates that <stdarg.h> exists and should
+?C: be included.
+?C:.
+?C:I_VARARGS:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include <varargs.h>.
+?C:.
+?H:#$i_stdarg I_STDARG /**/
+?H:#$i_varargs I_VARARGS /**/
+?H:.
+?W:%<:va_dcl
+?F:!varargs
+?T:valstd
+?LINT:set i_stdarg i_varargs
+?X:
+?X: Don't use setvar because the varags test below might override these.
+?X: Actually, the messages here are just informative. We don't wish to set
+?X: i_varargs or i_stdarg to their final value before knowing which of the
+?X: two we'll include.
+?X:
+: see if stdarg is available
+echo " "
+if $test `./findhdr stdarg.h`; then
+ echo "<stdarg.h> found." >&4
+ valstd="$define"
+else
+ echo "<stdarg.h> NOT found." >&4
+ valstd="$undef"
+fi
+
+: see if varags is available
+echo " "
+if $test `./findhdr varargs.h`; then
+ echo "<varargs.h> found." >&4
+else
+ echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
+fi
+
+?X:
+?X: if you have stdarg.h, you need to support prototypes to actually use it;
+?X: but if stdarg.h exists and the compiler doesn't support prototypes (for some
+?X: bizarre reason), we'll fall back to varargs.h anyway so it's not so bad.
+?X:
+: set up the varargs testing programs
+$cat > varargs.c <<EOP
+#ifdef I_STDARG
+#include <stdarg.h>
+#endif
+#ifdef I_VARARGS
+#include <varargs.h>
+#endif
+
+#ifdef I_STDARG
+int f(char *p, ...)
+#else
+int f(va_alist)
+va_dcl
+#endif
+{
+ va_list ap;
+#ifndef I_STDARG
+ char *p;
+#endif
+#ifdef I_STDARG
+ va_start(ap,p);
+#else
+ va_start(ap);
+ p = va_arg(ap, char *);
+#endif
+ va_end(ap);
+}
+EOP
+$cat > varargs <<EOP
+$startsh
+if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
+ echo "true"
+else
+ echo "false"
+fi
+$rm -f varargs$_o
+EOP
+chmod +x varargs
+
+: now check which varargs header should be included
+echo " "
+i_varhdr=''
+case "$valstd" in
+"$define")
+ if `./varargs I_STDARG`; then
+ val='stdarg.h'
+ elif `./varargs I_VARARGS`; then
+ val='varargs.h'
+ fi
+ ;;
+*)
+ if `./varargs I_VARARGS`; then
+ val='varargs.h'
+ fi
+ ;;
+esac
+case "$val" in
+'')
+ ./warn "I could not find the definition for va_dcl... You have problems..."
+ val="$undef"; set i_stdarg; eval $setvar
+ val="$undef"; set i_varargs; eval $setvar
+ ;;
+*)
+ set i_varhdr
+ eval $setvar
+ case "$i_varhdr" in
+ stdarg.h)
+ val="$define"; set i_stdarg; eval $setvar
+ val="$undef"; set i_varargs; eval $setvar
+ ;;
+ varargs.h)
+ val="$undef"; set i_stdarg; eval $setvar
+ val="$define"; set i_varargs; eval $setvar
+ ;;
+ esac
+ echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
+esac
+$rm -f varargs*
+
diff --git a/mcon/U/i_vfork.U b/mcon/U/i_vfork.U
new file mode 100644
index 0000000..4a628fd
--- /dev/null
+++ b/mcon/U/i_vfork.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_vfork.U,v $
+?RCS: Revision 3.0.1.1 1994/05/06 15:05:44 ram
+?RCS: patch23: avoid inclusion of <vfork.h> if no vfork() used (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_vfork: Inhdr d_vfork
+?MAKE: -pick add $@ %<
+?S:i_vfork:
+?S: This variable conditionally defines the I_VFORK symbol, and indicates
+?S: whether a C program should include vfork.h.
+?S:.
+?C:I_VFORK:
+?C: This symbol, if defined, indicates to the C program that it should
+?C: include vfork.h.
+?C:.
+?H:#$i_vfork I_VFORK /**/
+?H:.
+: see if this is a vfork system
+case "$d_vfork" in
+"$define")
+ set vfork.h i_vfork
+ eval $inhdr
+ ;;
+*)
+ i_vfork="$undef"
+ ;;
+esac
+
diff --git a/mcon/U/i_whoami.U b/mcon/U/i_whoami.U
new file mode 100644
index 0000000..e30fd19
--- /dev/null
+++ b/mcon/U/i_whoami.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_whoami.U,v $
+?RCS: Revision 3.0.1.1 1993/08/25 14:02:21 ram
+?RCS: patch6: added default for i_whoami
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_whoami: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_whoami (d_whoami):
+?S: This variable conditionally defines the I_WHOAMI symbol, which
+?S: indicates to the C program that it should include <whoami.h>.
+?S:.
+?C:I_WHOAMI (WHOAMI):
+?C: This symbol, if defined, indicates that the program may include
+?C: <whoami.h>.
+?C:.
+?H:#$i_whoami I_WHOAMI /**/
+?H:.
+?D:i_whoami=''
+?LINT:set i_whoami
+: see if there is a whoami.h file
+set whoami.h i_whoami
+eval $inhdr
+
diff --git a/mcon/U/inc.U b/mcon/U/inc.U
new file mode 100644
index 0000000..2c1f4ce
--- /dev/null
+++ b/mcon/U/inc.U
@@ -0,0 +1,39 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: inc.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:51 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:inc incexp: Loc Oldconfig Getfile usrinc
+?MAKE: -pick add $@ %<
+?S:inc:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put public header files for the package in question. It is most
+?S: often a local directory such as /usr/local/include.
+?S:.
+?S:incexp:
+?S: This is the same as the inc variable, but is filename expaned
+?S: at configuration time for convenient use in your makefiles.
+?S:.
+: determine where public header files go
+case "$inc" in
+'')
+ dflt=`./loc . "." /usr/local/include /usr/include/local $usrinc`
+ ;;
+*) dflt="$inc"
+ ;;
+esac
+fn=d~
+rp='Where do you want to put the public header files?'
+. ./getfile
+inc="$ans"
+incexp="$ansexp"
+
diff --git a/mcon/U/install.U b/mcon/U/install.U
new file mode 100644
index 0000000..5b4fdf9
--- /dev/null
+++ b/mcon/U/install.U
@@ -0,0 +1,194 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: install.U,v $
+?RCS: Revision 3.0.1.2 1995/09/25 09:16:37 ram
+?RCS: patch59: all possible install programs are now looked for
+?RCS:
+?RCS: Revision 3.0.1.1 1995/01/11 15:30:41 ram
+?RCS: patch45: created
+?RCS:
+?MAKE:install installdir: Loc Oldconfig Getfile cat test startsh rm +cc \
+ eunicefix package contains mkdir echo n c
+?MAKE: -pick add $@ %<
+?S:install:
+?S: This variable contains the name of an install program that can accept
+?S: BSD-style arguments. It must correctly support -c, -s, and -m at least.
+?S: It is a fully qualified pathname when found. If you have a local
+?S: install.SH file at the root directory of your package, it is assumed to
+?S: be the default script emulating a BSD install and the variable will be
+?S: set to ./install. Otherwise, it is set to plain 'install', relying on
+?S: the user's PATH to perform miracles.
+?S:.
+?S:installdir:
+?S: This variable contains the name of a program that can install nested
+?S: directories. Often set to 'mkdir -p', it can also be 'install -d' if
+?S: you have such a beast and lack the former. If you have an install.SH
+?S: file at the root directory of your package, it will be used in last
+?S: resort, setting the variable to './install -d'. Otherwise, it is set to
+?S: plain 'mkdir', and cross your fingers!
+?S:.
+?T:dir file tryit prog creatdir either
+?F:!tryinst
+: locate a BSD compatible install program
+echo " "
+echo "Looking for a BSD-compatible install program..." >&4
+@if installdir
+creatdir=''
+@end
+case "$install" in
+'')
+ tryit=''
+ for dir in $pth; do
+ for file in ginstall installbsd scoinst install; do
+ if $test -f $dir/$file; then
+ tryit="$tryit $dir/$file"
+ fi
+ done
+ done
+ $cat >try.c <<EOC
+int main()
+{
+ printf("OK\n");
+ exit(0);
+}
+EOC
+ if $cc -o try try.c >/dev/null 2>&1; then
+ cp try try.ns
+ strip try >/dev/null 2>&1
+ else
+ echo "(I can't seem to compile a trivial C program -- bypassing.)"
+ echo "try" >try
+ cp try try.ns
+ fi
+ $cat >tryinst <<EOS
+$startsh
+$rm -rf foo d
+@if installdir
+\$1 -d foo/bar
+@end
+$mkdir d
+\$1 -c -m 764 try.ns d
+\$1 -c -s -m 642 try.ns d/try
+EOS
+ chmod +x tryinst
+ $eunicefix tryinst
+ dflt=''
+ either=''
+ for prog in $tryit; do
+ $echo $n "Checking $prog... $c"
+ ./tryinst $prog >/dev/null 2>&1
+@if installdir
+ if $test -d foo/bar; then
+ creatdir="$prog -d"
+ fi
+@end
+ (ls -l d/try >try.ls; ls -l d/try.ns >tryno.ls) 2>/dev/null
+ if (cmp -s d/try try && cmp -s d/try.ns try.ns && \
+ $contains 'rwxrw-r--' tryno.ls && \
+ $contains 'rw-r---w-' try.ls) >/dev/null 2>&1
+ then
+ dflt="$prog"
+ echo "ok, that will do."
+ break
+ fi
+ echo "not good$either."
+ either=' either'
+ $rm -f try*.ls
+ done
+ $rm -rf foo d tryinst try try*.ls try.*
+ case "$dflt" in
+ '')
+@if {test -f ../install.SH}
+ echo "Hopefully, $package comes with its own install script!"
+ dflt='./install'
+@else
+ dflt='install'
+@end
+ ;;
+ esac
+ ;;
+*) dflt="$install";;
+esac
+$cat <<EOM
+
+I will be requiring a BSD-compatible install program (one that allows
+options like -s to strip executables or -m to specify a file mode) to
+install $package.
+
+If the question below contains a fully qualified default path, then it
+is probably ok. If it is an unqualified name such as 'install', then it
+means I was unable to find out a good install program I could use. If
+@if {test -f ../install.SH}
+you know of one, please tell me about it. If the default is './install',
+then I shall be using the install script supplied with $package.
+@else
+you know of one, please tell me about it.
+@end
+
+EOM
+@if {test -f ../install.SH}
+fn='/fe~(install,./install)'
+@else
+fn='/fe~(install)'
+@end
+rp='Which install program shall I use?'
+. ./getfile
+install="$ans"
+
+@if installdir
+: how can we create nested directories?
+echo " "
+echo "Ok, let's see how we can create nested directories..." >&4
+case "$installdir" in
+'')
+?X: First time, maybe we already found out a working one in $creatdir above...
+?X: Prefer "mkdir -p" because of bugs in GNU install when not running as root
+ $mkdir -p foo/bar >/dev/null 2>&1
+ if $test -d foo/bar; then
+ echo "Great, we can build them using 'mkdir -p'."
+ creatdir='mkdir -p'
+ else
+ case "$creatdir" in
+ '')
+ if eval "$install -d foo/bar"; $test -d foo/bar; then
+ creatdir="install -d"
+ echo "It looks like '$creatdir' will do it for us."
+ fi
+ ;;
+ *)
+ eval "$creatdir foo/bar" >/dev/null 2>&1
+ if $test -d foo/bar; then
+ echo "Ah! We can use '$creatdir' to do just that."
+ else
+ creatdir=''
+ fi
+ ;;
+ esac
+ fi
+ $rm -rf foo
+ case "$creatdir" in
+ '')
+ echo "Heck! Another ancient system lacking the comfort of modern ones!"
+@if {test -f ../install.SH}
+ echo "You can thank $package for bringing you its own install script!"
+ installdir='./install -d'
+@else
+ echo "We have no choice but to use plain old 'mkdir' -- wish me luck!"
+ installdir=mkdir
+@end
+ ;;
+ *) installdir="$creatdir";;
+ esac
+ ;;
+*) echo "As you already told me, '$installdir' should work.";;
+esac
+
+@end
diff --git a/mcon/U/intsize.U b/mcon/U/intsize.U
new file mode 100644
index 0000000..38c5414
--- /dev/null
+++ b/mcon/U/intsize.U
@@ -0,0 +1,124 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: intsize.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 15:55:26 ram
+?RCS: patch61: avoid prompting the user if the test runs ok
+?RCS: patch61: moved code from longsize.U into there
+?RCS: patch61: new tests for shortsize as well
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:21:06 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:52 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:intsize longsize shortsize: \
+ Myread cat rm +cc +optimize +ccflags +ldflags +libs
+?MAKE: -pick add $@ %<
+?S:intsize:
+?S: This variable contains the value of the INTSIZE symbol, which
+?S: indicates to the C program how many bytes there are in an int.
+?S:.
+?S:longsize:
+?S: This variable contains the value of the LONGSIZE symbol, which
+?S: indicates to the C program how many bytes there are in a long.
+?S:.
+?S:shortsize:
+?S: This variable contains the value of the SHORTSIZE symbol which
+?S: indicates to the C program how many bytes there are in a short.
+?S:.
+?C:INTSIZE:
+?C: This symbol contains the value of sizeof(int) so that the C
+?C: preprocessor can make decisions based on it.
+?C:.
+?C:LONGSIZE:
+?C: This symbol contains the value of sizeof(long) so that the C
+?C: preprocessor can make decisions based on it.
+?C:.
+?C:SHORTSIZE:
+?C: This symbol contains the value of sizeof(short) so that the C
+?C: preprocessor can make decisions based on it.
+?C:.
+?H:#define INTSIZE $intsize /**/
+?H:#define LONGSIZE $longsize /**/
+?H:#define SHORTSIZE $shortsize /**/
+?H:.
+?F:!intsize.out !intsize
+: check for lengths of integral types
+echo " "
+case "$intsize" in
+'')
+ echo "Checking to see how big your integers are..." >&4
+ $cat >intsize.c <<'EOCP'
+#include <stdio.h>
+int main()
+{
+@if INTSIZE || intsize
+ printf("intsize=%d;\n", sizeof(int));
+@end
+@if LONGSIZE || longsize
+ printf("longsize=%d;\n", sizeof(long));
+@end
+@if SHORTSIZE || shortsize
+ printf("shortsize=%d;\n", sizeof(short));
+@end
+ fflush(stdout);
+ exit(0);
+}
+EOCP
+# If $libs contains -lsfio, and sfio is mis-configured, then it
+# sometimes (apparently) runs and exits with a 0 status, but with no
+# output!. Thus we check with test -s whether we actually got any
+# output. I think it has to do with sfio's use of _exit vs. exit,
+# but I don't know for sure. --Andy Dougherty 1/27/97.
+ if $cc $optimize $ccflags $ldflags -o intsize intsize.c $libs >/dev/null 2>&1 &&
+ ./intsize > intsize.out 2>/dev/null && test -s intsize.out ; then
+ eval `$cat intsize.out`
+@if INTSIZE || intsize
+ echo "Your integers are $intsize bytes long."
+@end
+@if LONGSIZE || longsize
+ echo "Your long integers are $longsize bytes long."
+@end
+@if SHORTSIZE || shortsize
+ echo "Your short integers are $shortsize bytes long."
+@end
+ else
+ $cat >&4 <<EOM
+!
+Help! I can't compile and run the intsize test program: please enlighten me!
+(This is probably a misconfiguration in your system or libraries, and
+you really ought to fix it. Still, I'll try anyway.)
+!
+EOM
+@if INTSIZE || intsize
+ dflt=4
+ rp="What is the size of an integer (in bytes)?"
+ . ./myread
+ intsize="$ans"
+@end
+@if LONGSIZE || longsize
+ dflt=$intsize
+ rp="What is the size of a long integer (in bytes)?"
+ . ./myread
+ longsize="$ans"
+@end
+@if SHORTSIZE || shortsize
+ dflt=2
+ rp="What is the size of a short integer (in bytes)?"
+ . ./myread
+ shortsize="$ans"
+@end
+ fi
+ ;;
+esac
+$rm -f intsize intsize.[co] intsize.out
+
diff --git a/mcon/U/ipc.U b/mcon/U/ipc.U
new file mode 100644
index 0000000..3593441
--- /dev/null
+++ b/mcon/U/ipc.U
@@ -0,0 +1,171 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: ipc.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:53 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:ipc serve_shm serve_msg serve_inet_udp serve_inet_tcp serve_unix_udp \
+ serve_unix_tcp: test Myread Oldconfig d_socket d_msg d_shm d_sem
+?MAKE: -pick add $@ %<
+?LINT:use d_msg d_sem
+?S:ipc:
+?S: This variable holds the type of IPC service we'll be using. Values
+?S: include "ip", "shm", "msg", "cms" and "os9". We don't worry about
+?S: cms or os9 here, because Configure doesn't run in those places--HMS.
+?S:.
+?S:serve_shm:
+?S: This variable controls the definition of SERVE_SHM, which tells the
+?S: C program to use USG shared memory for IPC.
+?S:.
+?S:serve_msg:
+?S: This variable controls the definition of SERVE_MSG, which tells the
+?S: C program to use USG message queues for IPC.
+?S:.
+?S:serve_inet_udp:
+?S: This variable controls the definition of SERVE_INET_UDP, which tells
+?S: the C program to enable InterNet-domain UDP support for IPC.
+?S:.
+?S:serve_inet_tcp:
+?S: This variable controls the definition of SERVE_INET_TCP, which tells
+?S: the C program to enable InterNet-domain TCP support for IPC.
+?S:.
+?S:serve_unix_udp:
+?S: This variable controls the definition of SERVE_UNIX_UDP, which tells
+?S: the C program to enable Unix-domain UDP support for IPC.
+?S:.
+?S:serve_unix_tcp:
+?S: This variable controls the definition of SERVE_UNIX_TCP, which tells
+?S: the C program to enable Unix-domain TCP support for IPC.
+?S:.
+?C:SERVE_SHM:
+?C: If defined, tells the C program to use USG shared memory for IPC.
+?C:.
+?C:SERVE_MSG:
+?C: If defined, tells the C program to use USG message queues for IPC.
+?C:.
+?C:SERVE_INET_UDP:
+?C: If defined, tells the C program to enable InterNet-domain UDP
+?C: support for IPC.
+?C:.
+?C:SERVE_INET_TCP:
+?C: If defined, tells the C program to enable InterNet-domain TCP
+?C: support for IPC.
+?C:.
+?C:SERVE_UNIX_UDP:
+?C: If defined, tells the C program to enable Unix-domain UDP
+?C: support for IPC.
+?C:.
+?C:SERVE_UNIX_TCP:
+?C: If defined, tells the C program to enable Unix-domain TCP
+?C: support for IPC.
+?C:.
+?H:#$serve_shm SERVE_SHM /**/
+?H:#$serve_msg SERVE_MSG /**/
+?H:#$serve_inet_udp SERVE_INET_UDP /**/
+?H:#$serve_inet_tcp SERVE_INET_TCP /**/
+?H:#$serve_unix_udp SERVE_UNIX_UDP /**/
+?H:#$serve_unix_tcp SERVE_UNIX_TCP /**/
+?H:.
+?X: FIXME -- RAM
+?INIT:serve_shm=''
+?INIT:serve_msg="$undef"
+?INIT:serve_inet_udp=''
+?INIT:serve_inet_tcp=''
+?INIT:serve_unix_udp=''
+?INIT:serve_unix_tcp=''
+: get IPC mechanism
+echo " "
+ipc=''
+while $test -z "$ipc"
+do
+ if $test "$ipc" != "shm" -a "$d_socket" = "$define"; then
+ ipc=''
+ if $test "$serve_inet_udp" = "$undef"; then
+ dflt=n
+ else
+ dflt=y
+ fi
+ rp='Provide InterNet-domain UDP service?'
+ . ./myread
+ dflt=''
+ case "$ans" in
+ n*) serve_inet_udp="$undef";;
+ *)
+ serve_inet_udp="$define"
+ ipc='ip'
+ ;;
+ esac
+
+ if $test "$serve_inet_tcp" = "$define"; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ rp='Provide InterNet-domain TCP service?'
+ . ./myread
+ dflt=''
+ case "$ans" in
+ n*) serve_inet_tcp="$undef";;
+ *)
+ serve_inet_tcp="$define"
+ ipc='ip'
+ ;;
+ esac
+
+ if $test "$serve_unix_udp" = "$define"; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ rp='Provide Unix-domain UDP service?'
+ . ./myread
+ dflt=''
+ case "$ans" in
+ n*) serve_unix_udp="$undef";;
+ *)
+ serve_unix_udp="$define"
+ ipc='ip'
+ ;;
+ esac
+
+ if $test "$serve_unix_tcp" = "$define"; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ rp='Provide Unix-domain TCP service?'
+ . ./myread
+ dflt=''
+ case "$ans" in
+ n*) serve_unix_tcp="$undef";;
+ *)
+ serve_unix_tcp="$define"
+ ipc='ip'
+ ;;
+ esac
+ else
+ serve_inet_udp="$undef"
+ serve_inet_tcp="$undef"
+ serve_unix_udp="$undef"
+ serve_unix_tcp="$undef"
+ fi
+ if $test "$ipc" != "ip" -a "$d_shm" = "$define"; then
+ echo "Providing USG shared memory IPC support." >&4
+ serve_shm="$define"
+ ipc='shm'
+ else
+ serve_shm="$undef"
+ fi
+ if $test -z "$ipc"; then
+ echo "You must select an IPC mechanism." >&4
+ fi
+done
+
diff --git a/mcon/U/issymlink.U b/mcon/U/issymlink.U
new file mode 100644
index 0000000..3655450
--- /dev/null
+++ b/mcon/U/issymlink.U
@@ -0,0 +1,85 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: lns.U,v $
+?RCS: Revision 3.0.1.1 1994/06/20 07:05:52 ram
+?RCS: patch30: created by ADO
+?RCS:
+?MAKE:issymlink: lns test rm
+?MAKE: -pick add $@ %<
+?S:issymlink:
+?S: This variable holds the test command to test for a symbolic link
+?S: (if they are supported). Typical values include 'test -h' and
+?S: 'test -L'.
+?S:.
+?T:pth p
+?LINT:change PATH test
+: determine whether symbolic links are supported
+echo " "
+case "$lns" in
+*"ln"*" -s")
+ echo "Checking how to test for symbolic links..." >&4
+ $lns blurfl sym
+ if $test "X$issymlink" = X; then
+?X:
+?X: In some AIX 4 versions the (ksh) builtin test (-h) is broken.
+?X:
+ case "$newsh" in
+ '') sh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
+ *) $newsh -c "PATH= test -h sym" >/dev/null 2>&1 ;;
+ esac
+ if test $? = 0; then
+ issymlink="test -h"
+ else
+ echo "Your builtin 'test -h' may be broken." >&4
+ case "$test" in
+ /*) ;;
+ *) pth=`echo $PATH | sed -e "s/$p_/ /g"`
+ for p in $pth
+ do
+ if test -f "$p/$test"; then
+ test="$p/$test"
+ break
+ fi
+ done
+ ;;
+ esac
+ case "$test" in
+ /*)
+ echo "Trying external '$test -h'." >&4
+ issymlink="$test -h"
+ if $test ! -h sym >/dev/null 2>&1; then
+ echo "External '$test -h' is broken, too." >&4
+ issymlink=''
+ fi
+ ;;
+ *) issymlink='' ;;
+ esac
+ fi
+ fi
+ if $test "X$issymlink" = X; then
+ if $test -L sym 2>/dev/null; then
+ issymlink="$test -L"
+ echo "The builtin '$test -L' worked." >&4
+ fi
+ fi
+ if $test "X$issymlink" != X; then
+ echo "You can test for symbolic links with '$issymlink'." >&4
+ else
+ echo "I do not know how you can test for symbolic links." >&4
+ fi
+ $rm -f blurfl sym
+ ;;
+*) echo "No symbolic links, so not testing for their testing..." >&4
+ ;;
+esac
+
diff --git a/mcon/U/kernel.U b/mcon/U/kernel.U
new file mode 100644
index 0000000..f8e5ba6
--- /dev/null
+++ b/mcon/U/kernel.U
@@ -0,0 +1,63 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: kernel.U,v $
+?RCS: Revision 3.0 1993/08/18 12:08:54 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:kernel: Getfile test
+?MAKE: -pick add $@ %<
+?S:kernel:
+?S: This variable becomes the (fully rooted) path name of the kernel.
+?S:.
+: find the name of the kernel.
+echo " "
+case "$kernel" in
+'')
+ if $test -r /unix; then
+ dflt=/unix
+ elif $test -r /vmunix; then
+ dflt=/vmunix
+ elif $test -r /xenix; then
+ dflt=/xenix
+ elif $test -r /mach; then
+ dflt=/mach
+ elif $test -r /dgux; then
+ dflt=/dgux
+ elif $test -r /hp-ux; then
+ dflt=/hp-ux
+ elif $test -r /syst; then
+ dflt=/syst
+ elif $test -r /arix; then
+ dflt=/arix
+ elif $test -r /irix; then
+ dflt=/arix
+ else
+ dflt='unknown'
+ set X /*x
+ shift
+ case $# in
+ 1)
+ if $test -r "$1"; then
+ dflt="$1"
+ fi
+ ;;
+ esac
+ fi
+ ;;
+*)
+ dflt="$kernel"
+ ;;
+esac
+fn=f
+rp='What is the name of your kernel?'
+. ./getfile
+kernel="$ans"
+
diff --git a/mcon/U/lex.U b/mcon/U/lex.U
new file mode 100644
index 0000000..0968494
--- /dev/null
+++ b/mcon/U/lex.U
@@ -0,0 +1,67 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Orginal Author: Graham Stoney <greyham@research.canon.oz.au>
+?RCS:
+?RCS: $Log: lex.U,v $
+?RCS: Revision 3.0.1.3 1994/10/29 16:22:50 ram
+?RCS: patch36: spurious single quote could cause Configure to crash
+?RCS: patch36: (reported by Xavier Le Vourch <xavierl@eiffel.com>.)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:27:09 ram
+?RCS: patch32: added lexflags variable for lex flags setting
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:06:01 ram
+?RCS: patch23: added trailing blank line for metalint
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:55 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:lex lexflags: Guess Myread Oldconfig flex test
+?MAKE: -pick add $@ %<
+?S:lex:
+?S: This variable holds the name of the lexical analyser generator we
+?S: want to use in the Makefile. It can be lex or flex.
+?S:.
+?S:lexflags:
+?S: This variable holds any flags that should be passed to the lexical
+?S: analyzer. It is up to the Makefile to use it.
+?S:.
+: determine lexical analyser generator
+case "$lex" in
+'')
+ dflt=lex;;
+*)
+ dflt="$lex";;
+esac
+echo " "
+if $test -f "$flex"; then
+ rp='Which lexical analyser generator (lex or flex) shall I use?'
+else
+ rp='Which lexical analyser generator shall I use?'
+fi
+. ./myread
+lex="$ans"
+
+@if lexflags
+: if using lex this will normally be useless, but flex frequently takes args
+echo " "
+case "$lexflags" in
+'') dflt='none';;
+*) dflt="$lexflags";;
+esac
+rp="What flags should be given to $lex?"
+. ./myread
+case "$ans" in
+none) lexflags='';;
+*) lexflags="$ans";;
+esac
+
+@end
diff --git a/mcon/U/lib.U b/mcon/U/lib.U
new file mode 100644
index 0000000..ab6257e
--- /dev/null
+++ b/mcon/U/lib.U
@@ -0,0 +1,54 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: lib.U,v $
+?RCS: Revision 3.0.1.3 1995/09/25 09:16:47 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.2 1995/01/30 14:38:08 ram
+?RCS: patch49: can now handle installation prefix changes (from WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:27:40 ram
+?RCS: patch32: now uses installation prefix to set the default
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:lib libexp: Getfile Loc Oldconfig Prefixit Prefixup prefixexp
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:lib:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put public library files for the package in question. It is most
+?S: often a local directory such as /usr/local/lib. Programs using this
+?S: variable must be prepared to deal with filename expansion.
+?S:.
+?S:libexp:
+?S: This variable is the same as the lib variable, but is filename expanded
+?S: at configuration time, for convenient use in your makefiles.
+?S:.
+: determine where public libraries go
+set lib lib
+eval $prefixit
+case "$lib" in
+'')
+ dflt=`./loc . "." $prefixexp/lib /usr/local/lib /usr/lib /lib`
+ set dflt
+ eval $prefixup
+ ;;
+*) dflt="$lib";;
+esac
+echo " "
+fn=d~
+rp='Where do you want to put the public libraries?'
+. ./getfile
+lib="$ans"
+libexp="$ansexp"
+
diff --git a/mcon/U/libc.U b/mcon/U/libc.U
new file mode 100644
index 0000000..dafd669
--- /dev/null
+++ b/mcon/U/libc.U
@@ -0,0 +1,405 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libc.U,v $
+?RCS: Revision 3.0.1.10 1997/02/28 15:56:48 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS: patch61: added support for HPUX-10 nm output
+?RCS:
+?RCS: Revision 3.0.1.9 1995/07/25 14:11:56 ram
+?RCS: patch56: now knows about OS/2 platforms
+?RCS:
+?RCS: Revision 3.0.1.8 1995/05/12 12:20:47 ram
+?RCS: patch54: made sure only most recent version of shared lib is picked
+?RCS: patch54: final "nm -p" check now uses xscan and xrun like everybody
+?RCS: patch54: can now grok linux nm output with lead __IO (ADO)
+?RCS: patch54: added support for linux ELF output, using 'W' for alias (ADO)
+?RCS:
+?RCS: Revision 3.0.1.7 1994/10/29 16:23:40 ram
+?RCS: patch36: now looks for shared libraries before anything else (ADO)
+?RCS: patch36: added new nm output format (ADO)
+?RCS:
+?RCS: Revision 3.0.1.6 1994/08/29 16:28:10 ram
+?RCS: patch32: added I-type symbols for nm output parsing on Linux
+?RCS:
+?RCS: Revision 3.0.1.5 1994/06/20 07:03:24 ram
+?RCS: patch30: checks are now presented by succession of if/elif
+?RCS: patch30: uniformized checks for shared objects with new so symbol
+?RCS:
+?RCS: Revision 3.0.1.4 1994/05/06 15:06:33 ram
+?RCS: patch23: added shared library knowledge (ADO and WED)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/01/24 14:12:17 ram
+?RCS: patch16: can now export nm_extract as an internal-use only variable
+?RCS:
+?RCS: Revision 3.0.1.2 1993/09/13 16:09:03 ram
+?RCS: patch10: added special handling for Apollo systems (WAD)
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/27 14:40:03 ram
+?RCS: patch7: added entry for /usr/shlib/libc.so (OSF/1 machines)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:57 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:libc libnames +nm_extract: echo n c rm test grep Getfile Myread \
+ Oldconfig Loc sed libs incpath libpth ar runnm nm nm_opt nm_so_opt \
+ contains xlibpth so osname trnl tr sort uniq _o _a
+?MAKE: -pick add $@ %<
+?S:libc:
+?S: This variable contains the location of the C library.
+?S:.
+?S:libnames:
+?S: The constructed list of library names. Normally empty, but hint files
+?S: may set this for later perusal by Configure.
+?S:.
+?S:nm_extract:
+?S: This variable holds the name of the extraction command used to process
+?S: the output of nm and yield the list of defined symbols. It is used
+?S: internally by Configure.
+?S:.
+?T:thislib try libnames xxx xscan xrun thisname com tans file
+?F:!libnames !libc.tmp !tmp.imp
+?LINT:change nm_opt runnm
+?INIT:libnames=''
+: Figure out where the libc is located
+case "$runnm" in
+true)
+?X: indentation is wrong on purpose--RAM
+: get list of predefined functions in a handy place
+echo " "
+case "$libc" in
+'') libc=unknown
+ case "$libs" in
+ *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
+ esac
+ ;;
+esac
+case "$libs" in
+'') ;;
+*) for thislib in $libs; do
+ case "$thislib" in
+ -lc|-lc_s)
+ : Handle C library specially below.
+ ;;
+ -l*)
+ thislib=`echo $thislib | $sed -e 's/^-l//'`
+ if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
+ :
+ elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
+ :
+ elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
+ :
+ elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
+ :
+ elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
+ :
+ elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
+ :
+ elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
+ :
+ else
+ try=''
+ fi
+ libnames="$libnames $try"
+ ;;
+ *) libnames="$libnames $thislib" ;;
+ esac
+ done
+ ;;
+esac
+?X:
+?X: Some systems (e.g. DG/UX) use "environmental" links, which make the test
+?X: -f fail. Ditto for symbolic links. So in order to reliably check the
+?X: existence of a file, we use test -r. It will still fail with DG/UX links
+?X: though, but at least it will detect symbolic links. At some strategic
+?X: points, we make use of (test -h), using a sub-shell in case builtin test
+?X: does not implement the -h check for symbolic links. This makes it
+?X: possible to preset libc in a hint file for instance and have it show up
+?X: as-is in the question.
+?X:
+xxx=normal
+case "$libc" in
+unknown)
+?X:
+?X: The sed below transforms .so.9 .so.12 into something like .so.0009 .so.0012,
+?X: then sorts on it to allow keeping .so.12 instead of .so.9 as the latest
+?X: up-to-date library. The initial filename (before sed munging, saved in hold
+?X: space via 'h') is appended via 'G' before sorting, then the leading munged
+?X: part is removed after sorting. Nice efficient work from Tye McQueen.
+?X: The initial blurfl is here to prevent the trailing pipe from producing an
+?X: empty string, causing Configure to output all its set variables!
+?X:
+ set /lib/libc.$so
+ for xxx in $libpth; do
+ $test -r $1 || set $xxx/libc.$so
+ : The messy sed command sorts on library version numbers.
+ $test -r $1 || \
+ set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
+ tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
+ h
+ s/[0-9][0-9]*/0000&/g
+ s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
+ G
+ s/\n/ /' | \
+ $sort | $sed -e 's/^.* //'`
+ eval set \$$#
+ done
+ $test -r $1 || set /usr/ccs/lib/libc.$so
+ $test -r $1 || set /lib/libsys_s$_a
+ ;;
+*)
+?X: ensure the test below for the (shared) C library will fail
+ set blurfl
+ ;;
+esac
+if $test -r "$1"; then
+ echo "Your (shared) C library seems to be in $1."
+ libc="$1"
+elif $test -r /lib/libc && $test -r /lib/clib; then
+?X:
+?X: Apollo has its C library in /lib/clib AND /lib/libc
+?X: not to mention its math library in /lib/syslib...
+?X:
+ echo "Your C library seems to be in both /lib/clib and /lib/libc."
+ xxx=apollo
+ libc='/lib/clib /lib/libc'
+ if $test -r /lib/syslib; then
+ echo "(Your math library is in /lib/syslib.)"
+?X: Put syslib in libc -- not quite right, but won't hurt
+ libc="$libc /lib/syslib"
+ fi
+elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
+ echo "Your C library seems to be in $libc, as you said before."
+?X: For mips, and...
+elif $test -r $incpath/usr/lib/libc$_a; then
+ libc=$incpath/usr/lib/libc$_a;
+ echo "Your C library seems to be in $libc. That's fine."
+elif $test -r /lib/libc$_a; then
+ libc=/lib/libc$_a;
+ echo "Your C library seems to be in $libc. You're normal."
+else
+ if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
+ :
+ elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
+ libnames="$libnames "`./loc clib blurfl/dyick $libpth`
+ elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
+ :
+ elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
+ :
+ elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
+ :
+ else
+ tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
+ fi
+ if $test -r "$tans"; then
+ echo "Your C library seems to be in $tans, of all places."
+ libc=$tans
+ else
+ libc='blurfl'
+ fi
+fi
+if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
+ dflt="$libc"
+ cat <<EOM
+
+If the guess above is wrong (which it might be if you're using a strange
+compiler, or your machine supports multiple models), you can override it here.
+
+EOM
+else
+ dflt=''
+ echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
+ cat >&4 <<EOM
+I can't seem to find your C library. I've looked in the following places:
+
+EOM
+ $sed 's/^/ /' libpath
+ cat <<EOM
+
+None of these seems to contain your C library. I need to get its name...
+
+EOM
+fi
+fn=f
+rp='Where is your C library?'
+. ./getfile
+libc="$ans"
+
+echo " "
+echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
+set X `cat libnames`
+shift
+xxx=files
+case $# in 1) xxx=file; esac
+echo "Extracting names from the following $xxx for later perusal:" >&4
+echo " "
+$sed 's/^/ /' libnames >&4
+echo " "
+$echo $n "This may take a while...$c" >&4
+
+?X:
+?X: Linux may need the special Dynamic option to nm for shared libraries.
+?X: In general, this is stored in the nm_so_opt variable.
+?X: Unfortunately, that option may be fatal on non-shared libraries.
+?X:
+for file in $*; do
+ case $file in
+ *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
+ *) $nm $nm_opt $file 2>/dev/null;;
+ esac
+done >libc.tmp
+
+$echo $n ".$c"
+?X:
+?X: To accelerate processing, we look at the correct 'sed' command
+?X: by using a small subset of libc.tmp, i.e. fprintf function.
+?X: When we know which sed command to use, do the name extraction
+?X:
+$grep fprintf libc.tmp > libc.ptf
+?X:
+?X: In order to ehance readability and save some space, we define
+?X: some variables that will be "eval"ed.
+?X:
+xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
+xrun='eval "<libc.tmp $com >libc.list"; echo "done." >&4'
+?X: BSD-like output, I and W types added for Linux
+?X: Some versions of Linux include a leading __IO in the symbol name.
+?X: HPUX10 reportedly has trailing spaces, though I'm suprised it has
+?X: BSD-like output. (AD).
+xxx='[ADTSIW]'
+if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx *_[_.]*//p' -e 's/^.* $xxx *//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+?X: SYSV-like output
+elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
+ -e '/ file/d' -e 's/^\([^ ]*\).*/\1/p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+?X: mips nm output (sysV)
+elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+?X: OS/2 nm output
+elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+?X: AIX nm output
+elif com="sed -n -e 's/^__.*//' -e 's/[ ]*D[ ]*[0-9]*.*//p'";\
+ eval $xscan;\
+ $contains '^fprintf$' libc.list >/dev/null 2>&1; then
+ eval $xrun
+else
+ $nm -p $* 2>/dev/null >libc.tmp
+ $grep fprintf libc.tmp > libc.ptf
+ if com="$sed -n -e 's/^.* [ADTSIW] *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
+ eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
+ then
+ nm_opt='-p'
+ eval $xrun
+ else
+ echo " "
+ echo "$nm didn't seem to work right. Trying $ar instead..." >&4
+ com=''
+ if $ar t $libc > libc.tmp && \
+ $contains '^fprintf$' libc.tmp >/dev/null 2>&1
+ then
+ for thisname in $libnames $libc; do
+ $ar t $thisname >>libc.tmp
+ done
+ $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
+ echo "Ok." >&4
+ elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
+?X: Repeat libc to extract forwarders to DLL entries too
+ for thisname in $libnames $libc; do
+ $ar tv $thisname >>libc.tmp
+?X: Revision 50 of EMX has bug in ar: it will not extract forwarders
+?X: to DLL entries. Use emximp which will extract exactly them.
+ emximp -o tmp.imp $thisname \
+ 2>/dev/null && \
+ $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
+ < tmp.imp >>libc.tmp
+ $rm -f tmp.imp
+ done
+ $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
+ echo "Ok." >&4
+ else
+ echo "$ar didn't seem to work right." >&4
+ echo "Maybe this is a Cray...trying bld instead..." >&4
+ if
+ bld t $libc | \
+ $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list &&
+ $test -s libc.list
+ then
+ for thisname in $libnames; do
+ bld t $libnames | \
+ $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
+ $ar t $thisname >>libc.tmp
+ done
+ echo "Ok." >&4
+ else
+ echo "That didn't work either." >&4
+ echo "No problem, I'll be compiling test programs then..." >&4
+ runnm=false
+ fi
+ fi
+ fi
+fi
+nm_extract="$com"
+if $test -f /lib/syscalls.exp; then
+ echo " "
+ echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
+ $sed -n 's/^\([^ ]*\)[ ]*syscall[0-9]*[ ]*$/\1/p' \
+ /lib/syscalls.exp >>libc.list
+fi
+?X: remember, indentation is wrong on purpose--RAM
+;;
+esac
+$rm -f libnames libpath
+
diff --git a/mcon/U/libdbm.U b/mcon/U/libdbm.U
new file mode 100644
index 0000000..07568e5
--- /dev/null
+++ b/mcon/U/libdbm.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libdbm.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 15:56:57 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:58 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:libdbm: test Loc libpth _a
+?MAKE: -pick add $@ %<
+?S:libdbm:
+?S: This variable contains the argument to pass to the loader in order
+?S: to get the dbm library routines. If there is no dbm or ndbm
+?S: library, it is null.
+?S:.
+?T:xxx
+: see if we should include -ldbm
+echo " "
+if $test -r /usr/lib/libndbm$_a || $test -r /usr/local/lib/libndbm$_a ; then
+ echo "-lndbm found." >&4
+ libdbm='-lndbm'
+elif $test -r /usr/lib/libdbm$_a || $test -r /usr/local/lib/libdbm$_a ; then
+ echo "-ldbm found." >&4
+ libdbm='-ldbm'
+else
+ xxx=`./loc libdbm$_a x $libpth`
+ case "$xxx" in
+ x)
+ echo "No dbm library found." >&4
+ libdbm=''
+ ;;
+ *)
+ echo "DBM library found in $xxx." >&4
+ libdbm="$xxx"
+ ;;
+ esac
+fi
+
diff --git a/mcon/U/libflex.U b/mcon/U/libflex.U
new file mode 100644
index 0000000..cf2c844
--- /dev/null
+++ b/mcon/U/libflex.U
@@ -0,0 +1,65 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libflex.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 15:57:48 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/06 15:07:02 ram
+?RCS: patch23: now uses full library path instead of -l notation
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:13:25 ram
+?RCS: patch16: un-obsoleted this unit to allow smooth lex/flex compilations
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:08:59 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:libflex: Loc lex libpth _a
+?MAKE: -pick add $@ %<
+?S:libflex:
+?S: This variable contains the argument to pass to the loader in order
+?S: to get the flex/lex library routines. If there is no flex or flex
+?S: library, it is null.
+?S:.
+?T:xxx
+: see if we should include -lfl
+echo " "
+case "$lex" in
+*flex)
+ xxx=`./loc libfl$_a x $libpth`
+ case "$xxx" in
+ x)
+ echo "No flex library found." >&4
+ libflex=''
+ ;;
+ *)
+ echo "flex library found in $xxx." >&4
+ libflex="$xxx"
+ ;;
+ esac
+ ;;
+*lex)
+ xxx=`./loc libl$_a x $libpth`
+ case "$xxx" in
+ x)
+ echo "No lex library found." >&4
+ libflex=''
+ ;;
+ *)
+ echo "lex library found in $xxx." >&4
+ libflex="$xxx"
+ ;;
+ esac
+ ;;
+*)
+echo "You don't seem to have lex or flex, so I won't look for libraries." >&4
+ ;;
+esac
+
diff --git a/mcon/U/libnlist.U b/mcon/U/libnlist.U
new file mode 100644
index 0000000..f0f81e6
--- /dev/null
+++ b/mcon/U/libnlist.U
@@ -0,0 +1,49 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libnlist.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:08:02 ram
+?RCS: patch61: added usrinc and mips on the dependency line
+?RCS: patch61: make sure we call ./mips
+?RCS: patch61: added a ?LINT: hint
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:00 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:libnlist: Loc libpth Guess usrinc _a
+?MAKE: -pick add $@ %<
+?S:libnlist (libmld):
+?S: This variable contains the name of the library required to get the
+?S: definition of the nlist() function. On a MIPS RISC/OS box, it is -lmld.
+?S: Under Sys Vr4, it is -lelf. Otherwise, its value is empty.
+?S:.
+?T:xxx
+?LINT:use usrinc
+: see if we need a special library for 'nlist()'
+echo " "
+: How about doing this if nlist is not in libc...
+if ./mips ; then
+ libnlist='-lmld'
+else
+ xxx=`./loc libelf$_a x $libpth`
+ case "$xxx" in
+ x) ;;
+ *)
+ libnlist="$xxx"
+ ;;
+ esac
+fi
+case "$libnlist" in
+'') echo "No special library for nlist() seems necessary." >&4
+ ;;
+*) echo "nlist() can be found in $libnlist." >&4
+ ;;
+esac
+
diff --git a/mcon/U/libnm.U b/mcon/U/libnm.U
new file mode 100644
index 0000000..ac5d73b
--- /dev/null
+++ b/mcon/U/libnm.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libnm.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:08:26 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:libnm: test Loc libpth _a
+?MAKE: -pick add $@ %<
+?S:libnm:
+?S: This variable contains the argument to pass to the loader in order
+?S: to get the new math library routines. If there is no new math
+?S: library, it is null.
+?S:.
+?T:ans
+?O: use libswanted='-lnm' instead (see libs.U).
+: see if we should include -lnm
+echo " "
+if $test -r /usr/lib/libnm$_a || $test -r /usr/local/lib/libnm$_a ; then
+ echo "New math library found." >&4
+ libnm='-lnm'
+else
+ ans=`./loc libnm$_a x $libpth`
+ case "$ans" in
+ x)
+ echo "No nm library found--the normal math library will have to do." >&4
+ libnm=''
+ ;;
+ *)
+ echo "New math library found in $ans." >&4
+ libnm="$ans"
+ ;;
+ esac
+fi
+
diff --git a/mcon/U/libpth.U b/mcon/U/libpth.U
new file mode 100644
index 0000000..d80bb00
--- /dev/null
+++ b/mcon/U/libpth.U
@@ -0,0 +1,132 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libpth.U,v $
+?RCS: Revision 3.0.1.6 1997/02/28 16:08:49 ram
+?RCS: patch61: new loclibpth variable
+?RCS:
+?RCS: Revision 3.0.1.5 1995/01/11 15:31:30 ram
+?RCS: patch45: call ./mips instead of just mips (WED)
+?RCS:
+?RCS: Revision 3.0.1.4 1994/08/29 16:29:15 ram
+?RCS: patch32: added /lib/pa1.1 for HP-UX specially tuned PA-RISC libs (ADO)
+?RCS: patch32: fixed information message, making it clearer (ADO)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/06/20 07:03:54 ram
+?RCS: patch30: added /usr/shlib to glibpth for shared-only libraries
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/13 15:26:57 ram
+?RCS: patch27: fixed a typo (libpth -> glibpth)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:07:53 ram
+?RCS: patch23: now asks for library directories to be searched (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:02 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit initializes the path for C library lookup.
+?X:
+?MAKE:libpth glibpth xlibpth plibpth loclibpth: \
+ usrinc incpath test cat Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:libpth:
+?S: This variable holds the general path (space-separated) used to find
+?S: libraries. It is intended to be used by other units.
+?S:.
+?S:glibpth:
+?S: This variable holds the general path (space-separated) used to
+?S: find libraries. It may contain directories that do not exist on
+?S: this platform, libpth is the cleaned-up version.
+?S:.
+?S:xlibpth:
+?S: This variable holds extra path (space-separated) used to find
+?S: libraries on this platform, for example CPU-specific libraries
+?S: (on multi-CPU platforms) may be listed here.
+?S:.
+?S:loclibpth:
+?S: This variable holds the paths (space-separated) used to find local
+?S: libraries. It is prepended to libpth, and is intended to be easily
+?S: set from the command line.
+?S:.
+?S:plibpth:
+?S: Holds the private path used by Configure to find out the libraries.
+?S: Its value is prepend to libpth. This variable takes care of special
+?S: machines, like the mips. Usually, it should be empty.
+?S:.
+?T: xxx dlist
+?LINT:use usrinc
+?INIT:: change the next line if compiling for Xenix/286 on Xenix/386
+?INIT:xlibpth='/usr/lib/386 /lib/386'
+?INIT:: Possible local library directories to search.
+?INIT:loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
+?INIT:loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
+?INIT:
+?INIT:: general looking path for locating libraries
+?INIT:glibpth="/lib /usr/lib $xlibpth"
+?INIT:glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
+?X: /shlib is for Digital Unix 4.0
+?X: /usr/shlib is for OSF/1 systems.
+?INIT:test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
+?INIT:test -f /shlib/libc.so && glibpth="/shlib $glibpth"
+?INIT:
+?INIT:: Private path used by Configure to find libraries. Its value
+?INIT:: is prepended to libpth. This variable takes care of special
+?INIT:: machines, like the mips. Usually, it should be empty.
+?INIT:plibpth=''
+?INIT:
+: Set private lib path
+case "$plibpth" in
+'') if ./mips; then
+?X: on mips, we DO NOT want /lib, and we want $incpath/usr/lib
+ plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
+ fi;;
+esac
+case "$libpth" in
+' ') dlist='';;
+'') dlist="$loclibpth $plibpth $glibpth";;
+*) dlist="$libpth";;
+esac
+
+: Now check and see which directories actually exist, avoiding duplicates
+libpth=''
+for xxx in $dlist
+do
+ if $test -d $xxx; then
+ case " $libpth " in
+ *" $xxx "*) ;;
+ *) libpth="$libpth $xxx";;
+ esac
+ fi
+done
+$cat <<'EOM'
+
+Some systems have incompatible or broken versions of libraries. Among
+the directories listed in the question below, please remove any you
+know not to be holding relevant libraries, and add any that are needed.
+Say "none" for none.
+
+EOM
+case "$libpth" in
+'') dflt='none';;
+*)
+?X: strip leading space
+ set X $libpth
+ shift
+ dflt=${1+"$@"}
+ ;;
+esac
+rp="Directories to use for library searches?"
+. ./myread
+case "$ans" in
+none) libpth=' ';;
+*) libpth="$ans";;
+esac
+
diff --git a/mcon/U/libs.U b/mcon/U/libs.U
new file mode 100644
index 0000000..0a8feaa
--- /dev/null
+++ b/mcon/U/libs.U
@@ -0,0 +1,242 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libs.U,v $
+?RCS: Revision 3.0.1.6 1997/02/28 16:09:11 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0.1.5 1995/07/25 14:12:05 ram
+?RCS: patch56: now knows about OS/2 platforms
+?RCS:
+?RCS: Revision 3.0.1.4 1994/10/29 16:24:22 ram
+?RCS: patch36: removed old broken thislib/thatlib processing (ADO)
+?RCS:
+?RCS: Revision 3.0.1.3 1994/06/20 07:05:44 ram
+?RCS: patch30: code cleanup with if/elif by ADO and RAM
+?RCS: patch30: undone patch23 for libswanted default setting
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/06 15:08:45 ram
+?RCS: patch23: now includes ordered default libswanted variable (ADO)
+?RCS: patch23: major cleanup for library lookups (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/25 14:02:31 ram
+?RCS: patch6: added default for libs
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:03 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:libs libsfound libsfiles libsdirs libspath libscheck: \
+ test cat Myread Oldconfig Loc libpth package xlibpth so _a \
+ +usesocks sed +cc +ccflags +ldflags rm
+?MAKE: -pick add $@ %<
+?S:libs:
+?S: This variable holds the additional libraries we want to use.
+?S: It is up to the Makefile to deal with it. The list can be empty.
+?S:.
+?S:libsfound:
+?S: This variable holds the full pathnames of the libraries
+?S: we found and accepted.
+?S:.
+?S:libsfiles:
+?S: This variable holds the filenames aka basenames of the libraries
+?S: we found and accepted.
+?S:.
+?S:libsdirs:
+?S: This variable holds the directory names aka dirnames of the libraries
+?S: we found and accepted, duplicates are removed.
+?S:.
+?S:libspath:
+?S: This variable holds the directory names probed for libraries.
+?S:.
+?S:libscheck:
+?S: This variable is intended to be set by hint files, if needed.
+?S: It should contain shell code that will be eval'ed with $xxx holding
+?S: some library file. It may change $xxx if needed.
+?S: For instance, on an Irix platform, you may make sure the right
+?S: library file is used depending on the cc command line, so that the
+?S: correct library is used depending on the selected ABI (for 32 and
+?S: 64-bit compilations).
+?S:
+?S: Here is an example of code that could be found in a hint file on Irix
+?S: when the selected compiler was for 32-bit -- that code is put in the
+?S: cc.cbu call-back unit to be invoked AFTER the C compiler and its
+?S: flags have been chosen:
+?S:
+?S: libscheck='case "$xxx" in
+?S: *.a) /bin/ar p $xxx `/bin/ar t $xxx | sed q` >$$.o;
+?S: case "`/usr/bin/file $$.o`" in
+?S: *N32*) rm -f $$.o ;;
+?S: *) rm -f $$.o; xxx=/no/n32$xxx ;;
+?S: esac ;;
+?S: *) case "`/usr/bin/file $xxx`" in
+?S: *N32*) ;;
+?S: *) xxx=/no/n32$xxx ;;
+?S: esac ;;
+?S: esac'
+?S:.
+?D:libs=''
+?LINT:extern libswanted
+?LINT:change libswanted
+?INIT:: default library list
+?INIT:libswanted=''
+?X: This order is chosen so that libraries -lndir, -ldir, -lucb, -lbsd,
+?X: -lBSD, -lPW, and -lx only get used if there are unresolved
+?X: routines at link time. Usually, these are backwards compatability
+?X: libraries, and may not be as reliable as the standard c library.
+?X:
+?X: The -lsocket -linet -lnsl order has been reported to be necessary
+?X: for at least one SVR4 implementation.
+?X: -lc must proceed -lucb or -lbsd for most Solaris applications.
+?X: -lc_s proceeds -lc so we pick up the shared library version, if
+?X: it is available.
+?X:
+?X: The ordering of c, posix, and cposix is a guess and almost
+?X: certainly wrong on about half of all systems.
+?X:
+?X: Set proper libswanted in your private Myinit.U if needed.
+?X:
+?X:: default ordered library list
+?X:libswanted='net socket inet bind nsl nm sdbm gdbm ndbm dbm malloc dl'
+?X:libswanted="$libswanted dld sun m c_s c posix cposix ndir dir ucb"
+?X:libswanted="$libswanted bsd BSD PW x"
+?X:
+?INIT:: should be set by hint files if needed
+?INIT:libscheck=''
+?T:xxx yyy thislib thisdir libstyle linkmsg
+?F:lt.c lt
+: Looking for optional libraries
+echo " "
+echo "Checking for optional libraries..." >&4
+case "$libs" in
+' '|'') dflt='';;
+*) dflt="$libs";;
+esac
+case "$libswanted" in
+'') libswanted='c_s';;
+esac
+?X: libsocks has nasty naming scheme.
+?X: This does not work if somebody wants SOCKS 4.
+case "$usesocks" in
+"$define") libswanted="$libswanted socks5 socks5_sh" ;;
+esac
+?X: Used later for link checks
+echo "extern char printf(); int main() { printf(); return 0; }" > lt.c
+libsfound=''
+libsfiles=''
+libsdirs=''
+libspath=''
+for thisdir in $libpth $xlibpth; do
+ test -d $thisdir && libspath="$libspath $thisdir"
+done
+for thislib in $libswanted; do
+ for thisdir in $libspath; do
+ xxx=''
+ if $test ! -f "$xxx" ; then
+ xxx=`ls $thisdir/lib$thislib.$so.[0-9]* 2>/dev/null | $sed -n '1p'`
+ $test -f "$xxx" && eval $libscheck
+ $test -f "$xxx" && libstyle=shared
+ fi
+ if test ! -f "$xxx"; then
+ xxx=$thisdir/lib$thislib.$so
+ $test -f "$xxx" && eval $libscheck
+ $test -f "$xxx" && libstyle=shared
+ fi
+ if test ! -f "$xxx"; then
+ xxx=$thisdir/lib$thislib$_a
+ $test -f "$xxx" && eval $libscheck
+ $test -f "$xxx" && libstyle=static
+ fi
+ if test ! -f "$xxx"; then
+ xxx=$thisdir/$thislib$_a
+ $test -f "$xxx" && eval $libscheck
+ $test -f "$xxx" && libstyle=static
+ fi
+ if test ! -f "$xxx"; then
+ xxx=$thisdir/lib${thislib}_s$_a
+ $test -f "$xxx" && eval $libscheck
+ $test -f "$xxx" && libstyle=static
+ $test -f "$xxx" && thislib=${thislib}_s
+ fi
+ if test ! -f "$xxx"; then
+ xxx=$thisdir/Slib$thislib$_a
+ $test -f "$xxx" && eval $libscheck
+ $test -f "$xxx" && libstyle=static
+ fi
+ if $test -f "$xxx"; then
+?X:
+?X: It is not sufficient to find a .so on the disk. We must make sure
+?X: that we can indeed supply the -lfoo line on the cc line to link against
+?X: that library. On Linux for instance, a versionned .so will not be
+?X: implicitly linked against, whereas it will work fine on Solaris 2.6.
+?X: --RAM, 10/10/2003
+?X:
+ if $cc -o lt $ccflags $ldflags lt.c -l$thislib >/dev/null 2>&1;
+ then
+ linkmsg=""
+ else
+ linkmsg=" but I can't link against it"
+ fi
+ case "$libstyle" in
+ shared) echo "Found -l$thislib (shared)$linkmsg." ;;
+ static) echo "Found -l$thislib$linkmsg." ;;
+ *) echo "Found -l$thislib ($libstyle)$linkmsg." ;;
+ esac
+ case " $dflt " in
+ *"-l$thislib "*) ;;
+ *)
+ case "$linkmsg" in
+ '')
+ dflt="$dflt -l$thislib"
+ libsfound="$libsfound $xxx"
+ yyy=`basename $xxx`
+ libsfiles="$libsfiles $yyy"
+ yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
+ case " $libsdirs " in
+ *" $yyy "*) ;;
+ *) libsdirs="$libsdirs $yyy" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ break
+ fi
+ done
+ if $test ! -f "$xxx"; then
+ echo "No -l$thislib."
+ fi
+done
+set X $dflt
+shift
+dflt="$*"
+case "$libs" in
+'') dflt="$dflt";;
+*) dflt="$libs";;
+esac
+case "$dflt" in
+' '|'') dflt='none';;
+esac
+$rm -f lt.c lt
+
+$cat <<EOM
+
+In order to compile $package on your machine, a number of libraries
+are usually needed. Include any other special libraries here as well.
+Say "none" for none. The default list is almost always right.
+EOM
+
+echo " "
+rp="Which libraries to use?"
+. ./myread
+case "$ans" in
+none) libs=' ';;
+*) libs="$ans";;
+esac
+
diff --git a/mcon/U/libyacc.U b/mcon/U/libyacc.U
new file mode 100644
index 0000000..a5b0881
--- /dev/null
+++ b/mcon/U/libyacc.U
@@ -0,0 +1,64 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: libyacc.U,v $
+?RCS: Revision 3.0.1.4 1997/02/28 16:09:19 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS:
+?RCS: Revision 3.0.1.3 1994/05/13 15:27:12 ram
+?RCS: patch27: added byacc case (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/06 15:09:01 ram
+?RCS: patch23: now uses full library path instead of -l notation
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:13:49 ram
+?RCS: patch16: un-obsoleted this unit for smooth yacc compilations
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:04 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:libyacc: Loc yacc libpth _a
+?MAKE: -pick add $@ %<
+?S:libyacc:
+?S: This variable contains the argument to pass to the loader in order
+?S: to get the yacc library routines. If there is no yacc or yacc
+?S: library, it is null.
+?S:.
+?T:xxx
+: see if we should include -ly
+echo " "
+case "$yacc" in
+*byacc*)
+ echo "You are using byacc, so I won't look for a yacc library." >&4
+ libyacc=''
+ ;;
+*yacc)
+ xxx=`./loc liby$_a x $libpth`
+ case "$xxx" in
+ x)
+ echo "No yacc library found." >&4
+ libyacc=''
+ ;;
+ *)
+ echo "yacc library found in $xxx." >&4
+ libyacc="$xxx"
+ ;;
+ esac
+ ;;
+*bison*)
+ echo "You are using bison, so I won't look for a yacc library." >&4
+ libyacc=''
+ ;;
+*)
+echo "You don't seem to have yacc, so I won't look for the yacc library." >&4
+ libyacc=''
+ ;;
+esac
+
diff --git a/mcon/U/lintlib.U b/mcon/U/lintlib.U
new file mode 100644
index 0000000..09107a1
--- /dev/null
+++ b/mcon/U/lintlib.U
@@ -0,0 +1,38 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: lintlib.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:05 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:lintlib lintlibexp: Getfile Loc Oldconfig
+?MAKE: -pick add $@ %<
+?S:lintlib:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put public lint-library files for the package in question. It is
+?S: most often a local directory such as /usr/local/lib/lint. Programs using
+?S: this variable must be prepared to deal with ~name expansion.
+?S:.
+?S:lintlibexp:
+?S: This variable is the same as the lintlib variable, but is filename
+?S: expanded at configuration time, for convenient use in your makefiles.
+?S:.
+: determine where public lint libraries go
+case "$lintlib" in
+'') dflt=`./loc . "." /usr/local/lib/lint /usr/lib/lint /usr/lib`;;
+*) dflt="$lintlib" ;;
+esac
+echo " "
+fn=d~
+rp='Where do you want to put the public lint libraries?'
+. ./getfile
+lintlib="$ans"
+lintlibexp="$ansexp"
+
diff --git a/mcon/U/lns.U b/mcon/U/lns.U
new file mode 100644
index 0000000..6160bd4
--- /dev/null
+++ b/mcon/U/lns.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: lns.U,v $
+?RCS: Revision 3.0.1.1 1994/06/20 07:05:52 ram
+?RCS: patch30: created by ADO
+?RCS:
+?X:
+?X: This unit checks whether symbolic links are really supported.
+?X: We can't rely on d_symlink because that may be listed in the
+?X: C library but unimplemented.
+?X:
+?MAKE:lns: ln rm touch test
+?MAKE: -pick add $@ %<
+?S:lns:
+?S: This variable holds the name of the command to make
+?S: symbolic links (if they are supported). It can be used
+?S: in the Makefile. It is either 'ln -s' or 'ln'
+?S:.
+: determine whether symbolic links are supported
+echo " "
+$touch blurfl
+$rm -f sym
+if $ln -s blurfl sym > /dev/null 2>&1 && $test -f sym; then
+ echo "Symbolic links are supported." >&4
+ lns="$ln -s"
+else
+ echo "Symbolic links are NOT supported." >&4
+ lns="$ln"
+fi
+$rm -f blurfl sym
+
diff --git a/mcon/U/locdist.U b/mcon/U/locdist.U
new file mode 100644
index 0000000..0975e6a
--- /dev/null
+++ b/mcon/U/locdist.U
@@ -0,0 +1,174 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: locdist.U,v $
+?RCS: Revision 3.0.1.1 1994/05/06 15:09:20 ram
+?RCS: patch23: added support for multi-state regions (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:06 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:locdist orgdist citydist statedist multistatedist cntrydist contdist: \
+ test newslibexp cat Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:locdist:
+?S: This variable contains the eventual value of the LOCDIST symbol,
+?S: which is the local organization's distribution name for news.
+?S:.
+?S:orgdist:
+?S: This variable contains the eventual value of the ORGDIST symbol,
+?S: which is the organization's distribution name for news.
+?S:.
+?S:citydist:
+?S: This variable contains the eventual value of the CITYDIST symbol,
+?S: which is the city's distribution name for news.
+?S:.
+?S:statedist:
+?S: This variable contains the eventual value of the STATEDIST symbol,
+?S: which is the state's or province's distribution name for news.
+?S:.
+?S:multistatedist:
+?S: This variable contains the eventual value of the MULTISTATEDIST symbol,
+?S: which is the news distribution code for multi-state region.
+?S:.
+?S:cntrydist:
+?S: This variable contains the eventual value of the CNTRYDIST symbol,
+?S: which is the country's distribution name for news.
+?S:.
+?S:contdist:
+?S: This variable contains the eventual value of the CONTDIST symbol,
+?S: which is the continent's distribution name for news.
+?S:.
+?C:LOCDIST:
+?C: This symbol contains the distribution name for the news system that
+?C: restricts article distribution to the local organization.
+?C:.
+?C:ORGDIST:
+?C: This symbol contains the distribution name for the news system that
+?C: restricts article distribution to the organization.
+?C:.
+?C:CITYDIST:
+?C: This symbol contains the distribution name for the news system that
+?C: restricts article distribution to the city.
+?C:.
+?C:STATEDIST:
+?C: This symbol contains the distribution name for the news system that
+?C: restricts article distribution to the state or province.
+?C:.
+?C:MULTISTATEDIST:
+?C: This symbol contains the distribution name for the news system that
+?C: restricts article distribution to a multi-state region.
+?C:.
+?C:CNTRYDIST:
+?C: This symbol contains the distribution name for the news system that
+?C: restricts article distribution to the country.
+?C:.
+?C:CONTDIST:
+?C: This symbol contains the distribution name for the news system that
+?C: restricts article distribution to the continent.
+?C:.
+?H:#define LOCDIST "$locdist" /**/
+?H:#define ORGDIST "$orgdist" /**/
+?H:#define CITYDIST "$citydist" /**/
+?H:#define MULTISTATEDIST "$multistatedist" /**/
+?H:#define STATEDIST "$statedist" /**/
+?H:#define CNTRYDIST "$cntrydist" /**/
+?H:#define CONTDIST "$contdist" /**/
+?H:.
+: get the local distributions
+$cat <<'EOH'
+
+Distribution groups are the things you use on the Distribution line to limit
+where an article will go to. You are likely to be a member of several
+distribution groups, such as organization, city, state, province, country,
+continent, etc. For example, Los Angeles has the distribution code "la",
+New Jersey has the code "nj", and Europe has the code "eunet".
+
+The categories you will be asked are:
+
+local organization (Could be just one machine or a cluster or an office)
+organization att, dec, kgb, ...
+city la, ny, mosc, ...
+state/province ca, nj, bc, ...
+multi-state region pnw, ne, ...
+country usa, can, rok, whatever
+continent na (North America), asia, etc.
+
+EOH
+if $test -f $newslibexp/distributions; then
+ case "$silent" in
+ true) ;;
+ *) dflt='Hit return to continue'
+ rp=''
+ . ./myread
+ ;;
+ esac
+ echo "Here is your distributions file:" >&4
+ echo " " >&4
+ $cat >&4 $newslibexp/distributions
+ echo " " >&4
+fi
+echo "Use 'none' for any distributions you don't have."
+echo " "
+case "$locdist" in
+'') dflt="none";;
+*) dflt="$locdist";;
+esac
+rp="What is the distribution code for your local organization?"
+. ./myread
+locdist="$ans"
+case "$orgdist" in
+'') dflt="none";;
+*) dflt="$orgdist";;
+esac
+rp="What is the distribution code for your organization?"
+. ./myread
+orgdist="$ans"
+case "$citydist" in
+'') dflt="none";;
+*) dflt="$citydist";;
+esac
+rp="What is the distribution code for your city?"
+. ./myread
+citydist="$ans"
+case "$statedist" in
+'') dflt="none";;
+*) dflt="$statedist";;
+esac
+rp="What is the distribution code for your state/province?"
+. ./myread
+statedist="$ans"
+case "$multistatedist" in
+'') dflt="none";;
+*) dflt="$multistatedist";;
+esac
+rp="What is the distribution code for your multi-state region?"
+. ./myread
+multistatedist="$ans"
+case "$cntrydist" in
+'') dflt="none";;
+*) dflt="$cntrydist";;
+esac
+rp="What is the distribution code for your country?"
+. ./myread
+cntrydist="$ans"
+case "$contdist" in
+'') dflt="none";;
+*) dflt="$contdist";;
+esac
+rp="What is the distribution code for your continent?"
+. ./myread
+contdist="$ans"
+$cat <<'EOM'
+
+If you have any other distribution groups you will need to edit Pnews
+and newsetup to add them.
+EOM
+
diff --git a/mcon/U/longsize.U b/mcon/U/longsize.U
new file mode 100644
index 0000000..1fe9df5
--- /dev/null
+++ b/mcon/U/longsize.U
@@ -0,0 +1,24 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: longsize.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 16:09:35 ram
+?RCS: patch61: code moved to intsize.U
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:24:31 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:07 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: 'longsize' is now defined within intsize.U
+?X:
+?LINT: empty
diff --git a/mcon/U/lseektype.U b/mcon/U/lseektype.U
new file mode 100644
index 0000000..861395e
--- /dev/null
+++ b/mcon/U/lseektype.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: lseektype.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:30:10 ram
+?RCS: patch32: now uses new Typedef unit to compute type information
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:lseektype: Myread Typedef
+?MAKE: -pick add $@ %<
+?S:lseektype:
+?S: This variable defines lseektype to be something like off_t, long,
+?S: or whatever type is used to declare lseek offset's type in the
+?S: kernel (which also appears to be lseek's return type).
+?S:.
+?C:Off_t (LSEEKTYPE):
+?C: This symbol holds the type used to declare offsets in the kernel.
+?C: It can be int, long, off_t, etc... It may be necessary to include
+?C: <sys/types.h> to get any typedef'ed information.
+?C:.
+?H:#define Off_t $lseektype /* <offset> type */
+?H:.
+: see what type lseek is declared as in the kernel
+set off_t lseektype long stdio.h sys/types.h
+eval $typedef
+echo " "
+dflt="$lseektype"
+rp="What type is lseek's offset on this system declared as?"
+. ./myread
+lseektype="$ans"
+
diff --git a/mcon/U/maildir.U b/mcon/U/maildir.U
new file mode 100644
index 0000000..4c6499e
--- /dev/null
+++ b/mcon/U/maildir.U
@@ -0,0 +1,41 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: maildir.U,v $
+?RCS: Revision 3.0.1.1 1993/12/15 08:21:56 ram
+?RCS: patch15: now also looks under /var/mail for BSD/386
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:09 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:maildir maildirexp: Getfile Loc Oldconfig
+?MAKE: -pick add $@ %<
+?S:maildir:
+?S: This variable contains the name of the directory in which mail is
+?S: spooled. Programs using this variable must be prepared to deal with
+?S: ~name substitutions.
+?S:.
+?S:maildirexp:
+?S: This is the same as the maildir variable, but is filename expanded
+?S: at configuration time, for programs not willing to deal with it at
+?S: run-time.
+?S:.
+: determine where mail is spooled
+case "$maildir" in
+'') dflt=`./loc . /usr/spool/mail /usr/spool/mail /usr/mail /var/mail`;;
+*) dflt="$maildir";;
+esac
+echo " "
+fn=d~
+rp='Where is yet-to-be-read mail spooled?'
+. ./getfile
+maildir="$ans"
+maildirexp="$ansexp"
+
diff --git a/mcon/U/mailer.U b/mcon/U/mailer.U
new file mode 100644
index 0000000..1840ee7
--- /dev/null
+++ b/mcon/U/mailer.U
@@ -0,0 +1,61 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: mailer.U,v $
+?RCS: Revision 3.0.1.3 1995/01/11 15:32:11 ram
+?RCS: patch45: can now use Loc variables since path stripping is deferred
+?RCS:
+?RCS: Revision 3.0.1.2 1994/05/06 15:10:04 ram
+?RCS: patch23: ensure full path value is used for rmail also
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:14:18 ram
+?RCS: patch16: now use _sendmail vars and friends for portability issues
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:10 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:mailer: test cat rmail mail smail sendmail Getfile Oldconfig
+?MAKE: -pick add $@ %<
+?S:mailer:
+?S: This variable contains the full pathname of a reasonable mailer.
+?S: By reasonable, we mean some program which can understand internet
+?S: addresses or at least forward them to some internet router. This
+?S: mailer should be invoked as "mailer [options] recipients <mail".
+?S:.
+: determine the name of a reasonable mailer
+case "$mailer" in
+'')
+ if $test -f "$sendmail"; then
+ dflt="$sendmail"
+ elif $test -f "$smail"; then
+ dflt="$smail"
+ elif $test -f "$rmail"; then
+ dflt="$rmail"
+ elif $test -f /bin/mail; then
+ dflt=/bin/mail
+ else
+ dflt=$mail
+ fi
+ ;;
+*) dflt="$mailer";;
+esac
+$cat <<EOM
+
+I need the full pathname of the program used to deliver mail on your system.
+A typical answer would be /usr/lib/sendmail or /bin/rmail, but you may choose
+any other program, as long as it can be fed from standard input and will
+honour any user-supplied headers.
+
+EOM
+fn=f
+rp='Mail transport agent to be used?'
+. ./getfile
+mailer="$ans"
+
diff --git a/mcon/U/mailfile.U b/mcon/U/mailfile.U
new file mode 100644
index 0000000..ebe1535
--- /dev/null
+++ b/mcon/U/mailfile.U
@@ -0,0 +1,56 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: mailfile.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 16:24:57 ram
+?RCS: patch36: the Loc unit was missing from the dependency line
+?RCS:
+?RCS: Revision 3.0.1.1 1993/12/15 08:22:08 ram
+?RCS: patch15: now also looks under /var/mail for BSD/386
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:11 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:mailfile: Myread Oldconfig Filexp Loc
+?MAKE: -pick add $@ %<
+?S:mailfile:
+?S: This variable contains the eventual value of the MAILFILE symbol,
+?S: which contains an interpretable name of the mail spool file for the
+?S: current user.
+?S:.
+?C:MAILFILE:
+?C: This symbol contains the interpretable name of the mail spool file
+?C: for the current user. The program must be prepared to substitute
+?C: the HOME directory for %~, and the login id for %L.
+?C:.
+?H:#define MAILFILE "$mailfile" /**/
+?H:.
+: determine where mail is spooled
+case "$mailfile" in
+'')
+ dflt=`./loc . XXX /usr/spool/mail /usr/mail /var/mail`
+ case "$dflt" in
+ XXX) dflt='%~/mailbox';;
+ *) dflt="$dflt/%L";;
+ esac
+ ;;
+*) dflt="$mailfile"
+ ;;
+esac
+cat <<'EOM'
+
+In the following question, you may use %~ to represent the user's home
+directory, and %L to represent a users name.
+
+EOM
+rp='In which file is yet-to-be-read mail spooled? (~name ok)'
+. ./myread
+mailfile=`./filexp "$ans"`
+
diff --git a/mcon/U/make.U b/mcon/U/make.U
new file mode 100644
index 0000000..98eb0a8
--- /dev/null
+++ b/mcon/U/make.U
@@ -0,0 +1,60 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: make.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:09:40 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:make_set_make : Loc rm sed make
+?MAKE: -pick add $@ %<
+?S:make_set_make:
+?S: Some versions of 'make' set the variable MAKE. Others do not.
+?S: This variable contains the string to be included in Makefile.SH
+?S: so that MAKE is set if needed, and not if not needed.
+?S: Possible values are:
+?S:
+?S: make_set_make='#' # If your make program handles this for you,
+?S:
+?S: make_set_make="MAKE=$make" # if it doesn't.
+?S:
+?S: This uses a comment character so that we can distinguish a
+?S: 'set' value (from a previous config.sh or Configure -D option)
+?S: from an uncomputed value.
+?S:.
+?LINT: extern MAKE
+?LINT: change MAKE
+?X: This test is based on one from an autoconf-generated configure
+?X: script. Autoconf stole a lot from Configure, but now it's our
+?X: turn to do so... ;-) -- RAM, 21/02/97
+: check whether make sets MAKE
+echo " "
+echo "Checking if your $make program sets \$(MAKE)..." >&4
+case "$make_set_make" in
+'')
+?X: Use sed so we don't have a line begining with @echo. Metaconfig
+?X: will think that's a command like @if or @end.
+ $sed 's/^X //' > testmake.mak << 'EOF'
+Xall:
+X @echo 'maketemp="$(MAKE)"'
+EOF
+?X: GNU make sometimes prints "make[1]: Entering...", which would confuse us
+ case "`$make -f testmake.mak 2>/dev/null`" in
+ *maketemp=*) make_set_make='#' ;;
+ *) make_set_make="MAKE=$make" ;;
+ esac
+ $rm -f testmake.mak
+ ;;
+esac
+case "$make_set_make" in
+'#') echo "Yup, it does.";;
+*) echo "Nope, it doesn't.";;
+esac
+
diff --git a/mcon/U/mallocsrc.U b/mcon/U/mallocsrc.U
new file mode 100644
index 0000000..79da8a1
--- /dev/null
+++ b/mcon/U/mallocsrc.U
@@ -0,0 +1,171 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: mallocsrc.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 16:10:26 ram
+?RCS: patch61: added support for Free_t, the type of free()
+?RCS: patch61: replaced .o with $_o all over the place
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:10:46 ram
+?RCS: patch23: added support for MYMALLOC, mainly for perl5 (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:12 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:mallocsrc mallocobj usemymalloc malloctype d_mymalloc \
+ freetype: Myread \
+ Oldconfig package Guess Setvar rm cat +cc +ccflags Findhdr \
+ i_malloc i_stdlib sed libs _o ptrsize
+?MAKE: -pick add $@ %<
+?X: Put near top so that other tests don't erroneously include
+?X: -lmalloc. --AD 22 June 1998
+?Y:TOP
+?S:usemymalloc:
+?S: This variable contains y if the malloc that comes with this package
+?S: is desired over the system's version of malloc. People often include
+?S: special versions of malloc for effiency, but such versions are often
+?S: less portable. See also mallocsrc and mallocobj.
+?S: If this is 'y', then -lmalloc is removed from $libs.
+?S:.
+?S:mallocsrc:
+?S: This variable contains the name of the malloc.c that comes with
+?S: the package, if that malloc.c is preferred over the system malloc.
+?S: Otherwise the value is null. This variable is intended for generating
+?S: Makefiles.
+?S:.
+?S:d_mymalloc:
+?S: This variable conditionally defines MYMALLOC in case other parts
+?S: of the source want to take special action if MYMALLOC is used.
+?S: This may include different sorts of profiling or error detection.
+?S:.
+?S:mallocobj:
+?S: This variable contains the name of the malloc.o that this package
+?S: generates, if that malloc.o is preferred over the system malloc.
+?S: Otherwise the value is null. This variable is intended for generating
+?S: Makefiles. See mallocsrc.
+?S:.
+?S:freetype:
+?S: This variable contains the return type of free(). It is usually
+?S: void, but occasionally int.
+?S:.
+?S:malloctype:
+?S: This variable contains the kind of ptr returned by malloc and realloc.
+?S:.
+?C:Free_t:
+?C: This variable contains the return type of free(). It is usually
+?C: void, but occasionally int.
+?C:.
+?C:Malloc_t (MALLOCPTRTYPE):
+?C: This symbol is the type of pointer returned by malloc and realloc.
+?C:.
+?H:#define Malloc_t $malloctype /**/
+?H:#define Free_t $freetype /**/
+?H:.
+?C:MYMALLOC:
+?C: This symbol, if defined, indicates that we're using our own malloc.
+?C:.
+?H:#$d_mymalloc MYMALLOC /**/
+?H:.
+?LINT:change libs
+?X: Cannot test for mallocsrc; it is the unit's name and there is a bug in
+?X: the interpreter which defines all the names, even though they are not used.
+@if mallocobj
+: determine which malloc to compile in
+echo " "
+case "$usemymalloc" in
+[yY]*|true|$define) dflt='y' ;;
+[nN]*|false|$undef) dflt='n' ;;
+*)
+ case "$ptrsize" in
+ 4) dflt='y' ;;
+ *) dflt='n' ;;
+ esac
+ ;;
+esac
+rp="Do you wish to attempt to use the malloc that comes with $package?"
+. ./myread
+usemymalloc="$ans"
+case "$ans" in
+y*|true)
+ usemymalloc='y'
+ mallocsrc='malloc.c'
+ mallocobj="malloc$_o"
+ d_mymalloc="$define"
+?X: Maybe libs.U should be dependent on mallocsrc.U, but then
+?X: most packages that use dist probably don't supply their own
+?X: malloc, so this is probably an o.k. comprpomise
+ case "$libs" in
+ *-lmalloc*)
+ : Remove malloc from list of libraries to use
+ echo "Removing unneeded -lmalloc from library list" >&4
+ set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
+ shift
+ libs="$*"
+ echo "libs = $libs" >&4
+ ;;
+ esac
+ ;;
+*)
+ usemymalloc='n'
+ mallocsrc=''
+ mallocobj=''
+ d_mymalloc="$undef"
+ ;;
+esac
+
+@end
+@if MALLOCPTRTYPE || Malloc_t || Free_t
+: compute the return types of malloc and free
+echo " "
+$cat >malloc.c <<END
+#$i_malloc I_MALLOC
+#$i_stdlib I_STDLIB
+#include <stdio.h>
+#include <sys/types.h>
+#ifdef I_MALLOC
+#include <malloc.h>
+#endif
+#ifdef I_STDLIB
+#include <stdlib.h>
+#endif
+#ifdef TRY_MALLOC
+void *malloc();
+#endif
+#ifdef TRY_FREE
+void free();
+#endif
+END
+@if MALLOCPTRTYPE || Malloc_t
+case "$malloctype" in
+'')
+ if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
+ malloctype='void *'
+ else
+ malloctype='char *'
+ fi
+ ;;
+esac
+echo "Your system wants malloc to return '$malloctype', it would seem." >&4
+@end
+
+@if Free_t
+case "$freetype" in
+'')
+ if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
+ freetype='void'
+ else
+ freetype='int'
+ fi
+ ;;
+esac
+echo "Your system uses $freetype free(), it would seem." >&4
+@end
+$rm -f malloc.[co]
+@end
diff --git a/mcon/U/man1dir.U b/mcon/U/man1dir.U
new file mode 100644
index 0000000..23b2765
--- /dev/null
+++ b/mcon/U/man1dir.U
@@ -0,0 +1,147 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: man1dir.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:10:29 ram
+?RCS: patch61: created
+?RCS:
+?X:
+?X: This was originally specific to perl5. Since perl5 has man pages that
+?X: go in both man1/ and man3/ directories, we need both man1dir
+?X: and man3dir. This unit is basically dist's mansrc.U with
+?X: man1 used instead of man everywhere.
+?X:
+?MAKE:man1dir man1direxp man1ext installman1dir: afs cat nroff Loc Oldconfig \
+ spackage test Getfile Prefixit prefixexp Prefixup sysman Myread
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:man1dir:
+?S: This variable contains the name of the directory in which manual
+?S: source pages are to be put. It is the responsibility of the
+?S: Makefile.SH to get the value of this into the proper command.
+?S: You must be prepared to do the ~name expansion yourself.
+?S:.
+?S:man1direxp:
+?S: This variable is the same as the man1dir variable, but is filename
+?S: expanded at configuration time, for convenient use in makefiles.
+?S:.
+?S:installman1dir:
+?S: This variable is really the same as man1direxp, unless you are using
+?S: AFS in which case it points to the read/write location whereas
+?S: man1direxp only points to the read-only access location. For extra
+?S: portability, you should only use this variable within your makefiles.
+?S:.
+?S:man1ext:
+?S: This variable contains the extension that the manual page should
+?S: have: one of 'n', 'l', or '1'. The Makefile must supply the '.'.
+?S: See man1dir.
+?S:.
+?T:lookpath
+: determine where manual pages go
+set man1dir man1dir none
+eval $prefixit
+$cat <<EOM
+
+$spackage has manual pages available in source form.
+EOM
+case "$nroff" in
+nroff)
+ echo "However, you don't have nroff, so they're probably useless to you."
+ case "$man1dir" in
+ '') man1dir="none";;
+ esac;;
+esac
+echo "If you don't want the manual sources installed, answer 'none'."
+case "$man1dir" in
+' ') dflt=none
+ ;;
+'')
+ lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
+ lookpath="$lookpath $prefixexp/man/p_man/man1"
+ lookpath="$lookpath $prefixexp/man/u_man/man1"
+ lookpath="$lookpath $prefixexp/man/man.1"
+?X: Experience has shown people expect man1dir to be under prefix,
+?X: so we now always put it there. Users who want other behavior
+?X: can answer interactively or use a command line option.
+?X: Does user have System V-style man paths.
+ case "$sysman" in
+ */?_man*) dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
+ *) dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
+ esac
+ set dflt
+ eval $prefixup
+ ;;
+*) dflt="$man1dir"
+ ;;
+esac
+echo " "
+fn=dn+~
+rp="Where do the main $spackage manual pages (source) go?"
+. ./getfile
+if $test "X$man1direxp" != "X$ansexp"; then
+ installman1dir=''
+fi
+man1dir="$ans"
+man1direxp="$ansexp"
+case "$man1dir" in
+'') man1dir=' '
+ installman1dir='';;
+esac
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+manual pages reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installman1dir" in
+ '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installman1dir";;
+ esac
+ fn=de~
+ rp='Where will man pages be installed?'
+ . ./getfile
+ installman1dir="$ans"
+else
+ installman1dir="$man1direxp"
+fi
+
+: What suffix to use on installed man pages
+
+case "$man1dir" in
+' ')
+ man1ext='0'
+ ;;
+*)
+ rp="What suffix should be used for the main $spackage man pages?"
+ case "$man1ext" in
+ '') case "$man1dir" in
+ *1) dflt=1 ;;
+ *1p) dflt=1p ;;
+ *1pm) dflt=1pm ;;
+ *l) dflt=l;;
+ *n) dflt=n;;
+ *o) dflt=o;;
+ *p) dflt=p;;
+ *C) dflt=C;;
+ *L) dflt=L;;
+ *L1) dflt=L1;;
+ *) dflt=1;;
+ esac
+ ;;
+ *) dflt="$man1ext";;
+ esac
+ . ./myread
+ man1ext="$ans"
+ ;;
+esac
+
diff --git a/mcon/U/man3dir.U b/mcon/U/man3dir.U
new file mode 100644
index 0000000..5017f2b
--- /dev/null
+++ b/mcon/U/man3dir.U
@@ -0,0 +1,158 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: man3dir.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:10:34 ram
+?RCS: patch61: created
+?RCS:
+?X:
+?X: This was originally specific to perl5. Since perl5 has man pages that
+?X: go in both man1/ and man3/ directories, we need both man1dir
+?X: and man3dir. This unit is basically dist's mansrc.U with
+?X: man3 used instead of man everywhere.
+?X: I then added various tests because perl5 has *lots* of man3
+?X: pages with long file names. -- ADO
+?X:
+?MAKE:man3dir man3direxp man3ext installman3dir: afs cat nroff Loc Oldconfig \
+ sed man1dir spackage package Getfile prefix Prefixit Prefixup \
+ d_flexfnam privlib Myread
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:man3dir:
+?S: This variable contains the name of the directory in which manual
+?S: source pages are to be put. It is the responsibility of the
+?S: Makefile.SH to get the value of this into the proper command.
+?S: You must be prepared to do the ~name expansion yourself.
+?S:.
+?S:man3direxp:
+?S: This variable is the same as the man3dir variable, but is filename
+?S: expanded at configuration time, for convenient use in makefiles.
+?S:.
+?S:installman3dir:
+?S: This variable is really the same as man3direxp, unless you are using
+?S: AFS in which case it points to the read/write location whereas
+?S: man3direxp only points to the read-only access location. For extra
+?S: portability, you should only use this variable within your makefiles.
+?S:.
+?S:man3ext:
+?S: This variable contains the extension that the manual page should
+?S: have: one of 'n', 'l', or '3'. The Makefile must supply the '.'.
+?S: See man3dir.
+?S:.
+: determine where library module manual pages go
+set man3dir man3dir none
+eval $prefixit
+$cat <<EOM
+
+$spackage has manual pages for many of the library modules.
+EOM
+
+case "$nroff" in
+nroff)
+ $cat <<'EOM'
+However, you don't have nroff, so they're probably useless to you.
+EOM
+ case "$man3dir" in
+ '') man3dir="none";;
+ esac;;
+esac
+
+case "$d_flexfnam" in
+undef)
+ $cat <<'EOM'
+However, your system can't handle the long file names like File::Basename.3.
+EOM
+ case "$man3dir" in
+ '') man3dir="none";;
+ esac;;
+esac
+
+echo "If you don't want the manual sources installed, answer 'none'."
+?X: We dont use /usr/local/man/man3 because some man programs will
+?X: only show the /usr/local/man/man3 contents, and not the system ones,
+?X: thus man less will show the perl module less.pm, but not the system
+?X: less command. We might also conflict with TCL man pages.
+?X: However, something like /opt/perl/man/man3 is fine.
+case "$man3dir" in
+'') case "$prefix" in
+ *$package*) dflt=`echo $man1dir |
+ $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
+ *) dflt="$privlib/man/man3" ;;
+ esac
+ ;;
+' ') dflt=none;;
+*) dflt="$man3dir" ;;
+esac
+echo " "
+
+fn=dn+~
+rp="Where do the $package library man pages (source) go?"
+. ./getfile
+if test "X$man3direxp" != "X$ansexp"; then
+ installman3dir=''
+fi
+
+man3dir="$ans"
+man3direxp="$ansexp"
+case "$man3dir" in
+'') man3dir=' '
+ installman3dir='';;
+esac
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+manual pages reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installman3dir" in
+ '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installman3dir";;
+ esac
+ fn=de~
+ rp='Where will man pages be installed?'
+ . ./getfile
+ installman3dir="$ans"
+else
+ installman3dir="$man3direxp"
+fi
+
+: What suffix to use on installed man pages
+
+case "$man3dir" in
+' ')
+ man3ext='0'
+ ;;
+*)
+ rp="What suffix should be used for the $package library man pages?"
+ case "$man3ext" in
+ '') case "$man3dir" in
+ *3) dflt=3 ;;
+ *3p) dflt=3p ;;
+ *3pm) dflt=3pm ;;
+ *l) dflt=l;;
+ *n) dflt=n;;
+ *o) dflt=o;;
+ *p) dflt=p;;
+ *C) dflt=C;;
+ *L) dflt=L;;
+ *L3) dflt=L3;;
+ *) dflt=3;;
+ esac
+ ;;
+ *) dflt="$man3ext";;
+ esac
+ . ./myread
+ man3ext="$ans"
+ ;;
+esac
+
diff --git a/mcon/U/manfmt.U b/mcon/U/manfmt.U
new file mode 100644
index 0000000..d8f4d9a
--- /dev/null
+++ b/mcon/U/manfmt.U
@@ -0,0 +1,118 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: manfmt.U,v $
+?RCS: Revision 3.0.1.5 1997/02/28 16:11:57 ram
+?RCS: patch61: don't ask for AFS when they choose to not install pages
+?RCS:
+?RCS: Revision 3.0.1.4 1995/09/25 09:16:52 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/30 14:39:20 ram
+?RCS: patch49: new installmanfmt and AFS-lookup for formatted man pages
+?RCS: patch49: can now handle installation prefix changes (from WED)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:30:31 ram
+?RCS: patch32: now uses installation prefix for default setting
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:09:22 ram
+?RCS: patch10: allows for L1 man page extension (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:13 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:manfmt manfmtexp installmanfmt: Getfile Loc Oldconfig cat manext \
+ spackage Prefixit prefixexp Prefixup afs test
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:manfmt:
+?S: This variable contains the name of the directory in which formatted
+?S: manual pages are to be put. It is the responsibility of the
+?S: Makefile.SH to get the value of this into the proper command. Note
+?S: that you may have to do ~name substitution. Use manfmtexp otherwise.
+?S:.
+?S:manfmtexp:
+?S: This is the same as the manfmt variable, but is filename expanded
+?S: at configuration time, for programs not willing to deal with it at
+?S: run-time.
+?S:.
+?S:installmanfmt:
+?S: This variable is really the same as manfmtexp, unless you are using
+?S: AFS in which case it points to the read/write location whereas
+?S: mansrcexp only points to the read-only access location. For extra
+?S: portability, you should only use this variable within your makefiles.
+?S:.
+?LINT:change manext
+?T:lookpath
+: determine where manual pages go
+set manfmt manfmt
+eval $prefixit
+$cat <<EOM
+
+$spackage has pre-formatted manual pages. If you don't want these installed,
+answer 'none' to the next question.
+
+EOM
+case "$manfmt" in
+'')
+ lookpath="$prefixexp/catman/man1 $prefixexp/man/cat1"
+ lookpath="$lookpath $prefixexp/catman/u_man/man1"
+ lookpath="$lookpath $prefixexp/catman/l_man/man1"
+ lookpath="$lookpath $prefixexp/catman/cat1 /usr/catman/local/man1"
+ lookpath="$lookpath /usr/catman/manl /usr/man/cat1"
+ lookpath="$lookpath /usr/catman/mann /usr/catman/l_man/man1"
+ lookpath="$lookpath /usr/catman/u_man/man1 /usr/catman/man1"
+ dflt=`./loc . none $lookpath`
+ set dflt
+ eval $prefixup
+ ;;
+*) dflt="$manfmt"
+ ;;
+esac
+fn=dn~
+rp='Where do pre-formatted manual pages go?'
+. ./getfile
+if test "X$manfmtexp" != "X$ansexp"; then
+ installmanfmt=''
+fi
+manfmt="$ans"
+manfmtexp="$ansexp"
+if $afs && $test "$manfmt"; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+manual pages reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installmanfmt" in
+ '') dflt=`echo $manfmtexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installmanfmt";;
+ esac
+ fn=de~
+ rp='Where will pre-formatted man pages be installed?'
+ . ./getfile
+ installmanfmt="$ans"
+else
+ installmanfmt="$manfmtexp"
+fi
+
+case "$manfmt" in
+'') manext='0';;
+*l) manext=l;;
+*n) manext=n;;
+*o) manext=l;;
+*p) manext=n;;
+*C) manext=C;;
+*L) manext=L;;
+*L1) manext=L1;;
+*) manext=1;;
+esac
+
diff --git a/mcon/U/mansrc.U b/mcon/U/mansrc.U
new file mode 100644
index 0000000..c5830da
--- /dev/null
+++ b/mcon/U/mansrc.U
@@ -0,0 +1,150 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: mansrc.U,v $
+?RCS: Revision 3.0.1.9 1997/02/28 16:12:03 ram
+?RCS: patch61: don't ask for AFS when they choose to not install pages
+?RCS:
+?RCS: Revision 3.0.1.8 1995/09/25 09:16:58 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.7 1995/02/15 14:15:31 ram
+?RCS: patch51: was mistakenly duplicating /usr/local/man/man1 (ADO)
+?RCS: patch51: added /opt/man/man1 to the lookpath (ADO)
+?RCS:
+?RCS: Revision 3.0.1.6 1995/01/30 14:39:34 ram
+?RCS: patch49: can now handle installation prefix changes (from WED)
+?RCS:
+?RCS: Revision 3.0.1.5 1995/01/11 15:32:25 ram
+?RCS: patch45: can now use Loc variables since path stripping is deferred
+?RCS:
+?RCS: Revision 3.0.1.4 1994/08/29 16:30:38 ram
+?RCS: patch32: now uses installation prefix for default setting
+?RCS:
+?RCS: Revision 3.0.1.3 1994/05/06 15:11:10 ram
+?RCS: patch23: added lint hint, assuring that nroff is used
+?RCS:
+?RCS: Revision 3.0.1.2 1994/01/24 14:14:39 ram
+?RCS: patch16: now uses _nroff in case user asked for portability
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:09:31 ram
+?RCS: patch10: allows for L1 man page extension (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:14 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:mansrc mansrcexp manext installmansrc: afs cat nroff Loc Oldconfig \
+ sysman spackage test Getfile Prefixit prefixexp Prefixup
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:mansrc:
+?S: This variable contains the name of the directory in which manual
+?S: source pages are to be put. It is the responsibility of the
+?S: Makefile.SH to get the value of this into the proper command.
+?S: You must be prepared to do the ~name expansion yourself.
+?S:.
+?S:mansrcexp:
+?S: This variable is the same as the mansrc variable, but is filename
+?S: expanded at configuration time, for convenient use in makefiles.
+?S:.
+?S:installmansrc:
+?S: This variable is really the same as mansrcexp, unless you are using
+?S: AFS in which case it points to the read/write location whereas
+?S: mansrcexp only points to the read-only access location. For extra
+?S: portability, you should only use this variable within your makefiles.
+?S:.
+?S:manext:
+?S: This variable contains the extension that the manual page should
+?S: have: one of 'n', 'l', or '1'. The Makefile must supply the '.'.
+?S: See mansrc.
+?S:.
+?T:lookpath
+: determine where manual pages go
+set mansrc mansrc none
+eval $prefixit
+$cat <<EOM
+
+$spackage has manual pages available in source form.
+EOM
+case "$nroff" in
+nroff)
+ echo "However, you don't have nroff, so they're probably useless to you."
+ case "$mansrc" in
+ '') mansrc="none";;
+ esac;;
+esac
+echo "If you don't want the manual sources installed, answer 'none'."
+case "$mansrc" in
+'')
+ lookpath="$prefixexp/share/man/man1 $prefixexp/man/man1"
+ lookpath="$lookpath $prefixexp/man/u_man/man1 $prefixexp/man/l_man/man1"
+ lookpath="$lookpath /usr/local/man/man1 /opt/man/man1 /usr/man/manl"
+ lookpath="$lookpath /usr/share/man/man1 /usr/local/share/man/man1"
+ lookpath="$lookpath /usr/man/local/man1 /usr/man/l_man/man1"
+ lookpath="$lookpath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
+ lookpath="$lookpath /usr/man/man.L"
+ mansrc=`./loc . $prefixexp/man/man1 $lookpath`
+ if $test -d "$mansrc"; then
+ dflt="$mansrc"
+ else
+ dflt="$sysman"
+ fi
+ set dflt
+ eval $prefixup
+ ;;
+' ') dflt=none;;
+*) dflt="$mansrc"
+ ;;
+esac
+echo " "
+fn=dn~
+rp='Where do the manual pages (source) go?'
+. ./getfile
+if test "X$mansrcexp" != "X$ansexp"; then
+ installmansrc=''
+fi
+mansrc="$ans"
+mansrcexp="$ansexp"
+case "$mansrc" in
+'') mansrc=' '
+ installmansrc='';;
+esac
+if $afs && $test "$mansrc"; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+manual pages reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installmansrc" in
+ '') dflt=`echo $mansrcexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installmansrc";;
+ esac
+ fn=de~
+ rp='Where will man pages be installed?'
+ . ./getfile
+ installmansrc="$ans"
+else
+ installmansrc="$mansrcexp"
+fi
+
+case "$mansrc" in
+' ') manext='0';;
+*l) manext=l;;
+*n) manext=n;;
+*o) manext=l;;
+*p) manext=n;;
+*C) manext=C;;
+*L) manext=L;;
+*L1) manext=L1;;
+*) manext=1;;
+esac
+
diff --git a/mcon/U/mboxchar.U b/mcon/U/mboxchar.U
new file mode 100644
index 0000000..ed33695
--- /dev/null
+++ b/mcon/U/mboxchar.U
@@ -0,0 +1,70 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: mboxchar.U,v $
+?RCS: Revision 3.0.1.2 1995/07/25 14:13:12 ram
+?RCS: patch56: ensure ctrl-A characters are visible in prompt (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:11:22 ram
+?RCS: patch23: added support for MMDF mailboxes (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:15 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:mboxchar: cat package shsharp Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:mboxchar:
+?S: This variable contains the eventual value of the MBOXCHAR symbol,
+?S: which is how a C program can identify a file as a mailbox.
+?S:.
+?C:MBOXCHAR:
+?C: This symbol contains a character which will match the beginning
+?C: of a mailbox file.
+?C:.
+?H:#define MBOXCHAR '$mboxchar' /**/
+?H:.
+?T:CTRLA
+?INIT:CTRLA=`echo a | tr a '\001'`
+: determine how to determine when a file is a mailbox
+case "$mboxchar" in
+'') dflt=F;;
+?X: The following ^A is two-chars to ensure it will print out -- WED
+"$CTRLA") dflt='^A';;
+*) dflt="$mboxchar";;
+esac
+$cat <<EOM
+
+In saving articles, $package wants to differentiate between saving to
+mailbox format files and normal files. It does this by examining the
+first character of the file in question. On most systems the first line
+starts with "From ...", so the first character is an F. Other systems
+use magic cookies like control codes between articles, so one of those
+would be first. For example, MMDF messages are separated with lines of
+four control-A's (you may specify one as ^A, i.e. caret A).
+
+EOM
+rp="What's the first character of a mailbox file?"
+. ./myread
+mboxchar="$ans"
+case "$mboxchar" in
+'F') ;;
+"$CTRLA") ;;
+'^A'|'^a') mboxchar="$CTRLA";;
+*) cat <<'EOM'
+
+You will need to edit the shell script mbox.saver to properly append an
+article to a mailbox. The arguments to the script are documented in
+EOM
+ case "$shsharp" in
+ false) echo "comments in mbox.saver.std.";;
+ true) echo "comments in the shell script itself.";;
+ esac
+esac
+
diff --git a/mcon/U/mkdep.U b/mcon/U/mkdep.U
new file mode 100644
index 0000000..23d1a26
--- /dev/null
+++ b/mcon/U/mkdep.U
@@ -0,0 +1,268 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: mkdep.U,v $
+?RCS: Revision 3.0.1.4 1997/02/28 16:13:07 ram
+?RCS: patch61: replaced .o with $_o all over the place
+?RCS:
+?RCS: Revision 3.0.1.3 1994/10/29 16:25:02 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0.1.2 1994/01/24 14:15:12 ram
+?RCS: patch16: cppflags is now an optional dependency
+?RCS:
+?RCS: Revision 3.0.1.1 1993/12/15 08:22:39 ram
+?RCS: patch15: force zero exit status in all mkdep scripts
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:16 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit generates the script 'mkdep' in the top-level directory.
+?X: It is up to the makefile to use it for automatic dependencies
+?X: generation (usage: 'mkdep [cppflags] -- *.c').
+?X:
+?MAKE:mkdep: spitshell startsh cpp +cppflags grep contains rm sed sort uniq \
+ Getfile Oldconfig eunicefix cat +cc cppminus test pkgsrc _o
+?MAKE: -pick add $@ %<
+?S:mkdep:
+?S: This variable holds the name of a command to generate makefile
+?S: dependencies on the standard output. It is the pathname of the
+?S: generated mkdep script.
+?S:.
+?F:mkdep
+?T:IFS arg flags takeflags srcfile toplev filebase inc dir files file dep c
+: find out how to generate dependencies
+echo " "
+echo "Checking how to generate makefile dependencies on your machine..." >&4
+?X: We are in the UU directory
+toplev=`cd ..;pwd`
+$cat >dep.c <<'EOCP'
+#include "dep.h"
+EOCP
+?X: Empty dep.h causes RIOS to barf
+$cat >dep.h <<'EOCP'
+
+EOCP
+takeflags='flags=""
+case "$@" in
+*--*)
+ for arg
+ do
+ shift
+ case "$arg" in
+ --) break;;
+ *) flags="$flags $arg";;
+ esac
+ done;;
+esac'
+case "$mkdep" in
+'')
+ ;;
+*)
+ if test -f "$mkdep" &&
+ $mkdep dep.c >dep.out 2>/dev/null &&
+ $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1
+ then
+ echo "$mkdep works."
+?X: If they copied a config.sh from some other place, they'll have a working
+?X: mkdep script probably, but not located at the top of the sources. And
+?X: the Makefiles generated by jmake expect an mkdep script in the top dir.
+ case "$mkdep" in
+ "$pkgsrc/mkdep");;
+ *) echo "(copying it to $pkgsrc)"
+ cp $mkdep $pkgsrc/mkdep 2>/dev/null
+ if $pkgsrc/mkdep dep.c >dep.out 2>/dev/null &&
+ $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1; then
+ mkdep=$pkgsrc/mkdep
+ else
+ echo "Hmm... The copy failed or something... Guessing again..."
+ mkdep=
+ fi
+ ;;
+ esac
+ else
+ mkdep=
+ fi
+esac
+
+case "$mkdep" in
+'')
+?X: have to figure something out: Try cpp
+?X: have to pass source names one by one to cpp...
+ $spitshell > ../mkdep <<EOM
+$startsh
+$takeflags
+for srcfile
+do
+ $cpp -M $cppflags \$flags \$srcfile 2>/dev/null
+done
+exit 0
+EOM
+ mkdep=$toplev/mkdep
+ chmod +x $mkdep
+ $eunicefix $mkdep
+ if $mkdep dep.c >dep.out 2>/dev/null &&
+ $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1
+ then
+ echo "Looks like we can use $cpp -M."
+ else
+ mkdep=
+ fi
+ ;;
+esac
+
+case "$mkdep" in
+'')
+?X: have to figure something out: on NeXT, use cc -MM
+?X: have to pass source names one by one to cc...
+ $spitshell > ../mkdep <<EOM
+$startsh
+$takeflags
+for srcfile
+do
+ $cc -MM $cppflags \$flags \$srcfile 2>/dev/null
+done
+exit 0
+EOM
+ mkdep=$toplev/mkdep
+ chmod +x $mkdep
+ $eunicefix $mkdep
+ if $mkdep dep.c >dep.out 2>/dev/null &&
+ $contains "dep$_o: dep.h" dep.out >/dev/null 2>&1
+ then
+ echo "Looks like we can use $cc -MM."
+ else
+ mkdep=
+ fi
+ ;;
+esac
+
+case "$mkdep" in
+'')
+?X: still no luck -- try something fancier.
+ $spitshell >../mkdep <<EOS
+$startsh
+$takeflags
+for srcfile
+do
+ case "\$srcfile" in
+ *.c) c='.c';;
+ *.y) c='.y';;
+ *.l) c='.l';;
+ esac
+ filebase=\`basename \$srcfile \$c\`
+ <\$srcfile $cpp $cppminus $cppflags \$flags 2>/dev/null | \\
+ $sed -e '/^# *[0-9]/!d' \\
+ -e 's/^.*"\(.*\)".*\$/'\$filebase'$_o: \1/' \\
+ -e 's|: \./|: |' \\
+ -e 's|: *$|: '\$srcfile'|' | \\
+ $grep -v '^#' | $sort | $uniq
+done
+exit 0
+EOS
+ mkdep=$toplev/mkdep
+ chmod +x $mkdep
+ $eunicefix $mkdep
+ if $mkdep dep.c >dep.out 2>/dev/null &&
+ $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1
+ then
+ echo "A shell script using $cpp does the trick."
+ else
+ echo "$cpp doesn't seem to be any use at all."
+ $spitshell >../mkdep <<EOS
+$startsh
+$takeflags
+files="\$@"
+set X \$flags
+shift
+inc='.'
+while test \$# -gt 0
+do
+ case "\$1" in
+ -I)
+ shift
+ inc="\$inc:\$1"
+ ;;
+ -I*)
+ dir=\`echo \$1 | sed -e 's/^-I//'\`
+ inc="\$inc:\$dir"
+ ;;
+ esac
+ shift
+done
+set X \$files
+shift
+trap "$rm -f /tmp/mkdep\$\$; exit 1" 1 2 3 15
+for srcfile
+do
+ case "\$srcfile" in
+ *.c) c='.c';;
+ *.y) c='.y';;
+ *.l) c='.l';;
+ esac
+ filebase=\`basename \$srcfile \$c\`
+ echo \$filebase$_o: \$srcfile
+ $grep '^#[ ]*include' \$srcfile /dev/null | \
+ $sed -n -e 's/#[ ]*include[ ]*//' \\
+ -e '/<\(.*\)>/ d' \\
+ -e 's/:[^"]*"\([^"]*\)".*/: \1/' \\
+ -e "s/\\.c:/$_o:/p" > /tmp/mkdep\$\$
+?X: Deal with directories specified via -I requests to locate files
+ IFS=': '
+ while read file dep; do
+ for dir in \$inc; do
+ if $test -f "\$dir/\$dep"; then
+ dep="\$dir/\$dep"
+ break
+ fi
+ done
+ echo "\$file: \$dep" | $sed -e 's,: \./,: ,'
+ done </tmp/mkdep\$\$
+ IFS=' '
+ $rm -f /tmp/mkdep\$\$
+done
+exit 0
+EOS
+ mkdep=$toplev/mkdep
+ chmod +x $mkdep
+ $eunicefix $mkdep
+ if $mkdep dep.c >dep.out 2>/dev/null &&
+ $contains "dep$_o:.*dep\.h" dep.out >/dev/null 2>&1
+ then
+ cat << EOM
+
+I can use a script with grep instead, but it will make some incorrect
+dependencies, since it doesn't understand about conditional compilation.
+Moreover, some dependencies may be missing, because scanning won't be
+a recursive process.
+If you have a program which generates makefile dependencies, you may want
+to use it. If not, you can use the script and edit the Makefile by hand
+if you need to.
+EOM
+ else
+ mkdep=
+ cat << EOM
+
+I can't seem to generate makefile dependencies at all! Perhaps you have a
+program that does? If you don't, you might look at the mkdep script to
+see if you can create one which works.
+EOM
+ fi
+ fi
+esac
+echo " "
+dflt="$mkdep"
+fn=f~/
+rp="Name of program to make makefile dependencies?"
+. ./getfile
+mkdep="$ans"
+$rm -f dep.c dep.h dep$_o dep.out
+
diff --git a/mcon/U/models.U b/mcon/U/models.U
new file mode 100644
index 0000000..8887a16
--- /dev/null
+++ b/mcon/U/models.U
@@ -0,0 +1,214 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: models.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 16:13:17 ram
+?RCS: patch61: added ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/25 14:02:39 ram
+?RCS: patch6: added default for large
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:17 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:models split small medium large huge: test cat Myread sysman Oldconfig \
+ Loc Warn contains rm
+?MAKE: -pick add $@ %<
+?S:models:
+?S: This variable contains the list of memory models supported by this
+?S: system. Possible component values are none, split, unsplit, small,
+?S: medium, large, and huge. The component values are space separated.
+?S:.
+?S:split:
+?S: This variable contains a flag which will tell the C compiler and loader
+?S: to produce a program that will run in separate I and D space, for those
+?S: machines that support separation of instruction and data space. It is
+?S: up to the Makefile to use this.
+?S:.
+?S:small:
+?S: This variable contains a flag which will tell the C compiler and loader
+?S: to produce a program running with a small memory model. It is up to
+?S: the Makefile to use this.
+?S:.
+?S:medium:
+?S: This variable contains a flag which will tell the C compiler and loader
+?S: to produce a program running with a medium memory model. If the
+?S: medium model is not supported, contains the flag to produce large
+?S: model programs. It is up to the Makefile to use this.
+?S:.
+?S:large:
+?S: This variable contains a flag which will tell the C compiler and loader
+?S: to produce a program running with a large memory model. It is up to
+?S: the Makefile to use this.
+?S:.
+?S:huge:
+?S: This variable contains a flag which will tell the C compiler and loader
+?S: to produce a program running with a huge memory model. If the
+?S: huge model is not supported, contains the flag to produce large
+?S: model programs. It is up to the Makefile to use this.
+?S:.
+?T:unsplit tans modelcc
+?F:!pdp11
+?D:large=''
+?LINT:extern cc
+: see what memory models we can support
+case "$models" in
+'')
+?X: We may not use Cppsym or we get a circular dependency through cc.
+?X: But this should work regardless of which cc we eventually use.
+ $cat >pdp11.c <<'EOP'
+int main() {
+#ifdef pdp11
+ exit(0);
+#else
+ exit(1);
+#endif
+}
+EOP
+?X: Run cc in a subshell in case they don't have a 'cc' command.
+?X: Presumably they do have gcc or something.
+ case "$cc" in
+ '') modelcc="$cc" ;;
+ *) modelcc="cc" ;;
+ esac
+ ( $modelcc -o pdp11 pdp11.c ) >/dev/null 2>&1
+ if $test -f pdp11 && ./pdp11 2>/dev/null; then
+ dflt='unsplit split'
+ else
+ tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
+ case "$tans" in
+ X) dflt='none';;
+ *) if $test -d /lib/small || $test -d /usr/lib/small; then
+ dflt='small'
+ else
+ dflt=''
+ fi
+ if $test -d /lib/medium || $test -d /usr/lib/medium; then
+ dflt="$dflt medium"
+ fi
+ if $test -d /lib/large || $test -d /usr/lib/large; then
+ dflt="$dflt large"
+ fi
+ if $test -d /lib/huge || $test -d /usr/lib/huge; then
+ dflt="$dflt huge"
+ fi
+ esac
+ fi;;
+*) dflt="$models";;
+esac
+$cat <<EOM
+
+Some systems have different model sizes. On most systems they are called
+small, medium, large, and huge. On the PDP11 they are called unsplit and
+split. If your system doesn't support different memory models, say "none".
+If you wish to force everything to one memory model, say "none" here and
+put the appropriate flags later when it asks you for other cc and ld flags.
+Venix systems may wish to put "none" and let the compiler figure things out.
+(In the following question multiple model names should be space separated.)
+
+The default for most systems is "none".
+
+EOM
+rp="Which memory models are supported?"
+. ./myread
+models="$ans"
+
+case "$models" in
+none)
+ small=''
+ medium=''
+ large=''
+ huge=''
+ unsplit=''
+ split=''
+ ;;
+*split)
+ case "$split" in
+ '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
+ $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
+ dflt='-i'
+ else
+ dflt='none'
+ fi;;
+ *) dflt="$split";;
+ esac
+ rp="What flag indicates separate I and D space?"
+ . ./myread
+ tans="$ans"
+ case "$tans" in
+ none) tans='';;
+ esac
+ split="$tans"
+ unsplit='';;
+*large*|*small*|*medium*|*huge*)
+ case "$models" in
+ *large*)
+ case "$large" in
+ '') dflt='-Ml';;
+ *) dflt="$large";;
+ esac
+ rp="What flag indicates large model?"
+ . ./myread
+ tans="$ans"
+ case "$tans" in
+ none) tans='';
+ esac
+ large="$tans";;
+ *) large='';;
+ esac
+ case "$models" in
+ *huge*) case "$huge" in
+ '') dflt='-Mh';;
+ *) dflt="$huge";;
+ esac
+ rp="What flag indicates huge model?"
+ . ./myread
+ tans="$ans"
+ case "$tans" in
+ none) tans='';
+ esac
+ huge="$tans";;
+ *) huge="$large";;
+ esac
+ case "$models" in
+ *medium*) case "$medium" in
+ '') dflt='-Mm';;
+ *) dflt="$medium";;
+ esac
+ rp="What flag indicates medium model?"
+ . ./myread
+ tans="$ans"
+ case "$tans" in
+ none) tans='';
+ esac
+ medium="$tans";;
+ *) medium="$large";;
+ esac
+ case "$models" in
+ *small*) case "$small" in
+ '') dflt='none';;
+ *) dflt="$small";;
+ esac
+ rp="What flag indicates small model?"
+ . ./myread
+ tans="$ans"
+ case "$tans" in
+ none) tans='';
+ esac
+ small="$tans";;
+ *) small='';;
+ esac
+ ;;
+*)
+ ./warn "Unrecognized memory models--you may have to edit Makefile.SH"
+ ;;
+esac
+$rm -f pdp11.* pdp11
+
diff --git a/mcon/U/modetype.U b/mcon/U/modetype.U
new file mode 100644
index 0000000..efdebf2
--- /dev/null
+++ b/mcon/U/modetype.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: modetype.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:25:07 ram
+?RCS: patch36: created by ADO
+?RCS:
+?MAKE:modetype: Myread Typedef
+?MAKE: -pick add $@ %<
+?S:modetype:
+?S: This variable defines modetype to be something like mode_t,
+?S: int, unsigned short, or whatever type is used to declare file
+?S: modes for system calls.
+?S:.
+?C:Mode_t:
+?C: This symbol holds the type used to declare file modes
+?C: for systems calls. It is usually mode_t, but may be
+?C: int or unsigned short. It may be necessary to include <sys/types.h>
+?C: to get any typedef'ed information.
+?C:.
+?H:#define Mode_t $modetype /* file mode parameter for system calls */
+?H:.
+: see what type is used for mode_t
+set mode_t modetype int stdio.h sys/types.h
+eval $typedef
+dflt="$modetype"
+echo " "
+rp="What type is used for file modes?"
+. ./myread
+modetype="$ans"
+
diff --git a/mcon/U/myhostname.U b/mcon/U/myhostname.U
new file mode 100644
index 0000000..3e33f70
--- /dev/null
+++ b/mcon/U/myhostname.U
@@ -0,0 +1,284 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: myhostname.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 16:15:55 ram
+?RCS: patch61: improved hostname lookup by using ypmatch when NIS is used
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:25:43 ram
+?RCS: patch36: call ./xenix explicitely instead of relying on PATH
+?RCS: patch36: now uses new Tr unit to convert to/from lowercase
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 07:06:20 ram
+?RCS: patch30: now a little more clever for domain name guessing
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:18 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:myhostname phostname mydomain: contains sed test Myread Oldconfig \
+ Guess Loc awk echo sort uniq +usrinc rm hostcat Tr osname
+?MAKE: -pick add $@ %<
+?S:myhostname (hostname):
+?S: This variable contains the eventual value of the MYHOSTNAME symbol,
+?S: which is the name of the host the program is going to run on.
+?S: The domain is not kept with hostname, but must be gotten from mydomain.
+?S: The dot comes with mydomain, and need not be supplied by the program.
+?S:.
+?S:mydomain:
+?S: This variable contains the eventual value of the MYDOMAIN symbol,
+?S: which is the domain of the host the program is going to run on.
+?S: The domain must be appended to myhostname to form a complete host name.
+?S: The dot comes with mydomain, and need not be supplied by the program.
+?S:.
+?S:phostname:
+?S: This variable contains the eventual value of the PHOSTNAME symbol,
+?S: which is a command that can be fed to popen() to get the host name.
+?S: The program should probably not presume that the domain is or isn't
+?S: there already.
+?S:.
+?C:MYHOSTNAME (HOSTNAME):
+?C: This symbol contains name of the host the program is going to run on.
+?C: The domain is not kept with hostname, but must be gotten from MYDOMAIN.
+?C: The dot comes with MYDOMAIN, and need not be supplied by the program.
+?C: If gethostname() or uname() exist, MYHOSTNAME may be ignored. If MYDOMAIN
+?C: is not used, MYHOSTNAME will hold the name derived from PHOSTNAME.
+?C:.
+?C:MYDOMAIN:
+?C: This symbol contains the domain of the host the program is going to
+?C: run on. The domain must be appended to HOSTNAME to form a complete
+?C: host name. The dot comes with MYDOMAIN, and need not be supplied by
+?C: the program. If the host name is derived from PHOSTNAME, the domain
+?C: may or may not already be there, and the program should check.
+?C:.
+?H:#define MYHOSTNAME "$myhostname" /**/
+?H:#define MYDOMAIN "$mydomain" /**/
+?H:.
+?T:cont i tans tmp_re file
+: now get the host name
+echo " "
+echo "Figuring out host name..." >&4
+case "$myhostname" in
+'') cont=true
+ echo 'Maybe "hostname" will work...'
+ if tans=`sh -c hostname 2>&1` ; then
+ myhostname=$tans
+ phostname=hostname
+ cont=''
+ fi
+ ;;
+*) cont='';;
+esac
+if $test "$cont"; then
+ if ./xenix; then
+ echo 'Oh, dear. Maybe "/etc/systemid" is the key...'
+ if tans=`cat /etc/systemid 2>&1` ; then
+ myhostname=$tans
+ phostname='cat /etc/systemid'
+ echo "Whadyaknow. Xenix always was a bit strange..."
+ cont=''
+ fi
+ elif $test -r /etc/systemid; then
+ echo "(What is a non-Xenix system doing with /etc/systemid?)"
+ fi
+fi
+if $test "$cont"; then
+ echo 'No, maybe "uuname -l" will work...'
+ if tans=`sh -c 'uuname -l' 2>&1` ; then
+ myhostname=$tans
+ phostname='uuname -l'
+ else
+ echo 'Strange. Maybe "uname -n" will work...'
+ if tans=`sh -c 'uname -n' 2>&1` ; then
+ myhostname=$tans
+ phostname='uname -n'
+ else
+ echo 'Oh well, maybe I can mine it out of whoami.h...'
+ if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
+ myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
+ phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
+ else
+ case "$myhostname" in
+ '') echo "Does this machine have an identity crisis or something?"
+ phostname='';;
+ *)
+ echo "Well, you said $myhostname before..."
+ phostname='echo $myhostname';;
+ esac
+ fi
+ fi
+ fi
+fi
+case "$myhostname" in
+'') myhostname=noname ;;
+esac
+: you do not want to know about this
+set $myhostname
+myhostname=$1
+
+: verify guess
+if $test "$myhostname" ; then
+ dflt=y
+ rp='Your host name appears to be "'$myhostname'".'" Right?"
+ . ./myread
+ case "$ans" in
+ y*) ;;
+ *) myhostname='';;
+ esac
+fi
+
+: bad guess or no guess
+while $test "X$myhostname" = X ; do
+ dflt=''
+ rp="Please type the (one word) name of your host:"
+ . ./myread
+ myhostname="$ans"
+done
+
+: translate upper to lower if necessary
+case "$myhostname" in
+*[A-Z]*)
+ echo "(Normalizing case in your host name)"
+ myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
+ ;;
+esac
+
+?X: Do not ask for domain name if this is not used later on. In that
+?X: case, the hostname may keep its domain name, but it doesn't matter.
+@if MYDOMAIN || mydomain
+case "$myhostname" in
+*.*)
+ dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
+ myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
+ echo "(Trimming domain name from host name--host name is now $myhostname)"
+ ;;
+*) case "$mydomain" in
+ '')
+?X:
+?X: There is currently no way to say we do not want hostcat if mydomain is not
+?X: used. One way to achieve that would be to put that code in a mydomain.U
+?X: unit. However, we want to stick the sanity checks right after the domain
+?X: name computation, or if none is done, right after the hostname computation.
+?X:
+ {
+?X: If we use NIS, try ypmatch.
+ test "X$hostcat" = "Xypcat hosts" &&
+ ypmatch "$myhostname" hosts 2>/dev/null |\
+ $sed -e 's/[ ]*#.*//; s/$/ /' > hosts && \
+ $test -s hosts
+ } || {
+?X: Extract only the relevant hosts, reducing file size,
+?X: remove comments, insert trailing space for later use.
+ $hostcat | $sed -n -e "s/[ ]*#.*//; s/\$/ /
+ /[ ]$myhostname[ . ]/p" > hosts
+ }
+ tmp_re="[ . ]"
+ $test x`$awk "/[0-9].*[ ]$myhostname$tmp_re/ { sum++ }
+ END { print sum }" hosts` = x1 || tmp_re="[ ]"
+ dflt=.`$awk \
+ "/[0-9].*[ ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
+ hosts | $sort | $uniq | \
+ $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
+ case `$echo X$dflt` in
+ X*\ *) echo "(Several hosts in /etc/hosts matched hostname)"
+ dflt=.
+ ;;
+?X: There is no /etc/hosts on os390
+ X.)
+ if $test -f /etc/hosts; then
+ echo "(You do not have fully-qualified names in /etc/hosts)"
+ else
+ echo "(I cannot locate a hosts database anywhere)"
+ fi
+ ;;
+ esac
+ case "$dflt" in
+ .)
+ tans=`./loc resolv.conf X /etc /usr/etc`
+ if $test -f "$tans"; then
+ echo "(Attempting domain name extraction from $tans)"
+?X: Look for either a search or a domain directive.
+ dflt=.`$sed -n -e 's/ / /g' \
+ -e 's/^search *\([^ ]*\).*/\1/p' $tans \
+ | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
+ case "$dflt" in
+ .) dflt=.`$sed -n -e 's/ / /g' \
+ -e 's/^domain *\([^ ]*\).*/\1/p' $tans \
+ | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
+ ;;
+ esac
+ fi
+ ;;
+ esac
+ case "$dflt" in
+ .) echo "(No help from resolv.conf either -- attempting clever guess)"
+ dflt=.`sh -c domainname 2>/dev/null`
+ case "$dflt" in
+ '') dflt='.';;
+ .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
+ esac
+ ;;
+ esac
+ case "$dflt$osname" in
+ .os390)
+ file="//'SYS1.TCPPARMS(TCPDATA)'"
+ echo "(Attempting domain name extraction from $file)"
+ dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "$file" 2>/dev/null`
+ ;;
+ esac
+ case "$dflt" in
+ .) echo "(Lost all hope -- silly guess then)"
+ dflt='.nonet'
+ ;;
+ esac
+ $rm -f hosts
+ ;;
+ *) dflt="$mydomain";;
+ esac;;
+esac
+echo " "
+rp="What is your domain name?"
+. ./myread
+tans="$ans"
+case "$ans" in
+'') ;;
+.*) ;;
+*) tans=".$tans";;
+esac
+mydomain="$tans"
+
+: translate upper to lower if necessary
+case "$mydomain" in
+*[A-Z]*)
+ echo "(Normalizing case in your domain name)"
+ mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
+ ;;
+esac
+
+@end
+: a little sanity check here
+case "$phostname" in
+'') ;;
+*)
+ case `$phostname | ./tr '[A-Z]' '[a-z]'` in
+ $myhostname$mydomain|$myhostname) ;;
+ *)
+ case "$phostname" in
+ sed*)
+ echo "(That doesn't agree with your whoami.h file, by the way.)"
+ ;;
+ *)
+ echo "(That doesn't agree with your $phostname command, by the way.)"
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+esac
+
diff --git a/mcon/U/n.U b/mcon/U/n.U
new file mode 100644
index 0000000..67418f7
--- /dev/null
+++ b/mcon/U/n.U
@@ -0,0 +1,45 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: n.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:19 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:n c: contains
+?MAKE: -pick add $@ %<
+?S:n:
+?S: This variable contains the -n flag if that is what causes the echo
+?S: command to suppress newline. Otherwise it is null. Correct usage is
+?S: $echo $n "prompt for a question: $c".
+?S:.
+?S:c:
+?S: This variable contains the \c string if that is what causes the echo
+?S: command to suppress newline. Otherwise it is null. Correct usage is
+?S: $echo $n "prompt for a question: $c".
+?S:.
+: first determine how to suppress newline on echo command
+echo " "
+echo "Checking echo to see how to suppress newlines..."
+(echo "hi there\c" ; echo " ") >.echotmp
+if $contains c .echotmp >/dev/null 2>&1 ; then
+ echo "...using -n."
+ n='-n'
+ c=''
+else
+ cat <<'EOM'
+...using \c
+EOM
+ n=''
+ c='\c'
+fi
+echo $n "The star should be here-->$c"
+echo '*'
+rm -f .echotmp
+
diff --git a/mcon/U/nametype.U b/mcon/U/nametype.U
new file mode 100644
index 0000000..49bc8a2
--- /dev/null
+++ b/mcon/U/nametype.U
@@ -0,0 +1,134 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: nametype.U,v $
+?RCS: Revision 3.0.1.3 1994/10/29 16:26:09 ram
+?RCS: patch36: call ./usg and ./bsd explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:36:48 ram
+?RCS: patch32: fixed typo: /etc/password -> /etc/passwd (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:10:09 ram
+?RCS: patch10: made questions more explicit for 'Configure -s' prompting (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:20 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:nametype d_passnames d_berknames d_usgnames: Myread Guess Oldconfig cat
+?MAKE: -pick add $@ %<
+?S:nametype:
+?S: This variable indicates how full names are stored on this system.
+?S: Values are bsd, usg, and other.
+?S:.
+?S:d_passnames:
+?S: This variable conditionally defines the PASSNAMES symbol,
+?S: which indicates to the C program that full names are stored in
+?S: the /etc/passwd file.
+?S:.
+?S:d_berknames:
+?S: This variable conditionally defines the PASSNAMES symbol,
+?S: which indicates to the C program that full names are stored in
+?S: the /etc/passwd file in Berkeley format.
+?S:.
+?S:d_usgnames:
+?S: This variable conditionally defines the PASSNAMES symbol,
+?S: which indicates to the C program that full names are stored in
+?S: the /etc/passwd file in USG format.
+?S:.
+?C:PASSNAMES:
+?C: This symbol, if defined, indicates that full names are stored in
+?C: the /etc/passwd file.
+?C:.
+?C:BERKNAMES:
+?C: This symbol, if defined, indicates that full names are stored in
+?C: the /etc/passwd file in Berkeley format (name first thing, everything
+?C: up to first comma, with & replaced by capitalized login id, yuck).
+?C:.
+?C:USGNAMES:
+?C: This symbol, if defined, indicates that full names are stored in
+?C: the /etc/passwd file in USG format (everything after - and before ( is
+?C: the name).
+?C:.
+?H:#$d_passnames PASSNAMES /* (undef to take name from ~/.fullname) */
+?H:#$d_berknames BERKNAMES /* (that is, ":name,stuff:") */
+?H:#$d_usgnames USGNAMES /* (that is, ":stuff-name(stuff):") */
+?H:.
+: find out how to find out full name
+case "$d_berknames" in
+"$define")
+ dflt=y;;
+"$undef")
+ dflt=n;;
+*)
+ if ./bsd; then
+ dflt=y
+ elif ./xenix; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ ;;
+esac
+$cat <<'EOM'
+
+Does your /etc/passwd file keep full names in Berkeley/V7 format (name first
+thing after ':' in GCOS field)? In that case, a typical entry in the password
+file looks like this:
+
+ guest:**paswword**:10:100:Mister Guest User:/usr/users:/bin/sh
+ ^^^^^^^^^^^^^^^^^
+EOM
+rp="Berkeley/V7 format for full name in /etc/passwd?"
+. ./myread
+case "$ans" in
+y*) d_passnames="$define"
+ d_berknames="$define"
+ d_usgnames="$undef"
+ nametype=bsd
+ ;;
+*)
+ case "$d_usgnames" in
+ "$define") dflt=y;;
+ "$undef") dflt=n;;
+ *)
+ if ./usg; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ ;;
+ esac
+$cat <<'EOM'
+
+Does your passwd file keep full names in USG format (name sandwiched between a
+'-' and a '(')? In that case, a typical entry in the password file looks like
+this:
+
+ guest:**paswword**:10:100:000-Mister Guest User(000):/usr/users:/bin/sh
+ ^^^^^^^^^^^^^^^^^
+EOM
+ rp="USG format for full name in /etc/passwd?"
+ . ./myread
+ case "$ans" in
+ n*) echo "Full name will be taken from ~/.fullname"
+ d_passnames="$undef"
+ d_berknames="$undef"
+ d_usgnames="$undef"
+ nametype=other
+ ;;
+ *)
+ d_passnames="$define"
+ d_berknames="$undef"
+ d_usgnames="$define"
+ nametype=usg
+ ;;
+ esac;;
+esac
+
diff --git a/mcon/U/nblock_io.U b/mcon/U/nblock_io.U
new file mode 100644
index 0000000..5c488de
--- /dev/null
+++ b/mcon/U/nblock_io.U
@@ -0,0 +1,254 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: nblock_io.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 16:17:14 ram
+?RCS: patch61: simplify here document for shells that can't handle them well
+?RCS: patch61: force use of "startsh" at the head of the generated script
+?RCS: patch61: added new files to the ?F: metalint hint
+?RCS:
+?RCS: Revision 3.0.1.1 1995/07/25 14:13:22 ram
+?RCS: patch56: created
+?RCS:
+?X:
+?X: Simplify here document for shells that can't handle them well.
+?X: (Problem reported on FreeBSD; it's unclear if this helps.) --AD
+?X:
+?MAKE:o_nonblock eagain rd_nodata d_eofnblk: cat rm +cc +ccflags +ldflags \
+ d_open3 h_sysfile h_fcntl signal_t hint Oldconfig Setvar startsh Warn
+?MAKE: -pick add $@ %<
+?S:o_nonblock:
+?S: This variable bears the symbol value to be used during open() or fcntl()
+?S: to turn on non-blocking I/O for a file descriptor. If you wish to switch
+?S: between blocking and non-blocking, you may try ioctl(FIOSNBIO) instead,
+?S: but that is only supported by some devices.
+?S:.
+?S:eagain:
+?S: This variable bears the symbolic errno code set by read() when no
+?S: data is present on the file and non-blocking I/O was enabled (otherwise,
+?S: read() blocks naturally).
+?S:.
+?S:rd_nodata:
+?S: This variable holds the return code from read() when no data is
+?S: present. It should be -1, but some systems return 0 when O_NDELAY is
+?S: used, which is a shame because you cannot make the difference between
+?S: no data and an EOF.. Sigh!
+?S:.
+?S:d_eofnblk:
+?S: This variable conditionally defines EOF_NONBLOCK if EOF can be seen
+?S: when reading from a non-blocking I/O source.
+?S:.
+?C:VAL_O_NONBLOCK:
+?C: This symbol is to be used during open() or fcntl(F_SETFL) to turn on
+?C: non-blocking I/O for the file descriptor. Note that there is no way
+?C: back, i.e. you cannot turn it blocking again this way. If you wish to
+?C: alternatively switch between blocking and non-blocking, use the
+?C: ioctl(FIOSNBIO) call instead, but that is not supported by all devices.
+?C:.
+?C:VAL_EAGAIN:
+?C: This symbol holds the errno error code set by read() when no data was
+?C: present on the non-blocking file descriptor.
+?C:.
+?C:RD_NODATA:
+?C: This symbol holds the return code from read() when no data is present
+?C: on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is
+?C: not defined, then you can't distinguish between no data and EOF by
+?C: issuing a read(). You'll have to find another way to tell for sure!
+?C:.
+?C:EOF_NONBLOCK:
+?C: This symbol, if defined, indicates to the C program that a read() on
+?C: a non-blocking file descriptor will return 0 on EOF, and not the value
+?C: held in RD_NODATA (-1 usually, in that case!).
+?C:.
+?H:#define VAL_O_NONBLOCK $o_nonblock
+?H:#define VAL_EAGAIN $eagain
+?H:#define RD_NODATA $rd_nodata
+?H:#$d_eofnblk EOF_NONBLOCK
+?H:.
+?F:!try !try.out !try.ret !try.err !mtry
+?T:status
+?LINT:use d_open3
+: check for non-blocking I/O stuff
+case "$h_sysfile" in
+true) echo "#include <sys/file.h>" > head.c;;
+*)
+ case "$h_fcntl" in
+ true) echo "#include <fcntl.h>" > head.c;;
+ *) echo "#include <sys/fcntl.h>" > head.c;;
+ esac
+ ;;
+esac
+echo " "
+echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
+case "$o_nonblock" in
+'')
+ $cat head.c > try.c
+ $cat >>try.c <<'EOCP'
+int main() {
+#ifdef O_NONBLOCK
+ printf("O_NONBLOCK\n");
+ exit(0);
+#endif
+#ifdef O_NDELAY
+ printf("O_NDELAY\n");
+ exit(0);
+#endif
+?X: Stevens "Advanced Programming in the UNIX Environment" page 364 mentions
+?X: the FNDELAY symbol, used in 4.33BSD (source: Paul Marquess).
+#ifdef FNDELAY
+ printf("FNDELAY\n");
+ exit(0);
+#endif
+ exit(0);
+}
+EOCP
+ if $cc $ccflags $ldflags -o try try.c >/dev/null 2>&1; then
+ o_nonblock=`./try`
+ case "$o_nonblock" in
+ '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
+ *) echo "Seems like we can use $o_nonblock.";;
+ esac
+ else
+ echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
+ fi
+ ;;
+*) echo "Using $hint value $o_nonblock.";;
+esac
+$rm -f try try.* .out core
+
+echo " "
+echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
+case "$eagain" in
+'')
+ $cat head.c > try.c
+ $cat >>try.c <<EOCP
+#include <errno.h>
+#include <sys/types.h>
+#include <signal.h>
+#define MY_O_NONBLOCK $o_nonblock
+extern int errno;
+$signal_t blech(x) int x; { exit(3); }
+EOCP
+ $cat >> try.c <<'EOCP'
+int main()
+{
+ int pd[2];
+ int pu[2];
+ char buf[1];
+ char string[100];
+
+ pipe(pd); /* Down: child -> parent */
+ pipe(pu); /* Up: parent -> child */
+ if (0 != fork()) {
+ int ret;
+ close(pd[1]); /* Parent reads from pd[0] */
+ close(pu[0]); /* Parent writes (blocking) to pu[1] */
+ if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
+ exit(1);
+ signal(SIGALRM, blech);
+ alarm(5);
+ if ((ret = read(pd[0], buf, 1)) > 0) /* Nothing to read! */
+ exit(2);
+ sprintf(string, "%d\n", ret);
+ write(2, string, strlen(string));
+ alarm(0);
+#ifdef EAGAIN
+ if (errno == EAGAIN) {
+ printf("EAGAIN\n");
+ goto ok;
+ }
+#endif
+#ifdef EWOULDBLOCK
+ if (errno == EWOULDBLOCK)
+ printf("EWOULDBLOCK\n");
+#endif
+ ok:
+ write(pu[1], buf, 1); /* Unblocks child, tell it to close our pipe */
+ sleep(2); /* Give it time to close our pipe */
+ alarm(5);
+ ret = read(pd[0], buf, 1); /* Should read EOF */
+ alarm(0);
+ sprintf(string, "%d\n", ret);
+ write(3, string, strlen(string));
+ exit(0);
+ }
+
+ close(pd[0]); /* We write to pd[1] */
+ close(pu[1]); /* We read from pu[0] */
+ read(pu[0], buf, 1); /* Wait for parent to signal us we may continue */
+ close(pd[1]); /* Pipe pd is now fully closed! */
+ exit(0); /* Bye bye, thank you for playing! */
+}
+EOCP
+ if $cc $ccflags $ldflags -o try try.c >/dev/null 2>&1; then
+?X: Use script to avoid the possible 'alarm call' message
+ echo "$startsh" >mtry
+ echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
+ chmod +x mtry
+ ./mtry >/dev/null 2>&1
+ case $? in
+ 0) eagain=`$cat try.out`;;
+ 1) echo "Could not perform non-blocking setting!";;
+ 2) echo "I did a successful read() for something that was not there!";;
+ 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
+ *) echo "Something terribly wrong happened during testing.";;
+ esac
+ rd_nodata=`$cat try.ret`
+ echo "A read() system call with no data present returns $rd_nodata."
+ case "$rd_nodata" in
+ 0|-1) ;;
+ *)
+ echo "(That's peculiar, fixing that to be -1.)"
+ rd_nodata=-1
+ ;;
+ esac
+ case "$eagain" in
+ '')
+ echo "Forcing errno EAGAIN on read() with no data available."
+ eagain=EAGAIN
+ ;;
+ *)
+ echo "Your read() sets errno to $eagain when no data is available."
+ ;;
+ esac
+ status=`$cat try.err`
+ case "$status" in
+ 0) echo "And it correctly returns 0 to signal EOF.";;
+ -1) echo "But it also returns -1 to signal EOF, so be careful!";;
+ *) echo "However, your read() returns '$status' on EOF??";;
+ esac
+ val="$define"
+ if test "$status" = "$rd_nodata"; then
+ ./warn "your read() can't distinguish between EOF and no data!"
+ val="$undef"
+ fi
+ else
+ echo "I can't compile the test program--assuming errno EAGAIN will do."
+ eagain=EAGAIN
+ fi
+ set d_eofnblk
+ eval $setvar
+ ;;
+*)
+ echo "Using $hint value $eagain."
+ echo "Your read() returns $rd_nodata when no data is present."
+ case "$d_eofnblk" in
+ "$define") echo "And you can see EOF because read() returns 0.";;
+ "$undef") echo "But you can't see EOF status from read() returned value.";;
+ *)
+?X: Should not happen, but if it does, assume the worst!
+ echo "(Assuming you can't see EOF status from read anyway.)"
+ d_eofnblk=$undef
+ ;;
+ esac
+ ;;
+esac
+$rm -f try try.* .out core head.c mtry
+
diff --git a/mcon/U/newslevel.U b/mcon/U/newslevel.U
new file mode 100644
index 0000000..763995e
--- /dev/null
+++ b/mcon/U/newslevel.U
@@ -0,0 +1,53 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: newslevel.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:21 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:newslevel: cat contains test activeexp newslib Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:newslevel:
+?S: The current revision level of the Usenet news system, encoded
+?S: as 1000 * major rev + 10 * minor rev + sub rev. For instance,
+?S: news 2.10.3 is encode as 2103, and 2.11 as 2110.
+?S:.
+?C:NEWSLEVEL:
+?C: The current revision level of the Usenet news system, encoded
+?C: as 1000 * major rev + 10 * minor rev + sub rev. For instance,
+?C: news 2.10.3 is encode as 2103, and 2.11 as 2110.
+?C:.
+?H:#define NEWSLEVEL $newslevel /**/
+?H:.
+: check for news version
+if $test -f $activeexp; then
+ if ??? >/dev/null 2>&1; then
+ dflt=2110
+ elif $test -f $newslib/cunbatch; then
+ dflt=2103
+ elif $contains ' [0-9][0-9]* [0-9]' "$activeexp" >/dev/null 2>&1; then
+ dflt=2102
+ else
+ dflt=2101
+ fi
+else
+ dflt=$newslevel
+fi
+$cat <<EOM
+
+The following news version number is a multiplexed integer:
+ 1000 * major rev + 10 * minor rev + sub rev.
+News 2.10.3 would be 2103. 2.11 comes out as 2110.
+
+EOM
+rp="What version of news are you going to be running?"
+. ./myread
+newslevel="$ans"
+
diff --git a/mcon/U/newslib.U b/mcon/U/newslib.U
new file mode 100644
index 0000000..1c7ee7e
--- /dev/null
+++ b/mcon/U/newslib.U
@@ -0,0 +1,61 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: newslib.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:23 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:newslib newslibexp: test inews Oldconfig Getfile
+?MAKE: -pick add $@ %<
+?S:newslib:
+?S: This variable contains the eventual value of the NEWSLIB symbol,
+?S: which holds the name of the directory serving as the news library.
+?S: It may have a ~ on the front. See newslibexp for expanded version.
+?S:.
+?S:newslibexp:
+?S: This variable contains the ~ expanded name of the news library
+?S: directory. See newslib.
+?S:.
+?C:NEWSLIB:
+?C: This symbol contains the name of the directory serving as the news
+?C: library. The program must be prepared to do ~ expansion on it.
+?C:.
+?C:NEWSLIB_EXP:
+?C: This symbol is the ~ expanded version of NEWSLIB, for programs that
+?C: do not wish to deal with it at run-time.
+?C:.
+?H:#define NEWSLIB "$newslib" /**/
+?H:#define NEWSLIB_EXP "$newslibexp" /**/
+?H:.
+?LINT:change inews
+: figure out news library
+case "$newslib" in
+'')
+ dflt=/usr/lib/news
+ ;;
+*) dflt=$newslib ;;
+esac
+echo " "
+fn=d~
+rp='Where is your news library?'
+. ./getfile
+newslib="$ans"
+newslibexp="$ansexp"
+if $test -f $newslibexp/inews; then
+ echo "Aha! Inews is really in $newslibexp! Maybe this is 2.10.2..." >&4
+ case "$inews" in
+ inews)
+ : null
+ ;;
+ *) echo "(Make sure $inews isn't an old version.)";;
+ esac
+ inews=$newslibexp/inews
+fi
+
diff --git a/mcon/U/newsspool.U b/mcon/U/newsspool.U
new file mode 100644
index 0000000..8e17b97
--- /dev/null
+++ b/mcon/U/newsspool.U
@@ -0,0 +1,52 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: newsspool.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:24 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:newsspool newsspoolexp: Getfile Oldconfig
+?MAKE: -pick add $@ %<
+?S:newsspool:
+?S: This variable contains the eventual value of the NEWSSPOOL symbol,
+?S: which is the directory name where news articles are spooled. It
+?S: may have a ~ on the front of it.
+?S:.
+?S:newsspoolexp:
+?S: This is the same as the newsspool variable, but is filename expanded
+?S: at configuration time, for programs not wanting to deal with it at
+?S: run-time.
+?S:.
+?C:NEWSSPOOL:
+?C: This symbol contains the directory name where news articles are
+?C: spooled. The program must be prepared to do ~ expansion on it.
+?C:.
+?C:NEWSSPOOL_EXP:
+?C: This is the same as NEWSSPOOL, but is filename expanded at
+?C: configuration time, for use in programs not willing to do so
+?C: at run-time.
+?C:.
+?H:#define NEWSSPOOL "$newsspool" /**/
+?H:#define NEWSSPOOL_EXP "$newsspoolexp" /**/
+?H:.
+: locate news spool directory
+case "$newsspool" in
+'')
+ dflt=/usr/spool/news
+ ;;
+*) dflt="$newsspool";;
+esac
+echo " "
+fn=d~
+rp='Where are news spooled?'
+. ./getfile
+newsspool="$ans"
+newsspoolexp="$ansexp"
+
diff --git a/mcon/U/nis.U b/mcon/U/nis.U
new file mode 100644
index 0000000..f33eb0d
--- /dev/null
+++ b/mcon/U/nis.U
@@ -0,0 +1,168 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: nis.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 16:17:38 ram
+?RCS: patch61: ensure suitable defaults for hostcat and friends
+?RCS:
+?RCS: Revision 3.0.1.2 1995/03/21 08:48:34 ram
+?RCS: patch52: continued fix for NeXT NIS/NetInfo handling
+?RCS:
+?RCS: Revision 3.0.1.1 1995/02/15 14:16:23 ram
+?RCS: patch51: now correctly handles NeXT using NIS rather than NetInfo
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:24 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:passcat groupcat hostcat: Myread Oldconfig test contains
+?MAKE: -pick add $@ %<
+?S:passcat:
+?S: This variable contains a command that produces the text of the
+?S: /etc/passwd file. This is normally "cat /etc/passwd", but can be
+?S: "ypcat passwd" when NIS is used.
+?S:.
+?S:groupcat:
+?S: This variable contains a command that produces the text of the
+?S: /etc/group file. This is normally "cat /etc/group", but can be
+?S: "ypcat group" when NIS is used.
+?S:.
+?S:hostcat:
+?S: This variable contains a command that produces the text of the
+?S: /etc/hosts file. This is normally "cat /etc/hosts", but can be
+?S: "ypcat hosts" when NIS is used.
+?S:.
+: see if we have to deal with yellow pages, now NIS.
+?X: NeXT gives us some fun here, as always, by having both NIS (former YP)
+?X: and NetInfo. But since it has both, it's ok to put the test inside the if.
+?X: Contributed by Thomas Neumann <tom@smart.bo.open.de>.
+if $test -d /usr/etc/yp || $test -d /etc/yp || $test -d /usr/lib/yp; then
+ if $test -f /usr/etc/nibindd; then
+ echo " "
+ echo "I'm fairly confident you're on a NeXT."
+@if passcat || groupcat
+ echo " "
+ rp='Do you get the passwd file via NetInfo?'
+ dflt=y
+ case "$passcat" in
+ nidump*) ;;
+ '') ;;
+ *) dflt=n;;
+ esac
+ . ./myread
+ case "$ans" in
+ y*) passcat='nidump passwd .'
+@if groupcat
+ echo "(Assuming /etc/group is also distributed.)"
+ groupcat='nidump group .'
+@end
+ ;;
+ *) echo "You told me, so don't blame me."
+ case "$passcat" in
+ nidump*) passcat=''
+@if groupcat
+ groupcat='';;
+@end
+ esac
+@if groupcat
+ echo "(Assuming /etc/group is handled the same way.)"
+@end
+ ;;
+ esac
+@end
+@if hostcat
+ echo " "
+ rp='Do you get the hosts file via NetInfo?'
+ dflt=y
+ case "$hostcat" in
+ nidump*) ;;
+ '') ;;
+ *) dflt=n;;
+ esac
+ . ./myread
+ case "$ans" in
+ y*) hostcat='nidump hosts .';;
+ *) case "$hostcat" in
+ nidump*) hostcat='';;
+ esac
+ ;;
+ esac
+@end
+ fi
+@if passcat || groupcat
+ case "$passcat" in
+ nidump*) ;;
+ *)
+ case "$passcat" in
+ *ypcat*) dflt=y;;
+ '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
+ dflt=y
+ else
+ dflt=n
+ fi;;
+ *) dflt=n;;
+ esac
+ echo " "
+ rp='Are you getting the passwd file via yellow pages?'
+ . ./myread
+ case "$ans" in
+ y*) passcat='ypcat passwd'
+@if groupcat
+ echo "(Assuming /etc/group is also distributed.)"
+ groupcat='ypcat group'
+@end
+ ;;
+ *) passcat='cat /etc/passwd'
+@if groupcat
+ echo "(Assuming /etc/group is also local.)"
+ groupcat='cat /etc/group'
+@end
+ ;;
+ esac
+ ;;
+ esac
+@end
+@if hostcat
+ case "$hostcat" in
+ nidump*) ;;
+ *)
+ case "$hostcat" in
+ *ypcat*) dflt=y;;
+ '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
+ dflt=y
+ else
+ dflt=n
+ fi;;
+ *) dflt=n;;
+ esac
+ echo " "
+ rp='Are you getting the hosts file via yellow pages?'
+ . ./myread
+ case "$ans" in
+ y*) hostcat='ypcat hosts';;
+ *) hostcat='cat /etc/hosts';;
+ esac
+ ;;
+ esac
+@end
+fi
+?X: Ensure suitable default -- Manoj Srivastava
+case "$hostcat" in
+'') hostcat=':'
+ $test -f /etc/hosts && hostcat='cat /etc/hosts';;
+esac
+case "$groupcat" in
+'') groupcat=':'
+ $test -f /etc/group && groupcat='cat /etc/group';;
+esac
+case "$passcat" in
+'') passcat=':'
+ $test -f /etc/passwd && passcat='cat /etc/passwd';;
+esac
+
diff --git a/mcon/U/nlist_pfx.U b/mcon/U/nlist_pfx.U
new file mode 100644
index 0000000..55a4658
--- /dev/null
+++ b/mcon/U/nlist_pfx.U
@@ -0,0 +1,135 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: nlist_pfx.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:26:18 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:25 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:nlist_pfx nlist_fnd: cat test Myread Oldconfig libnlist \
+ +cc +ccflags
+?MAKE: -pick add $@ %<
+?S:nlist_pfx:
+?S: This variable holds any characters which preceed the symbol name
+?S: when doing an nlist search.
+?S:.
+?S:nlist_fnd:
+?S: This variable holds the member of the nlist structure which is
+?S: nonzero if an nlist search succeeds. Presently, it is always "n_value".
+?S:.
+?C:NLIST_PREFIX:
+?C: This manifest constant holds the string of characters which should
+?C: preceed the symbol name when doing an nlist search.
+?C:.
+?C:NLIST_FOUND:
+?C: This manifest constant holds the member of the nlist structure which
+?C: is nonzero if an nlist search succeeds.
+?C:.
+?H:#define NLIST_PREFIX $nlist_pfx /**/
+?H:#define NLIST_FOUND $nlist_fnd /**/
+?H:.
+?F:!nlisttest
+?T:nlist_loc
+: Nose around for nlist stuff
+echo " "
+echo "Checking out nlist stuff..." >&4
+$cat >nlisttest.c <<'EOCP'
+#include <stdio.h>
+#include <nlist.h>
+
+main(argc, argv)
+int argc;
+char **argv;
+{
+ int (*loc)();
+ extern int hereIam();
+ static struct nlist nl[] = {
+ { "IamNotFound", 0 },
+ { "hereIam", 0 },
+ { "_hereIam", 0 },
+ { ".hereIam", 0 },
+ { "", 0 }
+ };
+
+ loc = hereIam;
+
+ if(argc == 1) {
+ printf("%ld\n", loc);}
+ else {
+ int i;
+ int rc;
+
+ if(nlist("./nlisttest", nl) == -1) exit(-1);
+ i = argv[1][0] - '0';
+ printf("%d %d %d\n", nl[i].n_name, nl[i].n_type, nl[i].n_value);
+ }
+ exit(0);}
+
+int hereIam() {
+
+ return;}
+EOCP
+nlist_fnd=n_value
+if $cc $ccflags -o nlisttest nlisttest.c $libnlist >/dev/null 2>&1 ; then
+ set `./nlisttest`
+ nlist_loc=$1
+
+ set `./nlisttest 0`
+ if $test "$3" = "0" ; then
+ echo "$nlist_fnd is 0 if nlist() fails, as I expected."
+ else
+ $cat <<EOM
+Hello, Jim. We have just discovered that $nlist_fnd was nonzero on an
+nlist() lookup failure! Your mission, should you choose to accept it, is to
+edit either config.sh (to provide a Good value for nlist_fnd) or The Code
+(to find an alternative to NLIST_FOUND), and reporting the full details of
+your success to the MetaConfig Police. Of course, should you fail...
+EOM
+ nlist_fnd="/* Bletch! */ */"
+ fi
+
+ set `./nlisttest 1`
+ if $test "$nlist_loc" = "$3" ; then
+ echo "Symbols are stored with no initial characters."
+ nlist_pfx=
+ else
+ set `./nlisttest 2`
+ if $test "$nlist_loc" = "$3" ; then
+ echo "Symbols are stored with an initial underscore."
+ nlist_pfx=_
+ else
+ set `./nlisttest 3`
+ if $test "$nlist_loc" = "$3" ; then
+ echo "Symbols are stored with an initial dot."
+ nlist_pfx=.
+ else
+ $cat <<EOM
+I can't figure out the symbol prefix!
+You get to edit config.sh and fix 'nlist_pfx' (Configure will let you do this
+at the end of its configuration questions), or config.h and fix the value of
+the NLIST_PREFIX symbol.
+EOM
+ nlist_pfx="/* Bletch! */ */"
+ fi
+ fi
+ fi
+else
+ $cat <<EOM
+I can't get the nlist test program working!
+You get to edit config.sh and fix 'nlist_pfx' (Configure will let you do this
+at the end of its configuration questions) and 'nlist_fnd', or config.h and
+fix the value of the NLIST_PREFIX and NLIST_FOUND symbols.
+EOM
+ nlist_pfx="/* Bletch! */ */"
+ nlist_fnd="/* Bletch! */ */"
+fi
+
diff --git a/mcon/U/orderlib.U b/mcon/U/orderlib.U
new file mode 100644
index 0000000..0c77e54
--- /dev/null
+++ b/mcon/U/orderlib.U
@@ -0,0 +1,95 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: orderlib.U,v $
+?RCS: Revision 3.0.1.4 1997/02/28 16:18:18 ram
+?RCS: patch61: replaced .a with $_a all over the place
+?RCS: patch61: likewise for .o replaced by $_o
+?RCS: patch61: now uses the ar located by Loc.U
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/11 15:33:04 ram
+?RCS: patch45: allows hint files to specify their own value for 'ranlib'
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:26:48 ram
+?RCS: patch36: now performs a real small compile for accurate checks (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:31:17 ram
+?RCS: patch32: use cc variable instead of hardwired 'cc' in 1st compile
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:26 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:orderlib ranlib: Loc ar cat test rm +cc +ccflags +ldflags +libs _a _o
+?MAKE: -pick add $@ %<
+?S:orderlib:
+?S: This variable is "true" if the components of libraries must be ordered
+?S: (with `lorder $* | tsort`) before placing them in an archive. Set to
+?S: "false" if ranlib or ar can generate random libraries.
+?S:.
+?S:ranlib:
+?S: This variable is set to the pathname of the ranlib program, if it is
+?S: needed to generate random libraries. Set to ":" if ar can generate
+?S: random libraries or if random libraries are not supported
+?S:.
+?F:!foobar
+: see if ar generates random libraries by itself
+echo " "
+echo "Checking how to generate random libraries on your machine..." >&4
+?X: Some systems (like MIPS) complain when running ar... Others like Ultrix
+?X: need an explicit 'ar ts' to add the table of contents.
+?X: Still others like Linux run ar ts successfully, but still need ranlib.
+?X: This set of tests seems the minimum necessary to check out Linux.
+?X: We need to explicitly put the entries in out-of-order so that Sun's ld
+?X: will fail. (Otherwise it complains, but gives an exit status of 0.)
+echo 'int bar1() { return bar2(); }' > bar1.c
+echo 'int bar2() { return 2; }' > bar2.c
+$cat > foo.c <<'EOP'
+int main() { printf("%d\n", bar1()); exit(0); }
+EOP
+$cc $ccflags -c bar1.c >/dev/null 2>&1
+$cc $ccflags -c bar2.c >/dev/null 2>&1
+$cc $ccflags -c foo.c >/dev/null 2>&1
+$ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
+if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
+ ./foobar >/dev/null 2>&1; then
+ echo "ar appears to generate random libraries itself."
+ orderlib=false
+ ranlib=":"
+elif $ar ts bar$_a >/dev/null 2>&1 &&
+ $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
+ ./foobar >/dev/null 2>&1; then
+ echo "a table of contents needs to be added with 'ar ts'."
+ orderlib=false
+ ranlib="$ar ts"
+else
+?X: Allow hints to specify their own ranlib "script". For instance, on
+?X: some NeXT machines, the timestamp put by ranlib is not correct, and this
+?X: may raise tedious recompiles for nothing. Therefore, NeXT may add the
+?X: ranlib='sleep 5; /bin/ranlib' line in their hints to "fix" that.
+?X: (reported by Andreas Koenig <k@franz.ww.tu-berlin.de>)
+ case "$ranlib" in
+ :) ranlib='';;
+ '')
+ ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
+ $test -f $ranlib || ranlib=''
+ ;;
+ esac
+ if $test -n "$ranlib"; then
+ echo "your system has '$ranlib'; we'll use that."
+ orderlib=false
+ else
+ echo "your system doesn't seem to support random libraries"
+ echo "so we'll use lorder and tsort to order the libraries."
+ orderlib=true
+ ranlib=":"
+ fi
+fi
+$rm -f foo* bar*
+
diff --git a/mcon/U/orgname.U b/mcon/U/orgname.U
new file mode 100644
index 0000000..b00e895
--- /dev/null
+++ b/mcon/U/orgname.U
@@ -0,0 +1,65 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: orgname.U,v $
+?RCS: Revision 3.0.1.1 1993/09/13 16:10:25 ram
+?RCS: patch10: added support for /local/src to the search (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:27 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:orgname: sed cat Myread Loc Oldconfig
+?MAKE: -pick add $@ %<
+?S:orgname:
+?S: This variable contains the eventual value of the ORGNAME symbol,
+?S: which contains either the organizaton name or the full pathname
+?S: of a file containing the organization name.
+?S:.
+?C:ORGNAME:
+?C: This symbol contains either the organizaton name or the full pathname
+?C: of a file containing the organization name, which the program must
+?C: be prepared to open and substitute the contents of.
+?C:.
+?H:#define ORGNAME "$orgname" /**/
+?H:.
+?T:longshots xxx
+: get organization name
+longshots='/local/src /usr/src/new /usr/src/local /usr/local/src'
+case "$orgname" in
+'') if xxx=`./loc news/src/defs.h x $longshots`; then
+ dflt=`$sed -n 's/^.*MYORG[ ]*"\(.*\)".*$/\1/p' $xxx`
+ else
+ dflt=''
+ fi
+ ;;
+*) dflt="$orgname";;
+esac
+$cat << 'EOH'
+
+Please type the name of your organization as you want it to appear on the
+Organization line of outgoing articles. (It's nice if this also specifies
+your location. Your city name is probably sufficient if well known.)
+For example:
+
+ University of Southern North Dakota, Hoople
+
+You may also put the name of a file, as long as it begins with a slash.
+For example:
+
+ /etc/organization
+
+EOH
+orgname=""
+while test "X$orgname" = "X"; do
+ rp='Organization:'
+ . ./myread
+ orgname="$ans"
+done
+
diff --git a/mcon/U/packadmin.U b/mcon/U/packadmin.U
new file mode 100644
index 0000000..dfffa3e
--- /dev/null
+++ b/mcon/U/packadmin.U
@@ -0,0 +1,33 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:packadmin: cf_email Oldconfig Myread cat spackage package
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:packadmin:
+?S: Electronic mail address of the package administrator.
+?S:.
+: check wehther they will act as local admin for the package
+$cat <<EOM
+
+If you or somebody else will be maintaining $package at your site, please
+fill in the correct e-mail address here so that they may be contacted
+if necessary. You may enter "none" for no administrator.
+
+EOM
+case "$packadmin" in
+'') dflt="$cf_email";;
+*) dflt="$packadmin";;
+esac
+rp="$spackage administrator e-mail address"
+. ./myread
+packadmin="$ans"
+
diff --git a/mcon/U/package.U b/mcon/U/package.U
new file mode 100644
index 0000000..32a4398
--- /dev/null
+++ b/mcon/U/package.U
@@ -0,0 +1,56 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: package.U,v $
+?RCS: Revision 3.0.1.3 1994/10/29 16:27:21 ram
+?RCS: patch36: beware of non-ascii character sets when translating case
+?RCS:
+?RCS: Revision 3.0.1.2 1993/11/10 17:37:02 ram
+?RCS: patch14: skip definition of spackage if not otherwise used
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:11:10 ram
+?RCS: patch10: added spackage, suitable for starting sentences
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:28 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:package spackage: Nothing
+?MAKE: -pick wipe $@ %<
+?S:package:
+?S: This variable contains the name of the package being constructed.
+?S: It is primarily intended for the use of later Configure units.
+?S:.
+?S:spackage:
+?S: This variable contains the name of the package being constructed,
+?S: with the first letter uppercased, i.e. suitable for starting
+?S: sentences.
+?S:.
+?C:PACKAGE:
+?C: This variable contains the name of the package being built.
+?C:.
+?H:#define PACKAGE "$package"
+?H:.
+?T:first last
+: set package name
+package='<PACKAGENAME>'
+@if spackage
+first=`echo $package | sed -e 's/^\(.\).*/\1/'`
+last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
+?X:
+?X: So early in the Configure script, we don't have ./tr set up and can't
+?X: include Tr in our dependency or that would create a cycle. Therefore,
+?X: we have to somehow duplicate the work done in Tr. That's life.
+?X:
+case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
+ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
+*) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
+esac
+@end
+
diff --git a/mcon/U/pager.U b/mcon/U/pager.U
new file mode 100644
index 0000000..514259e
--- /dev/null
+++ b/mcon/U/pager.U
@@ -0,0 +1,59 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: pager.U,v $
+?RCS: Revision 3.0.1.2 1995/01/30 14:41:26 ram
+?RCS: patch49: ensure dflt gets initialized in case no pagers are found (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:27:45 ram
+?RCS: patch36: replaced Myread by Getfile in the dependency line
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:30 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:pager: pg more less Getfile Oldconfig
+?MAKE: -pick add $@ %<
+?S:pager:
+?S: This variable contains the name of the preferred pager on the system.
+?S: Usual values are (the full pathnames of) more, less, pg, or cat.
+?S:.
+: locate the preferred pager for this system
+fn=f/
+case "$pager" in
+'')
+ dflt=''
+ case "$pg" in
+ /*) dflt=$pg;;
+ [a-zA-Z]:/*) dflt=$pg;;
+ esac
+ case "$more" in
+ /*) dflt=$more;;
+ [a-zA-Z]:/*) dflt=$more;;
+ esac
+ case "$less" in
+ /*) dflt=$less;;
+ [a-zA-Z]:/*) dflt=$less;;
+ esac
+ case "$dflt" in
+ '') dflt=/usr/ucb/more;;
+ esac
+ ;;
+*) dflt="$pager"
+?X: Instruct ./getfile to trust the hinted or previous pager value,
+?X: even if it does not begin with a slash. For example, on os2,
+?X: pager might be cmd /c more. See comments in Getfile.U.
+ fn="f/($pager)"
+ ;;
+esac
+echo " "
+rp='What pager is used on your system?'
+. ./getfile
+pager="$ans"
+
diff --git a/mcon/U/patchlevel.U b/mcon/U/patchlevel.U
new file mode 100644
index 0000000..459f87f
--- /dev/null
+++ b/mcon/U/patchlevel.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: patchlevel.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:18:41 ram
+?RCS: patch61: added support for src.U
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:31 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:patchlevel: package baserev test rsrc
+?MAKE: -pick add $@ %<
+?S:patchlevel:
+?S: The patchlevel level of this package.
+?S: The value of patchlevel comes from the patchlevel.h file.
+?S:.
+: get the patchlevel
+echo " "
+echo "Getting the current patchlevel..." >&4
+if $test -r $rsrc/patchlevel.h;then
+ patchlevel=`awk \
+ '/^#[ ]*define[ ][ ]*PATCHLEVEL/ {print $3}' \
+ < $rsrc/patchlevel.h`
+else
+ patchlevel=0
+fi
+echo "(You have $package $baserev PL$patchlevel.)"
+
diff --git a/mcon/U/perlpath.U b/mcon/U/perlpath.U
new file mode 100644
index 0000000..30334a8
--- /dev/null
+++ b/mcon/U/perlpath.U
@@ -0,0 +1,56 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: perlpath.U,v $
+?RCS: Revision 3.0.1.2 1995/09/25 09:17:04 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.1 1995/01/11 15:33:53 ram
+?RCS: patch45: can now use Loc variables since path stripping is deferred
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:32 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: The purpose of this unit is to locate perl good enough to construct a #!
+?X:
+?MAKE:perlpath: Getfile Oldconfig Loc perl
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:perlpath:
+?S: This variable contains the eventual value of the PERLPATH symbol,
+?S: which contains the absolute location of the perl interpeter.
+?S:.
+?C:PERLPATH:
+?C: This symbol contains the absolute location of the perl interpeter.
+?C:.
+?H:#define PERLPATH "$perlpath" /**/
+?H:.
+: determine perl absolute location
+case "$perlpath" in
+'')
+ if test -f /usr/bin/perl; then
+ dflt=/usr/bin/perl
+ else
+ case "$perl" in
+ */*) dflt="$perl";;
+ *) dflt=/usr/bin/perl;;
+ esac
+ fi
+ ;;
+*) dflt="$perlpath"
+ ;;
+esac
+echo " "
+fn=f~/
+rp="Where is perl located on your system?"
+. ./getfile
+perlpath="$ans"
+
diff --git a/mcon/U/pidtype.U b/mcon/U/pidtype.U
new file mode 100644
index 0000000..e16bfa9
--- /dev/null
+++ b/mcon/U/pidtype.U
@@ -0,0 +1,39 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: pidtype.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:31:27 ram
+?RCS: patch32: now uses new Typedef unit to compute type information
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:33 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:pidtype: Myread Typedef
+?MAKE: -pick add $@ %<
+?S:pidtype:
+?S: This variable defines PIDTYPE to be something like pid_t, int,
+?S: ushort, or whatever type is used to declare process ids in the kernel.
+?S:.
+?C:Pid_t (PIDTYPE):
+?C: This symbol holds the type used to declare process ids in the kernel.
+?C: It can be int, uint, pid_t, etc... It may be necessary to include
+?C: <sys/types.h> to get any typedef'ed information.
+?C:.
+?H:#define Pid_t $pidtype /* PID type */
+?H:.
+: see what type pids are declared as in the kernel
+set pid_t pidtype int stdio.h sys/types.h
+eval $typedef
+dflt="$pidtype"
+echo " "
+rp="What type are process ids on this system declared as?"
+. ./myread
+pidtype="$ans"
+
diff --git a/mcon/U/pkgsrc.U b/mcon/U/pkgsrc.U
new file mode 100644
index 0000000..6a61e80
--- /dev/null
+++ b/mcon/U/pkgsrc.U
@@ -0,0 +1,26 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?MAKE:pkgsrc: src rsrc
+?MAKE: -pick add $@ %<
+?S:pkgsrc:
+?S: This variable holds the absolute path of the package source.
+?S:.
+?C:PACKAGE_SOURCE_DIR:
+?C: Holds the directory name holding the package source.
+?C:.
+?H:#define PACKAGE_SOURCE_DIR "$pkgsrc"
+?H:.
+: define absolute package source directory
+case "$src" in
+/*) pkgsrc=$src;;
+*) pkgsrc=`cd $rsrc; pwd`;;
+esac
+
diff --git a/mcon/U/prefix.U b/mcon/U/prefix.U
new file mode 100644
index 0000000..b773ed0
--- /dev/null
+++ b/mcon/U/prefix.U
@@ -0,0 +1,80 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: prefix.U,v $
+?RCS: Revision 3.0.1.2 1995/01/30 14:44:05 ram
+?RCS: patch49: new prefixexp variable holding a fully expanded prefix
+?RCS: patch49: save off previous prefix value in oldprefix if changed (WED)
+?RCS: patch49: added the INSTALLPREFIX define for C programs to use (WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:31:34 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:prefix prefixexp +oldprefix: Getfile Loc Oldconfig cat package
+?MAKE: -pick add $@ %<
+?S:prefix:
+?S: This variable holds the name of the directory below which the
+?S: user will install the package. Usually, this is /usr/local, and
+?S: executables go in /usr/local/bin, library stuff in /usr/local/lib,
+?S: man pages in /usr/local/man, etc. It is only used to set defaults
+?S: for things in bin.U, mansrc.U, privlib.U, or scriptdir.U.
+?S:.
+?S:prefixexp:
+?S: This variable holds the full absolute path of the directory below
+?S: which the user will install the package. Derived from prefix.
+?S:.
+?S:oldprefix:
+?S: This variable is set non-null if the prefix was previously defined
+?S: and gets set to a new value. Used internally by Configure only.
+?S:.
+?C:INSTALLPREFIX:
+?C: This symbol contains the name of the install prefix for this package.
+?C:.
+?H:#define INSTALLPREFIX "$prefix" /**/
+?H:.
+: determine root of directory hierarchy where package will be installed.
+case "$prefix" in
+'')
+ dflt=`./loc . /usr/local /usr/local /local /opt /usr`
+ ;;
+*)
+ dflt="$prefix"
+ ;;
+esac
+$cat <<EOM
+
+By default, $package will be installed in $dflt/bin, manual
+pages under $dflt/man, etc..., i.e. with $dflt as prefix for
+all installation directories. Typically set to /usr/local, but you
+may choose /usr if you wish to install $package among your system
+binaries. If you wish to have binaries under /bin but manual pages
+under /usr/local/man, that's ok: you will be prompted separately
+for each of the installation directories, the prefix being only used
+to set the defaults.
+
+EOM
+fn=d~
+rp='Installation prefix to use?'
+. ./getfile
+oldprefix=''
+case "$prefix" in
+'') ;;
+*)
+ case "$ans" in
+ "$prefix") ;;
+ *) oldprefix="$prefix";;
+ esac
+ ;;
+esac
+prefix="$ans"
+prefixexp="$ansexp"
+
diff --git a/mcon/U/prefshell.U b/mcon/U/prefshell.U
new file mode 100644
index 0000000..eb02c61
--- /dev/null
+++ b/mcon/U/prefshell.U
@@ -0,0 +1,60 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: prefshell.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 16:28:13 ram
+?RCS: patch36: added SHELL temporary since metalint now sees ${SHELL}
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:11:47 ram
+?RCS: patch10: non-portable var substitution was used (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:34 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:prefshell: cat package Getfile Oldconfig ksh csh bash
+?MAKE: -pick add $@ %<
+?S:prefshell:
+?S: This variable contains the eventual value of the PREFSHELL symbol,
+?S: which contains the full name of the preferred user shell on this
+?S: system. Usual values are /bin/csh, /bin/ksh, /bin/sh.
+?S:.
+?C:PREFSHELL:
+?C: This symbol contains the full name of the preferred user shell on this
+?C: system. Usual values are /bin/csh, /bin/ksh, /bin/sh.
+?C:.
+?H:#define PREFSHELL "$prefshell" /**/
+?H:.
+?T:SHELL
+: find out which shell people like to use most
+case "$prefshell" in
+'')
+ case "$ksh $bash $csh" in
+ */ksh*) dflt="$ksh" ;;
+ */bash*) dflt="$bash" ;;
+ */csh*) dflt="$csh" ;;
+ *) dflt='/bin/sh' ;;
+ esac
+ ;;
+*) dflt="$prefshell";;
+esac
+?X: Some shells (Ultrix) do not understand ${SHELL:-/bin/sh}, sigh!
+$cat <<EOM
+
+Give the full path name of the shell most people like to use on your system.
+This will be used by $package whenever the user wants to get a shell
+escape (for instance) and is not necessarily the same as the shell you are
+currently using (${SHELL-/bin/sh}).
+
+EOM
+fn=f/~
+rp='Preferred shell to be used?'
+. ./getfile
+prefshell=$ans
+
diff --git a/mcon/U/privlib.U b/mcon/U/privlib.U
new file mode 100644
index 0000000..256550c
--- /dev/null
+++ b/mcon/U/privlib.U
@@ -0,0 +1,96 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: privlib.U,v $
+?RCS: Revision 3.0.1.4 1995/09/25 09:17:09 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/30 14:44:23 ram
+?RCS: patch49: can now handle installation prefix changes (from WED)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:31:52 ram
+?RCS: patch32: now uses installation prefix
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:12:34 ram
+?RCS: patch10: added support for /local/lib (WED)
+?RCS: patch10: prompt phrasing made more explicit (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:35 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:privlib privlibexp installprivlib: afs package cat Getfile \
+ Oldconfig Prefixit test
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:privlib:
+?S: This variable contains the eventual value of the PRIVLIB symbol,
+?S: which is the name of the private library for this package. It may
+?S: have a ~ on the front. It is up to the makefile to eventually create
+?S: this directory while performing installation (with ~ substitution).
+?S:.
+?S:privlibexp:
+?S: This variable is the ~name expanded version of privlib, so that you
+?S: may use it directly in Makefiles or shell scripts.
+?S:.
+?S:installprivlib:
+?S: This variable is really the same as privlibexp but may differ on
+?S: those systems using AFS. For extra portability, only this variable
+?S: should be used in makefiles.
+?S:.
+?C:PRIVLIB:
+?C: This symbol contains the name of the private library for this package.
+?C: The library is private in the sense that it needn't be in anyone's
+?C: execution path, but it should be accessible by the world. The program
+?C: should be prepared to do ~ expansion.
+?C:.
+?C:PRIVLIB_EXP:
+?C: This symbol contains the ~name expanded version of PRIVLIB, to be used
+?C: in programs that are not prepared to deal with ~ expansion at run-time.
+?C:.
+?H:#define PRIVLIB "$privlib" /**/
+?H:#define PRIVLIB_EXP "$privlibexp" /**/
+?H:.
+: determine where private executables go
+set dflt privlib lib/$package
+eval $prefixit
+$cat <<EOM
+
+There are some auxiliary files for $package that need to be put into a
+private library directory that is accessible by everyone.
+
+EOM
+fn=d~+
+rp='Pathname where the private library files will reside?'
+. ./getfile
+if $test "X$privlibexp" != "X$ansexp"; then
+ installprivlib=''
+fi
+privlib="$ans"
+privlibexp="$ansexp"
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+private files reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installprivlib" in
+ '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installprivlib";;
+ esac
+ fn=de~
+ rp='Where will private files be installed?'
+ . ./getfile
+ installprivlib="$ans"
+else
+ installprivlib="$privlibexp"
+fi
+
diff --git a/mcon/U/prototype.U b/mcon/U/prototype.U
new file mode 100644
index 0000000..ec65247
--- /dev/null
+++ b/mcon/U/prototype.U
@@ -0,0 +1,118 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: prototype.U,v $
+?RCS: Revision 3.0.1.3 1994/05/06 15:11:49 ram
+?RCS: patch23: ensure cc flags used when looking for prototype support
+?RCS:
+?RCS: Revision 3.0.1.2 1994/01/24 14:15:36 ram
+?RCS: patch16: prototype handling macros now appear only when needed
+?RCS:
+?RCS: Revision 3.0.1.1 1993/08/25 14:03:12 ram
+?RCS: patch6: defines were referring to non-existent VOID symbol
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:36 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:prototype: Myread Oldconfig cat +cc +ccflags rm Setvar
+?MAKE: -pick add $@ %<
+?S:prototype:
+?S: This variable holds the eventual value of CAN_PROTOTYPE, which
+?S: indicates the C compiler can handle funciton prototypes.
+?S:.
+?C:CAN_PROTOTYPE ~ %<:
+?C: If defined, this macro indicates that the C compiler can handle
+?C: function prototypes.
+?C:.
+?C:DOTS:
+?C: This macro is used to specify the ... in function prototypes which
+?C: have arbitrary additional arguments.
+?C:.
+?C:NXT_ARG:
+?C: This macro is used to separate arguments in the declared argument list.
+?C:.
+?C:P_FUNC:
+?C: This macro is used to declare "private" (static) functions.
+?C: It takes three arguments: the function type and name, a parenthesized
+?C: traditional (comma separated) argument list, and the declared argument
+?C: list (in which arguments are separated with NXT_ARG, and additional
+?C: arbitrary arguments are specified with DOTS). For example:
+?C:
+?C: P_FUNC(int foo, (bar, baz), int bar NXT_ARG char *baz[])
+?C:.
+?C:P_FUNC_VOID:
+?C: This macro is used to declare "private" (static) functions that have
+?C: no arguments. The macro takes one argument: the function type and name.
+?C: For example:
+?C:
+?C: P_FUNC_VOID(int subr)
+?C:.
+?C:V_FUNC:
+?C: This macro is used to declare "public" (non-static) functions.
+?C: It takes three arguments: the function type and name, a parenthesized
+?C: traditional (comma separated) argument list, and the declared argument
+?C: list (in which arguments are separated with NXT_ARG, and additional
+?C: arbitrary arguments are specified with DOTS). For example:
+?C:
+?C: V_FUNC(int main, (argc, argv), int argc NXT_ARG char *argv[])
+?C:.
+?C:V_FUNC_VOID:
+?C: This macro is used to declare "public" (non-static) functions that have
+?C: no arguments. The macro takes one argument: the function type and name.
+?C: For example:
+?C:
+?C: V_FUNC_VOID(int fork)
+?C:.
+?C:_ (P):
+?C: This macro is used to declare function parameters for folks who want
+?C: to make declarations with prototypes using a different style than
+?C: the above macros. Use double parentheses. For example:
+?C:
+?C: int main _((int argc, char *argv[]));
+?C:.
+?H:?%<:#$prototype CAN_PROTOTYPE /**/
+?H:?%<:#ifdef CAN_PROTOTYPE
+?H:?NXT_ARG:#define NXT_ARG ,
+?H:?DOTS:#define DOTS , ...
+?H:?V_FUNC:#define V_FUNC(name, arglist, args)name(args)
+?H:?P_FUNC:#define P_FUNC(name, arglist, args)static name(args)
+?H:?V_FUNC_VOID:#define V_FUNC_VOID(name)name(void)
+?H:?P_FUNC_VOID:#define P_FUNC_VOID(name)static name(void)
+?H:?_:#define _(args) args
+?H:?%<:#else
+?H:?NXT_ARG:#define NXT_ARG ;
+?H:?DOTS:#define DOTS
+?H:?V_FUNC:#define V_FUNC(name, arglist, args)name arglist args;
+?H:?P_FUNC:#define P_FUNC(name, arglist, args)static name arglist args;
+?H:?V_FUNC_VOID:#define V_FUNC_VOID(name)name()
+?H:?P_FUNC_VOID:#define P_FUNC_VOID(name)static name()
+?H:?_:#define _(args) ()
+?H:?%<:#endif
+?H:.
+?W:%<:NXT_ARG DOTS V_FUNC P_FUNC V_FUNC_VOID P_FUNC_VOID _
+?LINT:set prototype
+: Cruising for prototypes
+echo " "
+echo "Checking out function prototypes..." >&4
+$cat >prototype.c <<'EOCP'
+int main(int argc, char *argv[]) {
+ exit(0);}
+EOCP
+if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
+ echo "Your C compiler appears to support function prototypes."
+ val="$define"
+else
+ echo "Your C compiler doesn't seem to understand function prototypes."
+ val="$undef"
+fi
+set prototype
+eval $setvar
+$rm -f prototype*
+
diff --git a/mcon/U/ptrsize.U b/mcon/U/ptrsize.U
new file mode 100644
index 0000000..7a903aa
--- /dev/null
+++ b/mcon/U/ptrsize.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: ptrsize.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:28:19 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:37 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:ptrsize: cat rm Myread +cc +ccflags
+?MAKE: -pick add $@ %<
+?S:ptrsize:
+?S: This variable contains the value of the PTRSIZE symbol, which
+?S: indicates to the C program how many bytes there are in a pointer.
+?S:.
+?C:PTRSIZE:
+?C: This symbol contains the size of a pointer, so that the C preprocessor
+?C: can make decisions based on it.
+?C:.
+?H:#define PTRSIZE $ptrsize /**/
+?H:.
+?F:!try
+: check for length of pointer
+echo " "
+case "$ptrsize" in
+'')
+ echo "Checking to see how big your pointers are..." >&4
+ $cat >try.c <<'EOCP'
+#include <stdio.h>
+int main()
+{
+ printf("%d\n", sizeof(char *));
+}
+EOCP
+ if $cc $ccflags -o try try.c >/dev/null 2>&1 ; then
+ dflt=`./try`
+ else
+ dflt='4'
+ echo "(I can't seem to compile the test program. Guessing...)"
+ fi
+ ;;
+*)
+ dflt="$ptrsize"
+ ;;
+esac
+rp="What is the size of a pointer (in bytes)?"
+. ./myread
+ptrsize="$ans"
+$rm -f try.c try
+
diff --git a/mcon/U/randbits.U b/mcon/U/randbits.U
new file mode 100644
index 0000000..16d720d
--- /dev/null
+++ b/mcon/U/randbits.U
@@ -0,0 +1,83 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: randbits.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:19:29 ram
+?RCS: patch61: added <unistd.h> and <stdlib.h> to the C program test
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:38 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit has been somewhat made obsolete with creation of the
+?X: randfunc function (which finds out how to generate random
+?X: numbers between 0 and 1.
+?X:
+?MAKE:randbits: cat rm Myread cc i_unistd i_stdlib
+?MAKE: -pick add $@ %<
+?S:randbits:
+?S: This variable contains the eventual value of the RANDBITS symbol,
+?S: which indicates to the C program how many bits of random number
+?S: the rand() function produces.
+?S:.
+?C:RANDBITS:
+?C: This symbol contains the number of bits of random number the rand()
+?C: function produces. Usual values are 15, 16, and 31.
+?C:.
+?H:#define RANDBITS $randbits /**/
+?H:.
+: check for size of random number generator
+echo " "
+case "$randbits" in
+'')
+ echo "Checking to see how many bits your rand function produces..." >&4
+ $cat >try.c <<EOCP
+#$i_unistd I_UNISTD
+#$i_stdlib I_STDLIB
+#include <stdio.h>
+#ifdef I_UNISTD
+# include <unistd.h>
+#endif
+#ifdef I_STDLIB
+# include <stdlib.h>
+#endif
+EOCP
+ $cat >>try.c <<'EOCP'
+int main()
+{
+ register int i;
+ register unsigned long tmp;
+ register unsigned long max = 0L;
+
+ for (i = 1000; i; i--) {
+ tmp = (unsigned long)rand();
+ if (tmp > max) max = tmp;
+ }
+ for (i = 0; max; i++)
+ max /= 2;
+ printf("%d\n",i);
+}
+EOCP
+ if $cc -o try try.c >/dev/null 2>&1 ; then
+ dflt=`try`
+ else
+ dflt='?'
+ echo "(I can't seem to compile the test program...)"
+ fi
+ ;;
+*)
+ dflt="$randbits"
+ ;;
+esac
+rp='How many bits does your rand() function produce?'
+. ./myread
+randbits="$ans"
+$rm -f try.c try
+
diff --git a/mcon/U/randfunc.U b/mcon/U/randfunc.U
new file mode 100644
index 0000000..af3ba62
--- /dev/null
+++ b/mcon/U/randfunc.U
@@ -0,0 +1,164 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: randfunc.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:39 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This is the new unit that should be used when random
+?X: functions are to be used. It thus makes randbits.U obsolete.
+?X:
+?MAKE:randfunc mrand seedfunc nrandbits: cat +cc rm test Myread Csym
+?MAKE: -pick add $@ %<
+?S:randfunc:
+?S: Indicates the name of the random number function to use.
+?S: Values include drand48, random, and rand. In C programs,
+?S: the 'nrand' macro is defined to generate uniformly distributed
+?S: random numbers over the range [0., 1.] (see mrand and nrand).
+?S:.
+?S:mrand:
+?S: Indicates the macro to be used to generate normalized
+?S: random numbers. Uses randfunc, often divided by
+?S: (double) ((1 << nrandbits) -1) in order to normalize the result.
+?S: In C programs, the macro 'nrand' is maped on mrand.
+?S:.
+?S:seedfunc:
+?S: Indicates the random number generating seed function.
+?S: Values include srand48, srandom, and srand.
+?S:.
+?S:nrandbits:
+?S: Indicates how many bits are produced by the function used to
+?S: generate normalized random numbers.
+?S:.
+?C:nrand:
+?C: This macro is to be used to generate uniformly distributed
+?C: random numbers over the range [0., 1.].
+?C:.
+?C:seednrand:
+?C: This symbol defines the macro to be used in seeding the
+?C: random number generator (see nrand).
+?C:.
+?H:#define nrand() $mrand /**/
+?H:#define seednrand(x) $seedfunc(x) /**/
+?H:.
+?T:cont val
+?LINT:nothere $nrandbits)
+: How can we generate normalized random numbers ?
+echo " "
+case "$randfunc" in
+'')
+ if set drand48 val -f; eval $csym; $val; then
+ dflt="drand48"
+ echo "Good, found drand48()." >&4
+ elif set random val -f; eval $csym; $val; then
+ dflt="random"
+ echo "OK, found random()." >&4
+ else
+ dflt="rand"
+ echo "Yick, looks like I have to use rand()." >&4
+ fi
+ echo " "
+ ;;
+*)
+ dflt="$randfunc"
+ ;;
+esac
+cont=true
+while $test "$cont"; do
+ rp="Use which function to generate random numbers?"
+ . ./myread
+?X: Invalidates nrandbits if the answer is not the default so
+?X: that the value stored in config.sh will not be used when
+?X: we change our random function.
+ if $test "$ans" = "$dflt"; then
+ : null
+ else
+ nrandbits=''
+ fi
+ randfunc="$ans"
+ if set $ans val -f; eval $csym; $val; then
+ cont=''
+ else
+ dflt=n
+ rp="Function $ans does not exists. Use that name anyway?"
+ . ./myread
+ dflt=rand
+ case "$ans" in
+ [yY]*) cont='';;
+ esac
+ fi
+ case "$cont" in
+ '')
+ case "$randfunc" in
+ drand48)
+ mrand="drand48()"
+ seedfunc="srand48"
+ ;;
+ rand*)
+ case "$nrandbits" in
+ '')
+echo "Checking to see how many bits your $randfunc() function produces..." >&4
+ $cat >try.c <<EOCP
+#include <stdio.h>
+int main()
+{
+ register int i;
+ register unsigned long tmp;
+ register unsigned long max = 0L;
+ extern long random();
+
+ for (i = 1000; i; i--) {
+ tmp = (unsigned long)$randfunc();
+ if (tmp > max) max = tmp;
+ }
+ for (i = 0; max; i++)
+ max /= 2;
+ printf("%d\n",i);
+}
+EOCP
+ if $cc -o try try.c >/dev/null 2>&1 ; then
+ dflt=`try`
+ else
+ dflt='?'
+ echo "(I can't seem to compile the test program...)"
+ fi
+ ;;
+ *)
+ dflt="$nrandbits"
+ ;;
+ esac
+ rp="How many bits does your $randfunc() function produce?"
+ . ./myread
+ nrandbits="$ans"
+ $rm -f try.c try
+ mrand="($randfunc() / (double) ((1 << $nrandbits) -1))"
+ seedfunc="srand"
+ ;;
+?X: The following is provided just in case...
+ *)
+ dflt="31"
+ rp="How many bits does your $randfunc() function produce?"
+ . ./myread
+ nrandbits="$ans"
+ seedfunc="s$randfunc"
+ mrand="($randfunc() / (double) ((1 << $nrandbits) -1))"
+ if set $seedfunc val -f; eval $csym; $val; then
+ echo "(Using $seedfunc() to seed random generator)"
+ else
+ echo "(Warning: no $seedfunc() to seed random generator)"
+ seedfunc=rand
+ fi
+ ;;
+ esac
+ ;;
+ esac
+done
+
diff --git a/mcon/U/rcs_branch.U b/mcon/U/rcs_branch.U
new file mode 100644
index 0000000..b53c1af
--- /dev/null
+++ b/mcon/U/rcs_branch.U
@@ -0,0 +1,43 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: rcs_branch.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:40 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:rcs_branch: Myread contains Loc
+?MAKE: -pick add $@ %<
+?S:rcs_branch:
+?S: This variable will hold "true" if rcs can take the -b<revision>
+?S: option, which can make Life Easier on those folks who like to run
+?S: rcsdiff manually.
+?S:.
+?T:xxx
+: Tra la la la la
+echo " "
+echo "Checking to see if RCS understands the -b switch..." >&4
+xxx=`./loc rcs '' $pth`
+case "$xxx" in
+'')
+ rcs_branch=false
+ echo "Oh. You don't seem to have RCS here."
+ ;;
+*)
+ rcs > rcsbranch.out 2>&1
+ if $contains 'b\[rev\]' rcsbranch.out >/dev/null 2>&1 ; then
+ rcs_branch=true
+ echo "Nice! Your RCS is spiffy!"
+ else
+ rcs_branch=false
+ echo "Well, at least you have RCS. You know, a newer version is available."
+ fi
+ ;;
+esac
+
diff --git a/mcon/U/registers.U b/mcon/U/registers.U
new file mode 100644
index 0000000..344ceed
--- /dev/null
+++ b/mcon/U/registers.U
@@ -0,0 +1,103 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: registers.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 16:19:41 ram
+?RCS: patch61: removed empty ?LINT lines
+?RCS:
+?RCS: Revision 3.0.1.1 1994/10/29 16:28:33 ram
+?RCS: patch36: call ./Cppsym explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:41 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:registers reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 reg9 reg10 reg11 \
+ reg12 reg13 reg14 reg15 reg16: awk rm Cppsym Myread Oldconfig
+?MAKE: -pick add $@ %<
+?S:registers:
+?S: This variable contains the number of register declarations paid
+?S: attention to by the C compiler.
+?S:.
+?S:reg1:
+?S: This variable, along with reg2, reg3, etc. contains the eventual
+?S: value for the symbols register1, register2, register3, etc. It has
+?S: either the value "register" or is null.
+?S:.
+?C:register1:
+?C: This symbol, along with register2, register3, etc. is either the word
+?C: "register" or null, depending on whether the C compiler pays attention
+?C: to this many register declarations. The intent is that you don't have
+?C: to order your register declarations in the order of importance, so you
+?C: can freely declare register variables in sub-blocks of code and as
+?C: function parameters. Do not use register<n> more than once per routine.
+?C:.
+?LINT:describe reg2 reg3 reg4 reg5 reg6 reg7 reg8 reg9 reg10 reg11
+?LINT:describe reg12 reg13 reg14 reg15 reg16
+?LINT:known register2 register3 register4 register5 register6 register7
+?LINT:known register8 register9 register10 register11 register12 register13
+?LINT:known register14 register15 register16
+?H:#define register1 $reg1 /**/
+?H:#define register2 $reg2 /**/
+?H:#define register3 $reg3 /**/
+?H:#define register4 $reg4 /**/
+?H:#define register5 $reg5 /**/
+?H:#define register6 $reg6 /**/
+?H:#define register7 $reg7 /**/
+?H:#define register8 $reg8 /**/
+?H:#define register9 $reg9 /**/
+?H:#define register10 $reg10 /**/
+?H:#define register11 $reg11 /**/
+?H:#define register12 $reg12 /**/
+?H:#define register13 $reg13 /**/
+?H:#define register14 $reg14 /**/
+?H:#define register15 $reg15 /**/
+?H:#define register16 $reg16 /**/
+?H:.
+?F:!.foo
+: see how many register declarations we want to use
+case "$registers" in
+'')
+ if ./Cppsym vax; then
+ dflt=6
+ elif ./Cppsym sun mc68000 mips; then
+ dflt=10
+ elif ./Cppsym pyr; then
+ dflt=14
+ elif ./Cppsym ns32000 ns16000; then
+ dflt=5
+ elif ./Cppsym $smallmach; then
+ dflt=3
+ else
+ : if you have any other numbers for me, please send them in
+ dflt=6
+ fi;;
+*) dflt=$registers ;;
+esac
+?LINT:set reg2 reg3 reg4 reg5 reg6 reg7 reg8 reg9 reg10 reg11
+?LINT:set reg12 reg13 reg14 reg15 reg16
+cat <<EOM
+
+Different C compilers on different machines pay attention to different numbers
+of register declarations. About how many register declarations in each routine
+does your C compiler pay attention to? (OK to guess)
+
+EOM
+rp="Maximum register declarations?"
+. ./myread
+registers=$ans
+reg1=''
+$awk "BEGIN { for (i=1; i<=16; i++) printf \"reg%d=''\n\", i}" \
+ </dev/null >.foo
+. ./.foo
+$awk "BEGIN { for (i=1; i<=$registers; i++) printf \"reg%d=register\n\", i}" \
+ </dev/null >.foo
+. ./.foo
+$rm -f .foo
+
diff --git a/mcon/U/rootid.U b/mcon/U/rootid.U
new file mode 100644
index 0000000..4e15e9d
--- /dev/null
+++ b/mcon/U/rootid.U
@@ -0,0 +1,35 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: rootid.U,v $
+?RCS: Revision 3.0.1.1 1995/01/30 14:45:36 ram
+?RCS: patch49: now only prints a single empty line when outputting something
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:42 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:rootid: sed
+?MAKE: -pick add $@ %<
+?S:rootid:
+?S: This variable contains the eventual value of the ROOTID symbol,
+?S: which is the uid of root.
+?S:.
+?C:ROOTID:
+?C: This symbol contains the uid of root, normally 0.
+?C:.
+?H:#define ROOTID $rootid /**/
+?H:.
+: determine root id
+rootid=`$sed -e "/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*"'$'"/\1/" -e "q" -e "}" -e "d" </etc/passwd`
+case "$rootid" in
+'') rootid=0 ;;
+*) echo " "; echo "Root uid = $rootid" >&4 ;;
+esac
+
diff --git a/mcon/U/sbrksmart.U b/mcon/U/sbrksmart.U
new file mode 100644
index 0000000..9b2bccb
--- /dev/null
+++ b/mcon/U/sbrksmart.U
@@ -0,0 +1,85 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sbrksmart.U,v $
+?RCS: Revision 3.0.1.2 1995/01/11 15:35:41 ram
+?RCS: patch45: now sets sbrksmart to undef explicitely when lacking sbrk()
+?RCS: patch45: forgot a cast when using return value from sbrk()
+?RCS:
+?RCS: Revision 3.0.1.1 1994/01/24 14:16:45 ram
+?RCS: patch16: created
+?RCS:
+?MAKE:sbrksmart: cat d_sbrk +cc +ccflags +libs rm
+?MAKE: -pick add $@ %<
+?S:sbrksmart:
+?S: This variable conditionally defines HAS_SMART_SBRK if the sbrk()
+?S: routine honors a negative argument to lower the break value.
+?S:.
+?C:HAS_SMART_SBRK:
+?C: This symbol is defined when the sbrk() system call may be used with
+?C: a negative argument to lower the break value, therefore releasing
+?C: core to the system. If not, you'd probably be better off using the
+?C: mmap() system call.
+?C:.
+?H:#$sbrksmart HAS_SMART_SBRK /**/
+?H:.
+?T:dumb
+?F:!sbrk
+: see whether sbrk can release core to the kernel
+echo " "
+case "$d_sbrk" in
+"$define")
+ echo "Let's see if your sbrk() is smart enough to release core..." >&4
+ $cat > sbrk.c <<'EOC'
+#define INC 256 /* Small enough to be less than a page size */
+
+int main()
+{
+ char *obrk = (char *) sbrk(0);
+ char *nbrk;
+
+ nbrk = (char *) sbrk(INC);
+ if (nbrk == (char *) -1)
+ exit(1); /* Not enough memory */
+ if (nbrk != obrk)
+ exit(2); /* Unreliable sbrk() */
+ nbrk = (char *) sbrk(-INC);
+ if (nbrk == (char *) -1)
+ exit(3); /* May have understood negative arg as huge positive */
+ if (obrk != (char *) sbrk(0))
+ exit(4); /* Not smart, definitely */
+
+ exit(0); /* Ok */
+}
+EOC
+ sbrksmart="$undef"
+ dumb='-- assuming dumb sbrk().'
+ if $cc $ccflags -o sbrk sbrk.c $libs >/dev/null 2>&1; then
+ ./sbrk >/dev/null 2>&1
+ case $? in
+ 0) sbrksmart="$define"
+ echo "Yes, it can be used with negative values." ;;
+ 1) echo "Sorry, not enough memory $dumb" ;;
+ 2) echo "No it's not, and besides it seems to be buggy..." ;;
+ 3) echo "No, it fails with negative values." ;;
+ 4) echo "Nope, your sbrk() is too dumb." ;;
+ *) echo "Err... Unexpected result $dumb" ;;
+ esac
+ else
+ echo "(Could not compile test program $dumb)"
+ fi
+ ;;
+*)
+ echo "Since you don't have sbrk(), let's forget about the smart test!"
+ sbrksmart="$undef"
+ ;;
+esac
+$rm -f sbrk sbrk.* core
+
diff --git a/mcon/U/sbrktype.U b/mcon/U/sbrktype.U
new file mode 100644
index 0000000..a32f1ca
--- /dev/null
+++ b/mcon/U/sbrktype.U
@@ -0,0 +1,44 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sbrktype.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:43 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:sbrktype: Myread Oldconfig Loc contains Findhdr
+?MAKE: -pick add $@ %<
+?S:sbrktype:
+?S: This variable defines sbrktype to be something like caddr_t, char *,
+?S: or whatever type is used to declare sbrk() in the kernel.
+?S:.
+?C:Caddr_t (SBRKTYPE):
+?C: This symbol holds the type of a core address. It is inteded to be used
+?C: to safely declare the return type of system calls like sbrk(). It might
+?C: be necessary to include <sys/types.h> as well.
+?C:.
+?H:#define Caddr_t $sbrktype /* <core address> type */
+?H:.
+: see what type sbrk is declared as in the kernel
+case "$sbrktype" in
+'')
+ if $contains 'caddr_t;' `./findhdr sys/types.h` >/dev/null 2>&1 ; then
+ dflt='caddr_t';
+ else
+ dflt='char *';
+ fi
+ ;;
+*) dflt="$sbrktype"
+ ;;
+esac
+echo " "
+rp="What is the return type of sbrk() on this system?"
+. ./myread
+sbrktype="$ans"
+
diff --git a/mcon/U/scriptdir.U b/mcon/U/scriptdir.U
new file mode 100644
index 0000000..fc1c857
--- /dev/null
+++ b/mcon/U/scriptdir.U
@@ -0,0 +1,110 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: scriptdir.U,v $
+?RCS: Revision 3.0.1.3 1995/09/25 09:17:15 ram
+?RCS: patch59: unit is now forced to the top of Configure, if possible
+?RCS:
+?RCS: Revision 3.0.1.2 1995/01/30 14:46:13 ram
+?RCS: patch49: can now handle installation prefix changes (from WED)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:32:04 ram
+?RCS: patch32: now uses installation prefix
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:45 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:scriptdir scriptdirexp installscript: afs cat test Getfile Loc \
+ Oldconfig +bin Prefixit prefixexp Prefixup
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:scriptdir:
+?S: This variable holds the name of the directory in which the user wants
+?S: to put publicly scripts for the package in question. It is either
+?S: the same directory as for binaries, or a special one that can be
+?S: mounted across different architectures, like /usr/share. Programs
+?S: must be prepared to deal with ~name expansion.
+?S:.
+?S:scriptdirexp:
+?S: This variable is the same as scriptdir, but is filename expanded
+?S: at configuration time, for programs not wanting to bother with it.
+?S:.
+?S:installscript:
+?S: This variable is usually the same as scriptdirexp, unless you are on
+?S: a system running AFS, in which case they may differ slightly. You
+?S: should always use this variable within your makefiles for portability.
+?S:.
+?C:SCRIPTDIR:
+?C: This symbol holds the name of the directory in which the user wants
+?C: to put publicly executable scripts for the package in question. It
+?C: is often a directory that is mounted across diverse architectures.
+?C: Programs must be prepared to deal with ~name expansion.
+?C:.
+?C:SCRIPTDIR_EXP:
+?C: This is the same as SCRIPTDIR, but is filename expanded at
+?C: configuration time, for use in programs not prepared to do
+?C: ~name substitutions at run-time.
+?C:.
+?H:#define SCRIPTDIR "$scriptdir" /**/
+?H:#define SCRIPTDIR_EXP "$scriptdirexp" /**/
+?H:.
+: determine where public executable scripts go
+set scriptdir scriptdir
+eval $prefixit
+case "$scriptdir" in
+'')
+ dflt="$bin"
+ : guess some guesses
+ $test -d /usr/share/scripts && dflt=/usr/share/scripts
+ $test -d /usr/share/bin && dflt=/usr/share/bin
+ $test -d /usr/local/script && dflt=/usr/local/script
+ $test -d $prefixexp/script && dflt=$prefixexp/script
+ set dflt
+ eval $prefixup
+ ;;
+*) dflt="$scriptdir"
+ ;;
+esac
+$cat <<EOM
+
+Some installations have a separate directory just for executable scripts so
+that they can mount it across multiple architectures but keep the scripts in
+one spot. You might, for example, have a subdirectory of /usr/share for this.
+Or you might just lump your scripts in with all your other executables.
+
+EOM
+fn=d~
+rp='Where do you keep publicly executable scripts?'
+. ./getfile
+if $test "X$ansexp" != "X$scriptdirexp"; then
+ installscript=''
+fi
+scriptdir="$ans"
+scriptdirexp="$ansexp"
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+scripts reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installscript" in
+ '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installscript";;
+ esac
+ fn=de~
+ rp='Where will public scripts be installed?'
+ . ./getfile
+ installscript="$ans"
+else
+ installscript="$scriptdirexp"
+fi
+
diff --git a/mcon/U/selecttype.U b/mcon/U/selecttype.U
new file mode 100644
index 0000000..4b1eefe
--- /dev/null
+++ b/mcon/U/selecttype.U
@@ -0,0 +1,109 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: selecttype.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 16:20:09 ram
+?RCS: patch61: always include <sys/select.h> when available for test
+?RCS:
+?RCS: Revision 3.0.1.2 1995/07/25 14:14:06 ram
+?RCS: patch56: removed harmful spaces in assignment
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 07:06:31 ram
+?RCS: patch30: created by ADO
+?RCS:
+?MAKE:selecttype: cat +cc +ccflags rm Oldconfig Myread \
+ d_fd_set d_select d_socket i_systime i_sysselct
+?MAKE: -pick add $@ %<
+?S:selecttype:
+?S: This variable holds the type used for the 2nd, 3rd, and 4th
+?S: arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET
+?S: is defined, and 'int *' otherwise. This is only useful if you
+?S: have select(), naturally.
+?S:.
+?C:Select_fd_set_t:
+?C: This symbol holds the type used for the 2nd, 3rd, and 4th
+?C: arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET
+?C: is defined, and 'int *' otherwise. This is only useful if you
+?C: have select(), of course.
+?C:.
+?H:#define Select_fd_set_t $selecttype /**/
+?H:.
+?T:xxx yyy
+: check for type of arguments to select. This will only really
+: work if the system supports prototypes and provides one for
+: select.
+case "$d_select" in
+$define)
+ : Make initial guess
+ case "$selecttype" in
+ ''|' ')
+ case "$d_fd_set" in
+ $define) xxx='fd_set *' ;;
+ *) xxx='int *' ;;
+ esac
+ ;;
+ *) xxx="$selecttype"
+ ;;
+ esac
+ : backup guess
+ case "$xxx" in
+ 'fd_set *') yyy='int *' ;;
+ 'int *') yyy='fd_set *' ;;
+ esac
+
+ $cat <<EOM
+
+Checking to see what type of arguments are expected by select().
+EOM
+ $cat >try.c <<EOCP
+#$i_systime I_SYS_TIME
+#$i_sysselct I_SYS_SELECT
+#$d_socket HAS_SOCKET
+#include <sys/types.h>
+#ifdef HAS_SOCKET
+#include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
+#endif
+#ifdef I_SYS_TIME
+#include <sys/time.h>
+#endif
+#ifdef I_SYS_SELECT
+#include <sys/select.h>
+#endif
+int main()
+{
+ int width;
+ Select_fd_set_t readfds;
+ Select_fd_set_t writefds;
+ Select_fd_set_t exceptfds;
+ struct timeval timeout;
+ select(width, readfds, writefds, exceptfds, &timeout);
+ exit(0);
+}
+EOCP
+ if $cc $ccflags -c -DSelect_fd_set_t="$xxx" try.c >/dev/null 2>&1 ; then
+ selecttype="$xxx"
+ echo "Your system uses $xxx for the arguments to select." >&4
+ elif $cc $ccflags -c -DSelect_fd_set_t="$yyy" try.c >/dev/null 2>&1 ; then
+ selecttype="$yyy"
+ echo "Your system uses $yyy for the arguments to select." >&4
+ else
+ rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
+ dflt="$xxx"
+ . ./myread
+ selecttype="$ans"
+ fi
+ $rm -f try.[co]
+ ;;
+*) selecttype='int *'
+ ;;
+esac
+
diff --git a/mcon/U/sh.U b/mcon/U/sh.U
new file mode 100644
index 0000000..f0b9965
--- /dev/null
+++ b/mcon/U/sh.U
@@ -0,0 +1,92 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1997, Chip Salzenberg
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sh.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:20:13 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:sh: Head
+?MAKE: -pick wipe $@ %<
+?S:sh:
+?S: This variable contains the full pathname of the shell used
+?S: on this system to execute Bourne shell scripts. Usually, this will be
+?S: /bin/sh, though it's possible that some systems will have /bin/ksh,
+?S: /bin/pdksh, /bin/ash, /bin/bash, or even something such as
+?S: D:/bin/sh.exe.
+?S: This unit comes before Options.U, so you can't set sh with a -D
+?S: option, though you can override this (and startsh)
+?S: with -O -Dsh=/bin/whatever -Dstartsh=whatever
+?S:.
+?C:SH_PATH:
+?C: This symbol contains the full pathname to the shell used on this
+?C: on this system to execute Bourne shell scripts. Usually, this will be
+?C: /bin/sh, though it's possible that some systems will have /bin/ksh,
+?C: /bin/pdksh, /bin/ash, /bin/bash, or even something such as
+?C: D:/bin/sh.exe.
+?C:.
+?H:#define SH_PATH "$sh" /**/
+?H:.
+?T:xxx try pth p SYSTYPE
+?LINT:extern maintloc maintname
+?X:
+?X: Be quiet unless something unusual happens because this gets
+?X: loaded up even before options are processed.
+?X: Can't use ./loc because that depends on startsh, which, in turn
+?X: depends on this unit.
+?X:
+: Find the basic shell for Bourne shell scripts
+case "$sh" in
+'')
+?X: SYSTYPE is for some older MIPS systems.
+?X: I do not know if it is still needed.
+ case "$SYSTYPE" in
+ *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
+ *) xxx='/bin/sh';;
+ esac
+ if test -f "$xxx"; then
+ sh="$xxx"
+ else
+ : Build up a list and do a single loop so we can 'break' out.
+ pth=`echo $PATH | sed -e "s/$p_/ /g"`
+ for xxx in sh bash ksh pdksh ash; do
+ for p in $pth; do
+ try="$try ${p}/${xxx}"
+ done
+ done
+ for xxx in $try; do
+ if test -f "$xxx"; then
+ sh="$xxx"
+ break
+ elif test -f "$xxx$_exe"; then
+ sh="$xxx"
+ break
+ elif test -f "$xxx.exe"; then
+ sh="$xxx"
+ break
+ fi
+ done
+ fi
+ ;;
+esac
+
+?X: fd 4 isn't open yet...
+case "$sh" in
+'') cat >&2 <<EOM
+$me: Fatal Error: I can't find a Bourne Shell anywhere.
+
+Usually it's in /bin/sh. How did you even get this far?
+Please contact me (<$maintname>) at <$maintloc> and
+we'll try to straighten this all out.
+EOM
+ exit 1
+ ;;
+esac
+
diff --git a/mcon/U/shm_for.U b/mcon/U/shm_for.U
new file mode 100644
index 0000000..922f742
--- /dev/null
+++ b/mcon/U/shm_for.U
@@ -0,0 +1,118 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: shm_for.U,v $
+?RCS: Revision 3.0.1.1 1994/10/29 16:28:37 ram
+?RCS: patch36: call ./Cppsym explicitely instead of relying on PATH
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:46 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:shm_for shm_att shm_lim: Cppsym Myread ipc uname
+?MAKE: -pick add $@ %<
+?S:shm_for:
+?S: This variable tells us the type of machine we're expecting the
+?S: shared memory code to run on. The value is available to C programs
+?S: in the C_SHM_FOR manifest.
+?S:.
+?S:shm_att:
+?S: This variable tells us where a shared memory segment should be
+?S: attached. Good values are HIGH, LOW, and ZERO.
+?S:.
+?S:shm_lim:
+?S: This variable tells us if shared memory attached HIGH should
+?S: have an upper limit.
+?S:.
+?X: ----------------------------------------------------------
+?X: It's a potential lose to define anything beginning with SHM...
+?X: At least we can think that S_ stands for "String version of ..." -- HMS
+?X: ----------------------------------------------------------
+?C:S_SHM_FOR ~ %<:
+?C: This symbol identifies what we chose for the target system's
+?C: default shared memory configuration parameters.
+?C:.
+?C:S_SHM_ATT ~ %<:
+?C: This symbol holds the default "place" to attach shared memory.
+?C: Values are "HIGH", "ZERO", and "LOW".
+?C:.
+?C:S_SHM_LIM ~ %<:
+?C: This symbol holds the default upper bound address limit if shared
+?C: memory is attached HIGH. If zero, there is no upper limit.
+?C:.
+?H:?%<:#ifdef SERVE_SHM
+?H:?%<:#define S_SHM_FOR "$shm_for"
+?H:?%<:#define S_SHM_ATT "$shm_att"
+?H:?%<:#define S_SHM_LIM "$shm_lim"
+?H:?%<:#endif
+?H:.
+?W:%<:S_SHM_FOR S_SHM_ATT S_SHM_LIM
+: see how to attach shared memory
+echo " "
+echo "Deciding how to attach shared memory..." >&4
+
+case "$ipc" in
+shm)
+ shm_for='Default case'
+ shm_att='HIGH'
+ shm_lim='0x0'
+ if ./Cppsym tower32 tower32_600; then
+ echo "NCR Towers are usually normal..."
+ : echo "Oh, an NCR Tower."
+ : This works for the 600
+ shm_for='NCR Tower 32'
+ shm_att='LOW'
+ else
+ case "$uname" in
+ */uname)
+ case "`uname -m`" in
+ ACS??68*)
+ echo "Oh, an Altos 3068."
+ shm_for='Altos 3068:'
+ shm_lim='0x800000'
+ ;;
+ esac
+ ;;
+ *)
+ echo "Looks normal to me..."
+ ;;
+ esac
+ fi
+
+ dflt="$shm_for"
+ rp='Description of shared memory configuration?'
+ . ./myread
+ shm_for="$ans"
+
+ dflt="$shm_att"
+ rp='Where should shared memory be attached?'
+ . ./myread
+ shm_att="$ans"
+
+ case "$shm_att" in
+ HIGH)
+ dflt="$shm_lim"
+ rp='What is the upper address limit for shared memory?'
+ . ./myread
+ shm_lim="$ans"
+ ;;
+ *)
+ shm_lim=''
+ ;;
+ esac
+ ;;
+
+*)
+ echo "but you aren't using shared memory so I won't bother." >&4
+ shm_for='NOT CONFIGURED'
+ shm_att='NONE'
+ shm_lim='-1'
+ ;;
+esac
+
diff --git a/mcon/U/sig_name.U b/mcon/U/sig_name.U
new file mode 100644
index 0000000..b18e30b
--- /dev/null
+++ b/mcon/U/sig_name.U
@@ -0,0 +1,157 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sig_name.U,v $
+?RCS: Revision 3.0.1.5 1997/02/28 16:21:25 ram
+?RCS: patch61: brand new algorithm for sig_name and (new!) sig_num
+?RCS:
+?RCS: Revision 3.0.1.4 1995/07/25 14:14:54 ram
+?RCS: patch56: added <asm/signal.h> lookup for linux
+?RCS:
+?RCS: Revision 3.0.1.3 1995/05/12 12:24:11 ram
+?RCS: patch54: now looks for <linux/signal.h> too (ADO)
+?RCS:
+?RCS: Revision 3.0.1.2 1994/06/20 07:06:57 ram
+?RCS: patch30: final echo was missing to close awk-printed string
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:17:55 ram
+?RCS: patch23: signal list now formatted to avoid scroll-ups (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:47 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:sig_name sig_name_init sig_num sig_num_init sig_count sig_size: \
+ awk Signal Oldconfig rm
+?MAKE: -pick add $@ %<
+?S:sig_name:
+?S: This variable holds the signal names, space separated. The leading
+?S: SIG in signal name is removed. A ZERO is prepended to the
+?S: list. This is currently not used.
+?S:.
+?S:sig_name_init:
+?S: This variable holds the signal names, enclosed in double quotes and
+?S: separated by commas, suitable for use in the SIG_NAME definition
+?S: below. A "ZERO" is prepended to the list, and the list is
+?S: terminated with a plain 0. The leading SIG in signal names
+?S: is removed. See sig_num.
+?S:.
+?S:sig_num:
+?S: This variable holds the signal numbers, space separated. A ZERO is
+?S: prepended to the list (corresponding to the fake SIGZERO), and
+?S: the list is terminated with a 0. Those numbers correspond to
+?S: the value of the signal listed in the same place within the
+?S: sig_name list.
+?S:.
+?S:sig_num_init:
+?S: This variable holds the signal numbers, enclosed in double quotes and
+?S: separated by commas, suitable for use in the SIG_NUM definition
+?S: below. A "ZERO" is prepended to the list, and the list is
+?S: terminated with a plain 0.
+?S:.
+?S:sig_count (sig_name.U):
+?S: This variable holds a number larger than the largest valid
+?S: signal number. This is usually the same as the NSIG macro.
+?S:.
+?S:sig_size:
+?S: This variable contains the number of elements of the sig_name
+?S: and sig_num arrays, excluding the final NULL entry.
+?S:.
+?C:SIG_NAME:
+?C: This symbol contains a list of signal names in order of
+?C: signal number. This is intended
+?C: to be used as a static array initialization, like this:
+?C: char *sig_name[] = { SIG_NAME };
+?C: The signals in the list are separated with commas, and each signal
+?C: is surrounded by double quotes. There is no leading SIG in the signal
+?C: name, i.e. SIGQUIT is known as "QUIT".
+?C: Gaps in the signal numbers (up to NSIG) are filled in with NUMnn,
+?C: etc., where nn is the actual signal number (e.g. NUM37).
+?C: The signal number for sig_name[i] is stored in sig_num[i].
+?C: The last element is 0 to terminate the list with a NULL. This
+?C: corresponds to the 0 at the end of the sig_num list.
+?C:.
+?C:SIG_NUM:
+?C: This symbol contains a list of signal numbers, in the same order as the
+?C: SIG_NAME list. It is suitable for static array initialization, as in:
+?C: int sig_num[] = { SIG_NUM };
+?C: The signals in the list are separated with commas, and the indices
+?C: within that list and the SIG_NAME list match, so it's easy to compute
+?C: the signal name from a number or vice versa at the price of a small
+?C: dynamic linear lookup.
+?C: Duplicates are allowed, but are moved to the end of the list.
+?C: The signal number corresponding to sig_name[i] is sig_number[i].
+?C: if (i < NSIG) then sig_number[i] == i.
+?C: The last element is 0, corresponding to the 0 at the end of
+?C: the sig_name list.
+?C:.
+?C:SIG_COUNT:
+?C: This variable contains a number larger than the largest
+?C: signal number. This is usually the same as the NSIG macro.
+?C:.
+?C:SIG_SIZE:
+?C: This variable contains the number of elements of the sig_name
+?C: and sig_num arrays, excluding the final NULL entry.
+?C:.
+?H:#define SIG_NAME $sig_name_init /**/
+?H:#define SIG_NUM $sig_num_init /**/
+?H:#define SIG_COUNT $sig_count /**/
+?H:#define SIG_SIZE $sig_size /**/
+?H:.
+?T:i doinit
+?F:!= !signal_cmd
+?X: signal.cmd creates a file signal.lst which has two columns:
+?X: NAME number, e.g.
+?X: HUP 1
+?X: The list is sorted on signal number, with duplicates moved to
+?X: the end..
+: generate list of signal names
+echo " "
+case "$sig_name_init" in
+'') doinit=yes ;;
+*) case "$sig_num_init" in
+ ''|*,*) doinit=yes ;;
+ esac ;;
+esac
+case "$doinit" in
+yes)
+ echo "Generating a list of signal names and numbers..." >&4
+ . ./signal_cmd
+ sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
+ sig_name=`$awk 'BEGIN { printf "ZERO " }
+ !/^NSIG/ { printf "%s ", $1 }' signal.lst`
+ sig_num=`$awk 'BEGIN { printf "0 " }
+ !/^NSIG/ { printf "%d ", $2 }' signal.lst`
+ sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
+ !/^NSIG/ { printf "\"%s\", ", $1 }
+ END { printf "0\n" }' signal.lst`
+ sig_num_init=`$awk 'BEGIN { printf "0, " }
+ !/^NSIG/ { printf "%d, ", $2}
+ END { printf "0\n"}' signal.lst`
+ ;;
+esac
+echo "The following $sig_count signals are available:"
+echo " "
+echo $sig_name | $awk \
+'BEGIN { linelen = 0 }
+{
+ for (i = 1; i <= NF; i++) {
+ name = "SIG" $i " "
+ linelen = linelen + length(name)
+ if (linelen > 70) {
+ printf "\n"
+ linelen = length(name)
+ }
+ printf "%s", name
+ }
+ printf "\n"
+}'
+sig_size=`echo $sig_name | awk '{print NF}'`
+$rm -f signal signal.c signal.awk signal.lst signal_cmd
+
diff --git a/mcon/U/sitearch.U b/mcon/U/sitearch.U
new file mode 100644
index 0000000..47116dc
--- /dev/null
+++ b/mcon/U/sitearch.U
@@ -0,0 +1,94 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sitearch.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:21:30 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:sitearch sitearchexp installsitearch: afs cat Getfile \
+ Oldconfig Prefixit prefix test archname sitelib
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:sitearch:
+?S: This variable contains the eventual value of the SITEARCH symbol,
+?S: which is the name of the private library for this package. It may
+?S: have a ~ on the front. It is up to the makefile to eventually create
+?S: this directory while performing installation (with ~ substitution).
+?S:.
+?S:sitearchexp:
+?S: This variable is the ~name expanded version of sitearch, so that you
+?S: may use it directly in Makefiles or shell scripts.
+?S:.
+?S:installsitearch:
+?S: This variable is really the same as sitearchexp but may differ on
+?S: those systems using AFS. For extra portability, only this variable
+?S: should be used in makefiles.
+?S:.
+?C:SITEARCH:
+?C: This symbol contains the name of the private library for this package.
+?C: The library is private in the sense that it needn't be in anyone's
+?C: execution path, but it should be accessible by the world. The program
+?C: should be prepared to do ~ expansion.
+?C: The standard distribution will put nothing in this directory.
+?C: Individual sites may place their own extensions and modules in
+?C: this directory.
+?C:.
+?C:SITEARCH_EXP:
+?C: This symbol contains the ~name expanded version of SITEARCH, to be used
+?C: in programs that are not prepared to deal with ~ expansion at run-time.
+?C:.
+?H:#define SITEARCH "$sitearch" /**/
+?H:#define SITEARCH_EXP "$sitearchexp" /**/
+?H:.
+?T:xxx
+: determine where site specific architecture-dependent libraries go.
+xxx=`echo $sitelib/$archname | sed 's!^$prefix!!'`
+: xxx is usuually lib/site_perl/archname.
+set sitearch sitearch none
+eval $prefixit
+case "$sitearch" in
+'') dflt="$sitelib/$archname" ;;
+*) dflt="$sitearch" ;;
+esac
+$cat <<EOM
+
+The installation process will also create a directory for
+architecture-dependent site-specific extensions and modules.
+
+EOM
+fn=nd~+
+rp='Pathname for the site-specific architecture-dependent library files?'
+. ./getfile
+if $test "X$sitearchexp" != "X$ansexp"; then
+ installsitearch=''
+fi
+sitearch="$ans"
+sitearchexp="$ansexp"
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+private files reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installsitearch" in
+ '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installsitearch";;
+ esac
+ fn=de~
+ rp='Where will private files be installed?'
+ . ./getfile
+ installsitearch="$ans"
+else
+ installsitearch="$sitearchexp"
+fi
+
diff --git a/mcon/U/sitelib.U b/mcon/U/sitelib.U
new file mode 100644
index 0000000..f2ba295
--- /dev/null
+++ b/mcon/U/sitelib.U
@@ -0,0 +1,97 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Andy Dougherty
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sitelib.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:21:35 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:sitelib sitelibexp installsitelib: afs cat Getfile \
+ Oldconfig Prefixit test privlib package sed
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:sitelib:
+?S: This variable contains the eventual value of the SITELIB symbol,
+?S: which is the name of the private library for this package. It may
+?S: have a ~ on the front. It is up to the makefile to eventually create
+?S: this directory while performing installation (with ~ substitution).
+?S:.
+?S:sitelibexp:
+?S: This variable is the ~name expanded version of sitelib, so that you
+?S: may use it directly in Makefiles or shell scripts.
+?S:.
+?S:installsitelib:
+?S: This variable is really the same as sitelibexp but may differ on
+?S: those systems using AFS. For extra portability, only this variable
+?S: should be used in makefiles.
+?S:.
+?C:SITELIB:
+?C: This symbol contains the name of the private library for this package.
+?C: The library is private in the sense that it needn't be in anyone's
+?C: execution path, but it should be accessible by the world. The program
+?C: should be prepared to do ~ expansion.
+?C: The standard distribution will put nothing in this directory.
+?C: Individual sites may place their own extensions and modules in
+?C: this directory.
+?C:.
+?C:SITELIB_EXP:
+?C: This symbol contains the ~name expanded version of SITELIB, to be used
+?C: in programs that are not prepared to deal with ~ expansion at run-time.
+?C:.
+?H:#define SITELIB "$sitelib" /**/
+?H:#define SITELIB_EXP "$sitelibexp" /**/
+?H:.
+?T:prog
+: determine where site specific libraries go.
+set sitelib sitelib
+eval $prefixit
+case "$sitelib" in
+'')
+?X: remove any trailing -3.0 or other version indification
+ prog=`echo $package | $sed 's/-*[0-9.]*$//'`
+ dflt="$privlib/site_$prog" ;;
+*) dflt="$sitelib" ;;
+esac
+$cat <<EOM
+
+The installation process will also create a directory for
+site-specific extensions and modules. Some users find it convenient
+to place all local files in this directory rather than in the main
+distribution directory.
+
+EOM
+fn=d~+
+rp='Pathname for the site-specific library files?'
+. ./getfile
+if $test "X$sitelibexp" != "X$ansexp"; then
+ installsitelib=''
+fi
+sitelib="$ans"
+sitelibexp="$ansexp"
+if $afs; then
+ $cat <<EOM
+
+Since you are running AFS, I need to distinguish the directory in which
+private files reside from the directory in which they are installed (and from
+which they are presumably copied to the former directory by occult means).
+
+EOM
+ case "$installsitelib" in
+ '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
+ *) dflt="$installsitelib";;
+ esac
+ fn=de~
+ rp='Where will private files be installed?'
+ . ./getfile
+ installsitelib="$ans"
+else
+ installsitelib="$sitelibexp"
+fi
+
diff --git a/mcon/U/sizetype.U b/mcon/U/sizetype.U
new file mode 100644
index 0000000..2556023
--- /dev/null
+++ b/mcon/U/sizetype.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: sizetype.U,v $
+?RCS: Revision 3.0.1.1 1994/08/29 16:32:10 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:sizetype: Myread Typedef
+?MAKE: -pick add $@ %<
+?S:sizetype:
+?S: This variable defines sizetype to be something like size_t,
+?S: unsigned long, or whatever type is used to declare length
+?S: parameters for string functions.
+?S:.
+?C:Size_t:
+?C: This symbol holds the type used to declare length parameters
+?C: for string functions. It is usually size_t, but may be
+?C: unsigned long, int, etc. It may be necessary to include
+?C: <sys/types.h> to get any typedef'ed information.
+?C:.
+?H:#define Size_t $sizetype /* length paramater for string functions */
+?H:.
+: see what type is used for size_t
+set size_t sizetype 'unsigned int' stdio.h sys/types.h
+eval $typedef
+dflt="$sizetype"
+echo " "
+rp="What type is used for the length parameter for string functions?"
+. ./myread
+sizetype="$ans"
+
diff --git a/mcon/U/so.U b/mcon/U/so.U
new file mode 100644
index 0000000..38121d6
--- /dev/null
+++ b/mcon/U/so.U
@@ -0,0 +1,50 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: so.U,v $
+?RCS: Revision 3.0.1.2 1994/10/29 16:30:04 ram
+?RCS: patch36: now tells user how he can suppress shared lib lookup (ADO)
+?RCS: patch36: removed echo at the top, since it's now in the here-doc (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/06/20 07:07:02 ram
+?RCS: patch30: created
+?RCS:
+?X:
+?X: This unit computes the shared-object / shared-lib extension
+?X:
+?MAKE:so: test libpth Loc Myread Oldconfig cat
+?MAKE: -pick add $@ %<
+?S:so:
+?S: This variable holds the extension used to identify shared libraries
+?S: (also known as shared objects) on the system. Usually set to 'so'.
+?S:.
+?T: xxx
+: compute shared library extension
+case "$so" in
+'')
+ if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
+ dflt='sl'
+ else
+ dflt='so'
+ fi
+ ;;
+*) dflt="$so";;
+esac
+$cat <<EOM
+
+On some systems, shared libraries may be available. Answer 'none' if
+you want to suppress searching of shared libraries for the remainder
+of this configuration.
+
+EOM
+rp='What is the file extension used for shared libraries?'
+. ./myread
+so="$ans"
+
diff --git a/mcon/U/sockopt.U b/mcon/U/sockopt.U
new file mode 100644
index 0000000..1a6fc35
--- /dev/null
+++ b/mcon/U/sockopt.U
@@ -0,0 +1,88 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sockopt.U,v $
+?RCS: Revision 3.0.1.1 1995/07/25 14:16:14 ram
+?RCS: patch56: obsoleted KEEPALIVE in favor of CAN_KEEPALIVE for consistency
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:48 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_keepalive: cat rm contains +cc +ccflags socketlib sockethdr \
+ d_oldsock libs Oldconfig Setvar Findhdr
+?MAKE: -pick add $@ %<
+?S:d_keepalive:
+?S: This symbol conditionally defines CAN_KEEPALIVE which indicates to the C
+?S: program that setsockopt SO_KEEPALIVE will work properly.
+?S:.
+?C:CAN_KEEPALIVE (KEEPALIVE):
+?C: This symbol if defined indicates to the C program that the SO_KEEPALIVE
+?C: option of setsockopt() will work as advertised in the manual.
+?C:.
+?H:#$d_keepalive CAN_KEEPALIVE /**/
+?H:.
+?F:!socket
+?LINT:set d_keepalive
+: see if setsockopt with SO_KEEPALIVE works as advertised
+echo " "
+case "$d_oldsock" in
+"$undef")
+ if $contains SO_KEEPALIVE `./findhdr sys/socket.h` \
+ /dev/null >/dev/null 2>&1
+ then
+ echo "OK, let's see if SO_KEEPALIVE works as advertised..." >&4
+ $cat > socket.c <<EOP
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+
+int main()
+{
+ int s = socket(AF_INET, SOCK_STREAM, 0);
+ if (s == -1)
+ exit(1);
+ if (-1 == setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, 0, 0))
+ exit(2);
+ exit(0);
+}
+EOP
+ if $cc $ccflags $sockethdr -o socket socket.c $libs \
+ $socketlib >/dev/null 2>&1; then
+ ./socket >/dev/null 2>&1
+ case $? in
+ 0) echo "Yes, it does!"
+ val="$define";;
+ 1) $cat <<EOM
+(Something went wrong -- Assuming SO_KEEPALIVE is broken)
+EOM
+ val="$undef";;
+ 2) echo "No, it doesn't. Don't trust your manuals!!"
+ val="$undef";;
+ esac
+ else
+ cat <<EOM
+(I can't compile the test program -- Assuming SO_KEEPALIVE is broken)
+EOM
+ val="$undef"
+ fi
+ else
+ echo "Strange!! You have BSD 4.2 sockets but no SO_KEEPALIVE option."
+ val="$undef"
+ fi;;
+*) cat <<EOM
+As you have an old socket interface, you can't have heard of SO_KEEPALIVE.
+EOM
+ val="$undef";;
+esac
+set d_keepalive
+eval $setvar
+$rm -f socket socket.c
+
diff --git a/mcon/U/spitshell.U b/mcon/U/spitshell.U
new file mode 100644
index 0000000..1692b52
--- /dev/null
+++ b/mcon/U/spitshell.U
@@ -0,0 +1,107 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: spitshell.U,v $
+?RCS: Revision 3.0.1.4 1997/02/28 16:22:12 ram
+?RCS: patch61: removed useless chatter as this is now done very early
+?RCS:
+?RCS: Revision 3.0.1.3 1995/01/11 15:37:01 ram
+?RCS: patch45: use 'test -f' instead of 'test -r' for exec-only cat progs (WED)
+?RCS: patch45: protected "sh -c" within backquotes for Linux and SGI
+?RCS:
+?RCS: Revision 3.0.1.2 1994/08/29 16:33:00 ram
+?RCS: patch32: don't create spitshell under the UU directory
+?RCS: patch32: allow for cat in /bin or /usr/bin
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:12:58 ram
+?RCS: patch10: made #!-failure message more friendly (WAD)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:49 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:spitshell shsharp sharpbang: eunicefix sh Head
+?MAKE: -pick add $@ %<
+?S:spitshell:
+?S: This variable contains the command necessary to spit out a runnable
+?S: shell on this system. It is either cat or a grep -v for # comments.
+?S:.
+?S:shsharp:
+?S: This variable tells further Configure units whether your sh can
+?S: handle # comments.
+?S:.
+?S:sharpbang:
+?S: This variable contains the string #! if this system supports that
+?S: construct.
+?S:.
+?F:!sharp
+?T:xcat p
+?X: "paths" comes from Head
+?LINT:extern paths _exe
+: see if sh knows # comments
+?X: This is loaded up early, so avoid being chatty.
+?X: echo " "
+?X: echo "Checking your $sh to see if it knows about # comments..." >&2
+if `$sh -c '#' >/dev/null 2>&1`; then
+?X: echo "Your $sh handles # comments correctly."
+ shsharp=true
+ spitshell=cat
+?X: echo " "
+?X: echo "Okay, let's see if #! works on this system..."
+ xcat=/bin/cat
+ test -f $xcat$_exe || xcat=/usr/bin/cat
+ if test ! -f $xcat$_exe; then
+ for p in `echo $PATH | sed -e "s/$p_/ /g"` $paths; do
+ if test -f $p/cat$_exe; then
+ xcat=$p/cat
+ break
+ fi
+ done
+ if test ! -f $xcat$_exe; then
+ echo "Can't find cat anywhere!"
+ exit 1
+ fi
+ fi
+ echo "#!$xcat" >sharp
+ $eunicefix sharp
+ chmod +x sharp
+ ./sharp > today 2>/dev/null
+ if test -s today; then
+?X: echo "It does."
+ sharpbang='#!'
+ else
+ echo "#! $xcat" > sharp
+ $eunicefix sharp
+ chmod +x sharp
+ ./sharp > today 2>/dev/null
+ if test -s today; then
+?X: echo "It does."
+ sharpbang='#! '
+ else
+?X: echo "Okay, let's see if #! works on this system..."
+?X: echo "It's just a comment."
+ sharpbang=': use '
+ fi
+ fi
+else
+ echo " "
+ echo "Your $sh doesn't grok # comments--I will strip them later on."
+ shsharp=false
+?X: The spitshell script will be perused, so leave it out the UU directory
+ cd ..
+ echo "exec grep -v '^[ ]*#'" >spitshell
+ chmod +x spitshell
+ $eunicefix spitshell
+ spitshell=`pwd`/spitshell
+ cd UU
+ echo "I presume that if # doesn't work, #! won't work either!"
+ sharpbang=': use '
+fi
+rm -f sharp today
+
diff --git a/mcon/U/src.U b/mcon/U/src.U
new file mode 100644
index 0000000..e939a4c
--- /dev/null
+++ b/mcon/U/src.U
@@ -0,0 +1,92 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1996, Cygnus Support
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Tom Tromey <tromey@cygnus.com>
+?RCS:
+?RCS: $Log: src.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:23:54 ram
+?RCS: patch61: created
+?RCS:
+?MAKE:src +rsrc: Options package contains
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:src (srcdir):
+?S: This variable holds the (possibly relative) path of the package source.
+?S: It is up to the Makefile to use this variable and set VPATH accordingly
+?S: to find the sources remotely. Use $pkgsrc to have an absolute path.
+?S:.
+?S:rsrc (relsrcdir):
+?S: This variable holds a potentially relative path to the package
+?S: source. The contents are correct for the configuration environment,
+?S: i.e. there might be an extra .. prepended to get out of the UU dir.
+?S: Configure units should use this, not the src variable.
+?S:.
+: Find the path to the source tree
+case "$src" in
+'') case "$0" in
+ */*)
+ src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
+ ;;
+ *) src='.';;
+ esac;;
+esac
+case "$src" in
+'') src=/
+ rsrc=/
+ ;;
+/*) rsrc="$src";;
+*) rsrc="../$src";;
+esac
+?X:
+?X: Now check whether we have found the right source tree (i.e. the one for the
+?X: package we're abount to configure). The original unit from Tom Tromey forced
+?X: the user to pick a unique file from his distribution, and we were merely
+?X: checking the existence of that file. I prefer to rely on Configure (which
+?X: we know *is* present since this unit is part of it!) and look for the
+?X: definition of the package variable, making sure it's the same as ours.
+?X: If it matches, we know we found the right source tree. -- RAM, 15/03/96
+?X:
+if test -f $rsrc/Configure && \
+ $contains "^package='$package'\$" $rsrc/Configure >/dev/null 2>&1
+then
+ : found it, so we are ok.
+else
+?X: Otherwise try "." and up to 4 parent directories...
+?X: Note that we prepend a ".." to get out of the configuration environment.
+ rsrc=''
+ for src in . .. ../.. ../../.. ../../../..; do
+ if test -f ../$src/Configure && \
+ $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
+ then
+ rsrc=../$src
+ break
+ fi
+ done
+fi
+case "$rsrc" in
+'')
+ cat <<EOM >&4
+
+Sorry, I can't seem to locate the source dir for $package. Please start
+Configure with an explicit path -- i.e. /some/path/Configure.
+
+EOM
+ exit 1
+ ;;
+?X: Don't echo anything if the sources are in . -- they should know already ;-)
+?X: In that case, rsrc is ../. since we lookup from within UU
+../.) rsrc='..';;
+*)
+ echo " "
+ echo "Sources for $package found in \"$src\"." >&4
+ ;;
+esac
+
diff --git a/mcon/U/ssizetype.U b/mcon/U/ssizetype.U
new file mode 100644
index 0000000..70dcc69
--- /dev/null
+++ b/mcon/U/ssizetype.U
@@ -0,0 +1,91 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Original Author: Andy Dougherty <doughera@lafcol.lafayette.edu>
+?RCS:
+?RCS: $Log: ssizetype.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 16:24:21 ram
+?RCS: patch61: integrated perl5 concerns for mis-configured sfio
+?RCS:
+?RCS: Revision 3.0.1.2 1994/10/29 16:30:28 ram
+?RCS: patch36: added ?F: line for metalint file checking
+?RCS: patch36: added 'ldflags' to the test compile line (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/08/29 16:33:06 ram
+?RCS: patch32: created by ADO
+?RCS:
+?MAKE:ssizetype: Myread Typedef sizetype cat rm \
+ +cc +optimize +ccflags +ldflags +libs _o
+?MAKE: -pick add $@ %<
+?S:ssizetype:
+?S: This variable defines ssizetype to be something like ssize_t,
+?S: long or int. It is used by functions that return a count
+?S: of bytes or an error condition. It must be a signed type.
+?S: We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
+?S:.
+?C:SSize_t:
+?C: This symbol holds the type used by functions that return
+?C: a count of bytes or an error condition. It must be a signed type.
+?C: It is usually ssize_t, but may be long or int, etc.
+?C: It may be necessary to include <sys/types.h> or <unistd.h>
+?C: to get any typedef'ed information.
+?C: We will pick a type such that sizeof(SSize_t) == sizeof(Size_t).
+?C:.
+?H:#define SSize_t $ssizetype /* signed count of bytes */
+?H:.
+?F:!ssize.out !ssize
+: see what type is used for signed size_t
+set ssize_t ssizetype int stdio.h sys/types.h
+eval $typedef
+dflt="$ssizetype"
+?X: Now check out whether sizeof(SSize_t) == sizeof(Size_t)
+$cat > ssize.c <<EOM
+#include <stdio.h>
+#include <sys/types.h>
+#define Size_t $sizetype
+#define SSize_t $dflt
+int main()
+{
+ if (sizeof(Size_t) == sizeof(SSize_t))
+ printf("$dflt\n");
+ else if (sizeof(Size_t) == sizeof(int))
+ printf("int\n");
+ else
+ printf("long\n");
+ fflush(stdout);
+ exit(0);
+}
+EOM
+echo " "
+?X: If $libs contains -lsfio, and sfio is mis-configured, then it
+?X: sometimes (apparently) runs and exits with a 0 status, but with no
+?X: output!. Thus we check with test -s whether we actually got any
+?X: output. I think it has to do with sfio's use of _exit vs. exit,
+?X: but I don't know for sure. --Andy Dougherty 1/27/97.
+if $cc $optimize $ccflags $ldflags -o ssize ssize.c $libs > /dev/null 2>&1 &&
+ ./ssize > ssize.out 2>/dev/null && test -s ssize.out ; then
+ ssizetype=`$cat ssize.out`
+ echo "I'll be using $ssizetype for functions returning a byte count." >&4
+else
+ $cat >&4 <<EOM
+Help! I can't compile and run the ssize_t test program: please enlighten me!
+(This is probably a misconfiguration in your system or libraries, and
+you really ought to fix it. Still, I'll try anyway.)
+
+I need a type that is the same size as $sizetype, but is guaranteed to
+be signed. Common values are ssize_t, int and long.
+
+EOM
+ rp="What signed type is the same size as $sizetype?"
+ . ./myread
+ ssizetype="$ans"
+fi
+$rm -f ssize ssize$_o ssize.*
+
diff --git a/mcon/U/startperl.U b/mcon/U/startperl.U
new file mode 100644
index 0000000..dbc6dfb
--- /dev/null
+++ b/mcon/U/startperl.U
@@ -0,0 +1,95 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: startperl.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:25:06 ram
+?RCS: patch61: warn them if the #! line is too long for their OS
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:50 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:startperl: cat rm sharpbang perlpath d_portable Myread
+?MAKE: -pick add $@ %<
+?S:startperl:
+?S: This variable contains the string to put on the front of a perl
+?S: script to make sure (hopefully) that it runs with perl and not some
+?S: shell. Of course, that leading line must be followed by the classical
+?S: perl idiom:
+?S: eval 'exec perl -S $0 ${1+"$@"}'
+?S: if $running_under_some_shell;
+?S: to guarantee perl startup should the shell execute the script. Note
+?S: that this magic incatation is not understood by csh.
+?S:.
+?C:STARTPERL:
+?C: This symbol is the string that should be put on the front of a
+?C: perl script to make sure (hopefully) that it runs with perl and
+?C: not under some shell. That line should be followed by the classical
+?C: invocation magic:
+?C: eval 'exec perl -S $0 ${1+"$@"}'
+?C: if $running_under_some_shell;
+?C: to guarantee perl startup should the shell execute the script at first.
+?C:.
+?H:#define STARTPERL "$startperl"
+?H:.
+?T:pdflt
+?F:!xtry
+: figure out how to guarantee perl startup
+case "$sharpbang" in
+*!)
+?X:
+?X: Make sure the #!$perlpath magic incantation indeed works on this
+?X: system... It might not if the length of the #! hook is greater
+?X: than some hardwired kernel limit. -- RAM, 15/03/96
+?X:
+ $cat >xtry <<EOP
+#!$perlpath
+system("exit 0");
+EOP
+ chmod a+x xtry
+ if ./xtry >/dev/null 2>&1; then
+ $cat <<EOH
+
+I can use the #! construct to start perl on your system. This will make
+startup of perl scripts faster, but may cause problems if you want to share
+those scripts and perl is not in a standard place (/usr/bin/perl) on all your
+platforms. The alternative is to force a shell by starting the script with a
+single ':' character.
+
+EOH
+ pdflt=y
+ else
+ $cat <<EOH
+
+I could use the #! construct to start perl on your system, but using
+ #!$perlpath
+would be too long for your kernel to grok. Indeed, most systems do
+limit the size of the leading #! string to 32 characters.
+
+EOH
+ pdflt=n
+ fi
+ $rm -f xtry
+ case "$startperl" in
+ *!*) dflt=y;;
+ '') case "$d_portable" in
+ "$define") dflt=n;;
+ *) dflt=$pdflt;;
+ esac;;
+ *) dflt=n;;
+ esac
+ rp='Shall I use #! to start up perl?'
+ . ./myread
+ case "$ans" in
+ y*|Y*) startperl="#!$perlpath";;
+ *) startperl=": # use perl";;
+ esac;;
+*) startperl=": # use perl";;
+esac
+
diff --git a/mcon/U/startsh.U b/mcon/U/startsh.U
new file mode 100644
index 0000000..b118449
--- /dev/null
+++ b/mcon/U/startsh.U
@@ -0,0 +1,50 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: startsh.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:25:31 ram
+?RCS: patch61: avoid needless chatter since this is now done very early
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:51 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:startsh: sh sharpbang eunicefix
+?MAKE: -pick add $@ %<
+?S:startsh:
+?S: This variable contains the string to put on the front of a shell
+?S: script to make sure (hopefully) that it runs with sh and not some
+?S: other shell.
+?S:.
+?F:!sharp
+: figure out how to guarantee sh startup
+?X: Avoid needless chatter since this is now done very early.
+?X: echo " "
+?X: echo "Checking out how to guarantee sh startup..." >&2
+case "$startsh" in
+'') startsh=${sharpbang}${sh} ;;
+*)
+?X: echo "Let's see if '$startsh' works..." ;;
+esac
+cat >sharp <<EOSS
+$startsh
+set abc
+test "$?abc" != 1
+EOSS
+
+chmod +x sharp
+$eunicefix sharp
+if ./sharp; then
+ : echo "Yup, it does."
+else
+ echo "Hmm... '$startsh' does not guarantee sh startup..."
+ echo "You may have to fix up the shell scripts to make sure $sh runs them."
+fi
+rm -f sharp
+
diff --git a/mcon/U/stdchar.U b/mcon/U/stdchar.U
new file mode 100644
index 0000000..d2328a0
--- /dev/null
+++ b/mcon/U/stdchar.U
@@ -0,0 +1,40 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: stdchar.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:52 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:stdchar: contains Findhdr cppstdin cppminus rm
+?MAKE: -pick add $@ %<
+?S:stdchar:
+?S: This variable conditionally defines STDCHAR to be the type of char
+?S: used in stdio.h. It has the values "unsigned char" or "char".
+?S:.
+?C:STDCHAR:
+?C: This symbol is defined to be the type of char used in stdio.h.
+?C: It has the values "unsigned char" or "char".
+?C:.
+?H:#define STDCHAR $stdchar /**/
+?H:.
+?F:!stdioh
+: see what type of char stdio uses.
+echo " "
+?X: untangle the #include nest
+echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
+if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
+ echo "Your stdio uses unsigned chars." >&4
+ stdchar="unsigned char"
+else
+ echo "Your stdio uses signed chars." >&4
+ stdchar="char"
+fi
+$rm -f stdioh
+
diff --git a/mcon/U/sunscanf.U b/mcon/U/sunscanf.U
new file mode 100644
index 0000000..a16fdaa
--- /dev/null
+++ b/mcon/U/sunscanf.U
@@ -0,0 +1,55 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sunscanf.U,v $
+?RCS: Revision 3.0 1993/08/18 12:09:54 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:sunscanf: cat rm Myread +cc +ccflags test Setvar
+?MAKE: -pick add $@ %<
+?S:sunscanf:
+?S: This variable is set if this system runs with the Sun version
+?S: of scanf.
+?S:.
+?C:SUNSCANF:
+?C: This variable is set if this system runs with the Sun version
+?C: of scanf.
+?C:.
+?H:#$sunscanf SUNSCANF /**/
+?H:.
+?LINT:set sunscanf
+: check to see what kinda scanf your using.
+echo " "
+echo "Checking to see what flavor of scanf you have..." >&4
+$cat >scanf.c <<'EOCP'
+int main()
+{
+ float value;
+
+ sscanf("4.5","%g",&value);
+ printf("%d\n", value == 4.5);
+}
+EOCP
+if $cc $ccflags -o scanf scanf.c >/dev/null 2>&1 ; then
+ if $test `scanf` = 0; then
+ echo "Hmm.. seems your not running the USG flavor.."
+ val="$undef"
+ else
+ echo "Uh... your running the USG flavor of scanf."
+ val="$define"
+ fi
+else
+ echo "(I can't seem to compile the test program... Guessing)"
+ val="$undef"
+fi
+set sunscanf
+eval $setvar
+$rm -f scanf*
+
diff --git a/mcon/U/sysman.U b/mcon/U/sysman.U
new file mode 100644
index 0000000..6f50e5d
--- /dev/null
+++ b/mcon/U/sysman.U
@@ -0,0 +1,50 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: sysman.U,v $
+?RCS: Revision 3.0.1.2 1994/06/20 07:08:43 ram
+?RCS: patch30: now explicitely states that /usr/man/man1 is the default
+?RCS: patch30: added /usr/local/man/man1 to the search list
+?RCS:
+?RCS: Revision 3.0.1.1 1993/09/13 16:13:50 ram
+?RCS: patch10: added support for /local/man/man1 (WAD)
+?RCS: patch10: added temporary syspath variable to cut down on line length
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:55 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:sysman: test Loc Oldconfig
+?MAKE: -pick add $@ %<
+?S:sysman:
+?S: This variable holds the place where the manual is located on this
+?S: system. It is not the place where the user wants to put his manual
+?S: pages. Rather it is the place where Configure may look to find manual
+?S: for unix commands (section 1 of the manual usually). See mansrc.
+?S:.
+?T:syspath
+: determine where manual pages are on this system
+echo " "
+case "$sysman" in
+'')
+ syspath='/usr/share/man/man1 /usr/man/man1'
+ syspath="$syspath /usr/man/mann /usr/man/manl /usr/man/local/man1"
+ syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
+ syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
+ syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
+ syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
+ sysman=`./loc . /usr/man/man1 $syspath`
+ ;;
+esac
+if $test -d "$sysman"; then
+ echo "System manual is in $sysman." >&4
+else
+ echo "Could not find manual pages in source form." >&4
+fi
+
diff --git a/mcon/U/trnl.U b/mcon/U/trnl.U
new file mode 100644
index 0000000..cfdda60
--- /dev/null
+++ b/mcon/U/trnl.U
@@ -0,0 +1,59 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 1998 Andy Dougherty
+?RCS:
+?RCS: Original author Jarkko Hietaniemi <jhi@iki.fi>
+?RCS: Merged into dist by Andy Dougherty July 13, 1998
+?RCS:
+?MAKE:trnl: Nothing
+?MAKE: -pick add $@ %<
+?S:trnl:
+?S: This variable contains the value to be passed to the tr(1)
+?S: command to transliterate a newline. Typical values are
+?S: '\012' and '\n'. This is needed for EBCDIC systems where
+?S: newline is not necessarily '\012'.
+?S:.
+?T: DJGPP
+: Find the appropriate value for a newline for tr
+echo " "
+?X: We can't use $tr since that would cause a circular dependency via Myread
+?X: dos djgpp uses '\015\012', but reportedly is happy with '\012' in the
+?X: tr command. I don't know why it passes the '\n' test but later
+?X: refuses to work correctly with it. --AD 6/14/98
+if test -n "$DJGPP"; then
+ trnl='\012'
+fi
+if test X"$trnl" = X; then
+ case "`echo foo | tr '\n' x 2>/dev/null`" in
+ foox) trnl='\n' ;;
+ esac
+fi
+if test X"$trnl" = X; then
+ case "`echo foo | tr '\012' x 2>/dev/null`" in
+ foox) trnl='\012' ;;
+ esac
+fi
+if test X"$trnl" = X; then
+ case "`echo foo | tr '\r\n' xy 2>/dev/null`" in
+ fooxy) trnl='\n\r' ;;
+ esac
+fi
+if test X"$trnl" = X; then
+ cat <<EOM >&2
+
+$me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
+
+EOM
+ exit 1
+else
+ echo "We'll use '$trnl' to transliterate a newline."
+fi
+
diff --git a/mcon/U/uidtype.U b/mcon/U/uidtype.U
new file mode 100644
index 0000000..6ac2aeb
--- /dev/null
+++ b/mcon/U/uidtype.U
@@ -0,0 +1,57 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: uidtype.U,v $
+?RCS: Revision 3.0.1.3 1994/08/29 16:33:25 ram
+?RCS: patch32: now uses new Typedef unit to compute type information
+?RCS:
+?RCS: Revision 3.0.1.2 1994/06/20 07:09:36 ram
+?RCS: patch30: comment for uidtype referred to the obsoleted symbol
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/13 15:28:27 ram
+?RCS: patch27: made conformant to its gidtype.U companion
+?RCS: patch27: question now explicitely mentions getuid()
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:56 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:uidtype: Myread Typedef Findhdr
+?MAKE: -pick add $@ %<
+?S:uidtype:
+?S: This variable defines Uid_t to be something like uid_t, int,
+?S: ushort, or whatever type is used to declare user ids in the kernel.
+?S:.
+?C:Uid_t (UIDTYPE):
+?C: This symbol holds the type used to declare user ids in the kernel.
+?C: It can be int, ushort, uid_t, etc... It may be necessary to include
+?C: <sys/types.h> to get any typedef'ed information.
+?C:.
+?H:#define Uid_t $uidtype /* UID type */
+?H:.
+?T:xxx
+: see what type uids are declared as in the kernel
+set uid_t uidtype xxx stdio.h sys/types.h
+eval $typedef
+case "$uidtype" in
+xxx)
+ xxx=`./findhdr sys/user.h`
+ set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
+ case $1 in
+ unsigned) dflt="$1 $2" ;;
+ *) dflt="$1" ;;
+ esac
+ ;;
+*) dflt="$uidtype";;
+esac
+echo " "
+rp="What is the type for user ids returned by getuid()?"
+. ./myread
+uidtype="$ans"
+
diff --git a/mcon/U/usenm.U b/mcon/U/usenm.U
new file mode 100644
index 0000000..a868af5
--- /dev/null
+++ b/mcon/U/usenm.U
@@ -0,0 +1,144 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: usenm.U,v $
+?RCS: Revision 3.0.1.1 1997/02/28 16:26:40 ram
+?RCS: patch61: don't use nm with the GNU C library
+?RCS: patch61: added support for Linux shared libs
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:57 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:usenm runnm nm_opt nm_so_opt: cat test Myread Oldconfig grep \
+ d_gnulibc nm egrep rsrc osname Guess
+?MAKE: -pick add $@ %<
+?S:usenm:
+?S: This variable contains 'true' or 'false' depending whether the
+?S: nm extraction is wanted or not.
+?S:.
+?S:runnm:
+?S: This variable contains 'true' or 'false' depending whether the
+?S: nm extraction should be performed or not, according to the value
+?S: of usenm and the flags on the Configure command line.
+?S:.
+?S:nm_opt:
+?S: This variable holds the options that may be necessary for nm.
+?S:.
+?S:nm_so_opt:
+?S: This variable holds the options that may be necessary for nm
+?S: to work on a shared library but that can not be used on an
+?S: archive library. Currently, this is only used by Linux, where
+?S: nm --dynamic is *required* to get symbols from an ELF library which
+?S: has been stripped, but nm --dynamic is *fatal* on an archive library.
+?S: Maybe Linux should just always set usenm=false.
+?S:.
+: see if nm is to be used to determine whether a symbol is defined or not
+?X: If there is enough enquiries, it might be worth to wait for the nm
+?X: extraction. Otherwise, the C compilations might be a better deal.
+?X:
+?X: Don't bother if we're using GNU libc -- skimo
+case "$usenm" in
+'')
+ dflt=''
+ case "$d_gnulibc" in
+ "$define")
+ echo " "
+ echo "$nm probably won't work on the GNU C Library." >&4
+ dflt=n
+ ;;
+ esac
+ case "$dflt" in
+ '')
+ if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
+ echo " "
+ echo "Whoops! This is an AIX system without /lib/syscalls.exp!" >&4
+ echo "'nm' won't be sufficient on this system." >&4
+ dflt=n
+ fi
+ ;;
+ esac
+ case "$dflt" in
+ '')
+ if ./gnu; then
+ echo " "
+ echo "Hmm... A GNU system without a GNU C Library? Weird..." >&4
+ dflt=n
+ else
+ dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
+ if $test $dflt -gt 20; then
+ dflt=y
+ else
+ dflt=n
+ fi
+ fi
+ ;;
+ esac
+ ;;
+*)
+ case "$usenm" in
+ true|$define) dflt=y;;
+ *) dflt=n;;
+ esac
+ ;;
+esac
+$cat <<EOM
+
+I can use $nm to extract the symbols from your C libraries. This
+is a time consuming task which may generate huge output on the disk (up
+to 3 megabytes) but that should make the symbols extraction faster. The
+alternative is to skip the 'nm' extraction part and to compile a small
+test program instead to determine whether each symbol is present. If
+you have a fast C compiler and/or if your 'nm' output cannot be parsed,
+this may be the best solution.
+
+EOM
+rp='Shall I use nm to extract C symbols from the libraries?'
+. ./myread
+case "$ans" in
+[Nn]*) usenm=false;;
+*) usenm=true;;
+esac
+
+?X: Name extraction is to be run if 'nm' usage is wanted and if no -r flag
+?X: was provided to configure (in which case we simply re-use the previous
+?X: values).
+runnm=$usenm
+case "$reuseval" in
+true) runnm=false;;
+esac
+
+: nm options which may be necessary
+case "$nm_opt" in
+'') if $test -f /mach_boot; then
+ nm_opt='' # Mach
+ elif $test -d /usr/ccs/lib; then
+ nm_opt='-p' # Solaris (and SunOS?)
+ elif $test -f /dgux; then
+ nm_opt='-p' # DG-UX
+ elif $test -f /lib64/rld; then
+ nm_opt='-p' # 64-bit Irix
+ else
+ nm_opt=''
+ fi;;
+esac
+
+?X: nm options which may be necessary for shared libraries but illegal
+?X: for archive libraries. Thank you, Linux.
+case "$nm_so_opt" in
+'') case "$osname" in
+ *linux*)
+ if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
+ nm_so_opt='--dynamic'
+ fi
+ ;;
+ esac
+ ;;
+esac
+
diff --git a/mcon/U/usesocks.U b/mcon/U/usesocks.U
new file mode 100644
index 0000000..cd30e4d
--- /dev/null
+++ b/mcon/U/usesocks.U
@@ -0,0 +1,46 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Copyright (c) 1999 Jarkko Hietaniemi
+?RCS:
+?MAKE:usesocks: Myread Oldconfig Setvar spackage package
+?MAKE: -pick add $@ %<
+?Y:TOP
+?S:usesocks:
+?S: This variable conditionally defines the USE_SOCKS symbol,
+?S: and indicates that Perl should be built to use SOCKS.
+?S:.
+?C:USE_SOCKS:
+?C: This symbol, if defined, indicates that Perl should
+?C: be built to use socks.
+?C:.
+?H:?%<:#$usesocks USE_SOCKS /**/
+?H:.
+?D:usesocks=''
+?LINT:set usesocks
+: check for requested SOCKS support
+case "$usesocks" in
+$define|true|[yY]*) dflt='y';;
+*) dflt='n';;
+esac
+cat <<EOM
+
+$spackage can be built to use the SOCKS proxy protocol library.
+If this doesn't make any sense to you, just accept the default '$dflt'.
+EOM
+rp="Build $package for SOCKS?"
+. ./myread
+case "$ans" in
+y|Y) val="$define" ;;
+*) val="$undef" ;;
+esac
+set usesocks
+eval $setvar
+
diff --git a/mcon/U/usrinc.U b/mcon/U/usrinc.U
new file mode 100644
index 0000000..4db8078
--- /dev/null
+++ b/mcon/U/usrinc.U
@@ -0,0 +1,93 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: usrinc.U,v $
+?RCS: Revision 3.0.1.3 1997/02/28 16:27:12 ram
+?RCS: patch61: don't ask for the include path unless they are on a MIPS
+?RCS:
+?RCS: Revision 3.0.1.2 1995/05/12 12:24:36 ram
+?RCS: patch54: ensure that ./mips always exists (ADO)
+?RCS:
+?RCS: Revision 3.0.1.1 1994/05/06 15:18:31 ram
+?RCS: patch23: ensure usrinc value is preserved accross sessions (WED)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:58 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:usrinc incpath mips_type: test cat echo n c Getfile Guess \
+ Oldconfig eunicefix contains rm
+?MAKE: -pick add $@ %<
+?S:usrinc:
+?S: This variable holds the path of the include files, which is
+?S: usually /usr/include. It is mainly used by other Configure units.
+?S:.
+?S:incpath:
+?S: This variable must preceed the normal include path to get hte
+?S: right one, as in "$incpath/usr/include" or "$incpath/usr/lib".
+?S: Value can be "" or "/bsd43" on mips.
+?S:.
+?S:mips_type:
+?S: This variable holds the environment type for the mips system.
+?S: Possible values are "BSD 4.3" and "System V".
+?S:.
+?D:usrinc='/usr/include'
+?LINT:create mips
+?T:xxx_prompt
+?F:./mips
+: What should the include directory be ?
+echo " "
+$echo $n "Hmm... $c"
+dflt='/usr/include'
+incpath=''
+?X: mips_type is used later, to add -DSYSTYPE_BSD43 to cppflags if needed.
+mips_type=''
+?X:
+?X: Cannot put the following in Guess, or we get a circular dependency.
+?X:
+if $test -f /bin/mips && /bin/mips; then
+ echo "Looks like a MIPS system..."
+ $cat >usr.c <<'EOCP'
+#ifdef SYSTYPE_BSD43
+/bsd43
+#endif
+EOCP
+ if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
+ dflt='/bsd43/usr/include'
+ incpath='/bsd43'
+ mips_type='BSD 4.3'
+ else
+ mips_type='System V'
+ fi
+ $rm -f usr.c usr.out
+ echo "and you're compiling with the $mips_type compiler and libraries."
+ xxx_prompt=y
+ echo "exit 0" >mips
+else
+ echo "Doesn't look like a MIPS system."
+ xxx_prompt=n
+ echo "exit 1" >mips
+fi
+chmod +x mips
+$eunicefix mips
+case "$usrinc" in
+'') ;;
+*) dflt="$usrinc";;
+esac
+case "$xxx_prompt" in
+y) fn=d/
+ echo " "
+ rp='Where are the include files you want to use?'
+ . ./getfile
+ usrinc="$ans"
+ ;;
+*) usrinc="$dflt"
+ ;;
+esac
+
diff --git a/mcon/U/vaproto.U b/mcon/U/vaproto.U
new file mode 100644
index 0000000..8ae9674
--- /dev/null
+++ b/mcon/U/vaproto.U
@@ -0,0 +1,65 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Orginal Author: Graham Stoney <greyham@research.canon.oz.au>
+?RCS:
+?RCS: $Log: vaproto.U,v $
+?RCS: Revision 3.0.1.1 1994/01/24 14:17:16 ram
+?RCS: patch16: definition of _V now appears only when needed
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:09:59 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:vaproto: prototype i_stdarg Setvar
+?MAKE: -pick add $@ %<
+?S:vaproto:
+?S: This variable conditionally defines CAN_VAPROTO on systems supporting
+?S: prototype declaration of functions with a variable number of
+?S: arguments. See also prototype.
+?S:.
+?C:CAN_VAPROTO ~ %<:
+?C: This variable is defined on systems supporting prototype declaration
+?C: of functions with a variable number of arguments.
+?C:.
+?C:_V:
+?C: This macro is used to declare function parameters in prototypes for
+?C: functions with a variable number of parameters. Use double parentheses.
+?C: For example:
+?C:
+?C: int printf _V((char *fmt, ...));
+?C:
+?C: Remember to use the plain simple _() macro when declaring a function
+?C: with no variable number of arguments, since it might be possible to
+?C: have a non-effect _V() macro and still get prototypes via _().
+?C:.
+?H:?%<:#$vaproto CAN_VAPROTO /**/
+?H:?_V:#ifdef CAN_VAPROTO
+?H:?_V:#define _V(args) args
+?H:?_V:#else
+?H:?_V:#define _V(args) ()
+?H:?_V:#endif
+?H:.
+?W:%<:_V
+?LINT:set vaproto
+: see if prototypes support variable argument declarations
+echo " "
+case "$prototype$i_stdarg" in
+$define$define)
+ echo "It appears we'll be able to prototype varargs functions." >&4
+ val="$define"
+ ;;
+*)
+ echo "Too bad... We won't be using prototyped varargs functions..." >&4
+ val="$undef"
+ ;;
+esac
+set vaproto
+eval $setvar
+
diff --git a/mcon/U/voidflags.U b/mcon/U/voidflags.U
new file mode 100644
index 0000000..6ca70fe
--- /dev/null
+++ b/mcon/U/voidflags.U
@@ -0,0 +1,168 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: voidflags.U,v $
+?RCS: Revision 3.0.1.2 1997/02/28 16:27:58 ram
+?RCS: patch61: don't prompt them if the void support is high enough for us
+?RCS:
+?RCS: Revision 3.0.1.1 1995/01/11 15:37:44 ram
+?RCS: patch45: cosmetic change to avoid spurious blank lines when using -s
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:10:01 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:voidflags defvoidused: cat sed rm contains +cc +ccflags package \
+ Oldconfig Myread
+?MAKE: -pick add $@ %<
+?S:voidflags:
+?S: This variable contains the eventual value of the VOIDFLAGS symbol,
+?S: which indicates how much support of the void type is given by this
+?S: compiler. See VOIDFLAGS for more info.
+?S:.
+?S:defvoidused:
+?S: This variable contains the default value of the VOIDUSED symbol (15).
+?S:.
+?X: Exceptionally, we have to explicitely alias the symbol name for
+?X: config_h.SH, otherwise the comment would not appear.
+?C:VOIDFLAGS ~ %<:
+?C: This symbol indicates how much support of the void type is given by this
+?C: compiler. What various bits mean:
+?C:
+?C: 1 = supports declaration of void
+?C: 2 = supports arrays of pointers to functions returning void
+?C: 4 = supports comparisons between pointers to void functions and
+?C: addresses of void functions
+?C: 8 = suports declaration of generic void pointers
+?C:
+?C: The package designer should define VOIDUSED to indicate the requirements
+?C: of the package. This can be done either by #defining VOIDUSED before
+?C: including config.h, or by defining defvoidused in Myinit.U. If the
+?C: latter approach is taken, only those flags will be tested. If the
+?C: level of void support necessary is not present, defines void to int.
+?C:.
+?H:?%<:#ifndef VOIDUSED
+?H:?%<:#define VOIDUSED $defvoidused
+?H:?%<:#endif
+?H:?%<:#define VOIDFLAGS $voidflags
+?H:?%<:#if (VOIDFLAGS & VOIDUSED) != VOIDUSED
+?H:?%<:#define void int /* is void to be avoided? */
+?H:?%<:#define M_VOID /* Xenix strikes again */
+?H:?%<:#endif
+?H:.
+?W:%<:void
+?F:!.out !try.c !flags
+?LINT:usefile .out flags try.c
+?INIT:: full support for void wanted by default
+?INIT:defvoidused=15
+?INIT:
+?LINT:known void M_VOID VOIDUSED
+: check for void type
+echo " "
+echo "Checking to see how well your C compiler groks the void type..." >&4
+$cat >flags <<EOM
+
+ Support flag bits are:
+ 1: basic void declarations.
+ 2: arrays of pointers to functions returning void.
+ 4: operations between pointers to and addresses of void functions.
+ 8: generic void pointers.
+
+EOM
+case "$voidflags" in
+'')
+ $cat >try.c <<'EOCP'
+#if TRY & 1
+void sub() {
+#else
+sub() {
+#endif
+ extern void moo(); /* function returning void */
+ void (*goo)(); /* ptr to func returning void */
+#if TRY & 8
+ void *hue; /* generic ptr */
+#endif
+#if TRY & 2
+ void (*foo[10])();
+#endif
+
+#if TRY & 4
+ if(goo == moo) {
+ exit(0);
+ }
+#endif
+ exit(0);
+}
+int main() { sub(); }
+EOCP
+?X: This unit used to use cc -S in those tests to try to speed up things, but
+?X: unfortunately, AIX 3.2 does not support this option.
+ if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
+ voidflags=$defvoidused
+ echo "Good. It appears to support void to the level $package wants."
+ if $contains warning .out >/dev/null 2>&1; then
+ echo "However, you might get some warnings that look like this:"
+ $sed -e 's/^/ /' .out
+ fi
+ else
+echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
+ $cat >&4 flags
+ $rm -f flags
+ if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
+ echo "It supports 1..."
+ if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
+ echo "It also supports 2..."
+ if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
+ voidflags=7
+ echo "And it supports 4 but not 8 definitely."
+ else
+ echo "It doesn't support 4..."
+ if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
+ voidflags=11
+ echo "But it supports 8."
+ else
+ voidflags=3
+ echo "Neither does it support 8."
+ fi
+ fi
+ else
+ echo "It does not support 2..."
+ if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
+ voidflags=13
+ echo "But it supports 4 and 8."
+ else
+ if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
+ voidflags=5
+ echo "And it supports 4 but has not heard about 8."
+ else
+ echo "However it supports 8 but not 4."
+ fi
+ fi
+ fi
+ else
+ echo "There is no support at all for void."
+ voidflags=0
+ fi
+ fi
+esac
+?X: Only prompt user if support does not match the level we want
+case "$voidflags" in
+"$defvoidused")
+ echo "Good. I already know it supports void to the level $package wants."
+ ;;
+*)
+ dflt="$voidflags";
+ test -f flags && $cat flags
+ rp="Your void support flags add up to what?"
+ . ./myread
+ voidflags="$ans"
+ ;;
+esac
+$rm -f try.* .out flags
+
diff --git a/mcon/U/warnflags.U b/mcon/U/warnflags.U
new file mode 100644
index 0000000..0f36821
--- /dev/null
+++ b/mcon/U/warnflags.U
@@ -0,0 +1,55 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: Orginal Author: Graham Stoney <greyham@research.canon.oz.au>
+?RCS:
+?RCS: $Log: warnflags.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:02 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:warnflags: cat cc contains Myread Guess Oldconfig Findhdr
+?MAKE: -pick add $@ %<
+?S:warnflags:
+?S: This variable contains any additional C compiler flags to generate
+?S: warnings from the compiler. It is up to the Makefile to use this.
+?S:.
+: offer additional warning flags for compilation
+$cat <<EOH
+
+You may wish to compile with extra compiler warnings enabled.
+Note that doing so enhances your chance of receiving your free set of steak
+knives, particularly if you find any bugs and report them.
+If you don't want extra warnings, answer "none".
+
+EOH
+case "$warnflags" in
+'') case "$cc" in
+ *gcc*)
+ dflt="-Wall -Wno-comment"
+ if $contains 'fprintf' `./findhdr stdio.h` >/dev/null 2>&1; then
+ :
+ else
+ dflt="$dflt -Wno-implicit"
+ fi
+ ;;
+ *) dflt="none";;
+ esac
+ ;;
+' ') dflt="none";;
+*) dflt="$warnflags";;
+esac
+
+rp="Any $cc flags to enable warnings?"
+. ./myread
+case "$ans" in
+none) warnflags=' ';;
+*) warnflags="$ans";;
+esac
+
diff --git a/mcon/U/yacc.U b/mcon/U/yacc.U
new file mode 100644
index 0000000..4447b0b
--- /dev/null
+++ b/mcon/U/yacc.U
@@ -0,0 +1,90 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: yacc.U,v $
+?RCS: Revision 3.0.1.1 1994/05/13 15:28:48 ram
+?RCS: patch27: added byacc as another alternative (ADO)
+?RCS:
+?RCS: Revision 3.0 1993/08/18 12:10:03 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:yacc yaccflags: Guess Myread Loc Oldconfig byacc bison cat test
+?MAKE: -pick add $@ %<
+?S:yacc:
+?S: This variable holds the name of the compiler compiler we
+?S: want to use in the Makefile. It can be yacc, byacc, or bison -y.
+?S:.
+?S:yaccflags:
+?S: This variable contains any additional yacc flags desired by the
+?S: user. It is up to the Makefile to use this.
+?S:.
+?T:comp
+: determine compiler compiler
+echo " "
+comp='yacc'
+if $test -f "$byacc$_exe"; then
+ comp="byacc or $comp"
+fi
+if $test -f "$bison$_exe"; then
+ comp="$comp or bison -y"
+fi
+case "$yacc" in
+'')
+ yacc=`./loc yacc yacc $pth`
+ if $test -f "$yacc$_exe"; then
+ dflt='yacc'
+ elif $test -f "$byacc$_exe"; then
+ dflt='byacc'
+ elif $test -f "$bison$_exe"; then
+ dflt='bison'
+ else
+ dflt=''
+ fi
+ ;;
+*) dflt="$yacc";;
+esac
+rp="Which compiler compiler ($comp) shall I use?"
+. ./myread
+yacc="$ans"
+case "$yacc" in
+*bis*)
+ case "$yacc" in
+ *-y*) ;;
+ *)
+ yacc="$yacc -y"
+ echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
+ ;;
+ esac
+ ;;
+esac
+
+@if yaccflags
+: see if we need extra yacc flags
+dflt="$yaccflags"
+case "$dflt" in
+'') dflt=none;;
+esac
+$cat <<EOH
+
+Your yacc program may need extra flags to normally process the parser sources.
+Do NOT specify any -d or -v flags here, since those are explicitely known
+by the various Makefiles. However, if your machine has strange/undocumented
+options (like -Sr# on SCO to specify the maximum number of grammar rules), then
+please add them here. To use no flags, specify the word "none".
+
+EOH
+rp="Any additional yacc flags?"
+. ./myread
+case "$ans" in
+none) yaccflags='';;
+*) yaccflags="$ans";;
+esac
+
+@end
diff --git a/mcon/configure b/mcon/configure
new file mode 100644
index 0000000..95b2d63
--- /dev/null
+++ b/mcon/configure
@@ -0,0 +1,144 @@
+#! /bin/sh
+#
+# $Id: configure,v 3.0.1.2 1997/02/28 16:28:49 ram Exp ram $
+#
+# GNU configure-like front end to metaconfig's Configure.
+#
+# Written by Andy Dougherty <doughera@lafcol.lafayette.edu>
+# Matthew Green <mrg@mame.mu.oz.au> and Tom Tromey <tromey@cygnus.com>.
+#
+# Reformatted and modified for inclusion in the dist-3.0 package by
+# Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>.
+#
+# This script belongs to the public domain and may be freely redistributed.
+#
+# The remaining of this leading shell comment may be removed if you
+# include this script in your own package.
+#
+# $Log: configure,v $
+# Revision 3.0.1.2 1997/02/28 16:28:49 ram
+# patch61: added the srcdir support now that we have src.U
+# patch61: random cleanup for nicer help message
+#
+# Revision 3.0.1.1 1995/07/25 14:16:21 ram
+# patch56: created
+#
+
+(exit $?0) || exec sh $0 $argv:q
+opts=''
+verbose=''
+create='-e'
+srcdir=''
+while test $# -gt 0; do
+ case $1 in
+ --help)
+ cat <<EOM
+Usage: configure [options]
+This is GNU configure-like front end for a metaconfig-generated Configure.
+It emulates the following GNU configure options (must be fully spelled out):
+
+ --help --srcdir=DIRECTORY
+ --no-create --silent
+ --prefix=PREFIX --verbose
+ --quiet --version
+
+And it honours these environment variables: CC, CFLAGS and DEFS.
+
+Furthermore, it ignores the following arguments, when supplied:
+
+ --cache-file=FILE --target=TARGET
+ --enable-* --with-*
+ --host=HOST
+EOM
+ exit 0
+ ;;
+ --no-create)
+ create='-E'
+ shift
+ ;;
+ --prefix=*)
+ arg=`echo $1 | sed 's/--prefix=/-Dprefix=/'`
+ opts="$opts $arg"
+ shift
+ ;;
+ --prefix)
+ shift
+ opts="$opts -Dprefix=$1"
+ shift
+ ;;
+ --srcdir=*)
+ arg=`echo $1 | sed 's/--srcdir=//'`
+ srcdir=$arg
+ shift
+ ;;
+ --srcdir)
+ shift
+ srcdir=$1
+ shift
+ ;;
+ --quiet|--silent)
+ exec >/dev/null 2>&1
+ shift
+ ;;
+ --verbose)
+ verbose=true
+ shift
+ ;;
+ --version)
+ copt="$copt -V"
+ shift
+ ;;
+ --host=*|--target=*|--cache-file=*|--enable-*|--with-*)
+ shift
+ ;;
+ --*)
+ opt=`echo $1 | sed 's/=.*//'`
+ echo "This GNU configure front end does not understand $opt"
+ exit 1
+ ;;
+ *)
+ opts="$opts $1"
+ shift
+ ;;
+ esac
+done
+
+case "$CC" in
+'') ;;
+*) opts="$opts -Dcc='$CC'";;
+esac
+
+# Join DEFS and CFLAGS together.
+ccflags=''
+case "$DEFS" in
+'') ;;
+*) ccflags=$DEFS;;
+esac
+case "$CFLAGS" in
+'') ;;
+*) ccflags="$ccflags $CFLAGS";;
+esac
+case "$ccflags" in
+'') ;;
+*) opts="$opts -Dccflags='$ccflags'";;
+esac
+
+# Don't use -s if they want verbose mode
+case "$verbose" in
+'') copt="$copt -ds";;
+*) copt="$copt -d";;
+esac
+
+# Figure out srcdir if not set already
+case "$srcdir" in
+'') srcdir=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
+esac
+case "$srcdir" in
+".") ;;
+*) opts="$opts -Dsrc=$srcdir";;
+esac
+
+set X sh $srcdir/Configure $copt $create $opts
+shift
+echo "$@"
+exec "$@"
diff --git a/mcon/files/Internal.U b/mcon/files/Internal.U
new file mode 100644
index 0000000..56d7e6e
--- /dev/null
+++ b/mcon/files/Internal.U
@@ -0,0 +1,20 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: Internal.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:04 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?X:
+?X: This unit does this and that.
+?X:
+?MAKE:<^INTERNAL>: Myinit
+?MAKE: -pick add $@ %<
+
diff --git a/mcon/files/README b/mcon/files/README
new file mode 100644
index 0000000..cdbc905
--- /dev/null
+++ b/mcon/files/README
@@ -0,0 +1,6 @@
+This directory contains unit templates.
+
+It is hoped metaconfig will have a tool to generate "standard" units based
+on some well-known templates.
+
+For now, it has a documentary-only value.
diff --git a/mcon/files/d_function.U b/mcon/files/d_function.U
new file mode 100644
index 0000000..eb5ff4a
--- /dev/null
+++ b/mcon/files/d_function.U
@@ -0,0 +1,31 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: d_function.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:05 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_<FUNCTION>: Inlibc
+?MAKE: -pick add $@ %<
+?S:d_<FUNCTION>:
+?S: This variable conditionally defines HAS_<%FUNCTION> if <FUNCTION>() is
+?S: available to ...
+?S:.
+?C:HAS_<%FUNCTION>:
+?C: This symbol, if defined, indicates that the <FUNCTION>() routine is
+?C: available to ...
+?C:.
+?H:#$d_<FUNCTION> HAS_<%FUNCTION> /**/
+?H:.
+?LINT:set d_<FUNCTION>
+: see if <FUNCTION> exists
+set <FUNCTION> d_<FUNCTION>
+eval $inlibc
+
diff --git a/mcon/files/dir.U b/mcon/files/dir.U
new file mode 100644
index 0000000..507f789
--- /dev/null
+++ b/mcon/files/dir.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: dir.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:06 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:<DIR> <DIR>exp: Oldconfig Getfile
+?MAKE: -pick add $@ %<
+?S:<DIR>:
+?S: Where <DIR> files are located. The name may have ~ on the front.
+?S:.
+?S:<DIR>exp:
+?S: This is the same as the <DIR> variable, but is filename expanded
+?S: so that later Configure units can look at the <DIR> directory if desired.
+?S:.
+?C:<%DIR>:
+?C: The directory where <DIR> files are located. The name may have ~ on
+?C: the front so the C program must be prepared to do ~ expansion.
+?C:.
+?C:<%DIR>_EXP:
+?C: The same as <DIR>, but ~name expantion has been done by Configure.
+?C:.
+?H:#define <%DIR> "$<DIR>" /**/
+?H:#define <%DIR>_EXP "$<DIR>exp" /**/
+?H:.
+: locate <DIR> directory
+echo " "
+case "$<DIR>" in
+'')
+ dflt=<DFLT>
+ ;;
+*) dflt="$<DIR>";;
+esac
+fn=d~
+rp='Where is the <DIR> directory?'
+. getfile
+<DIR>="$ans"
+<DIR>exp="$ansexp"
+
diff --git a/mcon/files/file.U b/mcon/files/file.U
new file mode 100644
index 0000000..962bea5
--- /dev/null
+++ b/mcon/files/file.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: file.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:06 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:<FILE> <FILE>exp: Oldconfig Getfile
+?MAKE: -pick add $@ %<
+?S:<FILE>:
+?S: The name of the <FILE> file. The name may have ~ on the front.
+?S:.
+?S:<FILE>exp:
+?S: This is the same as the <FILE> variable, but is filename expanded
+?S: so that later Configure units can look at the <FILE> file if desired.
+?S:.
+?C:<%FILE>:
+?C: The name of the <FILE> file. The name may have ~ on the front so the
+?C: program must be prepared to do filename expansion.
+?C:.
+?C:<%FILE>_EXP:
+?C: The same as <FILE> but ~name expansion has been done by Configure.
+?C:.
+?H:#define <%FILE> "$<FILE>" /**/
+?H:#define <%FILE>_EXP "$<FILE>exp" /**/
+?H:.
+: locate <FILE> file
+echo " "
+case "$<FILE>" in
+'')
+ dflt=<DFLT>
+ ;;
+*) dflt="$<FILE>";;
+esac
+fn=f~
+rp='Where is the <FILE> file?'
+. getfile
+<FILE>="$ans"
+<FILE>exp="$ansexp"
+
diff --git a/mcon/files/i_include.U b/mcon/files/i_include.U
new file mode 100644
index 0000000..8abd462
--- /dev/null
+++ b/mcon/files/i_include.U
@@ -0,0 +1,32 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: i_include.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:07 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:i_<INCLUDE>: Inhdr
+?MAKE: -pick add $@ %<
+?S:i_<INCLUDE>:
+?S: This variable conditionally defines the I_<%INCLUDE> symbol, which
+?S: indicates to the C program that <<INC_PATH>.h> exists and should
+?S: be included.
+?S:.
+?C:I_<%INCLUDE>:
+?C: This symbol, if defined, indicates that <<INC_PATH>.h> exists and should
+?C: be included.
+?C:.
+?H:#$i_<INCLUDE> I_<%INCLUDE> /**/
+?H:.
+?LINT:set i_<INCLUDE>
+: see if <INC_PATH>.h is available
+set <INC_PATH>.h i_<INCLUDE>
+eval $inhdr
+
diff --git a/mcon/files/keyword.U b/mcon/files/keyword.U
new file mode 100644
index 0000000..c94a5c7
--- /dev/null
+++ b/mcon/files/keyword.U
@@ -0,0 +1,54 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: keyword.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_const: cat cc ccflags Setvar
+?MAKE: -pick add $@ %<
+?S:d_<KEY>:
+?S: This variable conditionally defines the HASCONST symbol, which
+?S: indicates to the C program that this C compiler knows about the
+?S: <KEY> type.
+?S:.
+?C:HAS<%KEY> ~ %<:
+?C: This symbol, if defined, indicates that this C compiler knows about
+?C: the <KEY> type. There is no need to actually test for that symbol
+?C: within your programs. The mere use of the "<KEY>" keyword will
+?C: trigger the necessary tests.
+?C:.
+?H:?%<:#$d_<KEY> HAS<%KEY> /**/
+?H:?%<:#ifndef HAS<%KEY>
+?H:?%<:#define <KEY>
+?H:?%<:#endif
+?H:.
+?W:%<:<KEY>
+?LINT:set d_<KEY>
+?LINT:known <KEY>
+: check for <KEY> keyword
+echo " "
+echo 'Checking to see if your C compiler knows about "<KEY>"...'
+$cat ><KEY>.c <<'EOCP'
+main()
+{
+ <KEY> char *foo;
+}
+EOCP
+if $cc -c $ccflags <KEY>.c >/dev/null 2>&1 ; then
+ val="$define"
+ echo "Yup, it does."
+else
+ val="$undef"
+ echo "Nope, it doesn't."
+fi
+set d_<KEY>
+eval $setvar
+
diff --git a/mcon/files/locate.U b/mcon/files/locate.U
new file mode 100644
index 0000000..3793062
--- /dev/null
+++ b/mcon/files/locate.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: locate.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:08 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:<FILE> <FILE>exp: Oldconfig Getfile
+?MAKE: -pick add $@ %<
+?S:<FILE>:
+?S: The name of the <FILE> file. The name may have ~ on the front.
+?S:.
+?S:<FILE>exp:
+?S: This is the same as the <FILE> variable, but is filename expanded
+?S: so that later Configure units can look at the <FILE> file if desired.
+?S:.
+?C:<%FILE>:
+?C: The name of the <FILE> file. The name may have ~ on the front so the
+?C: program must be prepared to do filename expansion.
+?C:.
+?C:<%FILE>_EXP:
+?C: The same as <FILE> but ~name expansion has been done by Configure.
+?C:.
+?H:#define <%FILE> "$<FILE>" /**/
+?H:#define <%FILE>_EXP "$<FILE>exp" /**/
+?H:.
+: locate <FILE> file
+echo " "
+case "$<FILE>" in
+'')
+ dflt=<DFLT>
+ ;;
+*) dflt="$<FILE>";;
+esac
+fn=l~:<FILE>
+rp='Where is the <FILE> file?'
+. getfile
+<FILE>="$ans"
+<FILE>exp="$ansexp"
+
diff --git a/mcon/files/question.U b/mcon/files/question.U
new file mode 100644
index 0000000..56e38b5
--- /dev/null
+++ b/mcon/files/question.U
@@ -0,0 +1,58 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: question.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:09 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:d_scorfl: cat Myread Oldconfig nametype Setvar
+?MAKE: -pick add $@ %<
+?S:d_scorfl:
+?S: This variable conditionally defines the SCOREFULL symbol, which
+?S: indicates to the C program that any scoreboard kept by the program
+?S: should be kept on the basis of the user's full name as opposed to
+?S: the user's login name.
+?S:.
+?C:SCOREFULL:
+?C: This symbol, if defined, indicates that any scoreboard kept by the
+?C: program should be kept on the basis of the user's full name as opposed
+?C: to the user's login name. If the user can change his full name he
+?C: can enter multiple scores if this is defined.
+?C:.
+?H:#$d_scorfl SCOREFULL /**/
+?H:.
+?LINT:set d_scorfl
+: see how they want the scoreboard kept
+case "$d_scorfl" in
+"$define") dflt=y ;;
+*) dflt=n ;;
+esac
+case "$nametype" in
+other) val="$undef" ;;
+*)
+ $cat <<'EOM'
+
+The scoreboard can be kept with one score per login name, or one score per full
+name. If users can change their full name, or if there is more than one person
+on your system with the same full name, you should keep the score by login name
+(the full name is still printed).
+
+EOM
+ rp='Do you want the scoreboard kept by full name?'
+ . myread
+ case "$ans" in
+ y*) val="$define" ;;
+ *) val="$undef" ;;
+ esac
+ ;;
+esac
+set d_scorfl
+eval $setvar
+
diff --git a/mcon/files/rcshead.U b/mcon/files/rcshead.U
new file mode 100644
index 0000000..67a14df
--- /dev/null
+++ b/mcon/files/rcshead.U
@@ -0,0 +1,15 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: rcshead.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:10 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+
diff --git a/mcon/files/shell.U b/mcon/files/shell.U
new file mode 100644
index 0000000..5949b9d
--- /dev/null
+++ b/mcon/files/shell.U
@@ -0,0 +1,68 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: shell.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:10 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:cc: cat contains sysman +large Mcc Myread Guess Oldconfig Loc
+?MAKE: -pick add $@ %<
+?DEF:cc=cc
+?S:cc:
+?S: This variable holds the name of a command to execute a C compiler which
+?S: can resolve multiple global references that happen to have the same
+?S: name. Usual values are "cc", "Mcc", "cc -M", and "gcc".
+?S:.
+: see if we need a special compiler
+echo " "
+if usg; then
+ case "$cc" in
+ '') case "$Mcc" in
+ /*) dflt='Mcc';;
+ *) case "$large" in
+ -M*) dflt='cc';;
+ *) if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
+ if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
+ dflt='cc'
+ else
+ dflt='cc -M'
+ fi
+ else
+ dflt='cc'
+ fi;;
+ esac;;
+ esac;;
+ *) dflt="$cc";;
+ esac
+ $cat <<'EOM'
+On some systems the default C compiler will not resolve multiple global
+references that happen to have the same name. On some such systems the "Mcc"
+command may be used to force these to be resolved. On other systems a "cc -M"
+command is required. (Note that the -M flag on other systems indicates a
+memory model to use!) If you have the Gnu C compiler, you might wish to use
+that instead.
+
+EOM
+ rp="What command will force resolution on this system?"
+ . myread
+ cc="$ans"
+else
+ case "$cc" in
+ '') dflt=cc;;
+ *) dflt="$cc";;
+ esac
+ rp="Use which C compiler?"
+ . myread
+ cc="$ans"
+fi
+case "$cc" in
+gcc*) cpp=`loc gcc-cpp $cpp $pth`;;
+esac
+
diff --git a/mcon/files/type.U b/mcon/files/type.U
new file mode 100644
index 0000000..583b29a
--- /dev/null
+++ b/mcon/files/type.U
@@ -0,0 +1,47 @@
+?RCS: $Id$
+?RCS:
+?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+?RCS:
+?RCS: You may redistribute only under the terms of the Artistic Licence,
+?RCS: as specified in the README file that comes with the distribution.
+?RCS: You may reuse parts of this distribution only within the terms of
+?RCS: that same Artistic Licence; a copy of which may be found at the root
+?RCS: of the source tree for dist 4.0.
+?RCS:
+?RCS: $Log: type.U,v $
+?RCS: Revision 3.0 1993/08/18 12:10:11 ram
+?RCS: Baseline for dist 3.0 netwide release.
+?RCS:
+?MAKE:uidtype: Myread Oldconfig contains usrinc
+?MAKE: -pick add $@ %<
+?S:uidtype:
+?S: This variable defines UIDTYPE to be something like uid_t, int,
+?S: ushort, or whatever type is used to declare user ids in the kernel.
+?S:.
+?C:Uid_t (UIDTYPE):
+?C: This symbol holds the type used to declare user ids in the kernel.
+?C: It can be int, ushort, uid_t, etc... It may be necessary to include
+?C: <sys/types.h> to get any typedef'ed information.
+?C:.
+?H:#define Uid_t $uidtype /* UID type */
+?H:.
+: see what type uids are declared as in the kernel
+case "$uidtype" in
+'')
+ if $contains 'uid_t;' $usrinc/sys/types.h >/dev/null 2>&1 ; then
+ dflt='uid_t';
+ else
+ set `grep '_ruid;' $usrinc/sys/user.h 2>/dev/null` unsigned short
+ case $1 in
+ unsigned) dflt="$1 $2" ;;
+ *) dflt="$1" ;;
+ esac
+ fi
+ ;;
+*) dflt="$uidtype";;
+esac
+echo " "
+rp="What type are user ids on this system declared as?"
+. myread
+uidtype="$ans"
+
diff --git a/mcon/makegloss.SH b/mcon/makegloss.SH
new file mode 100755
index 0000000..991a214
--- /dev/null
+++ b/mcon/makegloss.SH
@@ -0,0 +1,217 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting mcon/makegloss (with variable substitutions)"
+$spitshell >makegloss <<!GROK!THIS!
+$startperl
+ eval "exec perl -S \$0 \$*"
+ if \$running_under_some_shell;
+
+!GROK!THIS!
+$spitshell >>makegloss <<'!NO!SUBS!'
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+#
+# $Log: makegloss.SH,v $
+# Revision 3.0.1.3 1994/01/24 14:17:49 ram
+# patch16: now understands internal-use only defined variables
+#
+# Revision 3.0.1.2 1993/10/16 13:50:39 ram
+# patch12: updated to support new ?M: lines
+#
+# Revision 3.0.1.1 1993/08/19 06:42:21 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:12 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+open(G,">Glossary") || die "Can't create Glossary.\n";
+print G
+'[This Glossary is automatically generated from the Unit files. Do not edit
+this file or your changes will be lost. Edit the appropriate Unit instead.]
+
+This file contains a listing of all the C preprocessor symbols and shell
+variables whose value can be determined by a Configure script. For the
+most part, any symbol in UPPERCASE is a C preprocessor symbol, and
+will be defined in config.h. Symbols in lowercase are shell variables,
+and are defined in config.sh.
+
+If you write your shell scripts and C programs in terms of these symbols,
+metaconfig can automatically build you a Configure script that will determine
+the value of those symbols. See the README file for a description of how
+to use metaconfig.
+
+In the following listing, the Unit: line indicates the name of the unit
+where this symbol is defined, and the Wants: line indicates what other
+symbols must be determined in order to figure out the value of this one.
+If there is an "(Also defines ...)" entry, it indicates what other symbols
+are defined by the Unit other than the one corresponding to the unit name.
+
+Variable of the form d_* either have the value "define" or "/*define", and
+control whether some C preprocessor symbol gets defined or not.
+
+';
+
+@ARGV = <U/*.U>;
+while (<>) {
+ if (/^\?[\w\-]+:/) { # We may have found a control line
+ # Long lines may be escaped with a final backslash
+ $_ .= &complete_line if s/\\\s*$//;
+ }
+ if (/^\?MAKE:.*:/) {
+ ($also, $wants) = /^\?MAKE:\s*(.*):\s*(.*)/;
+ ($unit = $ARGV) =~ s|.*/(.*)\.U$|$1|;
+ @Also = split(/ /, $also);
+ $also = '';
+ $internal = '';
+ foreach (@Also) {
+ if (s/^\+//) {
+ $internal .= "$_ ";
+ } else {
+ $also .= "$_ ";
+ }
+ }
+ $also =~ s/$unit\s//;
+ chop($also);
+ chop($internal);
+ @Wants = split(/ /, $wants);
+ $wants = '';
+ $option = '';
+ foreach (@Wants) {
+ if (s/^\+//) {
+ $option .= "$_ ";
+ } else {
+ $wants .= "$_ ";
+ }
+ }
+ chop($option);
+ chop($wants);
+ $head = '';
+ $_ = "Unit: $unit";
+ $_ .= " (Also defines $also)" if $also;
+ $_ .= " (With private $internal)" if $internal;
+ $head .= &format($_);
+ if ($wants) {
+ $_ = "Wants: $wants";
+ $head .= &format($_);
+ }
+ if ($option) {
+ $_ = "Optional: $option";
+ $head .= &format($_);
+ }
+ $head .= "\n";
+ }
+
+ # Example of expression matched by the following pattern:
+ # ?C:symbol ~ alias (obsolete list):
+ # The main symbol (optionally aliased) can be followed by a list of
+ # obsolete symbols (the list is space separated).
+
+ if (/^\?[CS]:(\w+)(\s*~\s*\S+)?\s*(\(.*\))?:\s*$/) {
+ $sym = $1;
+ $obsoleted = $3;
+ push(@syms, $sym);
+ $header{$sym} .= $head;
+ if ($obsoleted =~ s/^\((.*)\)$/$1/) {
+ @obsoleted = split(' ', $obsoleted);
+ foreach $obs (@obsoleted) {
+ push(@syms, $obs);
+ $header{$obs} = "\tObsoleted by $sym.\n\n";
+ }
+ }
+ }
+ elsif (s/^\?[CS]://) { # Must be inside definition
+ if (/^\.$/) { # Closing line
+ $def{$sym} .= "\n";
+ $sym = '';
+ }
+ else {
+ s/^(\t| ? ? ? ? ? ? ?)//;
+ $def{$sym} .= "\t" . $_;
+ }
+ }
+ elsif (/^\?M:(\w+):\s*([\w\s]*)\n$/) { # Magic mapping introduction
+ $sym = $1;
+ $cdep = $2;
+ push(@syms, $sym);
+ $cdep =~ s/^\s*//;
+ $cdep = ", needs: $cdep" if $cdep ne '';
+ $header{$sym} = "\tMagic symbol$cdep\n" . $head;
+ }
+ elsif (s/^\?M://) { # Must be a magic mapping definition
+ if (/^\.$/) { # Closing line
+ $def{$sym} .= "\n";
+ $sym = '';
+ } else {
+ $def{$sym} .= "\t" . $_;
+ }
+ }
+}
+
+foreach $sym (sort @syms) {
+ print G "$sym:\n";
+ print G $header{$sym};
+ print G $def{$sym};
+}
+close G;
+
+# Format $_ to fit in 80 columns (70 + size of tabs)
+# Long lines are split, and the all but the first are indented
+# by two leading spaces. The whole thing is then indented by
+# one tab.
+sub format {
+ local($tmp);
+ local($head) = '';
+ local($_) = shift(@_);
+ while (length($_) > 70) {
+ $tmp = substr($_,0,70);
+ $tmp =~ s/^(.*) .*/$1/;
+ $head .= "\t$tmp\n";
+ $_ = ' ' . substr($_,length($tmp),9999);
+ }
+ $head .= "\t$_\n";
+}
+
+# The first line was escaped with a final \ character. Every following line
+# is to be appended to it (until we found a real \n not escaped). Note that
+# the leading spaces of the continuation line are removed, so any space should
+# be added before the former \ if needed.
+sub complete_line {
+ local($_);
+ local($read) = ''; # Concatenation of all the continuation lines found
+ while (<>) {
+ s/^\s+//; # Remove leading spaces
+ if (s/\\\s*$//) { # Still followed by a continuation line
+ $read .= $_;
+ } else { # We've reached the end of the continuation
+ return $read . $_;
+ }
+ }
+}
+
+!NO!SUBS!
+chmod 755 makegloss
+$eunicefix makegloss
diff --git a/mcon/man/Jmakefile b/mcon/man/Jmakefile
new file mode 100644
index 0000000..737f8c9
--- /dev/null
+++ b/mcon/man/Jmakefile
@@ -0,0 +1,24 @@
+/*
+ * Jmakefile for metaconfig manual pages
+ */
+
+;# $Id: Jmakefile,v 3.0 1993/08/18 12:10:13 ram Exp ram $
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: Jmakefile,v $
+;# Revision 3.0 1993/08/18 12:10:13 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+
+>L /* I expect to fix this with a |append command */
+
+MPAGES = metaconfig.$(L) metalint.$(L) metaxref.$(L)
+
+ComplexShellManualTarget($(MPAGES))
diff --git a/mcon/man/Makefile.SH b/mcon/man/Makefile.SH
new file mode 100755
index 0000000..f146784
--- /dev/null
+++ b/mcon/man/Makefile.SH
@@ -0,0 +1,167 @@
+: Makefile.SH generated from Jmake.tmpl and Jmakefile [jmake 3.0 PL44]
+: $X-Id: Jmake.tmpl,v 3.0.1.1 1993/08/20 07:36:36 ram Exp ram $
+
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+CURRENT=mcon/man
+DIR=`echo $CURRENT/ | sed -e 's/\.\///g'`
+echo "Extracting ${DIR}Makefile (with variable substitutions)"
+
+INSTALL=`echo $install | sed -e 's,\./i,\$(TOP)/i,'`
+DATE=`date`
+
+$spitshell >Makefile <<!GROK!THIS!
+########################################################################
+# Makefile generated from Makefile.SH on $DATE
+
+SHELL = /bin/sh
+JMAKE = jmake
+TOP = ../..
+CURRENT = $CURRENT
+DIR = $DIR
+INSTALL = $INSTALL
+
+########################################################################
+# Parameters set by Configure -- edit config.sh if changes are needed
+
+CTAGS = ctags
+L = $manext
+MANSRC = $installmansrc
+MAKE = make
+MV = $mv
+RM = $rm -f
+
+########################################################################
+# Automatically generated parameters -- do not edit
+
+MANPAGE = \$(MPAGES)
+
+########################################################################
+# New suffixes and associated building rules -- edit with care
+
+.SUFFIXES: .SH .$manext
+
+.SH.$manext:
+ /bin/sh \$<
+
+!GROK!THIS!
+$spitshell >>Makefile <<'!NO!SUBS!'
+########################################################################
+# Jmake rules for building libraries, programs, scripts, and data files
+# $X-Id: Jmake.rules,v 3.0.1.1 1994/10/29 15:46:30 ram Exp ram $
+
+########################################################################
+# Start of Jmakefile
+
+# $X-Id: Jmakefile,v 3.0 1993/08/18 12:10:13 ram Exp ram $
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# $X-Log: Jmakefile,v $
+# Revision 3.0 1993/08/18 12:10:13 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+MPAGES = metaconfig.$(L) metalint.$(L) metaxref.$(L)
+
+all:: $(MPAGES)
+
+local_realclean::
+ $(RM) $(MPAGES)
+
+install.man::
+ @if test "$(MANSRC)"; then \
+ case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for file in $(MPAGES); do \
+ (set -x; $(INSTALL) -c -m 444 $$file $(MANSRC)); \
+ done; \
+ else exit 0; fi
+
+deinstall.man::
+ @if test "$(MANSRC)"; then \
+ case '${MFLAGS}' in *[i]*) set +e;; esac; \
+ for file in $(MPAGES); do \
+ (set -x; $(RM) $(MANSRC)/$$file); \
+ done; \
+ else exit 0; fi
+
+########################################################################
+# Common rules for all Makefiles -- do not edit
+
+emptyrule::
+
+clean: local_clean
+realclean: local_realclean
+clobber: local_clobber
+
+local_clean::
+ $(RM) core *~ *.o
+
+local_realclean:: local_clean
+
+local_clobber:: local_realclean
+ $(RM) Makefile config.sh
+
+Makefile.SH: Jmakefile
+ -@if test -f $(TOP)/.package; then \
+ if test -f Makefile.SH; then \
+ echo " $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~"; \
+ $(RM) Makefile.SH~; $(MV) Makefile.SH Makefile.SH~; \
+ fi; \
+ echo " $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT)" ; \
+ $(JMAKE) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT) ; \
+ else touch $@; exit 0; fi
+
+Makefile: Makefile.SH
+ /bin/sh Makefile.SH
+
+tags::
+ $(CTAGS) -w *.[ch]
+ $(CTAGS) -xw *.[ch] > tags
+
+local_clobber::
+ $(RM) tags
+
+########################################################################
+# Empty rules for directories with no sub-directories -- do not edit
+
+install::
+ @echo "install in $(CURRENT) done."
+
+deinstall::
+ @echo "deinstall in $(CURRENT) done."
+
+install.man::
+ @echo "install.man in $(CURRENT) done."
+
+deinstall.man::
+ @echo "deinstall.man in $(CURRENT) done."
+
+Makefiles::
+
+Makefiles.SH::
+
+!NO!SUBS!
+chmod 644 Makefile
+$eunicefix Makefile
+
diff --git a/mcon/man/mconfig.SH b/mcon/man/mconfig.SH
new file mode 100755
index 0000000..059091b
--- /dev/null
+++ b/mcon/man/mconfig.SH
@@ -0,0 +1,2103 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting mcon/man/metaconfig.$manext (with variable substitutions)"
+$rm -f metaconfig.$manext
+$spitshell >metaconfig.$manext <<!GROK!THIS!
+.TH METACONFIG $manext "Version $VERSION PL$PATCHLEVEL"
+''' @(#) Manual page for metaconfig
+'''
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: mconfig.SH,v $
+''' Revision 3.0.1.17 1997/02/28 16:29:31 ram
+''' patch61: documents the runnning environment and the src.U unit
+''' patch61: added warnings for $_a and $_o, as well as "startsh"
+'''
+''' Revision 3.0.1.16 1995/09/25 09:17:48 ram
+''' patch59: documented new ?Y: directive
+''' patch59: fixed my e-mail address
+'''
+''' Revision 3.0.1.15 1995/07/25 14:18:24 ram
+''' patch56: added extra nroff escapes at line heads to keep leading dots
+''' patch56: documented new -G option
+''' patch56: extended description of the Csym.U unit
+''' patch56: now mentions what a compile-link test line should look like
+'''
+''' Revision 3.0.1.14 1995/05/12 12:25:02 ram
+''' patch54: documented new -K switch for knowledgeable users
+'''
+''' Revision 3.0.1.13 1995/01/30 14:46:39 ram
+''' patch49: documented new special units Prefixit.U and Prefixup.U
+'''
+''' Revision 3.0.1.12 1995/01/11 15:39:16 ram
+''' patch45: documents new -O option and new Getfile escape supports
+''' patch45: documents the & escape in Myread and the new cc symbol lookup
+'''
+''' Revision 3.0.1.11 1994/10/29 16:32:38 ram
+''' patch36: added nroff protection for lines beginning with '.'
+''' patch36: documents new ?F: line for file declarations
+''' patch36: added example showing how ./loc can be used
+'''
+''' Revision 3.0.1.10 1994/08/29 16:33:40 ram
+''' patch32: documented new Typedef.U unit for typedef lookup
+'''
+''' Revision 3.0.1.9 1994/06/20 07:10:14 ram
+''' patch30: added -L option for easier unit testing
+''' patch30: new -D and -U options supported by Configure
+'''
+''' Revision 3.0.1.8 1994/05/13 15:29:16 ram
+''' patch27: now understands macro definitions in ?H: lines
+'''
+''' Revision 3.0.1.7 1994/05/06 15:19:25 ram
+''' patch23: documented the new 'p' option in Getfile.U
+'''
+''' Revision 3.0.1.6 1994/01/24 14:19:47 ram
+''' patch16: symbols defined in a unit can be tagged "internal use only"
+''' patch16: documents new MailList.U special unit
+''' patch16: new general <\$variable> macro substitution
+'''
+''' Revision 3.0.1.5 1993/10/16 13:51:50 ram
+''' patch12: new option -M to activate ?M: lines
+''' patch12: documents new ?M: lines format
+''' patch12: new internal Makefile command cm_h_weed for ?M: support
+''' patch12: documents usage for new confmagic.h file
+'''
+''' Revision 3.0.1.4 1993/09/09 11:50:35 ram
+''' patch9: lots of typo fixes and abusive variable substitution problems
+'''
+''' Revision 3.0.1.3 1993/08/30 08:53:51 ram
+''' patch8: wrongly stated that patchlevel.h should not be part of MANIFEST.new
+'''
+''' Revision 3.0.1.2 1993/08/24 12:13:32 ram
+''' patch3: typo fixes
+'''
+''' Revision 3.0.1.1 1993/08/19 06:42:23 ram
+''' patch1: leading config.sh searching was not aborting properly
+'''
+''' Revision 3.0 1993/08/18 12:10:14 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+'''
+.de Ex \" Start of Example
+.sp
+.in +5
+.nf
+..
+.de Ef \" End of Example
+.sp
+.in -5
+.fi
+..
+.SH NAME
+metaconfig \- a Configure script generator
+.SH SYNOPSIS
+.B metaconfig
+[ \-\fBdhkmostvwGMV\fR ]
+[ \-\fBL \fIdir\fR ]
+.SH DESCRIPTION
+.I Metaconfig
+is a program that generates Configure scripts. If you don't know what a
+Configure script is, please skip to the \fBTUTORIAL\fR section of this
+manual page. If you want a full (formal) description of the way to
+use \fImetaconfig\fR and its units, please look at the \fBREFERENCE\fR
+section. The following is a quick introduction and reference for
+knowledgeable users.
+.PP
+.B Metaconfig
+operates from set of
+.I units
+which define everything that metaconfig knows about portability.
+Each unit is self-contained, and does not have to be registered anywhere
+other than by inclusion in either the public U directory or your private
+U directory.
+If the dist package (of which metaconfig is a part) is installed in LIB,
+then the public U directory is LIB/dist/mcon/U. On this machine, the
+LIB directory is $privlibexp.
+Your private U directory, if you have one,
+is in the top level directory of your package.
+Before you can run \fImetaconfig\fR you must do a several things:
+.IP \(bu 5
+Create a .package file in the package's top level directory by running
+\fIpackinit\fR.
+This program will ask you about your package and remember what you tell
+it so that all the dist programs can be smart.
+.IP \(bu
+Consult the Glossary (in LIB/dist/mcon) and write your shell scripts and
+C programs in terms of the symbols that metaconfig knows how to define.
+You don't need to tell metaconfig which symbols you used, since metaconfig
+will figure that out for you.
+.IP \(bu
+Generate any .SH scripts needed to write Makefiles or shell scripts that
+will depend on values defined by Configure.
+There is a program called \fImakeSH\fR that will help you convert a plain
+script into a script.SH template; some editing will still need to be performed
+on the resulting .SH file to move the variable configuration part in the
+top part of the script (see inline comments generated by \fImakeSH\fR within
+your .SH file).
+.IP \(bu
+Create a MANIFEST.new file in your top level directory that lists all the
+files in your package. This file will remain private and will not be
+part of the final distribution.
+The filename should be the first field on each line.
+After some whitespace you can add a short comment describing your file.
+Only source files should be listed in there. The special file
+\fIpatchlevel.h\fR (which is handled and maintained by the patching tools --
+see \fIpat\fR(1)) should be part of the MANIFEST.new file, but may be
+silently ignored by some tools. As a rule of
+thumb, only files maintained by RCS should be listed in there,
+the \fIpatchlevel.h\fR file being one important exception.
+.IP \(bu
+Optionally, you may wish to create a MANIFEST file, which will be an
+exported version of your MANIFEST.new. That file must be made part of
+the release, i.e. listed in both your MANIFEST.new and MANIFEST itself.
+One of the \fImetaconfig\fR units knows about this file and will force
+Configure to perform a release check, ensuring all the files listed
+there are part of the distribution. The MANIFEST and MANIFEST.new
+files should be distinct, not links.
+.IP \(bu
+Copy any .U files that you want to modify to your private U directory.
+Any .U files in your private U directory will be used in preference to
+the one in the public U directory.
+For example, one way to force inclusion of any unit is to copy the End.U
+file to your .U directory and add the name of the unit you want as
+a dependency on the end of the ?MAKE: line.
+Certain units can ONLY be forced in this way, namely those of the form
+Warn_*.U and Chk_*.U.
+You can also customize certain default Configure variables by copying
+Myinit.U to your package's private U directory and setting the variables in
+that unit.
+.PP
+Now you are ready to run \fImetaconfig\fR. That will create a \fIConfigure\fR
+file, and optionally a \fIconfig_h.SH\fR file (if your sources make any use
+of C symbols).
+The generated files will automatically be added to your MANIFEST.new
+if necessary. Do not forget to update your MANIFEST file though.
+.PP
+In order to create new units, do the following:
+.IP \(bu 5
+Copy a similar unit to a new .U file.
+The name you choose should be the name of a variable generated by the unit,
+although this is only a convenience for you, not a requirement.
+It should be 12 or less characters to prevent filename chopping.
+Actually, it should probably be 10 or less so that those who want to use RCS
+can have a .U,v on the end without chopping.
+Metaconfig uses the case of the first letter to determine if any variable is
+actually produced by this unit, so don't Capitalize your unit
+name if it is supposed to produce a shell variable.
+.IP \(bu
+Edit the new .U file to do what you want.
+The first ?MAKE: line indicates the dependencies; before the final list
+colon all the variables this unit defines, and after the final colon
+all the variables (or other units) on which this unit depends.
+It is very important that these lists be accurate. If a dependency is
+optional and a default value can be used, you should prefix the dependency
+with a '+' sign. The corresponding unit will not be loaded to compute the
+symbol, unless really required by another unit.
+.IP \(bu
+To the extent possible, parameterize your unit based on shell
+variable defined on ?INIT: lines.
+This will move the variable definitions up to the Init.U unit,
+where they can be overridden by definitions in Myinit.U, which is
+included after Init.U.
+.IP \(bu
+Add the definition of any C symbols desired as ?H: lines.
+A line beginning with ?H:?%<: in the .U file will be added to the eventual
+config.h file if and only if metaconfig decides that this unit is needed.
+The %< stands for the unit's name, which happens to be the name of
+the file too (without .U) if you followed the convention.
+Always put a comment on each ?H: line in case one of the variable
+substitutions earlier on the line starts a comment without finishing it.
+Any shell variable starting with d_ may do this, so beware.
+If you ommit the ?%<:, then metaconfig will try to intuit the symbol whose
+definition is needed prior any inclusion in config.h.
+.IP \(bu
+Add glossary definitions as ?S: lines for shell variables and ?C:
+lines for C preprocessor variables.
+See a current unit for examples.
+It is VERY important to start each entry with a left justified symbol
+name, and end each entry with a ?C:. or ?S:. line. The algorithm
+that translates C preprocessor symbol entries for the Glossary into
+comments for config.h depends on this.
+.IP \(bu
+Make sure the order of all your ? lines is right. The correct order is:
+.sp
+.RS +10
+.PD 0
+.TP 15
+?RCS: and ?X:
+basically just comments
+.TP
+?MAKE:
+metaconfig dependencies
+.TP
+?Y:
+unit layout directive
+.TP
+?S:
+glossary shell definitions
+.TP
+?C:
+glossary C definitions
+.TP
+?H:
+config.h definitions
+.TP
+?M:
+confmagic.h definitions
+.TP
+?W:
+wanted symbols
+.TP
+?V:
+visible symbols
+.TP
+?F:
+files created by this unit
+.TP
+?T:
+temporary shell symbols used
+.TP
+?D:
+optional dependencies default value
+.TP
+?O:
+used to mark obsolete units
+.TP
+?LINT:
+metalint hints
+.TP
+?INIT:
+shell symbols initializations
+.PD
+.RE
+.PP
+Here is an example to show the ordering of the lines and the various
+formats allowed:
+.Ex
+?RCS: \$RCS-Id\$
+?RCS: Copyright information
+?RCS: \$RCS-Log\$
+?X:
+?X: A contrived example
+?X:
+?MAKE:d_one two: three +four Five
+?MAKE: -pick add \$@ %<
+?Y:DEFAULT
+?S:d_one:
+?S: First shell symbol, conditionally defines ONE.
+?S:.
+?S:two:
+?S: Second shell symbol, value for TWO.
+?S:.
+?C:ONE:
+?C: First C symbol.
+?C:.
+?C:TWO:
+?C: Second C symbol.
+?C:.
+?H:#\$d_one ONE /**/
+?H:#define TWO "\$two"
+?H:#\$d_one ONE_TWO "\$two"
+?H:.
+?M:flip: HAS_FLIP
+?M:#ifndef HAS_FLIP
+?M:#define flip(x) flop(x)
+?M:#endif
+?M:.
+?W:%<:one_two
+?V:p_one p_two:p_three
+?F:file ./ftest !tmp
+?T:tmp var
+?D:two='undef'
+?LINT:change three
+?INIT:two_init='2'
+: shell code implementing the unit follows
+p_one='one'
+p_two='two'
+p_three="$three"
+.Ef
+Let me state it one more time: the above unit definition is a \fIfake\fR
+one to only show the different possibilities. Such a unit would serve
+little purpose anyway... Some more advanced features are not described
+here. Please refer to the \fBREFERENCE\fR section for more complete
+information.
+.IP \(bu
+Put the unit into the public or private U directory as appropriate.
+.IP \(bu
+Rerun \fImetaconfig\fR.
+.IP \(bu
+Send your unit to ram@acri.fr (Raphael Manfredi) for inclusion
+in the master copy, if you think it's of general interest.
+.PP
+In order to add a new program to be located:
+.IP \(bu
+Edit Loc.U, and add the name of the program both to the ?MAKE: line
+(between the two colons) and to either loclist or trylist (depending
+on whether the program is mandatory or not).
+.IP \(bu
+Rerun metaconfig.
+.IP \(bu
+Send your unit to me for inclusion in the master copy, if you think it's
+of general interest.
+.PP
+Notes for writing .U files:
+.IP * 5
+Always use "rm -f" because there are systems where rm is interactive by
+default.
+.IP *
+Do not use "set -- ..." because '--' does not work with every shell. Use
+"set x ...; shift".
+.IP *
+Do not use "unset ENV" since unset is not fully portable. Say "ENV=''"
+instead.
+.IP *
+Always use echo " " (with a space) because of Eunice systems.
+.IP *
+Only use \fBtest\fR with \-r, \-w, \-f or \-d since those are the only
+portable switches. In particular, avoid "test -x".
+.IP *
+Use only programs that came with V7, so that you know everyone has them.
+.IP *
+Use \$\&contains when you want to grep conditionally, since not all
+greps return a reasonable status.
+Be sure to redirect the output to /dev/null, by using '>/dev/null 2>&1'.
+.IP *
+Use "if test" rather than "if [...]" since not every sh knows the
+latter construct.
+.IP *
+Use the myread script for inputs so that they can do shell escapes
+and default evaluation. The general form is
+.Ex
+case "\$grimble" in
+\&'') dflt=452;;
+*) dflt="\$grimble";;
+esac
+rp='How many grimbles do you have?'
+\&. ./myread
+grimble="\$ans"
+.Ef
+.IP *
+Use the getfile script when asking for a file pathname in order to
+have optional ~name expansion and sanity checks. See the Getfile.U
+unit for a full decription.
+.IP *
+Always put a
+.Ex
+ \$startsh
+.Ef
+at the top of every generated script that is going to be launched
+or sourced by \fIConfigure\fR.
+.IP *
+Never assume common UNIX-isms like the fact that an object file ends
+with a \fI.o\fR and that a library name ends with \fI.a\fR.
+Use the \fI\$_o\fR and \fI\$_a\fR variables instead (see Unix.U).
+.IP *
+When doing a compile-link-execute test, always write it like this:
+.Ex
+\$\&cc \$\&ccflags \$\&ldflags try.c -o try \$\&libs
+.Ef
+because some systems require that linking flags be specified before
+the compiled target (with the exception of trailing linking libraries).
+.IP *
+Issue important messages on file descriptor #4, by using '>&4' to redirect
+output. Only those messages will appear when the \fB\-s\fR switch is
+given to \fIConfigure\fR on the command line (silent mode).
+.IP *
+Always try to determine whether a feature is present in the most
+specific way--don't say "if bsd" when you can grep libc. There
+are many hybrid systems out there, and each feature should stand
+or fall by itself.
+.IP *
+Always try to determine whether a feature is present in the most
+general way, so that other packages can use your unit.
+.IP *
+When in doubt, set a default and ask. Don't assume anything.
+.IP *
+If you think the user is wrong, allow for the fact that he may be right.
+For instance, he could be running Configure on a different system than
+he is going to use the final product on.
+.PP
+Metaconfig reserves the following names in your directory, and if you use such
+a name it may get clobbered or have other unforeseen effects:
+.Ex
+.MT/*
+Configure
+Wanted
+Obsolete
+configure
+config_h.SH
+confmagic.h
+U/*
+MANIFEST.new
+.Ef
+Additionally, Configure may clobber these names in the directory it is run in:
+.Ex
+UU/*
+config.sh
+config.h
+.Ef
+'''
+''' O p t i o n s
+'''
+.SH OPTIONS
+The following options are recognized by \fImetaconfig\fR:
+.TP 15
+.B \-d
+Turn on debug mode. Not really useful unless you are debugging \fImetaconfig\fR
+itself.
+.TP
+.B \-h
+Print help message and exit.
+.TP
+.B \-k
+Keep temporary directory, so that you may examine the working files used
+by \fImetaconfig\fR to build your \fIConfigure\fR script. Useful only when
+debugging the units.
+.TP
+.B \-m
+Assume lots of memory and swap space. This will speed up symbol lookup in
+source files by a significant amount of time, at the expense of memory
+consumption...
+.TP
+.B \-o
+Map obsolete symbols on new ones. Use this switch if you still have some
+obsolete symbols in your source code and do not want (or cannot) remove
+them for now. The obsolete symbols are otherwise ignored, although that
+will give you a warning from \fImetaconfig\fR.
+.TP
+.B \-s
+Turn silent mode on.
+.TP
+.B \-t
+Trace symbols as they are found.
+.TP
+.B \-v
+Turn verbose mode on.
+.TP
+.B \-w
+Assume Wanted file is up-to-date. This will skip the time and memory
+consuming phase of source code scanning, looking for known symbols.
+Use it only when you know your source file have not changed with respect
+to the pool of \fImetaconfig\fR symbols used.
+.TP
+.B \-G
+Also provide a GNU \fIconfigure\fR-like front end to the generated
+.I Configure
+script, to be included in the distribution as well. This is only
+a wrapper around the
+.I Configure
+script naturally, but it lets people familiar with the GNU tool to
+not be lost when facing a new distribution.
+.TP
+\fB\-L\fI dir\fR
+Override default library location. Normally only useful for metaconfig
+maintainers to locally use the units being developped instead of the
+publicly available ones. The \fIdir\fR specified is the one containing the
+units \fIU\fR directory.
+.TP
+.B \-M
+Allow production of a \fIconfmagic.h\fR file to automagically remap some
+well-known symbols to some other alternative, like \fIbcopy\fR() being
+remapped transparently to \fImemcpy()\fR when not available. This option
+is turned on automatically when a \fIconfmagic.h\fR file exists in the
+top-level directory. Simply remove that file if you wish to disable this
+option permanently.
+.TP
+.B \-V
+Print version number and exit.
+'''
+''' T u t o r i a l
+'''
+.SH TUTORIAL
+This (long) section is an introduction to \fImetaconfig\fR, in which we will
+learn all the basics. If you already know how to use \fImetaconfig\fR, you
+may safely skip to the next section.
+'''
+.SS Overview
+.PP
+Usually when you want to get some source package to compile on a given
+platform you have to edit the main Makefile (assuming there is one!),
+choose a C compiler, make sure you have the proper libraries, and then
+fire the \fImake\fR command. If the package is reasonably well written, it
+will compile (without a warning being an option :-). In itself, the last
+sentence is a real performance, since given the variety of UNIX platforms
+available today and the diversity of flavours, that means the author of the
+package has gone into deep trouble to figure out the right choices given
+some standard trial, guessing and messing around with system includes and
+types.
+.PP
+However, despite all his talent, the author cannot possibly know that
+some system has a broken system call, or that some sytem structure lacks
+one otherwise standard field, or simply wheter a given include file exists
+or not. And I'm not considering the implicit assumptions, like the type
+returned by the \fImalloc()\fR function or the presence of the \fIrename()\fR
+system call to name a few. But that knowledge is necessary to achieve real
+portability.
+.PP
+Now let's not abuse ourselves. Using that information requires greater
+skills, yet it can lead to more portable programs since it is then
+written in a system-independant fashion and relies only on the fact that
+some assumption is true or false on a particular system, each assumption
+being unrelated with each other. That is to say, we do not say: We're on
+a BSD system or we are on a USG system. That's too fuzzy anyway nowadays.
+No, we want to say to the source code: this system does not have the
+.I rename()
+system call and \fImalloc()\fR returns a \fI(void *)\fR
+value.
+.PP
+Metaconfig is a tool that will let you do just that, with the additional
+benefit of not having to hand-edit the Makefile if all goes well. By
+running \fImetaconfig\fR, you create a shell script named \fIConfigure\fR.
+Lots of efforts have been devoted to the Configure script internals to ensure
+it will run on 99% of the existing shells available as of this writing.
+Configure will probe the target system, asking questions when in doubt and
+gather all the answers in one single shell file, which in turn can be used
+to automatically generate configured Makefiles and C include files.
+.PP
+There is only a limited (but quite large) set of symbols available for your
+shell scripts and C programs. They are all documented in the Glossary file.
+All you need to do is learn about them and start using them to address
+portability and configuration problems. Then, by running \fImetaconfig\fR,
+a suitable Configure script will be generated for your package.
+.PP
+The Configure script is built out several units (more than 300), each
+unit being responsible for defining a small number of shell and/or C
+symbols. Units are assembled together at the final stage, honoring
+the dependency graph (one unit may need the result of several other
+units which are then placed before in the script).
+'''
+.SS Symbols
+.PP
+Symbols are the most important thing in the \fImetaconfig\fR world. They
+are the smallest recognized entity, usually a word, and can be granted
+a value at the end of the Configure execution. For instance, the C
+pre-processor symbol \fIHAS_RENAME\fR is a \fImetaconfig\fR symbol that is
+guranteed to be defined if, and only if, the \fIrename()\fR system call
+is present. Likewise, the \fI\$\&ranlib\fR shell variable will be set to
+either ':' or 'ranlib' depending on whether the call to the \fIranlib\fR
+program is needed to order a library file. How this works is not important
+for now, what is important is to understand that those symbols are given
+a \fIlife\fR (i.e. a value) upon \fIConfigure\fR execution.
+.PP
+Using symbols is relatively straightforward. In a C source file, you simply
+use the symbol value, as a pre-processor directive (for instance an: \fI#ifdef
+HAS_RENAME\fR) or, if the symbol value is a string, directly as you would use
+a macro in C. And in a shell file or a Makefile, you may reference a shell
+symbol directly.
+.PP
+Actually, I'm lying, because that's not completely as magic as the previous
+paragraph could sound. In a C file, you need to include the Configure-produced
+\fIconfig.h\fR file, and you must wrap your shell script or Makefile in a .SH
+file and you may reference the shell symbol only in the variable
+substitution part of that .SH file. More on this later.
+'''
+.SS Source Files
+.PP
+Symbols may only appear in a limited set of source files, because
+\fImetaconfig\fR will only scan those when looking for known symbols, trying
+to figure out which units it will need. You may use C symbols in C source
+files, i.e. files with a \fI.c\fR, \fI.h\fR, \fI.y\fR or \fI.l\fR extension,
+and shell symbols are looked for only in .SH files.
+.PP
+In order to get the value of a symbol, a C file needs to include the special
+\fIconfig.h\fR file, which is produced by \fIConfigure\fR when C symbols
+are present. And .SH files are run through a shell, producing a new file.
+However, in the top section of the .SH file, the special \fIconfig.sh\fR
+file (also produced by running \fIConfigure\fR) is sourced, and variable
+substitutions apply. Actually, \fIconfig.h\fR is produced by running the
+\fImetaconfig\fR-produced \fIconfig_h.SH\fR file, again using variable
+substitution. So we're going to look at that a little more closely since
+this is the heart of the whole \fIconfiguration\fR scheme...
+'''
+.SS Variable Substitution
+.PP
+There is shell construct called \fIhere document\fR which enables a
+command to take an input specified within the script itself. That
+input is interpreted by the shell as a double-quoted string or a
+single quoted string depending on the form of the here document
+specification.
+.PP
+To specify a here document, the '<<' token is used, followed by a single
+identifier. From then on, the remaining script lines form the input for
+the command, until the here document is found on a line by itself.
+Shell substitution (including shell variable substitutions) is done
+unless the identifier is surrounded by single quotes. For instance:
+.Ex
+var='first'
+tar='second'
+echo "--> first here document:"
+cat <<EOM
+var='\$var'
+tar='\$\&tar'
+EOM
+echo "--> second here document:"
+cat <<'EOM'
+echo \$var
+echo \$\&tar
+EOM
+echo "--> end."
+.Ef
+will produce, when run through a shell:
+.Ex
+--> first here document:
+var='first'
+tar='second'
+--> second here document:
+echo \$var
+echo \$\&tar
+--> end.
+.Ef
+The first here document has its content interpreted whilst the second
+one is output as-is. Both are useful in a .SH script, as we are about to see.
+'''
+.SS Using .SH Scripts
+.PP
+A .SH script is usually produced by running the \fIMakeSH\fR script other
+an existing file, transforming \fIfile\fR into a \fIfile.SH\fR. Let's take
+a single example. Here is a little script (let's call it \fIintsize\fR)
+which prints a single message, the size of the \fBint\fR datatype in C.
+Unfortunately, it has the value hardwired in it, thusly:
+.Ex
+#!/bin/sh
+intsize='4'
+echo "On this machine, the int type is \$\&intsize bytes"
+.Ef
+Let's run \fImakeSH\fR on it by typing '\fImakeSH intsize\fR'. We get a single
+\fIintsize.SH\fR file that looks like this:
+.Ex
+case \$CONFIG in
+\&'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . \$TOP/config.sh
+ ;;
+esac
+: This forces SH files to create target in same directory as SH file.
+: This is so that make depend always knows where to find SH derivatives.
+case "\$0" in
+*/*) cd \`expr X\$0 : 'X\\\\(.*\\\\)/'\` ;;
+esac
+echo "Extracting intsize (with variable substitutions)"
+: This section of the file will have variable substitutions done on it.
+: Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
+: Protect any dollar signs and backticks that you do not want interpreted
+: by putting a backslash in front. You may delete these comments.
+\$spitshell >intsize <<!GROK!THIS!
+\$startsh
+\&!GROK!THIS!
+
+: In the following dollars and backticks do not need the extra backslash.
+\$spitshell >>intsize <<'!NO!SUBS!'
+intsize='4'
+echo "On this machine, the int type is \$\&intsize bytes"
+\&!NO!SUBS!
+chmod 755 intsize
+\$\&eunicefix intsize
+.Ef
+The first part of this script (in the \fIcase\fR statement) is trying to
+locate the \fIconfig.sh\fR file, in order to source it. The \fI\$CONFIG\fR
+variable is false by default, by true when \fIconfig.sh\fR has been sourced
+already (which would be the case if this file was executed from within
+\fIConfigure\fR itself, but let's not confuse the issue here).
+.PP
+Once the \fIconfig.sh\fR file has been sources, all the shell symbols
+defined by \fIConfigure\fR are set. We know reach a second case statement,
+used to change the current directory should a path be used to
+reach this program (for instance if we said '\fIsh ../scripts/intsize.SH\fR',
+we would first run '\fIcd ../scripts\fR' before continuing). If you do not
+understand this, don't worry about it.
+.PP
+Here comes the intersting stuff. This script uses the \fI\$spitshell\fR
+variable, and it's not something we know about...yet. If you look through
+the Glossary file, you will see that this is a variable known by
+\fImetaconfig\fR. If you make this file part of your distribution (by including
+it in the MANIFEST.new file, we'll come back to that later on) and run
+\fImetaconfig\fR, then the \fIConfigure\fR script will determine a suitable
+value for this variable and it will be set in \fIconfig.sh\fR. Same goes for
+\fI\$startsh\fR and the mysterious \fI\$\&eunicefix\fR at the end. On a
+reasonable system, the relevant part of \fIconfig.sh\fR would look like this:
+.Ex
+spitshell='cat'
+startsh='#!/bin/sh'
+eunicefix=':'
+.Ef
+Ah! We're getting there. Now it looks familiar. We're facing a single
+\fIcat\fR command whose input comes from a variable-interpolated here
+document and whose output is redirected to \fIintsize\fR. The value
+will be that of \fI\$startsh\fR, i.e. '#!/bin/sh'. Fine so far.
+.PP
+Then we reach the second here document expansion, to get the remaining of
+the script. This time, the here document symbol is surrounded by single
+quotes so the contents will be appended verbatim to the \fIintsize\fR file.
+So, by running '\fIsh intsize.SH\fR', we get the following output:
+.Ex
+Extracting intsize (with variable substitutions)
+.Ef
+and by looking at the produced intsize file, we see:
+.Ex
+#!/bin/sh
+intsize='4'
+echo "On this machine, the int type is \$\&intsize bytes"
+.Ef
+which is exactly what we had at the beginning. So far, it's a no-operation
+procedure... But, how marvelous! It so happens (pure coincidence, trust me!),
+that \fImetaconfig\fR knows about the \fI$\&intsize\fR shell symbol. By moving
+the initialization of intsize to the variable-interpolated area of the .SH
+script and initializing it with the \fIConfigure\fR-computed value,
+and removing the now useless comments added by \fImakeSH\fR, we get:
+.Ex
+case \$CONFIG in
+\&'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . \$TOP/config.sh
+ ;;
+esac
+case "\$0" in
+*/*) cd \`expr X\$0 : 'X\\\\(.*\\\\)/'\` ;;
+esac
+echo "Extracting intsize (with variable substitutions)"
+\$\&spitshell >intsize <<!GROK!THIS!
+\$\&startsh
+intsize='\$\&intsize'
+\&!GROK!THIS!
+
+\$\&spitshell >>intsize <<'!NO!SUBS!'
+echo "On this machine, the int type is \$\&intsize bytes"
+\&!NO!SUBS!
+chmod 755 intsize
+\$\&eunicefix intsize
+.Ef
+Of course, running this script through a shell will again output the same
+script. But if we run \fIConfigure\fR on a machine where an \fBint\fR is
+stored as a 64 bits quantity, \fIconfig.sh\fR will set \fIintsize\fR to
+8 and the \fIintsize\fR script will bear the right value and print:
+.Ex
+On this machine, the int type is 8 bytes
+.Ef
+which is correct. Congratulations! We have just configured a shell script!!
+'''
+.SS Producing config.h
+.PP
+We can now have a look at the way \fIconfig.h\fR is produced out of
+\fIconfig_h.SH\fR. We know that running \fIConfigure\fR produces a
+\fIconfig.sh\fR script (how exactly this is done is not strictly
+relevant here, but for the curious, it's another here document
+substitution within \fIConfigure\fR itself). The \fIconfig_h.SH\fR
+itself is built by \fImetaconfig\fR at the same time \fIConfigure\fR
+is, provided you make use of at least one C symbol within your sources.
+.PP
+Let's have a look at some random \fIconfig_h.SH\fR file to see what
+really happens:
+.Ex
+case \$CONFIG in
+\&'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . \$TOP/config.sh
+ ;;
+esac
+case "\$0" in
+*/*) cd \`expr X\$0 : 'X\\\\(.*\\\\)/'\` ;;
+esac
+echo "Extracting config.h (with variable substitutions)"
+sed <<!GROK!THIS! >config.h -e 's!^#undef!/\*#define!' -e 's!^#un-def!#undef!'
+/*
+ * This file was produced by running the config_h.SH script, which
+ * gets its values from config.sh, which is generally produced by
+ * running Configure.
+ *
+ * Feel free to modify any of this as the need arises. Note, however,
+ * that running config.h.SH again will wipe out any changes you've made.
+ * For a more permanent change edit config.sh and rerun config.h.SH.
+ */
+
+/* Configuration time: \$\&cf_time
+ * Configured by: \$\&cf_by
+ * Target system: \$\&myuname
+ */
+
+#ifndef _config_h_
+#define _config_h_
+
+/* bcopy:
+ * This symbol is maped to memcpy if the bcopy() routine is not
+ * available to copy strings.
+ */
+/* HAS_BCOPY:
+ * This symbol is defined if the bcopy() routine is available to
+ * copy blocks of memory. You should not use this symbol under
+ * normal circumstances and use bcopy() directly instead, which
+ * will get mapped to memcpy() if bcopy is not available.
+ */
+#\$\&d_bcopy HAS_BCOPY /**/
+#ifndef HAS_BCOPY
+#ifdef bcopy
+#un-def bcopy
+#endif
+#define bcopy(s,d,l) memcpy((d),(s),(l)) /* mapped to memcpy */
+#endif
+
+/* HAS_DUP2:
+ * This symbol, if defined, indicates that the dup2 routine is
+ * available to duplicate file descriptors.
+ */
+#\$\&d_dup2 HAS_DUP2 /**/
+
+/* I_STRING:
+ * This symbol, if defined, indicates to the C program that it should
+ * include <string.h> (USG systems) instead of <strings.h> (BSD systems).
+ */
+#\$\&i_string I_STRING /**/
+
+#endif
+\&!GROK!THIS!
+.Ef
+At the top of the file, we recognize the standard .SH construct that we
+have already studied in detail. Next comes the extraction of the file
+itself, via a here document with variable substitutions. However, here
+we do not use a plain \fIcat\fR but a \fIsed\fR instead, since we need
+to do some further editing on-the-fly. We'll see why later on, so let's
+forget about it right now.
+.PP
+We now reach the leading comment, and the file is tagged with the
+configuration time, the target system, etc... (those variables coming
+from the sourced \fIconfig.sh\fR file have been set up by \fIConfigure\fR).
+That comment header is followed by a '#ifndef' protection to guard against
+multiple inclusions of this file. Then comes the heart of the file...
+.PP
+It helps to know that \fI\$d_*\fR and \fI\$i_*\fR variables are set to
+either '\fIdefine\fR' or '\fIundef\fR' by \fIConfigure\fR, depending on
+wether a function or an include file is present on the system or not.
+That means the:
+.Ex
+#\$\&d_bcopy HAS_BCOPY /**/
+.Ef
+line will be expanded to either:
+.Ex
+#define HAS_BCOPY /**/
+.Ef
+if the \$\&d_bcopy variable is set to 'define' or:
+.Ex
+#undef HAS_BCOPY /**/
+.Ef
+if \$\&d_bcopy was set to 'undef', because the feature was not there. However,
+that's not what gets written in the \fIconfig.h\fR file because of the
+\fIsed\fR filter we have already seen, which will transform the second form
+into:
+.Ex
+/*#define HAS_BCOPY /**/
+.Ef
+That's a handy form for later editing of \fIconfig.h\fR because you only need
+to remove the leading '/*' if you want to override \fIConfigure\fR's choice.
+Likewise, you may add a single '/*' at the beginning of a '#define' line
+to avoid the definition of a particular symbol. This is why each symbol
+definition is protected by a trailing '/**/', to close the leading
+comment opened by '/*' (comments are not nested in C).
+.PP
+Now transforming '#undef' into '/*#define' is nice, but if we want to actually
+write a '#undef', we're stuck... unless we write it as '#un-def' and let
+\fIsed\fR fix that to '#undef' while producing \fIconfig.h\fR, which is what
+is actually done here.
+.PP
+The same kind of reasoning applies to those two lines:
+.Ex
+#\$\&d_dup2 HAS_DUP2 /**/
+#\$\&i_string I_STRING /**/
+.Ef
+and assuming \fIconfig.sh\fR defines:
+.Ex
+d_dup2='define'
+i_string='undef'
+.Ef
+we'll get in the produced \fIconfig.h\fR:
+.Ex
+#define HAS_DUP2 /**/
+/*#define I_STRING /**/
+.Ef
+Clear as running water? Good!
+.PP
+Now it should be obvious that by including \fIconfig.h\fR in all your
+C source files, you get to know what \fIConfigure\fR has guessed on
+your system. In effect, by using those symbols, you are writing
+configured C code, since \fImetaconfig\fR will know that you need
+those symbols and will generate a suitable \fIconfig_h.SH\fR file as
+well as all the necessary code in \fIConfigure\fR to compute a
+proper value for them (by assigning values to associated shell variables).
+'''
+.SS Running Metaconfig
+.PP
+Let's focus on the \fImetaconfig\fR program for a while to understand how
+it uses its units and your source code to produce all the needed configuration
+files. If you intend to write new units, you should have a good understanding
+of the whole scheme.
+.PP
+Assuming your MANIFEST.new file is properly set and lists all the source
+files you wish to configure, and that you have run \fIpackint\fR in your
+root source directory to create a \fI.package\fR file, you may run
+\fImetaconfig\fR and you'll get the following:
+.Ex
+\$ metaconfig
+Locating units...
+Extracting dependency lists from 312 units...
+Extracting filenames (*.[chyl] and *.SH) from MANIFEST.new...
+Building a Wanted file...
+.in +2
+Scanning .[chyl] files for symbols...
+Scanning .SH files for symbols...
+.in -2
+Computing optimal dependency graph...
+.in +2
+Building private make file...
+Determining loadable units...
+Updating make file...
+.in -2
+Determining the correct order for the units...
+Creating Configure...
+Done.
+.Ef
+The first phase looks for all the units files (ending with .U) in the public
+directory first, then in your private one. If you copy a public file in your
+private U directory (i.e. a directory named U at the top level of your package),
+it will override the public version. Once it has a list of all the available
+units, it parses them and extracts all the ?MAKE: lines to know about the
+dependencies and the known shell symbols. It also focuses on the ?H: lines to
+learn about the C symbols and which shell symbols needs to be computed to get
+a proper value for that C symbol (so we have another level of dependencies
+here).
+.PP
+Next, the proper filenames are extracted from the MANIFEST.new files and a
+\fIWanted\fR file is built: that file lists all the C symbols and the shell
+symbols needed for that package. We first scan the C-type files for C symbols,
+then propagate the dependencies to their associated shell symbols (gathered
+from ?H: lines). Next .SH files are scanned and finally all the shell symbols
+are known.
+.PP
+A temporary Makefile is built and metaconfig tries to \fImake\fR all the shell
+symbols to see what commands (listed on the second ?MAKE: lines) are
+executed, and thus which units are really needed. Optional units not otherwise
+required are removed and a second Makefile is generated. This time, we know
+about all the units and their respective orders, optional units having been
+removed and default values computed for their shell symbols. The \fIConfigure\fR
+script can then be generated, along with \fIconfig_h.SH\fR. We're done.
+'''
+.SS Conventions
+.PP
+Proper conventions needs to be followed to make the whole process sound.
+There is a case convention for units and a variable naming convention.
+.PP
+All units should have their first letter lower-cased, unless they are
+special units. By special, we mean they do not really define new
+shell variables that can be used by the user in his .SH files, but rather
+units producing scripts or shell variables that are to be used internally
+by the \fIConfigure\fR script. Typical examples are the \fIInit.U\fR
+file which is the main variable initialization, or \fIMyread.U\fR which
+produces the \fImyread\fR script used almost everywhere in \fIConfigure\fR
+when a question is to be asked to the user.
+.PP
+Non-special units then subdivise in two distinct groups: units defining
+variables associated to a C symbol and units defining shell variables of
+their own. The first group is further divided in variables related to
+include files (their name begin with \fIi_\fR) and variables related to
+other definitions (name starting with \fId_\fR). The second group have
+names standing for itself, for instance \fIcc.U\fR defines the \fI\$\&cc\fR
+shell variable whose value is the C compiler to be used.
+.PP
+Special units sometimes reserve themselves some pre-defined variable and
+return "results" in other well-known variables. For instance, the \fImyread\fR
+script produced by Myread.U expects the prompt in \fI\$rp\fR, the default
+answer in \fI\$dflt\fR and places the user answer in \fI\$ans\fR. This is
+not documented in this manual page: you have to go and look at the unit
+itself to understand which variables are used and how the unit is to be
+used.
+'''
+.SS Using The Glossary
+.PP
+The Glossary file is automatically produced by the \fImakegloss\fR script,
+which extracts the information from ?S:, ?C: and ?MAKE: lines and reformats
+them into an alphabetically sorted glossary.
+It is important to read the Glossary to know about the symbols you are
+allowed to use. However, the Glossary will not tell you how to use them.
+Usually, that's up to you.
+.PP
+One day, you will probably write your own units and you will know enough
+about \fImetaconfig\fR to do so quickly and efficiently. However, never
+forget to properly document your work in the ?S: and ?C: lines, or other
+people will not be able to reuse it. Remember about the time where you
+had only the Glossary and this manual page to get started.
+'''
+.SS Conclusion
+.PP
+Now that you know the \fImetaconfig\fR basics, you should read the
+\fIDESCRIPTION\fR section, then skip to the \fIREFERENCE\fR section
+to learn about all the gory details such as the allowed syntax for
+unit control lines (lines starting with a '?') or the distinct MAKE
+commands you are allowed to use.
+.SH REFERENCE
+This section documents the internals of \fImetaconfig\fR, basically the
+unit syntax, the special units you should know about and the hint files.
+'''
+.SS General Unit Syntax
+.PP
+A metaconfig unit is divided into two distinct parts. The header section
+(lines starting with '?') and a shell section (code to be included in
+the \fIConfigure\fR script). It is possible to add '?X:' comments anywhere
+within the unit, but the other '?' lines (also called \fIcontrol lines\fR)
+have a strict ordering policy.
+.PP
+If a control line is too long, it
+is possible to use a continuation by escaping the final new-line with a
+backslash and continuing on the next line (which should then be indented by
+spaces or tabs).
+.PP
+The following is a formal description of each of the control lines. Unless
+stated otherwise, the order of this presentation is the order to be used
+within the unit.
+.TP 5
+?RCS: \fIfree text\fR
+To be used for RCS comments, at the top of the unit.
+.TP
+?X: \fIany text\fR
+General purpose comments. May appear anywhere in the unit but must be left
+justfied. For RCS comments, please use the ?RCS: comment form.
+.TP
+?MAKE:\fIsymbol list\fR: \fIdependency list\fR [\fI+optional\fR]
+This is the first dependency line. The first \fIsymbol list\fR should list
+all the symbols built by this unit (i.e. whose value is computed by the
+shell section of the unit). Symbols should be space separated. If a defined
+symbol is for internal use only and should not appear in the generated
+\fIconfig.sh\fR file, then it should be preceded by a '+' (not to be confused
+with optional dependencies defined hereafter).
+The second part of the list (after the middle ':') is the unit dependency.
+It should list all the needed special units, as well as all the symbols
+used by the shell implementation. If a symbol is nedded but its configuration
+value is not critical, it can be preceded by a '+', in which case it is
+called a conditional dependency: its corresponding unit will be loaded if,
+and only if, that symbol is otherwise really wanted; otherwise the default
+value will be used.
+.TP
+?MAKE:\fItab\fR \fIcommand\fR
+There can be one or more command lines following the initial dependency lines.
+Those commands will be executed when the unit is wanted to load them into
+\fIConfigure\fR. See the paragraph about make commands for more information.
+Note that the leading \fItab\fR character is required before the \fIcommand\fR.
+.TP
+?Y:\fIlayout\fR
+Declare a layout directive for this unit. That directive may be one of the
+strings \fItop\fR, \fIdefault\fR or \fIbottom\fR (case does not matter,
+recommended style is to spell them out uppercased). If omitted, \fIdefault\fR
+is assumed.
+.sp
+This directive is only required if you wish to force a unit at the top or
+the bottom of the generated \fIConfigure\fR script, as unit dependencies
+permit it. Important questions may thus be forced at the beginning. Within
+the same layout class, units are sorted alphabetically with two special
+cases for d_* and i_* units, forced respectively at the top and bottom of
+their classes (but these should belong to the default class).
+.sp
+It you force at the top a unit whose dependencies require all the other
+unit to precede it, you achieve nothing interesting. Therefore, that directive
+should really be used to increase the priority of some interactive units
+that do not depend on many other user-visible symbols, like path-related
+questions.
+.TP
+?S:\fIsymbol_name\fR [(\fIobsolete symbol list\fR)]:
+Introduces a shell symbol. This first line names the symbol, optionally
+followed by a list enclosed between parenthesis and giving the obsolete
+equivalent. Those obsolete symbols will be remapped to the new
+\fIsymbol_name\fR if the \fB\-o\fR option is given to \fImetaconfig\fR.
+.TP
+?S:\fIany text, for Glossary\fR
+Basically a comment describing the shell symbol, which will be extracted
+by \fImakegloss\fR into the Glossary file.
+.TP
+?S:.
+Closes the shell symbol comment.
+.TP
+?C:\fIsymbol_name\fR [~ \fIalias\fR] [(\fIobsolete symbol list\fR)]:
+Introduces a new C symbol. The \fIalias\fR name is the name under which
+the C symbol will be controlled, i.e. if the \fIalias\fR symbol is wanted,
+then that C symbol will be written in the \fIconfig_h.SH\fR file. Usually,
+the alias is just '%<' (stands for the unit's name) and there is also
+a ?W: line mapping a C symbol to the \fIalias\fR. Also the relevant parts
+of the ?H: lines are explicitely protected by a '?%<' condition. See
+the symbol aliasing paragraph for more details.
+The remaining of the line is the optional \fIobsolete symbol list\fR,
+which lists old equivalents for the new \fIsymbol_name\fR.
+.TP
+?C:\fIany text, for Glossary and config_h.SH\fR
+Basically a comment describing the C symbol, which will be extracted
+by \fImakegloss\fR into the Glossary file and by \fImetaconfig\fR into
+the \fIconfig_h.SH\fR file if the symbol is wanted (or if its alias is
+wanted when symbol aliasing is used).
+.TP
+?C:.
+Closes the C symbol comment.
+.TP
+?H:?\fIsymbol\fR:\fIconfig_h.SH stuff\fR
+This is the general inclusion request into \fIconfig_h.SH\fR. The line is
+only written when the guarding \fIsymbol\fR is really wanted. This general
+form is needed when C symbol aliasing was used. Otherwise, if you use one
+of the other "standard" forms, the guarding is automatically done by
+\fImetaconfig\fR itself.
+.TP
+?H:#\fI\$d_var VAR\fR "\fI\$var\fR"
+Conditionally defines the \fIVAR\fR C symbol into \fI\$var\fR when \fI$d_var\fR
+is set to '\fIdefine\fR'. Implies a '?\fIVAR\fR:' guarding condition, and
+\fImetaconfig\fR automatically links \fIVAR\fR to its two shell variable
+dependencies (i.e. both \fI\$d_var\fR and \fI\$var\fR will be flagged as
+\fIwanted\fR if \fIVAR\fR is used in C sources).
+.TP
+?H:#define \fIVAR\fR [\fIoptional text\fR]
+Always defines the \fIVAR\fR C symbol to some value. Implies a '?\fIVAR\fR:'
+guarding condition. An automatic shell dependency is made to the unit itself.
+.TP
+?H:#define \fIVAR(x,y,z)\fR \fI\$var\fR
+Always defines the macro \fIVAR\fR to be the value of the \fI\$var\fR variable.
+It is up to the unit to ensure \fI\$var\fR holds a sensible value. An
+automatic dependency between the C macro \fIVAR\fR and the shell variable
+is established, and the whole line is guarded by an implicit '?\fIVAR\fR:'.
+.TP
+?H:#\fI\$d_var VAR\fR
+Conditionally defines \fIVAR\fR if \fI\$d_var\fR is set to '\fIdefine\fR'.
+Implies a '?\fIVAR\fR:' guarding condition. An automatic shell dependency is
+generated towards \fI\$d_war\fR.
+.TP
+?H:#define \fIVAR\fR "\fI\$var\fR"
+Assigns a configured value to the \fIVAR\fR C symbol. Implies a '?\fIVAR\fR:'
+gurading condition. An automatic shell dependency is generated to link
+\fIVAR\fR and \fI\$var\fR.
+.TP
+?H:.
+Closes the \fIconfig_h.SH\fR inclusion requests.
+.TP
+?M:\fIC symbol\fR: \fIC dependencies\fR
+Introduces magic definition concerning the C symbol, for \fIconfmagic.h\fR,
+and defines the guarding symbol for the remaining ?M: definitions. This
+line silently implies '?W:%<:\fIC symbol\fR', i.e. the unit will be loaded
+into Configure if the C symbol appears within the C sources, whether magic
+is used or not. The C dependencies are activated when magic is used, in order
+to force their definition in \fIconfig_h.SH\fR. However, if magic is \fBnot\fR
+used but the C symbol appears in the source without the needed C dependencies,
+you will be warned every time the Wanted file is built, since it may be a
+portability issue (and also because the unit is unconditionally loaded into
+Configure whenever the C symbol is used, regardless of the other ?C: lines
+from the unit).
+.TP
+?M:\fIcpp defs\fR
+Defines the magic cpp mapping to be introduced in confmagic.h whenever the
+concerned symbol is used. There is an implicit '?\fIsym\fR' guarding where
+\fIsym\fR is the symbol name defined by the leading ?M: line.
+.TP
+?M:.
+Closes the \fIconfmagic.h\fR inclusion request.
+.TP
+?W:\fIshell symbol list\fR:\fIC symbol list\fR
+Ties up the destiny of the shell symbols with that of the C symbols: if any
+of the C symbols listed is wanted, then all the shell symbols are marked
+as wanted. Useful to force inclusion of a unit (shell symbol list set to
+\&'%<') when the presence of some C symbol is detected. The shell symbol list
+may be left empty, to benefit from the side effect of C symbol location
+within the builtin pre-processor (symbol being \fIdefined\fR for that
+pre-processor if located in the source). To look for patterns with a space
+in them, you need to quote the C symbols within simple quotes, as in
+\&'struct timezone'.
+.TP
+?V:\fIread-only symbols\fR:\fIread-write symbols\fR
+This is a \fImetalint\fR hint and should be used only in special units
+exporting some shell variables. The variables before the middle ':'
+are exported read-only (changing them will issue a warning), while
+other symbols may be freely read and changed.
+.TP
+?F:\fIfiles created\fR
+This line serves two purposes: it is a \fImetalint\fR hint, and also
+a placeholder for future \fIjmake\fR use. It must list three kind of files:
+the temporary one which are created for a test, the private UU ones created
+in the UU directory for later perusal, and the public ones left in the
+root directory of the package. Temporary files must be listed with a
+preceding '!' character (meaning "no! they're not re-used later!"), private
+UU files should be preceded by a './' (meaning: to use them, say \fI./file\fR,
+not just \fIfile\fR), and public ones should be named as-is.
+.TP
+?T:\fIshell temporaries\fR
+Another \fImetalint\fR hint. This line lists all the shell variables used
+as temporaries within the shell section of this unit.
+.TP
+?D:\fIsymbol\fR='\fIvalue\fR'
+Initialization value for symbols used as conditional dependencies. If no
+?D: line is found, then a null value is used instead. The \fImetalint\fR
+program will warn you if a symbol is used at least once as a conditional
+dependency and does not have a proper ?D: initialization. It's a good
+practice to add those lines even for a null initialization since it
+emphasizes on the possibly optional nature of a symbol.
+.TP
+?O:\fIany message you want\fR
+This directive indicates that this unit is obsolete as a whole. Whenever
+usage of any of its symbols is made (or indirect usage via dependencies),
+the message is output on the screen (on stderr). You can put one ore more
+lines, in which case each line will be printed, in order.
+.TP
+?LINT:\fImetalint hints\fR
+See the \fImetalint\fR manual page for an explaination of the distinct
+hints that can be used.
+.TP
+?INIT:\fIinitialization code\fR
+The initialization code specified by this line will be loaded at the top
+of the \fIConfigure\fR script provided the unit is needed.
+'''
+.SS C Symbol Aliasing
+.PP
+Sometimes it is not possible to rely on \fImetaconfig\fR's own default
+selection for \fIconfig_h.SH\fR comments and C symbol definition. That's
+where aliasing comes into play. Since it's rather tricky to explain, we'll
+study an example to understand the underlying mechanism.
+.PP
+The d_const.U unit tries to determine whether or not your C compiler
+known about the \fIconst\fR keyword. If it doesn't we want to remap
+that keyword to a null string, in order to let the program compile.
+Moreover, we want to automatically trigger the test when the \fIconst\fR
+word is used.
+.PP
+Here are the relevant parts of the d_const.U unit:
+.Ex
+?MAKE:d_const: cat cc ccflags Setvar
+?MAKE: -pick add \$@ %<
+?S:d_const:
+?S: This variable conditionally defines the HASCONST symbol, which
+?S: indicates to the C program that this C compiler knows about the
+?S: const type.
+?S:.
+?C:HASCONST ~ %<:
+?C: This symbol, if defined, indicates that this C compiler knows about
+?C: the const type. There is no need to actually test for that symbol
+?C: within your programs. The mere use of the "const" keyword will
+?C: trigger the necessary tests.
+?C:.
+?H:?%<:#$\&d_const HASCONST /**/
+?H:?%<:#ifndef HASCONST
+?H:?%<:#define const
+?H:?%<:#endif
+?H:.
+?W:%<:const
+?LINT:set d_const
+?LINT:known const
+: check for const keyword
+echo " "
+echo 'Checking to see if your C compiler knows about "const"...' >&4
+$cat >const.c <<'EOCP'
+main()
+{
+ const char *foo;
+}
+EOCP
+if $\&cc -c $\&ccflags const.c >/dev/null 2>&1 ; then
+ val="$\&define"
+ echo "Yup, it does."
+else
+ val="$\&undef"
+ echo "Nope, it doesn't."
+fi
+set d_const
+eval $\&setvar
+.Ef
+First we notice the use of a ?W: line, which basically says: "This unit
+is wanted when the \fIconst\fR keyword is used in a C file.". In order
+to conditionally remap \fIconst\fR to a null string in \fIconfig.h\fR,
+I chose to conditionally define \fIHASCONST\fR via \fI\$\&d_const\fR.
+.PP
+However, this raises a problem, because the \fIHASCONST\fR symbol is not
+going to be used in the sources, only the \fIconst\fR token is. And the
+?H: line defining \fIHASCONST\fR is implicitely guarded by '?HASCONST'.
+Therefore, we must add the explicit '?%<' constraint to tell \fImetaconfig\fR
+that those lines should be included in \fIconfig_h.SH\fR whenever the
+\&'%<' symbol gets wanted (%< refers to the unit's name, here \fId_const\fR).
+.PP
+That's almost perfect, because the ?W: line will want \fId_const\fR whenever
+\fIconst\fR is used, then the ?H: lines will get included in the
+\fIconfig_h.SH\fR file. However, the leading comment (?C: lines) attached to
+\fIHASCONST\fR is itself also guarded via \fIHASCONST\fR, i.e. it has an
+implicit '?HASCONST' constraint. Hence the need for \fIaliasing\fR the
+\fIHASCONST\fR symbol to '%<'.
+.PP
+The remaining part of the unit (the shell part) is really straightforward.
+It simply tries to compile a sample C program using the \fIconst\fR keyword.
+If it can, then it will define \fI\$\&d_const\fR via the \fI\$\&setvar\fR
+fonction (defined by the \fISetvar.U\fR unit). See the paragraph about
+special units for more details.
+'''
+.SS Make Commands
+.PP
+On the ?MAKE: command line, you may write a shell command to be executed as-is
+or a special \fI-pick\fR command which is trapped by \fImetaconfig\fR and
+parsed to see what should be done. The leading '-' is only there to prevent
+\fImake\fR from failing when the command returns a non-zero status -- it's
+not really needed since we use '\fImake -n\fR' to resolve the dependencies,
+but I advise you to keep it in case it becomes mandatory in future versions.
+The syntax of the \fIpick\fR command is:
+.Ex
+-pick \fIcmd\fR \$@ \fItarget_file\fR
+.Ef
+where \fI\$@\fR is the standard macro within Makefiles standing for the current
+target (the name of the unit being built, with the final .U extension stripped).
+The \fIcmd\fR part is the actual \fImetaconfig\fR command to be run, and the
+\fItarget_file\fR is yet another parameter, whose interpretation depends on
+the \fIcmd\fR itself. It also has its final .U extension stripped and normally
+refers to a unit file, unless it start with './' in which case it references
+one of the \fImetaconfig\fR control files in the '\fI.MT\fR directory.
+.PP
+The available commands are:
+.TP 10
+add
+Adds the \fItarget_file\fR to \fIConfigure\fR.
+.TP
+add.Config_sh
+Fills in that part of \fIConfigure\fR producing the \fIconfig.sh\fR file.
+Only used variables are added, conditional ones (from conditional dependencies)
+are skipped.
+.TP
+add.Null
+Adds the section initializing all the shell variables used to an empty string.
+.TP
+c_h_weed
+Produces the \fIconfig_h.SH\fR file. Only the necessary lines are printed.
+.TP
+cm_h_weed
+Produces the \fIconfmagic.h\fR file. Only the necessary lines are printed.
+This command is only enabled when the \fB\-M\fR switch is given, or when a
+\fIconfmagic.h\fR file already exists.
+.TP
+close.Config_sh
+Adds the final 'EOT' symbol on a line by itself to end the here document
+construct producing the \fIconfig.sh\fR file.
+.TP
+prepend
+Prepends the content of the target to the \fItarget_file\fR if that file is
+not empty.
+.TP
+weed
+Adds the unit to \fIConfigure\fR like the \fIadd\fR command, but make some
+additional tests to remove the '?\fIsymbol\fR' and '%\fIsymbol\fR' lines
+from the \fItarget_file\fR if the symbol is not wanted or conditionally
+wanted. The '%' form is only used internally by \fImetaconfig\fR while
+producing its own .U files in the '\fI.MT\fR' directory.
+.TP
+wipe
+Same as \fIadd\fR really, but performs an additional macro substitution.
+The available macros are described in the \fIHardwired Macros\fR paragraph.
+.PP
+As a side note, \fImetaconfig\fR generates a \fI-cond\fR command internally
+to deal with conditional dependencies. You should not use it by yourself,
+but you will see it if scanning the generated \fIMakefile\fR in the \fI.MT\fR
+directory.
+'''
+.SS Hardwired Macros
+.PP
+The following macros are recognized by the \fIwipe\fR command and subsituted
+before inclusion in \fIConfigure\fR:
+.TP 10
+<BASEREV>
+The base revision number of the package, derived from \fI.package\fR.
+.TP
+<DATE>
+The current date.
+.TP
+<MAINTLOC>
+The e-mail address of the maintainer of this package, derived from
+your \fI.package\fR.
+.TP
+<PACKAGENAME>
+The name of the package, as derived from your \fI.package\fR file.
+.TP
+<PATCHLEVEL>
+The patch level of the \fImetaconfig\fR program.
+.TP
+<VERSION>
+The version number of the \fImetaconfig\fR program.
+.PP
+Those macros are mainly used to identify the \fImetaconfig\fR version that
+generated a particular \fIConfigure\fR script and for which package it
+was done. The e-mail address of the maintainer is hardwired in the leading
+instructions that \fIConfigure\fR prints when starting.
+.PP
+Recent \fImetaconfig\fR versions understand a much more general syntax
+of the form:
+.Ex
+ <\$variable>
+.Ef
+which is replaced at Configure-generation time by the value of \fIvariable\fR
+taken from your \fI.package\fR file. Eventually, the old hardwired macro
+format will disappear, and <\$baserev> will replace <BASEREV> in all the
+supplied units.
+'''
+.SS Special Units
+.PP
+The following special units are used to factorize code and provide higher
+level functionalities. They either produce a shell script that can be
+sourced or a shell variable that can be \fIeval\fR'ed. Parameter passing
+is done via well-know variables, either named or anonymous like \$1, \$2,
+etc... (which can be easily set via the shell \fIset\fR operator).
+When \fIConfigure\fR executes, it creates and goes into a \fIUU\fR directory,
+so every produced script lies in there and does not interfere with the
+files from your package.
+.PP
+Here are the sepcial units that you should know about, and the way to use
+them.
+.TP 5
+Cppsym.U
+This unit produces a shell script called \fICppsym\fR, which can be used
+to determine whether any symbol in a list is defined by the C preprocessor
+or C compiler you have specified.
+It can determine the status of any symbol, though the symbols in \fI$al\fR
+(attribute list) are more easily determined.
+.TP
+Csym.U
+This sets the \$csym shell variable, used internally by \fIConfigure\fR to
+check whether a given C symbol is defined or not. A typical use is:
+.Ex
+set symbol result [-fva] [previous]
+eval \$\&csym
+.Ef
+That will set the \fIresult\fR variable to 'true' if the
+function [-f],
+variable [-v] or
+array [-a]
+is defined, 'false' otherwise. If a previous value is given and the \fB\-r\fR
+switch was provided to \fIConfigure\fR (see the \fIConfigure Options\fR
+paragraph), then that value is re-used without questioning.
+.sp
+The way this computation is done depends on the answer the user gives to
+the question \fIConfigure\fR will ask about whether it should perform an
+.I nm
+extraction or not. If the exctraction was performed, the unit simply looks
+through the symbol list, otherwise it performs a compile-link test, unless
+.B \-r
+was given to reuse the previously computed value, naturally...
+.TP
+End.U
+By copying this unit into your private \fIU\fR directory and appending
+dependencies on the ?MAKE: line, you can force a given unit to be loaded
+into \fIConfigure\fR even if it is not otherwise wanted. Some units may
+only be forced into \fIConfigure\fR that way.
+.TP
+Filexp.U
+This unit produces a shell script \fIfilexp\fR which will expand filenames
+beginning with tildes. A typical use is:
+.Ex
+exp_name=\`./filexp \$name\`
+.Ef
+to assign the expanded file name in \fIexp_name\fR.
+.TP
+Findhdr.U
+This unit produces a \fIfindhdr\fR script which is used to locate the
+header files in \fI$\&usrinc\fR or other stranger places using cpp capabilities.
+The script is given an include file base name like 'stdio.h' or 'sys/file.h'
+and it returns the full path of the inlcude file and a zero status if found,
+or an empty string and a non-zero status if the file could not be located.
+.TP
+Getfile.U
+This unit produces a bit of shell code that must be sourced in order to get
+a file name and make some sanity checks. Optionally, a ~name expansion is
+performed.
+.sp
+To use this unit, \fI\$rp\fR and \fI\$dflt\fR must hold the question and the
+default answer, which will be passed as-is to the \fImyread\fR script
+(see forthcoming \fIMyread.U\fR). The \fI\$fn\fR variable controls the
+operation and the result is returned into \fI\$ans\fR.
+.sp
+To locate a file or directory, put 'f' or 'd' in \fI$fn\fR. If a '~' appears,
+then ~name substitution is allowed. If a '/' appears, only absolute pathnames
+are accepted and ~name subsitutions are always expanded before returning.
+If '+' is specified, existence checks are skipped. If 'n'
+appears within \fI\$fn\fR, then the user is allowed to answer 'none'.
+.sp
+Usually, unless you asked for portability, ~name substitution occurs when
+requested. However, there are some times you wish to bypass portability and
+force the substitution. You may use the 'e' letter (expand) to do that.
+.sp
+If the special 'l' (locate) type is used, then the \fI\$fn\fR variable must
+end with a ':', followed by a file basename. If the answer is a directory,
+the file basename will be appended before testing for file existence. This
+is useful in locate-style questions like this:
+.Ex
+dflt='~news/lib'
+: no need to specify 'd' or 'f' when 'l' is used
+fn='l~:active'
+rp='Where is the active file?'
+\&. ./getfile
+active="\$ans"
+.Ef
+.sp
+Additionally, the 'p' (path) letter may be used in conjunction with 'l' to
+tell \fIgetfile\fR that an answer without a '/' in it should be accepted,
+assuming that it will be in everyone's PATH at the time this value will be
+needed.
+.sp
+Also useful is the possibility to specify a list of answers that should be
+accepted verbatim, bypassing all the checks. This list must be within
+parenthesis and items must be comma separated, with no interleaving spaces.
+Don't forget to quote the resulting string since parenthesis are meaningful
+to the shell. For instance:
+.Ex
+dflt='/bin/install'
+fn='/fe~(install,./install)'
+rp='Use which install program?'
+\&. ./getfile
+install="\$ans"
+.Ef
+would let the user only specify fully qualified paths referring to existing
+files, but still allow the special "install" and "./install" answers as-is
+(assuming of course something will deal with them specially later on in the
+chain since they do not conform with the general expected frame).
+.sp
+If the answer to the question is 'none', then the existence checks are skipped
+and the empty string is returned. Note that since \fIgetfile\fR calls
+\fImyread\fR internally, all the features available with \fImyread\fR apply
+here to.
+.sp
+If a completely expanded value is needed (for instance in a Makefile), you
+may use the \fI\$ansexp\fR variable which is always set up properly
+by \fIgetfile\fR
+as the expanded version of \fI\$ans\fR. Of course, it will not expand ~name if
+you did not allow that in the first place in the \fI\$fn\fR variable.
+.TP
+Inhdr.U
+This unit produces the \fI\$inhdr\fR shell variable, used internally by
+\fIConfigure\fR to check whether a set of headers exist or not. A typical
+use is:
+.Ex
+set header i_header [ header2 i_header2 ... ]
+eval \$\&inhdr
+.Ef
+That will print a message, saying whether the header was found or not and
+set the \fIi_header\fR variable accordingly. If more than one header
+is specified and the first header is not found, we try the next one, until
+the list is empty or one is found.
+.TP
+Inlibc.U
+This unit produces the \fI\$inlibc\fR shell variable, used internally
+by \fIConfigure\fR to check whether a given C function is defined or not.
+A typical use is:
+.Ex
+set function d_func
+eval \$\&inlibc
+.Ef
+That will print a message, saying whether the function was found or not
+and set \fI\$d_func\fR accordingly. Internally, it used the \fI\$\&csym\fR
+routine.
+.TP
+Loc.U
+This important unit produces a shell script \fIloc\fR which can be used
+to find out where in a list of directories a given file lies. The first
+argument specifies the file to be located, the second argument is what
+will be returned if the search fails, and the reamining arguments are a
+list of directories where the file is to be searched. For instance:
+.Ex
+dflt=\`./loc sendmail.cf X /usr/lib /var/adm/sendmail /lib\`
+.Ef
+would set \fI\$dflt\fR to \fIX\fR if no \fIsendmail.cf\fR file was found
+under the listed directories, or something like \fI/usr/lib/sendmail.cf\fR
+on some systems. See also \fIGetfile.U\fR.
+.TP
+MailAuthor.U
+This unit needs to be included on the ?MAKE: line of your own private End.U
+to make it into \fIConfigure\fR. It offers the user to register himself to
+the author, optionally being notified when new patches arrive or receiving
+them automatically when issued. You need to install \fImailagent\fR to do
+this (at least version 3.0).
+.TP
+MailList.U
+This unit needs to be included on the ?MAKE: line of your own private End.U
+to make it into \fIConfigure\fR. It offers the user to subscribe or
+unsubscribe to a mailing list where discussion related to the package are
+taking place. You need to run \fIpackinit\fR and answer the mailing list
+related questions to set up the proper variables in your \fI.package\fR
+before this unit may become operational.
+.TP
+Myinit.U
+Copy this unit into your private \fIU\fR directory to add your own default
+values to some internal variables. This unit is loaded into \fIConfigure\fR
+after all the default initializations have been done.
+.TP
+Myread.U
+This unit produces the \fImyread\fR shell script that must be sourced in
+order to do a read. It allows shell escapes, default assignment and
+parameter evaluation, as documented in the Instruct.U unit. It also allows
+dynamic setting of the \fB\-d\fR option, which will be used for the remaining
+of the script execution.
+.sp
+To use this unit, \fI\$rp\fR must hold the question and \fI\$dflt\fR should
+contain the default answer. The question will be printed by the script
+itself, and the result is returned in the \fI\$ans\fR variable.
+.sp
+Here is a typical usage:
+.Ex
+dflt='y'
+rp='Question?'
+\&. ./myread
+value="\$ans"
+.Ef
+See the unit itself for more information.
+.TP
+Oldconfig.U
+This unit must be part of your dependency ?MAKE: line when some of your
+units tries to reuse an old symbol value. This unit is responsible for
+getting the old answers from \fIconfig.sh\fR or providing useful hints
+when running on a given platform for the first time. See the \fIConfigure
+Hints\fR paragraph for more information about hints.
+.TP
+Prefixit.U
+The purpose of this unit is to detect changes in the installation prefix
+directory to recompute automatically suitable defaults from previous answers.
+It relies on the value of the \fI\$oldprefix\fR variable which holds the
+previous prefix directory when it changed, and is empty otherwise. For instance,
+if the prefix was changed from \fI/opt\fR to \fI/usr/local\fR, then the
+previous binary installation directory will be changed from \fI/opt/bin\fR
+to \fI/usr/local/bin\fR, or will remain unchanged if it was, say, \fI/bin\fR.
+.sp
+You need to call \fBset\fR before issuing an \fBeval\fR on \fI\$prefixit\fR,
+such as:
+.Ex
+set dflt var [dir]
+eval \$prefixit
+.Ef
+which would set \fI\$dflt\fR to \fI\$var\fR or \fI\$prefix/dir\fR depending
+on whether the prefix remained the same or not. If \fIdir\fR is the
+string \fInone\fR, a single space value in \fI\$dflt\fR is kept as-is, even
+when the prefix changes. If \fIdir\fR is omitted, then \fI\$dflt\fR is set
+to an empty string if the prefix changed, to \fI\$var\fR otherwise.
+.TP
+Prefixup.U
+The intent of thit unit is similar to that of Prefixit.U, i.e. it helps
+fixing the default string to accomodate prefix changes. However, the shell
+variable \fI\$prefixup\fR, when evaluated, will only restore ~name expansions,
+should prefix use such an escape mechanism. Use it as:
+.Ex
+set dflt
+eval \$prefixup
+.Ef
+before prompting via \fIgetfile\fR for instance. If the prefix does not
+make use of ~name expanstion, then the above will be a no-op on the \fI$dflt\fR
+variable, naturally.
+.TP
+Typedef.U
+This unit produces the \fI\$typedef\fR shell variable, used internally by
+\fIConfigure\fR to check whether a typedef exists or not. A typical
+use is:
+.Ex
+set typedef val_t default [ includes ]
+eval \$\&typedef
+.Ef
+This will set the variable \fIval_t\fR to the value of \fIdefault\fR if the
+typedef was not found among the listed include files, or to \fItypedef\fR
+if found. If no include files are specified, the unit looks
+in \fI<sys/types.h>\fR only. If you specifiy some includes, only those are
+looked at.
+.TP
+Unix.U
+The purpose of this unit is to define some of the most common UNIX-isms
+via variables which can be altered from the command line or via proper
+hint files. In particular, \fI\$_exe\fR, \fI\$_o\fR and \fI\$_a\fR
+are set. All the units should refer to \fI\$_o\fR and not to \fI.o\fR
+directly. The '.' is part of these variables.
+.TP
+Setvar.U
+This unit produces the \fI$setvar\fR variable, which is used internally
+by \fIConfigure\fR to set a \fIdefine\fR/\fRundef\fR value to a given symbol,
+emitting a warning when it suddenly changes from a previous value. For instance:
+.Ex
+val="\$\&define"
+set d_variable
+eval \$\&setvar
+.Ef
+If the previous \fI\$d_variable\fR value was non-null and \fI\$val\fR is
+different, a "whoa" warning is issued.
+.TP
+Whoa.U
+This unit produces the \fIwhoa\fR script, which emits a warning when the
+\fIvalue\fR in variable whose name is \fI\$var\fR is not the same as
+its old previous value held in \fI\$was\fR. Upon return, \fI\$td\fR and
+\fI\$tu\fR hold the proper value to \fIdefine\fR or \fIundef\fR the variable.
+See examples in \fIInlibc.U\fR.
+'''
+.SS Builtin Pre-processor
+.PP
+Each unit to be included in \fIConfigure\fR is ran through a built-in
+pre-processor. Pre-processor statements are introduced by the '@' character
+('#' is the shell comment character). It functions merely as the C
+pre-processor does but allows for shell and perl escapes. Here are the
+available functions:
+.TP 10
+@if \fIexpression\fR
+If \fIexpression\fR is true, continue loading code until @end, @elsif or @else.
+.TP
+@elsif \fIexpression\fR
+Alternative choice. If \fIexpression\fR is true, continue loading code until
+@end, another @elsif or @else.
+.TP
+@else
+Default code to be loaded if the @if \fIexpression\fR was false and none
+of the optional @elsif matched. Load until @end.
+.TP
+@end
+Close the conditional loading statement opened by @if.
+.TP
+@define \fIsymbol\fR
+Tells the pre-processor that \fIsymbol\fR is defined from now on.
+.PP
+The conditional \fIexpression\fR can include symbol names (value is
+true if symbol is wanted or defined via \fI@define\fR or shell/perl
+escapes. Those atoms can be combined using the traditional boolean
+operators '!' for negation, '&&' for logical and, and '||' for logical
+or.
+.PP
+Text enclosed within single brackets is a shell test, while text between
+double brakets is a perl test. Namely the expressions:
+.Ex
+{ \fIshell text\fR }
+{{ \fIperl text\fR }}
+.Ef
+are translated into:
+.Ex
+if \fIshell text\fR >/dev/null 2>&1; then exit 0; else exit 1; fi
+if (\fIperl text\fR) {exit 0;} else {exit 1;}
+.Ef
+and the exit status is used in the standard way to get a boolean value,
+i.e. 0 is true and everything else is false. Note that only simple
+conditions can be expressed in perl, until some complex code can be
+loaded within \fImetaconfig\fR and executed.
+.PP
+The built-in pre-processor can be used to finely tune some units
+(see \fId_gethname.U\fR for a complex example) depending on the symbols
+actually used by the program or the files present in the distribution.
+For instance, the \fIOldconfig.U\fR uses a test like:
+.Ex
+@if {test -d ../hints}
+.Ef
+and \fIConfigure\fR will contain hint-dependent code only if there is
+a \fIhints\fR directory in the package's top level directory. Note that
+tests are ran from within the '\fI.MT\fR' directory, hence the needed
+\&'../' in the test.
+.PP
+The pre-processor can also be used to avoid putting useless code when
+a symbol is not defined. Units defining more than one symbol can be
+protected that way (since the unit is loaded as a whole) by gathering
+symbol-dependent code within an @if/@end pair. For instance:
+.Ex
+@if I_TIME || I_SYS_TIME || I_SYS_TIME_KERNEL
+need_time_h='true'
+@else
+need_time_h='false'
+@end
+.Ef
+will test whether the source code makes any use of one of the three
+symbols that control the \fItime.h\fR or \fIsys/time.h\fR inclusion
+and define the shell symbol accordingly. That gives \fIConfigure\fR
+a feedback on what the sources need and avoid the drawback of having
+fixed frozen units.
+.PP
+Via the '?W:' lines, you can get intersting combinations. For instance,
+the \fIi_time.U\fR unit needs to know whether the C sources make any
+use of the \fIstruct timezone\fR type. Therefore, the line:
+.Ex
+?W::timezone
+.Ef
+is used for its side-effect of defining the symbol \fItimezone\fR for
+the pre-processor. The unit code can then say:
+.Ex
+@if timezone
+for s_timezone in '-DS_TIMEZONE' ''; do
+@else
+s_timezone=''
+@end
+
+\&... code using s_timezone ...
+
+@if timezone
+done
+@end
+.Ef
+and have an extra loop trying two successive values for the \fIs_timezone\fR
+variable, but only if needed.
+'''
+.SS Obsolete Symbols
+.PP
+Obsolete symbols are preserved to ease the transition with older
+.I metaconfig
+units. Unless the \fB\-o\fR switch is passed to \fImetaconfig\fR they will
+be ignored. However, an \fIObsolete\fR file will be generated, telling you
+which files are making use of those obsolete symbols and what are the new
+symbols to be used.
+.PP
+The lifetime for obsolete symbols is one full revision, i.e. they will
+be removed when the next base revision is issued (patch upgrades do not
+count of course). Therefore, it is wise to translate your sources and
+start using the new symbols as soon as possible.
+'''
+.SS Configure Hints
+.PP
+It may happen that the internal configuration logic makes the wrong choices.
+For instance, on some platform, the \fIvfork()\fR system call is present but
+broken, so it should not be used. It is not possible to include that knowledge
+in the units themselves, because that might be a temporary problem which the
+vendor will eventually fix, or something that was introduced by a new OS
+upgrade.
+.PP
+Anyway, for all those tiny little problems that are too system-specific,
+\fImetaconfig\fR provides hint files support. To use it, you need to create
+a \fIhints\fR directory in the package's top level directory, and have it
+when you run \fImetaconfig\fR. That will load the hint-related part from
+\fIOldconfig.U\fR.
+.PP
+From then on, you may pre-set some of the shell variables \fIConfigure\fR uses
+in an OS-specific .sh file. There is code in \fIOldconfig.U\fR that tries
+to guess which hint files are needed by computing a standard name based
+on the system OS name, the kernel name, the release number, etc... Since
+this information is likely to change rapidly, I'm not documenting it here.
+You have to reverse engineer the code from \fIOldconfig.U\fR.
+.PP
+When you first release your package, your hints file directory should be empty.
+If the users of your package complain that they have problem with
+\fIConfigure\fR defaults on a particular system, you have to see whether this
+is a platform-specific problem or a general one. In the former case, it's
+time to introduce a new hint file, while in the latter, the corresponding
+unit should be revised.
+.PP
+For instance, SGI systems are known to have a broken \fIvfork()\fR system
+call, as of this writing. And the corresponding hint file name is \fIsgi.sh\fR.
+So all you need to do is create a \fIhints/sgi.sh\fR file in which you write:
+.Ex
+d_vfork="\$\&define"
+.Ef
+which will always remap \fIvfork\fR on \fIfork\fR (see \fId_vfork.U\fR). When
+running on SGI systems for the first time, \fIConfigure\fR will detect that
+there is an \fIhints/sgi.sh\fR file, and that we are on an IRIX machine
+(the kernel name is often /irix), therefore it will propose \fIsgi\fR as a
+possible hint.
+If the user accepts it, and since the \fI\$\&d_vfork\fR value is modified
+via the \fI$\&setvar\fR call, a \fIwhoa!\fR will be emitted to warn that we
+are about to override the value computed by \fIConfigure\fR.
+.PP
+Note that you don't have to provide \fIall\fR the hints known by
+\fIOldconfig.U\fR. If a hint file is missing, it will not be proposed as a
+possible choice. The heuristic tests ran to compute the possible hint
+candidates are flaky. If you have new values or different tests, please send
+them to me...
+'''
+.SS Overriding Choices
+.PP
+If you create a \fIconfig.over\fR file in the top level directory,
+\fIConfigure\fR will ask you if you wish to load it to override the default
+values. This is done prior creation of the \fIconfig.sh\fR file, so it gives
+you a chance to patch the values stored in there.
+.PP
+This is distinct from the hints approach in that it is a local file, which
+the user is free to create for his own usage. You should not provide such
+a file yourself, but let the user know about this possibility.
+'''
+.SS Configure Options
+.PP
+The \fIConfigure\fR script may be called with some options specified on the
+command line, to slightly modify its behaviour. Here are the allowed options:
+.TP 10
+.B \-d
+Use defaults for all answers.
+.TP
+.B \-e
+Go on without questioning past the production of \fIconfig.sh\fR.
+.TP
+.B \-f \fIfile\fR
+Use the specified file as a default configuration. If this switch is not
+used, the configuration is taken from \fIconfig.sh\fR, when present.
+.TP
+.B \-h
+Print help message and exit.
+.TP
+.B \-r
+Reuse C symbols value if possible. This will skip the costly \fInm\fR
+symbol extraction. If used the first time (with no previous configuration
+file), \fIConfigure\fR will try to compile and link a small program in order
+to know about the presence of a symbol, or absence thereof.
+.TP
+.B \-s
+Silent mode. Only strings printed on file descriptor #4 will be seen on
+the screen (that's the important messages). It's not possible to completely
+turn off any output, but you may use '\fIConfigure -ders >/dev/null 2>&1\fR'
+to have a full batch run with no output and no user interaction required.
+.TP
+.B \-D\fI symbol=value\fR
+Pre-defines \fIsymbol\fR to bear the specified \fIvalue\fR. It is also
+possible to use '\fB-D\fI symbol\fR' which will use a default value
+of 'define'.
+.TP
+.B \-E
+Stop at the end of the configuration questions, after having produced
+a \fIconfig.sh\fR. This will not perform any '\fImake depend\fR' or .SH files
+extraction.
+.TP
+.B \-K
+Knowledgeable user. When you use this option, you know what you are
+doing and therefore the \fIconfig.sh\fR file will always be handled as if it
+was intended to be re-used, even though it might have been generated on
+an alien system. It also prevents aborting when \fIConfigure\fR detects
+an unusable C compiler or a wrong set of C flags.
+Further shortcuts might be turned on by this option as well in the future.
+This option is documented in the \fIConfigure\fR usage message, to remind
+us about its existence, but the given description is hoped to be cryptic
+enough. :-)
+.TP
+.B \-O
+Allow values specified via a \fB\-D\fR or \fB\-U\fR to override settings from
+any loaded configuration file. This is not the default behaviour since the
+overriding will not be propagated to variables derived from those you are
+presently altering. Naturally, without \fB-O\fR, the setting is only
+done when no configuration file is loaded, which is safe since derivative
+variables have not been computed yet...
+.TP
+.B \-S
+Perform variable substitution on all the .SH files. You can combine it with the
+\fB\-f\fR switch to propagate any configuration you like.
+.TP
+.B \-U\fI symbol=\fR
+Pre-sets \fIsymbol\fR to bear an empty value. It is also
+possible to use '\fB-U\fI symbol\fR' which will set \fIsymbol\fR to 'undef'.
+.TP
+.B \-V
+Print the version number of the \fImetaconfig\fR that generated this
+.I Configure
+script and exit.
+'''
+.SS Running Environment
+Upon starting, \fIConfigure\fR creates a local \fIUU\fR directory and runs
+from there. The directory is removed when Configure ends, but this means
+you must run the script from a place where you can write, i.e. not from
+a read-only file system.
+.PP
+You can run \fIConfigure\fR remotely though, as in:
+.Ex
+ ../package/Configure
+.Ef
+to configure sources that are not present locally. All the generated files
+will be put in the directory where you're running the script from. This magic
+is done thanks to the src.U unit, which is setting the \fI\$src\fR
+and \fI\$rsrc\fR variables to point to the package sources. That path is
+full or relative, depending on whether \fIConfigure\fR was invoked via a
+full or relative path.
+.PP
+From within the \fIUU\fR subdirectory, you can use \fI\$rsrc\fR to access the
+source files (units referring to source files link hints shall always use
+this mechanism and not assume the file is present in the parent directory).
+All the Makefiles should use the \$src variable as a pointer to the sources
+from the top of the build directory (where \fIConfigure\fR is run), either
+directly or via a VPATH setting.
+.PP
+When running \fIConfigure\fR remotely, the .SH files are extracted in the
+build directory, not in the source tree. However, it requires some kind of
+a \fImake\fR support to be able to compile things in a build directory whilst
+the sources lie elsewhere.
+'''
+.SS Using Magic Redefinitions
+.PP
+By making use of the \fB\-M\fR switch, some magic remappings may take place
+within a \fIconfmagic.h\fR file. That file needs to be included after
+\fIconfig.h\fR, of course, but also after all the other needed include files.
+Namely:
+.Ex
+#include "config.h"
+\&...
+\&... \fIother inclusions\fR ...
+\&...
+#include "confmagic.h"
+.Ef
+Typically, \fIconfmagic.h\fR will attempt to remap \fIbcopy()\fR
+on \fImemcpy()\fR if no \fIbcopy()\fR is available locally, or transform
+\fIvfork\fR into \fIfork\fR when necessary, hence making it useless to
+bother about the \fIHAS_VFORK\fR symbol.
+.PP
+This configuration magic is documented in the Glossary file.
+'''
+.SS Unit Templates
+.PP
+There is a set of unit templates in the \fImetaconfig\fR source directory,
+which are intended to be used by a (not yet written) program to quickly
+produce new units for various kind of situations. No documentation for this
+unfinished project, but I thought I would mention it in the manual page in
+case you wish to do it yourself and then contribute it...
+.SH AUTHORS
+Larry Wall <lwall@netlabs.com> for version 2.0.
+.br
+Harlan Stenn <harlan@mumps.pfcs.com> for important unit extensions.
+.br
+Raphael Manfredi <ram@hptnos02.grenoble.hp.com>.
+.br
+Many other contributors for the
+\fImetaconfig\fR units. See the credit file for a list.
+.SH FILES
+.TP 10
+.PD 0
+LIB/dist/mcon/U/*.U
+Public unit files
+.TP
+U/*.U
+Private unit files
+.TP
+LIB/dist/mcon/Glossary
+Glossary file, describing all the metaconfig symbols.
+.TP
+Obsolete
+Lists all the obsolete symbols used by the sources.
+.TP
+Wanted
+Lists all the wanted symbols.
+.PD
+.sp
+.in +5
+where LIB is $privlibexp.
+.in -5
+.SH BUGS
+Units are sometimes included unnecessarily if one of its symbols is
+accidentally mentioned, e.g. in a comment.
+Better too many units than too few, however.
+.SH "SEE ALSO"
+pat($manext), makeSH($manext), makedist($manext), metalint($manext)
+!GROK!THIS!
+chmod 444 metaconfig.$manext
diff --git a/mcon/man/mlint.SH b/mcon/man/mlint.SH
new file mode 100755
index 0000000..65259d7
--- /dev/null
+++ b/mcon/man/mlint.SH
@@ -0,0 +1,559 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting mcon/man/metalint.$manext (with variable substitutions)"
+$rm -f metalint.$manext
+$spitshell >metalint.$manext <<!GROK!THIS!
+.TH METALINT $manext "Version $VERSION PL$PATCHLEVEL"
+''' @(#) Manual page for metalint
+'''
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: mlint.SH,v $
+''' Revision 3.0.1.9 1997/02/28 16:30:25 ram
+''' patch61: new "create" and "empty" lint directives
+''' patch61: documented new messages
+'''
+''' Revision 3.0.1.8 1995/09/25 09:18:07 ram
+''' patch59: documented new ?Y: directive
+''' patch59: fixed my e-mail address
+'''
+''' Revision 3.0.1.7 1995/07/25 14:18:51 ram
+''' patch56: added two new warnings for : comments lines in Configure
+'''
+''' Revision 3.0.1.6 1994/10/29 16:33:56 ram
+''' patch36: documents new ?F: lines and the related metalint warnings
+''' patch36: removed statement in BUGS since all warnings may now be shut
+'''
+''' Revision 3.0.1.5 1994/05/06 15:20:30 ram
+''' patch23: added -L switch to override public unit repository path
+''' patch23: two new warnings concerning last unit lines
+'''
+''' Revision 3.0.1.4 1994/01/24 14:20:39 ram
+''' patch16: can now easily suppress warning about made "special units"
+'''
+''' Revision 3.0.1.3 1993/11/10 17:37:39 ram
+''' patch14: documents stale ?M: dependency check
+'''
+''' Revision 3.0.1.2 1993/10/16 13:52:23 ram
+''' patch12: added support for ?M: lines and fixed some typos
+'''
+''' Revision 3.0.1.1 1993/08/19 06:42:24 ram
+''' patch1: leading config.sh searching was not aborting properly
+'''
+''' Revision 3.0 1993/08/18 12:10:15 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+'''
+.SH NAME
+metalint \- a metaconfig unit consistency checker
+.SH SYNOPSIS
+.B metalint
+[ \-\fBhklsV\fR ]
+[ \-\fBL \fIdir\fR ]
+.SH DESCRIPTION
+.I Metalint
+parses the units and performs some extensive consistency checks, to make sure
+the whole set is sound. Due to the relatively huge amount of units available,
+it is becoming very difficult to maintain the units manually, and an automated
+process can be of real help, although not perfect.
+.PP
+.I Metalint
+operates from within your top level package directory and is used to make sure
+your own private units are correctly relying on the publicly available units.
+If you intensively develop new units, you should run \fImetalint\fR on them
+before making them publicly available.
+.SH OPTIONS
+.I Metalint
+recognizes the following set of options:
+.TP 15
+.B \-h
+Print a short usage description and exit.
+.TP
+.B \-k
+Keep temporary \fI.MT\fR directory.
+.TP
+.B \-l
+(not implemented yet) By default, \fImetalint\fR only reports problems related
+to your own private units. This switch directs \fImetalint\fR to also report
+problems in publicly available units.
+.TP
+.B \-s
+Silent mode.
+.TP
+\fB\-L\fI dir\fR
+Override default library location. Normally only useful for metaconfig
+maintainers to locally check the units being developped instead of the
+publicly available ones. The \fIdir\fR specified is the one containing the
+units \fIU\fR directory.
+.TP
+.B \-V
+Print version number and exit.
+.SH DIAGNOSTICS
+The following diagnostics may be emitted by \fImetalint\fR:
+.TP 5
+"(?MAKE) ignoring duplicate dependency listing line."
+More than one ?MAKE: line bearing dependencies was found in the unit. There
+may be only one such line, although multiple ?MAKE action lines may occur.
+.TP
+"(?MAKE) special unit 'Xxx' should not be listed as made."
+A special unit symbol (first letter capitalized) may only be listed as made
+in the special unit itself. To suppress this warning in legitimate cases,
+add a '+' in front of the offending symbol (note that for non-special units,
+the '+' in this position indicates an internal symbol which should not appear
+in the config.sh file).
+.TP
+"(?MAKE) '+xxx' is listed x times."
+A conditional dependency is listed more than once. This is harmless though.
+.TP
+"(?MAKE) 'xxx' is listed x times."
+A normal depdendency is listed more than once. Again, an harmless error.
+.TP
+"(?MAKE) 'xxx' listed as both conditional and full dependency."
+Symbol is listed as a normal dependency and as a conditional one.
+.I Metaconfig
+will consider this as being a full dependency, but that may not be what you
+initially wanted...
+.TP
+"(?Y) unknown layout directive 'xxx'."
+Layout directives may only be one of \fItop\fR, \fIdefault\fR or \fIbottom\fR,
+but case does not matter. An unknown directive is just ignored and
+handled as if \fIdefault\fR had been specified.
+.TP
+"(?S) duplicate description for variable '\$xxx'."
+Shell symbol is described more than once, and that will produce two entries
+in the Glossary.
+.TP
+"(?S) variable '\$xxx' is not listed on ?MAKE: line."
+The unit describes a shell symbol entry which cannot be used externally since
+not listed as a dependency.
+.TP
+"(?S) syntax error in ?S: construct."
+Self explainatory.
+.TP
+"(?C) duplicate description for symbol 'XXX'."
+C symbol is described more than once, and that will produce two entries for
+it in the Glossary.
+.TP
+"(?C) syntax error in ?C: construct."
+Self explainatory.
+.TP
+"(?H) symbol 'XXX' was already defined."
+Apparently, two ?H: lines are defining the same C symbol.
+.TP
+"(?H) variable '\$xxx' not even listed on ?MAKE: line."
+A variable is used, but not listed on the dependency line.
+.TP
+"(?H) section was already terminated by '?H:.'."
+There can be no more ?H: lines after the first '?H:.' marking the end
+of that section.
+.TP
+"(?H) uncommon cpp line should be protected with '?%<:'."
+All ?H: lines that are recognized by
+.I metaconfig
+and thus
+.I metalint
+have their inclusion in config.h automatically protected by a suitable
+symbol if none is provided. However, unrecognized lines must be protected
+with the '?%<:' sequence to avoid their inclusion should the unit not be
+loaded in Configure.
+.TP
+"(?H) line should not be listed here but in '?C:'."
+Only cpp lines should appear in the ?H: section. If you have a comment
+to put regarding the symbol, use ?C:. If you want to comment a particular
+generation sequence, put them into ?X: comment so that they don't make it
+into config.h.
+.TP
+"(?H) constraint 'xxx' is an unknown symbol."
+All the leading ?sym: constraints on the ?H: lines should be a valid
+shell or C symbol, defined in the unit.
+.TP
+"(?M) syntax error in ?M: construct."
+Self explainatory.
+.TP
+"(?M) symbol 'xxx' already listed on a ?M: line in 'yyy'."
+A magic definition for symbol xxx is attempted, but another one was
+already provided in unit yyy.
+.TP
+"(?V) visible declaration in non-special unit ignored."
+Visible declarations (?V: lines) may only appear in special units. Otherwise,
+they are meaningless.
+.TP
+"(?V) wanted variable '\$xxx' made visible."
+A wanted variable (described as a dependency on the ?MAKE: line) cannot be
+made visible since that does not make any sense: the unit cannot depend on
+it and then advertise it as being locally defined.
+.TP
+"(?V) defined variable '\$xxx' made visible."
+A defined variable (listed as made on the ?MAKE: line) cannot be made
+visible, since it could as well be directly wanted in another unit.
+.TP
+"(?V) variable '\$xxx' already made visible by unit yyy."
+Inconsistent declaration: two units are making one single symbol visible...
+.TP
+"(?V) variable '\$xxx' already read-write visible in yyy."
+The variable was already made visible as read-write by another unit.
+.TP
+"(?V) variable '\$xxx' already read-only visible in yyy."
+The variable was already made visible as read-only by another unit.
+.TP
+"(?W) variable '\$xxx' already wanted."
+Variable is already wanted, there is no need to explicitely ask for it here.
+.TP
+"(?W) variable '\$xxx' also locally defined."
+A wanted variable would conflict with a locally defined variable and could
+result in getting a garbage value.
+.TP
+"(?W) variable '\$xxx' already listed on a ?W: line in 'yyy'."
+The variable in the shell symbol section of a ?W: line can only appear in
+one unit.
+.TP
+"(?F) produced file 'xxx' mutiply declared."
+The file is listed more than once on the ?F: line, under the same name.
+This does not appear when declaring both a private UU file and a public
+file with the same name, for instance.
+.TP
+"(?F) UU file $uufile in non-special unit ignored."
+Private UU files (i.e. files like the \fImyread\fR script created for
+later perusal by \fIConfigure\fR) may only be created in special units.
+Exceptions allowed if the ?F: line is preceded by a proper ?LINT: hint.
+.TP
+"(?T) temporary symbol '\$xxx' multiply declared."
+Self explainatory.
+.TP
+"directive should come after ?MAKE declarations."
+The directive listed between () at the beginning of this message should
+really come after the ?MAKE: lines. You must reorder the unit or
+.I metalint
+will not be able to properly diagnose problems.
+.TP
+"control sequence '?XXX:' ignored within body."
+Attempt to use a control line other than ?X: or ?LINT: in the unit body,
+which should be only shell code
+.TP
+"variable '\$xxx' is changed."
+A variable listed as wanted in the dependency line is changed. Such a variable
+should be read-only for the unit. Use the \fIchange\fR lint hint to suppress
+this message in pathological cases.
+.TP
+"no ?MAKE: line describing dependencies."
+Every unit should have a dependency line, or it will be silently ignored by
+\fImetaconfig\fR. This message is suppressed by a ?LINT: empty hint.
+.TP
+"first body line should be a general ': description'."
+The very first shell line of the unit that will be added to the generated
+Configure script should hold a description of the unit's purpose, on a ':'
+line. There must be a space after the ':', since it is interpreted by the
+shell, and the description should avoid meta-characters like '(' or '>' unless
+the whole string is quoted. This message is suppressed by a ?LINT: nocomment
+hint.
+.TP
+"missing space after ':' to make it a comment."
+A line starting by ':' is interpreted by the shell but will be ignored. There
+must be a space after the ':' though, or the shell will try to execute an
+unknown command...
+.TP
+"found unquoted meta-character > on comment line."
+A line starting by ':' is interpreted by the shell but will be ignored.
+This means that meaningful meta-characters such as '(' or '>' must be
+quoted or escaped with a leading backslash.
+.TP
+"found dangling quote on ':' comment line."
+An unclosed single or double quote was spotted on a ':' comment line.
+Since those lines are interpreted by the shell, albeit ignored, all quotes
+must match perfectly.
+.TP
+"not ending with a blank line."
+Since all units are gathered together to form one big script, it is recommended
+(hence enforced by \fImetalint\fR) that every unit file end with an empty line.
+.TP
+"last line not ending with a new-line character."
+This is merely intended to users whose editor does not always append a
+new-line at the end of text files. Should not happen when you use \fIvi\fR.
+.TP
+"symbol '\$xxx' was not described."
+The shell symbol defined by this unit was not documented. Use the \fIdescribe\fR
+lint hint to suppress this message.
+.TP
+"C symbol 'XXX' was not described."
+The C symbol defined by this unit was not documented. Use the \fIknown\fR lint
+hint to suppress this message.
+.TP
+"C symbol 'XXX' was not defined by any ?H: line."
+A C symbol was advertised by never defined, hence it cannot appear in the
+\fIconfig.h\fR file and is therefore useless...
+.TP
+"variable '\$xxx' should have been set."
+A variable listed on the make line as made by the unit was not set by the
+shell code body. Use the \fIset\fR lint hint to suppress this message in
+pathological cases.
+.TP
+"unused dependency variable '\$xxx'."
+Apparently no usage is made from a shell variable. Use the \fIchange\fR or
+\fIuse\fR lint hints (depending on the situation) to suppress this message.
+.TP
+"unused conditional variable '\$xxx'.
+Apparently no usage is made from this conditional dependency. The \fIchange\fR
+or \fIuse\fR lint hints can be used to suppress this message.
+.TP
+"unused temporary variable '\$xxx'."
+A variable declared as temporary in a ?T: line is not used. The \fIuse\fR lint
+hint will fool \fImetalint\fR into thinking it's indeed used.
+.TP
+"unknown control sequence '?XXX:'."
+Attempt to use an unknown control sequence.
+.TP
+"unknown LINT request '$xxx' ignored."
+An unknown ?LINT: tag was used. All such tags must be spelled out in lowercase.
+.TP
+"symbol '\$xxx' has no default value."
+A symbol used as a conditional dependency in some unit has no default value
+set by a ?D: line.
+.TP
+"stale ?MAKE: dependency 'xxx'."
+Unit lists a symbol as a dependency, but that symbol is otherwise unknown, i.e.
+never appears as made by any other unit.
+.TP
+"symbol '\$xxx' missing from ?MAKE."
+A symbol used or defined was not listed as a dependency in the ?MAKE: line.
+.TP
+"missing xxx from ?MAKE for visible '\$yyy'."
+A symbol defined as visible by a special unit is used, but that special unit
+is not part of the dependency line.
+.TP
+"stale ?M: dependency 'xxx'."
+Magic line lists a C symbol as a dependency but that symbol is not known
+by any unit.
+.TP
+"unknown symbol '\$xxx'."
+I have no idea about what this symbol is. If the variable is externally
+define, this warning can be suppresed via a proper ?LINT: extern.
+.TP
+"read-only symbol '\$xxx' is set."
+A symbol that should be read-only is set by the unit's shell code body.
+.TP
+"obsolete symbol 'xxx' is used."
+An obsolete symbol is used in the unit's shell code.
+.TP
+"undeclared symbol '\$xxx' is set."
+The unit tries to set a shell variable which has not been otherwise declared
+as made or as a temporary variable, or whatever.
+.TP
+"unclosed ?H: section."
+The ?H: section was not terminated by a single '?H:.' line before
+the body of the unit or the start of another ?C: section.
+.TP
+"C symbol 'xxx' is defined in the following units:"
+The C symbol is defined in more that one unit. Offending units are listed.
+.TP
+"Shell symbol 'xxx' is defined in the following units:"
+A shell symbol is defined in more than one unit. Offending units folllow.
+.TP
+"Shell symbol 'xxx' is altogether:"
+A shell symbol is defined by some units, obsoleted by others and used as
+a temporary.
+.TP
+"Shell symbol 'xxx' is both defined and obsoleted:"
+Self explainatory.
+.TP
+"Shell symbol 'xxx' is both defined and used as temporary:"
+Self explainatory.
+.TP
+"Shell symbol 'xxx' obsoleted also used as temporary:"
+Self explainatory.
+.TP
+"definition of '\$xxx' not closed by '?S:.'."
+Self explainatory.
+.TP
+"definition of 'XXX' not closed by '?C:.'."
+Self explainatory.
+.TP
+"magic definition of 'xxx' not closed by '?M:.'."
+Self explainatory.
+.TP
+"variable '\$xxx' is defined externally."
+A variable defined externally (i.e. in another unit) is used, without proper
+dependency information. Use the \fIextern\fR lint hint to suppress this message.
+.TP
+"file 'xxx' was not created."
+A file listed as a private UU file is not created by the special unit.
+Creation is detected by seing an explicit shell redirection to the file,
+not by an implicit creation (such as a C compilation would for instance).
+All special units should create only shell scripts explicitely anyway so this
+message cannot be suppressed via a lint hint.
+.TP
+"local file 'xxx' may override the one set by 'unit.U'."
+You are attempting to create a local file, but the special unit creates one
+bearing the exact same name and should it be loaded before
+within \fIConfigure\fR, you would override that file. Change the name of your
+local file.
+.TP
+"unused temporary file 'xxx'.
+The file was declared on the ?F: line but does not appear to be used
+anywhere.
+.TP
+"mis-used temporary file 'xxx'.
+A local temporary file has been declared on the ?F: line and is used in
+a way that may not be the proper one. Indeed, all such local files should
+be called with an explicit relative path, to avoid PATH lookups which could
+get you another file.
+.TP
+"you might not always get file 'xxx' from 'unit.U'."
+You seem to be calling the specified file, but not by using an explicit
+relative pathname. Relying on the PATH to find this file is not safe.
+To fix this problem, call your file using somthing like \fI./xxx\fR.
+.TP
+"missing Unit from ?MAKE for private file 'xxx'."
+You are using a private UU file without listing the special unit that
+produces it in your dependency line. Add the unit to your dependency list.
+.TP
+"unknown private file 'xxx'."
+The file does not appear on any ?F: line; however it should.
+.TP
+"File 'xxx' is defined in the following units:"
+The listed units cannot seem to agree on who is defining the file.
+.TP
+"empty here-document name discouraged."
+You should refrain from using empty names for here documents, as
+.I metalint
+will not monitor those.
+.TP
+"unclosed here-document xxx started line x."
+The opened here-document at line x was never closed in this unit.
+This generally mean that when the unit is used, the generated script will
+not work!
+.TP
+"spurious 'LINT xxx' directive."
+You have inserted a ?LINT: directive that is not used to shut-up warnings.
+.TP
+"Cycle found for:"
+There is a dependency cycle found for the symbols listed. Only the symbols
+involved in the cycle are listed.
+.TP
+"Cycle involves:"
+An exerpt of the dependencies where the cycle was found is listed. This may
+involve far more symbols than the previous message, because \fImetalint\fR
+actually rescans the rules to emphasize the cycle and stops whenever it has
+found one, i.e. it does not try to minimize it (the cycle is found using
+another algorithm, which unfortunately cannot spit it out but only say
+for sure there is one).
+.SH REFERENCE
+.I Metalint
+uses the following control lines, which are otherwise ignored by
+\fImetaconfig\fR:
+.TP 5
+?V:\fIread-only symbols\fR:\fIread-write symbols\fR
+This line should be used only in special units. It lists all the shell
+variable defined by the unit which should not be used directly as dependencies
+by other units: they must include this special unit in their dependency list
+if they make use of any of the symbols described here. Those can be viewed
+as exported symbols which you inherit from when depending from the unit.
+Symbols may be exported read-only or read-write.
+.TP
+?F:\fIfiles created\fR
+This line serves two purposes: it is a \fImetalint\fR hint, and also
+a placeholder for future \fIjmake\fR use. It must list three kind of files:
+the temporary one which are created for a test, the private UU ones created
+in the UU directory for later perusal, and the public ones left in the
+root directory of the package. Temporary files must be listed with a
+preceding '!' character (meaning "no! they're not re-used later!"), private
+UU files should be preceded by a './' (meaning: to use them, say \fI./file\fR,
+not just \fIfile\fR), and public ones should be named as-is.
+.TP
+?T:\fIshell temporaries\fR
+This line should list all the shell variables used as temporaries within
+the unit's body. This line should be kept accurate, and prevents you from
+writing a unit defining a symbol which would be used as a scratch variable
+in another unit...
+.TP
+?LINT:\fIkeyword\fR \fIsymbol_list\fR
+Specifies a lint hint. The following keywords are available:
+.RS +10
+.TP 15
+.PD 0
+.I change
+shell variable ok to be changed
+.TP
+.I create
+persistent file ok to be created by non-special unit
+.TP
+.I define
+shell variables listed are defined in this unit
+.TP
+.I describe
+listed shell variables are described by ?S:
+.TP
+.I extern
+variable known to be externally defined
+.TP
+.I empty
+unit file is empty and kept only as a placeholder.
+.TP
+.I known
+listed C variables are described
+.TP
+.I nocomment
+unit file is special and may miss a leading ': description' line.
+.TP
+.I nothere
+listed names are not here documents (e.g. "1 << foo" in a C program)
+.TP
+.I set
+listed variables are set
+.TP
+.I use
+variables listed are used by this unit
+.TP
+.I unclosed
+listed names of here-documents are not closed in this unit
+.TP
+.I usefile
+listed file is used (do not prepend name with '!' for temporary ones)
+.PD
+.RS -10
+.SH AUTHORS
+Harlan Stenn <harlan@mumps.pfcs.com> wrote the first version, based on
+Larry Wall's \fImetaconfig\fR from dist 2.0.
+.br
+Raphael Manfredi <ram@hptnos02.grenoble.hp.com> rewrote it from scratch for
+3.0 with a few enhancements.
+.SH FILES
+.TP 10
+.PD 0
+LIB/dist/mcon/U/*.U
+Public unit files
+.TP
+U/*.U
+Private unit files
+.PD
+.sp
+.in +5
+where LIB is $privlibexp.
+.in -5
+.SH BUGS
+Maybe.
+.SH "SEE ALSO"
+metaconfig($manext), metaxref($manext)
+!GROK!THIS!
+chmod 444 metalint.$manext
diff --git a/mcon/man/mxref.SH b/mcon/man/mxref.SH
new file mode 100755
index 0000000..b0dbbad
--- /dev/null
+++ b/mcon/man/mxref.SH
@@ -0,0 +1,133 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting mcon/man/metaxref.$manext (with variable substitutions)"
+$rm -f metaxref.$manext
+$spitshell >metaxref.$manext <<!GROK!THIS!
+.TH METAXREF $manext "Version $VERSION PL$PATCHLEVEL"
+''' @(#) Manual page for metaxref
+'''
+''' $Id$
+'''
+''' Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+'''
+''' You may redistribute only under the terms of the Artistic Licence,
+''' as specified in the README file that comes with the distribution.
+''' You may reuse parts of this distribution only within the terms of
+''' that same Artistic Licence; a copy of which may be found at the root
+''' of the source tree for dist 4.0.
+'''
+''' $Log: mxref.SH,v $
+''' Revision 3.0.1.4 1997/02/28 16:30:39 ram
+''' patch61: new -L option to match metaconfig and metalint
+'''
+''' Revision 3.0.1.3 1994/10/29 16:34:26 ram
+''' patch36: the leading .TH was referring to metaconfig
+'''
+''' Revision 3.0.1.2 1993/10/16 13:52:46 ram
+''' patch12: added BUGS section
+'''
+''' Revision 3.0.1.1 1993/08/19 06:42:25 ram
+''' patch1: leading config.sh searching was not aborting properly
+'''
+''' Revision 3.0 1993/08/18 12:10:15 ram
+''' Baseline for dist 3.0 netwide release.
+'''
+'''
+.SH NAME
+metaxref \- builds cross-reference file/unit/item information
+.SH SYNOPSIS
+.B metaxref
+[ \-\fBdhkmsV\fR ] [ \fB\-f\fI manifest\fR ]
+[ \-\fBL \fIdir\fR ]
+.SH DESCRIPTION
+.I Metaxref
+is a program that scans all the files in your MANIFEST file and produces
+three files which contains information about how the files in that MANIFEST
+reference items defined by metaconfig's unit files.
+.PP
+The first two files,
+.I I.fui
+and
+.I I.uif
+reference the \fIfile\fR, \fIunit\fR and \fIitems\fR sorted differently. The
+third file, \fIObsolete\fR, dumps all the known obsolete symbols, in which
+file they appear and the new symbol that should be used instead.
+.PP
+Note that obsolete symbols do not appear in the main cross-reference files,
+but are only listed in the \fIObsolete\fR file. That's yet another incentive
+to use the new symbols in your sources. :-)
+.SH OPTIONS
+.I Metaxref
+recognizes the following options:
+.TP 10
+.B \-d
+Turn on debug mode.
+.TP
+.B \-f\fI manifest\fR
+Use an alternate \fImanifest\fR file.
+.TP
+.B \-h
+Print help message and exit.
+.TP
+.B \-k
+Keep temporary \fI.MT\fR directory.
+.TP
+.B \-m
+Assume lots of memory and swap space. This will drastically improve the
+symbol lookup time in your source files, at the expense of memory usage.
+.TP
+.B \-s
+Turn on silent mode.
+.TP
+.B \-L\fI dir\fR
+Override default library location (where the \fIU\fR units directory
+can be found).
+.TP
+.B \-V
+Print version number and exit.
+.SH AUTHOR
+Harlan Stenn <harlan@mumps.pfcs.com>
+.SH FILES
+.TP 10
+.PD 0
+LIB/dist/mcon/U/*.U
+Public unit files.
+.TP
+U/*.U
+Private unit files
+.TP
+I.fui
+Lists information sorted by file, unit and item.
+.TP
+I.uif
+Lists information sorted by unit, item and file.
+.TP
+Obsolete
+Lists all the obsolete symbols used by the sources.
+.PD
+.sp
+.in +5
+where LIB is $privlibexp.
+.in -5
+.SH BUGS
+Metaxref will list among the wanted items all those magic symbols defined
+within units on the ?M: lines. Those are relevant only when metaconfig is
+invoked with the \fB\-M\fR option.
+.SH "SEE ALSO"
+metaconfig($manext), metalint($manext)
+!GROK!THIS!
+chmod 444 metaxref.$manext
diff --git a/mcon/mconfig.SH b/mcon/mconfig.SH
new file mode 100755
index 0000000..8fb6095
--- /dev/null
+++ b/mcon/mconfig.SH
@@ -0,0 +1,182 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting mcon/mconfig (with variable substitutions)"
+cat >mconfig <<!GROK!THIS!
+$startperl
+ eval "exec perl -S \$0 \$*"
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Larry Wall <lwall@netlabs.com>
+# Key Contributor: Harlan Stenn <harlan@mumps.pfcs.com>
+#
+# $Log: mconfig.SH,v $
+# Revision 3.0.1.5 1995/07/25 14:19:05 ram
+# patch56: new -G option
+#
+# Revision 3.0.1.4 1994/06/20 07:11:04 ram
+# patch30: new -L option to override public library path for testing
+#
+# Revision 3.0.1.3 1994/01/24 14:20:53 ram
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.2 1993/10/16 13:53:10 ram
+# patch12: new -M option for magic symbols and confmagic.h production
+#
+# Revision 3.0.1.1 1993/08/19 06:42:26 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:17 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+# Perload ON
+
+\$MC = '$privlib';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+\$grep = '$grep';
+!GROK!THIS!
+
+$spitshell >>mconfig <<'!NO!SUBS!'
+chop($date = `date`);
+&profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless &Getopts("dhkmostvwGMVL:");
+
+$MC = $opt_L if $opt_L; # May override public library path
+$MC = &tilda_expand($MC); # ~name expansion
+chop($WD = `pwd`); # Working directory
+chdir $MC || die "Can't chdir to $MC: $!\n";
+chop($MC = `pwd`); # Real metaconfig lib path (no symbolic links)
+chdir $WD || die "Can't chdir back to $WD: $!\n";
+
+++$opt_k if $opt_d;
+++$opt_M if -f 'confmagic.h'; # Force -M if confmagic.h already there
+
+if ($opt_V) {
+ print STDERR "metaconfig $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+unlink 'Wanted' unless $opt_w; # Wanted rebuilt if no -w
+unlink 'Obsolete' unless $opt_w; # Obsolete file rebuilt if no -w
+&readpackage; # Merely get the package's name
+&init; # Various initializations
+`mkdir .MT 2>&1` unless -d '.MT'; # For private temporary files
+
+&locate_units; # Fill in @ARGV with a unit list
+&extract_dependencies; # Extract dependencies from units
+&extract_filenames; # Extract files to be scanned for
+&build_wanted; # Build a list of wanted symbols in file Wanted
+&build_makefile; # To do the transitive closure of dependencies
+&solve_dependencies; # Now run the makefile to close dependency graph
+&create_configure; # Create the Configure script and related files
+&cosmetic_update; # Update the manifests
+
+if ($opt_k) {
+ print "Leaving subdirectory .MT unremoved so you can peruse it.\n"
+ unless $opt_s;
+} else {
+ `rm -rf .MT 2>&1`;
+}
+print "Done.\n" unless $opt_s;
+
+# General initializations
+sub init {
+ &init_except; # Token which have upper-cased letters
+ &init_keep; # The keep status for built-in interpreter
+ &init_priority; # Priorities for diadic operators
+ &init_constants; # Define global constants
+ &init_depend; # The %Depend array records control line handling
+}
+
+sub init_constants {
+ $NEWMANI = 'MANIFEST.new'; # List of files to be scanned
+ $MANI = 'MANIFEST'; # For manifake
+}
+
+# Record the exceptions -- almost all symbols but these are lower case
+# We also use three symbols from Unix.U for default file suffixes.
+sub init_except {
+ $Except{'Author'}++;
+ $Except{'Date'}++;
+ $Except{'Header'}++;
+ $Except{'Id'}++;
+ $Except{'Locker'}++;
+ $Except{'Log'}++;
+ $Except{'RCSfile'}++;
+ $Except{'Revision'}++;
+ $Except{'Source'}++;
+ $Except{'State'}++;
+ $Except{'_a'}++;
+ $Except{'_o'}++;
+ $Except{'_exe'}++;
+}
+
+# Print out metaconfig's usage and exits
+sub usage {
+ print STDERR <<'EOH';
+Usage: metaconfig [-dhkmostvwGMV] [-L dir]
+ -d : debug mode.
+ -h : print this help message and exits.
+ -k : keep temporary directory.
+ -m : assume lots of memory and swap space.
+ -o : maps obsolete symbols on new ones.
+ -s : silent mode.
+ -t : trace symbols as they are found.
+ -v : verbose mode.
+ -w : trust Wanted file as being up-to-date.
+ -G : also provide a GNU configure-like front end.
+ -L : specify main units repository.
+ -M : activate production of confmagic.h.
+ -V : print version number and exits.
+EOH
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' pl/locate.pl >>mconfig
+$grep -v '^;#' pl/common.pl >>mconfig
+$grep -v '^;#' pl/depend.pl >>mconfig
+$grep -v '^;#' pl/init.pl >>mconfig
+$grep -v '^;#' pl/extract.pl >>mconfig
+$grep -v '^;#' pl/files.pl >>mconfig
+$grep -v '^;#' pl/wanted.pl >>mconfig
+$grep -v '^;#' pl/obsolete.pl >>mconfig
+$grep -v '^;#' pl/makefile.pl >>mconfig
+$grep -v '^;#' pl/order.pl >>mconfig
+$grep -v '^;#' pl/configure.pl >>mconfig
+$grep -v '^;#' pl/cosmetic.pl >>mconfig
+$grep -v '^;#' pl/eval.pl >>mconfig
+$grep -v '^;#' ../pl/package.pl >>mconfig
+$grep -v '^;#' ../pl/manifake.pl >>mconfig
+$grep -v '^;#' ../pl/tilde.pl >>mconfig
+$grep -v '^;#' ../pl/profile.pl >>mconfig
+chmod +x mconfig
+$eunicefix mconfig
diff --git a/mcon/mlint.SH b/mcon/mlint.SH
new file mode 100755
index 0000000..7f1f550
--- /dev/null
+++ b/mcon/mlint.SH
@@ -0,0 +1,136 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting mcon/mlint (with variable substitutions)"
+cat >mlint <<!GROK!THIS!
+$startperl
+ eval "exec perl -S \$0 \$*"
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Harlan Stenn <harlan@mumps.pfcs.com>
+#
+# $Log: mlint.SH,v $
+# Revision 3.0.1.3 1994/05/06 15:20:42 ram
+# patch23: added -L switch to override public unit repository path
+#
+# Revision 3.0.1.2 1994/01/24 14:21:00 ram
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.1 1993/08/19 06:42:27 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:17 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+# Perload ON
+
+\$MC = '$privlib';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+\$grep = '$grep';
+!GROK!THIS!
+
+$spitshell >>mlint <<'!NO!SUBS!'
+&profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless &Getopts("hklVL:");
+
+if ($opt_V) {
+ print STDERR "metalint $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+chop($date = `date`);
+$MC = $opt_L if $opt_L; # May override library path
+$MC = &tilda_expand($MC); # ~name expansion
+chop($WD = `pwd`); # Working directory
+chdir $MC || die "Can't chdir to $MC: $!\n";
+chop($MC = `pwd`); # Real metalint lib path (no symbolic links)
+chdir $WD || die "Can't chdir back to $WD: $!\n";
+
+&init; # Various initializations
+`mkdir .MT 2>&1` unless -d '.MT'; # For private temporary files
+
+&locate_units; # Fill in @ARGV with a unit list
+&extract_dependencies; # Extract dependencies from units
+&sanity_checks; # Perform sanity checks
+
+if ($opt_k) {
+ print "Leaving subdirectory .MT unremoved so you can peruse it.\n"
+ unless $opt_s;
+} else {
+ `rm -rf .MT 2>&1`;
+}
+print "Done.\n" unless $opt_s;
+
+# General initializations
+sub init {
+ &init_except; # Token which have upper-cased letters
+ &init_depend; # The %Depend array records control line handling
+}
+
+# Record the exceptions -- all symbols but these are lower case
+sub init_except {
+ $Except{'Author'}++;
+ $Except{'Date'}++;
+ $Except{'Header'}++;
+ $Except{'Id'}++;
+ $Except{'Locker'}++;
+ $Except{'Log'}++;
+ $Except{'RCSfile'}++;
+ $Except{'Revision'}++;
+ $Except{'Source'}++;
+ $Except{'State'}++;
+}
+
+# Print out metalint's usage and exits
+sub usage {
+ print STDERR <<EOM;
+Usage: metalint [-hklsV] [-L dir]
+ -h : print this help message and exits.
+ -k : keep temporary directory.
+ -l : also report problems from library units.
+ -s : silent mode.
+ -L : specify main units repository.
+ -V : print version number and exits.
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' pl/locate.pl >>mlint
+$grep -v '^;#' pl/lint.pl >>mlint
+$grep -v '^;#' pl/init.pl >>mlint
+$grep -v '^;#' pl/extract.pl >>mlint
+$grep -v '^;#' pl/obsolete.pl >>mlint
+$grep -v '^;#' pl/tsort.pl >>mlint
+$grep -v '^;#' ../pl/tilde.pl >>mlint
+$grep -v '^;#' ../pl/profile.pl >>mlint
+chmod +x mlint
+$eunicefix mlint
diff --git a/mcon/mxref.SH b/mcon/mxref.SH
new file mode 100755
index 0000000..06206ee
--- /dev/null
+++ b/mcon/mxref.SH
@@ -0,0 +1,146 @@
+case $CONFIG in
+'')
+ if test -f config.sh; then TOP=.;
+ elif test -f ../config.sh; then TOP=..;
+ elif test -f ../../config.sh; then TOP=../..;
+ elif test -f ../../../config.sh; then TOP=../../..;
+ elif test -f ../../../../config.sh; then TOP=../../../..;
+ else
+ echo "Can't find config.sh."; exit 1
+ fi
+ . $TOP/config.sh
+ ;;
+esac
+case "$0" in
+*/*) cd `expr X$0 : 'X\(.*\)/'` ;;
+esac
+echo "Extracting mcon/mxref (with variable substitutions)"
+cat >mxref <<!GROK!THIS!
+$startperl
+ eval "exec perl -S \$0 \$*"
+ if \$running_under_some_shell;
+
+# $Id$
+#
+# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+#
+# You may redistribute only under the terms of the Artistic Licence,
+# as specified in the README file that comes with the distribution.
+# You may reuse parts of this distribution only within the terms of
+# that same Artistic Licence; a copy of which may be found at the root
+# of the source tree for dist 4.0.
+#
+# Original Author: Harlan Stenn <harlan@mumps.pfcs.com>
+#
+# $Log: mxref.SH,v $
+# Revision 3.0.1.3 1997/02/28 16:30:49 ram
+# patch61: new -L option to match metaconfig and metalint
+#
+# Revision 3.0.1.2 1994/01/24 14:21:04 ram
+# patch16: added ~/.dist_profile awareness
+#
+# Revision 3.0.1.1 1993/08/19 06:42:27 ram
+# patch1: leading config.sh searching was not aborting properly
+#
+# Revision 3.0 1993/08/18 12:10:18 ram
+# Baseline for dist 3.0 netwide release.
+#
+
+# Perload ON
+
+\$MC = '$privlib';
+\$version = '$VERSION';
+\$patchlevel = '$PATCHLEVEL';
+\$grep = '$grep';
+!GROK!THIS!
+
+$spitshell >>mxref <<'!NO!SUBS!'
+&profile; # Read ~/.dist_profile
+require 'getopts.pl';
+&usage unless &Getopts("df:hkmsVL:");
+
+chop($date = `date`);
+chop($WD = `pwd`); # Working directory
+$MC = $opt_L if $opt_L; # May override library path
+$MC = &tilda_expand($MC); # ~name expansion
+chdir $MC || die "Can't chdir to $MC: $!\n";
+chop($MC = `pwd`); # Real metaxref lib path (no symbolic links)
+chdir $WD || die "Can't chdir back to $WD: $!\n";
+
+if ($opt_V) {
+ print STDERR "metaxref $version PL$patchlevel\n";
+ exit 0;
+} elsif ($opt_h) {
+ &usage;
+}
+
+$NEWMANI = $opt_f || 'MANIFEST.new';
+
+&init; # Various initializations
+`mkdir .MT 2>&1` unless -d '.MT'; # For private temporary files
+unlink 'Obsolete'; # Obsolete file rebuilt
+
+&locate_units; # Fill in @ARGV with a unit list
+&extract_dependencies; # Extract dependencies from units
+&extract_filenames; # Get source files from MANIFEST.new
+&build_xref; # Parse files, build I.* output
+
+if ($opt_k) {
+ print "Leaving subdirectory .MT unremoved so you can peruse it.\n"
+ unless $opt_s;
+} else {
+ `rm -rf .MT 2>&1`;
+}
+print "Done.\n" unless $opt_s;
+
+# General initializations
+sub init {
+ &init_except; # Token which have upper-cased letters
+ &init_depend; # The %Depend array records control line handling
+}
+
+# Record the exceptions -- all symbols but these are lower case
+sub init_except {
+ $Except{'Author'}++;
+ $Except{'Date'}++;
+ $Except{'Header'}++;
+ $Except{'Id'}++;
+ $Except{'Locker'}++;
+ $Except{'Log'}++;
+ $Except{'RCSfile'}++;
+ $Except{'Revision'}++;
+ $Except{'Source'}++;
+ $Except{'State'}++;
+}
+
+# Print out metaxref's usage and exits
+sub usage {
+ print STDERR <<EOM;
+Usage: metaxref [-dhkmsV] [-f manifest] [-L dir]
+ -d : debug mode.
+ -f : use that file as manifest instead of MANIFEST.new.
+ -h : print this help message and exits.
+ -k : keep temporary directory.
+ -m : assume lots of memory and swap space.
+ -s : silent mode.
+ -L : specify main units repository.
+ -V : print version number and exits.
+EOM
+ exit 1;
+}
+
+!NO!SUBS!
+$grep -v '^;#' pl/locate.pl >>mxref
+$grep -v '^;#' pl/common.pl >>mxref
+$grep -v '^;#' pl/xref.pl >>mxref
+$grep -v '^;#' pl/files.pl >>mxref
+$grep -v '^;#' pl/init.pl >>mxref
+$grep -v '^;#' pl/extract.pl >>mxref
+$grep -v '^;#' pl/obsolete.pl >>mxref
+$grep -v '^;#' pl/xwant.pl >>mxref
+$grep -v '^;#' pl/gensym.pl >>mxref
+$grep -v '^;#' ../pl/manifake.pl >>mxref
+$grep -v '^;#' ../pl/tilde.pl >>mxref
+$grep -v '^;#' ../pl/profile.pl >>mxref
+chmod +x mxref
+$eunicefix mxref
diff --git a/mcon/pl/common.pl b/mcon/pl/common.pl
new file mode 100644
index 0000000..0d1ea5a
--- /dev/null
+++ b/mcon/pl/common.pl
@@ -0,0 +1,289 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: common.pl,v $
+;# Revision 3.0.1.4 1994/10/29 16:35:01 ram
+;# patch36: metaconfig and metaxref ignore ?F: lines from now on
+;#
+;# Revision 3.0.1.3 1994/05/13 15:29:04 ram
+;# patch27: now understands macro definitions in ?H: lines
+;#
+;# Revision 3.0.1.2 1994/01/24 14:22:54 ram
+;# patch16: can now define "internal use only" variables on ?MAKE: lines
+;#
+;# Revision 3.0.1.1 1993/10/16 13:53:29 ram
+;# patch12: added support for ?M: lines and confmagic.h production
+;#
+;# Revision 3.0 1993/08/18 12:10:19 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;# The list of all available units is held in @ARGV. We shall parse them and
+;# extract the dependencies. A lot of global data structures are filled in
+;# during this phase.
+;#
+;# The following two H tables are used to record each know symbol (i.e. a
+;# symbol known by at least one unit), and also how many times this symbol is
+;# found in the sources. If an entry for a given key is positive, then the
+;# associated symbol (i.e. the key) is wanted and it will be written in the
+;# Wanted file.
+;# %shmaster{'$sym'} records how many times '$sym' is found in a .SH file
+;# %cmaster{'SYM'} records how many times 'SYM' is found in a .c file
+;# %cwanted{'SYM'} records the set of necessary shell symbols needed for SYM
+;# %mwanted{'sym'} is set of C symbols needed when sym is found in .c file
+;#
+;# This data structure records the initializations which are requires at the
+;# beginning of a Configure script. The initialization only occurs when the
+;# symbol is needed. Those symbols will appear in the produced config.sh file,
+;# hence the name of "master" symbols.
+;# @Master records shell configuration symbols which will appear in config.sh
+;#
+;# The @Cond array records the conditional shell symbols, i.e. those whose
+;# value may be defaulted. They will appear in the initialization section of
+;# the Configure script with the default value if they are not otherwise used
+;# but Configure needs a suitable value internally.
+;# @Cond records symbols which are flagged as conditional in the dependencies
+;# %hasdefault{'sym'} is true when the conditional 'sym' has a default value
+;#
+;# The %Obsolete array records the obsolecence for units or symbols. The key
+;# ends with .U for units, otherwise it is a symbol. Unit's obsolescence is
+;# flagged with a ?O: line (the line being the message which will be issued
+;# when the unit is used) while symbol obsolecence is indicated on the leading
+;# ?C: or ?S: line, between parenthesis. In that case, the value stored is the
+;# new symbol which should be used insted.
+;# %Obsolete{'unit.U'} is a message to be printed when obsolete unit is used
+;# %Obsolete{'sym'} is the symbol to be used in place of the obsoleted 'sym'
+;#
+;# The $dependencies variable is used to record the dependencies extracted
+;# from the units (?MAKE: line).
+;#
+;# During the dependency extraction. some files are produced in the .MT dir.
+;# Init.U records the initialization wanted
+;# Config_h.U records the informations which could go in config.h.SH
+;# Extern.U records the libraries and includes wanted by each symbol
+;#
+;# This file is shared by both metaconfig and metaxref
+;#
+# Initialize the extraction process by setting some variables.
+# We return a string to be eval to do more customized initializations.
+sub init_extraction {
+ open(INIT, ">$WD/.MT/Init.U") ||
+ die "Can't create .MT/Init.U\n";
+ open(CONF_H, ">$WD/.MT/Config_h.U") ||
+ die "Can't create .MT/Config_h.U\n";
+ open(EXTERN, ">$WD/.MT/Extern.U") ||
+ die "Can't create .MT/Extern.U\n";
+ open(MAGIC_H, ">$WD/.MT/Magic_h.U") ||
+ die "Can't create .MT/Magic_h.U\n";
+
+ $c_symbol = ''; # Current symbol seen in ?C: lines
+ $s_symbol = ''; # Current symbol seen in ?S: lines
+ $m_symbol = ''; # Current symbol seen in ?M: lines
+ $heredoc = ''; # Last "here" document symbol seen
+ $heredoc_nosubst = 0; # True for <<'EOM' here docs
+ $condlist = ''; # List of conditional symbols
+ $defined = ''; # List of defined symbols in the unit
+ $body = ''; # No procedure to handle body
+ $ending = ''; # No procedure to clean-up
+}
+
+# End the extraction process
+sub end_extraction {
+ close EXTERN; # External dependencies (libraries, includes...)
+ close CONF_H; # C symbol definition template
+ close INIT; # Required initializations
+ close MAGIC; # Magic C symbol redefinition templates
+
+ print $dependencies if $opt_v; # Print extracted dependencies
+}
+
+# Process the ?MAKE: line
+sub p_make {
+ local($_) = @_;
+ local(@ary); # Locally defined symbols
+ local(@dep); # Dependencies
+ if (/^[\w+ ]*:/) { # Main dependency rule
+ s|^\s*||; # Remove leading spaces
+ chop;
+ s/:(.*)//;
+ @dep = split(' ', $1); # Dependencies
+ @ary = split(' '); # Locally defined symbols
+ foreach $sym (@ary) {
+ # Symbols starting with a '+' are meant for internal use only.
+ next if $sym =~ s/^\+//;
+ # Only sumbols starting with a lowercase letter are to
+ # appear in config.sh, excepted the ones listed in Except.
+ if ($sym =~ /^[_a-z]/ || $Except{$sym}) {
+ $shmaster{"\$$sym"} = undef;
+ push(@Master,"?$unit:$sym=''\n"); # Initializations
+ }
+ }
+ $condlist = ''; # List of conditional symbols
+ local($sym); # Symbol copy, avoid @dep alteration
+ foreach $dep (@dep) {
+ if ($dep =~ /^\+[A-Za-z]/) {
+ ($sym = $dep) =~ s|^\+||;
+ $condlist .= "$sym ";
+ push(@Cond, $sym) unless $condseen{$sym};
+ $condseen{$sym}++; # Conditionally wanted
+ }
+ }
+ # Append to already existing dependencies. The 'defined' variable
+ # is set for &write_out, used to implement ?L: and ?I: canvas. It is
+ # reset each time a new unit is parsed.
+ # NB: leading '+' for defined symbols (internal use only) have been
+ # removed at this point, but conditional dependencies still bear it.
+ $defined = join(' ', @ary); # Symbols defined by this unit
+ $dependencies .= $defined . ':' . join(' ', @dep) . "\n";
+ $dependencies .= " -cond $condlist\n" if $condlist;
+ } else {
+ $dependencies .= $_; # Building rules
+ }
+}
+
+# Process the ?O: line
+sub p_obsolete {
+ local($_) = @_;
+ $Obsolete{"$unit.U"} .= $_; # Message(s) to print if unit is used
+}
+
+# Process the ?S: lines
+sub p_shell {
+ local($_) = @_;
+ unless ($s_symbol) {
+ if (/^(\w+).*:/) {
+ $s_symbol = $1;
+ print " ?S: $s_symbol\n" if $opt_d;
+ } else {
+ warn "\"$file\", line $.: syntax error in ?S: construct.\n";
+ $s_symbol = $unit;
+ return;
+ }
+ # Deal with obsolete symbol list (enclosed between parenthesis)
+ &record_obsolete("\$$_") if /\(/;
+ }
+ m|^\.\s*$| && ($s_symbol = ''); # End of comment
+}
+
+# Process the ?C: lines
+sub p_c {
+ local($_) = @_;
+ unless ($c_symbol) {
+ if (s/^(\w+)\s*~\s*(\S+)\s*(.*):/$1 $3:/) {
+ # The ~ operator aliases the main C symbol to another symbol which
+ # is to be used instead for definition in config.h. That is to say,
+ # the line '?C:SYM ~ other:' would look for symbol 'other' instead,
+ # and the documentation for symbol SYM would only be included in
+ # config.h if 'other' were actually wanted.
+ $c_symbol = $2; # Alias for definition in config.h
+ print " ?C: $1 ~ $c_symbol\n" if $opt_d;
+ } elsif (/^(\w+).*:/) {
+ # Default behaviour. Include in config.h if symbol is needed.
+ $c_symbol = $1;
+ print " ?C: $c_symbol\n" if $opt_d;
+ } else {
+ warn "\"$file\", line $.: syntax error in ?C: construct.\n";
+ $c_symbol = $unit;
+ return;
+ }
+ # Deal with obsolete symbol list (enclosed between parenthesis) and
+ # make sure that list do not appear in config.h.SH by removing it.
+ &record_obsolete("$_") if /\(/;
+ s/\s*\(.*\)//; # Get rid of obsolete symbol list
+ }
+ s|^(\w+)\s*|?$c_symbol:/* $1| || # Start of comment
+ (s|^\.\s*$|?$c_symbol: */\n| && ($c_symbol = '', 1)) || # End of comment
+ s|^(.*)|?$c_symbol: *$1|; # Middle of comment
+ &p_config("$_"); # Add comments to config.h.SH
+}
+
+# Process the ?H: lines
+sub p_config {
+ local($_) = @_;
+ local($constraint); # Constraint to be used for inclusion
+ ++$old_version if s/^\?%1://; # Old version
+ if (s/^\?(\w+)://) { # Remove leading '?var:'
+ $constraint = $1; # Constraint is leading '?var'
+ } else {
+ $constraint = ''; # No constraint
+ }
+ if (/^#.*\$/) { # Look only for cpp lines
+ if (m|^#\$(\w+)\s+(\w+).*\$(\w+)|) {
+ # Case: #$d_var VAR "$var"
+ $constraint = $2 unless $constraint;
+ print " ?H: ($constraint) #\$$1 $2 \"\$$3\"\n" if $opt_d;
+ $cmaster{$2} = undef;
+ $cwanted{$2} = "$1\n$3";
+ } elsif (m|^#define\s+(\w+)\((.*)\)\s+\$(\w+)|) {
+ # Case: #define VAR(x) $var
+ $constraint = $1 unless $constraint;
+ print " ?H: ($constraint) #define $1($2) \$$3\n" if $opt_d;
+ $cmaster{$1} = undef;
+ $cwanted{$1} = $3;
+ } elsif (m|^#\$define\s+(\w+)|) {
+ # Case: #$define VAR
+ $constraint = $1 unless $constraint;
+ print " ?H: ($constraint) #define $1\n" if $opt_d;
+ $cmaster{$1} = undef;
+ $cwanted{$1} = "define\n$unit";
+ } elsif (m|^#\$(\w+)\s+(\w+)|) {
+ # Case: #$d_var VAR
+ $constraint = $2 unless $constraint;
+ print " ?H: ($constraint) #\$$1 $2\n" if $opt_d;
+ $cmaster{$2} = undef;
+ $cwanted{$2} = $1;
+ } elsif (m|^#define\s+(\w+).*\$(\w+)|) {
+ # Case: #define VAR "$var"
+ $constraint = $1 unless $constraint;
+ print " ?H: ($constraint) #define $1 \"\$$2\"\n" if $opt_d;
+ $cmaster{$1} = undef;
+ $cwanted{$1} = $2;
+ } else {
+ $constraint = $unit unless $constraint;
+ print " ?H: ($constraint) $_" if $opt_d;
+ }
+ } else {
+ print " ?H: ($constraint) $_" if $opt_d;
+ }
+ # If not a single ?H:. line, add the leading constraint
+ s/^\.// || s/^/?$constraint:/;
+ print CONF_H;
+}
+
+# Process the ?M: lines
+sub p_magic {
+ local($_) = @_;
+ unless ($m_symbol) {
+ if (/^(\w+):\s*([\w\s]*)\n$/) {
+ # A '?M:sym:' line implies a '?W:%<:sym' since we'll need to know
+ # about the wantedness of sym later on when building confmagic.h.
+ # Buf is sym is wanted, then the C symbol dependencies have to
+ # be triggered. That is done by introducing sym in the mwanted
+ # array, known by the Wanted file construction process...
+ $m_symbol = $1;
+ print " ?M: $m_symbol\n" if $opt_d;
+ $mwanted{$m_symbol} = $2; # Record C dependencies
+ &p_wanted("$unit:$m_symbol"); # Build fake ?W: line
+ } else {
+ warn "\"$file\", line $.: syntax error in ?M: construct.\n";
+ }
+ return;
+ }
+ (s/^\.\s*$/?$m_symbol:\n/ && ($m_symbol = '', 1)) || # End of block
+ s/^/?$m_symbol:/;
+ print MAGIC_H; # Definition goes to confmagic.h
+ print " ?M: $_" if $opt_d;
+}
+
+sub p_ignore {} # Ignore comment line
+sub p_lint {} # Ignore lint directives
+sub p_visible {} # No visible checking in metaconfig
+sub p_temp {} # No temporary variable control
+sub p_file {} # Ignore produced file directives (for now)
+
diff --git a/mcon/pl/configure.pl b/mcon/pl/configure.pl
new file mode 100644
index 0000000..f78925f
--- /dev/null
+++ b/mcon/pl/configure.pl
@@ -0,0 +1,245 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: configure.pl,v $
+;# Revision 3.0.1.5 1995/01/30 14:47:15 ram
+;# patch49: removed old "do name()" routine call constructs
+;#
+;# Revision 3.0.1.4 1995/01/11 15:40:02 ram
+;# patch45: now allows @if statements for the add.Config_sh unit inclusion
+;#
+;# Revision 3.0.1.3 1994/05/06 15:21:23 ram
+;# patch23: cleaned up the 'prepend' command
+;#
+;# Revision 3.0.1.2 1994/01/24 14:23:21 ram
+;# patch16: new general <\$variable> macro substitutions in wiped units
+;#
+;# Revision 3.0.1.1 1993/10/16 13:54:02 ram
+;# patch12: added support for ?M: lines and confmagic.h production
+;# patch12: new Makefile command cm_h_weed
+;#
+;# Revision 3.0 1993/08/18 12:10:20 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# This file is the heart of metaconfig. We generate a Configure script using
+;# the informations gathered in the @cmdwanted array. A unit is expected to have
+;# its path written in the %Unit array (indexing is done with the unit's name
+;# without the .U extension).
+;#
+;# The units are run through a built-in interpreter before being written to
+;# the Configure script.
+;#
+# Create the Configure script
+sub create_configure {
+ print "Creating Configure...\n" unless $opt_s;
+ open(CONFIGURE,">Configure") || die "Can't create Configure: $!\n";
+ open(CONF_H,">config_h.SH") || die "Can't create config_h.SH: $!\n";
+ if ($opt_M) {
+ open(MAGIC_H,">confmagic.h") || die "Can't create confmagic.h: $!\n";
+ }
+
+ chdir('.MT') || die "Can't cd to .MT: $!\n";
+ for (@cmdwanted) {
+ &process_command($_); # Run the makefile command
+ }
+ chdir($WD) || die "Can't cd back to $WD\n";
+ close CONFIGURE;
+ print CONF_H "#endif\n"; # Close the opened #ifdef (see Config_h.U)
+ print CONF_H "!GROK!THIS!\n";
+ close CONF_H;
+ if ($opt_M) {
+ print MAGIC_H "#endif\n"; # Close the opened #ifdef (see Magic_h.U)
+ close MAGIC_H;
+ }
+ `chmod +x Configure`;
+}
+
+# Process a Makefile 'pick' command
+sub process_command {
+ local($cmd, $target, $unit_name) = split(' ', $_[0]);
+ local($name) = $unit_name . '.U'; # Restore missing .U
+ local($file) = $name; # Where unit is located
+ unless ($file =~ m|^\./|) { # Unit produced earlier by metaconfig
+ $file = $Unit{$unit_name}; # Fetch unit from U directory
+ }
+ if (defined $Obsolete{$name}) { # Signal use of an obsolete unit
+ warn "\tObsolete unit $name is used:\n";
+ local(@msg) = split(/\n/, $Obsolete{$name});
+ foreach $msg (@msg) {
+ warn "\t $msg\n";
+ }
+ }
+ die "Can't open $file.\n" unless open(UNIT, $file);
+ print "\t$cmd $file\n" if $opt_v;
+ &init_interp; # Initializes the interpreter
+
+ # The 'add' command adds the unit to Configure.
+ if ($cmd eq 'add') {
+ while (<UNIT>) {
+ print CONFIGURE unless &skipped || !&interpret($_);
+ }
+ }
+
+ # The 'weed' command adds the unit to Configure, but
+ # makes some tests for the lines starting with '?' or '%'.
+ # These lines are kept only if the symbol is wanted.
+ elsif ($cmd eq 'weed') {
+ while (<UNIT>) {
+ if (/^\?(\w+):/) {
+ s/^\?\w+:// if $symwanted{$1};
+ }
+ if (/^%(\w+):/) {
+ s/^%\w+:// if $condwanted{$1};
+ }
+ print CONFIGURE unless &skipped || !&interpret($_);
+ }
+ }
+
+ # The 'wipe' command adds the unit to Configure, but
+ # also substitues some hardwired macros.
+ elsif ($cmd eq 'wipe') {
+ while (<UNIT>) {
+ s/<PACKAGENAME>/$package/g;
+ s/<MAINTLOC>/$maintloc/g;
+ s/<VERSION>/$version/g; # This is metaconfig's version
+ s/<PATCHLEVEL>/$patchlevel/g; # And patchlevel information
+ s/<DATE>/$date/g;
+ s/<BASEREV>/$baserev/g;
+ s/<\$(\w+)>/eval("\$$1")/ge; # <$var> -> $var substitution
+ print CONFIGURE unless &skipped || !&interpret($_);
+ }
+ }
+
+ # The 'add.Null' command adds empty initializations
+ # to Configure for all the shell variable used.
+ elsif ($cmd eq 'add.Null') {
+ for (sort @Master) {
+ if (/^\?(\w+):/) {
+ s/^\?\w+:// if $symwanted{$1};
+ }
+ print CONFIGURE unless &skipped;
+ }
+ for (sort @Cond) {
+ print CONFIGURE "$_=''\n"
+ unless $symwanted{$_} || $hasdefault{$_};
+ }
+ while (<UNIT>) {
+ print CONFIGURE unless &skipped || !&interpret($_);
+ }
+ print CONFIGURE "CONFIG=''\n\n";
+ }
+
+ # The 'add.Config_sh' command fills in the production of
+ # the config.sh script within Configure. Only the used
+ # variable are added, the conditional ones are skipped.
+ elsif ($cmd eq 'add.Config_sh') {
+ while (<UNIT>) {
+ print CONFIGURE unless &skipped || !&interpret($_);
+ }
+ for (sort @Master) {
+ if (/^\?(\w+):/) {
+ # Can't use $shmaster, because config.sh must
+ # also contain some internal defaults used by
+ # Configure (e.g. nm_opt, libc, etc...).
+ s/^\?\w+:// if $symwanted{$1};
+ }
+ s/^(\w+)=''/$1='\$$1'/;
+ print CONFIGURE unless &skipped;
+ }
+ }
+
+ # The 'close.Config_sh' command adds the final EOT line at
+ # the end of the here-document construct which produces the
+ # config.sh file within Configure.
+ elsif ($cmd eq 'close.Config_sh') {
+ print CONFIGURE "EOT\n\n"; # Ends up file
+ }
+
+ # The 'c_h_weed' command produces the config_h.SH file.
+ # Only the necessary lines are kept. If no conditional line is
+ # ever printed, then the file is useless and will be removed.
+ elsif ($cmd eq 'c_h_weed') {
+ $printed = 0;
+ while (<UNIT>) {
+ if (/^\?(\w+):/) {
+ s/^\?\w+:// if $cmaster{$1} || $symwanted{$1};
+ }
+ unless (&skipped || !&interpret($_)) {
+ if (/^$/) {
+ print CONF_H "\n" if $printed;
+ $printed = 0;
+ } else {
+ print CONF_H;
+ ++$printed;
+ }
+ }
+ }
+ }
+
+ # The 'cm_h_weed' command produces the confmagic.h file.
+ # Only the necessary lines are kept. If no conditional line is
+ # ever printed, then the file is useless and will be removed.
+ elsif ($cmd eq 'cm_h_weed') {
+ if ($opt_M) {
+ $printed = 0;
+ while (<UNIT>) {
+ if (/^\?(\w+):/) {
+ s/^\?\w+:// if $cmaster{$1} || $symwanted{$1};
+ }
+ unless (&skipped || !&interpret($_)) {
+ if (/^$/) {
+ print MAGIC_H "\n" if $printed;
+ $printed = 0;
+ } else {
+ print MAGIC_H;
+ ++$printed;
+ }
+ }
+ }
+ }
+ }
+
+ # The 'prepend' command will add the content of the target to
+ # the current file (held in $file, the one which UNIT refers to),
+ # if the file is not empty.
+ elsif ($cmd eq 'prepend') {
+ if (-s $file) {
+ open(PREPEND, ">.prepend") ||
+ die "Can't create .MT/.prepend.\n";
+ open(TARGET, $Unit{$target}) ||
+ die "Can't open $Unit{$target}.\n";
+ while (<TARGET>) {
+ print PREPEND unless &skipped;
+ }
+ print PREPEND <UNIT>; # Now add original file contents
+ close PREPEND;
+ close TARGET;
+ rename('.prepend', $file) ||
+ die "Can't rename .prepend into $file.\n";
+ }
+ }
+
+ # Command not found
+ else {
+ die "Unrecognized command from Makefile: $cmd\n";
+ }
+ &check_state; # Make sure there are no pending statements
+ close UNIT;
+}
+
+# Skip lines starting with ? or %, including all the following continuation
+# lines, if any. Return 0 if the line was not to be skipped, 1 otherwise.
+sub skipped {
+ return 0 unless /^\?|^%/;
+ &complete_line(UNIT) if /\\\s*$/; # Swallow continuation lines
+ 1;
+}
+
diff --git a/mcon/pl/cosmetic.pl b/mcon/pl/cosmetic.pl
new file mode 100644
index 0000000..bfb9575
--- /dev/null
+++ b/mcon/pl/cosmetic.pl
@@ -0,0 +1,114 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: cosmetic.pl,v $
+;# Revision 3.0.1.3 1995/07/25 14:19:16 ram
+;# patch56: added support for new -G option
+;#
+;# Revision 3.0.1.2 1995/01/30 14:47:52 ram
+;# patch49: forgot to localize the spaces variable
+;#
+;# Revision 3.0.1.1 1993/11/10 17:39:10 ram
+;# patch14: now also adds confmagic.h if not in MANIFEST.new already
+;# patch14: new functions mani_add and mani_remove to factorize code
+;#
+;# Revision 3.0 1993/08/18 12:10:20 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+# Update the MANIFEST.new file if necessary
+sub cosmetic_update {
+ # Check for an "empty" config_h.SH (2 blank lines only). This test relies
+ # on the actual text held in Config_h.U. If the unit is modified, then the
+ # following might need adjustments.
+ local($blank_lines) = 0;
+ local($spaces) = 0;
+ open(CONF_H, 'config_h.SH') || die "Can't open config_h.SH\n";
+ while(<CONF_H>) {
+ ++$blank_lines if /^$/;
+ }
+ unlink 'config_h.SH' unless $blank_lines > 3;
+
+ open(NEWMANI,$NEWMANI);
+ $_ = <NEWMANI>;
+ /(\S+\s+)\S+/ && ($spaces = length($1)); # Spaces wanted
+ close NEWMANI;
+ $spaces = 29 if ($spaces < 12); # Default value
+ open(NEWMANI,$NEWMANI);
+ $/ = "\001"; # Swallow the whole file
+ $_ = <NEWMANI>;
+ $/ = "\n";
+ close NEWMANI;
+
+ $* = 1; # Multi-line matching
+
+ &mani_add('Configure', 'Portability tool', $spaces) unless /^Configure\b/;
+ &mani_add('config_h.SH', 'Produces config.h', $spaces)
+ unless /^config_h\.SH\b/ || !-f 'config_h.SH';
+ &mani_add('confmagic.h', 'Magic symbol remapping', $spaces)
+ if $opt_M && !/^confmagic\.h\b/;
+
+ &mani_remove('config_h.SH') if /^config_h\.SH\b/ && !-f 'config_h.SH';
+ &mani_remove('confmagic.h') if /^confmagic.h\b/ && !$opt_M;
+
+ if ($opt_G) { # Want a GNU-like configure wrapper
+ &add_configure;
+ &mani_add('configure', 'GNU configure-like wrapper', $spaces)
+ if !/^configure\s/ && -f 'configure';
+ } else {
+ &mani_remove('configure') if /^configure\s/ && !-f 'configure';
+ }
+
+ $* = 0;
+}
+
+# Add file to MANIFEST.new, with properly indented comment
+sub mani_add {
+ local($file, $comment, $spaces) = @_;
+ print "Adding $file to your $NEWMANI file...\n" unless $opt_s;
+ open(NEWMANI, ">>$NEWMANI") || warn "Can't add $file to $NEWMANI: $!\n";
+ local($blank) = ' ' x ($spaces - length($file));
+ print NEWMANI "${file}${blank}${comment}\n";
+ close NEWMANI;
+}
+
+# Remove file from MANIFEST.new
+sub mani_remove {
+ local($file) = @_;
+ print "Removing $file from $NEWMANI...\n" unless $opt_s;
+ unless (open(NEWMANI, ">$NEWMANI.x")) {
+ warn "Can't create backup $NEWMANI copy: $!\n";
+ return;
+ }
+ unless (open(OLDMANI, $NEWMANI)) {
+ warn "Can't open $NEWMANI: $!\n";
+ return;
+ }
+ local($_);
+ while (<OLDMANI>) {
+ print NEWMANI unless /^$file\b/
+ }
+ close OLDMANI;
+ close NEWMANI;
+ rename("$NEWMANI.x", $NEWMANI) ||
+ warn "Couldn't restore $NEWMANI from $NEWMANI.x\n";
+}
+
+# Copy GNU-like configure wrapper to the package root directory
+sub add_configure {
+ if (-f "$MC/configure") {
+ print "Copying GNU configure-like front end...\n" unless $opt_s;
+ system "cp $MC/configure ./configure";
+ `chmod +x configure`;
+ } else {
+ warn "Can't locate $MC/configure: $!\n";
+ }
+}
+
diff --git a/mcon/pl/depend.pl b/mcon/pl/depend.pl
new file mode 100644
index 0000000..fc88f1a
--- /dev/null
+++ b/mcon/pl/depend.pl
@@ -0,0 +1,138 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: depend.pl,v $
+;# Revision 3.0.1.3 1995/09/25 09:18:56 ram
+;# patch59: new ?Y: directive to change unit layout
+;#
+;# Revision 3.0.1.2 1994/10/29 16:35:23 ram
+;# patch36: added various escapes in strings for perl5 support
+;#
+;# Revision 3.0.1.1 1993/10/16 13:54:35 ram
+;# patch12: added minimal support for ?P: lines (not ready yet)
+;#
+;# Revision 3.0 1993/08/18 12:10:21 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;# Metaconfig-dependent part of the dependency extraction.
+;#
+# Process the ?W: lines
+sub p_wanted {
+ # Syntax is ?W:<shell symbols>:<C symbols>
+ local($active) = $_[0] =~ /^([^:]*):/; # Symbols to activate
+ local($look_symbols) = $_[0] =~ /:(.*)/; # When those are used
+ local(@syms) = split(/ /, $look_symbols); # Keep original spacing info
+ $active =~ s/\s+/\n/g; # One symbol per line
+
+ # Concatenate quoted strings, so saying something like 'two words' will
+ # be introduced as one single symbol "two words".
+ local(@symbols); # Concatenated symbols to look for
+ local($concat) = ''; # Concatenation buffer
+ foreach (@syms) {
+ if (s/^\'//) {
+ $concat = $_;
+ } elsif (s/\'$//) {
+ push(@symbols, $concat . ' ' . $_);
+ $concat = '';
+ } else {
+ push(@symbols, $_) unless $concat;
+ $concat .= ' ' . $_ if $concat;
+ }
+ }
+
+ # Now record symbols in master and wanted tables
+ foreach (@symbols) {
+ $cmaster{$_} = undef; # Asks for look-up in C files
+ $cwanted{$_} = "$active" if $active; # Shell symbols to activate
+ }
+}
+
+# Process the ?INIT: lines
+sub p_init {
+ local($_) = @_;
+ print INIT "?$unit:", $_; # Wanted only if unit is loaded
+}
+
+# Process the ?D: lines
+sub p_default {
+ local($_) = @_;
+ s/^([A-Za-z_]+)=(.*)/\@if !$1\n%$1:$1=$2\n\@define $1\n\@end/
+ && ($hasdefault{$1}++, print INIT $_);
+}
+
+# Process the ?P: lines
+sub p_public {
+ local($_) = @_;
+ local($csym); # C symbol(s) we're trying to look at
+ local($nosym); # List of symbol(s) which mustn't be wanted
+ local($cfile); # Name of file implementing csym (no .ext)
+ ($csym, $nosym, $cfile) = /([^()]+)\s*(\(.*\))\s*:\s*(\S+)/;
+ unless ($csym eq '' || $cfile eq '') {
+ # Add dependencies for each C symbol, of the form:
+ # -pick public <sym> <file> <notdef symbols list>
+ # and the file will be added to config.c whenever sym is wanted and
+ # none of the notdef symbols is wanted.
+ foreach $sym (split(' ', $csym)) {
+ $dependencies .= "\t-pick public $sym $cfile $nosym\n";
+ }
+ }
+}
+
+# Process the ?Y: lines
+# Valid layouts are for now are: top, bottom, default.
+#
+# NOTA BENE:
+# This routine relies on the $defined variable, a global variable set
+# during the ?MAKE: processing, which lists all the defined symbols in
+# the unit (the optional leading '+' for internal symbols has been removed
+# if present).
+#
+# The routine fills up a %Layout table, indexed by symbol, yielding the
+# layout imposed to this unit. That table will then be used later on when
+# we sort wanted symbols for the Makefile.
+sub p_layout {
+ local($_) = @_;
+ local($layout) = /^\s*(\w+)/;
+ $layout =~ tr/A-Z/a-z/; # Case is not significant for layouts
+ unless (defined $Lcmp{$layout}) {
+ warn "\"$file\", line $.: unknown layout directive '$layout'.\n";
+ return;
+ }
+ foreach $sym (split(' ', $defined)) {
+ $Layout{$sym} = $Lcmp{$layout};
+ }
+}
+
+# Process the ?L: lines
+# There should not be any '-l' in front of the library name
+sub p_library {
+ &write_out("L:$_");
+}
+
+# Process the ?I: lines
+sub p_include {
+ &write_out("I:$_");
+}
+
+# Write out line in file Extern.U. The information recorded there has the
+# following prototypical format:
+# ?symbol:L:inet bsd
+# If 'symbol' is wanted, then 'inet bsd' will be added to $libswanted.
+sub write_out {
+ local($_) = @_;
+ local($target) = $defined; # By default, applies to defined symbols
+ $target = $1 if s/^(.*)://; # List is qualified "?L:target:symbols"
+ local(@target) = split(' ', $target);
+ chop;
+ foreach $key (@target) {
+ print EXTERN "?$key:$_\n"; # EXTERN file defined in xref.pl
+ }
+}
+
diff --git a/mcon/pl/eval.pl b/mcon/pl/eval.pl
new file mode 100644
index 0000000..c4c1d76
--- /dev/null
+++ b/mcon/pl/eval.pl
@@ -0,0 +1,300 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: eval.pl,v $
+;# Revision 3.0.1.1 1995/01/30 14:48:37 ram
+;# patch49: removed old "do name()" routine call constructs
+;#
+;# Revision 3.0 1993/08/18 12:10:22 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# The built-in interpreter
+;#
+package interpreter;
+
+# States used by our interpeter -- in sync with @Keep
+sub main'init_keep {
+ # Status in which we keep lines -- $Keep[$status]
+ @Keep = (0, 1, 1, 0, 1);
+
+ # Available status ($status)
+ $SKIP = 0;
+ $IF = 1;
+ $ELSE = 2;
+ $NOT = 3;
+ $OUT = 4;
+}
+
+# Priorities for operators -- magic numbers :-)
+sub main'init_priority {
+ $Priority{'&&'} = 4;
+ $Priority{'||'} = 3;
+}
+
+# Initializes the state stack of the interpreter
+sub main'init_interp {
+ @state = ();
+ push(@state, $OUT);
+}
+
+# Print error messages -- asssumes $unit and $. correctly set.
+sub error {
+ warn "\"$main'file\", line $.: @_.\n";
+}
+
+# If some states are still in the stack, warn the user
+sub main'check_state {
+ &error("one statement pending") if $#state == 1;
+ &error("$#state statements pending") if $#state > 1;
+}
+
+# Add a value on the stack, modified by all the monadic operators.
+# We use the locals @val and @mono from eval_expr.
+sub push_val {
+ local($val) = shift(@_);
+ while ($#mono >= 0) {
+ # Cheat... the only monadic operator is '!'.
+ pop(@mono);
+ $val = !$val;
+ }
+ push(@val, $val);
+}
+
+# Execute a stacked operation, leave result in stack.
+# We use the locals @val and @op from eval_expr.
+# If the value stack holds only one operand, do nothing.
+sub execute {
+ return unless $#val > 0;
+ local($op) = pop(@op);
+ local($val1) = pop(@val);
+ local($val2) = pop(@val);
+ push(@val, eval("$val1 $op $val2") ? 1: 0);
+}
+
+# Given an operator, either we add it in the stack @op, because its
+# priority is lower than the one on top of the stack, or we first execute
+# the stacked operations until we reach the end of stack or an operand
+# whose priority is lower than ours.
+# We use the locals @val and @op from eval_expr.
+sub update_stack {
+ local($op) = shift(@_); # Operator
+ if (!$Priority{$op}) {
+ &error("illegal operator $op");
+ return;
+ } else {
+ if ($#val < 0) {
+ &error("missing first operand for '$op' (diadic operator)");
+ return;
+ }
+ # Because of the special behaviour of do-SUBR with the while modifier,
+ # I'm using a while-BLOCK construct. I consider this to be a bug of perl
+ # 4.0 PL19, although it is clearly documented in the man page.
+ while (
+ $Priority{$op[$#op]} > $Priority{$op} # Higher priority op
+ && $#val > 0 # At least 2 values
+ ) {
+ &execute; # Execute an higher priority stacked operation
+ }
+ push(@op, $op); # Everything at higher priority has been executed
+ }
+}
+
+# This is the heart of our little interpreter. Here, we evaluate
+# a logical expression and return its value.
+sub eval_expr {
+ local(*expr) = shift(@_); # Expression to parse
+ local(@val) = (); # Stack of values
+ local(@op) = (); # Stack of diadic operators
+ local(@mono) =(); # Stack of monadic operators
+ local($tmp);
+ $_ = $expr;
+ while (1) {
+ s/^\s+//; # Remove spaces between words
+ # The '(' construct
+ if (s/^\(//) {
+ &push_val(&eval_expr(*_));
+ # A final '\' indicates an end of line
+ &error("missing final parenthesis") if !s/^\\//;
+ }
+ # Found a ')' or end of line
+ elsif (/^\)/ || /^$/) {
+ s/^\)/\\/; # Signals: left parenthesis found
+ $expr = $_; # Remove interpreted stuff
+ &execute() while $#val > 0; # Executed stacked operations
+ while ($#op >= 0) {
+ $_ = pop(@op);
+ &error("missing second operand for '$_' (diadic operator)");
+ }
+ return $val[0];
+ }
+ # A perl statement '{{'
+ elsif (s/^\{\{//) {
+ if (s/^(.*)\}\}//) {
+ &push_val((system
+ ('perl','-e', "if ($1) {exit 0;} else {exit 1;}"
+ ))? 0 : 1);
+ } else {
+ &error("incomplete perl statement");
+ }
+ }
+ # A shell statement '{'
+ elsif (s/^\{//) {
+ if (s/^(.*)\}//) {
+ &push_val((system
+ ("if $1 >/dev/null 2>&1; then exit 0; else exit 1; fi"
+ ))? 0 : 1);
+ } else {
+ &error("incomplete shell statement");
+ }
+ }
+ # Operator '||' and '&&'
+ elsif (s/^(\|\||&&)//) {
+ $tmp = $1; # Save for perl5 (Dataloaded update_stack)
+ &update_stack($tmp);
+ }
+ # Unary operator '!'
+ elsif (s/^!//) {
+ push(@mono,'!');
+ }
+ # Everything else is a test for a defined value
+ elsif (s/^([\?%]?\w+)//) {
+ $tmp = $1;
+ # Test for wanted
+ if ($tmp =~ s/^\?//) {
+ &push_val(($main'symwanted{$tmp})? 1 : 0);
+ }
+ # Test for conditionally wanted
+ elsif ($tmp =~ s/^%//) {
+ &push_val(($main'condwanted{$tmp})? 1 : 0);
+ }
+ # Default: test for definition (see op @define)
+ else {
+ &push_val((
+ $main'symwanted{$tmp} ||
+ $main'cmaster{$tmp} ||
+ $main'userdef{$tmp}) ? 1 : 0);
+ }
+ }
+ # An error occured -- we did not recognize the expression
+ else {
+ s/^([^\s\(\)\{\|&!]+)//; # Skip until next meaningful char
+ }
+ }
+}
+
+# Given an expression in a '@' command, returns a boolean which is
+# the result of the evaluation. Evaluate is collecting all the lines
+# in the expression into a single string, and then calls eval_expr to
+# really evaluate it.
+sub evaluate {
+ local($val); # Value returned
+ local($expr) = ""; # Expression to be parsed
+ chop;
+ while (s/\\$//) { # While end of line escaped
+ $expr .= $_;
+ $_ = <UNIT>; # Fetch next line
+ unless ($_) {
+ &error("EOF in expression");
+ last;
+ }
+ chop;
+ }
+ $expr .= $_;
+ while ($expr ne '') {
+ $val = &eval_expr(*expr); # Expression will be modified
+ # We return from eval_expr either when a closing parenthisis
+ # is found, or when the expression has been fully analysed.
+ &error("extra closing parenthesis ignored") if $expr ne '';
+ }
+ $val;
+}
+
+# Given a line, we search for commands (lines starting with '@').
+# If there is no command in the line, then we return the boolean state.
+# Otherwise, the command is analysed and a new state is computed.
+# The returned value of interpret is 1 if the line is to be printed.
+sub main'interpret {
+ local($value);
+ local($status) = $state[$#state]; # Current status
+ if (s|^\s*@\s*(\w+)\s*(.*)|$2|) {
+ local($cmd) = $1;
+ $cmd =~ y/A-Z/a-z/; # Canonicalize to lower case
+ # The 'define' command
+ if ($cmd eq 'define') {
+ chop;
+ $userdef{$_}++ if $Keep[$status];
+ return 0;
+ }
+ # The 'if' command
+ elsif ($cmd eq 'if') {
+ # We always evaluate, in order to find possible errors
+ $value = &evaluate($_);
+ if (!$Keep[$status]) {
+ # We have to skip until next 'end'
+ push(@state, $SKIP); # Record structure
+ return 0;
+ }
+ if ($value) { # True
+ push(@state, $IF);
+ return 0;
+ } else { # False
+ push(@state, $NOT);
+ return 0;
+ }
+ }
+ # The 'else' command
+ elsif ($cmd eq 'else') {
+ &error("expression after 'else' ignored") if /\S/;
+ $state[$#state] = $SKIP if $state[$#state] == $IF;
+ return 0 if $state[$#state] == $SKIP;
+ if ($state[$#state] == $OUT) {
+ &error("unexpected 'else'");
+ return 0;
+ }
+ $state[$#state] = $ELSE;
+ return 0;
+ }
+ # The 'elsif' command
+ elsif ($cmd eq 'elsif') {
+ # We always evaluate, in order to find possible errors
+ $value = &evaluate($_);
+ $state[$#state] = $SKIP if $state[$#state] == $IF;
+ return 0 if $state[$#state] == $SKIP;
+ if ($state[$#state] == $OUT) {
+ &error("unexpected 'elsif'");
+ return 0;
+ }
+ if ($value) { # True
+ $state[$#state] = $IF;
+ return 0;
+ } else { # False
+ $state[$#state] = $NOT;
+ return 0;
+ }
+ }
+ # The 'end' command
+ elsif ($cmd eq 'end') {
+ &error("expression after 'end' ignored") if /\S/;
+ pop(@state);
+ &error("unexpected 'end'") if $#state < 0;
+ return 0;
+ }
+ # Unknown command
+ else {
+ &error("unknown command '$cmd'");
+ return 0;
+ }
+ }
+ $Keep[$status];
+}
+
+package main;
+
diff --git a/mcon/pl/extract.pl b/mcon/pl/extract.pl
new file mode 100644
index 0000000..385b751
--- /dev/null
+++ b/mcon/pl/extract.pl
@@ -0,0 +1,109 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: extract.pl,v $
+;# Revision 3.0.1.1 1994/05/06 15:21:43 ram
+;# patch23: now saves the last unit line value for metalint
+;#
+;# Revision 3.0 1993/08/18 12:10:22 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# This is the heart of the dependency extractor. Each control line is
+;# processed. The dependencies are stored in $dependencies.
+;#
+# Extract dependencies from units held in @ARGV
+sub extract_dependencies {
+ local($proc); # Procedure used to handle a ctrl line
+ local($file); # Current file scanned
+ local($dir, $unit); # Directory and unit's name
+ local($old_version) = 0; # True when old-version unit detected
+ local($mc) = "$MC/U"; # Public metaconfig directory
+ local($line); # Last processed line for metalint
+
+ printf "Extracting dependency lists from %d units...\n", $#ARGV+1
+ unless $opt_s;
+
+ chdir $WD; # Back to working directory
+ &init_extraction; # Initialize extraction files
+ $dependencies = ' ' x (50 * @ARGV); # Pre-extend
+ $dependencies = '';
+
+ # We do not want to use the <> construct here, because we need the
+ # name of the opened files (to get the unit's name) and we want to
+ # reset the line number for each files, and do some pre-processing.
+
+ file: while ($file = shift(@ARGV)) {
+ close FILE; # Reset line number
+ $old_version = 0; # True if unit is an old version
+ if (open(FILE, $file)) {
+ ($dir, $unit) = ('', $file)
+ unless ($dir, $unit) = ($file =~ m|(.*)/(.*)|);
+ $unit =~ s|\.U$||; # Remove extension
+ } else {
+ warn("Can't open $file.\n");
+ }
+ # If unit is in the standard public directory, keep only the unit name
+ $file = "$unit.U" if $dir eq $mc;
+ print "$dir/$unit.U:\n" if $opt_d;
+ line: while (<FILE>) {
+ $line = $_; # Save last processed unit line
+ if (s/^\?([\w\-]+)://) { # We may have found a control line
+ $proc = $Depend{$1}; # Look for a procedure to handle it
+ unless ($proc) { # Unknown control line
+ $proc = $1; # p_unknown expects symbol in '$proc'
+ eval '&p_unknown'; # Signal error (metalint only)
+ next line; # And go on next line
+ }
+ # Long lines may be escaped with a final backslash
+ $_ .= &complete_line(FILE) if s/\\\s*$//;
+ # Run macros substitutions
+ s/%</$unit/g; # %< expands into the unit's name
+ if (s/%\*/$unit/) {
+ # %* expanded into the entire set of defined symbols
+ # in the old version. Now it is only the unit's name.
+ ++$old_version;
+ }
+ eval { &$proc($_) }; # Process the line
+ } else {
+ next file unless $body; # No procedure to handle body
+ do {
+ $line = $_; # Save last processed unit line
+ eval { &$body($_) } ; # From now on, it's the unit body
+ } while (defined ($_ = <FILE>));
+ next file;
+ }
+ }
+ } continue {
+ warn(" Warning: $file is a pre-3.0 version.\n") if $old_version;
+ &$ending($line) if $ending; # Post-processing for metalint
+ }
+
+ &end_extraction; # End the extraction process
+}
+
+# The first line was escaped with a final \ character. Every following line
+# is to be appended to it (until we found a real \n not escaped). Note that
+# the leading spaces of the continuation line are removed, so any space should
+# be added before the former \ if needed.
+sub complete_line {
+ local($file) = @_; # File where lines come from
+ local($_);
+ local($read) = ''; # Concatenation of all the continuation lines found
+ while (<$file>) {
+ s/^\s+//; # Remove leading spaces
+ if (s/\\\s*$//) { # Still followed by a continuation line
+ $read .= $_;
+ } else { # We've reached the end of the continuation
+ return $read . $_;
+ }
+ }
+}
+
diff --git a/mcon/pl/files.pl b/mcon/pl/files.pl
new file mode 100644
index 0000000..9e6bd08
--- /dev/null
+++ b/mcon/pl/files.pl
@@ -0,0 +1,109 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: files.pl,v $
+;# Revision 3.0.1.2 1994/10/29 16:35:48 ram
+;# patch36: added user-defined file extension support for lookups
+;#
+;# Revision 3.0.1.1 1993/10/16 13:54:55 ram
+;# patch12: now skip confmagic.h when -M option is used
+;#
+;# Revision 3.0 1993/08/18 12:10:23 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# These two arrays record the file names of the files which may (or may not)
+;# contain shell or C symbols known by metaconfig.
+;# @SHlist records the .SH files
+;# @clist records the C-like files (i.e. .[chyl])
+;#
+;# The extensions are actually computed dynamically from the definitions held
+;# in the $cext and $shext variables from .package so that people can add new
+;# extensions to their packages. For instance, perl5 adds .xs files holding
+;# some C symbols.
+;#
+# Extract filenames from manifest
+sub extract_filenames {
+ &build_filext; # Construct &is_cfile and &is_shfile
+ print "Extracting filenames (C and SH files) from $NEWMANI...\n"
+ unless $opt_s;
+ open(NEWMANI,$NEWMANI) || die "Can't open $NEWMANI.\n";
+ local($file);
+ while (<NEWMANI>) {
+ ($file) = split(' ');
+ next if $file eq 'config_h.SH'; # skip config_h.SH
+ next if $file eq 'Configure'; # also skip Configure
+ next if $file eq 'confmagic.h' && $opt_M;
+ push(@SHlist, $file) if &is_shfile($file);
+ push(@clist, $file) if &is_cfile($file);
+ }
+}
+
+# Construct two file identifiers based on the file suffix: one for C files,
+# and one for SH files (using the $cext and $shext variables) defined in
+# the .package file.
+# The &is_cfile and &is_shfile routine may then be called to known whether
+# a given file is a candidate for holding C or SH symbols.
+sub build_filext {
+ &build_extfun('is_cfile', $cext, '.c .h .y .l');
+ &build_extfun('is_shfile', $shext, '.SH');
+}
+
+# Build routine $name to identify extensions listed in $exts, ensuring
+# that $minimum is at least matched (both to be backward compatible with
+# older .package and because it is really the minimum requirred).
+sub build_extfun {
+ local($name, $exts, $minimum) = @_;
+ local(@single); # Single letter dot extensions (may be grouped)
+ local(@others); # Other extensions
+ local(%seen); # Avoid duplicate extensions
+ foreach $ext (split(' ', "$exts $minimum")) {
+ next if $seen{$ext}++;
+ if ($ext =~ s/^\.(\w)$/$1/) {
+ push(@single, $ext);
+ } else {
+ # Convert into perl's regexp
+ $ext =~ s/\./\\./g; # Escape .
+ $ext =~ s/\?/./g; # ? turns into .
+ $ext =~ s/\*/.*/g; # * turns into .*
+ push(@others, $ext);
+ }
+ }
+ local($fn) = &q(<<EOF); # Function being built
+:sub $name {
+: local(\$_) = \@_;
+EOF
+ local($single); # Single regexp: .c .h grouped into .[ch]
+ $single = '\.[' . join('', @single) . ']' if @single;
+ $fn .= &q(<<EOL) if @single;
+: return 1 if /$single\$/;
+EOL
+ foreach $ext (@others) {
+ $fn .= &q(<<EOL);
+: return 1 if /$ext\$/;
+EOL
+ }
+ $fn .= &q(<<EOF);
+: 0; # None of the extensions may be applied to file name
+:}
+EOF
+ print $fn if $opt_d;
+ eval $fn;
+ chop($@) && die "Can't compile '$name':\n$fn\n$@.\n";
+}
+
+# Remove ':' quotations in front of the lines
+sub q {
+ local($_) = @_;
+ local($*) = 1;
+ s/^://g;
+ $_;
+}
+
diff --git a/mcon/pl/gensym.pl b/mcon/pl/gensym.pl
new file mode 100644
index 0000000..4f65065
--- /dev/null
+++ b/mcon/pl/gensym.pl
@@ -0,0 +1,22 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: gensym.pl,v $
+;# Revision 3.0 1993/08/18 12:10:24 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+# Create a new symbol name each time it is invoked. That name is suitable for
+# usage as a perl variable name.
+sub gensym {
+ $Gensym = 'AAAAA' unless $Gensym;
+ $Gensym++;
+}
+
diff --git a/mcon/pl/init.pl b/mcon/pl/init.pl
new file mode 100644
index 0000000..c60d64c
--- /dev/null
+++ b/mcon/pl/init.pl
@@ -0,0 +1,55 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: init.pl,v $
+;# Revision 3.0.1.2 1995/09/25 09:19:06 ram
+;# patch59: new ?Y: directive to change unit layout
+;#
+;# Revision 3.0.1.1 1993/10/16 13:55:06 ram
+;# patch12: now knows about ?M: lines
+;#
+;# Revision 3.0 1993/08/18 12:10:24 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+# The %Depend array records the functions we use to process the configuration
+# lines in the unit, with a special meaning. It is important that all the
+# known control symbols be listed below, so that metalint does not complain.
+# The %Lcmp array contains valid layouts and their comparaison value.
+sub init_depend {
+ %Depend = (
+ 'MAKE', 'p_make', # The ?MAKE: line records dependencies
+ 'INIT', 'p_init', # Initializations printed verbatim
+ 'LINT', 'p_lint', # Hints for metalint
+ 'RCS', 'p_ignore', # RCS comments are ignored
+ 'C', 'p_c', # C symbols
+ 'D', 'p_default', # Default value for conditional symbols
+ 'E', 'p_example', # Example of usage
+ 'F', 'p_file', # Produced files
+ 'H', 'p_config', # Process the config.h lines
+ 'I', 'p_include', # Added includes
+ 'L', 'p_library', # Added libraries
+ 'M', 'p_magic', # Process the confmagic.h lines
+ 'O', 'p_obsolete', # Unit obsolescence
+ 'P', 'p_public', # Location of PD implementation file
+ 'S', 'p_shell', # Shell variables
+ 'T', 'p_temp', # Shell temporaries used
+ 'V', 'p_visible', # Visible symbols like 'rp', 'dflt'
+ 'W', 'p_wanted', # Wanted value for interpreter
+ 'X', 'p_ignore', # User comment is ignored
+ 'Y', 'p_layout', # User-defined layout preference
+ );
+ %Lcmp = (
+ 'top', -1,
+ 'default', 0,
+ 'bottom', 1,
+ );
+}
+
diff --git a/mcon/pl/lint.pl b/mcon/pl/lint.pl
new file mode 100644
index 0000000..ba5c407
--- /dev/null
+++ b/mcon/pl/lint.pl
@@ -0,0 +1,1411 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: lint.pl,v $
+;# Revision 3.0.1.10 1997/02/28 16:31:53 ram
+;# patch61: added support for ?F: lines to monitor file usage
+;# patch61: now honours "create" and "empty" lint directives
+;#
+;# Revision 3.0.1.9 1995/09/25 09:19:15 ram
+;# patch59: new ?Y: directive to change unit layout
+;#
+;# Revision 3.0.1.8 1995/07/25 14:19:47 ram
+;# patch56: will now check : comments line for potential danger
+;#
+;# Revision 3.0.1.7 1994/10/29 16:36:14 ram
+;# patch36: now extensively checks created files thanks to new ?F: lines
+;#
+;# Revision 3.0.1.6 1994/05/13 15:29:09 ram
+;# patch27: now understands macro definitions in ?H: lines
+;#
+;# Revision 3.0.1.5 1994/05/06 15:27:48 ram
+;# patch23: now warns for units ending with non-blank line
+;# patch23: warn for units where last line is not new-line terminated
+;#
+;# Revision 3.0.1.4 1994/01/24 14:28:40 ram
+;# patch16: now knows about "internal use only" variables on ?MAKE: lines
+;# patch16: now suppress "read-only var set" message when change hint
+;#
+;# Revision 3.0.1.3 1993/11/10 17:39:39 ram
+;# patch14: now spots stale ?M: dependencies
+;#
+;# Revision 3.0.1.2 1993/10/16 13:55:26 ram
+;# patch12: now checks ?M: lines also
+;#
+;# Revision 3.0.1.1 1993/08/25 14:03:40 ram
+;# patch6: now correctly signals conditional dependencies with no default
+;#
+;# Revision 3.0 1993/08/18 12:10:25 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;# The list of all available units is held in @ARGV. We shall parse them and
+;# extract the dependencies. A lot of global data structures are filled in
+;# during this phase.
+;#
+# Initialize the extraction process by setting some variables.
+# We return a string to be eval'ed to do more customized initializations.
+sub init_extraction {
+ $c_symbol = ''; # Current symbol seen in ?C: lines
+ $s_symbol = ''; # Current symbol seen in ?S: lines
+ $m_symbol = ''; # Current symbol seen in ?M: lines
+ $h_section = 0; # 0 = no ?H: yet, 1 = in ?H:, 2 = ?H:. seen
+ $h_section_warned = 0; # Whether we warned about terminated ?H: section
+ $heredoc = ''; # Last "here" document symbol seen
+ $heredoc_nosubst = 0; # True for <<'EOM' here docs
+ $heredoc_line = 0; # Line were last "here" document started
+ $last_interpreted = 0; # True when last line was an '@' one
+ $past_first_line = 0; # True when first body line was already seen
+ $wiped_unit = 0; # True if unit will be "wiped" for macro subst
+ %csym = (); # C symbols described
+ %ssym = (); # Shell symbols described
+ %hcsym = (); # C symbols used by ?H: lines
+ %hssym = (); # Shell symbols used by ?H: lines
+ %msym = (); # Magic symbols defined by ?M: lines
+ %mdep = (); # C symbol dependencies introduced by ?M:
+ %symset = (); # Records all the shell symbol set
+ %symused = (); # Records all the shell symbol used
+ %tempseen = (); # Temporary shell variable seen
+ %fileseen = (); # Produced files seen
+ %fileused = (); # Files used, by unit (private UU files)
+ %filemisused = (); # Files not used as ./file or ...UU/file
+ %filetmp = (); # Local temporary files in ?F: directives
+ %filesetin = (); # Lists units defining a temporary file
+ %filecreated = (); # Records files created in this unit
+ %prodfile = (); # Unit where a given file is said to be created
+ %defseen = (); # Symbol defintions claimed
+ %lintset = (); # Symbols declared set by a ?LINT: line
+ %lintsdesc = (); # Symbols declared described by a ?LINT: line
+ %lintcdesc = (); # Symbols declared described by a ?LINT: line
+ %lintseen = (); # Symbols declared known by a ?LINT: line
+ %lintchange = (); # Symbols declared changed by a ?LINT: line
+ %lintuse = (); # Symbols declared used by unit
+ %lintextern = (); # Symbols known to be externally defined
+ %lintcreated = (); # Files declared as created by a ?LINT: line
+ %linthere = (); # Unclosed here document from ?LINT: line
+ %lintnothere = (); # False here document names, from ?LINT: line
+ %lintfused = (); # Records files markedas used in ?LINT: line
+ %lintchange_used = (); # Tracks symbols for which %lintchange was used
+ %lintuse_used = (); # Tracks symbols for which %lintuse was used
+ %lintseen_used = (); # Tracks symbols for which %lintseen was used
+ %lintcdesc_used = (); # Tracks symbols for which %lintcdesc was used
+ %lintsdesc_used = (); # Tracks symbols for which %lintsdesc was used
+ %lintset_used = (); # Tracks symbols for which %lintset was used
+ %lintnocomment = (); # Signals it's OK for unit to lack a : comment
+ %condsym = (); # Records all the conditional symbols
+ %condseen = (); # Records conditional dependencies
+ %depseen = (); # Records full dependencies
+ %shvisible = (); # Records units making a symbol visible
+ %shspecial = (); # Records special units listed as wanted
+ %shdepend = (); # Records units listed in one's dependency list
+ %shmaster = (); # List of units defining a shell symbol
+ %cmaster = (); # List of units defining a C symbol
+ %symdep = (); # Records units where symbol is a dependency
+ @make = (); # Records make dependency lines
+ $body = 'p_body'; # Procedure to handle body
+ $ending = 'p_end'; # Called at the end of each unit
+ @wiping = qw( # The keywords we recognize for "wiped" units
+ PACKAGENAME
+ MAINTLOC
+ VERSION
+ PATCHLEVEL
+ DATE
+ BASEREV
+ );
+}
+
+# End the extraction process
+sub end_extraction {
+}
+
+# Process the ?MAKE: line
+sub p_make {
+ local($_) = @_;
+ local(@ary); # Locally defined symbols
+ local(@dep); # Dependencies
+ local($where) = "\"$file\", line $. (?MAKE:)";
+ unless (/^[\w+ ]*:/) {
+ $wiped_unit++ if /^\t+-pick\s+wipe\b/;
+ return; # We only want the main dependency rule
+ }
+ warn "$where: ignoring duplicate dependency listing line.\n"
+ if $makeseen{$unit}++;
+ return if $makeseen{$unit} > 1;
+
+ # Reset those once for every unit
+ # (assuming there is only one depend line)
+ $h_section = 0; # 0 = no ?H: yet, 1 = in ?H:, 2 = ?H:. seen
+ $h_section_warned = 0; # Whether we warned about terminated ?H: section
+ $wiped_unit = 0; # Whether macros like "<MAINTLOC> will be wiped
+ undef %condseen;
+ undef %depseen;
+ undef %defseen;
+ undef %tempseen;
+ undef %symset;
+ undef %symused;
+ undef %csym;
+ undef %ssym;
+ undef %hcsym;
+ undef %hssym;
+ undef %lintuse;
+ undef %lintuse_used;
+ undef %lintseen;
+ undef %lintchange;
+ undef %lintchange_used;
+ undef %lintextern;
+ undef %lintcreated;
+ undef %fileseen;
+ undef %lintseen_used;
+ undef %filetmp;
+ undef %filecreated;
+ undef %linthere;
+ undef %lintnothere;
+ undef %lintfused;
+ undef %lintsdesc;
+ undef %lintsdesc_used;
+ undef %lintcdesc;
+ undef %lintcdesc_used;
+ undef %lintset;
+ undef %lintset_used;
+
+ s|^\s*||; # Remove leading spaces
+ chop;
+ s/:(.*)//;
+ @dep = split(' ', $1); # Dependencies
+ @ary = split(' '); # Locally defined symbols
+ local($nowarn); # True when +Special is seen
+ foreach $sym (@ary) {
+ # Ignore "internal use only" symbols as far as metalint goes.
+ # Actually, we record the presence of a '+' in front of a special
+ # unit name and use that as a hint to suppress the presence of that
+ # special unit in the defined symbol section.
+ $nowarn = ($sym =~ s/^\+//);
+
+ # We record for each shell symbol the list of units which claim to make
+ # it, so as to report duplicates.
+ if ($sym =~ /^[_a-z]/ || $Except{$sym}) {
+ $shmaster{"\$$sym"} .= "$unit ";
+ ++$defseen{$sym};
+ } else {
+ warn "$where: special unit '$sym' should not be listed as made.\n"
+ unless $sym eq $unit || $nowarn;
+ }
+ }
+ # Record dependencies for later perusal
+ push(@make, join(' ', @ary) . ':' . join(' ', @dep));
+ foreach $sym (@dep) {
+ if ($sym =~ /^\+[_A-Za-z]/) {
+ $sym =~ s|^\+||;
+ ++$condseen{$sym}; # Conditional symbol wanted
+ ++$condsym{$sym}; # %condsym has a greater lifetime
+ } else {
+ ++$depseen{$sym}; # Full dependency
+ }
+
+ # Each 'wanted' special unit (i.e. one starting with a capital letter)
+ # is remembered, so as to prevent exported symbols from being reported
+ # as "undefined". For instance, Myread exports $dflt, $ans and $rp.
+ $shspecial{$unit} .= "$sym " if substr($sym, 0, 1) =~ /^[A-Z]/;
+
+ # Record all known dependencies (special or not) for this unit
+ $shdepend{$unit} .= "$sym ";
+
+ # Remember where wanted symbol is defined, so that we can report
+ # stale dependencies later on (i.e. dependencies which refer to non-
+ # existent symbols).
+ $symdep{$sym} .= "$unit "; # This symbol is wanted here
+ }
+ # Make sure we do not want a symbol twice, nor do we want it once as a full
+ # dependency and once as a conditional dependency.
+ foreach $sym (@dep) {
+ if ($sym =~ /^\+[_A-Za-z]/) {
+ $sym =~ s|^\+||;
+ warn "$where: '+$sym' is listed $condseen{$sym} times.\n"
+ if $condseen{$sym} > 1;
+ $condseen{$sym} = 1 if $condseen{$sym}; # Avoid multiple messages
+ } else {
+ warn "$where: '$sym' is listed $depseen{$sym} times.\n"
+ if $depseen{$sym} > 1;
+ $depseen{$sym} = 1 if $depseen{$sym}; # Avoid multiple messages
+ }
+ warn "$where: '$sym' listed as both conditional and full dependency.\n"
+ if $condseen{$sym} && $depseen{$sym};
+ }
+ # Make sure every unit "inherits" from the symbols exported by 'Init'.
+ $shspecial{$unit} .= 'Init ' unless $shspecial{$unit} =~ /Init\b/;
+}
+
+# Process the ?O: line
+sub p_obsolete {
+ local($_) = @_;
+ chop;
+ $Obsolete{"$unit.U"} = $_; # Message to print if unit is used
+}
+
+# Process the ?S: lines
+sub p_shell {
+ local($_) = @_;
+ local($where) = "\"$file\", line $. (?S:)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ if (/^(\w+)\s*(\(.*\))*\s*:/) {
+ &check_last_declaration;
+ $s_symbol = $1;
+ print " ?S: $s_symbol\n" if $opt_d;
+ # Make sure we do not define symbol twice and that the symbol is indeed
+ # listed in the ?MAKE: line.
+ warn "$where: duplicate description for variable '\$$s_symbol'.\n"
+ if $ssym{$s_symbol}++;
+ unless ($defseen{$s_symbol}) {
+ warn "$where: variable '\$$s_symbol' is not listed " .
+ "on ?MAKE: line.\n" unless $lintseen{$s_symbol};
+ $lintseen_used{$s_symbol}++ if $lintseen{$s_symbol};
+ }
+ # Deal with obsolete symbol list (enclosed between parenthesis)
+ &record_obsolete("\$$_") if /\(/;
+ } else {
+ unless ($s_symbol) {
+ warn "$where: syntax error in ?S: construct.\n";
+ return;
+ }
+ }
+
+ m|^\.\s*$| && ($s_symbol = ''); # End of comment
+}
+
+# Process the ?C: lines
+sub p_c {
+ local($_) = @_;
+ local($where) = "\"$file\", line $. (?C:)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ # The previous ?H: section, if present, must have been closed
+ if ($h_section && $h_section != 2) {
+ warn "$where: unclosed ?H: section.\n";
+ }
+ $h_section = 0;
+ if (s/^(\w+)\s*~\s*(\S+)\s*(.*):/$1 $3:/) {
+ &check_last_declaration;
+ $c_symbol = $2; # Alias for definition in config.h
+ # Record symbol definition for further duplicate spotting
+ $cmaster{$1} .= "$unit " unless $csym{$1};
+ print " ?C: $1 ~ $c_symbol\n" if $opt_d;
+ # Make sure we do not define symbol twice
+ warn "$where: duplicate description for symbol '$1'.\n"
+ if $csym{$1}++;
+ # Deal with obsolete symbol list (enclosed between parenthesis)
+ &record_obsolete("$_") if /\(/;
+ } elsif (/^(\w+)\s*(\(.*\))*\s*:/) {
+ &check_last_declaration;
+ $c_symbol = $1;
+ # Record symbol definition for further duplicate spotting
+ $cmaster{$c_symbol} .= "$unit " unless $csym{$c_symbol};
+ print " ?C: $c_symbol\n" if $opt_d;
+ # Make sure we do not define symbol twice
+ warn "$where: duplicate description for symbol '$c_symbol'.\n"
+ if $csym{$c_symbol}++;
+ # Deal with obsolete symbol list (enclosed between parenthesis)
+ &record_obsolete("$_") if /\(/;
+ } else {
+ unless ($c_symbol) {
+ warn "$where: syntax error in ?C: construct.\n";
+ return;
+ }
+ }
+
+ s|^(\w+)|?$c_symbol:/* $1| || # Start of comment
+ (s|^\.\s*$|?$c_symbol: */\n| && ($c_symbol = '', 1)) || # End of comment
+ s|^(.*)|?$c_symbol: *$1|; # Middle of comment
+}
+
+# Process the ?H: lines
+sub p_config {
+ local($_) = @_;
+ local($where) = "\"$file\", line $. (?H)" unless $where;
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ unless ($h_section){ # Entering ?H: section
+ $h_section = 1;
+ $h_section_warned = 0;
+ }
+ if ($h_section == 2) {
+ warn "$where: section was already terminated by '?H:.'.\n"
+ unless $h_section_warned++;
+ return;
+ }
+ if ($_ eq ".\n") {
+ $h_section = 2; # Marks terminated ?H: section
+ return;
+ }
+ (my $constraint) = m/^\?(\w+):/;
+ s/^\?\w+://; # Remove leading '?var:' constraint
+ if (m|^#\$(\w+)\s+(\w+).*\$(\w+)|) {
+ # Case: #$d_var VAR "$var"
+ warn "$where: symbol '$2' was already defined.\n" if $hcsym{$2}++;
+ &check_definition("$1");
+ &check_definition("$3");
+ } elsif (m|^#define\s+(\w+)\((.*)\)\s+\$(\w+)|) {
+ # Case: #define VAR(x) $var
+ warn "$where: symbol '$1' was already defined.\n" if $hcsym{$1}++;
+ &check_definition("$3");
+ } elsif (m|^#\$define\s+(\w+)|) {
+ # Case: #$define VAR
+ warn "$where: symbol '$1' was already defined.\n" if $hcsym{$1}++;
+ } elsif (m|^#\$(\w+)\s+(\w+)|) {
+ # Case: #$d_var VAR
+ warn "$where: symbol '$2' was already defined.\n" if $hcsym{$2}++;
+ &check_definition("$1");
+ } elsif (m|^#define\s+(\w+).*\$(\w+)|) {
+ # Case: #define VAR "$var"
+ warn "$where: symbol '$1' was already defined.\n" if $hcsym{$1}++;
+ &check_definition("$2");
+ } elsif (m|^#define\s+(\w+)|) {
+ # Case: #define VAR
+ $hcsym{$1}++; # Multiple occurrences may be legitimate
+ } else {
+ if (/^#/) {
+ warn "$where: uncommon cpp line should be protected with '?%<:'.\n"
+ if $constraint eq '';
+ } elsif (!/^\@(if|elsif|else|end)\b/) {
+ warn "$where: line should not be listed here but in '?C:'.\n";
+ }
+ }
+
+ # Ensure the constraint is either %< (unit base name) or a known symbol.
+ if ($constraint ne '' && $constraint ne $unit) {
+ warn "$where: constraint '$constraint' is an unknown symbol.\n"
+ unless $csym{$constraint} || $ssym{$constraint};
+ }
+}
+
+# Process the ?M: lines
+sub p_magic {
+ local($_) = @_;
+ local($where) = "\"$file\", line $. (?M)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ if (/^(\w+):\s*([\w\s]*)\n$/) {
+ &check_last_declaration;
+ $m_symbol = $1;
+ $msym{$1} = "$unit"; # p_wanted ensure we do not define symbol twice
+ $mdep{$1} = $2; # Save C symbol dependencies
+ &p_wanted("$unit:$m_symbol");
+ } else {
+ unless ($m_symbol) {
+ warn "$where: syntax error in ?M: construct.\n";
+ return;
+ }
+ }
+ m|^\.\s*$| && ($m_symbol = ''); # End of comment
+}
+
+# Process the ?INIT: lines
+sub p_init {
+ local($_) = @_;
+ local($where) = "\"$file\", line $. (?INIT)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ &p_body($_, 1); # Pass it along as a body line (leading ?INIT: removed)
+}
+
+# Process the ?D: lines
+sub p_default {
+ local($_) = @_;
+ local($where) = "\"$file\", line $. (?D)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ local($sym) = /^(\w+)=/;
+ $hasdefault{$sym}++;
+ unless ($defseen{$sym}) {
+ warn "$where: variable '\$$sym' is not listed " .
+ "on ?MAKE: line.\n" unless $lintseen{$sym};
+ $lintseen_used{$sym}++ if $lintseen{$sym};
+ }
+ s/^\w+=//; # So that p_body does not consider variable as being set
+ &p_body($_, 1); # Pass it along as a body line (leading ?D: + var removed)
+}
+
+# Process the ?V: lines
+sub p_visible {
+ local($where) = "\"$file\", line $. (?V)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+
+ # A visible symbol can freely be manipulated by any unit which includes the
+ # current unit in its dependencies. Symbols before ':' may be only used for
+ # reading while symbols after ':' may be used for both reading and writing.
+ # The array %shvisible records symbols as keys. Read-only symbols have a
+ # leading '$' while read-write symbols are recorded as-is.
+
+ unless (substr($unit, 0, 1) =~ /^[A-Z]/) {
+ warn "$where: visible declaration in non-special unit ignored.\n";
+ return;
+ }
+ local($read_only) = $_[0] =~ /^([^:]*):?/;
+ local($read_write) = $_[0] =~ /:(.*)/;
+ local(@rsym) = split(' ', $read_only);
+ local(@rwsym) = split(' ', $read_write);
+ local($w);
+ foreach (@rsym) { # Read only symbols
+ warn "$where: wanted variable '\$$_' made visible.\n" if &wanted($_);
+ warn "$where: defined variable '\$$_' made visible.\n"
+ if &defined($_) && !$lintseen{$_};
+ $w = $shvisible{"\$$_"};
+ warn "$where: variable '\$$_' already made visible by unit $w.\n" if $w;
+ $w = $shvisible{$_};
+ warn "$where: variable '\$$_' already read-write visible in $w.\n" if $w;
+ $shvisible{"\$$_"} = $unit unless $w;
+ }
+ foreach (@rwsym) { # Read/write symbols
+ warn "$where: wanted variable '\$$_' made visible.\n" if &wanted($_);
+ warn "$where: defined variable '\$$_' made visible.\n"
+ if &defined($_) && !$lintseen{$_};
+ $w = $shvisible{$_};
+ warn "$where: variable '\$$_' already made visible by unit $w.\n" if $w;
+ $w = $shvisible{"\$$_"};
+ warn "$where: variable '\$$_' already read-only visible in $w.\n" if $w;
+ $shvisible{$_} = $unit unless $w;
+ }
+}
+
+# Process the ?W: lines
+sub p_wanted {
+ local($where) = "\"$file\", line $. (?W)" unless $where;
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ # Somehow, we should check that none of the symbols to activate are stale
+ # ones, i.e. they all finally resolve to some known target -- FIXME
+ local($active) = $_[0] =~ /^([^:]*):/; # Symbols to activate
+ local($look_symbols) = $_[0] =~ /:(.*)/; # When those are used
+ local(@symbols) = split(' ', $look_symbols);
+ # A "?W:symbol" line asks metaconfig to define 'symbol' in the wanted file
+ # as a C target iff that word is found within the sources. This is mainly
+ # intended for the built-in interpreter to check for definedness.
+ local($w);
+ foreach (@symbols) {
+ warn "$where: variable '\$$_' already wanted.\n" if &wanted($_);
+ warn "$where: variable '\$$_' also locally defined.\n" if &defined($_);
+ $w = $cwanted{$_};
+ if ($msym{$_} ne '') {
+ warn "$where: symbol '$_' already listed on a ?M: line in '$w'.\n"
+ if $w;
+ } else {
+ warn "$where: variable '\$$_' already listed on a ?W: line in '$w'.\n"
+ if $w;
+ }
+ $cwanted{$_} = $unit unless $w;
+ }
+}
+
+# Process the ?Y: lines
+sub p_layout {
+ local($where) = "\"$file\", line $. (?Y)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ local($_) = @_;
+ chop;
+ s/^\s+//;
+ tr/A-Z/a-z/; # Layouts are record in lowercase
+ warn "$where: unknown layout directive '$_'.\n"
+ unless defined $Lcmp{$_};
+}
+
+# Process the ?P: lines
+sub p_public {
+ # FIXME
+}
+
+# Process the ?L: lines
+sub p_library {
+ # There should not be any '-l' in front of the library name
+ # FIXME
+}
+
+# Process the ?I: lines
+sub p_include {
+ # FIXME
+}
+
+# Process the ?T: lines
+sub p_temp {
+ local($where) = "\"$file\", line $. (?T:)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ local($_) = @_;
+ local(@sym) = split(' ', $_);
+ foreach $sym (@sym) {
+ warn "$where: temporary symbol '\$$sym' multiply declared.\n"
+ if $tempseen{$sym}++ == 1;
+ $tempmaster{$sym} .= "$unit " if $tempseen{$sym} == 1;
+ }
+}
+
+# Process the ?F: lines
+sub p_file {
+ local($where) = "\"$file\", line $. (?F:)";
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless $makeseen{$unit};
+ local($_) = @_;
+ local(@files) = split(' ', $_);
+ local($uufile); # Name of file produced in the UU directory
+ local($tmpfile); # Name of a temporary file
+ # We care only about UU files, i.e. files produced in the UU directory
+ # and which are identified by the convention ./filename. Files !filename
+ # are not produced, i.e. they are temporary or externally provided.
+ # The %prodfile table records all the files produced, so we may detect
+ # inconsistencies between units, while %filemaster records the (first) unit
+ # defining a given UU file to make sure that (special) unit is named in the
+ # dependency line when that UU file if used. Duplicates will be caught in
+ # the sanity check phase thanks to %prodfile.
+ # Temporary files are recorded in %filesetin, so that we may later compare
+ # the list with the UU files to detect possible overwrites.
+ my $is_special = substr($unit, 0, 1) =~ /^[A-Z]/;
+ foreach $file (@files) {
+ warn "$where: produced file '$file' multiply declared.\n"
+ if $fileseen{$file}++ == 1;
+ if (($tmpfile = $file) =~ s/^!//) {
+ $filetmp{$tmpfile} = 'x ';
+ $filesetin{$tmpfile} .= "$unit " if $fileseen{$file} == 1;
+ next; # Is not a UU file for sure, so skip
+ }
+ $prodfile{$file} .= "$unit " if $fileseen{$file} == 1;
+ ($uufile = $file) =~ s|^\./(\S+)$|$1|;
+ next if $file eq $uufile; # Don't care about non-UU files
+ unless ($is_special || $lintcreated{$uufile}) {
+ warn "$where: UU file '$uufile' in non-special unit ignored.\n";
+ delete $lintcreated{$uufile}; # Detect spurious LINT
+ next;
+ }
+ delete $lintcreated{$uufile} if !$is_special; # Detect spurious LINT
+ $filemaster{$uufile} = $unit unless defined $filemaster{$uufile};
+ $filecreated{$uufile} = 'a'; # Will be automagically incremented
+ }
+}
+
+# Process the ?LINT: lines
+sub p_lint {
+ local($_) = @_;
+ local(@sym);
+ local($where) = "\"$file\", line $. (?LINT:)";
+ s/^\s+//; # Strip leading spaces
+ unless ($makeseen{$unit}) {
+ warn "$where: directive should come after ?MAKE declarations.\n"
+ unless m/^empty/;
+ }
+ if (s/^set//) { # Listed variables are set
+ @sym = split(' ', $_); # Spurious ones will be flagged
+ foreach (@sym) {
+ $lintset{$_}++; # Shell variable set
+ }
+ } elsif (s/^desc\w+//) { # Listed shell variables are described
+ @sym = split(' ', $_); # Spurious ones will be flagged
+ foreach (@sym) {
+ $lintsdesc{$_}++; # Shell variable described
+ }
+ } elsif (s/^creat\w+//) { # Listed created files in regular units
+ @sym = split(' ', $_);
+ foreach (@sym) {
+ $lintcreated{$_}++; # Persistent UU file created
+ }
+ } elsif (s/^known//) { # Listed C variables are described
+ @sym = split(' ', $_); # Spurious ones will be flagged
+ foreach (@sym) {
+ $lintcdesc{$_}++; # C symbol described
+ }
+ } elsif (s/^change//) { # Shell variable ok to be changed
+ @sym = split(' ', $_); # Spurious ones will be flagged
+ foreach (@sym) {
+ $lintchange{$_}++; # Do not complain if changed
+ }
+ } elsif (s/^extern//) { # Variables known to be externally defined
+ @sym = split(' ', $_);
+ foreach (@sym) {
+ $lintextern{$_}++; # Do not complain if used in a ?H: line
+ }
+ } elsif (s/^usefile//) { # Files marked as being used
+ @sym = split(' ', $_);
+ foreach (@sym) {
+ $lintfused{$_}++;
+ }
+ } elsif (s/^use//) { # Variables declared as used by unit
+ @sym = split(' ', $_); # Spurious ones will be flagged
+ foreach (@sym) {
+ $lintuse{$_}++; # Do not complain if on ?MAKE and not used
+ }
+ } elsif (s/^def\w+//) { # Listed variables are defined
+ @sym = split(' ', $_); # Spurious ones will be flagged
+ foreach (@sym) {
+ $lintseen{$_}++; # Shell variable defined in this unit
+ }
+ } elsif (m/^empty/) { # Empty unit file
+ $lintempty{$unit}++;
+ } elsif (m/^unclosed/) { # Unclosed here-documents
+ @sym = split(' ', $_);
+ foreach (@sym) {
+ $linthere{$_}++;
+ }
+ } elsif (s/^nothere//) { # Not a here-document name
+ @sym = split(' ', $_);
+ foreach (@sym) {
+ $lintnothere{$_}++;
+ }
+ } elsif (s/^nocomment//) { # OK if leading unit ': comment' missing
+ $lintnocomment{$unit}++;
+ } else {
+ local($where) = "\"$file\", line $." unless $where;
+ local($word) = /^(\w+)/;
+ warn "$where: unknown LINT request '$word' ignored.\n";
+ }
+}
+
+# Process the body of the unit
+sub p_body {
+ return unless $makeseen{$unit};
+ local($_, $special) = @_;
+ local($where) = "\"$file\", line $." unless $where;
+ # Ensure there is no control line in the body of the unit
+ local($control) = /^\?([\w\-]+):/;
+ local($known) = $control ? $Depend{$control} : "";
+ warn "$where: control sequence '?$control:' ignored within body.\n"
+ if $known && !/^\?X:|^\?LINT:/;
+ if (s/^\?LINT://) { # ?LINT directives allowed within body
+ $_ .= &complete_line(FILE) if s/\\\s*$//;
+ &p_lint($_);
+ }
+ return if $known;
+ # First non-special line should be a ': description' line
+ unless ($special || /^\?/ || /^@/) {
+ warn "$where: first body line should be a general ': description'.\n"
+ unless $past_first_line++ || $lintnocomment{$unit} || /^:\s+\w+/;
+ }
+ # Ensure ': comment' lines do not hold any meta-character
+ # We assume ":)" introduces a case statement.
+ if (/^\s*:/ && !/^\s*:\)/) {
+ warn "$where: missing space after ':' to make it a comment.\n"
+ unless /^\s*:\s/;
+ s/\\.//g; # simplistic ignoring of "escaped" chars
+ s/".*?"//g;
+ s/'.*?'//g;
+ if ($wiped_unit) {
+ s/<\$\w+>//g;
+ foreach my $wipe (@wiping) {
+ s/<$wipe>//g;
+ }
+ }
+ warn "$where: found unquoted meta-character $1 on comment line.\n"
+ while s/([`()<>;&\{\}\|])//g;
+ warn "$where: found dangling quote on ':' comment line.\n" if /['"]/;
+ return;
+ }
+ # Ingnore interpreted lines and their continuations
+ if ($last_interpreted) {
+ return if /\\$/; # Still part of the interpreted line
+ $last_interpreted = 0; # End of interpreted lines
+ return; # This line was the last interpreted
+ }
+ # Look for interpreted lines and ignore them
+ if (/^@/) {
+ $last_interpreted = /\\$/; # Set flag if line is continued
+ return; # And skip this line
+ }
+ # Detect ending of "here" documents
+ if ($heredoc ne '' && $_ eq "$heredoc\n") {
+ $heredoc = ''; # Close here-document
+ $heredoc_nosubst = 0;
+ return;
+ }
+ # Detect beginning of "here" document
+ my $began_here = 0;
+ if ($heredoc eq '') {
+ if (/<<\s*''/) {
+ # Discourage it, because we're not processing those...
+ warn "$where: empty here-document name discouraged.\n";
+ } elsif (/<<\s*'([^']+)'/ && !$lintnothere{$1}) {
+ $heredoc = $1;
+ $heredoc_nosubst = 1;
+ $began_here++;
+ } elsif (/<<\s*(\S+)/ && !$lintnothere{$1}) {
+ $heredoc = $1;
+ $began_here++;
+ }
+ # Continue, as we need to look for possible ">file" on the same line
+ # as a possible here document, as in "cat <<EOM >file".
+ } else {
+ return if $heredoc_nosubst; # Completely opaque to interpretation
+ }
+ $heredoc_line = $. if $began_here;
+
+ # If we've just entered a here document and we're generating a file
+ # that is exported by the unit, then we need to monitor the variables
+ # used to make sure there's no missing dependency.
+ $heredoc_nosubst = 0
+ if $began_here && />>?\s*(\S+)/ && $filemaster{$1} eq $unit;
+
+ # From now on, do all substitutes with ':' since it would be dangerous
+ # to remove things plain and simple. It could yields false matches
+ # afterwards...
+
+ my $check_vars = 1;
+ $chek_vars = 0 if $heredoc_nosubst && !$began_here;
+
+ # Record any attempt made to set a shell variable
+ local($sym);
+ while ($check_vars && s/(\W?)(\w+)=/$1:/) {
+ my $before = $1;
+ $sym = $2;
+ next unless $before eq '' || $before =~ /["'` \t]/;
+ next if $sym =~ /^\d+/; # Ignore $1 and friends
+ $symset{$sym}++; # Shell variable set
+ # Not part of a $cc -DWHATEVER line and not made nor temporary
+ unless ($sym =~ /^D/ || &defined($sym)) {
+ if (&wanted($sym)) {
+ warn "$where: variable '\$$sym' is changed.\n"
+ unless $lintchange{$sym};
+ $lintchange_used{$sym}++ if $lintchange{$sym};
+ } else {
+ # Record that the variable is set but not listed locally.
+ if ($shset{$unit} !~ /\b$sym\b/) {
+ $shset{$unit} .= "$sym " unless $lintchange{$sym};
+ $lintchange_used{$sym}++ if $lintchange{$sym};
+ }
+ }
+ }
+ }
+ # Now look at the shell variables used: can be $var or ${var}
+ local($var);
+ local($line) = $_;
+ while ($check_vars && s/\$\{?(\w+)\}?/$1/) {
+ $var = $1;
+ next if $var =~ /^\d+/; # Ignore $1 and friends
+ # Record variable as undeclared but do not issue a message right now.
+ # That variable could be exported via ?V: (as $dflt in Myread) or be
+ # defined by a special unit (like $inlibc by unit Inlibc).
+ $shunknown{$unit} .= "$var " unless
+ $lintextern{$var} || &declared($var) ||
+ $shunknown{$unit} =~ /\b$var\b/;
+ $shused{$unit} .= "\$$var " unless $shused{$unit} =~ /\$$var\b/;
+ }
+
+ return if $heredoc ne '' && !$began_here; # Still in here-document
+
+ # Now look at private files used by the unit (./file or ..../UU/file)
+ # We look at things like '. ./myread' and `./loc ...` as well as "< file"
+ local($file);
+ $_ = $line;
+ s/<\S+?>//g; # <header.h> would set-off our <file detection
+ while (
+ s!(\.\s+|`\s*)(\S*UU|\.)/([^\$/`\s;]+)\s*!! ||
+ s!(`\s*\$?)cat\s+(\./)?([^\$/`\s;]+)\s*`!! ||
+ s!(\s+)(\./)([^\$/`\s;]+)\s*!! ||
+ s!(\s+)<\s*(\./)?([^<\$/`'"\s;]+)!!
+ ) {
+ $file = $3;
+ # Found some ". ./file" or `./file` execution, `$cat file`, or even
+ # "blah <file"...
+ # Record file as used. Later on, we will make sure we had the right
+ # to use that file: either we are in the unit that defines it, or we
+ # include the unit that creates it in our dependencies, relying on ?F:.
+ $fileused{$unit} .= "$file " unless
+ $filetmp{$file} || $fileused{$unit} =~ /\b$file\b/;
+ # Mark temporary file as being used, to spot useless local declarations
+ $filetmp{$file} .= ' used'
+ if defined $filetmp{$file} && $filetmp{$file} !~ /\bused/;
+ }
+ # Try to detect things like . myread or `loc` to warn that they
+ # should rather use . ./myread and `./loc`. Also things like 'if prog',
+ # or usage in conditional expressions such as || and &&. Be sure the file
+ # name is always in $2...
+ while (
+ s!(\.\s+|`\s*)([^\$/`\s;]+)\s*!: ! || # . myread or `loc`
+ s!(if|\|\||&&)\s+([^\$/`\s;]+)\s*!: ! # if prog, || prog, && prog
+ ) {
+ $file = $2;
+ $filemisused{$unit} .= "$file " unless
+ $filetmp{$file} || $filemisused{$unit} =~ /\b$file\b/;
+ # Temporary files should be used with ./ anyway
+ $filetmp{$file} .= ' misused'
+ if defined $filetmp{$file} && $filetmp{$file} !~ /\bmisused/;
+ }
+ # Locate file creation, >>file or >file
+ while (s!>>?\s*([^\$/`\s;]+)\s*!: !) {
+ $file = $1;
+ next if $file =~ /&\d+/; # skip >&4 and friends
+ $filecreated{$file}++;
+ }
+ # Look for mentions of known temporary files to avoid complaining
+ # that they were not used.
+ while (s!\s+(\S+)!!) {
+ $file = $1;
+ $filetmp{$file} .= ' used'
+ if defined $filetmp{$file} && $filetmp{$file} !~ /\bused/;
+ }
+}
+
+# Called at the end of each unit
+sub p_end {
+ local($last) = @_; # Last processed line
+ local($where) = "\"$file\"";
+
+ # The ?H: section, if present, must have been closed
+ if ($h_section && $h_section != 2) {
+ warn "$where: unclosed ?H: section.\n";
+ }
+ $h_section = 0; # For next unit, which may be empty
+
+ # All opened here-documents must be closed.
+ if ($heredoc ne '') {
+ my $q = $heredoc_nosubst ? "'" : "";
+ warn "$where: unclosed here-document $q$heredoc$q " .
+ "started line $heredoc_line.\n"
+ unless $linthere{$heredoc};
+ }
+
+ # Reinitialize for next unit.
+ $heredoc = '';
+ $heredoc_nosubst = 0;
+ $past_first_line = 0;
+ $last_interpreted = 0;
+
+ unless ($makeseen{$unit}) {
+ warn "$where: no ?MAKE: line describing dependencies.\n"
+ unless $lintempty{$unit};
+ return;
+ }
+
+ # Each unit should end with a blank line. Unfortunately, some units
+ # may also end with an '@end' request and have the blank line above it.
+ # Currently, we do not have enough information to correctly diagnose
+ # whether it is valid or not so just skip it.
+ # Same thing for U/Obsol_sh.U which ends with a shell comment.
+
+ warn "$where: not ending with a blank line.\n" unless
+ $last =~ /^\s*$/ || $last =~ /^\@end/ || $last =~ /^#|\?/;
+
+ # For EMACS users. It would be fatal to the Configure script...
+ warn "$where: last line not ending with a new-line character.\n"
+ unless $last =~ /\n$/;
+
+ # Make sure every shell symbol described in ?MAKE had a description
+ foreach $sym (sort keys %defseen) {
+ unless ($ssym{$sym}) {
+ warn "$where: symbol '\$$sym' was not described.\n"
+ unless $lintsdesc{$sym};
+ $lintsdesc_used{$sym}++ if $lintsdesc{$sym};
+ }
+ }
+ # Ensure all the C symbols defined by ?H: lines have a description
+ foreach $sym (sort keys %hcsym) {
+ unless ($csym{$sym}) {
+ warn "$where: C symbol '$sym' was not described.\n"
+ unless $lintcdesc{$sym};
+ $lintcdesc_used{$sym}++ if $lintcdesc{$sym};
+ }
+ }
+ # Ensure all the C symbols described by ?C: lines are defined in ?H:
+ foreach $sym (sort keys %csym) {
+ warn "$where: C symbol '$sym' was not defined by any ?H: line.\n"
+ unless $hcsym{$sym};
+ }
+ # Make sure each defined symbol was set, unless it starts with an
+ # upper-case letter in which case it is not a "true" shell symbol.
+ # I don't care about the special symbols defined in %Except as I know
+ # they are handled correctly.
+ foreach $sym (sort keys %defseen) {
+ unless ($symset{$sym} || substr($sym, 0, 1) =~ /^[A-Z]/) {
+ warn "$where: variable '\$$sym' should have been set.\n"
+ unless $lintset{$sym};
+ $lintset_used{$sym}++ if $lintset{$sym};
+ }
+ }
+ # Make sure every non-special unit declared as wanted is indeed needed
+ foreach $sym (sort keys %depseen) {
+ if ($shused{$unit} !~ /\$$sym\b/ && substr($sym, 0, 1) !~ /^[A-Z]/) {
+ warn "$where: unused dependency variable '\$$sym'.\n" unless
+ $lintchange{$sym} || $lintuse{$sym};
+ $lintchange_used{$sym}++ if $lintchange{$sym};
+ $lintuse_used{$sym}++ if $lintuse{$sym};
+ }
+ }
+ # Idem for conditionally wanted symbols
+ foreach $sym (sort keys %condseen) {
+ if ($shused{$unit} !~ /\$$sym\b/ && substr($sym, 0, 1) !~ /^[A-Z]/) {
+ warn "$where: unused conditional variable '\$$sym'.\n" unless
+ $lintchange{$sym} || $lintuse{$sym};
+ $lintchange_used{$sym}++ if $lintchange{$sym};
+ $lintuse_used{$sym}++ if $lintuse{$sym};
+ }
+ }
+ # Idem for temporary symbols
+ foreach $sym (sort keys %tempseen) {
+ if ($shused{$unit} !~ /\$$sym\b/ && !$symset{$sym}) {
+ warn "$where: unused temporary variable '\$$sym'.\n" unless
+ $lintuse{$sym};
+ $lintuse_used{$sym}++ if $lintuse{$sym};
+ }
+ }
+ # Idem for local files
+ foreach $file (sort keys %filetmp) {
+ warn "$where: mis-used temporary file '$file'.\n" if
+ $filetmp{$file} =~ /\bmisused/;
+ warn "$where: unused temporary file '$file'.\n" unless
+ $lintfused{$file} ||
+ $filetmp{$file} =~ /\bused/ || $filetmp{$file} =~ /\bmisused/;
+ }
+ # Make sure each private file listed as created on ?F: is really created.
+ # When found, a private UU file is entered in the %filecreated array
+ # with value 'a'. Each time a file creation occurs in the unit, an
+ # increment is done on that value. Since 'a'++ -> 'b', a numeric value
+ # in %filecreated means a non-local file, which is skipped. An 'a' means
+ # the file was not created...
+ local($value);
+ foreach $file (sort keys %filecreated) {
+ $value = $filecreated{$file};
+ next if $value > 0; # Skip non UU-files.
+ warn "$where: file '$file' was not created.\n" if $value eq 'a';
+ }
+ # Check whether some of the LINT directives were useful
+ foreach my $sym (sort keys %lintcreated) {
+ warn "$where: spurious 'LINT create $sym' directive.\n";
+ }
+ foreach my $sym (sort keys %lintuse) {
+ warn "$where: spurious 'LINT use $sym' directive.\n"
+ unless $lintuse_used{$sym};
+ }
+ foreach my $sym (sort keys %lintchange) {
+ warn "$where: spurious 'LINT change $sym' directive.\n"
+ unless $lintchange_used{$sym};
+ }
+ foreach my $sym (sort keys %lintseen) {
+ warn "$where: spurious 'LINT define $sym' directive.\n"
+ unless $lintseen_used{$sym};
+ }
+ foreach my $sym (sort keys %lintsdesc) {
+ warn "$where: spurious 'LINT describe $sym' directive.\n"
+ unless $lintsdesc_used{$sym};
+ }
+ foreach my $sym (sort keys %lintcdesc) {
+ warn "$where: spurious 'LINT known $sym' directive.\n"
+ unless $lintcdesc_used{$sym};
+ }
+ foreach my $sym (sort keys %lintset) {
+ warn "$where: spurious 'LINT set $sym' directive.\n"
+ unless $lintset_used{$sym};
+ }
+}
+
+# An unknown control line sequence was found (held in $proc)
+sub p_unknown {
+ warn "\"$file\", line $.: unknown control sequence '?$proc:'.\n";
+}
+
+# Run sanity checks, to make sure every conditional symbol has a suitable
+# default value. Also ensure every symbol was defined once.
+sub sanity_checks {
+ print "Sanity checks...\n";
+ local($key, $value);
+ local($w);
+ local(%message); # Record messages on a per-unit basis
+ local(%said); # Avoid duplicate messages
+ # Warn about symbols ever used in conditional dependency with no default
+ while (($key, $value) = each(%condsym)) {
+ unless ($hasdefault{$key}) {
+ $w = (split(' ', $shmaster{"\$$key"}))[0];
+ $message{$w} .= "#$key ";
+ }
+ }
+ # Warn about any undeclared variables. They are all listed in %shunknown,
+ # being the values while the unit where they appear is the key. If the
+ # symbol is defined by any of the special units included or made visible,
+ # then no warning is issued.
+ local($defined); # True if symbol is defined in one unit
+ local($where); # List of units where symbol is defined
+ local($myself); # The name of the current unit if itself special
+ local($visible); # Symbol made visible via a ?V: line
+ foreach $unit (sort keys %shunknown) {
+ foreach $sym (split(' ', $shunknown{$unit})) {
+ $defined = 0;
+ $where = $shmaster{"\$$sym"};
+ $defined = 1 if $tempmaster{"\$$sym"} =~ /$unit\b/;
+ $myself = substr($unit, 0, 1) =~ /^[A-Z]/ ? $unit : '';
+ # Symbol has to be either defined within one of the special units
+ # listed in the dependencies or exported via a ?V: line.
+ unless ($defined) {
+ $defined = &visible($sym, $unit);
+ $spneeded{$unit}++ if $defined;
+ }
+ $message{$unit} .= "\$$sym " unless $defined;
+ }
+ }
+
+ # Warn about any undeclared files. Files used in one unit are all within
+ # the %fileused table, indexed by unit. If a file is used, it must either
+ # be in the unit that declared it (relying on %filemaster for that) or
+ # the unit listed in %filemaster must be part of our dependency.
+ %said = ();
+ foreach $unit (sort keys %fileused) {
+ foreach $file (split(' ', $fileused{$unit})) {
+ $defined = 0;
+ $where = $filemaster{$file}; # Where file is created
+ $defined = 1 if $unit eq $where; # We're in the unit defining it
+ # Private UU files may be only be created by special units
+ foreach $special (split(' ', $shspecial{$unit})) {
+ last if $defined;
+ $defined = 1 if $where eq $special;
+ }
+ # Exceptions to above rule possible via a ?LINT:create hint,
+ # so parse all known dependencies for the unit...
+ foreach $depend (split(' ', $shdepend{$unit})) {
+ last if $defined;
+ $defined = 1 if $where eq $depend;
+ }
+ $message{$unit} .= "\@$file " unless
+ $defined || $said{"$unit/$file"}++; # Unknown file
+ }
+ }
+ undef %fileused;
+
+ # Warn about any misused files, kept in %filemisused
+ foreach $unit (sort keys %filemisused) {
+ foreach $file (split(' ', $filemisused{$unit})) {
+ next unless defined $filemaster{$file}; # Skip non UU-files
+ $message{$unit} .= "\@\@$file "; # Misused file
+ }
+ }
+ undef %filemisused;
+
+ # Warn about temporary files which could be created and inadvertently
+ # override a private UU file (listed in %filemaster).
+ foreach $tmpfile (keys %filesetin) {
+ next unless defined $filemaster{$tmpfile};
+ $where = $filemaster{$tmpfile};
+ foreach $unit (split(' ', $filesetin{$tmpfile})) {
+ $message{$unit} .= "\@\@\@$where:$tmpfile ";
+ }
+ }
+ undef %filesetin;
+
+ # Warn about any set variable which was not listed.
+ foreach $unit (sort keys %shset) {
+ symbol: foreach $sym (split(' ', $shset{$unit})) {
+ next if $shvisible{$sym};
+ $defined = 0;
+ # Symbol has to be either defined within one of the special units
+ # listed in the dependencies or exported read-write via a ?V: line.
+ # If symbol is exported read-only, report the attempt to set it.
+ $where = $shmaster{"\$$sym"};
+ study $where;
+ foreach $special (split(' ', $shspecial{$unit})) {
+ $defined = 1 if $where =~ /\b$special\b/;
+ last if $defined;
+ }
+ $visible = 0;
+ $defined = $visible = &visible($sym, $unit) unless $defined;
+ if ($visible && $shvisible{"\$$sym"} ne '') {
+ # We are allowed to set a read-only symbol in the unit which
+ # declared it...
+ next symbol if $shvisible{"\$$sym"} eq $unit;
+ $message{$unit} .= "\&$sym "; # Read-only symbol set
+ next symbol;
+ }
+ $message{$unit} .= "$sym " unless $defined;
+ }
+ }
+ # Warn about any obsolete variable which may be used
+ foreach $unit (sort keys %shused) {
+ foreach $sym (split(' ', $shused{$unit})) {
+ $message{$unit} .= "!$sym " if $Obsolete{$sym} ne '';
+ }
+ }
+
+ # Warn about stale dependencies, and prepare successor and predecessor
+ # tables for later topological sort.
+
+ local($targets, $deps);
+ local(%Succ); # Successors
+ local(%Prec); # Predecessors
+
+ # Split dependencies and build successors array.
+ foreach $make (@make) {
+ ($targets, $deps) = $make =~ m|(.*):\s*(.*)|;
+ $deps =~ s/\+(\w)/$1/g; # Remove conditional targets
+ foreach $target (split(' ', $targets)) {
+ $Succ{$target} .= $deps . ' ';
+ }
+ }
+
+ # Special setup for the End target, which normally has a $W dependency for
+ # wanted symbols. In order to detect all the possible cycles, we forge a
+ # huge dependency by making ALL the regular symbols (i.e. those whose first
+ # letter is not uppercased) wanted.
+
+ local($allwant) = '';
+ {
+ local($sym, $val);
+ while (($sym, $val) = each %shmaster) {
+ $sym =~ s/^\$//;
+ $allwant .= "$sym " if $val ne '';
+ }
+ }
+
+ $Succ{'End'} =~ s/\$W/$allwant/;
+
+ # Initialize precursors, and spot symbols impossible to 'make', i.e. those
+ # symbols listed in the successors and with no 'make' target. The data
+ # structures %Prec and %Succ will also be used by the cycle lookup code,
+ # in other words, the topological sort.
+ foreach $target (keys %Succ) {
+ $Prec{$target} += 0; # Ensure key is recorded without disturbing.
+ foreach $succ (split(' ', $Succ{$target})) {
+ $Prec{$succ}++; # Successor has one more precursor
+ unless (defined $Succ{$succ} || $said{$succ}++) {
+ foreach $unit (split(' ', $symdep{$succ})) {
+ $message{$unit} .= "?$succ "; # Stale ?MAKE: dependency
+ }
+ }
+ }
+ }
+ undef %symdep;
+
+ # Check all ?M: dependencies to spot stale ones
+ %said = ();
+ while (($key, $value) = each(%msym)) {
+ next if $value eq ''; # Value is unit name where ?M: occurred
+ foreach $sym (split(' ', $mdep{$key})) { # Loop on C dependencies
+ next if $cmaster{$sym} || $said{$sym};
+ $message{$value} .= "??$sym "; # Stale ?M: dependency
+ $said{$sym}++;
+ }
+ }
+
+ undef %said;
+ undef %mdep;
+ undef %msym;
+
+ # Now actually emit all the warnings
+ local($uv); # Unit defining visible symbol or private file
+ local($w); # Were we are signaling an error
+ foreach $unit (sort keys %message) {
+ undef %said;
+ $w = "\"$unit.U\"";
+ foreach (split(' ', $message{$unit})) {
+ if (s/^#//) {
+ warn "$w: symbol '\$$_' has no default value.\n";
+ } elsif (s/^\?\?//) {
+ warn "$w: stale ?M: dependency '$_'.\n";
+ } elsif (s/^\?//) {
+ warn "$w: stale ?MAKE: dependency '$_'.\n";
+ } elsif (s/^\$//) {
+ if ($shmaster{"\$$_"} ne '') {
+ warn "$w: symbol '\$$_' missing from ?MAKE.\n";
+ } elsif (($uv = $shvisible{$_}) ne '') {
+ warn "$w: missing $uv from ?MAKE for visible '\$$_'.\n";
+ } elsif (($uv = $shvisible{"\$$_"}) ne '') {
+ warn "$w: missing $uv from ?MAKE for visible '\$$_'.\n";
+ } else {
+ warn "\"$unit.U\": unknown symbol '\$$_'.\n";
+ }
+ ++$said{$_};
+ } elsif (s/^\&//) {
+ warn "\"$unit.U\": read-only symbol '\$$_' is set.\n";
+ ++$said{$_};
+ } elsif (s/^!//) {
+ warn "\"$unit.U\": obsolete symbol '$_' is used.\n";
+ ++$said{$_};
+ } elsif (s/^\@\@\@//) {
+ $uv = '?'; # To spot format errors
+ s/^(\w+):// && ($uv = $1);
+ warn "$w: local file '$_' may override the one set by $uv.U.\n";
+ } elsif (s/^\@\@//) {
+ $uv = $filemaster{$_};
+ warn "$w: you might not always get file '$_' from $uv.U.\n";
+ } elsif (s/^\@//) {
+ if ($uv = $filemaster{$_}) {
+ warn "$w: missing $uv from ?MAKE for private file '$_'.\n";
+ } else {
+ warn "$w: unknown private file '$_'.\n";
+ }
+ ++$said{"\@$_"};
+ } else {
+ warn "\"$unit.U\": undeclared symbol '\$$_' is set.\n"
+ unless $said{$_};
+ }
+ }
+ }
+
+ # Memory cleanup
+ undef %message;
+ undef %said;
+ undef %shused;
+ undef %shset;
+ undef %shspecial;
+ undef %shvisible;
+ undef %filemaster;
+
+ # Spot multiply defined C symbols
+ foreach $sym (keys %cmaster) {
+ @sym = split(' ', $cmaster{$sym});
+ if (@sym > 1) {
+ warn "C symbol '$sym' is defined in the following units:\n";
+ foreach (@sym) {
+ print STDERR "\t$_.U\n";
+ }
+ }
+ }
+ undef %cmaster; # Memory cleanup
+
+ # Warn about multiply defined symbols. There are three kind of symbols:
+ # target symbols, obsolete symbols and temporary symbols.
+ # For each of these sets, we make sure the intersection with the other sets
+ # is empty. Besides, we make sure target symbols are only defined once.
+
+ local(@sym);
+ foreach $sym (keys %shmaster) {
+ @sym = split(' ', $shmaster{$sym});
+ if (@sym > 1) {
+ warn "Shell symbol '$sym' is defined in the following units:\n";
+ foreach (@sym) {
+ print STDERR "\t$_.U\n";
+ }
+ }
+ $message{$sym} .= 'so ' if $Obsolete{$sym};
+ $message{$sym} .= 'st ' if $tempmaster{$sym};
+ }
+ foreach $sym (keys %tempmaster) {
+ $message{$sym} .= 'ot ' if $Obsolete{$sym};
+ }
+ local($_);
+ while (($sym, $_) = each %message) {
+ if (/so/) {
+ if (/ot/) {
+ warn "Shell symbol '$sym' is altogether:\n";
+ @sym = split(' ', $shmaster{$sym});
+ @sym = grep(s/$/.U/, @sym);
+ print STDERR "...defined in: ", join(', ', @sym), "\n";
+ print STDERR "...obsoleted by $Obsolete{$sym}.\n";
+ @sym = split(' ', $tempmaster{$sym});
+ @sym = grep(s/$/.U/, @sym);
+ print STDERR "...used as temporary in:", join(', ', @sym), "\n";
+ } else {
+ warn "Shell symbol '$sym' is both defined and obsoleted:\n";
+ @sym = split(' ', $shmaster{$sym});
+ @sym = grep(s/$/.U/, @sym);
+ print STDERR "...defined in: ", join(', ', @sym), "\n";
+ print STDERR "...obsoleted by $Obsolete{$sym}.\n";
+ }
+ } elsif (/st/) { # Cannot be ot as it would imply so
+ warn "Shell symbol '$sym' is both defined and used as temporary:\n";
+ @sym = split(' ', $shmaster{$sym});
+ @sym = grep(s/$/.U/, @sym);
+ print STDERR "...defined in: ", join(', ', @sym), "\n";
+ @sym = split(' ', $tempmaster{$sym});
+ @sym = grep(s/$/.U/, @sym);
+ print STDERR "...used as temporary in:", join(', ', @sym), "\n";
+ } elsif (/ot/) {
+ warn "Shell symbol '$sym' obsoleted also used as temporary:\n";
+ print STDERR "...obsoleted by $Obsolete{$sym}.\n";
+ @sym = split(' ', $tempmaster{$sym});
+ @sym = grep(s/$/.U/, @sym);
+ print STDERR "...used as temporary in:", join(', ', @sym), "\n";
+ }
+ }
+
+ # Spot multiply defined files, either private or public ones
+ foreach $file (keys %prodfile) {
+ @sym = split(' ', $prodfile{$file});
+ if (@sym > 1) {
+ warn "File '$file' is defined in the following units:\n";
+ foreach (@sym) {
+ print STDERR "\t$_\n";
+ }
+ }
+ }
+ undef %prodfile;
+
+
+ # Memory cleanup (we still need %shmaster for tsort)
+ undef %message;
+ undef %tempmaster;
+ undef %Obsolete;
+
+ # Make sure there is no dependency cycle
+ print "Looking for dependency cycles...\n";
+ &tsort(*Succ, *Prec); # Destroys info from %Prec
+}
+
+# Make sure last declaration ended correctly with a ?S:. or ?C:. line.
+# The variable '$where' was correctly positionned by the calling routine.
+sub check_last_declaration {
+ warn "$where: definition of '\$$s_symbol' not closed by '?S:.'.\n"
+ if $s_symbol ne '';
+ warn "$where: definition of '$c_symbol' not closed by '?C:.'.\n"
+ if $c_symbol ne '';
+ warn "$where: magic definition of '$m_symbol' not closed by '?M:.'.\n"
+ if $m_symbol ne '';
+ $s_symbol = $c_symbol = $m_symbol = '';
+}
+
+# Make sure the variable is mentionned on the ?MAKE line, if possible in the
+# definition section.
+# The variable '$where' was correctly positionned by the calling routine.
+sub check_definition {
+ local($var) = @_;
+ warn "$where: variable '\$$var' not even listed on ?MAKE: line.\n"
+ unless $defseen{$var} || $condseen{$var} || $depseen{$var};
+ warn "$where: variable '\$$var' is defined externally.\n"
+ if !$lintextern{$var} && !$defseen{$var} && &wanted($var);
+}
+
+# Is symbol declared somewhere?
+sub declared {
+ &defined($_[0]) || &wanted($_[0]);
+}
+
+# Is symbol defined by unit?
+sub defined {
+ $tempseen{$_[0]} || $defseen{$_[0]} || $lintseen{$_[0]};
+}
+
+# Is symbol wanted by unit?
+sub wanted {
+ $depseen{$_[0]} || $condseen{$_[0]};
+}
+
+# Is symbol visible from the unit?
+# Locate visible symbols throughout the special units. Each unit having
+# some special dependencies (special units wanted) have an entry in the
+# %shspecial array, listing all those special dependencies. And each
+# symbol made visible by ONE special unit has an entry in the %shvisible
+# array.
+sub visible {
+ local($symbol, $unit) = @_;
+ local(%explored); # Special units we've already explored
+ &explore($symbol, $unit); # Perform recursive search
+}
+
+# Recursively explore the dependencies to locate a visible symbol
+sub explore {
+ local($symbol, $unit) = @_;
+ # If unit was already explored, we know it has not been found by following
+ # that path.
+ return 0 if defined $explored{$unit};
+ $explored{$unit} = 0; # Assume nothing found in this unit
+ local($specials) = $shspecial{$unit};
+ # Don't waste any time if unit does not have any special units listed
+ # in its dependencies.
+ return 0 unless $specials;
+ foreach $special (split(' ', $specials)) {
+ return 1 if (
+ $shvisible{"\$$symbol"} eq $unit ||
+ $shvisible{$symbol} eq $unit ||
+ &explore($symbol, $special)
+ );
+ }
+ 0;
+}
+
diff --git a/mcon/pl/locate.pl b/mcon/pl/locate.pl
new file mode 100644
index 0000000..ea7d03f
--- /dev/null
+++ b/mcon/pl/locate.pl
@@ -0,0 +1,153 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: locate.pl,v $
+;# Revision 3.0.1.1 1994/10/29 16:36:52 ram
+;# patch36: misspelled a 'closedir' as a 'close' statement
+;#
+;# Revision 3.0 1993/08/18 12:10:25 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# Locate units and put them in the @ARGV array, for later perusal. We first
+;# look in the private U directory, then in the public U library. In each U
+;# directory, units may be gathered in clusters (directories). These clusters
+;# should not have a name ending with .U, as those will never be stat()'ed.
+;#
+;# NB: Currently, the clusters are only a practical way of grouping a set of
+;# closely related units. There must not be any name conflicts.
+;#
+;# The following variables are used:
+;# $WD is assumed to be the working directory (where the process was spawned)
+;# $MC is the location of metaconfig's public library
+;# @ARGV is the list of all the units full path
+;# %Unit maps an unit name (without final .U) to a path
+;# @myUlist lists the user's units, which will be appended at the end of @ARGV
+;# %myUseen lists the user's units which overwrite public ones
+;#
+package locate;
+
+# Locate the units and push their path in @ARGV (sorted alphabetically)
+sub main'locate_units {
+ print "Locating units...\n" unless $main'opt_s;
+ local(*WD) = *main'WD; # Current working directory
+ local(*MC) = *main'MC; # Public metaconfig library
+ undef %myUlist; # Records private units paths
+ undef %myUseen; # Records private/public conflicts
+ &private_units; # Locate private units in @myUlist
+ &public_units; # Locate public units in @ARGV
+ @ARGV = sort @ARGV; # Sort it alphabetically
+ push(@ARGV, sort @myUlist); # Append user's units sorted
+ &dump_list if $main'opt_v; # Dump the list of units
+}
+
+# Dump the list of units on stdout
+sub dump_list {
+ print "\t";
+ $, = "\n\t";
+ print @ARGV;
+ $, = '';
+ print "\n";
+}
+
+# Scan private units
+sub private_units {
+ return unless -d 'U'; # Nothing to be done if no 'U' entry
+ local(*ARGV) = *myUlist; # Really fill in @myUlist
+ local($MC) = $WD; # We are really in the working directory
+ &units_path("U"); # Locate units in the U directory
+ local($unit_name); # Unit's name (without .U)
+ local(@kept); # Array of kept units
+ # Loop over the units and remove duplicates (the first one seen is the one
+ # we keep). Also set the %myUseen H table to record private units seen.
+ foreach (@ARGV) {
+ ($unit_name) = m|^.*/(.*)\.U$|; # Get unit's name from path
+ next if $myUseen{$unit_name}; # Already recorded
+ $myUseen{$unit_name} = 1; # Record pirvate unit
+ push(@kept, $_); # Keep this unit
+ }
+ @ARGV = @kept;
+}
+
+# Scan public units
+sub public_units {
+ chdir($MC) || die "Can't find directory $MC.\n";
+ &units_path("U"); # Locate units in public U directory
+ chdir($WD) || die "Can't go back to directory $WD.\n";
+ local($path); # Relative path from $WD
+ local($unit_name); # Unit's name (without .U)
+ local(*Unit) = *main'Unit; # Unit is a global from main package
+ local(@kept); # Units kept
+ local(%warned); # Units which have already issued a message
+ # Loop over all the units and keep only the ones that were not found in
+ # the user's U directory. As it is possible two or more units with the same
+ # name be found in
+ foreach (@ARGV) {
+ ($unit_name) = m|^.*/(.*)\.U$|; # Get unit's name from path
+ next if $warned{$unit_name}; # We have already seen this unit
+ $warned{$unit_name} = 1; # Remember we have warned the user
+ if ($myUseen{$unit_name}) { # User already has a private unit
+ $path = $Unit{$unit_name}; # Extract user's unit path
+ next if $path eq $_; # Same path, we must be in mcon/
+ $path =~ s|^$WD/||o; # Weed out leading working dir path
+ print " Your private $path overrides the public one.\n"
+ unless $main'opt_s;
+ } else {
+ push(@kept, $_); # We may keep this one
+ }
+ }
+ @ARGV = @kept;
+}
+
+# Recursively locate units in the directory. Each file ending with .U has to be
+# a unit. Others are stat()'ed, and if they are a directory, they are also
+# scanned through. The $MC and @ARGV variable are dynamically set by the caller.
+sub units_path {
+ local($dir) = @_; # Directory where units are to be found
+ local(@contents); # Contents of the directory
+ local($unit_name); # Unit's name, without final .U
+ local($path); # Full path of a unit
+ local(*Unit) = *main'Unit; # Unit is a global from main package
+ unless (opendir(DIR, $dir)) {
+ warn("Cannot open directory $dir.\n");
+ return;
+ }
+ print "Locating in $MC/$dir...\n" if $main'opt_v;
+ @contents = readdir DIR; # Slurp the whole thing
+ closedir DIR; # And close dir, ready for recursion
+ foreach (@contents) {
+ next if $_ eq '.' || $_ eq '..';
+ if (/\.U$/) { # A unit, definitely
+ ($unit_name) = /^(.*)\.U$/;
+ $path = "$MC/$dir/$_"; # Full path of unit
+ push(@ARGV, $path); # Record its path
+ if (defined $Unit{$unit_name}) { # Already seen this unit
+ if ($main'opt_v) {
+ ($path) = $Unit{$unit_name} =~ m|^(.*)/.*|;
+ print " We've already seen $unit_name.U in $path.\n";
+ }
+ } else {
+ $Unit{$unit_name} = $path; # Map name to path
+ }
+ next;
+ }
+ # We have found a file which does not look like a unit. If it is a
+ # directory, then scan it. Otherwise skip the file.
+ unless (-d "$dir/$_") {
+ print " Skipping file $_ in $dir.\n" if $main'opt_v;
+ next;
+ }
+ &units_path("$dir/$_");
+ print "Back to $MC/$dir...\n" if $main'opt_v;
+ }
+}
+
+package main;
+
diff --git a/mcon/pl/makefile.pl b/mcon/pl/makefile.pl
new file mode 100644
index 0000000..290c995
--- /dev/null
+++ b/mcon/pl/makefile.pl
@@ -0,0 +1,176 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: makefile.pl,v $
+;# Revision 3.0.1.1 1995/09/25 09:19:42 ram
+;# patch59: symbols are now sorted according to the ?Y: layout directive
+;#
+;# Revision 3.0 1993/08/18 12:10:26 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# Given a list of wanted symbols in the Wanted file, produce a Makefile which
+;# will compute the transitive closure of dependencies for us and give the
+;# correct layout order in the Configure script. Because some conditional
+;# symbols could indeed be truly wanted symbols, we build the makefile in two
+;# passes. The first one will give us the complete list of units to be loaded,
+;# while the second will determine the correct order.
+;#
+;# The external $saved_dependencies records the original dependencies we got
+;# from the units' ?MAKE: lines while $dependencies is tampered with.
+;#
+;# Note that when the -w option is supplied, the sources are not parsed.
+;# However, the config.h.SH file would be empty, because its building
+;# relies on values in cmaster and shmaster arrays. It is okay for values
+;# in shmaster, because they are true wanted symbols. The cmaster keys
+;# have also been written, but with a leading '>' (because they are
+;# not true targets for Makefile). We thus extract all these keys and
+;# set the cmaster array accordingly.
+;#
+;# Obsolete symbols, if any found, are also part of the Wanted file, written on
+;# a line starting with a '!', eventually followed by a '>' if the obsolete
+;# symbol is a C one.
+;#
+;# These three data structures record wanted things like commands or symbols.
+;# %symwanted{'sym'} is true when the symbol is wanted (transitive closure)
+;# %condwanted{'sym'} when the default value of a symbol is requested
+;# $wanted records the set of wanted shell symbols (as opposed to C ones)
+;#
+# Build the private makefile we use to compute the transitive closure of the
+# previously determined dependencies.
+sub build_makefile {
+ print "Computing optimal dependency graph...\n" unless $opt_s;
+ chdir('.MT') || die "Can't chdir to .MT\n";
+ local($wanted); # Wanted shell symbols
+ &build_private; # Build a first makefile from dependencies
+ &compute_loadable; # Compute loadable units
+ &update_makefile; # Update makefile using feedback from first pass
+ chdir($WD) || die "Can't chdir back to $WD\n";
+ # Free memory by removing useless data structures
+ undef $dependencies;
+ undef $saved_dependencies;
+}
+
+# First pass: build a private makefile from the extracted dependency, changing
+# conditional units to truly wanted ones if the symbol is used, removing the
+# dependency otherwise. The original dependencies are saved.
+sub build_private {
+ print " Building private make file...\n" unless $opt_s;
+ open(WANTED,"../Wanted") || die "Can't reopen Wanted.\n";
+ $wanted = ' ' x 2000; # Pre-extend string
+ $wanted = '';
+ while (<WANTED>) {
+ chop;
+ next if /^!/; # Skip obsolete symbols
+ if (s/^>//) {
+ $cmaster{$_}++;
+ } else {
+ $wanted .= "$_ ";
+ }
+ }
+ close WANTED;
+
+ # The wanted symbols are sorted so that d_* (checking for C library symbol)
+ # come first and i_* (checking for includes) comes at the end. Grouping the
+ # d_* symbols together has good chances of improving the locality of the
+ # other questions and i_* symbols must come last since some depend on h_*
+ # values which prevent incompatible headers inclusions.
+ $wanted = join(' ', sort symbols split(' ', $wanted));
+
+ # Now generate the first makefile, which will be used to determine which
+ # symbols we really need, so that conditional dependencies may be solved.
+ open(MAKEFILE,">Makefile") || die "Can't create .MT/Makefile.\n";
+ print MAKEFILE "SHELL = /bin/sh\n";
+ print MAKEFILE "W = $wanted\n";
+ $saved_dependencies = $dependencies;
+ $* = 1;
+ foreach $sym (@Cond) {
+ if ($symwanted{$sym}) {
+ $dependencies =~ s/\+($sym\s)/$1/g;
+ } else {
+ $dependencies =~ s/\+$sym(\s)/$1/g;
+ }
+ }
+ $* = 0;
+ print MAKEFILE $dependencies;
+ close MAKEFILE;
+}
+
+# Ordering for symbols. Give higher priority to d_* ones and lower to i_* ones.
+# If any layout priority is defined in %Layout, it is used to order the
+# symbols.
+sub symbols {
+ local($r) = $Layout{$a} <=> $Layout{$b};
+ return $r if $r;
+ # If we come here, both symbols have the same layout priority.
+ if ($a =~ /^d_/) {
+ return -1 unless $b =~ /^d_/;
+ } elsif ($b =~ /^d_/) {
+ return 1;
+ } elsif ($a =~ /^i_/) {
+ return 1 unless $b =~ /^i_/;
+ } elsif ($b =~ /^i_/) {
+ return -1;
+ }
+ $a cmp $b;
+}
+
+# Run the makefile produced in the first pass to find the whole set of units we
+# have to load, filling in the %symwanted and %condwanted structures.
+sub compute_loadable {
+ print " Determining loadable units...\n" unless $opt_s;
+ open(MAKE, "make -n |") || die "Can't run make";
+ while (<MAKE>) {
+ s|^\s+||; # Some make print tabs before command
+ if (/^pick/) {
+ print "\t$_" if $opt_v;
+ ($pick,$cmd,$symbol,$unit) = split(' ');
+ $symwanted{$symbol}++;
+ $symwanted{$unit}++;
+ } elsif (/^cond/) {
+ print "\t$_" if $opt_v;
+ ($pick,@symbol) = split(' ');
+ for (@symbol) {
+ $condwanted{$_}++; # Default value is requested
+ }
+ }
+ }
+ close MAKE;
+}
+
+# Now that we know all the desirable symbols, we have to rebuild
+# another makefile, in order to have the units in a more optimal
+# way.
+# Actually, if we have both ?MAKE:a:+b and ?MAKE:d:b and 'd' is
+# wanted; then 'b' will be loaded. However, 'b' is a conditional
+# dependency for 'a', and it would be better if 'b' were loaded
+# before 'a' is, though this is not necessary.
+# It is hard to know that 'b' will be loaded *before* the first make.
+
+# Back to the original dependencies, make loadable units truly wanted ones and
+# remove optional ones.
+sub update_makefile {
+ print " Updating make file...\n" unless $opt_s;
+ open(MAKEFILE,">Makefile") || die "Can't create .MT/Makefile.\n";
+ print MAKEFILE "SHELL = /bin/sh\n";
+ print MAKEFILE "W = $wanted\n";
+ $* = 1;
+ foreach $sym (@Cond) {
+ if ($symwanted{$sym}) {
+ $saved_dependencies =~ s/\+($sym\s)/$1/g;
+ } else {
+ $saved_dependencies =~ s/\+$sym(\s)/$1/g;
+ }
+ }
+ $* = 0;
+ print MAKEFILE $saved_dependencies;
+ close MAKEFILE;
+}
+
diff --git a/mcon/pl/obsolete.pl b/mcon/pl/obsolete.pl
new file mode 100644
index 0000000..ba9a601
--- /dev/null
+++ b/mcon/pl/obsolete.pl
@@ -0,0 +1,103 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: obsolete.pl,v $
+;# Revision 3.0.1.1 1995/01/30 14:49:22 ram
+;# patch49: random clean-up in &record_obsolete
+;#
+;# Revision 3.0 1993/08/18 12:10:27 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# Deal with obsolete symbols. They are recorded in the %Obsolete array.
+;# Optionally, the obsolete symbols may be remaped onto the new ones (option
+;# -o), which enables smooth evolution from 2.0.
+;#
+# Record obsolete symbols association (new versus old), that is to say for a
+# given old symbol, $Obsolete{'old'} = new symbol to be used. A '$' is prepended
+# for all shell variables
+sub record_obsolete {
+ local($_) = @_;
+ local(@obsoleted); # List of obsolete symbols
+ local($symbol); # New symbol which must be used
+ local($dollar) = s/^\$// ? '$':''; # The '$' or a null string
+ # Syntax for obsolete symbols specification is
+ # list of symbols (obsolete ones):
+ if (/^(\w+)\s*\((.*)\)\s*:$/) {
+ $symbol = "$dollar$1";
+ @obsoleted = split(' ', $2); # List of obsolete symbols
+ } else {
+ if (/^(\w+)\s*\((.*):$/) {
+ warn "\"$file\", line $.: final ')' before ':' missing.\n";
+ $symbol = "$dollar$1";
+ @obsoleted = split(' ', $2);
+ } else {
+ warn "\"$file\", line $.: syntax error.\n";
+ return;
+ }
+ }
+ foreach $val (@obsoleted) {
+ $_ = $dollar . $val;
+ if (defined $Obsolete{$_}) {
+ warn "\"$file\", line $.: '$_' already obsoleted by '$Obsolete{$_}'.\n";
+ } else {
+ $Obsolete{$_} = $symbol; # Record (old, new) tuple
+ }
+ }
+}
+
+# Dump obsolete symbols used in file 'Obsolete'. Also write Obsol_h.U and
+# Obsol_sh.U to record old versus new mappings if the -o option was used.
+sub dump_obsolete {
+ unless (-f 'Obsolete') {
+ open(OBSOLETE, ">Obsolete") || die "Can't create Obsolete.\n";
+ }
+ open(OBSOL_H, ">.MT/Obsol_h.U") || die "Can't create .MT/Obsol_h.U.\n";
+ open(OBSOL_SH, ">.MT/Obsol_sh.U") || die "Can't create .MT/Obsol_sh.U.\n";
+ local($file); # File where obsolete symbol was found
+ local($old); # Name of this old symbol
+ local($new); # Value of the new symbol to be used
+ # Leave a blank line at the top so that anny added ^L will stand on a line
+ # by itself (the formatting process adds a ^L when a new page is needed).
+ format OBSOLETE_TOP =
+
+ File | Old symbol | New symbol
+-----------------------------------+----------------------+---------------------
+.
+ format OBSOLETE =
+@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | @<<<<<<<<<<<<<<<<<<< | @<<<<<<<<<<<<<<<<<<<
+$file, $old, $new
+.
+ local(%seen);
+ foreach $key (sort keys %ofound) {
+ ($file, $old, $new) = ($key =~ /^(\S+)\s+(\S+)\s+(\S+)/);
+ write(OBSOLETE) unless $file eq 'XXX';
+ next unless $opt_o; # Obsolete mapping done only with -o
+ next if $seen{$old}++; # Already remapped, thank you
+ if ($new =~ s/^\$//) { # We found an obsolete shell symbol
+ $old =~ s/^\$//;
+ print OBSOL_SH "$old=\"\$$new\"\n";
+ } else { # We found an obsolete C symbol
+ print OBSOL_H "#ifdef $new\n";
+ print OBSOL_H "#define $old $new\n";
+ print OBSOL_H "#endif\n\n";
+ }
+ }
+ close OBSOLETE;
+ close OBSOL_H;
+ close OBSOL_SH;
+ if (-s 'Obsolete') {
+ print "*** Obsolete symbols found -- see file 'Obsolete' for a list.\n";
+ } else {
+ unlink 'Obsolete';
+ }
+ undef %ofound; # Not needed any more
+}
+
diff --git a/mcon/pl/order.pl b/mcon/pl/order.pl
new file mode 100644
index 0000000..e6ef35a
--- /dev/null
+++ b/mcon/pl/order.pl
@@ -0,0 +1,42 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: order.pl,v $
+;# Revision 3.0 1993/08/18 12:10:28 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# The @cmdwanted array records the output of the makefile (pick commands only).
+;# The shell commands are executed right away.
+;# @cmdwanted records the output of the make process (solving dependencies)
+# Solve dependencies by saving the 'pick' command in @cmdwanted
+sub solve_dependencies {
+ local(%unitseen); # Record already picked units (avoid duplicates)
+ print "Determining the correct order for the units...\n" unless $opt_s;
+ chdir('.MT') || die "Can't chdir to .MT: $!.\n";
+ open(MAKE, "make -n |") || die "Can't run make";
+ while (<MAKE>) {
+ s|^\s+||; # Some make print tabs before command
+ print "\t$_" if $opt_v;
+ if (/^pick/) {
+ ($pick,$cmd,$symbol,$unit) = split(' ');
+ push(@cmdwanted,"$cmd $symbol $unit")
+ unless $unitseen{"$cmd:$unit"}++;
+ } elsif (/^cond/) {
+ # Ignore conditional symbol request
+ } else {
+ chop;
+ system;
+ }
+ }
+ chdir($WD) || die "Can't chdir to $WD: $!.\n";
+ close MAKE;
+}
+
diff --git a/mcon/pl/tsort.pl b/mcon/pl/tsort.pl
new file mode 100644
index 0000000..4d56fae
--- /dev/null
+++ b/mcon/pl/tsort.pl
@@ -0,0 +1,166 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: tsort.pl,v $
+;# Revision 3.0 1993/08/18 12:10:28 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# The topological sort is performed using the following algorithm:
+;#
+;# We have a list of successors for each item; makefile dependencies of
+;# the form 'a b: c d' means successors(a) = successors(b) = { c, d }.
+;# From that input, we derive a number of precursors for each item.
+;# In our simple example above, c and d both have two precursors and
+;# a and b have none. Items with no precursors are called outsiders
+;# and are left in a pool. The sort is then initiated and will continue
+;# until all the items have been sorted or a cycle is found...
+;#
+;# Outsiders are ready to be sorted; since the topological sort is a partial
+;# order, an external criterion is needed to choose one item among the ones
+;# in the pool. That item is assigned a number, and the number of precursors
+;# for the remaining items is updated (by following the successors of the
+;# sorted item and decrementing the value for each successor). Among those,
+;# if any item reaches a precursor count of zero, it becomes an outsider.
+;#
+;# The algorithm ends when the outsider pool is empty. If it becomes empty and
+;# some items remain unsorted, then there is one or more cycles among them.
+;# One way to outline that cycle first extract all those items whose precursor
+;# count is minimal then visit their dependency graph to find the cycle,
+;# extract only those items belonging to the cycle into the outsiders set and
+;# resume the main processing stream.
+;#
+#
+# Topological sort of Makefile dependencies with cycle enhancing.
+#
+
+package tsort;
+
+# Perform the topological sort of the items and outline cycles.
+sub main'tsort {
+ local(*Succ, *Prec) = @_; # Tables of succesors and predecessors
+ local(@Out); # The outsider set
+ local(@keys); # Current active precursors
+ local($item); # Item to sort
+
+ for (@keys = keys %Prec; @keys || @Out; @keys = keys %Prec) {
+ &resync; # Resynchronize outsiders
+ if (@Out == 0) { # Cycle detected
+ &extract_cycle(*Prec, *Succ);
+ next;
+ }
+ $item = shift(@Out); # Sort current item (don't care which one)
+ &sort($item); # Update internal structures
+ }
+}
+
+# Resynchronize the outsiders stack (those items that have no more precursors).
+# If the outsiders stack becomes empty, then there is a cycle.
+sub resync {
+ foreach $target (keys %Prec) {
+ if ($Prec{$target} == 0) {
+ delete $Prec{$target}; # We're done with this item
+ push(@Out, $target); # Ready to be sorted
+ }
+ }
+}
+
+# Sort item
+sub sort {
+ local($item) = @_;
+ print "(ok) $item\n" if $main'opt_d && !$Cycle;
+ print "(fx) $item\n" if $main'opt_d && $Cycle;
+ foreach $succ (split(' ', $Succ{$item})) {
+ # The test for definedness is necessary, since when a cycle is found,
+ # one item is forced out of %Prec. If we had the guarantee of no
+ # cycle, the the test would not be necessary and no decrementation
+ # could go past 0.
+ $Prec{$succ}-- if defined $Prec{$succ};
+ }
+}
+
+# Extract cycle... We look through the %Prec array and find all those items
+# with the same lowest value. Those are a cycle, so we dump them, and make
+# them new outsiders by resetting their count to 0.
+sub extract_cycle {
+ local(*Prec, *Succ) = @_;
+ local($item) = (&sort_by_value(*Prec))[0];
+ local($min) = $Prec{$item}; # Minimum value
+ local($key, $value);
+ local(%candidate); # Superset of the cycle we found
+ warn " Cycle found for:\n";
+ $Cycle++;
+ while (($key, $value) = each %Prec) {
+ $candidate{$key}++ if $value == $min;
+ }
+ local(%state); # State of visited nodes (1 = cycle, -1 = dead)
+ local($CYCLE) = 1; # Possible member of a cycle
+ local($DEAD) = -1; # Dead end, no cycling possible
+ foreach $key (keys %candidate) {
+ last if $CYCLE == &visit($key, $Succ{$key});
+ }
+ while (($key, $value) = each %candidate) {
+ next unless $state{$key} == $CYCLE;
+ $Prec{$key} = 0; # Members of cycle are new outsiders
+ warn "\t(#$Cycle) $key\n";
+ }
+ local(%involved); # Items involved in the cycle...
+ while (($key, $value) = each %state) {
+ $involved{$key}++ if $state{$key} == $CYCLE;
+ }
+ &outline_cycle(*Succ, *involved);
+}
+
+sub outline_cycle {
+ local(*Succ, *member) = @_;
+ local($key, $value);
+ local($depends);
+ local($unit);
+ warn " Cycle involves:\n";
+ while (($key, $value) = each %Succ) {
+ next unless $member{$key};
+ $depends = '';
+ foreach $item (split(' ', $value)) {
+ $depends .= "$item " if $member{$item};
+ }
+ $unit = $main'shmaster{"\$$key"};
+ $unit =~ s/\s+$//;
+ $unit = '?' if $unit eq '';
+ warn "\t($unit) $key: $depends\n";
+ }
+}
+
+# Visit a tree node, following all its successors, until we find a cycle.
+# Return $CYCLE if the exploration of the node leaded to a cycle, $DEAD
+# otherwise.
+sub visit {
+ local($node, $children) = @_; # A node and its children
+ # If we have already visited the node, return the status value attached
+ # to it.
+ return $state{$node} if $state{$node};
+ $state{$node} = $CYCLE; # Assume member of cycle
+ local($all_dead) = 1; # Set to 0 if at least one cycle found
+ foreach $child (split(' ', $children)) {
+ $all_dead = 0 if $CYCLE == &visit($child, $Succ{$child});
+ }
+ $state{$node} = $DEAD if $all_dead;
+ $state{$node};
+}
+
+# Sort associative array by value
+sub sort_by_value {
+ local(*x) = @_;
+ sub _by_value { $x{$a} <=> $x{$b}; }
+ sort _by_value keys %x;
+}
+
+package main;
+
+1;
diff --git a/mcon/pl/wanted.pl b/mcon/pl/wanted.pl
new file mode 100644
index 0000000..20d218c
--- /dev/null
+++ b/mcon/pl/wanted.pl
@@ -0,0 +1,263 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: wanted.pl,v $
+;# Revision 3.0.1.2 1995/01/11 15:42:37 ram
+;# patch45: added % in front of hash table names for perl5's each() (ADO)
+;# patch45: tell users about possible extra file-extension lookups
+;#
+;# Revision 3.0.1.1 1993/10/16 13:56:05 ram
+;# patch12: modified to handle ?M: lines
+;# patch12: added warning when magic symbols used without proper config
+;#
+;# Revision 3.0 1993/08/18 12:10:29 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# These two arrays record the file names of the files which may (or may not)
+;# contain shell or C symbols known by metaconfig.
+;# @SHlist records the .SH files
+;# @clist records the C-like files (i.e. .[chyl])
+;#
+;# These files are scanned in turn to see how many symbols known by metaconfig
+;# they have. Those symbols are gathered in a Wanted file. As C symbols are
+;# not true targets for the forthcoming Makefile, a ">" sign is prepended.
+;# Finally, the obsolete symbols are preceded by a "!".
+;#
+;# When obsolete symbols are found, they are dumped in file 'Obsolete'. Two
+;# files are created anyway in the .MT directory. Obsol_h.U and Obsol_sh.U which
+;# respectively list the obsoleted symbols (C and shell ones).
+;# Obsol_h.U records obsolete C symbols
+;# Obsol_sh.U records obsolete shell symbols
+;#
+;# The manifake() routine has to be provided externally.
+;#
+# Build a wanted file from the files held in @SHlist and @clist arrays
+sub build_wanted {
+ # If wanted file is already there, parse it to map obsolete if -o option
+ # was used. Otherwise, build a new one.
+ if (-f 'Wanted') {
+ &map_obsolete if $opt_o; # Build Obsol*.U files
+ &dump_obsolete; # Dump obsolete symbols if any
+ return;
+ }
+ &parse_files;
+}
+
+sub parse_files {
+ print "Building a Wanted file...\n" unless $opt_s;
+ open(WANTED,"| sort | uniq >Wanted") || die "Can't create Wanted.\n";
+ unless (-f $NEWMANI) {
+ &manifake;
+ die "No $NEWMANI--can't build a Wanted file.\n" unless -f $NEWMANI;
+ }
+
+ local($search); # Where to-be-evaled script is held
+ local($_) = ' ' x 50000 if $opt_m; # Pre-extend pattern search space
+ local(%visited); # Records visited files
+ local(%lastfound); # Where last occurence of key was
+
+ # Now we are a little clever, and build a loop to eval so that we don't
+ # have to recompile our patterns on every file. We also use "study" since
+ # we are searching the same string for many different things. Hauls!
+
+ if (@clist) {
+ local($others) = $cext ? " $cext" : '';
+ print " Scanning .[chyl]$others files for symbols...\n"
+ unless $opt_s;
+ $search = ' ' x (40 * (@cmaster + @ocmaster)); # Pre-extend
+ $search = "while (<>) {study;\n"; # Init loop over ARGV
+ foreach $key (keys(%cmaster)) {
+ $search .= "&cmaster('$key') if /\\b$key\\b/;\n";
+ }
+ foreach $key (grep(!/^\$/, keys %Obsolete)) {
+ $search .= "&ofound('$key') if /\\b$key\\b/;\n";
+ }
+ $search .= "}\n"; # terminate loop
+ print $search if $opt_d;
+ @ARGV = @clist;
+ # Swallow each file as a whole, if memory is available
+ undef $/ if $opt_m;
+ eval $search;
+ eval '';
+ $/ = "\n";
+ while (($key,$value) = each(%cmaster)) {
+ print WANTED $cwanted{$key}, "\n", ">$key", "\n" if $value;
+ }
+ }
+
+ # If they don't use magic but use magically guarded symbols without
+ # their corresponding C symbol dependency, warn them, since they might
+ # not know about that portability issue.
+
+ if (@clist && !$opt_M) {
+ local($nused); # list of non-used symbols
+ local($warning) = 0; # true when one warning issued
+ foreach $cmag (keys %mwanted) { # loop over all used magic symbols
+ next unless $cmaster{$cmag};
+ $nused = '';
+ foreach $cdep (split(' ', $mwanted{$cmag})) {
+ $nused .= " $cdep" unless $cmaster{$cdep};
+ }
+ $nused =~ s/^ //;
+ $nused = "one of " . $nused if $nused =~ s/ /, /g;
+ if ($nused ne '') {
+ print " Warning: $cmag is used without $nused.\n";
+ $warning++;
+ }
+ }
+ if ($warning) {
+ local($those) = $warning == 1 ? 'that' : 'those';
+ local($s) = $warning == 1 ? '' : 's';
+ print "Note: $those previous warning$s may be suppressed by -M.\n";
+ }
+ }
+
+ # Cannot remove $cmaster as it is used later on when building Configure
+ undef @clist;
+ undef %cwanted;
+ undef %mwanted;
+ %visited = ();
+ %lastfound = ();
+
+ if (@SHlist) {
+ local($others) = $shext ? " $shext" : '';
+ print " Scanning .SH$others files for symbols...\n" unless $opt_s;
+ $search = ' ' x (40 * (@shmaster + @oshmaster)); # Pre-extend
+ $search = "while (<>) {study;\n";
+ # All the keys already have a leading '$'
+ foreach $key (keys(%shmaster)) {
+ $search .= "&shmaster('$key') if /\\$key\\b/;\n";
+ }
+ foreach $key (grep (/^\$/, keys %Obsolete)) {
+ $search .= "&ofound('$key') if /\\$key\\b/;\n";
+ }
+ $search .= "}\n";
+ print $search if $opt_d;
+ @ARGV = @SHlist;
+ # Swallow each file as a whole, if memory is available
+ undef $/ if $opt_m;
+ eval $search;
+ eval '';
+ $/ = "\n";
+ while (($key,$value) = each(%shmaster)) {
+ if ($value) {
+ $key =~ s/^\$//;
+ print WANTED $key, "\n";
+ }
+ }
+ }
+
+ # Obsolete symbols, if any, are written in the Wanted file preceded by a
+ # '!' character. In case -w is used, we'll thus be able to correctly build
+ # the Obsol_h.U and Obsol_sh.U files.
+
+ &add_obsolete; # Add obsolete symbols in Wanted file
+
+ close WANTED;
+
+ # If obsolete symbols where found, write an Obsolete file which lists where
+ # each of them appear and the new symbol to be used. Also write Obsol_h.U
+ # and Obsol_sh.U in .MT for later perusal.
+
+ &dump_obsolete; # Dump obsolete symbols if any
+
+ die "No desirable symbols found--aborting.\n" unless -s 'Wanted';
+
+ # Clean-up memory by freeing useless data structures
+ undef @SHlist;
+ undef %shmaster;
+}
+
+# This routine records matches of C master keys
+sub cmaster {
+ local($key) = @_;
+ $cmaster{$key}++; # This symbol is wanted
+ return unless $opt_t || $opt_M; # Return if neither -t nor -M
+ if ($opt_t &&
+ $lastfound{$key} ne $ARGV # Never mentionned for this file ?
+ ) {
+ $visited{$ARGV}++ || print $ARGV,":\n";
+ print "\t$key\n";
+ $lastfound{$key} = $ARGV;
+ }
+ if ($opt_M &&
+ defined($mwanted{$key}) # Found a ?M: symbol
+ ) {
+ foreach $csym (split(' ', $mwanted{$key})) {
+ $cmaster{$csym}++; # Activate C symbol dependencies
+ }
+ }
+}
+
+# This routine records matches of obsolete keys (C or shell)
+sub ofound {
+ local($key) = @_;
+ local($_) = $Obsolete{$key}; # Value of new symbol
+ $ofound{"$ARGV $key $_"}++; # Record obsolete match
+ $cmaster{$_}++ unless /^\$/; # A C hit
+ $shmaster{$_}++ if /^\$/; # Or a shell one
+ return unless $opt_t; # Continue if trace option on
+ if ($lastfound{$key} ne $ARGV) { # Never mentionned for this file ?
+ $visited{$ARGV}++ || print $ARGV,":\n";
+ print "\t$key (obsolete, use $_)\n";
+ $lastfound{$key} = $ARGV;
+ }
+}
+
+# This routine records matches of shell master keys
+sub shmaster {
+ local($key) = @_;
+ $shmaster{$key}++; # This symbol is wanted
+ return unless $opt_t; # Continue if trace option on
+ if ($lastfound{$key} ne $ARGV) { # Never mentionned for this file ?
+ $visited{$ARGV}++ || print $ARGV,":\n";
+ print "\t$key\n";
+ $lastfound{$key} = $ARGV;
+ }
+}
+
+# Write obsolete symbols into the Wanted file for later perusal by -w.
+sub add_obsolete {
+ local($file); # File where obsolete symbol was found
+ local($old); # Name of this old symbol
+ local($new); # Value of the new symbol to be used
+ foreach $key (sort keys %ofound) {
+ ($file, $old, $new) = ($key =~ /^(\S+)\s+(\S+)\s+(\S+)/);
+ if ($new =~ s/^\$//) { # We found an obsolete shell symbol
+ print WANTED "!$old\n";
+ } else { # We found an obsolete C symbol
+ print WANTED "!>$old\n";
+ }
+ }
+}
+
+# Map obsolete symbols from Wanted file into %Obsolete and call dump_obsolete
+# to actually build the Obsol_sh.U and Obsol_h.U files. Those will be needed
+# during the Configure building phase to actually do the remaping.
+# The obsolete symbols found are entered in the %ofound array, tagged as from
+# file 'XXX', which is specially recognized by dump_obsolete.
+sub map_obsolete {
+ open(WANTED, 'Wanted') || die "Can't open Wanted file.\n";
+ local($new); # New symbol to be used instead of obsolete one
+ while (<WANTED>) {
+ chop;
+ next unless s/^!//; # Skip non-obsolete symbols
+ if (s/^>//) { # C symbol
+ $new = $Obsolete{$_}; # Fetch new symbol
+ $ofound{"XXX $_ $new"}++; # Record obsolete match (XXX = no file)
+ } else { # Shell symbol
+ $new = $Obsolete{"\$$_"}; # Fetch new symbol
+ $ofound{"XXX \$$_ $new"}++; # Record obsolete match (XXX = no file)
+ }
+ }
+ close WANTED;
+}
+
diff --git a/mcon/pl/xref.pl b/mcon/pl/xref.pl
new file mode 100644
index 0000000..02f4164
--- /dev/null
+++ b/mcon/pl/xref.pl
@@ -0,0 +1,67 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: xref.pl,v $
+;# Revision 3.0.1.2 1995/09/25 09:20:05 ram
+;# patch59: added empty p_layout stub for new ?Y: directives
+;#
+;# Revision 3.0.1.1 1993/10/16 13:56:23 ram
+;# patch12: declared p_public for ?P: lines
+;#
+;# Revision 3.0 1993/08/18 12:10:31 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;# Metaxref-dependent part of the dependency extranction.
+;#
+# Process the ?W: lines
+sub p_wanted {
+ # Syntax is ?W:<shell symbols>:<C symbols>
+ local($active) = $_[0] =~ /^([^:]*):/; # Symbols to activate
+ local($look_symbols) = $_[0] =~ /:(.*)/; # When those are used
+ local(@syms) = split(/ /, $look_symbols); # Keep original spacing info
+ $active =~ s/\s+/\n/g; # One symbol per line
+
+ # Concatenate quoted strings, so saying something like 'two words' will
+ # be introduced as one single symbol "two words".
+ local(@symbols); # Concatenated symbols to look for
+ local($concat) = ''; # Concatenation buffer
+ foreach (@syms) {
+ if (s/^\'//) {
+ $concat = $_;
+ } elsif (s/\'$//) {
+ push(@symbols, $concat . ' ' . $_);
+ $concat = '';
+ } else {
+ push(@symbols, $_) unless $concat;
+ $concat .= ' ' . $_ if $concat;
+ }
+ }
+
+ local($fake); # Fake unique shell symbol to reparent C symbol
+
+ # Now record symbols in master and wanted tables
+ foreach (@symbols) {
+ $cmaster{$_} = undef; # Asks for look-up in C files
+ # Make a fake C symbol and associate that with the wanted symbol
+ # so that later we know were it comes from
+ $fake = &gensym;
+ $cwanted{$_} = "$fake"; # Attached to this symbol
+ push(@Master, "?$unit:$fake=''"); # Fake initialization
+ }
+}
+
+# Ingnore the following:
+sub p_init {}
+sub p_default {}
+sub p_library {}
+sub p_include {}
+sub p_public {}
+sub p_layout {}
+
diff --git a/mcon/pl/xwant.pl b/mcon/pl/xwant.pl
new file mode 100644
index 0000000..31508eb
--- /dev/null
+++ b/mcon/pl/xwant.pl
@@ -0,0 +1,149 @@
+;# $Id$
+;#
+;# Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
+;#
+;# You may redistribute only under the terms of the Artistic Licence,
+;# as specified in the README file that comes with the distribution.
+;# You may reuse parts of this distribution only within the terms of
+;# that same Artistic Licence; a copy of which may be found at the root
+;# of the source tree for dist 4.0.
+;#
+;# $Log: xwant.pl,v $
+;# Revision 3.0 1993/08/18 12:10:32 ram
+;# Baseline for dist 3.0 netwide release.
+;#
+;#
+;# These two arrays record the file names of the files which may (or may not)
+;# contain shell or C symbols known by metaconfig.
+;# @SHlist records the .SH files
+;# @clist records the C-like files (i.e. .[chyl])
+;#
+# Parse files and build cross references
+sub build_xref {
+ print "Building cross-reference files...\n" unless $opt_s;
+ unless (-f $NEWMANI) {
+ &manifake;
+ die "No $NEWMANI--don't know who to scan.\n" unless -f $NEWMANI;
+ }
+
+ open(FUI, "|sort | uniq >I.fui") || die "Can't create I.fui.\n";
+ open(UIF, "|sort | uniq >I.uif") || die "Can't create I.uif.\n";
+
+ local($search); # Where to-be-evaled script is held
+ local($_) = ' ' x 50000 if $opt_m; # Pre-extend pattern search space
+ local(%visited); # Records visited files
+ local(%lastfound); # Where last occurence of key was
+
+ # Map shell symbol names to units by reverse engineering the @Master array
+ # which records all the known shell symbols and the units where they
+ # are defined.
+ foreach $init (@Master) {
+ $init =~ /^\?(.*):(.*)=''/ && ($shwanted{"\$$2"} = $1);
+ }
+
+ # Now we are a little clever, and build a loop to eval so that we don't
+ # have to recompile our patterns on every file. We also use "study" since
+ # we are searching the same string for many different things. Hauls!
+
+ if (@clist) {
+ print " Scanning .[chyl] files for symbols...\n" unless $opt_s;
+ $search = ' ' x (40 * (@cmaster + @ocmaster)); # Pre-extend
+ $search = "while (<>) {study;\n"; # Init loop over ARGV
+ foreach $key (keys(cmaster)) {
+ $search .= "\$cmaster{'$key'} .= \"\$ARGV#\" if /\\b$key\\b/;\n";
+ }
+ foreach $key (grep(!/^\$/, keys %Obsolete)) {
+ $search .= "&ofound('$key') if /\\b$key\\b/;\n";
+ }
+ $search .= "}\n"; # terminate loop
+ print $search if $opt_d;
+ @ARGV = @clist;
+ # Swallow each file as a whole, if memory is available
+ undef $/ if $opt_m;
+ eval $search;
+ eval '';
+ $/ = "\n";
+ while (($key,$value) = each(cmaster)) {
+ next if $value eq '';
+ foreach $file (sort(split(/#/, $value))) {
+ next if $file eq '';
+ # %cwanted may contain value separated by \n -- take last one
+ @sym = split(/\n/, $cwanted{$key});
+ $sym = pop(@sym);
+ $shell = "\$$sym";
+ print FUI
+ pack("A35", $file),
+ pack("A20", "$shwanted{$shell}.U"),
+ $key, "\n";
+ print UIF
+ pack("A20", "$shwanted{$shell}.U"),
+ pack("A25", $key),
+ $file, "\n";
+ }
+ }
+ }
+
+ undef @clist;
+ undef %cwanted;
+ undef %cmaster; # We're not building Configure, we may delete this
+ %visited = ();
+ %lastfound = ();
+
+ if (@SHlist) {
+ print " Scanning .SH files for symbols...\n" unless $opt_s;
+ $search = ' ' x (40 * (@shmaster + @oshmaster)); # Pre-extend
+ $search = "while (<>) {study;\n";
+ # All the keys already have a leading '$'
+ foreach $key (keys(shmaster)) {
+ $search .= "\$shmaster{'$key'} .= \"\$ARGV#\" if /\\$key\\b/;\n";
+ }
+ foreach $key (grep (/^\$/, keys %Obsolete)) {
+ $search .= "&ofound('$key') if /\\$key\\b/;\n";
+ }
+ $search .= "}\n";
+ print $search if $opt_d;
+ @ARGV = @SHlist;
+ # Swallow each file as a whole, if memory is available
+ undef $/ if $opt_m;
+ eval $search;
+ eval '';
+ $/ = "\n";
+ while (($key,$value) = each(shmaster)) {
+ next if $value eq '';
+ foreach $file (sort(split(/#/, $value))) {
+ next if $file eq '';
+ print FUI
+ pack("A35", $file),
+ pack("A20", "$shwanted{$key}.U"),
+ $key, "\n";
+ print UIF
+ pack("A20", "$shwanted{$key}.U"),
+ pack("A25", $key),
+ $file, "\n";
+ }
+ }
+ }
+
+ close FUI;
+ close UIF;
+
+ # If obsolete symbols where found, write an Obsolete file which lists where
+ # each of them appear and the new symbol to be used. Also write Obsol_h.U
+ # and Obsol_sh.U in .MT for later perusal.
+
+ &dump_obsolete; # Dump obsolete symbols if any
+
+ # Clean-up memory by freeing useless data structures
+ undef @SHlist;
+ undef %shmaster;
+}
+
+# This routine records matches of obsolete keys (C or shell)
+sub ofound {
+ local($key) = @_;
+ local($_) = $Obsolete{$key}; # Value of new symbol
+ $ofound{"$ARGV $key $_"}++; # Record obsolete match
+ $cmaster{$_} .= "$ARGV#" unless /^\$/; # A C hit
+ $shmaster{$_} .= "$ARGV#" if /^\$/; # Or a shell one
+}
+