›MODULE ; TERM1.ACT››; (c) 1983 ACS››; Copyright (c) 1983›; by Action Computer Services (ACS)›;›; No portion of this software may be›; incorporated within or included with›; another computer program that is to›; be sold to other parties in any›; manner without the express written›; permission of Action Computer›; Services. Under no circumstances is›; this copyright notice or others›; contained within this software to be›; removed.››; last modified October 24, 1983›››PROC LineFeed()› BYTE oldcol›› IF ROW#23 THEN› Put($1D)› ELSE› oldcol = COL› Put(EOL)› COL = oldcol› Put($1E) Put($1F) ; show cursor› FI›RETURN›››PROC MyPut(BYTE ch)› BYTE mode, i›› mode = modes(ch)› IF mode=0 OR escflag#0 THEN› IF ch=EOL THEN› COL = LMARGN› Put($1F) Put($1E) ; show cursor› ELSEIF ch#$7D OR translation#ASCII THEN› IF COL>=RMARGN THEN› IF ch<$20 THEN› OLDCHR = ch + $40› ELSEIF ch<$60 THEN› OLDCHR = ch - $20› ELSE› OLDCHR = ch› FI› ch = EOL› FI› Put($1B) ; escape› Put(ch)› ELSE ; closing brace› OLDCHR = $7D› IF COL>=RMARGN THEN› PutE()› ELSE› Put($1F) ; left› FI› FI› escflag = 0› RETURN› FI›› IF mode=1 THEN› Put(ch)› ELSEIF ch=$FF THEN ; insert char› IF COL1 DO› line(i) = line(i-1)› i = i - 1› OD› line(1) = OLDCHR› line(0) = $80› FI› OLDCHR = 0› Put($1E) Put($1F)› ELSEIF ch=$1B THEN ; escape› escflag = 1› ELSEIF ch=$7F THEN ; tab› COL = (COL + 8) & $F8› IF COLRMARGN THEN COL = RMARGN FI› Put($1F) Put($1E)› ELSEIF translation=ASCII THEN› IF ch=$7 THEN› Put($FD) ; bell› ELSEIF ch=$8 THEN› Put($7E) ; backspace› ELSEIF ch=$C THEN› Put($7D) ; clear screen› FI› ELSE› Put(ch)› FI›RETURN›››PROC PutCh(CHAR ch)› STRING lostmsg(0)="%Echaracters lost%E"›› MyPut(ch)›› IF pflag#0 AND ch>=$20 AND (ch<$80 OR ch=EOL) THEN› pbuf(pindex) = ch› pindex = pindex + 1› IF pindex>PMAX-SLOP THEN› IF pindex>=PMAX THEN› pindex = PMAX ; drop characters› Close(modem)› PrintF(lostmsg)› pcounter = PTIMEOUT› ELSEIF pcounter=0 THEN› XOff()› pcounter = 1› pincr = 1› FI› FI› FI›› IF fflag=8 THEN› fbuf(findex) = ch› findex = findex + 1› IF findex>fmax-SLOP THEN› IF findex>=fmax THEN› findex = fmax ; drop characters› Close(modem)› PrintF(lostmsg)› fcounter = FTIMEOUT› ELSEIF fcounter=0 THEN› XOff()› fcounter = 1› fincr = 1› FI› FI› FI›RETURN›››PROC PutM(CHAR ch)› PutD(modem, ch)› IF ch=EOL AND lf#0 THEN› PutD(modem, $A) ; output LF› FI›RETURN›››PROC PutCtrl(CHAR ch, cha)› MyPut(cha)› IF ans THEN PutM(ch) FI›RETURN›››PROC PutChar(CHAR ch)› BYTE i›› IF pos THEN ; position X and Y bytes› ch = ch - 32› IF pos=1 THEN ; row› ROW = ch› IF ROW>23 THEN ROW = 23 FI› pos = 2› ELSE ; column› COL = LMARGN + ch› IF COL>39 THEN COL = 39 FI› Put($1E) Put($1F) ; show cursor› pos = 0› FI› RETURN› FI›› IF ch<$1B THEN› IF ch=$2 THEN ; ^B, insert line› Put($9D)› ELSEIF ch=$5 THEN ; ^E, delete line› Put($9C)› ELSEIF ch=$6 THEN ; ^F, insert char› MyPut($FF)› ELSEIF ch=$7 THEN ; bell› PutCtrl($7, $7)› ELSEIF ch=$8 THEN ; backspace› PutCtrl($8, $8)› IF pflag#0 AND pindex#0 AND pbuf(pindex-1)#EOL THEN› ; delete prev char from buffer› pindex = pindex - 1› FI› ELSEIF ch=$9 THEN ; tab› PutCtrl($9, $7F)› ELSEIF ch=$A THEN ; line feed› LineFeed()› IF ans THEN PutD(modem, $A) FI› ELSEIF ch=$B THEN ; ^K, home top› Position(LMARGN+1, 0) Put($1E)› ELSEIF ch=$C THEN ; form feed› PutCtrl($C, $C) ; clear screen› ELSEIF ch=$11 THEN ; ^Q, XON› hold = 0› PrintF("%EXON")› ELSEIF ch=$12 THEN ; ^R, position› pos = 1› ELSEIF ch=$13 THEN ; ^S, XOFF› hold = 1› PrintF("%EXOFF")› ELSEIF ch=$14 THEN ; ^T, clear to end of line› line = OLDADR› line(0) = $80› FOR i = 1 TO RMARGN-COL DO› line(i) = 0 ; fill in spaces› OD› OLDCHR = 0› ELSEIF ch=$16 THEN ; ^V, inverse on› inverse = $80› ELSEIF ch=$17 THEN ; ^W, inverse off› inverse = $0› ELSEIF ch=$18 THEN ; ^X, delete char› Put($FE)› ELSEIF ch=$19 THEN ; ^Y, home bottom› Position(LMARGN+1, 23) Put($1E)› ELSEIF ch=$1B THEN ; ESC› IF escflag THEN› MyPut($1B)› ELSE› escflag = 1› FI› ELSEIF ans THEN› PutD(modem, '^)› PutD(modem, ch+('A-1))› FI› ELSEIF ch<$20 THEN ; cursor keys› Put(ch)› ELSE› escflag = 1› PutCh(ch % inverse)› IF ans THEN PutM(ch) FI› FI›RETURN›››BYTE FUNC MGet()› CHAR ch› BYTE res, num_chars=747›› res = 0› DO› MStatus()› IF num_chars=0 THEN EXIT FI› res = 1›› ch = GetD(modem)›› ; handle input character› IF translation=ASCII THEN› PutChar(ch)› ELSE› PutCh(ch)› IF ans THEN PutM(ch) FI› FI› OD›RETURN(res)››