wht@tridom.uucp (Warren Tucker) (10/09/89)
---- Cut Here and unpack ---- #!/bin/sh # this is part 2 of a multipart archive # do not concatenate these parts, unpack them in order with /bin/sh # file ecu.c continued # CurArch=2 if test ! -r s2_seq_.tmp then echo "Please unpack part 1 first!" exit 1; fi ( read Scheck if test "$Scheck" != $CurArch then echo "Please unpack part $Scheck next!" exit 1; else exit 0; fi ) < s2_seq_.tmp || exit 1 echo "x - Continuing file ecu.c" sed 's/^X//' << 'SHAR_EOF' >> ecu.c X else X { X choose_line(Lbaud); X if(!Lline[0]) X { X fprintf(se,"no line available at %u baud\r\n",Lbaud); X hangup(HANGUP_LINE_OPEN_ERROR); X } X } X } X X cptr = (char *)0; X if(initial_procedure[0]) X { X init_proc_argv[0] = initial_procedure; X init_proc_argc = 1; X for(iargv = 1; iargv < argc; iargv++) X { X if(*argv[iargv] != '-') X { X if(init_proc_argc == MAX_PARGV) X { X ff(se,"too many arguments to initial procedure\r\n"); X hangup(1); X } X init_proc_argv[init_proc_argc++] = argv[iargv]; X } X } X X/* wierd bug fixed by this ... I know not why */ X windows_start(); X windows_end2(); X fflush(so); X X ttymode(2); X if(do_proc(init_proc_argc,init_proc_argv)) X { X if(quit_on_init_proc_fail) X hangup(HANGUP_INIT_PROC_ERROR); X } X proc_file_reset(); X colors_save = current_colors; X setcolor(0x07000800L); /* gray */ X fputs("[procedure finished]",se); X setcolor(colors_save); X ff(se,"\r\n"); X if(Liofd < 0) X { X ff(se,"\r\n"); X ff(se,"\r\n"); X stand_out(); X ff(se, " [no line attached by initial procedure] "); X stand_end(); X ff(se,"\r\n"); X if(quit_on_init_proc_fail) X hangup(HANGUP_INIT_PROC_ERROR); X stand_out(); X ff(se, " [press ESC to exit or SPACE for setup menu ] "); X stand_end(); X itmp = ttygetc(0); X ff(se,"\r\n"); X if(itmp == ESC) X hangup(1); X ttymode(1); X setup_screen((char *)0); X } X else X { X X ttymode(1); X start_rcvr_process(0); X } X } X else /* no initial procedure */ X { X cptr = (char *)0; X for(iargv = 1; iargv < argc; iargv++) X { X if((*argv[iargv] != '-') || (strcmp(argv[iargv],"-") == 0)) X { X cptr = argv[iargv]; X break; X } X } X ttymode(1); X setup_screen(cptr); X } X X hangup(xmtr()); /* enter xmtr operation */ X /*NOTREACHED*/ X} /* end of main */ X X/* end of ecu.c */ X X/* vi: set tabstop=4 shiftwidth=4: */ SHAR_EOF echo "File ecu.c is complete" chmod 0644 ecu.c || echo "restore of ecu.c fails" echo "x - extracting ecuLCK.c (Text)" sed 's/^X//' << 'SHAR_EOF' > ecuLCK.c && X/* CHK=0xC002 */ X/*+----------------------------------------------------------------------- X ecuLCK.c -- lock file management X Copyright 1986,1989 Warren H. Tucker, III. All Rights Reserved X X Defined functions: X check_utmp() X create_lock_file(lock_file_name) X lock_tty() X make_lock_name(ttyname,lock_file_name) X other_lock_name(first_lock_name) X unlock_tty() X X------------------------------------------------------------------------*/ X/*+:EDITS:*/ X/*:07-03-1989-22:57-wht------------- ecu 2.00 ---------------- */ X/*:06-30-1989-01:06-wht-ecuungetty interface SEEMS to be working now */ X/*:06-29-1989-00:42-wht-add ungetty handler */ X/*:06-24-1989-16:52-wht-flush edits --- ecu 1.95 */ X X#include "ecu.h" X#include "utmpstatus.h" X Xextern int errno; Xextern char ungetty_ttyname[]; X X/*+------------------------------------------------------------------------- X check_utmp() Xreturn 0 if line available, else LOPEN code X--------------------------------------------------------------------------*/ Xint Xcheck_utmp() X{ Xregister ufd; Xregister status = 0; X X switch(utmp_status(Lline)) X { X case US_DIALOUT: /* enabled for login, currently dialout */ X status = LOPEN_DIALOUT_IN_USE; X break; X case US_LOGGEDIN: /* enabled for login, in use */ X status = LOPEN_ENABLED_IN_USE; X break; X case US_NOTFOUND: /* not in utmp, or getty dead */ X break; X case US_LOGIN: /* enabled for login, idle */ X status = ungetty_get_line(); X break; X } X return(status); X X} /* end of check_utmp */ X X/*+------------------------------------------------------------------------- X make_lock_name(ttyname,lock_file_name) X--------------------------------------------------------------------------*/ Xmake_lock_name(ttyname,lock_file_name) Xchar *ttyname; Xchar *lock_file_name; X{ X X if((ulindex(ttyname,"/dev/tty")) != 0) X return(LOPEN_INVALID); X X strcpy(lock_file_name,"/usr/spool/uucp/LCK.."); X strcat(lock_file_name,ttyname + 5); X return(0); X X} /* end of make_lock_name */ X X/*+----------------------------------------------------------------------- X line_locked(ttyname) X X Returns 1 if locked else 0 X------------------------------------------------------------------------*/ Xint Xline_locked(ttyname) Xchar *ttyname; X{ Xint fd_lockf; Xint status = 0; Xint pid; Xchar pidstr[20]; Xchar lock_file_name[64]; X X make_lock_name(ttyname,lock_file_name); X X if((fd_lockf = open(lock_file_name,O_RDONLY,0)) >= 0) X { X if((read(fd_lockf,pidstr,11) == 11) && X (sscanf(pidstr,"%10d",&pid) == 1)) X { X status = 1; X if(kill(pid,0)) /* is owner pid already dead? */ X { X if(errno == ESRCH) /* this error sez so */ X status = 0; X } X /* owner pid still active with lock */ X } X } X close(fd_lockf); X return(status); X} /* end of line_locked */ X X/*+----------------------------------------------------------------------- X create_lock_file() X X Returns 0 if lock file created,else error codes: X LOPEN_ if error X else pid of process currently busy on device X------------------------------------------------------------------------*/ Xint Xcreate_lock_file(lock_file_name) Xchar *lock_file_name; X{ Xregister itmp; Xregister fd_lockf; Xint pid; Xchar pidstr[20]; Xint old_umask; Xint erc = 0; X X old_umask = umask(0); X X if((fd_lockf = open(lock_file_name,O_CREAT | O_EXCL | O_RDWR,0666)) < 0) X { /* file already exists */ X if((fd_lockf = open(lock_file_name,O_RDWR,0666)) < 0) X { X erc = LOPEN_LCKERR; X goto RESTORE_UMASK; X } X else if(((itmp = read(fd_lockf,pidstr,11)) == 11) && X (sscanf(pidstr,"%10d",&pid) == 1)) X { X if(kill(pid,0)) /* is owner pid already dead? */ X { X if(errno == ESRCH) /* this error sez so */ X { X pid = getpid(); /* so we will use it */ X lseek(fd_lockf,0L,0); X sprintf(pidstr,"%10d\n",pid); X write(fd_lockf,pidstr,11); X close(fd_lockf); X erc = 0; X goto RESTORE_UMASK; X } X } X /* owner pid still active with lock */ X close(fd_lockf); X erc = pid; /* port is busy */ X goto RESTORE_UMASK; X } X else X { X close(fd_lockf); X erc = LOPEN_UNKPID; X goto RESTORE_UMASK; X } X } X pid = getpid(); X sprintf(pidstr,"%10d\n",pid); X write(fd_lockf,pidstr,11); X X#if defined(M_XENIX) X close(fd_lockf); X chmod(lock_file_name,0666); X#else X fchmod(fd_lockf,0666); X close(fd_lockf); X#endif X XRESTORE_UMASK: X (void)umask(old_umask); X return(erc); X X} /* end of create_lock_file */ X X/*+------------------------------------------------------------------------- X other_lock_name(first_lock_name) X--------------------------------------------------------------------------*/ Xchar * Xother_lock_name(first_lock_name) Xchar *first_lock_name; X{ Xregister itmp; Xstatic char other_lock_name[64]; X X strcpy(other_lock_name,first_lock_name); X itmp = strlen(other_lock_name) - 1; X if(islower(other_lock_name[itmp])) X other_lock_name[itmp] = toupper(other_lock_name[itmp]); X else if(isupper(other_lock_name[itmp])) X other_lock_name[itmp] = tolower(other_lock_name[itmp]); X X return(other_lock_name); X X} /* end of other_lock_name */ X X/*+------------------------------------------------------------------------- X lock_tty() X--------------------------------------------------------------------------*/ Xlock_tty() X{ Xregister itmp; X X if(itmp = make_lock_name(Lline,LLCKname)) X return(itmp); X X if(itmp = check_utmp()) X return(itmp); X X if(!ungetty_ttyname[0]) X { X if(itmp = create_lock_file(LLCKname)) X { X ungetty_return_line(); X return(itmp); X } X } X X if(itmp = create_lock_file(other_lock_name(LLCKname))) X { X if(ungetty_ttyname[0]) X ungetty_return_line(); X else X unlink(other_lock_name(LLCKname)); X unlink(LLCKname); X LLCKname[0] = 0; X return(itmp); X } X X return(0); X X} /* end of lock_tty */ X X/*+----------------------------------------------------------------------- X void unlock_tty() X------------------------------------------------------------------------*/ Xvoid Xunlock_tty() X{ X X ungetty_return_line(); X X if(LLCKname[0] == 0) X return; X X unlink(LLCKname); X unlink(other_lock_name(LLCKname)); X X LLCKname[0] = 0; X X} /* end of unlock_tty */ X X/* end of ecuLCK.c */ X/* vi: set tabstop=4 shiftwidth=4: */ SHAR_EOF chmod 0644 ecuLCK.c || echo "restore of ecuLCK.c fails" echo "x - extracting ecuchdir.c (Text)" sed 's/^X//' << 'SHAR_EOF' > ecuchdir.c && X/* CHK=0x2265 */ X/*+------------------------------------------------------------------------- X ecuchdir.c X Copyright 1986,1989 Warren H. Tucker, III. All Rights Reserved X X Defined functions: X cd_array_delete(arg,narg) X cd_array_delete_usage() X cd_array_init() X cd_array_read(arg,narg) X cd_array_save(arg,narg) X change_directory(cdarg,arg_present_flag) X expand_dirname(dirname) X X--------------------------------------------------------------------------*/ X/*+:EDITS:*/ X/*:07-03-1989-22:57-wht------------- ecu 2.00 ---------------- */ X/*:06-24-1989-16:52-wht-flush edits --- ecu 1.95 */ X X#include "ecu.h" X#include "ecukey.h" X#include <pwd.h> X X#define CD_QUAN 44 X#define CD_PATHLEN 130 Xchar *cd_array[CD_QUAN]; Xuint cd_in_use = 0; X Xextern char curr_dir[]; /* current working directory */ Xextern int errno; X X/*+------------------------------------------------------------------------- X cd_array_read(arg,narg) X--------------------------------------------------------------------------*/ Xvoid Xcd_array_read(arg,narg) Xchar **arg; Xint narg; X{ Xchar dirpath[CD_PATHLEN]; XFILE *fpcd; XFILE *fopen(); Xregister char *cptr; Xregister itmp; Xchar *skip_ld_break(); X X get_home_dir(dirpath); X strcat(dirpath,"/.ecu/dir"); X if((fpcd = fopen(dirpath,"r")) == (FILE *)0) X return; /* none found */ X X for(cd_in_use = 0; cd_in_use < CD_QUAN; cd_in_use++) X { X if(fgets(dirpath,sizeof(dirpath),fpcd) == (char *)0) X break; X dirpath[strlen(dirpath) - 1] = 0; X cptr = skip_ld_break(dirpath); X if(strlen(cptr) == 0) X { X --cd_in_use; X continue; X } X strcpy(cd_array[cd_in_use],cptr); X } X fclose(fpcd); X} /* end of cd_array_read */ X X/*+------------------------------------------------------------------------- X cd_array_save(arg,narg) X--------------------------------------------------------------------------*/ Xvoid cd_array_save(arg,narg) Xchar **arg; Xint narg; X{ Xregister icd; Xchar savepath[256]; XFILE *fpcd; XFILE *fopen(); X X get_home_dir(savepath); X strcat(savepath,"/.ecu/dir"); X X if(cd_in_use == 0) X { X ff(se,"No directory list to save in %s\r\n",savepath); X return; X } X if((fpcd = fopen(savepath,"w")) == (FILE *)0) X { X ff(se,"%s could not be opened\r\n",savepath); X return; X } X X for(icd = 0; icd < cd_in_use; icd++) X fprintf(fpcd,"%s\n",cd_array[icd]); X fclose(fpcd); X ff(se,"%d entries saved in %s\r\n",cd_in_use,savepath); X X} /* end of cd_array_save */ X X/*+------------------------------------------------------------------------- X cd_array_delete_usage() X--------------------------------------------------------------------------*/ Xvoid Xcd_array_delete_usage() X{ X ff(se,"usage del[ete] <1st> [<last>]\r\n"); X} /* end of cd_array_delete_usage */ X X/*+------------------------------------------------------------------------- X cd_array_delete(arg,narg) X--------------------------------------------------------------------------*/ Xcd_array_delete(arg,narg) Xchar **arg; Xint narg; X{ Xuint first; /* 1st to delete */ Xuint last; /* last to delete */ X X if((narg < 2) || (narg > 3)) X { X cd_array_delete_usage(); X return(-1); X } X X first = atoi(arg[1]) - 1; X if(narg == 2) X last = first; X else X last = atoi(arg[2]) - 1; X X if((first > (cd_in_use - 1)) || (last > (cd_in_use - 1)) || (last < first)) X { X cd_array_delete_usage(); X return(-1); X } X X if(last == (cd_in_use - 1)) X { X cd_in_use = first; X } X else X { X int count_less = last - first + 1; X last++; X while(last != cd_in_use) X strcpy(cd_array[first++],cd_array[last++]); X cd_in_use -= count_less; X } X return(0); X} /* end of cd_array_delete */ X X/*+------------------------------------------------------------------------- X cd_array_init() X--------------------------------------------------------------------------*/ Xcd_array_init() X{ Xregister itmp; Xchar *malloc(); X X/*allocate change_ irectory stack */ X for(itmp = 0; itmp < CD_QUAN; itmp++) X { X if((cd_array[itmp] = malloc(CD_PATHLEN + 1)) == (char *)0) X { X ff(se,"Not enough memory for cd stack\r\n"); X exit(1); X } X *cd_array[itmp] = 0; X } X (void)cd_array_read(cd_array,0); X} /* end of cd_array_init */ X X/*+------------------------------------------------------------------------- X expand_dirname(dirname) - convert dirnames with shell chars X--------------------------------------------------------------------------*/ Xexpand_dirname(dirname,maxlen) Xchar *dirname; Xint maxlen; X{ Xregister itmp; Xregister char *cptr; Xchar s256[256]; Xchar *expcmd; X X if(!find_shell_chars(dirname)) X return(0); X X sprintf(s256,"`ls -d %s`",dirname); X if(expand_cmd_with_wildlist(s256,&expcmd)) X { X ff(se,"No files match\r\n"); X return; X } X strncpy(dirname,expcmd,maxlen); X dirname[maxlen - 1] = 0; X free(expcmd); X if(strchr(dirname,' ')) X { X fputs("Too many files:\r\n",se); X fputs(dirname,se); X fputs("\r\n",se); X return(-1); X } X return(0); X X} /* end of expand_dirname */ X X/*+------------------------------------------------------------------------- X change_directory(dirname,arg_present_flag) X X Change directory to 'dirname' if arg_present_flag is true, X else if flag 0, ask for new directory name and change to it X This procedure maintains the global variable 'curr_dir' that X reflects the ecu transmitter and receiver process current X working directory. X--------------------------------------------------------------------------*/ Xchange_directory(cdarg,arg_present_flag) Xchar *cdarg; Xint arg_present_flag; X{ Xregister icd; Xregister itmp; Xchar s130[130]; X#define ARG_MAX 5 Xchar *arg[ARG_MAX]; Xint narg; Xint longest; X X if(cd_in_use == 0) X cd_array_read(arg,0); X X fputs(" ",se); X X if(arg_present_flag) /* if there is an argument ... */ X { X if(isdigit(*cdarg)) /* ... and first char is digit */ X { X icd = atoi(cdarg) - 1; X if(icd >= cd_in_use) X goto DISPLAY_CD_ARRAY; X strncpy(s130,cd_array[icd],sizeof(s130) - 1); X } X else X strncpy(s130,cdarg,sizeof(s130) - 1); /* literal dir spec */ X X s130[sizeof(s130) - 1] = 0; X } X else /* no arg to cd command */ X { XDISPLAY_CD_ARRAY: X fputs("\r\n",se); X longest = 0; X for(icd = 0; icd < CD_QUAN/2; icd++) X { X if(icd >= cd_in_use) X break; X if(longest < (itmp = strlen(cd_array[icd]))) X longest = itmp; X } X longest += 4; X if(longest < 36) X longest += 4; X for(icd = 0; icd < CD_QUAN/2; icd++) X { X if(icd >= cd_in_use) X break; X sprintf(s130,"%2d %s ",icd + 1,cd_array[icd]); X fputs(s130,se); X if(icd + CD_QUAN/2 >= cd_in_use) X fputs("\r\n",se); X else X { X itmp = longest - strlen(s130); X while(itmp-- > 0) X fputc(' ',se); X sprintf(s130,"%2d %s\r\n", X icd + 1 + CD_QUAN/2,cd_array[icd + CD_QUAN/2]); X fputs(s130,se); X X } X } X fputs("current dir: ",se); X stand_out(); X ff(se," %s ",curr_dir); X stand_end(); X eeol(); X fputs("\r\n",se); X XGET_NEW_DIR: X fputs("New dir, <#>, %save, %read, %del, %xmitcd, <enter>: ",se); X ttygets(s130,sizeof(s130),1); X if( (s130[0] == ESC) || (strlen(s130) == 0) ) X { X ff(se,"no directory change\r\n"); X return(0); X } X else if(s130[0] == '%') X { X build_str_array(s130,arg,ARG_MAX,&narg); X X if(minunique("save",&s130[1],1)) X { X cd_array_save(arg,narg); X goto GET_NEW_DIR; X } X else if(minunique("read",&s130[1],1)) X { X cd_array_read(arg,narg); X goto DISPLAY_CD_ARRAY; X } X else if(minunique("delete",&s130[1],1)) X { X if(cd_array_delete(arg,narg)) X goto GET_NEW_DIR; X else X goto DISPLAY_CD_ARRAY; X } X else if(minunique("xmitcd",&s130[1],1)) X { X lputs("cd "); X lputs(curr_dir); X lputc('\r'); X return(0); X } X else X { X ff(se,"Invalid cd subcommand\r\n"); X goto GET_NEW_DIR; X } X } X else if(icd = atoi(s130)) X { X icd--; X if(icd >= cd_in_use) X goto GET_NEW_DIR; X strncpy(s130,cd_array[icd],sizeof(s130) - 1); X s130[sizeof(s130) - 1] = 0; X } X } X if(expand_dirname(s130,sizeof(s130))) X return(-1); X if(chdir(s130) < 0) /* now change to the new directory */ X { X perror(s130); /* print error if we get one */ X ff(se,"\r\n"); X return(-1); X } X get_curr_dir(curr_dir,256); X X fputs("\r\nconfirmed: ",se); X stand_out(); X ff(se," %s ",curr_dir); X stand_end(); X fputs("\r\n",se); X fflush(se); X X for(icd = 0; icd < cd_in_use; icd++) X { X if(strcmp(curr_dir,cd_array[icd]) == 0) X return(0); X } X if(cd_in_use == CD_QUAN) X { X for(icd = 1; icd < CD_QUAN; icd++) X { X strcpy(cd_array[icd - 1],cd_array[icd]); X } X strcpy(cd_array[CD_QUAN - 1],curr_dir); X } X else X strcpy(cd_array[cd_in_use++],curr_dir); X X return(0); X X} /* end of change_directory */ X/* end of ecuchdir.c */ X/* vi: set tabstop=4 shiftwidth=4: */ SHAR_EOF chmod 0644 ecuchdir.c || echo "restore of ecuchdir.c fails" echo "x - extracting ecudump.c (Text)" sed 's/^X//' << 'SHAR_EOF' > ecudump.c && X/* CHK=0x89CA */ X/*+----------------------------------------------------------------------- X ecudump.c -- very generic hex/graphics dump development aid X Copyright 1986,1989 Warren H. Tucker, III. All Rights Reserved X X Defined functions: X hex_dump(str,len,title,terse_flag) X hex_dump_fp(fp,str,len,title,terse_flag) X hex_dump16(int16) X hex_dump32(int32) X hex_dump4(int4) X hex_dump8(int8) X X------------------------------------------------------------------------*/ X/*+:EDITS:*/ X/*:07-27-1989-15:49-wht-fix too many hyphens on odd-length titles */ X/*:07-11-1989-16:52-wht-no carriage returns output if dumpfp != stderr */ X/*:07-03-1989-22:57-wht------------- ecu 2.00 ---------------- */ X/*:06-24-1989-16:52-wht-flush edits --- ecu 1.95 */ X X#include "ecu.h" X Xstatic FILE *dumpfp; X X#define dump_putc(ch) fputc((ch),dumpfp) X#define dump_puts(str) fputs(str,dumpfp) X X/*+----------------------------------------------------------------------- X hex_dump#... subservient routines X------------------------------------------------------------------------*/ Xvoid hex_dump4(int4) Xuchar int4; X{ X int4 &= 15; X dump_putc((int4 >= 10) ? (int4 + 'A' - 10) : (int4 + '0')); X} X Xvoid hex_dump8(int8) Xuchar int8; X{ X hex_dump4(int8 >> 4); X hex_dump4(int8); X} X Xvoid hex_dump16(int16) Xushort int16; X{ X hex_dump8(int16 >> 8); X hex_dump8(int16); X} X Xvoid hex_dump32(int32) Xulong int32; X{ X hex_dump16(int32 >> 16); X hex_dump16(int32); X} X X X/*+----------------------------------------------------------------- X hex_dump_fp(fp,str,len,title,terse_flag) X X if 'title' not NULL, title is printed... 'terse_flag' X controls whether or not the title is "conspicuous" with X hyphens before and after it making title line >70 chars long X------------------------------------------------------------------*/ Xvoid Xhex_dump_fp(fp,str,len,title,terse_flag) XFILE *fp; Xchar *str; Xint len; Xchar *title; Xint terse_flag; X{ Xint istr; Xregister ipos; Xregister itmp; X X dumpfp = fp; X X if(title && (istr = strlen(title))) X { X if(!terse_flag) X { X ipos = (73 - istr) / 2; X itmp = ipos; X while(itmp--) X dump_putc('-'); X dump_putc(' '); X if(istr & 1) X ipos--; X } X dump_puts(title); X if(!terse_flag) X { X dump_putc(' '); X while(ipos--) X dump_putc('-'); X } X if(dumpfp == se) X dump_puts("\r\n"); X else X dump_puts("\n"); X X } X X istr = 0; X while(istr < len) X { X hex_dump16(istr); X dump_putc(' '); X for(itmp = 0; itmp < 16; ++itmp) X { X ipos = istr + itmp; X if(ipos >= len) X { X if(!terse_flag) X dump_puts(" "); X continue; X } X dump_putc(' '); X hex_dump8(str[ipos]); X } X dump_puts(" | "); X for(itmp = 0; itmp < 16; ++itmp) X { X ipos = istr + itmp; X if( (ipos) >= len) X { X if(!terse_flag) X dump_putc(' '); X } X else X { X dump_putc((str[ipos] >= ' ' && str[ipos] < 0x7f) X ? str[ipos] : '.' ); X } X } X if(dumpfp == se) X dump_puts(" |\r\n"); X else X dump_puts(" |\n"); X istr += 16; X } /* end of while(istr < len) */ X X} /* end of hex_dump_fp */ X X/*+------------------------------------------------------------------------- X hex_dump(str,len,title,terse_flag) X--------------------------------------------------------------------------*/ Xvoid Xhex_dump(str,len,title,terse_flag) Xchar *str; Xint len; Xchar *title; Xint terse_flag; X{ X hex_dump_fp(se,str,len,title,terse_flag); X} /* end of hex_dump_fp */ X/* end of ecudump.c */ X/* vi: set tabstop=4 shiftwidth=4: */ SHAR_EOF chmod 0644 ecudump.c || echo "restore of ecudump.c fails" echo "x - extracting ecufinsert.c (Text)" sed 's/^X//' << 'SHAR_EOF' > ecufinsert.c && X/* CHK=0x291F */ X#define USE_XON_XOFF X/*+------------------------------------------------------------------------- X ecufinsert.c -- insert file onto comm line X Copyright 1986,1989 Warren H. Tucker, III. All Rights Reserved X X Defined functions: X file_insert_to_line(fname,arg_present_flag) X X--------------------------------------------------------------------------*/ X/*+:EDITS:*/ X/*:07-03-1989-22:57-wht------------- ecu 2.00 ---------------- */ X/*:06-27-1989-20:32-wht-allow wildcard spec or squiggle dir ref */ X/*:06-24-1989-16:52-wht-flush edits --- ecu 1.95 */ X X#include "ecu.h" X#include "ecukey.h" X Xextern int interrupt; Xextern char kbdintr; /* current input INTR */ X X/*+------------------------------------------------------------------------- X expand_filename(fname) - convert fnames with shell chars X--------------------------------------------------------------------------*/ Xexpand_filename(fname,maxlen) Xchar *fname; Xint maxlen; X{ Xregister itmp; Xregister char *cptr; Xchar s256[256]; Xchar *expcmd; X X if(!find_shell_chars(fname)) X return(0); X X sprintf(s256,"`ls %s`",fname); X if(expand_cmd_with_wildlist(s256,&expcmd)) X { X ff(se,"\r\nNo files match\r\n"); X return; X } X strncpy(fname,expcmd,maxlen); X fname[maxlen - 1] = 0; X if(strchr(expcmd,' ')) X { X fputs("\r\nToo many files:\r\n",se); X fputs(expcmd,se); X fputs("\r\n",se); X free(expcmd); X return(-1); X } X free(expcmd); X return(0); X X} /* end of expand_filename */ X X/*+------------------------------------------------------------------------- X file_insert_to_line(narg,arg) X--------------------------------------------------------------------------*/ Xfile_insert_to_line(narg,arg) Xint narg; Xchar **arg; X{ Xchar insert_fname[128]; Xchar file_string[512]; Xchar response[8]; Xint single_flag; Xint old_ttymode = get_ttymode(); XFILE *fopen(); XFILE *fp; Xlong total_chars = 0L; Xlong total_lines = 0L; X#ifdef USE_XON_XOFF Xint ixon; Xint ixoff; X#endif X X if(narg > 1) X strncpy(insert_fname,arg[1],sizeof(insert_fname)); X else X { X ff(se,"\r\n--> File to insert on comm line: "); X ttygets(insert_fname,sizeof(insert_fname),1); X if( (insert_fname[0] == ESC) || (strlen(insert_fname) == 0) ) X { X ff(se,"--> no transmission\r\n"); X return(0); X } X } X if(expand_filename(insert_fname,sizeof(insert_fname))) X return(-1); X if((fp = fopen(insert_fname,"r")) == (FILE *)0) X { X ff(se,"--> "); X perror(insert_fname); /* print error if we get one */ X ff(se,"\r\n"); X return(-1); X } X X if(narg > 1) X ff(se,"\r\n"); X X if(narg > 2) X response[0] = *arg[2]; X else X { X ff(se,"--> (S)ingle line at a time or (F)ull speed transmission: "); X ttygets(response,sizeof(response),1); X } X single_flag = (to_lower(response[0]) == 's') ? 1 : 0; X if((single_flag == 0) && (to_lower(response[0]) != 'f')) X { X ff(se,"--> file insertion abandoned\r\n"); X fclose(fp); X return(0); X } X X if(single_flag) X ff(se,"--> press [space] to continue or 's' for stop\r\n"); X else X { X ttymode(2); X ff(se,"--> press %s to abort\r\n",make_char_graphic(kbdintr,0)); X } X X#ifdef USE_XON_XOFF X lget_xon_xoff(&ixon,&ixoff); /* get current line xon/xoff status */ X lxon_xoff(IXON | IXOFF); /* set it for us */ X#endif X X while( fgets(file_string,sizeof(file_string),fp) != NULL) X { X file_string[strlen(file_string) - 1] = 0; X total_chars += strlen(file_string); X total_lines++; X if(strlen(file_string) == 0) /* some destinations do not */ X lputc(' '); /* like completely blank lines */ X else X lputs(file_string); X lputc('\r'); X if(interrupt) X { X interrupt = 0; X ff(se,"--> Interrupted\r\n"); X break; X } X if(single_flag) X { X response[0] = ttygetc(0); X if(to_lower(response[0]) == 's') X break; X } X else X nap(60L); X } X X ttymode(old_ttymode); /* restore old console mode */ X#ifdef USE_XON_XOFF X lxon_xoff(ixon | ixoff); /* restore old line xon/xoff status */ X#endif X fclose(fp); X X ff(se,"\r\n--> sent %ld lines, %ld characters\r\n", X total_lines,total_chars); X return(0); X X} /* end of file_insert_to_line */ X/* vi: set tabstop=4 shiftwidth=4: */ SHAR_EOF chmod 0644 ecufinsert.c || echo "restore of ecufinsert.c fails" echo "x - extracting ecufkey.c (Text)" sed 's/^X//' << 'SHAR_EOF' > ecufkey.c && X/* CHK=0xFCA6 */ X/*+----------------------------------------------------------------- X ecufkey.c -- XENIX function key definition X Copyright 1986,1989 Warren H. Tucker, III. All Rights Reserved X X Defined functions: X keyset_display() X keyset_idnum(keystr) X keyset_idstr(keyid) X keyset_init() X keyset_read(keyset_name) X xf_to_keyid(xf) X X------------------------------------------------------------------*/ X/*+:EDITS:*/ X/*:07-03-1989-22:57-wht------------- ecu 2.00 ---------------- */ X/*:06-24-1989-16:52-wht-flush edits --- ecu 1.95 */ X X#if defined(M_XENIX) /* the entire module is bound by this cond. compile */ X#include "ecu.h" X#include "ecukey.h" X#include "ecufkey.h" X#include "ecuxkey.h" X#include "ecufork.h" X Xextern char kbdintr; /* current input INTR */ Xextern char curr_dir[]; /* current working key defns */ X XKDE keyset_table[KDE_COUNT]; Xchar keyset_name[32] = ""; X XXF_KDE_NAME xf_kde_name[] = X{ X { XFcurup, KDE_CUU, "CUU" }, X { XFcurdn, KDE_CUD, "CUD" }, X { XFcurrt, KDE_CUR, "CUR" }, X { XFcurlf, KDE_CUL, "CUL" }, X { XFcur5, KDE_CU5, "CU5" }, X { XFend, KDE_END, "END" }, X { XFpgdn, KDE_PGDN, "PGDN" }, X { XFhome, KDE_HOME, "HOME" }, X { XFpgup, KDE_PGUP, "PGUP" }, X { XFins, KDE_INS, "INS" }, X { XF1, KDE_F1, "F1" }, X { XF2, KDE_F2, "F2" }, X { XF3, KDE_F3, "F3" }, X { XF4, KDE_F4, "F4" }, X { XF5, KDE_F5, "F5" }, X { XF6, KDE_F6, "F6" }, X { XF7, KDE_F7, "F7" }, X { XF8, KDE_F8, "F8" }, X { XF9, KDE_F9, "F9" }, X { XF10, KDE_F10, "F10" }, X { XF11, KDE_F11, "F11" }, X { XF12, KDE_F12, "F12" }, X { XFbktab, KDE_BKTAB, "BKTAB" }, X { 0,0,"" } X}; X X/*+------------------------------------------------------------------------- X keyset_init() X--------------------------------------------------------------------------*/ Xvoid Xkeyset_init() X{ Xregister itmp; Xregister KDE *tkde; Xchar *make_char_graphic(); X X for(itmp = 0; itmp < KDE_COUNT; itmp++) X { X tkde = &keyset_table[itmp]; X tkde->logical[0] = 0; X tkde->outcount = 0; X tkde->keyid = (uchar)itmp; X } X X keyset_name[0] = 0; X X tkde = &keyset_table[KDE_END]; X strcpy(tkde->logical, X (kbdintr == 0x7F) ? "DEL" : make_char_graphic(kbdintr,0)); X tkde->outstr[0] = kbdintr; X tkde->outcount = 1; X X tkde = &keyset_table[KDE_HOME]; X strcpy(tkde->logical,"ecu cmd"); X tkde->outcount = KACT_COMMAND; X X tkde = &keyset_table[KDE_INS]; X strcpy(tkde->logical,"local shell"); X tkde->outcount = KACT_LOCAL_SHELL; X X tkde = &keyset_table[KDE_CU5]; X strcpy(tkde->logical,"Screen dump"); X tkde->outstr[0] = 0x7F; X tkde->outcount = 1; X X} /* end of keyset_init */ X X/*+------------------------------------------------------------------------- X keyset_idnum(keystr) X--------------------------------------------------------------------------*/ Xkeyset_idnum(keystr) Xchar *keystr; X{ Xstruct XF_KDE_NAME *xkn = xf_kde_name; X while(xkn->xf != 0) X { X if(strcmp(xkn->name,keystr) == 0) X return((int)xkn->kde); X xkn++; X } X return(-1); X} /* end of keyset_idnum */ X X/*+------------------------------------------------------------------------- X keyset_idstr(keyid) X--------------------------------------------------------------------------*/ Xchar * Xkeyset_idstr(keyid) Xint keyid; X{ Xstruct XF_KDE_NAME *xkn = xf_kde_name; X while(xkn->xf != 0) X { X if((int)xkn->kde == keyid) X return(xkn->name); X xkn++; X } X return((char *)0); X} /* end of keyset_idstr */ X X/*+------------------------------------------------------------------------- X xf_to_keyid(xf) X--------------------------------------------------------------------------*/ SHAR_EOF echo "End of part 2" echo "File ecufkey.c is continued in part 3" echo "3" > s2_seq_.tmp exit 0 -- ------------------------------------------------------------------- Warren Tucker, Tridom Corporation ...!gatech!emory!tridom!wht Ker-au'-lo-phon. An 8-foot partial flue-stop, having metal pipes surmounted by adjustable rings, and with a hole bored near the top of each pipe, producing a soft and "reedy" tone.