›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 COL<RMARGN THEN›      line = OLDADR›      i = RMARGN - COL›      WHILE i>1 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 COL<LMARGN THEN COL = LMARGN FI›    IF COL>RMARGN 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)››