Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (02/04/90)
Submitted-by: overload!dillon (Matt Dillon) Posting-number: Volume 90, Issue 046 Archive-name: unix/uucp-1.03d/part02 #!/bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 2 (of 16)." # Contents: VERSION.DOC lib/.dmailrc lib/Aliases man/Aliases # man/Assigns man/Security man/UPDATES man/UUClean man/UUSer # man/UUdecode man/UUencode man/man s/.edrc src/MUtil/man.c # src/MUtil/trimfile.c src/News060/Anews/mscan.c # src/compress/uuencode.c src/dmail/DMakefile src/dmail/cond.c # src/dmail/globals.c src/getty/passwd.c src/include/config.h # src/lib/config.c src/lib/getpwnam.c src/lib/log.c # src/sendmail/parse.c src/uucico/DMakefile src/uucico/sysdep.h # src/uucico/uucp.h src/uucico/version.doc src/uuser/misc.c # src/uuser/uuser.doc # Wrapped by tadguy@xanth on Sat Feb 3 20:50:58 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'VERSION.DOC' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'VERSION.DOC'\" else echo shar: Extracting \"'VERSION.DOC'\" \(1265 characters\) sed "s/^X//" >'VERSION.DOC' <<'END_OF_FILE' X X X VERSION.DOC X X Matthew Dillon X 891 Regal Rd. X Berkeley, Ca. 94708 X X pacbell.PacBell.COM!sorinc!overload!dillon X X The version and sub version of most executables in the distribution may X be retrieved by running the 'uident' program on the executable(s). X Source directories contain (sporatically) Version.DOC files with X remarks on sub-versions for specific executables. This file contains X overall remarks on the main version id. X X1.03D X X slight changes to postnews (now uses DomainName) X X Domains fixed (effects only people who use UULIB:Domain) X X sendmail more intelligent about checking argv[0] to see X if it is rmail (now works with WShell) X X UUCP:LIB paths changed to UULIB: X X uupoll no longer needs 'brun' X X Problems.DOC file added X X1.02D X stack warning in SlowSetup.DOC added (stack should be at least X 8192). 'Stack 8192' added to sample startup sequence. RNews X warning (RNews takes a huge amount of RAM currently) added. X X1.01D X UUCP:LIB paths fixed to use UULIB: X X1.00D X Initial Release 'D' series by Matthew Dillon, based on X 0.40, 0.50 and 0.60WPL series by William Loftus. X X0.60WPL X0.50WPL X0.40WPL X UUCP release series for the Amiga by William Loftus, sub X version changes not listed in this file. X X X X END_OF_FILE if test 1265 -ne `wc -c <'VERSION.DOC'`; then echo shar: \"'VERSION.DOC'\" unpacked with wrong size! fi # end of 'VERSION.DOC' fi if test -f 'lib/.dmailrc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'lib/.dmailrc'\" else echo shar: Extracting \"'lib/.dmailrc'\" \(1027 characters\) sed "s/^X//" >'lib/.dmailrc' <<'END_OF_FILE' X X# .DMAILRC file X# X# not very user friendly. Some aliases may not apply, quick port X# from UNIX. X Xset header uulib:.signature Xset replyfields "Reply-To: Return-Path:" Xset _headchar : X X# mail you send is archived by dmail Xset archive uumail:mbox Xif !comlinemail Xalias qdt "dt" X# Warning: page mode doesn't work on Amiga's Xalias qdb "db" Xalias noarch "unset archive" Xalias arch "set archive uumail:mbox" Xalias ls "! ls" Xalias normal "setlist -s 7 From 25 Subject 9 To 0 Cc 10 Date" Xalias page set page more -p Xalias nopage unset page Xalias spool "g uumail:dillon uumail:mbox" Xalias mbox "g uumail:mbox" Xalias g "qswitch" Xalias kill "%var sel Sub $var;d all;sel all" Xalias rem "%var nobreak;_spage;set page remember $var;type;_rpage;breakok" Xalias _spage "if page;set _page $page;endif" Xalias _rpage "if _page;set page $_page;unset _page;else;unset page;endif" Xalias tech "qswitch tech; sel News comp.sys.amiga.tech,comp.sys.amiga comp.sys.amiga,comp.sys.amiga.tech; d all; sel all" Xnormal X#page X#cd uucp:mail Xendif X END_OF_FILE if test 1027 -ne `wc -c <'lib/.dmailrc'`; then echo shar: \"'lib/.dmailrc'\" unpacked with wrong size! fi # end of 'lib/.dmailrc' fi if test -f 'lib/Aliases' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'lib/Aliases'\" else echo shar: Extracting \"'lib/Aliases'\" \(1273 characters\) sed "s/^X//" >'lib/Aliases' <<'END_OF_FILE' X X# SENDMAIL ALIASES. X# X# Alias for mailer daemon. REFER TO MAN:Aliases for more information. X# X# # comment character (must be first char on line) X# name: addr, addr, addr, addr, X# addr, addr, addr, addr X# X# addr can be (1) any path X# (2) >file (append to said file) X# (3) <file (include addresses from file, one per line) X# (4) "|command" (pipe through a command) X# (5) \user (if user is an alias this ignores the alias) X# X# note that each addr must be comma delimited, and line continuation X# depends on whether the last addr on the line has a comma after it. X XMAILER-DAEMON: postmaster X X# Following alias is required by the new mail protocol, RFC 822 Xpostmaster: foo X X# Aliases to handle mail to msgs and news X X# Alias for uucp maintenance Xuucplist: root Xuucp: uucplist X X# System Xmanager: foo Xoperator: manager Xstaff: foo Xnobody: X X# X# smart-aleck aliases X# Xdaemon: manager Xlp: manager Xusrlimit: manager X X# X# User X# X# send mail for foo to foo and also archive it. X Xfoo: \foo, >uumail:mbox X Xfriend: fubar!friend X X# William P. Loftus Xwpl: PRC.Unisys.COM!wpl X X# Matt Dillon Xdillon: pacbell.PacBell.COM!sorinc!overload!dillon X X# Fred Fish, 1835 East Belmont Dr, Tempe, Arizona 85284 X# 1-602-491-0048 Xfish: cs.utexas.edu!asuvax!mcdphx!estinc!fnf X END_OF_FILE if test 1273 -ne `wc -c <'lib/Aliases'`; then echo shar: \"'lib/Aliases'\" unpacked with wrong size! fi # end of 'lib/Aliases' fi if test -f 'man/Aliases' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'man/Aliases'\" else echo shar: Extracting \"'man/Aliases'\" \(1960 characters\) sed "s/^X//" >'man/Aliases' <<'END_OF_FILE' X XNAME X UULIB:Aliases X XDESCRIPTION X UULIB:Aliases is a text file containing mail aliases. There X is no need to run newaliases after modifying this file (there X is no newaliases program). This file is scanned by sendmail X for each item of incomming and outgoing email. X X Each line in UULIB:Aliases may be either blank, have a '#' X as the first character to indicate a comment, or begin an X alias. An alias consists of a name, colon, and list of X items. For example: X X comiclovers: charlie, ben, lucy, james X X Multi-line aliases may be specified by a comma at the end of X each line to be continued: X X comiclovers: charlie, ben, X lucy, james X X Note that the last line has no comma. Each item in an alias X may be: X X (1) user a local user name X (2) \user forces a local user name if the name is aliased X (3) alias another alias X (4) path some path X (5) >file append the mail item to some file X (6) <file load a further list of destinations from a X file (one item per line) X (7) |command pipe mail item to a command with optional args X (8) "|command args" X X For example, if I want incomming mail to be posted to my mail box X AND automatically appended to some archive file (and note here X that I must use '\' to prevent an alias loop): X X dillon: \dillon, >uumail:archive X X items may point to other aliases (dillon is already an alias): X X comiclovers: dillon, fred X X mail may be piped to a command, such as an automated vacation-response X program: X X dillon: \dillon, >uumail:archive, |vacation X XNEWSGROUPS X X Newsgroups are difficult to implement with this Aliases X implementation because the sender's address is NOT removed X from the item list. X X we hope to implement news propogation via a separate file and X the rnews program. When this is done, an alias will usually X be required: X X news: |rnews X XFILES X X uulib:Aliases X uucp:c/sendmail X X END_OF_FILE if test 1960 -ne `wc -c <'man/Aliases'`; then echo shar: \"'man/Aliases'\" unpacked with wrong size! fi # end of 'man/Aliases' fi if test -f 'man/Assigns' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'man/Assigns'\" else echo shar: Extracting \"'man/Assigns'\" \(1990 characters\) sed "s/^X//" >'man/Assigns' <<'END_OF_FILE' X X ASSIGNMENTS X X Startup-Sequence Assignments (examples). Note, UUPUB: will in the X future be used for 'public' uucp transfers. X X Assign UUCP: DF0: X Assign UUSPOOL: UUCP:Spool X Assign UULIB: UUCP:Lib X Assign UUMAIL: UUCP:Mail X Assign UUNEWS: UUCP:Mail/News X Assign UUPUB: UUCP:Pub X X Assign Getty: UUCP:Lib X X UULIB:Config entries: X X NodeName The name by which you want to call your X machine. Suggested 7 chars max. X X UserName Your 'user' name. e.g. dillon. This is X where Mail, DMail, and From use as a X default for your user name. X X RealName Your full name. e.g. Matthew Dillon. Used X by sendmail (which is run from Mail or X DMail) X X NewsFeed Which remote machine should outgoing X news be sent to? X X Organization Your organization, if any (for News) X X Filter Foreground filter program (to display a X file). Output expected to go through X stdout. Used by MAN if RFilter does not X exist. X X RFilter Background filter program (that can be X RUNd to display a file) X X MailEditor The editor DMail uses. X X NewsEditor The editor postnews uses X X DomainName The domain of your machine, usually .UUCP X This is automatically tacked on to the X mail headers when you mail out or mail X is routed through your machine. X X TimeZone PST,PDT, etc... Currently only US timezones X are implemented. Used to calculate GMT X time from local time for use in mail headers. X X DefaultNode Normally set to an immediately adjacent X USENET node. IF YOU CAN CONNECT TO MORE X THAN ONE OTHER USENET NODE REFER TO X MAN:DOMAINS FOR INFORMATION ON SELECTING X WHICH NODE AN ADDRESS GETS ROUTED THROUGH. X X Example: 'sorinc.UUCP' if I talk X directly to sorinc. X X You may also specify explicit paths X as long as the very first machine is X directly adjacent to you (you can call X directly). X END_OF_FILE if test 1990 -ne `wc -c <'man/Assigns'`; then echo shar: \"'man/Assigns'\" unpacked with wrong size! fi # end of 'man/Assigns' fi if test -f 'man/Security' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'man/Security'\" else echo shar: Extracting \"'man/Security'\" \(1178 characters\) sed "s/^X//" >'man/Security' <<'END_OF_FILE' X X XNAME X UULIB:Security X XSYNOPSIS X - X XDESCRIPTION X The UULIB:Security file governs readability and writability X of directories relative to remote uucp requests. The UUSPOOL: X directory is always readable and writable. X X This prevents other nodes from examining or overwriting X arbitrary files in your system. X X The UUCICO program, which does the actual work downloading X and uploading files, will check remote-requested paths X against this file by comparing inodes (DOS Locks) and not X by name. The reason for this is simply that, on the Amiga, X several different paths may refer to the same directory. X X ---- Example Security file (this line not included) --- X X# This file is used by UUCICO to determine the validity of requests. X# X# The directories listed here are *allowed* directories for uucp X# transfers. The permissions field lists permissions X# r -readable X# w -writable X Xtmp: rw Xuucp:c r Xuucp:man r XUUPUB: rw X X# If you have a UUPUBW: assign that is *different* from UUPUB: then X# you might want to make UUPUB: readable only and UUPUBW: read-write. X X ---- End of Example (this line not included) --- X XREFERENCES: X UUCP, UUCICO X END_OF_FILE if test 1178 -ne `wc -c <'man/Security'`; then echo shar: \"'man/Security'\" unpacked with wrong size! fi # end of 'man/Security' fi if test -f 'man/UPDATES' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'man/UPDATES'\" else echo shar: Extracting \"'man/UPDATES'\" \(1441 characters\) sed "s/^X//" >'man/UPDATES' <<'END_OF_FILE' X X This file is a listing of all the changes & fixes to UUCP & UseNet that are X *NOT* covered by the README file. For more details on changes please read X the source code(s). X X XDate Programmer Details X-------- ------------ -------------------------------------------------- X09/22/88 Sneakers Added a tail option to UULOG "-t". X X09/24/88 Sneakers Tail option of UULOG was broken. It is now fixed. X X09/24/88 Sneakers Rewrote 'MAIL' command. X Removed message header from user editable message. X Now gives a warning on ZERO byte messages & exits. X X09/30/88 Sneakers Rewrote 'Pnews-x' commands. X Fixed the broken CopyMessage() routine. X Added Include() routine. File to include [None] X Added CheckUser() routine. [Send|List|Edit|Abort] X X10/04/88 Sneakers Mail command was brain dead on multi addresses. X Fixed it, and it works great :-) X X10/07/88 Sneakers Tail option of UULOG was 'still' broken when the X LOGFILE was < 10 lines. UULOG is now fixed. And X you have Joe Isuzu's word on it :-) X X10/02/88 Mike Schultz Added support for nonbatched news articles to the X Rnews command. END_OF_FILE if test 1441 -ne `wc -c <'man/UPDATES'`; then echo shar: \"'man/UPDATES'\" unpacked with wrong size! fi # end of 'man/UPDATES' fi if test -f 'man/UUClean' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'man/UUClean'\" else echo shar: Extracting \"'man/UUClean'\" \(1592 characters\) sed "s/^X//" >'man/UUClean' <<'END_OF_FILE' X XNAME X uuclean - uucp spool directory clean-up X XSYNTAX X uuclean [ option ] ... X XDESCRIPTION X The uuclean command scans the spool directory for files with X the specified prefix and deletes all those which are older X than the specified number of hours. X XOPTIONS X -ppre Scan for files with pre as the file prefix. Up to X 10 -p arguments may be specified. A -p without any X pre following will cause all files older than the X specified time to be deleted. X X -ntime Delete all files whose age is more than time X (default is 72 hours) and that have the specified X pre as their file prefix. X X -m Send mail to the owner of the file when it is X deleted. X X -ssystem X Delete files in all directories that are subdirec- X tories of the per system spool directory that exists X for system. If ALL is specified, then all system X directories are processed. X X -ddirectory X Delete files that reside in the named directory. The X -s option over rides the -d option. X X This program will typically be started by cron. In earlier X versions, a deleted work file (C.file) would result in X mail to the owner of the work file, regardless of the -m X option. Now, notification of deleted work files is sent to X the user ID "uucp". If the -m option is used, mail is also X sent to the owner. X XFILES X UUCP:lib/uucp directory with commands used by X uuclean internally X END_OF_FILE if test 1592 -ne `wc -c <'man/UUClean'`; then echo shar: \"'man/UUClean'\" unpacked with wrong size! fi # end of 'man/UUClean' fi if test -f 'man/UUSer' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'man/UUSer'\" else echo shar: Extracting \"'man/UUSer'\" \(1492 characters\) sed "s/^X//" >'man/UUSer' <<'END_OF_FILE' X X XNAME X UUser (AmigaDOS Handler) X XSYNOPSIS X Mount uuser: X X Open Format: uuser:devicename/unit/options X Example: uuser:serial.device/0/R1000 X XDESCRIPTION X Options: Rn Set read timeout when no data available (millisecs) X C0 Ignore carrier detect X X The UUSER: handler allows arbitrary programs to talk to any X serial.device and unit uses Read() and Write() calls. X X Consequently, stdio may be used as well. X X UUSER: IS NORMALLY SETUP BY GETTY WHEN IT RUNS A PROGRAM. See X GETTY.MAN for more info. Essentially, if a '*' appears before X the command-to-run in the passwd file Getty will setup UUSER: X on the stdin and stdout of the command it runs after a valid X login sequence. X XDIFFERENCES FROM NORMAL HANDLERS: X X To avoid a gets() or getc() or read() or Read() (or whatever X call you use to read data from stdin), UUSER: times out after X 1 second if no characters have been received. X X If you are using stdio, you get an EOF when this occurs. You X can clear the EOF state by calling clrerr(stdin). X X UUSER: will return immediately when at least one character is X ready. Thus, if you do: X X n = read(0, Buf, 256) X X n will return: X X -1 = Lost Carrier X 0 = Timeout (loop retry?) X 1-256 = Anywhere from 1 to 256 bytes have been recevied X X UUSER: checks carrier and if it detects carrier is lost, will X return an error for both read and write calls. X X If using stdio for writing, be sure to call fflush(stdout) when X you want to flush stdio's buffer to the serial port. X END_OF_FILE if test 1492 -ne `wc -c <'man/UUSer'`; then echo shar: \"'man/UUSer'\" unpacked with wrong size! fi # end of 'man/UUSer' fi if test -f 'man/UUdecode' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'man/UUdecode'\" else echo shar: Extracting \"'man/UUdecode'\" \(1736 characters\) sed "s/^X//" >'man/UUdecode' <<'END_OF_FILE' X XNAME X uuencode, uudecode - encode/decode a binary file for X transmission via mail X XSYNTAX X uuencode <infilename >outfilename filename X uudecode filename.uu X XDESCRIPTION X The uuencode and uudecode commands are used to send a binary X file via uucp (or other) mail. X X The uuencode command takes the named source file (default X standard input) and produces an encoded version on the stan- X dard output. The encoding uses only printing ASCII charac- X ters, and includes the mode of the file and the remotedest X for recreation on the remote system. X X The uudecode command reads an encoded file, strips off any X leading and trailing lines added by mailers, and recreates X the original file with the specified mode and name. X X The intent is that all mail to the user ``decode'' should be X filtered through the uudecode program. This way the file is X created automatically without human intervention. This is X possible on the uucp network by either using sendmail or by X making rmail be a link to Mail instead of mail. In each X case, an alias must be created in a master file to get the X automatic invocation of uudecode. X X If these facilities are not available, the file can be sent X to a user on the remote machine who can uudecode it manu- X ally. X X The encode file has an ordinary text form and can be edited X by any text editor to change the mode or remote name. X XRESTRICTIONS X The file is expanded by 35% (3 bytes become 4 plus control X information) causing it to take longer to transmit. X X The user on the remote system who is invoking uudecode X (often uucp) must have write permission on the specified X file. X END_OF_FILE if test 1736 -ne `wc -c <'man/UUdecode'`; then echo shar: \"'man/UUdecode'\" unpacked with wrong size! fi # end of 'man/UUdecode' fi if test -f 'man/UUencode' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'man/UUencode'\" else echo shar: Extracting \"'man/UUencode'\" \(1736 characters\) sed "s/^X//" >'man/UUencode' <<'END_OF_FILE' X XNAME X uuencode, uudecode - encode/decode a binary file for X transmission via mail X XSYNTAX X uuencode <infilename >outfilename filename X uudecode filename.uu X XDESCRIPTION X The uuencode and uudecode commands are used to send a binary X file via uucp (or other) mail. X X The uuencode command takes the named source file (default X standard input) and produces an encoded version on the stan- X dard output. The encoding uses only printing ASCII charac- X ters, and includes the mode of the file and the remotedest X for recreation on the remote system. X X The uudecode command reads an encoded file, strips off any X leading and trailing lines added by mailers, and recreates X the original file with the specified mode and name. X X The intent is that all mail to the user ``decode'' should be X filtered through the uudecode program. This way the file is X created automatically without human intervention. This is X possible on the uucp network by either using sendmail or by X making rmail be a link to Mail instead of mail. In each X case, an alias must be created in a master file to get the X automatic invocation of uudecode. X X If these facilities are not available, the file can be sent X to a user on the remote machine who can uudecode it manu- X ally. X X The encode file has an ordinary text form and can be edited X by any text editor to change the mode or remote name. X XRESTRICTIONS X The file is expanded by 35% (3 bytes become 4 plus control X information) causing it to take longer to transmit. X X The user on the remote system who is invoking uudecode X (often uucp) must have write permission on the specified X file. X END_OF_FILE if test 1736 -ne `wc -c <'man/UUencode'`; then echo shar: \"'man/UUencode'\" unpacked with wrong size! fi # end of 'man/UUencode' fi if test -f 'man/man' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'man/man'\" else echo shar: Extracting \"'man/man'\" \(1168 characters\) sed "s/^X//" >'man/man' <<'END_OF_FILE' X XNAME X X man - look up documentation on a command X XSYNOPSIS X X man command_1 command_2 ... command_N X XDESCRIPTION X X "Man" looks in the volume or directory "MAN:" for information X about the given commands, and then displays it on the screen. X X Here is exactly how "Man" works. If you type "Man myCommand", X "Man" looks in the directory MAN: for a file called "myCommand". X If it finds the file, it displays it on the screen using the X file viewing program "more". ("More" is on the Commodore-Amiga X V1.2 Extras disk.) If no such file is found, you are told. X X So... for any program that you have, put its documentation file X in MAN:. Name the documentation file the same as the program X itself. Instead of searching for that documentation next time, X all you have to do is type "Man command-name". X X XFILES X X UULIB:Config , RFilter or Filter entry sets command Man uses X to display a manual page. X X MAN: Manual directory. X X More File viewing program, must be in your search path and X named "MORE" but does not have to be CBM's more program. X X Assign For "Assign MAN: some-directory-of-your-choice". X END_OF_FILE if test 1168 -ne `wc -c <'man/man'`; then echo shar: \"'man/man'\" unpacked with wrong size! fi # end of 'man/man' fi if test -f 's/.edrc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'s/.edrc'\" else echo shar: Extracting \"'s/.edrc'\" \(1379 characters\) sed "s/^X//" >'s/.edrc' <<'END_OF_FILE' X Xignorecase on Xsavetabs on Xmap c-tab (ping 0 while c=32 right repeat tr (( ) left) pong 0 down) Xmap cs-tab `del del del del down' Xmap a-tab `goto block while cb `c-tab down'' Xmap as-tab `goto block while cb `cs-tab down'' Xmap s-f9 `saveas ram:\$filename' Xmap a-/ (escimm (findstr ) escimm (repstr ) repeat -1 nextr) Xmap c-m menuon Xmap c-right (repeat 8 tab) Xmap c-left (repeat 8 backtab) Xmap s-return return Xmap (a- ) (( )) X Xmap c-f1 (scanf %s bottom insfile \$scanf) Xmap c-f2 (scanf %s newfile \$scanf) Xmap c-f3 (scanf %s newwindow newfile \$scanf) Xmap s-f7 (setfont topaz.font 7) Xmap c-[ (ping 1 iconify ctags) X X# DIFF / old version support. The following macros automatically X# diff the file being saved with the old version and save the diff X# X# s-f3 will retrieve the 'old' version. Aweesome. X Xmap s-f3 (set old (\$filename) execute (undiff >T:dme_temp \$filename tmp:diff/\$(fname).D) newwindow newfile T:dme_temp chfilename \$old unset old) X Xmap cs-d (execute (copy \$filename T:dme_temp) saveold execute (diff >tmp:diff/\$(fname).D T:dme_temp \$filename)) X#map f8 (cs-d escimm (newfile )) X#map f9 (cs-d ) X#map f10 (cs-d quit) Xmap s-f8 (saveold escimm (newfile )) Xmap s-f9 (saveold) Xmap s-f10 (saveold quit) X Xaddpath autodocs: Xaddpath autoincs: Xaddpath src:suplib/doc Xaddpath src:dres/doc Xaddpath src:commonlib/doc X END_OF_FILE if test 1379 -ne `wc -c <'s/.edrc'`; then echo shar: \"'s/.edrc'\" unpacked with wrong size! fi # end of 's/.edrc' fi if test -f 'src/MUtil/man.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/MUtil/man.c'\" else echo shar: Extracting \"'src/MUtil/man.c'\" \(1032 characters\) sed "s/^X//" >'src/MUtil/man.c' <<'END_OF_FILE' X X/* X * MAN.C X * X * MAN <topic> X * X * searches for MAN:topic or MAN:topic.Doc X */ X X#include <stdio.h> X#include <stdlib.h> X#include <config.h> X#include "/version.h" X XIDENT(".00"); X Xvoid Xmain(ac, av) Xchar *av[]; X{ X short i; X static char Buf[256]; X X for (i = 1; i < ac; ++i) { X char *topic = av[i]; X X if (Man(topic) == 0) { X sprintf(Buf, "MAN:%s", topic); X if (Man(Buf) == 0) { X sprintf(Buf, "MAN:%s.Doc", topic); X if (Man(Buf) == 0) X printf("Unable to open MAN:%s or MAN:%s.Doc\n", topic, topic); X } X } X } X} X XMan(file) Xchar *file; X{ X FILE *fi = fopen(file, "r"); X char *filter = FindConfig(RFILTER); X short rb = 1; X static char Cmd[256]; X X if (fi == NULL) X return(0); X if (filter == NULL) { X if ((filter = FindConfig(FILTER)) == NULL) { X printf("UULIB:Config, no 'Filter' entry\n"); X return(0); X } X rb = 0; X } X fclose(fi); X if (rb) X sprintf(Cmd, "Run >nil: <nil: %s %s", filter, file); X else X sprintf(Cmd, "%s %s", filter, file); X Execute(Cmd, NULL, NULL); X} X END_OF_FILE if test 1032 -ne `wc -c <'src/MUtil/man.c'`; then echo shar: \"'src/MUtil/man.c'\" unpacked with wrong size! fi # end of 'src/MUtil/man.c' fi if test -f 'src/MUtil/trimfile.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/MUtil/trimfile.c'\" else echo shar: Extracting \"'src/MUtil/trimfile.c'\" \(1801 characters\) sed "s/^X//" >'src/MUtil/trimfile.c' <<'END_OF_FILE' X X/* X * TRIMFILE file1 file2 .. filen -lines X * X * (C) Copyright 1989-1990 by Matthew Dillon, All Rights Reserved. X * X * Trims the specified files to the specified number of lines. Each X * file is read and the last N lines written back. X * X * Normally used to trim log files based on a crontab entry. If no X * -lines argument is given the file is trimmed to 100 lines. X * X * Each line may be up to 255 characters in length. X */ X X#include <stdio.h> X#include <stdlib.h> X X#define LINSIZE 256 X Xchar **LineBuf; Xlong Lines = 100; X Xvoid MemErr(); Xvoid TrimFile(); X Xvoid Xmain(ac, av) Xchar *av[]; X{ X short i; X for (i = 1; i < ac; ++i) { X if (av[i][0] == '-') X Lines = atol(av[i] + 1); X } X if (Lines < 0) { X fprintf(stderr, "Illegal line specification %d\n", Lines); X exit(1); X } X X /* X * Allocating one more than necessary handles the Lines == 0 case X * as well as supplying a scratch buffer for the last fgets that X * fails. X */ X X LineBuf = malloc(sizeof(char *) * (Lines + 1)); X if (LineBuf == NULL) X MemErr(); X for (i = 0; i <= Lines; ++i) { X LineBuf[i] = malloc(LINSIZE); X if (LineBuf[i] == NULL) X MemErr(); X } X for (i = 1; i < ac; ++i) { X char *ptr = av[i]; X X if (*ptr == '-') X continue; X TrimFile(ptr); X } X} X Xvoid XMemErr() X{ X fprintf(stderr, "Not enough memory!\n"); X exit(1); X} X Xvoid XTrimFile(name) Xchar *name; X{ X FILE *fi = fopen(name, "r"); X long rep; X long i; X X if (fi == NULL) X return; X X i = 0; X rep = 0; X while (fgets(LineBuf[i], LINSIZE, fi)) { X if (++i > Lines) { X i = 0; X rep = 1; X } X } X fclose(fi); X X if (rep == 0) X return; X X if (fi = fopen(name, "w")) { X long j; X for (j = Lines; j; --j) { X if (++i > Lines) X i = 0; X fputs(LineBuf[i], fi); X } X fclose(fi); X } X} X END_OF_FILE if test 1801 -ne `wc -c <'src/MUtil/trimfile.c'`; then echo shar: \"'src/MUtil/trimfile.c'\" unpacked with wrong size! fi # end of 'src/MUtil/trimfile.c' fi if test -f 'src/News060/Anews/mscan.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/News060/Anews/mscan.c'\" else echo shar: Extracting \"'src/News060/Anews/mscan.c'\" \(1607 characters\) sed "s/^X//" >'src/News060/Anews/mscan.c' <<'END_OF_FILE' X X/* X * mscan - Scan directories and return a sorted list of file names, X * one at a time. X * X * This code originally taken from sysdep.c: X * X * (C) Copyright 1987 by John Gilmore X * Copying and use of this program are controlled by the terms of the Free X * Software Foundation's GNU Emacs General Public License. X * X * Amiga Changes Copyright 1988 by William Loftus. All rights reserved. X * X * Rewrite for use with manx (or lattice), and Anews. X */ X X#include <stdio.h> X#include <stdlib.h> X X#define MAXFILES 512 X Xstatic char names[MAXFILES*10]; Xstatic char *pointers[MAXFILES]; X Xint file_pointer; /* External so that it can be read/written */ X Xstatic valid = 0; X Xchar * Xread_directory(dir) Xchar *dir; X{ X int count, mycmp(); X char *scdir(); X char path[128]; X X file_pointer = 0; X if (dir) { X getcwd(path,127); X chdir(dir); X } X X count = getfnl("#?", names, sizeof(names), 0); X X if (dir) chdir(path); X X if (count > 0) { X if (strbpl(pointers, MAXFILES, names) != count) { X printf("Too many files\n"); X return (char *)NULL; X } X } else { X return (char *)NULL; X } X X qsort((char *)pointers, count, sizeof(char *), mycmp); X X valid = 1; /* We have some files, and more important, some space has X been malloc'd */ X X return (char *)1; X} X Xchar * Xget_next_file() X{ X char *p; X X if ( (p=pointers[file_pointer++]) == NULL ) X file_pointer=0; X return p; X} X Xfree_directory() X{ X int i; X if (valid) { X for(i=0;pointers[i] != NULL;i++) X free(pointers[i]); X X valid = 0; X } X return(0); X} X Xmycmp(a,b) Xchar **a,**b; X{ X return (atol(*a)-atol(*b)); X} X X END_OF_FILE if test 1607 -ne `wc -c <'src/News060/Anews/mscan.c'`; then echo shar: \"'src/News060/Anews/mscan.c'\" unpacked with wrong size! fi # end of 'src/News060/Anews/mscan.c' fi if test -f 'src/compress/uuencode.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/compress/uuencode.c'\" else echo shar: Extracting \"'src/compress/uuencode.c'\" \(2000 characters\) sed "s/^X//" >'src/compress/uuencode.c' <<'END_OF_FILE' X X/* X * uuencode [input] output X * X * Encode a file so it can be mailed to a remote system. X */ X X#include <stdio.h> X#include "/version.h" X XIDENT(".00"); X X#ifdef UNIX X# include <sys/types.h> X# include <sys/stat.h> X#endif X X#ifdef VMS X# include <types.h> X# include <stat.h> X#endif X X/* ENC is the basic 1 character encoding function to make a char printing */ X#define ENC(c) (((c) & 077) + ' ') X Xvoid outdec(); Xvoid encode(); X Xvoid Xmain(argc, argv) Xchar **argv; X{ X FILE *in; X#ifdef UNIX | VMS X struct stat sbuf; X#endif X int mode; X X /* optional 1st argument */ X if (argc > 2) { X if ((in = fopen(argv[1], "r")) == NULL) { X perror(argv[1]); X exit(1); X } X argv++; argc--; X } else X in = stdin; X X if (argc != 2) { X printf("Usage: uuencode [infile] remotefile\n"); X exit(2); X } X X /* figure out the input file mode */ X#ifdef UNIX | VMS X fstat(fileno(in), &sbuf); X mode = sbuf.st_mode & 0777; X#endif X X#ifdef AMIGA X mode = 0777; X#endif X printf("begin %o %s\n", mode, argv[1]); X X encode(in, stdout); X X printf("end\n"); X exit(0); X} X X/* X * copy from in to out, encoding as you go along. X */ X Xvoid Xencode(in, out) XFILE *in; XFILE *out; X{ X char buf[80]; X int i, n; X X for (;;) { X /* 1 (up to) 45 character line */ X n = fr(in, buf, 45); X putc(ENC(n), out); X X for (i=0; i<n; i += 3) X outdec(&buf[i], out); X X putc('X', out); X putc('\n', out); X X if (n <= 0) X break; X } X} X X/* X * output one group of 3 bytes, pointed at by p, on file f. X */ Xvoid Xoutdec(p, f) Xchar *p; XFILE *f; X{ X int c1, c2, c3, c4; X X c1 = *p >> 2; X c2 = (*p << 4) & 060 | (p[1] >> 4) & 017; X c3 = (p[1] << 2) & 074 | (p[2] >> 6) & 03; X c4 = p[2] & 077; X putc(ENC(c1), f); X putc(ENC(c2), f); X putc(ENC(c3), f); X putc(ENC(c4), f); X} X X/* fr: like read but stdio */ Xint Xfr(fd, buf, cnt) XFILE *fd; Xchar *buf; Xint cnt; X{ X int c, i; X X for (i=0; i<cnt; i++) { X c = getc(fd); X if (c == EOF) X return(i); X buf[i] = c; X } X return (cnt); X} X X#ifdef AMIGA Xperror(err) Xchar *err; X{ X printf("Can not open file \"%s\"\n", err); X return(NULL); X} X#endif END_OF_FILE if test 2000 -ne `wc -c <'src/compress/uuencode.c'`; then echo shar: \"'src/compress/uuencode.c'\" unpacked with wrong size! fi # end of 'src/compress/uuencode.c' fi if test -f 'src/dmail/DMakefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/dmail/DMakefile'\" else echo shar: Extracting \"'src/dmail/DMakefile'\" \(1616 characters\) sed "s/^X//" >'src/dmail/DMakefile' <<'END_OF_FILE' X X#VERSION 1.11 X# X# Written by Matthew Dillon X# X# (C)Copyright 1986-89 by Matthew Dillon X# X# This code is completely original. I declare this code to be public X# domain. You may redistribute this code as long as any those X# redistributions contain this and all other files in their entirety. X# X# Ports: Anybody may port this code to any machine or OS they wish, of X# course. If you do make a port, I would be grateful if you mailed X# a letter with: (A) OS you ported it too, and (B) version ported, X# so I may inform people who have mailed me wondering about ports X# who to contact. X# X# Send bug reports and other gripes to: X# X# dillon@ucbvax.berkeley.edu ARPA NET X# ..!ihnp4!ucbvax!dillon USENET X# X# INSTRUCTIONS FOR COMPILING: X# X# (1) Set DESTDIR & HELP_DIR to some global directory accessable to X# everybody (or whatever). Also set HELP_CHMOD and PROG_CHMOD X# to the right thing if you don't like the defaults. X# X# (2) Do ONE of the following: X# make -defaults to internal help file X# make external -external help file (executable is smaller) X# X# (3) make install to install the file(s) X# X XOD= ltmp:dmail/ XEXE= uucp:c/dmail XSYMS= uucp:src/lib/all.m XCFLAGS= -iuucp:src/include/ X XLIBS= uucp:src/lib/uucp.lib lib:lc.lib lib:amiga.lib X XSRCS= globals.c main.c do_lists.c sub.c execom.c commands.c \ X range.c load_mail.c sendmail.c set.c help.c cond.c compat.c X XOBJS= $(SRCS:"*.c":"$(OD)*.o") X X$(EXE): $(OBJS) X cd $(OD) X list #?.o TO T:DMAILOBJS LFORMAT %s X blink lib:c.o WITH T:DMAILOBJS LIB $(LIBS) TO %(left) X cd X X$(OBJS) : $(SRCS) X lc $(CFLAGS) -H$(SYMS) -o%(left) %(right) X END_OF_FILE if test 1616 -ne `wc -c <'src/dmail/DMakefile'`; then echo shar: \"'src/dmail/DMakefile'\" unpacked with wrong size! fi # end of 'src/dmail/DMakefile' fi if test -f 'src/dmail/cond.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/dmail/cond.c'\" else echo shar: Extracting \"'src/dmail/cond.c'\" \(1358 characters\) sed "s/^X//" >'src/dmail/cond.c' <<'END_OF_FILE' X X/* X * COND.C X * X * (C) Copyright 1985-1990 by Matthew Dillon, All Rights Reserved. X * X * Conditional routines. X * X * if [!]variable X * else X * endif X * X */ X X#include <stdio.h> X#include "dmail.h" X X#define MAXIF 16 X Xstatic int Disable_if, Disable_case; X Xstatic int If_level; Xstatic char If_state[MAXIF]; X Xdo_if() X{ X char *str = av[1]; X int result = 0; X X if (ac != 2) { X puts ("if: bad args"); X return(-1); X } X if (Disable_if) { X ++Disable_if; X return (1); X } X if (If_level == MAXIF) { X puts ("Too many level's of IF's"); X return (-1); X } X if (*str == '!') { X ++str; X result = 1; X } X if (get_var(LEVEL_SET, str)) X result = 1 - result; X if (!result) X ++Disable_if; X If_state[If_level++] = result; X XDisable = Disable_if + Disable_case; X return (1); X} X Xdo_else() X{ X if (Disable_if > 1) X return (1); X if (If_level < 1) { X puts ("else without if"); X return (-1); X } X Disable_if = !(If_state[If_level - 1] = 1 - If_state[If_level - 1]); X XDisable = Disable_if + Disable_case; X return (1); X} X Xdo_endif() X{ X if (Disable_if == 1) { X --If_level; X Disable_if = 0; X } else X if (Disable_if > 1) { X --Disable_if; X } else { X if (If_level == 0) { X puts ("endif without if"); X return (-1); X } X --If_level; X Disable_if = 0; X } X XDisable = Disable_if + Disable_case; X return (1); X} X X END_OF_FILE if test 1358 -ne `wc -c <'src/dmail/cond.c'`; then echo shar: \"'src/dmail/cond.c'\" unpacked with wrong size! fi # end of 'src/dmail/cond.c' fi if test -f 'src/dmail/globals.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/dmail/globals.c'\" else echo shar: Extracting \"'src/dmail/globals.c'\" \(1850 characters\) sed "s/^X//" >'src/dmail/globals.c' <<'END_OF_FILE' X X/* X * GLOBALS.C X * X * (C) Copyright 1985-1990 by Matthew Dillon, All Rights Reserved. X * X * Declarations for most global variables. X * X */ X X#include <stdio.h> X#include "dmail.h" X XFILE *m_fi; /* open file ptr to spool file */ Xchar *mail_file; /* name of from (spool) file */ Xchar *output_file; /* name of out file (i.e. mbox) */ Xchar *user_name; /* user name from password entry*/ Xchar *home_dir; /* home directory of user */ Xchar *visual; /* visual editor path */ Xchar Buf[MAXFIELDSIZE]; /* Scratch Buffer */ Xchar Puf[MAXFIELDSIZE]; /* Another Scratch Buffer */ Xjmp_buf env[LONGSTACK]; /* Holds longjump (break) stack */ Xint Did_cd; /* Set if user does a CD */ Xint XDebug; /* Debug mode */ Xint Longstack, Breakstack; /* longjump/break level stack */ Xint Entries, Current; /* #Entries and Current entry */ Xint XDisable; /* Disable non-cond comm exec. */ Xint ac; /* internal argc, from/to stat */ Xint No_load_mail; /* disable loading of mail */ Xint lmessage_overide; /* Overide initial 'X items ... */ Xint Silence; /* -s command option status */ Xstruct ENTRY *Entry; /* Base of Entry list */ Xchar *av[128]; /* internal argv[] */ Xchar *Nulav[3] = { "", "", NULL }; X Xint width[MAXLIST] = { 18, 38, 10 }; /* Default setlist params */ Xint header[MAXLIST] = { 0, 2, 1 }; Xint Listsize = 3; X X/* The following are globals variables definable from the 'set' command */ X Xchar *S_sendmail; /* sendmail program path */ Xint S_page; /* Paging status */ Xint S_novibreak; /* vi-break status */ Xint S_verbose; /* sendmail verbose status */ Xint S_ask; /* Ask what to do after mail ed */ Xint S_archive; /* Archive sent mail */ X END_OF_FILE if test 1850 -ne `wc -c <'src/dmail/globals.c'`; then echo shar: \"'src/dmail/globals.c'\" unpacked with wrong size! fi # end of 'src/dmail/globals.c' fi if test -f 'src/getty/passwd.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/getty/passwd.c'\" else echo shar: Extracting \"'src/getty/passwd.c'\" \(1689 characters\) sed "s/^X//" >'src/getty/passwd.c' <<'END_OF_FILE' X X/* X * PASSWD.C X * X * (C) Copyright 1989-1990 by Matthew Dillon, All Rights Reserved. X * X */ X X#include <exec/types.h> X#include <libraries/dosextens.h> X#include <stdio.h> X#include <stdlib.h> X#include <pwd.h> X#include <proto/all.h> X X#include "log.h" X X#define BTOCP(bp,type) ((type)((long)bp << 2)) X Xextern long NullFH; Xextern char LoginBuf[]; Xextern char PasswdBuf[]; Xextern char *DeviceName; Xextern long DeviceUnit; X Xstatic struct passwd *Pas; X XCheckLoginAndPassword() X{ X Pas = getpwnam(LoginBuf); X X if (Pas == NULL) X return(0); X if (strcmp(Pas->pw_passwd, "*") == 0) X return(1); X if (strcmp(PasswdBuf, Pas->pw_passwd) == 0) X return(1); X return(0); X} X Xvoid XRunPasswdEntry() X{ X static char buf[256]; X static char redir[128]; X char *arg0 = Pas->pw_shell_arg0; X struct Process *proc = (struct Process *)FindTask(NULL); X APTR oldConsoleTask = proc->pr_ConsoleTask; X BPTR oldDir; X BPTR DirLock; X X strcpy(redir, " "); X X if (*arg0 == '*') { X ++arg0; X sprintf(redir, " >UUSER:%s/%d/R1000G1 <UUSER:%s/%d/R1000G1 ", DeviceName, DeviceUnit, DeviceName, DeviceUnit); X } else { X if (LogToStdout == 0) X strcpy(redir, " >null: <null: "); X } X if (LogToStdout == 0) X proc->pr_ConsoleTask = (APTR)BTOCP(NullFH, struct FileHandle *)->fh_Port; X X sprintf(buf, "%s%s%s -Getty -DEVICE %s -UNIT %d", arg0, redir, Pas->pw_shell_argn, DeviceName, DeviceUnit); X X DirLock = (BPTR)Lock(Pas->pw_dir, SHARED_LOCK); X if (DirLock) X oldDir = (BPTR)CurrentDir(DirLock); X X ulog(1, "Execute %s\n", buf); X X Execute(buf, NullFH, NullFH); X X proc->pr_ConsoleTask = oldConsoleTask; X X if (DirLock) X UnLock(CurrentDir(oldDir)); X X ulog(1, "ran\n"); X} X END_OF_FILE if test 1689 -ne `wc -c <'src/getty/passwd.c'`; then echo shar: \"'src/getty/passwd.c'\" unpacked with wrong size! fi # end of 'src/getty/passwd.c' fi if test -f 'src/include/config.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/include/config.h'\" else echo shar: Extracting \"'src/include/config.h'\" \(1625 characters\) sed "s/^X//" >'src/include/config.h' <<'END_OF_FILE' X X/* X * CONFIG.H X * X * OBSOLETE, DO NOT USE X */ X Xchar *FindConfig(char *); Xchar *GetConfig(char *, char *); X X#define USERNAME "UserName" X#define NODENAME "NodeName" X#define REALNAME "RealName" X#define DEBUGNAME "Debug" X#define NEWSFEED "NewsFeed" X#define ORGANIZATION "Organization" X#define FILTER "Filter" /* can be run in the foregnd */ X#define RFILTER "RFilter" /* can be run in the background */ X#define EDITOR "MailEditor" X#define HOME "Home" X X/* X * X * This idea (and base) for this code was written by Fred Cassirer 10/9/88 X * as a Config file for News programs, to whom I say Thanx! X * X * It has since been expanded to include all the directory paths and some X * command/filenames. This is to eliminate the forced use of hardcoding in X * the executables. X * X * Simply change any of these you may need to, and recompile as needed. X * X * Sneakers 11/21/88 X * X */ X X#define MAXGROUPS 1024 /* Maximum # of subscribed newsgroups */ X#define MAXFILES 300 /* Max # of files in any news or spool directory */ X X#define NEWSGROUPS "uulib:NewsGroups/" /* List of subscribed newsgroups */ X#define SAVEDIR "uunews:Save/" /* Place to save interesting article */ X#define NEWSDIR "uunews:" /* Directory to deposit the news */ X X#define ERRORFILE "uuspool:error.log" /* File to hold any errors */ X X#ifdef NOTDEF X X#define CRONTAB "uulib:CronTab" /* Actual crontab file location */ X#define CRONERR "uuspool:CronErro" /* Location of cron error file */ X X#define CONFILE "uulib:Config" /* Location of the config file */ X X#endif X X/* #include <proto/all.h> */ X END_OF_FILE if test 1625 -ne `wc -c <'src/include/config.h'`; then echo shar: \"'src/include/config.h'\" unpacked with wrong size! fi # end of 'src/include/config.h' fi if test -f 'src/lib/config.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/lib/config.c'\" else echo shar: Extracting \"'src/lib/config.c'\" \(1505 characters\) sed "s/^X//" >'src/lib/config.c' <<'END_OF_FILE' X X/* X * CONFIG.C X * X * (C) Copyright 1989-1990 by Matthew Dillon, All Rights Reserved. X * X * Extract fields from UULIB:Config X */ X X#include <stdio.h> X#include <stdlib.h> X#include <config.h> X X#define CTLZ ('z'&0x1F) X Xstatic char *ConfBuf = NULL; X Xchar * XFindConfig(field) Xchar *field; X{ X char *str; X short flen = strlen(field); X X if (ConfBuf == NULL) { X FILE *fi = fopen("UULIB:Config", "r"); X if (fi) { X long buflen; X fseek(fi, 0L, 2); X buflen = ftell(fi); X fseek(fi, 0L, 0); X if (buflen > 0 && (ConfBuf = malloc(buflen + 1))) { X fread(ConfBuf, buflen, 1, fi); X ConfBuf[buflen] = CTLZ; /* can't use \0 */ X for (str = ConfBuf; *str; ++str) { X char *bup; X if (*str == '\n') { /* make separate strs */ X *str = 0; X /* remove white space at end */ X for (bup = str - 1; bup >= ConfBuf && (*bup == ' ' || *bup == 9); --bup) X *bup = 0; X } X } X } else { X ConfBuf = NULL; X } X } X } X if (ConfBuf == NULL) X return(NULL); X /* X * Search ConfBuf for Field<space/tab> X */ X X for (str = ConfBuf; *str != CTLZ; str += strlen(str) + 1) { X if (*str == 0) X continue; X if (strncmp(str, field, flen) == 0 && (str[flen] == ' ' || str[flen] == '\t')) { X str += flen; X while (*str == ' ' || *str == 9) X ++str; X return(str); X } X } X return(NULL); X} X Xchar * XGetConfig(field, def) Xchar *field; Xchar *def; X{ X char *result = FindConfig(field); X X if (result == NULL) X result = def; X return(result); X} X END_OF_FILE if test 1505 -ne `wc -c <'src/lib/config.c'`; then echo shar: \"'src/lib/config.c'\" unpacked with wrong size! fi # end of 'src/lib/config.c' fi if test -f 'src/lib/getpwnam.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/lib/getpwnam.c'\" else echo shar: Extracting \"'src/lib/getpwnam.c'\" \(1815 characters\) sed "s/^X//" >'src/lib/getpwnam.c' <<'END_OF_FILE' X X/* X * GETPWNAM.C X * X * (C) Copyright 1989-1990 by Matthew Dillon, All Rights Reserved. X * X * (UUCP source support) X */ X X#include <stdio.h> X#include <stdlib.h> X#include <pwd.h> X Xstatic char *Breakout(); X Xchar *PasswdFile = "UULIB:passwd"; X Xstruct passwd * Xgetpwnam(name) Xchar *name; X{ X FILE *fi = fopen(PasswdFile, "r"); X char *buf = malloc(256); X static char User[32]; X static char Passwd[32]; X static char Dir[128]; X static char Shell[256]; X static struct passwd Pas = { User, Passwd, 0, 0, 0, "", "", Dir, Shell }; X X if (fi == NULL) X return(NULL); X X while (fgets(buf, 256, fi)) { X char *ptr = buf; X char *arg; X X arg = Breakout(&ptr); X if (strcmp(name, arg) != 0) X continue; X strcpy(Pas.pw_name, arg); X strcpy(Pas.pw_passwd, Breakout(&ptr)); X Pas.pw_uid = atoi(Breakout(&ptr)); X Pas.pw_gid = atoi(Breakout(&ptr)); X Breakout(&ptr); /* finger info */ X strcpy(Pas.pw_dir, Breakout(&ptr)); X strcpy(Pas.pw_shell, Breakout(&ptr)); X X { X short i = strlen(Pas.pw_dir) - 1; X if (i >= 0 && Pas.pw_dir[i] != ':' && Pas.pw_dir[i] != '/') { X Pas.pw_dir[i++] = '/'; X Pas.pw_dir[i] = 0; X } X } X X { X char *str; X X Pas.pw_shell_arg0 = Pas.pw_shell; X for (str = Pas.pw_shell; *str && *str != ' ' && *str != 9; ++str); X if (*str) { X *str = 0; X ++str; X while (*str == ' ' || *str == 9) X ++str; X Pas.pw_shell_argn = str; X } else { X Pas.pw_shell_argn = str; X } X } X X X fclose(fi); X return(&Pas); X } X fclose(fi); X return(NULL); X} X Xstatic Xchar * XBreakout(pptr) Xchar **pptr; X{ X char *base; X char *ptr; X X base = *pptr; X if (base == NULL) X return(""); X for (ptr = base; *ptr && *ptr != '\n' && *ptr != ','; ++ptr); X if (*ptr == ',') { X *pptr = ptr + 1; X *ptr = 0; X } else { X *pptr = NULL; X *ptr = 0; X } X return(base); X} X END_OF_FILE if test 1815 -ne `wc -c <'src/lib/getpwnam.c'`; then echo shar: \"'src/lib/getpwnam.c'\" unpacked with wrong size! fi # end of 'src/lib/getpwnam.c' fi if test -f 'src/lib/log.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/lib/log.c'\" else echo shar: Extracting \"'src/lib/log.c'\" \(1273 characters\) sed "s/^X//" >'src/lib/log.c' <<'END_OF_FILE' X X/* X * LOG.C X * X * (C) Copyright 1989-1990 by Matthew Dillon, All Rights Reserved. X * X * ulog(level, ctl, args...) X */ X X#include <proto/all.h> X#include <stdio.h> X#include <stdlib.h> X#include <fcntl.h> X#include <time.h> X X#include "log.h" X Xint LogLevel = -1; Xint LogToStdout = 0; Xchar *LogProgram = "-"; Xchar *LogHost = "-"; Xchar *LogWho = "-"; Xchar *LogFile = "UUSPOOL:LOGFILE"; Xchar LogBuf[512]; X Xvoid Xulog(level, ctl, arg1, arg2, arg3, arg4, arg5, arg6) Xint level; Xchar *ctl; Xlong arg1, arg2, arg3, arg4, arg5, arg6; X{ X long clock; X struct tm *ut; X int logfd; X int len; X X if (level > LogLevel) X return; X X (void)time(&clock); X ut = localtime(&clock); X X sprintf(LogBuf, "(%d/%d-%d:%02d:%02d) %s,%s,%s ", X ut->tm_mon+1, ut->tm_mday, ut->tm_hour, ut->tm_min, ut->tm_sec, X LogProgram, X LogHost, X LogWho X ); X sprintf(LogBuf + strlen(LogBuf), ctl, arg1, arg2, arg3, arg4, arg5, arg6); X X len = strlen(LogBuf); X LogBuf[len++] = '\n'; X LogBuf[len] = 0; X X DEBUG(0, "%s", LogBuf); X X if (LogToStdout) { X write(1, LogBuf, len); X return; X } X X logfd = open(LogFile, O_CREAT|O_WRONLY|O_APPEND, 0644); X if (logfd >= 0) { X write(logfd, LogBuf, len); X close(logfd); X } else { X fprintf(stderr, "Can't open %s\n", LogFile); X } X} X END_OF_FILE if test 1273 -ne `wc -c <'src/lib/log.c'`; then echo shar: \"'src/lib/log.c'\" unpacked with wrong size! fi # end of 'src/lib/log.c' fi if test -f 'src/sendmail/parse.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/sendmail/parse.c'\" else echo shar: Extracting \"'src/sendmail/parse.c'\" \(1232 characters\) sed "s/^X//" >'src/sendmail/parse.c' <<'END_OF_FILE' X X/* X * PARSE.C X * X * (C) Copyright 1989-1990 by Matthew Dillon, All Rights Reserved. X */ X X#include <proto/all.h> X#include <stdio.h> X#include <stdlib.h> X X/* X * PARSEADDRESS() X * X * Takes an address containing ! @ % : and converts it to a level 3 ! path. X * X * [path]@mach -> mach[!path] X * [path]%mach -> mach[!path] X * patha:pathb -> patha!pathb X * patha:pathb:pathc -> patha!pathb!pathc X */ X XParseAddress(str, buf, len) Xchar *str; Xchar *buf; Xshort len; X{ X short i; X short j; X char *base = buf; X char *ParseAddress2(); X X for (i = j = 0; i < len; ++i) { X if (str[i] == ':') { X buf = ParseAddress2(str + j, buf, i - j); X *buf++ = '!'; X j = i + 1; X } X } X buf = ParseAddress2(str + j, buf, i - j); X *buf = 0; X for (i = 0; base[i] && base[i] != '!'; ++i); X return((int)i); X} X X/* X * deals with !, @, and % X */ X Xchar * XParseAddress2(addr, buf, len) Xchar *addr; Xchar *buf; Xshort len; X{ X short i; X X for (i = len - 1; i >= 0; --i) { X if (addr[i] == '@' || addr[i] == '%') { X short j = len - i; X strncpy(buf, addr + i + 1, j - 1); X buf += j - 1; X len -= j; X if (len) X *buf++ = '!'; X } X } X strncpy(buf, addr, len); X buf += len; X return(buf); X} X X END_OF_FILE if test 1232 -ne `wc -c <'src/sendmail/parse.c'`; then echo shar: \"'src/sendmail/parse.c'\" unpacked with wrong size! fi # end of 'src/sendmail/parse.c' fi if test -f 'src/uucico/DMakefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/uucico/DMakefile'\" else echo shar: Extracting \"'src/uucico/DMakefile'\" \(974 characters\) sed "s/^X//" >'src/uucico/DMakefile' <<'END_OF_FILE' X X# DMakefile X XOD=ltmp:uucp/ XEXE= uucp:c/ XSYMS= uucp:src/lib/all.m X XCFLAGS= -iuucp:src/include/ -cq X XLOPTS= SC SD LIB uucp:src/lib/uucp.lib lib:lc.lib lib:amiga.lib X XSRCS=gio.c sysdep.c uucp.c uupoll.c uuxqt.c modem.c uucico.c \ X uuhosts.c uuname.c uux.c X XOBJS=$(SRCS:"*.c":"$(OD)*.o") X Xall: $(EXE)uucico $(EXE)uuxqt $(EXE)uupoll \ X $(EXE)uux $(EXE)uuname $(EXE)uucp X X$(EXE)uucico: $(OD)gio.o $(OD)sysdep.o $(OD)modem.o $(OD)uucico.o X blink FROM lib:cres.o %(right) ADDSYM $(LOPTS) TO %(left) X X$(EXE)uuxqt: $(OD)uuxqt.o X blink FROM lib:cres.o %(right) $(LOPTS) TO %(left) X X$(EXE)uupoll: $(OD)uupoll.o X blink FROM lib:cres.o %(right) $(LOPTS) TO %(left) X X$(EXE)uux: $(OD)uux.o X blink FROM lib:cres.o %(right) $(LOPTS) TO %(left) X X$(EXE)uuname: $(OD)uuname.o X blink FROM lib:cres.o %(right) $(LOPTS) TO %(left) X X$(EXE)uucp: $(OD)uucp.o X blink FROM lib:cres.o %(right) $(LOPTS) TO %(left) X X$(OBJS) : $(SRCS) X lc $(CFLAGS) -H$(SYMS) -o%(left) %(right) X END_OF_FILE if test 974 -ne `wc -c <'src/uucico/DMakefile'`; then echo shar: \"'src/uucico/DMakefile'\" unpacked with wrong size! fi # end of 'src/uucico/DMakefile' fi if test -f 'src/uucico/sysdep.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/uucico/sysdep.h'\" else echo shar: Extracting \"'src/uucico/sysdep.h'\" \(1876 characters\) sed "s/^X//" >'src/uucico/sysdep.h' <<'END_OF_FILE' X/* Amiga Port by William Loftus */ X/* Changes are Copyright 1988 by William Loftus. All rights reserved. */ X X/* X * Declarations of gnuucp's system-dependent routines, which X * are in the file sysdep.c (a link to one of many system dependent X * implementations). X */ X Xvoid munge_filename(); X X/* X * Basement level I/O routines X * X * xwrite() writes a character string to the serial port X * xgetc() returns a character from the serial port, or an EOF for timeout. X * sigint() restores the state of the serial port on exit. X * openline() opens a serial port for an incoming call, waiting for carrier. X * openout() opens a serial port for an outgoing call. X */ Xint xwrite(); /* filedesc, buffer, count */ Xint xgetc(); /* No arg */ Xint sigint(); /* No arg */ Xvoid openline(); /* ttyname */ Xint openout(); /* ttyname */ Xvoid amiga_setup(); /* No arg */ X X X/* X * Uucp work queue scan. X * X * gotsome = work_scan(hostname); X * X * Result is 1 if there is work, 0 if none. If result is 1, and work_scan X * is called a second time without an intervening work_done, it won't X * rescan the directory but simply returns a 1. X * X * workfile = work_next(); X * X * Result is char * to static filename; or NULL if no more. X * We only read the directory once. If callers want more to rescan it X * in case more work is here, they should call work_scan again. X * X * void work_done(); X * Clean up a work scan. No need to call this if work_next returned NULL; X * it has cleaned up. X */ Xextern int work_scan(); Xextern char *work_next(); Xextern void work_done(); X X/* SERIAL PORT DELARATIONS ALSO TIMER */ Xextern struct MsgPort *CreatePort(); Xextern struct IOExtSer *Read_Request; Xextern unsigned char rs_in[2]; Xextern struct IOExtSer *Write_Request; Xextern unsigned char rs_out[2]; Xextern struct timerequest Timer; Xextern struct MsgPort *Timer_Port; X X END_OF_FILE if test 1876 -ne `wc -c <'src/uucico/sysdep.h'`; then echo shar: \"'src/uucico/sysdep.h'\" unpacked with wrong size! fi # end of 'src/uucico/sysdep.h' fi if test -f 'src/uucico/uucp.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/uucico/uucp.h'\" else echo shar: Extracting \"'src/uucico/uucp.h'\" \(1358 characters\) sed "s/^X//" >'src/uucico/uucp.h' <<'END_OF_FILE' X/* X * @(#)uucp.h 1.5 87/08/13 -- uucp.h Copyright 1987 by John Gilmore X * X * Header file for gnuucp. X * X * Pieces that look like they might be taken from Unix uucp are X * cribbed with the aid of public domain uucp modules (like the F-protocol) X * that use that interface. X * X * Ported to Amiga by William Loftus X * Changes Copyright 1988 by William Loftus. All rights reserved. X */ X X#define Ifn FOO /* file descriptor of the "phone line" */ X X#define ASSERT(cond, msg, moremsg, huh) /**/ X X/* I may have these flipped from what Unix uses... */ X/* BUT: my code depends on these values in if (foo()) statements, sigh */ X#define SUCCESS 0 X#define FAIL 1 X X#define LOG X X#define MAXMSGLEN ((NAMESIZE*4)+SLOP) /* ?>?? FIXME */ X#define MAXMSGTIME 60 /* Timeout period for rdmsg */ X#define MAX_HOST 20 /* Host name length (uucp does 7) */ X#define MAX_LSYS 500 /* Max length of an L.sys line in chars */ X#define MAX_CTLLINE 100 /* Max length of a usenet.ctl line */ X X#define CTL_DELIM " \t\n\r" /* Delimiters for usenet.ctl */ X Xextern int debug; /* Debugging level */ X X/* X * Timeout for raw characters -- if we don't hear a char within BYTE_TIMEOUT X * seconds, we assume the other side has gone away. Has nothing to do with X * retransmission timeouts (if any!). X */ X#define BYTE_TIMEOUT 40 X#define BYTE_TO 40 X X#define SLOP 10 /* Slop space on arrays */ X END_OF_FILE if test 1358 -ne `wc -c <'src/uucico/uucp.h'`; then echo shar: \"'src/uucico/uucp.h'\" unpacked with wrong size! fi # end of 'src/uucico/uucp.h' fi if test -f 'src/uucico/version.doc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/uucico/version.doc'\" else echo shar: Extracting \"'src/uucico/version.doc'\" \(1459 characters\) sed "s/^X//" >'src/uucico/version.doc' <<'END_OF_FILE' X X<all-Programs> X Dec-89 Matthew Dillon. Modified to conform with my release. X Specifically, now use common library routines in uucp:src/lib, X file locking routines, logging routines, etc... X X X XUUXQT: X X .01 First sub release number assigned. X X X 11-Jul-88 by Dan Schein X X Added support for unknown command request(s) X Added support for a RMAIL command X Added "New Files Received." message X Added Beta Version number X XUUCICO: X X .06 X as of date 25 January 1989 X X .05 X G protocol now windows, window = 2. Normally X arbitrates for window size, can be defeated (forced to X 1) by using -n option. X X Accepts filenames ~/path or ~user/path. ~/path uses X UUPUB: while ~user/path looks up the home directory X in the Getty:Passwd file, defaulting to UUPUB: if X the requested user could not be found. X X .04 X only deletes queue files in a set if ALL make it X across... before would delete each file individually. X X added security feature, does not allow remote end X to send C.#? files to our uuspool: X X .02 X G protocol rewritten from scratch X X .01 X Security list (UULIB:Security) allowed directories X for remote requests. X X Getty support X X File Locking (lib/lockfile.c) X XUUCP: X .00 First sub release assigned X XUUNAME: X .00 First sub release assigned X XUUX: X .01 Uses UULIB: instead of UUCP:LIB X XUUHOSTS: X .01 Uses UULIB: instead of UUCP:LIB X XUUPOLL: X .02 Uses UULIB: instead of UUCP:LIB X Uses run >nil: <nil: instead of brun X END_OF_FILE if test 1459 -ne `wc -c <'src/uucico/version.doc'`; then echo shar: \"'src/uucico/version.doc'\" unpacked with wrong size! fi # end of 'src/uucico/version.doc' fi if test -f 'src/uuser/misc.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/uuser/misc.c'\" else echo shar: Extracting \"'src/uuser/misc.c'\" \(1880 characters\) sed "s/^X//" >'src/uuser/misc.c' <<'END_OF_FILE' X X/* X * MISC.C - support routines - Phillip Lindsay (C) Commodore 1986 X * You may freely distribute this source and use it for Amiga Development - X * as long as the Copyright notice is left intact. X * X * (C) Copyright 1989-1990 by Matthew Dillon, All Rights Reserved. X * X * 30-SEP-86 X * X * major modifications by Matthew Dillon for my PIPE: and other devices, X * but basic theorem still Phil's. X */ X X#include <exec/types.h> X#include <exec/nodes.h> X#include <exec/lists.h> X#include <exec/ports.h> X#include <libraries/dos.h> X#include <libraries/dosextens.h> X#include <proto/all.h> X Xtypedef struct Node NODE; X Xextern void returnpkt(); X Xvoid Xreturnpktplain(packet, myproc) Xstruct DosPacket *packet; Xstruct Process *myproc; X{ X returnpkt(packet, myproc, packet->dp_Res1, packet->dp_Res2); X} X X Xvoid Xreturnpkt(packet, myproc, res1, res2) Xregister struct DosPacket *packet; Xstruct Process *myproc; Xlong res1, res2; X{ X struct Message *mess; X struct MsgPort *replyport; X X packet->dp_Res1 = res1; X packet->dp_Res2 = res2; X replyport = packet->dp_Port; X mess = packet->dp_Link; X packet->dp_Port = &myproc->pr_MsgPort; X mess->mn_Node.ln_Name = (char *)packet; X mess->mn_Node.ln_Succ = NULL; X mess->mn_Node.ln_Pred = NULL; X PutMsg(replyport, mess); X} X X X/* X * taskwait() ... Waits for a message to arrive at your port and X * extracts the packet address which is returned to you. X */ X Xstruct DosPacket * Xtaskwait(myproc) Xstruct Process *myproc; X{ X struct MsgPort *myport; X struct Message *mymess; X X myport = &myproc->pr_MsgPort; X WaitPort(myport); X mymess = (struct Message *)GetMsg(myport); X return((struct DosPacket *)mymess->mn_Node.ln_Name); X} X Xtaskpktrdy(myproc) Xstruct Process *myproc; X{ X if (((NODE *)myproc->pr_MsgPort.mp_MsgList.lh_Head)->ln_Succ == NULL) X return(0); X return(1); X} X END_OF_FILE if test 1880 -ne `wc -c <'src/uuser/misc.c'`; then echo shar: \"'src/uuser/misc.c'\" unpacked with wrong size! fi # end of 'src/uuser/misc.c' fi if test -f 'src/uuser/uuser.doc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/uuser/uuser.doc'\" else echo shar: Extracting \"'src/uuser/uuser.doc'\" \(2039 characters\) sed "s/^X//" >'src/uuser/uuser.doc' <<'END_OF_FILE' X X UUSER.DOC X X UUSER V1.00 Beta X X UUSER: (C) Copyright 1989-1990 by Matthew Dillon, All Rights Reserved. X X X Currently UUSER: works only with single sessions started X by Getty (this has to do with how UUSER: deals with carrier X detect). THIS WILL BE FIXED. X X Openning UUSER: X X fopen("UUSER:devicename/unit/options", ...); X X Example: X (suggested) X X int fd = open("UUSER:serial.device/0/R1000", O_RDWR | O_CREAT | O_TRUNC); X X (also can do this -- see below for problems using X stdio to read) X X FILE *rfi = fopen("UUSER:serial.device/0/R1000", "r"); X FILE *wfi = fopen("UUSER:serial.device/0/R1000", "w"); X X X Features: X X * 1K asynchronous write buffer for each file handle. I.E. X your write() will return when 1K or less remains to be X written (UUSER: has a 1K buffer for spooling these per X file handle) X X * selectable read timeout X X * read poll X X * carrier lost handling X X General: X X (1) Use Level 1 I/O if you can (read/write) X read() returns 0 on timeout, -1 on carrier lost X otherwise, read() returns the immediate number of X data bytes ready up to the amount you requested. X (i.e. if you read(0,buf,256) you can get anywhere from X -1, 0, 1 to 256 back). X X write() returns the number you wrote or -1 (lost carrier) X X To 'poll' data ready you can read(0, NULL, 0) .. reading X 0 bytes returns 0 (data ready) or -1 (data not ready). X NOTE: 0 (data ready) will be returned if carrier is lost X when you read 0 bytes... this is so your program thinks X data is ready and when it does a real read it finds that X carrier was lost! X X (2) If you want to use Level 2 I/O (stdio) I suggest you use X it for writing only. If you really want to use it for X reading remember that the timeout will cause an EOF X condition which must be cleared (clrerr()). And you X must call ferror() to determine whether an EOF is an X EOF (timeout()) or an actual error (lost carrier). X X REFER TO UUSERDUMP.C for a working source example. X X END_OF_FILE if test 2039 -ne `wc -c <'src/uuser/uuser.doc'`; then echo shar: \"'src/uuser/uuser.doc'\" unpacked with wrong size! fi # end of 'src/uuser/uuser.doc' fi echo shar: End of archive 2 \(of 16\). cp /dev/null ark2isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 16 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Submissions to comp.sources.amiga and comp.binaries.amiga should be sent to: amiga@cs.odu.edu or amiga@xanth.cs.odu.edu ( obsolescent mailers may need this address ) or ...!uunet!xanth!amiga ( very obsolescent mailers need this address ) Comments, questions, and suggestions should be addressed to ``amiga-request'' (please only use ``amiga'' for actual submissions) at the above addresses.