Article View: net.micro.atari16
Article #958GEM-Kermit (Part 5 of 6)
From: axel
Date: Fri, 20 Jun 1986 03:06
Date: Fri, 20 Jun 1986 03:06
1208 lines
47883 bytes
47883 bytes
#! /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:
# stkget.c
# stkgmo.c
# stkgmt.c
# stkinc.h
# stkobj.h
# stkorsc.uuc
# This archive created: Fri Jun 20 02:36:47 1986
export PATH; PATH=/bin:/usr/bin:$PATH
if test -f 'stkget.c'
then
echo shar: "will not over-write existing file 'stkget.c'"
else
cat << \SHAR_EOF > 'stkget.c'
/*
* stkget.c server function GET
* implemted by B. Nebel
*/
#include <osbind.h>
#include <stdio.h>
#include "stkinc.h"
getsw()
{
int result;
flushinput();
spack('R',0,strlen(filnam1),filnam1);
result = recsw();
return (result);
}
SHAR_EOF
fi
if test -f 'stkgmo.c'
then
echo shar: "will not over-write existing file 'stkgmo.c'"
else
cat << \SHAR_EOF > 'stkgmo.c'
/*
* stkgmo.c ATARI ST Kermit GEM interface to option handling
*/
#include <osbind.h> /* TOS binding */
#include <stdio.h> /* common I/O defs */
#include <obdefs.h> /* common Object definitions */
#include <gemdefs.h> /* common GEM definitions */
#include "stkinc.h" /* common KERMIT defintions */
#include "stkobj.h" /* KERMIT object definitions */
extern FILE *fopenb(),*fopen();
typedef struct opt_entry {
int *kopt_addr;
int kopt_save;
int kopt_init;
int kopt_rindex;
int kopt_rsubindex;
int kopt_form;
} KOPT;
KOPT kopts [] = {
{&rpsiz, TRUE, MAXPACKSIZ, KERPARAM, KPRPCKL, 'd'},
{&spsiz, TRUE, MAXPACKSIZ, KERPARAM, KPSPCKL, 'd'},
{&spad, TRUE, 0, KERPARAM, KPPADL, 'd'},
{&rtimint, TRUE, YOURTIME, KERPARAM, KPRTIMO, 'd'},
{&stimint, TRUE, MYTIME, KERPARAM, KPSTIMO, 'd'},
{&maxtry, TRUE, MAXTRY, KERPARAM, KPMAXTRY, 'd'},
{&ibmmode, TRUE, TRUE, KERMENU, OHANDSHA, 'x'},
{&padding, TRUE, FALSE, KERMENU, OPADDING, 0},
{&dotimout, TRUE, TRUE, KERMENU, OTIMOUT, 0},
{&debug, FALSE, FALSE, KERMENU, ODEBUG, 0},
{&translog, FALSE, FALSE, KERMENU, OTRANLOG, 0},
{&image, TRUE, FALSE, KERMENU, OBINTRAN, 0},
{&filnamwarn, TRUE, TRUE, KERMENU, OFILWARN, 0},
{&rpcks, TRUE, SOH, KERPARAM, KPRPCKST, 'x'},
{&spcks, TRUE, SOH, KERPARAM, KPSPCKST, 'x'},
{&spadc, TRUE, MYPCHAR, KERPARAM, KPSPADC, 'x'},
{&reol, TRUE, MYEOL, KERPARAM, KPREOL, 'x'},
{&seol, TRUE, MYEOL, KERPARAM, KPSEOL, 'x'},
{&rquote, TRUE, MYQUOTE, KERPARAM, KPRQUOTE, 'c'},
{&squote, TRUE, MYQUOTE, KERPARAM, KPSQUOTE, 'c'},
{&rturnchar, TRUE, MYTURNCHAR, KERPARAM, KPRTURN, 'x'},
{NIL}
};
/*
* look for kermit.opt file
* if not found do default initialization
*/
init_params()
{int ix;
if (!undump_params(KER_INI))
/* no init file file present */
{
for (ix=0; kopts[ix].kopt_addr != NIL; ix++)
*(kopts[ix].kopt_addr) = kopts[ix].kopt_init;
};
for (ix=0; kopts[ix].kopt_addr != NIL; ix++)
if (!kopts[ix].kopt_save)
*(kopts[ix].kopt_addr) = kopts[ix].kopt_init;
}
/*
* read parameters from file
*/
int undump_params(optfilename)
char *optfilename;
{FILE *pf;
int ix;
pf = fopen(optfilename,"r");
if (pf == NIL) return FALSE;
for (ix = 0; kopts[ix].kopt_addr != NIL; ix++)
if (kopts[ix].kopt_save)
fscanf(pf,"%x",kopts[ix].kopt_addr);
fclose(pf);
return TRUE;
}
/*
* save parameters on file
*/
int dump_params(optfilename)
char *optfilename;
{FILE *pf;
int ix;
pf = fopen(optfilename,"w");
if (pf == NIL) return FALSE;
for (ix = 0; kopts[ix].kopt_addr != NIL; ix++)
if (kopts[ix].kopt_save)
fprintf(pf,"%x\n",*(kopts[ix].kopt_addr));
fclose(pf);
return TRUE;
}
/*
* handle clicking on the option menu
*/
do_option(option_ix)
int option_ix;
{char fn[80];
OBJECT *obj_addr;
int ix;
switch (option_ix)
{case OPARSAVE:
displ_object(KRODOSAV,-1,0,MOPTION,&obj_addr);
if (fgetfilename(kpathname,KER_INI,fn))
if (!dump_params(fn))
displ_alert(1,KRINIERR);
else displ_alert(1,KRSAVDON);
destroy_object(KRODOSAV,-1,0,MOPTION);
break;
case OPARGET:
displ_object(KRODOGET,-1,0,MOPTION,&obj_addr);
if (fgetfilename(kpathname,KER_INI,fn))
if (!undump_params(fn))
displ_alert(1,KRFILNEX);
else
displ_alert(1,KRGETDON);
destroy_object(KRODOGET,-1,0,MOPTION);
break;
case OPARCHAN:
opt_dialog();
break;
case ODEBUG:
if (debug)
{
fclose(deb);
displ_alert(1,KRDBCLSD);
}
else
{
displ_object(KRODODEB,-1,0,MOPTION,&obj_addr);
if (fgetfilename(kpathname,KER_DEB,fn))
{
deb = fopen(fn,"w");
if (deb == NIL)
{
debug = TRUE;
displ_alert(1,KERRFOPN);
}
else deblevel = displ_alert(1,KRDEBDON);
}
else
debug = TRUE;
destroy_object(KRODODEB,-1,0,MOPTION);
};
break;
case OTRANLOG:
if (translog)
{
fclose(log);
displ_alert(1,KRTFCLSD);
}
else
{
displ_object(KRODOTF,-1,0,MOPTION,&obj_addr);
if (fgetfilename(kpathname,KER_LOG,fn))
{
log = fopen(fn,"w");
if (log == NIL)
{
translog = TRUE;
displ_alert(1,KERRFOPN);
}
else displ_alert(1,KRTFDON);
}
else
translog = TRUE;
destroy_object(KRODOTF,-1,0,MOPTION);
};
break;
}; /* switch */
for (ix = 0; kopts[ix].kopt_addr != NIL; ix++)
{
if ((kopts[ix].kopt_rindex == KERMENU) &&
(kopts[ix].kopt_rsubindex == option_ix))
{
*(kopts[ix].kopt_addr) = !(*(kopts[ix].kopt_addr));
};
};
check_options();
}
/*
* set check marks in menu
*/
check_options()
{int ix;
long addr;
rsrc_gaddr(R_TREE,KERMENU,&addr);
for (ix = 0; kopts[ix].kopt_addr != NIL; ix++)
if (kopts[ix].kopt_rindex == KERMENU)
menu_icheck(addr,kopts[ix].kopt_rsubindex,
*(kopts[ix].kopt_addr));
};
/*
* set option values individually
*/
opt_dialog()
{char *valsp;
int ix, val, minoix, res;
OBJECT *opp;
rsrc_gaddr(R_TREE,KERPARAM,&opp);
/* update parameter table with values */
for (ix = 0; kopts[ix].kopt_addr != NIL; ix++)
if (kopts[ix].kopt_rindex == KERPARAM)
{valsp = opp[kopts[ix].kopt_rsubindex].ob_spec->te_ptext;
val = *(kopts[ix].kopt_addr);
switch (kopts[ix].kopt_form)
{case 'c': sprintf(valsp,"%c",val); break;
case 'd': sprintf(valsp,"%2d",val); break;
case 'x': sprintf(valsp,"%02x",val);break;
}
};
/* search for start object */
minoix = 32000;
for (ix = 0; kopts[ix].kopt_addr != NIL; ix++)
if (kopts[ix].kopt_rindex == KERPARAM)
minoix = ((minoix < kopts[ix].kopt_rsubindex) ?
minoix : (kopts[ix].kopt_rsubindex));
/* display object and and analyze inputs */
change_state(opp,KPEXITOK,NORMAL);
change_state(opp,KPABORT,NORMAL);
displ_object(KERPARAM,-1,-1,MOPTION,&opp);
if (form_do(opp,minoix) == KPEXITOK)
for (ix = 0; kopts[ix].kopt_addr != NIL; ix++)
if (kopts[ix].kopt_rindex == KERPARAM)
{valsp = opp[kopts[ix].kopt_rsubindex].ob_spec->te_ptext;
if (*valsp != '\0')
{switch (kopts[ix].kopt_form)
{case 'c': val = *valsp; res = 1; break;
case 'd': res = sscanf(valsp,"%d",&val); break;
case 'x': res = sscanf(valsp,"%x",&val); break;
};
if (res > 0)
*(kopts[ix].kopt_addr) = val;
};
};
destroy_object(KERPARAM,-1,-1,MOPTION);
}
SHAR_EOF
fi
if test -f 'stkgmt.c'
then
echo shar: "will not over-write existing file 'stkgmt.c'"
else
cat << \SHAR_EOF > 'stkgmt.c'
/*
* stkgmt.c ATARI ST Kermit: GEM interface to Transfer functions
*/
#include <osbind.h> /* TOS bindings */
#include <stdio.h> /* common I/O defintions */
#include <obdefs.h> /* common object defintions */
#include <gemdefs.h> /* GEM defintions */
#include "stkinc.h" /* common KERMIT defintions */
#include "stkobj.h" /* KERMIT object definitions */
OBJECT
*optr, /* pointer to an object */
*displo; /* pointer to the Transfer Display Object */
int old_n, /* old packet number */
old_n_total, /* old total count */
old_bps, /* old bps */
old_timcnt, /* old timeout count */
old_nakcnt; /* old nak counter */
long int
old_bytecnt; /* old byte count */
/*
* handle transfer commands
*/
do_transfer(menuix)
int menuix;
{
int ready, doit;
char savfnam[13];
rsrc_gaddr(R_TREE,KERDISPL,&displo);
tvar_init();
switch (menuix)
{
case TPUT:
displo[KDSENDS].ob_flags &= ~HIDETREE;
displ_object(KRTDOPUT,-1,0,MTRANS,&optr);
doit = fsetfilename(gpathname,filnam);
strcpy(savfnam,filnam);
destroy_object(KRTDOPUT,-1,0,MTRANS);
goto do_send;
case TSEND:
displo[KDSEND].ob_flags &= ~HIDETREE;
displ_object(KRTDOSND,-1,0,MTRANS,&optr);
doit = fsetfilename(gpathname,filnam);
strcpy(savfnam,filnam);
destroy_object(KRTDOSND,-1,0,MTRANS);
do_send:
if (!doit) return;
dt_files(FALSE);
displ_object(KERDISPL,-1,-1,MTRANS,&displo);
msgall(-1,MSGSNDBG,gpathname,filnam);
if (!f1stfil(filnam))
msgall(KRFILNEX,MSGFILNX);
else
{
fp = NIL;
if (ready = sendsw())
msgall(-1,MSGSNDRD);
else
msgall(-1,MSGSNDFD);
};
break;
case TGET:
rsrc_gaddr(R_TREE,KRTASKG,&optr);
change_state(optr,KRTASKAB,NORMAL);
change_state(optr,KRTASKOK,NORMAL);
displ_object(KRTASKG,-1,-1,MTRANS,&optr);
doit = form_do(optr,KRTGFILN);
destroy_object(KRTASKG,-1,-1,MTRANS);
if (doit == KRTASKAB) return;
strcpy(filnam1,optr[KRTGFILN].ob_spec->te_ptext);
if (strlen(filnam1) == 0) return;
displo[KDRECEIV].ob_flags &= ~HIDETREE;
displ_object(KRTDOGET,-1,0,MTRANS,&optr);
doit = fsetfilename(gpathname,filnam);
strcpy(savfnam,filnam);
destroy_object(KRTDOGET,-1,0,MTRANS);
dt_files(FALSE);
displ_object(KERDISPL,-1,-1,MTRANS,&displo);
msgall(-1,MSGGETBG,filnam1,gpathname,filnam);
fp = NULL;
if (ready = getsw())
msgall(-1,MSGGETRD);
else
msgall(-1,MSGGETFD);
break;
case TRECEIVE:
displo[KDRECEIV].ob_flags &= ~HIDETREE;
displ_object(KRTDOREC,-1,0,MTRANS,&optr);
doit = fsetfilename(gpathname,filnam);
strcpy(savfnam,filnam);
destroy_object(KRTDOREC,-1,0,MTRANS);
if (!doit) return;
dt_files(FALSE);
displ_object(KERDISPL,-1,-1,MTRANS,&displo);
msgall(-1,MSGRECBG,gpathname,filnam);
fp = NULL;
if (ready = recsw())
msgall(-1,MSGRECRD);
else
msgall(-1,MSGRECFD);
break;
case TFINISH:
displo[KDFINISH].ob_flags &= ~HIDETREE;
displ_object(KERDISPL,-1,-1,MTRANS,&displo);
msgall(-1,MSGSRVFI);
if (ready = gencmdsw('F'))
msgall(-1,MSGFINRD);
else
msgall(KSVFERR,MSGFINFD);
break;
case TBYE:
displo[KDBYE].ob_flags &= ~HIDETREE;
displ_object(KERDISPL,-1,-1,MTRANS,&displo);
msgall(-1,MSGSRVBY);
if (ready = gencmdsw('L'))
msgall(-1,MSGBYERD);
else
msgall(KSVBERR,MSGBYEFD);
break;
};
if (ready)
change_state(displo,KRDABORT,DISABLED);
else
change_state(displo,KRDABORT,DISABLED | SELECTED);
redisp_fld(KRDABORT,NIL,NIL);
change_state(displo,KRDRFCTI,DISABLED);
redisp_fld(KRDRFCTI,NIL,NIL);
change_state(displo,KRDRDYOK,NORMAL);
redisp_fld(KRDRDYOK,NIL,NIL);
Cconout(0x07);
form_do(displo,-1);
destroy_object(KERDISPL,-1,-1,MTRANS);
if (fp != NULL) fclose(fp);
strcpy(filnam,savfnam);
}
/* some display utilities for the transfer function */
/*
* access of message strings
* will be used mostly by prtdeb & prtlog
*/
char *msg_string(ix)
int ix;
{
OBJECT *oprt;
rsrc_gaddr(R_TREE,KRMESSS,&oprt);
return (oprt[ix].ob_spec);
}
/*
* initialize transfer variables
* and transfer display object
*/
tvar_init()
{
/* init vars */
numtry = getfile = n = n_total = filecnt = bps = nakcnt = timcnt = 0;
old_n = old_n_total = old_bps = old_nakcnt = old_timcnt = 0;
bytecnt = old_bytecnt = 0L;
fp = NULL;
strcpy(filnam1,"\0");
/* init display object */
change_state(displo,KRDABORT,NORMAL);
change_state(displo,KRDRFCTI,NORMAL);
change_state(displo,KRDRDYOK,DISABLED);
displo[KDSEND].ob_flags |= HIDETREE;
displo[KDSENDS].ob_flags |= HIDETREE;
displo[KDRECEIV].ob_flags |= HIDETREE;
displo[KDRECEIS].ob_flags |= HIDETREE;
displo[KDFINISH].ob_flags |= HIDETREE;
displo[KDBYE].ob_flags |= HIDETREE;
dt_files(FALSE);
dt_packets(FALSE);
}
/*
* update file fields and redisplay
*/
dt_files(dp_change)
int dp_change;
{
char *dest;
char tname[21];
dest = displo[KDFILNAM].ob_spec->te_ptext;
strncpy(tname,filnam,21);
tname[21] = '\0';
sprintf(dest,"%s",tname);
dest = displo[KDCNVFIL].ob_spec->te_ptext;
strncpy(tname,filnam1,21);
tname[21] = '\0';
sprintf(dest,"%s",tname);
sprintf(displo[KDFCNT].ob_spec->te_ptext,"%d",filecnt);
if (dp_change)
{
redisp_fld(KDFILNAM,NIL,NIL);
redisp_fld(KDCNVFIL,NIL,NIL);
redisp_fld(KDFCNT,NIL,NIL);
};
}
/*
* update packet fields and redisplay
*/
dt_packets(dp_change)
int dp_change;
{
sprintf(displo[KDPCNT].ob_spec->te_ptext,"%d",n_total);
sprintf(displo[KDBCNT].ob_spec->te_ptext,"%ld",bytecnt);
sprintf(displo[KDPNUM].ob_spec->te_ptext,"%02x",n);
sprintf(displo[KDBPS].ob_spec->te_ptext,"%d",bps);
sprintf(displo[KDNAKCNT].ob_spec->te_ptext,"%d",nakcnt);
sprintf(displo[KDTIMCNT].ob_spec->te_ptext,"%d",timcnt);
if (dp_change)
{
redisp_fld(KDPCNT,&n_total,&old_n_total);
if (bytecnt != old_bytecnt) redisp_fld(KDBCNT,NIL,NIL);
old_bytecnt = bytecnt;
redisp_fld(KDPNUM,&n,&old_n);
redisp_fld(KDBPS,&bps,&old_bps);
redisp_fld(KDNAKCNT,&nakcnt,&old_nakcnt);
redisp_fld(KDTIMCNT,&timcnt,&old_timcnt);
};
}
/*
* redisplay a field in the transfer display object
*/
redisp_fld(ix,new,old)
int ix;
int *new, *old;
{
int absx, absy;
OBJECT *cobj;
if ((new != NIL) && (old != NIL))
{
if (*new == *old)
return;
else
*old = *new;
};
cobj = &(displo[ix]);
objc_offset(displo,ix,&absx,&absy);
objc_draw(displo,ROOT,MAX_DEPTH,absx,absy,cobj->ob_width,cobj->ob_height);
}
/*
* display an error packet message
*/
displ_pckerr(msg)
char *msg;
{
OBJECT *addr,*krabort;
int maxslen;
char *dest;
rsrc_gaddr(R_TREE,KRABORT,&krabort);
dest = krabort[KRABMESS].ob_spec->te_ptext;
maxslen = strlen(krabort[KRABMESS].ob_spec->te_pvalid) - 1;
strncpy(dest,msg,maxslen);
dest[maxslen] = '\0';
displ_object(KRABORT,-1,-1,-1,&addr);
form_do(addr,-1);
change_state(addr,KRABOK,NORMAL);
destroy_object(KRABORT,-1,-1,-1);
displ_object(KERDISPL,-1,-1,-2,&addr);
}
/*
* wait the specified milli seconds
* and additionally for a click on the ABORT box
* in the display object
*/
sleepwait(msecs)
int msecs;
{
int event, dummy, dummy1, dummy2, mx, my;
event = evnt_multi((MU_TIMER | MU_BUTTON), 1, 1, 1,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
&dummy,
msecs, 0,
&mx, &my,
&dummy, &dummy, &dummy1, &dummy2);
if (MU_BUTTON & event)
if (objc_find(displo, KRDABORT, 1, mx, my) == KRDABORT)
{
change_state(displo,KRDABORT,SELECTED);
redisp_fld(KRDABORT,NIL,NIL);
if (displ_alert(1,KRCONFAB) != 1)
return ('A');
change_state(displo,KRDABORT,NORMAL);
redisp_fld(KRDABORT,NIL,NIL);
return(FALSE);
}
else
if (objc_find(displo, KRDRFCTI, 1, mx, my) == KRDRFCTI)
{
change_state(displo,KRDRFCTI,SELECTED);
redisp_fld(KRDRFCTI,NIL,NIL);
evnt_timer(200,0);
change_state(displo,KRDRFCTI,NORMAL);
redisp_fld(KRDRFCTI,NIL,NIL);
return('T');
}
else
Cconout(0x07);
return(FALSE);
}
SHAR_EOF
fi
if test -f 'stkinc.h'
then
echo shar: "will not over-write existing file 'stkinc.h'"
else
cat << \SHAR_EOF > 'stkinc.h'
/*
* stinc.h ATARI ST kermit includes, defines, and global variable declarations
*/
#define VERSION 1 /* ATARI ST Version number */
#define RELEASE 1 /* Update release */
#define VERDATE "110686"
#ifndef EXTERN
#define EXTERN extern /* global variables are extern in all but one module */
#endif
/* Symbol Definitions */
#define MAXPACKSIZ 94 /* Maximum packet size */
#define FILNAMLEN 80 /* max length of filename */
#define PFILNAMLEN 13 /* length og filename w/o path spec */
#define SOH 1 /* Start of header */
#define ETX 3 /* ^C */
#define LF 10 /* ASCII line feed */
#define CR 13 /* ASCII Carriage Return */
#define SP 32 /* ASCII space */
#define DEL 127 /* Delete (rubout) */
#define DC1 17 /* control-Q */
#define MYPCKSTART SOH /* packet start character */
#define MAXTRY 10 /* Times to retry a packet */
#define MYQUOTE '#' /* Quote character I will use */
#define MYPAD 0 /* Number of padding characters I will need */
#define MYPCHAR 0 /* Padding character I need (NULL) */
#define MYTURNCHAR DC1 /* Usual turn around character */
#define MYEOL CR /* End-Of-Line character I need */
#define MYEBQ 'Y' /* value for 8 bit prefix field */
#define MYNOEBQ 'N' /* for no quoting! */
#define MYTIME 10 /* Seconds after which I should be timed out */
#define YOURTIME 15 /* time after I will time out */
#define MAXTIM 60 /* Maximum timeout interval */
#define MINTIM 2 /* Minumum timeout interval */
#define KER_INI "KERMIT.OPT" /* init file name */
#define KER_LOG "KERMIT.LOG" /* log file name */
#define KER_DEB "KERMIT.DEB" /* debug file name */
#define KER_RSC "KERMIT.RSC" /* resource file */
/* Macro Definitions */
/*
* tochar: converts a control character to a printable one by adding a space.
*
* unchar: undoes tochar.
*
* ctl: converts between control characters and printable characters by
* toggling the control bit (ie. ~A becomes A and A becomes ~A).
*/
#define tochar(ch) ((ch) + ' ')
#define unchar(ch) ((ch) - ' ')
#define ctl(ch) ((ch) ^ 64 )
/* Parameters */
EXTERN int
rpsiz, /* Maximum receive packet size */
spsiz, /* Maximum send packet size */
spad, /* How much padding to send */
rtimint, /* Timeout for foreign host on sends */
stimint, /* Timeout for foreign host when waiting */
dotimout, /* only if true do timeout! */
maxtry, /* retries in case of errors (only rec. par.) */
ibmmode, /* do turn around character handling */
padding, /* do padding */
debug, /* whether do debugging */
deblevel, /* level of debugging */
translog, /* transaction logging */
image, /* eight bit transfer */
filnamwarn; /* generate unique filename if already present */
EXTERN int /* could be char, but makes it easier in STKOPT.C */
rpcks, /* packet start character I wait for*/
spcks, /* packet start character I will use */
spadc, /* padding character I'll send */
reol, /* EOL I expect */
seol, /* EOL I send */
rquote, /* quote character I expect */
squote, /* quote char I'll send */
rturnchar; /* handshake char I'll wait for */
/* Global Variables */
EXTERN int
size, /* Size of present data */
n, /* Packet number */
n_total, /* Total number of packets sent */
numtry, /* Times this packet retried */
oldtry, /* Times previous packet retried */
filecnt, /* number of files transfered */
bps, /* bytes per second so far */
nakcnt, /* NAK receive counter */
timcnt, /* time out errors */
getfile, /* flag for get function */
ebq; /* eight bit quote char */
EXTERN long int
starttrans, /* 'universal time' of transfer start */
startpckt; /* 'universal time' of packet begin */
EXTERN long
bytecnt; /* bytes transfered since start of transfer */
EXTERN char
state, /* Present state of the automaton */
recpkt[MAXPACKSIZ], /* Receive packet buffer */
packet[MAXPACKSIZ]; /* Packet buffer */
EXTERN FILE
*fp, /* File pointer for current disk file */
*deb, /* Debug file */
*log; /* File pointer for Logfile */
EXTERN char
kpathname[FILNAMLEN], /* kermit's pathname */
gpathname[FILNAMLEN], /* current selected generic pathname */
filnam[FILNAMLEN], /* current file name */
filnam1[FILNAMLEN]; /* converted filename */
SHAR_EOF
fi
if test -f 'stkobj.h'
then
echo shar: "will not over-write existing file 'stkobj.h'"
else
cat << \SHAR_EOF > 'stkobj.h'
#define KERMENU 0 /* TREE */
#define MDESK 3 /* OBJECT in TREE #0 */
#define MFILE 4 /* OBJECT in TREE #0 */
#define MTRANS 5 /* OBJECT in TREE #0 */
#define MOPTION 6 /* OBJECT in TREE #0 */
#define TSEND 25 /* OBJECT in TREE #0 */
#define TRECEIVE 26 /* OBJECT in TREE #0 */
#define TGET 29 /* OBJECT in TREE #0 */
#define TFINISH 30 /* OBJECT in TREE #0 */
#define TBYE 31 /* OBJECT in TREE #0 */
#define OBINTRAN 34 /* OBJECT in TREE #0 */
#define OTRANLOG 35 /* OBJECT in TREE #0 */
#define KERPARAM 4 /* TREE */
#define ABOUTKER 9 /* OBJECT in TREE #0 */
#define OFILWARN 40 /* OBJECT in TREE #0 */
#define OHANDSHA 42 /* OBJECT in TREE #0 */
#define OPADDING 41 /* OBJECT in TREE #0 */
#define OPARCHAN 43 /* OBJECT in TREE #0 */
#define OPARSAVE 38 /* OBJECT in TREE #0 */
#define KPSPCKL 5 /* OBJECT in TREE #4 */
#define KPRPCKL 6 /* OBJECT in TREE #4 */
#define KPSTIMO 8 /* OBJECT in TREE #4 */
#define KPRTIMO 9 /* OBJECT in TREE #4 */
#define KPSEOL 13 /* OBJECT in TREE #4 */
#define KPREOL 14 /* OBJECT in TREE #4 */
#define KPSPADC 16 /* OBJECT in TREE #4 */
#define KPSPCKST 20 /* OBJECT in TREE #4 */
#define KPRPCKST 21 /* OBJECT in TREE #4 */
#define KPRTURN 23 /* OBJECT in TREE #4 */
#define KPSQUOTE 25 /* OBJECT in TREE #4 */
#define KPRQUOTE 26 /* OBJECT in TREE #4 */
#define KPEXITOK 27 /* OBJECT in TREE #4 */
#define KPABORT 28 /* OBJECT in TREE #4 */
#define KERDISPL 5 /* TREE */
#define KDSEND 1 /* OBJECT in TREE #5 */
#define KDRECEIV 2 /* OBJECT in TREE #5 */
#define KDFILNAM 4 /* OBJECT in TREE #5 */
#define KDCNVFIL 7 /* OBJECT in TREE #5 */
#define KDFCNT 10 /* OBJECT in TREE #5 */
#define KDBCNT 22 /* OBJECT in TREE #5 */
#define KDPNUM 25 /* OBJECT in TREE #5 */
#define KDBPS 13 /* OBJECT in TREE #5 */
#define KDNAKCNT 16 /* OBJECT in TREE #5 */
#define KDTIMCNT 19 /* OBJECT in TREE #5 */
#define FDELETE 18 /* OBJECT in TREE #0 */
#define FRENAME 19 /* OBJECT in TREE #0 */
#define FQUIT 20 /* OBJECT in TREE #0 */
#define KPMAXTRY 11 /* OBJECT in TREE #4 */
#define KRABORT 7 /* TREE */
#define KRABOK 5 /* OBJECT in TREE #7 */
#define KRABMESS 4 /* OBJECT in TREE #7 */
#define ODEBUG 37 /* OBJECT in TREE #0 */
#define KPPADL 18 /* OBJECT in TREE #4 */
#define KRINIERR 0 /* STRING */
#define KRABOUT 6 /* TREE */
#define KRABOUOK 2 /* OBJECT in TREE #6 */
#define KRFILEX 1 /* STRING */
#define KRFILNEX 2 /* STRING */
#define OPARGET 44 /* OBJECT in TREE #0 */
#define KRDABORT 27 /* OBJECT in TREE #5 */
#define FTYPE 22 /* OBJECT in TREE #0 */
#define TPUT 27 /* OBJECT in TREE #0 */
#define KERNYI 3 /* STRING */
#define KRMDOTYP 8 /* TREE */
#define KRMDODEL 1 /* TREE */
#define KRMDOREN 2 /* TREE */
#define KRMDORE2 3 /* TREE */
#define KRMESSS 9 /* TREE */
#define MSMORE 1 /* OBJECT in TREE #9 */
#define MSEOF 2 /* OBJECT in TREE #9 */
#define KRDELDON 5 /* STRING */
#define KRRENDON 4 /* STRING */
#define KRODOSAV 10 /* TREE */
#define KRODOGET 11 /* TREE */
#define KRDELERR 6 /* STRING */
#define KRRENERR 7 /* STRING */
#define KRTDOSND 12 /* TREE */
#define KRTDOREC 13 /* TREE */
#define KRTDOPUT 14 /* TREE */
#define KRTDOGET 15 /* TREE */
#define KRTRAERR 8 /* STRING */
#define KRODODEB 16 /* TREE */
#define KRODOTF 17 /* TREE */
#define KRDBCLSD 9 /* STRING */
#define KRTFCLSD 10 /* STRING */
#define KERRFOPN 11 /* STRING */
#define KRSAVDON 12 /* STRING */
#define KRGETDON 14 /* STRING */
#define KRDEBDON 15 /* STRING */
#define KRTFDON 16 /* STRING */
#define KDPCNT 29 /* OBJECT in TREE #5 */
#define MSGSNDBG 3 /* OBJECT in TREE #9 */
#define MSGFILNX 5 /* OBJECT in TREE #9 */
#define MSGSNDRD 4 /* OBJECT in TREE #9 */
#define MSGSNDFD 7 /* OBJECT in TREE #9 */
#define MSGERRPK 6 /* OBJECT in TREE #9 */
#define MSGTLNPS 8 /* OBJECT in TREE #9 */
#define MSGDATPS 9 /* OBJECT in TREE #9 */
#define MSGTLNPR 20 /* OBJECT in TREE #9 */
#define MSGDATPR 21 /* OBJECT in TREE #9 */
#define MSGCHKER 10 /* OBJECT in TREE #9 */
#define MSGUSRAB 11 /* OBJECT in TREE #9 */
#define MSGTIMOU 12 /* OBJECT in TREE #9 */
#define MSGDSTAT 13 /* OBJECT in TREE #9 */
#define MSGTRAER 14 /* OBJECT in TREE #9 */
#define MSGSTATE 15 /* OBJECT in TREE #9 */
#define MSGFOPN 16 /* OBJECT in TREE #9 */
#define MSGERRFO 17 /* OBJECT in TREE #9 */
#define MSGSFASF 18 /* OBJECT in TREE #9 */
#define MSGTREOF 19 /* OBJECT in TREE #9 */
#define MSGFNEXT 22 /* OBJECT in TREE #9 */
#define MSGNEWFI 23 /* OBJECT in TREE #9 */
#define KRCONFAB 13 /* STRING */
#define KDSENDS 32 /* OBJECT in TREE #5 */
#define KDRECEIS 31 /* OBJECT in TREE #5 */
#define KRAVMM 7 /* OBJECT in TREE #6 */
#define KRAVDAT 8 /* OBJECT in TREE #6 */
#define MSGWOPER 25 /* OBJECT in TREE #9 */
#define MSGERSNA 26 /* OBJECT in TREE #9 */
#define MSGPROER 24 /* OBJECT in TREE #9 */
#define MSGRECRD 27 /* OBJECT in TREE #9 */
#define MSGFATFE 28 /* OBJECT in TREE #9 */
#define MSGFRASF 29 /* OBJECT in TREE #9 */
#define KRPROERR 17 /* STRING */
#define KRWOPERR 18 /* STRING */
#define KRFATFER 19 /* STRING */
#define MSGRECBG 33 /* OBJECT in TREE #9 */
#define MSGRECFD 34 /* OBJECT in TREE #9 */
#define FDFREE 23 /* OBJECT in TREE #0 */
#define KRDFREE 18 /* TREE */
#define KRDFID 1 /* OBJECT in TREE #18 */
#define KRDFBY 2 /* OBJECT in TREE #18 */
#define KRDFOK 3 /* OBJECT in TREE #18 */
#define MEGHNDFA 31 /* OBJECT in TREE #9 */
#define KRDRDYOK 34 /* OBJECT in TREE #5 */
#define KRDRFCTI 33 /* OBJECT in TREE #5 */
#define MSGCHSND 30 /* OBJECT in TREE #9 */
#define MSGCHFLU 32 /* OBJECT in TREE #9 */
#define MSGCHRD 35 /* OBJECT in TREE #9 */
#define MSGCHPAD 36 /* OBJECT in TREE #9 */
#define MSGCHWHC 37 /* OBJECT in TREE #9 */
#define MSGHNDOK 38 /* OBJECT in TREE #9 */
#define OTIMOUT 45 /* OBJECT in TREE #0 */
#define KRTASKG 19 /* TREE */
#define KRTGFILN 2 /* OBJECT in TREE #19 */
#define KRTASKOK 4 /* OBJECT in TREE #19 */
#define KRTASKAB 5 /* OBJECT in TREE #19 */
#define KDFINISH 35 /* OBJECT in TREE #5 */
#define KDBYE 36 /* OBJECT in TREE #5 */
#define MSGGETBG 39 /* OBJECT in TREE #9 */
#define MSGGETRD 40 /* OBJECT in TREE #9 */
#define MSGGETFD 42 /* OBJECT in TREE #9 */
#define MSGSRVFI 41 /* OBJECT in TREE #9 */
#define MSGFINRD 47 /* OBJECT in TREE #9 */
#define MSGFINFD 45 /* OBJECT in TREE #9 */
#define MSGSRVBY 46 /* OBJECT in TREE #9 */
#define MSGBYERD 48 /* OBJECT in TREE #9 */
#define MSGBYEFD 49 /* OBJECT in TREE #9 */
#define KSVFERR 20 /* STRING */
#define KSVBERR 21 /* STRING */
SHAR_EOF
fi
if test -f 'stkorsc.uuc'
then
echo shar: "will not over-write existing file 'stkorsc.uuc'"
else
cat << \SHAR_EOF > 'stkorsc.uuc'
begin 777 stkobe.rsc
M 9P!(T$C02-!'< "01VP +@ V 4 $4 !8 "Y0($1E<VL@ "!&
M:6QE( @5')A;G-F97(@ "!/<'1I;VYS( @($M%4DU)5"U);F9O "TM+2TM
M+2TM+2TM+2TM+2TM+2TM " @1&5S:R!!8V-E<W-O<GD@,2 @ " @1&5S:R!!
M8V-E<W-O<GD@,B @ " @1&5S:R!!8V-E<W-O<GD@,R @ " @1&5S:R!!8V-E
M<W-O<GD@-" @ " @1&5S:R!!8V-E<W-O<GD@-2 @ " @1&5S:R!!8V-E<W-O
M<GD@-B @ " @1&5L971E+BXN " @4F5N86UE+BXN " @475I= M+2TM+2TM
M+2TM+2TM+2TM+2T ("!4>7!E+BXN " @1G)E92!3<&%C92XN+@ @(%-E;F0N
M+BX ("!296-E:79E+BXN " @4'5T*%-E<G9E<BDN+BX +2TM+2TM+2TM+2TM
M+2TM+2TM+0 @($=E="A397)V97(I+BXN " @475I="A397)V97(I " @3&]G
M;W5T*%-E<G9E<BD +2TM+2TM+2TM+2TM+2TM+2TM+0 @($)I;F%R>2!4<F%N
M<V9E<@ @(%-E<W-I;VX@3&]G+BXN "TM+2TM+2TM+2TM+2TM+2TM+2TM+2T
M("!$96)U9R!,;V<N+BX ("!3879E(%-T871E+BXN "TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2T ("!&:6QE($YA;64@5V%R;FEN9P @(%!A9&1I;F< ("!)0DT@
M36]D90 @($-H86YG92!087)A;65T97)S+BXN " @3&]A9"!3=&%T92XN+@ @
M(%1I;65O=70 1&5L971E("XN+@!296YA;64@+BXN $YE=R!.86UE("XN+@!+
M15)-250@0V]M;75N:6-A=&EO;B!087)A;65T97)S 4V5N9 %)E8V5I
M=F4 !086-K970@3&5N9W1H 7U\ 7U\ .3D 7U\ 7U\ .3D 5&EM96]U
M="AS96,N*0 %]? %]? #DY %]? %]? #DY %)E=')I97,H8V]U;G0I
M7U\ 7U\ .3D 14],*&AE>&-O9&4I 7U\ 7U\ 3DX 7U\ 7U\ 3DX 4&%D
M9&EN9RAH97AC;V1E*0 %]? %]? $Y. %!A9&1I;F<H;&5N9W1H*0 %]?
M %]? #DY %!A8VME="!3=&%R="AH97AC;V1E*0 %]? %]? $Y. %]? %]?
M $Y. $AA;F1S:&%K92AH97AC;V1E*0 %]? %]? $Y. %%U;W1E*&-H87)A
M8W1E<BD !? %\ 6 !? %\ 6 !/2P!!0D]25 !396YD 4F5C96EV90
M %]?7U]?7U]?7U]?7U]?7U]?7U]?7U\ 7U]?7U]?7U]?7U]?7U]?7U]?7U]?
M7P!86%A86%A86%A86%A86%A86%A86%A8 $9I;&4Z 7U]?7U]?7U]?7U]?
M7U]?7U]?7U]?7P!?7U]?7U]?7U]?7U]?7U]?7U]?7U]? %A86%A86%A86%A8
M6%A86%A86%A86%@ 3&]G+B!N86UE.@ %]?7U]?7U\ 7U]?7U]?7P!86%A8
M6%A8 $9I;&5S(" @=')A;G-F97)R960Z 7U]?7U\ 7U]?7U\ 6%A86%@
M0GET97,O<V5C+CH !?7U]?7P!?7U]?7P!86%A86 !%<G)O<G,Z 7U]?
M7U\ 7U]?7U\ 6%A86%@ 5&EM96]U=',Z 7U]?7U]?7P!?7U]?7U]? %A8
M6%A86%@ 0GET97,@("!T<F%N<V9E<G)E9#H !?7P!?7P!86 !086-K970@
M:60Z 04)/4E0 7U]?7U]?7P!?7U]?7U]? %A86%A86%@ 4&%C:V5T<R!T
M<F%N<V9E<G)E9#H !'970H4V5R=F5R*0 %!U="A397)V97(I 5$E-
M14]55 !214%$60!1=6ET*%-E<G9E<BD !,;V=O=70H4V5R=F5R*0
M $]+ $Y%0D5,0$1",%1523$Q+D))5$Y%5 $)E<FYH87)D($YE8F5L
M#@\@1T5-+4M%4DU)5 'AX>'@ 5F5R<VEO;E]?+E]? #DY.3D >'AX>'AX
M %]?+5]?+5]? #DY.3DY.0!4:&ES('!R;V=R86T@:7,@<'5B;&EC(&1O;6%I
M;@ '-O9G1W87)E(&%N9"!I<R!D:7-T<FEB=71E9"!F<F5E;'DN 5&AE
M($M%4DU)5"!P<F]T;V-O;"!W87,@9&5V96QO<&5D 870@0V]L=6UB:6$@
M56YI=F5R<VET>2P@3F5W(%EO<FLN 5&AE(')E;6]T92!H;W-T('-T;W!P
M960@=')A;G-F97)R:6YG 86YD('-E;G0@=&AE(&9O;&QO=VEN9R!M97-S
M86=E.@ %]?7U]?7U]?7U]?7U]?7U]?7U]?7U]?7U]?7U]?7U]?7U]?
M7U]?7U\ 7U]?7U]?7U]?7U]?7U]?7U]?7U]?7U]?7U]?7U]?7U]?7U]?7U]?
M7P!86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A86%A8 $]+
M %1Y<&4@+BXN "TM+2!-3U)%("TM+0 M+2T@14]&("TM+0!3=&%R="!S96YD
M:6YG+B!0871H/2<E<R<L1FEL93TG)7,G %-E;F1I;F<@<W5C8V5S<V9U;&QY
M(&-O;7!L971E9"X *BHJ3F\@<W5C:"!&:6QE+@ J*BI%<G)O<B!M97-S86=E
M(&9R;VT@<F5M;W1E(&AO<W0Z("5S+@!396YD:6YG(&%B;W)T960N %-004-+
M.B!T>7!E/25C+"!L96X])3)D+"!N=6T])3 R> !34$%#2SH@9&%T83U\)7-\
M "HJ*D-H96-K<W5M(&5R<F]R.B!R96,N/24P,G@@97AP+CTE,#)X "HJ*E5S
M97(@86)O<G1E9"X 5&EM96]U="!W:&EL92!R96-E:79I;F<N %-7251#2#H@
M<W1A=&4])6,@;G5M/24P,G@ *BHJ4F5M;W1E(&AO<W0@9&]E<R!N;W0@<F5S
M<&]N9"X *BHJ1F%T86P@<W1A=&4@97)R;W(N $9I;&4@)R5S)R!O<&5N960@
M9F]R('-E;F1I;F<N "HJ*D9I;&4@8V%N;F]T(&)E(&]P96YE9"X 1FEL92 G
M)7,G('=I;&P@8F4@<V5N="!A<R G)7,G+@!&:6QE("<E<R<@8V]M<&QE=&5L
M>2!T<F%N<V9E<G)E9"X 4E!!0TLZ('1Y<&4])6,L(&QE;CTE,F0L(&YU;3TE
M,#)X %)004-+.B!D871A/7PE<WP 3&]O:VEN9R!F;W(@;F5X="!F:6QE("XN
M+@!.97AT(&9I;&4@=VEL;"!B92 G)7,G+@ J*BI&871A;"!P<F]T;V-O;"!E
M<G)O<BX *BHJ1FEL92 G)7,G(&-A;FYO="!B92!C<F5A=&5D+@!&:6QE("<E
M<R<@97AS:7-T<RX@3F5W(&YA;64Z("<E<R<N %)E8V5I=FEN9R!S=6-C97-S
M9G5L;'D@8V]M<&QE=&5D+@ J*BI&871A;"!F:6QE($DO3R!E<G)O<BX 1FEL
M92 G)7,G('=I;&P@8F4@<F5C96EV960@87,@)R5S)RX (" M/B!S96YT.B \
M,'@E,#)X/B!\)6-\ $YO(&AA;F1S:&%K92!C:&%R86-T97(@<F5C96EV960N
M " @+3X@9FQU<VAE9#H@/#!X)3 R>#X@?"5C? !3=&%R="!R96-E:79I;F<N
M(%!A=&@])R5S)RP@1FEL93TG)7,G+@!296-E:79I;F<@86)O<G1E9"X (" M
M/B!A9G1E<B E9"!S96,N(')E8W8N.B \,'@E,#)X/B!\)6-\ " @+3X@<&%D
M9&EN9SH@)60@*B \,'@E,#)X/@ @("T^('=A:71I;F<@9F]R(&AA;F1S:&%K
M92 \,'@E,#)X/B!\)6-\ " @+3X@2&%N9'-H86ME(&-H87)A8W1E<B!R96-E
M:79E9"X ($9I;&4@)7,@<F5Q=65S=&5D("A0871H/25S+"!&:6QE/25S*2X
M1V5T=&EN9R!S=6-C97-S9G5L;'D@8V]M<&QE=&5D+@!1=6ET=&EN9RA397)V
M97(I(')E<75E<W1E9"X 1V5T=&EN9R!A8F]R=&5D+@!35%))3D< 475I='1I
M;F<H4V5R=F5R*2!A8F]R=&5D+@!,;V=O=70H4V5R=F5R*2!R97%U97-T960N
M %%U:71T:6YG*%-E<G9E<BD@<W5C8V5S<V9U;&QY(&-O;7!L971E9"X 3&]G
M;W5T*%-E<G9E<BD@<W5C8V5S<V9U;&QY(&-O;7!L971E9"X 3&]G;W5T*%-E
M<G9E<BD@86)O<G1E9"X 4V%V92!S=&%T92 N+BX 3&]A9"!S=&%T92 N+BX
M4V5N9" N+BX 4F5C96EV92 N+BX 4'5T("XN+@!'970@+BXN $]P96X@9&5B
M=6<@;&]G("XN+@!/<&5N('-E<W-I;VX@;&]G("XN+@!! $9R964@9&ES:R!S
M<&%C92!O;B!?.@!& %]?7U]?7U]? %]?7U]?7U]?($)Y=&5S #DY.3DY.3DY
M $]+ $=E="!F<F]M(')E;6]T92!H;W-T 7U]?7U]?7U]?7U]?7U]?7U]?
M7U]?7U]?7U]?7U]?7U]?7U]?7U]?7P!?7U]?7U]?7U]?7U]?7U]?7U]?7U]?
M7U]?7U]?7U]?7U]?7U]?7U]? %A86%A86%A86%A86%A86%A86%A86%A86%A8
M6%A86%A86%A86%A86%@ 1V5T(&9O;&QO=VEN9R!F:6QE(&9R;VT@<F5M;W1E
M(&AO<W0Z 3TL 04)/4E0 6S-=6T5R<F]R(&]N('=R:71I;F=\=&\@<W1A
M=&4@9FEL92Y=6T%"3U)470!;,UU;5&AI<R!F:6QE(&%L<F5A9'D@97AI<W1S
M+EU;04)/4E1= %LS75M4:&ES(&9I;&4@9&]E<R!N;W0@97AI<W0N75M!0D]2
M5%T 6S-=6TYO="!Y970@:6UP;&5M96YT960N75M33U)265T 6S!=6T9I;&4@
M<F5N86UE9"Y=6T]+70!;,%U;1FEL92!D96QE=&5D+EU;3TM= %LS75M%<G)O
M<B!W:&EL92!D96QE=&EN9R!F:6QE+EU;04)/4E1= %LS75M%<G)O<B!W:&EL
M92!R96YA;6EN9RY=6T%"3U)470!;,UU;4F5M;W1E(&AO<W0@9&]E<R!N;W0@
M<F5S<&]N9"Y=6T%"3U)470!;,%U;1&5B=6<@;&]G(&-L;W-E9"Y=6T]+70!;
M,%U;4V5S<VEO;B!L;V<@8VQO<V5D+EU;3TM= %LS75M%<G)O<B!W:&EL92!O
M<&5N:6YG(&9I;&4N75M!0D]25%T 6S!=6U-T871E('-A=F5D+EU;3TM= %LR
M75M296%L;'D@86)O<G0@=')A;G-F97(_75M#3TY424Y517Q!0D]25%T 6S!=
M6U-T871E(&QO861E9"Y=6T]+70!;,%U;1&5B=6<@;&]G('-T87)T960N?$QE
M=F5L(&]F(&QO9V=I;F<Z75M086-K971S?$-H87)A8W1E<G-= %LP75M397-S
M:6]N(&QO9R!S=&%R=&5D+EU;3TM= %LS75M&871A;"!E<G)O<B!I;B!P<F]T
M;V-O;"Y=6T%"3U)470!;,UU;1FEL92!C86YN;W0@8F4@8W)E871E9"Y=6T%"
M3U)470!;,UU;1F%T86P@97)R;W(@=VAI;&5\9&]I;F<@9FEL92!)+T\N75M!
M0D]25%T 6S-=6U%U:71T:6YG(&]F(%-E<G9E<B!A8F]R=&5D(" @(" @('QB
M96-A=7-E(&]F('1R86YS;6ES<VEO;B!E<G)O<G,N75M!0D]25%T 6S-=6TQO
M9V]U="!O9B!397)V97(@86)O<G1E9" @(" @(" @?&)E8V%U<V4@;V8@=')A
M;G-M:7-S:6]N(&5R<F]R<RY=6T%"3U)470 .? #J@ [. .]
M#Q4 \L /0P #VH ^, /M@ #]$ _N 0% $"H !!6 0
M;0 $*L !#) 0[@ $1( !% 1C@ J( +" "PP # 8 A&
M #__@ @ $ +$ "R0 LH P & (1@ __\ !0 ! "RP M,
M +4 , !@ "$8 /__ @ 0 M4 +C "Y # 8 !& #__P .
M $ +E "Z NL P & 1@ P # "[@ O$ +T ,
M!@ $8 , P O< ,% #!@ # 8 !& #__P . $ ,'
M #"@ PT P & 1@ P # #$ Q, ,6 , !@ $8
M , P QD ,H #*0 # 8 !& #__P / $ ,J #+0
M S P & 1@ P # #,P T -! , !@ $8 /__ T
M 0 T( -% #2 # 8 !& # , -+ #3@ U$ P &
M 1@ P # #5 V4 -F , !@ $8 /__ !$ 0 V<
M -J #;0 # 8 !& # , -P #@ X$ P & 1@
M__\ $ ! #@@ X4 .( , !@ $8 , P XL .A #
MH@ # 8 !& #__P 6 $ .C #I@ ZD P & 1@ P #
M #K Z\ .R , !@ $8 , P [4 /( #R0 # 8
M !& #__P 3 $ /* #S0 ] P & 1@ P # #TP
M ^0 /E , !@ $8 /__ !$ 0 ^8 /H #Z@ # 8 !&
M " ( /L #[@ _ P & 1@ @ " #^P ! 0!
M , !@ "$8 /_^ 4 0 ! ( 0* $"P # 8 A& #__@ ( $
M 0, $(P !#H P & $1@ __\ %P 7 $40 !%< 18 , !@
M$8 /__ 8 0 !%D 1P $AP # 8 1& #__P 7 !< 2> $
MJ0 !*H P & 1@ __\ "P ! $JP !+, 2[ , !@ !$8 /__
M @ " !,, 38 $V0 # 8 !& #__P 5 $ 3: $X !.8
M P & $1@ __\ !@ & $[ !/@ 3Y , !@ $8 /__ P 0
M!/H 4 %!@ # 8 1& #__P & 8 4, %% !14 P & 1
M@ __\ " ! %%@ !1P 4B , !@ !$8 /__ 8 !@ !2@ 4R
M %,P # 8 !& #__P * $ 4T %/ !40 P & $1@ __\
M" ( %3 !6$ 5B , !@ $8 /__ !4 0 !6, 5F %:0 #
M 8 !& #__P # , 5L %=P !7@ P & 1@ __\ "P ! %
M?P !8< 6/ , !@ !$8 /__ @ " !9< 6L %K0 # 8 !&
M #__P 5 $ 6N %N@ !;L P & (1@ __X # ! %O !<@
M 7) , !@ "$8 /_^ P 0 !=@ 7E %Y@ # 8 A& #__@ -
M $ 7G %]@ !?< P & (1@ __X #P ! %^ !?D 7Z ,
M!@ $8 /__ $ 0 !?X 84 &%0 % 8 A& #__P 6 $ 86
M &)0 !B8 !0 & (1@ __\ #P ! &)P !C4 8V , !@ "$'
M /__ X 0 !C< 8\ &20 # 8 A& #__P % T 9. &50
M!EX P & (1@ __\ !P ) &90 !H, :$ 4 !@ $8 /__ !X
M 0 !H4 :I &J@ % 8 !& #__P D $ :K &S0 !LX !0 &
M 1@ __\ (@ ! &SP !O$ ;R 4 !@ $8 /__ "( 0 !O,
M <8 '&0 # 8 !& #__P E $ <: '.@ !SL P & 1@
M__\ ( ! '/ !ST <^ , !@ $8 /__ $ 0 !S\ =H '
MD0 # 8 1& #__P I "D U\ -?@ #90 P & 1@ __\ @ 6
M -E@ #9\ VN , !@ !$8 /__ D #P #;H W/ -T # 8
M A& #__@ 5 $ W1 -^@ #B, P & 1@ __\ *0 I .3
M#G$ YR , !@ "$8 /__ "4 ?__ $ !P 9 %
M&0 ' ( @ 4 $0 % " 0 ! , !@ 9 @
M !\# 0 $_____P @ "0 8# 0 %_____P @ "L
M!@ 8# 0 &_____P @ #( # H# 0 "_____P @
M #T %@ D# 0 @ (0 9 ,! % $P 1 D $ 4
M #_$0 @ !0 " *_____P < $< !0 0 +_____P <
M " %4 ! !0 0 ,_____P < &H " !0 0 -____
M_P < '\ # !0 0 ._____P < )0 $ !0 0 /
M_____P < *D % !0 0 0_____P < +X & !0
M 0 (_____P < -, ' !0 0 8 !( %P 4 #_$0 "
M !( !@ 3_____P < .@ !( 0 4_____P < /0
M ! !( 0 5_____P < 0 % !( 0 6_____P < "
M 0< $ !( 0 7_____P < 1H " !( 0 1_____P <
M 20 # !( 0 A !D ( 4 #_$0 #@ !, " :_____P <
M 30 !, 0 ;_____P < 3X ! !, 0 <____
M_P < 4L # !, 0 =_____P < " 5P " !, 0 >
M_____P < 7 $ !, 0 ?_____P < 8$ & !,
M 0 @_____P < 9 ' !, 0 8_____P < " :$ %
M !, 0 ' "( +0 4 #_$0 & !8 # C_____P < ;4
M !8 0 D_____P < << & !8 0 E_____P < "
M =@ ( !8 0 F_____P < >\ ' !8 0 G_____P <
M ?X * !8 0 H_____P < " @X % !8 0 I_____P <
M B4 ! !8 0 J_____P < CD # !8 0 K____
M_P < D, " !8 0 L_____P < DX ) !8 0 M
M_____P < F4 + !8 0 A_____P < " G4 $ !8
M ?__ $ 0 4 $ "$0 !PH% 0 _____P < " G\$ ,
M H ?__ $ 0 4 $ "$0 @L' 0 _____P < " HH#
M 4 H ?__ $ 0 4 $ "$0 ! T' 0 _____P < "
M I4% 0 P ?__ $ ' 4 $ "$0 "X $0 "_____P 6
M( $C0 !P ! !\ 0 #_____P 6 $E & # < 0 $_____P 6
M $FP 'P # D 0 ' 4 !@ 6 $H@ !@ $ "( 0 &____
M_P > @ $J0 %P ( 0 $_____P > @ $L ( ( 0 *
M @ "0 6 $MP !@ % "( 0 )_____P > @ $O@ %P (
M 0 '_____P > @ $Q0 ( ( 0 , L "P 6 $S !@ &
M "( 0 *_____P > @ $TP ( ( 0 / T #@ 6 $V@
M!@ ' "( 0 ._____P > @ $X0 %P ( 0 ,_____P > @
M$Z ( ( 0 1 ! $ 6 $[P !@ ( "( 0 /_____P > @
M $]@ %P ( 0 3 !( $@ 6 $_0 !@ ) "( 0 1_____P >
M @ %! %P ( 0 6 !0 %0 6 %"P !@ * "( 0 5____
M_P > @ %$@ %P ( 0 3_____P > @ %&0 ( ( 0 8
M !< %P 6 %( !@ + "( 0 6_____P > @ %)P ( (
M 0 ; !D &@ 6 %+@ !@ , "( 0 :_____P > @ %-0 &
M $ 0 8_____P > @ %/ (0 $ 0 <_____P : < _(
M!@ . @ 0 _____P : "4 _4 ( . @ ?__ $ ) 4 $ "
M$0 "8 $@ "_____P 6 ( ( %0P !P ! !< 0 #_____P 6 (
M( %2@ !P ! !< 0 & 0 !0 4 #_$0 P # " 0 %_____P =
M @ %40 "@ !8 0 #_____P 5 %6 4 0 ) <
M" 4 #_$0 P $ " 0 (_____P = @ %7P "@ !8 0 &
M_____P 5 %9@ H 0 , H "P 4 #_$0 P & "
M 0 +_____P = @ %;0 &0 < 0 )_____P 5 %=
M !0 0 / T #@ 4 #_$0 P * " 0 ._____P = @ %>P
M&P 4 0 ,_____P 5 %@@ L 0 2 ! $0 4 #_
M$0 P + " 0 1_____P = @ %B0 &P 4 0 /_____P 5
M %D < 0 5 !, % 4 #_$0 P , " 0 4_____P =
M @ %EP &P 4 0 2_____P 5 %G@ D 0 8 !8
M%P 4 #_$0 P ( " 0 7_____P = @ %I0 &0 < 0 5
M_____P 5 %K !0 0 ; !D &@ 4 #_$0 P - "
M 0 :_____P = @ %LP '@ ( 0 8_____P 5 %N@
M H 0 <_____P : $ !7D &@ / D 0 ? !T '@ 4 #_$0
M P ' " 0 >_____P = @ %P0 &0 < 0 <_____P 5
M%R !0 0 @_____P 6 ( ( %SP !P ! !< 0 A_____P 6 (
M( %U@ !P ! !< 0 B_____P : $ !<H #P / D 0 C_____P :
M < " !=( P / D 0 D_____P 6 ( ( %W0 !P ! !< 0 ____
M_P 6 * ( %Y !P ! !< ?__ $ #0 4 $ "$0 !"$+#@ "
M_____P = @ %ZP "@ # L 0 #_____P : < !?L$# L, @
M 0 $_____P 5 %\@ ( "$ 0 %_____P 5 %^0 '
M "$ 0 ' 8 !@ 4 $ #$?$ !P ! !, @ %_____P 5 &
M P@ T 0 (_____P = &!P" 8$!" " 0 )_____P =
M&#@# D% R " 0 *_____P 9 $ "$0 $! P# 1@&!0 +_____P 5
M &%0!! H)!A4& ,_____P 5 &' !! 0* AH& -_____P 5
M &(P!! T*!A@& _____P 5 " &*@!! 8+!A@& /__ $
M!0 4 $ "$0 #( "@ "_____P 5 &,0 !P ! "0 0 #
M_____P 5 &. "@ " !\ 0 $_____P = @ &/P "@ # L
M 0 %_____P > @ &1@ !0 % "@ 0 _____P : "< ![H % (
M @ ?__ $ 0 4 $ "$0 @D' 0 _____P < " ![T%
M 0 @ ?__ $ *P 4 "$0 $X %0 "_____P <
M!\8 P 0 #_____P < !], ! L 0 $_____P <
M !]\ " "( 0 %_____P < " ( $ !\ 0 &_____P <
M ""( # ! 0 '_____P < "#, & "8 0 (____
M_P < "%H % ! 0 )_____P < "&L ' "$ 0 *
M_____P < "(T ( ! 0 +_____P < ")X + "8
M 0 ,_____P < ",4 , ! 0 -_____P < "-8 -
M !@ 0 ._____P < ".\ . !D 0 /_____P < "0D
M / " 0 0_____P < "2H 0 !4 0 1_____P <
M"4 1 !T 0 2_____P < "5X 2 !D 0 3_____P <
M "7@ 3 !\ 0 4_____P < "9@ 4 "$ 0 5_____P <
M ";H ) "$ 0 6_____P < "=P * ! 0 7____
M_P < ">T *0 $ !D 0 8_____P < "@< *0 # !< 0 9
M_____P < "A\ *0 " !@ 0 :_____P < "C@ )0 !\
M 0 ;_____P < "E@ )0 ! "( 0 <_____P < "GL *0 %
M "$ 0 =_____P < "IT *0 & !@ 0 >_____P < "K8
M*0 ' ", 0 ?_____P < "MH *0 + !@ 0 @_____P <
M"O, *0 * " 0 A_____P < "Q0 *0 , !L 0 B_____P <
M "S (P ( "8 0 C_____P < "U< *0 ) !( 0 D_____P <
M "VH (P - "< 0 E_____P < "Y( *0 . !L 0 F____
M_P < "ZX (@ / "@ 0 G_____P < "]< *0 0 "( 0 H
M_____P < "_H (P 1 "8 0 I_____P < #"$ )0 2 !\
M 0 J_____P < #$$ *0 4 !L 0 K_____P < #%T )@ 3
M ! 0 "P ,0 4 #_$0 $X %0 M_____P < #&X
M % 8 0 N_____P < #'4 ! !D 0 O_____P <
M#(\ " !D 0 P_____P < #*D "@ 0 Q_____P <
M #-( # "8 0 K_____P < " #/D $ !< ?__ $ 0 4
M $ "$0 !P\& 0 _____P < " #1$% , X ?__ $
M 0 4 $ "$0 !P\& 0 _____P < " #2 0, X ?__
M $ 0 4 $ "$0 H& 0 _____P < " #2\" 0, @
M ?__ $ 0 4 $ "$0 ! P& 0 _____P < " #3@& (
M L ?__ $ 0 4 $ "$0 ! D' 0 _____P < " #40"
M 0, < ?__ $ 0 4 $ "$0 !0@' 0 _____P < "
M#4P& , < ?__ $ 0 4 $ "$0 !Q,( 0 _____P < "
M #50' , !( ?__ $ 0 4 $ "$0 !14' 0 _____P <
M " #6<' 0 !0 ?__ $ P 4 $ "$0 !L "0 "____
M_P = @ &30 P ! !4 0 #_____P = &5 !@ # X 0
M_____P : "< #;< "0 & @ ?__ $ !0 4 $ "$0 #$
M# "_____P 6 ( &6P #0 ! !8 0 #_____P = @ &8@ ! &
M "@ 0 $_____P 5 &:0 !@ $ "0 0 %_____P : < #G,
M!P ) @ 0 _____P : "4 #G8 ( ) @ 0 &< !X0 >0
M'G !Z@ A6 )- "8@ FL )N "N0 KP *_ "P@ L
54 +( "RP LX +1 "UP
end
SHAR_EOF
fi
exit 0
# End of shell archive
Technical Details
Message-ID:
<600014@coma.UUCP>Path:
arc1-ca.pugleaf.net!utzoo!watmath!clyde!burl!ulysses!mhuxr!mhuxt!houxm!whuxl!whuxlm!akgua!gatech!seismo!mcvax!unido!coma!axelShow Full Headers
Complete Article Headers
Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: arc1-ca.pugleaf.net!utzoo!watmath!clyde!burl!ulysses!mhuxr!mhuxt!houxm!whuxl!whuxlm!akgua!gatech!seismo!mcvax!unido!coma!axel From: axel@coma.UUCP Newsgroups: net.micro.atari16 Subject: GEM-Kermit (Part 5 of 6) Message-ID: <600014@coma.UUCP> Date: Thu, 19-Jun-86 23:06:00 EDT Article-I.D.: coma.600014 Posted: Thu Jun 19 23:06:00 1986 Date-Received: Sat, 28-Jun-86 05:05:33 EDT Sender: notes@unido.UUCP Lines: 1209 Nf-ID: #N:coma:600014:000:47279 Nf-From: coma!axel Jun 20 04:06:00 1986