|
|
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: 54184 (0xd3a8)
Types: TextFile
Notes: Uncompressed file
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦b99701646⟧ »EurOpenD3/network/uupc/uupc.st.8.5.Z«
└─⟦this⟧
From uucp Wed Aug 12 02:51 PDT 1987
>From slynne Wed Aug 12 02:51:03 1987 remote from slmac
Received: by van-bc.uucp (smail2.3)
id AA17688; 12 Aug 87 02:51:03 PDT (Wed)
Received: by slmac.vnet.van-bc.uucp (pcmail) Wed Aug 12 02:39:38 1987
Date: Wed Aug 12 02:39:38 1987
From: Stuart Lynne - test a mac <slynne@slmac.vnet.van-bc.uucp>
Message-ID: <152@slmac.vnet.van-bc.uucp>
To: sl@van-bc
Subject: shar/uupc.st.8.5
#! /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:
# 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
# This archive created: Wed Aug 12 02:03:06 1987
# By: Stuart Lynne - test a mac ()
export PATH; PATH=/bin:$PATH
if test -f 'st/README.ST'
then
echo shar: will not over-write existing file "'st/README.ST'"
else
cat << \SHAR_EOF > 'st/README.ST'
This file contains the Atari ST specific files.
I have done all the compilation using the Alcyon C versin 4.14a compiler.
The disks were layed out with all the sources and objects on the A drive and
the compiler on the D drive.
Problems with the Atari ST code:
- there is a problem in the getsystem(), sysend() states such that
if there is more than one system in the systems file then the
program may bomb bomb (bus error?)
Files included in this shar script:
On the atari these files should be placed in the
\local directory or the .h files will need to be
edited.
dirsubs.c - file and directory name manipulation
dmymath.c - dummy floating point routines to fake out linker
genv.c - load enviroment strings
getenv.c - get and enviroment string
getone.c - get one character without echo
host.c - host specific main program
inoutpth.c - file name conversion
ndir.c - directory manipulation routines
printmsg.c - print message to log file
time.c - date/time conversion routines
uusup.c - uu support routines
The following files belong in the ./local dirctory and should
be moved there with the leading z stripped off.
zdcp.h - main include file for uu
zmailhost.c - host specific mail main program
zuuhost.c - host specific uu main program
zgenv.h - definitions for enviroment variables
zhost.h - host specific definitions
zndir.h - directory manipulation routines header
ztime.h - time routine header
The following script files are included as examples on how to compile
the sources. They are for the CM command shell.
c.mm - compile script for alcyon C (file is in A:\)
cu.mm - compile script for alcyon C (file is in A:\atari\)
env.mm - define enviroment script
ldcp.mm - link uu.prg
lmail.mm - link mail.prg
uuar.mm - create DCPLIB
utar.mm - create UTLLIB
Basic procedure is to:
- compile all the .c files into .o files
- build the DCPLIB with uuar.mm
- build the UTLLIB with utar.mm
- link uu with ldcp.mm
- link mail with lmail.mm
If you have problems feel free to drop me a line. Though I warn you I have
a slow turn around time on questions I will try to get back to you within
a day or two.
------------------------------------------------------------------------------
UUCP: {alberta,uw-beaver,siesmo}!ubc-vision!van-bc!nvanbc!lawrence
SNAIL: 733 Sylvan Ave., North Vancouver, B.C., Canada, V7R 2E8
PHONE: 1-604-736-9241 (09:00-17:00 PDT)
SHAR_EOF
fi # end of overwriting check
if test -f 'st/host.c'
then
echo shar: will not over-write existing file "'st/host.c'"
else
cat << \SHAR_EOF > 'st/host.c'
#include <stdio.h>
#include <setjmp.h>
#include "genv.h"
int chdir();
void loadenv();
void printmsg();
extern int errno;
char *curdir;
char *getcwd();
char c_curdir[256];
jmp_buf dcpexit;
main( argc, argv )
int argc;
char **argv;
{
/* host specific prolog */
loadenv();
curdir = getcwd( c_curdir, 0 );
if (chdir( spooldir ) != 0)
{
return(errno);
}
/* setup longjmp for error exit's */
if ( setjmp( dcpexit ) == 0 ) {
MAIN(argc, argv );
}
/* host specific epilog */
if (chdir( curdir ) != 0)
{
return(errno);
}
return(0);
}
SHAR_EOF
fi # end of overwriting check
if test -f 'st/host.h'
then
echo shar: will not over-write existing file "'st/host.h'"
else
cat << \SHAR_EOF > 'st/host.h'
/* Atari ST, Alcyon C Version 4.14a */
/* Host specific defines for uu and mail */
#include <setjmp.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>
#include <osbind.h>
#include <time.h>
#include "genv.h"
#define XENIX /* don't send debugging info in startup message */
#define fgets Fgets /* use our own fgets to fix problem in runtime */
#define mkdir Dcreate /* create directory */
#define ATARIST
#define strchr index
#define strrchr rindex
#define FILEMODE(f)
#define SEPCHAR '\\' /* path separater character */
#define XQTFILE "X_" /* prefix for execute files */
#define CALLFILE "C_" /* prefix for call files */
#define TFILENAME "TM.%03ld" /* template for temporary files */
#define SFILENAME "SEQF" /* name of the sequence file */
#define SIGFILE "WHOAMI" /* file containing signature */
#define COPYFILE "MAIL\\MAILSENT" /* copy of sent mail */
#define NEWSDIR "\\spool\\rnews\\%02d%02d%02d%02d.%03d" /* format for news name */
#define HOSTINIT /* name of function used to initialize */
/* Rsconf() defines */
#define RSR (-1) /* leave as is */
#define TSR (-1) /* " " " " */
#define SCR (-1) /* " " " " */
#define UCR (0x98) /* 8-bits, no parity, 2 stops */
#define NOFLOW (0) /* no flow control */
#define B19200 (0) /* 19200 baud */
#define B9600 (1) /* 9600 baud */
#define B4800 (2) /* 4800 baud */
#define B2400 (4) /* 2400 baud */
#define B1200 (7) /* 1200 baud */
#define B300 (9) /* 300 baud */
/* misc. defines */
#ifndef TRUE
#define FALSE (0)
#define TRUE (-1)
#endif
#ifndef SAME
#define SAME (0)
#endif
#define AUX (1) /* rs232 port */
#define CON (2) /* console */
#define CTRL(X) (X & 037) /* get a control character */
#define IBUFSIZ (0x1000)
#define OBUFSIZ (0x1000)
/* typedef for Iorec() stuff (modified & improved by Martin Minow) */
struct iorec
{
char *ibuf; /* Pointer to input buffer */
int ibufsize; /* Size of input buffer */
int ibufhd; /* Head index */
int ibuftl; /* Tail index */
int ibuflow; /* Low water mark */
int ibufhi; /* Hi water mark */
};
typedef struct {
struct iorec in; /* 0 Input buffer */
struct iorec out; /* 14 Output buffer */
} IOREC;
/*
* Rsconf() returns the "old" parameters in a longword encoded as follows:
* bits value
* 31-24 UCR
* 23-16 RSR
* 15- 8 TSR
* 8- 0 SCR
*
* Note that we must redefine the Rsconf() macro.
*/
#define RS_UCR_SHIFT 24
#define RS_RSR_SHIFT 16
#define RS_TSR_SHIFT 8
#define RS_SCR_SHIFT 0
extern int errno;
SHAR_EOF
fi # end of overwriting check
if test -f 'st/c.mm'
then
echo shar: will not over-write existing file "'st/c.mm'"
else
cat << \SHAR_EOF > 'st/c.mm'
d:cp68 -I a:\ a:\$1.c $1.i
d:c068 $1.i $1.1 $1.2 $1.3 -f
del $1.i
d:c168 $1.1 $1.2 $1.s
del $1.1
del $1.2
d:as68 -l -u $1.s
del $1.s
copy $1.o a:
del $1.o
SHAR_EOF
fi # end of overwriting check
if test -f 'st/cu.mm'
then
echo shar: will not over-write existing file "'st/cu.mm'"
else
cat << \SHAR_EOF > 'st/cu.mm'
d:cp68 -I a:\ a:\local\$1.c $1.i
d:c068 $1.i $1.1 $1.2 $1.3 -f
del $1.i
d:c168 $1.1 $1.2 $1.s
del $1.1
del $1.2
d:as68 -l -u $1.s
del $1.s
copy $1.o a:\local\
del $1.o
SHAR_EOF
fi # end of overwriting check
if test -f 'st/dirsubs.c'
then
echo shar: will not over-write existing file "'st/dirsubs.c'"
else
cat << \SHAR_EOF > 'st/dirsubs.c'
/*
* getcwd(), chdir()
*/
#include <osbind.h>
#define NULL 0
extern char *malloc();
extern char errno;
char *getcwd( pnbuf, maxlen )
char *pnbuf;
int maxlen;
{
int drive;
if ( pnbuf == (char *)NULL )
{
if ( (pnbuf = malloc( 64 )) == (char *)NULL )
{
printf( "getcwd: malloc failure\n" );
exit(-1);
}
}
drive = Dgetdrv(); /* get the current drive */
pnbuf[0] = (char)('A'+drive);
pnbuf[1] = ':';
Dgetpath( &pnbuf[2], 0 ); /* get current directory for current drive */
return( pnbuf );
}
int chdir( path )
char *path;
{
int status;
/*
* Change current drive if the path has a drive specified
*/
if ( path[1] == ':' )
Dsetdrv( (int)(path[0]-'A') );
status = Dsetpath( path ); /* set current path */
if ( status == 0 ) return(0);
printf("chdir: failed with error %d\n", status);
errno = status;
return(-1);
}
SHAR_EOF
fi # end of overwriting check
if test -f 'st/dmymath.c'
then
echo shar: will not over-write existing file "'st/dmymath.c'"
else
cat << \SHAR_EOF > 'st/dmymath.c'
/*
* ftoa, etoa, atof - Dummy routines so linker does not complain.
* Will report error and exit should they actually be called.
*/
double atof( nptr )
char *nptr;
{
printf(" atof: Not implemented\n" );
exit(-1);
}
char *etoa( fval, buf, prec )
double fval;
char *buf;
int prec;
{
printf(" etoa: Not implemented\n" );
exit(-1);
}
char *ftoa( fval, buf, prec )
double fval;
char *buf;
int prec;
{
printf(" ftoa: Not implemented\n" );
exit(-1);
}
SHAR_EOF
fi # end of overwriting check
if test -f 'st/env.mm'
then
echo shar: will not over-write existing file "'st/env.mm'"
else
cat << \SHAR_EOF > 'st/env.mm'
remenv A:\
setenv CONFDIR A:\lib
setenv MAILDIR A:\spool\mail
setenv PUBDIR A:\spool\uucppubl
setenv SPOOLDIR A:\spool\uucp
setenv RNEWSDIR A:\spool\rnews
setenv HOME A:\lawrence
setenv NODENAME lhst
setenv MAILSERVICE nvanbc
setenv USERNAME lawrence
setenv SPEED 1200
setenv DEVICE CON:
SHAR_EOF
fi # end of overwriting check
if test -f 'st/fgets.c'
then
echo shar: will not over-write existing file "'st/fgets.c'"
else
cat << \SHAR_EOF > 'st/fgets.c'
#include <stdio.h>
#include <osbind.h>
#include <ctype.h>
#define CR '\015'
#define LF '\012'
#define BS '\010'
#define CD '\004'
#define CU '\025'
#define CX '\030'
#define CZ '\032'
static char backsp[] = "\010 \010";
static char newline[]= "\015\012";
/*
* Fgets() - A replacement for fgets() that does its own console I/O
* since the library version seems not to work.
* If the I/O is not to the console then we just call the
* real fgets().
*
* To use you must define fgets as Fgets either at the top of your
* source file or in a common header file.
*/
char *Fgets( buf, n, stream )
char *buf;
int n;
FILE *stream;
{
static int eof = FALSE;
int fd,eol;
char *s = buf;
char c;
eol = FALSE;
n -= 1; /* Leave room for the null character */
fd = fileno( stream );
if ( isatty( fd ) )
{
/*
* If the user typed ^Z last time then report EOF on this call.
* Clear EOF as well so that future calls to the console will
* work.
*/
if ( eof )
{
eof = FALSE;
return( (char *)NULL );
}
/*
* Not EOF so read up to n character and return the line.
*/
while ( ( s - buf ) < n )
{
c = ( Crawcin() & 0xFF );
/*
* If its a printing character then just echo it
*/
if (isprint( c ))
{
Cconout( c );
*s++ = c;
continue;
}
/*
* It must be a control character, either process it or
* ignore it.
*/
switch (c)
{
case CD:
case CZ:
eof = eol = TRUE;
if ( s == buf ) break;
case CR:
case LF:
eol = TRUE;
*s++ = LF;
if ( ( s - buf ) < n ) *s++ = '\0';
Cconws( newline );
break;
case BS:
if ( s != buf )
{
s--;
Cconws( backsp );
}
break;
case CU:
case CX:
while ( s != buf )
{
s--;
Cconws( backsp );
}
default:
break;
}
if ( eol ) break;
}
if ( eof && s == buf )
{
eof = FALSE;
return( (char *)NULL );
}
return( buf );
}
/*
* Was not console so call regular fgets() since it seems to
* work for everything else.
*/
return( fgets( buf, n, stream ) );
}
#ifdef DEB_Fgets
extern int errno;
char buf[200];
#define fgets Fgets /* Use our own fgets routine */
main ( argc, argv )
int argc;
char **argv;
{
char *s;
while ( ( s = fgets( buf, 20, stdin ) ) != (char *)NULL )
{
puts(">>");
puts( s );
puts("<<");
}
return( errno );
}
#endif
SHAR_EOF
fi # end of overwriting check
if test -f 'st/genv.c'
then
echo shar: will not over-write existing file "'st/genv.c'"
else
cat << \SHAR_EOF > 'st/genv.c'
/* genv.c
copyright (C) 1987 Stuart Lynne
Copying and use of this program are controlled by the terms of the
Free Software Foundations GNU Emacs General Public License.
version 0.1 March 31/1987
*/
#include <stdio.h>
#ifndef NULL
#define NULL 0
#endif
#include "genv.h"
#define DMAILBOX "mailbox"
#define DNAME "noname"
#define DDOMAIN "pc.uucp"
#define DMAILDIR "\\usr\\spool\\mail"
#define DHOME "\\usr\\noname"
#define DCONFDIR "\\usr\\lib\\uucp"
#define DSPOOLDIR "\\usr\\spool\\uucp"
#define DLOGDIR "\\usr\\spool\\uucp"
#define DPUBDIR "\\usr\\spool\\uucppublic"
#define DNEWSSDIR "\\usr\\spool\\rnews"
#define DTEMPDIR "\\tmp"
#define DMAILSERVICE "host"
#define DNODENAME "noname"
#define DDEVICE "AUX:"
#define DSPEED "1200"
#define TFILENAME "tmpfile"
#define FILENAME "%s\\%s"
char *getenv();
char *malloc();
void genv();
extern int debuglevel;
#ifdef NOMALLOC
char rmailbox[64];
char rname[64];
char rdomain[64];
char rmaildir[64];
char rhome[64];
char rconfdir[64];
char rlogdir[64];
char rspooldir[64];
char rpubdir[64];
char rnewssdir[64];
char rtempdir[64];
char rmailserv[16];
char rnodename[16];
char rdevice[16];
char rspeed[8];
char *mailbox = rmailbox;
char *name = rname;
char *domain = rdomain;
char *maildir = rmaildir;
char *home = rhome;
char *confdir = rconfdir;
char *spooldir = rspooldir;
char *pubdir = rpubdir;
char *logdir = rlogdir;
char *newssdir = rnewssdir;
char *tempdir = rtempdir;
char *mailserv = rmailserv;
char *nodename = rnodename;
char *device = rdevice;
char *speed = rspeed;
#else
char *mailbox;
char *name;
char *domain;
char *maildir;
char *home;
char *confdir;
char *spooldir;
char *logdir;
char *pubdir;
char *newssdir;
char *tempdir;
char *mailserv;
char *nodename;
char *device;
char *speed;
#endif
void genv(thename, envname, dflt)
char **thename;
char *envname;
char *dflt;
{
char *temp;
if ((temp = getenv( envname )) == (char *)NULL) {
if ( debuglevel > 0 )
fprintf( stderr, "genv: %s not found, using %s\n",
envname, dflt );
temp = dflt;
}
*thename = malloc( strlen( temp ) + 1 );
strcpy( *thename, temp );
if ( debuglevel > 0 )
fprintf( stderr, "genv: %s = %s\n", envname, *thename );
}
void loadenv()
{
/* get environment var's */
genv( &name, NAME, DNAME );
genv( &mailbox, MAILBOX, DMAILBOX );
genv( &domain, DOMAIN, DDOMAIN );
genv( &maildir, MAILDIR, DMAILDIR );
genv( &confdir, CONFDIR, DCONFDIR );
genv( &spooldir, SPOOLDIR, DSPOOLDIR );
genv( &logdir, LOGDIR, DLOGDIR );
genv( &home, HOME, DHOME );
genv( &pubdir, PUBDIR, DPUBDIR );
genv( &newssdir, NEWSSDIR, DNEWSSDIR );
genv( &tempdir, TEMPDIR, DTEMPDIR );
genv( &mailserv, MAILSERVICE, DMAILSERVICE );
genv( &nodename, NODENAME, DNODENAME );
genv( &device, DEVICE, DDEVICE );
genv( &speed, SPEED, DSPEED );
}
void mkfilename( filename, dirname, name )
char *filename;
char *dirname;
char *name;
{
sprintf( filename, FILENAME, dirname, name );
if ( debuglevel > 5 )
fprintf( stderr, "genv: New filename %s\n", filename );
}
#ifdef TEST
main()
{
loadenv();
}
#endif
SHAR_EOF
fi # end of overwriting check
if test -f 'st/getargs.c'
then
echo shar: will not over-write existing file "'st/getargs.c'"
else
cat << \SHAR_EOF > 'st/getargs.c'
#include <ctype.h>
int getargs( line, flds )
char *line;
char **flds;
{
int i = 0;
char *s;
while ( (*line != '\0') && (*line != '\n') )
{
if ( isspace(*line) )
{
line++;
continue;
}
*flds++ = line;
i++;
while( (isspace(*line) == 0) && (*line != '\0') ) line++;
if (isspace(*line)) *line++ = '\0';
}
return(i);
}
#ifdef TEST
char comline[64] = "this is a test\n";
main(argc, argv)
int argc;
char *argv;
{
char *flds[60];
int i,j;
i = getargs( comline, flds );
printf( "Num args = %d\n", i );
for (j=0; j<i; j++)
printf( "Arg[%d] = %d %s\n", j, strlen(flds[j]), flds[j] );
}
#endif
SHAR_EOF
fi # end of overwriting check
if test -f 'st/getenv.c'
then
echo shar: will not over-write existing file "'st/getenv.c'"
else
cat << \SHAR_EOF > 'st/getenv.c'
/*
* char *getenv( s )
*
*/
#include <string.h>
#define strchr index
#define strrchr rindex
extern char *_base; /* pointer to base page */
#ifndef NULL
#define NULL 0
#endif
char *getenv( s )
char *s;
{
char *envp;
int n;
envp = *(char **)(_base + 44); /* pointer to enviroment strings */
/*printf( "Base address = %lx, Enviroment = %lx\n", _base, envp ); /* */
if ( *envp == '\0' ) return (char *)NULL;
while ( *envp != '\0' )
{
/*printf( "Checking %s\n", envp ); /* */
n = strlen(s);
if ( strncmp( envp, s, n ) != 0 )
{
while ( *envp++ != '\0' );
/*printf( "Failed match, next string at %lx\n", envp ); /* */
continue;
}
/*printf( "Matched %s\n", envp ); /* */
envp += n; /* skip over variable name */
if ( *envp != '=' )
{
envp = strchr( envp, '\0' ) + 1; /* skip this string */
continue;
}
break;
}
return ( ( *envp != '=' ) ? (char *)NULL : ++envp );
}
#ifdef TEST
main( argc, argv )
int argc;
char **argv;
{
char *s;
argc--; /* skip program name */
argv++;
while ( argc-- )
{
s = *argv;
while ( *s != '\0' )
{
if ( *s >= 'a' && *s <= 'z' ) *s = *s - 32;
*s++;
}
s = getenv( *argv );
if (s == (char *)NULL)
printf( "%s is not defined\n", *argv );
else
printf( "%s = %s\n", *argv, s );
argv++;
}
}
#endif
SHAR_EOF
fi # end of overwriting check
if test -f 'st/getone.c'
then
echo shar: will not over-write existing file "'st/getone.c'"
else
cat << \SHAR_EOF > 'st/getone.c'
#include <osbind.h>
int get_one()
{
int c;
c = Crawcin() & 0xFF;
if ( c == '\r' ) c = '\n';
return( c );
}
SHAR_EOF
fi # end of overwriting check
if test -f 'st/host.c'
then
echo shar: will not over-write existing file "'st/host.c'"
else
cat << \SHAR_EOF > 'st/host.c'
#include <stdio.h>
#include <setjmp.h>
#include "genv.h"
int chdir();
void loadenv();
void printmsg();
extern int errno;
char *curdir;
char *getcwd();
char c_curdir[256];
jmp_buf dcpexit;
main( argc, argv )
int argc;
char **argv;
{
/* host specific prolog */
loadenv();
curdir = getcwd( c_curdir, 0 );
if (chdir( spooldir ) != 0)
{
return(errno);
}
/* setup longjmp for error exit's */
if ( setjmp( dcpexit ) == 0 ) {
MAIN(argc, argv );
}
/* host specific epilog */
if (chdir( curdir ) != 0)
{
return(errno);
}
return(0);
}
SHAR_EOF
fi # end of overwriting check
if test -f 'st/host.h'
then
echo shar: will not over-write existing file "'st/host.h'"
else
cat << \SHAR_EOF > 'st/host.h'
/* Atari ST, Alcyon C Version 4.14a */
/* Host specific defines for uu and mail */
#include <setjmp.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>
#include <osbind.h>
#include <time.h>
#include "genv.h"
#define XENIX /* don't send debugging info in startup message */
#define fgets Fgets /* use our own fgets to fix problem in runtime */
#define mkdir Dcreate /* create directory */
#define ATARIST
#define strchr index
#define strrchr rindex
#define FILEMODE(f)
#define SEPCHAR '\\' /* path separater character */
#define XQTFILE "X_" /* prefix for execute files */
#define CALLFILE "C_" /* prefix for call files */
#define TFILENAME "TM.%03ld" /* template for temporary files */
#define SFILENAME "SEQF" /* name of the sequence file */
#define SIGFILE "WHOAMI" /* file containing signature */
#define COPYFILE "MAIL\\MAILSENT" /* copy of sent mail */
#define NEWSDIR "\\spool\\rnews\\%02d%02d%02d%02d.%03d" /* format for news name */
#define HOSTINIT /* name of function used to initialize */
/* Rsconf() defines */
#define RSR (-1) /* leave as is */
#define TSR (-1) /* " " " " */
#define SCR (-1) /* " " " " */
#define UCR (0x98) /* 8-bits, no parity, 2 stops */
#define NOFLOW (0) /* no flow control */
#define B19200 (0) /* 19200 baud */
#define B9600 (1) /* 9600 baud */
#define B4800 (2) /* 4800 baud */
#define B2400 (4) /* 2400 baud */
#define B1200 (7) /* 1200 baud */
#define B300 (9) /* 300 baud */
/* misc. defines */
#ifndef TRUE
#define FALSE (0)
#define TRUE (-1)
#endif
#ifndef SAME
#define SAME (0)
#endif
#define AUX (1) /* rs232 port */
#define CON (2) /* console */
#define CTRL(X) (X & 037) /* get a control character */
#define IBUFSIZ (0x1000)
#define OBUFSIZ (0x1000)
/* typedef for Iorec() stuff (modified & improved by Martin Minow) */
struct iorec
{
char *ibuf; /* Pointer to input buffer */
int ibufsize; /* Size of input buffer */
int ibufhd; /* Head index */
int ibuftl; /* Tail index */
int ibuflow; /* Low water mark */
int ibufhi; /* Hi water mark */
};
typedef struct {
struct iorec in; /* 0 Input buffer */
struct iorec out; /* 14 Output buffer */
} IOREC;
/*
* Rsconf() returns the "old" parameters in a longword encoded as follows:
* bits value
* 31-24 UCR
* 23-16 RSR
* 15- 8 TSR
* 8- 0 SCR
*
* Note that we must redefine the Rsconf() macro.
*/
#define RS_UCR_SHIFT 24
#define RS_RSR_SHIFT 16
#define RS_TSR_SHIFT 8
#define RS_SCR_SHIFT 0
extern int errno;
SHAR_EOF
fi # end of overwriting check
if test -f 'st/inoutpth.c'
then
echo shar: will not over-write existing file "'st/inoutpth.c'"
else
cat << \SHAR_EOF > 'st/inoutpth.c'
#include <string.h>
#include <ctype.h>
#define NULL 0
#define strchr index
#define strrchr rindex
#define min(x,y) (((x) < (y)) ? (x) : (y))
/*
* Canonical name conversion routines
*
* These routines convert file name between canonical form which is defined
* as a 'unix' style pathname and whatever format the host system can
* handle.
*/
/*
* importpath( host, canon )
*
* Convert a canonical name to a format the host can handle
*
* Mung the canonical file name as follows:
* 1 - strip any path from the canonical name
* 2 - copy up to 8 character from the canonical name converting . to _
* 3 - if the name was longer than 8 character copy a . to the host name
* and then copy the up to three characters from the tail of the
* canonical name to the host name.
*/
char *importpath( host, canon )
char *host, *canon;
{
char *s,*out,c;
int i,j,l;
out = host;
/*
* get a pointer to the last component of the path
*/
if ( (s = strrchr( canon, '/' )) == (char *)NULL ) s = canon;
else s++;
j = min(l = strlen(s),8);
for (i=0; i<j; i++)
{
c = *s++;
*out++ = (c == '.') ? '_' : c;
}
*out = '\0';
while (*s != '\0') s++;
if (l>8)
for (i=0; i<3; i++)
if (*--s == '.') { s++; break; }
if (*s != '\0')
{
strcat( out, "." );
strcat( out, s );
}
return( host );
}
/*
* exportpath( canon, host )
*
* Convert a host name into canonical name
*
* Copy file name from host to canon converting an underscore in the second
* character to a dot and any other dots into the letter B.
*
*/
exportpath( canon, host )
char *host, *canon;
{
register char c;
register char *s = canon;
do
{
c = *s = tolower( *host );
if ( c == '.' ) *s = 'B';
s++;
} while ( *host++ != '\0' );
*canon = toupper( *canon );
if ( canon[1] == '_' )
canon[1] = '.';
}
SHAR_EOF
fi # end of overwriting check
if test -f 'st/ldcp.mm'
then
echo shar: will not over-write existing file "'st/ldcp.mm'"
else
cat << \SHAR_EOF > 'st/ldcp.mm'
del uu.prg
a:link68 [s,tem[d:]] uu.68k=gemstart,uuhost,uusup,rmail,dcplib,utllib,lib,osbind,gemlib,dmymath
d:relmod uu
del uu.68K
SHAR_EOF
fi # end of overwriting check
if test -f 'st/l.mm'
then
echo shar: will not over-write existing file "'st/l.mm'"
else
cat << \SHAR_EOF > 'st/l.mm'
a:link68 [s,tem[d:]] $1.68k=gemstart,$1.o,osbind,gemlib
d:relmod $1
del $1.68K
SHAR_EOF
fi # end of overwriting check
if test -f 'st/l1.mm'
then
echo shar: will not over-write existing file "'st/l1.mm'"
else
cat << \SHAR_EOF > 'st/l1.mm'
a:link68 [s,tem[d:]] x.68k=gemstart,uuatari,dcp,dcpsys,dcpgpkt,dcpxfer,util.a,osbind,gemlib
SHAR_EOF
fi # end of overwriting check
if test -f 'st/ldcp.mm'
then
echo shar: will not over-write existing file "'st/ldcp.mm'"
else
cat << \SHAR_EOF > 'st/ldcp.mm'
del uu.prg
a:link68 [s,tem[d:]] uu.68k=gemstart,uuhost,uusup,rmail,dcplib,utllib,lib,osbind,gemlib,dmymath
d:relmod uu
del uu.68K
SHAR_EOF
fi # end of overwriting check
if test -f 'st/lmail.mm'
then
echo shar: will not over-write existing file "'st/lmail.mm'"
else
cat << \SHAR_EOF > 'st/lmail.mm'
a:link68 [s,tem[d:]] mail.68k=gemstart,mailhost,mail,lmail,utllib,osbind,gemlib,dmymath
d:relmod mail
del mail.68K
SHAR_EOF
fi # end of overwriting check
if test -f 'st/ndir.c'
then
echo shar: will not over-write existing file "'st/ndir.c'"
else
cat << \SHAR_EOF > 'st/ndir.c'
/*
* Program: ndir.c
* Facility:
* Directory reading support for the atari st
*/
#define DEF_NDIR
#include <osbind.h>
#include <stdio.h>
#include <ndir.h>
#ifndef TRUE
#define TRUE (-1)
#define FALSE (0)
#endif
#define BSLASH '\\'
#define SLASH '/'
DIR DtaBuff; /* used by GEMDOS for Fsfirst/Fsnext */
short FirstSearch; /* used to first call to readdir */
struct direct dentry; /* portable directory structure */
DIR *opendir( filename )
char *filename;
{
int status;
char *cp1,*cp2;
Fsetdta( &DtaBuff );
FirstSearch = TRUE;
/*
* Copy filename into FilePath buffer and convert forward slashs
* to backward slashes.
* Also make sure path terminates in a back slash
*/
cp1 = DtaBuff.FilePath;
cp2 = filename;
while (*cp2 != '\0')
{
*cp1++ = (*cp2 == SLASH) ? BSLASH : *cp2;
cp2++;
}
if ( *(cp1-1) != BSLASH ) /* enforce trailing back slash */
{
*cp1++ = BSLASH;
}
*cp1 = '\0'; /* add trailing zero */
strcat( DtaBuff.FilePath, "*.*" );
status = Fsfirst( DtaBuff.FilePath, 0 );
if ( status != 0 ) return( (DIR *)NULL );
return( &DtaBuff );
}
struct direct *readdir( dirp )
DIR *dirp;
{
int status;
if ( FirstSearch )
{
FirstSearch = FALSE;
dentry.d_ino = 0L;
dentry.d_reclen = 264;
dentry.d_namlen = strlen( dirp->FileName );
strcpy( dentry.d_name, dirp->FileName );
return( &dentry );
}
Fsetdta( dirp );
if (( status = Fsnext() ) != 0 )
return( (struct direct *)NULL );
dentry.d_ino = 0L;
dentry.d_reclen = 264;
dentry.d_namlen = strlen( dirp->FileName );
strcpy( dentry.d_name, dirp->FileName );
return( &dentry );
}
void closedir( dirp )
DIR *dirp;
{
return;
}
SHAR_EOF
fi # end of overwriting check
if test -f 'st/ndir.h'
then
echo shar: will not over-write existing file "'st/ndir.h'"
else
cat << \SHAR_EOF > 'st/ndir.h'
/* @(#)ndir.h 1.4 4/16/85 */
/* Modified for the atari st series 5/4/87 */
#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
#define DIRSIZ(dp) \
((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
/*
* Definitions for library routines operating on directories.
*/
/* Structure of a directory entry under GEMDOS */
typedef struct _dirdesc
{
char Reserved[21];
char FileAttr;
int CreateTime;
int CreateDate;
long FileSize;
char FileName[14];
char FilePath[256];
} DIR;
#ifndef NULL
#define NULL 0L
#endif
#ifndef DEF_NDIR
extern DIR *opendir();
extern struct direct *readdir();
extern void closedir();
#endif
SHAR_EOF
fi # end of overwriting check
if test -f 'st/printmsg.c'
then
echo shar: will not over-write existing file "'st/printmsg.c'"
else
cat << \SHAR_EOF > 'st/printmsg.c'
#include <stdio.h>
#include <string.h>
extern FILE *logfile;
extern int debuglevel;
extern int remote;
#define MASTER 1
/*\f
*/
/*
* p r i n t m s g
*
* Print error message on standard output if not remote.
*/
/*VARARGS1*/
printmsg(level, fmt, a1, a2, a3, a4, a5)
int level;
char *fmt;
char *a1, *a2, *a3, *a4, *a5;
{
char msg[256];
if ( debuglevel > level ) {
sprintf( msg, fmt, a1, a2, a3, a4, a5 );
strcat( msg, "\n" );
if ( remote == MASTER )
fputs( msg, stdout );
fputs( msg, logfile );
}
}
SHAR_EOF
fi # end of overwriting check
if test -f 'st/readme.st'
then
echo shar: will not over-write existing file "'st/readme.st'"
else
cat << \SHAR_EOF > 'st/readme.st'
This file contains the Atari ST specific files.
I have done all the compilation using the Alcyon C versin 4.14a compiler.
The disks were layed out with all the sources and objects on the A drive and
the compiler on the D drive.
Problems with the Atari ST code:
- there is a problem in the getsystem(), sysend() states such that
if there is more than one system in the systems file then the
program may bomb bomb (bus error?)
Files included in this shar script:
On the atari these files should be placed in the
\local directory or the .h files will need to be
edited.
dirsubs.c - file and directory name manipulation
dmymath.c - dummy floating point routines to fake out linker
genv.c - load enviroment strings
getenv.c - get and enviroment string
getone.c - get one character without echo
host.c - host specific main program
inoutpth.c - file name conversion
ndir.c - directory manipulation routines
printmsg.c - print message to log file
time.c - date/time conversion routines
uusup.c - uu support routines
The following files belong in the ./local dirctory and should
be moved there with the leading z stripped off.
zdcp.h - main include file for uu
zmailhost.c - host specific mail main program
zuuhost.c - host specific uu main program
zgenv.h - definitions for enviroment variables
zhost.h - host specific definitions
zndir.h - directory manipulation routines header
ztime.h - time routine header
The following script files are included as examples on how to compile
the sources. They are for the CM command shell.
c.mm - compile script for alcyon C (file is in A:\)
cu.mm - compile script for alcyon C (file is in A:\atari\)
env.mm - define enviroment script
ldcp.mm - link uu.prg
lmail.mm - link mail.prg
uuar.mm - create DCPLIB
utar.mm - create UTLLIB
Basic procedure is to:
- compile all the .c files into .o files
- build the DCPLIB with uuar.mm
- build the UTLLIB with utar.mm
- link uu with ldcp.mm
- link mail with lmail.mm
If you have problems feel free to drop me a line. Though I warn you I have
a slow turn around time on questions I will try to get back to you within
a day or two.
------------------------------------------------------------------------------
UUCP: {alberta,uw-beaver,siesmo}!ubc-vision!van-bc!nvanbc!lawrence
SNAIL: 733 Sylvan Ave., North Vancouver, B.C., Canada, V7R 2E8
PHONE: 1-604-736-9241 (09:00-17:00 PDT)
SHAR_EOF
fi # end of overwriting check
if test -f 'st/shell.c'
then
echo shar: will not over-write existing file "'st/shell.c'"
else
cat << \SHAR_EOF > 'st/shell.c'
SHAR_EOF
fi # end of overwriting check
if test -f 'st/startup.mm'
then
echo shar: will not over-write existing file "'st/startup.mm'"
else
cat << \SHAR_EOF > 'st/startup.mm'
remenv A:\
setenv CONFDIR A:\LIB
setenv MAILDIR A:\SPOOL\MAIL
setenv PUBDIR A:\SPOOL\UUCPPUBL
setenv SPOOLDIR A:\SPOOL\UUCP
setenv NODENAME test
setenv USERNAME lawerence
setenv SPEED 9600
setenv DEVICE AUX:
SHAR_EOF
fi # end of overwriting check
if test -f 'st/time.c'
then
echo shar: will not over-write existing file "'st/time.c'"
else
cat << \SHAR_EOF > 'st/time.c'
/*
* time(), ctime(), localtime(), sleep()
*
*/
#include <osbind.h>
#include <time.h>
#define NULL 0
long *_hz200 = (long *)0x0004ba; /* address of system 200 hz clk */
long _prtime;
/*
* read200hz() - read the system 200hz clock
*
* Must be a separate routine since it is called in supervisor mode
*
*/
void _read200hz()
{
_prtime = *_hz200;
}
long time( tloc )
long *tloc;
{
long t;
Supexec( _read200hz );
t = _prtime / 200L;
if ( tloc != (long *)NULL ) *tloc = t;
return( t );
}
/*
* ctime(clock) - Return the time as DDD MMM dd hh:mm:ss YYYY\n\0
*
* Since I don't have a working time() call just now I ignore the clock
* and simply return the current date and time. This is all that this
* program requires anyway.
*/
char _timearr[26];
char *_Months =
"Jan\0Feb\0Mar\0Apr\0May\0Jun\0Jul\0Aug\0Sep\0Oct\0Nov\0Dec\0";
char *ctime( clock )
long *clock;
{
short date;
short time;
date = Tgetdate(); /* Get date from DOS */
time = Tgettime(); /* Get time from DOS */
sprintf( _timearr, "%.3s %.3s %02d %02d:%02d:%02d %04d\n",
" ",
_Months + ((((date>>5) & 0xF) - 1) << 2),
(date & 0x1F),
(time >> 10), (time >> 4) & 0x3F, (time & 0xF) << 1,
(date >> 9) + 1980 );
return( _timearr );
}
/*
* localtime() - Return tm structure.
*
* Since I don't have a working time() call just now I ignore the clock
* and simply return the current date and time. This is all that this
* program requires anyway. Note: wday, yday and idist not implemented.
*/
struct tm _TMstruct;
struct tm *localtime( clock )
long *clock;
{
unsigned short date;
unsigned short time;
date = Tgetdate(); /* Get date from DOS */
time = Tgettime(); /* Get time from DOS */
_TMstruct.tm_sec = ( time & 0xF ) << 1;
_TMstruct.tm_min = ( time >> 4 ) & 0x3F;
_TMstruct.tm_hour= ( time >> 10) & 0x0F;
_TMstruct.tm_mday= ( date & 0x1F );
_TMstruct.tm_mon = ( date >> 5 ) & 0xF;
_TMstruct.tm_year= ( date >> 9 ) + 80;
_TMstruct.tm_wday= 0;
_TMstruct.tm_yday= 0;
_TMstruct.tm_isdst= 0;
return( &_TMstruct );
}
/*
* sleep() - wait n seconds
*
* Simply delay until n seconds have passed
*
*/
void sleep(n)
unsigned int n;
{
unsigned long i;
i = (unsigned long)time((long *)NULL);
while ( ( (unsigned long)time((long *)NULL) - i ) < n ) ;
}
SHAR_EOF
fi # end of overwriting check
if test -f 'st/utar.mm'
then
echo shar: will not over-write existing file "'st/utar.mm'"
else
cat << \SHAR_EOF > 'st/utar.mm'
a:ar68 rv d:\utllib dirsubs.o genv.o printmsg.o ndir.o getenv.o fgets.o getone.o inoutpth.o shell.o time.o
SHAR_EOF
fi # end of overwriting check
if test -f 'st/uu.mm'
then
echo shar: will not over-write existing file "'st/uu.mm'"
else
cat << \SHAR_EOF > 'st/uu.mm'
D:UU -R1 -X10 -SVAN-BC
SHAR_EOF
fi # end of overwriting check
if test -f 'st/uuar.mm'
then
echo shar: will not over-write existing file "'st/uuar.mm'"
else
cat << \SHAR_EOF > 'st/uuar.mm'
del d:dcplib
a:ar68 rv d:\dcplib dcp.o dcpsys.o dcpgpkt.o dcpxfer.o
del a:dcplib
copy d:dcplib a:
del d:dcplib
SHAR_EOF
fi # end of overwriting check
if test -f 'st/uusup.c'
then
echo shar: will not over-write existing file "'st/uusup.c'"
else
cat << \SHAR_EOF > 'st/uusup.c'
/*
* atari st system specific subroutines for uu
*
* these are included into uuhost.c during compile
*/
#include <dcp.h>
struct
{
char *baud;
int baudidx;
} BaudStr[] = { "300", B300,
"1200", B1200,
"2400", B2400,
"4800", B4800,
"9600", B9600,
"19200", B19200,
"-1", -1
};
/* some global variables */
char st_ibuf[IBUFSIZ]; /* our own input buffer */
char st_obuf[OBUFSIZ]; /* and our own output buffer */
/* most of the Iorec() stuff was redone by Martin Minow (thanks) */
IOREC *st_sysr; /* ptr to system rs232 record */
IOREC st_savr; /* to save system rs232 record */
IOREC st_myiorec;
unsigned long old_rsconf;
int old_ucr, old_rsr, old_tsr, old_scr;
int st_baud = B9600; /* default baud rate */
/*
* r_count_remaining() - Access the i/o structures and find out how many
* characters there are in the input ring buffer.
*/
int r_count_remaining()
{
IOREC *ReadPort;
int Diff;
ReadPort = (IOREC *)Iorec(0);
Diff = ReadPort->in.ibuftl - ReadPort->in.ibufhd;
if ( Diff < 0 )
Diff = IBUFSIZ - abs( Diff );
return( Diff );
}
/*
* Read/Write I/O processing
*/
/*
* openline - Open the communication line for use with dcp.
*/
openline( name, baud )
char *name, *baud;
{
register int i;
st_myiorec.in.ibuf = st_ibuf;
st_myiorec.in.ibufsize = IBUFSIZ;
st_myiorec.in.ibufhd = st_myiorec.in.ibuftl = 0;
st_myiorec.in.ibuflow = IBUFSIZ / 4;
st_myiorec.in.ibuflow = (IBUFSIZ / 4 ) * 3;
st_myiorec.out.ibuf = st_ibuf;
st_myiorec.out.ibufsize = OBUFSIZ;
st_myiorec.out.ibufhd = st_myiorec.out.ibuftl = 0;
st_myiorec.out.ibuflow = OBUFSIZ / 4;
st_myiorec.out.ibuflow = (OBUFSIZ / 4 ) * 3;
for (i=0; BaudStr[i].baudidx != -1; i++ )
if ( strcmp( baud, BaudStr[i].baud) == 0 )
{
st_baud = BaudStr[i].baudidx;
break;
}
/*
* set up our own rs232 input and output buffers
*/
st_sysr = (IOREC *)Iorec(0);
st_savr = *st_sysr; /* Save system buffer */
*st_sysr = st_myiorec; /* Set my io buffer */
/*
* Saving the old Rsconf() parameters, and
* adding the 2 Vsync() calls was done by Martin Minow.
*
* Rsconf(baud, ctrl, usr, rsr, tsr, scr):
* baud New line speed
* ctrl UART control register: 2 stop bits, match speed
* rsr Receiver on
* tsr Transmitter on
* scr Synchronous register ignored.
* Rsconf returns the "old" values.
*/
printf("Setting Com port - speed = %d\n", st_baud);
old_rsconf = Rsconf(st_baud, NOFLOW, UCR, RSR, TSR, SCR);
old_ucr = (old_rsconf >> RS_UCR_SHIFT) & 0xFF;
old_rsr = (old_rsconf >> RS_RSR_SHIFT) & 0xFF;
old_tsr = (old_rsconf >> RS_TSR_SHIFT) & 0xFF;
old_scr = (old_rsconf >> RS_SCR_SHIFT) & 0xFF;
/*
* Magic.
*/
Vsync(); /* Short delay while */
Vsync(); /* The UART settles */
return ( 0 );
}
/*
* closeline - Restore the communication line to the way we found it.
*/
void closeline()
{
/* restore the system's i/o record */
*st_sysr = st_savr;
/* Replace old RS232 parameters */
Rsconf(B9600, 1, old_ucr, old_rsr, old_tsr, old_scr);
}
/*
* sread( buf, num, timeout ) - Read num characters within timeout
*/
int sread( buf, num, timeout )
char *buf;
int num, timeout;
{
int count,test;
unsigned char *cp;
if (debuglevel > 13)
fputc( '[', stderr );
printmsg(15, "sread: num: %d timeout: %d", num, timeout );
count = xread( buf, num, timeout );
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 );
}
/*
* swrite( buf, num ) - Write num characters to the output port
*/
int swrite( buf, num )
int num;
char *buf;
{
int count;
char *cp;
if (debuglevel > 14)
{
fputc( '{', stderr );
count = num;
cp = buf;
while ( count-- )
fprintf( stderr, isprint(*cp)? "{%c}":"{%02x}", *cp++ );
fputc( '}', stderr );
}
count = xwrite( buf, num );
return( count );
}
/*
* read buffer - low level
*/
int xread( buf, num, timeout )
char buf[];
int num, timeout;
{
long jtime;
int i,jj,jd;
jtime = time((long *)NULL);
while (TRUE)
{
jj = r_count_remaining();
if ( jj >= num )
{
for ( i=0; i < num; i++ )
{
buf[i] = Bconin(AUX) & 0xFF;
}
return( jj );
}
else
{
jd = time((long *)NULL) - jtime;
if ( jd >= timeout )
return( jj );
}
}
}
/*
* xwrite( buf, n ) - Write n bytes froum the buffer to the port
*/
int xwrite( buf, n )
char buf[];
int n;
{
register int i;
for ( i=0; i<n; i++ )
{
Bconout( AUX, buf[i] );
}
return( n );
}
void SIOSpeed( s )
char *s;
{
return;
}
/*
* Command shell processing
*
* Pass a command the the host operating system to execute.
*
*/
/* shell
*/
notimp( argc, argv )
int argc;
char **argv;
{
printf( "%s not implemented\n", argv[0]);
}
shell( command, inname, outname, errname )
char * command;
char * inname;
char * outname;
char * errname;
{
char *argvec[50]; /* array of pointers to make up arg list */
char hostname[32]; /* place to put munged file name */
char curdir[64]; /* place to remember current directory */
int rmail(); /* mail program */
int rnews(); /* news program */
int (*proto)(); /* variable containing program pointer */
int argc; /* will contain the number of args */
char **argv; /* will contain pointer to arg vector */
int args; /* temporary for copy of argc */
/*
* Break up the command line into an argument vector
*/
argc = getargs( command, argvec );
argv = argvec;
if ( debuglevel > 5 )
{
args = argc;
while ( args )
fprintf( stderr, "arg: %d %s\n", args--, *argv++ );
argv = argvec;
}
/*
* Initialize to function which will print 'not implemented
* then see if the command is one we know about and if so set
* up out function pointer.
*/
proto = notimp;
if ( strcmp( *argv, "rmail" ) == SAME )
proto = rmail;
else if ( strcmp( *argv, "rnews" ) == SAME ) {
proto = rnews;
}
*hostname = '\0';
if ( *inname != '\0' )
importpath( hostname, inname );
if ( *hostname != '\0' ) {
fprintf( stderr, "reopening stdin as %s\n", hostname);
fprintf( stderr, "curdir: %s\n", getcwd(curdir, 0)); /* */
fclose( stdin );
if ( fopen( hostname, "r" ) == (FILE *)NULL ) /* */
/* if ( freopen( hostname, "r", stdin ) == (FILE *)NULL ) /* */
{
fprintf( stderr, "Couldn't open %s, %d\n", hostname, errno );
exit(-1);
}
}
(proto)( argc, argv );
chdir( curdir );
fclose( stdin );
if ( fopen( "CON:", "r" ) == (FILE *)NULL )
{
fprintf( stderr, "Couldn't reopen CON:" );
}
/* freopen( "CON:", "r", stdin ); /* */
}
/*\f
*/
/*
*
* login (for slave in PC mode)
* Real dumb login handshake
*/
login()
{
char logmsg[132];
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;
return('I');
}
SHAR_EOF
fi # end of overwriting check
if test -f 'st/zdcp.h'
then
echo shar: will not over-write existing file "'st/zdcp.h'"
else
cat << \SHAR_EOF > 'st/zdcp.h'
/* DCP a uucp clone. Copyright Richard H. Lamb 1985,1986,1987 */
#include <stdio.h> /* Standard UNIX definitions */
#include "host.h" /* Host specific definitions */
FILE * FOPEN();
int CREAT();
#define SYSTEMS "systems"
#define LOGFILE "LOGFILE"
#define SYSLOG "SYSLOG"
#define MSGTIME 20
#define MAXPACK 256
#define ACK 4 /* general definitions */
#define NAK 2
#define DATA 0
#define CLOSE 1
#define ERROR 10
#define EMPTY 11
#define SLAVE 0
#define MASTER 1
#ifndef TRUE
#define TRUE (-1)
#define FALSE 0
#endif
#define SAME 0
#define FAILED -1
#define OK 0
/* L.sys field defines */
#define FLD_REMOTE 0
#define FLD_CCTIME 1
#define FLD_DEVICE 2
#define FLD_TYPE 3
#define FLD_SPEED 4
#define FLD_PROTO 5
#define FLD_EXPECT 6
#define FLD_SEND 7
/**/
typedef int (*procref)();
typedef struct {
char type;
procref a;
procref b;
procref c;
procref d;
} Proto;
/* the various protocols available. Add here for others */
extern procref getpkt, sendpkt, openpk, closepk;
extern int ggetpkt(), gsendpkt(), gopenpk(), gclosepk();
/*
extern int kgetpkt(), ksendpkt(), kopenpk(), kclosepk();
extern int rgetpkt(), rsendpkt(), ropenpk(), rclosepk();
extern int tgetpkt(), tsendpkt(), topenpk(), tclosepk();
*/
/**/
extern int pktsize; /* packet size for this pro*/
extern FILE *logfile; /* system log file */
extern FILE *syslog; /* system log file */
extern FILE *fw; /* cfile pointer */
extern char cfile[80]; /* work file pointer */
extern int remote; /* -1 means we're remote*/
extern int findwork;
extern int msgtime; /* timout setting */
extern char fromfile[132];
extern char hostfile[132]; /* host version of fromfile */
extern char tofile[132];
extern char state; /* present state */
extern int fp; /* current disk file ptr */
extern int size; /* nbytes in buff */
extern FILE *fsys;
extern char Rmtname[20];
extern char rmtname[20];
extern char *cctime;
extern char proto[5];
extern char sysline[BUFSIZ];
extern char s_systems[64];
extern char s_logfile[64];
extern char s_syslog[64];
extern char *flds[60];
extern int kflds;
extern int debuglevel; /* debugging flag */
extern unsigned int checksum();
extern char *index();
extern char *rindex();
extern char *curdir;
SHAR_EOF
fi # end of overwriting check
if test -f 'st/zgenv.h'
then
echo shar: will not over-write existing file "'st/zgenv.h'"
else
cat << \SHAR_EOF > 'st/zgenv.h'
/* genv.c
copyright (C) 1987 Stuart Lynne
Copying and use of this program are controlled by the terms of the
Free Software Foundations GNU Emacs General Public License.
version 0.1 March 31/1987
environment variables
The following evironment variables are defined:
MAILBOX current user's mailbox, "sl"
NAME current user's name, "Stuart Lynne"
DOMAIN domain of this machine, "mac.van-bc.can"
MAILDIR where mail is kept, "/usr/mail"
CONFDIR where config data is kept, "/usr/lib/uucp"
SPOOLDIR where spooled files are "/usr/spool/uucp"
LOGDIR where log file are placed "/usr/spool/uucp"
PUBDIR public spool directory "/usr/spool/uucppublic"
NEWSSDIR news spool directory "/usr/spool/rnews"
TEMPDIR where temp files are created "/tmp"
HOME where uses private files are "/usr/sl"
MAILSERVICE who do we send remote mail "van-bc"
NODENAME what is our local nodename "slmac"
DEVICE what is the default device ".a"
SPEED what is the default speed "1200"
*/
#define MAILBOX "MAILBOX"
#define NAME "NAME"
#define DOMAIN "DOMAIN"
#define MAILDIR "MAILDIR"
#define HOME "HOME"
#define CONFDIR "CONFDIR"
#define SPOOLDIR "SPOOLDIR"
#define LOGDIR "LOGDIR"
#define PUBDIR "PUBDIR"
#define NEWSSDIR "RNEWSDIR"
#define TEMPDIR "TEMPDIR"
#define MAILSERVICE "MAILSERVICE"
#define NODENAME "NODENAME"
#define DEVICE "DEVICE"
#define SPEED "SPEED"
extern char *mailbox;
extern char *name;
extern char *domain;
extern char *maildir;
extern char *home;
extern char *confdir;
extern char *spooldir;
extern char *newssdir;
extern char *pubdir;
extern char *tempdir;
extern char *mailserv;
extern char *nodename;
extern char *device;
extern char *speed;
void loadenv();
void genv();
void mkfilename();
SHAR_EOF
fi # end of overwriting check
if test -f 'st/zzgenv.h'
then
echo shar: will not over-write existing file "'st/zzgenv.h'"
else
cat << \SHAR_EOF > 'st/zzgenv.h'
/* genv.c
copyright (C) 1987 Stuart Lynne
Copying and use of this program are controlled by the terms of the
Free Software Foundations GNU Emacs General Public License.
version 0.1 March 31/1987
environment variables
The following evironment variables are defined:
MAILBOX current user's mailbox, "sl"
NAME current user's name, "Stuart Lynne"
DOMAIN domain of this machine, "mac.van-bc.can"
MAILDIR where mail is kept, "/usr/mail"
CONFDIR where config data is kept, "/usr/lib/uucp"
SPOOLDIR where spooled files are "/usr/spool/uucp"
LOGDIR where log file are placed "/usr/spool/uucp"
PUBDIR public spool directory "/usr/spool/uucppublic"
NEWSSDIR news spool directory "/usr/spool/rnews"
TEMPDIR where temp files are created "/tmp"
HOME where uses private files are "/usr/sl"
MAILSERVICE who do we send remote mail "van-bc"
NODENAME what is our local nodename "slmac"
DEVICE what is the default device ".a"
SPEED what is the default speed "1200"
*/
#define MAILBOX "MAILBOX"
#define NAME "NAME"
#define DOMAIN "DOMAIN"
#define MAILDIR "MAILDIR"
#define HOME "HOME"
#define CONFDIR "CONFDIR"
#define SPOOLDIR "SPOOLDIR"
#define LOGDIR "LOGDIR"
#define PUBDIR "PUBDIR"
#define NEWSSDIR "RNEWSDIR"
#define TEMPDIR "TEMPDIR"
#define MAILSERVICE "MAILSERVICE"
#define NODENAME "NODENAME"
#define DEVICE "DEVICE"
#define SPEED "SPEED"
extern char *mailbox;
extern char *name;
extern char *domain;
extern char *maildir;
extern char *home;
extern char *confdir;
extern char *spooldir;
extern char *newssdir;
extern char *pubdir;
extern char *tempdir;
extern char *mailserv;
extern char *nodename;
extern char *device;
extern char *speed;
void loadenv();
void genv();
void mkfilename();
SHAR_EOF
fi # end of overwriting check
if test -f 'st/zhost.h'
then
echo shar: will not over-write existing file "'st/zhost.h'"
else
cat << \SHAR_EOF > 'st/zhost.h'
/* host.h
*/
#include "local\host.h"
SHAR_EOF
fi # end of overwriting check
if test -f 'st/zzhost.h'
then
echo shar: will not over-write existing file "'st/zzhost.h'"
else
cat << \SHAR_EOF > 'st/zzhost.h'
/*
* host.h
*/
#include "atari\host.h"
SHAR_EOF
fi # end of overwriting check
if test -f 'st/zmailhos.c'
then
echo shar: will not over-write existing file "'st/zmailhos.c'"
else
cat << \SHAR_EOF > 'st/zmailhos.c'
/* mailhost.c
*/
#define MAIN mailmain
#include "local\host.c"
SHAR_EOF
fi # end of overwriting check
if test -f 'st/zzmailhost.c'
then
echo shar: will not over-write existing file "'st/zzmailhost.c'"
else
cat << \SHAR_EOF > 'st/zzmailhost.c'
/* mailhost.c
*/
#define MAIN mailmain
#include "atari\host.c"
SHAR_EOF
fi # end of overwriting check
if test -f 'st/zndir.h'
then
echo shar: will not over-write existing file "'st/zndir.h'"
else
cat << \SHAR_EOF > 'st/zndir.h'
/* @(#)ndir.h 1.4 4/16/85 */
#include "local\ndir.h"
SHAR_EOF
fi # end of overwriting check
if test -f 'st/zzndir.h'
then
echo shar: will not over-write existing file "'st/zzndir.h'"
else
cat << \SHAR_EOF > 'st/zzndir.h'
/* @(#)ndir.h 1.4 4/16/85 */
/* Modified for the atari st series 5/4/87 */
#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
#define DIRSIZ(dp) \
((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
/*
* Definitions for library routines operating on directories.
*/
/* Structure of a directory entry under GEMDOS */
typedef struct _dirdesc
{
char Reserved[21];
char FileAttr;
int CreateTime;
int CreateDate;
long FileSize;
char FileName[14];
char FilePath[256];
} DIR;
#ifndef NULL
#define NULL 0L
#endif
#ifndef DEF_NDIR
extern DIR *opendir();
extern struct direct *readdir();
extern void closedir();
#endif
SHAR_EOF
fi # end of overwriting check
if test -f 'st/zztime.h'
then
echo shar: will not over-write existing file "'st/zztime.h'"
else
cat << \SHAR_EOF > 'st/zztime.h'
/* time.h */
struct tm {
int tm_sec; /* time of day, seconds */
int tm_min; /* time of day, minutes */
int tm_hour; /* time of day, hours (24 hour clock) */
int tm_mday; /* day of month (1-31) */
int tm_mon; /* month of year (0-11) */
int tm_year; /* year - 1900 */
int tm_wday; /* day of week (Sunday = 0) */
int tm_yday; /* day of year (0-365) */
int tm_isdst; /* non-0 if DST in effect */
};
extern struct tm *localtime();
extern char *ctime();
SHAR_EOF
fi # end of overwriting check
if test -f 'st/zuuhost.c'
then
echo shar: will not over-write existing file "'st/zuuhost.c'"
else
cat << \SHAR_EOF > 'st/zuuhost.c'
/* uuhost.c
*/
#define MAIN dcpmain
#define CWDSPOOL
#include "local\host.c"
SHAR_EOF
fi # end of overwriting check
# End of shell archive
exit 0
--
{ubc-vision,uunet}!van-bc!sl Stuart.Lynne@van-bc.uucp