.in 5 .rm 70 .fo Manual Revised 11-28-81 (dif 11-28-81) Page # .he YAM/XYAM 3.11 Manual Page # .ce 3 YAM (Yet Another Modem program) by Chuck Forsberg .ce 1 ******** Highlights ******** Coversational mode with optional capture to file and multiple page review of past output. File capture of long files works with any system which responds to XOFF within 400 characters. Flexible uploading of suitable files to many types of remote systems, even Bulletin Boards without normal uploading capibility. Error checking file exchange with programs using Ward Christensen's protocol with optional Cyclic Redundancy Check. Enhanced error recovery and transfer abort logic. Batch transmission of files with compatible programs. High speed operation; 9600 baud file transfer and conversational terminal operation, buffered printer operation at >>1200 baud. Full printer buffering allows use of slow printers, or printers with burst transfers (line printer, MX80, etc.). Disk utility functions including directory listing, change disk and/or user number, erase files, disk free space calculation, file transfer time calculation, CRCK file check, and local listing of files. Great flexibility in specifiying filenames. Matching program (XYAM) for use by remote systems as XMODEM replacement obtained from same source files. Written in a modern high level systems language ( C ) for ease of portability and maintenance. .ce 1 ******** Rosetta Stone ******** .ti -5 FUNCTION .br An operation supported by yam, such as DIR, TYPE, S, R, or T(term). A command may set or reset a MODE, or perform 0 or more FUNCTIONS. .ti -5 IFF .br If and only if. .ti -5 MODE .br Many modes affect the way the term function handles data. .ti -5 OPTION .br Option(s) apply to the S and R commands only. .ti -5 {} .br Required argument. .ti -5 [] .br Optional argument. .ti -5 pattern ... .br An empty pattern represents all files on the default disk with the current user number. A disk identifier without filename represents all files on that disk with the current user number. Unambiguous and ambiguous filenames may be specified in any combination. A pattern may contain any combination of the above. .ce 1 ******** Commands ******** .ti -5 a: .br Change to a: disk (or b, etc.) CP/M versions print the free disk space in kilobytes. .ti -5 a1: .br Change to a: disk user 1 WARNING: Do NOT change user number when file(s) are open; CP/M 2.2 gets confused. CP/M versions print the free disk space in kilobytes. .ti -5 bm .br Set baudrate to m. Example: "b19200" .ti -5 bye .br Drop any call in progress and prepare to make/answer another. .ti -5 call name .br Enable Data Terminal Ready (DTR), and set baudrate to the value (if present) corresponding to name. If autodial is supported, dial the telephone number. If autodial is not supported, the telephone number is displayed. It is not necessary to type the entire name as it appears in the file. Example: "call tcbbs" or "call tc" .ti -5 chat .br Chat keyboard to keyboard. Characters typed by either keyboard are echoed to both ends, and RETURNS echo as RETURN/LINEFEED. Chat will become hostile if the other end also echoes characters. .ti -5 close .br Dump capture buffer if a recrive file is open, close files. .ti -5 crck [pattern ...] .br Perform the "crck" function on the specified files. The "crck" alogrithim is stolen from version 4.3 CRCK.ASM. .ti -5 dir [pattern ...] .br Display pathnames matching pattern alphabetized across the page. The usual ambiguous filenames are allowed under CP/M provided a correct version of setfcb() is used. Since dir or any other commands which accept a pattern use the circular buffer for filename expansion, be sure to write out any captured data first! Example: "dir" "dir *.c" "dir yam*.c" "dir *.c *.h" .ti -5 dirr [pattern ...] .br Displays the directory with the number of sectors in each file. The number of files matched, number of blocks, number of kb allocated to those files, and estimated transmission time at the current baudrate for all files listed are displayed. Transmission time estimate is based on batch transmission from a Z89 with 700kb Tandon drives to a Cromenco 4mHz 4fdc system with Persci 277 drive. Time includes file i/o but not error correction. .ti -5 d{mode} .br Disable mode(s) affecting file transmission or reception with the term function. (The "s" and"r" commands always send data transparently.) .ti -5 erase pattern ... .br Erase the named files. For each matched pathname, the user is prompted for Y, N, or Q. Y erases the file, N skips to the next file, and Q or anything else aborts the command. The number of free blocks on the default disk is displayed. .ti -5 e{mode} .br Disable mode(s) affecting file transmission/reception with the term function. (The "s" and"r" commands always send data transparently.) .ti -5 f[mode] name .br Send file 'name' in the term function. The optional mode enables one or modes. If squelch is enabled, preface with ^R and append with ^T. See also type/list command. .ti -5 help .br Displays a command summary. This command closes any open send file. .ti -5 initialize .br Initializes yam to all its default values. Does not reset the disk system (see "reset"). .ti -5 kill .br Kill all data in the capture buffer. Restores the pointers to their initial positions. .ti -5 list pattern [...] .br List the file(s) specified by one or more possibly ambiguous pattern(s). This command closes any open send file. Yam or Xyam compiled with USQ defined will automatically detect squeezed files and print them in ASCII. List stops/resumes printing with ^S. Keyboarding ^X cancels, and ^K skips to the next file (it might take a few whacks of the keyboard to get YAM to hear it.) XYAM prefaces each file with ^R and suffixes it with ^T. The standard putchar() is used, so tabs are expanded and the printer can be enabled with ^P on the command line. Because tabs are expanded, files containing tabs will get larger if downloaded with the list command; if you can't use the s command, at least use type. .ti -5 mn .br Change modem data port to (decimal) n. Example: "m224" .ti -5 o .br Disable the modem by turning off DTR. .ti -5 off .br Disable modem and return to operating system. .ti -5 pxm .br Set Parameter x to value m. .ti -5 reset [size] .br Dump the capture buffer (if on), close all files, and reset the disk system (this allows swapping diskettes). The optional argument size becomes the size of the circular capture buffer, useful for debugging. .ti -5 replot [m] .br Redisplay the last m lines received from the modem. If m is 0 or absent, redisplay starting with the earliest data. A screenful is displayed at a time. The commands accepted in replot mode are listed below. .ti -5 rewind .br Rewind the buffer pointers for the display, printer, and file dump from the term function. The effect of this command is the same as if the data had been sent another time. .ti -5 r[options] [file ...] .br Receive with options 1 or more files using the Ward Christensen protocol. If no filename is given, batch mode is assumed. (Note: batch mode is not compatible with MODEM7.) If more than one filename is given, a single file transfer will be made for each. .ti -5 s .br Displays status information. .ti -5 s[options] pattern ... .br If batch mode is specified with the b option, 0 or more files are sent according to the ambiguous pathname(s). If batch mode is not specified, the named unambiguous file(s) are sent each in single file mode. .ti -5 type pattern [...] .br Type the file(s) specified by one or more possibly ambiguous pattern(s). This command closes any open send file. Yam or Xyam compiled with USQ defined will automatically detect squeezed files and print them in ASCII. Type stops/resumes printing with ^S. Keyboarding ^X cancels, and ^K skips to the next file. XYAM prefaces each file with ^R and suffixes it with ^T. Direct console output (bios(4, ...) is used. .ti -5 t[c][mode] [file] .br The term function with optional capture to file. The c (close) option causes data in the capture buffer to be written and closed immeadiately. 0 or more modes may be enabled. View mode causes the term function to display control characters by prefixing ^ to the corresponding letter. A receive file previously opened by 't file' will not be closed by 't'. While in the term function, the keyboarded characters are transmitted except for .br .rm -5 .in +5 .ti -5 ^E Exits from the term function back to main command level. Rapidly typing ^E^E will instead cause one ^E to be transmitted. .ti -5 ^Q Iff a send file is open and its transmission has been stopped by a XOFF, transmission is resumed. Otherwise no special treatment. .ti -5 ^S Iff a send file is open and it is being transmitted, transmission is stopped. Otherwise no special treatment. .ti -5 ^V Replots the last 24 lines, then awaits next command in replot. ^V^V typed quickly sends one instead. .rm +5 .in -5 The following received characters are recognized in the term function, when they are fetched from the circular buffer for the display. .rm -5 .in +5 .ti -5 XOFF Stops file transmission from yam. .ti -5 XON Resumes file transmission. .ti -5 TAB Tab characters are expanded on the display. .rm +5 .in -5 .ti -5 u[mode] .br Upchucks the received data back to the other end. I added this command to simplify returning Electronic Junk Mail to it's sender. If enough people use this command, perhaps there won't be so much EJM to put up with. No character in the defined string LOOPBACKNONO is transmitted by the U function. For use with The Source or Compuserve, LOOPBACKNONO should include ESC, SUB, DLE, and any other nasty characters that would confuse an editor. .ti -5 wrt .br Write dumps the circular buffer to the receive file, if open. .ti -5 ; .br Semicolon is an optional command delimiter which may be used in place or RETURN in order to place multiple commands on a line. Since commands such as "t" have an indefinite number of operands, the semicolon must be used to string commands together. Example: "sb *.c;off" batch transmits all *.c files, then disconnects. Unfortunately, CP/M's CCP clobbers ; and everyting past it in the command line, so use backslash instead. .ti -5 \ .br An alternate to ; for CP/M systems. .ti -5 NATHAN .br The NATHAN command sends the rest of the physical command line to the modem, starting with the very next character. This command works with SUBMIT and XSUB (if lowercase isn't needed). Normally a cr/lf is sent as the end of each line, but this may be changed by relevant mode(s). .ce 1 ******** MODES used with D, E, F, T or U commands ******** .ti -5 2 .br This is a special hack for Compuserve access through tymnet using "CIS02". Specifying one "2" causes formfeed from the remote to clear the screen (CLEARS string defined in bdscio.h). t22 causes keyboarded backspace to be locally echoed as backspace space backspace since Compuserve doesn't echo it at all. .ti -5 a .br A return from the keyboard is sent as return, linefeed. If half duplex, both are sent to the console. .ti -5 b .br Binary mode of TRANSMISSION with T function. All 8 bits are sent. Handy for downloading binary files to adjacent machines without any modem program. Don't confuse this with the S function which uses the Christensen protocol. Also don't cornfuse with i mode which affects files received with the T function. .ti -5 d .br Directly enables/disabled dumping of captured text. .ti -5 e .br Echo characters received from the modem to the modem. Use this only for keyboard to keyboard communication, and then only at one end. Reset after each command. Does not imply "Half Duplex". .ti -5 f .br Full duplex. .ti -5 g .br Resumes (GO) sending file once in the term function, equivalent to XON. Disabling GO causes a file queued for transmission to wait for an XON character. .ti -5 h .br Half Duplex. Displays keyboarded characters as they are sent to the modem. .ti -5 i .br Image transparent data capture, all 8 bits of all characters received, including NULLS. This overrides the t and/or z modes. .ti -5 l .br List unit (Printer) on. Since the printer is separately buffered, it needn't be as fast as the incoming data as long as the difference doesn't exceed the buffer size. The rewind command may be used to get extra copies of the received data. .ti -5 n .br Send NEWLINE (lf) only when transmitting file (no CR). .ti -5 o .br List unit Off. .ti -5 p .br Send CR only at end of line, and then pause until echoes from remote have stopped. Useful for sending files to bulletin boards where the remote needs time to prepare for the next text line. .ti -5 r .br Send CR only at the end of each transmitted line. .ti -5 s .br Squelch captured data with ^T and unsquelch with ^R. These characters are not copied to the file. This mode must be set/reset as desired BEFORE opening the receive file. .ti -5 t .br If Waitnum is more than 1, wait for echoes to stop after sending each Waitnum characters for period Pause. If Waitnum==1, send at 1/Throttle, measured in loops of the term() function. The default values of Waitnum and Throttle provide transmission at about 50 words per minute regardless of baud rate. This is handy because many remote systems cannot accept input at full speed. .ti -5 v .br View control characters as ^C. Useful in shutting up the bloody bell. In addition to the above, vv ditinguishes characters with the parity bit set by prepending a tilde (~). Note: View mode is distinct from view option. This mode is reset after each command. .ti -5 w .br Wait to receive GOchar afrer sending a CR at the end of a line. Default for GOchar is linefeed (see g parameter below). If GOchar is not received, the wait times out in the same manner as with p mode. .ti -5 x .br Exit from the term function when EOF is encountered on transmitted file. .ti -5 z .br Terminate data capture and close file when ^Z is received. Otherwise ^Z is ignored. It should be noted that The Source coughs up an occasional ^Z just as the "UPI" program is just about to output something interesting. .ce 1 ******** Options used with S or R commands ******** All options are reset after each command. .ti -5 b .br Batch option. Pathnames are provided by the sender. Disk names are excluded from the transmitted pathname(s), and may not be specified for batch option reception (use the change directory command). .ti -5 c .br Request Cyclic Redundancy Check instead of simple checksum. This option must be specified with the R function. The receiving program automatically signals the sending program if CRC is to be used. The probability of an undetected transmission error is much less if CRC is used in place of arithmetic checksum. .ti -5 q .br Quiet option inhibits some of the status information. Quiet option is not necessary for proprer operation at higher baudrates. .ti -5 t .br Execute the term function after file transfer(s). .ti -5 v .br View the data being transmitted. Correct data is displayed once. Viewing ascii files does not interfere with correct transmission at extreme baud rates, although throughput will be affected. For each sector, data is viewed once before sending/after receiving. .ti -5 y .br Yes it is OK to clobber a file already on disk. If absent, the operator is promped for a y or n decision. .ce 1 ******** Parameters used with P command ******** .ti -5 gc .br Set GOchar to c. C may be a graphic character except ^, or a control character represented by ^c. Default is linefeed. (See w mode.) Some remote systems accept uploads with a ? for each line. Optimum operation with such a system might call for pg? pp10000 pt90 ftw filename. The first sets the goahead character to question mark, the second sets the timeout to a long delay, the third sets throttle to a speed which allows the remote to echo at 300 baud (assuming no tabs), and finally the command to send the file with throttle and wait at end of line (also eliminating the lf). If this sounds too complex you can always go back to longhand. .ti -5 ln .br Set Low to n. When receiving characters from remote to a file with the t filename function, YAM sends XOFF when the free buffer space drops to Low. Then, when output from the remote ceases, the buffer is dumped to file. If a data overrun is detected, the error is printed and if Low <= 1000 YAM returns to command mode. .ti -5 wn .br Set Waitnum to n. See "w" mode for details. Default is 1. .ti -5 tm .br Set Throttle to m. The default value corresponds to about 80 words per minute sending speed. .ti -5 pm .br Set Pause to m. When the free characters in the circular buffer reach 400, an XOFF is sent. Pause controls the time which must then pass without characters received before believing that the other end really has obeyed the XOFF character, as opposed to the sometimes lengthy Compuserve hitches in the getalong. If Pause is too short, it is possible that a lurch in output will be interpreted as acknowledgement of the XOFF, only to have more characters arrive whilst yam is occupied dumping the buffer to disk. When this happens, unfortunate characters are routed to the proverbial bit bucket, and you can retry the download as the timesharing service increments the connect charge. The default value seems suitable for Source over Tymnet and BBS systems. Pause is also the echo wait period used with the p mode, as well as the timeout for w mode. Some bulletin board programs require a longer pause when accepting files with the p or w mode. .ce 1 ******** Replot Commands ******** Commands within replot consist of a single character. Replot maps uppercase, lowercase, and control characters together in decoding commands. .ti -5 b .br Beginning of buffer .ti -5 v .ti -5 backspace .br Previous page (some overlap provided) .ti -5 space .br Next page .ti -5 p .br Backup one line and redisplay .ti -5 n .ti -5 LF .br Advance one line .ti -5 OTHERWISE .br Return to previous funccion .ce 1 ******** Sample YAM Session ******** A sample session might be: .nf A0>yam b19200 b: Set 19kb, Change to b disk dirr yam?.? yamhlp.mss List files and calculate xmsn time sb yam?.? yamhlp.mss Send them to a local system call hydepark Can't remember the phone number! t Term Function minirbbs E Enter a message, answer topic,etc questions ^E ftp letter Open 'letter' and send to bbs, using prompt and throttle modes to prevent overloading the remote system. ^E rt secret.tqp Suck in a file, then back to term function ^V pause ^V^V Flip back three pages, to first part of directory listed previously CR Back to term function More keyboarding with remote, logoff (^E if CDO defined, term will exit by itself) off Drop DTR so modem won't answer calls, Return to CPM .fi .ce 1 ******** Notes ******** The transmission of pathnames in batch mode differs from that used in MODEM7. Yam sends the pathname as a null terminated string in a standard Ward Christensen type packet with a sector number of 0. Disk specifiers (B:) are not sent. The sender waits for an initial NAK before sending the pathname. An explicit NAK is sent by the receiver at intervals when is ready to receive a pathname. Upon receiving and acknowledging the pathname packet, the receiver opens the file and then sends the initial NAK for the data in the file. A null pathname terminates batch transmission. The remainder of the pathname sector is set to nulls. Future versions of YAM (running on 8086 MS-DOS, for example), may add optional fields after the first null for file information such as modification time (should not be transmission time!!), or exact length. Readiness to receive sectors with Cyclic Redundancy Check (2 bytes) instead of the usual additive checksum is indicated by a 0103 (ASCII "C") for initial "naks" instead of 025. File transmission is compatible with MODEM7 in single file mode. File transmission may be aborted by sending a sequence of CAN (^X) characters. Each character keyboarded will cause readline() to return a TIMEOUT error, thus regaining keyboard control relatively easily. I routinely send files at 9600 baud between a Z89 (2 mHz) and a Cromenco 4mHz system. This still works at 9600 baud even with CRC! Reception in the term function seems to works well at 9600 baud on a Z89 provided the printer is off. If you use bios calls for terminal i/o (e.g., TRS-80 version), the maximum speed may be less in the term function. *#Use these numbers for comparision. Your mileage and range may differ depending on clock speed, circuit distance and RFI/EMI. Calif. est. lower. Quiet mode is not necessary for proper operation at 19kb, although it does increase thruput slightly. View option (S and R commands) does not decrease maximum baud rate, although throughput is obviously affected according to the ratio of terminal speed to communications rate. Printer operation with bios calls or view mode substantially reduces the highest baudrate possible with the term function without losing characters (independent of actual printer speed). The term function will send XOFF to prevent buffer overflow if the printer is on, or if a receive file is in use. Term function on the Cromenco with a 300 baud printer works fine at 4800 baud. Baudrate selection routines are provided for the Cromenco TUART and Z89 serial board (8250's). If you want YAM to use the modem port's current baudrate, provide a readbaud() function (in yam5.c) and don't define INITBAUD. If you can't read the modem port's baudrate, define DEFBAUD default_baudrate. If you wish yam to initialize the modem port, define INITBAUD. In the term function, use of the circular buffer provides some advantages. .rm -5 .in +5 Incoming data may come in at a rate higher than the display and/or printer. Tab expansion for the display does not compromise this ability. The user may decide to save a timesharing session on the disk AFTER it has started (or possibly even finished) as long as the buffer pointers have not wrapped around. The same ability also applies to the printer. The printer need not be as fast as the modem as long as the Tortoise is allowed to catch up. Received data may be redisplayed (rep command). .rm +5 .in -5 At high speeds, the display will fall behind the incoming data, as storing of raw modem data into the buffer takes precedence over all else. As a result, a defective or incorrectly programmed modem port which sources data at high speed can lockout the keyboard. If yam "goes away" when entering the term function, this may be the cause. If insufficient stack space is provided above the end of the circular buffer, yam may sulk when attempting to exit from the term function. The amount of stack space is determined in the init function (in yam1.c) where bufend is initialized. The t and z modes affecting data capture take effect when the circular buffer is written to the receive file, not as the characters are first received from the data port. .ce 1 ******** Installing Yam ******** Yam consists of yam.h, yamsys.h, yam8.asm, and yam[1235710].c. Yam currently supports the Z89 (with aux board), Cromenco TUART, TRS-80 II, and Apple (currently with Z19 console). Yamsys.h is not part of the distribution; one of the configuration dependent header files is copied to yamsys.h. SOME of these files are: Yamz89.h is used for Z89 computers (check the port definitions to be sure they agree with your usage.) Yamtuart.h is setup for a TUART board at 60H. Yamz89xm.h describes an XMODEM configuration with the Z89. Yamtrsii.h describes a TRS-80 Mod II. One of these (Or one you write for your system) should be copied to yamsys.h before compiling the files. YAM also refrences some of the definitions in BDSCIO.H. When cross-compiling a version of yam for a different system, be sure to refrence a bdscio.h file suitable for the target system. Alternatively, one might #undef CDATA and any other definitions which otherwise would speak with forkked tongue; YAMLYLE.H will be an example of this trick. Starting with Version 3.08 and untill nested #defines are allowed in BDS C, there will be multiple versions of yam5.c depending on the target system. There haven't been any changes to yam5.c (except for porting to new systems), so you should be fairly safe hanging on to your current version. Compilation should be with -e 6200 for all files and -o for yam[2357] if operation at extreme baud rates is desired. If the unsqueeze feature is enabled, (or you have added some code for autodial, etc.) the externals need to start higher. If the externals start below the end of code, YAM will say "urk" and exit, hopefully before doing anything REALLY nasty. Yam can be made somewhat smaller if the -o is left out and the external address is downsized accordingly. To make the smallest YAM possible, define CDOS and RESTRICTED and then leave off as many optional #defines as possible. I have found YAM to be handy for transferring files between adjacent machines; hence all the attention to high speed operation. If your machine uses a different type of UART chip, or a built-in modem card, then the yamsys.h and yam5.c files will need work. Proper operation of YAM cannot be guaranteed with BDS C versions prior to 1.44. If you don't have that version, send 8 bucks and a copy of your software license (a Xerox of your distribution disk showing it's label should do) to: .nf BDS C Users Group Robert Ward Dedicated Microsystems Inc 409 E Kansas ST Yates Center, Kansas 66783 .fi Versions before 1.43 are a definite no-no. .ce 3 ************************************* ********** PROPAGATING YAM ********** ************************************* Often the question arises, "How do I get YAM (or whatever) into this neat new machine with the *%!@$@ format disks? The b mode was put in just for you! First, cross-compile a version of YAM with a yamsys.h file appropriate for the target machine. Then, connect the two machines RS232 ports together, and initialize those ports so they talk to each other. Presumably, YAM is running on the host machine. Now run ddt, sid, zsid, dcon, or whatever and write a tiny program up in fairly high memory (above the highest address used by YAM, say 7000h). This program will: 1. Set HL to 100h 2. Wait for UART for data available 3. Input data from UART (Note: UART must be in 8 bit, no parity mode) 4. Store data to memory (mov m,a) 5. Increment HL 6. Jump to 2 above. When the file is all sent, interrupt the program, jump to location 0. Then you can save YAM.COM. If you can't interrupt this program without blowing it away, you'll have to change it to detect the end of data (perhaps count the number of bytes received in the DE register) and make the program jump to location 0. Another possibility would be to unload the yam-target.com image into a hex file (there are various programs around that are the reverse of load.com). Then run pip in the target machine with input from the serial port and output to a file using pip's B parameter. With the B parameter, pip buffers incoming data in memory untill an XOFF (Control-S) is received. To get that, send the file from the host with "yam f file.hex" and from time to time hit two ^S's on the host keyboard. The first ^S stops the transfer, the second will be passed to the other machine where pip will see it. When pip has written out the buffer, type ^Q on the host to resume. (Be sure to stop often enough so pip's buffer doesn't overflow.) (With pip, go slow -300 baud is much better then typing it in by hand!) (If the target system seems to be echoing characters, slowing down the transfer with the t mode may help.) Finally, load the file with the target system's load command. Once you have a working yam in the target machine, other files come across effortlessly with the batch file transfer option. Happy propagation and may your machines trap feritile YAM's. .ce 1 Notes on Uploading Files If the remote has YAM, XYAM, MODEM, XMODEM, or umodem, you can upload files with the s command on your computer and the corresponding r command on the remote. Newer versions of some of these programs support Cyclic Rudundancy Check as an alternative to the simple checksum used by the original Ward Christensen protocol. CRC is much better at detecting errors and I recommend its use where avaiable. Unfortunately, this protocol is not implemented on the popular timesharing services The Source and Compuserve. It is often possible to upload files using the F command, perhaps with one or more modes. Your chances of success improve if you set "enab flow" when connecting to Telenet. If using Tymnet, type ^R^X just before the host computer name to enable flow control with XOFF and XON. It often helps to use "half duplex" when connecting to the computer. .ce 1 Interesting #define's .ti -5 CDOS .br Makes YAM work on CDOS operating system by deleting CP/M 2.2 operations such as user number, calculate file length, etc. If you have CP/M 1.4, CDOS just might do the trick for you. .ti -5 KBMASK .br This is normally 0177 to strip parity from keyboarded characters, but may be 0377 if a full 8 bit keyboard is used. .ti -5 USERINIT .br Causes init() to call a user supplied function userinit(). .ti -5 TERMRESET .br A string enclosed in quotes which sets the terminal to the mode desireable for the term function. TERMRESET as defined for the Z19 turns on wraparound. .ti -5 RXNONO .br Define this as a string of characters, any of which would cause your terminal and/or cbios grief if not suppressed by term function. .ti -5 LOOPBACKNONO .br Define this as a string of characters, none of which will be sent to the other end as a result of the U function. .ti -5 STATLINE .br Define this if your terminal has an extra (viz., 25th) line usable for status information which does not scroll up nor interfere with scrolling. lpstat() writes to the entire status line, clearing out any previous contents. pstat() writes statrting at the 48th position, not disturbing any information written by lpstat(). .ti -5 MODEMSTUFF .br If you provide routines setbaud(), readbaud(), bye(), and onhook(), define MODEMSTUFF to exclude the default dummy routines. .ti -5 AUTODIAL .br If your modem supports autodial, write your own version of dial() and define AUTODIAL to suppress the default routine. .ti -5 MIERROR .br If your uart has a separate register for error bits (not the register that holds receive data available), mierror should be an expression which returns non zero in case of overrun, framing, or other error, but not carrier dropout. This version of readline has not been tested. .ti -5 MIREADYERROR .br Define this if data available and the error bits are in the same register, especially if reading that register clears some error bits, or if the error bits are valid only if data available. .ti -5 IOTYPE .br This defaults to char for i/o mapped systems with 256 ports. This may be defined to unsigned or long for systems with more ports (8086 or memory mapped i/o). .ti -5 Z19 .br Generates output for Z19 functions, especially status (25th) line. .ti -5 USQ .br Allows the type command to automatically recognize squeezed files and display them in ASCII form. Adds 1000 hex to program size. .ce 1 ******** XYAM Differences ******** XYAM is produced by defining XMODEM in the file 'yamsys.h'. Consult 'yamz89xm.h' and 'yamx.sub' for an example. Ceratin #defines are especially applicable to XYAM: .ti -5 LOGFILE .br All files sent (includes type or list commands) or received (r or t file) are stored with the current baudrate in LOGFILE. Requires CP/M 2.2x. .ti -5 RESTRICTED .br Certain commands and options are disabled. Filenames with '.BAD' extensions and files with $SYS or TAG2 bits set cannot be opened. They will not appear with DIR or DIRR commands. A file with extension of '.COM' will be uploaded with a '.OBJ' extension. Exisiting files cannot be overwritten. .ti -5 CDO .br Define a test for carrier drop out so that XYAM can exit when the connection is broken. .ti -5 BYEPROG .br Bye, O and OFF commands chain to BYEPROG.COM if BYEPROG is defined (as a string). For systems wishing to use a BYE.COM to request comments. .ce 1 Recent Revisions/Enhancements to YAM 3.11 Added Cis02 mode for Compuserve access, fixed logfile problem (first few files didn't show). Tab expansion fix courtesy Jeff Martin (I thought it was the Z89!) 11-28-81. 3.10 Changed yam10.c to stop printout on ^Z in file 11-22-81. 3.09 Cosmetic change to type command in xyam. 11-17-81. 3.08 Added USERINIT option useful for some implementations. 11-14-81. 3.07 Minor change to yam1.c for benefit of memory-mapped systems 11-11-81. 3.06 IOTYPE added for memory mapped systems List command now distinct from type. Cosmetic changes to opentx(). 11-8-81. 3.05 Added automatic recognition and display of squeezed files. Inclusion of the unsqueeze feature (#define USQ) may require clink -r 800 11-7-81. 3.04 Added GOchar parameter, enhanced view mode 11-6-81. 3.03 Number of sectors and xmsn time printed when opening files 11-5-81. 3.02 Xyam resets user number when exec'ing BYEPROG. 11-01-81. 3.01 Added INITBAUD. Your yam?????.h may need revision. 10-31-81. 3.00 Nomenclature changed to facilitate differential file updates 10-25-81. 2.34 Added era and NATHAN commands, O mode. 10-24-81. 2.33 Changed Unixish "FILE" to struct _buf in yam.h. 10-21-81. 2.32 Added BYEPROG define, deleted T, U, and W commands from XYAM. 10-18-81. 2.31 Corrected tab expansion and kbd XON XOFF handling in yam3.c 10-17-81. 2.30 Supports CRC error checking option compatible with XMODEM45 10-15-81. Chat function now in both yam/xyam. 2.24 Added free disk space report on a: etc. command, Upchuck function. 2.23 Added "crck" command. .br nges to opentx(). 11-8-81. 3.05 Added automatic recognition and display of squeezed files. In