home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / MISC / OS2 / PMCOMM.ZIP / PMCOMM.INF (.txt) < prev    next >
Encoding:
OS/2 Help File  |  1990-12-06  |  76.2 KB  |  3,493 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Extended Help ΓòÉΓòÉΓòÉ
  3.  
  4. There is a collection of utilities in the File section such as; Scripts, 
  5. Capture, Print, Copy, and  Paste. There is also an About box that has 
  6. information on  Multi-Net Communications, the company that wrote this software. 
  7.  
  8. In the Edit section there are commands such as Copy, Paste, and Clear_Screen. 
  9. These commands will help you manipulate on-screen information. 
  10.  
  11. The Connect command allows you to connect to another computer, either through a 
  12. modem, using the Dial command or direct connect, using the Send_Break command. 
  13.  
  14. Transfer allows the use of different protocols to send and receive files to or 
  15. from a remote computer. The protocol options are Xmodem_Checksum, Xmodem_CRC, 
  16. 1K-Xmodem, Ymodem(batch), Ymodem-g(batch), Zmodem, CISB, and ASCII. Zmodem is 
  17. probably the best selection when available on the remote computer. Ymodem-G 
  18. should only be used with error correcting modems. 
  19.  
  20. Hang-up sends the hang-up command string (see the Option menu) and optionally 
  21. drops the dtr line to the modem. Dropping dtr is the most effective if your 
  22. modem is setup to hang-up when dtr is dropped. Using a hang-up string is also 
  23. slower, because Pmcomm has to get the modem into the command state before 
  24. sending the hang-up string. If you have dtr on and delete the hangup string the 
  25. hang-up will be much faster. 
  26.  
  27. Option allows you to tailor Pmcomm to your own tastes. The areas in option are 
  28. Port, Dial_Setup, Modem, Protocols, Paths, Macros_Setup, Screen, Terminal, and 
  29. Color. The setup is not automatically saved. This allows you to change things 
  30. temporally without changing your default setup file. If you do want to make the 
  31. changes permanent be sure to save the setup file. To save the current setup 
  32. file,  use the Save_setup command under the File menu option. 
  33.  
  34. Macros allows you to pick, with a mouse, the macro you wish to send. Macros can 
  35. also be selected with an Alt+corresponding number keystroke. Pmcomm allows you 
  36. to set up ten different macros. 
  37.  
  38.  
  39. ΓòÉΓòÉΓòÉ 1.1. Keys Help ΓòÉΓòÉΓòÉ
  40.  
  41. The following is a list of "Hot keys" available. 
  42.  
  43.   F1      =   Help. 
  44.  
  45.   F3      =   Exit. 
  46.  
  47.   Alt-D     =   Dialing directory. 
  48.  
  49.   Alt-H     =   Hangup. 
  50.  
  51.   Alt-X     =   Exit. 
  52.  
  53.   Ctrl-Break  =   Send break. 
  54.  
  55.   Ctrl-Insert  =   Copy. 
  56.  
  57.   Shift-Insert  =  Paste. 
  58.  
  59.   Page-Dn   =   Download. 
  60.  
  61.   Page-Up   =   Upload. 
  62.  
  63.   Print Scrn  =   Prints text in the visible 
  64.            window (full line length). 
  65.  
  66.  The up and down arrow keys default to scrolling the window. You can change 
  67.  this in the setup terminal dialog box so that when in ANSI mode the arrow keys 
  68.  will be sent to the modem. 
  69.  
  70.  In VT100 mode, some keys have been changed to try to closely emulate the VT100 
  71.  keyboard. F1-F4 are now the PF keys. Because of this the F1 key will not 
  72.  display the normal help, and F3 will not exit the program. The PF keys will 
  73.  send the following characters: 
  74.  
  75.    F1 = ESCOP 
  76.  
  77.    F2 = ESCOQ 
  78.  
  79.    F3 = ESCOR 
  80.  
  81.    F4 = ESCOS 
  82.  
  83.  Where ESC is equal to the ASCII character hex 1B. All other hot keys will not 
  84.  be available. When the num lock key is off the numerical key pad will be in 
  85.  the application mode. If you are connecting to a VT220 Host you can use these 
  86.  keys to send the VT220 PF key values. For example pressing the 1 on the 
  87.  numeric key pad will send the VT220 PF1 key. Pressing the 3 on the numeric key 
  88.  pad will send the VT220 PF3 key, and so on.With the num lock on the numbers 
  89.  will be sent. The plus key has been re-mapped to be a comma, again to be 
  90.  compatible with the VT100 keyboard. 
  91.  
  92.  
  93. ΓòÉΓòÉΓòÉ 2. File ΓòÉΓòÉΓòÉ
  94.  
  95. There is a collection of utilities in this section such as; Save_setup, 
  96. Scripts, Capture, Print, Copy, and  Paste. There is also an About box that has 
  97. information on  Multi-Net Communications, the company that wrote this software. 
  98.  
  99.  
  100. ΓòÉΓòÉΓòÉ 2.1. Save Setup ΓòÉΓòÉΓòÉ
  101.  
  102. Saves user definable configurations, as well as screen size and position. 
  103.  
  104.  
  105. ΓòÉΓòÉΓòÉ 2.2. Capture ΓòÉΓòÉΓòÉ
  106.  
  107. Capture saves everything that is received from the modem to a file. For 
  108. example, you can capture all new messages and then read them after  you hang 
  109. up. If you specify PRN as the filename everything will be captured to the 
  110. printer. 
  111.  
  112.  
  113. ΓòÉΓòÉΓòÉ 2.2.1. Start Capture ΓòÉΓòÉΓòÉ
  114.  
  115. You will be prompted for a file name and then everything that comes in from the 
  116. modem will be saved to that file. If PRN is selected then everything will be 
  117. sent to the printer. 
  118.  
  119.  
  120. ΓòÉΓòÉΓòÉ 2.2.2. Cancel Capture ΓòÉΓòÉΓòÉ
  121.  
  122. This command will turn off capture. This command will only work if capture was 
  123. started with the Start_Capture command. 
  124.  
  125.  
  126. ΓòÉΓòÉΓòÉ 2.3. Scripts ΓòÉΓòÉΓòÉ
  127.  
  128. Scripts allow you to have the computer perform certain tasks automatically. The 
  129. internal commands available are; 
  130.  
  131.  wait_for 
  132.  puts 
  133.  sleep 
  134.  call 
  135.  capture_on 
  136.  capture_off 
  137.  shell 
  138.  
  139.  The REXX commands that are available are; 
  140.  
  141.  init_dll 
  142.  setcom 
  143.  sendb 
  144.  dcd 
  145.  char_avail 
  146.  read_timeout 
  147.  Get_ch 
  148.  ring_detect 
  149.  drop_dtr 
  150.  raise_dtr 
  151.  Wait_for 
  152.  Wait_fore 
  153.  Put_s 
  154.  Sleep 
  155.  beep 
  156.  xmodem_send 
  157.  xmodem_receive 
  158.  xmodem_1k_send 
  159.  xmodem_1k_receive 
  160.  ymodem_send 
  161.  ymodem_receive 
  162.  ymodemg_send 
  163.  ymodemg_receive 
  164.  zmodem_send 
  165.  zmodem_receive 
  166.  ascii_send 
  167.  ascii_receive 
  168.  set_download_path 
  169.  os2_shell 
  170.  
  171.  The scripts command is only available in the registered version of Pmcomm. 
  172.  
  173.  
  174. ΓòÉΓòÉΓòÉ 2.3.1. Start Scripts ΓòÉΓòÉΓòÉ
  175.  
  176.  With this command you can start a pre-written script at any time. Just enter 
  177. the file name of the script. This script must be in the same directory as the 
  178. program. 
  179.  
  180.  
  181. ΓòÉΓòÉΓòÉ 2.3.2. Script Dialog ΓòÉΓòÉΓòÉ
  182.  
  183. The Script Dialog displays information and options about the current script. 
  184. When the dialog is displayed you have the option of either Aborting the script, 
  185. closing the dialog box, or skipping the currently executing command. 
  186.  
  187.  
  188. ΓòÉΓòÉΓòÉ 2.3.3. Cancel Script ΓòÉΓòÉΓòÉ
  189.  
  190. This command is used to stop a script that is already running. The script will 
  191. be canceled at the time this is selected unless the script is at a sleep 
  192. command. In this case the script will stop after the sleep time interval has 
  193. expired. 
  194.  
  195.  
  196. ΓòÉΓòÉΓòÉ 2.4. Log File  ΓòÉΓòÉΓòÉ
  197.  
  198. Logging writes to a file named pmcomm.log in the main pmcomm directory. The 
  199. type of information written is the time, date and name of the number  called. 
  200. The time, date, cps and name of files transferred will also be saved. If you 
  201. are setup  to monitor DCD the time and date of when the call was terminated 
  202. will also be recorded. 
  203.  
  204.  
  205. ΓòÉΓòÉΓòÉ 2.4.1. Start Logging ΓòÉΓòÉΓòÉ
  206.  
  207. The file named pmcomm.log in the main pmcomm directory will be opened. Any 
  208. logging information will be appended to the end of the file. 
  209.  
  210.  
  211. ΓòÉΓòÉΓòÉ 2.4.2. Cancel Logging ΓòÉΓòÉΓòÉ
  212.  
  213. The log file will be closed and no other information will be written to the log 
  214. file, until it is re-opened using the Start Log option. 
  215.  
  216.  
  217. ΓòÉΓòÉΓòÉ 2.5. File Import ΓòÉΓòÉΓòÉ
  218.  
  219. This command copies a file from disk and sends it to a remotely connected 
  220. computer. This can be handy for sending previously saved files as messages, or 
  221. during a chat session. At times this is handier then using the clipboard. The 
  222. delay time specified in the file import delay parameter under 
  223. Options,Protocols, will pause the specified number of seconds after each line 
  224. has been sent. This can be useful if the receiver can not process the 
  225. information as fast as Pmcomm can send it. 
  226.  
  227.  
  228. ΓòÉΓòÉΓòÉ 2.6. Print ΓòÉΓòÉΓòÉ
  229.  
  230. Print allows you to send information that was previously received out to the 
  231. printer. You can either send the information that is displayed on the visible 
  232. part of the window, or you can print the whole scroll back buffer. The print 
  233. function uses PRN as the device name for printing. 
  234.  
  235.  
  236. ΓòÉΓòÉΓòÉ 2.6.1. Print visible screen ΓòÉΓòÉΓòÉ
  237.  
  238. This command can also sent by pressing the Print Screen key. When Pmcomm 
  239. receives this message it prints all of the lines on the visible part of the 
  240. screen. 
  241.  
  242.  
  243. ΓòÉΓòÉΓòÉ 2.6.2. Print buffer ΓòÉΓòÉΓòÉ
  244.  
  245. When this is selected all of the scroll back buffer is sent out to the printer. 
  246. There are about 240 lines available in the scroll back buffer, so this command 
  247. may take awhile to complete. This does not mean that you can't do anything 
  248. else. Pmcomm will print in the background while you go on. 
  249.  
  250.  
  251. ΓòÉΓòÉΓòÉ 2.6.3. Print selected ΓòÉΓòÉΓòÉ
  252.  
  253. This will print previously selected text (by using the mouse) to the PRN 
  254. device. 
  255.  
  256.  
  257. ΓòÉΓòÉΓòÉ 2.7. About ΓòÉΓòÉΓòÉ
  258.  
  259. The about box has information about this program, such as BBS support telephone 
  260. number, company name, version number, and copyright information. 
  261.  
  262.  
  263. ΓòÉΓòÉΓòÉ 2.8. Exit ΓòÉΓòÉΓòÉ
  264.  
  265. Ends current session with Pmcomm. Pmcomm closes the comport when exiting which 
  266. drops dtr. The hang-up string is also sent to the modem. 
  267.  
  268.  
  269. ΓòÉΓòÉΓòÉ 3. Edit ΓòÉΓòÉΓòÉ
  270.  
  271. In this section there are commands such as Copy, Paste, and Clear_Screen. 
  272.  
  273.  
  274. ΓòÉΓòÉΓòÉ 3.1. Copy ΓòÉΓòÉΓòÉ
  275.  
  276. Copy transfers information from the screen and places it into the Clipboard. 
  277. Other applications can then use this information. For example, you may be 
  278. reading mail and want to use some of the information in a word processor. 
  279.  
  280.  
  281. ΓòÉΓòÉΓòÉ 3.2. Paste ΓòÉΓòÉΓòÉ
  282.  
  283. Paste, copies information from the clipboard and sends it out to the modem. 
  284. Care must be taken that the information sent can be handled by the remote 
  285. computer. A use for this command would be that you could enter a message in a 
  286. word processor, copy that message into the clipboard and then paste it into 
  287. Pmcomm. 
  288.  
  289.  
  290. ΓòÉΓòÉΓòÉ 3.3. Clear Screen ΓòÉΓòÉΓòÉ
  291.  
  292. Clears the whole screen including the scroll back buffer and resets the 
  293. attribute to the attribute defined in the setup area. 
  294.  
  295.  
  296. ΓòÉΓòÉΓòÉ 4. Connect ΓòÉΓòÉΓòÉ
  297.  
  298. This command allows you to connect to another computer, either through a modem, 
  299. using the Dial command or direct connect, using the Send_Break command. 
  300.  
  301.  
  302. ΓòÉΓòÉΓòÉ 4.1. Dial ΓòÉΓòÉΓòÉ
  303.  
  304. Dial uses a dialing_directory to store phone numbers and other information 
  305. about the computer. 
  306.  
  307.  
  308. ΓòÉΓòÉΓòÉ 4.1.1. Dial Dialog Help ΓòÉΓòÉΓòÉ
  309.  
  310. The dial dialog box allows you to add, select, modify, or delete entries in the 
  311. current dialing directory. An entry can also be selected to be automatically 
  312. selected (or optionally dialed) when Pmcomm is first started. 
  313.  
  314. To add an entry, select the add button in the dialog box. You will  then be 
  315. prompted to enter the name of the new entry. The directory will be sorted and 
  316. the new entry will be selected. The cursor will be positioned at the number 
  317. entry field so that the number for the new entry can be entered. After the 
  318. number has been entered, pressing the enter key will save the dialing directory 
  319. and dial the number(s). Pressing the tab key will allow you to edit the other 
  320. fields. 
  321.  
  322. To select a number, using a mouse, "click" on the number (or numbers) that you 
  323. wish  to dial. To deselect an entry "click" on the number once again. If you 
  324. are not using a mouse the arrow keys will move the highlight bar through the 
  325. directory. To select your choices hit the space bar, a second time will 
  326. deselect the entry, then hit enter. Multiple entries may be selected.  This 
  327. will form a dialing queue, in which Pmcomm will dial the selected entries until 
  328. a connection is made. 
  329.  
  330. To modify an entry, select the entry to be edited and then use the tab key to 
  331. move the cursor to the field you wish to change. Use the Change button to 
  332. change the name of an entry.Pressing the save button will save the 
  333. modifications to the disk. 
  334.  
  335. To change a name, select the entry to be edited and then use press the change 
  336. button. The change will automatically be saved to the disk. 
  337.  
  338. To delete an entry, select the entry be deleted and select the delete button in 
  339. the dialog box. 
  340.  
  341. CAUTION:
  342. If multiple entries are selected, only the first selected entry will be 
  343. deleted. 
  344.  
  345.  
  346. ΓòÉΓòÉΓòÉ 4.1.2. Dial Prefix ΓòÉΓòÉΓòÉ
  347.  
  348. Pmcomm sends the selected dial prefix to the modem before sending the phone 
  349. number. The default string for the prefixes is ATDT which tells the modem to 
  350. dial using tone (ie. touch tone). If your phone system does not support touch 
  351. tone then you could use the ATDP command. Pmcomm allows you to setup multiple 
  352. prefixes, so that if you need to dial a special code for long distance calls 
  353. you can set up a separate prefix for those calls. 
  354.  
  355.  
  356. ΓòÉΓòÉΓòÉ 4.1.3. Dial Suffix ΓòÉΓòÉΓòÉ
  357.  
  358. Pmcomm sends the selected dial suffix to the modem after sending the phone 
  359. number. The default string for the suffixes is ^M which is a carriage 
  360. return,line feed. 
  361.  
  362.  
  363. ΓòÉΓòÉΓòÉ 4.1.4. Automatically Selected ΓòÉΓòÉΓòÉ
  364.  
  365. If a dialing entry is marked as being automatically selected, then each time 
  366. Pmcomm is started this entry will be selected to be dialed. You can have as 
  367. many entries automatically selected as you want, and this will form a dialing 
  368. queue. A dialing queue allows you to try the first number and if it is busy it 
  369. will then dial the next number in the queue.If the Dial Auto Selected Entries 
  370. on program Startup is selected then any entries in the dialing directory that 
  371. are marked as auto selected, will automatically be dialed. This option will 
  372. allow you to automatically dial selected numbers when Pmcomm is first invoked. 
  373.  
  374.  
  375. ΓòÉΓòÉΓòÉ 4.1.5. Dial List Box ΓòÉΓòÉΓòÉ
  376.  
  377. The Dial List Box is a multiple selection list box. This means that you can 
  378. select more then one entry at a time. The information on the right side of the 
  379. Dialog Box is on the first item selected. The reason for using a multiple 
  380. selection list box, is that you can select more then one item and these items 
  381. will be dialed in order. For example, if the first number selected is busy then 
  382. Pmcomm will dial the next number selected. If all selected numbers are busy, 
  383. Pmcomm will start over again. If you have multiple items selected and select 
  384. the Delete button, only the first item will be deleted. If an item is selected 
  385. and you double click on that item then the selected items will be dialed. 
  386.  
  387.  
  388. ΓòÉΓòÉΓòÉ 4.1.6. Baud Rate ΓòÉΓòÉΓòÉ
  389.  
  390. In the Dialing Dialog Box you can enter any baud supported by the device driver 
  391. you are using. Currently the maximum baud rate supported by the device driver 
  392. included with OS/2 is 19200. Commonly used baud rates are, 300, 1200, 2400, 
  393. 9600, and 19200. There are some device drivers currently available that support 
  394. up to 38400. To enter a baud rate, type in a valid baud rate. The com port will 
  395. be set to this value when the phone number is dialed. In the Port Options 
  396. Dialog Box the above mentioned baud rates can be selected by using the radio 
  397. buttons. 
  398.  
  399.  
  400. ΓòÉΓòÉΓòÉ 4.1.7. Parity ΓòÉΓòÉΓòÉ
  401.  
  402. The supported parities are, None, Even, Odd, Marked, and Space. To enter a 
  403. parity type in one of the above words. The two most widely used parities are, 
  404. None and Even. If you are calling most BBS's you would want to enter None, but 
  405. most packet networks (such as CompuServe, and Telenet) normally require Even 
  406. parity. 
  407.  
  408.  
  409. ΓòÉΓòÉΓòÉ 4.1.8. Data Bits ΓòÉΓòÉΓòÉ
  410.  
  411. Currently supported data bits are 5, 6, 7, and 8. The most popular values are 
  412. 7, and 8. For most BBS's, 8 would be the data bits, but for systems such as 
  413. CompuServe, 7 data bits are required. 
  414.  
  415.  
  416. ΓòÉΓòÉΓòÉ 4.1.9. Stop Bits ΓòÉΓòÉΓòÉ
  417.  
  418. Currently supported stop bits are 1, and 2. Most systems will require 1 stop 
  419. bit. 
  420.  
  421.  
  422. ΓòÉΓòÉΓòÉ 4.1.10. Dial Script ΓòÉΓòÉΓòÉ
  423.  
  424. The script name can be up to 12 characters long. The script must be in the 
  425. script path (see Paths for more information). Once Pmcomm is connected to the 
  426. remote computer this script will be executed. 
  427.  
  428.  
  429. ΓòÉΓòÉΓòÉ 4.1.11. Dial Terminal ΓòÉΓòÉΓòÉ
  430.  
  431. The currently available terminal emulations are, TTY, ANSI, and VT100. Pmcomm 
  432. will switch to the terminal emulation listed, once connected to the remote 
  433. computer. 
  434.  
  435.  
  436. ΓòÉΓòÉΓòÉ 4.2. Send Break ΓòÉΓòÉΓòÉ
  437.  
  438. Initializes a connection with another computer through a protocol converter. 
  439.  
  440.  
  441. ΓòÉΓòÉΓòÉ 5. Transfer ΓòÉΓòÉΓòÉ
  442.  
  443. Transfer allows the use of different protocols to send and receive files from a 
  444. remote computer. The protocol options are Xmodem_Checksum, Xmodem_CRC, 
  445. 1K-Xmodem, Ymodem(batch), Ymodem-g(batch), Zmodem, CISB, and ASCII. Zmodem is 
  446. probably the best selection when available on the remote computer. Ymodem-G 
  447. should only be used with error correcting modems. 
  448.  
  449.  
  450. ΓòÉΓòÉΓòÉ 5.1. Download ΓòÉΓòÉΓòÉ
  451.  
  452. The download command brings up a dialog box for you to select the proper 
  453. protocol. If the protocol selected is not a batch protocol ( ASCII, 
  454. Xmodem_Checksum, Xmodem_CRC or 1K-Xmodem ) you will be prompted for a filename. 
  455. If you have Auto-Zmodem or Auto_CISB selected in the protocol options area, 
  456. Pmcomm will automatically start transferring as soon as the remote computer 
  457. starts to send. Zmodem is not available in the demonstration version. 
  458.  
  459.  
  460. ΓòÉΓòÉΓòÉ 5.1.1. Xmodem Checksum ΓòÉΓòÉΓòÉ
  461.  
  462. Xmodem Checksum is one of the oldest protocols around and some people still use 
  463. it exclusively. It is a moderately fast protocol that has fairly good error 
  464. detection. 
  465.  
  466.  
  467. ΓòÉΓòÉΓòÉ 5.1.2. Xmodem CRC ΓòÉΓòÉΓòÉ
  468.  
  469. Xmodem CRC and Xmodem_Checksum are similar except CRC has better error 
  470. detection then Checksum. Almost anywhere you call will offer at least one of 
  471. these protocols. 
  472.  
  473.  
  474. ΓòÉΓòÉΓòÉ 5.1.3. 1k-Xmodem ΓòÉΓòÉΓòÉ
  475.  
  476. 1k-Xmodem uses the same error detection as Xmodem_CRC, but uses 1024 byte 
  477. blocks instead of 128 byte blocks. This allows for greater throughput (higher 
  478. characters per second) with roughly the same error detection. 
  479.  
  480.  
  481. ΓòÉΓòÉΓòÉ 5.1.4. Ymodem ΓòÉΓòÉΓòÉ
  482.  
  483. Ymodem uses the same error detection and block size as 1k-Xmodem, but is a 
  484. batch protocol. This means that in the first block the file size and name are 
  485. sent. This keeps the receiver from having to type in the filename. it also 
  486. allows you to send more then one file without have to start the transfer again. 
  487. This protocol is second to Zmodem, in our opinion, when using non-error 
  488. correcting modems. 
  489.  
  490.  
  491. ΓòÉΓòÉΓòÉ 5.1.5. Ymodem-g ΓòÉΓòÉΓòÉ
  492.  
  493. Ymodem-g is identical to Ymodem except it has no error correction. If an error 
  494. is detected the transfer aborts. Because of this Ymodem-g should only be used 
  495. with error correction modems. Pmcomm will allow you to use this protocol 
  496. anytime, but again care should be taken on what hardware it is used with. With 
  497. the proper hardware Ymodem-g has the fastest cps. 
  498.  
  499.  
  500. ΓòÉΓòÉΓòÉ 5.1.6. Zmodem ΓòÉΓòÉΓòÉ
  501.  
  502. Zmodem is almost as fast as Ymodem-g, however Zmodem does support error 
  503. correction and file recovery. It only takes one aborted Ymodem-g transfer to 
  504. lose all it's advantages. Zmodem has many advantages as for as the user is 
  505. concerned. It is probably the easiest protocol to use. If using Pmcomm with the 
  506. Auto-Zmodem download feature, the whole download is done automatically from the 
  507. Pmcomm end. You have to select the file from the sender (BBS etc..) and once 
  508. the sender starts sending, the transfer will begin on Pmcomm. It may take a 
  509. moment before the sender sends the first sequence, so wait a moment. Some of 
  510. the advanced features of Zmodem are listed below. Zmodem supports; 
  511.  
  512.   1. CRC-32 and CRC-16. The additional error detection of 32 bit CRC is 
  513.      supported. 
  514.  
  515.   2. File recovery. If a Zmodem download is aborted for any reason the transfer 
  516.      will resume at the point where it was  aborted. You don't have to start 
  517.      the whole transfer over. 
  518.  
  519.   3. Auto-Download. When a Zmodem sending program starts up it first sends a rz 
  520.      and then a carriage return. Pmcomm will monitor for the startup sequence 
  521.      and automatically start the Zmodem download. Great care has been taken to 
  522.      make sure that it really is a Zmodem transfer and not someone typing it in 
  523.      at the keyboard (at either end). This feature makes downloading with 
  524.      Zmodem much faster and much easier. 
  525.  
  526.   4. Variable length headers. This reduces the amount of overhead that accrues 
  527.      with sending Zmodem headers. This is only used if both the sender and 
  528.      receiver support it. 
  529.  
  530.   5. RLE encoding. Run length encoding is a form of file compression. Instead 
  531.      of sending 20 spaces it will send a space and the number 20. The receiver 
  532.      will then decompress it. Because of the multi-thread (tasking) 
  533.      capabilities of OS/2 this works much better then with DOS. This also is 
  534.      only used if both the sender and receiver support it. 
  535.  
  536.   6. Variable length receive buffers. Some Zmodem receive programs have 
  537.      problems with writing to the disk and receiving from the comport at the 
  538.      same time. If necessary Zmodem will wait for an ACK from the receiver 
  539.      after the specified buffer size has been sent. This will only be done if 
  540.      the receiver requests it. 
  541.  
  542.   7. Retains original file size. Some people say that because Zmodem headers 
  543.      are larger that there is two much overhead. This really isn't the case. 
  544.      For example if comparing Zmodem to Ymodem-g (full flow Ymodem), Ymodem-g 
  545.      has less overhead with each packet. However Ymodem-g rounds the file size 
  546.      up to an even 128 byte size. In some cases it is even rounded up 1024 
  547.      bytes. This is done because Ymodem (g or other) only supports two block 
  548.      sizes, 128 and 1024 (the block size is actually 133 and 1029 to allow for 
  549.      the block header, STX or SOH, and the CRC value), so it has to send full 
  550.      blocks. However, Zmodem uses variable block sizes. The block sizes adjust 
  551.      from 32 bytes to 1024 bytes. If telephone line  quality is poor smaller 
  552.      blocks are sent so that if an error does occur less data will have to be 
  553.      resent. As the line quality improves the size of the blocks will be 
  554.      increased. The starting block size is variable depending on the connected 
  555.      baud rate. 
  556.  
  557.   8. Error recovery. Because Zmodem can resend from any place in the file 
  558.      aborted transfers are rare. 
  559.  
  560.  By reading this you can tell our favorite protocol is Zmodem. Once you have 
  561.  used Zmodem it's hard to get used to using other protocols. 
  562.  
  563.  
  564. ΓòÉΓòÉΓòÉ 5.1.7. ASCII ΓòÉΓòÉΓòÉ
  565.  
  566. The ASCII protocol can be used to transfer text files. There is no error 
  567. detection or correction available with this protocol. It is recommended that 
  568. one of the other protocols be used, even with text files. 
  569.  
  570.  
  571. ΓòÉΓòÉΓòÉ 5.1.8. CISB ΓòÉΓòÉΓòÉ
  572.  
  573. The CIS B protocol can be used to transfer files to and from CompuServe. 
  574. CompuServe B,B+ and Quick B are supported. Quick B is the fastest variant of 
  575. the B protocol and is automatically selected when it is supported on the host 
  576. computer. The CIS B protocol is an automatic protocol where the host initiates 
  577. the transfer and Pmcomm will automatically go into the send or receive mode. If 
  578. you are sending a file, the file must exist in the download directory of 
  579. Pmcomm. If Pmcomm is unable to find the file then the transfer will abort. 
  580. Pmcomm can be configured to ignore the CIS B protocol by deselecting the 
  581. Automatic CIS B option in the Protocol Option Dialog. Pmcomm may run slightly 
  582. faster in terminal mode without this selection. Under most systems the 
  583. difference will not be detectable. Another option for CIS B is for file 
  584. recovery. What this option will do is if you started a download and aborted the 
  585. transfer you can then re-start the transfer and CIS B will resume from the 
  586. place where it was aborted. This can be very handy in poor phone line 
  587. conditions. The packet size for CIS B is adjusted by the connecting baud rate. 
  588. For example if you are connected to CompuServe at 2400 baud the packet size 
  589. will be 1024 bytes. If you connect at 1200 baud the packet size will be 512 
  590. bytes. This allows for speedy error recovery in case a error occurs because on 
  591. phone line noise. Downloads will automatically be placed in the Pmcomm download 
  592. directory and the download directory will automatically searched for any 
  593. uploaded files. If you specify a path with the filename when  CompuServe asks 
  594. for a filename for your computer, then this path will be used. CIS B should be 
  595. the protocol used when transferring files to and from CompuServe. 
  596.  
  597.  
  598. ΓòÉΓòÉΓòÉ 5.1.9. Save to Dial Directory ΓòÉΓòÉΓòÉ
  599.  
  600. When this option is selected the file transfer protocol that is selected will 
  601. be saved into the dialing directory for this number. The next time a file 
  602. transfer is used when connected to this number this same protocol will be 
  603. selected and all the user will have to do is press the Ok button. If you do not 
  604. want this protocol save then deselect this option. 
  605.  
  606.  
  607. ΓòÉΓòÉΓòÉ 5.2. Upload ΓòÉΓòÉΓòÉ
  608.  
  609. When sending a file to a remote computer you must select the same protocol that 
  610. the remote computer will use to receive the file. After selecting the proper 
  611. protocol, a file open dialog box will have you select the file you wish to 
  612. send. You can either double click on the file name or select the file and click 
  613. on the OK button. If you have Auto_CISB selected in the protocol options area, 
  614. Pmcomm will automatically start the transfer as soon as the remote computer 
  615. sends the transfer request. With a CISB transfer the filename is specified on 
  616. the host and the file open dialog box is not displayed. 
  617.  
  618.  
  619. ΓòÉΓòÉΓòÉ 5.2.1. Xmodem Checksum ΓòÉΓòÉΓòÉ
  620.  
  621. Xmodem Checksum is one of the oldest protocols around and some people still use 
  622. it exclusively. It is a moderately fast protocol that has fairly good error 
  623. detection. 
  624.  
  625.  
  626. ΓòÉΓòÉΓòÉ 5.2.2. Xmodem CRC ΓòÉΓòÉΓòÉ
  627.  
  628. Xmodem CRC and Xmodem_Checksum are similar except CRC as better error detection 
  629. then Checksum. Almost anywhere you call will offer at least one of these 
  630. protocols. 
  631.  
  632.  
  633. ΓòÉΓòÉΓòÉ 5.2.3. 1k-Xmodem ΓòÉΓòÉΓòÉ
  634.  
  635. 1k-Xmodem uses the same error detection as Xmodem_CRC, but uses 1024 byte 
  636. blocks instead of 128 byte blocks. This allows for greater throughput (higher 
  637. characters per second) with roughly the same error detection. 
  638.  
  639.  
  640. ΓòÉΓòÉΓòÉ 5.2.4. Ymodem ΓòÉΓòÉΓòÉ
  641.  
  642. Ymodem uses the same error detection and block size as 1k-Xmodem, but is a 
  643. batch protocol. This means that in the first block the file size and name are 
  644. sent. This keeps the receiver from having to type in the filename. it also 
  645. allows you to send more then one file without have to start the transfer again. 
  646. This protocol is second to Zmodem, in our opinion, when using non-error 
  647. correcting modems. 
  648.  
  649.  
  650. ΓòÉΓòÉΓòÉ 5.2.5. Ymodem-g ΓòÉΓòÉΓòÉ
  651.  
  652. Ymodem-g is identical to Ymodem except it has no error correction. If an error 
  653. is detected the transfer aborts. Because of this Ymodem-g should only be used 
  654. with error correction modems. Pmcomm will allow you to use this protocol 
  655. anytime, but again care should be taken on what hardware it is used with. With 
  656. the proper hardware Ymodem-g has the fastest cps. 
  657.  
  658.  
  659. ΓòÉΓòÉΓòÉ 5.2.6. Zmodem ΓòÉΓòÉΓòÉ
  660.  
  661. Zmodem is almost as fast as Ymodem-g, however Zmodem does support error 
  662. correction and file recovery. It only takes one aborted Ymodem-g transfer to 
  663. lose all it's advantages. Zmodem has many advantages as for as the user is 
  664. concerned. It is probably the easiest protocol to use. If using Pmcomm with the 
  665. auto-Zmodem download feature, the whole download is done automatically from the 
  666. Pmcomm end. You have to select the file from the sender (BBS etc..) and once 
  667. the sender starts sending, the transfer will begin on Pmcomm. It may take a 
  668. moment before the sender sends the first sequence, so wait a moment. Some of 
  669. the advanced features of Zmodem are listed below. Zmodem supports; 
  670.  
  671.   1. CRC-32 and CRC-16. The additional error detection of 32 bit CRC is 
  672.      supported. 
  673.  
  674.   2. File recovery. If a Zmodem download is aborted for any reason the transfer 
  675.      will resume at the point where it was  aborted. You don't have to start 
  676.      the whole transfer over. 
  677.  
  678.   3. Auto-Download. When a Zmodem sending program starts up it first sends a rz 
  679.      and then a carriage return. Pmcomm will monitor for the startup sequence 
  680.      and automatically start the Zmodem download. Great care has been taken to 
  681.      make sure that it really is a Zmodem transfer and not someone typing it in 
  682.      at the keyboard(at either end). This feature makes download with Zmodem 
  683.      much faster and much easier. 
  684.  
  685.   4. Variable length headers. This reduces the amount of overhead that accrues 
  686.      with sending Zmodem headers. This is only used if both the sender and 
  687.      receiver support it. 
  688.  
  689.   5. RLE encoding. Run length encoding is a form of file compression. Instead 
  690.      of sending 20 spaces it will send a space and the number 20. The receiver 
  691.      will then decompress it. Because of the multi-thread(tasking) capabilities 
  692.      of OS/2 this works much better then with DOS. This also is only used if 
  693.      both the sender and receiver support it. 
  694.  
  695.   6. Variable length receive buffers. Some Zmodem receive programs have 
  696.      problems with writing to the disk and receiving from the comport at the 
  697.      same time. If necessary Zmodem will wait for an ACK from the receiver 
  698.      after the specified buffer size has been sent. This will only be done if 
  699.      the receiver requests it. 
  700.  
  701.   7. Retains original file size. Some people say that because Zmodem headers 
  702.      are larger that there is two much overhead. This really isn't the case. 
  703.      For example if comparing Zmodem to Ymodem-g (full flow Ymodem), Ymodem-g 
  704.      has less overhead with each packet. However Ymodem-g rounds the file size 
  705.      up to an even 128 byte size. In some cases it is even rounded up 1024 
  706.      bytes. This is done because Ymodem (g or other) only supports two block 
  707.      sizes, 128 and 1024 (the block size is actually 133 and 1029 to allow for 
  708.      the block header, STX or SOH, and the CRC value), so it has to send full 
  709.      blocks. 
  710.  
  711.   8. Error recovery. Because Zmodem can resend from any place  in the file 
  712.      aborted transfers are rare. 
  713.  
  714.   9. Variable block sizes. The block sizes adjust from 32 bytes to 1024 bytes. 
  715.      If telephone line quality is poor smaller blocks are sent so that if an 
  716.      error does occur less data will have to be resent. As the line quality 
  717.      improves the size of the blocks will be increased. The starting block size 
  718.      is variable depending on the connected baud rate. 
  719.  
  720.  By reading this you can tell our favorite protocol is Zmodem. Once you have 
  721.  used Zmodem it's hard to get used to using other protocols. 
  722.  
  723.  
  724. ΓòÉΓòÉΓòÉ 5.2.7. ASCII ΓòÉΓòÉΓòÉ
  725.  
  726. The ASCII protocol can be used to transfer text files. There is no error 
  727. detection or correction available with this protocol. It is recommended that 
  728. one of the other protocols be used, even with text files. 
  729.  
  730.  
  731. ΓòÉΓòÉΓòÉ 5.2.8. CISB ΓòÉΓòÉΓòÉ
  732.  
  733. The CIS B protocol can be used to transfer files to and from CompuServe. 
  734. CompuServe B,B+ and Quick B are supported. Quick B is the fastest variant of 
  735. the B protocol and is automatically selected when it is supported on the host 
  736. computer. The CIS B protocol is an automatic protocol where the host initiates 
  737. the transfer and Pmcomm will automatically go into the send or receive mode. If 
  738. you are sending a file, the file must exist in the download directory of 
  739. Pmcomm. If Pmcomm is unable to find the file then the transfer will abort. 
  740. Pmcomm can be configured to ignore the CIS B protocol by deselecting the 
  741. Automatic CIS B option in the Protocol Option Dialog. Pmcomm may run slightly 
  742. faster in terminal mode with out this selection. Under most systems the 
  743. difference will not be detectable. Another option for CIS B is for file 
  744. recovery. What this option will do is if you started a download and aborted the 
  745. transfer you can then re-start the transfer and CIS B will resume from the 
  746. place where it was aborted. This can be very handy in poor phone line 
  747. conditions. The packet size for CIS B is adjusted by the connecting baud rate. 
  748. For example if you are connected to CompuServe at 2400 baud the packet size 
  749. will be 1024 bytes. If you connect at 1200 baud the packet size will be 512 
  750. bytes. This allows for speedy error recovery in case a error occurs because on 
  751. phone line noise. Downloads will automatically be placed in the Pmcomm download 
  752. directory and the download directory will automatically searched for any 
  753. uploaded files. If you specify a path with the filename when  CompuServe asks 
  754. for a filename for your computer, then this path will be used. CIS B should be 
  755. the protocol used when transferring files to and from CompuServe. 
  756.  
  757.  
  758. ΓòÉΓòÉΓòÉ 5.2.9. Save to Dial Directory ΓòÉΓòÉΓòÉ
  759.  
  760. When this option is selected the file transfer protocol that is selected will 
  761. be saved into the dialing directory for this number. The next time a file 
  762. transfer is used when connected to this number this same protocol will be 
  763. selected and all the user will have to do is press the Ok button. If you do not 
  764. want this protocol save then deselect this option. 
  765.  
  766.  
  767. ΓòÉΓòÉΓòÉ 6. Hangup ΓòÉΓòÉΓòÉ
  768.  
  769. Hang-up sends the hang-up command string (see the Option menu) and optionally 
  770. drops the dtr line to the modem. Dropping dtr is the most effective is your 
  771. modem is setup to hang-up when dtr is dropped. Using a hang-up string is also 
  772. slower, because Pmcomm has to get the modem into the command state before 
  773. sending the hang-up string. If you have dtr on and delete the hang-up string 
  774. the hang-up will be much faster. The default string is : +++~~~~ATH^M. The +++ 
  775. is the default modem attention string, which puts the modem into the command 
  776. state. The ~~~~ will make Pmcomm pause 2 seconds (.5 seconds per ~) and then 
  777. the ATH will force the modem to go on-hook (hangup). The ^M sends a carriage 
  778. return line feed combination. 
  779.  
  780.  
  781. ΓòÉΓòÉΓòÉ 7. Options ΓòÉΓòÉΓòÉ
  782.  
  783. Option allows you to tailor Pmcomm to your own tastes. The areas in option are 
  784. Port, Dial_Setup, Modem, Protocols, Paths, Macros_Setup, Screen, Terminal, 
  785. Color, Font, and Chat. The setup is not automatically saved. This allows you to 
  786. change things temporally without changing your default setup file. If you do 
  787. want to make the  changes permanent be sure to save the setup file. To save the 
  788. current setup file,  use the Save_setup command under the File menu option. 
  789.  
  790.  
  791. ΓòÉΓòÉΓòÉ 7.1. Port ΓòÉΓòÉΓòÉ
  792.  
  793. The device name should be a valid com device name. Some third party device 
  794. drivers allow you to use names other then COM1, COM2, etc., so Pmcomm does not 
  795. limit you to these names. Hardware flow control and dtr should be on for most 
  796. modems. There are currently a couple third party device drivers that support 
  797. 38400 baud, so Pmcomm has been made to support this. 
  798.  
  799.  
  800. ΓòÉΓòÉΓòÉ 7.1.1. Device Name ΓòÉΓòÉΓòÉ
  801.  
  802. The device name should be a valid com device name. Some third party device 
  803. drivers allow you to use, and in some cases require that you uses, names other 
  804. then COM1, COM2, etc., so Pmcomm does not limit you to these names. If you are 
  805. using Pmcomm across a LAN then normally there will be an Alias name for the com 
  806. port you are using on the server. See your LAN administrator for the Alias 
  807. name(s) that you should use to access the modem(s). 
  808.  
  809.  
  810. ΓòÉΓòÉΓòÉ 7.1.2. Hardware Flow Control ΓòÉΓòÉΓòÉ
  811.  
  812. Hardware Flow Control is generally the most reliable method of flow control. 
  813. There are two basic times when flow control is needed. First if Pmcomm is 
  814. sending information to the modem faster then the modem is able to send the 
  815. information flow control is needed. If flow control is not enabled then a 
  816. transmission error will occur. Second if the modem is sending information to 
  817. Pmcomm faster then Pmcomm can receive it, then Pmcomm will try to tell the 
  818. modem to stop sending the information. This can occur when an excessive about 
  819. of processing is being preformed on the computer. Hardware Flow Control uses 
  820. two modem signals to control the flow of information. For send flow control the 
  821. CTS modem line is used. For receive flow control the RTS modem line is used. If 
  822. your modem supports these flow control signals, then setup your modem and 
  823. Pmcomm for Hardware Flow Control. 
  824.  
  825.  
  826. ΓòÉΓòÉΓòÉ 7.1.3. XON/XOFF Flow Control ΓòÉΓòÉΓòÉ
  827.  
  828. Xon/Xoff Flow Control should only be used when Hardware_Flow_Control is not 
  829. available and when flow control is necessary. The only two file transfers that 
  830. will work correctly with Xon/Xoff are ASCII and Zmodem. The only other protocol 
  831. that should need flow control is Ymodem-g. 
  832.  
  833.  
  834. ΓòÉΓòÉΓòÉ 7.1.4. Use DTR ΓòÉΓòÉΓòÉ
  835.  
  836. DTR stands for Data Terminal Ready, which by lowering DTR you can signal the 
  837. device you are communicating with( usually a modem) that you wish to go off 
  838. line. If you are connected to a modem, you should set the modem up to go 
  839. on-hook when the modem detects a drop in DTR. The command for a Hayes 2400 baud 
  840. modem is AT&D2. If this option is selected in Pmcomm, then DTR will be dropped 
  841. when the hangup command is selected, or after each redial attempt. 
  842.  
  843.  
  844. ΓòÉΓòÉΓòÉ 7.1.5. Monitor DCD ΓòÉΓòÉΓòÉ
  845.  
  846. DCD stands for Data Carrier Detect and is pin 8 on an RS-232C cable. When a 
  847. carrier is detected by the modem, Pmcomm assumes that you are connected to a 
  848. remote computer. If DCD is not supported by your modem or other hardware, then 
  849. this option should be turned off. With this option turned on, if no DCD is 
  850. present then Pmcomm will not Hangup, or go into a file transfer. The command 
  851. for a Hayes 2400 baud modem is AT&C1. This will have the modem track the state 
  852. of DCD. 
  853.  
  854.  
  855. ΓòÉΓòÉΓòÉ 7.1.6. 8/N/1 ΓòÉΓòÉΓòÉ
  856.  
  857. This selection means 8 data bits, No parity, 1 stop bit. This option will be 
  858. overridden with the parameters listed in the dialing directory once you have 
  859. connected with a remote computer. 
  860.  
  861.  
  862. ΓòÉΓòÉΓòÉ 7.1.7. 7/E/1 ΓòÉΓòÉΓòÉ
  863.  
  864. This selection means 7 data bits, Even parity, 1 stop bit. This option will be 
  865. overridden with the parameters listed in the dialing directory once you have 
  866. connected with a remote computer. 
  867.  
  868.  
  869. ΓòÉΓòÉΓòÉ 7.2. Dial Setup ΓòÉΓòÉΓòÉ
  870.  
  871. This allows you to select a dialing_directory from a list box and also lets you 
  872. setup the prefix and suffix of the number to be dialed. There is a list box 
  873. that will allow you to select how the dialing directory will be sorted. You can 
  874. sort the dialing directory by, name number, baud rate, last on, number of times 
  875. called,download cps, upload cps,dial prefix, and dial suffix. You can also 
  876. select either ascending or descending order. 
  877.  
  878.  
  879. ΓòÉΓòÉΓòÉ 7.2.1. Dial Auto Selected Entries ΓòÉΓòÉΓòÉ
  880.  
  881. If the Dial Auto Selected Entries on program Startup is selected then any 
  882. entries in the dialing directory that are marked as automatically_selected , 
  883. will automatically be dialed. This option will allow you to automatically dial 
  884. selected numbers when Pmcomm is first invoked. This can be very useful if you 
  885. dial the same numbers each time you run Pmcomm. 
  886.  
  887.  
  888. ΓòÉΓòÉΓòÉ 7.2.2. Sort Dialing Directory ΓòÉΓòÉΓòÉ
  889.  
  890. The dialing_directory can be sorted by either the name, phone number, baud 
  891. rate, last time called, number of times called, download characters per second, 
  892. upload characters per second, dial prefix, or dial suffix. The directory can be 
  893. sorted in either ascending or descending order. For example you can sort the 
  894. dialing directory by last time called in descending order, and all the most 
  895. recently called numbers will be displayed at the top of the dialing directory. 
  896.  
  897.  
  898. ΓòÉΓòÉΓòÉ 7.2.3. Dialing Directory List ΓòÉΓòÉΓòÉ
  899.  
  900. A list of the available dialing_directories are displayed in a list box, so 
  901. that a default directory can be selected. The selected directory will 
  902. automatically be loaded when Pmcomm is started. You can add additional 
  903. directories by pressing the add button. 
  904.  
  905.  
  906. ΓòÉΓòÉΓòÉ 7.3. Modem ΓòÉΓòÉΓòÉ
  907.  
  908. Initialization string should have the commands in it to enable word result 
  909. codes, hang-up when dtr is dropped and enable hardware flow control. Not all of 
  910. these are supported by all modems, but use them when possible. Pause before 
  911. redial is the time Pmcomm waits before trying to re-dial a number. Seconds to 
  912. wait for carrier is how long  Pmcomm will wait for a connection before 
  913. redialing. 
  914.  
  915.  
  916. ΓòÉΓòÉΓòÉ 7.3.1. Modem Initialization String ΓòÉΓòÉΓòÉ
  917.  
  918. Initialization string should have the commands in it to enable word result 
  919. codes, hang-up when dtr is dropped and enable hardware flow control. Not all of 
  920. these are supported by all modems, but use them when possible. The default 
  921. modem string is for a Hayes 2400 baud modem. This is the default string : 
  922.  
  923.  AT&F&D2&C1M0Q0S2=255S10=30X4 
  924.  
  925.  For a Courier HST the following string should be entered. 
  926.  
  927.  AT&FM0&B1&H1&K0&R2&S1&Y0S2=43S10=30X4 
  928.  
  929.  This allows everything to be transferred to the modem at 19200 no matter what 
  930.  the connect baud is. This setting will give you the max through-put even at 
  931.  lower baud rates. To write this into memory of the HST run Pmcomm and then 
  932.  enter AT&F&W. This will set the NRAM to the factory defaults. Then type in the 
  933.  setup string and press enter. To save this to the NRAM enter AT&W. Then all 
  934.  you have to have for a initialization string in Pmcomm is an ATZ, which will 
  935.  restore these settings from the NRAM. On the HST I have the DIP switches set 
  936.  as follows: 
  937.  
  938.  up: 1,2,4,6,7,9,10 
  939.  down: 3,5,8 
  940.  
  941.  For a Hayes 9600 V.42 modem the following string should be entered. 
  942.  
  943.  AT&F&K3W1&C1&D2S36=7S0=0S2=255S7=30M0S10=30X4N1 
  944.  
  945.  
  946. ΓòÉΓòÉΓòÉ 7.3.2. Modem Pause Before Redial ΓòÉΓòÉΓòÉ
  947.  
  948. Pmcomm will pause for the specified number of seconds before attempting to 
  949. redial a phone number. Some phone systems take a few seconds before you can 
  950. redail a phone number. The default value is 3 seconds and should work for most 
  951. phone systems. 
  952.  
  953.  
  954. ΓòÉΓòÉΓòÉ 7.3.3. Modem Dial Timeout ΓòÉΓòÉΓòÉ
  955.  
  956. Pmcomm will wait for a Connect or Carrier message from the modem for up to 64 
  957. seconds. The S7 register of the modem must also be set to a value at least as 
  958. great as the dial timeout value. This can be done by issueing the following 
  959. command to the modem: ATS7=30. This would set the modem to timeout after 30 
  960. seconds. Setting the dial timeout to a value greater then 30 would not be 
  961. effective, because the modem would still timeout after 30 seconds. The default 
  962. timeout value for Pmcomm is 60 seconds. 
  963.  
  964.  
  965. ΓòÉΓòÉΓòÉ 7.4. Protocols ΓòÉΓòÉΓòÉ
  966.  
  967. The options under protocols are; 
  968.  
  969.  Auto Zmodem Download. 
  970.  
  971.  Zmodem file recovery. 
  972.  
  973.  Zmodem CRC-32. 
  974.  
  975.  Zmodem CRC-16. 
  976.  
  977.  Auto CISB Transfer. 
  978.  
  979.  CISB file recovery. 
  980.  
  981.  Import File line delay. 
  982.  
  983.  Auto Zmodem makes Pmcomm check for a Zmodem start sequence. When received 
  984.  Pmcomm automatically starts receiving the file. Zmodem file recovery allows 
  985.  Zmodem to resume a file transfer that was previously aborted. CRC-32 has 
  986.  improved error correction, but is slightly slower. If CRC-32 is not available 
  987.  Pmcomm will switch to CRC-16. Zmodem is only available on registered versions. 
  988.  Auto CISB is similar to Auto Zmodem except that both uploads and downloads can 
  989.  be started this way. This feature is for the CISB file transfer protocol. CISB 
  990.  file recovery allows CISB to resume a file transfer that was previously 
  991.  aborted. 
  992.  
  993.  
  994. ΓòÉΓòÉΓòÉ 7.5. Paths ΓòÉΓòÉΓòÉ
  995.  
  996. The download path allows you to have the files that you download, put into a 
  997. different directory. The script path is where Pmcomm looks for the scripts 
  998. listed in the dialing directory. If a script called startup.scr exists in this 
  999. directory then it will be executed each time Pmcomm is started. The capture 
  1000. path is where all screen captures are stored. These paths must contain a valid 
  1001. directory. It defaults to the directory that Pmcomm was started from. There is 
  1002. also a call logging option here which when turned on will start call logging as 
  1003. soon as Pmcomm is run. 
  1004.  
  1005.  
  1006. ΓòÉΓòÉΓòÉ 7.6. Macros Setup ΓòÉΓòÉΓòÉ
  1007.  
  1008. There are 10 user definable keyboard macros. These can be invoked by holding 
  1009. down the Alt key and pressing 0-9. Use ^M to send a carriage return. When the 
  1010. macro is invoked it will send the string that you have defined to the modem. 
  1011. Once you  have setup the macro string, it can also be selected from the main 
  1012. menu using a mouse. Other special characters are: 
  1013.  
  1014. ^H = tab character. ^J = carriage return without a line feed. ^L = form feed. 
  1015. ^[ = escape character (Ascii 27) ^C = send the Ctrl-C character (Ascii 3) ^K = 
  1016. XON character ^S = XOFF character ~  = sleep for half a second 
  1017.  
  1018. You can also send any other special character by holding down the Alt key and 
  1019. typing in the Ascii number on the numeric key pad. For example if you want to 
  1020. enter the escape character into a macro you could hold down the Alt key and 
  1021. then press the two and the seven on the numeric key pad (while still holding 
  1022. down the Alt key). When you then release the Alt key the escape character would 
  1023. be inserted into the marco. 
  1024.  
  1025.  
  1026. ΓòÉΓòÉΓòÉ 7.7. Screen ΓòÉΓòÉΓòÉ
  1027.  
  1028. This command allows you to tailor the screen handling to your tastes. The best 
  1029. thing to do is try them to see if you like them. Some features like the 
  1030. automatic horizontal scroll will probably only be used when typing messages and 
  1031. chatting. The hide window while dialing, and the hide window during a file 
  1032. transfer, will make the screen less "busy" while these tasks are going on. The 
  1033. Automatic vertical scroll, will make Pmcomm keep the cursor vertically in the 
  1034. Pmcomm window. The Automatic horizontal scroll will do the same thing only 
  1035. horizontally. The retain dialing dialog's position, will make Pmcomm restore 
  1036. the last position of the dialing dialog each time it is invoked. The same thing 
  1037. happens to the transfer dialog box if that selection is checked. If these 
  1038. options are not selected then OS/2 will decide where to place the dialog boxes. 
  1039. The Show Dial Message Box, makes Pmcomm display a message box and beeps at the 
  1040. user,when Pmcomm obtains a remote connection, until the OK button is pressed. 
  1041. This will make sure you notice that Pmcomm has a remote connection. The local 
  1042. echo on will make Pmcomm echo all keystrokes to the local screen as well as to 
  1043. the remote computer. The turn sound on option will make Pmcomm alert the user 
  1044. when certain functions have been completed. The sound must also be turned on in 
  1045. OS/2 for this option to work. This can be done through the control panel. 
  1046.  
  1047.  
  1048. ΓòÉΓòÉΓòÉ 7.8. Terminal ΓòÉΓòÉΓòÉ
  1049.  
  1050. Terminal allows you to select which emulation you wish to use. There are also 
  1051. some options for the different emulations. 
  1052.  
  1053.  
  1054. ΓòÉΓòÉΓòÉ 7.8.1. TTY emulation ΓòÉΓòÉΓòÉ
  1055.  
  1056. The TTY emulation makes Pmcomm act as a teletype device. Generally this is the 
  1057. least used emulation, but it is also the fastest. The reason for this is that 
  1058. there are very few special commands that Pmcomm has to process. None of the 
  1059. special ANSI control codes are processed. 
  1060.  
  1061.  
  1062. ΓòÉΓòÉΓòÉ 7.8.2. ANSI emulation ΓòÉΓòÉΓòÉ
  1063.  
  1064. The ANSI emulation is probably the most used. It will execute the special ANSI 
  1065. screen control commands. This allows the remote program to be able to clear the 
  1066. screen, position the cursor, and change the colors. There are other screen 
  1067. control commands also, but those are the most commonly used ones. There are 
  1068. also options to have Pmcomm ignore the ANSI color changes, so that you can use 
  1069. the colors you want, instead of the ones the remote computer uses, and to send 
  1070. the ANSI cursor position commands with the arrow keys. When using the ANSI 
  1071. emulation you can also have Pmcomm strip off the ANSI commands before saving 
  1072. the information into a capture file. This will make the capture file much more 
  1073. readable. You can also change the length of the page, to correspond to the size 
  1074. of your screen. The default for the ANSI page length is 25 lines, and under 
  1075. most cases should be left there. 
  1076.  
  1077.  
  1078. ΓòÉΓòÉΓòÉ 7.8.3. VT100 emulation ΓòÉΓòÉΓòÉ
  1079.  
  1080. In VT100 emulation, some keys have been changed to try to more closely emulate 
  1081. the VT100 keyboard. F1-F4 are now the PF keys. Because of this the F1 key will 
  1082. not display the normal help, and F3 will not exit the program. The PF keys will 
  1083. send the following characters: 
  1084.  
  1085.    F1 = ESCOP 
  1086.  
  1087.    F2 = ESCOQ 
  1088.  
  1089.    F3 = ESCOR 
  1090.  
  1091.    F4 = ESCOS 
  1092.  
  1093.  Where ESC is equal to the ASCII character hex 1B. All other hot keys will not 
  1094.  be available. When the num lock key is off the numerical key pad will be in 
  1095.  the application mode. If you are connecting to a VT220 Host you can use these 
  1096.  keys to send the VT220 PF key values. For example pressing the 1 on the 
  1097.  numeric key pad will send the VT220 PF1 key. Pressing the 3 on the numeric key 
  1098.  pad will send the VT220 PF3 key, and so on.With the num lock on the numbers 
  1099.  will be sent. The plus key has been re-mapped to be a comma, again to be 
  1100.  compatible with the VT100 keyboard. In most cases it is best to tell the host 
  1101.  that you are a VT220 terminal. The VT100 emulation of Pmcomm supports most of 
  1102.  the VT220 commands, and will allow you to use the extra support that VT220 
  1103.  allows. If you tell the host that you are a VT220 terminal, for example, you 
  1104.  will be able to use the Ctrl-R for reset and the Ctrl-C for clear. These are 
  1105.  just a couple of examples of the additional benefit that you can get from 
  1106.  VT220. 
  1107.  
  1108.  The send DEL for backspace option is the default for many VT100 keyboards. 
  1109.  When this is selected, Pmcomm will send a hex 7f character instead of the 
  1110.  backspace character. You can still send a backspace character by pressing 
  1111.  Ctrl-Backspace. This allows you to have both these characters available at one 
  1112.  time. 
  1113.  
  1114.  The translate CR/LF for LF option will act as if it received a carriage return 
  1115.  and a line feed, each time it receives a line feed. 
  1116.  
  1117.  The line wrap option will make Pmcomm wrap the line if the line is longer then 
  1118.  the page width is. If this option is off the line will be truncated. 
  1119.  
  1120.  The Insert mode option will allow you to insert characters into the middle of 
  1121.  a line and the rest of the line will be shifted to the right to allow room for 
  1122.  the new characters. 
  1123.  
  1124.  The cursor visible option determines if the cursor will be shown on the screen 
  1125.  or not. 
  1126.  
  1127.  The Screen origin relative option determines if Pmcomm will keep everything on 
  1128.  a 25 line screen or allow it to use the scroll back buffer. In most cases this 
  1129.  option should be selected. 
  1130.  
  1131.  The last two options are to set the width of the screen. Either 80 or 132 
  1132.  columns are supported. 
  1133.  
  1134.  Most of these options can be changed from the host. The default setup should 
  1135.  work for most applications, and the host can change the options to meet 
  1136.  different needs. 
  1137.  
  1138.  
  1139. ΓòÉΓòÉΓòÉ 7.9. Color ΓòÉΓòÉΓòÉ
  1140.  
  1141. Allows you to set the background and foreground colors for the screen. There 
  1142. are 16 different background and foreground colors available, allowing for 256 
  1143. different color combinations. 
  1144.  
  1145.  
  1146. ΓòÉΓòÉΓòÉ 7.9.1. Foreground ΓòÉΓòÉΓòÉ
  1147.  
  1148. Sets up the color to be used for the text used in the Pmcomm window. 
  1149.  
  1150.  
  1151. ΓòÉΓòÉΓòÉ 7.9.2. Background ΓòÉΓòÉΓòÉ
  1152.  
  1153. Sets up the color to be used for the Pmcomm window background. 
  1154.  
  1155.  
  1156. ΓòÉΓòÉΓòÉ 7.10. Font ΓòÉΓòÉΓòÉ
  1157.  
  1158. Allows you to select either a large or small font. If you use the small font 
  1159. you more lines of text will be displayed on the same size of window. The large 
  1160. font,however is more readable on most video adapters. 
  1161.  
  1162.  
  1163. ΓòÉΓòÉΓòÉ 7.11. Chat ΓòÉΓòÉΓòÉ
  1164.  
  1165. This sets up Pmcomm to "chat" when connected to another computer that is also 
  1166. running Pmcomm. This mode automatically sets Pmcomm to echo characters locally 
  1167. and to send a carriage return line feed combination when the enter key is 
  1168. pressed. 
  1169.  
  1170.  
  1171. ΓòÉΓòÉΓòÉ 8. Macros ΓòÉΓòÉΓòÉ
  1172.  
  1173. Allows you to pick, with a mouse, the macro you wish to send. Can also be 
  1174. selected with an Alt+corresponding number keystroke. Pmcomm allows you to set 
  1175. up ten different macros. 
  1176.  
  1177.  
  1178. ΓòÉΓòÉΓòÉ 9. Script Syntax ΓòÉΓòÉΓòÉ
  1179.  
  1180. Both, internal and REXX, syntaxes are described in this section. 
  1181.  
  1182.  
  1183. ΓòÉΓòÉΓòÉ 9.1. REXX Functions ΓòÉΓòÉΓòÉ
  1184.  
  1185. This describes the function calls that are available in the rxpmcomm.dll. 
  1186. Before using any of these calls you must include these lines in your REXX 
  1187. program: 
  1188.  
  1189.  Call RxFuncadd " init_dll ","RxPmcomm","init_dll" 
  1190.  
  1191.  Parse arg port portname screen_handle dde semaphore 
  1192.  
  1193.  Call init_dll 
  1194.  
  1195.  The rxpmcomm.dll must reside in a directory listed in your LIBPATH statement 
  1196.  in config.sys. One of the default directories is \os2\dll. These functions are 
  1197.  designed to make it easier to preform tasks necessary when writing scripts for 
  1198.  asynch communications. To invoke a REXX program from a script, use the shell( 
  1199.  ) function in the script. The format of the shell function is as follows: 
  1200.  shell("\path\filename.cmd"); where filename.cmd is your REXX program. These 
  1201.  functions have been tested with the REXX that comes with OS/2 1.2 EE, but 
  1202.  should work with any totally function compatible REXX. There are some sample 
  1203.  REXX programs included. 
  1204.  
  1205.  
  1206. ΓòÉΓòÉΓòÉ 9.1.1. init_dll ΓòÉΓòÉΓòÉ
  1207.  
  1208. The init_dll function will register the functions in the rxpmcomm.dll, with 
  1209. REXX. This function must be called before any other rxpmcomm.dll function is 
  1210. called. The RxFuncadd must be called before init_dll to register this function 
  1211. with REXX. 
  1212.  
  1213.  
  1214. ΓòÉΓòÉΓòÉ 9.1.2. os2_shell ΓòÉΓòÉΓòÉ
  1215.  
  1216.  os2_shell port,port 
  1217.  
  1218.  Example 
  1219.  
  1220.  Call os2_shell port,port 
  1221.  
  1222.  Description 
  1223.  
  1224.  This command will allow a caller to shell to OS/2, remotely. The first 
  1225.  parameter is input handle and the second is the output handle. In the example 
  1226.  above, the command will receive and send the information to the com port. 
  1227.  
  1228.  Returns 
  1229.  
  1230.  1 if successful and 0 if unsuccessful. 
  1231.  
  1232.  
  1233. ΓòÉΓòÉΓòÉ 9.1.3. set_download_path ΓòÉΓòÉΓòÉ
  1234.  
  1235.  set_download_path directory,dde 
  1236.  
  1237.  Example 
  1238.  
  1239.  Call set_download_path "c:\pmcomm",dde 
  1240.  
  1241.  Description 
  1242.  
  1243.  The above example will set the download path to c:\pmcomm. This will store all 
  1244.  of the files received in that directory. The dde, is the dde value passed on 
  1245.  the command line. 
  1246.  
  1247.  Returns 
  1248.  
  1249.  1 if successful and 0 if unsuccessful. 
  1250.  
  1251.  
  1252. ΓòÉΓòÉΓòÉ 9.1.4. setcom ΓòÉΓòÉΓòÉ
  1253.  
  1254.  setcom baud,parity,data_bit,stop_bits,port 
  1255.  
  1256.  Example 
  1257.  
  1258.  Call setcom "2400","N","8","1",port 
  1259.  
  1260.  Description 
  1261.  
  1262.  This would set the com port to 2400 baud,no parity,8 data bits, 1 stop bit. 
  1263.  Baud can be from 300 to 19200 with the standard OS/2 device driver. Parity can 
  1264.  be N(none), O(odd), E(even), M(marked), or S(spaced). Data bits can be 5, 6, 7 
  1265.  or 8. Stop bits can be 1, 1.5, or 2 (1.5 and 2 can only be use with 5 data 
  1266.  bits). If a parameter is an empty string i.e. setcom "","E","7","1",port this 
  1267.  leave the baud at the current rate but set the line characteristics to 7, 
  1268.  Even, 1. 
  1269.  
  1270.  Returns 
  1271.  
  1272.  1 if successful and 0 if unsuccessful. 
  1273.  
  1274.  
  1275. ΓòÉΓòÉΓòÉ 9.1.5. sendb ΓòÉΓòÉΓòÉ
  1276.  
  1277.  sendb length,port 
  1278.  
  1279.  Example 
  1280.  
  1281.  Call sendb "300",port 
  1282.  
  1283.  Description 
  1284.  
  1285.  This call sends a break signal a certain time in milliseconds. The above 
  1286.  example would send a break signal for 300 milliseconds. This call is mostly 
  1287.  used to establish direct connects (not using a modem). Three hundred 
  1288.  milliseconds should be ok for most situations. 
  1289.  
  1290.  Returns 
  1291.  
  1292.  1 if successful and 0 if unsuccessful. 
  1293.  
  1294.  
  1295. ΓòÉΓòÉΓòÉ 9.1.6. dcd ΓòÉΓòÉΓòÉ
  1296.  
  1297.  dcd port 
  1298.  
  1299.  Example 
  1300.  
  1301.  Call dcd port 
  1302.  
  1303.  Description 
  1304.  
  1305.  This call checks to see if there is a carrier detected on the modem. You can 
  1306.  use this to see if Pmcomm is still online to a remote computer. For this 
  1307.  information to be correct the modem must support dcd and the modem must be 
  1308.  configured to support dcd. To find the command refer to your owner's manual. 
  1309.  
  1310.  Returns 
  1311.  
  1312.  1 if carrier detected and 0 if no carrier. 
  1313.  
  1314.  
  1315. ΓòÉΓòÉΓòÉ 9.1.7. char_avail ΓòÉΓòÉΓòÉ
  1316.  
  1317.  char_avail port 
  1318.  
  1319.  Example 
  1320.  
  1321.  Call char_avail port 
  1322.  
  1323.  Description 
  1324.  
  1325.  This call checks to see how many characters are available in the device 
  1326.  drivers receive buffer. You can use this function to check to see if the 
  1327.  device driver has received any characters from the com port. 
  1328.  
  1329.  Returns 
  1330.  
  1331.  Number of characters in device driver receive queue. 
  1332.  
  1333.  
  1334. ΓòÉΓòÉΓòÉ 9.1.8. read_timeout ΓòÉΓòÉΓòÉ
  1335.  
  1336.  read_timeout timeout,port 
  1337.  
  1338.  Example 
  1339.  
  1340.  Call read_timeout 20000,port 
  1341.  
  1342.  Description 
  1343.  
  1344.  This call sets the length of time (in milliseconds) that wait_for, wait_fore, 
  1345.  Get_ch will wait for a character from the com port. The above example will 
  1346.  make the functions wait for 20 seconds. 
  1347.  
  1348.  Returns 
  1349.  
  1350.  1 if successful and 0 if unsuccessful. 
  1351.  
  1352.  
  1353. ΓòÉΓòÉΓòÉ 9.1.9. Get_ch ΓòÉΓòÉΓòÉ
  1354.  
  1355.  Get_ch port 
  1356.  
  1357.  Example 
  1358.  
  1359.  Call Get_ch port 
  1360.  
  1361.  Description 
  1362.  
  1363.  This call will get a character from the com port. If no character is available 
  1364.  by the time set with read_timeout the function will return with a value of -1. 
  1365.  Otherwise the function will return with the character read. 
  1366.  
  1367.  Returns 
  1368.  
  1369.  char value if successful and -1 if unsuccessful. 
  1370.  
  1371.  
  1372. ΓòÉΓòÉΓòÉ 9.1.10. ring_detect ΓòÉΓòÉΓòÉ
  1373.  
  1374.  ring_detect port 
  1375.  
  1376.  Example 
  1377.  
  1378.  Call ring_detect port 
  1379.  
  1380.  Description 
  1381.  
  1382.  This call can be used to inform a program if the phone is ringing. 
  1383.  
  1384.  Returns 
  1385.  
  1386.  1 if ring detected, 0 if no ring, and 2 if invalid number of parameters. 
  1387.  
  1388.  
  1389. ΓòÉΓòÉΓòÉ 9.1.11. drop_dtr ΓòÉΓòÉΓòÉ
  1390.  
  1391.  drop_dtr port 
  1392.  
  1393.  Example 
  1394.  
  1395.  Call drop_dtr port 
  1396.  
  1397.  Description 
  1398.  
  1399.  This call is usually used to make a modem hang up. The modem must be 
  1400.  configured to allow this. To find the command for your modem, check your 
  1401.  owner's manual. Dtr needs to be dropped for about 2-3 seconds to make sure the 
  1402.  modem sees the drop in dtr. After that length of time raise_dtr can be called 
  1403.  to bring dtr back up. On a Hayes 2400 the above command will also keep the 
  1404.  modem from doing an auto answer until you raise_dtr again. 
  1405.  
  1406.  Returns 
  1407.  
  1408.  1 if successful and 0 if unsuccessful. 
  1409.  
  1410.  
  1411. ΓòÉΓòÉΓòÉ 9.1.12. raise_dtr ΓòÉΓòÉΓòÉ
  1412.  
  1413.  raise_dtr port 
  1414.  
  1415.  Example 
  1416.  
  1417.  Call raise_dtr port 
  1418.  
  1419.  Description This call is usually used after drop_dtr to allow the modem to 
  1420.  process commands and enable it to answer the phone. 
  1421.  
  1422.  Returns 
  1423.  
  1424.  1 if successful and 0 if unsuccessful. 
  1425.  
  1426.  
  1427. ΓòÉΓòÉΓòÉ 9.1.13. Wait_for (REXX) ΓòÉΓòÉΓòÉ
  1428.  
  1429.  Wait_for string,string,string...,port 
  1430.  
  1431.  Example 
  1432.  
  1433.  Call Wait_for "first name?","last name?",port 
  1434.  
  1435.  Description 
  1436.  
  1437.  The above example would wait for either first name?, or last name?, from the 
  1438.  com port. The function will return the index of the  string that matched. For 
  1439.  example if the Wait_for received last name?, then the result would be 2. You 
  1440.  can specify any number of strings depending on memory available. 
  1441.  
  1442.  Returns 
  1443.  
  1444.  Index of matched string or zero if timeout or error. 
  1445.  
  1446.  
  1447. ΓòÉΓòÉΓòÉ 9.1.14. Wait_fore ΓòÉΓòÉΓòÉ
  1448.  
  1449.  Wait_fore string,string,string...,port,screen_handle 
  1450.  
  1451.  Example 
  1452.  
  1453.  Call Wait_fore "first name?","last name?",port,screen_handle 
  1454.  
  1455.  Call Wait_fore "first name?",port,1 
  1456.  
  1457.  Description 
  1458.  
  1459.  The first example would wait for either first name?, or last name?, from the 
  1460.  com port and echo the out_put to the Pmcomm screen. The second example would 
  1461.  do the same except it would write the out put to StdOut(value 1) which would 
  1462.  be the REXX screen. 
  1463.  
  1464.  Returns 
  1465.  
  1466.  Index of matched string or zero if timeout or error. 
  1467.  
  1468.  
  1469. ΓòÉΓòÉΓòÉ 9.1.15. Put_s ΓòÉΓòÉΓòÉ
  1470.  
  1471.  Put_s string,port 
  1472.  
  1473.  Example 
  1474.  
  1475.  Call Put_s "first name",port 
  1476.  
  1477.  Description 
  1478.  
  1479.  This call will send string out to port. In the above example first name will 
  1480.  be sent to the com port. If port is not specified then 'string' will be sent 
  1481.  to the REXX screen. If screen_handle is specified instead of port then the 
  1482.  string will be sent to the Pmcomm screen. 
  1483.  
  1484.  Returns 
  1485.  
  1486.  Length of string actually written. 
  1487.  
  1488.  
  1489. ΓòÉΓòÉΓòÉ 9.1.16. Sleep (REXX) ΓòÉΓòÉΓòÉ
  1490.  
  1491.  Sleep time 
  1492.  
  1493.  Example 
  1494.  
  1495.  Call Sleep "1000" 
  1496.  
  1497.  Description 
  1498.  
  1499.  This call will delay the program for the amount of milliseconds specified. The 
  1500.  above example will delay the computer for one second. 
  1501.  
  1502.  Returns 
  1503.  
  1504.  Unconditionally 0. 
  1505.  
  1506.  
  1507. ΓòÉΓòÉΓòÉ 9.1.17. beep ΓòÉΓòÉΓòÉ
  1508.  
  1509.  beep frequency,duration 
  1510.  
  1511.  Example 
  1512.  
  1513.  Call beep 495,100 
  1514.  
  1515.  Description 
  1516.  
  1517.  The above example will beep the speaker. 
  1518.  
  1519.  Returns 
  1520.  
  1521.  1 if successful and 0 if unsuccessful. 
  1522.  
  1523.  
  1524. ΓòÉΓòÉΓòÉ 9.1.18. xmodem_send ΓòÉΓòÉΓòÉ
  1525.  
  1526.  xmodem_send filename,dde,semaphore 
  1527.  
  1528.  Example 
  1529.  
  1530.  Call xmodem_send "filename.ext",dde,semaphore 
  1531.  
  1532.  Description 
  1533.  
  1534.  This call will invoke the Xmodem_CRC send routine, built into Pmcomm. Once 
  1535.  issued the call will not return until the transfer either finishes or is 
  1536.  aborted. Pmcomm will show the normal transfer dialog that it does when 
  1537.  uploading from the menu. 
  1538.  
  1539.  Returns 
  1540.  
  1541.  1 if call is successful and 0 if unsuccessful. 
  1542.  
  1543.  
  1544. ΓòÉΓòÉΓòÉ 9.1.19. xmodem_receive ΓòÉΓòÉΓòÉ
  1545.  
  1546.  xmodem_receive filename,dde,semaphore 
  1547.  
  1548.  Example 
  1549.  
  1550.  Call xmodem_receive "filename.ext",dde,semaphore 
  1551.  
  1552.  Description 
  1553.  
  1554.  This call will invoke the Xmodem_CRC receive routine, built into Pmcomm. Once 
  1555.  issued the call will not return until the transfer either finishes or is 
  1556.  aborted. Pmcomm will show the normal transfer dialog that it does when 
  1557.  downloading from the menu. The file will be downloaded into the download 
  1558.  directory. The file name specified must not include a path. 
  1559.  
  1560.  Returns 
  1561.  
  1562.  1 if call is successful and 0 if unsuccessful. 
  1563.  
  1564.  
  1565. ΓòÉΓòÉΓòÉ 9.1.20. xmodem_1k_send ΓòÉΓòÉΓòÉ
  1566.  
  1567.  xmodem_1k_send filename,dde,semaphore 
  1568.  
  1569.  Example 
  1570.  
  1571.  Call xmodem_1k_send "filename.ext",dde,semaphore 
  1572.  
  1573.  Description 
  1574.  
  1575.  This call will invoke the 1K-Xmodem send routine, built into Pmcomm. Once 
  1576.  issued the call will not return until the transfer either finishes or is 
  1577.  aborted. Pmcomm will show the normal transfer dialog that it does when 
  1578.  uploading from the menu. 
  1579.  
  1580.  Returns 
  1581.  
  1582.  1 if call is successful and 0 if unsuccessful. 
  1583.  
  1584.  
  1585. ΓòÉΓòÉΓòÉ 9.1.21. xmodem_1k_receive ΓòÉΓòÉΓòÉ
  1586.  
  1587.  xmodem_1k_receive filename,dde,semaphore 
  1588.  
  1589.  Example 
  1590.  
  1591.  Call xmodem_1k_receive "filename.ext",dde,semaphore 
  1592.  
  1593.  Description 
  1594.  
  1595.  This call will invoke the 1K-Xmodem receive routine, built into Pmcomm. Once 
  1596.  issued the call will not return until the transfer either finishes or is 
  1597.  aborted. Pmcomm will show the normal transfer dialog that it does when 
  1598.  downloading from the menu. The file will be downloaded into the download 
  1599.  directory. The file name specified must not include a path. 
  1600.  
  1601.  Returns 
  1602.  
  1603.  1 if call is successful and 0 if unsuccessful. 
  1604.  
  1605.  
  1606. ΓòÉΓòÉΓòÉ 9.1.22. ymodem_send ΓòÉΓòÉΓòÉ
  1607.  
  1608.  ymodem_send filename,dde,semaphore 
  1609.  
  1610.  Example 
  1611.  
  1612.  Call ymodem_send "filename.ext",dde,semaphore 
  1613.  
  1614.  Description 
  1615.  
  1616.  This call will invoke the Ymodem send routine, built into Pmcomm. Once issued 
  1617.  the call will not return until the transfer either finishes or is aborted. 
  1618.  Pmcomm will show the normal transfer dialog that it does when uploading from 
  1619.  the menu. 
  1620.  
  1621.  Returns 
  1622.  
  1623.  1 if call is successful and 0 if unsuccessful. 
  1624.  
  1625.  
  1626. ΓòÉΓòÉΓòÉ 9.1.23. ymodem_receive ΓòÉΓòÉΓòÉ
  1627.  
  1628.  ymodem_receive dde,semaphore 
  1629.  
  1630.  Example 
  1631.  
  1632.  Call ymodem_receive dde,semaphore 
  1633.  
  1634.  Description 
  1635.  
  1636.  This call will invoke the Ymodem receive routine, built into Pmcomm. Once 
  1637.  issued the call will not return until the transfer either finishes or is 
  1638.  aborted. Pmcomm will show the normal transfer dialog that it does when 
  1639.  downloading from the menu. The file will be downloaded into the download 
  1640.  directory. This one call will receive multiple files. The filenames used are 
  1641.  the ones sent from the remote computer. 
  1642.  
  1643.  Returns 
  1644.  
  1645.  1 if call is successful and 0 if unsuccessful. 
  1646.  
  1647.  
  1648. ΓòÉΓòÉΓòÉ 9.1.24. ymodemg_send ΓòÉΓòÉΓòÉ
  1649.  
  1650.  ymodemg_send filename,dde,semaphore 
  1651.  
  1652.  Example 
  1653.  
  1654.  Call ymodemg_send "filename.ext",dde,semaphore 
  1655.  
  1656.  Description 
  1657.  
  1658.  This call will invoke the Ymodem-g send routine, built into Pmcomm. Once 
  1659.  issued the call will not return until the transfer either finishes or is 
  1660.  aborted. Pmcomm will show the normal transfer dialog that it does when 
  1661.  uploading from the menu. 
  1662.  
  1663.  Returns 
  1664.  
  1665.  1 if call is successful and 0 if unsuccessful. 
  1666.  
  1667.  
  1668. ΓòÉΓòÉΓòÉ 9.1.25. ymodemg_receive ΓòÉΓòÉΓòÉ
  1669.  
  1670.  ymodemg_receive dde,semaphore 
  1671.  
  1672.  Example 
  1673.  
  1674.  Call ymodemg_receive dde,semaphore 
  1675.  
  1676.  Description 
  1677.  
  1678.  This call will invoke the Ymodem-g receive routine, built into Pmcomm. Once 
  1679.  issued the call will not return until the transfer either finishes or is 
  1680.  aborted. Pmcomm will show the normal transfer dialog that it does when 
  1681.  downloading from the menu. The file will be downloaded into the download 
  1682.  directory. This one call will receive multiple files. The filenames used are 
  1683.  the ones sent from the remote computer. 
  1684.  
  1685.  Returns 
  1686.  
  1687.  1 if call is successful and 0 if unsuccessful. 
  1688.  
  1689.  
  1690. ΓòÉΓòÉΓòÉ 9.1.26. zmodem_send ΓòÉΓòÉΓòÉ
  1691.  
  1692.  zmodem_send filename,dde,semaphore 
  1693.  
  1694.  Example 
  1695.  
  1696.  Call zmodem_send "filename.ext",dde,semaphore 
  1697.  
  1698.  Description 
  1699.  
  1700.  This call will invoke the Zmodem send routine, built into Pmcomm. Once issued 
  1701.  the call will not return until the transfer either finishes or is aborted. 
  1702.  Pmcomm will show the normal transfer dialog that it does when uploading from 
  1703.  the menu. 
  1704.  
  1705.  Returns 
  1706.  
  1707.  1 if call is successful and 0 if unsuccessful. 
  1708.  
  1709.  
  1710. ΓòÉΓòÉΓòÉ 9.1.27. zmodem_receive ΓòÉΓòÉΓòÉ
  1711.  
  1712.  zmodem_receive dde,semaphore 
  1713.  
  1714.  Example 
  1715.  
  1716.  Call zmodem_receive dde,semaphore 
  1717.  
  1718.  Description 
  1719.  
  1720.  This call will invoke the Zmodem receive routine, built into Pmcomm. Once 
  1721.  issued the call will not return until the transfer either finishes or is 
  1722.  aborted. Pmcomm will show the normal transfer dialog that it does when 
  1723.  downloading from the menu. The file will be downloaded into the download 
  1724.  directory. This one call will receive multiple files. The filenames used are 
  1725.  the ones sent from the remote computer. 
  1726.  
  1727.  Returns 
  1728.  
  1729.  1 if call is successful and 0 if unsuccessful. 
  1730.  
  1731.  
  1732. ΓòÉΓòÉΓòÉ 9.1.28. ascii_send ΓòÉΓòÉΓòÉ
  1733.  
  1734.  ascii_send filename,dde,semaphore 
  1735.  
  1736.  Example 
  1737.  
  1738.  Call ascii_send "filename.ext",dde,semaphore 
  1739.  
  1740.  Description 
  1741.  
  1742.  This call will invoke the ASCII send routine, built into Pmcomm. Once issued 
  1743.  the call will not return until the transfer either finishes or is aborted. 
  1744.  Pmcomm will show the normal transfer dialog that it does when uploading from 
  1745.  the menu. 
  1746.  
  1747.  Returns 
  1748.  
  1749.  1 if call is successful and 0 if unsuccessful. 
  1750.  
  1751.  
  1752. ΓòÉΓòÉΓòÉ 9.1.29. ascii_receive ΓòÉΓòÉΓòÉ
  1753.  
  1754.  ascii_receive filename,dde,semaphore 
  1755.  
  1756.  Example 
  1757.  
  1758.  Call ascii_receive "filename.ext",dde,semaphore 
  1759.  
  1760.  Description 
  1761.  
  1762.  This call will invoke the ASCII receive routine, built into Pmcomm. Once 
  1763.  issued the call will not return until the transfer either finishes or is 
  1764.  aborted. Pmcomm will show the normal transfer dialog that it does when 
  1765.  downloading from the menu. The file will be downloaded into the download 
  1766.  directory. The file name specified must not include a path. 
  1767.  
  1768.  Returns 
  1769.  
  1770.  1 if call is successful and 0 if unsuccessful. 
  1771.  
  1772.  
  1773. ΓòÉΓòÉΓòÉ 9.2. Internal Functions ΓòÉΓòÉΓòÉ
  1774.  
  1775. These are script functions that are built into Pmcomm. 
  1776.  
  1777.  
  1778. ΓòÉΓòÉΓòÉ 9.2.1. wait_for (internal) ΓòÉΓòÉΓòÉ
  1779.  
  1780.  wait_for("string"); 
  1781.  
  1782.  This will wait until the word 'string' is received. One use of this is when 
  1783.  logging onto a BBS you can have it wait until prompted for a first name. 
  1784.  
  1785.  
  1786. ΓòÉΓòÉΓòÉ 9.2.2. puts ΓòÉΓòÉΓòÉ
  1787.  
  1788.  puts("string"); 
  1789.  
  1790.  This will send string to the comport. The 'C' language special character 
  1791.  '\r','\n','\b',and '\a' can also be used. 
  1792.  
  1793.  The \r means carriage return. 
  1794.  
  1795.  The \n means carriage return and line feed combination. 
  1796.  
  1797.  The \b means backspace. 
  1798.  
  1799.  The \a means alert (Pmcomm will beep). 
  1800.  
  1801.  
  1802. ΓòÉΓòÉΓòÉ 9.2.3. sleep (internal) ΓòÉΓòÉΓòÉ
  1803.  
  1804.  sleep(1000); 
  1805.  
  1806.  This will wait for the number of milliseconds specified. In this example it 
  1807.  would sleep for one second. 
  1808.  
  1809.  
  1810. ΓòÉΓòÉΓòÉ 9.2.4. call ΓòÉΓòÉΓòÉ
  1811.  
  1812.  call("filename"); 
  1813.  
  1814.  This allows you to nest scripts. If you put the name of the script that you 
  1815.  want to execute where it says filename, it will execute that script and then 
  1816.  continue. The limit on number of nested scripts is only by available stack 
  1817.  space. 
  1818.  
  1819.  
  1820. ΓòÉΓòÉΓòÉ 9.2.5. capture_on ΓòÉΓòÉΓòÉ
  1821.  
  1822.  capture_on("filename"); 
  1823.  
  1824.  Captures all screen output to a file. Replace filename with the name of the 
  1825.  file you want the output written to. 
  1826.  
  1827.  
  1828. ΓòÉΓòÉΓòÉ 9.2.6. capture_off ΓòÉΓòÉΓòÉ
  1829.  
  1830.  capture_off(); 
  1831.  
  1832.  Stops screen capture and closes the capture file. 
  1833.  
  1834.  
  1835. ΓòÉΓòÉΓòÉ 9.2.7. shell ΓòÉΓòÉΓòÉ
  1836.  
  1837.  shell("\path\filename.ext"); 
  1838.  
  1839.  Allows you to call an external program to run from a script. 
  1840.  
  1841.  
  1842. ΓòÉΓòÉΓòÉ 9.3. Sample Scripts ΓòÉΓòÉΓòÉ
  1843.  
  1844. These are scripts to help you, when you start to write your own scripts. 
  1845.  
  1846.  
  1847. ΓòÉΓòÉΓòÉ 9.3.1. REXX Sample ΓòÉΓòÉΓòÉ
  1848.  
  1849.  /* Sample Script*/ 
  1850.  
  1851.  /* This script will allow you to log on to Compu-Plane once you change the 
  1852.  strings stored in the variables called name and pass. Enter the sample.scr 
  1853.  name for the script name of the Compu-Plane phone number, and change the name 
  1854.  in the shell( ) function to the path and filename of this file.*/ 
  1855.  
  1856.  Call RxFuncadd "init_dll","RxPmcomm","init_dll" 
  1857.  
  1858.  /* This function registers the init_dll function with REXX. The init_dll 
  1859.  function will register the rest of the functions in the rxpmcomm.dll. */ 
  1860.  
  1861.  Parse arg port portname screen_handle dde semaphore 
  1862.  
  1863.  /*These are the values that Pmcomm passes on the command line to an external 
  1864.  program. These values can then be used in different REXX functions along with 
  1865.  the rxpmcomm.dll functions. Following is the description of each value: */ 
  1866.  
  1867.  /* port      = The handle of the open com port in Pmcomm */ 
  1868.  /* portname    = The name of the opened com port ie.. COM1*/ 
  1869.  /* screen_handle = Anything written to the handle will be printed */ 
  1870.            on the Pmcomm screen. */ 
  1871.  /* dde      = This must be passed to any file transfer function. It */ 
  1872.  /*         allows the rxpmcomm.dll function to communicate with */ 
  1873.  /*         Pmcomm. */ 
  1874.  /* semaphore   = This also must be passed to any file transfer */ 
  1875.  /*         function. It makes your REXX program wait until */ 
  1876.  /*         the transfer has been completed. */ 
  1877.  
  1878.  Call init_dll 
  1879.  
  1880.  /* Required before any other rxpmcomm.dll functions are called. */ 
  1881.  
  1882.  /* Setup variables  */ 
  1883.  
  1884.  name = 'first;last'  /* where first is your first name and last is*/ 
  1885.  pass = 'password'   /* your last name and password is your password.*/ 
  1886.  cr  = '0d'x 
  1887.  
  1888.  Call read_timeout '20000',port 
  1889.  
  1890.  /* This sets the read timeout for 20 seconds. This is used in the Wait_for, 
  1891.  Wait_fore, and the Get_ch functions. */ 
  1892.  
  1893.  Say 'Waiting for first name ...' 
  1894.  
  1895.  /* This will be printed on the REXX screen. */ 
  1896.  
  1897.  Do Forever 
  1898.  
  1899.  Call Wait_fore 'name','password','continue?','?->',port,screen_handle 
  1900.  
  1901.  /* This call will echo all characters to the Pmcomm screen that come from the 
  1902.  open com port. When one of the strings are matched the function will return 
  1903.  the index of the matched string in the variable result. For example if it 
  1904.  receives the string password then the result will be equal to 2. If the 
  1905.  functions waits longer then the read timeout value then result will be equal 
  1906.  to 0. */ 
  1907.  match = result 
  1908.    Select 
  1909.     When match=1 then 
  1910.      Do 
  1911.       Call Put_s name||cr,port 
  1912.       Say 'Waiting for password ...' 
  1913.      End 
  1914.     When match=2 then Call Put_s pass||cr,port 
  1915.     When match=3 then Call Put_s cr,port 
  1916.     When match=4 then Exit 
  1917.    Otherwise nop 
  1918.    End 
  1919.  End 
  1920.  Say 'Script ended  -' date( ) time( ) 
  1921.  Exit 
  1922.  
  1923.  
  1924. ΓòÉΓòÉΓòÉ 9.3.2. Internal Sample ΓòÉΓòÉΓòÉ
  1925.  
  1926.  An example script to log onto a Multi-Net Communications BBS could be: 
  1927.  
  1928.           wait_for ("first name"); 
  1929.           puts ("john\n"); 
  1930.           wait_for("last name"); 
  1931.           puts("doe\n"); 
  1932.           wait_for("password"); 
  1933.           puts("password\n"); 
  1934.           sleep (1000); 
  1935.           puts("\n"); 
  1936.  
  1937.  Scripts can be executed automatically when logging onto a BBS by specifying 
  1938.  the script filename in the dialing directory for that phone number. You can 
  1939.  execute a script from the  File menu at anytime. 
  1940.  
  1941.  
  1942. ΓòÉΓòÉΓòÉ 10. Installing Pmcomm Host Mode ΓòÉΓòÉΓòÉ
  1943.  
  1944. To install Pmcomm's Host Mode, change to the Pmcomm directory and run the 
  1945. host.exe program. The first prompt will ask you to enter the maximum baud rate 
  1946. of your modem. At the next prompt you must enter the number of selection that 
  1947. matches your modem the closest. If you are unsure of which selection to make, 
  1948. choose the Hayes 2400 modem as your selection. Next, you must enter the path, 
  1949. including drive, of where you wish to install the Host Mode. When prompted, 
  1950. enter your first name, last name, and password. The install program 
  1951. automatically creates a password file in the necessary format. If this is an 
  1952. "open" system new users will be stored in this file automatically. If this is a 
  1953. "closed" system only the people that are registered in this file will be able 
  1954. to access the Host Mode. The six files that the install program creates is 
  1955. HOSTPASS.FLE, HOSTDIR.FLE, HOSTHEAD.FLE, HOST.SCR, HOSTNEWU.FLE, and 
  1956. HOSTHELP.FLE. The HOSTPASS.FLE file, is where all of the users' names, 
  1957. passwords, securities, and last time on are stored. The HOSTDIR.FLE file, is a 
  1958. list of the directoties that have been created for the host mode. The 
  1959. HOSTHEAD.FLE file is the file that is displayed to users when they logon. The 
  1960. HOST.SCRr file is the main executable script. The HOSTNEWU.FLE file is the file 
  1961. that is displayed to new users. In order for a user to be able to receive help 
  1962. from the menu, the HOSTHELP.FLE must contain the information that will be 
  1963. displayed. 
  1964.  
  1965.  
  1966. ΓòÉΓòÉΓòÉ 11. Pmcomm Host Mode ΓòÉΓòÉΓòÉ
  1967.  
  1968.  /* PMCOMM HOST MODE */ 
  1969.  
  1970.  /* This sets signals to call these routines when corresponding REXX errors 
  1971.  occur. */ 
  1972.  Signal ON SYNTAX  NAME SYNTAX_ERROR 
  1973.  Signal ON NOVALUE NAME SYNTAX_ERROR 
  1974.  Signal ON HALT   NAME KILL_HOST_MODE 
  1975.  
  1976.  
  1977.  /* These are the values that Pmcomm passes on the command line to an external 
  1978.  program. These values can then be used in different REXX functions along with 
  1979.  the rxpmcomm.dll functions. Following is the description of each value: */ 
  1980.  
  1981.  
  1982.  /* port    = The handle of the open com port in 
  1983.          Pmcomm 
  1984.  portname    = The name of the opened com port ie.. 
  1985.          COM1 
  1986.  screen_handle = Anything written to the handle will be 
  1987.          printed on the Pmcomm screen. 
  1988.  dde      = This must be passed to any file 
  1989.          transfer function. It allows the 
  1990.          rxpmcomm.dll function to communicate 
  1991.          with Pmcomm. 
  1992.  semaphore   = This also must be passed to any file 
  1993.          transfer function. It makes your REXX 
  1994.          program wait until the transfer has 
  1995.          been completed. */ 
  1996.  
  1997.  
  1998.  Parse arg port portname screen_handle dde semaphore 
  1999.  Parse source . . fn . 
  2000.  
  2001.  
  2002.  /* Required before any other rxpmcomm.dll functions are called. */ 
  2003.  Call RxFuncadd "init_dll","RxPmcomm","init_dll" 
  2004.  Call init_dll 
  2005.  
  2006.  
  2007.  Expose_list = 'cr crlf bs esc port screen_handle 
  2008.          connection  dde  priv' , 
  2009.         'dir_line. dir_name. dir_desc. fname 
  2010.          lname  default_dir' , 
  2011.         'protocol last_login  total_logins 
  2012.          audit_file temp_file' , 
  2013.         'pass_file pword semaphore upload_dir 
  2014.          cmd_name. cmd_desc.', 
  2015.         'num_of_cmds help_file' 
  2016.  
  2017.  
  2018.  Call Clear_buffer 
  2019.  Call Drop_DTR port 
  2020.  Call Sleep "2000" 
  2021.  Call Raise_DTR port 
  2022.  
  2023.  
  2024.  Begin: 
  2025.  Do Main = 1 
  2026.  
  2027.  
  2028.  /* Setup variables */ 
  2029.  header_file  = "D:\PMCOMM\HOSTHEAD.FLE" 
  2030.  pass_file   = "D:\PMCOMM\HOSTPASS.FLE" 
  2031.  temp_file   = "D:\PMCOMM\HOST$$$$.FLE" 
  2032.  audit_file  = "D:\PMCOMM\HOSTAUDT.FLE" 
  2033.  help_file   = "D:\PMCOMM\HOSTHELP.FLE" 
  2034.  newuser_file = "D:\PMCOMM\HOSTNEWU.FLE" 
  2035.  dir_file   = "D:\PMCOMM\HOSTDIR.FLE" 
  2036.  upload_dir  = "D:\PMCOMM\UPLOAD" 
  2037.  
  2038.  
  2039.  /* The S0=1 must be included in the initialization string so the modem will 
  2040.  answer the phone. */ 
  2041.  modem_string = "AT &C1&D2 S0=1 X4" 
  2042.  
  2043.  
  2044.  /* If the system is designated as "OPEN", new users will be able to logon. If 
  2045.  the system is designated as "CLOSED" only users listed in the hostpass.fle 
  2046.  file will be allowed to logon. */ 
  2047.  system    = "OPEN" 
  2048.  
  2049.  
  2050.  /* If connection is designated as "DIRECT", no modem commands will be sent. */ 
  2051.  connection  = "MODEM" 
  2052.  
  2053.  
  2054.  /* If baud is designated as "AUTO", the Host Mode will match the incoming baud 
  2055.  rate. If a baud rate is listed, the Host Mode will maintain that baud rate to 
  2056.  the modem. */ 
  2057.  Baud     = "19200" 
  2058.  
  2059.  
  2060.  max_attempts = 3 
  2061.  bs  = '08'x 
  2062.  cr  = '0d'x 
  2063.  esc  = '1b'x 
  2064.  crlf = '0d0a'x 
  2065.  
  2066.  
  2067.  Parse value Directory() with orgdir 
  2068.  
  2069.  
  2070.  Call read_timeout "5000",port 
  2071.  
  2072.  
  2073.  /* This section intializes the modem. */ 
  2074.  If connection = 'MODEM' then 
  2075.   Do 
  2076.     Do Forever 
  2077.      Call Put_s 'ATZ'||cr,port 
  2078.      Call wait_for "OK",port 
  2079.      Call Sleep "2000" 
  2080.      Call Put_s modem_string||cr,port 
  2081.      Call wait_for "OK",port 
  2082.      If result = 1 then leave 
  2083.    End 
  2084.  End 
  2085.  
  2086.  
  2087.  /* This section checks for valid paths, and changes to the default directory. 
  2088.  */ 
  2089.  If system = 'CLOSED' then 
  2090.    Do 
  2091.     Parse value state_file(pass_file) with rc 
  2092.     If rc = '' then 
  2093.      Do 
  2094.       Call Put_s 'Password file missing' crlf,screen_handle 
  2095.       Call Put_s 'The password file must exist for 
  2096.       CLOSED system operation  ...' 
  2097.       crlf,screen_handle 
  2098.       Signal Kill_Host_mode 
  2099.      End 
  2100.    End 
  2101.  
  2102.  
  2103.  Parse value state_file(dir_file) with rc 
  2104.  If rc = '' then 
  2105.    Do 
  2106.     Call Put_s 'Directory file missing ...' 
  2107.     crlf,screen_handle 
  2108.     Signal Kill_Host_mode 
  2109.    End 
  2110.  i=0 
  2111.  Do until lines(dir_file) = 0 
  2112.    Parse value linein(dir_file) with temp_line 
  2113.    If substr(temp_line,1,1) = '*' then iterate 
  2114.    i=i+1 
  2115.    Parse var temp_line dir_line.i 
  2116.    Parse var dir_line.i dir_name.i dir_desc.i 
  2117.    tempname = pos("\",dir_name.i) 
  2118.    If tempname = 0 then dir_name.i = dir_name.i||'\' 
  2119.    dir_desc.i = space(dir_desc.i) 
  2120.    dir_name.i = translate(dir_name.i) 
  2121.  End 
  2122.  dir_line.0 = i 
  2123.  Parse value stream(dir_file,"c","close") with rc 
  2124.  
  2125.  
  2126.  Parse value Directory(dir_name.1) with default_dir 
  2127.  If default_dir \= '' then 
  2128.    Do 
  2129.     Call Clear 
  2130.     Call Put_s 'Default directory changed to' 
  2131.     default_dir crlf,screen_handle 
  2132.    End 
  2133.    Else do 
  2134.     Call Clear 
  2135.     Call Put_s 'Default directory' default_dir 'not 
  2136.     found ...' crlf,screen_handle 
  2137.     Signal Kill_Host_mode 
  2138.    End 
  2139.  
  2140.  
  2141.  If upload_dir \= '' then Call Set_Download_Path upload_dir,dde 
  2142.  
  2143.  
  2144.  /* Pmcomm Host Mode is now waiting for a connect message from the com port. */ 
  2145.  Connection_Pending: 
  2146.  Call Put_s 'PMCOMM now running in HOST mode' crlf crlf,screen_handle 
  2147.  Call Put_s 'Waiting for connection ...' 
  2148.  crlf,screen_handle 
  2149.  Call read_timeout "60000",port 
  2150.  If connection = 'MODEM' then 
  2151.   Do 
  2152.    If baud = "AUTO" then 
  2153.    Do 
  2154.      Do Forever 
  2155.       Call Wait_fore '1200','2400','4800','9600',port,screen_handle 
  2156.       match = result 
  2157.       Select 
  2158.          When match = 0 then iterate 
  2159.          When match = 1 then Call Setcom 
  2160.          "1200","N","8","1",port 
  2161.          When match = 2 then Call Setcom 
  2162.          "2400","N","8","1",port 
  2163.          When match = 3 then Call Setcom 
  2164.          "4800","N","8","1",port 
  2165.          When match = 4 then Call Setcom 
  2166.          "9600","N","8","1",port 
  2167.          Otherwise nop 
  2168.       End 
  2169.      Leave 
  2170.      End 
  2171.    End 
  2172.    Else Do 
  2173.      Call Setcom baud,"N","8","1",port 
  2174.      Do Forever 
  2175.       Call Wait_fore 'CONNECT',port,screen_handle 
  2176.       If result = 1 then leave 
  2177.      End 
  2178.     End 
  2179.  End 
  2180.  
  2181.  
  2182.  Call Sleep "5000" 
  2183.  /* The file HOSTHEAD.FLE is displayed to the user at this point. */ 
  2184.  Parse value Header(header_file) with rc 
  2185.  invalid_login_count = 0 
  2186.  
  2187.  
  2188.  /* This section is where the Host Mode receives the users name. */ 
  2189.  Sign_on: 
  2190.  Do Forever 
  2191.  fname = '' ; lname = '' ; pword = '' ; nuser = 'N' 
  2192.  Parse value read_with_echo("Your first name?->") with 
  2193.  rc fname . 
  2194.  If rc \=0 then leave main 
  2195.  If fname = '' then iterate 
  2196.  Parse value read_with_echo(" Your last name?->") with 
  2197.  rc lname . 
  2198.  If rc \=0 then leave main 
  2199.  If lname = '' then iterate 
  2200.  
  2201.  
  2202.  /* This section checks the password file (HOSTPASS.FLE) to see if the user is 
  2203.  listed. */ 
  2204.  Parse value read_password_file(pass_file) with rc priv 
  2205.  protocol r_pass total_logins last_login 
  2206.  If rc \= 0  then 
  2207.   Do 
  2208.    If system = 'OPEN' then 
  2209.     Do 
  2210.       Parse value read_with_echo(fname lname||", 
  2211.       correct - [Y]es or [Return], [N]o?->") 
  2212.       with rc okname . 
  2213.       If rc \=0 then leave main 
  2214.       If okname = 'N' then iterate 
  2215.       Parse value Header(newuser_file) with rc 
  2216.       Parse value read_with_echo("Would you like to 
  2217.       register - [Y]es or [Return], [N]o?->") 
  2218.       with rc nuser . 
  2219.       If rc \=0 then leave main 
  2220.       If nuser = 'N' then leave main 
  2221.       nuser = 'Y' 
  2222.       r_pass = '' 
  2223.     End 
  2224.     Else Do 
  2225.       Call Put_s crlf||"Closed System, no access allowed" crlf,port 
  2226.       Call Put_s crlf||"Closed System, no access 
  2227.       allowed" crlf,screen_handle 
  2228.       Leave main 
  2229.     End 
  2230.   End 
  2231.  
  2232.  
  2233.  /* This section gets a password from a user and checks to see if the password 
  2234.  matches the one in the password file (HOSTPASS.FLE). */ 
  2235.  Parse value read_without_echo("Enter your password 
  2236.  (.'s will echo)->") with rc pword . 
  2237.  If pword = '' then iterate 
  2238.  If rc \=0 then leave main 
  2239.  If r_pass = '' then r_pass = pword 
  2240.  If nuser  = 'Y' then Call Add_password_file(pass_file) 
  2241.  If pword \== r_pass then 
  2242.   Do 
  2243.    If invalid_login_count = max_attempts then leave 
  2244.    main 
  2245.    Call Put_s crlf||"Invalid Login Attempt - Try again" crlf,port 
  2246.    Call Put_s crlf||"Invalid Login Attempt - Try 
  2247.    again" crlf,screen_handle 
  2248.    invalid_login_count = invalid_login_count + 1 
  2249.    Iterate 
  2250.  End 
  2251.  Leave 
  2252.  End 
  2253.  
  2254.  
  2255.  /* This section loads the login message into the audit file (HOSTAUDT.FLE). */ 
  2256.  login_msg = "Login by" fname "at" time('C') 'on' 
  2257.  date('L') ', last login was on' last_login 
  2258.  Call Put_s crlf crlf||login_msg crlf,port 
  2259.  Call Put_s crlf crlf||Login_msg crlf,screen_handle 
  2260.  Call Audit(date('L') time('C') "- Login by" fname 
  2261.  lname) 
  2262.  rc = time("R") 
  2263.  
  2264.  
  2265.  /* This section displays the menu and receives a menu selection from the user. 
  2266.  */ 
  2267.  Menu_loop: 
  2268.  
  2269.  
  2270.  Do Forever 
  2271.  Call Put_s crlf crlf, port 
  2272.  Call Put_s crlf crlf, screen_handle 
  2273.  
  2274.  
  2275.  Call Build_Menu 
  2276.  
  2277.  
  2278.  cmdline = '' 
  2279.  heading = crlf crlf crlf center("--- Main Options Menu 
  2280.  ---",79) 
  2281.  Call Put_s heading crlf crlf,port 
  2282.  Call Put_s heading crlf,screen_handle 
  2283.  Do i = 1  by 2 to num_of_cmds 
  2284.    j=i+1 
  2285.    line = overlay(cmd_name.j cmd_desc.j,cmd_name.i 
  2286.    cmd_desc.i,40) 
  2287.    Call Put_s line crlf,port 
  2288.    Call Put_s line crlf,screen_handle 
  2289.    cmdline = cmdline substr(cmd_name.i,2,1) substr 
  2290.    (cmd_name.j,2,1) 
  2291.  End 
  2292.  cmdline = space(cmdline,1,',') 
  2293.  Parse value read_with_echo("Enter choice" 
  2294.  cmdline||"?->") with rc pick . 
  2295.  If rc \= 0 then leave main 
  2296.  If pick = '' then iterate 
  2297.  
  2298.  
  2299.  Select 
  2300.     When pick = "C" then Parse value Change_Dir() 
  2301.     with rc 
  2302.     When pick = "D" then Parse value 
  2303.     File_Transfer("DOWNLOAD") with rc 
  2304.     When pick = "F" then Parse value List_Files() 
  2305.     with rc 
  2306.     When pick = "G" then Parse value Good_Bye() 
  2307.     with rc 
  2308.     When pick = "H" then Parse value Help_Text() 
  2309.     with rc 
  2310.     When pick = "I" then Parse value 
  2311.     User_Information() with rc 
  2312.     When pick = "L" then Parse value 
  2313.     List_Directories() with rc 
  2314.     When pick = "S" then Parse value Shell_OS2() 
  2315.     with rc 
  2316.     When pick = "T" then Signal Kill_Host_Mode 
  2317.     When pick = "U" then Parse value 
  2318.     File_Transfer("UPLOAD") with rc 
  2319.     Otherwise iterate 
  2320.  End 
  2321.  If rc \=0 then leave main 
  2322.  End 
  2323.  
  2324.  
  2325.  /* This section hangs-up the phone and recycles Pmcomm Host Mode for the next 
  2326.  caller. */ 
  2327.  Call Clear_buffer 
  2328.  Call Drop_DTR port 
  2329.  Call Sleep "2000" 
  2330.  Call Raise_DTR port 
  2331.  Call Put_s crlf||'PMComm Host Mode Recycling' crlf,screen_handle 
  2332.  
  2333.  
  2334.  End 
  2335.  
  2336.  
  2337.  Call Clear_buffer 
  2338.  Call Drop_DTR port 
  2339.  Call Sleep "2000" 
  2340.  Call Raise_DTR port 
  2341.  Call Put_s crlf||'PMComm Host Mode Recycling' 
  2342.  crlf,screen_handle 
  2343.  Signal Begin 
  2344.  
  2345.  
  2346.  /* This clears both the local Pmcomm screen and the remote screen. */ 
  2347.  Clear: Procedure expose (expose_list) 
  2348.  Call put_s "1b5b324a"x,screen_handle 
  2349.  Call put_s "1b5b324a"x,screen_handle 
  2350.  Call put_s "1b5b324a"x,port 
  2351.  Call put_s "1b5b324a"x,port 
  2352.  Return 
  2353.  
  2354.  
  2355.  /* This routine will be called when an error is detected. */ 
  2356.  syntax_error: 
  2357.  fp = filespec("path",fn) 
  2358.  fd = filespec("drive",fn) 
  2359.  errormsg='REXX error' rc 'in line' sigl':' 
  2360.  errortext(rc) 
  2361.  errorfile = fd||fp||"SCRIPT.ERR" 
  2362.  rc = lineout(errorfile,date() time() fn '-' errormsg) 
  2363.  rc = lineout(errorfile,date() time() fn '-' 
  2364.  sourceline(sigl)) 
  2365.  Exit 
  2366.  
  2367.  
  2368.  /* This section performs both the send and receive file transfers. */ 
  2369.  File_Transfer: Procedure expose (expose_list) 
  2370.  Parse arg direction 
  2371.  
  2372.  
  2373.  Do i=1 until i=dir_line.0 
  2374.    If default_dir = dir_name.i then 
  2375.     Do 
  2376.       Call Put_s crlf||'Current directory is ['||i||'] -' dir_desc.i crlf,port 
  2377.       Call Put_s crlf||'Current directory is 
  2378.       ['||i||'] -' dir_desc.i crlf,screen_handle 
  2379.       i = 0 
  2380.       Leave 
  2381.     End 
  2382.  End 
  2383.  If i \=0 then 
  2384.    Do 
  2385.     Call Put_s crlf||"Current directory is " 
  2386.     default_dir crlf,port 
  2387.     Call Put_s crlf||"Current directory is " 
  2388.     default_dir crlf,screen_handle 
  2389.    End 
  2390.  
  2391.  
  2392.  If protocol \= 'NONE' then 
  2393.    Do 
  2394.     Call Put_s "Current file transfer protocol is" 
  2395.     protocol crlf,port 
  2396.     Call Put_s "Current file transfer protocol is" 
  2397.     protocol crlf,screen_handle 
  2398.     t_protocol = protocol 
  2399.    End 
  2400.  Do Forever 
  2401.   Parse value read_with_echo("Enter file name or Tap 
  2402.   [Return] to abort?->") with rc dfn . 
  2403.   If rc \=0 then return rc 
  2404.   Parse var dfn fn '.' ft 
  2405.   If dfn = '' then return 0 
  2406.   If ft = '' then 
  2407.     Do 
  2408.      Call Put_s crlf||"Invalid filename ..." 
  2409.      crlf,port 
  2410.      Call Put_s crlf||"Invalid filename ..." 
  2411.      crlf,screen_handle 
  2412.      Iterate 
  2413.     End 
  2414.   If direction = "DOWNLOAD" then 
  2415.     Do 
  2416.      tempname = reverse(default_dir) 
  2417.      If pos("\",tempname) = 1 then file_name = 
  2418.      default_dir||dfn 
  2419.      else file_name = default_dir||"\"||dfn 
  2420.      Parse value State_file(file_name) with rc 
  2421.      If rc = '' then 
  2422.       Do 
  2423.        Call Put_s crlf||"File not found ..." 
  2424.        crlf,port 
  2425.        Call Put_s crlf||"File not found ..." 
  2426.        crlf,screen_handle 
  2427.        Iterate 
  2428.       End 
  2429.     End 
  2430.   If direction = "UPLOAD" then 
  2431.     Do 
  2432.      tempname = reverse(default_dir) 
  2433.      If pos("\",tempname) = 1 then file_name = 
  2434.      default_dir||dfn 
  2435.      else file_name = default_dir||"\"||dfn 
  2436.      Parse value State_file(file_name) with rc 
  2437.      If rc = file_name then 
  2438.       Do 
  2439.        Call Put_s crlf||"File already exists 
  2440.        ..." crlf,port 
  2441.        Call Put_s crlf||"File already exists 
  2442.        ..." crlf,screen_handle 
  2443.        Iterate 
  2444.       End 
  2445.     End 
  2446.  Leave 
  2447.  End 
  2448.  
  2449.  
  2450.  Parse value read_with_echo("Logoff after file transfer 
  2451.  - [N]o or [Return], [Y]?->") with rc auto . 
  2452.  If rc \=0 then return rc 
  2453.  If protocol = 'NONE' then 
  2454.    Do 
  2455.     Parse value Set_protocol('NONE') with rc 
  2456.     t_protocol = protocol 
  2457.     protocol = 'NONE' 
  2458.    End 
  2459.  
  2460.  Select 
  2461.    When t_protocol = "XMODEM" & direction = 
  2462.      "DOWNLOAD"  then 
  2463.       do 
  2464.        Call Put_s crlf||"Ready to send file ..." 
  2465.        crlf,port 
  2466.        Call Put_s crlf||"Ready to send file ..." 
  2467.        crlf,screen_handle 
  2468.        Call xmodem_send file_name,dde,semaphore 
  2469.        ft_rc = result 
  2470.       end 
  2471.    When t_protocol = "XMODEM" & direction = "UPLOAD" 
  2472.    then 
  2473.       do 
  2474.        Call Put_s crlf||"Ready to receive file 
  2475.        ..." crlf,port 
  2476.        Call Put_s crlf||"Ready to receive file 
  2477.        ..." crlf,screen_handle 
  2478.        Call xmodem_receive file_name,dde,semaphore 
  2479.        ft_rc = result 
  2480.       end 
  2481.    When t_protocol = "XMODEM-1K" & direction = 
  2482.    "DOWNLOAD"  then 
  2483.       do 
  2484.        Call Put_s crlf||"Ready to send file ..." 
  2485.        crlf,port 
  2486.        Call Put_s crlf||"Ready to send file ..." 
  2487.        crlf,screen_handle 
  2488.        Call xmodem_1k_send file_name,dde,semaphore 
  2489.        ft_rc = result 
  2490.       end 
  2491.    When t_protocol = "XMODEM-1K" & direction = 
  2492.      "UPLOAD"  then 
  2493.       do 
  2494.        Call Put_s crlf||"Ready to receive file 
  2495.        ..." crlf,port 
  2496.        Call Put_s crlf||"Ready to receive file 
  2497.        ..." crlf,screen_handle 
  2498.        Call xmodem_1k_receive file_name,dde,semaphore 
  2499.        ft_rc = result 
  2500.       end 
  2501.    When t_protocol = "YMODEM" & direction = 
  2502.    "DOWNLOAD"  then 
  2503.       do 
  2504.        Call Put_s crlf||"Ready to send file ..." 
  2505.        crlf,port 
  2506.        Call Put_s crlf||"Ready to send file ..." 
  2507.        crlf,screen_handle 
  2508.        Call ymodem_send file_name,dde,semaphore 
  2509.        ft_rc = result 
  2510.       end 
  2511.    When t_protocol = "YMODEM" & direction = 
  2512.    "UPLOAD" then 
  2513.       do 
  2514.        Call Put_s crlf||"Ready to receive file 
  2515.        ..." crlf,port 
  2516.        Call Put_s crlf||"Ready to receive file 
  2517.        ..." crlf,screen_handle 
  2518.        Call ymodem_receive dde,semaphore 
  2519.        ft_rc = result 
  2520.       end 
  2521.    When t_protocol = "YMODEMG" & direction = 
  2522.    "DOWNLOAD"  then 
  2523.       do 
  2524.        Call Put_s crlf||"Ready to send file ..." 
  2525.        crlf,port 
  2526.        Call Put_s crlf||"Ready to send file ..." 
  2527.        crlf,screen_handle 
  2528.        Call ymodemg_send file_name,dde,semaphore 
  2529.        ft_rc = result 
  2530.       end 
  2531.    When t_protocol = "YMODEMG" & direction = 
  2532.    "UPLOAD"  then 
  2533.       do 
  2534.        Call Put_s crlf||"Ready to receive file 
  2535.        ..." crlf,port 
  2536.        Call Put_s crlf||"Ready to receive file 
  2537.        ..." crlf,screen_handle 
  2538.        Call ymodemg_receive dde,semaphore 
  2539.        ft_rc = result 
  2540.       end 
  2541.    When t_protocol = "ZMODEM" & direction = 
  2542.    "DOWNLOAD"  then 
  2543.       do 
  2544.        Call Put_s crlf||"Ready to send file ..." 
  2545.        crlf,port 
  2546.        Call Put_s crlf||"Ready to send file ..." 
  2547.        crlf,screen_handle 
  2548.        Call zmodem_send file_name,dde,semaphore 
  2549.        ft_rc = result 
  2550.       end 
  2551.    When t_protocol = "ZMODEM" & direction = 
  2552.    "UPLOAD"  then 
  2553.       do 
  2554.        Call Put_s crlf||"Ready to receive file 
  2555.        ..." crlf,port 
  2556.        Call Put_s crlf||"Ready to receive file 
  2557.        ..." crlf,screen_handle 
  2558.        Call zmodem_receive dde,semaphore 
  2559.        ft_rc = result 
  2560.       end 
  2561.    Otherwise return 0 
  2562.    End 
  2563.  
  2564.  
  2565.  If ft_rc = 1 then 
  2566.    Do 
  2567.     Call Sleep "3000" 
  2568.     Call Put_s crlf||'File transfer complete' 
  2569.     crlf,port 
  2570.     Call Put_s crlf||'File transfer complete' 
  2571.     crlf,screen_handle 
  2572.     If auto = "Y" then 
  2573.      Do 
  2574.       Parse value Good_bye() with rcode 
  2575.       return rcode 
  2576.      End 
  2577.     return 0 
  2578.    End 
  2579.    Else do 
  2580.     Call Sleep "3000" 
  2581.     Call Put_s crlf||'File transfer aborted' 
  2582.     crlf,port 
  2583.     Call Put_s crlf||'File transfer aborted' 
  2584.     crlf,screen_handle 
  2585.     If auto = "Y" then 
  2586.      Do 
  2587.       Parse value Good_bye() with rcode 
  2588.       return rcode 
  2589.      End 
  2590.     return 0 
  2591.    End 
  2592.  
  2593.  
  2594.  
  2595.  /* This section reads in characters from the remote computer and echoes it to 
  2596.  the local Pmcomm screen as well as the remote computer. */ 
  2597.  Read_with_echo: Procedure expose (expose_list) 
  2598.  Parse arg screen_output 
  2599.  
  2600.  
  2601.  Call Clear_buffer 
  2602.  Call Read_timeout '3000',port 
  2603.  Call Put_s crlf||screen_output,port 
  2604.  Call Put_s crlf||screen_output,screen_handle 
  2605.  line = ' ' 
  2606.  j = 0 
  2607.  time_out = 0 
  2608.  
  2609.  
  2610.  Do Forever 
  2611.  Parse value  Get_CH(port) with char_in 
  2612.  If connection = 'MODEM' then 
  2613.   Do 
  2614.    Call DCD port 
  2615.    If result = 0 then return 99 
  2616.   End 
  2617.  
  2618.  If char_in = "-1" then 
  2619.    Do 
  2620.     time_out = time_out+1 
  2621.     If time_out = 60 then 
  2622.      Do 
  2623.        Call Put_s crlf crlf||"Session being 
  2624.        cancelled due to inactivity" crlf,port 
  2625.        Call Put_s crlf crlf||"Session being 
  2626.        cancelled due to inactivity" 
  2627.        crlf,screen_handle 
  2628.        Parse value Good_bye() with rcode 
  2629.        return rcode 
  2630.      End 
  2631.     Iterate 
  2632.    End 
  2633.  
  2634.  
  2635.  If char_in = cr then 
  2636.    Do 
  2637.     Call Put_s crlf,port 
  2638.     Call Put_s crlf,screen_handle 
  2639.     line = space(line) 
  2640.     line = translate(line) 
  2641.     return 0 line 
  2642.    End 
  2643.  
  2644.  
  2645.  If char_in = bs then 
  2646.    Do 
  2647.     If j > 0 then 
  2648.      Do 
  2649.       line = delstr(line,j,1) 
  2650.       Call Put_s bs,port 
  2651.       Call Put_s bs,screen_handle 
  2652.       j=j-1 
  2653.      End 
  2654.    End 
  2655.    Else Do 
  2656.     line = line||char_in 
  2657.     Call Put_s char_in,port 
  2658.     Call Put_s char_in,screen_handle 
  2659.     j=j+1 
  2660.    End 
  2661.  End 
  2662.  
  2663.  
  2664.  /* Reads characters from the remote computer and echoes back dots to the the 
  2665.  remote screen and characters to the local Pmcomm screen. */ 
  2666.  Read_without_Echo: Procedure expose (expose_list) 
  2667.  Parse arg screen_output 
  2668.  
  2669.  
  2670.  Call Clear_buffer 
  2671.  Call Read_timeout '3000',port 
  2672.  Call Put_s crlf||screen_output,port 
  2673.  Call Put_s crlf||screen_output,screen_handle 
  2674.  line = '' 
  2675.  j=0 
  2676.  time_out = 0 
  2677.  
  2678.  
  2679.  Do Forever 
  2680.  Parse value  Get_CH(port) with char_in 
  2681.  If connection = 'MODEM' then 
  2682.   Do 
  2683.    Call DCD port 
  2684.    If result = 0 then return 99 
  2685.   End 
  2686.  
  2687.  
  2688.  If char_in = "-1" then 
  2689.    Do 
  2690.     time_out = time_out+1 
  2691.     If time_out = 60 then 
  2692.      Do 
  2693.        Call Put_s crlf crlf||"Session being 
  2694.        cancelled due to inactivity" crlf,port 
  2695.        Call Put_s crlf crlf||"Session being 
  2696.        cancelled due to inactivity" 
  2697.        crlf,screen_handle 
  2698.        Parse value Good_bye() with rcode 
  2699.        return rcode 
  2700.      End 
  2701.     Iterate 
  2702.    End 
  2703.  
  2704.  
  2705.  If char_in = cr then 
  2706.    Do 
  2707.     Call Put_s crlf,port 
  2708.     Call Put_s crlf,screen_handle 
  2709.     line = space(line) 
  2710.     line = translate(line) 
  2711.     return 0 line 
  2712.    End 
  2713.  
  2714.  
  2715.  If char_in = bs then 
  2716.    Do 
  2717.     If j > 0 then 
  2718.      Do 
  2719.       line = delstr(line,j,1) 
  2720.       Call Put_s bs,port 
  2721.       Call Put_s bs,screen_handle 
  2722.       j=j-1 
  2723.      End 
  2724.    End 
  2725.    Else Do 
  2726.     line = line||char_in 
  2727.     Call Put_s ".",port 
  2728.     Call Put_s char_in,screen_handle 
  2729.     j=j+1 
  2730.    End 
  2731.  End 
  2732.  
  2733.  
  2734.  /* This procedure flushes  the com port receive buffer. */ 
  2735.  Clear_buffer: Procedure expose (expose_list) 
  2736.  Call Read_timeout '0',port 
  2737.  Do Forever 
  2738.    Parse value Get_CH (port) with rc 
  2739.    If rc = "-1" then return 
  2740.  End 
  2741.  Return 
  2742.  
  2743.  
  2744.  /* This procedure displays a help file (HOSTHELP.FLE). */ 
  2745.  Help_text: Procedure expose (expose_list) 
  2746.  Parse value Header(help_file) with rc 
  2747.  If rc \=0 then 
  2748.    Do 
  2749.     Call put_s crlf||'Help file not available ...' crlf,port 
  2750.     Call put_s crlf||'Help file not available ...' 
  2751.     crlf,screen_handle 
  2752.    End 
  2753.  Return 0 
  2754.  
  2755.  
  2756.  /* This reads the password file (HOSTPASS.FLE) until it gets a match or 
  2757.  reaches the end of the file. */ 
  2758.  Read_password_file: Procedure expose (expose_list) 
  2759.  Parse arg pass_file 
  2760.  protocol = "NONE" 
  2761.  r_fname = '' ; r_lname = '' ; r_pass = '' ; 
  2762.  r_priv = '' 
  2763.  r_protocol = protocol ; r_total_logins = '' ; 
  2764.  r_last_login = '' 
  2765.  Do until lines(pass_file) = 0 
  2766.    Parse value linein(pass_file) with pass_line 
  2767.    If substr(pass_line,1,1) = '*' then iterate 
  2768.    Parse upper var pass_line r_fname r_lname r_pass 
  2769.    r_priv r_protocol r_total_logins r_last_login 
  2770.    If fname \== r_fname | lname \== r_lname then 
  2771.    iterate 
  2772.    If r_protocol = '' then r_protocol = protocol 
  2773.    If r_total_logins = '' then r_total_logins = 0 
  2774.    r_total_logins = r_total_logins + 1 
  2775.    If r_last_login = '' then r_last_login = 'UNKNOWN' 
  2776.    Parse value stream(pass_file,"c","close") with rc 
  2777.    return 0 r_priv r_protocol r_pass r_total_logins 
  2778.    r_last_login 
  2779.  End 
  2780.  Parse value stream(pass_file,"c","close") with rc 
  2781.  Return 99 1 protocol 'DUMMY' 1 date('L') 
  2782.  
  2783.  
  2784.  /* This procedure updates the current users information in the password file 
  2785.  (HOSTPASS.FLE). */ 
  2786.  Update_Password_file: Procedure expose (expose_list) 
  2787.  Parse arg pass_file temp_file 
  2788.  Do until lines(pass_file) = 0 
  2789.    Parse value linein(pass_file) with pass_line 
  2790.    Parse upper var pass_line r_fname r_lname r_pass 
  2791.    r_priv . 
  2792.    If fname \== r_fname | lname \== r_lname then 
  2793.     Do 
  2794.      Parse value lineout(temp_file,pass_line) 
  2795.      with rc 
  2796.     End 
  2797.     Else Do 
  2798.      last_login = Date('L') 
  2799.      pass_line = r_fname r_lname pword r_priv 
  2800.      protocol total_logins last_login 
  2801.      Parse value lineout(temp_file,pass_line) 
  2802.      with rc 
  2803.     End 
  2804.  End 
  2805.  Parse value stream(pass_file,"c","close") with rc 
  2806.  Parse value stream(temp_file,"c","close") with rc 
  2807.  Address CMD "ERASE" pass_file 
  2808.  pass_name = filespec("name",pass_file) 
  2809.  Address CMD "RENAME" temp_file pass_name 
  2810.  Return 0 
  2811.  
  2812.  
  2813.  /* This procedure adds a new user to the password file (HOSTPASS.FLE). */ 
  2814.  Add_Password_file: Procedure expose (expose_list) 
  2815.  Parse arg pass_file 
  2816.  pass_line = fname lname pword 1 protocol 1 date('L') 
  2817.  Parse value lineout(pass_file,pass_line) with rc 
  2818.  Parse value stream(pass_file,"c","close") with rc 
  2819.  Return 0 
  2820.  
  2821.  
  2822.  /* This displays a file both locally and remotely. */ 
  2823.  Header: Procedure expose (expose_list) 
  2824.  Parse arg text_file 
  2825.  Parse value state_file(text_file) with rc 
  2826.  If rc = '' then return 99 
  2827.  Call put_s crlf,port 
  2828.  Call put_s crlf,screen_handle 
  2829.  Do until lines(text_file)  = 0 
  2830.    Parse value linein(text_file) with head_line 
  2831.    If substr(head_line,1,1) = '*' then iterate 
  2832.    Call put_s head_line crlf,port 
  2833.    Call put_s head_line crlf,screen_handle 
  2834.  End 
  2835.  Parse value stream(text_file,"c","close") with rc 
  2836.  Return 0 
  2837.  
  2838.  
  2839.  /* This procedure adds the audit information to the end of the audit file 
  2840.  (HOSTAUDT.FLE). */ 
  2841.  Audit: Procedure expose (expose_list) 
  2842.  Parse arg audit_record 
  2843.  Parse value lineout(audit_file,audit_record) with rc 
  2844.  Return rc 
  2845.  
  2846.  
  2847. ΓòÉΓòÉΓòÉ 12. Pmcomm Host Mode (cont.) ΓòÉΓòÉΓòÉ
  2848.  
  2849.  /* This diplays a menu. The menu that is displayed depends upon the user's 
  2850.  security level. */ 
  2851.  Build_Menu: Procedure expose (expose_list) 
  2852.  command_tbl.  = '' 
  2853.  command_tbl.1  = "[C]hange Active Directory (or drive) 
  2854.  ; 5" 
  2855.  command_tbl.2  = "[D]ownload A File ; 1" 
  2856.  command_tbl.3  = "[F]iles (List current directory) 
  2857.  ; 1" 
  2858.  command_tbl.4  = "[G]oodbye (Disconnect) ; 0" 
  2859.  command_tbl.5  = "[H]elp (Main command help) ; 0" 
  2860.  command_tbl.6  = "[I]nformation (User defaults) ; 0" 
  2861.  command_tbl.7  = "[L]ist File Directories ; 0" 
  2862.  command_tbl.8  = "[S]hell To OS/2 ; 9" 
  2863.  command_tbl.9  = "[T]erminate Host mode ; 9" 
  2864.  command_tbl.10 = "[U]pload A File ; 1" 
  2865.  
  2866.  
  2867.  cmd_desc. = '' 
  2868.  cmd_name. = '' 
  2869.  j = 0 
  2870.  Do i = 1 until command_tbl.i = '' 
  2871.    Parse var command_tbl.i tbl_command tbl_desc ';' 
  2872.    tbl_priv 
  2873.    If tbl_priv > priv then iterate 
  2874.    j = j + 1 
  2875.    cmd_name.j = tbl_command 
  2876.    cmd_desc.j = tbl_desc 
  2877.  End 
  2878.  num_of_cmds = j 
  2879.  Return 
  2880.  
  2881.  
  2882.  /* This procedure allows a user to choose a directory and the list the files 
  2883.  within that directory. The directories that can be listed, along with their 
  2884.  corresponding descriptions, are stored in the HOSTDIR.FLE file. If a user's 
  2885.  security is less than 5, the disk directory names will not be displayed. */ 
  2886.  List_files: Procedure expose (expose_list) 
  2887.  Parse value read_with_echo("Enter wildcard for files 
  2888.  or Tap [Return] for ALL files?->") with rc wildcard . 
  2889.  If rc \=0 then return rc 
  2890.  
  2891.  
  2892.  Do i=1 until i=dir_line.0 
  2893.    If default_dir = dir_name.i then 
  2894.     Do 
  2895.       Call Put_s crlf||'Directory ['||i||'] -' dir_desc.i crlf,port 
  2896.       Call Put_s crlf||'Directory ['||i||'] -' 
  2897.       dir_desc.i crlf,screen_handle 
  2898.       Leave 
  2899.     End 
  2900.  End 
  2901.  
  2902.  
  2903.  queue = 'PMCOMMQ' 
  2904.  rc = rxqueue('delete',queue) 
  2905.  rc = rxqueue('create',queue) 
  2906.  rc = rxqueue('set',queue) 
  2907.  Address CMD 'DIR' wildcard '/N 2>NUL | RXQUEUE' queue 
  2908.  If queued() <= 5 then 
  2909.    Do 
  2910.     Call put_s crlf||'No files Found or Directory 
  2911.     Empty' crlf,port 
  2912.     Call put_s crlf||'No Files Found or Directory 
  2913.     Empty' crlf,screen_handle 
  2914.     rc = rxqueue('delete',queue) 
  2915.     Return 0 
  2916.    End 
  2917.  Do 4 
  2918.    Parse pull . 
  2919.  End 
  2920.  Do i=1 until queued()-1 <= 0 
  2921.    Parse pull d_date d_time d_bytes . d_file 
  2922.    If priv < 5 & datatype(d_bytes,'N') = 0 
  2923.    then iterate 
  2924.    outline = left(d_file,13) right(d_bytes,8) 
  2925.    right(d_date,10) 
  2926.    Call Put_s outline crlf,port 
  2927.    Call Put_s outline crlf,screen_handle 
  2928.    x = i // 21 
  2929.    If x = 0 then 
  2930.     Do 
  2931.      Parse value read_with_echo ("More - Tap 
  2932.      [Return] to continue or Q to abort?->") 
  2933.      with rc more . 
  2934.      If rc \=0 then return rc 
  2935.      If more \= '' then leave 
  2936.     End 
  2937.  End 
  2938.  rc = rxqueue('delete',queue) 
  2939.  Return 0 
  2940.  
  2941.  
  2942.  /* This section displays the available directories to the user. */ 
  2943.  List_Directories: Procedure expose (expose_list) 
  2944.  Do forever 
  2945.  Parse value read_with_echo ("List - 
  2946.  [1.."||dir_line.0||"], [L]ist, [Return] to abort?->") 
  2947.  with rc func . 
  2948.  If rc \=0 then return rc 
  2949.  If func = '' then return 0 
  2950.  If func = 'L' then 
  2951.   Do 
  2952.    Do i=1 until i=dir_line.0 
  2953.      Call Put_s '['||i||']' dir_desc.i crlf,port 
  2954.      Call Put_s '['||i||']' dir_desc.i 
  2955.      crlf,screen_handle 
  2956.      x = i // 21 
  2957.      If x = 0 then 
  2958.       Do 
  2959.        Parse value read_with_echo("More - Tap 
  2960.        [Return] to continue or Tap Any Key to 
  2961.        abort?->") with rc more . 
  2962.        If rc \=0 then return rc 
  2963.        If more \= '' then leave 
  2964.       End 
  2965.    End 
  2966.  Iterate 
  2967.  End 
  2968.  
  2969.  
  2970.  If datatype(func,'N')=1 then 
  2971.    Do 
  2972.     If func > 0 & func <= dir_line.0 then 
  2973.      Do 
  2974.        Parse value directory(dir_name.func) with 
  2975.        default_dir 
  2976.        Parse value List_Files() with rc 
  2977.      End 
  2978.    End 
  2979.  Iterate 
  2980.  End 
  2981.  Return 0 
  2982.  
  2983.  
  2984.  /* This procedure changes the current directory. */ 
  2985.  Change_dir: Procedure expose (expose_list) 
  2986.  Parse value directory() with default_dir 
  2987.  
  2988.  
  2989.  Call Put_s crlf||"Current directory is " default_dir crlf,port 
  2990.  Call Put_s crlf||"Current directory is " default_dir 
  2991.  crlf,screen_handle 
  2992.  Do Forever 
  2993.   Parse value read_with_echo("Enter new directory name 
  2994.   or Tap [Return] to abort?->") with rc newdir . 
  2995.   If rc \=0 then return rc 
  2996.   If newdir = '' then return 0 
  2997.   Parse value directory(newdir) with tempdir 
  2998.   If tempdir  \= '' then 
  2999.     Do 
  3000.      Call Put_s 'Default directory changed to' 
  3001.      newdir crlf,port 
  3002.      Call Put_s 'Default directory changed to' 
  3003.      newdir crlf,screen_handle 
  3004.      default_dir = newdir 
  3005.      upload_dir  = newdir 
  3006.      Call Set_Download_Path newdir,dde 
  3007.     End 
  3008.      Else do 
  3009.      Call Clear 
  3010.      Call Put_s crlf||'Directory' newdir 'not found 
  3011.      ...' crlf,port 
  3012.      Call Put_s crlf||'Directory' newdir 'not found 
  3013.      ...' crlf,screen_handle 
  3014.      Iterate 
  3015.     End 
  3016.   Return 0 
  3017.  End 
  3018.  
  3019.  
  3020.  /* This procedure sets the user's default file transfer protocol. */ 
  3021.  Set_protocol: Procedure expose (expose_list) 
  3022.  protocol_sel = "[X]modem [C]rc-Xmodem-1K 
  3023.  [B]atch-Ymodem [Y]modem-G [Z]modem [N]one" 
  3024.  Parse arg call_type 
  3025.  If call_type = '' then 
  3026.    Do 
  3027.     Call Put_s crlf||"Current file transfer protocol is" protocol crlf,port 
  3028.     Call Put_s crlf||"Current file transfer protocol 
  3029.     is" protocol crlf,screen_handle 
  3030.    End 
  3031.    Else Do 
  3032.     Call Put_s crlf crlf,port 
  3033.     Call Put_s crlf,screen_handle 
  3034.    End 
  3035.  
  3036.  
  3037.  cmdline = '' 
  3038.  Do i = 1 to words(protocol_sel) 
  3039.    Call Put_s word(protocol_sel,i) crlf ,port 
  3040.    Call Put_s word(protocol_sel,i) crlf ,screen_handle 
  3041.    cmdline = cmdline substr(word(protocol_sel,i),2,1) 
  3042.  End 
  3043.  cmdline = space(cmdline,1,',') 
  3044.  
  3045.  
  3046.  Do Forever 
  3047.   Parse value read_with_echo("Enter choice " cmdline 
  3048.   "or Tap [Return] to abort?->") with rc pick . 
  3049.   If rc \=0 then return rc 
  3050.   If pick = '' then return 0 
  3051.   Select 
  3052.      When pick = "X" then protocol = "XMODEM" 
  3053.      When pick = "C" then protocol = "XMODEM-1K" 
  3054.      When pick = "B" then protocol = "YMODEM" 
  3055.      When pick = "Y" then protocol = "YMODEMG" 
  3056.      When pick = "Z" then protocol = "ZMODEM" 
  3057.      When pick = "N" then protocol = "NONE" 
  3058.      Otherwise iterate 
  3059.   End 
  3060.   Leave 
  3061.  End 
  3062.  Return 0 
  3063.  
  3064.  
  3065.  /* This procedure allows a user to change their password. */ 
  3066.  Set_password: Procedure expose (expose_list) 
  3067.  Parse value read_with_echo("Enter new password or Tap 
  3068.  [Return] to abort?->") with rc tword . 
  3069.  If rc \=0 then return rc 
  3070.  If tword = '' then return 0 
  3071.  pword = tword 
  3072.  Call Update_password_file(pass_file temp_file) 
  3073.  Call Put_s crlf||'Password changed ...' crlf crlf,port 
  3074.  Call Put_s crlf||'Password changed ...' crlf 
  3075.  crlf,screen_handle 
  3076.  Return 0 
  3077.  
  3078.  
  3079.  /* This procedure allows the remote user to shell to the OS\2 prompt. To 
  3080.  return to the Host Mode the user needs to type in exit. */ 
  3081.  Shell_OS2: Procedure expose (expose_list) 
  3082.  Call OS2_Shell port,port 
  3083.  Return 0 
  3084.  
  3085.  
  3086.  /* This procedure allows a user to list their current information and to 
  3087.  change their password and their transfer protocol. */ 
  3088.  User_Information: Procedure expose (expose_list) 
  3089.  Call Put_s 'Information - Self User Alterations' crlf crlf,port 
  3090.  Call Put_s 'Information - Self User Alterations' crlf 
  3091.  crlf,screen_handle 
  3092.  Call Put_s "- First name ... :" fname crlf,port 
  3093.  Call Put_s "- First name ... :" fname 
  3094.  crlf,screen_handle 
  3095.  Call Put_s "- Last name .... :" lname crlf,port 
  3096.  Call Put_s "- Last name .... :" lname 
  3097.  crlf,screen_handle 
  3098.  Call Put_s "- Password ..... :" pword crlf,port 
  3099.  Call Put_s "- Password ..... :" pword 
  3100.  crlf,screen_handle 
  3101.  Call Put_s "- Trans Protocol :" protocol crlf,port 
  3102.  Call Put_s "- Trans Protocol :" protocol 
  3103.  crlf,screen_handle 
  3104.  Call Put_s "- Privilage .... :" priv crlf,port 
  3105.  Call Put_s "- Privilage .... :" priv 
  3106.  crlf,screen_handle 
  3107.  Call Put_s "- Directory .... :" default_dir crlf 
  3108.  crlf,port 
  3109.  Call Put_s "- Directory .... :" default_dir crlf 
  3110.  crlf,screen_handle 
  3111.  Call Put_s "- Last call was on" last_login crlf,port 
  3112.  Call Put_s "- Last call was on" last_login 
  3113.  crlf,screen_handle 
  3114.  Call Put_s "- Total number of calls todate is" 
  3115.  total_logins crlf crlf,port 
  3116.  Call Put_s "- Total number of calls todate is" 
  3117.  total_logins crlf crlf,screen_handle 
  3118.  Call Put_s "- Current date is" date() ", current time 
  3119.  is" time('C') crlf,port 
  3120.  Call Put_s "- Current date is" date() ", current time 
  3121.  is" time('C') crlf,screen_handle 
  3122.  Call Put_s "- Elapsed time this call is" time("E")%60 
  3123.  "minute(s)" crlf,port 
  3124.  Call Put_s "- Elapsed time this call is" time("E")%60 
  3125.  "minute(s)" crlf,screen_handle 
  3126.  
  3127.  
  3128.  Parse value read_with_echo("User Alterations - 
  3129.  [P]assword, [T]rans, [Return] to quit?->") with rc 
  3130.  attr 
  3131.  If rc \=0 then return rc 
  3132.  Select 
  3133.   When attr = 'T' then Parse value 
  3134.   Set_protocol('NONE') with rc 
  3135.   When attr = 'P' then Parse value Set_password() 
  3136.   with rc 
  3137.   Otherwise return 0 
  3138.  End 
  3139.  Return rc 
  3140.  
  3141.  
  3142.  /* This procedure checks to see if a file exists. */ 
  3143.  State_file: Procedure 
  3144.  Parse arg file_name 
  3145.  If file_name = '' then return file_name 
  3146.  return(stream(file_name,'c','query exists')) 
  3147.  
  3148.  
  3149.  /* This procedure logs the current user off. */ 
  3150.  Good_Bye: Procedure expose (expose_list) 
  3151.  If fname = '' | lname = '' then return 99 
  3152.  Call Put_s crlf||time("E")%60 "minute(s) logged this time." crlf,port 
  3153.  Call Put_s crlf||time("E")%60 "minute(s) logged 
  3154.  this time." crlf,screen_handle 
  3155.  Call Put_s "Tap [Enter] to LogOff now." crlf,port 
  3156.  Call Put_s "Tap [Enter] to LogOff now." 
  3157.  crlf,screen_handle 
  3158.  Call Put_s "Tap [Esc] to abort LogOff." crlf crlf,port 
  3159.  Call Put_s "Tap [Esc] to abort LogOff." crlf 
  3160.  crlf,screen_handle 
  3161.  Call Clear_Buffer 
  3162.  Call Read_timeout "1000",port 
  3163.  Do i=9 by -1 until i = 0 
  3164.   Call Put_s "Hanging up in :" i "seconds" cr,port 
  3165.   Call Put_s "Hanging up in :" i "seconds" 
  3166.   cr,screen_handle 
  3167.   Parse value Get_CH(port) with char_in 
  3168.   If char_in = "-1" then iterate 
  3169.   If char_in = esc then return 0 
  3170.   Leave 
  3171.  End 
  3172.  Call Put_s crlf||"Loggoff for" fname lname "complete" 
  3173.  crlf,port 
  3174.  Call Put_s crlf||"Loggoff for" fname lname "complete" 
  3175.  crlf ,screen_handle 
  3176.  Call Audit(date() time('C') "- Logoff by" fname lname) 
  3177.  Call Update_Password_file(pass_file temp_file) 
  3178.  Return 99 
  3179.  
  3180.  
  3181.  /* Terminates Host Mode and hangs up the phone. */ 
  3182.  Kill_host_mode: 
  3183.  Parse value directory(orgdir) with rc 
  3184.  Call Put_s crlf||"Directory reset to" orgdir crlf,screen_handle 
  3185.  Call Put_s "PMComm Host Mode Terminating ..." 
  3186.  crlf,port 
  3187.  Call Put_s "PMComm Host Mode Terminating ..." 
  3188.  crlf,screen_handle 
  3189.  If connection = 'MODEM' then 
  3190.   Do 
  3191.    Call Clear_buffer 
  3192.    Call Drop_DTR port 
  3193.    Call Sleep "2000" 
  3194.    Call Raise_DTR port 
  3195.    Call Put_s 'ATZ'||cr,port 
  3196.    Call wait_for "OK",port 
  3197.    Call Sleep "2000" 
  3198.   End 
  3199.  Exit 
  3200.  
  3201.  
  3202. ΓòÉΓòÉΓòÉ 13. How To... ΓòÉΓòÉΓòÉ
  3203.  
  3204. This section gives you examples of how to set Pmcomm up to do different things. 
  3205.  
  3206.  
  3207. ΓòÉΓòÉΓòÉ 13.1. How to Use Pmcomm with a modem pool. ΓòÉΓòÉΓòÉ
  3208.  
  3209. Because Pmcomm does not use ACDI, and will allow you to enter any valid 12 
  3210. character name for a device, it will work with a shared serial port modem pool. 
  3211. This allows you to have modems on a server that users can access from their 
  3212. workstations. This can save a considerable about of money. 
  3213.  
  3214. The following is a flash from IBMLink on how to setup a modem pool using Pmcomm 
  3215. and Lan Server. 
  3216.  
  3217. The rest of this scenario concerns the OS/2 LAN Server definitions. When LAN 
  3218. Server definitions and actions are complete, defined users at any OS/2 
  3219. Requestor can run the program from the OS/2 Public Applications Window. The 
  3220. serial port and modem at the LAN Server will be shared. To begin, logon as an 
  3221. administrator in the proper domain. Then follow instructions for the following: 
  3222.  
  3223.  
  3224.    a.  Defining the shared modem 
  3225.  
  3226.    b.  Defining the shared program files 
  3227.  
  3228.    c.  Defining the program as a public OS/2 application 
  3229.  
  3230.    d.  Defining the working directory 
  3231.  
  3232.    e.  Sharing the modem and the program 
  3233.  
  3234.    f.  Assigning the modem and the program to the users as they log on. 
  3235.  
  3236.  DEFINING THE SHARED MODEM 
  3237.  
  3238.    Follow this sequence: 
  3239.    DEFINITION 
  3240.    ALIASES 
  3241.    SERIAL DEVICES 
  3242.    --NEW-- (With cursor on --NEW--, press space bar to 
  3243.      choose, press enter or click on ACTION) 
  3244.    CREATE(Create a serial device alias - I used an 
  3245.      alias of MODEM1, chose COM1 from the device 
  3246.      pool using F4 for the list, and choose to 
  3247.      share the port at server startup) 
  3248.  
  3249.  
  3250.  *---------------------------------------------------------------------* 
  3251.  
  3252.             Create Alias - Serial Device 
  3253.  
  3254.    Complete the panel; then Enter. 
  3255.  
  3256.    Alias . . . . . . . . . . . . . . . MODEM1 
  3257.    Description . . . . . . . . . . . . Shared modem 
  3258.    Server Name . . . . . . . . . . . . Chosen with the F4 key 
  3259.    Server Device Pool. . . . . . . . . COM1 
  3260.    Priority. . . . . . . . . . . . . . 5 (chosen arbitrarily) 
  3261.    Maximum number of users . . . . . . (left blank) 
  3262.    When shared . . . . . . . . . > At server startup 
  3263.  
  3264.  |---------------------------------------------------------------------| 
  3265.  
  3266.    ENTER  Escape=Cancel  F1=Help  F4=List 
  3267.  
  3268.  *---------------------------------------------------------------------* 
  3269.  
  3270.  DEFINING THE SHARED PROGRAM FILES 
  3271.  
  3272.    Follow this sequence: 
  3273.    DEFINITION 
  3274.    ALIASES 
  3275.    FILES 
  3276.    --NEW-- (With cursor on --NEW--, press space bar to 
  3277.      choose, press enter or click on ACTION) 
  3278.    CREATE (Create the file alias) 
  3279.  
  3280.   *---------------------------------------------------------------------* 
  3281.  
  3282.              Create Alias - Files 
  3283.  
  3284.     Complete the panel; then Enter. 
  3285.  
  3286.     Alias . . . . . . . . . . . . . . . PMCOMM 
  3287.     Description . . . . . . . . . . . . Program to access shared modem 
  3288.     Server Name . . . . . . . . . . . . Chosen with the F4 key 
  3289.     Server Path to Directory. . . . . . :OS2:ASYNC:PMCOMM 
  3290.  
  3291.     Maximum number of users . . . . . . (left blank) 
  3292.     When shared . . . . . . . . . > At server startup 
  3293.  
  3294.   |---------------------------------------------------------------------| 
  3295.  
  3296.     ENTER  Escape=Cancel  F1=Help  F4=List 
  3297.  
  3298.   *---------------------------------------------------------------------* 
  3299.  
  3300.  DEFINING THE PROGRAM AS A PUBLIC OS/2 APPLICATION 
  3301.  
  3302.    Follow this sequence: 
  3303.    DEFINITION 
  3304.    APPLICATION 
  3305.    PUBLIC OS/2 APPLICATION 
  3306.    --NEW-- (With cursor on --NEW--, press space bar to 
  3307.      choose, press enter or click on ACTION) 
  3308.    CREATE 
  3309.  
  3310.   *---------------------------------------------------------------------* 
  3311.  
  3312.             Create OS/2 Application Details 
  3313.  
  3314.    Complete the panel; then Enter. 
  3315.  
  3316.    Application ID. . . . . . . . . . . PMCOMMX 
  3317.    Description . . . . . . . . . . . . Shared modem communications 
  3318.    Program location. . . . . . . . . . Remote 
  3319.    Drive or alias. . . . . . . . . . . PMCOMM 
  3320.    Remaining path to program . . . . . : 
  3321.    Command line. . . . . . . . . . . . PMCOMM.EXE 
  3322.    Prompt used for parameters? . . . . NO 
  3323.    Program type. . . . . . . . . . . . OS/2 PM 
  3324.  
  3325.   |---------------------------------------------------------------------| 
  3326.  
  3327.    ENTER  Escape=Cancel  F1=Help  F4=List 
  3328.  
  3329.   *---------------------------------------------------------------------* 
  3330.  
  3331.  DEFINING THE WORKING DIRECTORY 
  3332.  
  3333.  PMCOMM has support files that should reside in the working directory at 
  3334.  the server. If this directory is not assigned, each user must have these 
  3335.  files on their own disk. 
  3336.  
  3337.    Follow this sequence: 
  3338.    DEFINITION 
  3339.    APPLICATION 
  3340.    PUBLIC OS/2 APPLICATION 
  3341.    --PMCOMMX-- (With cursor on --PMCOMMX--, press space 
  3342.      bar to choose, press enter or click on 
  3343.      ACTION) 
  3344.    WORKING DIRECTORY 
  3345.  
  3346.   *---------------------------------------------------------------------* 
  3347.  
  3348.               Working Directory 
  3349.  
  3350.     Complete the panel; then Enter. 
  3351.  
  3352.     Working Directory . . . . . . . . . REMOTE 
  3353.     Drive or alias. . . . . . . . . . . PMCOMM 
  3354.     Remaining path to program . . . . . : 
  3355.     Assigned Drive. . . . . . . . . . . P (chosen arbitrarily) 
  3356.  
  3357.   |---------------------------------------------------------------------| 
  3358.  
  3359.     ENTER  Escape=Cancel  F1=Help  F4=List 
  3360.  
  3361.   *---------------------------------------------------------------------* 
  3362.  
  3363.  SHARING THE PROGRAM AND THE MODEM 
  3364.  
  3365.    Follow this sequence: 
  3366.    ACTION 
  3367.    RESOURCE SHARING 
  3368.    --PMCOMM-- (With cursor on --PMCOMM--, press spacebar 
  3369.      to choose, press enter or click on ACTION) 
  3370.    START SHARING 
  3371.    --MODEM1-- (With cursor on --MODEM1--, press spacebar 
  3372.      to choose, press enter or click on ACTION) 
  3373.    START SHARING 
  3374.  
  3375.  ASSIGNING RESOURCES TO USERS AS THEY LOG ON 
  3376.  
  3377.    Follow this sequence for each user, to assign MODEM1 as a user 
  3378.    logs on: 
  3379.    DEFINITION 
  3380.    USERS 
  3381.    -- User -- (With cursor on the user name, press F10) 
  3382.    LOGON 
  3383.    SERIAL DEVICE ASSIGNMENTS 
  3384.    Assign MODEM1 to a COM port 
  3385.  
  3386.    Follow this sequence for each user, to copy the program to the user's 
  3387.    START PROGRAMS window: 
  3388.    DEFINITION 
  3389.    USERS 
  3390.    -- User -- (With cursor on the user name, press spacebar 
  3391.      to choose, press enter or click on ACTION) 
  3392.    PROGRAM STARTER 
  3393.    --PMCOMMX-- (With cursor on --PMCOMMX-- press the 
  3394.      spacebar to choose) 
  3395.  
  3396.  There maybe some problems when using Ymodem-g when Pmcomm is used with a modem 
  3397.  pool. The reason for this is that hardware flow control is not available 
  3398.  across a LAN, and XON/XOFF won't work with Ymodem-g. The Pmcomm Host mode will 
  3399.  work, but it will not be able to tell if someone dropped carrier. If the user 
  3400.  hangs up normally then the host mode will work with very few changes. 
  3401.  
  3402.  
  3403. ΓòÉΓòÉΓòÉ 13.2. How to Use Pmcomm with IBMLink. ΓòÉΓòÉΓòÉ
  3404.  
  3405. If you have access to IBMLink (ask an IBM SE) you can use Pmcomm to call. The 
  3406. first thing you will need is a phone number that will work with Pmcomm. This 
  3407. type of number is call, an SS/EFS number. This stands for, Start Stop Enhanced 
  3408. Full Screen. It allows access to IBMLink through a 3708 protocol converter. To 
  3409. find a number in your area, ask your IBM SE, or order book number GC-34-22-34. 
  3410. It has a current list of all the public IBMLink phone numbers in it. 
  3411.  
  3412. Once you have the required phone number, you can add it to the Pmcomm dialing 
  3413. directory. You should set the Parity to Even,the Data bits to 7, and the Stop 
  3414. bits to 1. The terminal type should be set to VT100. Once connected you will 
  3415. see a prompt that asks you for your terminal type. If you press enter now it 
  3416. will display a list of available terminals. The best choice here is to select 
  3417. VT220, which is selection 18. Pmcomm supports most of the VT220 commands when 
  3418. in VT100 mode, and it supports all that are used with IBMLink. By selecting 
  3419. VT220 you are able to use additional commands that are not available with 
  3420. VT100. If you select VT220 the first nine PF keys will be the numeric key pad 
  3421. keys (the num lock must be off). For example PF1 will be the 1 on the key 
  3422. pad,PF2 will be 2 and so on. For PF10 it will be the F1 key,PF11 will be the F2 
  3423. key and PF12 will be the F3 key. To do a reset, press the Ctrl-R, and to do a 
  3424. clear press the Ctrl-C. 
  3425.  
  3426. Once logged onto IBMLink just follow the prompts and you shouldn't have any 
  3427. problem. 
  3428.  
  3429.  
  3430. ΓòÉΓòÉΓòÉ 13.3. How to Use a REXX program as a script. ΓòÉΓòÉΓòÉ
  3431.  
  3432. A REXX program can only be executed from Pmcomm using the shell command from an 
  3433. internal script. This script can then either be invoked from the menu or by 
  3434. entering it, into the dialing_directory . 
  3435.  
  3436.  
  3437. ΓòÉΓòÉΓòÉ 14. Troubleshooting. ΓòÉΓòÉΓòÉ
  3438.  
  3439. Following are some problems that may occur when using Pmcomm. 
  3440.  
  3441.  
  3442. ΓòÉΓòÉΓòÉ 14.1. Device Open error. ΓòÉΓòÉΓòÉ
  3443.  
  3444. This message is displayed if Pmcomm can not open the specified device. If you 
  3445. are trying to open COM1, for example, and another program already has it open 
  3446. then this message will be displayed. If you are using the com ports on the 
  3447. machine you are running Pmcomm on (not across a LAN). Then you must have the 
  3448. com port device driver installed. There are two device drivers supplied with 
  3449. OS/2, com02.sys (for IBM PS/2's), and com01.sys for AT class machines. If you 
  3450. are running a PS/2, for example, you should have a statement in your config.sys 
  3451. file, DEVICE=C:\OS2\COM02.SYS. If not you will get the device open error. The 
  3452. default when installing OS/2 is not to install the device driver, so make sure 
  3453. that you either have, DEVICE=C:OS2\COM02.SYS or DEVICE=C:\OS2\COM01.SYS in your 
  3454. config.sys file. 
  3455.  
  3456. If you get this message when trying to access a com port on a server, refer to 
  3457. the Modem_Pool section. One of the common problems is not first logging onto 
  3458. the network before trying to access the com port. Also make sure you use Alias 
  3459. names that don't conflict with names on the local machine. For example don't 
  3460. try to use the name COM1 for the name of the remote com port. Instead use a 
  3461. name like MODEM1, or PMCOMM1. 
  3462.  
  3463.  
  3464. ΓòÉΓòÉΓòÉ 14.2. File transfers not available. ΓòÉΓòÉΓòÉ
  3465.  
  3466. If you have Monitor_DCD turned on under Port Options and Pmcomm does not detect 
  3467. DCD then the upload and download options will be greyed out. You can turn the 
  3468. Monitor DCD option off and you will then be able to transfer files. Some common 
  3469. reasons for Pmcomm not being able to detect are: 
  3470.  
  3471.  Serial cable that does not support the DCD line. 
  3472.  Modem not configured to have DCD follow the state of the phone line. 
  3473.  Modem does not support DCD. 
  3474.  
  3475.  The monitor DCD option should also be turned off if using Pmcomm with a modem 
  3476.  pool. 
  3477.  
  3478.  
  3479. ΓòÉΓòÉΓòÉ 14.3. Pmcomm will not dial out. ΓòÉΓòÉΓòÉ
  3480.  
  3481. The most common cause of this is a DOS program that has corrupted the com port. 
  3482. Compiled basic program that are executed in the DOS box, for example will 
  3483. sometime poll the available devices. When this happens the com device driver is 
  3484. effected and Pmcomm will not be able to send information to the com port. When 
  3485. this happens you will have to IPL (boot) the computer. 
  3486.  
  3487.  
  3488. ΓòÉΓòÉΓòÉ 14.4. Help not available. ΓòÉΓòÉΓòÉ
  3489.  
  3490. This message will be displayed if Pmcomm can not find the pmcomm.hlp file in 
  3491. the current directory. If you have Pmcomm installed in a Group menu make sure 
  3492. that you have the working directory set to the directory that Pmcomm is 
  3493. installed in.