acs@amdahl.amdahl.com (Tony Sumrall) (10/06/87)
I've fixed the BS<->DEL bug and DBW has verified it. I tried to get this to doc before he posted R2.7 but, alas, I was too late. Included are mode to README (I added some doc to the R2.6 section by accident). There should be a signature at the end of this thing. *** README Thu Oct 1 05:59:53 1987 --- README.old Mon Oct 5 17:46:49 1987 *************** *** 41,51 **** file, +i file says use "file". User may also specify script files on the command line which will be executed in sequence. - New init file command SHORTCUT. See vt100.doc. - - I've included the font code. It looks for an env variable named - "font" (yes, lowercase) and, if found, uses that font for its - test. If you don't like it you may wanna remove it. I was gonna - ifdef it but I ran out of time. Remember that there's a PD set - cmd to allow Lattice users to set env vars. - Nagging bug: On 2nd and subsequent uses of the requester, the 1st character of the last use is redisplayed. Intuition bug? v2.6 870227 DBW - bug fixes for all the stuff in v2.5 --- 41,46 ---- *************** *** 56,61 **** --- 51,62 ---- - MAJOR CHANGE: re write the INPUT/SCRIPT commands, see VT100.DOC - Fixed a major problem with Set Directory causing LOCK conflicts - Moved the Title up 1 pixel so that it doesn't get cut off anymore + - I've included the font code. It looks for an env variable named + "font" (yes, lowercase) and, if found, uses that font for its + test. If you don't like it you may wanna remove it. I was gonna + ifdef it but I ran out of time. Remember that there's a PD set + cmd to allow Lattice users to set env vars. + v2.5 870214 DBW - more additions (see readme file) - All prompting now done through a string requester/gadget. NOTE: YOU MUST SELECT THE INPUT STRING OF THE REQUESTER BEFORE *** script.c Wed Sep 30 12:01:27 1987 --- script.old.c Tue Sep 29 18:23:23 1987 *************** *** 753,764 **** char *par; { setvar(par,0,&p_bs_del); ! if (doing_init == 0) ! redoutil(); /* Calls InitUtilItems which does swap_bs_del() */ ! else { ! swap_bs_del(); /* Setup keys[] properly... */ ! swap_bs_del(); /* ...for new mode */ ! } } void cmd_bkg(par) --- 753,759 ---- char *par; { setvar(par,0,&p_bs_del); ! if (doing_init == 0) redoutil(); } void cmd_bkg(par) *** init.c Wed Sep 30 12:03:39 1987 --- init.old.c Mon Oct 5 17:46:52 1987 *************** *** 523,530 **** if (p_keyapp == 0) UtilItem[6].Flags |= CHECKED; if (p_curapp) UtilItem[7].Flags |= CHECKED; if (p_bs_del) UtilItem[8].Flags |= CHECKED; - swap_bs_del(); /* Setup keys[] properly... */ - swap_bs_del(); /* ...for mode */ } /****************************************************************/ --- 523,528 ---- -- Tony Sumrall acs@amdahl.com <=> amdahl!acs [ Opinions expressed herein are the author's and should not be construed to reflect the views of Amdahl Corp. ]
davison@drivax.UUCP (Wayne Davison) (10/14/87)
Here's a few fixes for VT100 R2.7: Firstly, the file-chopping code for XMODEM downloads is a little over-zealous. The current code (which has been around for quite some time) will chop off ANY pattern of nulls AND Ctrl-Z's. This is particularly bad for .arc files, since the last two characters before the padding are always a Ctrl-Z/null. There is also a problem with the xmodem send-padding. It always uses nulls for padding even when the last character of the file was a null. This makes it impossible to chop the file upon receipt, because there is no distinction between padding and data. While fixing these bugs, I noticed that the number of bytes to send was decremented inside the retry loop, which will trash your file if you don't have a perfectly clean send. I also found that the chop algorithm will always write at least 1 byte, when sometimes it shouldn't write any. The following context diff fixes these problems. The chopping algorithm chops contiguous strings of nulls OR Ctrl-Zs (not a mixture), and will avoid writing anything if we chopped them all (e.g. 128-bytes worth). The sending algorithm is optimized a bit and fixes the subtraction and padding bugs. Enjoy! -- Wayne Davison ...amdahl!drivax!davison =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Ziol soft ol of egrt. Stz'l ltt oy ngx eqf rteohitk oz. Oy ngx rg, hstqlt rkgh dt q fgzt zg stz dt afgv. *** xmodem.c.orig Wed Oct 7 17:11:05 1987 --- xmodem.c Wed Oct 7 18:26:57 1987 *************** *** 287,295 **** if ((firstchar == EOT) && (errors < ERRORMAX)) { sendchar(ACK); ! while (bufptr > 0 && (bufr[--bufptr] == 0x00 || ! bufr[bufptr] == 0x1A)) ; ! write(fd, bufr, ++bufptr); close(fd); Do_XON(); ScrollInfoMsg(1); --- 287,300 ---- if ((firstchar == EOT) && (errors < ERRORMAX)) { sendchar(ACK); ! /* use firstchar to remember the last char for chopping */ ! if (bufptr && ((firstchar = bufr[--bufptr]) == 0 || firstchar == 0x1A)) ! { ! while (bufptr && bufr[--bufptr] == firstchar) ! ; ! if (bufptr || bufr[0] != firstchar) /* check for null buffer */ ! write(fd, bufr, ++bufptr); ! } close(fd); Do_XON(); ScrollInfoMsg(1); *************** *** 343,362 **** { attempts = 0; sprintf(scrstr2,"Sending block %4d",sectnum); do { InfoMsgNoScroll(scrstr2); sendchar(SOH); sendchar(sectnum); sendchar(~sectnum); checksum = 0; ! size = SECSIZ <= bytes_to_send ? SECSIZ : bytes_to_send; ! bytes_to_send -= size; ! for (j = bufptr; j < (bufptr + SECSIZ); j++) ! if (j < (bufptr + size)) { ! sendchar(bufr[j]); checksum += bufr[j]; } ! else sendchar(0); sendchar(checksum); attempts++; c = readchar(); --- 348,374 ---- { attempts = 0; sprintf(scrstr2,"Sending block %4d",sectnum); + size = SECSIZ <= bytes_to_send ? SECSIZ : bytes_to_send; + bytes_to_send -= size; do { InfoMsgNoScroll(scrstr2); sendchar(SOH); sendchar(sectnum); sendchar(~sectnum); checksum = 0; ! for (j = bufptr; j < bufptr + size; j++) ! { ! sendchar(bufr[j]); /* send buffer data */ checksum += bufr[j]; } ! if( size < SECSIZ ) /* check if we need to pad */ ! { ! c = bufr[j-1] ? 0 : 0x1A; /* choose correct padding */ ! j = SECSIZ - size; ! checksum += j * c; ! while ( j-- ) ! sendchar(c); /* send padding */ ! } sendchar(checksum); attempts++; c = readchar();