›MODULE ; TERM.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.››; version 1.0›; last modified October 24, 1983››CARD ARRAY end(1) ; just to get ending address››INCLUDE "BLKIO.ACT"››DEFINE STRING = "CHAR ARRAY"››DEFINE file="1", printer="2",› modem="5", key="7"›DEFINE EOL="$9B"›DEFINE ASCII="$0"››DEFINE MARGIN="0"›DEFINE PMAX="1100"›DEFINE SLOP="30"›DEFINE PTIMEOUT="500"›DEFINE FTIMEOUT="500"››CHAR keyboard, OLDCHR=$5D›BYTE LMARGN=$52, COL=$55, ROW=$54›BYTE escflag, RMARGN=$53, CHBAS=$2F4›BYTE pos, io_err, hold, inverse, lf›BYTE pflag, fflag, fmode, run, ans›BYTE baud, translation, pincr, fincr›CARD pindex, findex, pcounter, slow›CARD fcounter, fsize, old_Error, fmax›CARD OLDADR=$5E, MEMTOP=$2E5›BYTE ARRAY modes(256)›STRING Rdev(0)="R:", Pdev(0)="P:"›STRING fname(40)›CHAR ARRAY pbuf(PMAX), fbuf›CHAR ARRAY line, font›BYTE font_hi=font+1›››PROC MyError(BYTE err, chan)› PrintF("%EERROR - %I, channel %I%E", err, chan RSH 4)› io_err = err›RETURN›››PROC MStatus=*()› XIO(modem,0,$D,0,0,Rdev)›RETURN›››PROC Delay(BYTE count)› BYTE RTC=20›› count = count + RTC + 1› WHILE (count-RTC)>0 DO OD›RETURN›››PROC OpenModem(BYTE trans)› CARD POINTER aux›› Close(modem)› Open(modem, Rdev, 13)› XIO(modem,0,36,baud,0,Rdev)› XIO(modem,0,38,trans,0,Rdev)›; set concurrent IO and no user buf.› aux = $34A + (modem LSH 4)› aux^ = 0 ; make sure aux = 0› XIO(modem,0,40,0,0,Rdev)›RETURN›››PROC XOn()› IF translation=ASCII THEN› PutD(modem, $11) ; XON› FI›RETURN›››PROC XOff()› IF translation=ASCII THEN› PutD(modem, $13) ; XOFF› FI›RETURN›››; routines to get char from modem›INCLUDE "TERM1.ACT" ›››; buffering and IO routines›INCLUDE "TERM2.ACT" ›››PROC Init()› BYTE POKMSK=$10 › CARD i› BYTE ARRAY sfont› BYTE ARRAY ga(0)=[$30$18$C$4$0$0$0$0]› BYTE ARRAY tilde(0)=[$0$0$0$72$9C$0$0$0]› BYTE ARRAY ob(0)=[$C$18$18$30$18$18$C$0]› BYTE ARRAY cb(0)=[$30$18$18$C$18$18$30$0]››; this should really be done with›; interrupts off, Oh well!!!› POKMSK = POKMSK & $7F ; no break key›› LMARGN = MARGIN›› pos = 0› pflag = 0› pcounter = 0› pincr = 0› fflag = 0› fmode = 0› fcounter = 0› fincr = 0› inverse = 0› escflag = 0›› ans = 0 ; originate› hold = 0 ; XOff received flag› translation = ASCII› lf = 1› run = 1› baud = 8› slow = 4000›› Graphics(0)›› font = (MEMTOP - $3FF) & $FC00› MEMTOP = font - 1› fmax = MEMTOP - fbuf››; get ASCII font› sfont = $E000› FOR i = 0 TO $3FF DO ; get around MoveBlock bug› font(i) = sfont(i)› OD› MoveBlock(font+768, ga, 8) ; grave accent› MoveBlock(font+1008, tilde, 8)› MoveBlock(font+984, ob, 8) ; opening brace› MoveBlock(font+1000, cb, 8) ; closing brace› CHBAS = font_hi›› Zero(modes, 256)› modes($1B) = 2 ; escape › modes($1C) = 1 ; cursor up› modes($1D) = 1 ; cursor down› modes($1E) = 1 ; cursor left› modes($1F) = 1 ; cursor right› modes($7D) = 1 ; clear screen› modes($7E) = 1 ; back space› modes($7F) = 3 ; tab› modes($9B) = 1 ; EOL› modes($9C) = 1 ; delete line› modes($9D) = 1 ; insert line› modes($9E) = 1 ; clear tab› modes($9F) = 1 ; set tab› modes($FD) = 1 ; bell› modes($FE) = 1 ; delete char› modes($FF) = 4 ; insert char› modes($7) = 5 ; ^G, bell› modes($8) = 6 ; ^H, backspace› modes($C) = 7 ; ^L, clear screen›› PrintF("%EACS Modem version 1.0%E")› PrintF("%ECopyright 1983%E")› PrintE("Action Computer Services")› PrintF("%Ebuffer size = %U%E", fmax)› Close(key) : Open(key,"K:",4)›RETURN›››PROC Functions()› CHAR ch› BYTE CONSOL=$D01F›› IF (CONSOL&$4)=0 THEN ; printer toggle› XOff() › IF pflag THEN ; turn off› ClosePrinter()› ELSE ; turn on› MyOpen(printer, Pdev, 8)› IF CIO_status<128 THEN› PrintF("%Ebuffering for printer%E")› pindex = 0› pflag = 1› ELSE› PrintF("%EERROR - %I%E", CIO_status)› FI› FI›› WHILE (CONSOL&$4)=0 DO OD› XOn()› FI›› IF (CONSOL&$2)=0 THEN ; SELECT› XOff() ›› PrintF("%Ecommands:%E") › PrintE(" ASCII/ATASCII toggle")› PrintE(" Down load")› PrintE(" Originate/answer toggle")› PrintE(" Quit")› PrintE(" Up load")›› ch = GetD(key) % $20› IF ch='a THEN ; ASCII/ATASCII› IF translation=ASCII THEN› PrintE("ATASCII MODE")› translation = 32› CHBAS = $E0› lf = 0› ELSE› PrintE("ASCII MODE")› translation = ASCII› CHBAS = font_hi› lf = 1› FI› CloseModem()› OpenModem(translation)› ELSEIF ch='d THEN ; down load› fmode = 8› OpenFile("down load file name - ")› IF fmode THEN› PrintE("press START to begin down load")› PrintE("press START again when done.")› FI› ELSEIF ch='o THEN ; ans/org› IF ans THEN› PrintE("ORIGINATE MODE")› ans = 0› ELSE› PrintE("ANSWER MODE")› ans = $FF› FI› ELSEIF ch='q THEN ; quit› run = 0› ELSEIF ch='u THEN ; up load› fmode = 4› OpenFile("up load file name - ")› IF fmode THEN› ; set transmit delay› Print("slow? ")› ch = COL› PrintC(slow)› COL = ch+1 Put($1E)› slow = InputC()›› ReadFile()› PrintE("press START to begin up load")› FI› ELSE› hold = 0› PrintE("illegal selection")› FI›› WHILE (CONSOL&$2)=0 DO OD› XOn()› FI›› IF (CONSOL&$1)=0 THEN ; START› XOff() ›› IF fflag THEN ; turn off› IF fmode=8 THEN ; down load› CloseFile()› ELSE› PrintF("%Eup load aborted%E")› FI› fflag = 0› fmode = 0› ELSE› hold = 0› IF fmode=8 THEN ; down load› PrintF("%Edown loading%E")› findex = 0› fflag = fmode› ELSEIF fmode=4 THEN ; up load› PrintF("%Eup loading%E")› findex = 0› fflag = fmode› ELSE› PrintF("%Euse SELECT to select mode%E")› FI› FI›› WHILE (CONSOL&$1)=0 DO OD› XOn()› FI›RETURN›››PROC GetKey()› CHAR ch, CHFLAG=$2FC, BRKKEY=$11›› IF fflag=4 AND hold=0 THEN› ch = FileChar()› ELSE› IF CHFLAG=$FF THEN RETURN FI› ch = GetD(key)› FI›› IF ans THEN MyPut(ch) FI›› IF translation=ASCII THEN› IF ch=$7D THEN ; clear screen› Put($7D) ; don't send just clear› RETURN› ELSEIF ch=$7E THEN ; backspace› ch = $8› ELSEIF ch=$7F THEN ; tab› ch = $9› ELSEIF ch=$0 THEN ; left brace› ch = $7B› ELSEIF ch=$60 THEN ; right brace› ch = $7D› ELSEIF ch=$7B THEN ; tilde› ch = $7E› ELSEIF ch=$FD THEN› ch = $60 ; grave accent› ELSEIF ch=$FE OR ch=$9C THEN› ch = $7F ; DEL› FI› FI› PutD(modem, ch) ; send char›RETURN›››PROC Main()› CHAR ch›› fbuf = end› Init()›› old_Error = Error› Error = MyError› io_err = 0› › OpenModem(translation)›› PrintF("%Eready%E%E")› WHILE run DO› MGet() ; get chars from modem›› Functions()›› GetKey() ; send chars from keyboard› ; or file›› pcounter ==+ pincr› IF pcounter>PTIMEOUT THEN› FlushPrinter()› FI›› fcounter ==+ fincr› IF fcounter>FTIMEOUT THEN› FlushFile()› FI› OD›› XOff()› IF pflag THEN ClosePrinter() FI› IF fflag=8 THEN CloseFile() FI› Close(modem)› Close(file)› Error = old_Error› CHBAS = $E0 ; reset font›RETURN››