IMD 1.16: 29/05/2007 18:38:12 FOGCPM.067 --FOGCPM067HOSTCM BAS HOSTCM DOCKERMIT COMV KERMIT DOCOSPLNK70ASM !"#$OSPLNK70ASM,%&'()*-06-00 86 OSPLNK70COM+,-OSPLNK70DOC4./01234OSPLNK70DSC 56PLNK0124ASM789:;<=>?@ABCDEFPLNK0124ASM0 AND K<3 THEN LPRINT CHR$(7) 490 K=INSTR(SY$,"N") 500 IF K<>0 AND K<3 THEN GOTO 440 510 GOSUB 630 520 GOTO 390 530 GOSUB 320 540 PRINT " *** DONE ***";CHR$(7):CLOSE 550 GOTO 40 560 SY$="" 570 FOR I=1 TO 200 580 TT$=INKEY$ 590 IF LEN(TT$)=0 THEN GOTO 610 600 IF ASC(TT$)>31 THEN SY$=SY$+TT$ 610 NEXT I 620 RETURN 630 REM QUICK NERVE CHECK 640 GOSUB 320 650 PRINT ">" 660 FOR I=1 TO 5 670 A$=INKEY$ 680 IF A$="/" THEN CLOSE : PRINT CHR$(7): GOTO 40 690 NEXT I 700 GOSUB 270 710 RETURN >")+1 230 C$=MID$("ABCDEFGHIJKLMNOP",INDEX,1) 240 IN$=IN$+C$ 250 IN$=IN$+CHR$(13) 260 RETURN 270 REM CONSOLE TO MODEM 280 J=PEEK (3) 290 J=(J AND 252) OR 1 300 POKE 3,J 310 RETURN 320 J=PEEK (3) 330 J=(J AND 252) OR 0 340 POKE 3,J 350 RETURN 360 REM FILE SEND 370 INPUT "FILE " ;FI$ 380 OPEN "I",1,FI$ 390 IF EOF(1) THEN 530 400 LINE INPUT #1,DT$ 410 IN$="P0Z"+DT$  HOSTCM.BAS is an Osborne specific terminal interface program to the HOSTCM mainframe comms program distributed by WATSOFT, Inc. It is a little crude, but will allow error free uploading (the only thing I needed) of a file to an IBM mainframe running VM/CMS. After establishing comms with the mainframe, and booting HOSTCM on it, load up BASIC on your OZZY (make sure disk is SETUP for your modem's proper baud rate) and run HOSTCM.BAS. Everything you type will be sent to the mainframe, with the needed checksum and line end chracter appended. It will also be echoed to your screen in half-intensity. TYPE "BYE" to halt the program, and type "FILESEND" to send a file, all other input typed at the } prompt will be sent to the mainframe. Note that replies from the IBM will take a few seconds to be processed by the program. It uses a novel scanning method to get the host response. This is needed since the program talks to the modem by switching the console to the serial port. If it didn't timeout, a missed host response would lock the keyboard. The program will retransmit a record if negative acknowledged by the host, and will beep the bell if an error or text message is sent by the host during a file transfer. The message will of course be displayed on the screen. Press the "/" key to abort a file xfer. The > prompt is displayed when the program looks for this signal, but just hold the key down until you get the } prompt back (less than five seconds). For further information, check with your mainframe system manager, or WATSOFT. You'll need a list of the valid HOSTCM commands at least. Enjoy! Bob Scott Silicon Valley Chapter FOG July 1983 (edited by Jim Woolley) e that replies from the IBM will take a few seconds to be processed by the program. It uses a novel scanning method to get the host response. This is needed since the program talks to the modem by switching the console to the serial port. If it di!9"$11% !@+,w# :2+0G;"!X>Ͷp!LO yfÆýèöXé a0 0g%>Ͷ{ʿ2&6$C j" g%>2&>R {C>!"\%"^%2[%2`% d"!>R2b% *\%:b%DnF ERWC( 0A8 0 0 !>2>%!"B%:`%j1 ÿ<2`%>S´:`%2a%>2`%:&Y ÿ>F2b%E¿*ÿ>A2b%:[%2&>2&>N ÿ:P% w#:R% w#:T% w#:V%@w#:X% w#:Z%w#>2&~ 2O%:&##~ 2S%:&#~@2U%:&#~ 2W%:&#~2Y%:`%XO ÿ<2`%>S³:a%z1 ÿ<2a%:[%=G:& d"*^%#"^%>2`%!g%2&>Y ÿZ:a%n ÿ<2a%:[%=G:& d"*^%#"^%>2`%2&>Y ÿF@:[%G:&2`%2&>Y ÿ>D2b%Bc:[%G:&>2&>Y ÿ>C2b%E¿*ÿ:`% ÿ<2`%>D:[%G:&:a% ÿ<2a%:[%=G:& d"*^%#"^%>2`%2&>Y ÿ2`%2&>Y ÿFY:a%&O ÿ<2a%:[%=G:& d"*^%#"^%>2`%2&>Y ÿZ²:[%G:&%=6#| ÿ\:`%2a%>2`%2&>Y ÿ>F2b%E¿*ÿ>\Ͷ0>Ͷ0>2&\ 0!o"B%:\w!&:&O "F%:&2&*B%~#"B%*F%w#"F%x\:&2&!&O "B%!\"F%*B%~#"B%*F%w#"F%x[C>2[%2`%!"\%"^% d"!>S2b% *\%:b%DµͷÙFͲÙZx ÙS ÙB ÙC 0A 0 0:`% ÿ<2`%!g%2&:\%2&>S ÿ>Y{:[%G:&2`%>F2b%͂ ÿN§ d"*^%#"^%:[%2`%>F2b%E¿*ÿ:`% ÿ<2`%!g%"H%!]"F%x>.*H%w#"H% x *F%~#"F%!*H%w#"H% y2&*H%>$w j" g%:[%2&>F ÿ>Yˆ:[%G:&2`%>2|23%>24% t¿>Z2b%2N%>D2b%N¬ d"*^%#"^%:[%D ÿ>YI :[%G:&2`% > 2N%¿>Z2b%Nm  d"*^%#"^%:[%2&>Z ÿ>Y :[%G:&2`%\L >F2b%>B2b%N  d"*^%#"^%:[%2&>B ÿ>Ys :[%G:&2`%>C2b%N—  d"*^%#"^%:[%%5 *@%~#"@% ~#"@%!&5W_z z@*B%w#"B%ï \  !"B%>2>%:Y%O:4%.  :O%2&!!&"J%:&=I x2&:>%=Y 2>%k b k x *B%~#"B%W_z ʘ !&5*J%w#"J%  :3% :;%º *B%:>%Wz >2>%x~#ʵ >2&!&5*J%q#"J%:&@*J%w#"J%> >:3%!>%:4% 6>24% 6!"B%\:D%2D%:E%D 2E%>2D%>23%:&2&!&O "B%!\"F%*B%~#"B%*F%w#"F%xk #\:} Ù 2D%:~2E%>24%>23%2h2j2|\!g%"H%!]"F%>2&2&2\ p#< *H%~#"H%. !e"F%:&2&> 2&4 U *F%w#"F%:&<2& 2&*H%~#"H%U . *H%~#"H%U *F%w#"F%:&<2& 4 *H%6$ j" g%:9% \  :&• :&2&P_ ¢ !\6&\ x { â { :&_â  !hF6$ ]!hp\>2h2j2|\ 2&!c%>w#:&#w#G:& w#G:&w#G:&W=2&~#GDx? w#:W%w#>wx:S%2&:&=2&:U%_~::%ʯ:b%Sʯï¤!c%~_#ò!<%N! @{@@,  @G:<%x >LWG#2&W2&G:& 2&W2&G:&2&!g%"H%:&2&W*H%w#"H%GÜW 2&x?G:& *H%6:&!%"L%*L%w#"L%G:X%!%"L%*L%~#"L% >A2b% t"B ^:&O!g% >$w g%>Ͷ{>2`%:`%x& 0<2`%>2&>2&!g%6F>G mFeY0Ee:0>Ͷ{ͺ00>2`%:`%Z <2`%>2&>2&!g%6L>G FÿYE¿:>Ͷ{ͺ0>Ͷ{*$>\Ͷ{>Ͷ{!5%6!"B%\>2h2j2|\0 0>Ͷ{ X0>Ͷ{  ͠0Ô@@_:8%:7%‹{>27%à:5%Ľà_:=% {_:6%{_ G_CR :5%>25% {*B%6\\S]x?nm   _:=%{_>27%{ALA!y"_ _*B%s#"B%}\ !"B%#!>Ͷp!O ê+{% dÆW#!, >Ͷp!;O LA>Ͷ{0>Ͷ{0>Ͷ{! _A{B… y2+͐0x 0>W @ •:+>Vʤ>U2 @>Ͷ{5 2=%0#![ >Ͷp2&>Ͷ{:&26%0#![ >Ͷp2&>Ͷ{:&28%0#![ >Ͷp2&>Ͷ{:&29%0#![ >Ͷp2&>Ͷ{:&2:%V>Z>2<%x26%0#![ >Ͷ{2&>Ͷ{:&2;%0#!@ >Ͷ{2&>Ͷ{:&2<%0>Ͷ{0ͼ0>Ͷ{! :6%    ! :8%   ! :;%   1! ::%4 7  2&|}>2& :& >2& 0720_"[$!9"Y$"]$!c$"$"$>2V$2W$>2X$ R$ *]$*Y$!c$"$>2X$*[$*Y$!c$"$"$>2V$2W$>2X$ R$ *]$*[$2U$3ʠ #"_$͵'>2V$*$+"$"$!W$5?" x*_$!V$6*_$w#"_$͵]>2V$*$+"$"$!W$53?˜ 4$ R$ *]$*$>$w*$+"$ c$>2V$t "a$"_$F#"$*$"$x*$^#{͵? >2V$!W$5 *a$ R$ *]$*$>$w*$+"$ c$t~>2V$;*$+"$"$!W$5û*$+~$W#w#:W$<2W$B:W$<2W$> w#"$"$  ÓÑ  $Ç#V#^{a{_V#ʻ{"$*$"$òK{F#*$~O*$ F#~#a{_"$6#"$> p#< ͵m?=!V$6*$+"$_>2V$*$+"$"$!W$5t{ .Ž{  *$ "$ :«{*$+~@"$+w*{ *$>?w#"${0{A_*$w#"$ $:V$±!W$4*$w#"$< ^" *]$!c$"$!W$6tNx X":W$==b2W$ ["*$++"$t?ʜʜ ʔ ʔ ¤:W$ʇ>2V$ñ  :V$*$~#"$  :X$·>2X$> >2X$?   *$+"$ b" CUCCA/NIH Osborne 1 Kermit-80 - ver 3.1 $Kermit-80>$Delete it? $ $ ?Unreconized command$ ?Illegal character$ ?Not confirmed$=& T%Bad checksum$='/Waiting .....$='/Receiving ...=#5$='/Sending .....=#5$='/Completed $='/Failed $=& T%Renaming file to $ ?Unable to receive initiate$ ?Unable to receive file name$ ?Unable to receive end of file$ ?Unable to receive data$ ?Disk full$ ?Unable to receive an acknowledgement from the host$ ?Unable to find file$Unable to rename file$ ?Disk full$ ?Unable to tell host that the session is finished$ ?Unable to tell host to logout$ [Closing the log file]$ [Connected to remote host, type $C to return] $ [Connection closed, back at micro]$Control-$ Confirm with carriage return $ Input file spec (possibly wild) $ Type the new escape character: $ BYE to host (LOGOUT) and exit to CP/M CONNECT to host on selected port EXIT to CP/M FINISH running Kermit on the host HELP by giving this message LOG the terminal session to a file LOGOUT the host RECEIVE file from host SEND file to host SET a parameter SHOW the parameters STATUS of Kermit$ BAUD rate change CPM-CREATED-FILE will be sent ESCAPE character change IBM (parity and turn around handling) LOCAL-ECHO echoing (half-duplex) VT52-EMULATION$ PAD-CHAR PADDING$ EVEN MARK NONE ODD SPACE$ OFF ON$ NO YES$ ? This message C Close the connection S Status of the connection Typing the escape character will send it to the host Command>$ on$ off$ Local echo$ VT52 emulation$ CPM created file$ IBM flag$ File warning$ Escape char: $ Parity: $none$mark$space$odd$even$ baud $ Type a letter corresponding to the baud rate desired. (A) 300 (B) 1200 Letter: $ CUCCA/NIH Osborne 1 Kermit-80 V3.1 Number of packets: (hex) Number of retries: (hex) File name:$$ $ T$$=#5 $=%,$='/$=& $ $ $ $D$E$F$G$$ $T$T$ BYE$!!CONNECT$EXIT$FINISH$HELP$LOG$ LOGOUT$RECEIVE$ SEND$SET$SHOW$STATUS$ BAUD$CPM-CREATED-FILE$ESCAPE$ FILE-WARNING$IBM$ LOCAL-ECHO$PARITY$RECEIVE$ SEND$ VT52-EMULATION$PAD-CHAR$PADDING$EVEN$MARK$NONE$ODD$ SPACE$ ON$OFF$NO$YES$ ?Program error: Invalid COMND call$ ?Ambiguous$ ?Illegal input file spec$ Confirm with carriage return$ $HO$PARITY$RECEIVE$ SEND$ VT52-EMULATION$PAD-CHAR$PADDING$EVEN$MARK$NONE$ODD$ SPACE$ ON$OFF$NO$YES$ ?Program error: Invalid COMND call$ ?Ambiguous$ ?Illegal input file spec$ ith carriage retu ^ ##PARITY$RECEIVE$ SEND$ VT52-EMULATION$PAD-CHAR$PADDING$EVEN$MARK$NONE$ODD$ SPACE$ ON$OFF$NO$YES$ ?Program error: Invalid COMND call$ ?Ambiguous$ ?Illegal input file spec$ ith carriage retu ^ ##PARITY$RECEIVE$ SEND$ VT52-EMULATION$PAD-CHAR$PADDING$EVEN$MARK$NONE$ODD$ SPACE$ ON$OFF$NO$YES$ ?Program error: Invalid COMND call$ ?Ambiguous$ ?Illegal input file spec$ ith carriage retu ^ ##PARITY$RECEIVE$ SEND$ VT52-EMULATION$PAD-CHAR$PADDING$EVEN$MARK$NONE$ODD$ SPACE$ ON$OFF$NO$YES$ ?Program error: Invalid COMND call$ ?Ambiguous$ ?Illegal input file spec$ ith carriage retu ^ ##PARITY$RECEIVE$ SEND$ VT52-EMULATION$PAD-CHAR$PADDING$EVEN$MARK$NONE$ODD$ SPACE$ ON$OFF$NO$YES$ ?Program error: Invalid COMND call$ ?Ambiguous$ ?Illegal input file spec$ ith carriage retu ^ ##PARITY$RECEIVE$ SEND$ VT52-EMULATION$PAD-CHAR$PADDING$EVEN$MARK$NONE$ODD$ SPACE$ ON$OFF$NO$YES$ ?Program error: Invalid COMND call$ ?Ambiguous$ ?Illegal input file spec$ ith carriage retu ^ ##PARITY$RECEIVE$ SEND$ VT52-EMULATION$PAD-CHAR$PADDING$EVEN$MARK$NONE$ODD$ SPACE$ ON$OFF$NO$YES$ ?Program error: Invalid COMND call$ ?Ambiguous$ ?Illegal input file spec$ ith carriage retu ^ ##PARITY$RECEIVE$ SEND$ VT52-EMULATION$PAD-CHAR$PADDING$EVE:*2*#@:*2*>2 COMND call$ ?Ambiguous$ ?Illegal input file spec$ ith carriage retu ^ ##PARITY$RECEIVE$ SEND$ VT52-EMULATION$PAD-CHAR$PADDING$EVEN$MARK$NONE$ODD$ SPACE$ ON$OFF$NO$YES$ ?Program error: InvalidKERMIT-80 was adapted for the Osborne 1 by Charles Bacon at NIH. KERMIT-80 was developed originally at Columbia University but there are now many implementations of the program up and running on many micros as well as main-frame installations. KERMIT is strictly a non-commercial program developed in the spirit of getting computers talking to one another. It is copyrighted by Columbia, but all information about the program is available to anyone who asks. If you want a "manual" for Kermit, CUCCA at Columbia will send one for a nominal fee (was $2.50). (Ask for KERMIT USERS GUIDE) Write: Kermit Distribution Coulumbia University Center for Computing Activities 7th Floor, Watson Laboratory 612 West 115th Street New York, New York 10025 Here are some comments on this implementation: Change speed (BAUD) of the serial line freely between 300 and 1200 with the SET BAUD command. Note that SETUP may later report incorrect speed. Type C to CONNECT to the serial line. Then dial the remote computer. Escape character for CONNECT is CTRL-\. Osborne 1 [version] was quite a hack, since like too many micros, the Osborne is sold as a mystery machine and took a lot of detective work [unquote]. The cable used with the Osborne 1 modem connector has male connectors at both ends, but is asymmetric. The black connector should plug into the Osborne and the gray connector into the modem. This cable is fabricated from four-conductor stranded wire, and it may be up to several hundred feet long. Here it is: (Black shell) (Gray shell) Signal Name Osborne Modem Signal Name at Osborne Pin no. Pin no. at modem Send data 2 3 Receive data Receive data 3 2 Send data Dataset Ready 6 20 Terminal Ready Signal Ground 7 7 Signal Ground If there were a fifth wire, it could run between Osborne's pin 20 and the modem's pin 6. This would make the cable symmetric. Note that the "protective ground" is not wired. Both the Osborne and the modem should have three-prong power cables.  [unquote]. The cable used with the Osborne 1 modem connector has male connectors at both ends, but is asymmetric. The black connector should plug into the Osborne and the gray connector into the modem. This cable is fabricated from four-conductor stranded wire, and it may be up to several hundred feet long. Here it is: (Black shell) (Gray shell) Signal Name Osborne Modem Signal Name at Osborne Pin no. Pin no. at modem Send data 2 3 Receive data Receive data 3 2 Send data Dataset Ready 6 20 Terminal Ready Signal Ground 7 7 Signal Ground If there were a fifth wire, it could run between Osborne's pin 20 and the modem's pin 6; OSPLNK70.ASM ver 7.0 dated 11/82 ; (previous version 6.4 dated 6/14/81) ; ;OSPLINK is a CP/M transient program which allows the user to ;send/receive ASCII text files to/from a remote computer using ;a modem. Text data will be displayed on the console and may ;be optionally printed on the CP/M list device. No error checking ;protocol (such as MODEM7) is accomodated. ; ;OSPLINK was derived from the public domain program PLINK ;originally written by L.E.Hughes (EDCAM) 7/77, with revisions ;by Keith Petersen (W8SDZ), Tom Jorgenson, Steve Vinokuruff ;(Vanc CBBS), Dennis Breckenridge (Burnaby CBBS), Bruce Ratoff ;(Iselin RCPM), and Ben Reagan (Lynnwood,WA). ; ;OSPLINK version 6.4 was submitted to the First Osborne Group ;(FOG) Disk Library by Byron McKay (OxGate, PicoNet, and FOG). ;That version used direct Osborne serial/modem port I/O. ;The author was not identified. ; ;Significant additions and corrections were made by Jim Woolley, ;FOG Disk Librarian, to create version 7.0. In particular: ; 1. Added buffered printer output to the CP/M list device ; configured on the Osborne parallel port. ; 2. Corrected text file transmit routine. ; 3. Added ability to change host acknowledge (trigger) ; character during session. ; 4. Added help reminder of control commands. ; 5. Cleaned up read-console-string routine. ; 6. Cleaned up modem routines. Added runtime logic to move ; code above 4000h (shadow memory), thereby keeping size ; of .COM file to minimum. ; 7. Improved user interface. ; 8. Eliminated non-Osborne related code. ; ;The following control codes (commands) may be initiated ;from the keyboard: ; ;Control-E Exit OSPLINK to CP/M "warm-boot". ; ;Control-T Transmit ASCII file to remote system, asks for ; drive (A, B, etc.) and filename.typ. ; ;Control-C Aborts transmission of file to remote system. ; If used when asked for drive, aborts ^T or ^W. ; ;Control-Y Switches between saving and ignoring ; incoming ASCII data in RAM buffer, ; for later transfer to disk. ; ;Control-W Writes RAM buffer to disk. Asks for drive ; and filename.typ. ; ; + + + + + + Revisions by Jim Woolley, FOG Disk Librarian, 11/82 ; ;Control-P Toggles list device (printer) on/off. A 256 character ; buffer is used to accomodate printer busy conditions. ; Printer interface must be on Osborne parallel (IEEE-488 ; or Centronics) port, which is assumed much faster than ; the modem. ; ;Control-A Permits reset of host computer's acknowledgment ; character. Default is linefeed. May be changed to, ; for example, > or * or ? or @ or # or &, etc. Ack. ; prompt is only used during ^T file trasnmission. ; ;Control-R Displays reminder of commands. ; ;Following apply when prompted for filename (similar to keyboard ;entry at CP/M level) ; ;Control-H or <-- Backspace when in command mode (e.g. ^T or ^W). ; ;Control-U or -X Aborts current line when in command mode. ; ; + + + + + + ; ;Note: all other control codes are passed to modem output, and ;may be interpreted by the remote system as various control ;functions. ; ;A "trigger" character is a response sent by the host ;indicating that it is ready for the next line (acknowledgment). ;The following "trigger" equate is set to "lf" (linefeed) ;by default. An optional trigger char may be passed via fcb1 ;in command line; ; ; e.g. OSPLINK B will set trigger to "bell" ; ;The following options are allowed on the command line ; ; 1. B = bell 07h ; 2. X = xon 11h ; 3. U = upload; no trigger check at all (this option ; may only be entered via command line) ; ;Any other ascii character on the command line will be ;converted to upper case and taken literally as the trigger. ;Only the first character is scanned. Examples are > or * or ?. ;Control-A permits trigger character to be reset. ; lf equ 0ah ;line feed trigger equ lf ;default value ; ;some Osborne 1 locations ; iobyte equ 3 mstat equ 02a00h ;modem port status mport equ 02a01h ;modem port data ; ;bdos entry point and function codes ; base equ 0 ; bdos equ base+5 resdsk equ 13 ;reset disk system offc equ 15 ;open file cffc equ 16 ;close file dffc equ 19 ;delete file rrfc equ 20 ;read record wrfc equ 21 ;write record mffc equ 22 ;make file ; ;default fcb and field definitions ; fcb equ base+5ch fn equ 1 ;file name field (rel) ft equ 9 ;file type field (rel) ex equ 12 ;file extent field (rel) nr equ 32 ;next record field (rel) dbuf equ base+80h ;default disk buffer address ; ;ascii control characters ; cr equ 0dh ;carriage return del equ 7fh ;delete (rubout) bell equ 07h ;bell signal bs equ 08h ;backspace tab equ 09h ;horizontal tab xon equ 11h ;x-on character null equ 00h ;null char ; ;warning character for low memory when [^Y]anking incoming ;ascii data into RAM - signals user to press ^W or ^Y ; wrnsig equ bell ; ; ; ** main program ** ; org base+100h ; lnki: lxi b,movsiz ;move stack, modem routines, lxi h,movfrm ; & text buffer above lxi d,movto ; shadow mode memory ; lnki2: mov a,m ;from dcx h xchg mov m,a ;to dcx h xchg dcx b ;loop until zero mov a,b ora c jnz lnki2 ; lxi sp,stack ;create local stack lhld base+1 ;point to CP/M jmp table lxi d,3 ;get ready to add 3 dad d ;point to con status jmp shld citcal+1 ;modify call adrs dad d ;point to con in jmp shld rccal+1 ;modify call adrs dad d ;point to con out jmp shld wccal+1 ;modify call adrs dad d ;point to lst out jmp shld wlcal+1 ;modify call adrs lxi d,30 dad d ;point to lst status jmp shld wltcal+1 ;modify call adrs ; lda fcb+1 ;see if optional trigger char cpi 20h ;blank.. ? jz skp ;..blank so use default "lf" cpi 'B' ;bell wanted jz trgbel cpi 'X' ;xon wanted jz trgxon cpi 'U' ;uploading no checking for trigger jz trgupl ; settrg sta overly+1 ;store the character as is then jmp skp ; trgbel mvi a,bell jmp settrg ; trgxon mvi a,xon jmp settrg ; trgupl xra a ;zero out jump sta overl1+1 ;change check for c/r to null sta overl2+1 ;and send linefeeds as well ; skp: equ $ ; cont: xra a ;clear char buffers sta inch sta outch sta flag ;clear text save flag sta lflag ;clear lst flag sta lcnt ; and char count lxi h,tbuf ;set ptr to tbuf shld ptr lxi h,0 ;size = 0 shld size lxi h,lbuf ;set ptr to lbuf shld lbufs shld lbufe lxi h,lnkims ;print sign-on message call wcs ; ;main loop ; lnki3: call citest ;jump if no data from console jz lnki4 call rcc ;else read console data cpi 20h cc pcc ;call pcc if control char jc lnki4 ;jump if pcc handled char ori 80h ;else set valid data bit sta inch ;and store in input char buffer ; lnki4: lda outch ;jump if no data for console ora a jp lnki5 ani 7fh ;else discard valid data bit call wcc ;send char to console xra a ;then clear output char buffer sta outch ; lnki5: call mitest ;jump if no data from modem jz lnki6 call rmc ;else read modem data call save ;save char in text buffer if flag on ori 80h ;set data valid bit sta outch ;store in output char buffer ; lnki6: lda inch ;jump if no data for modem ora a jp lnki7 call motest ;jump if modem xmit buffer busy jz lnki7 lda inch ani 7fh ;discard valid data bit call wmc xra a ;clear input char buffer sta inch ; lnki7: jmp lnki3 ;end of main loop ; lnkims: db cr,lf,'OSPLINK ver 7.0 (11/82)' lnkim2: db cr,lf,lf db '<^Y>ank <^W>rite <^P>rint',cr,lf db '<^T>ransmit <^C>ancel <^E>xit',cr,lf db '<^A>cknowledge <^R>emind',cr,lf,lf db 'Ready',cr,lf,lf,0 ; ;pcc - process control character ; pcc: cpi 'E'-40h ;jump out if ctrl e jnz pcc1 push h lxi h,ays ;print 'are you sure' call wcs pop h call rcc ;get answer call wcc ;echo it ani 5fh ;make upper case cpi 'Y' ;yes? jz pccex ;exit call wccr ;crlf stc ;tell plink to ignore this character ret ; ; pcc1: cpi 'T'-40h ;jump if not control-t jnz pcc2 call stf ;transmit text file to modem stc ;tell plink to ignore this character ret ; pcc2: cpi 'Y'-40h ;jump if not control-y jnz pcc3 lda flag dcr a ;was it zero? jnz pcc2a ;yes sta flag ;no, was 1, now 0 lxi h,pcmnix ;print ignore incoming stuff jmp pcc2b ; pcc2a: mvi a,1 ;turn on text save flag sta flag lxi h,pccmr ;print 'saving incoming text in memory' ; pcc2b: call wcs stc ;tell plink to ignore this character ret ; pcc3: cpi 'W'-40h ;jump if not control-W jnz pcc4 call wtb ;write text buffer to disk stc ret ; pcc4: cpi 'P'-40h ;jump if not control-p jnz pcc5 lda lflag dcr a ;was it zero? jnz pcc4a ;yes sta lflag ;no, was 1, now 0 lxi h,pcptof ;print 'printer off' jmp pcc4c ; pcc4a: lda iobyte ;check printer port ori 80h ;jump if parallel jnz pcc4b sta lflag ;turn off list flag lxi h,pcpser ;print 'must not be serial' jmp pcc4c ; pcc4b: mvi a,1 ;turn on list flag sta lflag lxi h,pcpton ;print 'printer on' ; pcc4c: call wcs stc ;tell plink to ignore this character ret ; pcc5: cpi 'R'-40h ;jump if not control-r jnz pcc6 lxi h ,lnkim2 ;print reminder call wcs stc ;tell plink to ignore this character ret ; pcc6: cpi 'A'-40h ;jump if not control-a jnz pcc7 mvi a,cr ;restore defaults sta overl1+1 mvi a,lf sta overl2+1 lxi h,pctrig ;print 'enter trigger' call wcs call rcc ;read trigger character sta overly+1 ;save it cpi 20h ;jump if not control character jnc pcc6a push psw mvi a,'^' ;echo control character call wcc pop psw adi 40h ;make alphabetic ; pcc6a: call wcc ;echo character call wccr stc ;tell plink to ignore it ret ; pcc7: stc ;let plink handle all other cont. codes cmc ret ; pccex: lxi h,disms ;print 'modem not disconnected' call wcs jmp base ;exit to warm boot ; ays: db cr,lf,'Exit to CP/M - are you sure (Y or N)? ',0 ; disms: db cr,lf,'Modem connection is unchanged',cr,lf,0 ; pccmr: db cr,lf,'Saving incoming text in memory',cr,lf,0 pcmnix: db cr,lf,'Ignoring incoming text',cr,lf,0 ; pcpton: db cr,lf,'Printer toggled on',cr,lf,0 pcptof: db cr,lf,'Printer toggled off',cr,lf,0 pcpser: db cr,lf,'Printer must be serial - use SETUP',cr,lf,0 ; pctrig: db cr,lf,'Enter host acknowledgement prompt: ',0 ; ;stf - send text file (to modem) ; stf: call gfn ;get name of disk file to send jc stf6 ;jump if file name error call open ;try to open specified file cpi 255 ;jump if file not found jz stf7 ; stf1: call read ;read next record into dbuf ora a ;jump if end-of-file jnz stf5 lxi h,dbuf ;point to disk buffer mvi c,128 ; stf2: mov a,m ;fetch next char from dbuf inx h cpi 'Z'-40h ;jump if end-of-file character jz stf5 overl2 cpi lf ;ignore line feeds jz stf4 push psw ; stf2a: call motest jz stf2a ;wait until modem not busy pop psw push psw call wmc ;write character to modem pop psw call wcc ;write character to console overl1 cpi cr ;jump if not carriage return jnz stf4 ; stf3: call citest ;check console data ready jz stf3a ;no data there call rcc ;get console character cpi 'C'-40h ;control c aborts it jz stf8 ; stf3a: call mitest ;wait for next modem character jz stf3 call rmc ;read modem character overly cpi trigger ;wait for trigger character jnz stf3 mvi a,lf ;send lf to console call wcc ; stf4: call citest ;check console data ready jz stf4a ;jump if no data call rcc ;get character cpi 'C'-40h ;control c aborts jz stf8 ; stf4a: dcr c ;loop thru rest of dbuf jnz stf2 jmp stf1 ;go get next record from disk ; stf5: lxi h,stfsm ;print 'file send complete' call wcs ret ; stf6: lxi h,stfs1 ;print 'file name error' call wcs ret ; stf7: lxi h,stfs2 ;print 'file not found' call wcs ret ; stf8: lxi h,stfsa ;print 'file send aborted' call wcs ret ; stfsm: db 'File send complete',cr,lf,0 stfs1: db 'File name error or abort',cr,lf,0 stfs2: db 'File not found',cr,lf,0 stfsa: db cr,lf,'File send aborted',cr,lf,0 ; ;save - save char in text buffer if flag on ; ; entry conditions ; a - character to save ; save: push psw lda flag ora a jnz save1 pop psw ret ; save1: pop psw cpi del ;rubout (del) ? rz ;yes, ignore it cpi 20h ;test for control characters jnc save2 ;jump if not control char. cpi cr ;allow cr to be saved jz save2 cpi lf ;allow lf to be saved jz save2 cpi tab ;allow tab to be saved jz save2 ret ;ignore all other control chars. ; save2: push h lhld size ;size = size + 1 inx h shld size lhld ptr mov m,a inx h shld ptr push psw lda base+7 ;get system size sui 1 ;so we dont crash CP/M cmp h ;are we out of room? jz saveab ;yes, abort sui 4 ;leave some room (1k) cmp h mvi a,wrnsig ;signal console running out of space cc wcc pop psw pop h ret ; ;saveab - ran out of room, issue message and flow ; through to disk save routine ; savend: db bell,cr,lf,'No room left to save incoming text' db cr,lf,'Writing memory to disk',cr,lf,0 ; saveab: lxi h,savend ;print 'aborting - no room left' call wcs pop psw ;clear stack pop h pop h ;pop return address lxi h,lnki3 ;set up new return address push h ;leave it on the stack xra a ;clear char buffers sta inch sta outch ; ;wtb - write text buffer to disk ; wtb: lhld size ;jump if text buffer empty mov a,l ora h jz wtb5 mvi c,resdsk ;reset in case read-only call bdos call gfn ;get file name jc wtb6 ;jump if file name error call delt ;delete old file, if any call make ;make new file lhld size xchg ;de = tbuf size lxi h,dbuf push h ;top of stack points to dbuf lxi h,tbuf ;hl points to tbuf ; wtb1: mvi c,128 ;disk buffer size ; wtb2: mov a,m ;fetch next byte of tbuf inx h xthl mov m,a ;store in dbuf inx h xthl dcx d ;size = size - 1 mov a,d ;exit loop if size = 0 ora e jz wtb3 dcr c ;loop until dbuf full jnz wtb2 call write ;write full dbuf to disk xthl ;top of stack now points to tbuf lxi h,dbuf xthl ;put dbuf pointer on stack jmp wtb1 ;loop until end of tbuf ; wtb3: pop h ;hl points to current place in dbuf ; wtb4: mvi m,'Z'-40h ;store eof code inx h  dcr c ;loop thru rest of dbuf jnz wtb4 call write ;write last sector to disk call close ;clean up act and go home lxi h,tbuf ;clear text buffer shld ptr lxi h,0 shld size lxi h,wtbsm ;print 'buffer saved on disk' call wcs lxi h,pcmnix ;print 'ignoring text' call wcs xra a ;clear text save flag sta flag ret ; wtb5: lxi h,wtbs1 ;print 'text buffer empty' call wcs ret ; wtb6: lxi h,wtbs2 ;print 'file name error' call wcs ret ; wtbsm: db cr,lf,'Text memory buffer saved on disk',cr,lf,0 wtbs1: db 'Text buffer empty',cr,lf,0 wtbs2: db 'File name error or abort',cr,lf,0 ; ;wcs - write console string ; ; entry conditions ; hl - points to string (term by zero byte) ; wcs: mov a,m inx h ora a rz call wcc jmp wcs ; ;wccr - write console carriage return (and line feed) ; wccr: mvi a,cr call wcc mvi a,lf ; ;wcc - write console character ; ; entry conditions: ; a - character to write ; wcc: push psw push b push d push h mov c,a ;get character for cbios push b wccal: call $-$ ;modified by init. pop b ;restore character in c lda lflag ;test printer toggle ora a cnz wlc ;skip if zero ; wcc1: pop h pop d pop b pop psw ret ; ;wlc - write list character ; ; entry conditions: ; c - character to write ; ; lbuf provides circular buffer ; wlc: lda lcnt ;count characters in buffer inr a jnz wlc1 ;jump if buffer not full dcr a lhld lbufs ;incr start pointer inr l ; modulo 256 shld lbufs ; and save ; wlc1: lhld lbufe ;point to end of buffer mov m,c ;save character inr l ;incr end pointer shld lbufe ; modulo 256 push psw ;save character count ; wltcal: call $-$ ;check stat - modified by init. ora a ;jump if printer not ready jz wlc3 lhld lbufs ;point to start of buffer mov c,m ;put character in c inr l ;incr start pointer shld lbufs ; modulo 256 ; wlcal: call $-$ ;print c - modified by init. pop psw dcr a ;decr count push psw ;save character count jnz wltcal ;print until buffer empty ; or printer busy wlc3: pop psw sta lcnt ;save count ret ; ;rcs - read console string (with echo) ; ; exit conditions ; b - number of characters read (<128) ; hl - points to last char stored (cr) ; rcs: lxi h,ibuf mvi b,0 ; rcs1: call rcc ;read next char from console cpi 'H'-40h ;jump if not BS jnz rcs2 inr b ;ignore BS if ibuf already empty dcr b jz rcs1 dcx h ;else discard last char ; rcs1a: call wcc ;echo BS to console mvi a,' ' ;erase last character call wcc mvi a,bs call wcc dcr b ;decrement count jmp rcs1 ; and loop ; rcs2: cpi 'U'-40h ;jump if control-u jz rcs2a cpi 'X'-40h ;and if not control-x jnz rcs3 ; rcs2a: inr b ;ignore if ibuf already empty dcr b jz rcs ; rcs2b: mvi a,bs ;else erase current line call wcc mvi a,' ' call wcc mvi a,bs call wcc dcr b jnz rcs2b jmp rcs ; rcs3: call wcc ;echo char to console mov m,a ;store char in ibuf inr b ;increment count cpi cr ;jump if carriage return jz rcs4 mov a,b ;check count cpi 128 ;jump if < 128 jnz rcs3a mvi a,wrnsig ;send signal call wcc mvi a,bs ;send BS jmp rcs1a ; rcs3a: inx h ;else advance pointer jmp rcs1 ; and loop ; rcs4: mvi a,lf ;issue line feed and return call wcc ret ; ;rcc - read console character ; ; exit conditions ; a - character read ; rcc: push b push d push h rccal: call $-$ ;modified by init. pop h pop d pop b ret ; ;gfn - get file name ; gfn: lxi h,gfnsd ;print 'which drive?' call wcs call rcc ;get answer from console call wcc ;echo it to console ani 5fh ;make upper case cpi 'C'-40h ;^C means abort jz gfn6 sui 'A'-1 jc gfn ;require alphabetic jz gfn cpi 17 ;allow 16 drives (as in CP/M 2.x) jnc gfn sta fcb ; gfnb: lxi h,gfns1 ;print 'filename? ' call wcs call rcs ;read response into ibuf lxi h,fcb+fn ;blank fill fn and ft fields mvi c,11 ; gfn1: mvi m,' ' inx h dcr c jnz gfn1 lxi h,ibuf ;point to input buffer lxi d,fcb+fn ;scan off fn field mvi c,9 ; gfn2: mov a,m ;fetch next char from ibuf inx h cpi 61h ;if lc, convert to uc jc gfn2a cpi 7bh jnc gfn2a sui 20h ; gfn2a: cpi cr ;jump if end of line jz gfn5 cpi '.' ;jump if end of name jz gfn3 stax d ;else store char in fn field inx d dcr c ;loop if 8 or less chars so far jnz gfn2 jmp gfn6 ;else take error exit ; gfn3: lxi d,fcb+ft ;scan off ft field mvi c,4 ; gfn4: mov a,m ;fetch next char from ibuf inx h cpi 61h ;if lc, convert to uc jc gfn4a cpi 7bh jnc gfn4a sui 20h ; gfn4a: cpi cr ;jump if end of line jz gfn5 stax d ;else store char in ft field inx d dcr c ;loop if 3 or less chars so far jnz gfn4 jmp gfn6 ;else take error exit ; gfn5: xra a sta fcb+ex ;set extent number to zero sta fcb+nr ;set record number to zero stc ;clear error flag and return cmc ret ; gfn6: stc ;set error flag and return ret ; gfnsd: db cr,lf,'Which drive? ',0 gfns1: db cr,lf,' Filename? ',0 ;   ;open - open disk file ; open: push h push d push b lxi d,fcb mvi c,offc call bdos pop b pop d pop h ret ; ;read - read record from disk file ; read: push h push d push b lxi d,fcb mvi c,rrfc call bdos pop b pop d pop h ret ; ;close - close disk file ; close: push h push d push b lxi d,fcb mvi c,cffc call bdos pop b pop d pop h ret ; ;delt - delete disk file ; delt: push h push d push b lxi d,fcb mvi c,dffc call bdos pop b pop d pop h ret ; ;write - write record to disk ; write: push h push d push b lxi d,fcb mvi c,wrfc call bdos pop b pop d pop h ret ; ;make - make new disk file ; make: push h push d push b lxi d,fcb mvi c,mffc call bdos pop b pop d pop h ret ; ;citest - check console input status ; citest: push b push d push h citcal: call $-$ ;modified by init. ora a ;set zero flag pop h pop d pop b ret ;zero flag carries answer ; ;data area ; inch: ds 1 ;input char buffer (to cyber) outch: ds 1 ;output char buffer (from ciber) ; ;text buffer ; flag: db 0 ;text save flag ptr: dw 1 ;text buffer pointer size: dw 1 ;text buffer size ; ;printer buffer ; lflag: db 0 ;printer flag lbufs: dw 1 ;start pointer lbufe: dw 1 ;end pointer lcnt: db 0 ;character count ; org 256*(($+255)/256) ;page boundary lbuf: ds 256 ;printer buffer ; ;input buffer ; ibuf: ds 128 ;input buffer ; ;"o" before label signifies location before being ;moved above shadow memory ; ;wmc - write modem character ; ; entry conditions ; a - character to write ; owmc: ani 7fh di out 0 sta mport out 1 ei ret ; ;rmc - read modem character ; ; exit conditions: ; a - character read ; ormc: di out 0 lda mport out 1 ei ani 7fh ret ; ;mitest - check modem input status ; omitest: di out 0 lda mstat out 1 ei ani 01h ret ; ;motest - check modem output status ; omotest: di out 0 lda mstat out 1 ei ani 02h  ret ; otbuf: equ $ ;start of text buffer ; ;equates reflecting locations after being moved ;above shadow memory ; offset: equ 4000h ;shadow memory offset stack: equ offset+64 ;local stack wmc: equ stack+1 ;calculate addrs after move to offset rmc: equ wmc+ormc-owmc mitest: equ rmc+omitest-ormc motest: equ mitest+omotest-omitest tbuf: equ motest+otbuf-omotest movto: equ tbuf movfrm: equ otbuf movsiz: equ tbuf-stack ; end dow memory ; ;wmc - write modem character ; ; entry conditions ; a - character to write ; owmc: ani 7fh di out 0 sta mport out 1 ei ret ; ;rmc - read modem character ; ; exit conditions: ; a - character read ; ormc: di out 0 lda mport out 1 ei ani 7fh ret ; ;mitest - check modem input status ; omitest: di out 0 lda mstat out 1 ei ani 01h ret ; ;motest - check modem output status ; omotest: di out 0 lda mstat out 1 ei ani 02h 1! q@~+w+ x 1@@*"t"b""":] cBRXWU\2c>L>L2~2i2{2|2}22!q@"~!"! ""!͕pʤ^ pڤ2{:|ͦ2|Y@M@+2|:{e@:{A@2{Î OSPLINK ver 7.0 (11/82) <^Y>ank <^W>rite <^P>rint <^T>ransmit <^C>ancel <^E>xit <^A>cknowledge <^R>emind Ready !B͕^ͦ_Y9͟7™G7»:}=®2}!ö>2}!͕77:=2!:2!>2!͕7!͕76> 2~> 2i!!͕^2 .>^ͦ@ͦ͟77?!k͕ Exit to CP/M - are you sure (Y or N)? Modem connection is unchanged Saving incoming text in memory Ignoring incoming text Printer toggled on Printer toggled off Printer must be serial - use SETUP Enter host acknowledgement prompt: hڿ%¸!~#ʸ ʣe@nA@ͦ £pʐ^Y@ʂM@ ‚> ͦpʱ^ aU!͕!͕!͕!͕File send complete File name error or abort File not found File send aborted :}5 N N N N*#"*~w#"~:ʳ>ܦ No room left to save incoming text Writing memory to disk !s͕!2{2|*}3 h:Ca*!!q@~#w#z R!6# R4!q@"~!"!A͕!͕2}!f͕!z͕ Text memory buffer saved on disk Text buffer empty File name error or abort ~#ͦÕ> ͦ> O:ļ:<=*,"*q,"*N,"=2! ^+ͦ> ͦ>ͦ:>ͦ> ͦ>ͦ$ͦw XxT>ͦ>#> ͦ!͕^ͦ_@hhh2\!͕!] 6 # ™! ] ~#aڶ{Ҷ . ¨e~#a{  2h2|7?7 Which drive? Filename? \\\\\\@2\!͕!] 6 # ™! ] ~#aڶ{Ҷ . ¨e~#a{  2h2|7?7 Which dr ive? Filename? \\\\\\@2\!͕!] 6 # ™! ] ~#aڶ{Ҷ . ¨e~#a{  2h2|7?7 Which drive? Filename? \\\\\\@2*:*:*:*+ͦ> ͦ>ͦ:>ͦ> ͦ>ͦ$ͦw XxT>ͦ>#> ͦ!͕^ͦ_@hhh2\!͕!] 6 # ™! ] ~#aڶ{Ҷ . ¨e~#a{  2h2|7?7 Which drive? Filename? \\\\\\@2\!͕!] 6 # ™! ] ~#aڶ{Ҷ . ¨e~#a{  2h2|7?7 Which dr OSPLNK70 version 7.0 dated 11/82 by Jim Woolley, FOG Disk Librarian OSPLINK is a CP/M transient program which allows the user to send/receive ASCII text files to/from a remote computer using a modem. Text data will be displayed on the console and may be optionally printed on the CP/M list device. No error checking protocol (such as MODEM7) is accomodated. OSPLINK is intended primarily for the business user who wants a simple program for communication with a corporate computer or with a service bureau such as The Source, CompuServe, or Dow Jones. ASCII text is generally the only transmission of interest in such cases. Files are usually small, and the impact of a lost bit during communication is not disastrous. Besides, the host computer probably does not support a special protocol like MODEM7. OSPLINK is customized especially for the Osborne 1 portable business computer. One unique feature of this version is buffered printing on the CP/M list device interfaced via the Osborne IEEE-488 or Centronics parallel port. Such printers may include Epson MX, NEC 8023, C. Itoh 8510, or Okidata Microline. Another feature is use of direct Osborne serial/modem port input/output (I/O) routines and BIOS console and printer I/O functions for improved communication speed and reliability. Text files may be transmitted from either disk drive to the host. The host computer's line acknowledgment prompt during file transmission (normally linefeed) may be dynamically defined. Text from the host may be captured in memory buffer (about 38K bytes, or over 20 continuous minutes at 300 baud), then saved on disk. The bell will sound when memory buffer is within 1k bytes of full. Incoming text capture will be discontinued before the buffer overflows. All transmission is via 7-bit ASCII code; therefore, 8-bit data such as .COM files or MBASIC compressed .BAS files will not transmit properly. The fundamental test is: If use of the CP/M TYPE command with the file of interest produces garbage on the screen, then the file may not be sent using OSPLINK. WordStar Document mode files may be transmitted; however, the result is similar to a Non-Document mode file. In other words, the result may be simulated using PIP CON:=filename.typ[Z]. OSPLINK was derived from the public domain program PLINK originally written by L.E.Hughes (EDCAM) 7/77, with revisions by Keith Petersen (W8SDZ), Tom Jorgenson, Steve Vinokuruff (Vanc CBBS), Dennis Breckenridge (Burnaby CBBS), Bruce Ratoff (Iselin RCPM), and Ben Reagan (Lynnwood, WA). OSPLINK version 6.4 was submitted to the First Osborne Group (FOG) Disk Library by Byron McKay (OxGate, PicoNet, and FOG). That version used direct Osborne serial/modem port I/O. The author was not identified. Significant additions and corrections were made by Jim Woolley, FOG Disk Librarian, to create version 7.0. In particular: 1. Added buffered printer output to the CP/M list device configured on the Osborne parallel port. 2. Corrected text file transmit routine. 3. Added ability to change host acknowledge (trigger) character during session. 4. Added help reminder of control commands. 5. Cleaned up read-console-string routine. 6. Cleaned up modem routines. Added runtime logic to move code above 4000h (shadow memory), thereby keeping size of .COM file to minimum. 7. Improved user interface. 8. Eliminated non-Osborne related code. An OSPLINK session is initiated by placing OSPLINK.COM in drive A. At the A> prompt, type OSPLINK followed by . Modem connection with the host computer may be made before or after starting OSPLINK. The following control codes (commands) may be initiated from the keyboard during a session: Control-E Exit OSPLINK to CP/M "warm-boot". Control-T Transmit ASCII file to remote system. Asks for drive (A or B) and  filename.typ. Control-C Aborts transmission of file to remote system. If used when asked for drive, aborts ^T or ^W. Control-Y Switches between saving and ignoring incoming ASCII data in RAM buffer, for later transfer to disk. Control-W Writes RAM buffer to disk. Asks for drive and filename.typ. + + + + + Revisions by Jim Woolley, 11/82 Control-P Toggles list device (printer) on/off. A 256 character buffer is used to accomodate printer busy conditions. Printer interface must be on Osborne parallel (IEEE-488 or Centronics) port, which is assumed much faster than the modem. Control-A Permits reset of host computer's acknowledgment character. Default is linefeed. May be changed to, for example, > or * or ? or @ or # or &,  etc. Acknowledge prompt is only used during ^T file trasnmission. Control-R Displays reminder of commands. Following apply when prompted for filename (similar to keyboard entry at CP/M level): Control-H Backspace when in command mode or <-- arrow (e.g. ^T or ^W). Control-U Aborts current line when in or Control-X command mode. + + + + + Note: all other control codes are passed to modem output and may be interpreted by the remote system as various control functions. A "trigger" character is a response (acknowledgment) sent by the host following receipt of a line (carraige return character) indicating that it is ready for the next line. The "trigger" charcater is set to "lf" (linefeed) by default. An optional trigger character may be passed via the command line; for example, OSPLINK B will set trigger to "bell" The following options are allowed on the command line: 1. B = bell 07h 2. X = xon  11h 3. U = upload; no trigger check at all (this option may only be entered via command line) Any other ascii character on the command line will be converted to upper case and taken literally as the trigger. Only the first character is scanned. Examples are > or * or ?. Control-A permits trigger character to be reset during a session. m as various control functions. A "trigger" character is a response (acknowledgment) sent by the host following receipt of a line (carraige return character) indicating that it is ready for the next line. The "trigger" charcater is set to "lf" (linefeed) by default. An optional trigger character may be passed via the command line; for example, OSPLINK B will set trigger to "bell" The following options are allowed on the command line: 1. B = bell 07h 2. X = xon Originally version 6.5 of OSPLINK was submitted. This was a version of PLINK similar to PLNK0124 found on -FOG/UTL.013, except it used modem input/output routines specific for the Osborne 1. This looked promising as a smart terminal emulator which would be simple to use for ASCII text communication. Therefore, I decided to smooth out some rough spots, clean up the user interface, and improve documentation. I added the ability to simultaneously print on the CP/M list device (for example, an Epson printer) interfaced thru the Osborne 1 parallel (IEEE-488 or Centronics) port; this is a feature which is not available (to my knowledge) on any of the other modem/terminal routines presently in the FOG library. Since the changes were extensive, I named this version 7.0. To use, first establish communication with your modem. If necessary, use OSFIG from -FOG/UTL.001 to setup the modem/serial interface. Place OSPLNK70.COM in drive A. At the A> prompt, type OSPLNK70 See OSPLNK70.DOC for further information. ept it used modem input/output routines specific for the Osborne 1. This looked promising as a smart terminal emulator which would be simple to use for ASCII text communication. Therefore, I decided to smooth out some rough spots, clean up the user interface, and improve documentation. I added the ability to simultaneously print on the CP/M list device (for example, an Epson printer) interfaced thru the Osborne 1 parallel (IEEE-488 or Centronics) port; this is a feature which is not available (to my knowledge) on any of the other modem/terminal routines presently in the FOG library. Since the changes were extensive, I named this version 7.0. To use, first establish communication with your modem. If necessary, use OSFIG from -FOG/UTL.001 to setup the modem/serial interface. Place OSPLNK70.COM in drive A. At the A> prompt, type OSPLNK70 ; PLINK.ASM ; (latest version JAN 24 1982 by BC Reagan) ; (prior version OCT 18 1980) ; ; PLINK - SUPPORT COMMUNICATIONS LINK WITH CYBER ; ;PLINK IS A CP/M TRANSIENT COMMAND WHICH ALLOWS THE USER TO ;ESTABLISH A COMMUNICATIONS LINK WITH A REMOTE COMPUTER ; ; ORIGINAL BY L.E. HUGHES EDCAM JULY, 1977 ; ; This version by Keith Petersen, W8SDZ. ; WITH HEATH EQUATES ADDED BY TOM JORGENSON ; ; TRS-80 MODEL 1 mods by Steve Vinokuroff, Vanc CBBS ; Optional Triger characters by Steve Vinokuroff ; TRS-80 mods by Dennis Breckenridge, Burnaby CBBS ; D.C.Hayes mods by Bruce Ratoff, Iselin NJ Remote CP/M ; CP/M Alternate Console Device mods added by ; Ben Reagan, Lynnwood, WA ; ;This program currently supports the following modems ; or computers via conditional assembly. ; ; 1. PMMI modem ; 2. ANY serial i/o board (TUART INCLUDED) ; 3. TRS-80 model 1 ; 4. TRS-80 model 2 ; 5. HEATH H8 WITH 8251 UART AT PORT 330Q ; 6. D.C.Hayes 80-103A or Micromodem 100 ; 7. External dumb modem connected to a physical CP/M ; device (TTY, CRT, BAT, or UC1 but different than ; local console) ; 8. OSBORNE 1 ; ;-->NOTE: IF ASSEMBLED AS WRITTEN WILL WORK WITH AN external dumb ; modem connected to the CP/M 'CRT' device port. ; ;PLINK CURRENTLY SUPPORTS TWO WAY TRANSFER OF TEXT FILES ;BETWEEN THE CP/M DISK AND THE REMOTE COMPUTER. THE FOLLOWING ;CONTROL CODES MAY BE INITIATED FROM THE CONSOLE KEYBOARD: ; ; **************************************************** ; * COMMANDS: * ; * * ; * CONTROL E EXIT PLINK TO CP/M WARM BOOT * ; * CONTROL T TRANSMIT ASCII FILE TO MODEM. * ; * ASKS FOR DRIVE AND FILENAME.TYP * ; * CONTROL C ABORT FILE SEND TO MODEM * ; * CONTROL Y SAVE INCOMING ASCII IN RAM BUFFER * ; * FOR LATER TRANSFER TO DISK * ; * CONTROL Q WRITE RAM BUFFER TO DISK - ASKS * ; * FOR DRIVE AND FILENAME.TYP * ; * DELETE BACKSPACE WHEN IN COMMAND MODE * ; * ASKING FOR FILENAME * ; * CONTROL U ABORT CURRENT LINE WHEN IN COMMAND * ; * MODE ASKING FOR FILENAME * ; * * ; * (NOTE: ALL OTHER CONTROL CODES ARE PASSED TO * ; * MODEM OUTPUT) * ; **************************************************** ; ; ;CONDITIONAL ASSEMBLY SWITCHES <<-- SET FOR YOUR SYSTEM ; TUART SET 0 ;CROMEMCO TUART I/O BOARD PMMI EQU 0 ;PUT A 1 HERE IF YOU HAVE A PMMI DCH EQU 0 ;PUT A 1 HERE IF YOU HAVE A D.C.HAYES TRS1 EQU 0 ;PUT A 1 HERE IF YOU HAVE TRS80-MOD1 TRSPT EQU 0 ;PUT 1 HERE IF YOU HAVE TRS80-MOD2 ;USING PICKLES & TROUT CP/M 2.X H84 EQU 0 ;PUT 1 HERE IF YOU HAVE H8/H8-4 CPMDUM EQU 1 ;PUT 1 HERE IF YOU ARE USING A CP/M ;CONSOLE I/OBYTE DEVICE WITH AN EXTERNAL ;DUMB (ACOUSTIC) MODEM. BE SURE TO ;SET THE ALTERNATE CONSOLE DEVICE BELOW. IF CPMDUM ALTCON EQU 1 ;PUT ALTERNATE (MODEM) CONSOLE ;DEVICE HERE. 0=TTY 1=CRT 2=BAT 3=UC1 ;IMPORTANT: THE 'ALTCON' MUST BE ;DIFFERENT THAN THE NORMAL CONSOLE ;DEVICE USED BY THE LOCAL OPERATOR, ;SINCE THIS PROGRAM SWITCHES BETWEEN ;THE TWO DEVICES. ENDIF IF H84 TUART SET 1 ENDIF ; OSBORNE EQU 1 ;PUT 1 HERE IF OSBORNE 1 ; INIT$REQUIRED EQU 1 ;PUT 1 HERE IF INITIALIZATION NEEDED ;(NEEDED FOR MOST VERSIONS INCLUDING ; 'CPMDUM') ; IF TRS1 OR PMMI OR TUART OR DCH PORT EQU 1 ENDIF ; IF TRSPT OR CPMDUM PORT EQU 0 ;STILL NEED THE SWITCH ENDIF ; ; ; ;BDOS ENTRY POINT AND FUNCTION CODES ; IF NOT TRS1 BASE SET 0 ;STANDARD CPM ENDIF ; IF TRS1 OR H84 BASE SET 4200H ;TRS-80 MODEL 1 CP/M BASE ADDRESS ENDIF ; BDOS EQU BASE+5 RESDSK EQU 13 ;RESET DISK SYSTEM OFFC EQU 15 ;OPEN FILE CFFC EQU 16 ;CLOSE FILE DFFC EQU 19 ;DELETE FILE RRFC EQU 20 ;READ RECORD WRFC EQU 21 ;WRITE RECORD MFFC EQU 22 ;MAKE FILE IOGET EQU 7 ;GET I/O STEERING BYTE IOSET EQU 8 ;SET I/O STEERING BYTE ; ; TRS80 PICKLES AND TROUT SIO CALLS ; OFFSET BY -3 THAT IS ADD 3 TO ALL CALLS ; SETSIO EQU 30H ;SET UP Z80 SIO SIOTST EQU 33H ;READ SIO STATUS SIOINP EQU 36H ;INPUT A CHAR SIOOUT EQU 39H ;OUTPUT A CHAR ; ;DEFAULT FCB AND FIELD DEFINITIONS ; FCB EQU BASE+5CH FN EQU 1 ;FILE NAME FIELD (REL) FT EQU 9 ;FILE TYPE FIELD (REL) EX EQU 12 ;FILE EXTENT FIELD (REL) NR EQU 32 ;NEXT RECORD FIELD (REL) DBUF EQU BASE+80H ;DEFAULT DISK BUFFER ADDRESS ; ;ASCII CONTROL CHARACTERS ; CR EQU 0DH ;CARRIAGE RETURN LF EQU 0AH ;LINE FEED DEL EQU 7FH ;DELETE (RUBOUT) BELL EQU 07H ;BELL SIGNAL TAB EQU 09H ;HORIZONTAL TAB XON EQU 11H ;X-ON CHARACTER NULL EQU 00H ;NULL CHAR ; ;THE FOLLOWING "TRIGER" EQUATE IS SET TO "LF" (LINEFEED) ;BY DEFAULT. AN OPTIONAL TRIGER CHAR MAY BE PASSED VIA FCB1 ; ; IE: PLINK B WILL SET TRIGER TO "BELL" ; ;THE FOLLOWING OPTIONS ARE ALLOWED ; ; 1. B = BELL 07H ; 2. X = XON 11H ; 3. U = UPLOAD NO TRIGER CHECK AT ALL ;ANY OTHER ASCII CHARACTER MAY BE PASSED THROUGH FCB1 ; ; TRIGER EQU LF ;DEFAULT VALUE ; ; ;WARNING CHARACTER FOR LOW MEMORY ; WRNSIG EQU BELL ;IF YOU HAVE ONE, PUT 'BELL' HERE ;...ELSE PUT '*' HERE. ; ;MODEM I/O PORT ADDRESSES ; IF PMMI MODD EQU 0C1H ;MODEM DATA PORT MODS EQU 0C0H ;MODEM STATUS PORT MODINIT EQU 29H ;INITIALIZE BYTE ORIGINATE, ;7 DATA, EVEN PARITY, 1 STOP ENDIF ; IF DCH MODD EQU 80H ;MODEM DATA PORT MODS EQU 81H ;MODEM STATUS PORT MODINIT EQU 05H ;7 DATA, EVEN PARITY, 1 STOP ENDIF ; IF TRS1 MODD EQU 0EBH ;TRS80 MOD 1 RS232 DATA PORT MODS EQU 0EAH ; AND THE RS232 STATUS PORT ENDIF ; IF TUART MODD EQU 0D8H ;<<--MODIFY FOR YOURS MODS EQU 0DDH ;<<--MODIFY FOR YOURS ENDIF ; ;MODEM STATUS PORT BIT DEFINITIONS ; IF PMMI MTBE EQU 01H ;MODEM TRANS. BUFFER READY FLAG MRDA EQU 02H ;MODEM RECEIVE DATA AVAIL. FLAG MXOR EQU 03H ;MASK TO MAKE MTBE AND MRDA "LOW TRUE" ENDIF ; IF DCH MTBE EQU 02H ;MODEM TRANS. BUFFER READY FLAG MRDA EQU 01H ;MODEM RECEIVE DATA AVAIL. FLAG MXOR EQU 03H ENDIF ; IF TRS1 MTBE EQU 40H ;TRS80 MOD1 RS232 BUFFER READY MRDA EQU 80H ;MODEM RECEIVE DATA AVAIL. MXOR EQU 0C0H ENDIF ; IF TUART ;<<--OR ANY OTHER SERIAL I/O MTBE EQU 20H ;<<--MODIFY FOR YOURS MRDA EQU 1H ;<<--MODIFY FOR YOURS MXOR EQU 21H ;<<--MODIFY FOR YOURS ENDIF ; ; **MAIN PROGRAM** ; ORG BASE+100H LINK: IF NOT OSBORNE LXI SP,STACK+64 ;CREATE LOCAL STACK ENDIF LHLD BASE+1 ;POINT TO CP/M JMP TABLE LXI D,3 ;GET READY TO ADD 3 DAD D ;POINT TO CON STATUS JMP SHLD CITCAL+1 ;MODIFY CALL ADRS DAD D ;POINT TO CON IN JMP SHLD RCCAL+1 ;MODIFY CALL ADRS DAD D ;POINT TO CON OUT JMP SHLD WCCAL+1 ;MODIFY CALL ADRS LDA FCB+1 ;SEE IF OPTIONAL TRIGER CHAR CPI 20H ;BLANK.. ? JZ SKP ;..BLANK SO USE DEFAULT "LF" CPI 'B' ;BELL WANTED JZ TRGBEL CPI 'X' ;XON WANTED JZ TRGXON CPI 'U' ;UPLOADING NO CHECKING FOR TRIGER JZ TRGUPL ; SETTRG STA OVERLY+1 ;STORE THE CHARACTER AS IS THEN JMP SKP ; TRGBEL MVI A,BELL JMP SETTRG ; TRGXON MVI A,XON JMP SETTRG ; TRGUPL XRA A ;ZERO OUT JUMP STA OVERL1+1 ;CHANGE CHECK FOR C/R TO NULL STA OVERL2+1 ;AND SEND LINEFEEDS AS WELL JMP SKP ; SKP EQU $ IF H84 MVI A,80H; SET DLAB BIT IN 8250 UART OUT 0DBH; 8250 AT PORT D8H (330Q) NOP ! NOP ! NOP NOP ! NOP MVI A,01H; MSB OF BAUD RATE DIVISOR OUT 0D9H; ...TO UART NOP ! NOP ! NOP NOP ! NOP MVI A,80H; LSB OF BAUD RATE DIVISOR OUT 0D8H; ...TO UART NOP ! NOP ! NOP NOP ! NOP MVI A,03H; 8 BITS, 1 STOP BIT, NO PARITY, DLAB RESET OUT 0DBH; ...TO UART NOP ! NOP ! NOP NOP ! NOP MVI A,0; RESET CONTROL REGISTER OUT 0DCH; ...TO UART JMP CONT ENDIF IF INIT$REQUIRED AND NOT H84 AND NOT CPMDUM OR PMMI AND NOT H84 MVI A,MODINIT OUT MODS ;INITIALIZE MODEM PORT ENDIF ; IF TUART MVI A,80H ;DSR ON BIT 7 PARL PORT B OUT 54H ENDIF ; IF TRSPT ;MUST SET UP SERIAL CHANNEL RESET: LXI H,INITR ;STORE RETURN ADDRESS PUSH H LHLD 1 LXI D,SETSIO ;SIO SETUP ROUTINE DAD D PUSH H ;STORE ON STACK MVI C,00H ;NO PARITY CHAN-A MVI D,0E6H ;8 bits ,1 STOP MVI E,3 ;300 BAUD MVI L,00H ;DISABLE EXT/ACK SIO FUNCTIONS MVI H,'S'-40H ;CONTROL S (X-ON) RET ;TROUGH SETUP PROG INITR NOP ;DO IT TO IT ENDIF ; IF TRS1 ;INIT FOR TRS80 MOD1 RS232 OUT 0E8H ;RESET RS232 IN 0E9H ;READ THE SWITCHES ANI 0F8H ORI 5 OUT 0EAH ;SET DSR AND CTS MVI A,55H ;300 BAUD OUT 0E9H ENDIF ; ; IF PORT IN MODD ;CLEAR MODEM UART READ BUFFERS IN MODD ENDIF ; IF CPMDUM SAVIO: PUSH H ! PUSH D ! PUSH B ! PUSH PSW MVI C,IOGET ;SAVE ENTRY I/OBYTE CALL BDOS STA ORGIO POP PSW ! POP B ! POP D ! POP H ENDIF ; CONT XRA A ;CLEAR CHAR BUFFERS STA INCH STA OUTCH STA FLAG ;CLEAR TEXT SAVE FLAG LXI H,TBUF ;SET PTR TO TBUF SHLD PTR LXI H,0 ;SIZE = 0 SHLD SIZE LXI H,LINKMS ;PRINT SIGN-ON MESSAGE CALL WCS ; ; MAIN LOOP ; LINK3: CALL CITEST ;JUMP IF NO DATA FROM CONSOLE JZ LINK4 CALL RCC ;ELSE READ CONSOLE DATA CPI 20H CC PCC ;CALL PCC IF CONTROL CHAR JC LINK4 ;JUMP IF PCC HANDLED CHAR ORI 80H ;ELSE SET VALID DATA BIT STA INCH ;AND STORE IN INPUT CHAR BUFFER LINK4: LDA OUTCH ;JUMP IF NO DATA FOR CONSOLE ORA A JP LINK5 ANI 7FH ;ELSE DISCARD VALID DATA BIT CALL WCC ;SEND CHAR TO CONSOLE XRA A ;THEN CLEAR OUTPUT CHAR BUFFER STA OUTCH LINK5: CALL MITEST ;JUMP IF NO DATA FROM MODEM JZ LINK6 CALL RMC2 ;ELSE READ MODEM DATA CALL SAVE ;SAVE CHAR IN TEXT BUFFER IF FLAG ON ORI 80H ;SET DATA VALID BIT STA OUTCH ;STORE IN OUTPUT CHAR BUFFER LINK6: CALL MOTEST ;JUMP IF MODEM XMIT BUFFER BUSY JZ LINK7 LDA INCH ;JUMP IF NO DATA FOR MODEM ORA A JP LINK7 ANI 7FH ;DISCARD VALID DATA BIT ; IF PORT OUT MODD ;OUTPUT CHAR TO MODEM ENDIF ; IF TRSPT PUSH B ;STORE REGISTERS PUSH H PUSH D CALL WMC ;SEND CHAR POP D POP H POP B ENDIF ; IF CPMDUM CALL WMC ;SEND CHAR TO MODEM ENDIF ; XRA A ;...THEN CLEAR INPUT CHAR BUFFER STA INCH LINK7: JMP LINK3 ;END OF MAIN LOOP ; LINKMS: DB CR,LF,'PLINK as of 24-JAN-82' IF TUART DB CR,LF,'(For TUART I/O)' ENDIF IF PMMI DB CR,LF,'(For PMMI Modem)' ENDIF IF DCH DB CR,LF,'(For DCH Modem)' ENDIF IF TRS1 DB CR,LF,'(For TRS80-MOD1)' ENDIF IF TRSPT DB CR,LF,'(For TRS80-MOD2)' ENDIF IF H84 DB CR,LF,'(For H8/H8-4)' ENDIF IF CPMDUM DB CR,LF,'(For CP/M Alternate Console Device' DB CR,LF,'with External Dumb Modem)' ENDIF DB CR,LF,LF,'READY',CR,LF,LF,0 ; ; PCC - PROCESS CONTROL CHARACTER ; PCC: CPI 'E'-40H ;JUMP OUT IF CTRL E JNZ PCC1 PUSH H LXI H,AYS ;PRINT 'ARE YOU SURE' CALL WCS POP H CALL RCC ;GET ANSWER CALL WCC ;ECHO IT ANI 5FH ;MAKE UPPER CASE CPI 'Y' ;YES? JZ PCCEX ;EXIT CALL WCCR ;CRLF STC ;TELL LINK TO IGNORE THIS CHARACTER ; IF TRSPT POP PSW ;GOBBLE UP CALL ADDRESS JMP RESET ;RE-INITIALIZE SIO ENDIF ; IF PORT OR CPMDUM RET ENDIF ; PCC1: CPI 'T'-40H ;JUMP IF NOT CONTROL-T JNZ PCC2 CALL STF ;TRANSMIT TEXT FILE TO MODEM STC ;TELL LINK TO IGNORE THIS CHARACTER RET ; PCC2: CPI 'Y'-40H ;JUMP IF NOT CONTROL-Y JNZ PCC3 MVI A,1 ;TURN ON TEXT SAVE FLAG STA FLAG LXI H,PCCMR ;PRINT 'SAVING INCOMING TEXT IN MEMORY' CALL WCS STC ;TELL LINK TO IGNORE THIS CHARACTER RET ; PCC3: CPI 'Q'-40H ;JUMP IF NOT CONTROL-Q JNZ PCC4 XRA A ;TURN OFF TEXT SAVE FLAG STA FLAG CALL WTB ;WRITE TEXT BUFFER TO DISK STC RET ; PCC4: STC ;LET LINK HANDLE ALL OTHER CONT. CODES CMC RET ; PCCEX: LXI H,DISMS ;PRINT 'MODEM NOT DISCONNECTED' CALL WCS JMP BASE ;EXIT TO WARM BOOT ; AYS: DB CR,LF,'EXIT TO CP/M - ARE YOU SURE (Y OR N)?',0 IF PMMI OR DCH DISMS: DB CR,LF,'++DON''T FORGET - THE MODEM ' DB 'IS NOT DISCONNECTED++',CR,LF DB 'USE "MODEM D" TO DISCONNECT',0 ENDIF ; IF NOT PMMI AND NOT DCH DISMS: DB CR,LF,'+++ EXIT TO CP/M +++',CR,LF,0 ENDIF ; PCCMR: DB CR,LF,'SAVING INCOMING TEXT IN MEMORY',CR,LF,0 ; ; STF - SEND TEXT FILE (TO MODEM) ; STF: CALL GFN ;GET NAME OF DISK FILE TO SEND JC STF6 ;JUMP IF FILE NAME ERROR CALL OPEN ;TRY TO OPEN SPECIFIED FILE CPI 255 ;JUMP IF FILE NOT FOUND JZ STF7 STF1: CALL READ ;READ NEXT RECORD INTO DBUF CPI 1 ;JUMP IF END-OF-FILE JZ STF5 LXI H,DBUF ;POINT TO DISK BUFFER  MVI C,128 STF2: MOV A,M ;FETCH NEXT CHAR FROM DBUF INX H CPI 'Z'-40H ;JUMP IF END-OF-FILE CHARACTER JZ STF5 OVERL2 CPI LF ;IGNORE LINE FEEDS JZ STF4 CALL WMC ;WRITE CHARACTER TO MODEM CALL WCC ;WRITE CHARACTER TO CONSOLE OVERL1 CPI CR ;JUMP IF NOT CARRIAGE RETURN JNZ STF4 STF3: CALL CITEST ;CHECK CONSOLE DATA READY JZ STF3A ;NO DATA THERE CALL RCC ;GET CONSOLE CHARACTER CPI 'C'-40H ;CONTROL C ABORTS IT JZ STF8 STF3A: CALL MITEST ;WAIT FOR NEXT MODEM KHARACTER JZ STF3 CALL RMC2 ;CHECK MODEM FOR TRIGGER CHAR. OVERLY CPI TRIGER JNZ STF3 CALL WCCR ;SEND CRLF TO CONSOLE STF4: DCR C ;LOOP THRU REST OF DBUF JNZ STF2 JMP STF1 ;GO GET NEXT RECORD FROM DISK ; STF5: LXI H,STFSM ;PRINT 'FILE SEND COMPLETE' CALL WCS RET ; STF6: LXI H,STFS1 ;PRINT 'FILE NAME ERROR' CALL WCS RET ; STF7: LXI H,STFS2 ;PRINT 'FILE NOT FOUND' CALL WCS RET ; STF8: LXI H,STFSA ;PRINT 'FILE SEND ABORTED' CALL WCS RET ; STFSM: DB 'FILE SEND COMPLETE',CR,LF,0 STFS1: DB 'FILE NAME ERROR',CR,LF,0 STFS2: DB 'FILE NOT FOUND',CR,LF,0 STFSA: DB CR,LF,'FILE SEND ABORTED',CR,LF,0 ; ; SAVE - SAVE CHAR IN TEXT BUFFER IF FLAG ON ; ; ENTRY CONDITIONS ; A - CHARACTER TO SAVE ; SAVE: PUSH PSW LDA FLAG ORA A JNZ SAVE1 POP PSW RET ; SAVE1: POP PSW CPI DEL ;RUBOUT (DEL) ? RZ ;YES, IGNORE IT CPI 20H ;TEST FOR CONTROL CHARACTERS JNC SAVE2 ;JUMP IF NOT CONTROL CHAR. CPI CR ;ALLOW CR TO BE SAVED JZ SAVE2 CPI LF ;ALLOW LF TO BE SAVED JZ SAVE2 CPI TAB ;ALLOW TAB TO BE SAVED JZ SAVE2 RET ;IGNORE ALL OTHER CONTROL CHARS. ; SAVE2: PUSH H LHLD SIZE ;SIZE = SIZE + 1 INX H SHLD SIZE LHLD PTR MOV M,A INX H SHLD PTR PUSH PSW LDA BASE+7 ;GET SYSTEM SIZE SUI 1 ;SO WE DONT CRASH CP/M CMP H ;ARE WE OUT OF ROOM? JZ SAVEAB ;YES, ABORT SUI 4 ;LEAVE SOME ROOM (1K) CMP H MVI A,WRNSIG ;SIGNAL CONSOLE RUNNING OUT OF SPACE CC WCC POP PSW POP H RET ; ; SAVEAB - RAN OUT OF ROOM, ISSUE MESSAGE AND FLOW ; THROUGH TO DISK SAVE ROUTINE ; SAVEND: DB BELL,CR,LF,'ABORTING - NO ROOM LEFT',0 ; SAVEAB: LXI SP,STACK+64 ;REINITIALIZE STACK LXI H,SAVEND ;PRINT 'ABORTING - NO ROOM LEFT' CALL WCS LXI H,LINK ;SET UP RETURN ADDRESS PUSH H ;LEAVE IT ON THE STACK ; ; WTB - WRITE TEXT BUFFER TO DISK ; WTB: LHLD SIZE ;JUMP IF TEXT BUFFER EMPTY MOV A,L ORA H JZ WTB5 MVI C,RESDSK ;RESET IN CASE READ-ONLY CALL BDOS CALL GFN ;GET FILE NAME JC WTB6 ;JUMP IF FILE NAME ERROR CALL DELT ;DELETE OLD FILE, IF ANY CALL MAKE ;MAKE NEW FILE LHLD SIZE ;DE = TBUF SIZE XCHG LXI H,DBUF ;TOP OF STACK POINTS TO DBUF PUSH H LXI H,TBUF ;HL POINTS TO TBUF WTB1: MVI C,128 ;DISK BUFFER SIZE WTB2: MOV A,M ;FETCH NEXT BYTE OF TBUF INX H XTHL MOV M,A ;STORE IN DBUF INX H XTHL DCX D ;SIZE = SIZE - 1 MOV A,D ;EXIT LOOP IF SIZE = 0 ORA E JZ WTB3 DCR C ;LOOP UNTIL DBUF FULL JNZ WTB2 CALL WRITE ;WRITE FULL DBUF TO DISK XTHL ;TOP OF STACK POINTS TO DBUF LXI H,DBUF XTHL JMP WTB1 ;LOOP UNTIL END OF TBUF ; WTB3: POP H ;HL POINTS TO CURRENT PLACE IN DBUF WTB4: MVI M,'Z'-40H ;STORE EOF CODE INX H DCR C ;LOOP THRU REST OF DBUF JNZ WTB4 CALL WRITE ;WRITE LAST SECTOR TO DISK CALL CLOSE ;CLEAN UP ACT AND GO HOME LXI H,TBUF ;CLEAR TEXT BUFFER SHLD PTR LXI H,0 SHLD SIZE LXI H,WTBSM ;PRINT 'BUFFER SAVED ON DISK' CALL WCS RET ; WTB5: LXI H,WTBS1 ;PRINT 'TEXT BUFFER EMPTY' CALL WCS RET ; WTB6: LXI H,WTBS2 ;PRINT 'FILE NAME ERROR' CALL WCS RET ; WTBSM: DB CR,LF,'BUFFER SAVED ON DISK',CR,LF DB 'MEMORY SAVE CANCELLED',CR,LF,0 WTBS1: DB 'TEXT BUFFER EMPTY',CR,LF,0 WTBS2: DB 'FILE NAME ERROR',CR,LF,0 ; ; WCS - WRITE CONSOLE STRING ; ; ; ENTRY CONDITIONS ; HL - POINTS TO STRING (TERM BY ZERO BYTE) ; WCS: MOV A,M INX H ORA A RZ CALL WCC JMP WCS ; ; WCCR - WRITE CONSOLE CARRIAGE RETURN (AND LINE FEED) ; WCCR: MVI A,CR CALL WCC MVI A,LF ; ; WCC - WRITE CONSOLE CHARACTER ; ; ENTRY CONDITIONS: ; A - CHARACTER TO WRITE  ; WCC: PUSH PSW PUSH B PUSH D PUSH H MOV C,A ;GET CHARACTER FOR CBIOS WCCAL: CALL $-$ ;MODIFIED BY INIT. POP H POP D POP B POP PSW RET ; ; RCS - READ CONSOLE STRING (WITH ECHO) ; ; EXIT CONDITIONS ; B - NUMBER OF CHARACTERS READ (<255) ; HL - POINTS TO LAST CHAR STORED (CR) ; RCS: LXI H,IBUF MVI B,0 RCS1: CALL RCC ;READ NEXT CHAR FROM CONSOLE CPI DEL ;JUMP IF NOT DEL JNZ RCS2 INR B ;IGNORE DEL IF IBUF ALREADY EMPTY DCR B JZ RCS1 DCX H ;ELSE DISCARD LAST CHAR MOV A,M ;ECHO DISCARDED CHAR TO CONSOLE CALL WCC DCR B ;DECREMENT COUNT JMP RCS1 ; AND LOOP ; RCS2: CPI 'U'-40H ;JUMP IF NOT CONTROL U JNZ RCS3 CALL WCCR ;ELSE ABORT CURRENT LINE JMP RCS ; AND START OVER ; RCS3: CALL WCC ;ECHO CHAR TO CONSOLE MOV M,A ;STORE CHAR IN IBUF INR B ;INCREMENT COUNT CPI CR ;JUMP IF CARRIAGE RETURN JZ RCS4 INX H ;ELSE ADVANCE POINTER JMP RCS1 ; AND LOOP ; RCS4: MVI A,LF ;ISSUE LINE FEED AND RETURN CALL WCC RET ; ; RCC - READ CONSOLE CHARACTER ; ; EXIT CONDITIONS ; A - CHARACTER READ ; RCC: PUSH B PUSH D PUSH H RCCAL: CALL $-$ ;MODIFIED BY INI\. POP H POP D POP B RET ; ; WMC - WRITE MODEM CHARACTER ; ; ENTRY CONDITIONS ; A - CHARACTER TO WRITE ; ; IF PORT WMC: PUSH PSW WMCL: IN MODS XRI MXOR ANI MTBE JNZ WMCL POP PSW ANI 7FH ;STRIP PARITY BIT OUT MODD RET ENDIF ; IF TRSPT WMC: PUSH H PUSH D PUSH PSW WMCL: CALL MOTEST ;TEST STATUS JZ WMCL ;LOOP TILL TX EMPTY POP PSW ;RESTORE CHAR ANI 7FH ;STRIP PARITY PUSH B ;STORE B MOV C,A ;PUT CHAR INTO C MVI B,00H ;CHANNEL A LXI H,WMCRE ;STORE RETURN ADDRESS PUSH H LHLD 1 ;GET BASE ADDRESS LXI D,SIOOUT DAD D PCHL ;JUMP TO IT WMCRE: POP B ;RESTORE IT POP D POP H RET ENDIF ; IF CPMDUM WMC: PUSH H ! PUSH D ! PUSH B PUSH PSW WMCL: LDA ORGIO ;GET ENTRY I/OBYTE ANI 0FCH ;SAVE ALL BITS EXCEPT 0 & 1 ADI ALTCON ;SET BITS 0 & 1 TO 'CRT' MOV E,A MVI C,IOSET ;SET NEW I/OBYTE CALL BDOS  POP PSW ANI 7FH CALL WCC ;OUTPUT CHAR TO MODEM LDA ORGIO ;RESTORE ENTRY I/OBYTE MOV E,A MVI C,IOSET ;SET I/OBYTE CALL BDOS POP B ! POP D ! POP H RET ; ; RMC - READ MODEM CHARACTER ; ; EXIT CONDITIONS: ; A - CHARACTER READ ; ; IF PORT RMC: IN MODS XRI MXOR ANI MRDA JNZ RMC RMC2: IN MODD ANI 7FH RET ENDIF ; IF TRSPT RMC: CALL MITEST ;CHAR AVAILABLE JZ RMC ;LOOP IF NOT READY RMC2: PUSH B ;STORE B PUSH D PUSH H MVI B,00H ;CHANNEL A LXI H,RMCRE ;RETURN ADDRESS PUSH H LHLD 1 LXI D,SIOINP DAD D PCHL RMCRE: POP H POP D POP B ANI 7FH ;STRIP PARITY RET ENDIF ; IF CPMDUM RMC: RMC2: PUSH H ! PUSH D ! PUSH B LDA ORGIO ;GET ENTRY I/OBYTE ANI 0FCH ;SAVE ALL BITS EXCEPT 0 & 1 ADI ALTCON ;SET BITS 0 & 1 TO 'CRT' MOV E,A MVI C,IOSET ;SET NEW I/OBYTE CALL BDOS CALL RCC ;INPUT CHAR FROM MODEM PUSH PSW LDA ORGIO ;RESTORE ENTRY I/OBYTE MOV E,A MVI C,IOSET ;SET I/OBYTE CALL BDOS POP PSW ANI 7FH POP B ! POP D ! POP H RET ENDIF ; ; ; GFN - GET FILE NAME ; GFN: LXI H,GFNSD ;PRINT 'WHICH DRIVE?' CALL WCS CALL RCC ;GET ANSWER FROM CONSOLE CALL WCC ;ECHO IT TO CONSOLE ANI 5FH ;MAKE UPPER CASE SUI 'A'-1 JC GFN ;REQUIRE ALPHABETIC JZ GFN CPI 17 ;ALLOW 16 DRIVES (AS IN CP/M 2.X) JNC GFN STA FCB GFNB: LXI H,GFNS1 ;PRINT 'FILENAME? ' CALL WCS CALL RCS ;READ RESPONSE INTO IBUF LXI H,FCB+FN ;BLANK FILL FN AND FT FIELDS MVI C,11 GFN1: MVI M,' ' INX H DCR C JNZ GFN1 LXI H,IBUF ;POINT TO INPUT BUFFER LXI D,FCB+FN ;SCAN OFF FN FIELD MVI C,9 GFN2: MOV A,M ;FETCH NEXT CHAR FROM IBUF INX H CPI 61H ;IF LC, CONVERT TO UC JC GFN2A SUI 20H GFN2A: CPI CR ;JUMP IF END OF LINE JZ GFN5 CPI '.' ;JUMP IF END OF NAME JZ GFN3 STAX D ;ELSE STORE CHAR IN FN FIELD INX D DCR C ;LOOP IF 8 OR LESS CHARS SO FAR JNZ GFN2 JMP GFN6 ;ELSE TAKE ERROR EXIT ; GFN3: LXI D,FCB+FT ;SCAN OFF FT FIELD MVI C,4 GFN4: MOV A,M ;FETCH NEXT CHAR FROM IBUF INX H CPI 61H ;IF LC, CONVERT TO UC JC GFN4A SUI 20H GFN4A: CPI CR ;JUMP IF END OF LINE JZ GFN5 STAX D ;ELSE STORE CHAR IN FT FIELD INX D DCR C ;LOOP IF 3 OR LESS CHARS SO FAR JNZ GFN4 JMP GFN6 ;ELSE TAKE ERROR EXIT ; GFN5: XRA A STA FCB+EX ;SET EXTENT NUMBER TO ZERO STA FCB+NR ;SET RECORD NUMBER TO ZERO STC ;CLEAR ERROR FLAG AND RETURN CMC RET ; GFN6: STC ;SET ERROR FLAG AND RETURN RET ; GFNSD: DB CR,LF,'WHICH DRIVE? ',0 GFNS1: DB CR,LF,'FILENAME? ',0 ; ; OPEN - OPEN DISK FILE ; OPEN: PUSH H PUSH D PUSH B LXI D,FCB MVI C,OFFC CALL BDOS POP B POP D POP H RET ; ; READ - READ RECORD FROM DISK FILE ; READ: PUSH H PUSH D PUSH B LXI D,FCB MVI C,RRFC CALL BDOS POP B POP D POP H RET ; ; CLOSE - CLOSE DISK FILE ; CLOSE: PUSH H PUSH D PUSH B LXI D,FCB MVI C,CFFC CALL BDOS POP B POP D POP H RET ; ; DELT - DELETE DISK FILE ; DELT: PUSH H PUSH D PUSH B LXI D,FCB MVI C,DFFC CALL BDOS POP B POP D POP H RET ; ; WRITE - WRITE RECORD TO DISK ; WRITE: PUSH H PUSH D PUSH B LXI D,FCB MVI C,WRFC CALL BDOS POP B POP D POP H RET ; ; MAKE - MAKE NEW DISK FILE ; MAKE: PUSH H PUSH D PUSH B LXI D,FCB MVI C,MFFC CALL BDOS POP B POP D POP H RET ; ; CITEST - CHECK CONSOLE INPUT STATUS ; CITEST: PUSH B PUSH D PUSH H CITCAL: CALL $-$ ;MODIFIED BY INIT. ORA A ;SET ZERO FLAG POP H POP D POP B RET ;ZERO FLAG CARRIES ANSWER ; ; MITEST - CHECK MODEM INPUT STATUS ; IF PORT MITEST: IN MODS ;GET MODEM UART STATUS XRI MXOR ;INVERT HIGH-TRUE BITS ANI MQRDA ;ANY DATA AVAILABLE? MVI A,0 JNZ MITST1 CMA MITST1: ORA A RET ;ZERO FLAG CARRIES ANSWER ENDIF ; ; IF TRSPT ; MITEST: PUSH B PUSH H PUSH D MVI B,00 ;CHANNEL A LXI H,MITSTR PUSH H LHLD 1 LXI D,SIOTST DAD D PCHL MITSTR: POP D POP H ANI 01 ;TX EMPTY POP B RET ;ZERO FLAG HOLDS THE ANSWER ENDIF ; IF CPMDUM MITEST: PUSH H ! PUSH D ! PUSH B LDA ORGIO ;GET ENTRY I/OBYTE ANI 0FCH ;SAVE ALL BITS EXCEPT 0 & 1 ADI ALTCON ;SETS BITS 0 & 1 TO 'CRT' MOV E,A MVI C,IOSET ;SET NEW I/OBYTE CALL BDOS CALL CITEST ;GET INPUT STATUS PUSH PSW ;SAVE IT LDA ORGIO ;RESTORE ENTRY I/OBYTE MOV E,A MVI C,IOSET ;SET I/OBYTE CALL BDOS POP PSW ;INPUT STATUS POP B ! POP D ! POP H RET ENDIF ; ; MOTEST - CHECK MODEM OUTPUT STATUS ; ; IF PORT MOTEST: IN MODS ;GET MODEM UART STATUS XRI MXOR ;INVERT HIGH-TRUE BITS ANI MTBE ;UART READY FOR CHARACTER? MVI A,0 JNZ MOTST1 ;ZERO FLAG CARRIES ANSWER CMA MOTST1: ORA A ;SET ZERO FLAG IF READY RET ENDIF ; IF TRSPT MOTEST: PUSH B PUSH H PUSH D MVI B,00 ;CHANNEL A LXI H,MOTSTR PUSH H LHLD 1 LXI D,SIOTST DAD D PCHL MOTSTR: ANI 02 ;BUFFER EMPTY POP D POP H POP B RET ENDIF ; IF CPMDUM MOTEST: MVI A,0 ;ALWAYS REPORT 'CRT' (MODEM) ;OUTPUT STATUS AS READY. ;*** MAY NOT WORK IN ALL SYSTEMS *** CMA ORA A RET ENDIF ; ; DATA AREA ; INCH: DS 1 ;INPUT CHAR BUFFER (TO CYBER) OUTCH: DS 1 ;OUTPUT CHAR BUFFER (FROM CIBER) STACK: DS 80 ;LOCAL STACK IBUF: DS 256 ;INPUT BUFFER ORGIO: DS 1 ;ENTRY I/OBYTE BUFFER (USED WITH ;EXTERNAL MODEM ON CP/M 'CRT' DEVICE) ; ; TEXT BUFFER ; FLAG: DS 1 ;TEXT SAVE FLAG PTR: DS 2 ;TEXT BUFFER POINTER SIZE: DS 2 ;TEXT BUFFER SIZE TBUF: EQU $ ;START OF TEXT BUFFER ; END LINK ; CHARACTER? MVI A,0 JNZ MOTST1 ;ZERO FLAG CARRIES ANSWER CMA MOTST1: ORA A ;SET ZERO FLAG IF READY RET ENDIF ; IF TRSPT MOTEST: PUSH B PUSH H PUSH D MVI B,00 ;CHANNEL A LXI H,MOTSTR PUSH H LHLD 1 LXI D,SIOTST DAD D PCHL MOTSTR: ANI 02 ;BUFFER EMPTY POP D POP H POP B RET ENDIF ; IF CPMDUM MOTEST: MVI A,0 ;ALWAYS REPORT 'CRT' (MODEM) ;OUTPUT STATUS AS READY. ;*** MAY NOT WORK IN ALL SYSTEMS *** CMA ORA A RET ENDIF ; ; DATA AREA ; INCH: DS 1 *"v".":] CB/X4U92$C>)>)22C2222!"!"!rʅ* !څ2:2}ʦX͜2͟ʼ:42o PLINK as of 24-JAN-82 (For CP/M Alternate Console Device with External Dumb Modem) READY @!v*_Ym7J7\>2!7j2 77?! EXIT TO CP/M - ARE YOU SURE (Y OR N)? +++ EXIT TO CP/M +++ SAVING INCOMING TEXT IN MEMORY |9@'2!~#2 +4 +r*G} X  !N!c!u!FILE SEND COMPLETE FILE NAME ERROR FILE NOT FOUND FILE SEND ABORTED :¦ ҿ ʿ ʿ ʿ*#"*w#":> ABORTING - NO ROOM LEFT1!!*}n |uEc*!!~#w#zM 2T!06# NT6!"!"!|!! BUFFER SAVED ON DISK MEMORY SAVE CANCELLED TEXT BUFFER EMPTY FILE NAME ERROR ~#> > O!* +~w $#> :_:_:_*:_!*_@|||2\! !] 6 # ¨!] ~#a . ·e~#a  2h2|7?7 WHICH DRIVE? FILENAME? \\\\\\:_r:_>/4 +r*G} X  !N!c!u!FILE SEND COMPLETE FILE NAME ERROR FILE NOT FOUND FILE SEND ABORTED :¦ ҿ ʿ ʿ ʿ*#"*w#":> ABORTING - NO ROOM LEFT1!!*}n |uEc*!!~#w#zM 2T!06# NT6!"!"!|!! BUFFER SAVED ON DISK MEMORY SAVE CANCELLED TEXT BUFFER EMPTY FILE NAME ERROR ~#> > O!* *l|wxyz{|}~ #! ØÒ!"C "*C|*C|!"C?!"C*C|">!"C*C|ʹ*:*C+++il]*C|*Cͅlil*Cͅlil#Q*C|4*C|G!0*C|Z! 0*C|m!͂*C|ʀ! ͂!"C]">?*&}o|ʦ*Cil* :͑*A*͗;~m&7J]pÕÕ*Cc//L/^/b//~m *Cp!9>l͑1c/Á!9>l+̈́NLÁ!9>lͼ_^ÁÁ~m6H[*Cð!9>ls1c/ý!9>l+ͱNLýý~mOTERMINIT!" O* yOj0|g}!o" [ * |>'x:Oy=xW!Py ~怲w:gy ( C:C*C(::C(K2|< ͻ }( :C(~:CF:C:C:C:C(G!CF G:C ͸ͻ |.K2|<(AK2>cX2CK2|< >c 7:C:Cd(>d:C>O;+*C|**C8k|$*Cͫ\!"C*C|a*Cd|O*C8k!"C*C"C!"C!"C*b*C|*C"b*b8l!9>lk|ʥ!9>lͫ\!"b*C*bqlʸ*Cÿ*b#"b"b*C͏lv!Þ*C"b*C*b͏l*b#"b+8l!9>lk|!9>lͫ\!Þ!Þ!}=2,*+8lͅlF! +*+8lͅlS*+8lͅln!;*+8lͅlʞ*C|ʓ!"C!" ! c*C|ʮ*C8k*+! wi"C*C|!"C!" ! c*+6/!}=*+8lͅl! +*+8lͅl*+8lͅl0!;Æ! ! wi"|W**+! ͔iil~*d*8k|z*ͫ\Æ! c*+6!}=Ý×*+8lͅlʱ! +*+8lͅlʾ*+8lͅl!G;! ! wi"C|*C*+! ͔iil!"C+! c*+6Ú!9*&!}=?9*+8lͅle!9>l|]! `! +*+8lͅl{"&!9*+8lͅlʖ!;à ! ! wi"$|ʽ*$*+! ͔iil{ *$!9!C!"C*$!9>l!9!^3"&!"C!ͮ7*&O ` ! c!"C"8*$!( ! ͔i` !+ c!"C"8` ` ~m  8 *$8k|u *$ͫ\qà ! c*+6<q , F !9!}=ë å *+8lͅlʿ !e +*+8lͅl !9*+8lͅl !;Ë * *+! wi" |ʃ * !9!C!"C* !Ja* !9!͉5" !ͮ7!"C* |u !"C"8C* +) >lc* 8k Ë ! c*+6è Read file name (* to continue)Input file not open rbCannot open Log output file name/bwbLog file namecrcrecvreceive Aborted by operator/d Aborted because of errorsCan't establish communicationssend " &}o| î * ́ " ͅl *Cil( ́ " c| * P" ( * ͅl !" ( * &}o" *C|: * ͅlilC *CilL * }il] * ́ " }2 ! ͅly * !"CÍ Ç *C|ʛ * ͅlilʪ ">?K2K2* | ͻ | Ê *C| Ê * >l+Cl#| !"C* ##>l#Cl+8l* " !j l !" Ê *C|ʥ ͻ |( Ê *C|3 Ê *CCͅl" |I *Ck˽"} * |K2*} ͅlu !"} *} #il"C|ʈ *} *C8k!"C!"CÊ !"C~|ʷ ͇Ê ~| ͊wͅl !"C!" !!!9>l#8lͅlʢ!9>l8lc|K!9>l8l" );>l" * #);>l* m* 2!9>l8lKc|ʞ!9>l8lh)>l" ͅlʇ!* >l++* ####2!*|.*" * >l" |.* * " ð* ##" !9>l" * #" +8l* 8lql+K2* +" * #" +8lͅl(* * 2!* ! lD!* |Y* " \!j " * !9>lCl* ##!9>lClbI!#EgIo&Eʹ[*!R+72CN"i&:C*!*Rx"!q>2C`i!G?[C.6(O[C.6(#!R!!""!E.0U5DX˰.FCLOSETdTΈ"G.dtUDP*H.dth@HLPRCVԄ$H&HLPSNDdtxINFILETU%(-KEEPCdt%ThLOGENDdtd0LOGFLLTuH(LOGWRP$P.NOPOLLdUDx*PC5$hPUTCeUDPUTLOGUE:222 ͵z"C!"C!"C!4!!!!!D"C:E!!*C!!D"C:E:CįE!C7*.k;!Y!9[:|RDM͵z"C"C +"C2C2C2C2C2C2Cgo"C"C"C"C" "C"C=2c:23:CO.<(b  :3O.<(:22m:*:*y2*:CyOʹ*Cq*CR 2C*CR0*C2C"C:C( +:Cŗ2C8xͳDisplays disk directory with file sizes in sectors Enter drive letterDisplays disk space statistics Enter drive letterErases a file Enter the (unambiguous) file nameEnter desired line size Minimum 1; Maximum 128Enter desired wait time in seconds Minimum 1; Maximum 60Takes input from a file Enter name of the file to be readEnter name of the file The current log buffer will be written to this fileEnter name of the file The current log buffer, and all further logged data will be written to this fileReceives a file using the "modem" protocol Enter the name of the file as it is to appear on this systemSends a file using the "modem" protocol Enter the name of the file on this system which is to be sentEnter the name of the function key desiredDisplays a file Enter the name of the file to be typed-------------------------------------------T | 7 | 8 | 9 |T | scroll up | scroll up | cancel |T | half | full | file or fk |T -------------------------------------------T | 4 | 5 | 6 |T | scroll down | scroll down | cancel |T | half | full | spec disp |T -------------------------------------------T | 1 | 2 | 3 |T | command | extended | standard |T | | func key | func key |T -------------------------------------------T!"8"6!}=!"+ͥ*Cͅlc*6ͅlill?*8ͅlx">ɞ' ''''&','6'@'F'K'R'W'['a'f'n's'x'*{!9>l"{*y!9>l"y!}'!}%+l"y"{*C;@͸!(3'!A ͥ!K"!"C6#Fͳ#!"C!' !(͘ e&&~m  ) / 5 ;LW]c'o'''*+8lͅl/ͅl"6!'!%+æ*C+il ./ͅl"6*C|4!'!!!'t-"!͝lilB*͑1/ͅl"6./ͅl"6*C+ilj/ͅl"6*C|ʔ!'!!!'t-"!͝lilʢ*s1ÿ~mCMW''*+8lͅl!W>!'c*C|!'!'c*CZE! '!%+"!"C!"C3~m''F''''''*+8lͅlU !W'!4%++*C"C!"C*C+ͅlʅ!"C!"C͏!"C!"C!"C!"C~mef*+8l|U!W>!7!'*C9&!'*C9&C1d!(*C|S*C*Cm]*C*Cm*C*Cm9dC1d!(*C|ʌ*C*&Ï!!(9d*CZE&(-(3(;(A(K(S(\(d(l(t(|(*+8lͅlͰ!'!%+c!"CÜ!"CÜ!"CÜ!"CÜ!"CÜ!"CÜ!"CÜ!"CÜ!"CÜD?͵E!"C*CZEÜ!"CÜD?ͯE!"C*CZEÜÜ~m ) @ I *+8l|3((((!W>!7!(*C9&!(*C9&1d!(*C)>l9d!(*C9&!(*C9&*CZE(((((((())) ))*+8lͅlB_!&'!%+!"CQ!"CQ^."c|ʂ*"CÖ!%)c!"+!*"+Q!"C!"CQ!"CQ!"CQ!"C"CQ!"CQ!"CQ!"CQ^."!͡l^.}o"CQ!"CQ!"CQQ~mRS\e    *+8l|B!W>!71d!*)*C|ʄ! )Ç!(9dC!4)*C9&!:)*C9&C!@)c*Cͅl!K)c *C&}o"]! ͬl1d!R)*]@9d 1d!X)*]9d!])*C9&!e)*C9&C1d!m)*C09d*CZE*+8lͅlV ! *+8lͅlq !;é *+8lKcͅlʍ !%)cé *+8l |ʡ é !%)c!6'+*+8l|V !9!9>l! ! NCl|!!W>!"C"61d!z)!9>l* * * m* 9d!9>l*+8lͅl"*+8lͅl!!*;3"*+! 'wi"!*!|"*!!)!'͔i"!*!|"*!8k*!|+"!%)c!@'+ù!')*())*+8lͅlZ""!F'!?"%+ï"*C|ʇ"*C8k!"C!"C"!"C"!"C"$"~mj"k"""""*+8l|Z"!W>!7!)*C9&C1d!(*C|#*C*&#!!(9d*C|+#!)c*CZE*+8lͅlg#!W>1d!)*C͡B9d*CZE!R'!!!Zt-"4#!͝lʔ#*4#O?))))&())**S( *****+8lͅl#$!['!#%+Ó$!!&$!!&$!!&$!!&$!"C$!! &$!F"C$!H"C$!G"C$!"C$!! &$! ! &$!@!@&$!!@&$$~m####$$$,$5$>$G$ P$ `$ p$ $ *+8l|#!W>!7*C%!$*c+%!0*c+%!:*c+%+%~m$F%G %HC!(*C9&1d!F**C&}@o|V%!S*Y%!*9dC1d!Y**C!l&}o79d!h*c*C!l&}o%!K)c%!s*c%!z*c%%~m%%ô%1d!*%9d*CZE*C&}o|%!&!,!9>lm*C_l!9>lKl"CM*.lz1d!*!9>l!98l|Z&!']&!'9d*+8lͅly&!s'+*+8l|&*+8lͅlʟ&!;ù&*+́]ͅlʸ&!%)cù&!s'+y&!x'!!<!t-"&!͝l'*&+"&#|'!ͳ&browsecisclearconsolecrcrecvdelaydirectorydiskspaceerasefilefkhelplinelogmodemquitreceivesendtypewaitcmdOTERMENDdownstartupEnter number to scroll downEnter number to scroll upoffoncis mode: endfilenowarnwritelog:warn:using: %u of %ufile: %snoneautolfbsdelcontrolffclrignorectlmaskctlnoautolfnobsdelnoffclrnowwrapshowctlwordwrapshowmaskignoreauto lf:bs del:ctl disp: %s ff clr:wordwrap:charchdelaydelay=delctlslndelaynochdlynodelctlsnolndlynopromptnousectlsprompt=time??? delay %schar:line:ln prmpt: none ^%-5c%-6cuse ^S:del ^S:time: %cDrive %c: Total %uK Used %uK Free %uK/dhaltnolfreadsuppr lf: (active)line sz: %d30012007bits8bitsevenfullhalfhostnoparityoddrs232serialfull duplexhost modehalf duplexport: %sRS232bits: %-6cparity: even odd rate: %d%-10s%-6s++%+*+|<+*+8lͅlilN+!9>l+C,"#+ͅl^+!*+8lͅl}+!9>l~<(+!"!+*!+)!9>l>l|+å+*!+#"!+Ã+K2*#+*+*!+)!9>l>l,|+*!+Û+!.c!"+(+!9>lc!/c!*)8!*"+*+8l|4,,*+#"+,*+*+8lj},!"+!*"+*+"+*+͕,"A,*+*A,h,"+*A,!9>l8lͅlʋ,!9>l#Clh,!9>l!9>l",*,8l|ʷ,*,8lilil,,*,#",ß,,*,!9>lm!9>l+Cl#|l-!9>l8lͅl2-!9>l8l|2-!9>l#Cl+8lͅl/-!-!9>l8l!9>l8l͏lQ-!!9>l#Cl!9>l#Cl,!z-t-*+|‹-*+8lͅlilʝ-!9>l+C,"p-ͅlʭ-!*+8lͅl-!9>l;w-!"r-*p-+"p-#|.*+8lc|.*r- m*+#"++8l"r-.!"r-.-*r-!9>lͬl=.*r-!9>l͝lilT.!.c!"+w-*r-w-*+"\.*\.8l||.*\.8lilil.È.d.*\.#"\.+8lͅl.*\.8lͅlʭ.! *\.8lͅl.*\.#"\.8lͅl.!^*\.8l&}o*\.8lÅ.!"+!*"+!??? : ͻ1|/!! *C+.0"C!"C!"Cͻ1|:/!*C|H/*CK/*C"C!"C!"C*C|q/./ͅlilx/">! W>!7*C"[/!"a/! "_/*_/|*0ë/Ý/͖`*[/8lil/*a/ͅlil/*[/8l͝`*[/1"[/*Cql"a/î/*a/ͅl 0*[/1"[/*Cql"a/!=2c*_/+"_/|'0! 7è/D?!9>l#Cl!9>l+Cl#|ʷ0ʹ*C|s0*C!9>lqlp0!9>lÌ0*C!9>lqlʌ0!9>l!9!9>l2Cl!9>l8lilL0:0!9>l1!9>l+Cl#|k1!9>l8lil,1ʹ!9!9>l1Cl*C!9>lql)1!!9>l2.00!9!9>l1Cl*C!9>lqlh1!!9>l2.00!9>l*Cͅlʐ1!9>l*C.0"C*C|ʟ1./ͅlilʦ1!9>l*C0"C*Cͅl1*C*Cqlil1!W>!@2c!"C!"C!*C!9>lql 2*C2!9>l#Cl*C!9>lql02*C<2!9>l+ClTLog empty!9͔Cl#ilT3!9>l&}oCl*C|ʪ2!9>lͅlʓ2!"C!!9>l͏S|ʪ2!Ñ2*C|2!9>lͅlil2!"C!Ñ2*C|2!9>lͅl2!"C!Ñ2!9>lͅl 3*Cil3!"C!Ñ2!"C!9>l:CG̗; :A!9>lÑ2}27"7}27"7ŗ27go=27,"R|5ͩ38 L5>0\5!##!"R*R*7 R>!"7ͻ }>7:7( :7(C;!7~6(4:7(.> 48yN4:R!76067627é3> 425y("4 ;>7!/5! 2R/5>425>425y/!/5{27*7425w#:7œ4>425{(! /5425425! /5!7:7(4 Qé3E767>48 yO_0>c  0!xp.8.8.7:77}27$5>40D5ү37Q}?*7"7!75*7[7RDM*7?q0 ͫ\>7*7"7:727"7"7!"R}2727276276P>48 y(#C(ͻ }  !!76>27!"Rͻ }5:76*R*7RQ!"7d6;!7N;~/O;*7~O~#O;:7 ;J;; >27;4> 48.y(.( (/.2R$5y ͻ }5 g76!D55!Q!75*7"7!74:75!*7Kq*7"7^=V>)|277ͮ7 Timeout -- trying checksum mode Awaiting handshake Wrong block received -- aborting Time out waiting for ack -- aborting CRC requestedT 7{  ;7 { F ͏F:D !9>l8l|7!9>l#Cl+8lͮ77K2{  8ʹ{ Fʹ ͏F:D *'8*%8!"%8*%8!͢lʨ9K878K2ͮ "'8ͅla8*Cilj8́ *'8ͅl8*'8ͅlilʦ8! 7!9>l*%86"%8"'8*C|8*%8#"%8+!9>l*'8}*'8ͫ9H8*'8Í9*%8|9*%8+"%8!9>l8l! ͬl99!9>l*%88lil998å9*%8|g9*%8+"%8!9>l8l! ͬlK99!9>l*%88lilg99å9*%8#"%8+!9>l*'8}*'8ͫ9å9~m88"9"9j9H8Ý8K2!9>l! ͬl9!^7!9>l@Cl!9>lil9!9>l7K2!:c *:*CZE":!":!9>l&}oClT;! 8*C|S:! 8!96 #6l;*C|n:!8! 8l;!9>l! ͡lʑ:!9>lililʚ:l;!9>lͅlʮ:*Cil:!96#6l;*C<;!9>lͅl:*Cil":Q;!9>lͅl:!96#6!^8!9>l@ClQ;!9>lͅl":!96.#6Q;!":Q;Q;~m::;0;l;~m2: S: S: V:q:ʹ*:ͅlʄ;!9>l8ʹ*:ZEʹ":yO;y :C ;:CF :A;:C-ôʹ([C.6(*;*;*;!";!9>l";*;8l|@<&<*;#";<*;8lͅl=<*;#";<*;W>";!7!9>lc*;ZE";";";*|<*z<*x<*v<*tl>l|ʽ<ú<*x<#"x<Ø<ð<*x<###!l"z<*z<#W>"|l>l9d=<*|l#͏lʼ=*{=!9>l#_@*C|=*C!9>l+ A*CZE!!!!9>l+!D"C6E"{=!7B!9>lA*{=*C|:>*C!_@G>*C!_@D?!"C*C|m>*C###8l##p>!"S>!9>l*S>Cl*C"Q>*Q>#8l!9>l#͏lʱ>*Q>!9>l#_@*C|>*C!9>l+ A*CZE!*S>!!9>l+!D"C6E"Q>!7B!9>lA*Q>*C*C|1?*C###8l##4?!_@D?!"C*CZE*CZE"M?!9>l+"C!9>l:D9l&͝lʍ??!9>l}2D?:D9l&!9>l͡l?:D9l:D9lm!9>l+ͰB!9>l}2D?ͿE*M?ZE:D9l&!͡l?:D9l:D9l!:D9l!D"?6E"?!7*?ZE*?#l!9>lZE"9@!7*9@ZE!9>l#8l"[@!9>lql|@!9>lZE"]@:D9l!9>lͬlʸ@!9>l*[@m!ͰB!9>l}2D*]@ZE*[@!9>lͬl@*[@!9>l+HBA!9>l*[@+HB!9>l###8l"A!9>lql(A!9>lZE"A!9>l}2D!9>l*AͬliA!9>l*A+HB{A*A#!9>lHB!9>l8l!9>l͝lA!9>l!9>l#8l!9>lm!ͰB! 7*AZE!9>l#A*CZE"ABB!9>l!ͰB!"A*A!ͬl5B'B*A#"A BK2!7BBB*AZE*CZE"DB!9>l!ͰB!9>l"FB*FB!9>l͢lʘBÍB*FB#"FBnB!CcÃB*DBZE!9>l##8l&!8!=8!9>l 8!9>l 8!Cc!Cc!Cc!Cc! 7T )(gGOTERM -- Terminal Emulator Copyright 1981, 1982 Michael M Rubenstein Version 4.02(20 Oct 82) VF3!9>l=>l!9>l7!9>lCl!9>l9!9>lCl*D!l"Dͅl>D!D͚c*D! 9>l}*D#! 9>l}*D##!9>l!9>lm#}*D###!9>l}*D"DInsuff memD!9"yI!{IT]  s#r*###"cI###"hI###"lI.h~2D6jI!D"D>2D>2Dgo"D2D2D2c=EáF!/E~_jI#=7 oE:D2D2D2D2D2Dgo"DͿEoE:D2cWF͕F*D͡F|( !D"DD͡F!D"D!D͡F!DˆÕF!D!DˎSD:D(!D:D!D!D5!D˖:D(3:aO:D!D*D(88 820a28  g*DkISkI} OkI OkI*D+"D!D54#"D:D!D5:D=:D|F:D_"D:D!D5*D"Dɷg>o:D_͡FͩF:D*D"D*D~w!D~5H{3H~{›G() (R (W ( (O6F ʖG(2]I қG>2D:D2DG:D((7g(9G(8E(BQ({RIWITlGF=(S(øF72D˶˾~w~wɗ2D:D|F:DO!DlG!ZxIʹ= SDʹlG:D!D=*D(O T]+WxI6 ]xI:D2\!9>l!I!IN"IͅlI!"C!8]ͅlI!*I!$!/i*I*I}*I#! !?/i*I{!"I*C"I*I|"I*I!ͬlXJ*I!͡lilJjJ|"I?J*I#"I*I"I"I*I)))))*I#"I!"I*I! ͬlJôJ*I#"IÙJ*I#"I+*I#"I+8l&}o}êJaJ*Im*C"I*C"I*I*Il>K K*I"IJ*I#*I! <|*I *I*I |PClJ\K!"C!"I!!9*ZK*XK*I!l"TK*TK|\LÑK*TK!l"TKvK*TK"VK*VK*IͬlYLòK*VK#"VK×K*VK*TKmm*C"XK*XK*ClK*XK*TKm*XK"ZKlL!͝lilVLL*TKm*XKm"XKK!9*XK!<|*XK*ZK!<|*ZK!9!<|LèKÁK"XK"ZK!9! "jL*jL+"jL|LÄLrL!9>l8l!9>l8lͬlʤL!!9>l#Cl+8l!9>l#Cl+8l͝lL!ÁL!*C++ilL! W>1d!P*I*I*I*Im*I9d*Im*C"L*Im*C"L! "L*L+"L|ʀNYMGMC!"L*L*LlxM*L+"L#iluNÄMbM!"L*L!ͬlʷMÞMÊM*L*L#"L+8l7ÛM!.7!"L*L!ͬlMMM*L*L#"L+8l7M*L >l"L*L 8l|N!Pc-N1d!P*L9d*L*Il*L*I_lͅlͅl*I+++m"L1d!P*L9d*L"LÁM!PcVMD?!9>l)*I!*I}o͠hh"I!!9>l)*Im͠h"I!9>l!9>l!ClCl{"N!9!9>lhLsCl#ͅl&O!!9>l|5|"N*N##8l&"I*N###8l&"I*I&+++!m"N!9>l*N>l#Cl'|"N!9>l!9>l>lCl!9>l>l"N*N|PòOäO*N#"N+8l"N!"N*N|O*NilPO*N+"N*N+"NO*N)"N.|g| P!9>l>l+ClOïO!9>l>l*N>l#*I##lmCl!9>l>l*NmCl!9>l>l*NmCl*N|!9>lA\*zP!9>l!$<|*zP,|!9>l*zP#8l&}|ʺP!*zP!>lDrive %c: files %d Used %uK Free %uKT 65536%6u%5uK  *Q!}=!7QQ!Qc!*)8:*9lͅl=QéQ:*9lͅlXQ!};Q!*"Q*Q8l|ʎQvQ*Q#"Q^QK2*Q*Q8lh}lQ!* |ʞQéQ!QcQ">*CͅlʸQ?"Qfkey: ??? *RQ"R*RQ"R}'o|'g!Rc!Rc{2RRRc{2RfR*R|(8!RcfR! 7:R_!R^#Vc( :RmR!Rc|mR}vR0:8O7 Awaiting block Sending block *** eot *** retry TRRRRR SS(S0Slͅl"C!"C!9>lS!["S*S8l|SS*S#"SS*S8l;S!T!!T~mSISAS!9!"C!"S!W>"T!"C!\c!"R!9!}W*Sͅl0U!98lͅl"T*T|ʀT!"\ÃT!*\c!4\c!" T!9* T8lilTùT* T#" TÖT!9* T8l7ïTC!9##! \wi"TͅlT!"SU*T! \*T|U!;\ U!>\͔iͅlU!"S!9#8lil"T*SͅlV*T!!C*T|.V*T!Ja!.;ZͅlV!" T* T!ͬlUÖU* T#" T{U*Tk" T*T|ʳU* TͅlilʿU!" T* T#ͅlUU!9* T* T}ÌU!9* TY* T#ilU*SͅliluU V!"S*T8k*Sͅl+V!9!YV!"S*SͅlʺV!.;!9!}W" T*S|aVúV!" T* T* TͬlʷVÂV* T#" TgV!9* T8l*Tk|ʴV*Tͫ\!"S!"S÷VxV4V*S|V*T!A\! \͔i*T8k|V*Tͫ\!7*S|BW!"C*S&W!D\c7W!W\c7W!p\c7W~mWWW!;[W!\c*Tͅl[W!.;*TZE!"C!9*R"yWQ&}o0"qW!"{W!"RåWßW!9>l|ʾW*yW*{W R!"{W!"oWlS!"SWW͑Z|W!Z"uW+ͅlW X*uW+++il X!/;WͦZ"sWͦZ"uW!͡lUX*oW!ͬlLX*oW#"oW+!9>l*uW}RX! "{WXS"wWͦZ*wW͏lqX! "{WX*S|ʰX*S.|@g|ʐX!"{WíX*S.| g|ʧX!"{WíX!"{WX*sW*qWqlX*oWX*qW*sWͬlX!.;âWX!"S!!/;QâW*R"YQ&}o0"X!"Y!"R-Y'Y!"S!9>l|OY*Y*YRWY*YQ!"YlS͑Z|iY!͈[|wY*X&[|ʅY!"X*X!9>lͬlYêY*X#"XËY!9>l*X8l&[|YàY!9>lͅlY!qS!͈[|Y!͈[|YS&[|Z ZZ! "X*X+"X#|cZ%ZZ&}o"X*XͅlAZcZ*XͅlOZ͑Z|XZ!c"Z*Xͅl|ZQ!"YÍZ!͈[|ʊZ Z*Yͻ |ʠZ!"S!Z"ZͅlZ!"S!qSæZ*Z+++ͅlZ!*ZͅlZZ&}o"Z*ZqS*Z"Zͅl [Z*Z.|pg*SKl"S*Z&!9>lqS!9>lV[!͈[!9>l@Clw[~m<[<[<[<[<[<[<[!9>l͈["[|[*[&}o"[ͅlʰ[!"S*[ͅl[!p"[&}oil[*[+"[#il[[[[!9>l;!#CPMOsborne,PA, CIS File Transfer sendingreceiving file rbwb/d Cannot open file Communications failure Canceled by operator Transfer successfully completed !W>"\1d!$]!9>l*&9d!9>l2###8l&}o}!9>l68l&}oͅl]!9>l28l}o}!"C"6Error on file %s *C|H]*C#l!9>ll"Cͅlr]!"C"6!v];!!Insuff mem]!9>l!`wi"C*Cͅlʫ]!!8]ͅlʺ]!! ]!"C*C|]K2*C8k!"C!9>lm*C"]!9>l"]*]!9>lͬl^4^*]#"]^!"]\_"]ilT^*]ililʂ^K2*]!ͬl^*]#"]+*]*]}:^*]ͅlʜ^\_"]ililʯ^*]*C4c*]*]6*]"]K2*^! W>"^!7*C"^! "^*^|O_^^͖`*^"^*^8l|&_*^#"^+8l7_!`c*^+"^|B_! 7*^"^^*^ZE*Cͅli_! K2*C=>lͅl"Z_|ʄ_*Ck"X_*Z_|ʚ_K2*X_#ͅlʮ_]! *X_*Cͅl_!9! !!9>l͠hhCl!9>lm"_*C"_! !9>lm"_*_!͝lv`+`*_+"_`*_"_!"_*_+"_#|i`J`7`K2*_*_*_8l}*_#"_G`*_"_!`! !9>lm! ]rT!"`K2*`!x͡lʯ`!9>l&}oCl`! 7*`#"`&}oͅl`*`|`*`+"`!7a~m` `!9>l! ͡l(a!9>l!ͬlilAa*`#"`!9>l7!9>l!Ha|P"Da1d!pb!9>l*&9d*Ha|ʊa!bcÚa1d!b*Da9d!bc*Da+ilʴa!s7C*Da!%! ;mZ|"Fa*Da!l*Fa*Da!l#"Ba!9>l|b*Fa!l*Ba"Ba*Ba*Fal%b*Fa"Ba*Ba!6m"Fa*Ba!6m!<6m"Da*Ba!<6m"Ba1d!b*Fa*Da*Ba9dFile %s contains 65536%u sectorEstimated transmission time is %02u:%02u:%02u ! W>"b!c*bZE>7b> 7bbbbbbbb! cycG!% &,% - !9>l?!98l}!9>l!A͡llc!9>l!Z͢lil–c!9>l!a͡lʓc!9>l!z͢lilil! *!nk!9>l8l|c!9>l8l*!nkçcm!9>l8l|c!9>l#Cl+8l7c!9>l!0͡ld!9>l!9͢liloh!9"d!*d++"d>lͿd*d!9lpd*d++"d>lbeNd*d++"d>l""d*"d*d++"d>lͿdNd*d++"d>l"$d!*d++"d>lͿdNd!9>l""d!9>l" dd* d8lild* d8lilil e* d#" d+8l ed*"dQe*$d#"$d+!98l}*$d6ae!98l7ae!98l*"dkaeae~me+e:e* d#" d+8lͅlte* d8lͅl"/d|ʐe* d#" d* d8lͅlʦe!0ée! }2(d!"&d* d8l!0͡le* d8l!9͢lileeóe*&d m* d#" d+8l"&de! "-d")d!"+d* d#" d+8lf!"-d!9>l`gg!")d!9>l`gg!")d!9>l`gg*&d+"&d*/dͅlnf?g!9>l e?gg*/dͅlʣf!9>lrh*&dm"&d?g!9>l8l|f!9>l#Cl+8l e*&d+"&dãf?gg* d+8l eg~mfd"fu1foFfx[fcfsfd!9>l! ͬl*g!9>l09g!9>lA e*&d+"&d!͡l_g:(d9l e?g!9>lrg?g*pg!9>l"pg*&d+"&d#*-dͅlʶg*pg.|g|ʶg*&d+"&d#*pgm"pg!"+d*pg*)dlg*pg!lilg*/dͅlg?g*+d|g!- e*pg gjh*)dͅlh*pg!l:h*)dͅl0h*pg! 6m:h*pg!lrg*)dͅlZh*pg! 6meh*)d+*pg_l g"pg!9>l"ph*ph8l|ʑh*ph#"ph|h*ph!9>lm!9>l!9>l͝lh!9>lh!9>l!9>l!9>lͬlh!9>lh!9>l!9>l!aͬli!9>l!z͝lil!i!9>l,i!9>l*-i!"-i!9>l*-i͏lriWi*-i#"-i9i!9>l#Cl+!9>l}Mi"-i!!9>l!9>l͔i!9>lͅli!9͊kCl!9>lͅlʽi!!9>l!jnk!9>l!9>l}k|i!9>l#l!!"i!9>l8l|ʎj!9>l#Cl+8ljoj!"iËj!"iËj!"iËj!9>l!j}kËj!9>l!j}kËj!Ëj~m%jr.jw7ju@jbTjchji*i|j!9>l9!9>l8l++ͅlʾj!j*CCl!9>l*i͑k|j!9>l#l!!9>l/i/x!9>l!A͡lk!9>l!Z͢lil.k!9>l 5k!9>l!"6k*!n!9>l͏ljk!9>l͞k"6k!9>l#l*6k(oogJooYpqKq?q3F $~?6? Cq8o& ~@Cq (w@Cqo&Пgo3F y 7q8O7qûz({{͘mÇ~og~#fos#r}o|g}o|g}o|g|!,|}!ƒlƒl,ɯ|ol!|}!-ìl|¬l}llzl!l--{!-zl{lllzl{l!||g}ol|g}ol)m{ozg+|/g}/oDM!z>)mS\))1m =)mɯFmzm|mMD!x_mjS\>))gm# om =_mmmN#F#xʗm~#~#€m€m!mMpͽ{ͰD!m66Yp"!n"#n"%n!N#c E/pcon 'nm$x>(<>n"#nؗ>n"%nؗ !R0non(o>Yp>P͵z6 T]$6  T]#6T] ( (o: >!$o8Qoy>!'o8A. o>!/o8./ o8w\ o8/w!8 R>7!8!"p (ѷR$%Mɹ (  6 #=͠zͮzA2 GOx ,=;*?[]'x*s|x>qGgo"s2s$x:sMp6~yw66#T]$~ͮzw#p~% !"s($!s~>7 /#~wC#~wD>Zq*s!A[s"ss#r6 'xw=w>n7f8u;t<$xADM!s^#V|( B 6~>Zqw6>>> > > >$x6~ >7nCfD_~#foͦrN=F>x >Zqn;f<~# q=p>u;t<ͷr.> Zq071. ( x > Zq (w@> Zq (w@Gx͞wpN9F: x>> ZqBu=t>͞w~=ݶ> 5n( >Zq05n9f:u=t>^=V>n;fu;tZq2f( y(6nbO>Zq0px~# >Zq~?6?݆@6@( 2f(6nb3F  6p74fĮz>76v>͞wp=p>CONbLSTbPUNbRDRbDUM(sMEMy q6F Ͷv >vw!w"w#wEwF>Gy HAO*&tH&t|7!s^#V{(!~G~= x (x!7 j %6Nxu6F(:>2^͕v(6F22^ ~' (>w$'w 2N(9!w\$\<(!wBw$!wKw!wBwvw6vxuؗ76v͞wTu5n9f:p >0$!au  6ѷRu=t>7ȗn!f"uEtFn!f"#u!t"ɷ5~^!V"^EVFs!r"5v̩uͷuus!r"~=rn;f DM55px`i(au  B(0Tu>76v͕v(  ͕v("Ttfw$!fwͶvfwv l\ 2l\!s~#fo  w  ~2\!w>94060+!w] \8!] !' O~#TEMP0000$$$BAKXs'trrumqqt'x6~>7~7ݶ86^ N9F:x nCfD+F+Nx7q9p:6ͻz8u7t86pwɗ6~6f(n7f8({6w7w86^w9w:67!Px0!Ex!9~#foXx"My'x_!$y:Oy=8bkPy ~W{7 E*yy}xy#^#Vzyx( zyy7yy*Myxyxy7*Ky|x}x0:8_dy y00  {0x 'yx ***ERROR ERROR OCCURED AT }yyyyyyyyyyyFILE NOT OPENBUFFER TOO SHORT -- WRITE ERROR -- CLOSE ERROR -- INSUF MEMFUNCTION NOT LOADED ZERO DIVIDEINVALID ARGUMENTUNABLE TO OPEN REDIRECTION FILE$!mz]z(6:#]z6.#]z +6mz!~z6F!z6N!z!8w#  (OUTPUT)(INPUT)(I/O)0:?͕zA[?a{?ͧz ͻzXx! 8$!{{z(0{B8!033+r+sq#p###N#F#q#p*:||̽{!2 {8*:| ":|q#p###'x++DM!{{|(B 8{B  R`i{ | }q#p`i{z( R B{ | }{`is#r+{DM++[:|R|!{{B  C:|go"{*":|!R9?8[:|R>^#V++V+^##o&ogog#xR8 + +go>)j0 0= B0 >j=jB?8 !og#xR8 + +go>)j0 0= B0 OTERM.DO Documentatio o OTER Termina Simulato Versio 4.0 ( Oc 82. Copyrigh 1981 198 b Michae Rubenstein, Reformatted by R. Hunter Morey PAGE 1 Credits Th mode protoco use fo fil transmissio wa develope b War Christensen Th mode protoco wa extende t us th cyclica redundanc cod b Joh Mahr Th subprogra t comput th cyclica redundanc cod wa writte b Pau Hansknecht Th windo manage i base o on writte b Rober Lansdale Al fou gentleme hav mad thei wor freel availabl fo noncommercia purposes Idea fo man th feature o OTER hav com fro othe termina programs Th author o thes program mus shar th credi fo OTERM Mos o OTER i no writte i C I wa compile wit th Softwar Toolwork C/8 compiler larg numbe o peopl hav offere suggestion an encouragemen i developin thi program than al o them Th CompuServ CP/ Interes Grou (CP-MIG ha bee valuabl foru fo discussio an sourc o grea man idea use i OTERM. PAG Description OTER allow th use t communicat wit tim sharin services computerize bulleti boards an othe computers Specia feature o OTER include: - circula lo o th sessio i kept Thi lo i unde th contro o th user I ma b browse withou exitin OTERM. - a optiona warnin i provide whe th lo i almos full I th remot devic support it transmissio wil b halte wit contro S I fil i bein sent th transmissio i interrupte (i ca b restarted.) - fil ma b receive withou protocol I th remot support ^s/^ t sto an star transmission th fil ma b large tha mai memory. - file ma b sen t th remot compute withou specia protoco fo transmission - an comman whic ca b entere fro th keyboar ma als b entere fro fil o fro functio key. - fil transmission ma b interrupte fro th keyboar o fro comman containe i th file Transmissio ma b restarte withou los o data. - th War Christense mode protoco i implemented Thi allow erro fre communication wit remot CP/M o othe computers. - th CI protoco i implemented Thi allow erro fre communication wit CompuServ Informatio Services. - optionall line ma b wrappe s a t kee word o singl lin (wor wrap. - command t OTER ar entere usin functio ke 1 Hel menu ar availabl b enterin i respons t an prompt. - extende functio key ar available Name o extende functio key ma b u t 12 character lon an dat sen b functio ke ma b u t 409 characters. - th director o dis ma b viewe fro OTERM. - files may be deleted from OTERM. - files may be typed from OTERM. PAGE 3 Limitations. OTER wil ru onl o a Osborn computer Th revisio leve mus b 1. o highe (th origina re i n longe supported) N printe suppor i provided OTER i primaril designe fo operato attende communications Ther i n provisio fo aut answer OTER contain n provisio fo specia modems Howeve wit som modems functio key ca b use fo autodialin o othe functions. PAGE 4 New features/corrections in version 4. Note Versio 4.0 i almos complet rewrit o th program Muc o i ha b rewritte i C Browsin o th lo ha bee implemented Th CI protoco ha bee implemented Acces t th director typin an deletio o file hav bee implemented Extende functio key hav bee implemented windo manage i no use t allo promptin fo commands displa o message fro OTER an o th lo an directory Escap sequence ar no use excep fro file. PAGE 5 Using OTERM (summary). Th mode shoul alway b i ful duple mod fo us wit OTERM Follo th mode manufacturer' an th Osborn instruction fo connectin th modem Not tha almos al modem' wil requir tha pi o th mode b connecte t pi o th compute an pi o th mode b connecte t pi o th computer O exitin OTER th RS23 interfac wil b rese t th sam option a a entry Th settin o th rs23 rat an th lin siz o th dis hav n effec o OTERM OTER alway use it' interna settings. A distributed o startu OTER i se t communicat wit mos tim sharin services Th defaul characteristic ma b change temporaril o OTER ca easil b modifie t star u wit differen characteristics Establis communication followin th mode manufacturer' an th remot service' instructions. Command t OTER ar precede b functio ke (contro 1) Othe functio key ar use fo OTER functions Severa OTER function requir significan tim fo dis acces durin whic OTER canno chec th modem I th remot respond t contro t sto an contro t restar an OTER i informe o thi throug th dela command OTER wil sto th remot durin thes operation an n dat wil b lost. PAGE 6 Function Keys. OTER take ove th functio keys Th functio key hav th followin meanings: ---------------------------------------- | 7 | 8 | 9 | | scroll up | scroll up | cancel | | half | full | file | | | | or fk | ---------------------------------------- | 4 | 5 | 6 | | scroll down | scroll down | cancel | | half | full | special | | | | display | ---------------------------------------- | 1 | 2 | 3 | | command | extended | standard | | | function | function | | | key | key | ---------------------------------------- displa simila t th abov ma b viewe b enterin th fkhel command. Key Use Of Function Keys --- ---------------------------------------------- 1 Signals OTERM that a command is to be entered. 2 Signal OTER tha a extende functio ke i t b entered OTER wil promp fo th nam o th functio key Extende functio key ar installe i OTER wit th progra OTSETUP Note tha i th nam o th functio ke i singl digit th Osborn functio ke (installe wit SETUP wil b used Thi functio ma no b use whil enterin a OTER command. 3 Signal OTER tha a Osborn functio ke i t b entered OTER doe no promp fo th nam o th functio key whic mus b singl digi o singl letter I singl letter th extende functio ke installe b OTSETU wil b used Thi functio ma b use a an time includin whil enterin a OTER command. 4 Scroll th specia displa dow b hal th siz o th window 5 Scroll th specia displa dow b th siz o th window. 6 Clear specia displa (brows log directory type fil o th functio ke display). 7 Scroll th specia displa u b hal th siz o th window. 8 Scroll th specia displa u b th siz o th window. 9 Cancel protoco fil transfe o halt transmissio withou protoco o file transmissio withou protoco ma b continue withou loss. PAGE 7 Extended function keys. Extende o Osborn functio key ma b neste t dept o 16 Ther i n checkin fo recursion Al functio key ar cancele whe fil rea i started bu fil rea ma contai functio keys Tha is i functio ke contain fil rea command nothin i th functio ke wil b processe afte th command Extende functio key ar installe i OTER wit th progra otsetup Se otsetup.do fo details. PAGE 8 OTERM Commands. Whe functio ke i entered OTER open windo a th to o th scree an prompt fo command Yo ma the ente comman wit o withou arguments I mos cases i n argument ar entered OTER wil the promp fo them I fe case (e.g dir defaul wil b used A an promp yo ma ente (followe b return t se lis o possibl operand o descriptio o th command I scannin commands OTER allow abbreviatio t th minimu numbe o letter neede t identif th comman o operand Command ar checke i alphabeti orde s th lin comman ma b abbreviate "l" bu th lo comman require a leas "lo" Command an operand ma b b entere i uppe o lowe case I som case (e.g log i n operan i entered th curren statu i displayed Examples: cmd: log on (will turn log on) cmd: log (wil displa lo statu an promp fo operands) cmd: quit (will exit OTERM) Severa command requir th entr o fil name OTER use generalize fil syste whic doe no permi th us o "/ o "\ i fil nam (o cours th usua illega character ar no allowe either) Th slashe ar use t se flag fo th fil system Th onl fla whic i o us i OTER i \b whic cause a ol fil wit th sam nam t b deleted rathe tha rename t .bak Simpl appen thi fla t th en o th nam (afte th extension wit n intervenin spaces Th ol fil wil onl b delete afte th ne fil i successfull written Al fil name ma b entere i uppe o lowe case ne dis ma b mounte wheneve ther ar n ope files ne dis ma als b mounte o an driv excep th defaul driv (th driv whic i show i th CP/ prompt e.g A> wheneve ther ar n file ope o it Remember haltin th readin o fil wit functio ke doe no clos th file. T modif OTER t us ne defaults simpl ente th desire commands exi wit th qui command an sav th progra wit th CP/ sav command Remembe t chec th curren siz o OTER wit sta befor enterin OTERM. Th followin section describ i detai th OTER commands. PAGE 9 log command. lo o th sessio i kep i memory A distributed thi lo i enable a star up Th lo i circular tha is whe th lo i filled character a th beginnin ar delete a ne character ar added Th siz o th lo depend o th version Th lo i alway cleare whe OTER i entered I thi comman i entere withou operands th statu o th lo wil b displayed I ful duple mode onl character receive fro th remot devic ar entere i th log I hal duple mod al character sen o receive ar entered I hos mod onl character sen ar entere i th log. Sinc OTER doe no recogniz deletio o character o lines i usuall wil b necessar t edi th lo afte writin i t dis t eliminat errors Th lo ma b edite wit WordSta o ED Thi i als usefu fo eliminatin extraneou materia fro th lo (e.g command o message whe progra sourc fil i liste an logged. Th followin operand ar recognized: Operand Function ------- ------------------------------------------ clear Clear th lo an start enterin dat int it. endfile Stops automatic saving of the log. file Start automati savin o th lo i file Th fil nam i entere afte th wor "file" I no entered yo wil b prompted Thi mus b th las operan o th line. nowarn Turn of warnin o lo bein almos full. off Turn of th log Dat currentl i th lo i no lost. on Turn o th log Dat currentl i th lo i no lost. warn  Turn o warnin o lo bein almos full Whe th lo i almos full yo wil b informe wit thre bell and i th remot respond t contro an contro (an OTER i informe o thi throug th dela command contro wil b sent contro wil no b sen automatically Warnin i no effectiv i th lo i bein automaticall saved. write Write th curren lo t file Th fil nam i b entere afte th wor "write" I no entered yo wil b prompted Thi mus b th las operan o th line. commo (an th simplest metho o usin th lo i t simpl ignor i unti somethin i receive whic on want t save Th lo i the save an late edite t eliminat unwante material. PAGE 10 browse command. Th brows comman i use t vie th log Whil active th scree i spli wit th lo displaye i th uppe hal an th termina displa i th lower Th scrollin functio key (4 5 7 an 8 ar activ whil th lo i bein displayed To turn off the log, use function key 6. The following operands are recognized: Operand Function ------- ------------------------------------------ down Followe b number Scroll th lo dow th specifie numbe o lines Note durin scrolling inpu fro th remot canno b completel processe an som dat ma b los i th numbe o line i large tha abou 40 (a 30 baud) Thi mus b th las operan o th line. end Start browsin th log showin th las dat entered. start Start browsin th log showin th oldes dat entered up Followe b number Scroll th lo u th specifie numbe o lines Note durin scrolling inpu fro th remot canno b completel processe an som dat ma b los i th numbe o line i large tha abou 40 (a 30 baud) Thi mus b th las operan o th line. If no operand is entered, "end" will be assumed. Th displa o th lo wil no b usabl i th lo doe no contai lin feeds Thi wil occu i lin feed ar supplie o th consol rathe tha b th remot servic o b th transmissio routines. PAGE 11 cis command. Use t tur recognitio o CompuServ protoco o o off Usually recognitio o CompuServ protoco wil caus n problems bu ther i sligh chanc tha som othe servic wil sen contro sequence whic mak OTER thin i i engage i a exchang wit CompuServe I thi happens tur of ci protocol. The possible operands are "on" or "off". I entere withou operands th statu o ci mod wil b displayed. CI fil transfer ar initiate b th remot b sendin specia sequenc o characters OTER wil notif yo o th transfer I i i a uploa (transmissio t th remote th fil siz an estimate transmissio tim wil b shown. Th progres o th transmissio wil b displayed Unde thi protoco block ar variabl length bu ar normall eithe 12 character o 25 characters Whe sending al block except possibly fo th las ar 25 characters. fil transfe ma b cancelled wit functio ke 9 Th othe syste i notifie o th cancellation. PAGE 12 clear command. Thi comman clear th screen Thi i loca operation Nothin i transmitte o logged. console command. Th consol comman control th displa o informatio sen o received I ha n effec o th lo o o th dat transmitted: I entere withou operands th statu o th consol wil b displayed. The following operands are recognized: Operand Function ------- ------------------------------------------ autolf Treat carriag retur a th star o ne lin (i. display a i i wer carriag retur lin feed). bsdel Delete th previou characte whe backspac i received. control Contro character ar passe t th scree outpu routine an ac a define i th Osborn user' manual. ffclr Clear th scree whe for fee i received. ignorectl Control characters are ignored. maskctl Contro character ar displaye a periods. noautolf Turn of autolf carriag retur move th curso t th left bu doe no star ne line. nobsdel Turn of bsdel backspac move th curso lef on character bu doe no delet th character. nowwrap Turn of wor wrap O reachin th en o th lin o th screen ne lin i starte immediately. showctl Contro character ar displaye a "^ followe b printin character Rubou i displaye a "^?". wwrap Turn o wor wrap O reachin th en o line th lin i broke a wor boundary Fo th purpose o OTERM wor boundar i carriag return lin feed spac o horizonta tab Note wor wra i don a th en o th logica lin a specifie i th lin command no necessaril a th en o th physica screen Thi optio wil probabl no b to usefu i th lin siz i se t greate tha 52. Th fou option t contro displa o contro code appl t mos nondisplayabl codes Carriag return lin feed bac space an horizonta ta ar no affected For fee i no affecte i ffcl i on Null ar displaye onl unde showctl. Contro z whic normall clear th scree o th Osborne wil b ignore i contro an ffcl ar bot se on. PAGE 13 delay command. Whe sendin fil o functio ke t remot computer i ma b necessar t giv th remot som tim t proces th data Thi i accomplishe wit th dela command Excep fo "usectls" th dela mod command no meaningfu excep whe fil o functio ke i bein sent I n operand ar given th dela statu wil b displayed Th followin operand ar recognized: Operand Function ------- ------------------------------------------ char Set dela mod t character Whe dela i required i wil en wheneve characte i receive fro th remote Thi i th opposit o time. chdelay Causes a delay after each character sent. delay= Followe immediatel b digi (n space) Specifie th lengt o characte o lin delay I 0 th dela wil alway b unti characte i received. delctls Cause transmissio t sto whe contro i receive fro th remote Transmissio wil resum whe contro i received. lndelay Causes a delay after each line sent. nochdly Turns off chdelay. nodelctls Turns off delctls. nolndly Turns off lndelay. noprompt Turn of waitin fo promp afte eac line. nousectls Turns off usectls. prompt= Followe immediatel (n space b character Afte eac lin sent OTER wil wai unti th specified characte i received contro characte ma b specifie a followe b characte (e.g ^ fo NUL). time Cause characte an lin delay t las th specifie time regardles o character receive fro th remote Th opposit o char. usectls Inform OTER tha th remot respond t contro t sto an contro t restart Thi shoul b specifie wheneve possibl t preven los o dat o dis accesses. Us o delay fo fil transmissio ca b bi tricky Usually combinatio o lin promp an shor characte dela ( o 2 work wel i th remot provide suitabl prompt I othe case fairl lon (4-7 tim delay ma b needed Wit hal duple systems lin promp o lon (5-9 tim delay wil b needed. Som tim sharin service (mos usin DE equipment wil sen contro t sto transmissio an contro t restart I 'delctls i set th transmissio wil wor well bu th displa wil probabl b incoherent i th remot i sendin durin th transmission I prope displa i required us lin promp and characte dela also. PAGE 14 directory command. Th director o an dis ma b viewe wit th director command Th onl operan i th dis driv letter I omitte th defaul dis i used Th director i displaye i windo a th to o th screen I ther ar mor file tha wil fi i th window th scrollin functio key (4 5 7 an 8 ma b use t vie th entir directory Th displa i turne of wit functio ke 6. diskspace command. Th diskspac comman ma b use t displa th dis spac use an remainin o an drive Th onl operan i th dis driv letter I omitted th defaul dis i used. erase command. Th eras comman i use t delet fil fro disk I take singl operand th nam o th fil t b deleted I i possibl t delet fil whic i bein used suc a th fil bein type o read Th eras comman wil b accepted bu actua deletio wil b deferred unti th fil i closed I th fil specifie i th nam o temporar fil generate fo outpu (fo th lo fil command) th eras comman wil b accepted bu wil b ineffective Suc file ar o th for TEMPnnnn.$$$ wher nnn ar digits. PAGE 15 file command. Th fil comman i use t rea fil a i i wer type a th console Th fil ma contai command a a escap characte followe b th digi fo th functio ke desired Th response t th prompt i an mus follo i th file Al response t prompt mus b terminate b carriag retur an lin feed A escap characte ma b sen b enterin tw escap character i th file Thi sam techniqu i use t ente command fro functio keys Contro character ma b entere int th file o ma b specifie a escap followe b characte (e.g es fo NUL). Thu fil ma contai eithe Osborn o extende functio ke calls Readin o fil terminate an activ functio keys I fil contain comman t rea anothe file contro wil pas t tha file bu wil no retur a th en (file ar chaine no nested) Readin o fil ma b temporaril halte b enterin functio ke fro th console I ma b restarte wit th fil rea command I thi comman i entere withou operands th fil statu wil b displayed Th followin operand ar recognized: Operand Function ------- ------------------------------------------ endfile Terminate readin o file Th fil i closed. halt Temporaril stop readin o file Th fil ma b restarte wit th rea operand Thi comman i onl usefu i entere fro file. lf Allow transmissio o lin feed containe i th file Note thi als applie t functio keys. nolf Ignore lin feed containe i th file Note thi als applie t functio keys. read Followe b th nam o th fil t b read Thi mus b th las operan o th line I readin o fil wa halte wit functio ke o b fil hal command th fil nam ma b t continu th file. PAGE 16 fkhelp command. Displays the standard OTERM function key usage. line command. Set th logica lin siz t an lengt fro throug 128 Th onl operan i th lin size NOTE Th lin siz affect onl th display Th lo an th transmissio ar no affected I entere withou a operand th curren lin siz wil b displayed. PAGE 17 modem command. Use t se th characteristic o th transmission I entere withou operands th curren transmissio statu wil b displayed Th followin operand ar recognized: Operand Function ------- ------------------------------------------ 300 Sets 300 baud. 1200 Sets 1200 baud. 7bits Sets 7 bits transmitted. 8bits Sets 8 bits transmitted. autolf Set automati transmissio o lin fee afte carriag return Thi optio i usuall require wit hos mode. even Sets even parity. full Sets full duplex operation. half Sets half duplex operation. host Set hos mode Al character receive ar echoe bac t th remote Us hos mod whe th remot i termina (o compute acting as a terminal). noautolf Turns off autolf noparity Sets no parity transmitted. odd Sets odd parity. rs232 Set operatio throug th rs23 connector Becaus o hardwar restrictions thi settin wil sen dat t bot th rs23 connecto an th seria connector. serial Set operatio throug th seria (modem connector Dat i no sen t th rs23 connector. PAGE 18 receive command and crcrecv command. Th receiv comman i use t receiv fil wit th War Christense mode protocol Thi i compatibl wit th variou version o mode (singl fil transfer only) xmode an yam Th onl operan i th nam o th fil t b receive (a i wil appea o you syste -- i nee no b th sam a o th remote) Th crcrec comman i th sam a th receiv command bu cr checkin wil b used Thi i superio t th standar checksu i th remot ca handl it Th fil transmissio ma b cancele wit functio ke 9 Th othe en i no notifie o th cancellation I th othe syste send cance (contro x i plac o th norma bloc header OTER wil infor yo o this Thi ca b usefu whe on en wishe t hal transmission Don' cance o th firs on though i ma jus b transmissio error. PAGE 19 quit command. This command returns to CP/M. send command. Th sen comman i use t sen fil wit th War Christense mode protocol Thi i compatibl wit th variou version o mode (singl fil transfer only) xmode an yam Th onl operan i th nam o th fil t b sen (a i appear o you syste -- i nee no b th sam a o th remote) cr checkin i implemented I thi protoco i i requeste b th receiver Th fil transmissio ma b cancele wit functio ke 9 Th othe en i no notifie o th cancellation I th othe syste send cance (contro x i plac o th norma bloc header OTER wil infor yo o this Thi ca b usefu whe on en wishe t hal transmission Don' cance o th firs on though i ma jus b transmissio error PAGE 20 type command Use t displa file singl operand a unambiguou fil name i accepted Th fil i displaye a secondar display Th scrollin functio key ( an only ar active Th fil mus b standar CP/ tex file excep tha fil wit line terminate b carriag return bu n lin feed wil b displaye properly. wait command Thi comman delay transmissio fo fro throug 6 seconds Thi i sometime usefu i sendin fil withou protoco t allo fo som actio b th remote Th onl operan i th numbe o second t wait. PAGE 21 Protocol file transfers. Thi sectio contain informatio o usin OTER t sen an receiv files Th informatio o us o othe program is o course no t b take a absolute Ther ar man differen version o othe program whic wil communicat wit OTER an detail vary Whe i doubt chec th documentatio o th othe program Mos rcpm' hav hel file o documentatio file available. T communicat wit anothe system on o th system mus hav a originat modem th othe a answe mode (no necessaril aut answe -- th ter answe her refer onl t th frequencie used) Mos moderatel price t expensiv modem ca operat i eithe originat o answe mode. Transfers from OTERM to OTERM I i usuall bes t firs establis communications On o th system i se t hos mod an aut lin fee transmissio (mode hos autolf an th othe t ful duple (mode full) I i the possibl t communicat throug OTERM Onc communication hav bee established th receive enter th crcrec comman an th sende enter th sen command Th transfe wil the begin On ma us th receiv command bu th crcrec comman give greate assuranc o correc transfe a n measurabl cost. Transfers with other systems Th sam metho a fo OTERM-OTER transfer shoul b used i possible Som programs however d no allo establishin communication a termina first I tha case onc th modem hav establishe carriers ente th require commands I th othe syste allow cr checking i shoul b used Som program ar se u fo automati selectio o cr checking I sendin fil t suc program issu th sen comman t OTER befor th othe syste issue th receiv command. PAGE 22 Receiving from an rcpm. Mos rcpm' us th followin method Typ (t th rcpm no a a OTER command) xmodem s followe b return wher fo sendin wit cr checking I cr checkin i no available th comman is xmodem r The OTERM command is send Rcpm' wil no accep file wit typ o .COM Us th typ .OB i th xmode comman (man system wil automaticall chang i i yo forget. Som system wil automaticall pu th fil yo sen t specia area Other as tha yo pu i i som specia are yourself fe don' car wher yo pu it. PAGE 24 Transferring files with CompuServe Mak sur ci protoco i o i OTER (ci on) Yo ma generall leav i on I wil seldo d an harm Ther ar n OTER command directl associate wit CompuServ fil transfers Yo ente command t CompuServe an th syste send th require instruction t OTERM T sen o receiv fil fro you use area o fro anothe use are whic i accessible t you ente th (CompuServe command r xftran You will be prompted for details. T receiv fil fro access ente th (CompuServe command dow wher rbUnable to open function key file oterm.com/bUnable to open input oterm wbUnable to open output oterm Error in reading input otermInvalid function key name: Redef of Osborne standard function key ignored: Function key def too long: Error in output oterm/d!9ͧ!"*!9ͧ9ͧ!ͤ!9ͧ̓ͬ!9ͧ#6!9ͧ!9ͧ!9ͧ2###͡} o}!9ͧ!"3!9ͧ9ͧ!ͤ"5!9ͧ!ʐ!"/!9ͧ"+!9ͧ+++ͬ!9ͧ< !9ͧ9ͧͤ"+!9ͧ< !9ͧ9ͧͤ"/!9ͧ!*+{"+*/{"/!9ͧÌ !"1"-Ý !9ͧ6͡&}@o` !9ͧ;ͧ!9ͧ7ͧq"1!9ͧEͧ"-Ý !9ͧQ$!9ͧ6͡}o}!9ͧ#͡|ʛ !á *3ͧ"-!9ͧ9ͧ*-͟"1*-*5͟"-*3*-*5̓ͬ!9ͧ#6!9ͧ!9ͧ;ͧ*1ͬ!9ͧ=ͧ*1qͬ!9ͧ=ͧ|ʉ Q !9ͧ=ͧ+ͬ% !9ͧ;ͧ͡#l É !9ͧ;ͧ#ͬ*1#"1; Ý   ` !9ͧ6͡}o}*1*/"1!9ͧ9ͧ*1ͤ*+*-"-!9ͧ9ͧ*1ͤ"1*3*-*5̓ͬ!9ͧ#6!9ͧ|. !!9ͧ2###͡} o}*1!9ͧ=ͧʔ !9ͧ=ͧ*1qͬ!9ͧ;ͧ*1ͬ!!9ͧ;ͧ! 9ͧ=ͧͬ!9ͧ=!9ͧ9ͧ! 9ͧ=ͧqͬ!9ͧ2###͡}o}!!9ͧ!" * !9ͧ9ͧ!ͤ!9ͧ̓ͬ!9ͧ#6!9ͧ|\ !!9ͧ2###͡} o}!9ͧ=ͧ!9ͧ7ͧ!9ͧ!9ͧe!9ͧ!]!9ͧe!9ͧ!A  !9ͧ!Z  !9ͧ!a  !"9ͧ!z !9ͧ͡|; !9ͧ#ͬ+͡ !9ͧ![ !9ͧ{b !9ͧ!9ͧ!0 ʄ !9ͧ!9 !9ͧ!a© !9ͧ!zʹ !9ͧ !9ͧ!!9ͧ!9ͧ !9ͧ!9ͬ!9ͧ !!9ͧ!@!9ͧ!9ͧ|F!9ͧ͌!!" !9ͧ͡|!9ͧ#ͬ+͡Gý!" !" !" !9ͧ!A!9ͧ!D!sr|wubcöL* |8!9ͧ9!9ͧ͡++ !*ͬ!9ͧ* |8!9ͧ͌!!9ͧ/i/x!9ͧ!A h!9ͧ!Z |!9ͧ Ã!9ͧ!"*!9ͧʸ!9ͧ"!9ͧ͌***!9ͧ*e7ogYhZN3F $~?6? R8o& ~@R (w@Ro&Пgo3F y F8OF#Å#{~og~#fos#r}o|g}o|g}o|g|!,|}!,ɯ|!|}!-|}z*!&--{!-z,{,z,{,!||g}oP|g}o^)k{ozg+|/g}/oDM!z>’S\))Қ =’ɯïz{|{MD!x<z>jS\>))#  ={{N#F#x~#~#!3\$D!:66h"""!N#C>ǵ*b*;+T++++b}0?~C]f\:Lcon b$$$K,b:V,l,l,V,b,,b- -'-]---b.".bb.b?..b../5/@/L/k/m////(b//b0bK0b E=rEname a file For maximum !͘(͹8( ##ͫͥ###DM###ww͘(/<(%>(!##utx(( (w #6#ͥ66x ͫx #́ >(<>"ؗ>"ؗ !R07>h>prompted if omitted. P#6 T]$6  T]#6T] ( (: >!$8Qy>!'8A. >!/8./  8w\  8/w!8 R>7!8!1 (ѷR$%Mɹ (  6 #=" #A2 GOx ,=;*?[]̈́ *|x>Ggo"2́ :\6~yw66#T]$~ #w#~% !0($!~>7 /#~wC#~wD>i*!A["s#r6 ̈́ w=w>n7f8u;t<́ ADM!^#V|( B 6~>iN 6>>> > > >́ 6~ >7nCfD_~#foʹN=F>x >in;f<~# q=p>u;t<.> i071. ( x > i (w@> i (w@GxN9F: x>> iBu=t>~=ݶ> 5n( >i05n9f:u=t>^=V>n;fu;ti2f( y(6nPO>i0x~# >i~?6?݆@6@( 2f(6nP3F  674f #>76v>p=p>CONLSTPUNRDRDUM6MEMJ|64~|ʹuԓɗ76vOy:.>3n3f( W3F  > W ͼ> Pz!"4 3F4f # ( > 6@  67ɷC%C'S,!"):"2+ʹu ʧ ʧ [, *,R( !59K'[, !@9K% *,R(*%#"%*%|(+"%2n | i ͓*%+"%ʹ K%!"N*)")͓3n!*,:+OR( *)C)B( DM!19 x *,RK' "%# # ++y==DO > ~h#yW2V(W ( ( ( 0>^h@_:$>̶ >Ͷ {!" 6 5  ͠~ { 8!"4{iz!# 6m!#~6̈́ f̈́ af2#:.>̶̈́ */>z S/ї2.Z^H`  ɗ2"2#*###"b###"g###"kK~$L **utNYNnN$ >y q6F  >Ww!w"w#wEwF>Gy HAO*̈́Ḧ́|7!^#V{(!~G~= x (x!7 j %6N6F(4>2^(2 ޗ2^ ~' (>{$'| 2N(9!{\$\<(!{$!x!{q{͌ؗ76vͪ5n9f: >0$!ͷ  6ѷRu=t>7ȗn!f"uEtFn!f"#u!t"ɷ5~^!V"^EVFs!r"5v -s!r"~=n;f DM55x`i(ͷ  B(0ͪ>7͌(  (%2$!q l\ 2l\!~#foF(  e  ~2\!t>94060+!m] \8!] !' TEMP0000$$$BAKjG> ͧGG>ͧGGG:GG*q͙Gs#r!"q*q#"q*q&)*qg:'2Iq|bk+/\:lq*q*q-|G̈́ 6~>7~7ݶ86^ N9F:x nCfD+F+Nx7q9p:6#8u7t86N ɗ6~6f(n7f8ͅ#6w7w86^w9w:67! 0! !9~#foõ "!̈́ _!!:!=8bk! ~W{7C!x!}N!u!#^#Vzx!x( #z"x!x!!x!*!%!u!xy7*!|*!}3!0:8_d^! ^!00  {0=! !=! ***ERROR ERROR OCCURED AT !!! ""'"'"="I"I"Z"FILE NOT OPENBUFFER TOO SHORT -- WRITE ERROR -- CLOSE ERROR -- INSUF MEMFUNCTION NOT LOADED ZERO DIVIDEINVALID ARGUMENTUNABLE TO OPEN REDIRECTION FILE$!"ͺ"(6:#ͺ"6.#ͺ" +6"!"6F!"6N!"!8w#  ͺJҫJ####(OUTPUT)(INPUT)(I/O)0:?"A[?a{?# #õ ! 8$!O$A$z(0F$B8!033+r+sq#p###N#F#q#p*Z$|$!2 )$8*Z$ "Z$q#p###̈́ ++DM!O$A$|(B 8F$B  R`iF$ | }q#p`iF$z( R BF$ | }A$`is#r+F$DM++[Z$R|!O$A$B  CZ$go"O$*\$"Z$!R9?8[Z$R>^#V++V+^###^$ | }A$`is#r+F$DM++[Z$R7! 0! !9~#foõ "!̈́ _!!:!=8bk! ~W{7C!x!}N!u!#^#Vzx!x( OTSETUP.DO -- OTER Termina Simulato Setu Copyrigh 1981 198 Michae Rubenstein Versio 4.0 ( Oc 82), reformatted by R. Hunter Morey OTSETU i use t instal extende functio ke definition i OTERM Se OTERM.DO fo detail o usin extende functio keys. The syntax for OTSETUP is otsetup Onl th fkey fil i required Th OTER inpu fil default t oterm.co a doe th outpu file Onl thos part o th inpu o outpu OTER fil name whic diffe fro th defaul nee b entered. For example: otsetup fkeys b: b: will use b:oterm.com and create b:oterm.com. I al cases i fil wit th sam nam a th outpu alread exist i wil b rename wit a extension o .bak. Th fkey fil contain th extende functio ke definition i th form: name /function key value/ Th nam ma b fro throug 12 alphanumeri characters Uppe an lowe cas ar equivalent Th "/" ma b an printin character Th functio ke valu ma contai an character excep th delimite specifie (includin carriag return an lin feeds). An numbe o carriag returns lin feeds space o contro character ma appea betwee th nam an th delimite o befor th nex name. Command ma b entere i th functio ke valu a fo file b enterin es Fo example es a woul generat ^A Rubou ma b entere a es ? Note T ente contro characte wit WordStar preced i wit contro p. Example: a /function key a/ verylongfunctionkeynamebutnotevenclosetomax /line1 line2 line3 / commands =^[1log on xmodem rc file.txt ^[1wait 20 ^[1send file.txt = In the last definition, ^[ is an escape character. I functio ke i define wit th nam OTERMINIT i wil b execute whe OTER i started I on i define wit th nam OTERMEND i wil b execute a progra termination OTERMEND ma no contai fil rea command bu otherwis thes functio key follo th sam rule a other an ma b execute manually. END OF DOCUMENT twee th nam an th delimite o befor th nex name. Command ma b entere i th functio ke valu a fo file b enterin es Fo example es a woul generat ^A Rubou ma b entere a es ? Note T ente contro characte wit WordStar preced i wit contro p. Example: a /function key a/ verylongfunctionkeynamebutnotevenclosetomax /line1 line2 line3 / commands =^[1log on xmodem rc file.txt ^[1wait 20 ^[1send file.txt = In the last definition, ^[ is an escape character. I functio ke i define wit th nam OTERMINIT i wil b execute whe OTER i started I on ;---------------------------------------------------- ;OSBORNE ONE SERIAL PORT CONTROL UTILITY ;COPYRIGHT 1983 BY GEORGE SCOTT ;PERMISSION GRANTED FOR PRIVATE USE ;CONTACT AUTHOR FOR COMMERICAL USE ; ; ;VERSION 2.3 JAN 1983 ; ;PROGRAM IS MENU DRIVEN AND ALLOWS FOR SELECTION ;OF CLOCK DIVISION (AND HENCE BAUD RATE) WORD ;FORMATTING (LENGTH, STOP BITS, PARITY) AND VARIOUS ;HARDWARE HANDSHAKE HANDLING. EXITING EARLY, FROM ;ANY MENU, ABORTS THE PROCESS. THE LAST OPPORTUNITY ;TO DO THIS IS FROM THE RECEIVE INTERRUPT MENU. A ;BELL IS SOUNDED TO WARN THAT THIS IS THE LAST MENU ;BEFORE THE CONTROL WORD IS WRITTEN. ;---------------------------------------------------- ; ;SETUP CALL AND DATA EQUATES ; CLEAR EQU 26 PBUFF EQU 9 CR EQU 0DH LF EQU 0AH MBUFF EQU 4010H RGET EQU 1 BZY EQU 0BH FLAGPOS EQU 0EF08H BDOS EQU 5 ACIA EQU 2A00H ;ADDRESS OF ACIA SLSP EQU 10B ;CLOCK DIVISION WORDS HISP EQU 01B ;DEFAULT (DIVIDE BY 16) UHSP EQU 00B BELL EQU 07 RESET EQU 11B WRITE EQU 5000H $ F7BE2 EQU 00000B ;WORD LENGTH/STOP BIT/PARITY F7BO2 EQU 00100B ;WORDS F7BE1 EQU 01000B ;NEXT COMMENT SHOWS WHAT VARIABLE NAME MEANS: F7BO1 EQU 01100B ;F=FORMAT,7B=7 BIT,O=ODD,1=1 STOP BIT F8BN2 EQU 10000B F8BN1 EQU 10100B ;DEFAULT F8BE1 EQU 11000B F8BO1 EQU 11100B LTID EQU 0000000B;RTS LINE HANDLING WORDS LTIE EQU 0100000B HTID EQU 1000000B;DEFAULT LTBR EQU 1100000B RIE EQU 10000000B;RECEIVE INTERRUPT HANDLING WORDS RID EQU 0B ;DEFAULT ; ; ORG 0100H ; ; LXI D,WRITE ;SET PARMS FOR BLOCK MOVE LXI H,SOURCE MVI B,21 CALL LIFTER ;XEQ BLOCK MOVE TO COPY SWITCH ;ROUTINE TO HIGH MEMORY (5000H) ;TO ALLOW BANK SWITCHING ;TO XEQ PROPERLY MVI B,0 ; ;CLOCK DIVISION (BAUD RATE) SELECTION MENU ; SMENU CALL SAVR LXI D,SPEED CALL PRINT ;DISPLAY SPEED SELECT MENU CALL INPUT CALL RSTR CPI 'U' JZ ULTRA CPI 'F' JZ FAST CPI 'S' JZ SLOW CPI CR JZ FAST CPI 'E' JZ 00 JMP SMENU ;NO VALID KEYBOARD INPUT BRANCH ; ;WORD LENGTH/PARITY/STOP BIT SELECT MENU ; WMENU CALL SAVR LXI D,WORD CALL PRINT CALL INPUT CALL RSTR CPI '1' JZ WORD1 CPI '2' JZ WORD2 CPI '3' JZ WORD3 CPI '4' JZ WORD4 CPI '5' JZ WORD5 CPI '6' JZ WORD6 CPI '7' JZ WORD7 CPI '8' JZ WORD8 CPI CR JZ WORD6 CPI 'E' JZ 00 JMP WMENU ; ;RTS LINE HANDLING SELECT MENU ; RMENU CALL SAVR LXI D,RTSP CALL PRINT CALL INPUT CALL RSTR CPI '1' JZ RTS1 CPI '2' JZ RTS2 CPI '3' JZ RTS3 CPI '4' JZ RTS4 CPI CR JZ RTS3 CPI 'E' JZ 00 JMP RMENU ; ;RECEIVE INTERRUPT ENABLE/DISABLE ; DMENU CALL SAVR LXI D,DCDP CALL PRINT CALL INPUT CALL RSTR CPI '1' JZ DCD1 CPI '2' JZ DCD2 CPI CR JZ DCD1 CPI 'E' JZ 00 JMP DMENU ; ;WRITE CONTROL BYTE TO RESET ACIA THEN WRITE ;CONTROL BYTE NOW STORED IN REGISTER B ; WINDUP CALL SAVR MVI B,RESET ;SET B FOR ACIA RESET CALL WRITE ;XEQ WRITE ROUTINE IN HIGH MEMORY CALL RSTR ;MOVE CONTROL BYTE TO B REGISTER CALL WRITE ;WRITE IT TO ACIA JMP 00 ;GO AWAY ; ; ;THE FOLLOWING ROUTINES BUILD THE CONTROL WORD AND ;STORE IT IN THE B REGISTER AS DATA IS SELECTED FROM ; THE KEYBOARD ; ;SPEED SUBROUTINES ; ULTRA MOV A,B ORI UHSP JMP SPLT FAST MOV A,B ORI HISP JMP SPLT SLOW MOV A,B ORI SLSP SPLT MOV B,A JMP WMENU ; ;WORD PARAMETER ROUTINES ; WORD1 MOV A,B ORI F7BE2 JMP WSPLT WORD2 MOV A,B ORI F7BO2 JMP WSPLT WORD3 MOV A,B ORI F7BE1 JMP WSPLT WORD4 MOV A,B ORI F7BO1 JMP WSPLT WORD5 MOV A,B ORI F8BN2 JMP WSPLT WORD6 MOV A,B ORI F8BN1 JMP WSPLT WORD7 MOV A,B ORI F8BE1 JMP WSPLT WORD8 MOV A,B ORI F8BO1 WSPLT MOV B,A JMP RMENU ; ;RTS LINE HANDLING SELECT ROUTINES ; RTS1 MOV A,B ORI LTID JMP RSPLT RTS2 MOV A,B ORI LTIE JMP RSPLT RTS3 MOV A,B ORI HTID JMP RSPLT RTS4 MOV A,B ORI LTBR RSPLT MOV B,A JMP DMENU ; ;DCD HANDLING ROUTINES ; DCD1 MOV A,B ORI RID JMP DSPLT DCD2 MOV A,B ORI RIE DSPLT MOV B,A JMP WINDUP ; ;CODE TO BE COPIED TO HI MEMORY BY LIFTER ;THAT WILL FORM THE BANK SWITCH/WRITE ROUTINE ;AT 5000H ; SOURCE DI OUT 00H MVI A,00 STA FLAGPOS LXI H,ACIA MOV M,B OUT 01H MVI A,01H STA FLAGPOS EI RET ; ;CONSOLE OUTPUT UTILITY ; PRINT MVI C,PBUFF CALL BDOS RET ; ;INPUT UTILITY ROUTINE RETURNS ONE CHARACTER FROM ;KEYBOARD IN THE A REGISTER ; INPUT MVI C,BZY CALL BDOS CPI 00 JZ INPUT MVI C,RGET CALL BDOS RET ; ;BLOCK MOVE UTILITY ; LIFTER MOV A,M STAX D DCR B RZ INX H INX D JMP LIFTER ; ;THIS SUBROUTINE WILL SAVE THE CONTROL WORD AT ;MEMORY LOCATION MBUFF ; SAVR PUSH H LXI H,MBUFF MOV M,B POP H RET ; ;THIS SUBROUTINE REVERSES THE ABOVE PROCESS ;THIS IS NECCESSARY BECAUSE THE NEEDED CALLS ;TO BDOS CORRUPT THE REGISTERS ; RSTR PUSH H LXI H,MBUFF MOV B,M POP H RET ; ;MENU SELECT ITEMS ; SPEED DB CLEAR DB 'RS-232 CONTROL UTILITY',CR,LF,LF DB 'SELECT MENU ITEMS BY INPUTTING FIRST LETTER',CR,LF DB 'OF DESIRED FUNCTION. ',CR,LF DB 'CARRIAGE RETURN SELECTS DEFAULT VALUE WHICH IS',CR,LF DB 'THE ITEM ENCLOSED IN BRACES: [...]',CR,LF DB 'SELECTING EXIT FROM ANY MENU ABORTS THIS TASK',CR,LF,LF DB 'BAUD RATE SELECT MENU',CR,LF,LF DB '(U)LTRAFAST 19,200/38,400 BAUD ',CR,LF DB '[F]AST 1,200/2,400 BAUD',CR,LF DB '(S)LOW 300/600 BAUD',CR,LF,LF DB '(E)XIT ',CR,LF,LF DB 'INPUT SELECTION:$' WORD DB CLEAR DB 'DATA FORMAT SELECT MENU',CR,LF,LF DB ' DATA BITS PARITY STOP BITS',CR,LF DB ' +++++++++ ++++++ +++++++++',CR,LF DB '(1) SEVEN EVEN TWO',CR,LF DB '(2) SEVEN ODD TWO',CR,LF DB '(3) SEVEN EVEN ONE',CR,LF DB '(4) SEVEN ODD ONE',CR,LF DB '(5) EIGHT NONE TWO',CR,LF DB '[6] EIGHT NONE ONE',CR,LF DB '(7) EIGHT EVEN ONE',CR,LF DB '(8) EIGHT ODD ONE',CR,LF,LF DB '(E)XIT',CR,LF,LF DB 'INPUT SELECTION:$' RTSP DB CLEAR DB 'RTS HANDLING SELECTION MENU',CR,LF,LF DB '(1) LOW DISABLES XMIT INTERRUPT',CR,LF DB '(2) LOW ENABLES XMIT INTERRUPT ',CR,LF DB '[3] HIGH DISABLES XMIT INTERRUPT',CR,LF %DB '(4) LOW TRANSMITS BREAK',CR,LF,LF DB '(E)XIT',CR,LF,LF DB 'INPUT SELECTION:$' DCDP DB CLEAR,BELL DB 'DCD HANDLING MENU',CR,LF,LF DB '[1] RECEIVE INTERRUPT DISABLED',CR,LF DB '(2) RECEIVE INTERRUPT ENABLED',CR,LF,LF DB '(E)XIT ',CR,LF,LF DB 'INPUT SELECTION:$' END R,LF,LF DB ' DATA BITS PARITY STOP BITS',CR,LF DB ' +++++++++ ++++++ +++++++++',CR,LF DB '(1) SEVEN EVEN TWO',CR,LF DB '(2) SEVEN ODD TWO',CR,LF DB '(3) SEVEN EVEN ONE',CR,LF DB '(4) SEVEN ODD ONE',CR,LF DB '(5) EIGHT NONE TWO',CR,LF DB '[6] EIGHT NONE ONE',CR,LF DB '(7) EIGHT EVEN ONE',CR,LF DB '(8) EIGHT ODD ONE',CR,LF,LF DB '(E)XIT',CR,LF,LF DB 'INPUT SELECTION:$' RTSP DB CLEAR DB 'RTS HANDLING SELECTION MENU',CR,LF,LF DB '(1) LOW DISABLES XMIT INTERRUPT',CR,LF DB '(2) LOW ENABLES XMIT INTERRUPT ',CR,LF DB '[3] HIGH DISABLES XMIT INTERRUPT',CR,LF P!Mx́bh͈UFS E ́bh͈12345678  E8́+bh͈1'2-3349 3E|́bh͈1@2F @Eì́P͈PxxxG8x#x#x#x #x#x#x#xG|x<x <x@<x`GìxIxG>2!*p>2  h~#x!@p!@FRS-232 CONTROL UTILITY SELECT MENU ITEMS BY INPUTTING FIRST LETTER OF DESIRED FUNCTION. CARRIAGE RETURN SELECTS DEFAULT VALUE WHICH IS THE ITEM ENCLOSED IN BRACES: [...] SELECTING EXIT FROM ANY MENU ABORTS THIS TASK BAUD RATE SELECT MENU (U)LTRAFAST 19,200/38,400 BAUD [F]AST 1,200/2,400 BAUD (S)LOW 300/600 BAUD (E)XIT INPUT SELECTION:$DATA FORMAT SELECT MENU DATA BITS PARITY STOP BITS +++++++++ ++++++ +++++++++ (1) SEVEN EVEN TWO (2) SEVEN ODD TWO (3) SEVEN EVEN ONE (4) SEVEN ODD ONE (5) EIGHT NONE TWO [6] EIGHT NONE ONE (7) EIGHT EVEN ONE (8) EIGHT ODD ONE (E)XIT INPUT SELECTION:$RTS HANDLING SELECTION MENU (1) LOW DISABLES XMIT INTERRUPT (2) LOW ENABLES XMIT INTERRUPT [3] HIGH DISABLES XMIT INTERRUPT (4) LOW TRANSMITS BREAK (E)XIT INPUT SELECTION:$DCD HANDLING MENU [1] RECEIVE INTERRUPT DISABLED (2) RECEIVE INTERRUPT ENABLED (E)XIT INPUT SELECTION:$!@p!@FRS-232 CONTROL UTILITY SELECT MENU ITEMS BY INPUTTING FIRST LETTER OF DESIRED FUNCTION. CARRIAGE RETURN SELECTS DEFAULT VALUE WHICH IS THE ITEM ENCLOSED IN BRACES: [...] SELECTING EXIT FROM ANY MENU ABORTS THIS TASK BAUD RATE SELECT MENU (U)LTRAFAST 19,200/38,400 BAUD [F]AST 1,200/2,400 BAUD (S)LOW 300/600 BAUD (E)XIT INPUT SELECTION:$DATA FORMAT SELECT MENU DATA BITS PARITY STOP BITS +++++++++ ++++++ +++++++++ (1) SEVEN EVEN TWO (2) SEVEN ODD TWO (3) SEVEN EVEN ONE (4) SEVEN ODD ONE (5) EIGHT NONE TWO [6] EIGHT NONE ONE (7) EIGHT EVEN ONE (8) SERIAL is a 6850 ACIA contol utility similar to OSFIG found on FOG/UTL.001. The 6850 ACIA is the chip which drives the Osborne 1 RS232 serial and modem ports. This menu driven program allows one to set all the available options for this chip. Place SERIAL.COM in drive A. At the A> prompt, type SERIAL Use capital letters when responding to menu prompts. Prompts enclosed by [] are assumed defaults. OTERM4 DOCOTERM4 DOC=OTSETUP COMGOTSETUP DOCSERIAL ASM3SERIAL COM SERIAL $$$ This is the release date of the disk. TERM4 DOC @TERM4 DOC OTSETUP COM #OTSETUP DOC SERIAL ASM SERIAL COM SERIAL DSC PLNK0124.COM 72 89 1536 12 OTERM4 .COM A8 22 31744 248 OTERM4 .DOC 8D 8B 40576 317 OTSETUP .COM 7F 6D 9088 71 OTSETUP .DOC B5 B7 2304 18 SERIAL .ASM 91 54 6528 51 SERIAL .COM D2 3A 1408 11 SERIAL .DSC 9E 73 512 4 & Fog Library Disk FOG-CPM.067 Copyright (1986) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Modem communication programs (mainly for Osborne 1). Filename Description -06-00 .86 This is the release date of the disk. -CPM067 .DOC This is the description of the disk contents. HOSTCM .BAS FA23 2K [HOSTCM 1 of 2] Allows an Osborne 1 to do uploads and to interface to HOSTCM an IBM mainframe running VM/CMS. HOSTCM .DOC EC9F 2K [HOSTCM 2 of 2] KERMIT .COM 64AA 11K [Osborne 1 Kermit 1 of 2] Kermit-80 communications. KERMIT .DOC 5215 3K [Osborne 1 Kermit 2 of 2] OSPLNK70.ASM B9E5 22K ver. 7.0 [Osborne PLink 1 of 4] ASCII only file transfer program that allows host handshake prompt to be defined dynamically. This uses 7 bit only and is therefore NOT compatible with XMODEM, IMP, etc. ASseMbler source code is included. OSPLNK70.COM 7D6D 3K ver. 7.0 [Osborne PLink 2 of 4] OSPLNK70.DOC 90C9 7K ver. 7.0 [Osborne PLink 3 of 4] OSPLNK70.DSC 96C7 2K ver. 7.0 [Osborne PLink 4 of 4] PLNK0124.ASM 2D9C 24K ver. 12.4 [PLink 1 of 2]  A version of a 7 data bit file transfer program for several computers and modems. ASseMbler source is included. PLNK0124.COM 7289 2K ver. 12.4 [PLink 2 of 2] OTERM4 .COM A822 31K ver. 4.0 [OTERM 1 of 4] Communications program with XMODEM and CompuServe A protocols both available. Supports 7 or 8 data bit, even or odd parity, and offers a function keys and a split "chat mode" screen. Ideal for use with major services that offer "CB" conferences OTERM4 .DOC 8D8B 40K ver. 4.0 [OTERM 2 of 4] OTSETUP .COM 7F6D 9K ver. 4.0 [OTERM 3 of 4] OTSETUP .DOC B5B7 3K ver. 4.0 [OTERM 4 of 4] SERIAL .ASM 9154 7K [Osborne 1 Serial 1 of 3] A 6850 ACIA control utility that allows you to set all options for the Osborne 1 serial port chip. ASseMbler source. SERIAL .COM D23A 2K [Osborne 1 Serial 2 of 3] SERIAL .DSC 9E73 1K [Osborne 1 Serial 3 of 3] er "CB" conferences OTERM4 .DOC 8D8B 40K ver. 4.0 [OTERM 2 of 4] OTSETUP .COM 7F6D 9K ver. 4.0 [OTERM 3 of 4] OTSETUP .DOC B5B7 3K ver. 4.0 [OTERM 4 of 4] SERIAL .ASM 9154 7K [Osborne 1 Serial 1 of 3] A 6850 ACIA control utility that allows you to set all options for the Osborne 1 serial port chip. ASseMbler source. SERIAL .COM D23A 2K [Osborne 1 Serial 2 of 3] SERIAL .DSC 9E73 1K [Osborne 1 Seri'