TD8    GLASM CPM,8MEX HLP MEX HLPMEX-VI10CPM@ !"#$%&'()MEX10 DOC*+,-./0123456789MEX10 DOCh:;<=>?@ABCDEFGHMEX114 CPM@IJKLMNOPQRSTMEX114 UPD/UVWMLOAD CPMXY6MXH-VI10ASMZ[\]^_`abcMXM-SM15ASM_defghiP 1MÚLASM as of 7/06/82 RESEARCH SIDXREF1D00 $10 !~=W!xe ~M4M4z~#o}o҃.ASMg> >ک!PRNq*DM͡:͆ ͆2:`!HEX!:*&!w_#~ A:~J~# > J\ ?!w#J0> J> J! ! !6 ::::! :l2:] !2!d222!!̓͌fk:ʢ!͓ fkâ!"22|-!I z{**|!" !Msw# dMҖ6# xM*#"~ ̑!` G:ʽx¶JýͿ*!M'w#"!*͌!"!M'~~#  !w  *!M+w#"!*͓!"!M+_O͟: :yJ:!ʁG~W#x=r2> W> W!>x6 #=“G!~ p̓ʻ*}ʻ>͟ë::p*f"n*}>̓͌U:͓  U:=2!22͌fk!"! C͜A Wx[H!O4gy͍Z:c:d~O#~zʅ+}|#͓T]͓##x G###* |~_##N#~y~͵#½> ͵> ͵##~#foß> õ*}>͌͟UƐ'@'õSYMBOLS ! NO SOURCE FILE PRESENT NO DIRECTORY SPACE SOURCE FILE NAME ERROR SOURCE FILE READ ERROR OUTPUT FILE WRITE ERROR CANNOT CLOSE FILES End of assembly G:x!p~*f*nO {z*f"n!p^4!qw zg{oè zg{oè ::! ;,!ɯ2 2 =2 !"ar! ~]5_! ~ E: Ě: * "a: ”:ž: ̚Ԛ!!^#=ʚVÆ©*Æ3 F; O: ̚>2 y#: _! ~! s! ~ y ! ~=w_! ~ ͚ >2 Ôyʔ3P͛ Ã͠ >Ư : ̚2 ͨ ?>E͛ɯ2e͊ ͇! 2p!""f"h"::!*ªͲ3 <  IIFINORSPACIADCADDADIANAANDANICMACMCCMPCPIDAADADDCRDCXENDEQUHLTINRINXJMPLDALXIMODMOVMVINOPNOTORAORGORIOUTPOPPSWRALRARRETRLCRRCRSTSBBSBISETSHLSHRSTASTCSUBSUIXORXRAXRICALLLDAXLHLDLINKPCHLPUSHSHLDSPHLSTAXXCHGXTHLENDIFMACROTITLE  PF FP! ( 2/?'  v:P@< !  PP27 ( *"  NZZ NCC POPEP M x _BH!¿ !# { Kë Cë <:!JCR: zg!e~4ʩX!6 ! *c*j**j\M[!O]w#DH use factor ! *"f!x#~ l å lines read :e> !~~0 60+Û*f"h*"l Ͳ!":e͠ ď͎ *hͻ ͠ ̉ *h*ĉG:exͲ: *h[:xH*f#"fED0:0!^4!w88*h!6zH{H4>R͛>V͛>DØ>PØ>LØ>N͛1WƐ'@'>:!p^Ww*n{|}{N!q~#E> > 0 ʅ ʅ:x҅_<2!w͞2_2> 2^l>2ɯ2 2`! ~@ڴ6z ^4#:_w~$w:_0 :_A:_A:_a{_2_a2_: !ɯ2͞:_ P;=*I:^ IV= V#a>Õl>Õ:_'}2_>Õ “:el!6 >2>2:_2^Ħ:!_:ͿʘØ^ Ϳʘ˜:_OQ>H>2`2_ :^^:eĉ͠ ͕*}ď*l"::!:PX!O^#fkg!$ Gͼ:˜: =ʘG!!ʒF#Âç.*a|ăEͫ3,jêͼXJ*h"h"fêͼJEDͫ3,êͼX: ªJ: "> 2::! J!!: qG> qOw#= O6 #E:_q O p# =O!} l++ERROR IN LINK OPERAND++ Ͳ*hJ"hͼ[!6="hêͼJ: ª}ڪ::!>B̛3 xJ0  0 !#6  !"( #  ɯ<: O=_} ! F! V#fjQͦ h ! ^#Vo&)~#F xGyѯ<*}|̈́ ":N!̈́ ! ~ڷ ͚6~44O! s#r! ~ 6͚^4! w! p! ~ ͚!55N! N#fi o&)^#fk z<{͚>ɯo>g"!6ů{_zW5>)D*OxGy !?[DM!xGyOڗØ)È̓è Jè Jè 0ʨ )=÷0ʨ |g}o=è B Bè #zg{oè WB > D>  ! 52`!"! N#~#A. 00 7O!`t ~*!S M )D " " :_ z '˜'Ø>VÀ >OÀ ͛!M3w#w# !"l! F#¤ 2 G*l##~w*l##~<*l}͟ ! ~ 6! ^!M3^#fk"l ͼ !  G#*l### # *l^#V ! ^*c"l*{zo "c*l! N!M3 N#Fr+sq#p ] >G=#w#wa #w#w!x åSYMBOL TABLE OVERFLOW G*l##~w*l##~ͼ *l_###ͭ s#rͭ ^#V  4   z ()*+,-/ABCDEHLMDBDIDSDWE͕êJ: ª"h"fͼXêͲ͠ ď>͎ JͲͻ !"ê͕ê!_!d^#fk*u͐͊*u*k8ʪoy0'͊*kG͐`'k͐̈́*̈́*k(oy'͊*`'k'koy0'k'̈́*ͼͫê:ă:!,; ă.*aJ|y}Vy`8Okoy0VJ&:¢:!,ʧ>C͛ͼ::! ;ͼ::! !!>S͛{o  ALER[APPEN"AL BAKFILBELBYňBUFFECANCE̘CAL̟CHACHECKSUCICLOC[CLONũCOLĩCP͈CRDEBUDECIMADËDIASDIҲDSÈDU-SPEsERERRIEXCLUDEXTENPESÛFILTEGLOBAEXIԈHELHEIINITFILXKE KEY LLISLOAĶLOMULT{PAGPHON_PREFIlREA.RE`REPLفRETRلRTIMRUSAVŶSEARCSECONSENDOUnSEԈSINGL&SLEEЍSPLISTAdSTRINGӻTYPgSILENSUFFIlSWITCSYSTE͈TERM-MOD/VAWCHA)WLIN)WRԈWTECHϒTRIGGEҘSEЛXLIN Two drive/user areas are possible: the currently logged area ("logged" D/U) and the Alternate DU (do HELP ALT for information on changing the alternate). If SEARCH=0, then only the LOGGED DU is searched. If SEARCH=1, then only the ALT DU is searchedP. If SEARCH=2, then the LOGGED DU is searched; if the file is not found, then  h the ALT DU is searched. If SEARCH=3, then the ALT DU is searched; if the file is not found, then the   LOGGED DU is searched.   5of the session, unless a LOG command is executed. % The ALT command supports the ALTernate drive/user for READ files as well as .PHN and .KEY (phone libraries and keystring files), and, if the 'A' (append) secondary option is in effect, the terminal-modem capture file. ALT allows you to change the alternate drive/user; its syntax is: ALT Examples: ALT B3: ALT A5: For more information on how altn as possible. This compact display does not, however, provide enough room to include the number's optional baud-rate. By setting SPLIT to ON, numbers will be printed one per line, and each number's baud rate (if present) will be displayed.  MEX has a special feature that allows you to maintain 'log' files of your sessions; this is the 'A' secondary option (specified with the T, E or L primary commands when entering terminal mode IF a filename is specified). When you specify the 'A' s H4XOW Copyright (C) 1984 by Ronald G. Fowler & The HELP command with no arguments prints out a list of available help subjects (as you've probably guessed by now, since you are indeed read- ing this). The HELP.MEX file must, of course, be located in the drive and user areas as specified in your overlay configuration. Help will print a list of available topics. To see this list, do this: HELP ? To query th HEX and DECIMAL modes HEX and DECIMAL are STAT value variables; they are mutually exclusive (ie, turning one ON turns the other OFF. These variables specify the default input radix of commands that take numeric arguments (e.g., SLEEP, STAT VAL <#>, the '#' spec in CALL commands, etc). If HEX mode is ON, then these numbers are considered Hexadecimal; if DECIMAL mode is on (MEX is distributed with DECIMAL ON), then they are considered decimal values. You can force a decimal number, regardlQernate DU's are used, and how to set up the ALT search path, do HELP SEARCH.  SEARCH is a STAT variable that may take on the values 0, 1, 2 or 3. SEARCH specifies a search path for READ files, phone libraries, keystring files, and (if the append secondary option, 'A' is specified) terminal-mode ASCII capture files. These files normally are taken only from the currently logged DU; by modifying SEARCH, you can change the way MEX finds these files. 2econdary option, MEX will search the logged area (and/or the ALT area: do HELP ALT and HELP SEARCH for more information on searching) for the file specified. If found, MEX will scan to the end of the file, and append new data on to the end, rather than querying the user for an erase. If 'A' is not specified, MEX will limit its search to the currently logged DU, and, if the file is found, will ask you if it should erase the file. In either case, if the file is NOT found, MEX will create a new fil e HELP database for any of the selected topics, do this: HELP for any topic-name displayed by "HELP ?". In general, HELP frames explain syntax with the use of the '[' and ']' characters (which denote optional items) and the '<>' characters (which indicate a data-type, such as or . % You may move freely among drives/user areas while the HELP file is opened; MEX will remember where to find it. Once opened, the HELP file will remain open for the duration ess of the HEX or DECIMAL mode, by preceeding the number with a '$' character; similarly, the '#' character implies a decimal number. HEX mode has a side effect: it turns on HEX record count reporting in file transfers.  SPLIT is a STAT switch variable that affects the screen display of the phone library (done from the PHONE command or the CALL command). Normally the phone library is printed two numbers per line, to effect a compact display with as much informatio F!e in the currently logged DU. / WCHAR and WLINE: These are value variables that may be manipulated with the STAT command. They specify delay times in simple file transmissions done within terminal mode (with the T command). When you trans- fer a file, MEX will ask you whether you want to use these delays. WCHAR is the delay to use between characters.(0-9, in 10's of milliseconds) WLINE is the d]very similar to CPM's SUBMIT parameters; they are called ACTUAL parameters. If they are present in the command line, they will be plugged into the FORMAL parameters in the submit file. This substitution facility provides a powerful tool for generating multiple-purpose command files, as we'll see in the proceeding frames. Formal parameters occur in the READ file, and take the form {n}, where n is the parameter number; these numbers correspond sequentially with the ACTUAL parameters entered on the cember where the READ file is located. % Typically, READ files are created with a text editor, and may contain STAT commands to set MEX for a particular type of connection, DIAL commands to actually make the connection, and SENDOUT commands to log in at the destination. It's possible for an entire session to take place under a READ command. A READ file will terminate when the file ends, or when a CONTROL-C is seen at the console (aborting any command with CONTROL-C will abort the READ file).  e FORMAL parameters). This file can be used in several ways: READ FILEGET will simply transfer SENACA.DQR to your system READ FILEGET MEX.UPD will transfer MEX.UPD to your system READ FILEGET *.NEW B will transfer all NEW files in batch mode READ FILEGET USQ.DOC VT will transfer FILEGET, View it, goto Term mode The following line illustrates how to expand a parameter, using the above file: READ FILEGET {*.BOO NEWSTUFF.DOC} BX [use if MEX is running on remote] (Transfers all .BOO files a`elay to use between lines (0-9, in 100's of milliseconds) WCHAR and WLINE delays are often needed for timesharing mainframes and BBS's written in BASIC, to allow the slower remote end to catch the entire file.  The READ command causes MEX to take command lines from a disk file. This can be handy for such things as controlling a set of file transfers (es- pecially when you can't be present for the entire session) and executing complicated login sequences auCommand line. The ACTUAL parameters in the command line are substituted for the FORMAL parameters in the READ file when the file is executed. A special form of FORMAL parameter allows a default value to be used if an ACTUAL parameter is not specified on the command line; this form is {n:} where n is the parameter number, and is any arbitrary text to be used as the default. % If the default form of the formal parameter is not used, AND no actual parameter is specified in the command It's important to note that, while you can use a READ file to enter the terminal mode, the READ file is not used while the terminal mode is active. When you exit terminal mode, the READ file starts again. Normally, READ commands echo on the screen when they execute. You can inhibit this, however, by manipulating the SILENT variable (do STAT SILENT ON to inhibit the command echo). The following frames deal with the READ command with parameters. % READ with PARAMETERS READ parameters are  nd NEWSTUFF.DOC) in batch mode, then disconnects) If you turn the command extender on (STAT EXTEND ON), the READ in the above lines can be omitted, making the READ file look like a built-in command. This affects single-character commands somewhat: the disk is searched before the the command is checked for a single; you can avoid this by prefixing single- character command lines with a '*' (eg, *RQ FILE.FOO). -wtomatically. READ, used with the EXTEND function (do "HELP EXTEND" for information on how to enter EXTEND mode) provides a means of extending MEX's command set. The syntax for READ is: READ [] [] ... \ \ \ __\_____>> optional! , , ... etc. are described in succeeding frames. The READ file may contain any valid command EXCEPT another READ command. These commands may freely move among drives and user areas; MEX will re- m3 line, execution will continue, but the parameter will be blank. Normally, the parameters in the READ command line are terminated by the space between parameters (or the end-of-line); spaces can be imbedded in the ACTUAL parameter by enclosing it in braces. The next frame will provide a simple example of READ with parameters. % Example, READ with parameters FILEGET.MEX contains the following lines: SENDOUT XMODEM S{2} {1:SENACA.DQR} R{2} {1:SENECA.DQR} ( {2} and {1:SENACA.DQR} ar   m EXTEND is a STAT switch variable. When turned on, it modifies the way MEX's command decoding works: if a command is not found in MEX's command table, MEX will pass the entire command line on to READ, causing the command to look like a READ command_ (without READ being present on the command line). For more information, do "HELP READ".  The DIAL command performs the same task as the CALL command, except that after calling, DIAL returns to command mode (CALL  The STAT command lets you examine certain system variables, and change certain others. In general, the syntax is as follows: STAT <<== to examine a variable STAT <<== to change a variable The NEW-VALUE will depend on the context of the keyword in question. For example, most of the switch-type variables are either ON or OFF, hence, STAT BAKFIL <<== prints out ON or OFF STAT BAKFIL ON <<== turns on BAKFIL STAT BAKFIL OFF <<== turns fhed with the CALL command. ALERT works only on calls that have taken more than one dial- ing attempt to reach. ALERT is handy for dialing with the repeat option (do "HELP CALL" for more information about the repeat option): you can enter a number (or group of numbers) to be dialed; with ALERT set non-zero, you'll have an audible signal that a call has been completed.  The PHONE command may be used to query the phone number library, as well as for adding and deleting numbers. To add a numbmthe specified string is transmitted, a PREFIX string, if any, is transmitted, followed by the string specified to SENDOUT, and terminated by a SUFFIX string (if any; the default suffix string is a return-code, normally terminating the line to the remote). After transmitting the string, MEX will wait for a reply from the remote, up to a pre-set number of seconds; any reply will printed on your screen. % Following are settings and variables which affect the SENDOUT command: SUFFIX: \ Both of the goes to terminal mode). The syntax for DIAL is exactly the same as the syntax for CALL (do "HELP CALL" for more information on how to use both DIAL and CALL). DIAL is intended to be used in READ files, where it is desirable for the READ file to retain control after calling a number (READ files have no effect in terminal mode; thus using CALL in a READ file would pause ex- ecution of the read file when the distant end is reached). ! off BAKFIL The value-type variables, on the other hand, will print the number or text associated with that variable. Setting the value requires the entry in units associated with that value. For example, STAT REPLY 5 <== sets 5 seconds as SENDOUT reply time STAT WCHAR 4 <== set 40 ms as transmit-character delay tim during a terminal-mode file send % Some variables are read-only, most notably STAT BUFFER (which prints out the save-buffer and printer-buffer statistics)[er, use this form: PHONE = [baud-rate] Where ID is a string (up to 8 characters) that you want to use to call out the number and is the telephone number. If already exists, it will be replaced. is an optional rate to be associated with the number, used by the CALL command. To remove a number, do PHONE = To see the entire library, do PHONE To see a single entry, do PHONE mse are described in the previous frame, and are PREFIX: / further explained in their own information sections. WTECHO: Manipulated by the STAT command, this switch-variable determines whether or not SENDOUT validates its transmission by waiting for characters to be echoed from the remote. If set to ON, then SENDOUT checks each printing character it transmits with the character as echoed by the remote. If a mismatch occurs, SENDOUT marks an error, sends a CANCEL character, and awaits a TRIGG  INITFILE is a STAT switch variable. It determines whether or not MEX will look for the start-up file INI.MEX when it is first started. INITFILE is intended to be used prior to running CLONE, to prevent the cloned MEX from looking for INI.MEX. B For more information about the CLONE command, do "HELP CLONE".  ALERT is a STAT value variable; it determines the number of times the console bell will ring when a remote computer is reac{. To obtain a list of all of the options that can be viewed or changed with the STAT command, do STAT ? You'll note that most of the keywords you'll see printed have their own HELP section.  SENDOUT allows you to send an arbitrary string out to the modem [see STRINGS]. This is most useful in indirect command file [see READ], but can often be useful in normal interactive mode. The syntax for SENDOUT is SENDOUT Before }ER character from the remote. It then begins again, and repeats this cycle until either the transmission occurs without error, or the error count is exceeded (which aborts SENDOUT). If you use SENDOUT with WTECHO off, you'll also likely want to set TRIGGER to null (STAT TRIGGER ""), to avoid trigger-wait. % More factors affecting SENDOUT: RETRY Manipulated by the STAT command, this value-variable specifies the error-retry count for SENDOUT before aborting. CANCHR: Manipulated by th5id command" message when you try to invoke SET. % SLEEP is used to invoke a delay (handy sometimes in READ files). Syntax is: SLEEP n where n is the number of seconds to wait (a ^C from the console will abort the SLEEP command, as well as any active READ file). Sleep, used with the STAT CLOCK function, can be used to "tweak" the timing constants in MEX (by timing the actual SLEEP period, and ad- justing the CLO RETRY is a STAT keyword, and specifies the number of times the SENDOUT will attempt to send a string before aborting. Note that if the Wait-For- Echo switch (WTECHO) is off, RETRY will have no effect, since no error can occur. To query the RETRY constant, do: STAT RETRY To set the RETRY constant, do: STAT RETRY where is the number of retries, between 1 and 255. 8 TRIGGER is a STAT keyword, and specifies the character the SENDOUT command will look for before sending out its argument. To disable the trigger-wait function altogether, do STAT TRIGGER "". CANCEL is a STAT keyword, and specifies the character Tthe SENDOUT command will send to the remote to cancel the line after an error.  SEP is a STAT keyword, and allows you to change the command-line separator character. ESC is also a STAT keyword, and (e STAT command, this string-variable (single character) specifies the character to be transmitted to the remote to cancel the transmitted line after an error. TRIGGER:Manipulated by the STAT command, this string-variable (single character) is the character the SENDOUT command waits for after an error-cancel, before proceeding with the retry. If the other end doesn't echo, set TRIGGER to 0 (and WTECHO to OFF), and MEX will simply send its arguments and not worry about validating the echoed CK value until the SLEEP argument agrees with the actual measured time). This is especially useful with multi-tasking operating systems, such as MP/M and TurboDOS, where background processing wreaks havoc with the internal MEX timing constants.  WTECHO is a STAT keyword, and determines whether or not keystrings and SENDOUT command lines transmitted to the remote are validated by comparison with their echoed characters. When WTECHO is ON, all printing characters transmitted to the remote  MISCELLANEOUS COMMANDS BYE, SYSTEM, EXIT and CPM are keywords used to exit MEX and return to the operating system. Any open terminal file is closed before exiting. DEL is used to close and erase an open terminal file. DSC disconnects the modem from the phone line (may not be implemented in all overlays). WRT is used to close and save an open terminal file. SET is a command defined entirely by the overlay; if your overlay doesn't implement the SET command, MEX will print the "inval specifies your terminal-mode escape character, used to activate terminal-mode functions (such as capture and printer buffer on/off, etc). The argument is a single- character string. Example: STAT ESC "^I" changes your escap"e character to the TAB key. / Use the CALL command to dial numbers either from the library, or from the keyboard. If you specify more than one number on wcstring (this is the technique you should use to send Smartmodem command strings, for example).  REPLY is a STAT keyword, and specifies the amount of time (in seconds) that the SENDOUT command will wait, after sending a string, for the remote end to send a reply. To query the REPLY constant, do: STAT REPLY To set the REPLY time, do: STAXT REPLY where is the number of seconds to wait, between 0 and 255. Gmust echo correctly back from the host; this effectively halves the transmission rate, but provides error correction feedback for the SENDOUT command, allowing it to cancel a line and re-try. If you're sending command strings out to a line that doesn't echo the characters, you'll want to set WTECHO off. Additionally, if you're using the SENDOUT facility, you'll need to remove the trigger string (you can do this with STAT TRIGGER "" , which effectively removes the trigger character.   Lthe command line, CALL will try each until one answers with a carrier tone. For example CALL 16165559033 SENACA will dial the first number; if busy, CALL will try the second. The special number '#' will cause the entire command line to be repeated if none of the dialed numbers responds with a carrier: CAL WESTWOOD 1-616-555-2040 TCBBS # will try all three numbers repeatedly until one answers. You may op- tionally place a limit on the number of retries by including a decimal number afteif the STAT variable 'EXCLUDE' is set to ON. If EXCLUDE is OFF, all files will be displayed. More examples: DIR C3:*.?Q? DIR LOGIN.MEX DIR 3: 1 LOAD and SAVE LOAD and SAVE are used to load and save phone number and keystring files. Both commands take a filename argument. Examples: LOAD A5:CBBSPHON.PHN <<== loads a phone # file LOAD ARPA.KEY <<== loads a keystring file SAVE C:N OLD command also allows you to remove the CIS protocol module (for those who don't need it): do this: STAT CIS OFF COLD CLONE Note that this removes the CIS module altogether (you can't get it back with the STAT CIS command). T%his frees up roughly 1K of memory. . The ERA command erases files. The syntax is as follows: ERA [V] The filename may be ambiguous (e.g., *.Sn a string; it separates your command strings outside of quotation marks only.  The ID command allows you to configure the MEX ID string (which is printed in the prompt, and in error messages, if the STAT ERRID switch is set to ON). This is useful if you're communicating with another computer running MEX; if each computer has a different ID string, you're never in doubt as to which one you're typing commands to, or which one printed an error message. r the '#': CAL 555-1212 #48 Note that a ^C will abort dialing at any time. % Note that phone-library numbers may specify an optional baud rate (do HELP PHONE for information on how to specify a baud rate for a number). If a baud-rate is present, CALL will change the baud rate before dialing the number. Note that, for this feature to work, your hardware must be capable of changing the rate AND your overlay must implement the NEWBD vector. Most MEX overlays (overlays whose names start withEWPHONE.NUM <<== saves phone # file SAVE 9:COMPUSRV.KEY <<== saves keystring file Note that the filetype determines what type of file is being saved (.PHN for phone number files, .KEY for keystring files). Any other filetype will generate an argment error. 9 Several MEX command take string arguments. These strings must be sur- rounded by quotatation marks, and may contain imbeddASM, BOOT?.BAK). ERA always dis- plays a list of the files that are being erased. If you specify the optional 'V' after the filename, ERA will ask for verification before actually erasing the files (after displaying the names).  The DIR command works similarly to the CP/M DIR command, and displays the disk directory on the screen. DIR takes advantage of the DU spec- ification, thus "DIR B7:" will display all of the files in user 7 on drive B. System files will be excluded Q6 The syntax for the ID command is ID  (see "STRINGS") The string may be a multi-line string; it's length in the standard distributed MEX may not exceed 28 characters. This length may be different if your system overlay replaces the MEX defaults (in fact, the overlay may disable this command altogether; if the "INVALID COMMAND" message appears when you attempt to use the ID command, then this is probably the case.  b "MXO-") allow this, if the hardware is capable of baud-rate change; most MDM overlays do NOT.  CLONE and COLD The CLONE command allows you to save a new copy of MEX, with the current options intact (including any defined keystrings and phone numbers). The syntax is: CLONE The COLD command re-starts MEX and erases any defined keystrings along with the phone library. This is the only way to erase the entire phone library with one command. The Ced control char- acters (with the singular exception of binary zero, which will generate an argument error). The caret ("^") is used to prefix a control char- acter. Thus, you can specify multi-line strings within one string specification. Examples (note that that the control-character ^M is the carriage-return code, and ^J is a linefeed): KEY A="BILL USER;J^MWHATSNEW^MB:^MWHATSNEW^M" SENDOUT "SD B:*.ASM^MCRCK *.BIN^M" Note that the command-separator character may be included freely withi c CRC and CHECKSUM are STAT switches. The two are mutually exclusive (that is, turning one on turns the other off) and set the preferred type of error checking in Christensen file transfers. CHECKSUM is a simple sum of the outgoing record; CRC uses a more sophisticated technique employing polynomial arithmetic, and is thus a better method (more errors are detected, thus, there is less chance of an incorrect record being received as if it were valid). The original MODEM2 protocol employed only uand random garbage characters on the line are erasing your screen, etc. If you're using a video-oriented text editor at the remote, you'll need to be sure FILTER is set to OFF, in order to allow the video-control characters to be accepted by MEX. Note that the CP/M end-of-file mark is specifically excluded from ASCII- capture files regardless of the setting of FILTER (although FILTER ON allows this character to go to the screen).  rt MEX while the CIS switch is set to OFF, then the Compuserve file transfer module will be removed altogether from the running copy of MEX. If you subsequently use the CLONE command to create a new executable MEX.COM, the additional space formerly used by the CIS module (about 1000 bytes) will be available instead for your buffers. You will not be able to use STAT to turn the CIS switch back on (since there is no longer a CIS module in the system). This feature is intended for those users who do ;-extend mode (command names not defined in MEX are passed  w to the READ command, which will search for a file of the same name). SILENT: inhibits command-echo in READ files. # EXCLUDE is a STAT switch-type keyword. It modifies the action of commands that take multiple-filename arguments (such as DIR and the batch-transmit SB). If EXCLUDE is ON, then SYS files are skipped over by these commands. If EXCLUDE is OFF, thrCHECKSUM detection; however, in the past few years, most versions of Christensen exchange programs have been rewritten to accept the CRC technique as well. MEX will adapt to transmitting programs using either type of validation. If MEX is the transmitter, it will switch modes after several failed attempts to transmit a file, thus allowing full compatibility with older modem programs. 9 Miscellaneous STAT arguments BAKFILE: Switch variable: if ON, any command creating a file when one of the same name already exists will, instead of erasing the old (or prompt-  E ing for an erasure) will rename the old such with the same primary  name, and a secondary name of "BAK". PAGE: Switch: if on, the TYPE command paginates; it scrolls if PAGE is OFF. CHAR: Lists all of the STAT variables that are CHARACTERS SWITCH: Lists all of the STAT variables that are SWITCHnot need the ability to do Compuserve- rotocol transfers, and would rather not waste space on a feature they do not need.  FILTER is a STAT switch variable; when ON, then abnormal control characters are ignored when in terminal mode (with the exception of carriage-return, linefeed, backspace and tab). If OFF, then all characters from the remote will be displayed on the screen (and included in the ASCII-capture file, if active). FILTER ON is useful if you're working with a noisy connection,  en SYS files are included. Thus, you can exclude SYS files from a batchfile transmission by STATting the EXCLUDE switch ON. These files will also be exclude from DIR listings while EXCLUDE is ON.  DEBUG is a STAT switch that affects the Terminal mode in MEX. If DEBUG is ON, then characters received in Terminal mode are displayed in a form similar to CP/M's DDT dump (D) command: hex values on the left side of the screen and the ASCII block (a CIS is a STAT switch: when ON, then Compuserve protcol file transfers are allowed while in terminal mode. If OFF, then the Compuserve transfer sequences from the remote end are ignored altogether (although they are printed on the screen as "normal" terminal-mode characters). CIS transfers are always done in terminal mode; there is no command to send or receive a file using CIS protocol, since the remote Compuserve end must initiate the transfer. Note that if you use the COLD command to restaES VAL: Lists all of the STAT variables that are VALUES BELL: Enables or disables the console BELL BUFFER: Prints out status information on the ASCII-save buffer. RUB: If ON, then the local backspace key is converted to RUB when the character is transmitted to the remote (in Terminal mode only). LIST: Switch variable: enables or disables the LIST device LF: Switch variable: if ON, affects terminal-mode file transmission; adds a linefeed after every carriage return. EXTEND: sets command ; s the output progresses) on the right. You'll note that the ASCII right-side display is "buffered" until 16 characters have been received. After the 16th, the ASCII right-side is printed. Therefore, if the remote's output pauses, you'll see only the hex values until the remote sends more output. Also, exiting Terminal mode will display any buffered ASCII. DEBUG is useful whenever it's necessary to know exactly what the remote is sending (for example, if you're connected to a time-share networkoser area. An optional colon may follow the DU-SPEC. Examples: LOG B7 <<= reset, log in drive B user 7 LOG 7: <<= reset, log user 7 current drive LOG B: <<= reset, log drive B current user LOG <<= reset, retain current user/drive If either a terminal file or a READ file is open, the disk-reset will be denied (although any new drive/user will be logged) and a message printed. If you want to change drive and/or user without a disk reset, you can do so without the LOG command: just e w) that MEX will wait for a char- acter from the remote end before declaring a timeout, and initiating a record-retransmission sequence. RTIME is set for one second in the standard distribution MEX; this is more than adequate for RCPM work, and MEX-to-MEX file transfers where each end is running under a single user operating system. But when working with a mainframe-type connection (and sometimes when a remote MEX is running under MP/M), especially when a packet-switched network is part of the con|, one line at a time; each succeeding line will not be transmitted until an X-ON character is received from the remote. XLINE is used with some timeshare and network computers, almost never with RCPM and BBS systems.  The GLOBAL command allows you to set the secondary options for the single- character commands. Any options set this way will then be active for the single-character commands whether or not they are specified. For example, if you prefer to go direc , and can't transfer files, a DEBUG session can prove illuminating in determining just what is happening). In DEBUG mode, the FILTER flag is ignored, allowing all characters to reach the screen. Additionally, the CIS protocol is disabled while DEB UG is ON. : ERRID is a STAT switch that enables and disables the printing of the MEX ID string in error messages. The ID string is uoanter the DU spec at the MEX command prompt (in this case, the terminating colon is required).  The KEY command is used to manipulate the keystrings that are available in terminal mode. There are several forms of the command: KEY <<= prints out all of the keystrings KEY =[] <<= defines a new keystring Keyname is any valid ASCII character, except for the set defined as the terminal mode escape-sequence commands. In the second form, above,Onection, character delays can easily exceed one second. In these environments, you'll want to set RTIME to a higher value (16 seconds is recommended; the maximum is 30). ) The LOG command allows you to reset the drive (for switching disks) and, optionally, simultaneously change drive and/or user area. The command syntax is LOG where DU-SPEC is either or both of the new drive to log into and the new utly to terminal mode after a file transfer, do: GLOBAL T You can also set the VIEW mode for CIS transfers by doing GLOBAL V (note that this is the only way to "view" a CIS file transfer. For more information about secondary options, do "HELP SECOND". 8 The SECONDARY options are used only after the single-character commands (for more information on single-character commands,  seful in applications where you're communicating with a remote computer running MEX (if each end has a different ID code, there is no problem confusing error messages), but if you typically use MEX only with RCPM systems or timesharing systems that don`'t run MEX, you'll likely want to turn off the ERRID switch, and shorten the error messages.  RTIME is a STAT value variable, and affects Christensen-protocol file transfers. RTIME is the amount of time (in seconds if is omitted, then the specified key- string is erased. Examples: KEY %="ATDT 14145559932" <<= sets up the '%' key KEY Q= <<= erases the Q keystring Note that KEY names that duplicate terminal-mode commands will be rejected by 9the KEY command, and an error message will be printed. $ XLINE is a STAT switch that affects terminal-mode file transfers. If XLINE is set to ON, then the file will be transmitted %l do "HELP SINGLE"), and modify the way the single-character commands work. Following is a list of the sec- ondary command options: COMMANDS OPT NAME USED WITH ACTION --- -------- --------- ------ A Append E,L,T Append to a terminal-mode file B Batch R and S Sets BATCH mode file transfers D Disconnect R and S Disconnects after a file transfer L Local T,E Local-character echo Q Quiet R and S Sets "quiet mode" for file transfers R Recv-view R and S Shows received-characters only SǓthe remote ("half duplex" in the other direction). Note that certain commands may be modified with secondary options (do "HELP SECOND" for more information on secondary options, and examples of single-character commands with and without secondary op tions. < TERMINAL MODE MEX terminal mode is entered with any of the single-character commands T, L, or E (for more informationISKFILE.SAV <<== same as previous, but with echo mode [MEX] A0>>S HELP.MEX <<== send file, no options (unless GLOBAL) [MEX] A0>>R MXO-SM10.ASM <<== receive file, no options (unless GLOBAL)  The most commonly used MEX commands are implemented as single character com- mands, for ease of use. These are: S: Send a file or group of files using Christensen protocol R: Receive a file or group of files using Christensen protocol T: Enter t!erminal mode (otherwise, there is no file active to write the incoming text into). You can use -P to copy incoming text to the printer. The text is held in a buffer, and prints only as the printer is ready for a character. Thus, your printer may be slower than the modem, and you won't lose characters un- less the buffer fills up. The next frame explains terminal-mode files. % Terminal-mode files (also called CAPTURE or ASCII-SAVE files) are created by entering a filename with the T (or  Send-view R and S Shows transmitted characters only T Terminal-mode R and S Enter terminal mode after file xfer V View R and S Views the file transfer in ASCII X Exit R and S Disconnect and exit after transfer Note that these options are also effective in CIS transfers, if set with the GLOBAL command (for help on GLOBAL, do "HELP GLOBAL". % Examples of secondary options: Primary --+ Command |+---->secondary commands |||| |\ / [MEX] A0>>ST MYFILE.FOO <<== send MYF# of the E and L variations, do "HELP SINGLE"). While in terminal mode, you are communicating as a console with the remote end as a console; your keyboard characters are transmitted to the remote, and the remote characters are displayed on your screen. There are several functions that are available to you from terminal mode, all of which are invoked by typing the escape-character (do "STAT ESC" at command level if you don't know your escape character) followed by one of several characters. These erminal mode (may specify an optional ASCII-save file argument) E: Enter terminal mode with echo (also takes optional filename argument) L: Enter terminal mode with local-echo only (filename ok here too). T, E, and L are all variations of terminal mode: T sends keyboard characters to the remote and prints characters received from the remote on the console. E mode echoes received characters back to the remote ("half duplex" mode), and L echoes keyboard characters on the console before they go out to  E or L) command; if the file already exists, you will be asked if the file should be erased. MEX will create the new file, and enter terminal mode. At this point, incoming text is not yet being saved; to start saving text, you must use the -S terminal-mode command. You can stop the save by using the -U command. You can perform as many start/stop sequences as you like (when text-save is active, you'll see a colon at the start of each line as a visual signal that the save is active). YILE.FOO, go into Term. mode after [MEX] B9>>RVT CRACKER.JAK <<== receive file with view, enter Term mode [MEX] A3>>RQX MONKEY.SHN <<== recv file quietly, disconnect/exit after [MEX] A0>>RBT <<== recv batch files, Terminal mode after [MEX] A0>>T DISKFILE.SAV <<== enter term. mode, allow save to disk file (note that the actual copy to the file must be activated with ESC-S while in terminal mode) [MEX] B3>>TA DISKFILE.SAV <<== Enter term. mode, append to DISKFILE.SAV [MEX] A0>>E DIare explained in the next frame. % Terminal mode escape-sequences: -E exits back to command level -? prints a menu of escape sequences -S start copying incoming text into file buffer (see below) -U end (un-start) copying text into file buffer (see below) -P toggle copy-to-printer on/off (if enabled with STAT LIST) -T transmit a file to the remote (prompts for a filename) Note that -S and -U require a filename argument with the T when you enter t  Eou can exit terminal mode and move freely among drives and user areas with- out affecting an open term-file. The LOG command will still be useable, but will not reset the disk (and will print a message to that effect). If you enter terminal mode with the T,E or L command WITH a filename, when a file is already open, the open file will be closed, and the new one opened. % You can transfer files using either Christensen or CIS protocols while a TERM file is open -- your buffer may be written to disng an X-ON character from the remote. XON is more frequently used: when XON is active, MEX will send characters at full speed, but monitor the remote for an X-OFF character. When an X-OFF is received, MEX will pause until the remote sends an X-ON c haracter. : XON is a STAT switch variable that affects the terminal-mode file send (do "HELP TERM-MODE" for a full description of termi for this scheme to work, the remote computer must respond to this X-ON/X-OFF "protocol" (most computers do, but *not* all!). The next frame describes the -T file transfer facility. % You can transmit a local disk file to the remote with -T; you will be prompted for a filename. If you have the XON and and XLINE variables turned off (do "HELP XON" and "HELP XOFF" for information about changing these), MEX will ask if you want to use the character and line delays for the file- send; thes The REN command syntax is similar to the normal CPM REN, except that DU specifications may be employed in either the new OR the old filename (but not in both). In general the syntax is REN = Examples: [MEX] A0>>REN NEWFILE=OLDFILE (uses A0) [MEX] C9>>REN B6:REPORT.OLD=REPORT.DOC (uses B6) [MEX] B3>>REN 6:MYFILE=B:YOURFILE (uses B6) [MEX] D4>>REN ERROR=C9:BLUNDER E (uses C9) % Note that the following REN commands will produce  k to make room, but nothing will be lost, and the file will still be open. To close the file when you're done saving text, exit terminal mode with -E, and use the WRT command. If you change your mind, and decide you don't want to keep the file after all, use the DEL command to erase the file entry and delete any text already saved in memory. The next frame explains what happens when the SAVE or PRINTER buffers fill. % When your printer or ASCII-save buffer fills, MEX will send ann /nal-mode file send). When XON is set to ON, MEX will send all characters to the remote at full speed, but will monitor for an X-OFF character from the remote. When MEX sees the X-OFF, it will pause, allowing the remote to read all of the input MEX nhas transmitted. When MEX sees an X-ON character from the remote, it will resume the file transmission.  CLOCK is a STAT value variable; you may set this variable to any value be- tween 1 and 255. The value is the CPU clock spee delays allow slow remote computers to receive files. The WCHAR and WLINE variables (see corresponding HELP sections) determine the time-delay values for each character, and each lines respectively (of course, you must have answered "Y" to the "want delays?" prompt. If either of the the XLINE or XON switches is ON, the delay prompt will be skipped, and delays will not be used. XLINE is a technique used by some mainframes: after a line is transmitted, MEX will not transmit another until receivierrors: [MEX] A0>>REN B3:SOMETHING=C:ELSE (ambig drives) [MEX] A0>>REN 6:ME=7:YOU (ambig user #'s) Note that ERA will prompt for erasure if the new name already exists. Further, before doing this, it checks for the existance okf the old filename, and, if not found, aborts before checking for the the presence of the new name.  The TYPE command prints files on the console, similarly to the CP/M TYPE command, but with pagination: The syntax is:  X-OFF char- acter to the remote. MEX will then wait for the remote to stop, and will save up to an additional 150 characters into an auxiliary buffer (this buf- fer may be increased in size by modifying MEXPATxx.OVR). When the remote stops (or the auxiliary buffer fills) MEX will write the ASCII-save buffer to disk (if ASCII-save is active) and print characters until the printer buffer is half-full (if List-copy is on). Then MEX will re-start the remote by sending an X-OFF character. Note that *ed in tens of Megahertz (hence, the speed may vary between .1 and 25.5 Mhz). You can then use the CLONE command to make this change permanent. CLOCK is useful for "tweaking" MEX under varying conditions of load when running under multi-tasking operating systems, such as MP/M and TurboDOS. When system load is heavy, you can decrease the CLOCK value, causing MEX to spend less time in its internal timing loops. + % TYPE <'P'> The optional 'P' will affect pagination at screen boundaries: if pagination is OFF ("STAT PAGE OFF") then 'P' will cause the file to be paged. If pagination is ON ("STAT PAGE ON"), then 'P' will inhibit pagination. Examples: A2>>COMMAND: TYPE REPORT.DOC (paged output if PAGE ON) A2>>COMMAND: TYPE REPORT.DOC P (inhibits paging if PAGE ON) =ally be entered on the CP/M invocation command line, and this line may also contain multiple commands. Note that a READ command will "stack" any current multiple commands; when input from the READ file is exhausted, the remaining commands will then be executed (a control-C at any time will abort a running READ file and/or a multiple command line). The multiple command separator in the file as distributed is the semi- colon ";"). This character may be changed with the STAT command ("STAT ESC") or  e drive name, the user number or both (this extends to batch file transmissions). Examples: [MEX] A3>>SB B3:*.ASM A9:*.OBJ C6:UPDATE.DOC [MEX] A0>>DIR A12:*.SUB [MEX] B3>>TYPE 5:REPORT.DOC [MEX] C3>>T B6:SESSION.LOG % LOGGING DRIVES: MEX supports relogging drive/user in two ways, both of which are pertinent to a discussion of DU specifications: - LOG command: Takes optional DU spec (trailing colon optional) resets disk system - At command prompt: simply enter the DU spec ( PREFIX and SUFFIX PREFIX and SUFFIX are used with the SENDOUT command (do "HELP SENDOUT" for more information on the SENDOUT command). PREFIX is used to manipulate a special PREFIX string, and SUFFIX is used to manipulate a SUFFIX string. The PREFIX string is transmitted ahead of any SENDOUT string, when the SENDOUT command is used, and the SUFFIX string is transmitted after. This simplifies the construction of complex, repetitive command lines to be sent to the remote. Either command wxin the patch file. The next frame contains examples of multiple command lines. % Examples: from CP/M: A>MEX DIR;READ MYFILE.MEX;SENDOUT "LOGOUT";BYE This example will bring up MEX, which will first print the directory, then begin executing MYFILE.USE, which may conain SENDOUT commands and R commands to send and receive files. When input from MYFILE.MEX is exhausted, MEX will send the string "LOGOUT" to the remote. Finally, MEX will execute the "BYE" command. from MEX: 7colon required) Examples: [MEX] A0>>LOG (relogs current d/u: resets system) [MEX] A0>>LOG B: (relogs current user, drive b, resets) [MEX] A0>>LOG B7: (relogs drive b, user 7, resets) [MEX] A0>>B: (logs current user, drv B, no reset) [MEX] A0>>A9: &(logs drive A, user 9, no reset).  MEX supports multiple commands on a line, both in READ files, and in dir- ectly typed commands. A command line may option ithout arguments prints the current value of the string. To change the string, enter the string on the command line after the command. Examples: PREFIX "XMODEM S " <<== sets a prefix PREFIX "" <<== sets null prefix string SUFFIX "^M" <<==! set carriage-return as suffix 0 MEX supports the same drive/user specification for files as Rick Conn's ZCPR and ZCPR2: A file may be prefixed by either thh A3>>COMMAND: RB;SENDOUT "BYE";BYE This one receives a batch transmission, sends the string "BYE" (grace- fully logout from a remote CP/M system, for example), then disconnects and exits to CP/M.  STATUS COMjnvUNIFORM EXE xovPUNCR EXED(zv,UNIFORM SYS xv;*UINSTALLCOM xv+QUNIFORM DAT xvVDEL COM|tvARC DOC 4v ) óüT(  äØÅCCã 33Füx .0IÂQ4NúF$t  , Version for Visual 1050 (version 1.0) >5>ͱ͒>ͱ>>2>?ӝv2">ӍӍ>@Ӎ>NӍ>ͱےӒ   Valid baud rates are: 300, 600, 1200, 2400, 4800, 9600, 19200 only! 30"60*1202240:480B960J1920*   w#" ! " 6 #6:2 !  + < v  o  d >  o >[ 5 >͏ x ڊ } 3 CBNE7 !  !  +++ATH  ~#G ATDT  Not Implemented d wn Command ++ $0I=++ Argument error ++ $=0I=++ Syntax Error +++ AI2W2W,R0I =READ parameter error: line #*:XH4V¨" Z7G~#ͶH xʨ~" Z!W~w~#foѷxÚ ȷ*R ͋J"YͷW͋J"YG:T 怰2T ɿAL .BEL*BY6JCOLfCA^CAL^CLLCPSJCLONŇDEU!DIA[DIDSL>EREXISJGLOBA-HELI KEـ"KEYӀ"LOA"LO{PHONPREFI4REAGREΈSAV"#SENDOU\SEG!SLEESSEWSTA$SUFFI=SYSTESJTER>TERM>TYPAWR!OF tR Baud rate is: : >*eW>*gW>*iW>*kW>*mW>*oW> *q2G}2r|2eFOONNO NN hÈʖ<_*wӍ"*2:BJ R$ $ `GGGGGX;> ((ABDEKLQRSTVX7  7 <<MEX HLPINI.MEXSRTELMABDEKLQRSTVXABDEKLQRSTVX0I++0I un-installed ++ ͯ 0I ++ Dialing overlay ͵ ,R2 y7! J~#fo> IIOH0IVIVV4V/PVXJ5 5W<y ʫG ʂQ ʔIc=Y=P{H͹G H{H<ʪW<ʫGùG!]͋JDM xtE!9"\1\mSk*U G)!2Y:6X* "w 1\͋S0I MEX (Modem ExecuONOYEPOK|.PRINg.WAIu.͞VG! ~6H ͒ͪWI5w: ʯ ͞*W >2_X* Z"gX:W2iX!"dX2fX=27X4V'4Vғ:fX4,R#n͟¨͌V͇ͥ͹> J>*J~27X>27X!jX~Vͥ͟!fX~6t0IDialing: :7Xn>b|0I: Try #*dXH H>bo&<)~#foJ0I Connected @2X:O0I :_X: -?:: -?O*dX+|-?0IAny key to enter terminal mode...ͪW-?H t ¯-?0IBUSY Â0INO ANSWER Â0IABORTED ,R0IMODEM ER Itive) V1.14 *4X|-0IClone Level H͞G0I(for aid, type HELP or "?") Copyright (C) 1984, 1985 by NightOwl Software, Inc. }wP!F:Z#ʩ~ ʔx29Z{J:4 >2W2W!p " Z!Ä:W0I [TERM file open] 2W͏G1\!HSP2X ͪW!W~65:W1,R0I=READ aborted 29Z!W:9 /V͈I=!AHͿH>>HHX͂QX.  ʅ: o͏G͖ڒ͖ґ:W:; :X*½͌V:W2W* ZI" Z:W2W4V!y s":W2W͘J.í.͖0I=++ Unkno 7ROR 0INO RING 0INO DIALTONE ͏0I Enter choice or phone number (ret key quits): X͂Q:X^:fX4͌VIVډͪV*dX^P*dX#"dX*gX" Z:iX2WÂ> J0IALDS #: 2X4V:Wʏ͇4V͹!< ~6w0I not found7vV͹J4VD͇|!*:7Xw! !jX{Jͭ:jX#V-V!ͼ$!jX {J͇|-F>27X4V/P427X*bX:8 O͚W ˜͞GxžG:W70I[phone library empty] ~ A!< :W x0I Phone Number Librar3't LOG: ~!*!/AI0I file open ++ TERMREAD:% *XC:& *X44VV#͞GOpU!W~6> pw!XpU: <2YL5! 45ʐ*X !X *X : 0I =** Reply: ** G 4: O<oH͌ }ÂN # 7?q ~4G:( x? :_  2WHC U y=7?͌HI  : G7H> 7ͪW705 5q 0I =+++ SENDOUT aborted +++ 70I =++ SEND failed ++ 7!XpU~# ~}:- * N#!B[pUF{J0Ie c:W̺4V*X#~#foڔ4V?U͌V4V40I Help is available for: ~͞G*X###͖Ҕ0I No help available0I for "~ ##HÇ*X"X>!Js#r!P2Xr͑*XGG!b  {JND *X#0I Help file format error! 7F:o # >2WP*XPP!7>2XX!\"X͡JͿK:X` *XP%H ͪW̹G : Kr¥Ñ:XA.G4VI''͖5%!'>^#V#N#F#͖1%=%44VI% 4mVͲ&^#V#F#N#fig%454'f%/n%/!|%x%!%AION OFFڍ% 4Ͳ&~#foښ%w~H>HH H#I#%͞VG!~xͲ&^#V#F%##o&xSPH͟I:W%*X"X0IBatch filename buffer: :$ !USPH0I names!&"&:XW!XH&*X*) !XH&͞G*&͟I"&0I buffer: Size=N#F#bkePH>G0IUsed: ~#foePH^P>$G0IFree: HCAPKEY͟I H0I -- Misc: --!'I&!'I'!(I'!(I͞G0I -- Switchey x͞G0I| ͟I0I =͟I:W5:< > H~O#+ɯ29X:8 O*bX!+ k sS:9XF+Nwy#xͪIV =?̓V Ž!jX6 #°!jX*bX:8 O >+J 7~͟#~# Hb?# 0I =++ Phone library full ++ 7ɯ!>28X:Wʄ0I=--> Illegal STMT in line *:XH͞GH,R7YVY œ!({JND 0I READ active >2W!T ~w!":X8Z*]X^PZN29Z" Z:W2W>2>X4V?+!>X~4=++ File: *XI0I not found ++ 74! PP: Xw.":Wʞ!0I Delete APPEND file (y/n) ?ͩH͞GYʞ!0INOT deleted ;DErasing: YP2W2W2W2W.":W!0IFile empty; X!;DClosing: :F:W!O"ͳ!YP<7?0I++ TERM file close error ++ 7:W0I=++ No File Open ++ <*X"Xn":WG*X{J"Xͳ!7ͶHF#w"7: 2X4VҔ":Wʺ#̓V2XG͑@·"0IIllegal key name7vV*X|".M*X#pU6x:Xv#ͦ#W#*X#v#͒#N+:Xwi#$U>7:X*XP0I ++ Done ++ 0I=++ Illegal file name ++ 7 7͞GB:W0I[ANY KEY]͹G0I : O:X *X###I* Z++!Y͡J!X~#\!Y[~!YN!Y[~<\w~#~\w~P< YPÂ''!,%>Â''!,% >!y”'͞GÙ'>)G'7͚W«'J „'';%(%(%&BUFFE%BUFFER%TER@SWITCU'CHAe'VAu'BAKFILm)BELO)CAPTURŧ+CHECKSUͩ)CI)CRË)DEBUǙ*DECIMAk+ERRI!*EXCLUDŷ*EXTEN+FILTE]*HEM+INITFIL*L1)LIS{*PRECH+QUEUʼn+RU)SILEN*SODELA+SPLI/+TA,WTECH?*XLIN*XO)CANCE:,ESp,SEU,TRIGGE,ALERr-CLOC0-REPLً,RETR,RTIMQ-PAGŴ-SEARCȓ-WCH!8X454< Op#s#r:8X7 MEX* Z IV{B͌V}#͌VMB ?!>X?_!?X:+ *w z!\"w 2, " 226X\V ::*4X#"4X>26X*XiUͷW®DM!\5<"4X);ͪV0IZZzzz...|H+ ͒ͪW: 2XP2YX!\͡JͿKKL:Y_PX!\͡JͿK:] 4P< 0I Erasing: >K:XVn0I Ok? ͳHYn0I NOT v͞GP0IErased 0I Available commands: !I0I Single char commands: T,E,L,R,S Secondary options: A,B,D,E,K,L,Q,R,S,T,V,X :/2W>2X͘$#*`XG##2W);*$U!D$>2W=2X*`XG>H$:X;<);:X*Xw#N +"X*X}o|g"X:Xͦ#T] *X "X"X͠#͠#G͠#–#É#~#*X457#N+ ë#*X~#0I ~#H>=H#͞G##F##~##>"H^$ H>^H@HHH!$9$\ND !$9$ ::\V!e`$0IUnknown file type7u$ D$~#fo"`XPHNKEY"PHNKEY#!X" Z2W6Dұ$);7ʬ$ ʤ$ w#:W<2W¤$* "W" !W~6$P*W|" !"W: 2X!  0A,WECHϬ,WLIN-RUB: bs-to-rub conversn..LF: T-file linefd apnd...BELL: console bell....... BAK: backup file creationCRC error check mode.....CHECKSUM:error check modeCIS: Compuserve protocol.+ , XON: T-file xon/xoff testXLINE: T-file EOL XON wt.ID: MEX ID in error msgs.. WTECHO: wait-for-echo....( FILTER: contrl char trap.LIST: printer device.....DEBUG: T-modem hex disply2 EXCLUDE (ignore SYS fils)3 INITFILE (startup file)..4 SILENT: READ  >-HH>2C3* #*3: AIH Received # Sending # ͏<7 !]~<͋<33#3>u<0I ++ ERROR sending name ++ xP=l13>2~Y!]͏<>2}Y͏<2}Yґ46IFilename timeout 44ʭ4l1w#}4^42~YyQ<͋<4ʶ4 ʶ4 ʶ4!\G66I++ 2~Y4T42~Y2~Y͙9>< ͶH2W c/: /2 :WDEMLTCS U2W͍/: /0I=Batch-send ready ;1t>2Yb3͞G2 H/>B2 ><æ=:] ʤ:: 2 !}2 "D3+"F3:;$Jx2=͙9r1P;J0>2 ͙9i8͇8:W<ĸ88(0:ͩ10> ><8`0=L0è9);æ=2X> U:2W: ›00I=Batch-receive ready t: ¶02Y)40>B2 æ=:] ʤ:02 HV3G͞G̀G!"D3 :>2X:$JM3: 16IReady to F82 I9 J ++ SEND-FILE CANCELLED ++$: 0I++ xX9H0IH_9*F3#"F3! 4~0INAK0I received not ACK - 0I ++ TIMEOUT - no ACK - F899ʤ9: ͪW1\͏<ҫ9><͏<Ҹ9>B2 2W:WRo60I =++ File Cancelled ++ =: : : : > :>*D3J"D3* #" }\bk #~?ʘ: 6: ):y ʞ::W‘:!9Z:Z‘:: ʑ:P0IFile exists. Erase? (Y/N): ͩHY7͞GÑ:\P 7ͪ:7ͪ:0I++ Null filename ++ KP7?0I++ ERROR: Directory Full ++7#P*}" ! cmd silencer9 EXTEND: READ cmd extender; SPLIT: phonelib split....< HEX: input radix......... DECIMAL: input radix..... QUEUE: T-mode queued I/O.Q CAPTURE: save-in-memory..WWPRECHO: echo modem to lstWSODELAY: SENDOUT time dly_ TAB: console TAB expandera TRIGGER char for SENDOUT. CANCEL char for SENDOUT.. SEP (cmd line separator). ESC (T-mode escape char). REPLY wait-time, SENDOUT.  secWECHO SENDOUT echo-wait..  secRETRY: SENDOUT retry-cnt.  WCHAR: T-trn chr w<4è9*NQ:Q '505i5'5*HK:Q '57?>!WW7:Q >05i5>!W'W*W| 5q5!Y6!XN# 6 A#5~ 5#5~ ʘ5"{Y+#5~ ¨5:Y<2Y#5~ ʺ5è56 *{YZ~ 5# 55> #~ 5"{Y>2 >2Y2}Y͏W6:W>W6>C<: * |…1}ڣ1:L3G*F3}* ?Py!L3>K2 >K2 : ¶1* " ɯ2Yx5*X"Y5!\ Z͡JYN;2:3 1:f1*Y :X;2![~)!#2#~w+F5#2=!ww {J"Yx2\!Y41!Y51*X"Y: R2<>2 0I Multiple errors... :Wʋ20I Aborting 0IType Q to quit, R to retry: ͹G͞GͶHRQI2!\: ªI*D322* 733*D33: : 3!C3~60I "} ; OKP7? H7);$J\P<7?0I ++ Close Error ++ 7*H3: _;!s;_;!W5;* yJ" : 7*XPP;! :X’;2W*X" Ps;>2 yñ;: ;*H3!;;* yJ" !W4~!X7?!WNp*X!\)<*WDM!"W*X!Yx5<" PPY<>J x5<0I ++ DISK full: saving partial file ++ ,;7:5 G*] <Ҡ<͙97ʫ<.· \c/0IGlobals: ! >  ~H#.! >  {J4V7.].}<4|4%"0 0IAlternate D/U: *0 |AH}H>:H\V*[4VڞG:WG͟Ig.ͩH&VͪV&V!B[4Vڣ.͞Vw# Œ.!B[{UJ͍/:WCbͿK2W2W:WR!g0.S!/.>A2 ! 6BT>E.2W>L2W>! ] error : $70I ++ Timeout F8*7=6: :W:W/2W26I++ Trying Checksum mode ++ !>o7!2 "J3>2W͋< 7W͋< 7/ʶ7: =60I ++ Bad sector # in Header :6z2 >2 !"W*J3*H3͋< 7w#z72 :W8Q͋< 7:8: G: @8<¨9͏< 7 8lP7: =60I ++ CRC error :66:6l15R8: Ҩ9: * H0I ++ 2: >w8><: <: /<>2 !"W*H3: ¤8~#<z¤82 *W|<}<>2Y2}Y͏O 5=4: =: +=: 0=: 0=p>0IAwaiting ready signal ͞G͙9͋<ʨ9C!=w=!=r=P=è9: F#: AI6I requested x2WCRCChecksum: =: =͞G!\ͪI0I Transferred !\GaSq5͍/:Y/Û0>K2 ͙9R>: 6J: L>q2W2W: >/2 2 ! ~6Q:W:WF>: F>: >2W͞G-?ͧ>0I [Transfer Completed]  ʑ> ʑ> ʑ> ږ>Җ>HH>(HH>)H0I =Disconnecting... eɯ2 ͘J>>2X! ~6B4:] :W>OE-?!*X"X![xH6# 6 #G6#G PPP#H> H> H* G:XG: 2X* G* G* G=!W HH> H>:W05 ̈HZH!WO DH:a > DH~HZH_HyTH: ZH* G vH sH54 464~vH H~~H!X~ʥH5¥H: w * GK> ͹GͶHH͹Ga{_)!o& H |H{I|H}HH#B C:CH:ēC 5CH4 :¢C:W NC>C:QC: O:WaC YC!:ʀC!:WʀC:WʀC!͋J:ēC{…C5L5̢C5°CL5ͪW¢CBP/D: C͋DCNDC;DCreating: P:;DExtending: >2W#P!!N#F p+q!PG:FDɯ! w! wAI!YͪI0I...+~#<‹DeD6+6#:= xD=~D=ʖD~D/QÁD*0 r+s#/DP7?xD~D:XD:W¸D3:;D:WL^_<2X!w:XD:p;E:W>D2_<2͞G P}0P_.P!~w+ M M*L:\JM=_P@2SM2{M0IDrive , User :[)!H͞Gk free on drive $&N͹G NMMMNM ڈMG~#4MH5ÈMpxH#ÈM#~ڈM+6 MÈM#FʃMMMM H>H͙GÃMG͙GxʈMHNÈM6 ͞GF#6#w#,N~TNͶHGͶHMN#7N#NN7#P2h:WžN>2W!\ Z N:\2,Z! Z\ NPN!,Z\ NP! Z\ NP<7N2W=Ɓo&-Z N] N2h2|~Y {Jկ2W: #:͹C!"W>2W:` 2W:X!9"X"E:WOE?ͿW> \Fh?x?I?Ͷ?͕W*XͫG͹GGQ@?5L5G:2 š?:ʒ?xGI@ @*Xp#"XxH H!X4~Զ?:XG>4G??~# ?>.~?H?͞G!X"X2Ẍ́J!W:WrF>  !W:?:@x:&@x:@&@ rF:Ẅ́J>  &@  :+ \`@:`@!X~6: u@7?67ɸ͑@G7xͦ#?#>  7xͶHGEZ??@)B~rA#~wA##~}A#~A#~6B#~A@*X~0I Keystrings: ͺ#0I Terminal  I0HI0I: AI͞G ,I0ICTL-@HAI>2WAI~ʁI:WWI: }I~=lI lI:. ĈI|I~H }I }I #DI#2W* #F#͟I$HÔI~#HàI~==!AH+~#)!H>:H#I~ >.H~# HI͞G ~# HI##I H I͚WJ<$J$͔IH͞G$>2W: >è90I =++ Exit to system ++ :Y_1!P:W!h*Y G:*\~#{Jq5x4:T]=‘J* Z!\2X>J##" Z:W2WJx2X ~ J#Jx2X4VJ͌VͶH2XɅo$K!KxOybX!:W~E:XB~E7E?0I =[Term: : I0I + "?" for help] 0I ASCII capture :W!|EpE!tEAION :OFF 0I --> No ÞE0I --> 0ITerm-File Active 0IPrinter buffer :WE0ION 0IOFF :Wx:F> E> HF:XͰFyFFF!WWF FO":Q 6F*W|6Fx?!FͭF>2W*Xp#"X!W~<wZF*W#"W:G!W'WOGxHE͠FͰF05\F*WͷW*W}|ҁF͠FͭF:W!WxW>!>q54!?͋JDM5FL5 xF7!?͋JDM'5F> xF7>: # xN0IFile open: * H: 4O0I (H0IH)0I records Send time: !O7P^#V* ?Pi`H0I mins, !O7P~SPͷW{O&H0I secs at :O͞G6ICTL-C cancels  0`@J0(   *Y!yg)ҒP>g>!o†Pr$s%# |P*WO*Y ~W$^"WP\YQQ"X/Q"X2X=PgoDQQ:XyQControl Sequences: : I0I + E: Exit terminal mode ?: Print help msg )BAxjA~^#V+ I#XÀͧ>Z?:!W~/w͞G͵EÖA!W45£Ä́E2WOEɹAAAABBSend BREAK to remoteDisconnect modemToggle printer on/offMemory-save onTransmit fileMemory-save off@NPSTU: !"B! !\G!lG0I File name? (RET quits): X͂Q:XBX!\͡JPB BB!HC~CͪW7`K6# 6 #K6#K4VͪK#&K:5K̓VAHK@͌V:PK͌V:0OxGMKzK.ytK jKzK͢K*ʒK?‰K zKÛK>? ”K͢K›K̓VҫK~., :=ȷ!lZ{J2|2h=!A2SM2{M!]:e K 6?#K2MP!"X: 2YLP y29Z#" Z*:X#":X2W2W:W RR8ZM!9Z~#"Z>9Z2 ZPYPP7:WYP!T ~w2W2W2W!Z8ZNkR"7?:Y/2Y>"ͿRR{7?:W>{RV`OҢRR:`>2WkRR}£R~#2W~#fo"\_I\!\~7͂`#\L Vy W7AG?77.W#W7wɷ.W~N#F#^#V#SW~#FW~FW7+4#MW4###cW~#7+~w#bW5#~#fo#}wW|wW!s#r >2X2X!WW5NHSͪW7̹G7?ͫGĹG2Wɷ|g}o>2Wɯ2WX[MEX]   MEX: a Modem Executive for CP/M-80 Copyright (C) 1984 by Ronald G. Fowler All Rights Reserved 1) Overview: What is MEX? MEX is an acronym (sort of) for Modem EXecutive; its purpose is to build upon the capabilities provided by various terminal emulation and file transfer pro- grams written for CP/M-80. MEX provides, in one program, a phone-number lib- rarian and editor (supporting mnemonnic 12-character names for phone numbers and load/save for phone number files), a p  R?!9Zq#R ~# R 7?,R*Z:9ZOR ! :Y: aS!>   {J2}Y2~Y2W!   {J*"G"G"G"G"Gɯ2A[29Z>28Z!:Z"ŹW::ʬS2X:6XS*X" S:8 !+SPT"bXxS 6 #S*) "XT"X"X6* "X*6 "WT"W:/ 'T:o !SP'T6#"X!$#"X:% T"X6:& T"X6#6 !T"Y* iU" :$ T"Xz2X!" ~+/1]yJ>.͂`7AI?U>02Xi^!\G!D[" Z:A[==2WJ2[:C[2X:B[D]> !`AIaS̀G :L^:L^2X_^¦]!B[~#͞Dš]Ñ]:XBʳ]>͞D:X]3;L^.͂`R>7UL^> U!8`AIaS:;L^2 >2X>.͂`_.L^!B[D)^w#^x2A[^^x2A[^>!A^^);R>7ͫGĩH!O`AIP>͂`Û_>2 >.͂`2 :X<:x^>02X_ʗ^{^G6R8>/͂`{^C{2X!B[_2X>2 _ʸ^w#ì^2 K_^:XO:X^x2A[:X6R8>/͂`{^L^>.͂`{^!A[2X2 "X:owerful autodialer (allowing lists of numbers to be called repeatedly until one answers with a modem tone; the entire list may be repeated any number of times), a file transfer facility supporting three common protocols (and "batch" file transfers), a "dumb- terminal" emulator that includes the ability to dynamically define multiple- line character strings under a single key (and save/load sets of keystrings to and from disk files), a STAT command that allows you to examine and change a wide range of ory for MEX! o& )U:W*X8U*XZUO"*XiU"H3"X" " ZUPUx2X2WiU:# G:X}$.#4VګU>"xV fV"ʫUͯU UYString too long.p/U^_V@4a4@_VRUNUTV/O4UVxGG Ux> > > > 0:?0A[?GJ4V44V:W7* Z~ 7?͌V4V:W7* Z~fVV4fVͶH͌V44V4>=GfV4͌VͶH!W~75* Z~#" ZͪV|}ͱV:  ʼV-VVV͌VIVV4IV͌VV_ySPV$V# ͶHX<: _>02X*XF#>ͬ_:X`ͬ_>2 ~` O_:X~O_G_G_O_>ͬ_~@ͬ_#'_2 >ͬ_{ n_>ͬ_{@ͬ_%_Ž_zv_ s_>ͬ_q_./ʢ_v_*XI?G,9R8 ___ʛ_____z__͂`k`k`_ʛ__`2X`_`zW{_z = Begin CIS Download = Begin CIS Upload = Aborting CIS transfer 5}`L5=C^= 5ʔ`C^È`44 I  operating parameters (especially useful with the CLONE command, which allows you to save a new copy of MEX to disk, including any currently defined phone numbers and keystrings), a batch-command file processor that al- lows the program to take its input from a disk file (allowing unattended use of MEX), and an on-line help facility (employing CP/M's random-access file accessing functions for quick access) that completely documents the program. MEX combines the capability of many public domain utili OAD. The following example assumes you're using the PMMI overlay; if not, just substitute the name of your overlay for MXO-PM10: ASM MXO-PM10 <<--- assemble the overlay MLOAD MEX.COM=MEX10.COM,MXO-PM10 <<--- load a new MEX.COM If you have a Smartmodem (Hayes, USR, etc), you'll want to take advantage of the Smartmodem logical overlay (MEX has no inbound Smartmodem code); this overlay locates at the top of the overlay area (about 500 bytes from 0B00H), and will work with any physical overlay  th MEX to install the overlay relatively painlessly (the use of the dreaded DDT is not required). If you don't have an MDM7 overlay, you'll have to write your own, or, if you're not proficient in assembly language programming, find someone to write one for you. If you have to take this route, use the PMMI overlay distributed with MEX (named MXO-PMxx.ASM, where xx is the revision level) as a model. This file is a full-featured overlay, containing modem dialing drivers and a fully functional SET com d with each succeeding revision of MDM7. These overlays typically implement dialing facilities for unusual modems (actually non-PMMI and non-Smartmodem), and require specific addresses with- in MDM7 in order to function. This was necessary because MDM7 does not pro- vide a redefinable interface for dialing code (in spite of the overlay table entry present for the dialing routine), and worked 'naturally' only with Smartmodems and PMMIs. As a result, the majority of overlays written do not contain a ities, and is a super- set of such programs as MODEM2, MODEM7 and MDM. MEX provides more function- ality than many commerical programs, and is gaining ground on the top-of-the- line modem packages, such as Microstuf's Crosstalk (TM). But enough horn blowing ... let's get on with the Real Neat Stuff. 2) Getting started: the physical modem overlay First, let me note that MEX, as distributed, contains no modem I/O at all; it will run on your computer as is (in fact, you can do an initial evaluati 8that terminates before 0B00H (most do). It provides autodialing capabilities and, optionally, modem disconnect facilities, using Smartmodem command strings. Use the following example as a guide for installing the Smartmodem overlay and your physical overlay simultaneously (the Smartmodem overlay is named MXO-SMxx.ASM -- xx is the revision level -- and M7IN-3.ASM is the name of a typical MDM7 overlay; replace the former with the name of your own overlay): ASM M7IN-3 <<--- assemble phys. overl mand (SET is a user-defined command, used for such things as baud-rate selection, answer/originate modem setup, etc). You can implement as little or as much of the "fancy stuff" as you like. If you re-distribute your overlay, please follow the naming conventions I've estab- lished for MEX overlay files: "MXO-nnxx.ASM", where nn is a 2-letter code identifying the overlay, and xx is the revision level. Once you have an overlay file, assemble it with ASM or MAC, then bind it into the system with ML ny dialing code, and thus will function correctly with MEX (note that MEX allows a fully re-definable dialing vector -- see MXO-PMxx.ASM for details -- and thus may be extended for use with virtually any modem). 3) Some precepts: Filespecs, string arguments, and multiple command-lines Before detailing MEX's command set, there are a few topics we must address that apply generally throughout MEX. MEX supports the same drive/user specification for files as Rick Conn's ZCPR and ZCPR2: A file may be on of MEX in this fashion), but commands dealing with the modem will elicit an error message. To be fully functional, MEX needs modem driver code (writ- ten in 8080 assembly language) installed within itself; this driver code is called the physical modem overlay. If you're a user of Irv Hoff's MDM7 program, you have an easy progression path: MEX uses a compatible overlay format, and thus almost any MDM overlay may be loaded directly into MEX. In fact, you can use the MLOAD program distributed wi ay ASM MXO-SM10 <<--- asm. Smartmodem overlay MLOAD MEX.COM=MEX10.COM,M7IN-3,MXO-SM10 <<--- build new MEX.COM (The order is important in the MLOAD command line due to the structure of most MDM7 overlays). Some notes about the preceeding discussion: The version of MLOAD used MUST be 2.0 or greater; earlier versions didn't have the ability to load a HEX file over a non-HEX file. A very few MDM7 overlays are not compatible; such overlays are typified by the requirement that they be revise  y prefixed by either the drive name, the user number or both (this extends to batch file transmissions). Examples:  .[MEX] A3>>SB B3:*.ASM A9:*.OBJ C6:UPDATE.DOC  [MEX] A0>>DIR A12:*.SUB  [MEX] B3>>TYPE 5:REPORT.DOC  [MEX] C3>>T B6:SESSION.LOG LOGGING DRIVES: MEX supports relogging drive/user in two ways, both of which are pertinent to a discussion of DU specifications: - LOG command: Takes optional DU spec (trailing colon optional)  resets ltiple command line). The multiple command separator in the file as distributed is the semi- colon ";"). This character may be changed with the STAT command ("STAT ESC") or in the patch file. Examples: from CP/M:  2A>MEX DIR;READ MYFILE.MEX;SENDOUT "LOGOUT";BYE  GThis example will bring up MEX, which will first print the directory,  Hthen begin executing MYFILE.USE, which may conain SENDOUT commands and  8R commands to send and receive files. When input from MY SM^MCRCK *.BIN^M" Additionally, the slant character ('/') may be used to denote several common control-character sequences: /R specifies a newline (Carriage return code only; same as ^M) /N specifies carriage-return+linefeed /T specifies a tab // specifies the '/' character /Onnn specifies any binary value (except 0): nnn is the decimal value (all three digits must be present) Note that the command-separator character may be included freely within a string; it separates you _Tation is called an "escape-sequence". Terminal mode escape-sequences: -E % exits back to command level -? + prints a menu of escape sequences -S B start copying incoming text into file buffer (see below) -U B end (un-start) copying text into file buffer (see below) -P C toggle copy-to-printer on/off (if enabled with STAT LIST) -T e transmit a file to the remote (prompts for a filename) Note that -S and -U require a fi _disk system - At command prompt: simply enter the DU spec (colon required) Examples:  [MEX] A0>>LOG %(relogs current d/u: resets system)  =[MEX] A0>>LOG B: (relogs current user, drive b, resets)  7[MEX] A0>>LOG B7: (relogs drive b, user 7, resets)  [MEX] A0>>B: ' (logs current user, drv B, no reset)  [MEX] A0>>A9: S(logs drive A, user 9, no reset). Several MEX command take string arguments. Th  FILE.MEX is  Gexhausted, MEX will send the string "LOGOUT" to the remote. Finally,  7MEX will execute the "BYE" command. from MEX:  %A3>>COMMAND: RB;SENDOUT "BYE";BYE  HThis one receives a batch transmission, sends the string "BYE" (grace-  Hfully logout from a remote CP/M system, for example), then disconnects  and exits to CP/M. n4) Terminal mode MEX terminal mode is entered with any of the single-character commands T, L, or E (the di r command strings outside of quotation marks only. MEX supports multiple commands on a line, both in READ files, and in dir- ectly typed commands. A command line may optionally be entered on the CP/M invocation command line, and this line may also contain multiple commands. Note that a READ command will "stack" any current multiple commands; when input from the READ file is exhausted, the remaining commands will then be executed (a control-C at any time will abort a running READ file and/or a mu lename argument with the T when you enter terminal mode (otherwise, there is no file active to write the incoming text into). You can use -P to copy incoming text to the printer. The text is held in a buffer, and prints only as the printer is ready for a character. Thus, your printer may be slower than the modem, and you won't lose characters un- less the buffer fills up. Terminal-mode files (also called CAPTURE or ASCII-SAVE files) are created by entering a filename with the T (or E or L) ese strings must be sur- rounded by quotatation marks, and may contain imbedded control char- acters (with the singular exception of binary zero, which will generate an argument error). The caret ("^") is used to prefix a control char- acter. Thus, you can specify multi-line strings within one string specification. Examples (note that that the control-character ^M is the carriage-return code, and ^J is a linefeed): KEY A="BILL USER;J^MWHATSNEW^MB:^MWHATSNEW^M" SENDOUT "SD B:*.A fferences among the three will be explained shortly). While in terminal mode, you are communicating with the remote end as a console; your keyboard characters are transmitted to the remote, and the remote char- acters are displayed on your screen. There are several functions that are available to you from terminal mode, all of which are invoked by typing the escape-character (do "STAT ESC" at command level if you don't know your escape character) followed by one of several characters; this combin  command; if the file already exists, you will be asked if the file should be erased. MEX will create the new file, and enter terminal mode. You may also append to an existing file by specifying the "A" secondary option (explained in more detail later). At this point, incoming text is not yet being saved; to start saving text, you must use the -S terminal-mode command. You can stop the save by using the -U command. You can perform as many start/stop sequences as you like (when text-sav corresponding sections) determine the time-delay values for each character, and each lines respectively (of course, you must have answered "Y" to the "want delays?" prompt. If either of the the XLINE or XON switches is ON, the delay prompt will be skipped, and delays will not be used. XLINE is a technique used by some mainframes: after a line is transmitted, MEX will not transmit another until receiving an X-ON character from the remote. XON is more frequently used: when XON is active, MEX wil send ann X-OFF char- acter to the remote. MEX will then wait for the remote to stop, and will save up to an additional 150 characters into an auxiliary buffer (this buf- fer may be increased in size by modifying MEXPATxx.OVR). When the remote stops (or the auxiliary buffer fills) MEX will write the ASCII-save buffer to disk (if ASCII-save is active) and print characters until the printer buffer is half-full (if List-copy is on). Then MEX will re-start the remote by sending an X-OFF character. N acter commands The most commonly used MEX commands are implemented as single character com- mands, for ease of use. These are: S: Send a file or group of files using Christensen protocol R: Receive a file or group of files using Christensen protocol T: Enter terminal mode (may specify an optional ASCII-save file argument) E: Enter terminal mode with echo (also takes optional filename argument) L: Enter terminal mode with local-echo only (filename ok here too). T, E, and L are all variations o e is active, you'll see a colon at the start of each line as a visual signal that the save is active). You can exit terminal mode and move freely among drives and user areas with- out affecting an open term-file. The LOG command (used to change drive/user and reset the disk simultaneously) will not be functional. If you enter terminal mode with the T,E or L command WITH a filename, when a file is already open, the open file will be closed, and the new one opened. You can transfer files using ei l send characters at full speed, but monitor the remote for an X-OFF character. When an X-OFF is received, MEX will pause until the remote sends an X-ON character. The APPEND secondary option: MEX has a special feature that allows you to maintain 'log' files of your sessions; this is the 'A' secondary option (specified with the T, E or L primary commands when entering terminal mode IF a filename is specified). When you specify the 'A' secondary option, MEX will search the logged area (and/or ote that for this scheme to work, the remote computer must respond to this X-ON/X-OFF "protocol" (most computers do, but *not* all!). You can transmit a local disk file to the remote with -T; you will be prompted for a filename. If you have the XON and and XLINE variables turned off (succeeding sections document these) MEX will ask if you want to use the character and line delays for the filesend; these delays allow slow remote computers to receive files. The WCHAR and WLINE variables (see f terminal mode: T sends keyboard characters to the remote and prints characters received from the remote on the console. E mode echoes received characters back to the remote ("half duplex" mode), and L echoes keyboard characters on the console before they go out to the remote ("half duplex" in the other direction). 6) Secondary commands (options) The SECONDARY options are used only after the single-character commands, and modify the way the single-character commands work. Following is a list ther Christensen or CIS protocols while a TERM file is open -- your buffer may be written to disk to make room, but nothing will be lost, and the file will still be open. To close the file when you're done saving text, exit terminal mode with -E, and use the WRT command. If you change your mind, and decide you don't want to keep the file after all, use the DEL command to erase the file entry and delete any text already saved in memory. When your printer or ASCII-save buffer fills, MEX will the ALT area: see the ALT command description in section 7 for more information on searching) for the file specified. If found, MEX will scan to the end of the file, and append new data on to the end, rather than querying for an erase. If 'A' is not specified, MEX will limit its search to the currently logged DU, and, if the file is found, will ask you if it should erase the file. In either case, if the file is NOT found, MEX will create a new file in the currently logged DU. 5) Single-char E & of the secondary command options:  COMMANDS OPT NAME USED WITH ACTION --- -- --- ------ A Append E,L,T . Append to a terminal-mode file B Batch  R and S I BATCH mode, Christensenr file transfers D Disconnect R and S 1 Disconnects after a file transfer L Local  T,E $ Local-character echo Q Quiet  R and S  Sets "quiet mo \  -- We will now look at each command in detail, in roughly alphabetical order. - The ALT command The ALT command specifies the ALTernate drive/user area to be searched by MEX for LOAD files (.PHN and .KEY), READ files, and terminal capture files (when APPEND is on). Syntax is ALT Examples: ALT A0: ALT B3: - The BYE command BYE is used to return to CP/M (does not disconnect) at the end of a MEX session. - The CALL command The CALL c X after [MEX] A0>>T DISKFILE.SAV <<== enter term. mode, allow save to disk file  0(note that the actual copy to the file must be  activated with ESC-S while in terminal mode) [MEX] B3>>TA DISKFILE.SAV <<== Enter tr area. The command 7) Command descriptions Following is a list of the command set recognized by MEX. In general, the bracket characters denote optional it9ems, and should not be entered literally. For example, t  capable of changing the rate AND your overlay must implement the NEWBD vector. Most MEX overlays (overlays whose names start with "MXO-") allow this, if the hardware is capable of baud-rate change; most MDM overlays do NOT. - The CLONE command The CLONE command allows you to save a new copy of MEX, with the current options intact (including any defined keystrings and phone numbers). The syntax is:  OCLONE Examples: CLONE MEX.COM CLONE NEWMEX.COM Clone w 7de" for file transfers R Recv-view R and S @ Shows received-characters only S Send-view R and S C Shows transmitted characters only T Terminal-mode R and S 2 Enter terminal mode after file xfer V View R and S / Views the file transfer in ASCII X Exit R and S Disconnect and exit after transfer Note that the options used with R and S are also effective with CIS transfers (except for the 'B' option), if s ommand is used to dial numbers either from the library or from the keyboard. If you specify more than one number on the command line, CALL will try each until one answers with a carrier tone. For example,  CALL 16165559033 SENACA will dial the first number; if busy (or no answer), CALL will try the second. The special number '#' will cause the entire command line to be repeated if none of the dialed numbers responds with a carrier:  /CAL WESTWOOD 1-616-555-2040 TCBBS # will try ghe syntax descriptor DIR [] means that the du-spec is optional; hence, the command syntax may be satisfied with any of the following actual command lines: DIR DIR A3: DIR 0: Items surrouded in angle-brackets denote an item's type; the angle brackets should not be included in the actual command line, nor should the description inside the angle brackets be entered literally. In the above example, the descriptor is replaced with an actual drive/user specification. ill prompt you for an erase-file operation if the specified file al- ready exists on the disk. - The COLD command The COLD command re-starts MEX and erases any defined keystrings along with the phone library. This is the only way to erase the entire phone library with one command. The COLD command also allows you to remove the CIS protocol module (for those who don't need it) ... do this:  STAT CIS OFF  COLD  %CLONE Note that this re }et with the GLOBAL command (see the command description for "GLOBAL" in section 7). Examples of secondary options: Primary --+ Command |+++-->secondary commands  ||||  |\ / [MEX] A0>>ST MYFILE.FOO <<== send MYFILE.FOO, go into Term. mode after [MEX] B9>>RVT CRACKER.JAK <<== receive file with view, enter Term mode [MEX] A3>>RQX MONKEY.SHN <<== recv file quietly, disconnect/exit after [MEX] A0>>RBT % <<== recv batch files, Terminal mode  all three numbers repeatedly until one answers. You may op- tionally place a limit on the number of retries by including a number after the '#': CAL 555-1212 #48 A ^C will abort dialing at any time. Phone-library numbers may specify an optional baud rate (see the description for the PHONE command for information on how to specify the rate). If a baud-rate is present, CALL will change the baud rate before dialing the number. Note that, for this feature to work, your hardware must be [ moves the CIS module altogether (you can't get it back with the STAT CIS command). This frees up roughly 1K of memory. - The CPM command CPM is a synonym for BYE, and returns control to the operating system without disconnecting. - The DEL command DEL is used to close and erase an open terminal file; use this command when you change your mind about saving a terminal file. - The DIAL command The DIAL command performs the same task as the CALL command, except that after calling, DIA +XIT is a synonym for BYE, and returns control to the operating system without disconnecting. - The HELP command HELP is used to access the on-line manual for MEX (contained in the file HELP.MEX). Syntax for the HELP command is as follows: HELP <<--- prints help for the HELP command HELP ? <<--- lists available topics HELP <<--- prints help information for a topic HELP.MEX must reside in the currently logged drive/user area (unless you use an ALT area, with the SEARCH v Sv in all overlays). - The ERA command ERA erases files, similarly to CP/M's ERA. The syntax is as follows:  ERA [V] The filename may be ambiguous (e.g., *.ASM, BOOT?.BAK). ERA always dis- plays a list of the files that are being erased. If you specify the optional 'V' after the filename, ERA will ask for verification before actually erasing tshe files (after displaying the names). - The GLOBAL command The GLOBAL command allows you to set the secondar H may disable this command altogether; if the "INVALID COMMAND" message appears when you attempt to use the ID command, then this is probably the case. -The KEY command The KEY command is used to manipulate the keystrings that are available in ter8minal mode. There are several forms of the command:  KEY ' <<= prints out all of the keystrings  KEY =[] S<<= defines a new keystring Keyname is any valid ASCII character, except for the =L returns to command mode (CALL goes to terminal mode). The syntax for DIAL is exactly the same as the syntax for CALL (described prevously), including the multiple-number feature and the repeat option. DIAL is intended to be used in READ files, where it is desirable for the READ file to retain control after calling a number (READ files have no effect in terminal mode; thus using CALL in a READ file would pause ex- ecution of the read file when the distant end is reached). - The DIR command ariable). Once the help file is opened, you may move freely among drive and user areas without affecting the op- eration of HELP; MEX remembers where the HELP file is located. Once opened, the HELP file will remain open for the duration of the session, unless a LOG command is executed. - The ID command The ID command allows you to configure the MEX ID string (which is printed in the prompt, and in error messages, if the STAT ERRID switch is set to ON). This is useful if you're communicatin y options (described pre- viously) for the single character commands. Any options set this way will then be active for the single-character commands whether or not they are specified in the actual command line. For example, if you prefer to go direc3tly to terminal mode after a file transfer, do:  IGLOBAL T You can also set the VIEW mode for CIS transfers by doing  eGLOBAL V (note that this is the only way to "view" a CIS file transfer. - The EXIT command E I set defined as the terminal mode escape-sequence commands (see TERMINAL MODE). In the second form, above, if is omitted, then the specified key- string is erased. Examples:  KEY %="ATDT 14145559932" <<= sets up the '%' key  KEY Q= <<= erases the Q keystring Note that KEY names that duplicate terminal-mode commands will be rejected by the KEY command, and an error message will be printed. - The LOAD and SAVE commands LOAD and S  DIR works similarly to the CP/M DIR command, and displays the disk directory on the screen. DIR takes advantage of the DU specification, thus "DIR B7:" will display all of the files in user 7 on drive B. System files will be excluded if the STAT vgariable 'EXCLUDE' is set to ON. If EXCLUDE is OFF, all files will be displayed. More examples:  DIR C3:*.?Q?  DIR LOGIN.MEX  eDIR 3: - The DSC command DSC disconnects the modem from the phone line (may not be implemented g with another computer running MEX; if each computer has a different ID string, you're never in doubt as to which one you're typing commands to, or which one printed an error message. The syntax for the ID command is    ID  (see "STRINGS") The string may be a multi-line string; it's length in the standard distributed MEX may not exceed 28 characters. This length may be different if your system overlay replaces the MEX defaults (in fact, the overlay  wAVE are used to load and save phone number and keystring files. Both commands take a filename argument. Examples:  LOAD A5:CBBSPHON.PHN <<== loads a phone # file  LOAD ARPA.KEY  <<== loads a keystring file  SAVE C:NEWPHONE.NUM  <<== saves phone # file  SAVE 9:COMPUSRV.KEY <<== saves keystring file Note that the filetype determines what type of file is being saved (.PHN for phone number files, .KEY for keystring files) >T command (described later). PREFIX is used to manipulate a special PREFIX string, and SUFFIX is used to manipulate a SUFFIX string. The PREFIX string is transmitted ahead of any SENDOUT string, when the SENDOUT command is used, and the SUFFIX string is transmitted after. This simplifies the construction of complex, repetitive command lines to be sent to the remote. Either command without arguments prints the current value of the string. To change the string, enter the string on the command lin } be used to query the phone number library, as well as for adding and deleting numbers. To add a number, use this form:  PHONE = [baud-rate] Where ID is a string (up to 8 characters) that you want to use to call out the number and is the telephone number. If already exists, it will be replaced. is an optional rate to be associateId with the number, used by the CALL command. To remove a number, do  PHONE = To see the e _____>> optional! The READ file may contain any valid command EXCEPT another READ command. These commands may freely move among drives and user areas; MEX will re- member where the READ file is located. Typically, READ files are created with a text editor, and may contain STAT commands to set MEX for a particular type of connection, DIAL commands to actually make the connection, and SENDOUT commands to log in at the destination. It's possible for an entire session to take place under a READ c . Any other filetype will generate an argment error. - The LOG command The LOG command allows you to reset the drive (for switching disks) and, optionally, simultaneously change drive and/or user area. The command syntax is  LOG where DU-SPEC is either or both of the new drive to log into and the new user area. An optional colon may follow the DU-SPEC. Examples:  LOG B7: # <<= reset, log in drive B user 7  LOG 7: << 2%e after the command. Examples:  PREFIX ""  <<== sets null prefix string  ,PREFIX "XMODEM S " <<== sets a prefix  SUFFIX "^M" <<== set carriage-return as suffix In the second and third examples above, the subsequent SENDOUT would work like this: SENDOUT FOO.BAR which would actually send out "XMODEM S FOO.BAR" . - The READ command The READ 3command causes MEX to take command lines from a dis Jntire library, do  &PHONE To see a single entry, do  PHONE Examples: PHONE FORTFONE=1-414-563-4013 1200 <<--- associates number w/FORTFONE PHONE FORTFONE=1-414-563-4013 <<--- same but doesn't change baudrate PHONE <<--- lists the phone number library PHONE FORTFONE= <<--- removes FORTFONE from library PHONE FORTFONE <<--- prints entry for FORTFONE - The PREFIX and SUFFIX commands PREFIX and SUFFIX are used with the SENDOU vommand. A READ file will terminate when the file ends, or when a CONTROL-C is seen at the console (aborting any command with CONTROL-C will abort the READ file). It's important to note that, while you can use a READ file to enter the terminal mode, the READ file is not used while the terminal mode is active. When you exit terminal mode, the READ file starts again. Normally, READ commands echo on the screen when they execute. You can inhibit this, however, by manipulating the SILENT variable (d P#= reset, log user 7 current drive  LOG B: %<<= reset, log drive B current user  LOG <<= reset, retain current user/drive If either a terminal file or a READ file is open, the disk-reset will be denied and the LOG command will display an error message. If you want to change drive and/or user without a disk reset, you can do so wizthout the LOG command: just enter the DU spec at the MEX command prompt. - The PHONE command The PHONE command may !k file. This can be handy for such things as controlling a set of file transfers (es- pecially when you can't be present for the entire session) and executing complicated login sequences automatically. READ, used with the EXTEND function (see the desc}ription of the EXTEND variable in section 8) provides a means of extending MEX's command set. The syntax for READ is:  )READ [] [] ...  \ \  \ __\ [o STAT SILENT ON to inhibit the command echo). READ parameters are very similar to CPM's SUBMIT parameters; they are called ACTUAL parameters. If they are present in the command line, they will be plugged into the FORMAL parameters in the submit file. This substitution fa- cility provides a powerful tool for generating multiple-purpose command files. Formal parameters occur in the READ file, and take the form {n}, where n is the parameter number; these numbers correspond sequentially with the A H'*' (eg, *RQ FILE.FOO). - The REN command The REN command syntax is similar to the CP/M's REN, except that DU spec- ifications may be employed in either the new OR the old filename (but not in both). In general the syntax is  -REN = Examples:  [MEX] A0>> REN NEWFILE=OLDFILE (uses A0)  3[MEX] C9>> REN B6:REPORT.OLD=REPORT.DOC (uses B6)  :[MEX] B4>> REN 6:MYFILE=B:YOURFILE (uses B6) kSENECA.DQR} ( {2} and {1:SENACA.DQR} are FORMAL parameters). This file can be used in several ways:  READ FILEGET 0will simply transfer SENACA.DQR to your system  >READ FILEGET MEX.UPD will transfer MEX.UPD to your system  CREAD FILEGET *.NEW B will transfer all NEW files in batch mode  READ FILEGET USQ.DOC VT will transfer FILEGET, View it, goto Term mode The following line illustrates how to expand a parameter, using the above file, and is useful onl ,e to the remote). After transmitting the string, MEX will wait for a reply from the remote, up to a pre-set number of seconds; any reply will printed on your screen. Following are settings and variables which affect the SENDOUT command: SUFFIX: \ Described previously PREFIX: / WTECHO: Manipulated by the STAT command, this switch-variable determines whether or not SENDOUT validates its transmission by waiting for characters to be echoed from the remote. If set to ON, then ;CTUAL parameters entered on the command line. The ACTUAL parameters in the command line are substituted for the FORMAL parameters in the READ file when the file is executed. A special form of FORMAL parameter allows a default value to be used if an ACTUAL parameter is not specified on the command line; this form is {n:} where n is the parameter number, and is any arbitrary text to be used as the default. If the default form of the formal parameter is not used, AND no actual parameter ; [MEX] D4>> REN ERROR=C9:BLUNDER K (uses C9) Note that the following REN commands will produce errors:  8[MEX] A0>> REN B3:SOMETHING=C:ELSE (ambig drives)  [MEX] A0>> REN 6:ME=7:YOU (ambig user #'s) Note that ERA will prompt for erasure if the new name already exists. Further, before doing this, it checks for the existance of the old filename, and, if not found, aborts before checking for the the presence of the new name.  - The y if MEX is running on the remote end: READ FILEGET {*.BOO NEWSTUFF.DOC} BX (Transfers all .BOO files and NEWSTUFF.DOC) in batch mode, then disconnects) If you turn the command extender on (STAT EXTEND ON), the READ in the above lines can be omitted, making the READ file look like a built-in command. This affects single-character commands somewhat: the disk is searched before the the command is checked for a single; you can avoid this by prefixing single- character command lines with a E SENDOUT checks each printing character it transmits with the  Ccharacter as echoed by the remote. If a mismatch occurs, SENDOUT  @marks an error, sends a CANCEL character, and awaits a TRIGGER  ?character from the remote. It then begins again, and repeats  @this cycle until either the transmission occurs without error,  8or the error count is exceeded (which aborts SENDOUT).    GIf you use SENDOUT with WTECHO off, you'll also likely want to  is specified in the command line, execution will continue, but the parameter will be blank. Normally, the parameters in the READ command line are terminated by the space between parameters (or the end-of-line); spaces can be imbedded in the ACTUAL parameter by enclosing it in braces. I know this all sounds quite complex, but it's really quite simple, as the following example will show. Assume a file named FILEGET.MEX contains the following lines: SENDOUT XMODEM S{2} {1:SENACA.DQR} R{2} {1: SENDOUT command SENDOUT allows you to send an arbitrary string out to the modem (see STRINGS). This is most useful in READ command files, but can often be useful in normal interactive mode. The syntax for SENDOUT is  SENDOUT Before the specified string is transmitted, a PREFIX string, if any, is transmitted, followed by the string specified to SENDOUT, and terminated by a SUFFIX string (if any; the default suffix string is a return-code, normally terminating the lin s  set TRIGGER to null (STAT TRIGGER ""), to avoid trigger-wait. More factors affecting SENDOUT: RETRY Manipulated by the STAT command, this value-variable specifies  }the error-retry count for SENDOUT before aborting. CANCHR: Manipulated by the STAT command, this string-variable (single  >character) specifies the character to be transmitted to the  remote to cancel the transmitted line after an error. TRIGGER:Manipulated by the STAT command, this string-variable (single Intry in units associated with that value. For example, STAT REPLY 5 8 <== sets 5 seconds as SENDOUT reply time STAT WCHAR 4 0 <== set 40 ms as transmit-character delay tim  during a terminal-mode file send Some variables are read-only, most notably STAT BUFFER (which prints out the save-buffer and printer-buffer statistics). To obtain a list of all of the options that can be viewed or changed with the STAT command, do  STAT ? ad- justing the CLOCK value until the SLEEP argument agrees with the actual measured time). This is especially useful with multi-tasking operating systems, such as MP/M and TurboDOS, where background processing wreaks havoc with the internal MEX timing constants. - The STAT command The STAT command lets you examine certain system variables, and change certain others. In general, the syntax is as follows:  STAT  <<== to examine a variable  STAT < TAT variables This section describes the variables that may be examined or changed with the STAT command. - The ALERT variable ALERT is a STAT value variable; it determines the number of times the console bell will ring when a remote computer is reached with the CALL and DIAL commands. ALERT works only on calls that have taken more than one dialing attempt to reach. ALERT is handy for dialing with the repeat option (see CALL command in section 7 for more information about the repeat op  Acharacter) is the character the SENDOUT command waits for after  Aan error-cancel, before proceeding with the retry. If the other  Aend doesn't echo, set TRIGGER to 0 (and WTECHO to OFF), and MEX  ?will simply send its arguments and not worry about validating  Athe echoed string (this is the technique you should use to send  Smartmodem command strings, for example). - The SET command SET is a command defined entirely by the overlay; if your overlay doesn't  Most of the STAT keywords are documented in section 8. - The TYPE command The TYPE command prints files on the console, similarly to the CP/M TYPE command, but with pagination: The syntax is:  TYPE <'P'> The optional 'P' will affect pagination at screen boundaries: if pagination is OFF ("STAT PAGE OFF") then 'P' will cause the file to be paged. If pagination is ON ("STAT PAGE ON"), then 'P' will inhibit pagination. Examples:  A2>>COMMAND NEW-VALUE> <<== to change a variable The NEW-VALUE will depend on the context of the keyword in question. For example, most of the switch-type variables are either ON or OFF, hence,  STAT BAKFIL  <<== prints out ON or OFF  STAT BAKFIL ON <<== turns on BAKFIL  STAT BAKFIL OFF <<== turns off BAKFIL The value-type variables, on the other hand, will print the number or text associated with that variable. Setting the value requires the e tion): you can enter a number (or group of numbers) to be dialed; with ALERT set non-zero, you'll have an audible signal that a call has been completed. - The BAKFILE variable BAKFILE is a STAT Switch variable: if ON, any command that creates a file when one of the same name already exists will, instead of erasing the old (or prompting for an erasure) rename the old with the same primary name, and a secondary name of "BAK". - The BELL variable BELL enables or disables the console bell  implement the SET command, MEX will print the "invalid command" message when you try to invoke SET. - The SLEEP command SLEEP is used to invoke a delay (handy sometimes in READ files). Syntax is:  SLEEP n where n is the number of seconds to wait (a ^C from the console will abort the SLEEP command, as well as any active READ file). Sleep, used with the STAT CLOCK function, can be used to "tweak" the timing constants in MEX (by timing the actual SLEEP period, and 0: TYPE REPORT.DOC (paged output if PAGE ON)  A2>>COMMAND: TYPE REPORT.DOC P (inhibits paging if PAGE ON) - The SYSTEM command SYSTEM is a synonym for BYE, and returns control to the operating system without disconnecting the modem. - The WRT command WRT is used to close and save an open terminal file. An automatic WRT if performed for you if you use any of the exit commands (BYE, EXIT, CPM, or SYSTEM) while a terminal-mode file is open.  -- - 8) S m |througout MEX (ie, in terminal mode, command mode, and during file transfers). - The BUFFER variable BUFFER is not really a variable; use STAT BUFFER to print out the ASCII capture buffer statistics (size, amount used, amount available). In ad- dition, STAT BUFFER displays the batch-filenames buffer size (which de- termines the largest number of files that my be transferred in one batch file transfer command). - The TRIGGER and CANCEL variables TRIGGER is a STAT CHARacter variable, and [fer module will be removed altogether from the running copy of MEX. If you subsequently use the CLONE command to create a new executable MEX.COM, the additional space formerly used by the CIS module (about 1000 bytes) will be available instead for your buffers. You will not be able to use STAT to turn the CIS switch back on (since there is no longer a CIS module in the system). This feature is intended for those users who do not need the ability to do Compuserve- protocol transfers, and would rath otocol employed only CHECKSUM detection; however, in the past few years, most versions of Christensen exchange programs have been rewritten to accept the CRC technique as well. MEX will adapt to transmitting programs using either type of validation. If MEX is the transmitter, it will switch modes after several failed attempts to transmit a file, thus allowing full compatibility with older modem programs. - The CIS variable CIS is a STAT switch: when ON, then Compuserve protcol file transfers e been received. After the 16th, the ASCII right-side is printed. Therefore, if the remote's output pauses, you'll see only the hex values until the remote sends more output. Also, exiting Terminal mode will display any buffered ASCII. DEBUG is useful whenever it's necessary to know exactly what the remote is sending (for example, if you're connected to a time-share network, and can't transfer files, a DEBUG session can prove illuminating in determining just what is happening). In DEBUG mode,  specifies the character the SENDOUT command will look for before sending out its argument (a single-character prompt from the remote). To disable the trigger-wait function altogether, do STAT TRIGGER "" CANCEL is anoter CHAR variable, and specifies the character the SENDOUT command will send to the remote to cancel the line after an error. - The CHAR variable CHAR is not really a varible, but a command option to STAT that prints a list of all of the CHAR variables. - The CHECKSU 2er not waste space on an unneeded feature. - The CLOCK variable CLOCK is a STAT value variable; you may set this variable to any value be- tween 1 and 255. The value is the CPU clock speed in tens of Megahertz (hence, the speed may vary between .1 and 25.5 Mhz). You can then use the CLONE command to make this change permanent. CLOCK is useful for "tweaking" MEX under varying conditions of load when running under multi-tasking operating systems, such as MP/M and TurboDOS. When system load i  are allowed while in terminal mode. If OFF, Compuserve transfer sequences from the remote end are ignored altogether (although they are printed on the screen as "normal" terminal-mode characters). CIS transfers always take place while in terminal mode; there is no command to send or receive a file using CIS protocol, since the remote Compuserve end must initiate the transfer. Note that if you use the COLD command to restart MEX while the CIS switch is set to OFF, then the Compuserve file trans  the FILTER flag is ignored, allowing all characters to reach the screen. Additionally, the CIS protocol is disabled while DEBUG is ON. - The HEX and DECIMAL variables HEX and DECIMAL are STAT switch variables; they are mutually exclusive (ie, turning one ON turns the other OFF. These variables specify the default input radix of commands that take numeric arguments (e.g., SLEEP, STAT VAL <#>, the '#' spec in CALL commands, etc). If HEX mode is ON, then these numbers are considered Hexade M and CRC variables CRC and CHECKSUM are switch variables; the two are mutually exclusive (that is, turning one on turns the other off) and set the preferred type of error checking in Christensen file transfers. CHECKSUM is a simple sum of the outgoing record; CRC uses a more sophisticated technique employing polynomial arithmetic, and is thus a better method (more errors are detected, thus, there is less chance of an incorrect record being received as if it were valid). The original MODEM2 pr s heavy, you can decrease the CLOCK value, causing MEX to spend less time in its internal timing loops. - The DEBUG variable DEBUG is a STAT switch that affects the Terminal mode in MEX. If DEBUG is ON, then characters received in Terminal mode are displayed in a form similar to CP/M's DDT dump (D) command: hex values on the left side of the screen and the ASCII block (as the output progresses) on the right. You'll note that the ASCII right-side display is "buffered" until 16 characters hav  )cimal; if DECIMAL mode is on (MEX is distributed with DECIMAL ON), then they are considered decimal values. You can force a decimal number, regardless of the HEX or DECIMAL mode, by preceeding the number with a '$' character; similarly, the '#' character implies a decimal number. HEX mode has a side effect: it turns on HEX record count reporting in file transfers. - The ERRID variable ERRID is a STAT switch that enables and disables the printing of the MEX ID string in error messages. cters on the line are erasing your screen, etc. If you're using a video-oriented text editor at the remote, you'll need to be sure FILTER is set to OFF, in order to allow the video-control characters to be accepted by MEX. Note that the CP/M end-of-file mark is specifically excluded from ASCII- capture files regardless of the setting of FILTER (although FILTER ON allows this character to go to the screen). - The INITFILE variable INITFILE is a STAT switch variable. It determines whether o and table, MEX will pass the entire command line on to READ, causing the command to look like a READ command (without READ being present on the command line). For more information, see the description of the READ command in section 7. - The ESC variable ESC is a STAT CHAR variable, and specifies your terminal-mode escape character, used to activate terminal-mode functions (such as capture and printer buffer on/off, etc). The argument is a single character string. Example:   .ere is the number of seconds to wait, between 0 and 255. - The RETRY variable RETRY is a STAT keyword, and specifies the number of times the SENDOUT will attempt to send a string before aborting. Note that if the Wait-For- Echo switch (WTECHO) is off, RETRY will have no effect, since no error can occur. To query the RETRY constant, do: STAT RETRY To set the RETRY constant, do: STAT RETRY where is the number of retries, between 1 and 255. - The RTIME varibl nThe ID string is useful in applications where you're communicating with a remote computer running MEX (if each end has a different ID code, there is no problem confusing error messages), but if you typically use MEX only with RCPM systems or timesharing systems that don't run MEX, you'll likely want to turn off the ERRID switch, and shorten the error messages. - The EXCLUDE variable EXCLUDE is a STAT switch-type variable. It modifies the action of commands that take multiple-filename arguments r not MEX will look for the start-up file INI.MEX when it is first started. INITFILE is intended to be used prior to running CLONE, to prevent the cloned MEX from looking for INI.MEX. For more information about the CLONE command, see its command description in section 7. - The LF variable LF is a switch variable: if ON, it affects terminal-mode file transmission by adding a linefeed after every carriage return. - The LIST variable LIST is a Switch variable, and enables or disable R STAT ESC "^I" changes your escape character to the TAB key. - The FILTER variable FILTER is a STAT switch variable; when ON, then abnormal control characters are ignored when in terminal mode (with the exception of carriage-return, linefeed, backspace and tab). If OFF, then all characters from the remote will be displayed on the screen (and included in the ASCII-capture file, if active). FILTER ON is useful if you're working with a noisy connection, and random garbage chara ?e RTIME is a STAT value variable, and affects Christensen-protocol file transfers. RTIME is the amount of time (in seconds) that MEX will wait for a char- acter from the remote end before declaring a timeout, and initiating a record-retransmission sequence. RTIME is set for one second in the standard distribution MEX; this is more than adequate for RCPM work, and MEX-to-MEX file transfers where each end is running under a single user operating system. But when working with a mainframe-type c j (such as DIR and the batch-transmit SB). If EXCLUDE is ON, then SYS files are skipped over by these commands. If EXCLUDE is OFF, then SYS files are included. Thus, you can exclude SYS files from a batchfile transmission by STATting the EXCLUDE switch ON. These files will also be exclude from DIR listings while EXCLUDE is ON. - The EXTEND variable EXTEND is a STAT switch variable. When turned on, it modifies the way MEX's command decoding works: if a command is not found in MEX's comm s the LIST device. - The PAGE variable PAGE is a STAT switch variable: if on, the TYPE command paginates; TYPE scrolls if PAGE is OFF. - The REPLY variable REPLY is a STAT value variable, and specifies the amount of time (in seconds) that the SENDOUT command will wait, after sending a string, for the remote end to send a reply. Any such reply will be displayed on your terminal screen. To query the REPLY constant, do: STAT REPLY To set the REPLY time, do: STAT REPLY wh -onnection (and sometimes when a remote MEX is running under MP/M), especially when a packet-switched network is part of the connection, character delays can easily exceed one second. In these environments, you'll want to set RTIME to a higher value (16 seconds is recommended; the maximum is 30). - The RUB variable RUB is a STAT switch variable and affects terminal mode: if ON, then the local backspace key is converted to RUB when the character is transmitted to the remote. - The SEARCH varibl use these delays. WCHAR is the delay to use between characters.(0-9, in 10's of milliseconds) WLINE is the delay to use between lines (0-9, in 100's of milliseconds) WCHAR and WLINE delays are often needed for timesharing mainframes and BBS's written in BASIC, to allow the slower remote end to catch the entire file. - The WTECHO variable WTECHO is a STAT switch variable, and determines whether or not keystrings and SENDOUT command lines transmitted to the remote are validated by compCALL command). Normally the phone library is printed two numbers per line, to effect a compact display with as much information as possible. This compact display does not, however, provide enough room to include the number's optional baud-rate. By setting SPLIT to ON, numbers will be printed one per line, and each number's baud rate (if present) will be displayed. - The SILENT variable SILENT is a STAT switch variable, and, when ON, inhibits the echo of command lines in READ files. e transmitted, one line at a time; each succeeding line will not be transmitted until an X-ON character is received from the remote. XLINE is used with some timeshare and network computers, almost never with RCPM and BBS systems. - The XON variable XON is a STAT switch variable that affects the terminal-mode file send (see TERMINAL MODE for a full description of terminal-mode file send). When XON is set to ON, MEX will send all characters to the remote at full speed, but will monitor for e SEARCH is a STAT variable that may take on the values 0, 1, 2 or 3. SEARCH specifies a search path for READ files, phone libraries, keystring files, and (if the append secondary option, 'A' is specified) terminal-mode ASCII capture files. These files normally are taken only from the currently logged DU; by modifying SEARCH, you can change the way MEX finds these files. Two drive/user areas are possible: the currently logged area ("logged" D/U) and the Alternate DU (do HELP ALT for informationar- ison with their echoed characters. When WTECHO is ON, all printing characters transmitted to the remote must echo correctly back from the host; this effectively halves the transmission rate, but provides error correction feedback for the SENDOUT command, allowing it to cancel a line and re-try. If you're sending command strings out to a line that doesn't echo the characters, you'll want to set WTECHO off. Additionally, if you're using the SENDOUT facility, you'll need to remove the trigger 3- The SWITCH variable SWITCH is not really a varible; it requests the STAT command to list out all of the switch-type variable. - The VAL variable VAL in not really a variable; it requests the STAT command to list out all of the value-type variables. - The WCHAR and WLINE variables WCHAR and WLINE are value variables; they specify delay times in simple file transmissions done within terminal mode (with the T command). When you transfer a file, MEX will ask you whether you want to ^an X-OFF character from the remote. When MEX sees the X-OFF, it will pause, allowing the remote to read all of the input MEX has transmitted. When MEX sees an X-ON character from the remote, it will resume the file transmission.  -- 9) About the source code (and other stuff). Some users will note that MEX is distributed without source code; this is not an oversight. MEX occupied a substantial amount of my spare time over the last few months, and I've become very posse on changing the alternate). If SEARCH=0, then only the LOGGED DU is searched. If SEARCH=1, then only the ALT DU is searched. If SEARCH=2, then the LOGGED DU is searched; if the file is not found, then  h the ALT DU is searched. If SEARCH=3, then the ALT DU is searched; if the file is not found, then the  LOGGED DU is searched. - The SWITCH variable SPLIT is a STAT switch variable that affects the screen display of the phone library (done from the PHONE command or the string (you can do this with STAT TRIGGER "" , which effectively removes the trigger character. - The SEP variable SEP is a STAT CHARacter variable, and allows you to change the command-line separator character. The argument is a single character string. Example:  STAT SEP "$" changes your command separator to the "$" character. - The XLINE variable XLINE is a STAT switch that affects terminal-mode file transfers. If XLINE is set to ON, then the file will b a Hssive of the program (especially in light of what's happened with so many other programs appearing in source form on various RCPM's and through user groups -- they tend to get modified to death by people who do not properly consider the effects of their changes). For this reason, I will not be releasing source code for MEX in any form, bey- ond the source for the overlay files.. I do intend to maintain the program as responsibly as is possible for any non-funded project. In addition, a number of eQexplicit as possible, detailing any unusual overlay configurations, STAT variables, and any other conditions you feel are pertinent. Bug reports like "Terminal mode doesn't work right" are totally useless; all I can do is ignore such reports. Feature requests for future releases of MEX are welcomed. 11) Credits I'd like to thank the following individuals for their participation in the development of MEX, which included many suggestions for features, beta- site testing and helpful feedb OMEX, I would like to know about it. You can reach me through the following avenues: Arpanet: send mail to RFOWLER@SIMTEL20.ARPA Compuserve: send mail to Al Jewer (70040,321) RCPM: If you're a sysop, leave me a message on the Dearborn, MI, Sysop RCPM. Otherwise, leave a message on Keith Petersen's RCPM: (313) 759-6569. After June 1, our local RCPM should be back "on-the-air": Fort Fone File Folder, (414) 563-4013. This will be the best way to reach me aftQation with the sole restriction that such distribution must be non-commerical in nature (this is not to imply that charges for such things as diskettes and modest copying and mailing fees are of themselves commercial in nature). Re- sale for profit may be done only with the express written consent of the author, Ronald G. Fowler. The US Copyright Act of 1978 provides for severe penalties for infringement, including actual and punitive damages on a per-occurance basis. The value I attach to MEX is nhancements are planned for later this summer, to culminate in a 2.0 release that will offer significant enhancements (including a simpler overlay structure, a far-more powerful READ command processor, including nested reads and conditional execution, smart-terminal emulation, and the capability of MEX to act as a remote- terminal server, similar to the public domain BYE program). I cannot guar- antee, however, that MEX 2.0 will be distributed without charge (as MEX 1.0 is); if I decide to sell MEX ack (and, in the cases of Bob Plouff and Frank Wancho, code examples from their own communicatons programs): Bob Plouffe Dick Mead Keith Petersen Al Jewer Frank Wancho Sigi Kluger David Sternlight Shawn Everson Dave Kozinn Charlie Strom Eric Stork Special thanks must go here also to Ward Christensen, who wrote the original MODEM program from which all others have descended, Mark Zeiger, who dev- eloped the batch-file transfer protocol extension to Ward's original MODEM2 er June 1. US Mail: My mailing address is Route 1, Box 7, Fort Atkinson, WI; be aware that I am very slothful about answering non- electronic mail (ie, you may never get an answer). Telephone: None. Please do *not* call me at home; this raises hell with my family, and I'm not normally able to re- spond in "real-time" in any case. (This does not ap- ply, of course, to any of my paying customers who may be reading this). If you report a bug, please be as X in circulation of my name as a consultant and contract pro- grammer; this circulation-of-name will be used as a basis for actual damages in any infringement suit. Legitimate commercial interests interested in custom versions of MEX, for distributionn as a for-profit product, should contact the author for rates, royalty information and sample contracts. --W Ronald G. Fowler Fort Atkinsone, WI 53538 May 7, 1984  2.0, you can be assured that it will be one of the cheapest terminal programs available for CP/M and as well supported as any commercial product available. 10) Support MEX has been beta-tested among a small group over the last few months; however, the nature of software development implies the existance of a microscopic fissure through which program bugs will invariably ooze, escaping detection by all but the omnipotent (I am, sadly, not among that group). So if you detect errors or bugs in #protocol, Irv Hoff, whose work with MDM7 provided a foundation for a common overlay format between MEX and MDM7, and the dozens of others who have con- tributed to the development of the many versions of MODEM2, MODEM7 and MDM (from which MEX began with a healthy advance along the learning curve). 11) Distribution and a warning to illicit profit-takers MEX and its documentation are Copyright (C) 1984 by Ronald G. Fowler. A license is extended to users to copy and exchange the program and document  `GGGGGX;> ((ABDEKLQRSTVX7  7 <<MEX HLPINI.MEXSRTELMABDEKLQRSTVXABDEKLQRSTVX0I++0I un-installed ++ ͯ 0I ++ Dialing overlay ͵ ,R2 y7! J~#fo> IIOH0IVIVV4V/PVXJ5 5W<y ʫG ʂQ ʔIc=Y=P{H͹G H{H<ʪW<ʫGùG!]͋JDM xtE!9"\1\mSk*U G)!2Y:6X* "w 1\͋S0I MEX (Modem Execu Itive) V1.14 *4X|-0IClone Level H͞G0I(for aid, type HELP or "?") Copyright (C) 1984, 1985 by NightOwl Software, Inc. }wP!F:Z#ʩ~ ʔx29Z{J:4 >2W2W!p " Z!Ä:W0I [TERM file open] 2W͏G1\!HSP2X ͪW!W~65:W1,R0I=READ aborted 29Z!W:9 /V͈I=!AHͿH>>HHX͂QX.  ʅ: o͏G͖ڒ͖ґ:W:; :X*½͌V:W2W* ZI" Z:W2W4V!y s":W2W͘J.í.͖0I=++ UnknoüT(<  Iã ã ï 0IÂQ4NúF$t0I0I*   w#" ! " 6 #6:2 !  + < v  o  d >  o >[ 5 >͏ x ڊ } 3 CBNE7 !  !  +++ATH  ~#G ATDT  Not Implemented d  wn Command ++ $0I=++ Argument error ++ $=0I=++ Syntax Error +++ AI2W2W,R0I =READ parameter error: line #*:XH4V¨" Z7G~#ͶH xʨ~" Z!W~w~#foѷxÚ ȷ*R ͋J"YͷW͋J"YG:T 怰2T ɿAL .BEL*BY6JCOLfCA^CAL^CLLCPSJCLONŇDEU!DIA[DIDSL>EREXISJGLOBA-HELI KEـ"KEYӀ"LOA"LO{PHONPREFI4REAGREΈSAV"#SENDOU\SEG!SLEESSEWSTA$SUFFI=SYSTESJTER>TERM>TYPAWR!OFe c:W̺4V*X#~#foڔ4V?U͌V4V40I Help is available for: ~͞G*X###͖Ҕ0I No help available0I for "~ ##HÇ*X"X>!Js#r!P2Xr͑*XGG!b  {JND *X#0I Help file format error! 7F:o # >2WP*XPP!7>2XX!\"X͡JͿK:X` *XP%H ͪW̹G : Kr¥Ñ:XA y x͞G0I| ͟I0I =͟I:W5:< > H~O#+ɯ29X:8 O*bX!+ k sS:9XF+Nwy#xͪIV =?̓V Ž!jX6 #°!jX*bX:8 O >+J 7~͟#~# Hb?# 0I =++ Phone library full ++ 7ɯ!>28X:Wʄ0I=--> Illegal STMT in line *:XH͞GH,R7YVY œ!({JND 0I READ active >2W!T ~w!":X8Z*]X^PZN29Z" Z:W2W>2>X4V?+!>X~4=++ File: *XI0I not found ++ 74! PP: Xw.":Wʞ!0I Delete APPEND file (y/n) ?ͩH͞GYʞ!0INOT deleted ;DErasing: YP2W2W2W2W.":W!0IFile empty; X!;DClosing: :F:W!O"ͳ!YP<7?0I++ TERM file close error ++ 7:W0I=++ No File Open ++ <*X"Xn":WG*X{J"Xͳ!7ͶHF#w"7: 2X4VҔ":Wʺ#̓V2XG͑@·"0IIllegal key name7vV*X|".M*X#pU6x:Xv#ͦ#W#*X#v#͒#N+:Xwi#$U> ONOYEPOK|.PRINg.WAIu.͞VG! ~6H ͒ͪWI5w: ʯ ͞*W >2_X* Z"gX:W2iX!"dX2fX=27X4V'4Vғ:fX4,R#n͟¨͌V͇ͥ͹> J>*J~27X>27X!jX~Vͥ͟!fX~6t0IDialing: :7Xn>b|0I: Try #*dXH H>bo&<)~#foJ0I Connected @2X:O0I :_X: -?:: -?O*dX+|-?0IAny key to enter terminal mode...ͪW-?H t ¯-?0IBUSY Â0INO ANSWER Â0IABORTED ,R0IMODEM ER7:X*XP0I ++ Done ++ 0I=++ Illegal file name ++ 7 7͞GB:W0I[ANY KEY]͹G0I : O:X *X###I* Z++!Y͡J!X~#\!Y[~!YN!Y[~<\w~#~\w~P< YPX?_!?X:+ *w z!\"w 2, " 226X\V ::*4X#"4X>26X*XiUͷW®DM!\5<"4X);ͪV0IZZzzz...|H+ ͒ͪW: 2XP2YX!\͡JͿKKL:Y_PX!\͡JͿK:] 4P< 0I Erasing: >K:XVn0I Ok? ͳHYn0I NOT v͞GP0IErased 0I Available commands: !I0I Single char commands: T,E,L,R,S Secondary options: A,B,D,E,K,L,Q,R,S,T,V,X :/2W>2X͘$#*`XG##2W);*$U!D$>2W=2X*`XG>H$:X;<);:X*Xw#N +"X*X}o|g"X:Xͦ#T] *X "X"X͠#͠#G͠#–#É#~#*X457#N+ ë#*X~#0I ~#H>=H#͞G##F##~##>"H^$ H>^H@HHH!$9$\ND !$9$ ::\V!e`$0IUnknown file type7u$ D$~#fo"`XPHNKEY"PHNKEY#!X" Z2W6Dұ$);7ʬ$ ʤ$ w#:W<2W¤$* "W" !W~6$P*W|" !"W: 2X! ROR 0INO RING 0INO DIALTONE ͏0I Enter choice or phone number (ret key quits): X͂Q:X^:fX4͌VIVډͪV*dX^P*dX#"dX*gX" Z:iX2WÂ> J0IALDS #: 2X4V:Wʏ͇4V͹!< ~6w0I not found7vV͹J4VD͇|!*:7Xw! !jX{Jͭ:jX#V-V!ͼ$!jX {J͇|-F>27X4V/P427X*bX:8 O͚W ˜͞GxžG:W70I[phone library empty] ~ A!< :W x0I Phone Number Librar3't LOG: ~!*!/AI0I file open ++ TERMREAD:% *XC:& *X44VV#͞GOpU!W~6> pw!XpU: <2YL5! 45ʐ*X !X *X : 0I =** Reply: ** G 4: O<oH͌ }ÂN # 7?q ~4G:( x? :_  2WHC U y=7?͌HI  : G7H> 7ͪW705 5q 0I =+++ SENDOUT aborted +++ 70I =++ SEND failed ++ 7!XpU~# ~}:- * N#!B[pUF{J0I .G4VI''͖5%!'>^#V#N#F#͖1%=%44VI% 4mVͲ&^#V#F#N#fig%454'f%/n%/!|%x%!%AION OFFڍ% 4Ͳ&~#foښ%w~H>HH H#I#%͞VG!~xͲ&^#V#F%##o&xSPH͟I:W%*X"X0IBatch filename buffer: :$ !USPH0I names!&"&:XW!XH&*X*) !XH&͞G*&͟I"&0I buffer: Size=N#F#bkePH>G0IUsed: ~#foePH^P>$G0IFree: HCAPKEY͟I H0I -- Misc: --!'I&!'I'!(I'!(I͞G0I -- SwitcheͶH2W c/: /2 :WDEMLTCS U2W͍/: /0I=Batch-send ready ;1t>2Yb3͞G2 H/>B2 ><æ=:] ʤ:: 2 !}2 "D3+"F3:;$Jx2=͙9r1P;J0>2 ͙9i8͇8:W<ĸ88(0:ͩ10> ><8`0=L0è9);æ=2X> U:2W: ›00I=Batch-receive ready t: ¶02Y)40>B2 æ=:] ʤ:02 HV3G͞G̀G!"D3 :>2X:$JM3: 16IReady to cmd silencer9 EXTEND: READ cmd extender; SPLIT: phonelib split....< HEX: input radix......... DECIMAL: input radix..... QUEUE: T-mode queued I/O.Q CAPTURE: save-in-memory..WWPRECHO: echo modem to lstWSODELAY: SENDOUT time dly_ TAB: console TAB expandera TRIGGER char for SENDOUT. CANCEL char for SENDOUT.. SEP (cmd line separator). ESC (T-mode escape char). REPLY wait-time, SENDOUT.  secWECHO SENDOUT echo-wait..  secRETRY: SENDOUT retry-cnt.  WCHAR: T-trn chr w<4è9*NQ:Q '505i5'5*HK:Q '57?>!WW7:Q >05i5>!W'W*W| 5q5!Y6!XN# 6 A#5~ 5#5~ ʘ5"{Y+#5~ ¨5:Y<2Y#5~ ʺ5è56 *{YZ~ 5# 55> #~ 5"{Y>2 >2Y2}Y͏W6:W>W6>C<: * |…1}ڣ1:L3G*F3}* ?Py!L3>K2 >K2 : ¶1* " ɯ2Yx5*X"Y5!\ Z͡JYN;2:3 1:f1*Y :X;2![~)!#2#~w+F5#2=!ww {J"Yx2\!Y41!Y51*X"Y: R2<>2 0I Multiple errors... :Wʋ20I Aborting 0IType Q to quit, R to retry: ͹G͞GͶHRQI2!\: ªI*D322* 733*D33: : 3!C3~60I t delay msWLINE: T-trn lin wt delay d msCLOCK: speed of CPU...... RTIME: rcv file wait timr5 ; secALERT bell count...:  SEARCH mode..=  PAGE: lines per screen...  4V.?-.\V!> \c/0IGlobals: ! >  ~H#.! >  {J4V7.].}<4|4%"0 0IAlternate D/U: *0 |AH}H>:H\V*[4VڞG:WG͟Ig.ͩH&VͪV&V!B[4Vڣ.͞Vw# Œ.!B[{UJ͍/:WCbͿK2W2W:WR!g0.S!/.>A2 ! 6BT>E.2W>L2W>! ]  error : $70I ++ Timeout F8*7=6: :W:W/2W26I++ Trying Checksum mode ++ !>o7!2 "J3>2W͋< 7W͋< 7/ʶ7: =60I ++ Bad sector # in Header :6z2 >2 !"W*J3*H3͋< 7w#z72 :W8Q͋< 7:8: G: @8<¨9͏< 7 8lP7: =60I ++ CRC error :66:6l15R8: Ҩ9: * H0I ++ 2: >w8><: <: /<>2 !"W*H3: ¤8~#<z¤82 *W|<}<>2Y2}Y͏-HH>2C3* #*3: AIH Received # Sending # ͏<7 !]~<͋<33#3>u<0I ++ ERROR sending name ++ xP=l13>2~Y!]͏<>2}Y͏<2}Yґ46IFilename timeout 44ʭ4l1w#}4^42~YyQ<͋<4ʶ4 ʶ4 ʶ4!\G66I++ 2~Y4T42~Y2~Y͙9><  F82 I9 J ++ SEND-FILE CANCELLED ++$: 0I++ xX9H0IH_9*F3#"F3! 4~0INAK0I received not ACK - 0I ++ TIMEOUT - no ACK - F899ʤ9: ͪW1\͏<ҫ9><͏<Ҹ9>B2 2W:WRo60I =++ File Cancelled ++ =: : : : > :>*D3J"D3* #" }\bk #~?ʘ: 6: ):y ʞ::W‘:!9Z:Z‘:: ʑ:P0IFile exists. Erase? (Y/N): ͩHY7͞GÑ:\P 7ͪ:7ͪ:0I++ Null filename ++ KP7?0I++ ERROR: Directory Full ++7#P*}" !#B C:CH:ēC 5CH4 :¢C:W NC>C:QC: O:WaC YC!:ʀC!:WʀC:WʀC!͋J:ēC{…C5L5̢C5°CL5ͪW¢CBP/D: C͋DCNDC;DCreating: P:;DExtending: >2W#P!!N#F p+q!PG:FDɯ! w! wAI!YͪI0I...+~#<‹DeD6+6#:= xD=~D=ʖD~D/QÁD*0 r+s#/DP7?xD~D:XD:W¸D3:;D:WL^_<2X!w:XD:p;E:W>D2_<2 Y {Jկ2W: #:͹C!"W>2W:` 2W:X!9"X"E:WOE?ͿW> \Fh?x?I?Ͷ?͕W*XͫG͹GGQ@?5L5G:2 š?:ʒ?xGI@ @*Xp#"XxH H!X4~Զ?:XG>4G??~# ?>.~?H?͞G!X"X2Ẍ́J!W:WrF>  !W:?:@x:&@x:@&@ rF:Ẅ́J>  &@  :+ \`@:`@!X~6: u@7?67ɸ͑@G7xͦ#?#>  7xͶHGEZ??@)B~rA#~wA##~}A#~A#~6B#~A@*X~0I Keystrings: ͺ#0I Terminal  I0HI0I: AI͞G ,I0ICTL-@HAI>2WAI~ʁI:WWI: }I~=lI lI:. ĈI|I~H }I }I #DI#2W* #F#͟I$HÔI~#HàI~==!AH+~#)!H>:H#I~ >.H~# HI͞G ~# HI##I H I͚WJ<$J$͔IH͞G$>2W: >è90I =++ Exit to system ++ :Y_1!P:W!h*Y G:*\~#{Jq5x4:T]=‘J* Z!\2X>J##" Z:W2WJx2X ~ J#Jx2X4VJ͌VͶH2XɅo$K!KxOy "} ; OKP7? H7);$J\P<7?0I ++ Close Error ++ 7*H3: _;!s;_;!W5;* yJ" : 7*XPP;! :X’;2W*X" Ps;>2 yñ;: ;*H3!;;* yJ" !W4~!X7?!WNp*X!\)<*WDM!"W*X!Yx5<" PPY<>J x5<0I ++ DISK full: saving partial file ++ ,;7:5 G*] <Ҡ<͙97ʫ<.· No ÞE0I --> 0ITerm-File Active 0IPrinter buffer :WE0ION 0IOFF :Wx:F> E> HF:XͰFyFFF!WWF FO":Q 6F*W|6Fx?!FͭF>2W*Xp#"X!W~<wZF*W#"W:G!W'WOGxHE͠FͰF05\F*WͷW*W}|ҁF͠FͭF:W!WxW>!>q54!?͋JDM5FL5 xF7!?͋JDM'5F> xF7>:Control Sequences: : I0I + E: Exit terminal mode ?: Print help msg )BAxjA~^#V+ I#XÀͧ>Z?:!W~/w͞G͵EÖA!W45£Ä́E2WOEɹAAAABBSend BREAK to remoteDisconnect modemToggle printer on/offMemory-save onTransmit fileMemory-save off@NPSTU: !"B! !\G!lG0I File name? (RET quits): X͂Q:XBX!\͡JPB BB!HC~CͪW7`K6# 6 #K6#K4VͪK#&K:5K̓VAHK@͌V:PK͌V:0OxGMKzK.ytK jKzK͢K*ʒK?‰K zKÛK>? ”K͢K›K̓VҫK~., :=ȷ!lZ{J2|2h=!A2SM2{M!]:e K 6?#K2MP!"X: 2YLPO 5=4: =: +=: 0=: 0=p>0IAwaiting ready signal ͞G͙9͋<ʨ9C!=w=!=r=P=è9: F#: AI6I requested x2WCRCChecksum: =: =͞G!\ͪI0I Transferred !\GaSq5͍/:Y/Û0>K2 ͙9R>: 6J: L>q2W2W: >/2 2 ! ~6Q:W:WF>: F>: >2W͞G-?ͧ>0I [Transfer Completed]  ʑ> ʑ> ʑ> ږ>Җ>HH>(HH>)H0I =Disconnecting... eɯ2 ͘J>>2X! ~6B4:] :W>OE-?!*X"X![xH6# 6 #G6#G PPP#H> H> H* G:XG: 2X* G* G* G=!W HH> H>:W05 ̈HZH!WO DH:a > DH~HZH_HyTH: ZH* G vH sH54 464~vH H~~H!X~ʥH5¥H: w * GK> ͹GͶHH͹Ga{_)!o& H |H{I|H}HH ͞G P}0P_.P!~w+ M M*L:\JM=_P@2SM2{M0IDrive , User :[)!H͞Gk free on drive $&N͹G NMMMNM ڈMG~#4MH5ÈMpxH#ÈM#~ڈM+6 MÈM#FʃMMMM H>H͙GÃMG͙GxʈMHNÈM6 ͞GF#6#w#,N~TNͶHGͶHMN#7N#NN7#P2h:WžN>2W!\ Z N:\2,Z! Z\ NPN!,Z\ NP! Z\ NP<7N2W=Ɓo&-Z N] N2h2|~Vy W7AG?77.W#W7wɷ.W~N#F#^#V#SW~#FW~FW7+4#MW4###cW~#7+~w#bW5#~#fo#}wW|wW!s#r >2X2X!WW5NHSͪW7̹G7?ͫGĹG2Wɷ|g}o>2Wɯ2WX[MEX]   R?!9Zq#R ~# R 7?,R*Z:9ZOR ! :Y: aS!>   {J2}Y2~Y2W!   {J*"G"G"G"G"Gɯ2A[29Z>28Z!:Z"ŹW::ʬS2X:6XS*X" S:8 !+SPT"bXxS 6 #S*) "XT"X"X6* "X*6 "WT"W:/ 'T:o !SP'T6#"X!$#"X:% T"X6:& T"X6#6 !T"Y* iU" :$ T"Xz2X!" ~+/1]yJ>.͂`7AI?U>02Xi^!\G!D[" Z:A[==2WJ2[:C[2X:B[D]> !`AIaS̀G :L^:L^2X_^¦]!B[~#͞Dš]Ñ]:XBʳ]>͞D:X]3;L^.͂`R>7UL^> U!8`AIaS:;L^2 >2X>.͂`_.L^!B[D)^w#^x2A[^^x2A[^>!A^^);R>7ͫGĩH!O`AIP>͂`Û_>2 >.͂`2 :X<:x^>02X_ʗ^{^G6R8>/͂`{^C{2X!B[_2X>2 _ʸ^w#ì^2 K_^:XO:X^x2A[:X6R8>/͂`{^L^>.͂`{^!A[2X2 "X:# xN0IFile open: * H: 4O0I (H0IH)0I records Send time: !O7P^#V* ?Pi`H0I mins, !O7P~SPͷW{O&H0I secs at :O͞G6ICTL-C cancels  0`@J0(   *Y!yg)ҒP>g>!o†Pr$s%# |P*WO*Y ~W$^"WP\YQQ"X/Q"X2X=PgoDQQ:XyQory for MEX! o& )U:W*X8U*XZUO"*XiU"H3"X" " ZUPUx2X2WiU:# G:X}$.#4VګU>"xV fV"ʫUͯU UYString too long.p/U^_V@4a4@_VRUNUTV/O4UVxGG Ux> > > > 0:?0A[?GJ4V44V:W7* Z~ 7?͌V4V:W7* Z~fVV4fVͶH͌V44V4>=GfV4͌VͶH!W~75* Z~#" ZͪV|}ͱV:  ʼV-VVV͌VIVV4IV͌VV_ySPV$V# ͶH X<: _>02X*XF#>ͬ_:X`ͬ_>2 ~` O_:X~O_G_G_O_>ͬ_~@ͬ_#'_2 >ͬ_{ n_>ͬ_{@ͬ_%_Ž_zv_ s_>ͬ_q_./ʢ_v_*XI?G,9R8 ___ʛ_____z__͂`k`k`_ʛ__`2X`_`zW{_z = Begin CIS Download = Begin CIS Upload = Aborting CIS transfer 5}`L5=C^= 5ʔ`C^È`443Q<Q=!<)!*XDQy)Q"X QQgo\Q] Qy!"#$ɯ2YG:9Z2Z2 ZQO*Z"]XXRQ6SQQ: Z!9 HßQXRQ6SQ"Z> y29Z#" Z*:X#":X2W2W:W RR8ZM!9Z~#"Z>9Z2 ZPYPP7:WYP!T ~w2W2W2W!Z8ZNkR"7?:Y/2Y>"ͿRR{7?:W>{RV`OҢRR:`>2WkRR}£R~#2W~#fo"\_I\!\~7͂`#\L  ʵV MEX 1.14 update documentation 20 July 1985 Ron Fowler NightOwl Software, Inc. -- This is release 1.14 of the MEX Modem EXecutive communications program. This release repairs several bugs reported in version 1.12, and adds support for 1k XMODEM file transfer packets (this modification has also been made to all of the commercial Nversions of MEX-PC and MexPlus, with release numbers of 1.40 and higher). ---X 1.14. In fact, you can make this change permanent by entering the command "GLOBAL K", then using the CLONE command to save your modified MEX 1.14 to disk (be advised, however, that if you do this, you run the risk of not being able to exchange files with versions of XMODEM or MEX that do not have the 1k packet capability, without expressly turning off the GLOBAL K). MEX 1.14, when receiving, is always prepared to receive 1k packets, in any mixture with 128-byte packets. Thus, when you're prepar herently noisy medium can not only destroy any gains realized by using a the larger packet, but can actually increase file transfer time, because retransmission of a large packet takes longer than retransmission of a small packet. So it seems logical that any large-packet protocol must also have the ability to "fall back", in the face of line noise, to the small packets that are so much more efficient in the noisy environment. MEX 1.14 implements this fallback feature; it uses nearly the same al-round up" an outgoing file to 1K, however -- it switches to 128-byte mode when the remaining outstanding byte count is less than 1024. This is permitted by the YMODEM spec- ification). Progress reporting You'll notice that while transferring files in 1k mode, MEX will print "logical" record numbers on the screen (actually the starting and end- ing record numbers of the 1k packet being sent or received). Note that this is the 128-byte record number, and bears to relation to the packet number  --- Why 1k packets? With the current proliferation of 2400 baud modems, it has become obvious that throughput (i.e., efficiency) of file transfers could be higher if more data could be added to the fundamental unit of exchange (i.e., the "packet"). The reason for this is essentially the "stop and wait" nature of the Christensen protocol: send a packet, wait for an acknowledgement, send a packet, wait, etc. When the packet size is relatively small, as it has always been ring MEX 1.14 to receive a file, you need take no special action (in fact, the 'K' option, while accepted, is ignored in a file receive). MEX, when transmitting, will adjust for line noise; after the third (not necessarily consecutive) error has occurred, MEX will calculate the ratio of errors to "virtual" 128-byte packets. If this ratio exceeds 1 error per each six 128-byte "virtual" packets, MEX will switch to 128-byte mode. Note that MEX will NOT switch to 128-byte mode until the next successi gorthm employed by Paul Homchick in his 1k-packet modifications to the public domain XMODEM program (version 10.8 at the time of this writing). Further, the 1K packet option is entirely user-selectable; if you don't want to use large packets, simply continue using MEX as you've always used it; there's no penalty for not using large packets. If you prefer the higher efficiency (and noisy lines are not a problem for you), simply append a "K" to the the "T" command when you're SENDING a file with ME+z, which is part of the packet "envelope", t increments by 1 for each 1k packet, and is of no consequence to the user. -- Bug fixes for version 1.14: 1) Previously, after opening a terminal file with TERM or TERMA, then issuing a CALL command, the caller would be left at command level rather than in terminal mode when the remote station was reached. This nKow works as expected. 2) Transferring a file using either Christensen or dwith Christensen protocol, this "turn-around" time be- comes a significant portion of the total time necessary to transfer a file. If the medium through which the transfer is taking place exhibits its own delay, the problem is compounded (all transfer media -- even hardwired RS232 connections -- have some media delay; this delay is much more pro- nounced in satellite telephone connections and packet-switched networks, such as Arpanet and Compuserve). Conversely, using a large packet size with an inve packet, however. Thus, once a packet has started as a 1k packet, it must finish as a 1k packet (otherwise, certain combinations of noise could cause the transfer to appear correct, but be received incorrectly). If you're using the batch option, MEX will always switch back to 1k packets at the beginning of the next file. Note that MEX 1.14 is fully compatible with the emerging YMODEM specif- ication authored by Chuck Forsberg of Omen Technology, insofar as 1K blocks are conerned (MEX does not "  CIS protocols, with a term file open, would usually garbage the term file. Not any more. 3) Printer-buffering didn't work correctly when the buffer filled. This has been corrected. 4) Long ASCII captures would not be written to disk correctly if the capture buffer was greater than 32K (generally, this only happens in TurboDOS or CPM+ systems, that have large banked TPA's). This has been fixed. -- Files present in t7end-of-file in %͉ Checksum error in %͉ Can't close %͉ Memory full while loading %͉ Format error in file %͉ Writing %, nothing loaded͉ MLOAD syntax: MLOAD [=] [,...] [] (brackets denote optional items) is the optional output filename are input file(s) is a hex load offset within the output file may be an optional non-HEX file to be patched by subsequently named HEX files (specifying The filetype enables this f ØG! ~wx1N1N: R_!~! 4\ͽ 2 <4!͖ * * !:9ͽ \ͽ ѷ£*  " v+" * * " ͽ \ !  <~ !<ͽ ͽ <* * {OzGxr\!ͽ ͽ * #" yրOxGz͇Loaded * ͇ bytes (͇H)͇ to file %: ʚ͇ Over a * ͇ byte binary file͇ Start address: * ͇H Ending address: * ͇H Bias: * ͇H ͇Saved image size:#his library: MEX114.COM - The newly released Modem EXecutive -READ114.ME - This information file MEXOVL06.LQT - A list of all known MEX overlays (and a little hype for our commercial versions). (Note that the help file has not been re-issued with this revision). -- vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvzvvvvvvvvvvvvwunction). Note that ZCPR2-style drive/user notation may be used in all file specifications (e.g., "B3:MYFILE.COM, "A14:MDM7.HEX"). ͍v>2 " " * }o|g"   !]<: ! } w#͋ 2  % x _ } 6# 6 # 6# ͨ # ͨ #( :~U AC @#~#:+xG~0G#~:K #{ ~.#yu  k { ͨ #*ʗ ?‹ U  { à >? ™ ͨ #à ~/., :=ȷ/  " 2 = go : *  y " j * )͇ bytes (͇H, - ͇ records) * }G|͇ ++ Warning: program origin NOT at 100H ++ \ͽ <(͍~#%ʜ/Í:\©͋ <@/:[} o&>:/!]>./Í~ #/#  |{0/> /> /|}'Ɛ'@'_ͽ ~#=#~ FUX0:fAG?͇ Command line syntax error Ï͉ Ambiguous file name: % not allowed.͉ File % not found.͉ Disk full.͉ Directory full.͉ Premature  COM!9" 1I ͇MLOAD ver. 2.4 Copyright (C) 1983, 1984, 1985 by NightOwl Software, Inc. ͏ s͋zdͿͽ : ! * !  &<* !~#ʏG<6#" *}O| G6# x¿* +Fʏ#~ FUi~#Ui" ))))_* \ =A: i: i<2 –#![  < ,K6L#" x–2 ] 7ͽ <!e~ ½6H#6E#6X`^ ! ~4! ~d* 1:˜2 W _° g o: ̖ +: : " *  " :9 * " *   w#7   go\ ] y!"#$a{ e!z #v i HEX ͽ ͽ I I   'A P1 (_ 0  2 P3$pP  &   ;#==6 ; MXH-VI10.ASM -- Visual 1050 overlay for MexPlus ;#== ; REV EQU 10 ; Version 1.0 ; From MXO-VI10-ASM 2/18/86 Michael Conley ; From M7VI-2.ASM 12/02/85 Wilson Bent [WHB] ; Last update 03/10/85 Jim Offenbecher ; Last update 03/01/84 Steve Sanders ; ; Use the "SET" command to change> the baudrate when desired. It starts ; out at 1200 baud whe0 ;test for modem-send ready RCVRDY EQU 250 3 ;test for modem-receive ready SNDCHR EQU 249 C ;send a character to the modem (after sndrdy) RCVCHR EQU 248 < ;recv a char from modem (after rcvrdy) LOOKUP EQU 247 A ;table search: see CMDTBL comments for info PARSFN EQU 246 7 ;parse filename from input stream BDPARS EQU 245 8 ;parse baud-rate from input stream SBLANK EQU 244  ;scan input stream to nex I ;linefeed ; YES: EQU 0FFH NO:  EQU 0 ; ; PORT: EQU 8CH * ;Visual 1050 serial output port MODCTL1: EQU PORT+1 ;Modem control port MODDATP: EQU PORT ;Modem data port MODCTL2: EQU PORT+1 ;Modem control port MODRCVB: EQU 02H ( ;Your bit to test for receive MODRCVR: EQU 02H ) ;Your value when receive ready MODSNDB: EQU 01H .;0=110 1=300 2=450 3=600 4=710 5=1200 107H  .;6=2400 7=4800 8=9600 9=19200 default BYTDLY: ? DB 1 ;0=0 delay 1=10ms 5=50 ms - 9=90 ms 108H  );default time to send character in ter-  /;minal mode file transfer for slow BBS. CRDLY: >DB 1 ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H  );default time for extra wait after CRLF   n the program is first called up. See comments at ; the label INITMOD1: to change this to 300 baud default start-up if desired. ; ; = = = = = = = = = = = = = = = = = = ; ; Revisions/changes: ; ; 02/18/86 - Modifie%d for MexPlus use - Michael Conley ; `MexPlus changes are marked with ## ; ; 12/02/85 - Modified from M7VI-2.ASM (for MDM740.COM) ; > - Wilson Bent ; ; 11/06/85 - Use BDOS calls for interrupt- $ t non-blank EVALA EQU 243 9 ;evaluate numeric from input stream LKAHED EQU 242 ; ;get nxt char w/o removing from input GNC EQU 241 8 ;get char from input, cy=1 if none ILP EQU 240 # ;inline print DECOUT EQU 239 % ;decimal output PRBAUD EQU 238 ' ;print baud rate ; PRINT EQU 9 * ;MEX/BDOS print-string function call ;  ORG 100H ;  DB 0C3H ; ##+ ;Your bit to test for send MODSNDR: EQU 01H X ;Your value when send ready ; ; MEX service processor stuff ; MEX EQU 0D00H 7 ;address of the service processor INMDM EQU 255 D ;get char from port to A, CY=no more in 100 ms TIMER EQU 254 * ;delay 100ms * reg B TMDINP EQU 253 < ;B=# secs to wait for char, cy=no char CHEKCC EQU 252 7 ;check for ^C from KBD, Z=present SNDRDY EQU 251  );in terminal mode file transfer NOOFCOL: ,DB 5 ;number of DIR columns shown C10AH SETUPTST: DB YES ;yes=user-added Setup routine > 10BH SCRNTEST: DB YES ;Cursor control routine  10CH ACKNAK: ? DB YES ;yes=resend a record after any non-ACK 10DH  {;no=resend a record after a valid NAK BAKUPBYTE: DB YES ;yes=change any file same name to .BAK 10EH CRCDFL  - Charlie Fenton ; %driven modem I/O to eliminate need ; afor nulls after CR in term mode. ; ; 03/10/85 - Combined m7kp-2 and m7sy-3 for visual 1050 - ; d - Jim Offenbecher ; ; = = = = = = = = = = = = = = = = = ; BELL: EQU 07H ;bell CR: EQU 0DH  ;carriage return ESC: EQU 1BH ;escape LF:  EQU 0AH i JMP INSTRUCTION MexPlus  kDS 2 ;(for "JMP START" instruction) ; PMMIMODEM: DB NO ;yes=PMMI S-100 Modem 103H SMARTMODEM: DB YES ;yes=HAYES Smartmodem, no=non-PMMI 104H TOUCHPULSE: DB 'T' ;T=touch, P=pulse (Smartmodem-only) 105H CLOCK: >DB 40 ;clock speed in MHz x10, 25.5 MHz max. 106H  /;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc. MSPEED:  DB 5 AT: ,DB YES ;yes=default to CRC checking 10FH TOGGLECRC: DB YES ;yes=allow toggling of CRC to Checksum 110H CONVBKSP: DB NO ;yes=convert backspace to rub [ 111H TOGGLEBK: DB YES ;yes=allow toggling of bksp to rub 112H ADDLF: >DB NO ;no=no LF after CR to send file in 113H  `;terminal mode (added by remote echo) TOGGLELF: DB YES ;yes=allow toggling of LFH  (DS 7 IN$MODDATP: JMP BDOS3  ;in modem data port  13EH  *DS 7 ANI$MODRCVB: RET ! NOP ! NOP D ;BDOS7 tests receive ready 148H CPI$MODRCVR: JMP BDOS7 F ;instead of IN,ANI,CPI sequence 14BH ANI$MODSNDB: RET ! NOP ! NOP D ;BDOS8 tests send ready instead 14EH CPI$MODSNDR: JMP BDOS8 h ;of IN, ANI, CPI sequence. 151H ; ; ## the following are two new MexPlus added vectors. DCDTEST 0 ;for future expansion  11EH EXTRA2: & DB 0 ;for future expansion  11FH BRKCHR: 0 DB '@'-40H ;^@ = Send a 300 ms. break tone \ 120H NOCXNNCT: DB 'N'-40H ;^N = Disconnect from the phone line 121H LOGCHR: 0 DB 'L'-40H ;^L = Send logon ** NOT USED **  122H LSTCHR: % DB 'P'-40H ;^P = Toggle printer 123H UNSAVE: 4 DB 'R'-40H ;^R = Close input text buffer XW ;  177H  DS 3  ;(Not used by MEX) $17AH JMP$SYSVER: JMP SYSVER ; & 17DH JMP$BREAK: JMP SENDBRK  ; P 180H ; ; Do not change the following six lines. ; JMP$ILPRT: DS 3  ; 183H JMP$INBUF DS 3  ; # 186H JMP$INLNCOMP: DS 3 {U after CR 114H TRANLOGON: DB YES ;yes=allow transmission of logon 115H  0;write logon sequence at location LOGON SAVCCP: * DB YES ;yes=do not overwrite CCP U 116H LOCONEXTCHR: DB NO ;yes=local command if EXTCHR precedes 117H  ~;no=external command if EXTCHR precedes TOGGLELOC: DB YES ;yes=allow toggling of LOCONEXTCHR 118H LSTTST:  DB YES ; ; returns a 0 for no carrier, 0FFH for carrier, and 0FEH if unknown ; while RNGDET returns similar results for ring-detect ; DCDTEST: JMP DCDVEC ; ## data carrier  154H RNGDET:  JMP RNGVEC ; ## ring detect 157H ;  DB 0,50 ; reserved space / assume 0 15AH SMDISC: DS 3 - ; SmartModem disc / not here 15FH DIALV: DS 3  ; Dial vector / not here E 124H TRANCHR: -DB 'T'-40H ;^T = Transmit file to remote  125H SAVECHR: ,DB 'Y'-40H ;^Y = Open input text buffer 126H EXTCHR: * DB '^'-40H ;^^ = Send next character 127H ;  DS 2  ;  128H ; IN$MODCTL1: RET ' ;Control port input not used. 12AH  +DS 9 ; OUT$MODDATP: JMP BDOS4  ;out modem data port 134 ~S ; 189H JMP$INMODEM DS 3  ; 18CH JMP$NXTSCRN: DS 3  ; 18FH JMP$TIMER: DS 3  ; o 192H ; ; Clear sequences -- CLREOS is clear to end of screen, CLRSCRN is clear ; entire screen. ; CLREOS:  LXI D,EOSMSG ;  195H  MVI C,PRINT  CALL5yes=printer available on printer port 119H XOFFTST: >DB YES ;yes=chcks for XOFF from remote while 11AH  *;sending a file in terminal mode XONWAIT: 0DB NO ;yes=wait for XON after CR while 11BH  *;sending a file in terminal mode TOGXOFF: DB YES ;yes=allow toggling of XOFF checking 11CH IGNORCTL: DB YES ;yes=CTL-chars above ^M not displayed 11DH EXTRA1:  DB ' 162H DISCV: JMP DISCON ; Hardware disconnect & 165H JMP$GOODBYE: JMP GOODBYE ; Reset port %168H JMP$INITMOD: JMP INITMOD F ; go to user written routine 16BH JMP$NEWBAUD: JMP NEWBAUD  ; Change baudrate  16EH  >RET ! NOP ! NOP ; (by-passes PMMI routine) 171H  ^RET ! NOP ! NOP ; (by-passes PMMI routine) 174H JMP$SETUPR: JMP SETUPR  ]a MEX  RET  ; CLRSCRN: LXI D,CLSMSG ;  19EH  MVI C,PRINT  CALL MEX  RET ? ; ; end of fixed area - from here to 1FFFh is reserved ;  ORG 200H -; ## new boundary for MexPlus 200H SYSVER:  MVI C,ILP  ;   CALL MEX  DB 'Version fo~ BIOS call.  CALL 5  SHLD RSPAR ;Save the returned address ;  MVI A,087H ;INSURE OUT OF MODE  OUT MODCTL1  ;MODEM STATUS PORT  OUT MODCTL1  ;SLIGHT EXTRA DELAY  MVI A,40H  ;INITIALIZE USART  OUT MODCTL1 - ;MODEM STATUS PORT ; INITMOD1: MVI A,4EH ) ;DEFAULT TO DIVIDE BY 16 FOR 1200 BAUD  1;CHANGE TO 4FH TO DIVIDE BY 64 FOR 300 BAUD  ?5 know' result so program ignores. DCDVEC: RNGVEC:  MVI A,0FEH  RET ;..... ; ;(Taken from...) ; Sanyo initialization -- sets the 8251A for 8 bits, 1 stop pulse, ; DTR high, requires jumper to be set internally to 1200 baud then ; divides by 64 for 300, or by 16 for 1200 baud via "SET" command. Set ; at pre5sent to default to 1200 baud. ; INITMOD: MVI A,5  ;TRANSFER TIME FOR 1200 BAUD  STA MSPEED  MVI A,3FH  ;GET BYTE TO ENA^ MVI C,ILP  CALL MEX  ;Tell user input not valid  &DB CR,LF,'Valid baud rates are: '  7DB '300, 600, 1200, 2400, 4800, 9600, 19200 only!'  DB CR,LF,0  &RET ; CMDTBL: DB '30','0'+80H  DW OK300  DB '60','0'+80H  DW OK600  DB '120','0'+80H  DW OK1200  DB '240','0'+80H  DW OK2400  DB '480','0'+80H  DW OK4800  kr Visual 1050 (version '  DB REV/10+'0'  DB '.'  DB REV MOD 10+'0'  DB ')'  DB CR,LF,0  RET ;..... ; ; This routine allows a 300 ms. break tone to be sent to reset some ; time-share computers. ; SENDBRK: MVI A,1FH  ;SEND BREAK TONE  JMP GOODBYE1 ;... ; ; This routine sends a 300 ms. break tone and sets DTR low for the same ; length of time to disconnect sd OUT MODCTL1 ! ;MODEM STATUS PORT (MODE WORD)  MVI A,17H  ;DTR, RCV, XMT, ERROR RESET  CALL SETMCTL I ;MODEM STATUS PORT ; now set the baud rate with 2 bits from the table  IN 92H  ;GET WHAT WAS THERE  ANI 0F3H 0;CLEAR OUT THE OLD BAUD RATES INITMOD3: ORI 0  ;SET NEW DEFAULT TO 1200  OUT 92H  ;NEW BAUD RATE NOW SET  /RET ; BIOSPB: DB 30,3 ;..... ; ; Sets@BLE INTERRUPTS  OUT 9DH ;ENABLE THEM... ; ; The Visual 1050 provides a special function which returns the ; address of the byte where the BIOS keeps the current value of ; the modem control register. We must modify this byte whenever ; we change the value of this registerX, or the BIOS will clobber ; it whenever it gets an interrupt from the modem port. ;  LXI D,BIOSPB !;Parameter block for BIOS call.  MVI C,50 ;BDOS function for direct DB '960','0'+80H  DW OK9600  DB '1920','0'+80H  DW OK19200  #DB 0 ; TELL: MVI C,ILP  CALL MEX  ;Print current baud rate  DB CR,LF,'Baud rate is: ',0  LDA MSPEED  MVI C,PRBAUD  CALL MEX  RET ; OK300: MVI A,1  LHLD BD300  &JMP LOADBD ; OK600: MVI A,3  LHLD BD600  &JMP LOADBD ; OK1200: MVI A,5  L 2ome modems such as the Bell 212A, etc. ; DISCON: 4 ;use same routine as goodbye GOODBYE: MVI A,15H 6 ;SEND BREAK, TURN OFF DTR ; GOODBYE1: CALL SETMCTL  ;SEND TO STATUS PORT  MVI B,3  ;WAIT 300 MS.  CALL JMP$TIMER  MVI A,07H ;NORMAL SEND/RECEIVE WITH DTR  CALL SETMCTL  ;SEND TO STATUS PORT  ZRET ; ## Mexplus carrier and ring detect service calls -- for both we ; return 'we don'tc the modem speed via the SET command. ; - Major MEX Mods here [WHB] ; SETUPR: MVI C,SBLANK ;Any arguments?  CALL MEX  JC TELL ;If not, go display baud  LXI D,CMDTBL  MVI C,LOOKUP  CALL MEX  ;Parse argument  PUSH H + ;Save any parsed argument addrs on stack  RNC ;If we have one, return to it  POP H ( ;Oops, input not found in table H HLD BD1200  &JMP LOADBD ; OK2400: MVI A,6  LHLD BD2400  &JMP LOADBD ; OK4800: MVI A,7  LHLD BD4800  &JMP LOADBD ; OK9600: MVI A,8  LHLD BD9600  &JMP LOADBD ; OK19200: MVI A,9  ZLHLD BD19200 ; LOADBD: STA INITMOD+1 ;CHANGE TIME-TO-SEND TO MATCH BAUDRATE  MOV A,L  ;GET BAUDRATE BYTE  7STA INITMOD3+1 ;SEND TO 'CTC' FOR NEW BAUDRATE  MOV A, 1050 BIOS keeps the current value of the modem control ; register in a special byte. We must modify this byte whenever ; we change the value of this register, or the BIOS will clobber ; it whenever it gets an interrupt from the modem port. SETMCTL: PUSH H  ' LHLD RSPAR ;Address of BIOS byte  ' MOV M,A ;Save new value there  3 OUT MODCTL1 ;Output to modem control register  POP H  C RET ; RSPAR: DS 2 ;Address of BIOS copy of modem con0store the registers  POP D  POP B  1ORA A ;BDOS returns A=0 if NOT ready.  2JZ CLRZ ;Return Z flag OFF if not ready.  'XRA A ;Set Z flag if ready.  ?RET CLRZ: INR A ;Clear Z flag (make A non-zero).  kRET ; ; Input a character from modem via BIOS ring buffer. BDOS3: PUSH B ;Save the registers  PUSH D  PUSH H  'MVI C,3 ;BDOS function number  CALL 5 hH  STA INITMOD1+1  JMP INITMOD ;REINITIALIZE TO NEW BAUDRATE, THEN DONE ; ; TABLE OF BAUDRATE PARAMETERS ; BD300: DW 04F00H BD600: DW 04F04H BD1200: DW 04E00H BD2400: DW 04E04H BD4800: DW 04F08H BD9600: DW 04E0CH BD19200: DW 04E08H ; BAUDBUF: DB 10,0  DS 10 ; ; The following routines replace direct modem port I/O with BDOS calls. ; The Visual 1050 BIOS uses interrupt-driven I/O with ring buffers. ; This solvstrol register ; ; Newbaud - most popular only for now ; Not in M7VI-2.ASM - Why? [WHB] ; NEWBAUD: CPI 1  JZ OK300  cpi 3  jz OK600  CPI 5  JZ OK1200  CPI 6  JZ OK2400  cpi 7  jz OK4800  CPI 8  JZ OK9600  cpi 9  jz OK19200  jRET ; ; Visual 1050 Clear Sequences: to End Of Screen and Entire Screen ; EOSMSG: DB 1Bh,5Bh,4Ah,/ POP H ;Restore the registers  POP D  POP B  RET  ;Input character is in A ; ; Ouput a character to modem via BIOS ring buffer. BDOS4: PUSH B ;Save the registers  PUSH D  PUSH H  'MVI C,4 ;BDOS function number  3MOV E,A ;Character to output must be in E  CALL 5  (POP H ;Restore the registers  POP D  POP B  RET ; ; The Visual es the problem of losing modem input while the console ; display does a carriage return. ; ; Check for input character (receive ready). BDOS7: PUSH B ;Save the registers  'MVI C,7 ;BDOS function number  JMP BDOS78 ;Common routine for BDOS 7 & 8. ; ; Check for output character (send ready). BDOS8: PUSH B ;Save the registers  :MVI C,8 ;BDOS function number BDOS78: PUSH D  PUSH H  CALL 5  POP H ;Re0'$' Z CLSMSG: DB 0Ch,'$' ; ; NOTE: MUST TERMINATE PRIOR TO 0B00H (with Smartmodem) ; 0D00H (without Smartmodem) ;  END "  < V TITLE 'MEX SMARTMODEM OVERLAY V1.5' ; ; (DELETE ABOVE TITLE LINE IF ASSEMBLING WITH ASM) ; ; Smartmodem overlay for MEX: revision 1.5 ; Written 04/16/84 by Ronald G. Fowler (V1.0) ; ; 02/20/85: Converted for MEX 1.2 - Al Jewer ; Also added 'space bar return busy' function. ; ; 07/16/84: Added equate NUMRES to enable/disable numeric result code ; interpretation. Under TurboDos, the first digit of the ; phone number was being interpreted as a result code as it ; was echoed by` ; YES EQU 0FFH ;THIS IS FOR 8086 TRANSLATOR - DO NOT CHANGE NO EQU 0 I8080 EQU YES ;DEFINE PROCESSOR TYPE I8086 EQU NO MEX2 EQU NO ;SET TRUE IF MEX 2.X, FALSE IF MEX 1.X TPULSV EQU 0105H ;TONE/PULSE FLAG IN MODEM OVERLAY NDISCV EQU 015FH ;NEW SMART MODEM DISCONNECT HERE DIALV EQU 0162H ;LOCATION OF DIAL VECTOR IN OVERLAY DISCV EQU 0165H ;LOCATION OF HARDWARE DISCONNECT VECTOR DIALOC EQU 0B00H ;DIALING CODE GOES HERE MEXLOC EQU 0D00H ;"CALL MEX" HERE SMTABL EQU 0D55H ;SMARTMODEM INIT, k; for non-standard modems (e.g., the Racal-Vadic). The only ; pertinent entry point is the DIAL routine; you'll find entry ; specs for that below. ; ; The only conditional you might want to change in this ; module is the DISC equate below -- if left on, MEX will ; use the Smartmodem's disconnect code. If you prefer to ; provide your own in your overlay's DISCV vector (e.g., ; by dropping DTR), then set DISC to FALSE and re-assemble. ; (If you don't understand this, then play it safe, and ; leavekhe first byte of the overlay MUST contain a "jump" opcode. ; The is a 0C3H for 8080 and an 0E9H for 8086. MEX 1.2 checks this byte ; before it loads the overlay, to make sure you don't load the wrong ; type of overlay. This byte will not affect pre- 1.2 versions. ; ; Also, MEX 1.2 contains a new vector at 15FH which is the smart-modem ; disconnect vector (now separate from the hardware vector at 165H). ; The hardware vector typically toggles the DTR line to cause a hangup, ; while the smart-modem  Q the Anchor modem as it dialed. Set NUMRES false ; to disable numeric results. (Bob Puckett) ; ; 06/06/84: Fixed problem for Anchor users, where, when the modem returned ; "DIAL TONE", the "N" in "TONE" was being regarded as a NO-CONNECT ; code. Now we flush the entire result line before reading another. ; Also added code for numeric version of "CONNECT 1200". --RGF ; ; Small bug repaired: (V1.1) 05/14/84 (Steve Grandi): Smartmodem was not being ; flushed after a dial string so N DE-INIT AND SSET VECTORS ; ; ; FOLLOWING ARE FUNCTION CODES FOR THE MEX SERVICE CALL PROCESSOR ; INMDM EQU 255 ;RETURN CHAR FROM MDM IN A, CY=NO CHR IN 100MS TIMER EQU 254 TMDINP EQU 253 ;B=# SECS TO WAIT FOR CHAR, CY=NO CHAR CHEKCC EQU 252 ;CHECK FOR ^C FROM KBD, Z=PRESENT SNDRDY EQU 251 ;TEST FOR MODEM-SEND READY RCVRDY EQU 250 ;TEST FOR MODEM-RECEIVE READY SNDCHR EQU 249 ;SEND A CHARACTER TO THE MODEM (AFTER SNDRDY) RCVCHR EQU 248 ;RECV A CHAR FROM MODEM (AFTER RCVRDY) ILP EQU 240 ; the equate set as it is). ; NOTE: Leave DISC set TRUE for MEX 1.2x ; ; This overlay will work with any modem overlay that terminates ; prior to 0B00H ; FALSE EQU 0 TRUE EQU NOT FALSE ; ; NUMRES EQU FALSE ; TRUE = INTERPRET NUMERIC RESULT CODES ; FALSE = IGNORE NUMERIC RESULT CODES ; DISC EQU TRUE ;<<== CHANGE TO FALSE IF YOU DISC. WITH DTR ; leave set TRUE for MEX 1.2 ; ; ; ; NOTE: This overlay converted for MEX 1.2 compatiblility ; and 8086 translation 2/20/85 by Al Jewer. vector sends the hangup string to the modem. ; Mex 1.2 will ignore the vector at 165H in this overlay. ; ORG 100H ;BASE OF TPA IF I8080 DB 0C3H ;DEFINE 8080 OVERLAY ENDIF ;I8080 IF I8086 DB 0E9H ;8086 FLAG ENDIF ;I8086 ; ORG TPULSV TPULSE: DB 'T' ;TOUCHTONE FLAG ; IF DISC ;IF PROVIDING DISCONNECT CODE ORG NDISCV ;SMART MODEM DISCONNECT VECTOR (MEX 1.20) JMP DISCON ELSE RET ;FOR MEX 1.2, IN CASE SOMEBODY SCREWS UP.... ENDIF ; ORG DIALV ;OVERLAY THE DIALING VECTOR JM Rthat last digit of the phone number ; was being interpreted as a numeric result code causing the program, ; for certain numbers, to give up even as the modem merrily dialed away. ; ; This modules adapts MEX for the DC Hayes Smartmodem (as well ; as many others -- including US Robotics -- that use a similar ; command language). The main function of this module is to pro- ; vide dialing capability; the disconnect vector is ancillary. ; You may use this module as a model to develop dialing routines gINLINE PRINT KSTAT EQU 11 ;KEYBOARD STATUS KBDIN EQU 01 ;KEYBOARD INPUT ; CR EQU 13 LF EQU 10 ; ; ***** CODE STARTS HERE ***** ; ; IF (NOT MEX2) ; ; NOTE: ; This file contains control characters used by our ; 8080-8086 translator, XLAT. These are in the form of "\" characters ; inserted as the first character of the comment field. Please do ; not change or delete these, so that future versions of this overlay ; will directly convert to 8086 operation. Thanks, - al ; ; For MEX 1.2, t "P DIAL ; IF DISC ;IF PROVIDING DISCONNECT CODE ORG DISCV ;OVERLAY THE VECTOR (MEX 1.1X) JMP DISCON ENDIF ; ; ENDIF ;NOT MEX2 ; IF MEX2 ; ; (note: re-enable ASEG & CSEG if MEX2) ; ; ASEG ;JUMP TABLE IS ABSOLUTE ; ORG 10FH ;MEX2 JUMPS START HERE JMP DIAL ;FIRST IS DIAL VECTOR DS 3 ;THEN HARDWARE DISCONNECT VECTOR JMP DISCON ;THEN SOFTWARE DISCONNECT VECTOR JMP JUSTRT ;SMART MODEM INIT JMP JUSTRT ;SMART MODEM DEINIT JMP NOTIMP ;SSET COMMAND ; ; CSEG ;REST IS COD POINTER CPI 254 ;START DIAL? JZ STDIAL ;\JUMP IF SO CPI 255 ;END DIAL? JZ ENDIAL ;\JUMP IF SO ; ; Not start or end sequence, must be a digit to be sent to the modem ; MOV M,A ;PUT CHAR IN BUFFER INX H ;\ADVANCE POINTER SHLD DIALPT ;STUFF PNTR RET ;ALL DONE ; ; Here on a start-dial sequence ; STDIAL: LXI H,DIALBF ;SET UP BUFFER POINTER SHLD DIALPT RET ; ; Here on an end-dial sequence ; ENDIAL: MVI M,CR ;STUFF END-OF-LINE INTO BUFFER INX H ;\FOLLOWED BY TERMINATOR V255) the overlay must take ; whatever end-of-dial actions are necessary *including* waiting for ; carrier at the distant end. The overlay should monitor the keyboard ; during this wait (using the MEX keystat service call), and return ; an exit code to MEX in the A register, as follows: ; ; 0 - Carrier detected, connection established ; 1 - Far end busy (only for modems that can detect this condition) ; 2 - No answer (or timed out waiting for modem response) ; 3 - Keyboard abort (^C only: all otherN CALL MEX POP B CPI 'C'-40H ;IS ^C? JNZ NOCC ;\JUMP IF NOT MVI A,3 ;PREP RETURN CODE PUSH PSW ;\SAVE IT ABCOM: MVI B,CR ;YES, SHUT DOWN THE MODEM MVI C,SNDCHR CALL MEX POP PSW ;\RETURN ABORT CODE RET NOCC: CPI ' ' ;SPACE BAR? JNZ SMNEXT ;\IGNORE ALL OTHERS MVI A,1 ;PREP RETURN CODE PUSH PSW ;\ JMP ABCOM ;\FINISH IN COMMON CODE SMNEXT: DCR C ;NO JNZ SMWLP ;\CONTINUE ; ; ONE MINUTE WITH NO MODEM RESPONSE (OR NO CONNECTION) ; SMTIMO: MVI A,2 ;RETURN TIMEOUT CE SEGMENT ; ENDIF ;MEX2 ; ; ; This is the DIAL routine called by MEX to dial a digit. The digit ; to be dialed is passed in the A register. Note that two special ; codes must be intercepted as non-digits: 254 (start dial sequence) ; and 255 (end-dial sequence). Mex will always call DIAL with 254 ; in the accumulator prior to dialing a number. Mex will also call ; dial with 255 in A as an indication that dialing is complete. Thus, ; the overlay may use these values to "block" the number, holdin MVI M,0 LDA TPULSE ;GET OVERLAY'S TOUCH-TONE FLAG STA SMDIAL+3 ;PUT INTO STRING LXI H,SMDIAL ;POINT TO DIALING STRING CALL SMSEND ;SEND IT WAITSM: MVI C,INMDM CALL MEX ;CATCH ANY OUTPUT FROM THE MODEM JNC WAITSM ;\LOOP UNTIL NO MORE CHARACTERS ; ; THE FOLLOWING LOOP WAITS FOR A RESULT FROM THE MODEM (UP TO ; 60 SECONDS: YOU MAY CHANGE THIS VALUE IN THE FOLLOWING LINE). ; NOTE THAT THE SMARTMODEM HAS AN INTERNAL 30 SECOND TIMEOUT WHILE ; FOR A CARRIER ON THE OTHER END. YOU CAN CHANGE s should be ignored) ; 4 - Error reported by modem ; ; ; ; The overlay should not loop forever in the carrier-wait routine, but ; instead use either the overlay timer vector, or the INMDMV (timed 100 ; ms character wait) service call routine. ; ; The DIAL routine is free to use any of the registers, but must return ; the above code after an end-dial sequence ; IF (NOT MEX2) ORG DIALOC ENDIF ;NOT MEX2 ; DIAL: LHLD DIALPT ;FETCH  ODE RET ; ; MODEM GAVE US A RESULT, CHECK IT ; SMTEST: ANI 7FH ;IGNORE ANY PARITY CALL SMANAL ;TEST THE RESULT MOV A,B ;A=RESULT (CY SIGNIFICANT HERE TOO) PUSH PSW ;SAVE IT SMTLP: MVI C,INMDM ;FLUSH ANY REMAINING COMMAND LINE CALL MEX JC SMCHEK ;\JUMP IF NO INPUT CPI LF ;GOT SOME ... WAITING FOR EOL JNZ SMTLP ;\EAT ANY IN-BETWEEN SMCHEK: POP PSW ;A HAS MEX RETURN-CODE, CY=1 IF UNKNOWN JC RESULT ;\IF RESULT UNKNOWN, IGNORE IT RET ; SMANAL: MVI B,0 ;PREP CONNECT CODE Cg it ; in a buffer until it is completely assembled (in fact, that's the ; scheme employed here for the Smartmodem). ; ; After the 254-start-dial sequence, MEX will call the overlay with ; digits, one-at-a-time. MEX will make no assumptions about the dig- ; its, and will send each to the DIAL routine un-inspected (some modems, ; like the Smartmodem, allow special non-numeric characters in the ; phone number, and MEX may make no assumptions about these). ; ; After receiving the end-dial sequence (7BY PLAYING WITH THE ; S7 VARIABLE (I.E. SEND THE SMARTMODEM "AT S7=20" TO LOWER THE 30 SECOND ; WAIT TO 20 SECONDS). ; RESULT: MVI C,60 ;<<== MAXIMUM TIME TO WAIT FOR RESULT SMWLP: PUSH B MVI B,1 ;CHECK FOR A CHAR, UP TO 1 SEC WAIT MVI C,TMDINP ;DO TIMED INPUT CALL MEX POP B JNC SMTEST ;\JUMP IF MODEM HAD A CHAR PUSH B ;NO, TEST FOR CONTROL-C FROM CONSOLE MVI C,KSTAT ;CHECK FOR KEYPRESS CALL MEX ORA A POP B JZ SMNEXT ;\JUMP IF NO KEYPRESS PUSH B ;GET KEYPRESS MVI C,KBDI  'PI 'C' ;"CONNECT"? RZ ;\R1\ IF NUMRES CPI '1' ;NUMERIC VERSION OF "CONNECT" RZ ;\R1\ CPI '5' ;NUMERIC VERSION OF "CONNECT 1200" RZ ;\R1\ ENDIF INR B ;PREP BUSY CODE B=1 CPI 'B' RZ ;\R1\ INR B ;PREP NO CONNECT MSG B=2 CPI 'N' ;N=NO CONNECT RZ ;\R1\ IF NUMRES CPI '3' ;NUMERIC VERSION OF "NO CONNECT" RZ ;\R1\ ENDIF MVI B,4 ;PREP MODEM ERROR CPI 'E' ;E=ERROR RZ ;\R1\ IF NUMRES CPI '4' ;NUMERIC VERSION OF "ERROR" RZ ;\R1\ ENDIF ,CR,LF,0 JUSTRT: RET ; ; ORG MEXLOC ;"CALL MEX" MEX: ; ; IF (NOT MEX2) ORG SMTABL ;TABLE OF SMART MODEM VECTORS HERE ; DW JUSTRT ;SMART MODEM INIT DW NOTIMP ;SSET COMMAND (NOT IMPLEMENTED) DW JUSTRT ;SMART MODEM EXIT ENDIF ;NOT ME X2 ; END : ANSI SYS` :#DEBUG COM` PEDLIN COM` R1EMM386 EXE ` ^f  STC ;UNKNOWN... R1: RET ; ; FOLLOWING ROUTINE DISCONNECTS THE MODEM USING SMARTMODEM ; CODES. ALL REGISTERS ARE AVAILABLE FOR THIS FUNCTION. ; NOTHING RETURNED TO CALLER. ; IF DISC ; DISCON: MVI B,20 MVI C,TIMER ;WAIT 2 SECONDS CALL MEX LXI H,SMATN ;SEND '+++' CALL SMSEND MVI B,20 ;WAIT 2 MORE SECONDS MVI C,TIMER CALL MEX LXI H,SMDISC ;SEND 'ATH' CALL SMSEND MVI B,1 ;WAIT 1 SECOND MVI C,TIMER CALL MEX RET ; SMATN: DB '+++',0 SMDISC: DB 'ATH',CR,0 ; ENDIF  4 ; ; SMARTMODEM UTILITY ROUTINE: SEND STRING TO MODEM ; SMSEND: MVI C,SNDRDY ;WAIT FOR MODEM READY CALL MEX JNZ SMSEND ;\ MOV A,M ;FETCH NEXT CHARACTER INX H ;\ ORA A ;END? RZ ;\R1\DONE IF SO MOV B,A ;NO, POSITION FOR SENDING MVI C,SNDCHR ;NOPE, SEND THE CHARACTER CALL MEX JMP SMSEND ;\ ; ; DATA AREA ; SMDIAL: DB 'ATDT ' DIALBF: DS 52 ;2* 24 CHAR MAX, + CR + NULL + SLOP DIALPT: DS 2 ;DIAL POSITION POINTER ; ; NOTIMP: MVI C,ILP CALL MEX DB CR,LF,'Not Implemented'   .     0         P     N         B     \         t     j         f     x                             !!!!!!!!! !! !! !! !! !!!! ! """"""""" "" "" "" "" """" " ######### ## ## ## ## #### # $5$$$$$$$$ $$ $$ $$ $$ $$$$ $ %%%%%%%%% %% %+% %% %% %%%% % &'&&&&&&&& && && && && &&&& & ''''''''' '' '9' '' '' '''' ''9