Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: 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 #! /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 #include #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 /* TOS binding */ #include /* common I/O defs */ #include /* common Object definitions */ #include /* 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 /* TOS bindings */ #include /* common I/O defintions */ #include /* common object defintions */ #include /* 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($1E7!E+BXN " @1G)E92!3<&%C92XN+@ @(%-E;F0N M+BX ("!296-E:79E+BXN " @4'5T*%-E2!4'@ 5F5R'AX>'AX M %]?+5]?+5]? #DY.3DY.0!4:&ES('!R;V=R86T@:7,@<'5B;&EC(&1O;6%I M;@ '-O9G1W87)E(&%N9"!I2P@3F5W(%EO7!E/25C+"!L96X])3)D+"!N=6T])3 R> !34$%#2SH@9&%T83U\)7-\ M "HJ*D-H96-K2!T#X@?"5C? !3=&%R="!R96-E:79I;F $ 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 : $ ! @ &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