home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: DFÜ und Kommunikation / SOS-DFUE.ISO / programm / dos / utility / pccp076 / manual < prev    next >
Encoding:
Text File  |  1993-12-20  |  31.8 KB  |  687 lines

  1.  
  2.  
  3.           Pete Cann's Communication Package
  4.  
  5.       Portions Copyright (C) 1992,1993 Peter Edward Cann
  6.  
  7.          (Please see the file README for legal junk)
  8.  
  9. This is a set of programs and data files for communication between a
  10. PC and something external, possibly over a modem. In the case of
  11. certain modems, fax and voice are supported.
  12.  
  13. This package is drastically different from most other communications
  14. programs, in that it is highly modular and generally requires the
  15. user to write batch files and/or scripts to make use of it. This is
  16. what you might call a "hacker style" paradigm (not to be confused
  17. with "cracker", generally an infantile individual who feels so
  18. insignificant that they screw other people in a desperate attempt to
  19. feel powerful). Hackers are people who are very comfortable with
  20. computers, and like to have a lot of control and to know what's going
  21. on.
  22.  
  23. The source code for all of these programs is included in the
  24. distribution, so if you know C you have all the information I do now.
  25. This C is MicroSoft QuickC, of which no endorsement should
  26. necessarily be inferred. Some of the style is pre-ANSI. The
  27. formatting style is that mandated by God (which is odd 'cause I'm an
  28. Atheist). I apologize for all my lapses in rigor. It's amazing how
  29. much better a programmer you are at the end of your first 10,000-line
  30. project than at the beginning of it!
  31.  
  32. All of the programs give USAGE: information if invoked without
  33. arguments. All of the programs that use a port can use COM 1 through
  34. 8, but COM 5 and 6 are only for AT and later machines and have not
  35. been tested. Speeds are given in units of 100 bps, such as: 24, 96,
  36. 384 or 576. All speeds that it is possible to specify thus are
  37. supported if the IBM can do them. The speed 0, although it shouldn't
  38. be meaningful, stuffs 0x0000 into the divisor latch, in case you want
  39. to do that.
  40.  
  41. The environment variable PCCPPATH can be used to tell some of the
  42. programs where to find PCCP files, such as emu files and scripts.
  43.  
  44. NOTE: These programs were developed under MS-DOS 3.something, and
  45. have been used fairly well under 5.something. If you're running any
  46. wierd stuff on top of DOS, i.e. desktops, Windows, etc., etc., this
  47. stuff may fail, possibly in a very nasty way. Of course, I'm not
  48. saying it won't do that anyway! Caveat usor!
  49.  
  50. NOTE ON 16550 UARTS: I enable the FIFOs if present, with the receive
  51. threshold at one byte, then put them back the way I found them when
  52. done. I do NOT, however, gate 16 bytes for transmit every time the
  53. flag comes ready. (Icky, icky, icky! Take my PC, please!) This
  54. completely normal technique may highlight a timing bug in some
  55. internal modem virtual UARTS. In this case, use a higher speed.
  56.  
  57. NOTE ON MS-DOS: MS-DOS, through version 5, at least, apparently
  58. does not increment the date at midnight on the clock interrupt.
  59. If you're not waiting for a keyboard character or something like
  60. that at the time, it appears that your date just never
  61. increments. I'm considering how to work around this disgusting
  62. bit of slobitude (or is it slobosity?), but at the moment it
  63. just happens.
  64.  
  65. NOTE ON VIRUSES: I don't think I have a virus, but you never know. If
  66. these executables get irremediably infested, you should hopefully be
  67. able to compile the source on a clean system, unless of course some
  68. pathetic washout has stuck virus source into the source!
  69.  
  70. The program TERM is a terminal emulator. It takes an emulation file,
  71. which you create or modify with EMUED. EMUED lets you specify
  72. strings to send for any programmable key, and lets you enter strings
  73. of characters and substitution tokens to invoke functions. These
  74. would be the "escape sequences", although they need not begin with
  75. Escape. The token codes are in EMU.H. The emulation facility also
  76. provides a graphics character substitution table for graphics
  77. character commands. TERM and EMUED look in the directory named by the
  78. PCCPPATH environment variable for emulation files, if PCCPPATH is
  79. set. The program CCODES types a hex listing of display character
  80. codes for use when assigning graphics characters in EMUED.
  81.  
  82. TERM generates a CRLF in response to a Linefeed character, so it is
  83. often desirable to program an emulation to do a DOWN in response to a
  84. Linefeed. For LF insertion, the function CRLF can be performed in
  85. response to a CR. If the emulation file basename is prefixed with a
  86. plus sign (+), local echo is activated.
  87.  
  88. The program TERMPLAY will step a file through an emulation.
  89.  
  90. The program MASTERM invokes term with the three or four arguments,
  91. but if you exit TERM you get a menu for file transfers or beginning a
  92. dribble file. The file transfer programs are four variations on
  93. XMODEM in each direction, and have fairly clear names. Also, you can
  94. use mind-boggling port speeds without a 550, 'cause I only go out to
  95. disk between packets.
  96.  
  97. If you want ZMODEM, *you* can write the thing, as soon as you come to
  98. after reading the spec! I *have* added my very own XMODEM CRC 16K
  99. protocol, which took me very nearly an entire half hour! It ought to
  100. do better than 95% at V.32bis/V.42 sending a zip.  This is straight
  101. XMODEM CRC with a HI6 (0xb6, i.e. 0x80+'6') packet intro and double
  102. tail-end fallback. It's 16K so people won't burn me in effigy when
  103. 28.8 kbps arrives, which is about all she wrote for your basic POTS
  104. line. When ISDN happens, hopefully there will be a sensible standard.
  105.  
  106. There are a lot of fairly sick interpretations of "automatic" XMODEM
  107. these days. One important trick is to nail your send in there *fast*,
  108. before the receiver stops offerring to do CRC. If you see a squiggle
  109. instead of a C it's too late; they want to do checksum (bleah!).
  110.  
  111. The program SESSION is a simple host program, for use AFTER password
  112. validation by the script facility. It is hard-coded for 8n1 bits. It
  113. expects the modem to be in AT&C1 mode, that is, Carrier Detect
  114. conveys information. The last (optional) two arguments to SESSION are
  115. directories for download and upload. If they are given, they are
  116. prepended to the entered pathname in file transfer operations. If a
  117. directory is given, dot-dot (..) is prohibited in pathnames and the
  118. Shell option is not available. Session uses PCCPPATH to find
  119. executables, to speed up loading.
  120.  
  121. The environment of any subschell contains REMOTE=YES, so you can do
  122.  
  123.     IF NOT "%REMOTE%"=="YES" THING
  124.  
  125. in a batch file, where THING is something that would be bad to do
  126. from a comport, such as run a display editor. SESSION terminates if
  127. Carrier Detect goes false, unless it is running the shell.
  128.  
  129. The program MESSIN accepts a message from the port and appends it to
  130. the specified file. This is for email to the sysop. The program
  131. MESSOUT asks for a filename in or below the specified directory and
  132. displays it with pagination. Security is achieved through sparse
  133. naming.
  134.  
  135. The program COMSCRPT runs scripts. It is very powerful, with multiple
  136. branching look-fors, timeouts and retry limits. The program SCRCHK
  137. checks scripts for parsability and undefined label references. The
  138. USAGE: message for SCRCHK also tells you the script buffer capacity
  139. for both of these, which is a #define.
  140.  
  141. The script file must have the extension ".SCR". If the PCCPPATH
  142. environment variable is set, the program looks for the script there.
  143. The program loads the script into RAM and then executes it. Lines are
  144. limited to 80 characters.
  145.  
  146. String fields in a script start immediately after the delimiting
  147. space, even if that means they start with whitespace. Trailing
  148. whitespace is also included in a string field. If your editor gives
  149. you no way to tell if you have trailing whitespace, why are you using
  150. it? I'm quite partial to any good EMACS. (This should not be taken as
  151. an unqualified endorsement of RMS. Abolishing intellectual property
  152. altogether strikes me as being similar to communism, in that it's a
  153. nice idea and it might be workable in a few hundred years.)
  154.  
  155. At parse time, a $1 through $9 will be replaced with the
  156. corresponding argument to COMSCRPT starting after the name of the
  157. script. $@ expands to the value of PCCPPATH followed by \ if PCCPPATH
  158. is set; otherwise it expands (to use the term loosely) into nothing,
  159. i.e. the $@ is simply diked out. $<digit> on the other hand will bomb
  160. if the arg is not supplied. $ is an escape; to use it without
  161. expansion, use two of them and you'll end up with one. $ is expanded
  162. pretty much before any other parsing.
  163.  
  164. The first line in a script file must be <port#> <speed> <db><par><sb>
  165. followed optionally by zero to turn off flow control. $<digit> is
  166. permitted.
  167.  
  168. The characters '|' and '~' are special. '|' means CR in <, > and k
  169. lines; and newline in !  lines. '~' means 0.4 second delay in < lines
  170. and bell in ! lines.  (In > lines it means itself.) Also, in <, >, !
  171. and k lines, `xx (backquote followed by two hex digits) expands to
  172. the specified character code. Letters in the hex number may be either
  173. case.  There is no validity checking. `00 will terminate a > line.
  174. Also in < lines, ^ means break. To send a magic character, use its
  175. hex code with a backquote.
  176.  
  177. The first line of the script file is the first three arguments as for
  178. TERM, space-delimited. In subsequent lines, the first character of
  179. each line is the command; the rest of the line (after the delimiting
  180. space) is argument(s). A final string argument may include spaces,
  181. and begins after the delimiting space. Blank lines are ignored.
  182.  
  183. The command characters are as follows:
  184.  
  185. ;
  186.     {introduces comment; line ignored; space not required}
  187.  
  188. : <decimal number 0-255>
  189.     {label for conditional or unconditional goto} 
  190.  
  191. g <label #>
  192.     {goto label #}
  193.  
  194. = <speed>
  195. = <comnum> <speed> <databits><parity><stopbits> <flow ctl flag>
  196.     {Set new port speed in hundreds of bps. Zero sets DL=0}
  197.     {Long form simply closes old port and tries to open new one}
  198.     {Waits for shift register to empty; leaves handshake alone}
  199.  
  200. * <label #>
  201.     {establishes a demon to goto label upon Control-X from keyboard}
  202.     {* -1 cancels}
  203.  
  204. r <label #> <retries> <register>
  205.     {increments specified retry register}
  206.     {<retries> is an int, try 32766 for a dummy to just increment}
  207.     {zeros register and goes to label if register > retries}
  208.     {register is 0 - 255}
  209.  
  210. 0 <retry register>
  211.     {zeros the specified retry register}
  212.  
  213. " <retry register>
  214.     {prints contents of retry register to local screen}
  215.  
  216. p <seconds>
  217. p <seconds> <processing>
  218. p t<ticks>
  219. p t<ticks> <processing>
  220.     {processes pending look-fors (>); falls through upon timeout}
  221.     {clears pending look-for list upon completion}
  222.     {zero seconds indicates no timeout}
  223.     {ticks are 1/18.2 second (IBM PC)}
  224.     {scanned characters are displayed and maybe sent to file}
  225.     {processing: 0 = none, 1 = visible line buffer, 2 = password buffer}
  226.  
  227. > <label #> <string>
  228.     {look for string upon p command; if hit goto label}
  229.     {incoming linefeeds ignored}
  230.     {first come, first served}
  231.     {maximum of 32 active > demons allowed}
  232.  
  233. f
  234.     {flush characters previously received from port}
  235.     {does NOT append characters to file}
  236.  
  237. o <label #> <string>
  238.     {open file <string> for append of scanned characters & ! messages}
  239.     {or close current file if string is "*"}
  240.     {goto label if error}
  241.  
  242. i <label #> <string>
  243.     {open file <string> for input}
  244.     {or close current file if string is "*"}
  245.     {goto label if error}
  246.  
  247. t <label #>
  248.     {transfer one line of input file out the port}
  249.     {newline characters are not sent}
  250.     {goto label if EOF}
  251.  
  252. ? <label #>
  253.     {goto label if Tx Hold Reg Empty is false,}
  254.     {or in CTS flow control mode & CTS is false}
  255.  
  256. d <label #>
  257.     {goto label if Carrier Detect is true}
  258.  
  259. < <string>
  260.     {send string to port}
  261.  
  262. ! <string>
  263.     {send string to console}
  264.  
  265. x <command line string>
  266.     {run executable file with arguments and wait for termination}
  267.  
  268. # <label #> <return value>
  269.     {jump to label if most recent "x" command returned <= <return value>}
  270.  
  271. s <label #> <command line string>
  272.     {run system command line and wait for termination}
  273.     {goto label # if error in running command.com}
  274.     {will not report errors within command string}
  275.  
  276. +
  277.     {Raise DTR handshake line}
  278.  
  279. -
  280.     {Drop DTR handshake line}
  281.  
  282. k <label> <character>
  283.     {set branch to label upon keyboard character received in w or m}
  284.     (this is a scanf(), so space must be `20 and tab `09}
  285.     {limit 64 simultaneous character scans pending}
  286.  
  287. w <seconds>
  288.     {wait seconds for keyboard character, performing k dispatching}
  289.     {fall through if no character in <seconds> seconds}
  290.     {zero seconds indicates no timeout}
  291.     {clears all k commands pending upon any termination}
  292.  
  293. m <seconds>
  294. m t<ticks>
  295.     {mnemonic: monitor -- combines functions of 'p' and 'w';}
  296.     {except that no front end services are provided.}
  297.     {ticks are 1/18.2 second (IBM PC)}
  298.     {clears both kinds of scans when it exits}
  299.  
  300. c
  301.     {clears pending lookfors and keys (> and k)}
  302.  
  303. l <label #> <jump register #>
  304.     {load label into jump register. -1 unloads register}
  305.     {jump registers are 0 - 255}
  306.  
  307. j <jump register #>
  308.     {jump to label previously loaded into jump register}
  309.     {falls through if register is unloaded}
  310.  
  311. q <exit code>
  312.     {quit with exit code}
  313.     {codes other than zero under 128 are reserved to internals}
  314.  
  315. SUGGESTED CONVENTION: When a body of code is to be used as a
  316. subroutine, an elegant convention is to jump via the jump register
  317. having the same index as the routine entry label upon completion.
  318.  
  319. When scripting modem commands, which is how you're intended to
  320. configure and dial the modem, if the modem doesn't respond, try a ~
  321. before and after the at, for instance:
  322.  
  323.     < ~at~&f&c1&d2|
  324.  
  325. The program SCRCHK types a listing of the argument script file giving
  326. statement numbers, which are not the same as line numbers. It leaves
  327. out blank lines for some reason. It also detects some errors,
  328. including potential branching to undefined labels. It prints out a
  329. table of label numbers with their corresponding line numbers.
  330.  
  331. During execution of a script, Control-C will cancel and Control-X can
  332. redirect the script on an interrupt basis.
  333.  
  334. All of the I/O programs except TERM pay attention to CTS. (Comscrpt
  335. is configurable.) None of them do XON/XOFF. The computer is assumed
  336. to be fast enough to keep up. However, since DOS video is very slow,
  337. TERM will suspend display if an interrupt-routine buffer overrun
  338. threatens.
  339.  
  340.  
  341. FAX PROGRAMS
  342.  
  343. The fax facility is intended primarily for modems based on chips and
  344. firmware from Rockwell International, operating in Rockwell's
  345. conception, circa 1992, of the TIA draft Class 2 standard. This may
  346. be relevant with regard to port speed changes required, and
  347. especially with regard to bit order. I haven't seen the new official
  348. Class 2 standard yet.
  349.  
  350. Nothing in this section assumes filename extentions; you must give
  351. the complete filename.
  352.  
  353. RCVFAX receives a fax (surprize!). It is intended to be called
  354. immediately after the "FAX" response in +FAA=1, or immediately after
  355. answer in +FCLASS=2. See HOSTDEMO.SCR for how to configure the
  356. faxmodem. RCVFAX uses the first speed until it sees the "+FCON"
  357. message, then switches to the second speed, which will generally be
  358. 19200 with earlier Rockwell-based modems. It stimulates page
  359. transmits, and stores the session in the specified directory in a
  360. file of which the name is the universal time as an 8-digit hex number
  361. with the extension .RFX.
  362.  
  363. Since the filenames are awkward, FAXMANIP, when run in the fax
  364. directory, displays RFX files as dates and times, and allows you
  365. to convert or delete. A secret FAXMANIP function is E, which will
  366. run a system call on the second argument, space, filename. This
  367. is intended for editing, by the adventurous. Since fax files are
  368. wonderfully compact, they are a good way to store a document. I
  369. suggest that, if you want to name a fax file, you make it
  370. <name>.NRF, for Named Received Fax. Don't alter the basename and
  371. leave it .RFX, since FAXMANIP will read the name as a garbage
  372. date, or explode.
  373.  
  374. RFXTOPCX converts an RFX file to a series of PCX files, prompting for
  375. the name of each page file and reporting status. This now uses a
  376. quarter-meg state table file, STATMACH.DAT. If you don't need the
  377. speed, delete both and rename OLDRTOP.EXE to RFXTOPCX.EXE. The old
  378. one will do debug mode if given a second argument. The old one skips
  379. garbage to the next EOL while the new one just croaks on garbage.
  380. Fixing the new one would have slowed it down. Some faxmodems and/or
  381. software may send some garbage. If you don't want to delete the new
  382. one you can rename it FASTRTOP. Whichever you don't normally use can
  383. be accessed using the E feature of FAXMANIP, above.
  384.  
  385. VIEWPCX displays a fax PCX file on the monitor. It has not been
  386. tested with EGA or CGA yet, and doesn't support SVGA yet, although it
  387. will try to configure anything it doesn't recognize as VGA 640x480x1.
  388. Invoked without arguments it gives usage and command keys. In zoom
  389. mode, it uses black-priority within lines and pot-luck among lines.
  390.  
  391. BJFAXPCX prints a fax PCX file to a Cannon BJ-type printer on a
  392. parallel port, with appropriate scaling.
  393.  
  394. ASCTOSFX is a simple ASCII to Fax converter. The present font is
  395. fixed-width because variable width fonts are a pain in the wazoo if
  396. you're trying to line things up, and I couldn't face myself in the
  397. morning if you couldn't fax source code. The font was generated by a
  398. freeware version of TeX: EMTeX by Eberhard Mattes. I think the font
  399. is public domain, but I'm in the process of inquiring. It's name is
  400. Computer Modern Typewriter, except I added some glyphs. It's really
  401. quite pretty. ASCTOSFX defaults to dumb; an extra argument puts it
  402. into pretty mode, with nice margins all around. ASCTOSFX will tell
  403. you if PCCPFROM isn't set, but that won't affect conversion. To
  404. include a PCX file, use Control-P <pathname> <newline> on a line by
  405. itself. The image must be one plane, one bit deep, and fit on a page.
  406. Use -<SP><pathname> for flush left and + for flush right. The default
  407. is centered on the page. - is for signatures, for example.
  408.  
  409. SNDFAX sends faxes prepared by the above. It tries to use the
  410. environment variable PCCPFROM to get the originator telephone number,
  411. as required for standalone fax machines by USA regulations (there
  412. seems to be some consensus that fax software is responsible for this
  413. in a faxmodem situation). The header is seven-segment, because fonts
  414. are fat, so only digits and hyphen are allowed, to a maximum of 40
  415. characters in the sender telephone number field. I'm sorry about
  416. guzzling environment space, but two file finds would be too much.
  417.  
  418. Parties not subject to USA FCC regulations may set PCCPFROM to a
  419. string of all-invalid characters, for example:
  420.  
  421.     set PCCPFROM=dummheit
  422.  
  423. I'm sorry about the inconvenience to such users, but in most cases my
  424. government would find it a lot more convenient to ruin my life than
  425. yours would.
  426.  
  427. SFXTORFX does what it says; it was the easiest way for me to debug
  428. ASCTOSFX, and since I had it I threw it in the distribution.
  429.  
  430.  
  431. VOICE PROGRAMS
  432.  
  433. VOICETX issues the #VTX command, waits for CONNECT and plays the
  434. file. Optional arguments are shielded report codes upon which to
  435. terminate; the exit code is the zero-based index of the report among
  436. the reports armed on the command line. Normal end-of-play is 128.
  437. Nasties are higher. Command echoes, responses and all shielded codes
  438. are reported to the screen. If you have an internal modem with a
  439. processor virtual UART timing bug, you might need to use 57.6 kbps
  440. even though 38.4 ought to work.
  441.  
  442. VOICERX issues the #VRX command, waits for CONNECT and plays the
  443. file. If the specified file ends in '\', it is taken to be a
  444. directory and the hex utime is used with the extension .VCE, ala
  445. RCVFAX. Reports and exit codes are the same as above, also output.
  446.  
  447. RAMREC is like VOICERX except that it records into RAM without going
  448. out to disk, and doesn't terminate unless you run out of RAM or hit a
  449. key on the console. It's intended for recording greetings at high
  450. speed without a 550. It has optional arguments for using a DTMF burst
  451. as a time reference mark, and recording with in and out times. Times
  452. are ticks, i.e. 1/18.2 second. Error is up to -1.
  453.  
  454. VBROWSE is for playing utime messages, such as picking up your
  455. voicemail. It uses the following voice files, located in PCCPPATH:
  456.  
  457.      * NOFILES.VCE: "There are no files in the directory."
  458.      * ENTSHFB.VCE: "entries exist. How far back?"
  459.      * INSTRUC.VCE "Cancel any playback with star. At any prompt,
  460.      *         dial digits, star to clear, pound to enter.
  461.              Entering nothing exits."
  462.      * DELETE.VCE "Dial 3 pound to delete, or just pound to proceed."
  463.      * DELETED.VCE "You have already deleted that message."
  464.      * <digit>RISE.VCE Decimal digit with rising inflection.
  465.      * <digit>DIP.VCE Decimal digit with dip inflection.
  466.      * <digit>FALL.VCE Decimal digit with falling inflection.
  467.      * POINT.VCE "Point" with mild dip inflection.
  468.      * AT.VCE "At" with mild dip inflection
  469.  
  470. To record the digits, you need to be able to trim them to get
  471. acceptable sequence speed. If the editing source is time-quantized,
  472. the sampling rate should preferably be, say, twice that of the
  473. target. I suggest that you not lose the digits I provided.
  474.  
  475. My digits were originally recorded on a consumer stereo cassette
  476. deck, with a DTMF burst about a second before the good audio, using
  477. the editing feature of RAMREC. The arguments were derived for each
  478. digit segment by rough timing and then iteratively tuned. The tape
  479. recording was made through a graphic equalizer, with 125 Hz and below
  480. at -12 dB, 250 Hz at -4 dB, 500 Hz at -2 dB, 1 kHz at 0 dB, 2 kHz at
  481. +2 dB, 4 kHz at +4 dB, and 8 kHz and above at -12 dB.
  482.  
  483. The mic was a Radio Shack bottom-of-the-line quasi-professional
  484. dynamic. There may be a bit of extra hiss, as the mic-line mixer I
  485. built runs the mic right into an LM318. You don't do that for real
  486. stuff because of the noise of the op-amp; if I wanted to blow the
  487. extra $40 I would have used a good transformer on the mic to boost
  488. the voltage to where the op-amp wouldn't mess it up.
  489.  
  490. The delete option in VBROWSE is suppressed unless enabled with a
  491. command line argument. Call without arguments for USAGE. Modem and
  492. port settings must be correct for the file or vice versa.
  493.  
  494. VCEMANIP is just like FAXMANIP except that it calls VOICETX instead
  495. of the fax converter. You use it inside a script to hear your
  496. messages while at the computer. The script would do #VLS=1, #VLS=2 or
  497. some such. You have to give it the port and speed to pass to VOICETX.
  498.  
  499.  
  500. SCRIPTS
  501.  
  502. SENDFAX.SCR sends a fax. Who'd a thunk it!
  503.  
  504. HOSTDEMO.SCR is an example of a simple triple host script. It doesn't
  505. use all the features, like email and restricted file transfer. CHANGE
  506. THE PASSWORDS before you use it, unless you want to see your
  507. unauthorized biography in a supermarket periodical!
  508.  
  509. SPKR.SCR engages switches the modem to 2-bit local speaker operation
  510. and runs VCEMANIP, then resets the modem. You use it (drum roll,
  511. please) for listening to voice messages.
  512.  
  513.  
  514. -----------------------------------------------------------------
  515. RELEASE NOTES:
  516.  
  517. I've been very bad about release notes. In 053, file transfer won't
  518. abort until the second CAN, comscrpt will recognize the first char of
  519. a sequence even if it's the char that resets the scan for the
  520. sequence, and I may have fixed other stuff.
  521.  
  522. In 054, I'm handling ANSI attributes differently, based on new info
  523. from the Argus ANSI forum. I'm still not going to support remote key
  524. reprogram though, nor alternative screen modes. Non-white colors are
  525. now low-intensity unless bold, and faint only works for white. This
  526. seems to be how folks are doing ANSI on PCs. Emulation now supports
  527. ANSI CPR. Also EMUED has a better user interface.
  528.  
  529. 055 adds 16550 support, I think (I don't have one). Probably not
  530. relevant except for dribble in TERM, unless I ever get around to
  531. doing Zmodem.
  532.  
  533. 056 changes the exit chord for TERM, cause I just hit the old one by
  534. accident myself and was annoyed. It also adds file-hacking to
  535. COMSCRPT.
  536.  
  537. 057 corrects an esthetic bug in EMUED and an error reporting bug in
  538. SCRCHK. I also added the Jump Register feature to COMSCRPT, and made
  539. SCRCHK not output the table if there are unlisted label errors.
  540.  
  541. 058 fixes a bug in RFXTOPCX that caused it to choke if there was no
  542. Sender ID message. It also adds a PCX file viewer and a PCX file
  543. printer. Also, RFXTOPCX is massively redesigned, including my amazing
  544. state machine method of fax decoding, for mondo speed increase.
  545. STATMACH.DAT is the table now used by RFXTOPCX. It also adds the $
  546. substitution operator to COMSCRPT. Also, PCCPPATH is not prepended to
  547. <drive>:<path>, \<path>, or .\<path>. Also, an obsolete reference to
  548. TERMPATH was replaced with PCCPPATH. Also, I think it was around here
  549. that I added VIEWPCX. Also, COMSCRPT now does arguments. Also I took
  550. the label out of X in COMSCRPT and added the # command.
  551.  
  552. I think it's time for a new revision! 059 changes bit rate
  553. specifications to units of 100 bps, and allows any possible such
  554. speed. (You can now do 115200).
  555.  
  556. Barf! Bletch! I wasn't using an absolute path for the first TERM
  557. within MASTERM. All better in 060. PORT.C has a lot of comments added
  558. to teach people about IBM UART programming.
  559.  
  560. In 061, COMSCRPT now substitutes zero-character and two-character
  561. command line arguments properly. (Boy, that was a stupid one!)
  562.  
  563. In 062, COMSCRPT is now a multi-data-and-code-segment executable,
  564. with a separate parse-and-validate module shared with SCRCHK, which
  565. required having a multi-data-and-code-segments version of PORT.OBJ,
  566. which is now provided for in the MAKEFILE. Due to a disgusting SickC
  567. problem, I'm now allocating the program buffer the hard way. Also, I
  568. added Flow Control Control (still no XON/XOFF; that would be a pain).
  569. Default is on, which is what you used to be stuck with.  No more
  570. burned fingers for the wierd gizmo community! (Or at least only 3/5
  571. as many, unless you're also using XMODEM, which requires DCD!) Also,
  572. fixed a fall-through for COMSCRPT's C command. Also added " function;
  573. handy for abusing things. Also made EMUED (k) a bit more coherent.
  574.  
  575. In 063, everybody waits for last character to shift out before
  576. restoring port. ASCIIS restores port. COMSCRPT has = command. Fax
  577. goodies are in, but still have to do federal stripe in SNDFAX, which
  578. has some elements of such in source that are not yet used.
  579.  
  580. 064 has the USA federal stripe in SNDFAX. The = command in COMSCRPT
  581. now takes zero, same as the top line.
  582.  
  583. 065 has voice record and play for Rockwell (TIA?) modems. I also
  584. mucked around a bit with MANUAL and README. It also has the pretty
  585. mode in ASCTOSFX. Also, I redid RCVFAX to use hand-rolled file
  586. buffering. I was using a stream, and it worked fine, but the fact
  587. that -1 is a bit magic was bugging the hell out of me. Also, SCRCHK
  588. will now still tell you what labels are available even if you
  589. duplicated a label, so now you can actually fix your booboo! Nice,
  590. huh? Also, COMSCRPT now frees unneeded RAM; this might make a
  591. difference to something you spawn. ("Nobody could possibly need more
  592. than 640 k." Come on, PowerPC!!!) Also (I love that word), I added
  593. XMODEM CRC 16K file transfers. Yet even more also, FAXMANIP no longer
  594. trashes itself when you call an editor with a non-short name.  Also,
  595. I made SNDFAX use XON/OFF only and ignore CTS. Also, I changed some
  596. stuff in RCVFAX that looked doubtful. Also, OLDRTOP now skips bits
  597. after seven zeros to get a genuine 11-zero EOL. Since some faxmodems
  598. apparently send junk sometimes, this can be vital. RFXTOPCX is not
  599. yet so forgiving.
  600.  
  601. 066 started as a complete new compile, so I decided to give it a new
  602. rev number. Fixed minor bug in case of initial CAN in Xmodem sends.
  603. Made all Xmodem senders print out hex response characters from other
  604. end, so you can tell what sick conception of Xmodem the other guy is
  605. using. I was having trouble working with a board, compiled this into
  606. XMCRCS.C while on line, and then it worked great. Possible code
  607. alignment issue; I have *got* to write my own compiler! VIEWPCX was
  608. also modified to implement horizontal black priority for better zoomed
  609. viewing of typical faxes.
  610.  
  611. 067 Yow, hacking frenzy! COMSCRPT has had the '=' command expanded,
  612. and line buffering (optional) added to the 'p' command. The 'm'
  613. command combines 'w' and 'p', but without line buffering. Also, only
  614. linefeeds *without* the high bit set are now discarded in the scan
  615. functions. (In line buffering, they turn into CR's.) The high bit is
  616. no longer ignored in scans. VIEWPCX has a rotate 180 function on the
  617. DELETE key; exit has been moved to the ESCape key. Sorry. Also fixed
  618. a flaw in the priority hack. SNDFAX now ORs segments at the corners
  619. in the federal stripe, 'cause it was real ugly the old way. Also,
  620. ASCTOSFX now gives a nonfatal message if the PCCPFROM environment
  621. variable is not set. Also, XMCRC16S has been fixed to revert to
  622. 128-byte blocks after reverting to 1k blocks; it was a bit confused.
  623. Also, VIEWPCX emits a less irritating, custom beep when you thud.
  624.  
  625. 068 has PCX image inclusion in ASCTOSFX. I also fixed a remarkable
  626. bonehead move in that file, re not zeroing the index on explicit
  627. flush. The voice stuff seems pretty good; still have to record stock
  628. prompts, etc. Also, in the xmodem protocols, kbhit(), which has
  629. the speed of a garden slug on a cold morning, has been replaced
  630. by bios keyboard calls.
  631.  
  632. 069 has voice prompts and various little voice tweaks. RAMREC has
  633. editing features. Also, COMSCRPT no longer ignores Linefeed while
  634. scanning. It seemed handy at first, but the more I thought about it,
  635. the more evil and perverted it seemed. COMSCRPT also also lets you
  636. optionally specify 'p' and 'm' waits in ticks. NOTE: 069 has had
  637. somewhat poor subversion control.
  638.  
  639. 070 has 3-bit prompts with better EQ. Also, COMSCRPT now expands $@
  640. to <PCCPPATH>\. Also, I evidently did something to VBROWSE, but I
  641. don't remember what. Also, VCEMANIP and FAXMANIP now take an optional
  642. argument to specify the directory. This argument is mandatory in
  643. FAXMANIP if you want to use the secret editor feature. Also, COMSCRPT
  644. has an internal modification in dribble output to work around an
  645. apparent MicroSoft bug.
  646.  
  647. 071 has a slightly modified HOSTDEMO.SCR. It is also zipped in
  648. PKZip204g, which is apparently all the rage these days. Of course, if
  649. you're reading this, you don't care. 0DIP.VCE, 7DIP.VCE and 9DIP.VCE
  650. were also re-dubbed with better trimming.
  651.  
  652. 072 And off we go again! Browsing through Que's DOS book, I saw that
  653. the authors were massively confused about the tick frequency, as
  654. evidenced by the fact that they stated that a specific number divided
  655. by another specific number was exactly equal to something that it was
  656. in fact not exactly equal to. Being massively fed up with all the
  657. rumors about tick frequency, I measured it! (No!) It's exactly
  658. nothing, except per DOS day. Hence, there's a new include file,
  659. TPERDAY.H, and everything now uses it. This is critical for timing
  660. functions not going bananas across midnight. Also, the `m' command in
  661. COMSCRPT now times out properly; I had been scanning the time
  662. argument into a string as an int.
  663.  
  664. 073: XMODEM receive variants have better error messages.
  665. Documentation of COMSCRPT 'k' command updated. New triple host demo
  666. scripts. RAMREC now only kicks the modem every three seconds after
  667. the stop time, rather than every time it gets a character. FXF.H is
  668. now included in the ZIPLIST and so you hopefully actually have it
  669. (I'm such a slob!).
  670.  
  671. 074 has everything modified to do its own tick timing with a tick
  672. interrupt handler. The file TPERDAY.H is no longer included. It turns
  673. out that if you call the bios tick time function and it just turned
  674. midnight, DOS never hears about it. Naturally, MicroSoft doesn't
  675. point that out in the documentation of _bios_timeofday() in the
  676. QuickC manual, although they do see fit to pad the product out with
  677. tutorials out the wazoo.
  678.  
  679. 075 has a fixed-up HOSTDEMO.SCR.
  680.  
  681. 076 has a fix of a serious bug introduced while fixing the calendar
  682. bug. It was possible to do a Control-C interrupt and not have the
  683. interrupt vectors cauterized, especially during the pre-execute
  684. phases of COMSCRPT. Everything is hopefully quite rigorous now,
  685. except poot() in VIEWPCX, which doesn't do typeout or disk access and
  686. thus should be OK.
  687.