chad@anasaz.UUCP (Chad R. Larson) (10/23/88)
I obtained XCOMM from usenet group alt.sources and built it on my machine which is a PC/AT clone running Microport System V/AT 2.2-L. I discovered several bugs and typo's which I fixed. I also added support for standard UUCP style lock files, as my machine is not running the HoneyDanBer uucp, and the lockfile code posted to the net decides the valid uucp lock files are "stale" and deletes them. The choice of which kind of lock file to use is selected by a new "#define" in the xcomm.h file. I added the ability for the phonelist and script files to be located in a common location. A new #define in the header file specifies a directory to be searched after the current directory and the home directory. On my machine this is set to /usr/local/lib/xcomm. There was code in the xcxmdm.c file to force all xmodem file transfers to be done with CRC checking regardless of the setting of the crc flag. The code went to the effort of saving the state of the flag, however. I presume this was left over from some testing or something. I removed it. Below are context diffs for each of the files that I changed. They are suitable for application with Larry Wall's patch program, or they could be hacked through by hand with your favorite editor. -------------------( begin diffs )------------------------------------ *** xcomm.h.old --- xcomm.h ************** *** 16,21 #define CAPTFILE "capture.log" /* Default capture file */ #define PHFILE ".phonelist" /* Default phonelist file */ #define STARTUP ".xcomm" /* XCOMM Startup Script */ #define DRIBBLE 2 /* Text "dribble" delay */ #define PUT_TAKE /* include put/take code */ #define CIS_INIT 1 /* cismode default 1=on/0=off */ --- 17,23 ----- #define CAPTFILE "capture.log" /* Default capture file */ #define PHFILE ".phonelist" /* Default phonelist file */ #define STARTUP ".xcomm" /* XCOMM Startup Script */ + #define LIBDIR "/usr/local/lib/xcomm/" /* file library name */ #define DRIBBLE 2 /* Text "dribble" delay */ #define PUT_TAKE /* include put/take code */ #define CIS_INIT 1 /* cismode default 1=on/0=off */ ************** *** 19,24 #define DRIBBLE 2 /* Text "dribble" delay */ #define PUT_TAKE /* include put/take code */ #define CIS_INIT 1 /* cismode default 1=on/0=off */ #define HAVE_DUP2 0 /* 0 if dup2() not available */ #define HAVE_STRSTR 0 /* We have to define strstr() */ --- 21,27 ----- #define DRIBBLE 2 /* Text "dribble" delay */ #define PUT_TAKE /* include put/take code */ #define CIS_INIT 1 /* cismode default 1=on/0=off */ + #define HDBR 0 /* 1 for HoneyDanBer locks, else 0 */ #define HAVE_DUP2 0 /* 0 if dup2() not available */ #define HAVE_STRSTR 0 /* We have to define strstr() */ *** xcport.c.old --- xcport.c ************** *** 350,355 Simple, eh? */ char lckf[40] = "/usr/spool/locks/LCK.."; char ltmp[40] = "/usr/spool/locks/LTMP."; --- 350,356 ----- Simple, eh? */ + #if HDBR char lckf[40] = "/usr/spool/locks/LCK.."; char ltmp[40] = "/usr/spool/locks/LTMP."; #else ************** *** 352,357 char lckf[40] = "/usr/spool/locks/LCK.."; char ltmp[40] = "/usr/spool/locks/LTMP."; lock_tty() { --- 353,362 ----- #if HDBR char lckf[40] = "/usr/spool/locks/LCK.."; char ltmp[40] = "/usr/spool/locks/LTMP."; + #else + char lckf[40] = "/usr/spool/uucp/LCK.."; + char ltmp[40] = "/usr/spool/uucp/LTMP."; + #endif /* HDBR */ lock_tty() { ************** *** 355,361 lock_tty() { ! int pid, lckpid, lfd; char pidstr[20]; char lckpidstr[20]; char *modemname; --- 360,366 ----- lock_tty() { ! int pid, lfd; char pidstr[20]; char *modemname; #if HDBR ************** *** 357,363 { int pid, lckpid, lfd; char pidstr[20]; - char lckpidstr[20]; char *modemname; extern int errno; --- 362,367 ----- { int pid, lfd; char pidstr[20]; char *modemname; #if HDBR char lckpidstr[20]; ************** *** 359,365 char pidstr[20]; char lckpidstr[20]; char *modemname; ! extern int errno; /* * Get our PID, and initialize the filename strings. --- 363,372 ----- int pid, lfd; char pidstr[20]; char *modemname; ! #if HDBR ! char lckpidstr[20]; ! int lckpid; ! #endif /* HDBR */ /* * Get our PID, and initialize the filename strings. ************** *** 385,390 /* * Attempt to link directly - if it works, we're done. */ relink: if (link(ltmp, lckf) == 0) { unlink(ltmp); --- 392,398 ----- /* * Attempt to link directly - if it works, we're done. */ + #if HDBR relink: #endif /* HDBR */ if (link(ltmp, lckf) == 0) { ************** *** 386,391 * Attempt to link directly - if it works, we're done. */ relink: if (link(ltmp, lckf) == 0) { unlink(ltmp); return 0; --- 394,400 ----- */ #if HDBR relink: + #endif /* HDBR */ if (link(ltmp, lckf) == 0) { unlink(ltmp); return 0; ************** *** 389,394 if (link(ltmp, lckf) == 0) { unlink(ltmp); return 0; } /* --- 398,404 ----- if (link(ltmp, lckf) == 0) { unlink(ltmp); return 0; + #if HDBR } /* ************** *** 411,416 */ if (unlink(lckf)) { fprintf(stderr, "Can't unlink(2) stale LCK?\r\n"); unlink(ltmp); return -1; } --- 421,430 ----- */ if (unlink(lckf)) { fprintf(stderr, "Can't unlink(2) stale LCK?\r\n"); + #else + } else { + fprintf(stderr, "%s unavailable, locked.\r\n", port); + #endif /* HDBR */ unlink(ltmp); return -1; } ************** *** 414,419 unlink(ltmp); return -1; } goto relink; /*NOTREACHED*/ } --- 428,434 ----- unlink(ltmp); return -1; } + #if HDBR goto relink; /*NOTREACHED*/ #endif /* HDBR */ ************** *** 416,421 } goto relink; /*NOTREACHED*/ } unlock_tty() --- 431,437 ----- #if HDBR goto relink; /*NOTREACHED*/ + #endif /* HDBR */ } unlock_tty() *** xcterm.c.old --- xcterm.c ************** *** 195,204 if (home = (char *) getenv("HOME")) { sprintf(fullname, "%s/%s", home, name); ! return fopen(fullname, "r"); ! } else ! return NULL; ! } /* Select a script file. If the file exists, execute it, otherwise --- 197,205 ----- if (home = (char *) getenv("HOME")) { sprintf(fullname, "%s/%s", home, name); ! if (fp = fopen(fullname, "r")) ! return fp; ! } strcpy(fullname, LIBDIR); strcat(fullname, name); ************** *** 200,205 return NULL; } /* Select a script file. If the file exists, execute it, otherwise exit with a non-zero return. --- 201,211 ----- return fp; } + strcpy(fullname, LIBDIR); + strcat(fullname, name); + return fopen(fullname, "r"); + } + /* Select a script file. If the file exists, execute it, otherwise exit with a non-zero return. ************** *** 242,249 int c, i; if ((fp = openfile(phonefile)) == NULL) { ! fprintf(tfp,"Phonelist file '%s' not in current or home directory\r\n", ! phonefile); return; } --- 248,254 ----- int c, i; if ((fp = openfile(phonefile)) == NULL) { ! fprintf(tfp,"Phonelist file '%s' not found\r\n", phonefile); return; } *** xcxmdm.c.old --- xcxmdm.c ************** *** 42,48 static unsigned short updcrc(); static void newsigint(); /* Our SIGINT handler */ - static int save_crc; /* Saved crcheck value */ static jmp_buf our_env; xreceive(c) --- 42,47 ----- static unsigned short updcrc(); static void newsigint(); /* Our SIGINT handler */ static jmp_buf our_env; xreceive(c) ************** *** 54,60 } xc_setxon(0); /* turn off XON/XOFF */ - save_crc = crcheck; signal(SIGINT, newsigint); /* Install our handler */ if (!setmode(c)) { --- 53,58 ----- } xc_setxon(0); /* turn off XON/XOFF */ signal(SIGINT, newsigint); /* Install our handler */ if (!setmode(c)) { ************** *** 59,65 if (!setmode(c)) { if (setjmp (our_env) == 0) { - crcheck = 0xff; do_xreceive(word); } } --- 57,62 ----- if (!setmode(c)) { if (setjmp (our_env) == 0) { do_xreceive(word); } } ************** *** 65,71 } signal(SIGINT, SIG_IGN); /* Reinstall old handler */ - crcheck = save_crc; restmode(); } --- 62,67 ----- } signal(SIGINT, SIG_IGN); /* Reinstall old handler */ restmode(); } ************** *** 78,84 } xc_setxon(0); /* turn off XON/XOFF */ - save_crc = crcheck; signal(SIGINT, newsigint); /* Install our handler */ if (!setmode(c)) { --- 74,79 ----- } xc_setxon(0); /* turn off XON/XOFF */ signal(SIGINT, newsigint); /* Install our handler */ if (!setmode(c)) { ************** *** 83,89 if (!setmode(c)) { if (setjmp (our_env) == 0) { - crcheck = 0xff; do_xsend(word); } } --- 78,83 ----- if (!setmode(c)) { if (setjmp (our_env) == 0) { do_xsend(word); } } ************** *** 89,95 } signal(SIGINT, SIG_IGN); /* Reinstall old handler */ - crcheck = save_crc; restmode(); } --- 83,88 ----- } signal(SIGINT, SIG_IGN); /* Reinstall old handler */ restmode(); } ************** *** 141,147 if (!mungmode && !access(name, 0)) { canit(); ! fprintf(tfp,"Receive of %s aborted due to pre-exsistence.\r\n"); return(ERROR); } --- 134,140 ----- if (!mungmode && !access(name, 0)) { canit(); ! fprintf(tfp,"Receive of %s aborted due to pre-existence.\r\n", name); return(ERROR); } ************** *** 147,153 if ((xfp = fopen(name, "w")) == NULL) { canit(); ! fprintf(tfp,"Receive of %s aborted due to inabilty to open.\r\n"); return(ERROR); } firstsec = TRUE; --- 140,146 ----- if ((xfp = fopen(name, "w")) == NULL) { canit(); ! fprintf(tfp,"Receive of %s aborted due to inabilty to open.\r\n", name); return(ERROR); } firstsec = TRUE; ************** *** 329,335 fprintf(tfp,"\r\nTimeout\r\n"); break; } ! fprintf(tfp,"\r\nTrying again on ths sector.\r\n"); purge(); if (firstsec) sendbyte(crcheck ? WANTCRC : NAK); --- 322,328 ----- fprintf(tfp,"\r\nTimeout\r\n"); break; } ! fprintf(tfp,"\r\nTrying again on this sector.\r\n"); purge(); if (firstsec) sendbyte(crcheck ? WANTCRC : NAK); ************** *** 439,445 { register int i; ! for(i = 0; i < 20; i++) sendbyte(CAN); } --- 432,438 ----- { register int i; ! for(i = 0; i < 10; i++) sendbyte(CAN); } --------------- "All the young dudes carry the news" --David Bowie =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | DCF, Inc. | UUCP: ...ncar!noao!nud!anasaz!dcfinc!chad | | 14623 North 49th Place | Ma Bell: (602) 953-1392 | | Scottsdale, AZ 85254 | Loran: N-33deg37min20sec W-111deg58min26sec | =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | Disclaimer: These ARE the opinions of my employer! | =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=