[ KAY*FOG RBBS | MEXREAD.ART | published 06/16/85 ] MEX READ: AUTOMATED TRANSFER OF FILES WITH MEX: THE "READ" COMMAND by Rick Charnes MEX is the most exciting public domain modem program available for CP/M computers. What follows is a fairly detailed discussion of a use of MEX's most unique and dynamic capability, its READ command. Beginners might find it difficult to follow. It assumes a prior working knowledge of MEX, and some familiarity with its very long documentation. Novices might want to read my introductory article to MEX, also available with the A) command here on KAY*FOG. Here are the files that I've developed in order to automate the transfer of files with MEX. I want to emphasize that this is not true "batch" transfer; it has nothing in common with the Christensen "B" (batch) command as it does not have wildcard "*" capability. You can not get it, for instance, to send all files with the extension ".LBR" with a "*.LBR" command. Each file must be listed by name. I prefer calling it "automated" transfer rather than "batch," though it is batch in the sense that it can send or receive a group of files with a single command. The difference is that these files must all be named individually. The advantage of this way of file transfer is speed and accuracy. No longer do you have to make sure you spell the name of the file correctly TWICE - once while invoking the RCP/M's XMODEM function and then again when receiving with your own "R" command. And you are spared many extra keystrokes and time. And of course, there's the most important aspect: it's FUN! There's nothing like the thrill of watching the computer do what you've programmed it do. As Irv Block says, "All of this unattended, while you file your nails or go for coffee." Ah, the true purpose of computers is revealed... The way that this is done is through one of MEX's most fascinating and exciting capabilities, its READ command. One prepares a file beforehand, using a text editor or wordprocessor, a file which MEX will "read" when online. It is very similar to CP/M's SUBMIT utility. Simply be sure to name the file with the extension ".MEX". I have named the following file "TAKEMANY.MEX", though you can call it anything. (In the voluminous MEX literature, similar files are often called "GET.MEX"). Then when you are online and ready to down- or up-load, you simply type "READ TAKEMANY" (or "SENDMANY") on MEX's command line. Or, even better, turn on MEX's "read command extender" by typing STAT EXTEND ON. With EXTEND on, MEX interprets any command entered on its command line differently from how it normally does. It first searches to see if it is a normal command from its command "table. " If not, it "passes it on" to READ and assumes it's a READ command. This way, you don't have to type the word "READ" since it is assumed. In other words, if you type simply "TAKEMANY" after the MEX prompt, it will automatically search for the file "TAKEMANY.MEX" on disk and "submit" the commands from it. Here's the file: STAT TRIGGER ">" PREFIX "XMODEM S " SENDOUT "{1}" R {1} SENDOUT "{2}" R {2} SENDOUT "{3}" R {3} SENDOUT "{4}" R {4} SENDOUT "{5}" R {5} The numbers within the brackets are considered parameters, and I suggest you read the printed doc file for the explanation of these little guys, though it's similar, again, to SUBMIT's parameters. This is to receive several files in an automated sequence from an RCP/M. Then when you've logged onto a network ("BBS") and you're in the RCP/M, simply type: TAKEMANY FN1.FT FN2.FT FN3.FT FN4.FT etc., where FN1.FT, FN2.FT, etc. are the names of the files you want. If you have fewer than 5, that's OK. MEX will just give you an error message: "parameter error: line #n" and the read command will simply halt. What this file does is first it sets the PREFIX of any SENDOUT string you're going to send as 'XMODEM S '. It'll also wait until it sees a ">" from the RCP/M before sending its string. Of course ">" is the CP/M prompt you will get from the RCP/M. This TRIGGER command is excellent and very important for file transfer. Nothing will be SENTOUT until MEX sees this all- important ">". When it does, BAM!! There she goes. Then - if transmission is incorrect, and if WTECHO is on (it should be!) it waits till it sees another ">" then sends it out again until it's received correctly! Watching this process on your screen, especially when it sends a "cancel" character if the transmission is incorrect and it needs to be sent again, is quite beautiful to behold! So with the prefix set, it then sendsout the string that you enter on its command line, which in this case is the filename. It then enters this string into the parameters {1}, {2}, etc. in the READ file. In other words, you're sending out to the RCP/M the prefix "XMODEM S " and then the name of the file you want, so altogether you're sending out "XMODEM S FILENAME.TYPE". Whatever you've type on the command line after the word 'TAKEMANY' become the parameters that it inserts into the READ file to be sent out as SENDOUT. Be sure to read the explanation of this in Ron Fowler's long .DOC file. Again, it's very similar to the SUBMIT command with its parameters. Then after MEX has inserted the parameters that you've typed on its command line into the SENDOUT string, then it ALSO inserts them into the line in the READ file where it says "R {1}" or "R {2}", etc. So after MEX has invoked the RCP/M's XMODEM capacity and gotten it ready to send, it then dutifully goes back into your computer and does the "R" command to receive. And of course again it sees those brackets, knows it's a parameter, and again uses the parameter that you've entered on the read command line. You're sending and receiving the same filename. So what you're doing is having MEX tell the RCP/M to send what you've entered into parameter 1, then it tells your computer to receive what you've entered in parameter 1, and it continues on its merry way until its exhausted all the parameters or until number 5. This concept of parameters can be very complicated. It takes some concentration at first, but it eventually all clicks together quite nicely. Remember that a READ command can operate on two levels: it can SENDOUT strings to the BBS _and_ it can give commands internally to MEX. When it's SENDING OUT the string within the quotes is sent to the remote, but other commands, such as the "R {1}" or a STAT command or "PREFIX" in the above file (there are of course many others!), are sent internally to your computer to set the values of MEX. It's important to get this sense of switching back and forth between modes. Anything that should be sent out to the BBS should be sent as a SENDOUT string; anything you want to tell MEX itself, internally, gets entered directly. A slightly different way to write this file would be without the use of the PREFIX command. It would then appear as: STAT TRIGGER ">" <--- this is sent internally (to MEX) SENDOUT "XMODEM S {1}" <--- this string is sent to the BBS R {1} <--- sent internally SENDOUT "XMODEM S {2}" <--- to the BBS R {2} <--- (etc.) SENDOUT "XMODEM S {3}" R {3} SENDOUT "XMODEM S {4}" R {4} SENDOUT "XMODEM S {5}" R {5} I just prefer to use the PREFIX command as it saves typing and again -- it's more fun. Now a word about WTECHO. Be sure to turn STAT WTECHO ON. THIS IS VERY IMPORTANT for error detection feedback. This turns SODELAY off, which is not as good for our purposes. What WTECHO does is to verify (something like CRC checking, I guess!) that the transmission of the SENDOUT and keystring characters are sent properly. You'll notice a real delay in the SENDOUT command and your keystrings when you have WTECHO ON rather than OFF. I like it much better. Only thing is, its efficiency is greatly diminished when you're not in an RCP/M, such as sending logon strings, as it generally looks for that TRIGGER character as a cue to send out its string. For this purpose, its use is greatly problematic, as it's very difficult to find a single trigger character (or one at all, for that matter!) for a complete logon string. I have found SODELAY, which is dependent on the WCHAR and WLINE settings (normally used for time delays when sending a file in terminal-mode) to be much better for sending out logon strings. Any feedback on this, though, would be appreciated. But for file transfer with an RCP/M be sure to turn the trigger character to ">" with STAT TRIGGER ">" so it knows what to look for to SENDOUT and also for WTECHO to retry. Since when sending logon strings and also for Smartmodem commands (such as to turn the modem speaker off and on, which can be done through a READ file) there will be no trigger character to look for, I recommend that the STAT TRIGGER ">" command be incorporated into READ files for file transfers rather than CLONEd directly into MEX. An alternate way to set up READ files is if you know the names of the files you want before you log on. In this case, what you do is to have the READ file that you prepare off-line include the names of the files. This way, you save time and possible mistakes typing them in on MEX's command line when you're on- line, since you're not using parameters. For instance, suppose you want to download the four files named THIS.FIL, THAT.FIL, THIS.DOC, and THAT.DOC. Your file should look like: STAT TRIGGER ">" PREFIX "XMODEM S " SENDOUT "THIS.FIL" R THIS.FILE SENDOUT "THAT.FIL" R THAT.FILE SENDOUT "THIS.DOC" R THIS.DOC SENDOUT "THAT.DOC" R THAT.DOC So you'll end up, assuming the prefix of "XMODEM S ", sending out "XMODEM S THIS.FILE" which will invoke the RCP/M to send, and then return to your computer and receive THIS.FIL, etc. Just understand that when READ is reading the lines with SENDOUT commands, it's sending them to the RCP/M, and when it's in the lines with the "R" or "STAT" or "PREFIX" commands, it's talking to your computer, that is, to MEX. And of course both these files can be made to _upload_ files to an RCP/M by simply making the PREFIX to be XMODEM R and the "R" in the next line an "S". Or this idea can be used to upload or download single files. To download a single file, make a READ file (always with the extension of .MEX, remember), that looks like: STAT TRIGGER ">" SENDOUT "XMODEM S {1}" R {1} And to upload a single file, again, reverse the "R" and "S". That's all. An interesting idea I owe to one of the other articles I read is using MEX's READ command to download a file but change its name before it's placed on your computer's disk. This would be convenient for downloading files with the extension ".OBJ" which you would want to change to ".COM." You don't have to wait till you're back in CP/M; you can have MEX do it for you. Say you've got a file called "TAKEC.MEX" (the C means "change" the name): STAT TRIGGER ">" SENDOUT "XMODEM S {1} {2}" R {2} {1} Then when you're in the RCP/M, you see a file you want, called NSWP205.OBJ. On MEX's command line, type: TAKEC NSWP205.OBJ NSWP205.COM This reversal of parameters on the last line is what does it. It will send out that full string, with both names. But apparently when XMODEM sees two strings, separated by a space, it simply ignores the second and assumes it's dealing only with the first. So it does transmit NSWP205.OBJ. But MEX "remembers" the filename you've typed in for the second parameter. Then, when READ comes to the last line, this time it is READ that simply ignores what is second on its line, here parameter number 1 (NSWP205.OBJ), and therefore receives only what comes first on its line, parameter number 2, NSWP205.COM. You can check on your disk to make sure. Neat, huh? One caveat about READ files in general. It's hard to understand, but all the while MEX is reading a READ file, it is NOT in terminal mode. It _looks_ like it's in terminal mode; the SENDOUT strings are sent directly to the computer network in what looks like terminal mode, but you're NOT in terminal mode. The reason I emphasize this is that if you ever have a "T" (for Terminal) command within a read file EXCEPT AS THE VERY LAST COMMAND the READ file will simply stop. So if you've set "T" as your GLOBAL command, you must turn it off with the command "GLOBAL". (The word "GLOBAL" by it put a "T" command in the middle of a file, simply escape manually back to MEX's command mode and the READ file will continue. "T" can very properly be put as the _last_ command in a read file; it will, in this case, put you successfully into terminal mode since there are no more commands after it. This is actually a good idea since you will have to return to terminal mode manually if you have more business on the RCP/M. I hope I've explained A LITTLE about MEX's wonderful READ command and some of the things it can do. Experiment yourself - I'm sure there are a lot more undiscovered roads to travel with this incredible modem program. As one of its many aficionadoes, Irv Block, comments, "there may be as many different ways of programming it as there are users." Let me know what experiences you have. Have FUN! - that's what MEX is all about! Any questions - send 'em to me on the MEX CONFERENCE! Rick Charnes ------------------------- End of MEXREAD.ART Text -------------------------