wht@n4hgf.Mt-Park.GA.US (Warren Tucker) (01/29/91)
Submitted-by: wht@n4hgf.Mt-Park.GA.US (Warren Tucker) Posting-number: Volume 16, Issue 88 Archive-name: ecu3/patch04 Patch-To: ecu3: Volume 16, Issue 25-59 ECU 3 PATCH 4 - miscellaneous, 1 serious 1. fix bug in non-ANSI key handling causing core dump fairly often (but not on my sys :-<) 2. duplicate definiton of ECULIBDIR in ecu.h fixed 3. cosmetic fix in 'fi' interactive command prompt 4. comm line flusher lflush() was flushing console tty instead 5. illegal color name in 'color' procedure command caused hi_white on hi_white instead or error 6. prototypes for strchr/strrchr in stdio_lint.h caused problems on some systems 7. procedure sz was not reporting proper results if files skipped 8. miscellaneous cosmetic fixes and maintenance/experimental rearrangements created by gendiff x1.03 on 28 Jan 1991 00:29 UTC *** /u4/src/ecu3.03/ecu.c Thu Jan 10 14:04:57 1991 --- ecu.c Fri Jan 18 00:27:08 1991 *************** *** 151,157 setbuf(stderr,NULL); /* get this off quick, cause we'll be busy for a little while on 286 */ ! sprintf(hello_str,"ecu %s.%02d%s (pid %d) by wht@n4hgf", numeric_revision,PATCHLEVEL,revision_modifier,xmtr_pid); ff(se,"%s\n",hello_str); --- 151,157 ----- setbuf(stderr,NULL); /* get this off quick, cause we'll be busy for a little while on 286 */ ! sprintf(hello_str,"ecu %s.%02d%s (pid %d)", numeric_revision,PATCHLEVEL,revision_modifier,xmtr_pid); ff(se,"%s\n",hello_str); *** /u4/src/ecu3.03/ecu.h Tue Jan 22 14:37:39 1991 --- ecu.h Fri Jan 25 06:08:44 1991 *************** *** 3,8 wht@n4hgf.Mt-Park.GA.US ------------------------------------------------------------------------*/ /*+:EDITS:*/ /*:01-22-1991-14:33-wht@n4hgf-XENIX calloc/memmove fix */ /*:01-01-1991-21:36-wht@n4hgf-add GCC implies STDC */ /*:08-14-1990-20:39-wht@n4hgf-ecu3.00-flush old edit history */ --- 3,9 ----- wht@n4hgf.Mt-Park.GA.US ------------------------------------------------------------------------*/ /*+:EDITS:*/ + /*:01-25-1991-06:08-wht@n4hgf-mulltiple #define of ECULIBDIR */ /*:01-22-1991-14:33-wht@n4hgf-XENIX calloc/memmove fix */ /*:01-01-1991-21:36-wht@n4hgf-add GCC implies STDC */ /*:08-14-1990-20:39-wht@n4hgf-ecu3.00-flush old edit history */ *************** *** 7,14 /*:01-01-1991-21:36-wht@n4hgf-add GCC implies STDC */ /*:08-14-1990-20:39-wht@n4hgf-ecu3.00-flush old edit history */ - #define ECULIBDIR "/usr/local/lib/ecu" - #if defined(__STDC__) /* sigh ... malloc and such types */ #define VTYPE void #else --- 8,13 ----- /*:01-01-1991-21:36-wht@n4hgf-add GCC implies STDC */ /*:08-14-1990-20:39-wht@n4hgf-ecu3.00-flush old edit history */ #if defined(__STDC__) /* sigh ... malloc and such types */ #define VTYPE void #else *************** *** 50,55 #include "ecuhangup.h" #include "ecushm.h" /* already in ecushm.h */ /* #if !defined(ushort) */ --- 49,55 ----- #include "ecuhangup.h" #include "ecushm.h" + #include "smap.h" /* already in ecushm.h */ /* #if !defined(ushort) */ *** /u4/src/ecu3.03/ecufinsert.c Tue Jan 1 23:05:11 1991 --- ecufinsert.c Fri Jan 18 17:05:53 1991 *************** *** 129,135 ff(se,"--> (S)ingle line at a time\r\n"); ff(se," (E)cho pacing\r\n"); ff(se," (F)ull speed transmission\r\n"); ! ff(se," (P)aced transmission (20 msec/schar)\r\n"); ff(se," (Q)uit (or ESC): "); xmit_mode = ttygetc(0) & 0x7F; if(xmit_mode > 0x20) --- 129,135 ----- ff(se,"--> (S)ingle line at a time\r\n"); ff(se," (E)cho pacing\r\n"); ff(se," (F)ull speed transmission\r\n"); ! ff(se," (P)aced transmission (20 msec/char)\r\n"); ff(se," (Q)uit (or ESC): "); xmit_mode = ttygetc(0) & 0x7F; if(xmit_mode > 0x20) *** /u4/src/ecu3.03/ecuicmd.c Thu Jan 10 14:05:01 1991 --- ecuicmd.c Wed Jan 23 16:02:46 1991 *************** *** 432,437 fputs(hello_str,se); fputs("\r\n",se); ff(se,"%s\r\n",makedate); break; case CTtime: --- 432,440 ----- fputs(hello_str,se); fputs("\r\n",se); ff(se,"%s\r\n",makedate); + #if defined(WHT) && !defined(NOMEMCHECK) + _dump_malloc(); + #endif break; case CTtime: *** /u4/src/ecu3.03/eculine.c Thu Jan 10 14:05:03 1991 --- eculine.c Fri Jan 25 05:57:26 1991 *************** *** 35,40 ------------------------------------------------------------------------*/ /*+:EDITS:*/ /*:01-09-1991-22:31-wht@n4hgf-ISC port */ /*:01-09-1991-21:26-wht@n4hgf-don't prototype nap() (ISC port) */ /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ --- 35,41 ----- ------------------------------------------------------------------------*/ /*+:EDITS:*/ + /*:01-25-1991-05:57-wht@n4hgf-cringe - lflush was flushing console not line */ /*:01-09-1991-22:31-wht@n4hgf-ISC port */ /*:01-09-1991-21:26-wht@n4hgf-don't prototype nap() (ISC port) */ /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ *************** *** 528,534 switch(flush_type) { case 0: ! ioctl(TTYIN,TCFLSH,(char *)0); break; case 1: ioctl(TTYIN,TCFLSH,(char *)1); break; case 2: --- 529,535 ----- switch(flush_type) { case 0: ! ioctl(shm->Liofd,TCFLSH,(char *)0); break; case 1: ioctl(shm->Liofd,TCFLSH,(char *)1); break; case 2: *************** *** 530,536 case 0: ioctl(TTYIN,TCFLSH,(char *)0); break; case 1: ! ioctl(TTYIN,TCFLSH,(char *)1); break; case 2: ioctl(TTYIN,TCFLSH,(char *)2); break; } --- 531,537 ----- case 0: ioctl(shm->Liofd,TCFLSH,(char *)0); break; case 1: ! ioctl(shm->Liofd,TCFLSH,(char *)1); break; case 2: ioctl(shm->Liofd,TCFLSH,(char *)2); break; } *************** *** 532,538 case 1: ioctl(TTYIN,TCFLSH,(char *)1); break; case 2: ! ioctl(TTYIN,TCFLSH,(char *)2); break; } } /* end of lflush */ --- 533,539 ----- case 1: ioctl(shm->Liofd,TCFLSH,(char *)1); break; case 2: ! ioctl(shm->Liofd,TCFLSH,(char *)2); break; } } /* end of lflush */ *** /u4/src/ecu3.03/ecuphone.c Thu Jan 10 14:05:17 1991 --- ecuphone.c Wed Jan 16 23:59:44 1991 *************** *** 1647,1653 case 0: /* CONNECTED */ tpde->redial = 0; pde_marked_for_redial_count--; - #if defined(M_SYSV) bell_notify(XBELL_C); #endif return(1); --- 1647,1652 ----- case 0: /* CONNECTED */ tpde->redial = 0; pde_marked_for_redial_count--; bell_notify(XBELL_C); return(1); case 2: /* INTERRUPTED */ *************** *** 1649,1655 pde_marked_for_redial_count--; #if defined(M_SYSV) bell_notify(XBELL_C); - #endif return(1); case 2: /* INTERRUPTED */ ff(se,"\r\ndial interrupted: abort cycle (y,n)? "); --- 1648,1653 ----- tpde->redial = 0; pde_marked_for_redial_count--; bell_notify(XBELL_C); return(1); case 2: /* INTERRUPTED */ ff(se,"\r\ndial interrupted: abort cycle (y,n)? "); *** /u4/src/ecu3.03/ecurcvr.c Thu Jan 10 14:05:18 1991 --- ecurcvr.c Thu Jan 17 00:00:04 1991 *************** *** 1103,1109 { shmr_set_xmtr_bn_1(); want_bell_notify = 1; - #if defined(M_SYSV) bell_notify(XBELL_3T); #endif } --- 1103,1108 ----- { shmr_set_xmtr_bn_1(); want_bell_notify = 1; bell_notify(XBELL_3T); } else if(rchar == 7) *************** *** 1105,1111 want_bell_notify = 1; #if defined(M_SYSV) bell_notify(XBELL_3T); - #endif } else if(rchar == 7) { --- 1104,1109 ----- shmr_set_xmtr_bn_1(); want_bell_notify = 1; bell_notify(XBELL_3T); } else if(rchar == 7) { *************** *** 1109,1115 } else if(rchar == 7) { - #if defined(M_SYSV) bell_notify(XBELL_ATTENTION); #endif return(0); --- 1107,1112 ----- } else if(rchar == 7) { bell_notify(XBELL_ATTENTION); return(0); } *************** *** 1111,1117 { #if defined(M_SYSV) bell_notify(XBELL_ATTENTION); - #endif return(0); } --- 1108,1113 ----- else if(rchar == 7) { bell_notify(XBELL_ATTENTION); return(0); } *** /u4/src/ecu3.03/ecuutil.c Thu Jan 10 14:05:24 1991 --- ecuutil.c Fri Jan 25 16:23:25 1991 *************** *** 31,36 ------------------------------------------------------------------------*/ /*+:EDITS:*/ /*:12-26-1990-14:32-wht@n4hgf-use memmove or Duff's Device in mem_cpy() */ /*:12-04-1990-00:58-wht@n4hgf-allow alternating between str/arg_token */ /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ --- 31,37 ----- ------------------------------------------------------------------------*/ /*+:EDITS:*/ + /*:01-25-1991-16:23-wht@n4hgf-source name wrong in headers */ /*:12-26-1990-14:32-wht@n4hgf-use memmove or Duff's Device in mem_cpy() */ /*:12-04-1990-00:58-wht@n4hgf-allow alternating between str/arg_token */ /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ *** /u4/src/ecu3.03/ecuxenix.c Thu Jan 10 14:05:24 1991 --- ecuxenix.c Thu Jan 17 00:01:09 1991 *************** *** 20,25 This module is a grab bag for historical reasons. Needs reorg. ------------------------------------------------------------------*/ /*+:EDITS:*/ /*:01-09-1991-22:31-wht@n4hgf-ISC port */ /*:12-04-1990-03:55-wht@n4hgf-bell_notify only if on multiscreen */ /*:09-19-1990-19:36-wht@n4hgf-ecu_log_event now gets pid for log from caller */ --- 20,26 ----- This module is a grab bag for historical reasons. Needs reorg. ------------------------------------------------------------------*/ /*+:EDITS:*/ + /*:01-16-1991-23:54-wht@n4hgf-if WHT, bell_notify always available */ /*:01-09-1991-22:31-wht@n4hgf-ISC port */ /*:12-04-1990-03:55-wht@n4hgf-bell_notify only if on multiscreen */ /*:09-19-1990-19:36-wht@n4hgf-ecu_log_event now gets pid for log from caller */ *************** *** 471,476 bell_notify(xbell_type) int xbell_type; { extern int tty_is_multiscreen; if(tty_is_multiscreen && want_bell_notify) --- 472,478 ----- bell_notify(xbell_type) int xbell_type; { + #if defined(M_SYSV) extern int tty_is_multiscreen; if( *************** *** 473,479 { extern int tty_is_multiscreen; ! if(tty_is_multiscreen && want_bell_notify) bell_alarm(xbell_type); } /* end of bell_notify */ --- 475,486 ----- #if defined(M_SYSV) extern int tty_is_multiscreen; ! if( ! #ifndef WHT ! tty_is_multiscreen && ! #endif ! want_bell_notify) ! { bell_alarm(xbell_type); } #endif *************** *** 475,481 if(tty_is_multiscreen && want_bell_notify) bell_alarm(xbell_type); ! } /* end of bell_notify */ /*+------------------------------------------------------------------------- --- 482,489 ----- want_bell_notify) { bell_alarm(xbell_type); ! } ! #endif } /* end of bell_notify */ /*+------------------------------------------------------------------------- *** /u4/src/ecu3.03/nonansikey.c Thu Jan 10 14:05:32 1991 --- nonansikey.c Sun Jan 27 19:27:11 1991 *************** *** 10,15 ------------------------------------------------------------------*/ /*+:EDITS:*/ /*:12-01-1990-12:51-wht@n4hgf-creation, borrowing from and using ecufkey.c */ #include "ecu.h" --- 10,16 ----- ------------------------------------------------------------------*/ /*+:EDITS:*/ + /*:01-10-1991-23:15-wht@n4hgf-string overflow rptd by spooley@compulink.co.uk */ /*:12-01-1990-12:51-wht@n4hgf-creation, borrowing from and using ecufkey.c */ #include "ecu.h" *************** *** 58,64 register char *bufptr; { register itmp; ! register token_number; KDE *tkde; int KDEt; int done = 0; --- 59,65 ----- register char *bufptr; { register itmp; ! register token_number = 0; KDE *tkde; int KDEt; int done = 0; *************** *** 62,68 KDE *tkde; int KDEt; int done = 0; ! char token_separator[2]; char *token; char *arg_token(); char *str_token(); --- 63,69 ----- KDE *tkde; int KDEt; int done = 0; ! char *token_separator = ":"; char *token; char *arg_token(); char *str_token(); *************** *** 68,75 char *str_token(); char *strip_ld_break(); - token_number = 0; - strcpy(token_separator,":"); while(!done && (token = (token_number < 2) ? str_token(bufptr,":") : arg_token(bufptr," \t"))) { --- 69,74 ----- char *str_token(); char *strip_ld_break(); while(!done && (token = (token_number < 2) ? str_token(bufptr,":") : arg_token(bufptr," \t"))) { *************** *** 95,101 goto MISSING_LABEL; strncpy(tkde->logical,token,sizeof(tkde->logical)); tkde->logical[sizeof(tkde->logical) - 1] = 0; ! strcpy(token_separator," \t"); /* space is tok sep now */ break; case 2: /* third field is first token of sequence */ --- 94,100 ----- goto MISSING_LABEL; strncpy(tkde->logical,token,sizeof(tkde->logical)); tkde->logical[sizeof(tkde->logical) - 1] = 0; ! token_separator = " \t"; /* space is tok sep now */ break; case 2: /* third field is first token of sequence */ *** /u4/src/ecu3.03/pcmdtty.c Mon Dec 24 22:42:00 1990 --- pcmdtty.c Wed Jan 23 03:03:10 1991 *************** *** 20,25 --------------------------------------------------------------------------*/ /*+:EDITS:*/ /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ #include "ecu.h" --- 20,26 ----- --------------------------------------------------------------------------*/ /*+:EDITS:*/ + /*:01-23-1991-01:58-wht@n4hgf-illegal color name make hi_white on hi_white */ /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ #include "ecu.h" *************** *** 67,73 } if((erc = get_alpha_zstr(param,s32,sizeof(s32))) || ! ((foreground = color_name_to_num(s32))) < 0) goto ERROR; if(erc = get_alpha_zstr(param,s32,sizeof(s32))) --- 68,74 ----- } if((erc = get_alpha_zstr(param,s32,sizeof(s32))) || ! ((int)(foreground = color_name_to_num(s32)) < 0)) goto ERROR; if(erc = get_alpha_zstr(param,s32,sizeof(s32))) *************** *** 76,82 goto ERROR; background = 0; } ! else if((background = color_name_to_num(s32)) < 0) goto ERROR; if(normal) --- 77,83 ----- goto ERROR; background = 0; } ! else if((int)(background = color_name_to_num(s32)) < 0) goto ERROR; if(normal) *** /u4/src/ecu3.03/pcmdxfer.c Mon Dec 24 22:42:00 1990 --- pcmdxfer.c Fri Jan 18 00:32:48 1991 *************** *** 19,24 --------------------------------------------------------------------------*/ /*+:EDITS:*/ /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ #include "ecu.h" --- 19,25 ----- --------------------------------------------------------------------------*/ /*+:EDITS:*/ + /*:01-17-1991-17:01-wht@n4hgf-skipped files in sz aborted proc */ /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ #include "ecu.h" *************** *** 96,102 else { if(exec_cmd(expcmd)) ! erc = eFATAL_ALREADY; free(expcmd); } } --- 97,103 ----- else { if(exec_cmd(expcmd)) ! erc = report_send_status(); free(expcmd); } } *************** *** 103,109 else { if(exec_cmd(execcmd)) ! erc = eFATAL_ALREADY; } lreset_ksr(); file_xfer_done_bell(); --- 104,110 ----- else { if(exec_cmd(execcmd)) ! erc = report_send_status(); } lreset_ksr(); file_xfer_done_bell(); *************** *** 109,115 file_xfer_done_bell(); if(erc) return(erc); ! erc = report_send_status(); if(!erc) iv[0] = 0; if(erc == eProcAttn_Interrupt) --- 110,116 ----- file_xfer_done_bell(); if(erc) return(erc); ! iv[0] = (unsigned long)last_child_wait_status; if(!erc) iv[0] = 0; if(erc == eProcAttn_Interrupt) *************** *** 246,252 #ifdef WHT /* for testing */ if(strchr(switches,'p')) strcat(execcmd,"-, "); ! if(strchr(switches,'n')) strcat(execcmd,"-@ "); #endif --- 247,253 ----- #ifdef WHT /* for testing */ if(strchr(switches,'p')) strcat(execcmd,"-, "); ! if(strchr(switches,'N')) strcat(execcmd,"-@ "); #endif *************** *** 338,344 strcat(execcmd,pathlist->pb); free_esd(pathlist); ! return(_send_common(execcmd)); } /* end of pcmd_ss */ --- 339,347 ----- strcat(execcmd,pathlist->pb); free_esd(pathlist); ! if(exec_cmd(execcmd)) ! erc = eFATAL_ALREADY; ! return(erc); } /* end of pcmd_ss */ *************** *** 348,354 void _rx_error() { - extern int last_child_wait_status; iv[0] = (last_child_wait_status & 0xFF) ? 0x100L : (long)last_child_wait_status >> 8; --- 351,356 ----- void _rx_error() { iv[0] = (last_child_wait_status & 0xFF) ? 0x100L : (long)last_child_wait_status >> 8; *************** *** 455,461 strcat(execcmd,"-: "); if(strchr(switches,'p')) strcat(execcmd,"-, "); ! if(strchr(switches,'n')) strcat(execcmd,"-@ "); #endif strcat(execcmd,bottom_label); --- 457,463 ----- strcat(execcmd,"-: "); if(strchr(switches,'p')) strcat(execcmd,"-, "); ! if(strchr(switches,'N')) strcat(execcmd,"-@ "); #endif strcat(execcmd,bottom_label); *** /u4/src/ecu3.03/pprintf.c Thu Jan 10 14:05:33 1991 --- pprintf.c Sat Jan 26 15:07:22 1991 *************** *** 1,5 /*+------------------------------------------------------------------------- ! pprintf.c - preocedure printf --------------------------------------------------------------------------*/ /*+:EDITS:*/ /*:01-09-1991-22:31-wht@n4hgf-ISC port */ --- 1,5 ----- /*+------------------------------------------------------------------------- ! pprintf.c - procedure printf --------------------------------------------------------------------------*/ /*+:EDITS:*/ /*:01-09-1991-22:31-wht@n4hgf-ISC port */ *** /u4/src/ecu3.03/smap.h Mon Dec 24 22:44:00 1990 --- smap.h Wed Jan 23 15:55:26 1991 *************** *** 22,27 /*+:EDITS:*/ /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ #define NOMEMCHECK #ifndef __GNUC__ --- 22,28 ----- /*+:EDITS:*/ /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ + #ifndef WHT #define NOMEMCHECK #endif *************** *** 23,28 /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ #define NOMEMCHECK #ifndef __GNUC__ #if !defined(VTYPE) --- 24,30 ----- #ifndef WHT #define NOMEMCHECK + #endif #ifndef __GNUC__ #if !defined(VTYPE) *** /u4/src/ecu3.03/stdio_lint.h Thu Jan 10 14:05:35 1991 --- stdio_lint.h Fri Jan 18 11:55:21 1991 *************** *** 3,8 wht@n4hgf.Mt-Park.GA.US --------------------------------------------------------------------------*/ /*+:EDITS:*/ /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ #if defined(__STDC__) --- 3,9 ----- wht@n4hgf.Mt-Park.GA.US --------------------------------------------------------------------------*/ /*+:EDITS:*/ + /*:01-18-1991-11:55-wht@n4hgf-fix strchr/strrchr per steve@nshore.ncoast.org */ /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ #if defined(__STDC__) *************** *** 25,32 char *strncpy(char *,char *,int); char *strcat(char *,char *); char *strncat(char *,char *,int); ! char *strchr(char *,char); ! char *strrchr(char *,char); #endif int stat(char *,struct stat *); int fstat(int,struct stat *); --- 26,33 ----- char *strncpy(char *,char *,int); char *strcat(char *,char *); char *strncat(char *,char *,int); ! char *strchr(char *,int); ! char *strrchr(char *,int); #endif int stat(char *,struct stat *); int fstat(int,struct stat *); *** /u4/src/ecu3.03/ecuvmin.h Mon Dec 24 22:35:00 1990 --- ecuvmin.h Thu Jan 10 04:14:20 1991 *************** *** 5,12 /*+:EDITS:*/ /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ ! #if defined(M_XENIX) || defined(M_UNIX) ! #if defined(BUILDING_LINT_ARGS /* if building lint_args.h ... */) #define XENIX_VMIN 2 /* ... include vmin handling routines */ #else #define XENIX_VMIN 1 /* this is the real value for vmin */ --- 5,11 ----- /*+:EDITS:*/ /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */ ! #if defined(BUILDING_PROTOTYPES) /* if building lint_args.h ... */ #define XENIX_VMIN 2 /* ... include vmin handling routines */ #else #define XENIX_VMIN 1 /* this is the real value for vmin */ *************** *** 10,15 #define XENIX_VMIN 2 /* ... include vmin handling routines */ #else #define XENIX_VMIN 1 /* this is the real value for vmin */ - #endif #endif /* vi: set tabstop=4 shiftwidth=4: */ --- 9,13 ----- #define XENIX_VMIN 2 /* ... include vmin handling routines */ #else #define XENIX_VMIN 1 /* this is the real value for vmin */ #endif /* vi: set tabstop=4 shiftwidth=4: */ *** /u4/src/ecu3.03/patchlevel.h Tue Jan 22 14:37:39 1991 --- patchlevel.h Wed Jan 23 01:58:53 1991 *************** *** 1,1 ! #define PATCHLEVEL 3 --- 1,1 ----- ! #define PATCHLEVEL 4 exit 0 # Just in case... -- Kent Landfield INTERNET: kent@sparky.IMD.Sterling.COM Sterling Software, IMD UUCP: uunet!sparky!kent Phone: (402) 291-8300 FAX: (402) 291-4362 Please send comp.sources.misc-related mail to kent@uunet.uu.net.