🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: net.micro.atari16
Article #958

GEM-Kermit (Part 5 of 6)

#958
From: axel
Date: Fri, 20 Jun 1986 03:06
1208 lines
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!axel

Show 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