|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T U
Length: 18704 (0x4910)
Types: TextFile
Notes: Uncompressed file
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦63564b3eb⟧ »EurOpenD3/network/uupc/uupc.mac.8.4.Z«
└─⟦this⟧
From uucp Wed Aug 12 02:43 PDT 1987
>From slynne Wed Aug 12 02:42:15 1987 remote from slmac
Received: by van-bc.uucp (smail2.3)
id AA17598; 12 Aug 87 02:42:15 PDT (Wed)
Received: by slmac.vnet.van-bc.uucp (pcmail) Wed Aug 12 02:37:52 1987
Date: Wed Aug 12 02:37:52 1987
From: Stuart Lynne - test a mac <slynne@slmac.vnet.van-bc.uucp>
Message-ID: <149@slmac.vnet.van-bc.uucp>
To: sl@van-bc
Subject: shar/uupc.mac.8.4
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
# mac/README.MAC
# mac/Makefile.mac
# mac/host.c
# mac/host.h
# mac/mlib.c
# mac/ulib.c
# mac/profile
# mac/ndir.h
# This archive created: Wed Aug 12 02:02:50 1987
# By: Stuart Lynne - test a mac ()
export PATH; PATH=/bin:$PATH
if test -f 'mac/README.MAC'
then
echo shar: will not over-write existing file "'mac/README.MAC'"
else
cat << \SHAR_EOF > 'mac/README.MAC'
mac June 8, 1987 Stuart Lynne
For Beta implementors only.
uupc incorporates a streamlined version of dcp to implement a uucp mail
and news delivery system.
See README.DCP for dcp info.
See README.UU for overview of this version.
This directory implements the macintosh version of host support routines.
It runs under the Aztec Shell environment.
By moving the host dependant code into one file the other four dcp files can
hopefully be maintained easily. It should be possible to maintain one version
of them which compiles and runs on all machines without conditional compilation
flags.
To simplify things for other systems (Atari) use of -D in the cc command is
not used. Instead various small files are used to set flags and then include
a common file.
host.h - include <host/host.h>
mailhost.c - define MAIN mailmain; include <host/host.h>
mlib.c - include <host/mlib.c>
ulib.c - include <host/ulib.c>
uuhost.c - define MAIN mailmain; include <host/host.h>
mac/host.c - generic macintosh host, calls MAIN
mac/host.h - macintosh host header file
mac/mlib.c - mail library
mac/ulib.c - uupc library
mac/profile - a sample aztec profile file to set environment varialbes
There is actually fairly little code here. I have a separate set of library
routines for doing the standard things like directory support. See
the shar file for the Macintosh library (maclib.shar).
A separate uux command is included in uupc for the Macintosh (not finished yet).
Called macbin it copies a MacBinary image from stdin to a Macintosh file.
This allows macintosh files, including both forks and the finder info to be
stored in a single file on the remote system. It can then be retrieved by:
uux macfile > remotemac!macbin
A standalone macbin will be available to convert a Macintosh file into a
flat file with the MacBinary image.
For more information, bug fixes, more commands etc:
Stuart.Lynne@van-bc.uucp
604-937-7532
PS. July 29/87
See the Amiga version for a genv.c that gets environment var's from
a profile file directly. I havn't had time to try on mac yet.
I have made a VERY PRELIMINARY start at a standalone version, but have
not completed it yet. I hope to get more time to work on this early
in the fall. In the meantime anyone who could get this running as a Mac
application.... please feel free. And send me the changes.
sl
SHAR_EOF
chmod +x 'mac/README.MAC'
fi # end of overwriting check
if test -f 'mac/Makefile.mac'
then
echo shar: will not over-write existing file "'mac/Makefile.mac'"
else
cat << \SHAR_EOF > 'mac/Makefile.mac'
# Makefile for uupc/dcp with Macintosh Aztec C
#
# Stuart Lynne
# May/87
#
.c.o:
cc $(CFLAGS) $*.c
#LFLAGS= -M -lx /usr/lib/mixcroot.o -lc
#CFLAGS= -E200 -DSTANDALONE
LFLAGS= -lx -lc
CFLAGS= -E200 -Y200
LIBS=
OFILES= dcp.o dcpsys.o dcpxfer.o dcpgpkt.o rmail.o \
lib.o
all: uupc mail
echo uupc & mail done
#
# .o dependicies
#
dcp.o: dcp.c dcp.h local/host.h
dcpsys.o: dcpsys.c dcp.h local/host.h
dcpxfer.o: dcpxfer.c dcp.h local/host.h
dcpgpkt.o: dcpgpkt.c dcp.h local/host.h
lib.o: lib.c local/host.h
lmail.o: pcmail.c lmail.c local/host.h
mailhost.o: local/host.c local/host.h
mail.o: local/host.h
mlib.o: local/mlib.c local/host.h
ulib.o: local/ulib.c local/host.h
uuhost.o: local/host.c local/host.h
#
# mail
#
mail: lmail.o mailhost.o mail.o mlib.o lib.o Makefile
ln mailhost.o mail.o lmail.o mlib.o lib.o $(LIBS) $(LFLAGS) -o mail
#
# uupc
#
uupc: uuhost.o $(OFILES) ulib.o lib.o Makefile
ln uuhost.o ulib.o $(OFILES) $(LIBS) $(LFLAGS) -o uupc
#
# simple shar constructing
#
SDCP = dcp.c dcp.h dcpgpkt.c dcpsys.c dcpxfer.c
SUU = host.h lib.c lmail.c mail.c mailhost.c mlib.c \
ndir.h pcmail.c rmail.c ulib.c uuhost.c systems
SREAD = README.DCP README.UUPC README.PORT README.INFO
SMAC = mac/README.MAC mac/Makefile.mac\
mac/host.c mac/host.h mac/mlib.c mac/ulib.c mac/profile \
mac/ndir.h
SST = st/README.ST \
st/host.c st/host.h \
st/c.mm st/cu.mm st/dirsubs.c st/dmymath.c st/env.mm \
st/fgets.c st/genv.c st/getargs.c st/getenv.c \
st/getone.c st/host.c st/host.h \
st/inoutpth.c st/ldcp.mm \
st/l.mm st/l1.mm st/ldcp.mm st/lmail.mm \
st/ndir.c st/ndir.h st/printmsg.c st/readme.st st/shell.c \
st/startup.mm st/time.c st/utar.mm st/uu.mm st/uuar.mm \
st/uusup.c st/zdcp.h st/zgenv.h st/zzgenv.h \
st/zhost.h st/zzhost.h st/zmailhos.c st/zzmailhost.c \
st/zndir.h st/zzndir.h st/zztime.h st/zuuhost.c
SAMI = amiga/README.Amiga amiga/Makefile.ami amiga/Makefile \
amiga/chdir.c amiga/genv.c amiga/genv.dyna \
amiga/genv.h amiga/getcwd.c amiga/host.c amiga/host.h \
amiga/mkdir.c amiga/mlib.c \
amiga/ndir.c amiga/ndir.h \
amiga/SerialIO.c amiga/sio.c \
amiga/sleep.c amiga/Timer.c amiga/ulib.c
SDOS = dos/README.DOS dos/Makefile.dos \
dos/comm.asm dos/comm.h \
dos/host.c dos/host.h \
dos/mlib.c dos/ndir.c dos/ndir.h \
dos/setup.bat dos/ulib.c
shar: shar/uupc.dcp.8.3 shar/uupc.uu.8.2 shar/uupc.read.8.1 \
shar/uupc.mac.8.4 shar/uupc.st.8.5 shar/uupc.ami.8.6 \
shar/uupc.dos.8.7
shar/uupc.read.8.1: $(SUU)
shar $(SREAD) > shar/uupc.read.8.1
shar/uupc.uu.8.2: $(SUU)
shar $(SUU) > shar/uupc.uu.8.2
shar/uupc.dcp.8.3: $(SDCP)
shar $(SDCP) > shar/uupc.dcp.8.3
shar/uupc.mac.8.4: $(SMAC)
cp Makefile mac/Makefile.mac
shar $(SMAC) > shar/uupc.mac.8.4
shar/uupc.st.8.5: $(SST)
shar $(SST) > shar/uupc.st.8.5
shar/uupc.ami.8.6: $(SAMI)
shar $(SAMI) > shar/uupc.ami.8.6
shar/uupc.dos.8.7: $(SDOS)
shar $(SDOS) > shar/uupc.dos.8.7
clean:
rm *.o *.bak CC.TMP
SHAR_EOF
chmod +x 'mac/Makefile.mac'
fi # end of overwriting check
if test -f 'mac/host.c'
then
echo shar: will not over-write existing file "'mac/host.c'"
else
cat << \SHAR_EOF > 'mac/host.c'
/* mac.c
macintosh host
*/
#include <stdio.h>
#include "host.h"
#include <ctype.h>
#include <setjmp.h>
#include <errno.h>
char *curdir;
char * getcwd();
FILE * FOPEN();
int CHDIR();
int debuglevel; /* debugging level */
#ifdef STANDALONE
char *flds[10];
char line[128];
#define DMAILBOX "mailbox"
#define DNAME ""
#define DHOME "/usr/guest"
#define DDOMAIN "pc.uucp"
#define DMAILDIR "/usr/mail"
#define DCONFDIR "/usr/lib/uucp"
#define DSPOOLDIR "/usr/spool/uucp"
#define DPUBDIR "/usr/spool/uucppublic"
#define DMAILSERVICE "host"
#define DNODENAME ""
#define DDEVICE ".a"
#define DSPEED "1200"
#define DTEMPDIR "/tmp"
FILE *fe;
void sgenv(thename, envname, dflt)
char **thename;
char *envname;
char *dflt;
{
char line[BUFSIZ];
fprintf( stderr, "genv: %s %s\n", envname, dflt ); /**/
if (fgets( line, BUFSIZ, fe ) == NULL) {
fprintf( stderr, "genv: %s not found, using %s\n", envname, dflt ); /* */
strcpy( *thename, dflt);
}
else {
strcpy( *thename, line);
fprintf( stderr, "genv: %s %s\n", envname, *thename ); /**/
}
}
void sloadenv()
{
fprintf( stderr, "sloadenv\n" );
if ( (fe = FOPEN( "/usr/lib/uucp/defaults", "r" )) == (FILE *) NULL ) {
fprintf( stderr, "can't open /usr/lib/uucp/defaults %d\n", errno );
exit( -1 );
}
fprintf( stderr, "sloadenv - fopened\n" );
/* get environment var's */
sgenv( &name, NAME, DNAME );
sgenv( &mailbox, MAILBOX, DMAILBOX );
sgenv( &nodename, NODENAME, DNODENAME );
sgenv( &home, HOME, DHOME );
sgenv( &domain, DOMAIN, DDOMAIN );
sgenv( &maildir, MAILDIR, DMAILDIR );
sgenv( &confdir, CONFDIR, DCONFDIR );
sgenv( &spooldir, SPOOLDIR, DSPOOLDIR );
sgenv( &pubdir, PUBDIR, DPUBDIR );
sgenv( &mailserv, MAILSERVICE, DMAILSERVICE );
sgenv( &device, DEVICE, DDEVICE );
sgenv( &speed, SPEED, DSPEED );
sgenv( &tempdir, TEMPDIR, DTEMPDIR );
}
#endif
jmp_buf dcpexit;
char *gets();
main( argc, argv )
int argc;
char *argv[];
{
macinit();
#ifdef STANDALONE
fprintf( stderr, "Please enter parameters: " );
if ( gets( line ) == (char *) NULL )
exit( -1 );
getargs( line, flds );
argv = flds;
/* mac specific prolog */
sloadenv();
#else
/* mac specific prolog */
loadenv();
#endif
curdir = getcwd( NULL, 0 );
#ifdef CWDSPOOL
CHDIR( spooldir );
#endif
/* setup longjmp for error exit's */
if ( setjmp( dcpexit ) == 0 ) {
MAIN( argc, argv );
}
/* mac specific epilog */
chdir( curdir );
}
/* canonical name conversio routines
importpath canonical -> host
exportpath host -> canonical
host your local pathname format
canonical unix style
*/
importpath( host, canon )
char * host;
char * canon;
{
sprintf( host, "%s", canon );
}
exportpath( canon, host )
char * host;
char * canon;
{
}
SHAR_EOF
chmod +x 'mac/host.c'
fi # end of overwriting check
if test -f 'mac/host.h'
then
echo shar: will not over-write existing file "'mac/host.h'"
else
cat << \SHAR_EOF > 'mac/host.h'
/* mac.h
Macintosh version
*/
/*#include <local/genv.h>*/
#include <genv.h>
#include <time.h>
#include <errno.h>
#include <ctype.h>
#define SAME 0
#define FALSE 0
#define TRUE 1
#define TFILENAME "tmpfile.%.7d"
#define SFILENAME "SEQF"
#define SEPCHAR '/' /* path separater character */
#define SIGFILE ".signature" /* file containing signature */
#define COPYFILE "Mail/mail.sent" /* copy of sent mail */
#define NEWSDIR "/usr/spool/rnews/%02d%02d%02d%02d%02d%02d.%03d"
#define HOSTINIT macinit() /* name of function used to initialize */
#define FILEMODE(f)
#define CALLFILE "C."
#define XQTFILE "X."
#include <local/genv.h>
extern char * fgets();
extern char * index();
extern int debuglevel; /* debuglevelging level */
SHAR_EOF
chmod +x 'mac/host.h'
fi # end of overwriting check
if test -f 'mac/mlib.c'
then
echo shar: will not over-write existing file "'mac/mlib.c'"
else
cat << \SHAR_EOF > 'mac/mlib.c'
/* lib.c
macintosh library
Things to do in uu host
serial I/O
directory stuff
opendir, readdir, closedir
prolog and epilog
system call
*/
#include <stdio.h>
#include "host.h"
#include <sgtty.h>
int get_one()
{
char c;
struct sgttyb stty, sttyo;
ioctl( 0, TIOCGETP, &stty );
sttyo = stty;
stty.sg_flags |= CBREAK;
stty.sg_flags &= ~ ECHO;
ioctl( 0, TIOCSETP, &stty );
c = fgetc( stdin );
ioctl( 0, TIOCSETP, &sttyo );
return( c );
}
SHAR_EOF
chmod +x 'mac/mlib.c'
fi # end of overwriting check
if test -f 'mac/ulib.c'
then
echo shar: will not over-write existing file "'mac/ulib.c'"
else
cat << \SHAR_EOF > 'mac/ulib.c'
/* ulib.c
macintosh library
Things to do in uu host
serial I/O
directory stuff
opendir, readdir, closedir
prolog and epilog
system call
*/
#include <stdio.h>
#include "host.h"
#include <sgtty.h>
/*\f
*/
/*
*
* login (for slave in PC mode)
* Real dumb login handshake
*/
login()
{
char logmsg[132];
#ifdef PC
lretry:
msgtime = 9999;
rmsg(logmsg, 0); /* wait for a <CR> or <NL> */
msgtime = 2 * MSGTIME;
wmsg("Username:", 0);
rmsg(logmsg, 0);
printmsg( 0, "Username = %s", logmsg );
wmsg("Password:", 0);
rmsg(logmsg, 0);
printmsg( 14, "Password = %s", logmsg );
if (strcmp(logmsg, "uucp") != 0)
goto lretry;
#endif
return('I');
}
char inbuf[BUFSIZ];
char outbuf[BUFSIZ];
swrite(data, num)
int num;
char *data;
{
int test;
unsigned char * cp;
if (debuglevel > 14)
fputc( '{', stderr );
if (debuglevel > 14) {
test = num;
cp = data;
while (test--)
fprintf( stderr, isprint(*cp)? "{%c}":"{%02x}", *cp++ );
}
test = SIOWrite( data, num );
if (debuglevel > 14)
fputc( '}', stderr );
return( test );
}
/* non-blocking read essential to "g" protocol */
/* see "dcpgpkt.c" for description */
/* This all changes in a mtask systems. Requests for */
/* I/O should get qued and an event flag given. Then the */
/* requesting process (e.g.gmachine()) waits for the event */
/* flag to fire processing either a read or a write. */
/* Could be implemented on VAX/VMS or DG but not MS-DOS */
sread(buf, num, timeout)
char *buf;
int num, timeout;
{
/*
return( SIORead( buf, num, num, timeout*10 ) );
*/
int count;
int test;
unsigned char * cp;
if (debuglevel > 13)
fputc( '[', stderr );
printmsg( 15, "sread: num: %d timeout: %d", num, timeout );
count = SIORead( buf, num, num, timeout*10 );
printmsg( 15, "sread: read: %d ", count );
if (debuglevel > 13 && count > 0) {
test = count;
cp = buf;
while (test--)
fprintf( stderr, isprint(*cp)? "[%c]":"[%02x]", *cp++ );
}
if (debuglevel > 13)
fputc( ']', stderr );
return( count );
}
openline(name, baud)
char *name, *baud;
{
printmsg( 3, "openline: name: \"%s\" baud: \"%s\"", name, baud );
SIOInit( name, baud );
SIOInBuffer( inbuf, BUFSIZ );
SIOOutBuffer( outbuf, BUFSIZ );
return( 0 );
}
closeline()
{
SIOClose( 1 );
}
nodot(string)
{
}
notimp( argc, argv )
char *argv[];
{
/*debuglevelMsg("\Pcheck argc (08) and argv (0a) ");*/
fprintf( stderr, "shell: %s not implemented\n", *argv );
}
/* shell
*/
char * getcwd();
shell( command, inname, outname, errname )
char * command;
char * inname;
char * outname;
{
char * argvec[50];
int rmail();
int rnews();
int macbin();
int argcp;
char **argvp;
char args;
int (*proto)();
argcp = 0;
argcp = getargs( command, argvec );
argvp = argvec;
args = argcp;
if ( debuglevel > 5 ) {
while ( args )
fprintf( stderr, "arg: %d %s\n", args--, *argvp++ );
argvp = argvec;
args = argcp;
}
/* */
proto = notimp;
if ( strcmp( *argvp, "rmail" ) == SAME )
proto = rmail;
else if ( strcmp( *argvp, "rnews" ) == SAME )
proto = rnews;
else if ( strcmp( *argvp, "macbin" ) == SAME )
proto = macbin;
if ( *inname != '\0' ) {
/* fprintf( stderr, "reopening stdin as %s\n", inname );
fprintf( stderr, "curdir: %s\n", getcwd(NULL, 0)); /* */
if ( freopen( inname, "r", stdin ) == NULL )
fprintf( stderr, "Couldn't open %s, %d\n", inname, errno );
}
(proto)( argcp, argvp );
freopen( ".console", "r", stdin );
}
/*
macbin
copy a macbinary image from stdin into a macintosh file
128 bytes of header information
(n+128)/128*128 bytes of data fork data
(n+128)/128*128 bytes of resource fork data
The name is derived from the header information
The directory is given as an arguement
on remote system use:
uux macfile.mb > remotemac!macbin /usr/sl
*/
#undef TRUE
#include <types.h>
#include <pb.h>
/* #include <stdio.h> */
typedef struct {
/*
char blknum;
char mblknum;
*/
char dummy;
char version;
char fName[64];
FInfo finderInfo; /* check - starts on odd byte boundary */
char protected;
char ckZero1;
long dfLength;
long rfLength;
long crDat;
long mdDat;
char fill1[27];
char computer;
char os;
} MacBinHeader;
int macbin( argc, argv )
int argc;
char *argv[];
{
#ifdef TESTETEST
char filename[132];
char buf[BUFSIZ];
MacBinHeader mbh;
long count, size;
int i;
HPrmBlkRec pbr;
/* get the header */
fread( &mbh.version, 1, 128, stdin );
/* create and open the file */
strncpy( pbr.ioNamePtr, mbh.fName, 64 );
pbr.ioVRefNum = 0;
pbr.u.hfp.ioFVersNum = 0;
PBCreate( &pbr, FALSE );
/* get finder info */
pbr.u.hfp.ioFDirIndex = 0;
pbr.u.hfp.ioDirID = 0L;
PBGetInfo( &pbr, FALSE );
/* set finder info */
pbr.u.hfp.ioFlFndrInfo.fdFldr = 0;
pbr.u.hfp.ioFlCrDat = mbh.crDat;
pbr.u.hfp.ioFlMdDat = mbh.mdDat;
pbr.u.hfp.ioFlFndrInfo = mbh.finderInfo;
PBSetInfo( &pbr, FALSE );
/* get and write out the fork */
pbr.u.iop.ioPermssn = 0;
pbr.u.iop.ioMisc = 0L;
for ( i = 1; i > 0 ; i-- ) {
if (i == 1 ) {
PBOpen( &pbr, FALSE );
size = (mbh.dfLength + 127) & 0xffffff80;
}
else {
PBROpen( &pbr, FALSE );
size = (mbh.rfLength + 127) & 0xffffff80;
}
while ( size > 0 )
if ( (count = fread( buf, 1, BUFSIZ, stdin )) != 0 ) {
size -= count;
pbr.u.iop.ioBuffer = buf;
pbr.u.iop.ioReqCount = count;
PBWrite ( &pbr, FALSE);
}
PBClose( &pbr, FALSE );
}
#endif
}
SHAR_EOF
chmod +x 'mac/ulib.c'
fi # end of overwriting check
if test -f 'mac/profile'
then
echo shar: will not over-write existing file "'mac/profile'"
else
cat << \SHAR_EOF > 'mac/profile'
set NAME="Stuart Lynne - test a mac"
set MAILBOX=slynne
set HOME=/usr/sl
set DOMAIN="slmac.vcr.bc.can"
set MAILSERVICE="van-bc"
set NODENAME=slmac
SHAR_EOF
chmod +x 'mac/profile'
fi # end of overwriting check
if test -f 'mac/ndir.h'
then
echo shar: will not over-write existing file "'mac/ndir.h'"
else
cat << \SHAR_EOF > 'mac/ndir.h'
/* @(#)ndir.h 1.4 4/16/85 */
#ifndef DEV_BSIZE
#define DEV_BSIZE 512
#endif
#define DIRBLKSIZ DEV_BSIZE
#define MAXNAMLEN 255
struct direct {
long d_ino; /* inode number of entry */
short d_reclen; /* length of this record */
short d_namlen; /* length of string in d_name */
char d_name[MAXNAMLEN + 1]; /* name must be no longer than this */
};
/*
* The DIRSIZ macro gives the minimum record length which will hold
* the directory entry. This requires the amount of space in struct direct
* without the d_name field, plus enough space for the name with a terminating
* null byte (dp->d_namlen+1), rounded up to a 4 byte boundary.
*/
#ifdef DIRSIZ
#undef DIRSIZ
#endif /* DIRSIZ */
#define DIRSIZ(dp) \
((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
/*
* Definitions for library routines operating on directories.
*/
/*
typedef struct _dirdesc {
int dd_fd;
long dd_loc;
long dd_size;
char dd_buf[DIRBLKSIZ];
} DIR;
*/
typedef struct _dirdesc {
int ioVRefNum;
long ioDrDirID;
int ioFDirIndex;
} DIR;
#ifndef NULL
#define NULL 0L
#endif
extern DIR *opendir();
extern struct direct *readdir();
extern void closedir();
extern char * getcwd();
SHAR_EOF
chmod +x 'mac/ndir.h'
fi # end of overwriting check
# End of shell archive
exit 0
--
{ubc-vision,uunet}!van-bc!sl Stuart.Lynne@van-bc.uucp