$CONTROL MAP,CODE,USLINIT                                               00010000
<<            IOTERM0, MODULE 26 - TERMINAL DRIVER  SERIES 33 >>        00015000
<< HP32002C MPE SOURCE C.00.00 >>                                       00020000
<< COPYRIGHT     "(C) COPYRIGHT HEWLETT-PACKARD CO. 1980.           >>  00025000
<<     THIS PROGRAM MAY BE USED WITH ONE COMPUTER SYSTEM AT A       >>  00030000
<<     TIME AND SHALL NOT OTHERWISE BE RECORDED, TRANSMITTED OR     >>  00035000
<<     STORED IN A RETRIEVAL SYSTEM.  COPYING OR OTHER REPRODUCTION >>  00040000
<<     OF THIS PROGRAM EXCEPT FOR ARCHIVAL PURPOSES IS PROHIBITED   >>  00045000
<<     WITHOUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.>>  00050000
<< **** Note - Dollar Copyright cannot be used with this module *** >>  00055000
$TITLE " JAN 1, 1978       ADCC MONITOR/DRIVER "                        00060000
$CONTROL PRIVILEGED, UNCALLABLE, MAIN = IOTERM0                         00065000
$THIRTY                                                                 00070000
  <<                                                                    00075000
       TERMINAL REQUESTS -                                              00080000
                                                                        00085000
  OPERATION         FUNC         PARAMETERS                             00090000
                                                                        00095000
    READ             0    P1.( 0:1)  = NOCRLF IF SET                    00100000
                            .(13:3)  = EOF  SPECIFICATION               00105000
                                                                        00110000
                          P2.(0:8 ) - IF <> 0 THEN SPECIAL RD STOP CHAR 00115000
                            .(11:2) - IF 0 THEN ASCII ELSE BINARY       00120000
                            .(10:1) - OWN DC1/DC2 HANDSHAKE             00125000
                            .( 9:1) - AUTO HANDSHAKE FOR VIEW           00130000
                                                                        00135000
    WRITE            1    P1 - VERTICAL FORMAT SPECIFICATION            00140000
                                                                        00145000
                                  1 - USE 1ST DATA CHAR AS FORMAT SPEC  00150000
                                                                        00155000
                                %53 - "+", CR ONLY NO LF                00160000
                                %60 - "0", DOUBLE SPACE                 00165000
                                %61 - "1", TOP OF FORM                  00170000
                                                                        00175000
                                %200-%277,  N-%200 LF'S AND A CR        00180000
                                                                        00185000
                                %320- NO CR OR LF                       00190000
                                                                        00195000
                              ALL OTHERS, DO A CR/LF                    00200000
                                                                        00205000
                          P2.(15:1) - PRESPACE FLAG                     00210000
                            .(11:2) - IF NOT 0 THEN BINARY              00215000
                                                                        00220000
                                                                        00225000
  FILE  OPEN         2    NOP                                           00230000
  FILE CLOSE         3    CLEAN UP AND CRLF IF NOT NEW LINE             00235000
  DEVICE CLOSE       4    DISCONNECT                                    00240000
                                                                        00245000
  SET READ TIMEOUT   5    P1 - IF 0 CLEAR TIMEOUT ELSE TIME IN SECONDS  00250000
                                                                        00255000
  SET INPUT SPEED    6    P1 - SPEED IN CHARACTERS/SECOND               00260000
                                OLD SPEED RETURNED IN COUNT             00265000
  SET OUTPUT SPEED   7    P1 - SPEED IN CHARACTERS/SECOND               00270000
                                OLD SPEED RETURNED IN COUNT             00275000
                                                                        00280000
  ENABLE ECHO        8    RETURN OLD ECHO SETTING IN COUNT              00285000
  DISABLE ECHO       9    RETURN OLD ECHO SETTING IN COUNT              00290000
                                                                        00295000
  DISABLE BREAK      10                                                 00300000
  ENABLE  BREAK      11                                                 00305000
                                                                        00310000
  DISABLE CONTROL Y  12                                                 00315000
  ENABLE CONTROL Y   13                                                 00320000
                                                                        00325000
  DISABLE TAPEMODE   14                                                 00330000
  ENABLE  TAPEMODE   15                                                 00335000
                                                                        00340000
  DISABLE READ TIMER 16                                                 00345000
  ENABLE READ TIMER  17                                                 00350000
  RETURN READ TIME   18   COUNT CONTAINS READ TIME IN 1/100 SECONDS     00355000
                                                                        00360000
  DISABLE PARITY     19                                                 00365000
  ENABLE PARITY      20                                                 00370000
                                                                        00375000
  LOGGED ON          21   P1 - IF 1 THEN SESSION, SO ENABLE BREAK       00380000
                               IF 2 THEN JOB, NO BREAK         <<01449>>00385000
                               IF 0 THEN DATA, NO BREAK        <<01449>>00390000
                                                                        00395000
  NOT USED           22                                                 00400000
  SET TERM TYPE      23   P1 - TERM TYPE AS SPECIFIED IN THE MPE ERS    00405000
                                                                        00410000
  ALLOCATE TERMINAL  24   P1 - TERM TYPE AS SPECIFIED IN THE MPE ERS    00415000
                          P2 - SPEED IN CHARACTERS/SECOND               00420000
                                                                        00425000
  CLR FLUSH & WRITE  25   PARAMETERS SAME AS WRITE                      00430000
                                                                        00435000
  CNTRL X ECHO ON    26                                                 00440000
  CNTRL X ECHO OFF   27                                                 00445000
                                                                        00450000
  NO OPERATION       28                                                 00455000
                                                                        00460000
  PTAPE READ         29   P1, P2 - SPOOL BUFFER BEGINNING DISC ADDRESS  00465000
                                                                        00470000
  SET BREAK MODE     30   P1 - ODD = SET, EVEN = CLEAR BREAK MODE       00475000
                                                                        00480000
  SET CONSOLE MODE   31   P1 - ODD = SET, EVEN = CLEAR CONSOLE MODE     00485000
                                                                        00490000
  SET PARITY         32   P1 - 0  - EVEN PTY ON RD/WRT IF ENABLED       00495000
                               1  - ODD PTY ON RD/WRT IF ENABLED        00500000
                               2  - EVEN PARITY ON WRITE, EXPECTED ON RD00505000
                               3  - ODD PARITY ON WRITE,EXPECTED ON READ00510000
                                                                        00515000
  ALLOCATE TERMINAL  33   P1 - TERM TYPE AS SPECIFIED IN THE MPE ERS    00520000
                          P2 - SPEED IN CHARACTERS/SECOND               00525000
                                                                        00530000
  SET TERM TYPE      34   P1 - TERM TYPE AS SPECIFIED IN THE MPE ERS    00535000
                                                                        00540000
  RETURN TERM TYPE   35   TERMINAL TYPE RETURNED IN COUNT WORD          00545000
                                                                        00550000
  RETURN OUT SPEED   36   OUTPUT SPEED RETURNED IN COUNT WORD           00555000
                                                                        00560000
  SET STOP CHARS     37   P1 - IF 0 THEN DISABLE SPECIAL EOR AND        00565000
                               SUBSYSTEM BREAK CHARACTERS ELSE          00570000
                            .(0:8) = SUB SYSTEM BREAK CHARACTER         00575000
                            .(8:8) = END OF RECORD CHARACER             00580000
                                                                        00585000
  SET CONS INTERRUPT 38   P1 - ODD,ENABLE CNTRL A; EVEN DISABLE CNTRL A 00590000
                                                                        00595000
                                                                        00600000
                                                                        00605000
                                                                        00610000
                                                                        00615000
                                                                        00620000
                                                                        00625000
                                                                        00630000
    TERMINAL STATUS RETURNS -                                           00635000
                                                                        00640000
      %00  - NOT COMPLETED OR NOT STARTED                               00645000
                                                                        00650000
       01  - NORMAL COMPLETION                                          00655000
       11  - COMPLETED ON SPECIAL READ STOP CHARACTER                   00660000
                                                                        00665000
       X2  - END OF FILE                                                00670000
                                                                        00675000
       13  - PARITY ERROR ON READ                                       00680000
       23  - READ TIMED OUT                                             00685000
       33  - I/O ABORTED EXTERNALLY                                     00690000
       43  - DATA LOST, NO BUFFER AVAILABLE OR TOO LONG TAPEMODE RECORD 00695000
       53  - NOT ON LINE, DATA SET NOT READY OR DISCONNECT              00700000
      153  - ENABLE SUB SYS BRK REQUESTED & NO CY PIN                   00705000
      163  - READ TIME RETURNED > (2**16-1) HUNDREDTHS                  00710000
      173  - READ STOPPED WHEN A BREAK DETECTED                         00715000
                                                                        00720000
       04  - INVALID REQUEST, FUNCTION OR PARAMETER                     00725000
        24  - BLOCK MODE TIMED OUT                             <<01822>>00730000
       34  - TIMING ERROR, UNIT WAS NOT SERVICED IN TIME                00735000
  >>                                                                    00740000
$PAGE                                                                   00745000
BEGIN    << TERMINAL MONITOR AND DRIVER >>                              00750000
                                                                        00755000
EQUATE                                                                  00760000
    WRTBASE   = 23,        << START OF SIO CHANNEL PROGRAM >>  <<04869>>00765000
    ABORTED   =%33,        << REQUEST ABORTED RETURN STATUS >>          00770000
    ABORTSTOP = 5,         << READ ABORTED STOP >>                      00775000
    ACTIVE'   = 2,         << MONITOR IS RUNNING AGAINST THIS DEVICE >> 00780000
    ADCCPROG  = 213,                                           <<00690>>00785000
    AJOBS'    = 2,         << THIS DEVICE ACCEPTS JOBS >>               00790000
    ALLOCATE  =24,         << ALLOCATE TERMINAL FUNCTION  CODE >>       00795000
    ALLOCATEX =33,         << ALLOCATE TERMINAL FUNCTION  CODE >>       00800000
    BADPARITY =%13,        << PARITY ERROR REQUEST ERROR STATUS >>      00805000
    BANDWAIT  = 5,         << WAITING FOR LESS TERM ACTIVITY >>         00810000
    BLOCKED'  = 5,         << BLOCKED I/O REQUEST >>                    00815000
    BLOCKMODRD= WRTBASE+233,                                            00820000
    BLOCKTIMED= %24,                                           <<01822>>00825000
    BLOCKTIMEOUT= 8,                                           <<01822>>00830000
    BLOCKTO   = 7,                                             <<01822>>00835000
    BLOCKTOSTOP= 6,                                            <<01822>>00840000
    BLOCKWAIT = WRTBASE+223,                                            00845000
    BMODE'    =12,         << TERMINAL IN BREAK MODE >>                 00850000
    BREAK'    = 10,        << BREAK IS ALLOWED AND HAS BEEN DETECTED >> 00855000
    BRKEND    = 2,         << READ ENDED WITH BREAK STATUS INDEX >>     00860000
    BREAKEND  =%173,       << READ COMPLETED WHEN A BREAK DETECTED >>   00865000
    BREAKSTOP = 1,         << READ STOP CODE AFTER BREAK ACCEPTED >>    00870000
    BRKOK'    =BREAK'+1,   << BREAK IS ENABLED >>                       00875000
    CBYTESZ   = 12,                                                     00880000
    CFAILTO   = 1,        <<CARRIER FAIL TIMEOUT REQUEST>>              00885000
    CLOSED    = 4,         << DCLOSE REQUESTED HSTATE >>                00890000
    CLRFLU'WRT=%31,        << CLR FLUSH & WRITE FUNCTION CALL>>         00895000
    CMODE'    =11,         << TERMINAL IS IN CONSOLE MODE >>            00900000
    COMPLETED'= 6,         << I/O REQUEST HAS BEEN COMPLETED >>         00905000
    CR        = %15,       << OCTAL VALUE OF C. R. >>          <<01464>>00910000
    CONSMODE  = 2,         << TMODE OR PREMPT LEVEL OF CONSOLE >>       00915000
    CPCB      = 4,         << CURRENT PCB INDEX >>                      00920000
    CPS120    = 11,    <<BAUDRATE CODE FOR 120 CHAR/SEC>>               00925000
    CPS240    =  7,    <<BAUDRATE CODE FOR 240 CHAR/SEC>>               00930000
    CPS960    =  8,    <<BAUDRATE CODE FOR 960 CHAR/SEC>>               00935000
    CRWAIT    = 1,                                                      00940000
    CRWAITLF  = 2,                                                      00945000
    DBLKTAIL  = 36,                                                     00950000
    DBREAK    =30,         << IOQP TO SAVED BROKEN READ DATA >>         00955000
    DBTIME    = 16,                                            <<01822>>00960000
    DC1'ETX   = %10403,    << DC1 TRIGGER AND ETX CHARACTERS>> <<01932>>00965000
    DCNT      = 18,        << COUNT OF BUFFER BEING WRITTEN , ALSO      00970000
                                HOLDS SPEED DURING SPEED SENSING >>     00975000
    DCNTRL    = 10,                                                     00980000
    DENQP     = 34,    <<DIT PNTR FOR STORING ENQ POSITIONS>>           00985000
    DHEAD     = 19,        << SYSDB POINTER TO HEAD OF TBUF LIST >>     00990000
    DILTP     = 5,         << ILT POINTER >>                            00995000
    DIOQP     = 2,         << IOQ POINTER TO FIRST REQUEST >>           01000000
    DISCNCT'  = 1,         << DATA SET HAS DISCONNECTED >>              01005000
    DLAST     = 23,                                                     01010000
    DLINK     = 1,         << DITP LINK TO QUEUED REQUESTS WAITING >>   01015000
    DLDEV     = 3,         << LOGICAL DEVICE AND UNIT NUMBERS >>        01020000
    DLFSYNC   = 25,        << DIT ENTRY FOR SYNC STATE,LF COUNT>>       01025000
    DMONTR    = 34,    <<DIT PNTR TO STORE MONTITOR CODE>>              01030000
    DMODEM    = 8,                                                      01035000
    DNXTB     = 25,        << TBUF POINTER OF A SAVE TBUF IF NOT 0 >>   01040000
    DPNTR     = 21,        << BYTE POINTER DURING READ & WRITE >>       01045000
    DRCNT     = 17,        << HOLDS COUNT OF READ DATA SAVED >>         01050000
    DRPTR     = 22,        << IF <> 0 THEN HEAD OF READ DATA SAVED >>   01055000
    DRQST     = 6,         << MONITOR SERVICE REQUEST FLAGS >>          01060000
                           << 0 - HANGUPTO    8  - READTO               01065000
                              1 - DISCONNECT  9  - ONLINE               01070000
                              2 - CFAILTO     10 - DSTREADY             01075000
                              3 - TURNTO      11 - LOGONTO              01080000
                              4 - IOERROR     12 - BREAK                01085000
                              5 - IODONE      13 - CONTROL Y            01090000
                              6 - SPOOLEND    14 - CFAIL                01095000
                              7 - SPOOLSW     15 - UNUSED               01100000
                           >>                                           01105000
    DRTMAX    =28,         << MAXIMUM TIME FOR READ TIMEOUT, SECONDS >> 01110000
    DRTIME    =26,         <<  INDEX TO I/O READ TIME >>                01115000
    DRTIMED   = DRTIME/2,                                               01120000
    DSAVE     =13,         << HOLDS WAITED DSTATE, HSTATE & TURN CHAR >>01125000
    DSIOPC    =35,         << HOLDS SIO PROG PNTR FOR RESTART >>        01130000
    DSPEED    = 9,                                                      01135000
    DSTATE'   =12,         << DEVICE STATE                              01140000
                               0 - NULL         %10 - EOR SYNC          01145000
                               1 - WRITING      %11 - WRITE BUF FILL    01150000
                               2 - READING      %12 - SEND XON NEXT     01155000
                               3 - XON WRITE    %13 - DELETE CR         01160000
                               4 - WRITE TURN   %14 - DOING SYNCS OR "!"01165000
                               5 - BAND WAIT    %15 - READ CHAR ECHO    01170000
                               6 - EOR LF       %16 - START READ        01175000
                               7 - EOR CR       %17 - STOP READ >>      01180000
    DSTOP     = 14,        << SUB SYS BRK AND EOR CHARACTERS >>         01185000
    DSYNC     = 29,        << CR,LF SYNC DATA AND SYNC COUNTER >>       01190000
    DTAIL     = 20,        << SYSDB POINTER TO END OF TBUF LIST >>      01195000
    FF        = %14,       << OCTAL VALUE OF FORM FEED >>      <<01464>>01200000
    DTANKB    = 33,                                                     01205000
    DTBLK     = 24,        << LINK WORD FOR QUEUED TBUF REQUESTS >>     01210000
    DTBUF     =18,         << FIRST TBUF POINTER  >>                    01215000
    DTBUFD    = DTBUF/2,   << DOUBLE INDEX TO FIRST TWO TBUF POINTERS >>01220000
    DTBF2     = DTBUFD+1,  << DBL INDEX TO DTBUF2, DISC ADDR IN PTAPE >>01225000
    DTRLX     = 31,                                                     01230000
    DTYPE     = 7,                                                      01235000
    DWAIT     = 15,        << DITP TO NEXT DEV ON ACTIVITY WAIT >>      01240000
    ECHO'     = 3,         << INPUT IS TO BE ECHOED TO OUTPUT CHANNEL >>01245000
    ECHOOFF   = 0,         << TURN ECHO OFF CODE TO MPXCONTROL >>       01250000
    EORLF     = 6,         << DSTATE - EOR LF IN PROGRESS >>            01255000
    EORSYNC   =%10,        << DSTATE EOR SEQUENCE START SYNC >>         01260000
    ESC       = %33,       << OCTAL VALUE OF ESCAPE CHAR >>    <<01464>>01265000
    FINISEND  = WRTBASE+121,                                            01270000
    FINREAD   =%17,        << FINISH STOPPED READ DSTATE >>             01275000
    FMAX      =  38,       <<MAXIMUM NUMBER OF FUNCTION CALLS>>         01280000
    FOPEN     = 2,         <<FOPEN FUNCTION CALL>>             <<00637>>01285000
    FORMFEED'  = 4,        << DEVICE RESPONDES TO A FORM FEED >>        01290000
    GOODIO    = 1,         << SUCCESSFUL I/O STATUS RETURN >>           01295000
    HANGINGUP = 7,         << DSET HANGUP DELAY IN PROGRESS >>          01300000
    HANGUP    = 3,         << HANG UP DSET CONTROL CODE >>              01305000
    HANGUPTURN= 6,         << HANGUP 202 TURN TK READ WAIT >>           01310000
    HANGUPTO  = 5,         << HANGUP TIMEOUT REQUEST TYPE >>            01315000
                                                               <<04869>>01320000
    HP2640X   = 11,                                                     01325000
    HP2640TO  = 0,         << 2640/44 READ/WRITE TIME OUT REQUEST >>    01330000
    ICNTRL    =  7,        <<ILT ENTRY FOR CHANNEL NO.,DEV NO.>>        01335000
    ISIOP     =  8,        <<ILT PNTR TO SIO PROGRAM AREA>>             01340000
    INITDSET  = 0,                                                      01345000
    INITTO    = 7,         << SPEED SENSE DISCONNECTED TIME REQUEST >>  01350000
    INVALIDOP = 4,         << INVALID OPERATION REQUESTED >>            01355000
    IOQSIZE   =11,         << IOQ ELEMENT SIZE >>                       01360000
    IOWAIT    =%100,       << UNBLOCKED I/O WAIT >>                     01365000
    IOWAKE'   = 4,         << WAKE CALLER ON COMPLETION IF SET >>       01370000
    JMATdst   = 25,                                            <<01465>>01375000
    JMATsir   = 15,                                            <<01465>>01380000
    JUNKWAIT  = %20,                                                    01385000
    JMPSRQOFF = 38,        <<JMP OFFSET TO DISABLE XMIT BUF EMPTY       01390000
                             SRQ = 100-62                        >>     01395000
    LDTDST    = 14,        << LOGICAL DEVICE TABLE DST NUMBER >>        01400000
    LOGGINGON = 2,         << HSTATE LOGGING ON >>                      01405000
    LOGONTO   = 4,         << LOG ON TIME OUT REQUEST TYPE >>           01410000
    LOSTCSTAT =%34,        << LOST CHARACTER REQUEST ERROR STATUS >>    01415000
    LOSTDATA  = 3,         << BUFFER NOT AVAILABLE >>                   01420000
    LOSTDSTAT =%43,        << LOST DATA REQUEST ERROR STATUS >>         01425000
    M202'     = 2,         << 202 OR 2002 MODEM >>                      01430000
    M202      =M202'+1,    << CIRCULAR SHIFT COUNT TO GET 202 TO BIT15>>01435000
    MAXSPEED  = 8,          <<MAX NUMBER OF SPEED CODES>>               01440000
    MAXSPECL  = 10,        << NUMBER OF SPECIAL CHARS FOR THE ADCC>>    01445000
    MAXTIO    = 12,        << MAX TERM I/O TO PREVENT BLOCK OVERRUNS >> 01450000
    MODEMSIO  =%16,        << DSTATE FOR SETTING UP MODEM CONTROL >>    01455000
    MODSIOCNTRL=WRTBASE+154,<<SIO PROG ADDRESS FOR MODEM CONTROL>>      01460000
    MODSIOPTY =WRTBASE+171,<< SIO PROG ADDRESS FOR INTERF CNTRL >>      01465000
    NEWLINE'  = 8,         << LF WAS LAST CHARACTER OUTPUT >>           01470000
    NEWSPECCHAR=WRTBASE+258,<<SIO PROG ADDRESS FOR CHAR SET >> <<02864>>01475000
    NOEOFCHECK= 5,         << NO CHECK & KEEP ANY SAVED DATA >>         01480000
    NOCYPIN   =%153,       << ENABLE ESCAPE & NO CY PIN ERROR >>        01485000
    NODATAYET = 5,                                                      01490000
    NOECHO    = 3,                                                      01495000
    NOPROTOCOL=18,  <<TERM TYPE WITHOUT DC1 READ OR ENQ WRITE>><<01821>>01500000
    NOTNEW    = 1,         << REQUEST PROCESSING HAS STARTED >>         01505000
    NOTRDYMSG = 11,        << CONSOLE MESSAGE INDEX >>         <<01464>>01510000
    NOTREADING = 0,         << DEVICE NOT IN READING STATE >>  <<01.02>>01515000
    NOWAIT    = 0,         << DONT WAIT IN WAKE >>                      01520000
    NULL      = 0,                                                      01525000
    NXTNULL   = 3,       <<SIO PROG INTERRUPT CODE IN CPVA1>>           01530000
    NXTBLKRD  = WRTBASE+221,                                            01535000
    OFFLINE   =%53,        << DEVICE OFFLINE OR HUNGUP RETURN STATUS >> 01540000
    ONLINE    = 1,         << SPEED SENSED AND ONLINE HSTATE >>         01545000
    OPCONSOLE = 0,         << DIRECTS IOMESSAGE TO CONSOLE >>  <<01464>>01550000
    OUTSPD    = 7,         << SET OUT SPEED FUNCTION CODE >>            01555000
    PAUSEDWRITE=%21,                                                    01560000
    PCB3      = 3,         << FOURTH WORD OF PCB >>                     01565000
    PCB9      = 9,                                                      01570000
    PCBSIZE   =16,                                                      01575000
    POSTSPACE =%33,        << RSTATE, POSTSPACE TBUF WAIT >>            01580000
    PREMPT'   = 0,         << A PREMPTIVE REQUEST IS IN THE QUEUE >>    01585000
    PREMPTSTOP= 3,         << STOP READ FOR PREMPTIVE REQUEST >>        01590000
    PRESPLAST'=13,         << LAST WRITE WAS A PRESPACE >>              01595000
    PRESPACE  =%31,        << REQUEST WAITING FOR TBUF FOR PRESPACE >>  01600000
    PRETOPOST =%30,        << ADDING A CR/LF IN PRE TO POST SPACING >>  01605000
    PRIMARY   = 1,         << GET ONLY FROM PRIMARY TABLE >>            01610000
    PRINTER   = 32,        << PRINTER TYPE VALUE     >>        <<04869>>01615000
    PTAPEFUNC = 29,       <<PAPER TAPE SPOOLING FUNCTION>>              01620000
    PTYCHK'   = 9,         << PARITY CHECK READS >>                     01625000
    PTYCNTRL' = 7,         << PARITY IS TO BE SENT IN 8TH BIT >>        01630000
    PTYERROR  = 5,         << READ PARITY ERROR >>             <<01.02>>01635000
    QADDR     = 5,         << TARGET BANK OF DST OFFSET >>              01640000
    QDSTN     = 4,         << BANK OR DST NUMBER >>                     01645000
    QFUNC     = 6,         << FUNCTION  >>                              01650000
    QLINK     = 1,         << NEXT IOQ POINTER >>                       01655000
    QMISC     = 3,         << MISCELLANEOUS STORAGE >>                  01660000
    QPAR1     = 8,         << READ EOF CONTROL; WRITE SPACE CONTROL >>  01665000
    QPAR2     = 9,         << READ STOP CHAR; WRITE PRESPACE FLAG >>    01670000
    QP1D      = QPAR1/2,   << DOUBLE INDEX TO QPAR1 AND QPAR2 >>        01675000
    QSTAT     =10,         << REQUEST STATUS AND PCB NUMBER >>          01680000
    QWBCT     = 7,         << WORD (+) OR BYTE (-) COUNT >>             01685000
    RD4THWORD = [1/1,1/0,14/0],  <<BURST MODE,STRT FROM LEFT BYTE>>     01690000
    RDBRK     = WRTBASE+135,                                            01695000
    RDDATA    = [8/3,8/0],                                              01700000
    RDDATAINSTR=WRTBASE+91,  <<OFFSET OF READ SIO PROG>>                01705000
    RDEXIT    = WRTBASE+128,                                            01710000
    RDINTRPT  = WRTBASE+147,                                            01715000
    RDNULL    = 28,          <<READ WITH BYTE COUNT=0 INTERRUPT CODE>>  01720000
    RDPROGSTRT = 18,             <<START OF READ OPERATION SIO PROG>>   01725000
    RDSPECL   = 2,         <<CPVA2 SPECL CHAR DETECTED INTRPT CODE>>    01730000
    RDSTRT    = WRTBASE+43,                                             01735000
    RDWAIT    = WRTBASE+76,                                             01740000
    READBINARY= 1,                                                      01745000
    READING   = 2,         << DSTATE- READ IN PROGRESS >>               01750000
    READTO    = 6,         << READ TIMED OUT READERRORS CODE >>         01755000
    READTIMEOUT= 3,        << READ TIME OUT REQUEST TYPE >>             01760000
    READTOSTOP= 4,         << STOP READ AFTER READ TIME OUT >>          01765000
    READWAITING= 5,        << READ WAITING TO START AFTER WRITE DONE >> 01770000
    RECVOFF   = WRTBASE+50,                                             01775000
    REPEATING = %14,                                           <<04236>>01780000
    REQUEST'  = 3,         << MONITOR SERVICE REQUESTED WHILE ACTIVE >> 01785000
    RESET31   = 6,         << REQUEST STATE WHEN RESETTING 31B <<01464>>01790000
    RTOVERFLOW=%163,       << READ TIME RETURNED TO LARGE ERROR >>      01795000
    SECONDARY =  2,     <<GET TBUF FROM SECONDARY AREA IF PRIMARY       01800000
                          AREA IS EMPTY>>                               01805000
    SENDXON   =%12,        << READ TO BE ACTUALLY STARTED DSTATE >>     01810000
    SESSION   = 1,         << JOB TYPE IS A SESSION >>                  01815000
    SIOSIZE   = 145,       << SIZE OF SIO CHANNEL PROG AREA >> <<04869>>01820000
    SOFTKILL  =%20,        << SOFT KILL FLAG >>                         01825000
    SIOBAUDBUF =8,      <<WORD OFFSET FROM SIO AREA OF THE BUFFER       01830000
                          FOR UART CNTRL>>                              01835000
    SIOINTRFBUF=3,      <<OFFSET OF INTRF CNTRL BUF FROM UART BUF>>     01840000
    SIOFFSETUR = 4,     <<UART BUF OFFSET FROM SIO PROG AREA>>          01845000
    SIOPROGUART= 22,    <<MEMORY ADDRESS WORD IN WRT CHANNEL INSTR      01850000
                          OFFSET FROM SIO PROG AREA>>                   01855000
    SIOPROGWRT = 113,   <<WRT UART INSTR ADDR IN WRT CHANNEL PROG>>     01860000
    SIORDINST  = 81,    <<OFFSET OF THE READ DATA INTO TBUF             01865000
                          CHANNEL INSTR>>                               01870000
    SIOWRTINST = 136,                                                   01875000
    SOFTPREMPT=3,          << PREMPT READS IF NOTHING INPUT SO FAR >>   01880000
    SPECIALEND=%11,        << TERM READ TERMINATE ON SPECIAL CHAR >>    01885000
    SPSENBAUD =WRTBASE+178,                                             01890000
    SPDSENSING'= 4,        << DEVICE IS IN DIAGNOSTIC OR SPD SNSE MODE>>01895000
    SPDSENSIO = 7,         <<SPEEDSENSE SIO PROG ACTIVE>>               01900000
    SPEEDTO   = 6,         << SPEED SENSING TIMEOUT TYPE >>             01905000
    SPOOLING' = 5,         << PTAPE READ IN PROGRESS >>                 01910000
    SRQOFF    = WRTBASE+209,                                            01915000
    SSBREAK'  = 4,         << SUB SYS BRK IS ALLOWED &  HAS BEEN DET. >>01920000
    SSBRKSTOP = 2,         << SUB SYSTEM BREAK READ STOP CODE >>        01925000
    SSBRKOK'  =SSBREAK'+1, << SUB SYS BRK IS ENABLED >>                 01930000
    STARTREAD =%16,        << TIP TO START READ NEXT >>                 01935000
    STOPPED   =%44,                                                     01940000
    SYNSTRT   = WRTBASE+57,                                             01945000
    SYSBUFR'  =  3,        << REQUEST DATA IS IN SYSTEM BUFFERS >>      01950000
    SBUFMAXB  = 256,                                                    01955000
    SYSDISK   = 1,         << SYSTEM DISK LOGICAL DEVICE # >>           01960000
    SYSDB     =%1000,                                                   01965000
    SYSDB1    = SYSDB + 1,                                              01970000
    SYSDB2    = SYSDB+2,                                                01975000
    SYSDST    = 2,                                             <<00.05>>01980000
    SYSLPDT   =%10,        << LOGICAL PHYSICAL DEVICE TABLE >>          01985000
    SYSPCB    = 3,                                                      01990000
    SYSSBUF   = 6,                                                      01995000
    TAPEMODE' = 0,         << PAPER TAPE READ MODE;NO EDIT RESPONSES >> 02000000
    TBMAXB    = 60,        << TBUF SIZE IN BYTES >>                     02005000
    TBQN      = 0,         << RESOUCE QUEUE # FOR TBUF REQUESTS >>      02010000
    TBMAXW    = TBMAXB/2,  << TBUF SIZE IN WORDS >>                     02015000
    TBWAIT    =%32,        << REQUEST WAITING FOR TBUF OR TBUF SPACE >> 02020000
    TDITSIZE   = 37,    <<TERMINAL DIT SIZE>>                           02025000
    TERMCHAR' = 10,                                                     02030000
    TERMJMP    = [8/15,8/1],  <<RD TERMINATION JMP TO 'END',            02035000
                                BURST= 1>>                              02040000
    TERMT15   = 15,        << TERMTYPE FOR 8-BIT HP2635>>      <<00328>>02045000
    TERMT16   = 16,        << TERMTYPE FOR 7/8-BIT HP2635 >>   <<00328>>02050000
    TRANSMIT  = 4,         << FINSH TURNING 202 TO WRITE STATE >>       02055000
    TIMEDOUT  = %23,      <<READ TIMED OUT REQUEST ERR STATUS>>         02060000
    TQUEUE    = DLINK,    <<RESOURCE NUMBER OF TERMINAL I/O QUEUE>>     02065000
    TURN202    = 4,        << DSTATE, TURNING 202 TO READ OR WRITE >>   02070000
    TURNTO     = 2,        << 202 TURN AROUND TIME OUT TYPE >>          02075000
    UARTBUFADR =10,     <<OFFSET FROM SIO AREA FOR RECV UART STAT>>     02080000
    UNDEFINED =%37,        << UNDEFINED TERMINAL TYPE >>                02085000
    UP'       = 1,         << ON LINE,SPEED SENSED AND CAN DO I/O >>    02090000
    WAIT2SIO  = WRTBASE+251,                                            02095000
    WAITACK    = 16,       <<CPVA2 SPECL CHAR DETECTED INTRPT CODE>>    02100000
    WAITCR     = 14,       <<  ---------------------------------- >>    02105000
    WAITC'A    = 18,       <<  ---------------------------------- >>    02110000
    WAITING   = 7,    <<IOQ IS WAITING FOR WRITE TO COMPLETE >><<01464>>02115000
    WAITSPDS   =  8,       <<  ---------------------------------- >>    02120000
    WAITED    =%11,        << READ/WRITE/BANDWAIT HELD FOR BREAK >>     02125000
    WECHO      =11,     <<ECHO ON BIT IN INTERF CNTRL BYTE>>            02130000
    WRITING   = 1,         << DSTATE IS WRITING >>                      02135000
    WRT4THWORD = [1/1,1/0,1/1,13/0],  <<4TH WORD IN WRT CHAN INST>>     02140000
    WRTDATA    = [8/4,8/0],                                             02145000
    WRTDATAINSTR=WRTBASE+34,<<OFFSET OF WRITE CHANNEL INSTR>>           02150000
    WRTSPD    = WRTBASE+190,                                            02155000
    WRTSPECL   = 3,                                            <<04236>>02160000
    WRTPROGSTRT= 109,                                                   02165000
    WRTCHAN   =-1,         << FLAG TO INDICATE WRITE CHANNEL MPXCNTRL >>02170000
    WRTSRQ    = WRTBASE+10, <<OFFSET OF WAIT FOR SRQ INSTR>>            02175000
    WRT'RD    = WRTBASE+66,                                             02180000
    WRT'RD2   = WRTBASE+246,                                            02185000
    YCINTRPT  = 2,         << CONTROL Y PSEUDOINTERRUPT FLAG >>         02190000
    XOFFPAIR  = 1,                                                      02195000
    XMITOFF   =WRTBASE+71,                                              02200000
    XMITON    =WRTBASE+5,                                               02205000
    ENDEQ       = 0;                                                    02210000
                                                                        02215000
  DEFINE                                                                02220000
    ABORTBIT  =( 0:1)#,                                                 02225000
    ABORTWRT  =( 5:1)#,                                                 02230000
    ABS       =ABSOLUTE#,                                               02235000
    ACCEPTING =(AJOBS':2)#,<< ACCEPTING JOBS AND DATA FIELDS IN LPDT >> 02240000
    ACTIVE    =(ACTIVE'  :1)#,                                          02245000
    ADDENQ    =(15:1)#,     <<SET WHEN AN ENQ IS BEING ADDED TO         02250000
                              A TANKED TBUF>>                           02255000
    ASMB      = ASSEMBLE#,                                              02260000
    BCNTED    =( 6:1)#,     <<SET WHEN BCNT FOR CURRENT TBUF HAS BEEN   02265000
                              UPDATED BY TIP>>                          02270000
    BINARYREAD =(11:1)#,  <<IF SET THEN XSFER 8 BITS ON READ>>          02275000
    BINARY    =(11:2)#,    << IF 0 THEN ASCII ELSE BINARY READ >>       02280000
    BLOCKED   =(BLOCKED':1)#,<< BLOCKED, WAIT CALLER UNTIL COMPLETION >>02285000
    BLOCKRD   =(10:1)#,                                                 02290000
    BMODE     =(BMODE':1)#,<< TERMINAL IN BREAK MODE >>                 02295000
    BRKOK     =(BRKOK':1)#,                                             02300000
    BWRITE    =( 7:1)#,    << BINARY WRITE, PTY DISABLE >>              02305000
    CB        = ( 5:1)#,   << CLEAR TO SEND, REQST TO SEND DELAYED >>   02310000
    CBSB      =( 5:2)#,                                                 02315000
    CC        =( 9:1)#,                                        <<02861>>02320000
    CCON      =(15:1)#,    <<CC ALWAYS ON FLAG>>               <<01046>>02325000
    CCVALUE   =( 9:1)#,    <<OLD CC VALUE>>                    <<01046>>02330000
    CF        =( 4:1)#,    << CARRIER DETECTED IF SET >>                02335000
    CFCB      =( 4:2)#,                                                 02340000
    CFAILCNT  =( 4:6)#,    << CARRIER FAILURE COUNTER >>                02345000
    CLRENQ    =(0:1)#,     <<SET IF THERE ARE ENTRIES IN DIT(34)        02350000
                             TO DIT(36)>>                               02355000
    CMODE     =(CMODE':1)#,<< TERMINAL IN CONSOLE MODE >>               02360000
    COMPLETED =(COMPLETED':1)#,   << REQUEST COMPLETED >>               02365000
    CYPIN     =( 8:8)#,    << SUB SYSTEM BREAK PIN IN LDT >>            02370000
    CONSINTRPT=(11:1)#,    << CONSOLE INTERRUPT OK IF SET >>            02375000
    CRSYNC    =( 4:4)#,    << NUMBER OF SYNCS REQUIRED AFTER CR >>      02380000
    DELACK    =( 8:1)#,                                                 02385000
    DEVREC    =( 0:2)#,    <<  DEVICE RECOGNITION STATE >>              02390000
    DISABLE   = ASSEMBLE( SED 0 )#,                                     02395000
    DISCNCT   =(DISCNCT' :1)#,                                          02400000
    DLDEVN    =(8:8)#,     << LOGICAL DEVICE NUMBER OF DIT >>           02405000
    DOMOD     =( 6:1)#,    << FLAG TO DO MODEM CONTROL NEXT>>           02410000
    DONXTMOD  =( 3:3)#,    << CONTROL CODE FOR MODEM CONTROL>>          02415000
    DOSTATREQ =( 3:1)#,    << REQUEST STATUS AT END OF DATA >> <<04869>>02420000
    DPAGEEJECT=DITPL(DSAVE).(11:1)#, << 1 -> AUTO EJECT >>     <<01464>>02425000
    DRTNUMBER =(9:7)#,     <<9:4-CHANNEL NO.,13:3-DEV NO.>>             02430000
    DSAVEPL   = DITPL(DSAVE)#,                                 <<02861>>02435000
    DSTATE    =(DSTATE'  :4)#,                                          02440000
    DSTFIELD  =(1:10)#,    << DST NUMBER EXTRACT FROM PCB >>            02445000
    ECHO      =(ECHO':1)#,                                              02450000
    EIGHTBITS =( 8:1)#,    << 2635/2645K 8-BIT PROTOCOL >>              02455000
    ENABLE    = ASSEMBLE( SED 1 )#,                                     02460000
    ENQACKWAIT=(11:1)#,    << 2640 WRITE ENQ/ACK WAIT >>                02465000
    ENQOFFSET =( 1:15)#,    <<BYTE OFFSET OF ENQ IN TBUF      >>        02470000
    EOFCODE   =(13:3)#,    << EOF CHECK SPECIFICATION >>                02475000
    EPE       =(6:1)#,     <<EVEN PTY ENABLE BIT IN UART CNTRL>>        02480000
    ESIZE     =(8:8)#,     << TABLE ENTRY SIZE >>                       02485000
    EVENPTY   =(8:1)#,     <<EVEN AND NOT ODD PTY BIT>>                 02490000
    FILLING   =(14:1)#,    << TERM IS FILLING TBUFS WITH WRITE DATA >>  02495000
    FLUSH     =( 0:1)#,    << FLUSH AFTER BREAK OR CONTROL Y >>         02500000
    FORMFEED  =(FORMFEED':1)#,                                          02505000
    FUNC      =( 8:8)#,    << QFUNC, FUNCTION CODE >>                   02510000
    HIOPWAIT  =( 0:1)#,     <<HIOP WAS ISSUED, BUT SIO PROG COULD       02515000
                              NOT BE HALTED IMMEDIATELY>>               02520000
    HP2631B   = (19 <= DTYPEP.TTYPE <= 22)#,                   <<04869>>02525000
    HP2631B7  = (DTYPEP.TTYPE = 19 OR DTYPEP.TTYPE = 21)#,     <<04869>>02530000
    HP2631BFX = (21 <= DTYPEP.TTYPE <= 22)#,                   <<04869>>02535000
    HP2631BNFX= (19 <= DTYPEP.TTYPE <= 20)#,                   <<04869>>02540000
    HSTATE    =( 4:3)#,    << HANG UP STATE                             02545000
                               0 - HUNGUP       3 - HNGP SPD SNS DISCNCT02550000
                               1 - ONLINE       4 - DCLOSE DISCONNECT   02555000
                               2 - LOGGING ON   5 - LO SPD SNS DISCNCT  02560000
                               6 - HANG UP TURN 7 - HANGING UP >>       02565000
    IDLESIO   =(0:3)#,     <<0-RUN STATUS,1-CHNG STAT,2-PWR RECVR>>     02570000
    IF'PRINTER= TOS := 0;                                      <<04869>>02575000
                TOS := DITP(DLDEV).LDEVN;                      <<04869>>02580000
                RESETDB(-1);                                   <<04869>>02585000
                TOS := LDEVTOTYPE(*);                          <<04869>>02590000
                SETSYSDB;                                      <<04869>>02595000
                IF TOS = PRINTER #,                            <<04869>>02600000
    ININ      =(14:1)#,    <<SYSTEM INITIALIZATION FLAG>>      <<01046>>02605000
    INSPEED   =(12:4)#,    << INPUT SPEED AND CHARACTER SIZE >>         02610000
                           <<  0 - NOT DETERMINED  4 - 30 CPS           02615000
                               1 - 240 CPS         5 - 15 CPS           02620000
                               2 - 120 CPS         6 - 10 CPS           02625000
                               3 -  60 CPS         7 - 14 CPS  >>       02630000
    IOSTAT    =( 8:8)#,    << TOTAL REQUEST STATUS RETURNED >>          02635000
    IOWAKE    =(IOWAKE':1)#,                                            02640000
    LDEVN     =( 8:8)#,                                                 02645000
    LEFTHLF   =(0:8)#,                                                  02650000
    LFCOUNT   =(10:6)#,    <<COUNT OF REMAINING LF'S TO TANK>> <<00637>>02655000
    LFLAST    =( 1:1)#,     <<A POSTSPACE LF HAS BEEN TANKED>>          02660000
    LFSYNC    =( 0:4)#,    << NUMBER OF SYNCS REQUIRED AFTER LF >>      02665000
    LOADMEMORY=ASSEMBLE( LSEA )#,                              <<00.05>>02670000
    LOGONTRLX =(8:8)#,     << TIM. REQ. INDEX FOR LOGONTO >>   <<01449>>02675000
    LOGONTYPE =(0:2)#,     << :DATA=0  :HELLO=1  :JOB=2 >>     <<01449>>02680000
    LPLEVEL   =(13:3)#,    << LAST PREMPT LEVEL                         02685000
                                0 - NONE       3 - SOFT PREMPT          02690000
                                1 - NOT USED   4 - HARD PREMPT          02695000
                                2 - CONSOLE                      >>     02700000
    MAINPIN   =( 0:8)#,    << JOB MAIN PIN IN LDT >>                    02705000
    MCODE     =(10:6)#,    << MONITORING FUNCTION CODE >>               02710000
    MODACTIVE =( 6:1)#,    <<INTERF MODEM CONTROL PROG ACTIVE>>         02715000
    MODBYTE   =(11:5)#,    << MODEM CONTROL BYTE >>                     02720000
    MODEM     =( 2:2)#,    << MODEM TYPE W/O SPEEDSENSE BIT >> <<02861>>02725000
    MODECHO   =(11:1)#,                                                 02730000
    MODCA     =(12:1)#,                                                 02735000
    MODCD     =(13:1)#,                                                 02740000
    MODCH     =(14:1)#,                                                 02745000
    MODSA     =(15:1)#,                                                 02750000
    MODCBREF  =( 3:1)#,                                                 02755000
    MODCCREF  =( 4:1)#,                                                 02760000
    MODCEREF  =( 5:1)#,                                                 02765000
    MODCFREF  =( 6:1)#,                                                 02770000
    MODSBREF  =( 7:1)#,                                                 02775000
    MODCBMSK  =(11:1)#,                                                 02780000
    MODCCMSK  =(12:1)#,                                                 02785000
    MODCEMSK  =(13:1)#,                                                 02790000
    MODCFMSK  =(14:1)#,                                                 02795000
    MODSBMSK  =(15:1)#,                                                 02800000
    MTYPE     =( 1:3)#,    << MODEM TYPE                                02805000
                                0 - HARDWIRED   2 - 202C                02810000
                                1 - 103         3 - 2002   >>           02815000
    NEWFORM   = DITP(DLAST).(9:1)#,                            <<01464>>02820000
    NEWLINE   =(NEWLINE' :1)#,                                          02825000
    NO'CX'ECHO=( 1:1)#,    << IF SET DONT ECHO !!! ON CONTROL X >>      02830000
    NOPREMPT  =(11:1)#,    << NO PREMPTS OF THIS STATE ALLOWED >>       02835000
    NOSTOP    =(10:1)#,    << NO PREMPTS OR ABORTS ALLOWED >>           02840000
    NOSYNC    =( 7:1)#,    << NO SYNC TERMINAL, USES ENQ AND ACK >>     02845000
    NOTLOGON  =(12:1)#,    << LOGON TIMER IS FILE CONNECT >>   <<02861>>02850000
    NXTDSTATE =( 9:4)#,    << NEXT DSTATE AFTER 202 TURN AROUND >>      02855000
    ODDPTY    =( 8:1)#,     <<SET IF ODD PARITY IS SPECIFIED>>          02860000
    OUTSPEED  =( 6:4)#,    << OUTPUT SPEED AND CHARACTER SIZE CODE      02865000
                               SEE INSPEED FOR MEANING >>               02870000
    OWNREAD   =(10:1)#,                                                 02875000
    PAIR      =( 7:1)#,    << INDICATES SPECIAL ACTION ON NEXT CHAR >>  02880000
    PCBS      =LSR(8)#,    << SHIFT TO GET PCB NUMBER FROM IOQ >>       02885000
    PDISABLE  = ASSEMBLE( PSDB )#,     << PSUEDO DISABLE >>             02890000
    PAIRCODE  =(12:4)#,    << DENOTES LAST PAIR CHAR INPUT >>  <<01.02>>02895000
    PENABLE   = ASSEMBLE( PSEB )#,     << PSEUDO ENABLE >>              02900000
    PINHB     =(7:1)#,     <<PTY INHIBIT BIT IN UART CNTRL>>            02905000
    PARITYBITS=(PTYCNTRL':2)#,<< PARITY CONTROL AND SENSE >>            02910000
    PARITYSAVE=( 8:2)#,    << HOLDS PRTY CNTRL DURING BINARY OPS >>     02915000
    POSTSPLAST=( 1:1)#,                                                 02920000
    PRIMED    =(10:1)#,                                                 02925000
    PTYCHK    =(PTYCHK'  :1)#,                                          02930000
    PTYON     =(7:1)#,     <<DIT ENTRY,SET IF PTY ENABLED>>             02935000
    PTYONODD  =(7:2)#,     <<PTY ON FLAG;ODD PTY FLAG>>        <<00637>>02940000
    PRESPLAST =(PRESPLAST':1)#,                                         02945000
    PREMPT    =(PREMPT' :1)#,                                           02950000
    QPAGEEJECT=IOQPL(QPAR2).(14:1)#, << 0 -> AUTO EJECT >>     <<01464>>02955000
    RBYTE     =(8:8)#,                                                  02960000
    RDCOUNTED =( 8:1)#,    << RDCOUNTER INCREMENTED >>                  02965000
    READSTOP  =( 7:3)#,    << IF NOT ZERO THEN STOP READ BECAUSE        02970000
                                 0 - NONE        4 - LOGON TIMED OUT    02975000
                                 1 - BREAK       5 - ABORTED            02980000
                                 2 - PREMPT      6 - NOT USED           02985000
                                 3 - TIMED OUT   7 - NOT USED  >>       02990000
    READTRLX  =(8:8)#,                                                  02995000
    REQUEST   =(REQUEST':1)#,<< REQUEST FOR SERVICE WHILE ACTIVE >>     03000000
    RESTSPD   =(10:1)#,    <<FLAG TO RESTART IDLE/SPDSENSE PROG>>       03005000
    RIGHTHLF  =(8:8)#,                                                  03010000
    RPLEVEL   =(13:3)#,    << REQUEST PREMPT LEVEL,SEE LPLEVEL  >>      03015000
    RSTATE    =(10:6)#,    << REQUEST STATE -                           03020000
                              0 - NEW       %30 - PRE TO POST TBUF WAIT 03025000
                              1 - STARTED   %31 - PRESPACE TBUF WAIT    03030000
                              2 - READING    32 - WRT DATA TBUF WAIT    03035000
                             43 - RD CMPLTD  33 - POSTSPACE TBUF WAIT   03040000
                             44 - RD STOPPED                            03045000
                              5 - READ WAITING                          03050000
                             %34-%37 SAME A %30-%33 BUT ENQ ADD WAIT    03055000
                           >>                                           03060000
    READERRORS=(10:3)#,    << 0-OK,1-SPECIALSTOP,2-PTY ERR,3-LOST DATA, 03065000
                              4-LOST CHAR,5-BRK STOP,6-TIMEDOUT >>      03070000
    SB        =( 6:1)#,    << SECONDARY CARRIER DETECT >>               03075000
    SBS       =( 5:1)#,    << STOP BIT SELECT  >>              <<01994>>03080000
    SCOUNT    =(8:8)#,                                                  03085000
    SERVREQ   =( 0:1)#,    << DEVICE RECOGNITION SERVICE REQUEST >>     03090000
    SPDSENSING=(SPDSENSING':1)#,                                        03095000
    SPDSIO    =( 2:1)#,    <<SPEEDSENSE SIO PROG ACTIVE>>               03100000
    SPOOLING  =(SPOOLING':1)#,                                          03105000
    SSBRKOK   =(SSBRKOK':1)#,                                           03110000
    STARTSIO  =ASMB(CON %20302;CON 0)#,                                 03115000
    STATDONE  = DRQSTP.(15:1)#,  << STAT REQ COMPLETE >>       <<01464>>03120000
    STATREQ   = DITPL(DSAVE).(13:1)#,  << ACTIVE STAT REQ >>   <<01464>>03125000
    STOPSIO   =ASMB(CON %20302;CON 1)#,                                 03130000
    STRTWRT   =(14:1)#,                                                 03135000
    SYNCSTATE =(2:2)#,     <<STATE OF TANKING LF/SYNC: >>      <<00637>>03140000
                           <<0 - TANK XOFF/CR                           03145000
                             1 - DETERMINE NO. OF LF'S TO TANK          03150000
                             2 - TANK LF/SYNC                 >>        03155000
    SYSBUFR   =(SYSBUFR':1)#,                                           03160000
    TAPEMODE  =(TAPEMODE':1)#,                                          03165000
    TERMCHAR  =(10:1)#,                                                 03170000
    TIMEREAD  =( 1:1)#,    << TIME READ OPERATIONS >>                   03175000
    TIMING    =(0:1)#,                                                  03180000
    TTYPE     =( 5:5)#,    << TERMINAL TYPE AS IN MPE ERS >>            03185000
    TERMINALTYPE=( 0:7)#,  << DEFAULT TERMINAL TYPE >>                  03190000
    TERMSPEED =(12:4)#,    << PRECONFIGURED TERMINAL SPEED >>  <<00.06>>03195000
    TESTBIT   = ASSEMBLE(TBC#,                                          03200000
    TMODE     =(11:2)#,    << TERMINAL MODE                             03205000
                                 0 - NORMAL   2 - CONSOLE               03210000
                                 1 - BREAK    3 - CONSOLE FROM BREAK >> 03215000
    TURNTOWRITE=(7:1)#,                                                 03220000
    UP        =(UP'      :1)#,                                          03225000
    WAITEDSTATE=(0:4)#,    << STATE WAITED FOR BREAK >>                 03230000
    WAITXON   =(10:1)#,    <<WRT SUSPENDED TO WAIT FOR XON>>   <<00496>>03235000
    WLS       =(3:2)#,     <<WORD LENGTH SELECT FIELD IN UART BYTE      03240000
                             00-5 BITS, 01-6 BITS                       03245000
                             10-7 BITS, 11-8 BITS >>                    03250000
    WRTCOUNTED=( 9:1)#,    << WRTCOUNTER INCREMENTED >>                 03255000
    WRTENQ    =(0:1)#,         <<SET WHEN AN ENQ IS IMBEDDED IN TBUF>>  03260000
    ENDDEF    = 0#;                                                     03265000
                                                                        03270000
                                                                        03275000
                                                                        03280000
                                                                        03285000
                                                                        03290000
  <<----------- GENERAL SERVICE VARIABLES -------------->>              03295000
                                                                        03300000
    INTEGER POINTER PS0 = S-0;                                          03305000
    LOGICAL LS0 = S-0,  LX = X;                                         03310000
    INTEGER S0=S-0, S1=S-1, S2=S-2, S3=S-3, S4=S-4, X = X;     <<01464>>03315000
                                                                        03320000
    LOGICAL SYSUP = DB + %73;   <<SYSTEM UP FLAG>>                      03325000
    INTEGER ARRAY WA0(*) = DB + 0;                                      03330000
    BYTE    ARRAY BA0(*) = DB + 0;                                      03335000
    BYTE POINTER  BPS1   = S  - 1;                                      03340000
                                                                        03345000
    INTEGER ARRAY LPDT(@) = DB + SYSLPDT;                               03350000
    DOUBLE ARRAY LPDTD(@) = DB + SYSLPDT;                               03355000
    INTEGER ARRAY SBUF(@) = DB + SYSSBUF;                               03360000
    INTEGER ARRAY PCB (@) = DB + SYSPCB ;                               03365000
    INTEGER ARRAY DST (@) = DB + SYSDST;                                03370000
    DOUBLE ARRAY DSTD (@) = DB + SYSDST;                                03375000
                                                                        03380000
    INTEGER RDCOUNTER  = DB + %64; << # OF TERMINAL READS IN PROGESS >> 03385000
    INTEGER WRTCOUNTER = DB + %65; << # OF TERMNAL WRITES IN PROGRESS >>03390000
                                                                        03395000
    INTEGER DEVRECPCBP = DB + %145;  << DEVICE RECOGNITION PCB INDEX >> 03400000
    INTEGER CONSLDEV   = DB + %74;  << SYSTEM CONSOLE LDEV >>           03405000
                                                                        03410000
    INTEGER ARRAY CST(@) = DB +1;                                       03415000
                                                                        03420000
  << DIT DEFINITION AND DRIVER LINKAGE DATA >>                          03425000
                                                                        03430000
BYTE ARRAY DLT(0:7 ) = DB :=                                            03435000
  TDITSIZE, 2, 0, 0, 0, 0, SIOSIZE, 0;  << TYPE 2 MONITOR >>   <<00690>>03440000
                                                                        03445000
ARRAY DIT(1:TDITSIZE) = DB :=                                           03450000
  %100400,    <<SET TERMINAL FLAG,STATE=NOT UP,PAIR=1>>                 03455000
  0, 0, 0, 0, 0, 0, %20, 0, << BIT SET TO ENABLE CONTROL A >>           03460000
  %010000,   << SET ECHO ON,NO SPEED SENSE >>                           03465000
  0,          <<DCNTRL: INHIBIT PARITY>>                                03470000
  0,0,0,0,0,0,0,0,0,0,0,0,0,                                            03475000
  0,0,0,0,0,80,<<DSYNC: 80>>                                            03480000
  0,0,0,0,0,0,0;    <<END OF TERMINAL DIT AREA>>                        03485000
                                                                        03490000
                                                                        03495000
ARRAY SIOA(1:504) = DB :=                                      <<04869>>03500000
                                                                        03505000
<<****************************************************************      03510000
  ****************************************************************      03515000
  ****************************************************************      03520000
  ******                                                    ******      03525000
  ******                                                    ******      03530000
  ******          SIO CHANNEL PROGRAM AREA                  ******      03535000
  ******                                                    ******      03540000
  ******                                                    ******      03545000
  ****************************************************************      03550000
  ****************************************************************      03555000
  ****************************************************************      03560000
>>                                                                      03565000
  %11415,         << 0 --DATA BUFFER FOR XOFF,CR>>                      03570000
  %5012,          <<  1--                LF,LF>>                        03575000
  %11415,         <<  2--                XOFF,CR>>                      03580000
  %6005,          <<  3--                FF,ENQ>>                       03585000
  %3,             <<  4--DATA BUFFER FOR UART CNTRL; ETX >>             03590000
  %6014,          <<  5--INTRF CNTRL:NOECHO,CA,CD; ECHO?,CA,CD>>        03595000
  %2401,          <<  6--XMIT BUF EMPTY SRQ, XMIT SRQ OFF >>   <<01932>>03600000
  %3002,          <<  7--CHAR RECVD SRQ ON,CHAR RECVD SRQ OFF>>         03605000
  %20,            <<  8--SEND BAUDRATE BYTE; RECV BAUDRATE BYTE>>       03610000
  %21,            <<  9--SYNC CHAR; DC1      >>                <<00637>>03615000
  0,              << 10--DEV RETURNED UART STATUS; BOTTOMLESS DATA      03620000
                         DUMP FOR ACK,CR AND SPECL CHARS          >>    03625000
  %20000,         << 11--SPACE, 0                                 >>    03630000
  0,              << 12--                                        >>     03635000
  0,              << 13--SSBRK CHAR; EOR CHAR  OR  SPECL RD STOP CHAR>> 03640000
  0,              << 14-- 0; MODEM CONTROL BYTE                       >>03645000
  0,              << 15-- MODEM STATUS REFERENCE; MODEM STATUS MASK   >>03650000
  %31,            << 16-- 0; CONTROL Y  >>                     <<00637>>03655000
  %15446,         << 17-- ESC, &   SET ALT CHAR SELECT TYPE >> <<04869>>03660000
  "k0",           << 18--                                   >> <<04869>>03665000
  %44417,         << 19-- I, SHIFTIN                        >> <<04869>>03670000
  %15446,         << 20-- ESC, &   SET LPI                  >> <<04869>>03675000
  "l6",           << 21--                                   >> <<04869>>03680000
  "D ",           << 22--                                   >> <<04869>>03685000
<<****************************************************************      03690000
  ****************************************************************      03695000
  *********    START OF SIO CHANNEL PROG AREA    *****************      03700000
  ****************************************************************      03705000
  ****************************************************************      03710000
>>                                                                      03715000
<<******************************************************************    03720000
  ***********                                            ***********    03725000
  ***********   CHANNEL PROGRAM FOR WRITE OPERATION      ***********    03730000
  ***********                                            ***********    03735000
  ******************************************************************    03740000
>>                                                                      03745000
<<--WRTBASE-->>                                                         03750000
  [8/4,8/2],   << 00--WRT INTERF CNTRL: NOECHO,CA,CD              >>    03755000
  1,           << 01--                                            >>    03760000
  1,           << 02--                                            >>    03765000
  [1/1,1/0,1/1,3/1,10/0],                                               03770000
               << 03--  LEFT BYTE,NO UPDATE                       >>    03775000
  0,           << 04--..BUFFER ADDRESS                            >>    03780000
<<--XMITON-->>                                                          03785000
  [8/4,8/3],   << 05--WRITE XMIT BUF NOT FULL SRQ ON >>        <<01668>>03790000
  1,                                                                    03795000
  1,                                                                    03800000
  [1/1,1/0,1/1,3/1,10/0],                                               03805000
               << 08--  LEFT BYTE, NO UPDATE                      >>    03810000
  0,           << 09--..BUFFER ADDRESS                            >>    03815000
<<--WRTSRQ-->>                                                          03820000
  [8/4,8/3],   << 10--WRT TO ENABLE CHAR RECVD SRQ                >>    03825000
  1,                                                                    03830000
  1,                                                                    03835000
  [1/1,1/0,1/1,3/1,10/0],                                               03840000
               << 13--  LEFT BYTE, NO UPDATE                      >>    03845000
  0,           << 14--..BUFFER ADDRESS                            >>    03850000
  [8/2,8/0],   << 15--WAIT FOR SRQ                                >>    03855000
  0,           << 16--                                            >>    03860000
  [8/5,8/3],   << 17--DSJ, RESPONSE= 0,1,2 OR 3                   >>    03865000
  0,           << 18--  HOLDS DEV RETURNED STATUS BYTE            >>    03870000
  2,           << 19--  RESPONSE=0 : READ                         >>    03875000
  11,          << 20--          =1 :WRITE                         >>    03880000
  79,          << 21--          =2 : READ DEV STATUS, JUMP TO 102 >>    03885000
   9,          << 22--          =3 : NO RQST PENDING,BACK TO WAIT SRQ>> 03890000
  [8/1,1/1,7/0],<<23--INTERRUPT/HALT, INFO TO CPVA3               >>    03895000
  1,           << 24--  ERROR IN DSJ RETURNED BYTE                >>    03900000
  [8/3,8/0],   << 25--RESPONSE=0:RD CHAR INTO BOTTOMLESS DUMP     >>    03905000
  1,                                                                    03910000
  [8/%361,8/1], << 27--  TERMINATION JMP TO WAIT SRQ,JMP TO -15    >>   03915000
  [1/1,1/1,4/1,10/0],                                                   03920000
               << 28--  RIGHT BYTE, NO UPDATE                     >>    03925000
  0,           << 29--..BUFFER ADDRESS                            >>    03930000
  [8/0,8/0],   << 30--RELATIVE JUMP TO 202 TO TURN OFF CHAR RECVD >>    03935000
  170,         << 31--  SRQ,THEN INTERRUPT/HALT                   >>    03940000
  [8/0,8/0],   << 32--JMP BACK TO WAIT SRQ                        >>    03945000
  -19,                                                                  03950000
<<--WRTDATAINSTR-->>                                                    03955000
  0,           << 34--DEV RESPONSE=1: WRITE OUT DATA              >>    03960000
  0,                                                                    03965000
  0,                                                                    03970000
  0,                                                                    03975000
  0,           << 38--**BUFFER ADDRESS                            >>    03980000
  0,           << 39--INTERRUPT/HALT OR RELATIVE JUMP             >>    03985000
  0,           << 40--  TO RD SPECL CHAR OR DISABLE RECV SRQ,INTRPT>>   03990000
  [8/0,8/0],   << 41--JUMP BACK TO WAIT FOR SRQ                   >>    03995000
  -28,                                                                  04000000
<<******************************************************************    04005000
  *******                                                    *******    04010000
  *******       CHANNEL PROGRAM FOR READ OPERATION           *******    04015000
  *******                                                    *******    04020000
  ******************************************************************    04025000
>>                                                                      04030000
<<--RDSTRT-->>                                                          04035000
  [8/4,8/5],   << 43--WRITE TO SET SPECL CHAR DETECTION LOGIC     >>    04040000
  1,           << 44--                                            >>    04045000
  1,           << 45--                                            >>    04050000
  [1/1,1/1,1/1,3/1,10/0],                                               04055000
               << 46--  RIGHT BYTE,NO UPDATE                      >>    04060000
  0,           << 47--  ..BUFFER ADDRESS                          >>    04065000
  [8/0,8/0],   << 48--JMP TO WRITE DC1 OR START READ              >>    04070000
  0,                                                                    04075000
<<--RECVOFF-->>                                                         04080000
  [8/4,8/3],   << 50--WRITE TO ENABLE XMIT BUF NOT FULL SRQ >> <<01668>>04085000
  1,                                                                    04090000
  1,                                                                    04095000
  [1/1,1/0,1/1,3/1,10/0],                                               04100000
               << 53--  LEFT BYTE, NO UPDATE                      >>    04105000
  0,           << 54--..BUFFER ADDRESS                            >>    04110000
  [8/0,8/0],   << 55--JUMP TO WRITE DC1 >>                     <<02861>>04115000
  -23,                                                         <<02861>>04120000
<<--SYNSTRT-->>                                                         04125000
  0,           << 57--WRITE 1 OR 2 BYTES: DC1 OR CR/LF            >>    04130000
  0,                                                                    04135000
  0,                                                                    04140000
  0,                                                                    04145000
  0,           << 61--**BUFFER ADDR FOR DC1 OR CR/LF              >>    04150000
  0,           << 62--FINISHED WRITING, JUMP OUT OR               >>    04155000
  0,           << 63    INTERRUPT/HALT                       >>         04160000
  [8/0,8/0],   << 64--NOT DONE, JUMP BACK TO WRITE NEXT >>     <<02861>>04165000
  -9,                                                          <<02861>>04170000
<<--WRT'RD-->>                                                          04175000
  [8/4,8/2],   << 66--WRITE INTERF CNTRL: ECHO? CD ON          >>       04180000
  1,           << 67--                                         >>       04185000
  1,           << 68--                                         >>       04190000
  [1/1,1/1,1/1,3/1,10/0],                                               04195000
               << 69--  RIGHT BYTE,NO UPDATE                   >>       04200000
  0,           << 70--..BUFFER ADDRESS                         >>       04205000
<<--XMITOFF-->>                                                         04210000
  [8/4,8/3],   << 71--WRITE TO DISABLE XMIT BUF EMPTY SRQ         >>    04215000
  1,           << 72--  BYTE COUNT=1                              >>    04220000
  1,           << 73--                                            >>    04225000
  [1/1,1/1,1/1,3/1,10/0],                                               04230000
               << 74--  RIGHT BYTE, NO UPDATE                     >>    04235000
  0,           << 75--..BUFFER ADDRESS                            >>    04240000
<<--RDWAIT-->>                                                          04245000
  [8/4,8/3],   << 76--WRITE TO ENABLE CHAR RECVD SRQ              >>    04250000
  1,                                                                    04255000
  1,                                                                    04260000
  [1/1,1/0,1/1,3/1,10/0],                                               04265000
               << 79--  LEFT BYTE, NO UPDATE                      >>    04270000
  0,           << 80--..BUFFER ADDRESS                            >>    04275000
  [8/2,8/0],   << 81--WAIT FOR CHAR RECVD SRQ                     >>    04280000
  0,                                                                    04285000
  [8/5,8/3],   << 83--DSJ; RESPONSE= 0,1,2 OR 3                   >>    04290000
  0,           << 84--  HOLDS DEV RETURNED STATUS BYTE            >>    04295000
  2,           << 85--  RESPONSE=0: READ                          >>    04300000
  11,          << 86--          =1: WRITE OR DEFAULT              >>    04305000
  13,          << 87--          =2: READ DEV STATUS               >>    04310000
  9,           << 88--          =3: NO PENDING CSRQ,BACK TO WAIT  >>    04315000
  [8/1,1/1,7/0],<< 89--INTERRUPT/HALT, INFO TO CPVA3              >>    04320000
  2,           << 90--   2: ERROR IN DEV RETURNED BYTE            >>    04325000
<<--RDDATAINSTR-->>                                                     04330000
  0,           << 91--RESPONSE=0, READ DATA                       >>    04335000
  0,                                                                    04340000
  0,           << 93--  TERMINATION JUMP TO INTERRUPT/HALT        >>    04345000
  0,                                                                    04350000
  0,           << 95--**BUFFER ADDRESS                            >>    04355000
  [8/1,1/1,7/2],<<96--SPECIAL CHAR DETECTED, INTERRUPT/HALT         >>  04360000
  0,           << 97--  HALT FOR SPECL CHAR DETECTED              >>    04365000
  [8/0,8/0],   << 98--JUMP BACK TO WAIT FOR SRQ                   >>    04370000
  -19,         << 99--                                            >>    04375000
  [8/1,1/1,7/0],<<100--RESPONSE=1:WRITE OR DEFAULT                >>    04380000
  2,           <<101--   ERROR IN DEV RETURNED STATUS             >>    04385000
  [8/3,8/1],   <<102--RESPONSE=2: READ DEV STATUS                 >>    04390000
  1,                                                                    04395000
  [8/2,8/1],   <<104--  TERMINATION JUMP TO READ MODEM STATUS     >>    04400000
  [1/1,1/0,4/1,10/0],                                                   04405000
               <<105--  LEFT BYTE, NO UPDATE                      >>    04410000
  0,           <<106--..BUFFER ADDRESS                            >>    04415000
  [8/0,8/0],   <<107--POSSIBLE BREAK,JUMP TO READ CHAR       >>         04420000
  26,          <<108--  JUMP DISPLM FROM 109 TO 135          >>         04425000
  [8/3,8/2],   <<109--READ MODEM STATUS                      >>         04430000
  1,           <<110--                                       >>         04435000
  [8/0,8/1],   <<111--  NO TERMINATION JUMP                  >>         04440000
  [1/1,1/0,4/1,10/0],                                                   04445000
               <<112--  LEFT BYTE ,NO UPDATE                 >>         04450000
  0,           <<113--..BUFFER ADDRESS                       >>         04455000
  [8/4,8/3],   <<114--WRITE TO DISABLE RECV SRQ              >>         04460000
  1,           <<115--                                          >>      04465000
  1,           <<116--                                          >>      04470000
  [1/1,1/1,1/1,3/1,10/0],                                               04475000
               <<117--  RIGHT BYTE,NO UPDATE                 >>         04480000
  0,           <<118--..BUFFER ADDRESS                       >>         04485000
  [8/1,1/1,7/2],<<119--INTERRUPT/HALT, INFO TO CPVA2         >>         04490000
  6,           <<120--  PE,OE OR MODEM STATUS CHANGE         >>         04495000
<<--FINISEND-->>                                                        04500000
  [8/4,8/3],   <<121--WRITE TO DISABLE XSMIT SRQ                >>      04505000
  1,           <<122--                                          >>      04510000
  1,           <<123--                                          >>      04515000
  [1/1,1/1,1/1,3/1,10/0],                                               04520000
               <<124--  RIGHT BYTE,NO UPDATE                    >>      04525000
  0,           <<125--..BUFFER ADDRESS                          >>      04530000
  0,            <<126--INTERRUPT/HALT,INFO TO CPVA1             >>      04535000
  0,           <<127--  FINISHED EMPTYING TBUF                  >>      04540000
<<--RDEXIT-->>                                                          04545000
  [8/4,8/3],   <<128--WRIE TO DISABLE RECV SRQ                 >>       04550000
  1,           <<129--                                          >>      04555000
  1,           <<130--                                          >>      04560000
  [1/1,1/1,1/1,3/1,10/0],                                               04565000
               <<131--  RIGHT BYTE,NO UPDATE                    >>      04570000
  0,           <<132--..BUFFER ADDRESS                          >>      04575000
  [8/1,1/1,7/1],<<133--INTERRUPT/HALT,INFO TO CPVA1             >>      04580000
  2,           <<134--  FINISHED FILLING TBUF                   >>      04585000
<<--RDBRK-->>                                                           04590000
  [8/3,8/0],   <<135--READ DATA (POSSIBLE BREAK)                >>      04595000
  1,           <<136--                                          >>      04600000
  [8/0,8/1],   <<137--                                          >>      04605000
  [1/1,1/1,4/1,10/0],                                                   04610000
               <<138--  RIGHT BYTE,NO UPDATE                    >>      04615000
  0,           <<139--..BUFFER ADDRESS                          >>      04620000
  [8/4,8/3],   <<140--WRITE TO DISABLE RECV SRQ                 >>      04625000
  1,           <<141--                                          >>      04630000
  1,           <<142--                                          >>      04635000
  [1/1,1/1,1/1,3/1,10/0],                                               04640000
               <<143--  RIGHT BYTE,NO UPDATE                    >>      04645000
  0,           <<144--..BUFFER ADDRESS                          >>      04650000
  [8/1,1/1,7/2],<<145--INTERRUPT/HALT                           >>      04655000
  4,           <<146--  POSSIBLE BREAK DETECTED                 >>      04660000
<<--RDINTRPT-->>                                                        04665000
  [8/4,8/3],   <<147--WRITE TO DISABLE RECV SRQ                 >>      04670000
  1,           <<148--                                          >>      04675000
  1,           <<149--                                          >>      04680000
  [1/1,1/1,1/1,3/1,10/0],                                               04685000
               <<150--  RIGHT BYTE,NO UPDATE                    >>      04690000
  0,           <<151--..BUFFER ADDRESS                          >>      04695000
  [8/1,1/1,7/2],<<152--INTERRUPT/HALT,INFO TO CPVA2             >>      04700000
  0,           <<153--**INTERRUPT CAUSED BY A CHAR RECEIVED     >>      04705000
<<--MODSIOCNTRL-->>                                                     04710000
  [8/4,8/2],   <<154--WRITE INTERF CNTRL: MODEM CNTRL LINES     >>      04715000
  1,           <<155--                                          >>      04720000
  1,           <<156--                                          >>      04725000
  [1/1,1/1,1/1,3/1,10/0],                                               04730000
               <<157--  RIGHT BYTE,NO UPDATE                    >>      04735000
  0,           <<158--..BUFFER ADDRESS                          >>      04740000
  [8/4,8/7],   <<159--WRITE OUT MODEM STATUS MASK               >>      04745000
  1,           <<160--                                          >>      04750000
  1,           <<161--                                          >>      04755000
  [1/1,1/1,1/1,3/1,10/0],                                               04760000
               <<162--  RIGHT BYTE,NO UPDATE                     >>     04765000
  0,           <<163--..BUFFER ADDRESS                          >>      04770000
  [8/4,8/7],   <<164--WRITE OUT MODEM STATUS REFERENCE          >>      04775000
  1,           <<165--                                          >>      04780000
  1,           <<166--                                          >>      04785000
  [1/1,1/0,1/1,3/1,10/0],                                               04790000
               <<167--  LEFT  BYTE,NO UPDATE                    >>      04795000
  0,           <<168--..BUFFER ADDRESS                          >>      04800000
  [8/1,1/1,7/2],<<169--INTERRUPT/HALT                           >>      04805000
  26,          <<170--  CNTRLFINI: FINISHED SENDING MODEM CONTROL >>    04810000
<<--MODSIOPTY-->>                                                       04815000
  [8/4,8/1],   <<171--WRITE UART CONTROL: WLS,SBS,PTY           >>      04820000
  1,           <<172--                                          >>      04825000
  1,           <<173--                                          >>      04830000
  [1/1,1/0,1/1,3/1,10/0],                                               04835000
               <<174--  LEFT  BYTE,NO UPDATE                    >>      04840000
  0,           <<175--..BUFFER ADDRESS                          >>      04845000
  [8/1,1/1,7/2],<<176--INTERRUPT/HALT                           >>      04850000
  20,          <<177--  CNTRLFINI: FINISHED SENDING MODEM CONTROL >>    04855000
<<--SPSENBAUD-->>                                                       04860000
  [8/4,8/1],    <<178--WRITE UART CONTROL: WLS,SBS,PE             >>    04865000
  1,                                                                    04870000
  1,                                                                    04875000
  [1/1,1/0,1/1,3/1,10/0],                                               04880000
                <<181--  LEFT BYTE, NO UPDATE                     >>    04885000
  0,            <<182--..BUFFER ADDRESS                           >>    04890000
  [8/4,8/6],    <<183--WRITE TO SET RECV BAUDRATE CODE            >>    04895000
  1,                                                                    04900000
  1,                                                                    04905000
  [1/1,1/1,1/1,3/1,10/0],                                               04910000
                <<186--  RIGHT BYTE, NO UPDATE                    >>    04915000
  0,            <<187--..BUFFER ADDRESS                           >>    04920000
  [8/0,8/0],    <<188--JMP TO DISABLE XMIT BUF EMPTY SRQ          >>    04925000
  0,            <<189--  TO 66 OR 71:INTERF CNTRL,DISABLE XMIT SRQ>>    04930000
<<--WRTSPD-->>                                                          04935000
  [8/4,8/6],    <<190--WRITE OUT SEND BAUDRATE                    >>    04940000
  1,            <<191-- >>                                     <<02064>>04945000
                                                               <<02064>>04950000
  1,            <<192--                                           >>    04955000
  [1/1,1/0,1/1,3/1,10/0],                                               04960000
                <<193--  LEFT BYTE,NO UPDATE                      >>    04965000
  0,            <<194--..BUFFER ADDRESS                           >>    04970000
  [8/4,8/6],    <<195--WRITE OUT RECEIVE BAUDRATE                 >>    04975000
  1,            <<196--                                           >>    04980000
  1,            <<197--                                           >>    04985000
  [1/1,1/1,1/1,3/1,10/0],                                               04990000
                <<198--  RIGHT BYTE,NO UPDATE                     >>    04995000
  0,            <<199--..BUFFER ADDRESS                           >>    05000000
  [8/0,8/0],    <<200--JUMP TO SET START BITS  >>              <<01994>>05005000
  -31,          <<201--                        >>              <<01994>>05010000
<<--WRTINTRPT-->>                                                       05015000
  [8/4,8/3],    <<202--WRITE TO DISABLE RECV SRQ                  >>    05020000
  1,            <<203--                                           >>    05025000
  1,            <<204--                                           >>    05030000
  [1/1,1/1,1/1,3/1,10/0],                                               05035000
                <<205--  RIGHT BYTE,NO UPDATE                     >>    05040000
  0,            <<206--..BUFFER ADDRESS                           >>    05045000
  [8/1,1/1,7/2],<<207--INTERRUPT/HALT,INFO TO CPVA2               >>    05050000
  3,            <<208--  SPECIAL CHAR RECEIVED DURING WRITE       >>    05055000
<<--SRQOFF-->>                                                          05060000
  [8/4,8/3],    <<209--WRITE TO DISABLE RECV SRQ                  >>    05065000
  1,            <<210--                                           >>    05070000
  1,            <<211--                                           >>    05075000
  [1/1,1/1,1/1,3/1,10/0],                                               05080000
                <<212--  RIGHT BYTE                               >>    05085000
  0,            <<213--..BUFFER ADDRESS                           >>    05090000
  [8/4,8/3],    <<214--WRITE TO DISABLE SEND SRQ                  >>    05095000
  1,            <<215                                             >>    05100000
  1,            <<216                                             >>    05105000
  [1/1,1/1,1/1,3/1,10/0],                                               05110000
                <<217--  RIGHT BYTE                               >>    05115000
  0,            <<218--..BUFFER ADDRESS                           >>    05120000
  [8/0,8/0],    <<219--JMP TO 81:WAIT FOR MODEM STATUS CHANGE     >>    05125000
  -140,         <<220                                             >>    05130000
<<--NXTBLKRD-->>                                                        05135000
  [8/1,8/3],    <<221--INTERRUPT/NO HALT                          >>    05140000
  1,            <<222--  START READ BY 2ND SIO PROG               >>    05145000
<<--BLOCKWAIT-->>                                                       05150000
  [8/2,8/0],    <<223--WAIT FOR SRQ                               >>    05155000
  0,            <<224                                             >>    05160000
  [8/5,8/3],    <<225--DSJ                                        >>    05165000
  0,            <<226--  HOLDS DEV RETURNED BYTE                  >>    05170000
  2,            <<227--  0:READ DATA                              >>    05175000
  -131,         <<228--  1:WRITE SRQ,JUMP TO 100                  >>    05180000
  -129,         <<229--  2:READ DEV STATUS,JUMP TO 102            >>    05185000
  -8,           <<230--  3:NO CSRQ,BACK TO WAIT                   >>    05190000
  [8/1,1/1,7/0],<<231--INTERRUPT/HALT                             >>    05195000
  2,            <<232--  ERROR IN DEV RETURNED BYTE               >>    05200000
<<--BLOCKMODRD-->>                                                      05205000
  [8/3,8/0],    <<233--READ DATA                                  >>    05210000
  0,            <<234                                             >>    05215000
  0,            <<235                                             >>    05220000
  0,            <<236                                             >>    05225000
  0,            <<237--**BUFFER ADDRESS                           >>    05230000
  [8/1,1/1,7/2],<<238--SPECIAL CHAR DETECTED,INTERRUPT/HALT       >>    05235000
  2,            <<239                                             >>    05240000
  [8/0,8/0],    <<240--JUMP BACK TO 223:WAIT SRQ                  >>    05245000
  -19,          <<241                                             >>    05250000
  [8/1,8/3],    <<242--INTERRUPT/NO HALT                             >> 05255000
  2,            <<243                                             >>    05260000
  [8/0,8/0],    <<244--JUMP TO 81:WAIT FOR CHAR RECVD SRQ         >>    05265000
  -165,         <<245                                             >>    05270000
<<--WRT'RD2-->>                                                         05275000
  [8/4,8/2],    <<246--WRITE INTERF CNTRL:ECHO?, CD ON            >>    05280000
  1,            <<247--                                           >>    05285000
  1,            <<248--                                           >>    05290000
  [1/1,1/1,1/1,3/1,10/0],                                               05295000
                <<249--                                           >>    05300000
  0,            <<250--..BUFFER ADDRESS                           >>    05305000
<<--WAIT2SIO-->>                                                        05310000
  [8/4,8/3],    <<251--WRITE TO ENABLE RECV SRQ                   >>    05315000
  1,            <<252                                             >>    05320000
  1,            <<253                                             >>    05325000
  [1/1,1/0,1/1,3/1,10/0],                                               05330000
                <<254--  LEFT BYTE,NO UPDATE                      >>    05335000
  0,            <<255--..BUFFER ADDRESS                           >>    05340000
  [8/0,8/0],    <<256--JUMP TO 223:WAIT SRQ                       >>    05345000
  -35,          <<257                                             >>    05350000
<<--NEWSPECCHAR-->>                                            <<02864>>05355000
  0,            <<258--SET OR CLEAR SPECIAL CHARS           >> <<02864>>05360000
  0,            <<259--                                     >> <<02864>>05365000
  0,            <<260--                                     >> <<02864>>05370000
  0,            <<261--                                     >> <<02864>>05375000
  0,            <<262--                                     >> <<02864>>05380000
  0,            <<263--JUMP TO READ OR INTERRUPT HALT       >> <<02864>>05385000
  0,            <<264--                                     >> <<02864>>05390000
  [8/0, 8/0],   <<265--JUMP TO CONTINUE SET/CLEAR           >> <<02864>>05395000
  -9,           <<266--                                     >> <<02864>>05400000
                                                                        05405000
                                                                        05410000
                                                                        05415000
<<******************************************************************    05420000
  ******************************************************************    05425000
  *******         END OF CHANNEL PROGRAM AREA                *******    05430000
  ******************************************************************    05435000
  ******************************************************************    05440000
>>                                                                      05445000
      213,   <<SIO PROG SIZE>>                                 <<02064>>05450000
      [8/4,8/1],1,1,[1/1,1/0,1/1,3/1,10/0],0,                  <<00690>>05455000
      <<WRITE UART CNTRL BYTE>>                                <<00690>>05460000
      [8/4,8/7],1,1,[1/1,1/1,1/1,3/1,10/0],0,                  <<00690>>05465000
      <<5--WRITE OUT MASK TO DISABLE MODEM CSRQ>>              <<00690>>05470000
      [8/4,8/3],1,1,[1/1,1/1,1/1,3/1,10/0],0,                  <<00690>>05475000
      <<WRITE TO ENABLE XMIT BUF NOT FULL SRQ>>                <<00690>>05480000
      [8/4,8/4],256,1,[1/1,1/0,1/1,13/0],0,                    <<00690>>05485000
      <<WRT OUT ALL 256 CHARS TO CLR SPECL CHAR LOGIC>>        <<00690>>05490000
      0,4,                                                     <<00690>>05495000
      <<ALL DONE,JUMP TO SET SPECL CHARS>>                     <<00690>>05500000
      [8/2,8/0],0,                                             <<00690>>05505000
      <<WAIT FOR WRITE SRQ>>                                   <<00690>>05510000
      0,-11,                <<JUMP BACK TO WRITE CHAR>>        <<00690>>05515000
      [8/4,8/5], 0,1,[1/1,1/0,1/1,13/0],0,                     <<00690>>05520000
      <<WRITE TO SET SPECL CHAR DETECTION LOGIC>>              <<00690>>05525000
      0,2,                  <<31--FINISHED WRITING SPECL CHAR>><<00690>>05530000
      0,-9,                 <<33--CONTINUE SEND SPECL CHARS>>  <<00690>>05535000
      [8/4,8/6],1,1,[1/1,1/0,1/1,3/1,10/0],0,                  <<00690>>05540000
      <<35--WRITE OUT SEND BAUDRATE>>                          <<00690>>05545000
      [8/4,8/6],1,1,[1/1,1/1,1/1,3/1,10/0],0,                  <<00690>>05550000
      <<40--WRITE OUT RECEIVE BAUDRATE>>                       <<00690>>05555000
      [8/4,8/3],1,1,[1/1,1/0,1/1,3/1,10/0],0,                  <<00690>>05560000
      <<45--WRITE TO DISABLE BUFFER EMPTY SRQ>>                <<00690>>05565000
      [8/0,8/0],0,                                             <<00690>>05570000
      <<50--JMP TO SKIP MODEM CNTRL IF NECESSARY>>             <<00690>>05575000
      [8/4,8/2],1,1,[1/1,1/1,1/1,3/1,10/0],0,                  <<00690>>05580000
      <<52--WRITE INTERFACE MODEM CONTROL>>                    <<00690>>05585000
      [8/4,8/7],1,1,[1/1,1/0,1/1,3/1,10/0],0,                  <<00690>>05590000
      <<57--WRITE MODEM STATUS REFERENCE>>                     <<00690>>05595000
      [8/4,8/7],1,1,[1/1,1/1,1/1,3/1,10/0],0,                  <<00690>>05600000
      <<62--WRITE MODEM STATUS MASK >>                         <<00690>>05605000
      [8/2,8/0],0,          <<67--IDLE WAIT      >>            <<00690>>05610000
                                                               <<00690>>05615000
      0,-4,                                                    <<00690>>05620000
      -1,                   <<71-------END OF SIO PROG>>       <<00690>>05625000
      %114404,              <<72--UART CNTRL BYTE;SRQ ON BYTE>><<00690>>05630000
      %40,                  <<73--XMIT SRQ OFF;MODEM MASK>>    <<00690>>05635000
      %410,                 <<74--CONTROL A; CONTROL H     >>  <<00690>>05640000
      %6406,                <<75--CR; ACK                  >>  <<00690>>05645000
      %10430,               <<76--XON   ; CONTROL X        >>  <<00690>>05650000
      %14433,               <<77--CONTROL Y ; ESC          >>  <<00690>>05655000
      %11023,               <<78--DC2; XOFF                >>  <<00690>>05660000
      %5001,                <<79--LF, CONTROL A              >><<00690>>05665000
      %35073,               <<80--SEMI-COLON AND COLON       >><<02064>>05670000
      0,                    <<81--DSTOP: EOR,SUBSYS BRK CHARS>><<02064>>05675000
      %20,                  <<82--SEND BAUDRATE;RECV BAUDRATE>><<02064>>05680000
      %7,                   <<83--0;MODEM CNTRL:ECHO,CD,CH,SA>><<02064>>05685000
      %50,                  <<84--MODEM REFERENCE; MODEM MASK>><<02064>>05690000
      128(0);               <<85--BUFFER TO HOLD 256 CHARS   >><<02064>>05695000
                                                                        05700000
PROCEDURE ABORTJOB(UMAINPIN);                                  <<01465>>05705000
  VALUE UMAINPIN; INTEGER UMAINPIN;                            <<01465>>05710000
  OPTION EXTERNAL;                                             <<01465>>05715000
                                                               <<01465>>05720000
PROCEDURE ADDTAIL(DITP,LINKINDEX,QUEUENUMBER);                          05725000
  VALUE LINKINDEX, QUEUENUMBER;   INTEGER LINKINDEX, QUEUENUMBER;       05730000
  ARRAY DITP;   OPTION EXTERNAL;                                        05735000
                                                                        05740000
DOUBLE PROCEDURE ATTACHIO(LDEV,QMISC,DSTX,ADDR,FNCT,CNT,P1,P2,FLAGS);   05745000
  VALUE LDEV,QMISC,DSTX,ADDR,FNCT,CNT,P1,P2,FLAGS;                      05750000
  INTEGER LDEV,QMISC,DSTX,ADDR,FNCT,CNT,P1,P2,FLAGS;                    05755000
  OPTION EXTERNAL;                                                      05760000
                                                                        05765000
PROCEDURE AWAKE(PCBPT, N, WAITF);                                       05770000
  VALUE PCBPT, N, WAITF;                                                05775000
  INTEGER PCBPT, N, WAITF;                                              05780000
  OPTION EXTERNAL;                                                      05785000
                                                                        05790000
PROCEDURE BREAKJOB(LDEV, PIN );                                         05795000
  VALUE LDEV, PIN;  INTEGER LDEV, PIN;                                  05800000
  OPTION EXTERNAL;                                                      05805000
                                                                        05810000
PROCEDURE BREAKSS(LDEV, PINS );                                         05815000
  VALUE LDEV, PINS;  INTEGER LDEV, PINS;                                05820000
  OPTION EXTERNAL;                                                      05825000
                                                                        05830000
PROCEDURE CHECKTQUEUE(DITP);                                            05835000
  ARRAY DITP;   OPTION EXTERNAL;                                        05840000
                                                                        05845000
PROCEDURE DELAY(TIME);                                                  05850000
  VALUE TIME;  DOUBLE TIME;                                             05855000
  OPTION EXTERNAL;                                                      05860000
                                                                        05865000
PROCEDURE EOFCHECK(IOQP,BUFADDR,COUNT,HARDEOF);                         05870000
  VALUE BUFADDR,COUNT,HARDEOF;  DOUBLE BUFADDR;                         05875000
  ARRAY IOQP;  INTEGER COUNT,HARDEOF;                                   05880000
  OPTION EXTERNAL;                                                      05885000
                                                                        05890000
PROCEDURE DMONITOR(DITP,ID,P1,P2);                                      05895000
  VALUE ID, P1, P2;  INTEGER ID, P1,P2;                                 05900000
  INTEGER ARRAY DITP;  OPTION EXTERNAL;                                 05905000
                                                                        05910000
                                                                        05915000
PROCEDURE  MODCONTROL( CONTROL, DITP );                                 05920000
  VALUE CONTROL, DITP;  INTEGER CONTROL;                                05925000
  INTEGER POINTER DITP;                                                 05930000
  OPTION EXTERNAL;                                                      05935000
                                                                        05940000
INTEGER PROCEDURE EXCHANGEDB(DSTNUMBER);                                05945000
  VALUE DSTNUMBER;  INTEGER DSTNUMBER;                                  05950000
  OPTION EXTERNAL;                                                      05955000
                                                                        05960000
INTEGER PROCEDURE GETIOQ(TYPE);                                         05965000
  VALUE TYPE;  INTEGER TYPE;                                            05970000
  OPTION EXTERNAL;                                                      05975000
                                                                        05980000
INTEGER PROCEDURE GETTBUF(FLAG);                                        05985000
  VALUE FLAG;  INTEGER FLAG;                                            05990000
  OPTION EXTERNAL;                                                      05995000
                                                                        06000000
INTEGER PROCEDURE GETSBUF(FLAG);                                        06005000
  VALUE FLAG;  INTEGER FLAG;                                            06010000
  OPTION EXTERNAL;                                                      06015000
                                                                        06020000
Logical Procedure Getsir (Sir);                                <<01465>>06025000
Value Sir;                                                     <<01465>>06030000
Integer Sir;                                                   <<01465>>06035000
OPTION EXTERNAL;                                               <<01465>>06040000
                                                               <<01465>>06045000
PROCEDURE HELP;  OPTION EXTERNAL;                                       06050000
                                                                        06055000
PROCEDURE IDLEWAIT (DITP);                                              06060000
  ARRAY DITP;                                                           06065000
  OPTION EXTERNAL;                                                      06070000
                                                                        06075000
                                                                        06080000
DOUBLE PROCEDURE IOSTATUS(IOQX);                                        06085000
  VALUE IOQX;  INTEGER IOQX;                                            06090000
  OPTION EXTERNAL;                                                      06095000
                                                                        06100000
PROCEDURE INITCHANNEL(DITP);                                            06105000
  INTEGER ARRAY DITP;  OPTION EXTERNAL;                                 06110000
                                                                        06115000
LOGICAL PROCEDURE IOMESSAGE(SETNO,MSGNO,MASK,P1,P2,P3,P4,P5,   <<01464>>06120000
  DEST,REPLY,OFFSET,DITP,IOTYPE);                              <<01464>>06125000
VALUE SETNO,MSGNO,MASK,P1,P2,P3,P4,P5,DEST,REPLY,OFFSET,DITP,  <<01464>>06130000
  IOTYPE;                                                      <<01464>>06135000
INTEGER SETNO,MSGNO,MASK,P1,P2,P3,P4,P5,DEST,REPLY,OFFSET,     <<01464>>06140000
  IOTYPE;                                                      <<01464>>06145000
INTEGER POINTER DITP;                                          <<01464>>06150000
OPTION VARIABLE,EXTERNAL;                                      <<01464>>06155000
                                                               <<01464>>06160000
                                                               <<04869>>06165000
INTEGER PROCEDURE LDEVTOTYPE(LDEV);                            <<04869>>06170000
   VALUE LDEV;                                                 <<04869>>06175000
   INTEGER LDEV;                                               <<04869>>06180000
   OPTION EXTERNAL;                                            <<04869>>06185000
                                                               <<04869>>06190000
                                                               <<04869>>06195000
PROCEDURE LOGERROR(DITP,IOQP,DEVSTAT);                                  06200000
  VALUE DEVSTAT;  ARRAY DITP,IOQP;                                      06205000
  INTEGER DEVSTAT;    OPTION EXTERNAL;                                  06210000
                                                                        06215000
Procedure Relsir (Sir,Sirstat);                                <<01465>>06220000
Value Sir,Sirstat;                                             <<01465>>06225000
Integer Sir;                                                   <<01465>>06230000
Logical Sirstat;                                               <<01465>>06235000
OPTION EXTERNAL;                                               <<01465>>06240000
                                                               <<01465>>06245000
PROCEDURE RESETDB(OLDDB);                                               06250000
  VALUE OLDDB;  INTEGER OLDDB;                                          06255000
  OPTION EXTERNAL;                                                      06260000
                                                                        06265000
PROCEDURE RETURNSYSBUF(INDEX);                                          06270000
  VALUE INDEX;  INTEGER INDEX;                                          06275000
  OPTION EXTERNAL;                                                      06280000
                                                                        06285000
PROCEDURE RETURNTBUF(TBUFP);                                            06290000
  VALUE TBUFP;  INTEGER TBUFP;                                          06295000
  OPTION EXTERNAL;                                                      06300000
                                                                        06305000
PROCEDURE RETURNIOQ(IOQP);                                              06310000
  VALUE IOQP;  INTEGER IOQP;                                            06315000
  OPTION EXTERNAL;                                                      06320000
                                                                        06325000
PROCEDURE SENDSYNC(NEWDSTATE,DITP);                                     06330000
  VALUE NEWDSTATE;  INTEGER NEWDSTATE;                                  06335000
  ARRAY DITP;   OPTION EXTERNAL;                                        06340000
                                                                        06345000
PROCEDURE SENDCRLF(INTRPTCODE,DITP);                                    06350000
  VALUE INTRPTCODE;  INTEGER INTRPTCODE;                                06355000
  ARRAY DITP;                                                           06360000
  OPTION EXTERNAL;                                                      06365000
                                                                        06370000
PROCEDURE SET'PSIF(PCBPT,FLAG);                                         06375000
  VALUE PCBPT, FLAG;  INTEGER PCBPT, FLAG;                              06380000
  OPTION EXTERNAL;                                                      06385000
                                                                        06390000
PROCEDURE SETREADERROR(IOQP,ENUMB);                                     06395000
  VALUE ENUMB;  INTEGER ENUMB;                                          06400000
  ARRAY IOQP;   OPTION EXTERNAL;                                        06405000
                                                                        06410000
INTEGER PROCEDURE SETSYSDB;  OPTION EXTERNAL;                           06415000
                                                                        06420000
PROCEDURE SETTERMTYPE(TYPE,ISPD,OSPD,DITP);                             06425000
  VALUE    TYPE, ISPD,OSPD;                                             06430000
  INTEGER  TYPE, ISPD,OSPD;                                             06435000
  ARRAY DITP;   OPTION EXTERNAL;                                        06440000
                                                                        06445000
PROCEDURE STARTTIMEOUT(TYPE,DITP);                                      06450000
  VALUE TYPE;   INTEGER TYPE;                                           06455000
  ARRAY DITP;   OPTION EXTERNAL;                                        06460000
                                                                        06465000
PROCEDURE STATREQUEST(DITP);                                   <<01464>>06470000
  INTEGER ARRAY DITP;                                          <<01464>>06475000
  OPTION EXTERNAL;                                             <<01464>>06480000
                                                               <<01464>>06485000
PROCEDURE STOPTIMEOUT(TYPE,DITP);                                       06490000
  VALUE TYPE;    INTEGER TYPE;                                          06495000
  ARRAY DITP;    OPTION EXTERNAL;                                       06500000
                                                                        06505000
                                                                        06510000
DOUBLE PROCEDURE TIMER;                                                 06515000
OPTION EXTERNAL;                                                        06520000
                                                                        06525000
PROCEDURE SUDDENDEATH(N);                                               06530000
  VALUE N;  INTEGER N;                                                  06535000
  OPTION EXTERNAL;                                                      06540000
                                                                        06545000
PROCEDURE TERMINIT(DITP);                                               06550000
  INTEGER ARRAY DITP;                                                   06555000
  OPTION EXTERNAL;                                                      06560000
                                                                        06565000
PROCEDURE TIP;   OPTION EXTERNAL;                                       06570000
$PAGE                                                          <<00.05>>06575000
                                                                        06580000
DOUBLE PROCEDURE DATA'ADR(IOQP);                                        06585000
  INTEGER ARRAY IOQP;                                                   06590000
  <<                                                                    06595000
    THIS PROCEDURE MAKES THE DATA SEGMENT REFERENCED IN THE IOQ         06600000
    PRESENT AND RETURNS THE DST NUMBER AND OFFSET TO THE TARGET         06605000
    IT MUST BE CALLED WITH ONE LEVEL OF PSEUDO DISABLE IN EFFECT        06610000
    IF THE DST IN NOT CORE RESIDENT.                                    06615000
  >>                                                                    06620000
  BEGIN                                                                 06625000
    INTEGER DSTN, OFFSET := 0;                                          06630000
    X := IOQP(QDSTN)&LSL(2);  << DST # TIMES 4 >>                       06635000
    DSTN := X&LSR(2);   << STRIP OFF DB RELATIVE BIT >>                 06640000
    WHILE DST(X)<0 DO  << ABSENT, SO MAKE PRESENT >>                    06645000
      BEGIN  << DUMY MOVE TO MAKE PRESENT >>                            06650000
        PENABLE;                                                        06655000
        TOS := DSTN;                                                    06660000
        ASMB(ZERO,DDUP);                                                06665000
        TOS := 1;    ASMB( MDS );                                       06670000
        PDISABLE;                                                       06675000
      END;                                                              06680000
    IF IOQP(QDSTN)<0 THEN  << STACK, ADD DB OFFSET TO ADDR >>           06685000
      BEGIN                                                             06690000
        TOS := DSTD(DSTN*2+1);    << BANK AND OFFSET >>                 06695000
        TOS := TOS + 1;   << ADDR OF DB OFFSET >>                       06700000
        LOADMEMORY;       << DB TO DL OFFSET   >>                       06705000
        OFFSET := TOS;                                                  06710000
      END;                                                              06715000
    TOS := DSTN;                                                        06720000
    TOS := IOQP(QADDR) + OFFSET;                                        06725000
    DATA'ADR := TOS;                                                    06730000
  END;   << DATA  ADR >>                                                06735000
PROCEDURE ADCCINIT(DITP);                                               06740000
INTEGER ARRAY DITP;                                                     06745000
OPTION PRIVILEGED, UNCALLABLE;                                          06750000
BEGIN                                                                   06755000
   INTEGER TEMP, ADDR, DRT, SPECLCNT ;                                  06760000
   DOUBLE STARTTIME;                                                    06765000
   LOGICAL NOTEND, SIOACTIVE ;                                          06770000
   TEMP:=WA0(%347);        <<SIO PROG STARTING LOCATION>>      <<00690>>06775000
   ADDR:=SYSDB + TEMP;                                         <<00690>>06780000
   SPECLCNT := 14;                                             <<02064>>06785000
   DRT:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                              06790000
                                                                        06795000
   IF NOT LOGICAL(DITP.UP) THEN                                         06800000
 BEGIN                                                                  06805000
   DITP(DSPEED).OUTSPEED:=DITP(DLAST).TERMSPEED;                        06810000
   DITP(DSPEED).INSPEED :=DITP(DSPEED).OUTSPEED;                        06815000
   DITP(DTYPE).TTYPE:=DITP(DLAST).TERMINALTYPE;                         06820000
   TOS:=LPDTD(DITP(DLDEV).LDEVN);                                       06825000
  << SUBTYPES 14 & 15 ARE USED FOR S.T. 0 & 1 IF TYPE = 32 >>  <<01464>>06830000
  IF S0.(12:4) > 13 THEN TOS := TOS-14;                        <<01464>>06835000
   DITP(DMODEM).MTYPE:=TOS;                                             06840000
   WA0(TEMP+82):=%3427; <<SET SEND,RECV BAUDRATE=2400 BAUD>>   <<02064>>06845000
 END                                                           <<00690>>06850000
    ELSE                                                       <<00690>>06855000
 BEGIN                                                         <<00690>>06860000
   WA0(TEMP+82).(0:8):=DITP(DSPEED).OUTSPEED;                  <<02064>>06865000
   WA0(TEMP+82).(12:4):=DITP(DSPEED).INSPEED;                  <<02064>>06870000
   IF DITP(DSTOP)<>0 THEN                                      <<00690>>06875000
   BEGIN                                                       <<00690>>06880000
      SPECLCNT:=16;                                            <<02064>>06885000
      WA0(TEMP+81):=DITP(DSTOP);                               <<02064>>06890000
   END;                                                        <<00690>>06895000
 END;                                                          <<00690>>06900000
   TOS := IF LOGICAL(DITP.PTYCHK) THEN %110004 ELSE %114404;   <<02051>>06905000
   IF LOGICAL(DITP.PTYCHK) AND NOT LOGICAL(DITP(DCNTRL).ODDPTY)<<02051>>06910000
      THEN TOS.EPE := 1;                                       <<02051>>06915000
   IF DITP(DSPEED).OUTSPEED = %17 THEN TOS.SBS := 1;           <<02051>>06920000
   WA0(TEMP+72) := TOS;                                        <<02051>>06925000
   WA0(TEMP+4):=WA0(TEMP+14):=ADDR+72;                         <<00690>>06930000
   WA0(TEMP+9):=WA0(TEMP+49):=ADDR+73;                         <<00690>>06935000
   WA0(TEMP+30):=ADDR+74;                                      <<00690>>06940000
   WA0(TEMP+16):=256; <<REGENERATE NO. OF CHARS TO CLEAR>>     <<00690>>06945000
   WA0(X:=X+2):=[1/1,1/0,1/1,13/0];                            <<00690>>06950000
   WA0(X:=X+1):=ADDR + 85;                                     <<02064>>06955000
   WA0(TEMP+27):=SPECLCNT;<<******VARIABLE NUMBER********>>    <<00690>>06960000
   WA0(X:=X+2):=[1/1,1/0,1/1,13/0];                            <<00690>>06965000
   WA0(TEMP+39):=WA0(TEMP+44):=ADDR+82; <<SEND RECV BAUDRATE>> <<02064>>06970000
   WA0(TEMP+51):=15; <<NOT MODEM,SKIP MODEM CONTROL>>          <<01046>>06975000
   X:=DITP(DMODEM).MTYPE;                                      <<00690>>06980000
   IF <> THEN                                                  <<00690>>06985000
   BEGIN     <<ON A MODEM>>                                    <<00690>>06990000
      IF LOGICAL(DITP(DMODEM)&CSL(M202)) THEN                  <<01046>>06995000
      BEGIN                                                    <<01046>>07000000
         WA0(TEMP+51):=0; <<DO NOT SKIP MODEM CONTROL>>        <<01046>>07005000
         WA0(X:=X+1):=[8/4,8/2]; <<WRITE MODEM CONTROL>>       <<01046>>07010000
         WA0(X:=X+1):=1;                                       <<01046>>07015000
         WA0(X:=X+1):=1;                                       <<01046>>07020000
         WA0(X:=X+1):=[1/1,1/1,1/1,3/1,10/0];                  <<01046>>07025000
         WA0(X:=X+1):=ADDR+83;                                 <<02064>>07030000
         WA0(X:=X+1):=[8/4,8/7]; <<WRITE MODEM REFERENCE>>     <<01046>>07035000
         WA0(X:=X+1):=1;                                       <<01046>>07040000
         WA0(X:=X+1):=1;                                       <<01046>>07045000
         WA0(X:=X+1):=[1/1,1/0,1/1,3/1,10/0];                  <<01046>>07050000
         WA0(X:=X+1):=ADDR+84;                                 <<02064>>07055000
         WA0(X:=X+1):=[8/4,8/7];                               <<01046>>07060000
         WA0(X:=X+1):=1;                                       <<01046>>07065000
         WA0(X:=X+1):=1;                                       <<01046>>07070000
         WA0(X:=X+1):=[1/1,1/1,1/1,3/1,10/0];                  <<01046>>07075000
         WA0(X:=X+1):=ADDR+84;                                 <<02064>>07080000
         IF DITP(DMODEM).MTYPE=3 THEN                          <<01046>>07085000
            WA0(TEMP+83).MODCH:=0;   <<2002 MODEM>>            <<02064>>07090000
      END                                                      <<01046>>07095000
         ELSE                                                  <<01046>>07100000
         IF DITP(DMODEM).MTYPE=1 OR DITP(DMODEM).MTYPE=5 THEN  <<01534>>07105000
         BEGIN                                                 <<01046>>07110000
            WA0(TEMP+51):=0;                                   <<01046>>07115000
            WA0(X:=X+1):=[8/3,8/2];                            <<01046>>07120000
            WA0(X:=X+1):=1;  <<READ MODEM SIGNALS>>            <<01046>>07125000
            WA0(X:=X+1):=[8/0,8/1];                            <<01046>>07130000
            WA0(X:=X+1):=[1/1,1/0,4/1,10/0];                   <<01046>>07135000
            WA0(X:=X+1):=ADDR+83;                              <<02064>>07140000
            WA0(X:=X+1):=0;  <<JUMP TO IDLE WAIT>>             <<01046>>07145000
            WA0(X:=X+1):=8;                                    <<01046>>07150000
         END;                                                           07155000
   END;                                                                 07160000
   X:=ADDR + 84;                                               <<02064>>07165000
   TOS:=1;                                                     <<00690>>07170000
   WHILE LS0 < %177377 DO  <<TEST IF BYTES 254,255 THERE>>     <<00690>>07175000
   BEGIN                                                       <<00690>>07180000
      ABS(X:=X+1):=S0;                                         <<00690>>07185000
      TOS:=TOS + %1002;    <<GET NEXT 2 HIGHER BYTES>>         <<00690>>07190000
   END;                                                        <<00690>>07195000
   ABS(X:=X+1):= TOS;      <<GET LAST 2 BYTES: 254,255>>       <<00690>>07200000
   DISABLE;                                                    <<00690>>07205000
   TOS:=DRT;                                                   <<00690>>07210000
   X:=ABS(S0*4+3).IDLESIO;                                     <<00690>>07215000
   IF <> THEN SUDDENDEATH(211); << HARDWARE PROBLEM >>         <<02003>>07220000
   TOS:=ADDR;                                                  <<00690>>07225000
   STARTSIO;                                                   <<00690>>07230000
   NOTEND:=TRUE;                                               <<00690>>07235000
   STARTTIME:=TIMER;                                           <<00690>>07240000
   TOS:=0D;                                                    <<00690>>07245000
   WHILE TOS<1500 AND NOTEND DO                                <<00690>>07250000
   BEGIN                                                       <<00690>>07255000
      DEL;                                                     <<00690>>07260000
      IF ABS(DRT*4)-ADDR >= 67 THEN NOTEND:=FALSE;             <<00690>>07265000
      TOS:=TIMER-STARTTIME;                                             07270000
   END;                                                                 07275000
   DEL;                                                                 07280000
                                                                        07285000
   IF NOTEND THEN BEGIN   <<ADCC NOT IN SYSTEM>>               <<00479>>07290000
                  ABS(DRT*4+3):=0;                             <<00479>>07295000
                  RETURN;                                      <<00479>>07300000
                  END;                                         <<00479>>07305000
                                                                        07310000
   TOS:=DRT;                                                            07315000
   STOPSIO;                                                             07320000
                                                                        07325000
   SPECLCNT:=WA0(TEMP+83);  <<GET CURRENT MODEM SIGNALS>>      <<02064>>07330000
                                                                        07335000
   TEMP:=WA0(DITP(DILTP)+ISIOP);    <<IOTERM0 SIO PROG AREA ADDR>>      07340000
   IF NOT LOGICAL(DITP.UP) THEN                                         07345000
 BEGIN                                                                  07350000
   ADDR:=TEMP+SYSDB;                                                    07355000
   X:=TEMP+WRTBASE+4;                                                   07360000
   WA0(X):=ADDR+5;  WA0(X:=X+5):=ADDR+6; <<INT CNTRL;XMIT SRQ ON >>     07365000
   WA0(X:=X+5):=ADDR+7;            <<ADDR FOR RECV SRQ ON BYTE>>        07370000
   X:=TEMP+WRTSRQ+19;                                                   07375000
   WA0(X):=ADDR+10;                 <<ADDR FOR BOTTOMLESS DATA DUMP>>   07380000
   X:=TEMP+RDSTRT+4;                                                    07385000
   WA0(X):=ADDR+13;                <<BUFF ADDR TO SET SSBRK, EOR CHAR>> 07390000
   X:=TEMP+RECVOFF+4;                                                   07395000
   WA0(X):=ADDR+6;                 <<ENABLE XMIT SRQ BYTE>>             07400000
   X:=TEMP+WRT'RD+4;                                                    07405000
   WA0(X):=ADDR+5;                 <<INTERFACE CONTROL BYTE>>           07410000
   WA0(X:=X+5):=ADDR+6;            <<DISABLE XMIT SRQ BYTE>>            07415000
   X:=TEMP+RDWAIT+4;               <<ENABLE RECV SRQ>>                  07420000
   WA0(X):=ADDR+7;                                                      07425000
   X:=TEMP+RDDATAINSTR+15;                                              07430000
   WA0(X):=ADDR+10;                 <<ADDR FOR RECVING DEV STATUS>>     07435000
   WA0(X:=X+7):=ADDR+15;           <<MODEM STATUS>>                     07440000
   WA0(X:=X+5):=ADDR+7;            <<DISABLE RECV SRQ>>                 07445000
   X:=TEMP+FINISEND+4;                                                  07450000
   WA0(X):=ADDR+6;                 <<DISABLE XSMIT SRQ>>                07455000
   X:=TEMP+RDEXIT+4;                                                    07460000
   WA0(X):=ADDR+7;                 <<DISABLE RECV SRQ>>                 07465000
   X:=TEMP+RDBRK+4;                                                     07470000
   WA0(X):=ADDR+10;                <<BUFFER TO RECV BREAK>>             07475000
   WA0(X:=X+5):=ADDR+7;            <<DISABLE RECV SRQ>>                 07480000
   X:=TEMP+RDINTRPT+4;                                                  07485000
   WA0(X):=ADDR+7;                 <<DISABLE RECV SRQ>>                 07490000
   X:=TEMP+MODSIOCNTRL+4;                                               07495000
   WA0(X):=ADDR+14;                <<INTERFACE MODEM CONTROL>>          07500000
   WA0(X:=X+5):=ADDR+15;           <<MODEM STATUS REFERENCE>>           07505000
   WA0(X:=X+5):=ADDR+15;           <<MODEM STATUS MASK>>                07510000
   X:=TEMP+MODSIOPTY+4;                                                 07515000
   WA0(X):=ADDR+4;                 <<INTERFACE MODEM CONTROL>>          07520000
   X:=TEMP+SPSENBAUD+4;                                                 07525000
   WA0(X):=ADDR+4;                  <<UART CONTROL BYTE>>               07530000
   WA0(X:=X+5):=ADDR+8;             <<RECV BAUDRATE CODE>>              07535000
   X:=TEMP+WRTSPD+4;                <<SEND BAUDRATE BYTE ADDRESS>>      07540000
   WA0(X):=ADDR+8;                                                      07545000
   WA0(X:=X+5):=ADDR+8;             <<RECV BAUDRATE BYTE ADDRESS>>      07550000
   WA0(X:=X+7):=ADDR+7;             <<DISABLE RECV SRQ>>                07555000
   X:=TEMP+SRQOFF+4;                                                    07560000
   WA0(X):=ADDR+7;                     <<DISABLE RECV SRQ>>             07565000
   WA0(X:=X+5):=ADDR+6;                <<DISABLE XSMIT SRQ>>            07570000
   X:=TEMP+WRT'RD2+4;                                                   07575000
   WA0(X):=ADDR+5;                     <<INTERF CNTRL BYTE>>            07580000
   X:=TEMP+WAIT2SIO+4;                                                  07585000
   WA0(X):=ADDR+7;       <<ENABLE RECV SRQ>>                            07590000
   WA0(TEMP+4):=%114403;            <<UART CNTRL: WL=8 BITS,PTY OFF>>   07595000
   WA0(TEMP+8):=%27;                <<SET RECV BAUDRATE TO 240CPS>>     07600000
   WA0(TEMP+5):=%6014;              <<NO ECHO,CD ON>>                   07605000
 END;                                                          <<01046>>07610000
                                                               <<01046>>07615000
   IF DITP(DMODEM).MTYPE=1 OR DITP(DMODEM).MTYPE=5 THEN BEGIN  <<01534>>07620000
      DITP(DSAVE).CCVALUE:=SPECLCNT.MODCCREF;<<KEEP NEW VALUE>><<01046>>07625000
      DITP(DMODEM).CF:=SPECLCNT.MODCFREF;                      <<01046>>07630000
      WA0(TEMP+15):=SPECLCNT; <<CURRENT VALUES AS NEW REFEREN>><<01046>>07635000
      WA0(X).(8:8):=%52;  WA0(X).(0:3):=0; <<MASK FOR CC,CF>>  <<01534>>07640000
      WA0(TEMP+14).(8:8):=%17;  <<SET CA,CD,CH,SA ON>>         <<01046>>07645000
      IF LOGICAL(SPECLCNT.MODCCREF) THEN                       <<01046>>07650000
         DITP(DSAVE).CCON:=1;   <<SET CC ALWAYS ON FLAG>>      <<01046>>07655000
      DITP.MODACTIVE:=1;                                       <<01046>>07660000
      DITP(DSAVE).ININ:=1;      <<SET SYSTEM INITIAL FLAG>>    <<01046>>07665000
      TOS:=DRT;                                                <<01046>>07670000
      TOS:=TEMP+SYSDB+MODSIOCNTRL;                             <<01046>>07675000
      STARTSIO;                                                <<01046>>07680000
      RETURN;                                                  <<01046>>07685000
   END;                                                        <<01046>>07690000
                                                               <<01046>>07695000
   IF NOT LOGICAL(DITP.UP) AND DITP(DLDEV).DLDEVN <>           <<01046>>07700000
  CONSLDEV.DLDEVN THEN BEGIN                                   <<01046>>07705000
   WA0(TEMP+SPSENBAUD+11):=-124;    <<190 TO 66:WRT'RD>>                07710000
   X:=TEMP+RDDATAINSTR;                                                 07715000
   WA0(X):=[8/3,8/0];                                                   07720000
   WA0(X:=X+1):=1;                                                      07725000
   WA0(X:=X+1):=[8/0 ,8/1]; <<JMP TO INTERRUPT W/CODE=8>>               07730000
   WA0(X:=X+1):=[1/1,1/1,4/1,10/0];                                     07735000
   WA0(X:=X+1):=SYSDB+TEMP+10;                                          07740000
   WA0(X:=X+2):=WAITSPDS;  <<JUMP TO INTERRUPT W/CODE=8         >>      07745000
   IF DITP(DMODEM).MTYPE=4 THEN                                <<01534>>07750000
      WA0(TEMP+8).(12:4):=DITP(DSPEED).INSPEED;<<NON-SPDSEN>>  <<01534>>07755000
   IF DITP(DMODEM).MTYPE=0 OR DITP(DMODEM).MTYPE=4             <<01534>>07760000
      THEN ADDR:=SPSENBAUD                                     <<01534>>07765000
      ELSE ADDR:=SRQOFF;                                       <<01534>>07770000
   DITP(DCNTRL).SPDSIO := 1;                                   <<01883>>07775000
  DOAGAIN:                                                              07780000
   TOS:=DRT;                                                            07785000
   TOS:=TEMP+SYSDB+ADDR;                                       <<01534>>07790000
                                                               <<01534>>07795000
   ENABLE;                                                              07800000
   STARTSIO;                                                            07805000
   IF > THEN GOTO DOAGAIN;                                              07810000
                                                                        07815000
  END                                                          <<01046>>07820000
                                                               <<01046>>07825000
    ELSE                                                                07830000
 BEGIN                                                                  07835000
    IF DITP(DLDEV).DLDEVN <> CONSLDEV.DLDEVN THEN                       07840000
       IF DITP.DSTATE=WRITING THEN                                      07845000
       BEGIN                                                            07850000
          IF WA0(TEMP+WRTDATAINSTR+1)<>0 THEN ADDR:=XMITON              07855000
             ELSE                                                       07860000
         BEGIN                                                          07865000
           DITP.ENQACKWAIT:=0;                                 <<03742>>07870000
           STOPTIMEOUT(HP2640TO,DITP);                         <<03742>>07875000
          WA0(TEMP+WRTDATAINSTR+5):=[8/1,1/1,7/1];                      07880000
          WA0(X:=X+1):=1; <<TBEMPTY INTERRUPT CODE>>                    07885000
          ADDR:=WRTDATAINSTR+5;                                         07890000
         END;                                                           07895000
                                                                        07900000
          TOS:=DRT;                                                     07905000
          TOS:=TEMP+SYSDB+ADDR;                                         07910000
          STARTSIO;                                                     07915000
       END;                                                             07920000
 END;                                                                   07925000
                                                                        07930000
 ENABLE;                                                                07935000
                                                                        07940000
END;                                                                    07945000
PROCEDURE TERMIOM(DITP,FLAGS);                                          07950000
  VALUE   FLAGS;  INTEGER FLAGS;                                        07955000
  INTEGER ARRAY DITP;                                                   07960000
  OPTION UNCALLABLE, PRIVILEGED;                                        07965000
  <<                                                                    07970000
    TERMINAL MONITOR.  THIS PROCEDURE HANDLES INITIATION, COMPLETION    07975000
    AND OTHER FUNCTIONS ASSOCIATED WITH I/O TO TERMINALS CONNECTED      07980000
    TO THE ASYNCHRONOUS DATA COMMUMICATION CHANNEL ( ADCC ).            07985000
  >>                                                                    07990000
  BEGIN                                                                 07995000
                                                                        08000000
    INTEGER ARRAY  Q0(  *  ) = Q + 0;                                   08005000
    INTEGER ARRAY  Q1( 0:30) = Q;  << TEMP WRITE DATA BUFFER >>         08010000
    BYTE    ARRAY BQ1(  *  ) = Q1;                                      08015000
                                                                        08020000
    INTEGER                                                             08025000
      BCNT,             << BYTE COUNT OF DATA TO BE TRANSFERED >>       08030000
      WCNT,             << WORD TRANSFER COUNT FOR READS >>             08035000
      SCNT,             << SPACE COUNT OR END OF SBUF COUNT >>          08040000
      TEMP,             << TEMP AND I ARE USED A PAIR IN SPOOLING >>    08045000
      I,                << GENERAL INDEX VARIABLE >>                    08050000
      IFLAG,            << FOR SETTING FLAG >>                          08055000
      RQSTATE,          << CURRENT REQUEST STATE >>                     08060000
      FUNCTION,         << FUNCTION CODE FOR CURRENT REQUEST >>         08065000
      TADDR,            << OFFSET IN DST OF TARGET BUFFER >>            08070000
      STACKDST,         << DST NUMBER OF CURRENT STACK >>               08075000
      TBASE;            << TBUF PNTR OR OFFSET TO ARRAY Q1 >>           08080000
                                                                        08085000
    DOUBLE                                                              08090000
      Q1ADDR  = STACKDST, << DSTN AND OFFSET OF ARRAY Q1 >>             08095000
      SIOADDR = TBASE +1; << DSTN & OFFSET OF CARRIAGE CONTROL CHARS >> 08100000
                                                                        08105000
    INTEGER                                                             08110000
      LDEV    = SIOADDR + 2,                                            08115000
      SIOAREA=SIOADDR+1,   <<ADDRESS OF SIO DATA/PROGRAM AREA>>         08120000
      TCNT    = IFLAG,     << WORDS REMAINING TO FILL TBUF >>           08125000
      NPL     = I;         << NEW PREMPT LEVEL >>                       08130000
                                                                        08135000
    INTEGER                                                             08140000
      L1   = LDEV+1,                                                    08145000
      M1   = L1+1,                                                      08150000
      N1   = M1+1,                                                      08155000
      O1   = N1+1,                                                      08160000
      J1   = O1+1,                                                      08165000
      K1   = J1+1;                                                      08170000
    LOGICAL                                                             08175000
      FLAG   = IFLAG,                                                   08180000
      LFLAGS = FLAGS,                                                   08185000
      BADREQST = O1,                                                    08190000
      CONTINUE = M1,                                                    08195000
      CHECKSERV= L1,                                                    08200000
      SENTLF   = M1,                                                    08205000
      STOP     = M1;                                                    08210000
                                                                        08215000
    INTEGER POINTER                                                     08220000
      THISP  = BCNT,    << POINTER TO IOQ TO BE EXAMINED >>             08225000
      LASTP  = BCNT+1,  << POINTER TO PREVIOUS IOQ >>                   08230000
      STHISP = SCNT,  << POINTER TO IOQ WITH HIGHEST PREMPT LEVEL >>    08235000
      SLASTP =SCNT+1,<<PNTR TO IOQ PRECEDING MOST PREMPTIVE>>           08240000
      SAVEP  = N1,                                                      08245000
      SIOAREAP =SIOADDR+1;                                              08250000
    INTEGER ARRAY                                                       08255000
      IOQP(@)    = K1   + 1,                                            08260000
      QMISCP(@)  = IOQP + 1,                                            08265000
      QWBCTP(@)  = QMISCP + 1,                                          08270000
      QPAR1P(@)  = QWBCTP + 1,                                          08275000
      DRQSTP(@)  = QPAR1P + 1,                                          08280000
      DTYPEP(@)  = DRQSTP + 1,                                          08285000
      DMODEMP(@) = DTYPEP + 1,                                          08290000
      DSPEEDP(@) = DMODEMP + 1,                                         08295000
      DCNTRLP(@) = DSPEEDP + 1,                                         08300000
      DRBCTP(@)  = DCNTRLP + 1,                                         08305000
      DBCNTP(@)  = DRBCTP  + 1,                                         08310000
      DXCNTP(@)  = DBCNTP  + 1,                                         08315000
      DLASTP(@)  = DXCNTP  + 1,                                         08320000
      DTANKBP(@) = DLASTP + 1;                                          08325000
                                                                        08330000
    LOGICAL POINTER                                                     08335000
      DMODEMPL = DMODEMP,                                               08340000
      DSPEEDPL = DSPEEDP,                                               08345000
      DTYPEPL  = DTYPEP,                                                08350000
      DITPL    = DITP,                                                  08355000
                                                                        08360000
                                                                        08365000
                                                                        08370000
                                                                        08375000
      DLASTPL  = DLASTP,                                                08380000
      QMISCPL  = QMISCP,                                                08385000
      IOQPL    = IOQP,                                                  08390000
      DCNTRLPL = DCNTRLP;                                               08395000
    DOUBLE POINTER                                                      08400000
      DITPD   = DITP,                                                   08405000
      IOQPD   = IOQP;                                                   08410000
                                                                        08415000
    DOUBLE                                                              08420000
      DS6     = S - 6,  << TO REFERENCE BUFADR IN MOVEDATA >>           08425000
      TEMPD   = TEMP,                                                   08430000
      RQSFUNC = RQSTATE,<< FOR SETTING RQSTATE AND FUNCTION >>          08435000
      QPQM    = IOQP,   << FOR SETTING IOQP AND QMISCP >>               08440000
      QCQP1   = QWBCTP, << FOR SETTING QWBCTP AND QPAR1P >>             08445000
      THESEPS = THISP,  << FOR SAVING POINTERS >>                       08450000
      SAVEPS  = STHISP;                                                 08455000
                                                               <<01464>>08460000
ARRAY ESCHP2631(0:3)=PB :=  <<ESC SEQ'S FOR VFC & SKIP PERF>>  <<01464>>08465000
  %15446,%66060,%00000,%53000; << ESC,&,l,0,NULL,NULL,V >>     <<01464>>08470000
                                                               <<01464>>08475000
  BYTE ARRAY B'RESET31B(0:53) = PB :=                          <<04869>>08480000
   ESC,"Z",            << TURN OFF DISPLAY FUNCTIONS >>        <<04869>>08485000
   ESC,"&d@",          << TURN OFF UNDERLINE         >>        <<04869>>08490000
   ESC,"&k1E",         << ENABLE PERMANENT UNDERLINE >>        <<04869>>08495000
   ESC,")A",           << SECONDARY CHARS IN ROM 1   >>        <<04869>>08500000
   ESC,"(@",           << PRIMARY CHARS IN ROM 0     >>        <<04869>>08505000
   ESC,"&k1F",         << ENABLE PERMANENT SI/SO     >>        <<04869>>08510000
   ESC,"&s1I",         << PRINT ROM 0 IF NO ROM 1    >>        <<04869>>08515000
   ESC,"&k0S",         << SELECT 10.0 CPI            >>        <<04869>>08520000
   ESC,"&l1L",         << ENABLE PERFORATION SKIP    >>        <<04869>>08525000
   ESC,"&l3M",         << CLEAR ALL VERTICAL TABS    >>        <<04869>>08530000
   ESC,"&l0N",         << DISABLE LF TO VERT TAB     >>        <<04869>>08535000
   ESC,"3",            << CLEAR ALL HORIZONTAL TABS  >>        <<04869>>08540000
   ESC,"&s0C";         << ENABLE END-OF-LINE WRAP    >>        <<04869>>08545000
  ARRAY RESET31B(*) = B'RESET31B;                              <<01464>>08550000
                                                                        08555000
    INTEGER ARRAY READSTATUS(0:7) = PB :=                      <<01822>>08560000
      GOODIO,SPECIALEND,BREAKEND,LOSTDSTAT,LOSTCSTAT,BADPARITY,<<01822>>08565000
      TIMEDOUT,BLOCKTIMED;                                     <<01822>>08570000
                                                                        08575000
    INTEGER ARRAY SPEED(0:MAXSPEED) = PB :=                             08580000
    960,960,480,240,120,60,30,15,10;                                    08585000
    INTEGER ARRAY SPDCODE(0:MAXSPEED)=PB:=                              08590000
    %10,%10,%11,%7,%13,%6,%15,%16,%17;                                  08595000
    ARRAY FFSYNCS(0:MAXSPEED) = PB :=                                   08600000
      0,0,0,0,255,240,120,60,30;                                        08605000
    INTEGER ARRAY SPECLCHAR(0:MAXSPECL) = PB :=                         08610000
      0, 1, 6, %10, %15, %21, %22, %23, %30, %31, %33;                  08615000
      <<BRK,C'A,ACK,C'H,CR,XON,DC2,XOFF,C'X,C'Y,ESC>>                   08620000
                                                                        08625000
SUBROUTINE WRTSPOOLBUF(SBUFP);                                          08630000
VALUE SBUFP;      INTEGER SBUFP;                                        08635000
BEGIN                                                                   08640000
   TOS:=ATTACHIO(SYSDISK,0,8,SBUFP-@SBUF,WRITING,128,                   08645000
                 DITP(DTAIL),DITP(DPNTR),%11);                          08650000
   DEL;                                                                 08655000
   IF TOS.(13:3)<>GOODIO THEN SETREADERROR(IOQP,LOSTDATA);              08660000
   DITPD(DTBF2):=DITPD(DTBF2) + 1D;                                     08665000
END;                                                                    08670000
SUBROUTINE HALTSIO;                                            <<04244>>08675000
   BEGIN                                                       <<04244>>08680000
   TOS := WA0(DITP(DILTP) + ICNTRL).DRTNUMBER;                 <<04244>>08685000
   STOPSIO;     <<HALT SIO PROGRAM>>                           <<04244>>08690000
   WHILE <> DO     <<SIO PROG CAN'T BE HALTED IMMEDIATELY>>    <<04244>>08695000
     BEGIN                                                     <<04244>>08700000
     IF < THEN SUDDENDEATH(210);                               <<04244>>08705000
     DCNTRLP.HIOPWAIT := 1;                                    <<04244>>08710000
     STOPSIO;                                                  <<04244>>08715000
     END;                                                      <<04244>>08720000
   MOVE WA0(DITP(DILTP)) := 4(0);   <<CLEAR CPVA>>             <<04244>>08725000
   END;                                                        <<04244>>08730000
                                                                        08735000
                                                                        08740000
                                                                        08745000
SUBROUTINE RETURNBUFS;                                                  08750000
  <<                                                                    08755000
     THIS SUBROUTINE RETURNS ANY TBUFS OUTSTANDING AS INDICATED         08760000
     BY NON ZERO TBUF POINTERS IN THE DIT. IF SPOOLING SET THEN         08765000
     THE POINTER AREA IS JUST CLEARED.                                  08770000
  >>                                                                    08775000
  BEGIN                                                                 08780000
    <<*******************CHECKTQUEUE***************************>>       08785000
                                                                        08790000
    DISABLE;                                                            08795000
    TEMP:=DITP(DNXTB);     DITP(X):=0;                                  08800000
    IF <> THEN BEGIN       TOS:=TEMP;  RETURNTBUF(*);      END;         08805000
                                                                        08810000
    DITP(DCNT) := DBCNTP := 0;                                          08815000
    DITP(DPNTR) := DTANKBP := 0 ;                                       08820000
    DITP(DSAVE).BLOCKRD:=0;                                             08825000
    DITP.ENQACKWAIT := 0;                                               08830000
    DITP.SPOOLING := 0;                                                 08835000
    ENABLE;                                                             08840000
                                                                        08845000
    IF = THEN                    <<NOT SPOOLING, RETURN TBUFS >>        08850000
   BEGIN                                                                08855000
    X := DITP(DHEAD);  << DBCNT#0, TBUFS TO RETURN >>                   08860000
    WHILE <> DO  << RETURN TBUFS >>                                     08865000
      BEGIN                                                             08870000
        TOS := X;   << GET POINTER FOR RETURNING >>                     08875000
        X:= WA0(X);       <<GET LINK TO NEXT>>                          08880000
        RETURNTBUF( * );                                                08885000
      END;                                                              08890000
   END;                                                                 08895000
    DITP(DHEAD):=0;                                                     08900000
    TOS:=DITP(DBLKTAIL);                                                08905000
    DITP(X):=0;                                                         08910000
    IF <> THEN RETURNTBUF(*)                                            08915000
          ELSE DEL;                                                     08920000
  END;  << RETURN BUFS >>                                               08925000
                                                                        08930000
LOGICAL SUBROUTINE UART;                                       <<02032>>08935000
   BEGIN                                                       <<02032>>08940000
   IF DITPL.PTYCHK AND NOT DITPL(DLAST).EIGHTBITS THEN         <<02862>>08945000
      BEGIN                                                    <<02862>>08950000
      UART := %10003;                                          <<02862>>08955000
      IF NOT DCNTRLPL.ODDPTY THEN                              <<02862>>08960000
         UART.EPE := 1;                                        <<02862>>08965000
      END                                                      <<02862>>08970000
   ELSE                                                        <<02862>>08975000
      UART := %14403;                                          <<02862>>08980000
   IF DSPEEDP.OUTSPEED = %17 THEN UART.SBS := 1;               <<02032>>08985000
   END;                                                        <<02032>>08990000
                                                                        08995000
                                                                        09000000
SUBROUTINE STOPSPDSEN ;                                                 09005000
BEGIN                                                                   09010000
   DISABLE;                                                             09015000
   IF DCNTRLPL.SPDSIO THEN                                              09020000
   BEGIN         <<SPEED SENSE OR IDLE WAIT SIO PROG ACTIVE>>           09025000
      DSPEEDP.RESTSPD:=1;  <<FLAG TO RESTART IF NECESSARY>>             09030000
      HALTSIO;  <<HALT SIO PROG>>                              <<04244>>09035000
      DCNTRLP.SPDSIO:=0;                                                09040000
   END;                                                                 09045000
                                                               <<01824>>09050000
END;                                                                    09055000
                                                                        09060000
                                                                        09065000
                                                                        09070000
                                                                        09075000
                                                                        09080000
SUBROUTINE CLEANUP;                                                     09085000
  <<                                                                    09090000
    THIS ROUTIME CLEANS UP TAPEMODE, NO CONTROL X ECHO, TIMEOUTS,       09095000
    SPECIAL EOR AND SUB SYSTEM BREAK AND PARITY CHECK FLAGS.            09100000
  >>                                                                    09105000
  BEGIN                                                                 09110000
    IF NOT HP2631B THEN BEGIN                                  <<04869>>09115000
   DISABLE;                                                    <<04242>>09120000
    DSPEEDP.TAPEMODE := 0;                                              09125000
    DITP(DLDEV).NO'CX'ECHO := 0;                                        09130000
    DITP(DRTMAX) := 0;   << DISABLE READ TIMEOUTS >>                    09135000
    DITP.PTYCHK := DCNTRLP.PTYON;                              <<02046>>09140000
   ENABLE;                                                     <<04242>>09145000
    BEGIN                                                               09150000
       TEMP:=WA0(DITP(DILTP)+ISIOP);                                    09155000
                                                               <<02046>>09160000
       WA0(TEMP+4) := UART;                                    <<02046>>09165000
       J1:=0;                                                           09170000
       IF DITP(DSTOP)<>0 THEN                                           09175000
       BEGIN                                                            09180000
          TOS:=DITP(X).(0:8);                                           09185000
          J1:=2;                                                        09190000
          X:=MAXSPECL;                                                  09195000
          WHILE  >= AND S0<>SPECLCHAR(X)  DO   X:=X-1;                  09200000
          IF >= THEN     <<CHAR IS AMONG THE ADCC SPECL CHAR LIST>>     09205000
          BEGIN          <<DO NOT CLEAR>>                               09210000
             J1:=J1-1;   <<1 LESS BYTE TO CLEAR>>                       09215000
             DITP(DSTOP).(0:8):=0;                                      09220000
          END;                                                          09225000
          DEL;                                                          09230000
          TOS:=DITP(DSTOP).(8:8);                                       09235000
          X:=MAXSPECL;                                                  09240000
          WHILE  >= AND S0<>SPECLCHAR(X)  DO   X:=X-1;                  09245000
          IF >= THEN     <<AMONG ADCC SPECL CHAR LIST,DON'T CLEAR>>     09250000
          BEGIN                                                         09255000
             J1:=J1-1;                                                  09260000
             DITP(DSTOP).(8:8):=0;                                      09265000
          END;                                                          09270000
          DEL;                                                          09275000
          TOS:=DITP(DSTOP);                                             09280000
          DITP(X):=0;                                                   09285000
          X:=J1;                                                        09290000
          IF <> THEN                                                    09295000
          BEGIN          <<SOMETHING TO CLEAR>>                         09300000
             IF X=1 THEN                                                09305000
                IF S0.(0:8)=0 THEN TOS:=TOS&LSL(8);                     09310000
             WA0(TEMP+13):=TOS;  <<PUT CHARS INTO BUFFER>>              09315000
             WA0(TEMP+SYNSTRT):=[8/4,8/4]; <<CLR SPECL CHAR INSTR>>     09320000
             WA0(X:=X+1):=J1;                                           09325000
             WA0(X:=X+1):=1;                                            09330000
             WA0(X:=X+1):=[1/1,1/0,1/1,13/0];  <<START FROM LEFT>>      09335000
             WA0(X:=X+1):=SYSDB+TEMP+13;                                09340000
             K1:=X+1;                                                   09345000
                                                               <<02046>>09350000
             BEGIN    WA0(K1):=[8/0,8/0]; <<JMP FROM 64 TO 171>>        09355000
                      WA0(X:=X+1):=107;   <<RESET WL & DISABLE PTY>>    09360000
             END                                                        09365000
          END                                                           09370000
             ELSE                                                       09375000
          DEL;        <<NOTHING TO CLEAR,CLEAN UP STACK>>               09380000
       END;                                                             09385000
       X:=J1;                                                           09390000
                                                               <<02046>>09395000
      BEGIN                                                             09400000
          DITP(DSIOPC):=SYSDB+TEMP+(IF J1<>0 THEN SYNSTRT      <<02861>>09405000
                                             ELSE MODSIOPTY);           09410000
          STOPSPDSEN;                                                   09415000
          DITP.DSTATE:=MODEMSIO;                                        09420000
          TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                       09425000
          TOS:=DITP(DSIOPC);                                            09430000
          STARTSIO;                                                     09435000
          IF < THEN BEGIN                                      <<00479>>09440000
                    TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;    <<00479>>09445000
                    ABS(TOS*4+3):=0;                           <<00479>>09450000
                    END;                                                09455000
      END;                                                              09460000
    END;                                                                09465000
    DISABLE;                                                            09470000
                                                               <<02046>>09475000
    DTYPEP.TIMEREAD := 0;                                               09480000
                                                                        09485000
    TOS := LPDTD(LDEV);                                                 09490000
    TOS.(SSBREAK':1) := 0;                                              09495000
    LPDTD( X ) := TOS;                                                  09500000
    TOS := DITP(DBREAK);                                                09505000
    IF <> THEN  << RETURN BREAK SAVE IOQ AND TBUFS >>                   09510000
      BEGIN                                                             09515000
        DITP(DBREAK) := 0;   << CLEAR BREAK SAVE >>                     09520000
        X := PS0( 7 );    << GET HEAD POINTER >>                        09525000
        WHILE <> DO   << RETURN ANY SAVED TBUFS >>                      09530000
          BEGIN                                                         09535000
            TOS := X;   << GET POINTER FOR RETURNTBUF >>                09540000
            X:= WA0(X);   <<GET LINK TO NEXT TBUF>>                     09545000
            RETURNTBUF( * );                                            09550000
          END;                                                          09555000
        RETURNIOQ( S0 );                                                09560000
      END;                                                              09565000
                                                                        09570000
    DEL;  << DELETE DBREAK WORD >>                                      09575000
    END;                                                       <<02865>>09580000
    RETURNBUFS;                                                         09585000
  END;    << CLEAN UP >>                                                09590000
                                                                        09595000
                                                                        09600000
                                                                        09605000
                                                                        09610000
                                                                        09615000
SUBROUTINE SETSTATUS(RETURNSTAT);                                       09620000
VALUE RETURNSTAT;    INTEGER RETURNSTAT;                                09625000
BEGIN                                                                   09630000
   DISABLE;                                                             09635000
   IOQP(QSTAT).IOSTAT:=RETURNSTAT;  <<PUT I/O COMPLETION STATUS IN IOQ>>09640000
   IOQP.COMPLETED:=1;                                                   09645000
   TEMP:=IOQP(QSTAT)&PCBS;      <<EXTRACT PCB NUMBER>>                  09650000
   DITP(DIOQP):=IOQP(QLINK);    <<DONE WITH CURRENT RQST,SERVICE NEXT>> 09655000
   ENABLE;                                                              09660000
   IF LOSTDATA<= IOQP.READERRORS <=PTYERROR THEN                        09665000
      LOGERROR(DITP,IOQP,RDCOUNTER+WRTCOUNTER);                         09670000
   IF IOQPL.IOWAKE THEN                                                 09675000
      AWAKE(TEMP*PCBSIZE,IOWAIT&LSL(IOQP.BLOCKED),NOWAIT);              09680000
   X:=TEMP;                     <<TEST PCB NUMBER>>                     09685000
   IF = THEN                                                            09690000
   BEGIN           <<NO PCB I/O,RETURN IOQ AND ANY SYSBUFS>>            09695000
      X:=IOQP(QADDR);           <<CHECK FOR ANY SYSBUF TO RETURN>>      09700000
      IF <> AND IOQPL.SYSBUFR THEN RETURNSYSBUF(X);            <<04237>>09705000
      RETURNIOQ(@IOQP);                                                 09710000
   END;                                                                 09715000
   CHECKSERV:=TRUE;             <<GO SERVICE NEXT REQUEST>>             09720000
END;               <<-----------END OF SETSTATUS----------->>           09725000
                                                                        09730000
                                                                        09735000
                                                                        09740000
                                                                        09745000
SUBROUTINE STARTWRITE;                                                  09750000
BEGIN                                                                   09755000
    DISABLE;                                                   <<01464>>09760000
    IF HP2631B THEN                                            <<04869>>09765000
      BEGIN                                                    <<01464>>09770000
      IF DBCNTP=0 THEN                                         <<01464>>09775000
        BEGIN  << 0 LENGTH WRITE AND NO CONTROL CHARS >>       <<01464>>09780000
        SETSTATUS(GOODIO);                                     <<01464>>09785000
        ENABLE;                                                <<01464>>09790000
        RETURN;                                                <<01464>>09795000
        END;                                                   <<01464>>09800000
      IF DITPL(DTYPE).WAITXON OR STATREQ THEN                  <<01464>>09805000
        BEGIN  <<WAIT FOR XON OR STATUS TO START WRITE, TIP>>  <<01464>>09810000
        DITP.DSTATE := WRITING;                                <<01464>>09815000
        ENABLE;                                                <<01464>>09820000
        RETURN;                                                <<01464>>09825000
        END;                                                   <<01464>>09830000
      END;                                                     <<01464>>09835000
                                                               <<01464>>09840000
   STOPSPDSEN;                                                          09845000
      DISABLE;                                                 <<01292>>09850000
   X:=DBCNTP;        <<CHECK PENDING WRITE BYTE COUNT>>                 09855000
   IF <> AND (DITP.DSTATE=NULL OR DITP(DCNT)=-2) THEN                   09860000
   BEGIN                                                                09865000
      <<***************** BUG CATCHER *********************>>           09870000
      TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                           09875000
      X:=ABS(TOS*4+3).IDLESIO;                                          09880000
      IF <> THEN SUDDENDEATH(209);                             <<01539>>09885000
      <<***************** CATCH A FALLING STAR & PUT IT IN YOUR         09890000
        ***************** POCKET, NEVER LET IT FADE AWAY **********>>   09895000
      TEMP:=WA0(DITP(DILTP)+ISIOP);   <<SIO PROG STARTING ADDRESS>>     09900000
      DITP(DSAVE).DELACK:=0;                                            09905000
      IF <> THEN BEGIN           <<IGNORE ACK BEFORE SENDING DATA>>     09910000
                    ENABLE;                                             09915000
                    DELAY(500D);                                        09920000
                 END;                                                   09925000
      IF DITP(DCNT)=-2 THEN                                             09930000
      BEGIN        <<RESTART PREVIOUSLY STOPPED WRITE>>                 09935000
         DITP(DCNT):=DBCNTP;   <<WRT OUT  DATA JUST TANKED>>            09940000
         ENABLE;                                                        09945000
         X:=TEMP+WRTDATAINSTR; <<ADDR OF WRT DATA CHANNEL INSTR>>       09950000
         WA0(X):=[8/4,8/0];                                             09955000
         WA0(X:=X+1):=DBCNTP;                                           09960000
         WA0(X:=X+1):=1;                                                09965000
         J1:=X+1;                                                       09970000
         IF DITPL(DPNTR) THEN                                           09975000
            WA0(J1):=[1/1,1/1,1/1,13/0]   <<FROM RIGHT BYTE>>           09980000
            ELSE                                                        09985000
            WA0(J1):=[1/1,1/0,1/1,13/0];  <<FROM LEFT BYTE>>            09990000
         WA0(J1+1):=SYSDB+DITP(DHEAD)+2+DITP(DPNTR)&LSR(1);             09995000
         IF LOGICAL(WA0(DITP(DHEAD)+1).WRTENQ)  THEN                    10000000
         BEGIN        <<ENQ WAS JUST ADDED TO TBUF>>                    10005000
            WA0(X).WRTENQ:=0;                                           10010000
            WA0(J1+2):=[8/0,8/0];  <<CHANNEL INSTR FOR REL JMP>>        10015000
            WA0(X:=X+1):=30;  <<JMP FROM 41 TO 71 TO DISABLE XMIT SRQ>> 10020000
            X:=TEMP+RDDATAINSTR;                                        10025000
            WA0(X):=[8/3,8/0];   <<CHANNEL INSTR FOR READ DATA>>        10030000
            WA0(X:=X+1):=1;                                             10035000
            WA0(X:=X+1):=[8/%361,8/1]; <<TERMINATION JMP OF -15>>       10040000
                         <<TERMINATION JMP BACK TO WAIT SRQ>>           10045000
            WA0(X:=X+1):=[1/1,1/1,4/1,10/0];  <<RD INTO RIGHT BYTE>>    10050000
            WA0(X:=X+1):=TEMP+10+SYSDB;   << DATA DUMP ADDRESS>>        10055000
            DITP.ENQACKWAIT:=1;   <<SET FLAG FOR ACK WAIT>>             10060000
            STARTTIMEOUT(HP2640TO,DITP);   <<TIMEOUT FOR 10 SECONDS>>   10065000
         END                                                            10070000
            ELSE                                                        10075000
         BEGIN                                                          10080000
            WA0(J1+2):=[8/1,1/1,7/1];   <<INTERRUPT/HALT,TBUF EMPTY>>   10085000
            WA0(X:=X+1):=1;                                             10090000
            <<INTERRUPT/HALT W/CODE TO CPVA1 AFTER TBUF EMPTIED>>       10095000
         END;                                                           10100000
         TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                        10105000
         X:=ABS(S0*4+3).IDLESIO;                                        10110000
         IF <> THEN SUDDENDEATH(209);                          <<01539>>10115000
         TOS:=SYSDB+TEMP+XMITON;                               <<00496>>10120000
            STARTSIO;                                                   10125000
         IF < THEN BEGIN                                       <<00479>>10130000
                   TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;     <<00479>>10135000
                   ABS(TOS*4+3):=0;                            <<00479>>10140000
                   END;                                        <<00479>>10145000
      END                                                               10150000
         ELSE                                                           10155000
      BEGIN                                                             10160000
         ENABLE;                                                        10165000
         DITP(DPNTR):=0;                                                10170000
         IF LOGICAL( WA0(DITP(DHEAD)+1).WRTENQ ) THEN                   10175000
         BEGIN                                                          10180000
            WA0(X).WRTENQ:=0;                                           10185000
            J1:=WA0(X).ENQOFFSET;                                       10190000
            DITP(DCNT):=J1+1;                                           10195000
            WA0(TEMP+WRTDATAINSTR+5):=[8/0,8/0];                        10200000
            WA0(X:=X+1):=30;  <<JMP FROM 41 TO 71:READ ACK>>            10205000
            WA0(TEMP+RDDATAINSTR):=[8/3,8/0];  <<READ CHANNEL INSTR>>   10210000
            WA0(X:=X+1):=1;                                             10215000
            WA0(X:=X+1):=[8/%361,8/1];  <<-15 BACK TO WAIT SRQ>>        10220000
            WA0(X:=X+1):=[1/1,1/1,4/1,10/0];  <<TO RIGHT BYTE>>         10225000
            WA0(X:=X+1):=SYSDB+TEMP+10; <<BOTTOMLESS DATA DUMP>>        10230000
            DITP.ENQACKWAIT:=1;                                         10235000
            STARTTIMEOUT(HP2640TO,DITP);                                10240000
         END                                                            10245000
            ELSE                                                        10250000
        BEGIN                                                           10255000
         WA0(TEMP+WRTDATAINSTR+5):=[8/1,1/1,7/1];                       10260000
         WA0(X:=X+1):=1;    <<INTERRUPT/HALT,TBUF EMPTY>>               10265000
         DITP(DCNT):=(IF DBCNTP<=TBMAXB THEN DBCNTP ELSE TBMAXB);       10270000
        END;                                                            10275000
                                                                        10280000
         X:=TEMP+WRTDATAINSTR;                                          10285000
         WA0(X):=[8/4,8/0];     <<WRT DATA CHANNEL INSTR>>              10290000
         J1:=X+1;                                                       10295000
         WA0(J1):=DITP(DCNT);                                           10300000
         WA0(X:=X+1):=1;                                                10305000
         WA0(X:=X+1):=[1/1,1/0,1/1,13/0];  <<START FROM LEFT BYTE>>     10310000
         J1:=X+1;                                                       10315000
         WA0(J1):=SYSDB+DITP(DHEAD)+2; <<TBUF STARTING ADDRESS>>        10320000
         X:=TEMP+RDDATAINSTR+6;                                         10325000
         WA0(X):=WAITACK;     <<PUT IN CPVA2 INTERRUPT CODE>>           10330000
         TOS:=DITP;                                                     10335000
         TOS.DSTATE:=WRITING;                                           10340000
         TOS.NEWLINE:=0;     <<START OF NEW WRITE,RESET FLAG>>          10345000
         DITP:=TOS;                                                     10350000
         TOS:=DMODEMP&CSL(M202);                                        10355000
         IF TOS AND DMODEMP.CBSB<>3 THEN                                10360000
         BEGIN        <<202 NOT IN WRITE STATE>>                        10365000
            STARTTIMEOUT(TURNTO,DITP);                                  10370000
            DISABLE;                                                    10375000
            MODCONTROL(WRITING,DITP);                                   10380000
            DITP(DSAVE).TURNTOWRITE:=1;                                 10385000
            DCNTRLP.NXTDSTATE:=WRITING;                                 10390000
            DITP.DSTATE:=TURN202;                                       10395000
            DITP(DSIOPC):=SYSDB+TEMP+XMITON;                            10400000
            ENABLE;                                                     10405000
         END                                                            10410000
            ELSE                                                        10415000
         BEGIN                                                          10420000
         TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                        10425000
         X:=ABS(S0*4+3).IDLESIO;                                        10430000
         IF <> THEN SUDDENDEATH(209);                          <<01539>>10435000
         TOS:=SYSDB+TEMP+(IF DMODEMPL&CSL(M202) THEN XMITON             10440000
                                                ELSE WRTBASE);          10445000
         STARTSIO;                                                      10450000
         IF < THEN BEGIN                                       <<00479>>10455000
                   TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;     <<00479>>10460000
                   ABS(TOS*4+3):=0;                            <<00479>>10465000
                   END;                                        <<00479>>10470000
         END;                                                           10475000
      END;                                                              10480000
   END                                                         <<00485>>10485000
      ELSE                                                              10490000
   IF DBCNTP=0 AND DITP.DSTATE=NULL THEN IDLEWAIT(DITP);       <<00485>>10495000
   <<NO PHYSICAL I/O,RESTART IDLE PROG TO LISTEN TO KEYBOARD>> <<00485>>10500000
END;     <<-----------------END OF STARTWRITE---------------->>         10505000
                                                                        10510000
                                                                        10515000
                                                                        10520000
                                                                        10525000
                                                                        10530000
                                                                        10535000
                                                                        10540000
                                                                        10545000
                                                                        10550000
SUBROUTINE ABORTIOQ ;                                                   10555000
BEGIN                                                                   10560000
   IF DSAVEPL.NOTLOGON THEN                                    <<02861>>10565000
      BEGIN                                                    <<02861>>10570000
      DSAVEPL.NOTLOGON := 0;                                   <<02861>>10575000
      STOPTIMEOUT(LOGONTO, DITP);                              <<02861>>10580000
      END;                                                     <<02861>>10585000
   IF RQSTATE=READING THEN                                              10590000
   BEGIN      <<READING AND ABORT REQUESTED>>                           10595000
      TOS:=QMISCP;                                                      10600000
      TOS.READSTOP:=ABORTSTOP;   <<RECORD WHY READ WAS STOPPED>>        10605000
      TOS.NOSTOP:=1;             <<SUPPRESS NEW PREMPT,ABORTS>>         10610000
      QMISCP:=TOS;                                                      10615000
      HALTSIO;  <<HALT SIO PROG>>                              <<04244>>10620000
         IDLEWAIT(DITP);         <<DON'T LOSE ANYTHING >>      <<02063>>10625000
         ENABLE;                                                        10630000
         DTYPEP.TIMING:=0;                                              10635000
         IF <> THEN                                                     10640000
         BEGIN                                                          10645000
            TOS:=TIMER-DITPD(DRTIMED);                                  10650000
            TOS:=10;             <<DIVIDE MSEC BY 10 TO GET 100THS>>    10655000
            ASMB(LDIV,DEL);      <<RETURN TIME IN HUNDREDTHS OF SEC>>   10660000
            IF OVERFLOW THEN                                            10665000
            BEGIN                                                       10670000
               DEL;                                                     10675000
               TOS:=-1;                                                 10680000
            END;                                                        10685000
            DITP(DRTIME):=TOS;                                          10690000
         END;                                                           10695000
         IF DITP(DTRLX).READTRLX<>0 THEN                                10700000
         BEGIN    <<CHECK ENTRY FOR LOGON/RD TIME LIMITS>>              10705000
            DITP(DRTMAX):=0;     <<CLR USER SPECIFIED TIME LIMIT>>      10710000
            STOPTIMEOUT(READTIMEOUT,DITP);                              10715000
         END;                                                           10720000
         DITP.PAIR:=1;                                                  10725000
         IF = OR DTYPEP.PAIRCODE<>XOFFPAIR THEN                         10730000
            DTYPEP.PAIRCODE:=NOTREADING;                                10735000
         DMODEMP.PRIMED:=0;                                             10740000
         DITP.DSTATE:=NULL;                                             10745000
         RETURNBUFS;             <<RETURN OUTSTANDING TBUFS>>           10750000
         QWBCTP:=0;                                                     10755000
         SETSTATUS(ABORTED);                                            10760000
                                                               <<04244>>10765000
   END                                                                  10770000
      ELSE                                                              10775000
   BEGIN                                                                10780000
      TOS:=DITP;                                                        10785000
      IF S0.DSTATE=WRITING THEN                                         10790000
      BEGIN                                                             10795000
         IF STATREQ THEN GOTO SKIPSTOP;<<KEEP STATUS REQUEST>> <<02063>>10800000
         HALTSIO;  <<HALT SIO PROG>>                           <<04244>>10805000
            IDLEWAIT(DITP);      <<DON'T LOSE ANYTHING >>      <<02063>>10810000
SKIPSTOP:                                                      <<02063>>10815000
                                                               <<04241>>10820000
            TOS.DSTATE:=NULL;                                           10825000
            DITP:=TOS;                                                  10830000
            ENABLE;                                            <<04241>>10835000
            RETURNBUFS;                                                 10840000
            QWBCTP:=0;                                                  10845000
            SETSTATUS(ABORTED);                                         10850000
                                                               <<04244>>10855000
      END                                                               10860000
         ELSE                                                           10865000
      BEGIN                                                             10870000
         TOS.ENQACKWAIT:=0;                                             10875000
         TOS.DSTATE:=NULL;                                              10880000
         DITP:=TOS;                                                     10885000
         RETURNBUFS;                                                    10890000
         QWBCTP:=0;                                                     10895000
         SETSTATUS(ABORTED);                                            10900000
      END;                                                              10905000
   END;                                                                 10910000
END;     <<-----------------END OF ABORTIOQ----------------->>          10915000
SUBROUTINE TANKDATA(BUFADR,COUNT,OFFSET);                               10920000
  VALUE BUFADR, COUNT, OFFSET;   INTEGER COUNT, OFFSET;   DOUBLE BUFADR;10925000
  <<                                                                    10930000
    THIS SUBROUTINE MOVES DATA INTO THE TERMINAL BUFFERS. IT CHECKS     10935000
    FOR ADDING AN ENQ AFTER 80 CHARACTERS ON THE HP2640.                10940000
                                                                        10945000
    RETURN CC - CCE = DATA TRANSFER COMPLETED                           10950000
                CCG = TOO MUCH DATA TO TANK NOW OR NO TBUF AVAILABLE    10955000
                                                                        10960000
     BUFADR - DST NUMBER AND OFFSET OF DATA TO BE WRITTEN               10965000
     COUNT  - NUMBER OF BYTES TO BE TANKED.                             10970000
     OFFSET - OFFSET IN BYTES FROM BUFADR TO START FROM                 10975000
  >>                                                                    10980000
  BEGIN                                                                 10985000
    X := DITP(DLDEV);   << TEST BREAK FLUSH IN BIT 0 >>                 10990000
    IF < OR QMISCPL.FLUSH THEN IF IOQP.RPLEVEL=NULL THEN                10995000
      BEGIN  << BREAK OR CONTROL Y FLUSH, DONT MOVE DATA >>             11000000
        DXCNTP := DXCNTP + COUNT;                                       11005000
        ASMB(DZRO, CMP);  RETURN;  << RETURN WITH CC = CCE >>           11010000
      END;                                                              11015000
                                                                        11020000
STARTM:                                                                 11025000
    I := COUNT;   IF = THEN RETURN;   << NO DATA TO TRANSFER >>         11030000
                                                                        11035000
    IF IOQPL.SYSBUFR THEN                                               11040000
      BEGIN  << FORM ADDR TO GET DATA AND CHECK COUNT >>                11045000
        TEMP := OFFSET&LSR(8);  << SBUF NUMBER IN LINKED LIST >>        11050000
        TOS := BUFADR;                                                  11055000
MV1:                                                                    11060000
        TEMP := TEMP - 1;                                               11065000
        IF >= THEN  << FIND SYSBUF IN LINKED LIST >>                    11070000
          BEGIN  X := TOS-1;  TOS := SBUF(X);  GOTO MV1; END;           11075000
                                                                        11080000
        X := TOS;   DEL;   << SAVE BASE OF SYSBUF IN X >>               11085000
        TADDR := X + OFFSET.(8:7) - INTEGER(BUFADR);                    11090000
        X := 256 - OFFSET.(8:8);                                        11095000
        IF X<I THEN I := X;   << REMAINING IN SYSBUF IS CONSTRAINT >>   11100000
      END                                                               11105000
    ELSE TADDR := OFFSET&LSR(1);   << OFFSET IN DST IN WORDS >>         11110000
                                                                        11115000
    X := 540 - DTANKBP;                                                 11120000
    IF = THEN  BEGIN  X := COUNT;  RETURN;  END; << NO ROOM LEFT >>     11125000
    IF X<I THEN   << LIMIT ON MAX TANKED IS CONSTRAINT >>               11130000
      IF 540>COUNT THEN RETURN   << DONT BREAK UP THIS BLOCK >>         11135000
        ELSE I := X;    << MAX TANK IS CONSTRAINT >>                    11140000
                                                                        11145000
    IF DMODEMPL.NOSYNC THEN    << CHECK FOR 80 CHARS TO 2640 >>         11150000
      BEGIN  X := DITP(DSYNC);    IF X<I THEN I := X;  END;             11155000
                                                                        11160000
    X := I;                                                             11165000
    IF <> THEN   << SOMETHING TO MOVE >>                                11170000
      BEGIN                                                             11175000
        DISABLE;                                                        11180000
                                                                        11185000
        TOS := DTANKBP  MOD TBMAXB;   TOS := -S0;                       11190000
        IF = THEN    << NEW TBUF NEEDED >>                              11195000
          BEGIN                                                         11200000
            TOS:=DITP(DNXTB);  TOS:=S0;  DITP(X):=0;                    11205000
            IF = THEN       <<NO TBUF SAVED FOR THIS TERMINAL>>         11210000
              BEGIN                                                     11215000
                DDEL;                                                   11220000
                TOS := GETTBUF(PRIMARY);     TOS := S0;                 11225000
                IF = THEN   << NO TBUF AVAILABLE >>                     11230000
                  BEGIN                                                 11235000
                    ENABLE;                                             11240000
                    DDEL;  DDEL;     << CLEAN UP STACK >>               11245000
                    ADDTAIL(DITP, DTBLK, TBQN); << QUEUE TBUF REQUEST >>11250000
                    RETURN;   << WITH CC = CCG >>                       11255000
                  END;                                                  11260000
              END;                                                      11265000
                                                                        11270000
            X := DBCNTP;  << TEST BYTE COUNT SO FAR >>                  11275000
            IF = THEN  << ADDING 1ST TBUF >>                            11280000
              BEGIN                                                     11285000
                DITP(DPNTR) := 0;                                       11290000
                DITP(DHEAD) := TOS;                                     11295000
              END                                                       11300000
          ELSE  WA0(DITP(DTAIL)):=TOS;   <<LINK TO END>>                11305000
                                                                        11310000
            DITP(DTAIL) := TOS;     << SET NEW END POINTER >>           11315000
            WA0(DITP(DTAIL)+1):=0;  <<CLR ENQ TANKED BIT,OFFSET>>       11320000
          END;                                                          11325000
                                                                        11330000
        DCNTRLP.FILLING := 1;                                           11335000
        ENABLE;                                                         11340000
                                                                        11345000
        X := TOS + TBMAXB;   IF X<I THEN TEMP := I := X;                11350000
        TEMP := TOS + DITP(DTAIL)&LSL(1) + 4;                           11355000
                                                                        11360000
        IF LOGICAL(OFFSET) OR LOGICAL(TEMP) THEN                        11365000
          BEGIN   << MOVE FROM OR TO ODD BYTE BOUNDRY REQUIRED >>       11370000
            TOS := BUFADR;  DEL;   << LEAVE SOURCE DST # ON TOS >>      11375000
            IF TOS<>FLAGS&LSR(6) THEN  << DATA NOT ON THIS STACK >>     11380000
              BEGIN   << MOVE DATA TO THE LOCAL BUFFER >>               11385000
                TOS := Q1ADDR;                                          11390000
                TOS := DS6;   << GET BUFADR >>                          11395000
                TOS := TOS + TADDR;                                     11400000
                TOS := (I+2)&LSR(1);   ASMB( MDS );                     11405000
                TADDR := 0;  << NO OFFSET FROM TBASE >>                 11410000
              END                                                       11415000
            ELSE                                                        11420000
              TADDR := INTEGER(BUFADR) + TADDR - TBASE;                 11425000
                                                                        11430000
            X := OFFSET.(15:1);                                         11435000
            PDISABLE;   PUSH( Q );                                      11440000
                                                                        11445000
            TOS := TEMP;  << BYTE POINTER TO ENTER IN TBUF >>           11450000
            TOS := I;     << BYTE COUNT TO MOVE >>                      11455000
            TOS := S2 + TADDR;     << BASE OF SOURCE BUFFER >>          11460000
            SET( Q );                                                   11465000
                                                                        11470000
MV2:                                                                    11475000
            BPS1 := BQ1(X);    << MOVE A BYTE >>                        11480000
            ASMB(INCX,INCB);   << BUMP ADDRESSES >>                     11485000
            TOS := TOS - 1;    IF > THEN GOTO MV2;                      11490000
                                                                        11495000
            DDEL;      SET( Q );                                        11500000
            PENABLE;                                                    11505000
          END                                                           11510000
        ELSE                                                            11515000
          BEGIN   << MOVE WORDS >>                                      11520000
          IF S4<>0 THEN                                        <<01464>>11525000
            BEGIN << MOVE NOT PB REL >>                        <<01464>>11530000
            TOS := 6;  TOS := TEMP&LSR(1)+SYSDB;  << TBUF OFFSET >>     11535000
            TOS := DS6;     << GET BUFADR >>                            11540000
            TOS := TOS + TADDR;                                         11545000
            TOS := (I+1)&LSR(1);    ASMB( MDS );                        11550000
            END                                                <<01464>>11555000
          ELSE << MOVE FROM PB ARRAY >>                        <<01464>>11560000
            MOVE WA0(TEMP&LSR(1)) := RESET31B(TADDR),          <<01464>>11565000
            ((I+1)&LSR(1));                                    <<01464>>11570000
          END;                                                          11575000
                                                                        11580000
        DISABLE;                                                        11585000
        DCNTRLP.FILLING := 0;                                           11590000
        IF DCNTRLPL.ADDENQ THEN                                         11595000
        BEGIN                                                           11600000
           WA0(DITP(DTAIL)+1).WRTENQ:=1;                                11605000
           <<SET FLAG TO INDICATE ENQ IMBEDDED IN TBUF>>                11610000
           WA0(DITP(DTAIL)+1).ENQOFFSET:=DTANKBP MOD TBMAXB;            11615000
           <<RECORD BYTE OFFSET OF ENQ IN THE TBUF    >>                11620000
                                                               <<00328>>11625000
        END;                                                            11630000
        DTANKBP:=DTANKBP+I;  <<INCREMENT TOTAL BYTES TANKED IN          11635000
                               OUTSTANDING TBUFS >>                     11640000
        DBCNTP:=DBCNTP+I;    <<INCREMENT TOTAL BYTES REMAINING TO       11645000
                               BE WRITTEN >>                            11650000
                                                               <<02020>>11655000
                                                               <<02020>>11660000
                                                               <<02020>>11665000
                                                                        11670000
        ENABLE;                                                         11675000
                                                                        11680000
        IF DMODEMPL.NOSYNC THEN DITP(DSYNC) := DITP(DSYNC) - I;         11685000
        DXCNTP := DXCNTP + I;    OFFSET := OFFSET + I;                  11690000
      END;                                                              11695000
                                                                        11700000
                                                                        11705000
    COUNT := COUNT - I;    IF = THEN   << MOVE DONE >>         <<00328>>11710000
    BEGIN            <<CHECK IF LAST BYTE TANKED IS ENQ>>      <<00328>>11715000
       DISABLE;                                                <<00328>>11720000
       IF NOT DCNTRLPL.ADDENQ AND NOT DLASTPL.BWRITE AND       <<01990>>11725000
        DMODEMPL.NOSYNC THEN BEGIN                             <<01990>>11730000
          X:=DTANKBP MOD TBMAXB;                               <<00328>>11735000
          IF = THEN J1:=DITP(DTAIL)+1+TBMAXW                   <<00328>>11740000
             ELSE                                              <<00328>>11745000
          J1:=DITP(DTAIL)+1+((DTANKBP MOD TBMAXB)+1)/2;        <<00328>>11750000
          K1:=IF LOGICAL(DTANKBP) THEN WA0(J1).(0:8)           <<00328>>11755000
                                  ELSE WA0(J1).(8:8);          <<00328>>11760000
          IF K1=%5 THEN                                        <<00328>>11765000
          BEGIN                                                <<00328>>11770000
             WA0(DITP(DTAIL)+1).WRTENQ:=1;                     <<00328>>11775000
             TOS := (DTANKBP MOD TBMAXB) - 1;                  <<02083>>11780000
             IF S0 < 0 THEN S0 := 59; << ADJUST FOR END >>     <<02083>>11785000
             WA0(DITP(DTAIL)+1).ENQOFFSET := S0;               <<02088>>11790000
             DEL;<< BECAUSE SPL COMPILER HAS BUG IN IT >>      <<02088>>11795000
          END;                                                 <<00328>>11800000
       END;                                                    <<00328>>11805000
       IF DITP(DCNT) = -2 THEN STARTWRITE;                     <<02020>>11810000
       ENABLE;                                                 <<00328>>11815000
       ASMB(DZRO, CMP);   <<SET CC=CCE>>                       <<00328>>11820000
       RETURN;                                                 <<00328>>11825000
    END;                                                       <<00328>>11830000
                                                               <<00328>>11835000
                                                                        11840000
    IF DMODEMPL.NOSYNC AND DITP(DSYNC)=0 THEN                           11845000
      BEGIN                                                             11850000
        DITP(DSYNC) := 81;                                              11855000
        IF NOT DLASTPL.BWRITE AND NOT DMODEMPL&CSL(M202) AND            11860000
           DSPEEDP.INSPEED=DSPEEDP.OUTSPEED THEN                        11865000
          BEGIN   << ADD ENQ FOR 2640 NOT ON A 202 >>                   11870000
            DISABLE;                                                    11875000
            DCNTRLP.ADDENQ:=1;                                          11880000
            ENABLE;                                                     11885000
            TOS := DXCNTP;   << SAVE DXCNT  OVER CALL >>                11890000
            TANKDATA(SIOADDR,1,7);    << ADD ENQ >>                     11895000
            DXCNTP := TOS;   << RESTORE DXCNT >>                        11900000
            IF <> THEN     << ENQ NOT ADDED, WAIT REQUEST >>            11905000
              BEGIN                                                     11910000
                DISABLE;                                                11915000
                DCNTRLP.ADDENQ:=0;                                      11920000
                ENABLE;                                                 11925000
                RQSTATE := RQSTATE + 4;  << INDICATE AN ADD ENQ WAIT >> 11930000
                RETURN;    << WITH CC = CCG >>                          11935000
              END;                                                      11940000
              DISABLE;                                                  11945000
              DCNTRLP.ADDENQ:=0;                                        11950000
              ENABLE;                                                   11955000
          END;                                                          11960000
      END;                                                              11965000
    IF DITP(DCNT) = -2 THEN STARTWRITE;                        <<02020>>11970000
    GOTO STARTM;        << CONTINUE THIS OPERATION >>                   11975000
                                                                        11980000
END;      << ---------END OF TANKDATA---------->>                       11985000
                                                               <<01464>>11990000
                                                               <<01464>>11995000
                                                               <<01464>>12000000
SUBROUTINE RESET2631;                                          <<01464>>12005000
  BEGIN                                                        <<01464>>12010000
  DISABLE;                                                              12015000
  IF HP2631B7 THEN                                             <<04869>>12020000
     DCNTRLP.PARITYBITS := 3                                   <<04869>>12025000
  ELSE                                                         <<04869>>12030000
     DCNTRLP.PARITYBITS := 0;                                  <<04869>>12035000
  TEMP := WA0(DITP(DILTP) + ISIOP);                            <<04869>>12040000
  IF HP2631B7 THEN                                             <<04869>>12045000
     TOS := %10003                                             <<04869>>12050000
  ELSE                                                         <<04869>>12055000
     TOS := %14403;                                            <<04869>>12060000
  IF DSPEEDP.OUTSPEED = %17 THEN                               <<04869>>12065000
     TOS.SBS := 1;                                             <<04869>>12070000
  WA0(TEMP+4) := TOS;                                          <<04869>>12075000
  STOPSPDSEN;                                                  <<01464>>12080000
                                                               <<04242>>12085000
  DITP.DSTATE := MODEMSIO;                                     <<01464>>12090000
  ENABLE;                                                      <<04242>>12095000
  TOS := WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                    <<01464>>12100000
  TOS := SYSDB + TEMP + MODSIOPTY;                             <<01464>>12105000
  STARTSIO;                                                    <<01464>>12110000
  DELAY(500D);                                                 <<01464>>12115000
                                                               <<01464>>12120000
  QMISCP.RSTATE := RQSTATE;                                    <<04869>>12125000
  IF DXCNTP < 54 THEN                                          <<04869>>12130000
     BEGIN                                                     <<04869>>12135000
     TANKDATA(0D, 54-DXCNTP, DXCNTP);                          <<04869>>12140000
     IF <> THEN                                                <<04869>>12145000
        RETURN;                                                <<04869>>12150000
     END;                                                      <<04869>>12155000
  IF DXCNTP < 65 THEN                                          <<04869>>12160000
     BEGIN                                                     <<04869>>12165000
     TEMP := WA0(DITP(DILTP) + ISIOP);                         <<04869>>12170000
     IF HP2631B7 THEN                                          <<04869>>12175000
        WA0(TEMP+18) := "k0"                                   <<04869>>12180000
     ELSE                                                      <<04869>>12185000
        WA0(TEMP+18) := "k1";  << USE 8-BIT METHOD >>          <<04869>>12190000
     TANKDATA(SIOADDR, 65-DXCNTP, DXCNTP-20);                  <<04869>>12195000
     IF <> THEN                                                <<04869>>12200000
        RETURN;                                                <<04869>>12205000
     END;                                                      <<04869>>12210000
  NEWFORM := 1;                                                <<04869>>12215000
  IF = THEN I := 67 ELSE I := 66; << TO FF OR NOT? >>          <<04869>>12220000
  TANKDATA(SIOADDR, I-DXCNTP, DXCNTP-60);                      <<04869>>12225000
  IF <> THEN                                                   <<04869>>12230000
     BEGIN                                                     <<04869>>12235000
     IF I = 67 THEN << WASN'T AT TOP OF FORM >>                <<04869>>12240000
        NEWFORM := 0; << SO FIX UP FOR NEXT TIME THROUGH >>    <<04869>>12245000
     RETURN;                                                   <<04869>>12250000
     END;                                                      <<04869>>12255000
  DPAGEEJECT := 1;                                             <<04869>>12260000
  QMISCP.RSTATE := WAITING;                                    <<04869>>12265000
  DISABLE;                                                     <<04869>>12270000
  DITP.DSTATE := WRITING;                                      <<04869>>12275000
  ENABLE;                                                      <<04869>>12280000
  STATREQUEST(DITP);                                           <<04869>>12285000
END;                                                           <<04869>>12290000
                                                               <<01464>>12295000
                                                               <<01464>>12300000
                                                               <<01464>>12305000
                                                               <<01464>>12310000
                                                               <<01464>>12315000
SUBROUTINE DOCRFF;                                             <<01464>>12320000
  BEGIN                                                        <<01464>>12325000
  IF DMODEMP.MODEM <> 0 AND NOT DSAVEPL.CC THEN                <<02861>>12330000
     RETURN;                                                   <<02861>>12335000
  TANKDATA(SIOADDR,2,5);                                       <<01464>>12340000
  IF HP2631B THEN                                              <<04869>>12345000
     BEGIN                                                     <<04869>>12350000
     QMISCP.RSTATE := WAITING;                                 <<04869>>12355000
     DITP(DLDEV).DOSTATREQ := 1;                               <<04869>>12360000
     END;                                                      <<04869>>12365000
  STARTWRITE;                                                  <<01464>>12370000
  END;                                                         <<01464>>12375000
                                                               <<01464>>12380000
                                                               <<01464>>12385000
SUBROUTINE CLRSPECL;                                                    12390000
BEGIN                                                                   12395000
   TOS:=IOQP(QPAR2)&LSR(8);                                             12400000
   X:=MAXSPECL;                                                         12405000
   WHILE  >= AND S0<>SPECLCHAR(X)  DO   X:=X-1;                         12410000
   IF < THEN    <<NOT IN ADCC SPECL CHAR LIST,OK TO CLEAR>>             12415000
   BEGIN                                                                12420000
      TEMP:=WA0(DITP(DILTP)+ISIOP);                                     12425000
      WA0(TEMP+13):=TOS;                                                12430000
      WA0(TEMP+SYNSTRT):=[8/4,8/4]; <<CLR SPECL CHAR INSTR>>            12435000
      WA0(X:=X+1):=1;                                                   12440000
      WA0(X:=X+1):=1;                                                   12445000
      WA0(X:=X+1):=[1/1,1/1,1/1,13/0]; <<RIGHT BYTE>>                   12450000
      WA0(X:=X+1):=SYSDB+TEMP+13;                                       12455000
      WA0(X:=X+1):=[8/1,1/1,7/2];   <<INTERRUPT/HALT>>                  12460000
      WA0(X:=X+1):=20;     <<CODE FOR CNTRLFINI>>                       12465000
      DITP(DSIOPC):=SYSDB+TEMP+SYNSTRT;                        <<02861>>12470000
      STOPSPDSEN ;                                                      12475000
      DITP.DSTATE:=MODEMSIO;                                            12480000
      TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                           12485000
      TOS:=DITP(DSIOPC);                                                12490000
      STARTSIO;                                                         12495000
   END                                                                  12500000
      ELSE                                                              12505000
   DEL;      <<NOTHING TO CLEAR>>                                       12510000
END;                                                                    12515000
                                                                        12520000
SUBROUTINE TANKSYNCS;                                                   12525000
BEGIN                                                                   12530000
   TOS:=DITP(DSYNC).SCOUNT;     <<GET COUNT OF SYNC BYTES TO TANK>>     12535000
   DITP(X).SCOUNT:=0;           <<ZAP THEM LITTLE BUGS>>                12540000
   WHILE S0 <> 0 DO                                                     12545000
   BEGIN                                                                12550000
      TANKDATA(SIOADDR,1,18);   <<PUT A SYNC BYTE INTO TBUF>>  <<00637>>12555000
      IF <> THEN                <<NO ROOM FOR AMATEURS>>                12560000
      BEGIN                                                             12565000
         DITP(DSYNC).SCOUNT:=TOS; <<STORE NEW SYNC BYTE COUNT>>         12570000
         RETURN;                                                        12575000
      END;                                                              12580000
      TOS:=TOS-1;                                                       12585000
   END;                                                                 12590000
   DEL;                                                                 12595000
END;      <<--------------END OF TANKSYNCS---------------->>            12600000
                                                                        12605000
                                                                        12610000
                                                                        12615000
SUBROUTINE DOSPACE;                                                     12620000
  <<                                                                    12625000
    THIS SUBROUTINE PUTS THE SPECIFED CARRIAGE CONTROL CHARACTERS IN    12630000
    THE TERMINAL TANKS.                                                 12635000
                                                                        12640000
    RETURN CC - CCE = DATA TRANSFER COMPLETED                           12645000
                CCG = TOO MUCH DATA TO TANK NOW OR NO TBUF AVAILABLE    12650000
  >>                                                                    12655000
BEGIN                                                                   12660000
    CONTINUE:=TRUE;                                                     12665000
     IF HP2631B AND DPAGEEJECT = QPAGEEJECT THEN               <<04869>>12670000
       BEGIN  << TANK ESC SEQ TO OR NOT TO AUTO PAGE EJECT >>  <<01464>>12675000
       X := 3;                                                 <<01464>>12680000
       WHILE >= DO                                             <<01464>>12685000
         BEGIN                                                 <<01464>>12690000
         Q1(X) := ESCHP2631(X);                                <<01464>>12695000
         X := X-1;                                             <<01464>>12700000
         END;                                                  <<01464>>12705000
       Q1(2) := IF QPAGEEJECT THEN %30114 ELSE %30514;         <<01464>>12710000
       TANKDATA(Q1ADDR,6-DXCNTP,DXCNTP);                       <<01464>>12715000
       IF <> THEN RETURN;                                      <<01464>>12720000
       DPAGEEJECT := NOT DPAGEEJECT;                           <<01464>>12725000
       DXCNTP := 0;                                            <<01464>>12730000
       END;                                                    <<01464>>12735000
    IF DLASTPL.BWRITE THEN GOTO ALLDONE;                                12740000
    TEMP := 0;     << INDEX TO LF EOR SEQUENCE >>                       12745000
                                                                        12750000
    IF QPAR1P=1 THEN  << SPACE CONTROL IMBEDED IN BUFFER >>             12755000
      BEGIN                                                             12760000
        X := BCNT;                                                      12765000
        IF = THEN                                                       12770000
        BEGIN                                                           12775000
           CONTINUE:=FALSE;                                             12780000
           RETURN;                                                      12785000
        END;                                                            12790000
        PDISABLE;                                                       12795000
        TOS := Q1ADDR;     TOS := DATA'ADR(IOQP);                       12800000
        TOS := 1;    ASMB( MDS );     << FIRST WORD TO ARRAY Q1 >>      12805000
        PENABLE;                                                        12810000
        X := BQ1;   << GET FIRST BYTE >>                                12815000
      END                                                               12820000
    ELSE X := QPAR1P;   << PUT SPACE CONTROL IN X >>                    12825000
                                                                        12830000
    TOS := X;                                                  <<01464>>12835000
    NEWFORM := IF S0="1" THEN 1 ELSE 0;                        <<01464>>12840000
                                                               <<04869>>12845000
    IF DMODEMPL.NOSYNC OR HP2631B THEN                         <<04869>>12850000
  BEGIN                <<NO NEED TO PUT IN SYNCS FOR CR/LF>>            12855000
    IF (%300 <= S0 <= %317) AND HP2631B THEN                   <<04869>>12860000
      BEGIN    << FORM VFC SEQ >>                              <<01464>>12865000
      X := TOS;                                                <<04869>>12870000
      TOS := (X-%277) MOD 10 + %60;                            <<01464>>12875000
      IF X>%310 THEN TOS := TOS LOR %30400                     <<04239>>12880000
        ELSE TOS := TOS LOR %30000;                            <<01464>>12885000
       X := 3;                                                 <<01464>>12890000
       WHILE >= DO                                             <<01464>>12895000
         BEGIN                                                 <<01464>>12900000
         Q1(X) := ESCHP2631(X);                                <<01464>>12905000
         X := X-1;                                             <<01464>>12910000
         END;                                                  <<01464>>12915000
      Q1(2) := TOS;                                            <<01464>>12920000
      TANKDATA(Q1ADDR,7-DXCNTP,DXCNTP);                        <<01464>>12925000
      IF <> THEN RETURN;                                       <<04869>>12930000
      IF HP2631BFX THEN                                        <<04869>>12935000
         DITP(DLDEV).DOSTATREQ := 1;                           <<04869>>12940000
      GOTO ALLDONE;                                            <<04869>>12945000
      END;                                                     <<01464>>12950000
    X := TOS;                                                  <<04869>>12955000
    X := X-%53;                                                         12960000
    IF < THEN GOTO SINGLESPACE;                                         12965000
    IF = THEN GOTO DS1;    << "+" = %53 = NO LF >>                      12970000
    X := X - 2;  << X = CHAR - %55 >>                          <<04238>>12975000
    IF = THEN    << "-" = %55 = TRIPLE SPACE>>                 <<04238>>12980000
      BEGIN                                                    <<04238>>12985000
        X := 3;                                                <<04238>>12990000
        GOTO DS1;                                              <<04238>>12995000
      END;                                                     <<04238>>13000000
    X := X - 3;  << X = CHAR - %60 = DOUBLE SPACE >>           <<04238>>13005000
    IF = THEN   <<  "0" = %60 = DOUBLE SPACE >>                         13010000
      BEGIN                                                             13015000
         DISABLE;                                                       13020000
         IF RQSTATE=POSTSPACE THEN DCNTRLP.LFLAST:=1;                   13025000
         ENABLE;                                                        13030000
         X:=2;       GOTO DS1;   <<BABY GOGO! BABY GOGO!>>              13035000
      END;                                                              13040000
    X := X-1;    << X = CHAR - %61 >>                                   13045000
    IF = AND DTYPEPL.FORMFEED THEN  << "1" = TOP OF FORM >>             13050000
      TEMP := 4;   << OFFSET TO XOFF, CR AND FF >>                      13055000
    X := X-%237;    << X = CHAR - %320 >>                               13060000
    IF <> THEN   << NOT A %320 >>                                       13065000
      BEGIN                                                             13070000
        X := X+%120;   << X = CHAR - %200 >>                            13075000
        IF NOT (0<=X<=%77) THEN    << NOT MULTIPLE LINE FEEDS >>        13080000
SINGLESPACE:                                                            13085000
          X := 1;   << SET X TO SINGLE SPACE >>                         13090000
        DISABLE;                                                        13095000
        IF RQSTATE=POSTSPACE THEN DCNTRLP.LFLAST:=1;                    13100000
        ENABLE;                                                         13105000
DS1:                                                                    13110000
        SCNT := X + 2;   << LF COUNT + 2 FOR XOFF, CR >>                13115000
                                                                        13120000
        X := DXCNTP;  << NO XOFF IF TERM NOT HARD COPY >>               13125000
        IF = AND DTYPEP.TTYPE <> 6 THEN DXCNTP := DXCNTP + 1;  <<02047>>13130000
        I := (IF SCNT>4 THEN 4 ELSE SCNT) - DXCNTP;                     13135000
        IF > THEN  << ADD XOFF, CR, 1 OR 2 LF'S OR FF >>                13140000
          BEGIN                                                         13145000
            TANKDATA(SIOADDR,I,DXCNTP+TEMP);                            13150000
            IF <> THEN RETURN;   << GO WAIT REQUEST >>                  13155000
          END;                                                          13160000
                                                                        13165000
        WHILE DXCNTP<SCNT DO                                            13170000
          BEGIN                                                         13175000
            TANKDATA(SIOADDR,1,2);   << APPEND LINE FEEDS >>            13180000
            IF <> THEN RETURN;  << GO WAIT REQUEST >>                   13185000
          END;                                                          13190000
      IF HP2631BFX THEN                                        <<04869>>13195000
         DITP(DLDEV).DOSTATREQ := 1;                           <<04869>>13200000
      END;                                                              13205000
  END                                                                   13210000
     ELSE                                                               13215000
  BEGIN                <<TERMINAL REQUIRES SYNC BYTES FOR CR/LF>>       13220000
     X := TOS;                                                 <<04869>>13225000
     L1 := X;                                                  <<01823>>13230000
     X:=X-%320;                                                         13235000
     IF <> THEN                                                         13240000
     BEGIN             <<NOT TO SUPPRESS CR/LF>>                        13245000
        X:=DITP(DMONTR).SYNCSTATE;                             <<00637>>13250000
        IF = THEN                                                       13255000
        BEGIN          <<TANK XOFF/CR FIRST,THEN SYNC BYTES>>           13260000
           X:=DITP(DSYNC).SCOUNT;                                       13265000
           IF = THEN                                                    13270000
           BEGIN       <<XOFF/CR HAS NOT BEEN TANKED>>                  13275000
              X:=DXCNTP;                                                13280000
              IF = AND DTYPEP.TTYPE = 6 THEN                   <<02047>>13285000
                 TANKDATA(SIOADDR,2,0)  <<PUT XOFF/CR >>       <<02047>>13290000
              ELSE                                             <<02047>>13295000
                 TANKDATA(SIOADDR,1,1); <<PUT CR      >>       <<02047>>13300000
              IF <> THEN RETURN;  <<TOO MUCH ALREADY TANKED>>           13305000
              TOS:=DITP(DSYNC).CRSYNC;  <<GET CR SYNC BYTES COUNT>>     13310000
              IF S0 > 7 THEN TOS:=(TOS-6)*5;                            13315000
              DITP(DSYNC).SCOUNT:=TOS;                                  13320000
           END;                                                         13325000
           TANKSYNCS;  <<TANK SYNC BYTES REQUIRED FOR CR>>              13330000
           IF <> THEN RETURN;  <<NO ROOM FOR ALL THEM SYNCS>>           13335000
           DITP(DMONTR).SYNCSTATE:=1;<<SET STATE TO TANK LF'S>><<00637>>13340000
        END;                                                            13345000
                                                                        13350000
        IF DITP(DMONTR).SYNCSTATE=1 THEN                       <<00637>>13355000
        BEGIN          <<FINISHED TANKING XOFF/CR/SYNC,START LF'S>>     13360000
           X := L1;    <<RESTORE CARRIAGE CNTRL BYTE>>         <<01823>>13365000
           X:=X-%53;                                                    13370000
           IF < THEN X:=1  <<SINGLESPACE>>                              13375000
              ELSE                                                      13380000
           IF = THEN BEGIN  <<"+"=%53: NO LF>>                 <<00637>>13385000
                        DITP(DMONTR).SYNCSTATE:=0;             <<00637>>13390000
                        GO TO ALLDONE;                         <<02047>>13395000
                     END                                       <<00637>>13400000
              ELSE                                                      13405000
           BEGIN                                                        13410000
             X := X - 2;  <<X = CHAR-%55>>                     <<04235>>13415000
             IF = THEN X := 3  <<"-"=%55: TRIPLE SPACE>>       <<04235>>13420000
                ELSE                                           <<04235>>13425000
             BEGIN                                             <<04235>>13430000
                X := X - 3;  <<X = CHAR-%60>>                  <<04235>>13435000
                IF = THEN X := 2  <<<"0"=%60: DOUBLE SPACE>>   <<04235>>13440000
                 ELSE                                                   13445000
              BEGIN                                                     13450000
                 X:=X-1;     <<X=CHAR-%61>>                             13455000
                 IF = THEN   <<FORMFEED SPECIFIED>>                     13460000
                 BEGIN                                                  13465000
                    IF DTYPEPL.FORMFEED THEN                            13470000
                    BEGIN    <<OK TO DO IT>>                            13475000
                       TOS:=DSPEEDP.OUTSPEED;                           13480000
                       DO X:=X+1 UNTIL S0=SPDCODE(X);                   13485000
                       <<FIND ADCC SPD CODE ARRAY INDEX>>               13490000
                       DEL;    TOS:=FFSYNCS(X); <<GET SYNC COUNT>>      13495000
                       IF DTYPEP.TTYPE=18 THEN S0:=0;          <<04825>>13500000
                       DITP(DSYNC).SCOUNT := TOS;              <<02084>>13505000
                       TANKDATA(SIOADDR,1,6);   <<PUT FF INTO TBUF>>    13510000
                    END                                                 13515000
                       ELSE                                             13520000
                    BEGIN    <<DUMMY DOES NOT DO FF>>                   13525000
                       TOS:=DITP(DSYNC).LFSYNC;                         13530000
                       IF S0 > 7 THEN TOS:=(TOS-6)*5;                   13535000
                       DITP(DSYNC).SCOUNT := TOS;              <<02084>>13540000
                       TANKDATA(SIOADDR,1,2);   <<TANK A LF INSTEAD>>   13545000
                    END;                                                13550000
                    IF <> THEN RETURN;  <<OUT OF ROOM IN TBUFS>>        13555000
                                                               <<02084>>13560000
                    X:=0;    <<NO MORE LF'S NECESSARY>>                 13565000
                 END                                                    13570000
                    ELSE                                                13575000
                 BEGIN                                                  13580000
                    X:=X-%117;                                          13585000
                    <<X=CHAR-%200>>                                     13590000
                    IF NOT (0<=X<=%77) THEN X:=1; <<NOT MULTIPLE LF'S>> 13595000
                 END;                                                   13600000
              END;                                                      13605000
             END;                                              <<04235>>13610000
           END;                                                         13615000
           TOS:=X;  <<STORE COUNT OF LF'S TO TANK>>                     13620000
           TOS.SYNCSTATE:=2;  <<SET STATE TO START TANKING LF'S>>       13625000
           DITP(DMONTR).(2:14):=TOS;                           <<01449>>13630000
        END;                                                            13635000
                                                                        13640000
        IF DITP(DMONTR ).SYNCSTATE=2 THEN                      <<00637>>13645000
        BEGIN   <<START TANKING LF'S AND SYNC BYTES>>                   13650000
           TANKSYNCS;   <<TANK SYNC BYTES IF NECESSARY>>                13655000
           IF <> THEN RETURN;                                           13660000
           WHILE DITP(DMONTR ).LFCOUNT <> 0 DO                 <<00637>>13665000
           BEGIN        <<TANK A LF>>                                   13670000
              TANKDATA(SIOADDR,1,2);  <<PUT LF INTO TBUF>>              13675000
              IF <> THEN RETURN;                                        13680000
              TOS:=DITP(DMONTR );                              <<00637>>13685000
              TOS:=TOS-1; <<DECREMENT REMAINING LF COUNT>>              13690000
              DITP(X):=TOS;                                             13695000
              TOS:=DITP(DSYNC).LFSYNC;                                  13700000
              IF S0>7 THEN TOS:=(TOS-6)*5;                              13705000
              DITP(DSYNC).SCOUNT:=TOS;                                  13710000
              TANKSYNCS;  <<TANK REQUIRED SYNC BYTES AFTER A LF>>       13715000
              IF <> THEN RETURN;                                        13720000
           END;                                                         13725000
           DITP(DMONTR).(2:14):=0; <<CLEAR STATE AND LF COUNT>><<01449>>13730000
        END;                                                            13735000
     END;                                                               13740000
  END;                                                                  13745000
                                                                        13750000
ALLDONE:                                                                13755000
    ASMB(DZRO,CMP );   << SET CC = CCE >>                               13760000
  END;    <<---------------------END OF DOSPACE----------------------->>13765000
INTEGER SUBROUTINE PINWORD;                                             13770000
  <<                                                                    13775000
     THIS SUBROUTINE RETURNS THE PIN OF THE MAIN PROCESS TO WHICH       13780000
     THE DEVICE IS CURRENTLY ATTACHED.                                  13785000
  >>                                                                    13790000
    BEGIN                                                               13795000
      RESETDB(-1);                                                      13800000
      TEMP := EXCHANGEDB(LDTDST);                                       13805000
      PINWORD :=WA0(WA0.ESIZE*LDEV+1);                                  13810000
      TOS := EXCHANGEDB(TEMP);   << RESTORE DB >>                       13815000
      ASMB( PCAL SETSYSDB );   DEL;                                     13820000
    END;    << MAIN PIN >>                                              13825000
                                                                        13830000
                                                                        13835000
                                                                        13840000
                                                                        13845000
                                                                        13850000
                                                                        13855000
SUBROUTINE READDONE ;                                                   13860000
BEGIN                                                                   13865000
   CONTINUE:=TRUE;    <<PRESUMED INNOCENCE UNLESS PROVEN OTHERWISE>>    13870000
   TOS:=IF DRBCTP<DBCNTP THEN DRBCTP ELSE DBCNTP;                       13875000
                      <<NUMBER OF BYTES TO XSFER INTO CALLER'S STACK>>  13880000
   WCNT:=(S0+1)&LSR(1);                                                 13885000
   BCNT:=TOS;                                                           13890000
   IF LOGICAL(BCNT) THEN                                                13895000
   BEGIN              <<ODD NUMBER OF BYTES MOVED INTO CALLER'S STACK>> 13900000
      X:=DITP(DHEAD);                                                   13905000
      TEMP:=BCNT/TBMAXB;  <<NUMBER OF COMPLETELY FILLED TBUFS>>         13910000
      WHILE > DO          <<GET TO THE LAST LINKED TBUF>>               13915000
      BEGIN                                                             13920000
         X:=WA0(X);                                                     13925000
         TEMP:=TEMP-1;                                                  13930000
      END;                                                              13935000
      TEMP:=(BCNT MOD TBMAXB) + (X+2)&LSL(1);                           13940000
      <<TBUF BYTE ADDR TO PUT CALLER'S LAST BYTE TO FORM LAST WORD>>    13945000
      PDISABLE;           <<TURN OFF YOUR CHARMS>>                      13950000
      TOS:=Q1ADDR;        <<ADDRESS OF TEMPORARY STORAGE>>              13955000
      TOS:=DATA'ADR(IOQP);<<STARTING ADDRESS OF CALLER'S STACK>>        13960000
      TOS:=TOS+WCNT-1;    <<ADDR WHERE LAST WORD WILL GO>>              13965000
      TOS:=1;                                                           13970000
      ASMB(MDS);          <<GET THAT LAST WORD FROM CALLER'S STACK      13975000
                            INTO TEMPORARY STORAGE>>                    13980000
      BA0(TEMP):=Q1;      <<XSFER THAT LAST BYTE INTO THE TBUF>>        13985000
      PENABLE;            <<DAZZLE THEM CHICKS>>                        13990000
   END;                                                                 13995000
                                                                        14000000
   X:=DBCNTP;                                                           14005000
   IF <> THEN                                                           14010000
   IF IOQP.READERRORS<BRKEND AND IOQP(QPAR2).BINARY=0 THEN              14015000
   BEGIN      <<NO BAD ERRORS AND NOT BINARY,CHECK FOR EOR>>            14020000
      EOFCHECK(IOQP,DOUBLE(DITP(DHEAD)+SYSDB2),-DBCNTP,1);              14025000
      IF <> THEN          <<AN EOF HAS BEEN DETECTED>>                  14030000
      BEGIN                                                             14035000
         IF < THEN        <<BACK UP AND SAVE DATA>>                     14040000
         BEGIN                                                          14045000
            DITP(DRCNT):=DBCNTP;  <<SAVE TOTAL COUNT OF DATA READ>>     14050000
            TOS:=DITP(DHEAD);    DITP(X):=0;                            14055000
            DITP(DRPTR):=TOS;                                           14060000
            DBCNTP:=0;    <<SO NO TBUFS WILL BE RETURNED>>              14065000
         END;                                                           14070000
         RETURNBUFS;      <<RETURN TBUFS IF DBCNT<>0 >>                 14075000
         IF IOQP(QPAR2)&LSR(8)<>0 THEN CLRSPECL;                        14080000
         SETSTATUS(IOQP(QSTAT));                                        14085000
         CONTINUE:=FALSE;                                               14090000
      END;                                                              14095000
   END;                                                                 14100000
                                                                        14105000
   IF CONTINUE THEN                                                     14110000
   BEGIN                                                                14115000
      X:=QWBCTP;                                                        14120000
      QWBCTP:=IF > THEN WCNT ELSE -BCNT;                                14125000
                          <<LOG ACTUAL WORD OR BYTE COUNT READ>>        14130000
      PDISABLE;                                                         14135000
      TOS:=DATA'ADR(IOQP);                                              14140000
      TADDR:=TOS;                                                       14145000
      TEMP:=TOS;                                                        14150000
      SCNT:=IF IOQPL.SYSBUFR THEN 128 ELSE WCNT;                        14155000
            <<REMAINING BYTES IN CURRENT BLOCK TO XSFER>>               14160000
      TCNT:=TBMAXW;                                                     14165000
      TBASE:=DITP(DHEAD)+SYSDB2;                                        14170000
      WHILE WCNT > 0 DO  <<THERE IS RD DATA TO XSFER INTO CALLERSTACK>> 14175000
      BEGIN                                                             14180000
         I:=WCNT;        <<I IS THE SIZE OF EACH MOVE>>                 14185000
         IF I>TCNT THEN I:=TCNT; <<MOVE BLKSIZE CONSTRAINED BY TBUFSIZ>>14190000
         IF I>SCNT THEN I:=SCNT; <<BLKSIZE CONSTRAINED BY END OF SYSBF>>14195000
         TOS:=TEMP;                                                     14200000
         TOS:=TADDR;   <<SET UP DESTINATION DST# & OFFSET IN SEGMENT>>  14205000
         TOS:=6;       <<DST# OF ALL OF MEMORY>>                        14210000
         TOS:=TBASE;   <<SOURCE TBUF DST# AND OFFSET>>                  14215000
         TOS:=I;                                                        14220000
         ASMB(MDS);    <<PUT ON YOUR MOVES>>                            14225000
         WCNT:=WCNT-I; <<UPDATE REMAINING WORD COUNT TO XSFER>>         14230000
         IF <> THEN                                                     14235000
         BEGIN                                                          14240000
            TBASE:=TBASE+I;                                             14245000
            TADDR:=TADDR+I;                                             14250000
            TCNT:=TCNT-I;                                               14255000
            IF = THEN                                                   14260000
            BEGIN      <<FINISHED EMPTYING A TBUF>>                     14265000
               TBASE:=WA0(TBASE-TBMAXW-SYSDB2)+SYSDB2;                  14270000
               <<ADDRESS OF NEXT LINKED TBUF>>                          14275000
               TCNT:=TBMAXW;                                            14280000
            END;                                                        14285000
            SCNT:=SCNT-I;                                               14290000
            IF = THEN                                                   14295000
            BEGIN      <<FINISHED EMPTYING A SYSBUF>>                   14300000
               TADDR:=SBUF(TADDR-129);                                  14305000
               SCNT:=128;                                               14310000
            END;                                                        14315000
         END;                                                           14320000
      END;                                                              14325000
      PENABLE;                                                          14330000
      DISABLE;                                                          14335000
      IF DMODEMPL.NOSYNC THEN DITP(DSYNC):=80;                          14340000
      RETURNBUFS;                                                       14345000
      IF IOQP(QPAR2)&LSR(8)<>0 THEN CLRSPECL;                           14350000
      SETSTATUS(READSTATUS(IOQP.READERRORS));                           14355000
   END;                                                                 14360000
END;     <<-------------END OF READDONE--------------->>                14365000
                                                                        14370000
                                                                        14375000
                                                                        14380000
SUBROUTINE SETBAUDRATE;                                                 14385000
BEGIN                                                                   14390000
   TEMP:=WA0(DITP(DILTP)+ISIOP);                                        14395000
   WA0(TEMP+8).LEFTHLF:=DSPEEDP.OUTSPEED;                               14400000
   WA0(X).(12:4)      :=DSPEEDP.INSPEED;   <<SET UP SEND/RECV CODES>>   14405000
   WA0(TEMP+4) := UART;                                        <<02032>>14410000
   DITP(DSIOPC):=SYSDB+TEMP+WRTSPD;                                     14415000
   STOPSPDSEN ;                                                         14420000
   IF SYSUP THEN                                                        14425000
  BEGIN     <<SYSTEM IS UP,TIMER HAS BEEN ENABLED>>                     14430000
   ENABLE;                                                              14435000
   DELAY(500D);                                                         14440000
  END;                                                                  14445000
                                                                        14450000
   DITP.DSTATE:=MODEMSIO;                                               14455000
   TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                              14460000
   X:=ABS(S0*4+3).IDLESIO;                                              14465000
   IF <> THEN SUDDENDEATH(209);                                <<01539>>14470000
   TOS:=DITP(DSIOPC);                                                   14475000
   STARTSIO;                                                            14480000
END;                                                                    14485000
                                                                        14490000
                                                                        14495000
SUBROUTINE SERVONLINE ;                                                 14500000
BEGIN                                                                   14505000
   TEMP:=DITP(DSAVE).HSTATE;  <<CHECK DEVICE HANGUP STATE>>             14510000
   IF = OR TEMP= LOGGINGON THEN                                         14515000
      IF LPDT(LDEV*2+1).DEVREC=0 AND LPDT(X).ACCEPTING<>0 THEN          14520000
      <<DEVICE NOT OWNED,JOBS AND DATA ARE ACCEPTED>>                   14525000
      BEGIN                                                             14530000
         DISABLE;                                                       14535000
         LPDT(X).SERVREQ:=1;                                            14540000
         LPDT(1):=LPDT(1)+1;                                            14545000
         <<REQUEST DEVREC SERVICE AND INCREMENT SERVICE REQST COUNTER>> 14550000
         ENABLE;                                                        14555000
         SETTERMTYPE(DLASTP.TERMINALTYPE,DITP(DCNT),DITP(X),DITP);      14560000
         <<ADCC SPEED CODE WAS PUT INTO DCNT BY TIP>>                   14565000
         IF <> THEN                                                     14570000
         BEGIN          <<CONFIGURE AS UNDEFINED DEVICE>>               14575000
            SETTERMTYPE(UNDEFINED,DITP(X),DITP(X),DITP);                14580000
            IF <> THEN SUDDENDEATH(207);                       <<01539>>14585000
         END;                                                           14590000
         DISABLE;                                              <<04242>>14595000
         DITP.UP:=1;     <<TERMINAL READY TO DO I/O>>                   14600000
         ENABLE;                                               <<04242>>14605000
         DSPEEDP.SPDSENSING:=0;                                         14610000
         DITP(DSAVE).HSTATE:=LOGGINGON;                                 14615000
         STARTTIMEOUT(LOGONTO,DITP);                                    14620000
         AWAKE(DEVRECPCBP,JUNKWAIT,NOWAIT);                             14625000
         IF NOT DMODEMPL.NOSYNC THEN DITP(DSYNC).SCOUNT:=0;    <<00637>>14630000
         TEMP:=WA0(DITP(DILTP)+ISIOP);                         <<00637>>14635000
         WA0(TEMP+8).LEFTHLF:=DSPEEDP.OUTSPEED;                <<00637>>14640000
         WA0(X).(12:4):=DSPEEDP.INSPEED;                       <<00637>>14645000
         STOPSPDSEN;                                           <<00637>>14650000
         DITP.DSTATE:=MODEMSIO;                                <<00637>>14655000
         IF DCNTRLPL.PTYONODD=%2 THEN  <<PTY ON,ODD PTY=0>>    <<00637>>14660000
            WA0(TEMP+4):=%11003  <<UART CNTRL:7 BITS,EVEN PTY>><<00637>>14665000
            ELSE WA0(TEMP+4):=%14403;  <<8 BITS,NO PTY>>       <<00637>>14670000
         IF DSPEEDP.OUTSPEED = %17 THEN << 110 BAUD >>         <<01994>>14675000
            WA0(TEMP+4).SBS := 1; << SET TWO STOP BITS >>      <<01994>>14680000
         TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;               <<00637>>14685000
         X:=ABS(S0*4+3).IDLESIO;                               <<00637>>14690000
         IF <> THEN SUDDENDEATH(209);                          <<00637>>14695000
         TOS := SYSDB + TEMP + WRTSPD;                         <<01994>>14700000
         STARTSIO;                                             <<00637>>14705000
      END;                                                     <<00637>>14710000
      CHECKSERV:=TRUE;   <<GO SERVICE NEW REQUEST>>                     14715000
   END;       <<-----------END OF ONLINE------------>>                  14720000
                                                                        14725000
                                                                        14730000
                                                                        14735000
                                                                        14740000
                                                                        14745000
SUBROUTINE RETURNWRTIOQ ;                                               14750000
BEGIN                                                                   14755000
   RETURNBUFS;       <<RETURN ANY OUTSTANDING TBUFS>>                   14760000
   X:=@IOQP;                                                            14765000
   IF <> THEN                                                           14770000
      IF %30<=RQSTATE<=%37 THEN                                         14775000
      BEGIN          <<WRITE RQST NOT COMPLETED DUE TO DATA STILL       14780000
                       BEING TANKED>>                                   14785000
         QWBCTP:=0;                                                     14790000
         SETSTATUS(ABORTED); <<RETURN IOQ,SET FLAG TO                   14795000
                                         SERVICE NEXT IOQ>>             14800000
      END;                                                              14805000
   END;        <<---------END OF RETURNWRTIOQ---------->>               14810000
                                                                        14815000
                                                                        14820000
SUBROUTINE RESET'SPEC'CHAR;                                    <<02864>>14825000
   BEGIN                                                       <<02864>>14830000
   TEMP := WA0(DITP(DILTP)+ISIOP);                             <<02864>>14835000
   WA0(TEMP+12) := %15412;  << ESCAPE AND LINE FEED >>         <<02864>>14840000
   WA0(X:=X+1) := ";:";                                        <<02864>>14845000
   WA0(TEMP + NEWSPECCHAR) := [8/4, 8/5]; << SET SPEC CHAR  >> <<02864>>14850000
   WA0(X:=X+1) := 4;  << FOUR CHARACTERS TO ADD >>             <<02864>>14855000
   WA0(X:=X+1) := 1;  << TERMINATION JUMP OF ZERO >>           <<02864>>14860000
   WA0(X:=X+1) := [1/1,1/0,1/1,3/0,10/0]; << LEFT BYTE, UPD >> <<02864>>14865000
   WA0(X:=X+1) := SYSDB+TEMP+12;                               <<02864>>14870000
   WA0(X:=X+1) := [8/1,1/1,7/2]; << INTERRUPT HALT TO CPVA 2>> <<02864>>14875000
   WA0(X:=X+1) := 10;  << DONE RESETTING CHAR SET >>           <<02864>>14880000
   TOS := WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                   <<02864>>14885000
   X := ABS(S0*4 + 3).IDLESIO;                                 <<02864>>14890000
   IF <> THEN SUDDENDEATH(209);                                <<02864>>14895000
   TOS := SYSDB + TEMP + NEWSPECCHAR;                          <<02864>>14900000
   STARTSIO;                                                   <<02864>>14905000
   END;                                                        <<02864>>14910000
                                                                        14915000
                                                                        14920000
SUBROUTINE SERVTO(TO'TYPE); VALUE TO'TYPE; INTEGER TO'TYPE;    <<01822>>14925000
BEGIN                                                                   14930000
   IF TO'TYPE = READTO THEN STOPTIMEOUT(READTIMEOUT, DITP)     <<01822>>14935000
                       ELSE STOPTIMEOUT(BLOCKTIMEOUT, DITP);   <<01822>>14940000
   DISABLE;                                                             14945000
   IF TO'TYPE = READTO THEN DITP(DRTMAX) := 0                  <<01822>>14950000
                       ELSE DITP(DBTIME) := 0;                 <<01822>>14955000
   X:=@IOQP;                                                            14960000
   IF <> AND QMISCP.RSTATE=READING AND QMISCP.READSTOP<READTOSTOP THEN  14965000
   BEGIN                                                                14970000
      TOS:=QMISCP;                                                      14975000
      TOS.READSTOP := IF TO'TYPE = READTO THEN READTOSTOP      <<01822>>14980000
                                          ELSE BLOCKTOSTOP;    <<01822>>14985000
      TOS.NOSTOP:=1;              <<NO MORE PREEMPTS,ABORTS ACCEPTED>>  14990000
      QMISCP:=TOS;                                                      14995000
      IF NOT DMODEMPL.RDCOUNTED THEN                                    15000000
      BEGIN           <<STOP NON-BLOCKMODE READ>>                       15005000
         HALTSIO;  <<HALT SIO PROG>>                           <<04244>>15010000
            RESET'SPEC'CHAR; << RE-ENABLE FOUR SPEC CHARS >>   <<02864>>15015000
            ENABLE;   <<SIO PROG WAS HALTED SUCCESSFULLY>>              15020000
            DTYPEP.TIMING:=0;                                           15025000
            IF <> THEN                                                  15030000
            BEGIN     <<TIME AT START OF READ HAS BEEN RECORDED>>       15035000
               TOS:=TIMER-DITPD(DRTIMED);                               15040000
               TOS:=10;                                                 15045000
               ASMB(LDIV,DEL);  <<DIVIDE MSEC BY 10 TO GET HUNDREDTHS   15050000
                                  OF A SECOND>>                         15055000
               IF OVERFLOW THEN                                         15060000
               BEGIN  <<READ TIME TOO LARGE>>                           15065000
                  DEL;                                                  15070000
                  TOS:=-1;                                              15075000
               END;                                                     15080000
               DITP(DRTIME):=TOS;                                       15085000
            END;                                                        15090000
            IF DITP(DTRLX).READTRLX<>0 THEN                             15095000
            BEGIN                                                       15100000
               DITP(DRTMAX):=0;                                         15105000
               STOPTIMEOUT(READTIMEOUT,DITP);                           15110000
            END;                                                        15115000
            DISABLE;                                           <<04242>>15120000
            DITP.PAIR:=1;   <<ME AND YOU,ME AND YOU,BABE!>>             15125000
            ENABLE;                                            <<04242>>15130000
            IF = OR DTYPEP.PAIRCODE<>XOFFPAIR THEN                      15135000
               DTYPEP.PAIRCODE:=NOTREADING;                             15140000
            DMODEMP.PRIMED:=0;                                          15145000
            RETURNBUFS;                                                 15150000
            <<********CHECKTQUEUE********>>                             15155000
            IOQP.READERRORS := TO'TYPE;                        <<01822>>15160000
            QWBCTP:=0;                                                  15165000
            DISABLE;                                           <<04242>>15170000
            DITP.DSTATE:=NULL;                                          15175000
            ENABLE;                                            <<04242>>15180000
            IF DMODEMPL.NOSYNC THEN DITP(DSYNC):=80;                    15185000
            IF TO'TYPE = READTO THEN SETSTATUS(TIMEDOUT)       <<01822>>15190000
                                ELSE SETSTATUS(BLOCKTIMED);    <<01822>>15195000
                                                               <<04244>>15200000
      END;                                                              15205000
   END;                                                                 15210000
END;        <<------------END OF READTO------------->>                  15215000
                                                                        15220000
                                                                        15225000
                                                                        15230000
                                                                        15235000
                                                                        15240000
SUBROUTINE SERVDSETRDY;                                                 15245000
BEGIN                                                                   15250000
   IF DSAVEPL.NOTLOGON THEN                                    <<02861>>15255000
      BEGIN                                                    <<02861>>15260000
      DSAVEPL.NOTLOGON := 0;                                   <<02861>>15265000
      STOPTIMEOUT(LOGONTO, DITP);                              <<02861>>15270000
      CHECKSERV := TRUE;                                       <<02861>>15275000
      RETURN;                                                  <<02861>>15280000
      END;                                                     <<02861>>15285000
   IF DITP(DSAVE).HSTATE=0 AND LPDT(LDEV*2+1).ACCEPTING<>0 AND <<01046>>15290000
   NOT DITPL(DSAVE).CCON THEN                                  <<01046>>15295000
   BEGIN                                                                15300000
      DITP(DSAVE).HSTATE:=LOGGINGON;                                    15305000
      STARTTIMEOUT (LOGONTO,DITP);                                      15310000
   END;                                                                 15315000
   IF DMODEMPL&CSL(M202) THEN                                           15320000
   BEGIN     <<TURN 202 AROUND TO SEND STATE>>                          15325000
      MODCONTROL(WRITING,DITP);   <<CLEAR SA>>                          15330000
      MODCONTROL(TRANSMIT,DITP);  <<RAISE CA>>                          15335000
      DELAY (2000D);              <<LET CF RISE AT TERMINAL>>           15340000
      MODCONTROL(READING,DITP);   <<DROP CF AT TERMINAL>>               15345000
      WHILE DITPL.MODACTIVE DO;                                <<01932>>15350000
      STOPSPDSEN;                                              <<01932>>15355000
      DSPEEDP.RESTSPD := 0;                                    <<01932>>15360000
      IDLEWAIT(DITP);             << START SPEEDSENSE      >>  <<01932>>15365000
   END                                                                  15370000
      ELSE                                                              15375000
   BEGIN                                                       <<00848>>15380000
      DISABLE;                                                 <<00848>>15385000
      IF NOT DCNTRLPL.SPDSIO THEN IDLEWAIT(DITP);              <<00848>>15390000
      ENABLE;                                                  <<00848>>15395000
   END;                                                        <<00848>>15400000
   CHECKSERV:=TRUE;                                                     15405000
END;    <<------------END OF SERVDSETRDY--------------------->>         15410000
                                                                        15415000
                                                                        15420000
                                                                        15425000
                                                                        15430000
                                                                        15435000
SUBROUTINE INITERM;                                                     15440000
BEGIN                                                                   15445000
   DISABLE;                                                             15450000
   DITP(DMONTR).CFAILCNT:=0;  <<CLR CF FAIL COUNTER>>                   15455000
   DMODEMP:=DMODEMPL LAND %70000;                              <<00848>>15460000
   <<CLR PREMPT,NOSYNC,RD/WRTCOUNTED,PRIMED,TMODE,LPLEVEL>>             15465000
   DITP(DSAVE).(0:15):=0;     <<CLR HSTATE,WAITEDSTATE>>       <<01046>>15470000
   DCNTRLP.PTYON:=0;                                                    15475000
   DTYPEP.TTYPE:=DLASTP.TERMINALTYPE;                                   15480000
   IF DMODEMPL&CSL(M202) THEN                                           15485000
   BEGIN                                                                15490000
      MODCONTROL(INITDSET,DITP);                                        15495000
   END                                                                  15500000
      ELSE                                                              15505000
   BEGIN                                                                15510000
      IF DITP.DSTATE=NULL THEN                                          15515000
      BEGIN                                                             15520000
         STOPSPDSEN ;                                                   15525000
         DSPEEDP.RESTSPD:=0;                                            15530000
         IF DMODEMP.MTYPE=1 OR DMODEMP.MTYPE=5 THEN            <<01534>>15535000
                 MODCONTROL(INITDSET,DITP) <<NON-SPEEDSEN>>    <<01534>>15540000
            ELSE                                               <<00848>>15545000
         IDLEWAIT(DITP);                                                15550000
      END;                                                              15555000
   END;                                                                 15560000
                                                                        15565000
   CHECKSERV:=TRUE;  <<SERVICE NEXT OR FINISH OFF CURRENT RQST>>        15570000
END;     <<----------END OF INITERM------------------->>                15575000
                                                                        15580000
                                                                        15585000
                                                                        15590000
                                                                        15595000
                                                                        15600000
SUBROUTINE SERVHANGUPTO;                                                15605000
BEGIN                                                                   15610000
   STOPTIMEOUT(HANGUPTO,DITP);                                          15615000
   IF DITP(DSAVE).HSTATE=HANGUPTURN THEN                                15620000
   BEGIN          <<202 TURN TO READ IS COMPLETED>>                     15625000
      MODCONTROL(HANGUP,DITP);                                          15630000
      DITP(DSAVE).HSTATE:=HANGINGUP;                                    15635000
      STARTTIMEOUT(HANGUPTO,DITP);                                      15640000
      CHECKSERV:=TRUE;                                                  15645000
   END                                                                  15650000
      ELSE                                                              15655000
      INITERM;                                                          15660000
END;                                                                    15665000
                                                                        15670000
                                                                        15675000
                                                                        15680000
                                                                        15685000
                                                                        15690000
SUBROUTINE SERVDISCNCT;                                        <<02860>>15695000
BEGIN                                                                   15700000
   IF DITP(DSAVE).HSTATE < HANGUPTURN THEN                              15705000
  BEGIN                                                                 15710000
   DISABLE;                                                             15715000
   HALTSIO;  <<HALT SIO PROG>>                                 <<04244>>15720000
   RESET'SPEC'CHAR; << RE-ENABLE THE FOUR SPECIAL CHARS >>     <<02864>>15725000
                                                               <<04242>>15730000
   TOS:=DITPL LAND %176200;                                             15735000
   TOS.PAIR:=0;                                                         15740000
   DITP:=TOS;                                                           15745000
   ENABLE;                                                     <<04242>>15750000
    DTYPEP.WAITXON := 0;                                       <<01464>>15755000
   DTYPEP.PAIRCODE:=NOTREADING;                                         15760000
   CLEANUP;                                                             15765000
   X:=DITP(DRPTR);                                                      15770000
   WHILE <> DO                                                          15775000
   BEGIN          <<RETURN ANY SAVED TBUFS>>                            15780000
      TOS:=X;                                                           15785000
      X:=WA0(X);                                                        15790000
      RETURNTBUF(*);                                                    15795000
   END;                                                                 15800000
   DITP(DRPTR):=0;                                                      15805000
   DISABLE;                                                             15810000
   DITP(DLDEV).FLUSH:=0;                                                15815000
   TOS:=DSPEEDP;                                                        15820000
   TOS.TAPEMODE:=0;                                                     15825000
   TOS.ECHO:=1;                                                         15830000
   TOS.SSBRKOK:=0;                                                      15835000
   TOS.BRKOK:=0;                                                        15840000
   DSPEEDP:=TOS;                                                        15845000
   TOS:=LPDTD(LDEV);                                                    15850000
   TOS := TOS LAND %173017;<<CLEAR EOF,(SS)BRK,LOGON)>>        <<02860>>15855000
   LPDTD(X):=TOS;                                                       15860000
   ENABLE;                                                              15865000
                                                               <<01449>>15870000
   IF DITP(DSAVE).HSTATE <> CLOSED AND                         <<02872>>15875000
      DITP(DMONTR).LOGONTYPE <> NULL THEN                      <<02872>>15880000
   BEGIN                                                       <<02872>>15885000
       X:=PINWORD.MAINPIN*PCBSIZE;                             <<02872>>15890000
       IF <> THEN                                              <<02872>>15895000
       BEGIN                                                   <<02872>>15900000
          DISABLE;                                             <<02872>>15905000
          IF PCB(X:=X+PCB9)<0 THEN    <<ALIVE>>                <<02872>>15910000
       << CHANGE FROM SETING SOFTKILL BIT TO ABORTING JOB >>   <<02872>>15915000
       << WILL ABORT ALL I/O ASSOCIATED WITH PROCESS AND >>    <<02872>>15920000
       << THEN SOFT KILL PROCESS.   3/80 >>                    <<02872>>15925000
               BEGIN                                           <<02872>>15930000
               ENABLE;                                         <<02872>>15935000
               TOS := GETSIR (JMATSIR);                        <<02872>>15940000
               RESETDB (-1);                                   <<02872>>15945000
               TOS := EXCHANGEDB (JMATDST);                    <<02872>>15950000
               ABORTJOB (X/PCBSIZE);                           <<02872>>15955000
               ASSEMBLE (ZERO,XCH);                            <<02872>>15960000
               TOS := EXCHANGEDB (*);                          <<02872>>15965000
               ASSEMBLE (PCAL SETSYSDB);                       <<02872>>15970000
               TOS := JMATSIR;                                 <<02872>>15975000
               ASSEMBLE (DELB,XCH);                            <<02872>>15980000
               RELSIR (*,*);                                   <<02872>>15985000
               END;                                            <<02872>>15990000
       END;                                                    <<02872>>15995000
   END;                                                        <<02872>>16000000
      DISABLE;                                                          16005000
      DITP.UP:=0;                                                       16010000
      DITP(DMONTR).LOGONTYPE := 0;  << CLEAR LOGONTYPE >>      <<01449>>16015000
      IF (DMODEMP.MTYPE).(14:2)<>0 AND DMODEMP.MTYPE<>4 THEN   <<01534>>16020000
      BEGIN    <<HANGUP MODEM>>                                         16025000
         IF DMODEMPL&CSL(M202) THEN                                     16030000
         BEGIN                                                          16035000
                                                               <<01668>>16040000
            DITP(DSAVE).HSTATE:=HANGUPTURN;                    <<01668>>16045000
            MODCONTROL(READING,DITP);                          <<01668>>16050000
         END                                                            16055000
            ELSE                                                        16060000
         BEGIN                                                          16065000
                                                               <<01668>>16070000
            DITP(DSAVE).HSTATE:=HANGINGUP;                     <<01668>>16075000
            MODCONTROL(HANGUP,DITP);                           <<01668>>16080000
         END;                                                           16085000
                                                               <<01668>>16090000
         STARTTIMEOUT(HANGUPTO,DITP);                                   16095000
         CHECKSERV:=TRUE;                                               16100000
      END                                                               16105000
         ELSE                                                           16110000
         INITERM;                                                       16115000
  END;                                                                  16120000
END;         <<-------------------END OF SERVDISCNCT-------------->>    16125000
                                                                        16130000
SUBROUTINE SERVCFAILTO;                                                 16135000
BEGIN                                                                   16140000
   STOPTIMEOUT(CFAILTO,DITP);                                           16145000
   IF NOT DMODEMPL&CSL(M202) OR DMODEMP.CBSB=2 OR DMODEMP.CFCB=0        16150000
      THEN SERVDISCNCT                                         <<02860>>16155000
      ELSE                                                              16160000
   BEGIN                                                                16165000
      DISABLE;                                                          16170000
      X:=@IOQP;                                                         16175000
      IF <> AND IOQPL.ABORTBIT THEN ABORTIOQ                            16180000
         ELSE                                                           16185000
      BEGIN                                                             16190000
         IF DITP.DSTATE=TURN202 THEN                                    16195000
         BEGIN                                                          16200000
            DITP(DCNTRL).SPDSIO:=0;                                     16205000
            IF <> THEN                                                  16210000
            HALTSIO;  <<HALT SIO PROG>>                        <<04244>>16215000
            MODCONTROL(TRANSMIT,DITP);                                  16220000
            DELAY(2000D);  <<WAIT FOR CF TO RISE AT TERMINAL>>          16225000
            MODCONTROL(READING,DITP);   <<DROP CF>>                     16230000
         END;                                                           16235000
         CHECKSERV:=TRUE;                                               16240000
      END;                                                              16245000
   END;                                                                 16250000
END;     <<----------------END OF SERVCFAILTO------------------->>      16255000
                                                                        16260000
                                                                        16265000
                                                                        16270000
                                                                        16275000
SUBROUTINE SERVTURNTO;                                                  16280000
BEGIN                                                                   16285000
   STOPTIMEOUT(TURNTO,DITP);                                            16290000
   DISABLE;                                                             16295000
   X:=@IOQP;                                                            16300000
   IF <> AND IOQPL.ABORTBIT THEN ABORTIOQ                               16305000
      ELSE                                                              16310000
   BEGIN                                                                16315000
      IF DITP.DSTATE=TURN202 THEN                                       16320000
      BEGIN                                                             16325000
         STARTTIMEOUT(TURNTO, DITP);                           <<02861>>16330000
         IF DITPL(DSAVE).TURNTOWRITE THEN                      <<02861>>16335000
              MODCONTROL(READING, DITP)                        <<02861>>16340000
         ELSE MODCONTROL(WRITING, DITP);                       <<02861>>16345000
         DSAVEPL.TURNTOWRITE := NOT DSAVEPL.TURNTOWRITE;       <<02861>>16350000
         ENABLE;                                               <<02861>>16355000
      END;                                                              16360000
      CHECKSERV:=TRUE;                                                  16365000
   END;                                                                 16370000
END;     <<---------------------END OF SERVTURNTO---------------->>     16375000
                                                                        16380000
                                                                        16385000
                                                                        16390000
                                                                        16395000
                                                                        16400000
                                                                        16405000
SUBROUTINE SERV2640TO ;                                                 16410000
BEGIN                                                                   16415000
   STOPTIMEOUT(HP2640TO,DITP);                                          16420000
   <<*************CHECKTQUEUE*********************>>                    16425000
    IF HP2631B THEN                                            <<04869>>16430000
      BEGIN  << STATUS REQUEST TIMED OUT >>                    <<01464>>16435000
      IF NOT IOMESSAGE (1,NOTRDYMSG, %10000,                   <<01464>>16440000
      DITP(DLDEV).DLDEVN,,,,,OPCONSOLE) THEN                   <<01464>>16445000
      BEGIN    END;   << NO SYSTEM MESSAGE BUFFER >>           <<01464>>16450000
      STATREQ :=0;                                             <<01464>>16455000
      IF = THEN << MUST BE XOFF TIME OUT >>                    <<04869>>16460000
         RETURN;<< SO DON'T DISCONNECT   >>                    <<04869>>16465000
      STATDONE := 0;                                           <<01464>>16470000
      << DISCONNECT & RETURN >>                                <<01464>>16475000
      IF @IOQP<>0 THEN SETSTATUS(OFFLINE);                     <<01464>>16480000
     DBCNTP := 0;  << CLEAR PAST WRITE COUNT >>                <<01464>>16485000
      SERVDISCNCT;                                             <<02860>>16490000
      RETURN;                                                  <<01464>>16495000
      END;                                                     <<01464>>16500000
   DISABLE;                                                             16505000
   DITP.ENQACKWAIT:=0;                                                  16510000
   IF <> AND DITP.DSTATE=WRITING THEN                                   16515000
   BEGIN                                                       <<00328>>16520000
      <<RESTART PAUSED WRITE>>                                 <<00328>>16525000
      IF DTYPEP.TTYPE=TERMT15 OR DTYPEP.TTYPE=TERMT16 THEN     <<00328>>16530000
      BEGIN                                                    <<00328>>16535000
         DITP.ENQACKWAIT:=1;  <<2635 POSSIBLY OUT OF PAPER>>   <<00328>>16540000
         TEMP:=WA0(DITP(DILTP)+ISIOP);                         <<00328>>16545000
         X:=TEMP+WRTDATAINSTR+1;                               <<00328>>16550000
         WA0(X):=1;           <<WRITE 1 BYTE>>                 <<00328>>16555000
         WA0(X:=X+1):=1;                                       <<00328>>16560000
         WA0(X:=X+1):=[1/1,1/1,1/1,13/0];  <<RIGHT BYTE>>      <<00328>>16565000
         WA0(X:=X+1):=SYSDB+TEMP+3; <<BUFFER ADDRESS OF ENQ>>  <<00328>>16570000
         HALTSIO;  <<HALT SIO PROG>>                           <<04244>>16575000
         STARTTIMEOUT(HP2640TO,DITP);                          <<00328>>16580000
         TOS := WA0(DITP(DILTP) + ICNTRL).DRTNUMBER;           <<04244>>16585000
         X:=ABS(S0*4+3).IDLESIO;                               <<00328>>16590000
         IF <> THEN SUDDENDEATH(209);                          <<00328>>16595000
         TOS:=SYSDB+TEMP+XMITON;                               <<00328>>16600000
         STARTSIO;                                             <<00328>>16605000
         IF < THEN ABS(O1*4+3):=0;                             <<00479>>16610000
      END                                                      <<00328>>16615000
         ELSE                                                  <<00328>>16620000
    BEGIN                                                      <<00328>>16625000
      DBCNTP:=DBCNTP-DITP(DCNT);  <<UPDATE NO. OF BYTES REMAINING       16630000
                                    TO BE WRITTEN>>                     16635000
         IF <= THEN                                            <<00328>>16640000
      BEGIN                                                    <<00328>>16645000
         TOS:=DITP(DHEAD);       DITP(X):=0;                   <<00328>>16650000
         RETURNTBUF(*);                                        <<00328>>16655000
         DTANKBP:=0;                                           <<00328>>16660000
         DBCNTP:=0;                                            <<00328>>16665000
         DITP(DPNTR):=0;                                       <<00328>>16670000
         DITP.DSTATE:=NULL;                                    <<00328>>16675000
         DMODEMP.WRTCOUNTED:=0;                                <<00328>>16680000
         IF <> THEN WRTCOUNTER:=WRTCOUNTER-1;                  <<00328>>16685000
         HALTSIO;  <<HALT SIO PROG>>                           <<04244>>16690000
         IDLEWAIT(DITP);                                       <<01990>>16695000
         CHECKSERV:=TRUE;                                      <<00328>>16700000
         RETURN;                                               <<00328>>16705000
     END;                                                      <<00328>>16710000
      O1:=(DITP(DPNTR)+DITP(DCNT));                                     16715000
      TEMP:=TBMAXB-O1;  <<REMAINING ROOM IN CURRENT TBUF>>              16720000
      IF = THEN                                                         16725000
      BEGIN                                                             16730000
         TOS:=DITP(DHEAD);    <<END OF CURRENT TBUF,GET POINTER>>       16735000
         DITP(DHEAD):=WA0(S0);                                          16740000
         RETURNTBUF(*);                                                 16745000
         DITP(DPNTR):=0;  <<RESET POINTER TO WHERE TO START WRITE>>     16750000
         TEMP:=TBMAXB;                                                  16755000
         DTANKBP:=DTANKBP-TBMAXB;   <<UPDATE CNT OF BYTES IN OUT-       16760000
                                      STANDING TBUFS>>                  16765000
      END                                                               16770000
         ELSE                                                           16775000
      DITP(DPNTR):=O1;  <<BYTE OFFSET IN TBUF TO START WRITING>>        16780000
                                                                        16785000
      IF DBCNTP>TEMP THEN DITP(DCNT):=TEMP                              16790000
                     ELSE DITP(DCNT):=DBCNTP; <<NEW BYTE CNT TO WRITE>> 16795000
      TEMP:=WA0(DITP(DILTP)+ISIOP);                                     16800000
      WA0(TEMP+10):=0;            <<CLEAR DATA DUMP AREA>>              16805000
      X:=TEMP+WRTDATAINSTR;                                             16810000
      WA0(X):=[8/4,8/0];                                                16815000
      O1:=X+1;                                                          16820000
      IF DITP(DCNT)>TBMAXB THEN SUDDENDEATH(208);                       16825000
      WA0(  O1  ):=DITP(DCNT);                                          16830000
      WA0(X:=X+1):=1;                                                   16835000
      O1:=X+1;                                                          16840000
      IF LOGICAL(DITP(DPNTR)) THEN                                      16845000
         WA0(O1):=[1/1,1/1,1/1,13/0]  <<START FROM RIGHT BYTE>>         16850000
         ELSE                                                           16855000
         WA0(O1):=[1/1,1/0,1/1,13/0]; <<START FROM RLEFT BYTE>>         16860000
      WA0(O1+1):=SYSDB+DITP(DHEAD)+2+DITP(DPNTR)&LSR(1);                16865000
      WA0(X:=X+1):=[8/1,1/1,7/1];                                       16870000
      WA0(X:=X+1):=1;       <<INTERRUPT/HALT: TBUF EMPTY    >>          16875000
      HALTSIO;  <<HALT SIO PROG>>                              <<04244>>16880000
         TOS := WA0(DITP(DILTP) + ICNTRL).DRTNUMBER;           <<04244>>16885000
         TOS:=SYSDB+TEMP+XMITON;<<ENABLE XMIT,RECV SRQ ;THEN WAIT SRQ>> 16890000
         STARTSIO;                                                      16895000
         IF < THEN ABS(O1*4+3):=0;                             <<00479>>16900000
                                                               <<04244>>16905000
    END;                                                       <<00328>>16910000
   END;                                                                 16915000
END;  <<-----------------END OF HP2640TO------------------->>           16920000
                                                                        16925000
                                                               <<01464>>16930000
                                                               <<01464>>16935000
                                                               <<01464>>16940000
SUBROUTINE CHKSTATSUB;                                         <<01464>>16945000
  BEGIN                                                        <<01464>>16950000
  IF @IOQP=0 THEN RETURN;                                      <<01464>>16955000
  TOS := IOQP(QSTAT).IOSTAT;                                   <<01464>>16960000
  IF = OR FUNCTION=2 THEN S0 := GOODIO;                        <<01464>>16965000
  SETSTATUS(*);                                                <<01464>>16970000
  IF FUNCTION = 4 THEN                                         <<01464>>16975000
    BEGIN << FINISH DISCONNECT >>                              <<01464>>16980000
    DITP(DSAVE).HSTATE := 0;                                   <<01464>>16985000
    QWBCTP := 0;                                               <<01464>>16990000
    SERVDISCNCT;                                               <<02860>>16995000
    END;                                                       <<01464>>17000000
  END;                                                         <<01464>>17005000
                                                               <<01464>>17010000
                                                                        17015000
                                                                        17020000
SUBROUTINE BRKSTOPD ;                                                   17025000
BEGIN                                                                   17030000
   X:=DBCNTP;    <<CHECK IF ANYTHING INPUT YET>>                        17035000
   IF <> AND IOQP.READERRORS=NULL THEN                                  17040000
   BEGIN         <<GET IOQ TO SAVE BROKEN READ DATA FOR RESTART LATER>> 17045000
      TOS:=GETIOQ(0);  <<IMPEDE IF NO IOQ AVAILABLE>>                   17050000
      MOVE PS0:=DBCNTP,(10);   <<SAVE DBCNT,DCNT,DHEAD,DTAIL,DPNTR>>    17055000
      PS0(QLINK):=0;                                                    17060000
      DITP(DBREAK):=TOS;       <<SAVE PNTR TO IOQ CONTAINING BROKEN>>   17065000
      DITP(DHEAD):=0;          <<READ INFORMATION>>                     17070000
      DBCNTP:=0;               <<SO TBUFS WOULD NOT BE RETURNED>>       17075000
   END;                                                                 17080000
   IF IOQP.READERRORS<BRKEND THEN  <<BRKEND=2,LESS THAN 3,4,5,6>>       17085000
      IOQP.READERRORS:=BRKEND;                                          17090000
   QWBCTP:=0;                                                           17095000
   RETURNBUFS;                                                          17100000
   IF DMODEMPL.NOSYNC THEN DITP(DSYNC):=81;                             17105000
   SETSTATUS(BREAKEND);                                                 17110000
END;        <<----------------END OF BRKSTOP----------------->>         17115000
                                                                        17120000
                                                                        17125000
                                                                        17130000
                                                                        17135000
                                                                        17140000
SUBROUTINE RESTARTOPERATION ;                                           17145000
BEGIN                                                                   17150000
   DITP(DSAVE).DELACK:=0;                                               17155000
   DISABLE;                                                             17160000
   IF DITP.DSTATE=WAITED THEN                                           17165000
   BEGIN          <<OPERATION WAS PAUSED DUE TO BRK OR SSBRK RECVD>>    17170000
      TEMP:=DITP(DSAVE).WAITEDSTATE;                                    17175000
      DITP.DSTATE:=NULL;                                                17180000
      I:=WA0(DITP(DILTP)+ISIOP);                                        17185000
      IF TEMP=WRITING THEN                                              17190000
      BEGIN                                                             17195000
         DITP.DSTATE:=WRITING;                                          17200000
         IF DITPL.ENQACKWAIT AND WA0(I+WRTDATAINSTR+1) = 0 OR  <<04243>>17205000
               DTYPEPL.WAITXON                                 <<04243>>17210000
            THEN J1:=SYSDB+I+RDWAIT  <<WAIT FOR ACK BYTE>>              17215000
            ELSE                                                        17220000
         J1:=SYSDB+I+XMITON;  <<SIO PROG RESTART ADDRESS>>     <<00496>>17225000
      END                                                               17230000
         ELSE                                                           17235000
      BEGIN                  <<RESTART PAUSED READ OR IDLEWAIT PROG>>   17240000
         DITP.DSTATE:=TEMP;  <<RESTORE PREVIOUS STATE>>                 17245000
         IF DITP.DSTATE = READING THEN                         <<04236>>17250000
            IF DITPL(DSAVE).BLOCKRD THEN                       <<04236>>17255000
               J1:=SYSDB+I+WAIT2SIO                            <<04236>>17260000
            ELSE J1:=SYSDB+I+RDWAIT                            <<04236>>17265000
         ELSE IF DITP.DSTATE = REPEATING OR                    <<04236>>17270000
                 DITP.DSTATE = WRTSPECL  OR                    <<04236>>17275000
                 DITP.DSTATE = EORSYNC   THEN                  <<04236>>17280000
            J1:=SYSDB+I+XMITON                                 <<04236>>17285000
         ELSE IF DITP.DSTATE = NULL THEN                       <<04236>>17290000
            J1:=SYSDB+I+RDWAIT;                                <<04236>>17295000
         X:=DITP.DSTATE;                                                17300000
         IF = THEN DCNTRLP.SPDSIO:=1; <<SET IDLEWAIT PROG ACTIVE FLG>>  17305000
      END;                                                              17310000
                                                                        17315000
      <<**********IF TEMP=BANDWAIT**************>>                      17320000
                                                                        17325000
      TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                           17330000
      X:=ABS(S0*4+3).IDLESIO;                                           17335000
      IF <> THEN SUDDENDEATH(209);                             <<01539>>17340000
      TOS:=J1;                <<SIO PROG START ADDRESS>>                17345000
      STARTSIO;                                                         17350000
   END;                                                                 17355000
   ENABLE;                                                              17360000
END;  <<---------------END OF RESTARTOPERATION---------------->>        17365000
                                                                        17370000
                                                                        17375000
                                                                        17380000
                                                                        17385000
                                                                        17390000
SUBROUTINE STOPOPERATION(STOPTYPE);                                     17395000
VALUE STOPTYPE;  INTEGER STOPTYPE;                                      17400000
BEGIN                                                                   17405000
   DISABLE;                                                             17410000
   IF DITP.DSTATE=WAITED THEN                                           17415000
   BEGIN       <<PREVIOUS I/O WAS STOPPED PENDING ACTION FROM IOTERM>>  17420000
      HALTSIO;  <<HALT SIO PROG>>                              <<04244>>17425000
      RESET'SPEC'CHAR; << RE-ENABLE THE FOUR SPEC CHARS >>     <<02864>>17430000
      STOPTIMEOUT(HP2640TO,DITP);                                       17435000
      DTYPEP.WAITXON:=0;  <<IN CASE BRK WHEN WAITING FOR XON>> <<00764>>17440000
      TEMP:=DITP(DSAVE).WAITEDSTATE;  <<GET DSTATE BEFORE STOPPED>>     17445000
      IF TEMP=BANDWAIT THEN TEMP:=DCNTRLP.NXTDSTATE;                    17450000
      <<RESTORE DSTATE BEFORE PAUSED FOR LESS BANDWIDTH ACTIVITY   >>   17455000
      DITP.DSTATE:=TEMP;    <<RESTORE DSTATE>>                          17460000
      X:=@IOQP;                                                         17465000
      IF <> AND QMISCP.RSTATE=READWAITING THEN                          17470000
      BEGIN                                                             17475000
         QMISCP:=0;         <<ENABLE BRAND NEW RESTART OF REQUEST>>     17480000
         RQSTATE:=0;                                                    17485000
      END;                                                              17490000
      X:=@IOQP;                                                         17495000
      IF <> AND QMISCP.RSTATE=READING AND QMISCP.READSTOP<STOPTYPE      17500000
      THEN                                                              17505000
      BEGIN      <<CURRENT STOP MORE URGENT,GO AHEAD AND DO IT>>        17510000
         QMISCP.READSTOP:=STOPTYPE;                                     17515000
         QMISCP.RSTATE:=STOPPED;   <<SUPPRESS PREEMPTS AND ABORTS>>     17520000
         IF STOPTYPE=BREAKSTOP AND DITP(DTRLX).READTRLX<>0 AND          17525000
            DITP(DSAVE).HSTATE=ONLINE THEN                              17530000
            SETREADERROR(IOQP,READTO);                                  17535000
         DTYPEP.TIMING:=0;                                              17540000
         IF <> THEN                                                     17545000
         BEGIN   <<FORM READ TIME>>                                     17550000
            TOS:=TIMER-DITPD(DRTIMED);                                  17555000
            TOS:=10;                                                    17560000
            ASMB(LDIV,DEL);  <<DIVIDE MSEC BY 10 TO GET 100THS OF SEC>> 17565000
            IF OVERFLOW THEN                                            17570000
            BEGIN                                                       17575000
               DEL;                                                     17580000
               TOS:=-1;                                                 17585000
            END;                                                        17590000
            DITP(DRTIME):=TOS;                                          17595000
         END;                                                           17600000
         IF DITP(DTRLX).READTRLX<>0 AND DITP(DSAVE).HSTATE=ONLINE THEN  17605000
         BEGIN                                                          17610000
            DITP(DRTMAX):=0;  <<CLEAR USER REQUESTED READ TIME LIMIT>>  17615000
            STOPTIMEOUT(READTIMEOUT,DITP);                              17620000
         END;                                                           17625000
         DITP.PAIR:=1;                                                  17630000
         IF = OR DTYPEP.PAIRCODE<>XOFFPAIR THEN                         17635000
            DTYPEP.PAIRCODE:=NOTREADING;                                17640000
         DMODEMP.PRIMED:=0;                                             17645000
         IF DITPL.NEWLINE OR STOPTYPE=SSBRKSTOP THEN                    17650000
         BEGIN                                                          17655000
            DITP.DSTATE:=NULL;                                          17660000
            IF STOPTYPE=BREAKSTOP THEN BRKSTOPD                         17665000
            <<SAVE BROKEN READ DATA IF NECESSARY,RETURN IOQ W/BRK STAT>>17670000
                                  ELSE                                  17675000
     BEGIN                                                              17680000
      TOS:=ABS(ABS(CPCB)+PCB3).DSTFIELD;                                17685000
           <<GET CURRENT PROCESS STACK DST NUMBER>>                     17690000
      PUSH(Q,DL);      <<A=DL-DB,B=Q-DB>>                               17695000
      TOS:=TOS-TOS+1;  <<GET Q-DL+1>>                                   17700000
      X:=-S0;                                                           17705000
      TOS:=TOS+Q0(X);  <<DST OFFSET OF Q+1=(Q-DL+1)+(DL-A)>>            17710000
      Q1ADDR:=TOS;                                                      17715000
      READDONE                    END;                                  17720000
            <<SSBRK TERMINATED READ,XSFER DATA TO CALLER'S STACK>>      17725000
         END                                                            17730000
            ELSE                                                        17735000
         BEGIN                                                          17740000
            DITP.DSTATE:=EORSYNC;   <<WRITING CR/LF>>                   17745000
            ENABLE;                                                     17750000
            SENDCRLF(NXTNULL,DITP);                                     17755000
         END;                                                           17760000
      END                                                               17765000
         ELSE                                                           17770000
      IF TEMP=WRITING THEN                                              17775000
      BEGIN                                                             17780000
         DITP.ENQACKWAIT:=0;                                            17785000
         RETURNBUFS;                                                    17790000
         DISABLE;                                              <<04242>>17795000
         DITP.DSTATE:=NULL;                                             17800000
         ENABLE;                                               <<04242>>17805000
         CHECKSERV:=TRUE;   <<OK TO SERVICE NEXT IOQ>>                  17810000
      END                                                               17815000
         ELSE                                                           17820000
      CHECKSERV:=TRUE;                                                  17825000
      ENABLE;                                                           17830000
   END;                                                                 17835000
END;  <<------------END OF STOPOPERATION----------------->>             17840000
                                                                        17845000
                                                                        17850000
                                                                        17855000
                                                                        17860000
                                                                        17865000
SUBROUTINE SSBREAK ;                                                    17870000
BEGIN                                                                   17875000
   BREAKSS(LDEV,PINWORD);                                               17880000
   IF = AND DMODEMP.TMODE=NULL THEN                                     17885000
   BEGIN     <<NOT ALREADY IN BRK,STOP RD/WRT & FLUSH REQUESTS>>        17890000
      STOPOPERATION(SSBRKSTOP);                                         17895000
      @THISP:=@IOQP;                                                    17900000
      WHILE <> DO    <<GO DOWN LINKED IOQS AND SET FLUSHED FLAGS>>      17905000
      BEGIN                                                             17910000
         DISABLE;                                                       17915000
         THISP(QMISC).FLUSH:=1;                                         17920000
         @THISP:=THISP(QLINK);        <<STEP TO NEXT IOQ>>              17925000
      END;                                                              17930000
   END                                                                  17935000
      ELSE                                                              17940000
   RESTARTOPERATION ; <<NO CNTRL Y PIN SO SSBRK NOT ALLOWED>>           17945000
   CHECKSERV:=TRUE;                                            <<04240>>17950000
END;        <<-------------END OF SSBREAK--------------->>              17955000
                                                                        17960000
                                                                        17965000
                                                                        17970000
                                                                        17975000
                                                                        17980000
SUBROUTINE BREAK ;                                                      17985000
BEGIN                                                                   17990000
   BREAKJOB(LDEV,PINWORD.MAINPIN);                                      17995000
   IF = THEN     <<BREAK ACCEPTED,STOP CURRENT OPERATION>>              18000000
   BEGIN                                                                18005000
      DITP(DLDEV).FLUSH:=1;                                             18010000
      STOPOPERATION(BREAKSTOP);                                         18015000
   END                                                                  18020000
      ELSE                                                              18025000
   RESTARTOPERATION ;     <<BREAK REFUSED>>                             18030000
   CHECKSERV:=TRUE;                                            <<04240>>18035000
END;          <<-------------END OF BREAK---------------->>             18040000
                                                                        18045000
                                                                        18050000
                                                                        18055000
SUBROUTINE SERVSPOOLSW;                                                 18060000
BEGIN                                                                   18065000
   X:=@IOQP;                                                            18070000
   IF <> THEN WRTSPOOLBUF(DITP(DHEAD));                                 18075000
   CHECKSERV:=TRUE;                                                     18080000
END;                                                                    18085000
                                                                        18090000
                                                                        18095000
                                                                        18100000
SUBROUTINE SERVSPOOLEND;                                                18105000
BEGIN                                                                   18110000
   X:=@IOQP;                                                            18115000
   IF = THEN CHECKSERV:=TRUE                                            18120000
      ELSE                                                              18125000
   BEGIN                                                                18130000
      WRTSPOOLBUF(DITP(DCNT));                                          18135000
      QWBCTP:=0;                                                        18140000
      DISABLE;                                                          18145000
      IF DMODEMPL.NOSYNC THEN DITP(DSYNC):=80;                          18150000
      RETURNBUFS;                                                       18155000
      SETSTATUS(READSTATUS(IOQP.READERRORS));                           18160000
   END;                                                                 18165000
END;                                                                    18170000
                                                                        18175000
                                                                        18180000
                                                                        18185000
SUBROUTINE SERVLOGONTO;                                                 18190000
BEGIN                                                                   18195000
   STOPTIMEOUT (LOGONTO,DITP);                                          18200000
   IF DSAVEPL.NOTLOGON THEN                                    <<02861>>18205000
      BEGIN                                                    <<02861>>18210000
      DSAVEPL.NOTLOGON := 0;                                   <<02861>>18215000
      SETSTATUS(OFFLINE);                                      <<02861>>18220000
      END                                                      <<02861>>18225000
   ELSE                                                        <<02861>>18230000
      SERVDISCNCT;                                             <<02861>>18235000
END;                                                                    18240000
                                                                        18245000
                                                                        18250000
                                                                        18255000
                                                                        18260000
                                                                        18265000
SUBROUTINE SERVDRQST ;                                                  18270000
BEGIN                                                                   18275000
   DISABLE;                                                             18280000
   TOS:=DRQSTP;                                                         18285000
   ASMB(SCAN 0);                                                        18290000
   DEL;                                                                 18295000
   TOS:=DRQSTP;        <<GET SERVICE REQUEST FLAGS>>                    18300000
   ASMB(TRBC 0, X);    <<CLEAR SERVICE REQUEST FLAG>>                   18305000
   DRQSTP:=TOS;                                                         18310000
   ENABLE;                                                              18315000
   CASE X OF                                                            18320000
   BEGIN               <<GO SERVICE THE CRY BABY>>                      18325000
      SERVHANGUPTO;       <<----HANGUPTO>>                              18330000
      SERVDISCNCT;        <<----DISCNCT>>                      <<02860>>18335000
      SERVCFAILTO;        <<----CFAIL>>                                 18340000
      SERVTURNTO;         <<----TURNTO>>                                18345000
      SERV2640TO ;<<ACKWAIT AFTER ENQ TIMED OUT,RESTART WRT>>           18350000
      RETURNWRTIOQ ;                                                    18355000
                          <<WRT SIO PROG HAS BEEN STOPPED & ABORTED>>   18360000
      SERVSPOOLSW;        <<SPOOLING;SBUF IS FULL>>                     18365000
      SERVSPOOLEND;       <<END OF PTAPE SPOOLING>>                     18370000
      SERVTO(READTO);  <<A READ OPERATION HAS BEEN TIMED OUT>> <<01822>>18375000
      SERVONLINE ;  <<CR HAS BEEN RECEIVED AND SPEEDSENSED>>            18380000
      SERVDSETRDY;        <<----DSETREADY>>                             18385000
      SERVLOGONTO;        <<----LOGONTO>>                               18390000
      BREAK ;   <<BREAK HAS BEEN DETECTED>>                             18395000
      SSBREAK ; <<CNTRL Y OR SSBRK HAS BEEN DETECTED>>                  18400000
      SERVTO(BLOCKTO); <<BLOCK MODE DIDN'T COMPLETE IN TIME>>  <<01822>>18405000
      CHKSTATSUB;  << 2631 WRITE COMPLETE >>                   <<01464>>18410000
   END;                                                                 18415000
END;  <<-----------------END OF SERVDRQST---------------->>             18420000
                                                                        18425000
                                                                        18430000
                                                                        18435000
                                                                        18440000
                                                                        18445000
SUBROUTINE ABORTSTPD ;                                                  18450000
BEGIN                                                                   18455000
   RETURNBUFS;       <<RETURN ANY OUTSTANDING TBUFS>>                   18460000
   QWBCTP:=0;                                                           18465000
   SETSTATUS(ABORTED);                                                  18470000
END;                                                                    18475000
                                                                        18480000
                                                                        18485000
                                                                        18490000
SUBROUTINE TIMEOUTSTOP ;                                                18495000
BEGIN                                                                   18500000
   RETURNBUFS;      <<THE LORD GIVETH,THE LORD TAKETH AWAY>>            18505000
   IF IOQP.READERRORS<READTO THEN                                       18510000
      IOQP.READERRORS:=READTO;                                          18515000
   QWBCTP:=0;                                                           18520000
   DISABLE;                                                             18525000
   IF DMODEMPL.NOSYNC THEN DITP(DSYNC):=80;                             18530000
   SETSTATUS(TIMEDOUT);                                                 18535000
END;                                                                    18540000
                                                                        18545000
                                                                        18550000
                                                                        18555000
                                                                        18560000
SUBROUTINE PRMPTSTOPD ;                                                 18565000
BEGIN                                                                   18570000
   RETURNBUFS;    <<REQUEST PREEMPTED,DON'T SAVE DATA ALREADY READ>>    18575000
   QMISCP:=0;    <<RESET RSTATE FOR BRAND NEW RESTART LATER>>           18580000
   CHECKSERV:=TRUE;   <<GO BACK AND RE-ORDER IOQS ACCORDING TO PREEMPT  18585000
                        LEVEL>>                                         18590000
END;                                                                    18595000
                                                                        18600000
                                                                        18605000
                                                                        18610000
                                                                        18615000
                                                                        18620000
SUBROUTINE SERVSTOPPED ;                                                18625000
BEGIN       <<I/O OPERATION WAS STOPPED,GO CLEAN UP>>                   18630000
   X:=QMISCP.READSTOP-1;                                                18635000
   CASE X OF                                                            18640000
   BEGIN                                                                18645000
      BRKSTOPD ;  <<BRK DETECTED AND ALLOWED>>                          18650000
      READDONE ;  <<SSBRK DETECTED AND ALLOWED>>                        18655000
      PRMPTSTOPD ;<<CURRENT REQUEST HAS BEEN PREEMPTED>>                18660000
      TIMEOUTSTOP ;<<READ OPERATION HAS BEEN TIMED OUT>>                18665000
      ABORTSTPD ; <<CURRENT REQUEST HAS BEEN ABORTED>>                  18670000
   END;                                                                 18675000
END;                                                                    18680000
                                                                        18685000
                                                                        18690000
                                                                        18695000
                                                                        18700000
                                                                        18705000
SUBROUTINE SERVPREMPT;                                                  18710000
BEGIN                                                                   18715000
   ENABLE;                                                              18720000
   CONTINUE:=TRUE;                                                      18725000
   @THISP:=@IOQP;                                                       18730000
   NPL:=0;       <<INITIALIZE THE NEW PREMPT LEVEL>>                    18735000
   WHILE <> DO                                                          18740000
   BEGIN         <<SEARCH FOR THE MOST PREMPTIVE REQUEST>>              18745000
      IFLAG:=THISP.RPLEVEL;  <<SET THE RQST PREMPT LEVEL>>              18750000
      IF IFLAG=CONSMODE AND NOT DMODEMPL.CMODE THEN                     18755000
         <<NORMAL RQST QUEUED WHEN TERMINAL WAS IN CONSOLE MODE>>       18760000
         THISP.RPLEVEL:=NULL   <<RESET PREMPT LEVEL TO NORMAL>>         18765000
      ELSE                                                              18770000
      IF IFLAG>NPL THEN    << A MORE PREMPTIVE REQUEST>>                18775000
      BEGIN                                                             18780000
         NPL:=THISP.RPLEVEL;  <<SET NEW HIGHEST PREMPT LEVEL>>          18785000
         SAVEPS:=THESEPS;     << SAVE THISP AND LASTP>>                 18790000
      END;                                                              18795000
      @LASTP:=@THISP;                                                   18800000
      @THISP:=THISP(QLINK);   <<GET NEW IOQ>>                           18805000
   END;                                                                 18810000
                                                                        18815000
   DISABLE;                                                             18820000
   TOS:=NPL;    <<GET THE HIGHEST PREMPT LEVEL AMONG PENDING RQSTS>>    18825000
   IF = THEN DMODEMP.PREMPT:=0;   <<NO PREMPTIVE REQUEST>>              18830000
   IF TOS>IOQP.RPLEVEL THEN       <<1ST REQUEST HAS BEEN PREMPTED>>     18835000
   BEGIN                                                                18840000
      CONTINUE:=FALSE;            <<TOO MUCH OF A GOOD THING>>          18845000
      IFLAG:=QMISCP.RSTATE;                                             18850000
      IF = OR IFLAG=READWAITING THEN                                    18855000
      BEGIN   <<NEW RQST OR READ HAS NOT BEEN STARTED,JUST RELINK>>     18860000
         QMISCP:=0;      <<RESET RSTATE FOR LATER RESTART>>             18865000
         DITP(DIOQP):=@STHISP;   <<LINK HIGHEST PREMPTIVE TO DIT>>      18870000
         SLASTP(QLINK):=STHISP(QLINK);                                  18875000
         <<RELINK REST OF IOQS TO THE ONE IMMEDIATELY PRECEDING>>       18880000
         STHISP(QLINK):=@IOQP;   <<LINK ALL IOQS TO THE NEW HEAD>>      18885000
         CHECKSERV:=TRUE;        <<SERVICE NEW HEAD OF IOQS>>           18890000
      END                                                               18895000
         ELSE                                                           18900000
      BEGIN        <<I/O ALREADY IN PROGRESS>>                          18905000
         CHECKSERV:=FALSE;       <<DO NOT SERVICE NEW IOQ>>             18910000
         IF IFLAG=READING THEN   <<GET COUNT OF BYTES ALREADY READ>>    18915000
         BEGIN                                                          18920000
            J1:=WA0(DITP(DILTP)+ISIOP);  <<SIO PROG STARTING ADDR>>     18925000
               J1:=DBCNTP+DITP(DCNT)-WA0(J1+RDDATAINSTR+1);             18930000
         END;                                                           18935000
         IF NPL>=SOFTPREMPT AND ( > OR J1=0) THEN                       18940000
         <<HARD PREMPT OR SOFT PREMP AND NOTHING INPUT YET>>            18945000
         IF IFLAG=READING AND QMISCP.READSTOP<PREMPTSTOP THEN           18950000
         BEGIN                                                          18955000
            TOS:=QMISCP;                                                18960000
            TOS.READSTOP:=PREMPTSTOP;                                   18965000
            TOS.NOSTOP:=1;                                              18970000
            QMISCP:=TOS;                                                18975000
            IF NOT DMODEMPL.RDCOUNTED THEN                              18980000
            BEGIN         <<DEV NOT PERFORMING BLOCKMODE READ>>         18985000
               HALTSIO;  <<HALT SIO PROG>>                     <<04244>>18990000
                  <<SIO PROGRAM HALTED SUCCESSFULLY>>                   18995000
                  ENABLE;                                               19000000
                  DITP.DSTATE:=EORSYNC;                                 19005000
                  QMISCP.RSTATE:=STOPPED;                               19010000
                  DTYPEP.TIMING:=0;   <<CLR FLAG TO TIME RD DURATION>>  19015000
                  IF <> THEN DTYPEP.TIMEREAD:=1;                        19020000
                  IF DITP(DTRLX).READTRLX<>0 AND DITP(DSAVE).HSTATE     19025000
                     =ONLINE THEN    STOPTIMEOUT(READTIMEOUT,DITP);     19030000
                  DITP.PAIR:=1;                                         19035000
                  IF = OR DTYPEP.PAIRCODE<>XOFFPAIR THEN                19040000
                     DTYPEP.PAIRCODE:=NOTREADING;                       19045000
                  DBCNTP:=1;   <<FAKE DBCNT FOR TBUF RETURN>>           19050000
                  DMODEMP.PRIMED:=0;                                    19055000
                  SENDCRLF(NXTNULL,DITP);    <<WRITE CR/LF>>            19060000
                                                               <<04244>>19065000
            END;                                                        19070000
         END;                                                           19075000
      END;                                                              19080000
   END;                                                                 19085000
END;              <<-------------END OF SERVPREMPT------------>>        19090000
                                                                        19095000
                                                                        19100000
                                                                        19105000
                                                                        19110000
LOGICAL SUBROUTINE NOABORTS ;                                           19115000
BEGIN                                                                   19120000
   NOABORTS:=TRUE;                                                      19125000
   IF DITP.DSTATE = WRITING AND                                <<04243>>19130000
      (DITPL.ENQACKWAIT OR DTYPEPL.WAITXON) THEN               <<04243>>19135000
   BEGIN          <<WRITE WAS PAUSED DUE TO ACKWAIT OR XOFF RECVD>>     19140000
      @THISP:=@IOQP;                                                    19145000
      WHILE <> DO                                                       19150000
      BEGIN                                                             19155000
         IF THISP < 0 THEN    <<THERE IS AN ABORTED RQST>>              19160000
         BEGIN                                                          19165000
            NOABORTS:=FALSE;                                            19170000
            DISABLE;                                           <<04242>>19175000
            DITP.ENQACKWAIT:=0;                                         19180000
            DTYPEPL.WAITXON := 0;                              <<04243>>19185000
            ENABLE;                                            <<04242>>19190000
            HALTSIO;  <<HALT SIO PROG>>                        <<04244>>19195000
            RETURNWRTIOQ ;                                              19200000
            <<RETURN TBUFS AND IOQ IF ANY EXIST>>                       19205000
         END;                                                           19210000
         @THISP:=THISP(QLINK);       <<GO TO NEXT IOQ>>                 19215000
      END;                                                              19220000
   END;                                                                 19225000
END;     <<------------END OF NOABORTS--------------->>                 19230000
                                                                        19235000
                                                                        19240000
                                                                        19245000
                                                                        19250000
                                                                        19255000
                                                                        19260000
SUBROUTINE STARTREAD ;                                                  19265000
BEGIN                                                                   19270000
   QMISCP.RSTATE:=READWAITING;                                          19275000
   IF DMODEMP.MODEM <> 0 AND NOT DSAVEPL.CC THEN               <<02861>>19280000
      BEGIN                                                    <<02861>>19285000
      DSAVEPL.NOTLOGON := 1;                                   <<02861>>19290000
      STARTTIMEOUT(LOGONTO, DITP);                             <<02861>>19295000
      RETURN;                                                  <<02861>>19300000
      END;                                                     <<02861>>19305000
   IF DITP.DSTATE=NULL THEN     <<IF ALREADY ACTIVE,SPLIT WITH>>        19310000
  BEGIN                                                                 19315000
      STOPSPDSEN ;                <<CHECKSERV=FALSE >>                  19320000
      ENABLE;                                                  <<01824>>19325000
      TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                  <<04242>>19330000
      X := ABS(TOS*4+3).IDLESIO;                               <<04242>>19335000
      IF <> THEN SUDDENDEATH(209);                             <<04242>>19340000
                                <<OK TO START READ OPERATION>>          19345000
      DSPEEDP.RESTSPD:=0;                                               19350000
      TEMP:=WA0(DITP(DILTP)+ISIOP);  <<SIO PROG STARTING ADDRESS>>      19355000
      TOS:=DITPL LAND %174700;   <<RESET STATUS FLAGS FOR READ OP>>     19360000
      IF IOQP(QFUNC).FUNC=PTAPEFUNC THEN TOS.SPOOLING:=1                19365000
         ELSE                                                           19370000
      IF IOQP(QPAR2).BINARY<>0 THEN TOS.BINARYREAD:=1                   19375000
         ELSE                                                           19380000
      BEGIN                                                             19385000
         IF IOQP(QPAR2)&LSR(8) <> NULL THEN                             19390000
         BEGIN                                                          19395000
            TOS.TERMCHAR:=1;                                            19400000
            WA0(TEMP+13).RIGHTHLF:=IOQP(QPAR2).LEFTHLF;                 19405000
         END;     <<SPECL READ TERMINATION CHAR IS SPECIFIED>>          19410000
         X:=DITP(DSTOP);                                                19415000
         IF <> AND DMODEMP.TMODE=NULL THEN                              19420000
         BEGIN    <<TRANSPARENT READ & NOT IN BRK OR CONSOLE MODE>>     19425000
            TOS.TERMCHAR:=1;                                            19430000
            TOS.BINARYREAD:=1;                                          19435000
         END;                                                           19440000
      END;                                                              19445000
   DITP:=TOS;                                                           19450000
   @SAVEP:=DITP(DBREAK);    <<TEST PNTR TO IOQ CONTAINING INFORMATION   19455000
                              ON BROKEN READ DATA>>                     19460000
   IF <> AND DMODEMP.TMODE=0 THEN                                       19465000
   BEGIN        <<BEGIN READ WITH PREVIOUSLY SAVED DATA ALERADY READ>>  19470000
      DITP(DBREAK):=0;                                                  19475000
      DBCNTP:=SAVEP;      <<RESTORE COUNT OF TOTAL BYTES READ>>         19480000
      MOVE DITP(DCNT):=SAVEP(6),(4);                                    19485000
                          <<RESTORE DCNT,DHEAD,DTAIL AND PNTR>>         19490000
      RETURNIOQ(@SAVEP);                                                19495000
      IF DRBCTP <= DBCNTP THEN                                          19500000
      BEGIN               <<ENOUGH HAS ALREADY BEEN READ>>              19505000
         CONTINUE:=FALSE;                                               19510000
         DITP.DSTATE:=EORSYNC;                                          19515000
         SENDCRLF(NXTNULL,DITP);                                        19520000
         READDONE ;                                                     19525000
         <<ALL DONE , GO SERVICE NEW REQUSET>>                          19530000
      END;                                                              19535000
   END;                                                                 19540000
                                                                        19545000
   IF CONTINUE THEN                                                     19550000
      BEGIN                                                             19555000
         QMISCP.RSTATE:=READING;                                        19560000
         TOS:=DITP;                                                     19565000
         TOS.DSTATE := WRTSPECL;                               <<04236>>19570000
         TOS.NEWLINE:=0;                                                19575000
         TOS.PAIR:=0;                                                   19580000
         DITP:=TOS;                                                     19585000
         DTYPEP.PAIRCODE:=0;                                            19590000
         IF NOT DITPL.SPOOLING THEN DITP(DPNTR):=0;                     19595000
         IF IOQP.RPLEVEL=NULL THEN                                      19600000
         BEGIN          <<OK TO DO TIMING OPERATIONS>>                  19605000
            STARTTIMEOUT(READTIMEOUT,DITP);                             19610000
                        <<TIMEOUT IF USER REQUESTED A READ TIME LIMIT>> 19615000
            DTYPEP.TIMEREAD:=0;                                         19620000
            IF <> THEN                                                  19625000
            BEGIN       <<TIME DURATION OF THE READ>>                   19630000
               DTYPEP.TIMING:=1;  <<INDICATE STARTING TIME RECORDED>>   19635000
               DITPD(DRTIMED):=TIMER;                                   19640000
            END;                                                        19645000
         END;                                                           19650000
                                                                        19655000
            IF IOQP(QPAR2)&LSR(8)<>NULL AND NOT DITPL.SPOOLING THEN     19660000
            BEGIN    <<SPECIAL RD EOR CHAR SPECIFIED>>                  19665000
               WA0(TEMP+RDSTRT+6):=0;   <<JMP FROM 50 TO 71:XMITOFF>>   19670000
               I:=SYSDB+TEMP+RDSTRT;    <<STRT AT SET SPECL CHAR INSTR>>19675000
            END                                                         19680000
               ELSE                                                     19685000
               I:=SYSDB+TEMP+RECVOFF;   <<STRT AT DISABLING XMIT SRQ>>  19690000
                                                                        19695000
         WA0(TEMP+RDDATAINSTR):=[8/3,8/0];                              19700000
                                  <<GENERATE READ DATA INSTR>>          19705000
         IF DRBCTP = 0 THEN                                             19710000
         BEGIN                                                          19715000
            WA0(X:=X+6):=RDNULL; <<CAUSE AN INTERRUPT TO CLEAN UP RD>>  19720000
            ENABLE;                                                     19725000
            TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                     19730000
            X:=ABS(S0*4+3).IDLESIO;                                     19735000
            IF <> THEN SUDDENDEATH(209);                       <<01539>>19740000
            TOS:=SYSDB+TEMP+RDDATAINSTR+5;                              19745000
            STARTSIO;                                                   19750000
            CONTINUE:=FALSE;                                            19755000
         END                                                            19760000
            ELSE                                                        19765000
         BEGIN                                                          19770000
            O1:=IF DITPL.SPOOLING THEN SBUFMAXB ELSE TBMAXB;            19775000
            J1:=O1-(DBCNTP MOD O1);  <<REMAINING ROOM IN TBUF>>         19780000
            K1:=DRBCTP-DBCNTP;   <<TOTAL BYTES REMAINING TO BE READ>>   19785000
            TOS:=IF K1 <= J1 THEN K1 ELSE J1;                           19790000
            IF NOT DITPL.SPOOLING THEN DITP(DCNT):=S0;                  19795000
            WA0(TEMP+RDDATAINSTR+1):=TOS;                               19800000
            IF NOT DITPL.SPOOLING AND K1>J1 THEN                        19805000
            BEGIN       <<PREFETCH 1 MORE TBUF>>                        19810000
               WA0(TEMP+RDDATAINSTR+2):=[8/125,8/1];<<96 TO 221>>       19815000
               TOS:=GETTBUF(SECONDARY);                                 19820000
               TOS:=S0;                                                 19825000
               IF = THEN                                                19830000
               BEGIN                                                    19835000
                  DDEL;                                                 19840000
                  RETURNBUFS;                                           19845000
                  IOQP.READERRORS:=LOSTDATA;                            19850000
                  DITP.DSTATE:=NULL;                                    19855000
                  SETSTATUS(LOSTDATA);                                  19860000
                  CONTINUE:=FALSE;                                      19865000
               END                                                      19870000
                  ELSE                                                  19875000
               BEGIN                                                    19880000
                  DITP(DBLKTAIL):=TOS;                                  19885000
                  X:=TEMP+BLOCKMODRD+4;                                 19890000
                  WA0(X):=TOS+SYSDB+2;                                  19895000
                  K1:=K1-DITP(DCNT); <<BYTES REMAINING FOR 2ND TBUF>>   19900000
                  IF K1>TBMAXB THEN                                     19905000
                  BEGIN   <<EVEN 2ND TBUF IS NOT ENOUGH>>               19910000
                     WA0(TEMP+BLOCKMODRD+1):=TBMAXB;                    19915000
                     WA0(X:=X+1):=[8/4,8/1]; <<238 TO 242>>             19920000
                  END                                                   19925000
                     ELSE                                               19930000
                  BEGIN                                                 19935000
                     WA0(TEMP+BLOCKMODRD+1):=K1;                        19940000
                     WA0(X:=X+1):=[8/%222,8/1]; <<238 TO 128:RDEXIT>>   19945000
                  END;                                                  19950000
                  WA0(X:=X+1):=[1/1,1/0,14/0];                          19955000
               END;                                                     19960000
            END                                                         19965000
               ELSE                                                     19970000
               WA0(TEMP+RDDATAINSTR+2):=[8/32,8/1];<<96 TO 128:RDEXIT>> 19975000
            WA0(TEMP+RDDATAINSTR+3):=IF LOGICAL(J1) THEN [1/1,1/1,14/0] 19980000
                                        ELSE [1/1,1/0,14/0];            19985000
            <<IF ODD BYTES REMAINING,RNXT BYTE GOES INTO RIGHT HALF>>   19990000
                                                                        19995000
            IF DITPL.SPOOLING THEN                                      20000000
               WA0(TEMP+RDDATAINSTR+4):=SYSDB+DITP(DTBUF)               20005000
               ELSE IF CONTINUE THEN                                    20010000
           BEGIN                                                        20015000
            IF DBCNTP MOD TBMAXB = 0 THEN                               20020000
            BEGIN                                                       20025000
               TOS:=GETTBUF(SECONDARY);                                 20030000
               TOS:=S0;     TOS:=S0;                                    20035000
               IF = THEN                                                20040000
               BEGIN        <<NO MORE TBUFS AVAILABLE>>                 20045000
                  DDEL;     DEL;                                        20050000
                  RETURNBUFS;                                           20055000
                  IOQP.READERRORS:=LOSTDATA;                            20060000
                  DITP.DSTATE:=NULL;                                    20065000
                  SETSTATUS(LOSTDATA);                                  20070000
                  CONTINUE:=FALSE;                                      20075000
               END                                                      20080000
                  ELSE                                                  20085000
               BEGIN                                                    20090000
                  IF DBCNTP=0 THEN DITP(DHEAD):=TOS                     20095000
                              ELSE WA0(DITP(DTAIL)):=TOS;               20100000
                  DITP(DTAIL):=TOS;  <<LINK TO HEAD OF LIST>>           20105000
                  X:=TEMP+RDDATAINSTR+4;                                20110000
                  WA0(X):=TOS+SYSDB+2;                                  20115000
                              <<TBUF STARTING ADDRESS>>                 20120000
               END;                                                     20125000
            END                                                         20130000
               ELSE                                                     20135000
            WA0(TEMP+RDDATAINSTR+4):=SYSDB+DITP(DTAIL)+2+(DBCNTP        20140000
                                     MOD TBMAXB)&LSR(1);                20145000
           END;                                                         20150000
            WA0(TEMP+RDDATAINSTR+6):=RDSPECL;                           20155000
            X:=TEMP+BLOCKMODRD+6;                                       20160000
            WA0(X):=RDSPECL;                                            20165000
         END;                                                           20170000
            <<PUT IN CPVA2 INTRPT CODE: SPECL CHAR DETECTED>>           20175000
            IF CONTINUE THEN                                            20180000
            IF DMODEMPL&CSL(M202) THEN                                  20185000
         BEGIN       <<ON A 202 MODEM>>                                 20190000
            IF DBCNTP=0 AND DMODEMPL.NOSYNC AND                <<01932>>20195000
             NOT DMODEMPL.PRIMED THEN BEGIN                    <<01932>>20200000
               WA0(TEMP+5).(11:1) := 0;                        <<01932>>20205000
               DITP.PAIR := 1;                                 <<01932>>20210000
               DTYPEP.PAIRCODE := NODATAYET;                   <<01932>>20215000
            END;                                               <<01932>>20220000
            IF DMODEMPL.CB THEN                                         20225000
            BEGIN    <<NOT IN READING STATE>>                           20230000
               WA0(TEMP+WRTDATAINSTR):=[8/4,8/0];              <<02861>>20235000
               WA0(X:=X+1):=2;                                 <<01932>>20240000
               WA0(X:=X+1):=1;                                          20245000
               WA0(X:=X+1):=[1/1,1/0,1/1,13/0]; << LEFT BYTE>> <<01932>>20250000
               WA0(X:=X+1):=SYSDB+TEMP+4;  <<BUFFER ADDR FOR ETX>>      20255000
               WA0(X:=X+1):=[8/1, 1/1, 7/2];                   <<02861>>20260000
               WA0(X:=X+1):=22; << ETX SENT, TURN MODEM >>     <<02861>>20265000
               WA0(TEMP + 4) := DC1'ETX;                       <<01932>>20270000
                                                               <<02861>>20275000
                                                               <<02861>>20280000
               IF DITP(DTYPE).TTYPE = NOPROTOCOL THEN BEGIN    <<01932>>20285000
                  WA0(TEMP+WRTDATAINSTR+1) := 1; << NO DC1 >>  <<02861>>20290000
                  WA0(X:=X+2) := [1/1,1/1,1/1,13/0];           <<01932>>20295000
               END;                                            <<01932>>20300000
               IF DMODEMP.CBSB<>3 THEN                                  20305000
               BEGIN                     <<NOT IN WRITE STATE>>         20310000
                  STARTTIMEOUT(TURNTO,DITP);                            20315000
                  DISABLE;                                              20320000
                  MODCONTROL(WRITING,DITP);                             20325000
                  DITP(DSAVE).TURNTOWRITE:=1;                           20330000
                  DCNTRLP.NXTDSTATE:=WRTSPECL;                 <<04236>>20335000
                  DITP.DSTATE:=TURN202;                                 20340000
                  DITP(DSIOPC):=I;                                      20345000
                  ENABLE;                                               20350000
               END                                                      20355000
                  ELSE                                                  20360000
               BEGIN      <<202 READY TO WRITE>>                        20365000
                  DITP.DSTATE := WRTSPECL;                     <<04236>>20370000
                  TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;               20375000
                  X:=ABS(S0*4+3).IDLESIO;                               20380000
                  IF <> THEN SUDDENDEATH(209);                 <<01539>>20385000
                  TOS:=I;                                               20390000
                  STARTSIO;                                             20395000
               END;                                                     20400000
            END                                                         20405000
               ELSE                                                     20410000
            BEGIN         <<202 READY TO READ>>                         20415000
               DITP.DSTATE := READING;                         <<04236>>20420000
               IF IOQP(QPAR2)&LSR(8)<>0 AND NOT DITPL.SPOOLING THEN     20425000
                  WA0(TEMP+RDSTRT+6):=21  <<SKIP OVER SEND DC1/ETX>>    20430000
                  ELSE                                                  20435000
                  I:=SYSDB+TEMP+XMITOFF; <<DISABLE XMIT,ENABLE RECV>>   20440000
               TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                  20445000
               X:=ABS(S0*4+3).IDLESIO;                                  20450000
               IF <> THEN SUDDENDEATH(209);                    <<01539>>20455000
               TOS:=I;                                                  20460000
               STARTSIO;                                                20465000
            END;                                                        20470000
         END                                                            20475000
            ELSE                                                        20480000
         BEGIN                                                          20485000
            WA0(TEMP+WRTDATAINSTR) := [8/4, 8/0];              <<02861>>20490000
            WA0(X:=X+1):=1;    <<WRITE OUT DC1>>                        20495000
            WA0(X:=X+1):=1;                                             20500000
            WA0(X:=X+1):=[1/1,1/1,1/1,13/0];  <<RIGHT BYTE>>            20505000
            WA0(X:=X+1):=SYSDB+TEMP+9;  <<BUFFER ADDR FOR DC1>>         20510000
            WA0(X:=X+1):=[8/1,1/1,7/1];                        <<04236>>20515000
            WA0(X:=X+1):=9;                                    <<04236>>20520000
            IF DITP(DTYPE).TTYPE = NOPROTOCOL THEN             <<01821>>20525000
               BEGIN                                           <<01821>>20530000
               DITP.DSTATE := READING;                         <<04236>>20535000
               WA0(TEMP+WRTDATAINSTR) := [8/0, 8/0];           <<02861>>20540000
               WA0(X:=X+1) := 30; << JUMP DC1 >>               <<02861>>20545000
               END;                                            <<01821>>20550000
            IF DBCNTP=0 AND DMODEMPL.NOSYNC AND NOT DMODEMPL.PRIMED THEN20555000
            BEGIN                                                       20560000
               IF DSPEEDPL.TAPEMODE OR DMODEMPL&CSL(M202) OR IOQPL      20565000
               (QPAR2).OWNREAD OR DTYPEP.TTYPE<>HP2640X OR DITP.        20570000
               (TERMCHAR':2)=READBINARY OR NOT DSPEEDPL.ECHO THEN       20575000
               BEGIN     <<START READ NORMALLY>>                        20580000
                  WA0(TEMP+5).(11:1):=DSPEEDP.ECHO;                     20585000
                  DITP.PAIR:=1;                                         20590000
                  DTYPEP.PAIRCODE:=NODATAYET;                           20595000
               END                                                      20600000
                  ELSE                                                  20605000
               BEGIN                                                    20610000
                  WA0(TEMP+5).(11:1):=0;  <<TURN OFF INTERF CNTRL ECHO>>20615000
                  DITP.PAIR:=1;                                         20620000
                  DTYPEP.PAIRCODE:=NOECHO;                              20625000
                  DITP(DCNT):=1;          <<READ ONLY 1 BYTE>>          20630000
                  WA0(TEMP+RDDATAINSTR+1):=1;                           20635000
                  WA0(X:=X+1):=[8/32,8/1];<<96 TO 128:RDEXIT>>          20640000
               END;                                                     20645000
                                                                        20650000
            END                                                         20655000
               ELSE                                                     20660000
            WA0(TEMP+5).(11:1):=DSPEEDP.ECHO;                           20665000
               TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                  20670000
               X:=ABS(S0*4+3).IDLESIO;                                  20675000
               IF <> THEN SUDDENDEATH(209);                    <<01539>>20680000
               TOS:=I;                                                  20685000
               STARTSIO;                                                20690000
               IF < THEN BEGIN                                 <<00479>>20695000
                       TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER; <<00479>>20700000
                       ABS(TOS*4+3):=0;                        <<00479>>20705000
                       END;                                    <<00479>>20710000
         END;                                                           20715000
      END;                                                              20720000
   END;                                                                 20725000
END;        <<-------------END OF STARTREAD-------------->>             20730000
                                                                        20735000
                                                                        20740000
                                                                        20745000
                                                                        20750000
SUBROUTINE READF ;                                                      20755000
BEGIN                                                                   20760000
   IF IOQP.RPLEVEL=NULL THEN                                            20765000
   BEGIN           <<NORMAL PREEMPT LEVEL, OK TO FLUSH>>                20770000
      X:=DITP(DLDEV);                                                   20775000
      IF < THEN                                                         20780000
      BEGIN        <<BREAK WAS DETECTED AND ACCEPTED>>                  20785000
         CONTINUE:=FALSE;                                               20790000
         QWBCTP:=0;                                                     20795000
         SETSTATUS(BREAKEND);                                           20800000
      END                                                               20805000
         ELSE                                                           20810000
      BEGIN                                                             20815000
         X:=QMISCP;                                                     20820000
         IF < THEN                                                      20825000
         BEGIN     <<CNTRL Y FLUSH,RETURN I/O SUCCESSFUL STATUS>>       20830000
            CONTINUE:=FALSE;                                            20835000
            QWBCTP:=0;                                                  20840000
            SETSTATUS(GOODIO);                                          20845000
         END;                                                           20850000
      END;                                                              20855000
   END;                                                                 20860000
                                                                        20865000
   IF CONTINUE THEN                                                     20870000
   BEGIN                                                                20875000
      EOFCHECK(IOQP,0D,0,0);                                            20880000
      IF <> THEN SETSTATUS(IOQP(QSTAT))                                 20885000
         <<END OF FILE DETECTED, NO READ>>                              20890000
         ELSE                                                           20895000
      BEGIN                                                             20900000
         X:=DITP(DRPTR);     <<TEST FOR SAVED RD DATA DUE TO EOF>>      20905000
         IF <> AND QPAR1P.EOFCODE<>NOEOFCHECK THEN                      20910000
         BEGIN                                                          20915000
            IF DITP.DSTATE=NULL THEN                                    20920000
            BEGIN            <<TERMINAL NOT IN WRITING STATE>>          20925000
               TOS:=DITP(DRPTR);                                        20930000
               DITP(X):=0;      <<CLEAR POINTER,TBUF WILL BE RETURNED>> 20935000
               DITP(DHEAD):=TOS;                                        20940000
               DBCNTP:=DITP(DRCNT);                                     20945000
               <<LINK IN SAVED TBUFS & RESTORE CNT OF BYTES READ>>      20950000
               READDONE ;  <<XSFER DATA TO STACK,SERV NXT>>             20955000
            END;                                                        20960000
         END                                                            20965000
            ELSE                                                        20970000
         STARTREAD ;                                                    20975000
      END;                                                              20980000
   END;                                                                 20985000
END;     <<-----------------END OF READF--------------------->>         20990000
                                                                        20995000
                                                                        21000000
                                                                        21005000
                                                                        21010000
                                                                        21015000
SUBROUTINE STRTPOSTSPACE ;                                              21020000
BEGIN                                                                   21025000
   RQSTATE:=POSTSPACE;                                                  21030000
   DOSPACE;                                                             21035000
   IF <> OR NOT CONTINUE THEN                                           21040000
   BEGIN                                                                21045000
      IF NOT CONTINUE THEN                                              21050000
      BEGIN      <<BCNT=0 BUT IMBEDDED CARRIAGE CNTRL SPECIFIED>>       21055000
         QWBCTP:=0;                                                     21060000
         SETSTATUS(INVALIDOP);                                          21065000
      END                                                               21070000
         ELSE                                                           21075000
      BEGIN      <<TOO MUCH ALREADY TANKED,CANNOT COMPLETE>>            21080000
         QMISCP.RSTATE:=RQSTATE;                                        21085000
         STARTWRITE;                                                    21090000
      END;                                                              21095000
   END                                                                  21100000
      ELSE                                                              21105000
   BEGIN                                                                21110000
      IF HP2631BNFX OR DITPL(DLDEV).DOSTATREQ THEN             <<04869>>21115000
         BEGIN                                                 <<04869>>21120000
         QMISCP.RSTATE := WAITING;                             <<04869>>21125000
         DITP(DLDEV).DOSTATREQ := 1;                           <<04869>>21130000
         END                                                   <<04869>>21135000
      ELSE                                                     <<04869>>21140000
         SETSTATUS(GOODIO);                                    <<04869>>21145000
      STARTWRITE;                                              <<04869>>21150000
   END;                                                                 21155000
END;     <<---------------END OF STRTPOSTSPACE--------------->>         21160000
                                                                        21165000
                                                                        21170000
                                                                        21175000
                                                                        21180000
SUBROUTINE STRTTBWAIT ;                                                 21185000
BEGIN                                                                   21190000
   RQSTATE:=TBWAIT;                                                     21195000
   IF DITPL(DLDEV).DOSTATREQ THEN                              <<04869>>21200000
      BEGIN                                                    <<04869>>21205000
      QMISCP.RSTATE := RQSTATE;                                <<04869>>21210000
      STARTWRITE;                                              <<04869>>21215000
      RETURN;                                                  <<04869>>21220000
      END;                                                     <<04869>>21225000
   PDISABLE;                                                            21230000
   TANKDATA(DATA'ADR(IOQP),BCNT-DXCNTP,DXCNTP);                         21235000
   IF <> THEN BEGIN                                                     21240000
                 PENABLE;   <<TOO MUCH TO TANK,CANNOT COMPLETE>>        21245000
                 QMISCP.RSTATE:=RQSTATE;                                21250000
                 STARTWRITE;                                            21255000
              END                                                       21260000
                 ELSE                                                   21265000
      BEGIN                                                             21270000
         PENABLE;                                                       21275000
         IF NOT IOQPL(QPAR2) THEN        <<POSTSPACE WRITE>>            21280000
         BEGIN                                                          21285000
            DXCNTP:=0;                                                  21290000
            STRTPOSTSPACE ; <<TANK CARRIAGE CNTRL BYTES>>               21295000
         END                                                            21300000
            ELSE                                                        21305000
         BEGIN                                                          21310000
            STARTWRITE;                                                 21315000
            IF HP2631BNFX THEN                                 <<04869>>21320000
               BEGIN                                           <<04869>>21325000
               QMISCP.RSTATE := WAITING;                       <<04869>>21330000
               DITP(DLDEV).DOSTATREQ := 1;                     <<04869>>21335000
               END                                             <<04869>>21340000
            ELSE                                               <<04869>>21345000
            SETSTATUS(GOODIO);                                          21350000
         END;                                                           21355000
      END;                                                              21360000
END;        <<------------END OF STRTTBWAIT-------------->>             21365000
                                                                        21370000
                                                                        21375000
                                                                        21380000
SUBROUTINE STRTANKDATA ;                                                21385000
BEGIN                                                                   21390000
   DXCNTP:=0;   <<NO DATA BYTE HAS BEEN TANKED YET>>                    21395000
   IF QPAR1P=1 THEN DXCNTP:=DXCNTP+1;                                   21400000
               <<SKIP OVER IMBEDDED CARRIAGE CNTRL BYTE,DON'T TANK>>    21405000
   STRTTBWAIT ;                                                         21410000
END;                                                                    21415000
                                                                        21420000
                                                                        21425000
                                                                        21430000
SUBROUTINE STRTPRETOPOST ;                                              21435000
BEGIN                                                                   21440000
   RQSTATE:=PRETOPOST;                                                  21445000
                                                               <<04869>>21450000
                                                               <<04869>>21455000
                                                               <<04869>>21460000
                                                               <<04869>>21465000
      TOS:=QPAR1P;    <<SAVE CALLING PARAMETER>>                        21470000
      QPAR1P:=0;      <<FAKE CR/SINGLESPACE>>                           21475000
      DOSPACE;        <<TANK CR/LF/SYNCS BEFORE DATA>>                  21480000
      QPAR1P:=TOS;                                                      21485000
                                                               <<04869>>21490000
   IF <> THEN                                                           21495000
         BEGIN                                                          21500000
            QMISCP.RSTATE:=RQSTATE;                                     21505000
            STARTWRITE;                                                 21510000
         END                                                            21515000
            ELSE                                                        21520000
         STRTANKDATA ;                                                  21525000
         <<PRE-WRITE CR/LF TANKED, START TANKING DATA>>                 21530000
END;                                                                    21535000
                                                                        21540000
                                                                        21545000
                                                                        21550000
SUBROUTINE STRTPRESPACE ;                                               21555000
BEGIN                                                                   21560000
   RQSTATE:=PRESPACE;                                                   21565000
   DOSPACE;   <<PUT IN SPECIFIED CARRIAGE CNTRL BYTES>>                 21570000
   IF <> OR NOT CONTINUE THEN                                           21575000
   BEGIN                                                                21580000
      IF NOT CONTINUE THEN                                              21585000
      BEGIN                                                             21590000
         QWBCTP:=0;                                                     21595000
         SETSTATUS(INVALIDOP);                                          21600000
      END                                                               21605000
         ELSE                                                           21610000
      BEGIN                                                             21615000
         QMISCP.RSTATE:=RQSTATE;                                        21620000
         STARTWRITE;                                                    21625000
      END;                                                              21630000
   END                                                                  21635000
      ELSE                                                              21640000
   STRTANKDATA ;    <<START TANKING WRITE DATA>>                        21645000
END;  <<---------------END OF STRTPRESPACE---------------->>            21650000
                                                                        21655000
                                                                        21660000
                                                                        21665000
SUBROUTINE FINISHENQ ;                                                  21670000
BEGIN                                                                   21675000
   DISABLE;                                                             21680000
   DCNTRLP.ADDENQ:=1;                                                   21685000
   ENABLE;                                                              21690000
   TOS:=DXCNTP;      <<DO NOT MODIFY DXCNT DURING TANKING>>             21695000
   TANKDATA(SIOADDR,1,7);      <<TANK AN ENQ>>                          21700000
   DXCNTP:=TOS;      <<RESTORE REAL COUNT>>                             21705000
   IF = THEN                                                            21710000
   BEGIN             <<ENQ TANKED SUCCESSFULLY>>                        21715000
      DISABLE;                                                          21720000
      DCNTRLP.ADDENQ:=0;   <<RESET FLAG>>                               21725000
      ENABLE;                                                           21730000
      X:=RQSTATE - %34;                                                 21735000
      CASE X OF                                                         21740000
      BEGIN                                                             21745000
         STRTPRETOPOST ; <<TANK CR/LF,POSTSP WRT AFTER PRESP>>          21750000
         STRTPRESPACE ;  <<TANK PRESPACE CARRIAGE CNTRL BYTE>>          21755000
         STRTTBWAIT ;    <<TANK WRITE DATA>>                            21760000
         STRTPOSTSPACE ; <<TANK POSTSPACE CARRIAGE CNTRL>>              21765000
      END;                                                              21770000
   END;                                                                 21775000
   DISABLE;                                                             21780000
   DCNTRLP.ADDENQ:=0;  <<STILL CAN'T TANK ENQ, STUBBORN MULE!>>         21785000
   ENABLE;                                                              21790000
END;     <<--------------END OF FINISHENQ-------------------->>         21795000
                                                                        21800000
                                                                        21805000
                                                                        21810000
SUBROUTINE SERVWAITING;                                        <<04869>>21815000
   BEGIN                                                       <<04869>>21820000
   IF DBCNTP = 0 AND @IOQP <> 0 THEN                           <<04869>>21825000
      SETSTATUS(GOODIO);                                       <<04869>>21830000
   END;                                                        <<04869>>21835000
                                                               <<04869>>21840000
                                                               <<04869>>21845000
                                                               <<04869>>21850000
SUBROUTINE WRITEF ;                                                     21855000
BEGIN                                                                   21860000
   IF DMODEMP.MODEM <> 0 AND NOT DSAVEPL.CC THEN               <<02861>>21865000
      BEGIN                                                    <<02861>>21870000
      DSAVEPL.NOTLOGON := 1;                                   <<02861>>21875000
      STARTTIMEOUT(LOGONTO, DITP);                             <<02861>>21880000
      RETURN;                                                  <<02861>>21885000
      END;                                                     <<02861>>21890000
   STOPSPDSEN ;                                                         21895000
   ENABLE;                                                     <<01824>>21900000
   DSPEEDP.RESTSPD:=0;                                                  21905000
   IF IOQP(QPAR2).BINARY <> 0 THEN                                      21910000
   BEGIN         <<REQUEST IS FOR BINARY WRITE>>                        21915000
      DISABLE;                                                          21920000
      DLASTP.BWRITE:=1;                                                 21925000
      DCNTRLP.PTYON:=0;    <<WRITE WITH NO PARITY>>                     21930000
      ENABLE;                                                           21935000
   END;                                                                 21940000
   IF IOQPL(QPAR2) THEN                                                 21945000
   BEGIN         <<PRESPACE SPECIFIED>>                                 21950000
      DISABLE;                                                          21955000
      TOS:=DCNTRLP;                                                     21960000
      TOS.LFLAST:=0;                                                    21965000
      TOS.PRESPLAST:=1;                                                 21970000
      DCNTRLP:=TOS;                                                     21975000
      ENABLE;                                                           21980000
      STRTPRESPACE ;                                                    21985000
   END                                                                  21990000
      ELSE                                                              21995000
   BEGIN         <<POSTSPACE SPECIFIED>>                                22000000
      DISABLE;                                                          22005000
      DCNTRLP.PRESPLAST:=0;                                             22010000
      ENABLE;                                                           22015000
      IF <> AND NOT DITPL.NEWLINE THEN                                  22020000
      BEGIN      <<POSTSP FOLLOWS A PREVIOUS PRESP,DP CR/LF>>           22025000
         STRTPRETOPOST ;                                                22030000
      END                                                               22035000
         ELSE                                                           22040000
      STRTANKDATA ;                                                     22045000
   END;                                                                 22050000
END;     <<---------------END OF WRITEF-------------------->>           22055000
                                                                        22060000
                                                                        22065000
                                                                        22070000
SUBROUTINE GETTERMTYPEF ;                                               22075000
BEGIN                                                                   22080000
   QWBCTP:=DTYPEP.TTYPE;    <<GET TERMINAL TYPE>>                       22085000
   SETSTATUS(GOODIO);                                                   22090000
END;                                                                    22095000
                                                                        22100000
                                                                        22105000
                                                                        22110000
SUBROUTINE RETURNSPDF ;                                                 22115000
BEGIN                                                                   22120000
   TEMP:=DSPEEDP.OUTSPEED;   <<SET CURRENT SPEED IN ADCC BAUDRATE CODE>>22125000
   X:=MAXSPEED;                                                         22130000
   DO IF TEMP=SPDCODE(X) THEN QWBCTP:=SPEED(X) UNTIL DXBZ;              22135000
      <<TRANSLATE AND RETURN CODE IN CHAR/SEC>>                         22140000
   SETSTATUS(GOODIO);                                                   22145000
END;                                                                    22150000
                                                                        22155000
                                                                        22160000
SUBROUTINE STOPCHAR ;                                                   22165000
BEGIN                                                                   22170000
   DITP(DSTOP):=QPAR1P;   <<SET SSBRK CHAR AND EOR CHAR>>               22175000
   IF DITP(X) <> 0 THEN                                                 22180000
   BEGIN                                                                22185000
      TEMP:=WA0(DITP(DILTP)+ISIOP);                                     22190000
      WA0(TEMP+13):=DITP(DSTOP);   <<PUT SSBRK & EOR CHARS INTO BUFR>>  22195000
      WA0(TEMP+SYNSTRT):=[8/4,8/5];<<SET SPECL CHAR SIO INSTRUCTION>>   22200000
      WA0(X:=X+1):=2;                                                   22205000
      WA0(X:=X+1):=1;                                                   22210000
      WA0(X:=X+1):=[1/1,1/0,1/1,13/0];  <<FROM LEFT BYTE>>              22215000
      WA0(X:=X+1):=SYSDB+TEMP+13;       <<BUFFER ADDRESS>>              22220000
      WA0(X:=X+1):=[8/1,1/1,7/2];       <<INTERRUPT/HALT>>              22225000
      WA0(X:=X+1):=20;                  <<CODE FOR CNTRLFINI>>          22230000
      DITP(DSIOPC) := SYSDB + TEMP + SYNSTRT;                  <<02861>>22235000
      STOPSPDSEN ;                                                      22240000
      DITP.DSTATE:=MODEMSIO;                                            22245000
      TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                           22250000
      TOS:=DITP(DSIOPC);                                                22255000
      STARTSIO;                                                         22260000
   END;                                                                 22265000
   QWBCTP:=0;                                                           22270000
   SETSTATUS(GOODIO);                                                   22275000
END;                                                                    22280000
                                                                        22285000
                                                                        22290000
                                                                        22295000
                                                                        22300000
                                                                        22305000
SUBROUTINE SETCNTRLAF ;                                                 22310000
BEGIN                                                                   22315000
   DTYPEP.CONSINTRPT:=QPAR1P;   <<SET OR CLR CNTRL A INTERRUPT FLAG>>   22320000
   QWBCTP:=0;                                                           22325000
   SETSTATUS(GOODIO);                                                   22330000
END;                                                                    22335000
                                                                        22340000
                                                                        22345000
                                                                        22350000
SUBROUTINE PTAPEF ;                                                     22355000
BEGIN                                                                   22360000
   DITPD(DTBF2):=IOQPD(QP1D);  <<STORE SPOOL BUF STARTING DISC ADDR>>   22365000
   TOS:=@SBUF+IOQP(QADDR);  <<CONVERT 1ST SBUF INDEX INTO SYSDB ADDR>>  22370000
   TOS:=@SBUF+SBUF(IOQP(X)-1);  <<GET LINK TO 2ND SBUF & FORM ADDRESS>> 22375000
   DITPD(DTBUFD):=TOS;                                                  22380000
   STARTREAD ;  <<START READ OPERATION,DO NOT SERVICE NXTIOQ>>          22385000
END;                                                                    22390000
                                                                        22395000
                                                                        22400000
                                                                        22405000
SUBROUTINE SETBMODEF ;                                                  22410000
BEGIN                                                                   22415000
   DISABLE;                                                             22420000
   DMODEMP.BMODE:=QPAR1P;  <<SET OR CLR BRK MODE BIT>>                  22425000
   ENABLE;                                                              22430000
   QWBCTP:=0;                                                           22435000
   SETSTATUS(GOODIO);                                                   22440000
END;                                                                    22445000
                                                                        22450000
                                                                        22455000
                                                                        22460000
SUBROUTINE SETCMODEF ;                                                  22465000
BEGIN                                                                   22470000
   DISABLE;                                                             22475000
   DMODEMP.CMODE:=QPAR1P;  <<SET OR CLR CONSOLE MODE BIT>>              22480000
   ENABLE;                                                              22485000
   QWBCTP:=0;                                                           22490000
   SETSTATUS(GOODIO);                                                   22495000
END;                                                                    22500000
                                                                        22505000
                                                                        22510000
                                                                        22515000
SUBROUTINE SETPTYF ;                                                    22520000
BEGIN                                                                   22525000
   IF LOGICAL(QPAR1P) > 3 OR DITPL(DLAST).EIGHTBITS THEN       <<04234>>22530000
   BEGIN              <<ILLEGAL CALL PARAMETER>>                        22535000
      QWBCTP:=0;                                                        22540000
      SETSTATUS(INVALIDOP);                                             22545000
   END                                                                  22550000
      ELSE                                                              22555000
   BEGIN                                                                22560000
      DISABLE;                                                          22565000
      QWBCTP:=DCNTRLP.PARITYBITS;  <<RETURN OLD PTY SETTING>>           22570000
      DCNTRLP.PARITYBITS:=QPAR1P;                                       22575000
      ENABLE;                                                           22580000
      SETSTATUS(GOODIO);                                                22585000
   END;                                                                 22590000
END;                                                                    22595000
                                                                        22600000
                                                                        22605000
                                                                        22610000
SUBROUTINE BADREQUESTF ;                                                22615000
BEGIN                                                                   22620000
   QWBCTP:=0;                                                           22625000
   SETSTATUS(INVALIDOP);                                                22630000
END;                                                                    22635000
                                                                        22640000
                                                                        22645000
                                                                        22650000
                                                                        22655000
                                                                        22660000
SUBROUTINE TERMTYPEF ;                                                  22665000
BEGIN                                                                   22670000
   TOS:=QPAR1P;   <<GET SPECIFIED NEW TERMTYPE>>                        22675000
   TOS:=DSPEEDP.INSPEED;                                                22680000
   TOS:=DSPEEDP.OUTSPEED;                                               22685000
   SETTERMTYPE(*,*,*,DITP);                                             22690000
   IF <> THEN                                                           22695000
   BEGIN                                                                22700000
      QWBCTP:=0;                                                        22705000
      SETSTATUS(INVALIDOP);                                             22710000
   END                                                                  22715000
      ELSE                                                              22720000
   BEGIN                                                                22725000
      DISABLE;                                                          22730000
      DITP(DSAVE).HSTATE:=ONLINE;                                       22735000
      DITP.UP:=1;                                                       22740000
      DSPEEDP.SPDSENSING:=0;                                            22745000
      SETBAUDRATE;                                                      22750000
      ENABLE;                                                           22755000
      SETSTATUS(GOODIO);                                                22760000
   END;                                                                 22765000
END;      <<-------------END OF TERMTYPEF-------------->>               22770000
                                                                        22775000
                                                                        22780000
                                                                        22785000
SUBROUTINE CFWRITEF ;                                                   22790000
BEGIN                                                                   22795000
   DISABLE;                                                             22800000
   DITP(DLDEV).FLUSH:=0;  <<CLR BRK ACCEPTED FLUSH FLAG>>               22805000
   IF <> THEN DCNTRLP.PRESPLAST:=1;                                     22810000
         <<FORCE A CR/LF IF NEXT WRITE IS A POSTPACE>>                  22815000
   ENABLE;                                                              22820000
   IOQP(QFUNC).FUNC:=WRITING;  <<REQUEST A WRITE FOR CURRENT IOQ>>      22825000
   FUNCTION:=WRITING;                                                   22830000
   WRITEF;                                                              22835000
END;                                                                    22840000
                                                                        22845000
                                                                        22850000
SUBROUTINE CXECHOF ;                                                    22855000
BEGIN                                                                   22860000
   DITP(DLDEV).NO'CX'ECHO:=FUNCTION;                                    22865000
   QWBCTP:=0;                                                           22870000
   SETSTATUS(GOODIO);                                                   22875000
END;                                                                    22880000
                                                                        22885000
                                                                        22890000
                                                                        22895000
SUBROUTINE READTIMEF ;                                                  22900000
BEGIN                                                                   22905000
   IF DITP(DRTIME) <> -1 THEN                                           22910000
   BEGIN           <<NO OVERFLOW,VALID READ TIME>>                      22915000
      QWBCTP:=DITP(X);                                                  22920000
      SETSTATUS(GOODIO);                                                22925000
   END                                                                  22930000
      ELSE                                                              22935000
   BEGIN                                                                22940000
      QWBCTP:=0;                                                        22945000
      SETSTATUS(RTOVERFLOW);                                            22950000
   END;                                                                 22955000
END;                                                                    22960000
                                                                        22965000
                                                                        22970000
                                                                        22975000
SUBROUTINE PARITYF ;                                                    22980000
BEGIN                                                                   22985000
   IF NOT DITPL(DLAST).EIGHTBITS THEN                                   22990000
  BEGIN        <<NOT USING 8-BIT PROTOCOL,PARITY ALLOWED>>              22995000
   DISABLE;                                                             23000000
   TEMP:=WA0(DITP(DILTP)+ISIOP);                                        23005000
   DITP.PTYCHK:=NOT LOGICAL(FUNCTION);                                  23010000
   DITP(DSIOPC):=SYSDB+TEMP+MODSIOPTY;                                  23015000
   WA0(TEMP+4) := UART;                                        <<02032>>23020000
   STOPSPDSEN ;                                                         23025000
   DITP.DSTATE:=MODEMSIO;                                               23030000
   TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                              23035000
   X:=ABS(S0*4+3).IDLESIO;                                              23040000
   IF <> THEN SUDDENDEATH(209);                                <<01539>>23045000
   TOS:=DITP(DSIOPC);                                                   23050000
   STARTSIO;                                                            23055000
   ENABLE;                                                              23060000
   QWBCTP:=0;                                                           23065000
   SETSTATUS(GOODIO);                                                   23070000
  END                                                          <<04234>>23075000
  ELSE   <<8 BIT PROTOCOL, PARITY NOT ALLOWED>>                <<04234>>23080000
   BEGIN                                                       <<04234>>23085000
   QWBCTP := 0;                                                <<04234>>23090000
   SETSTATUS(INVALIDOP);                                       <<04234>>23095000
   END;                                                        <<04234>>23100000
END;                                                                    23105000
                                                                        23110000
                                                                        23115000
                                                                        23120000
                                                                        23125000
SUBROUTINE LOGGEDONF ;                                                  23130000
BEGIN                                                                   23135000
   STOPTIMEOUT(LOGONTO,DITP);                                           23140000
   IF DITP(DSAVE).HSTATE=LOGGINGON THEN DITP(DSAVE).HSTATE:=ONLINE;     23145000
   IF QPAR1P=SESSION THEN DSPEEDP.BRKOK:=1;                             23150000
   DITP(DMONTR).LOGONTYPE := QPAR1P;                           <<01449>>23155000
   QWBCTP:=0;                                                           23160000
   SETSTATUS(GOODIO);                                                   23165000
END;                                                                    23170000
                                                                        23175000
                                                                        23180000
                                                                        23185000
                                                                        23190000
SUBROUTINE ECHOF ;                                                      23195000
BEGIN                                                                   23200000
   TOS:=(NOT DSPEEDPL).ECHO;                                            23205000
   DSPEEDP.ECHO:=NOT LOGICAL(FUNCTION);                                 23210000
   QWBCTP:=TOS;                                                         23215000
   SETSTATUS(GOODIO);                                                   23220000
END;                                                                    23225000
                                                                        23230000
                                                                        23235000
SUBROUTINE BREAKF ;                                                     23240000
BEGIN                                                                   23245000
   DSPEEDP.BRKOK:=FUNCTION;                                             23250000
   QWBCTP:=0;                                                           23255000
   SETSTATUS(GOODIO);                                                   23260000
END;                                                                    23265000
                                                                        23270000
                                                                        23275000
SUBROUTINE SSBREAKF ;                                                   23280000
BEGIN                                                                   23285000
   DISABLE;                                                             23290000
   TOS:=LPDTD(LDEV);                                                    23295000
   TOS.(SSBREAK':1):=0;   <<CLEAR SSBREAK OCCURRED FLAG>>               23300000
   LPDTD(X):=TOS;         <<RESTORE LPDT ENTRY>>                        23305000
   DSPEEDP.SSBRKOK:=FUNCTION;                                           23310000
   QWBCTP:=0;                                                           23315000
   SETSTATUS(GOODIO);                                                   23320000
END;                                                                    23325000
                                                                        23330000
                                                                        23335000
SUBROUTINE TAPEF ;                                                      23340000
BEGIN                                                                   23345000
   DSPEEDP.TAPEMODE:=FUNCTION;                                          23350000
   QWBCTP:=0;                                                           23355000
   SETSTATUS(GOODIO);                                                   23360000
END;                                                                    23365000
                                                                        23370000
                                                                        23375000
SUBROUTINE TIMEF ;                                                      23380000
BEGIN                                                                   23385000
   DTYPEP.TIMEREAD:=FUNCTION;                                           23390000
   QWBCTP:=0;                                                           23395000
   SETSTATUS(GOODIO);                                                   23400000
END;                                                                    23405000
                                                                        23410000
                                                                        23415000
                                                                        23420000
SUBROUTINE ALLOCATEF ;                                                  23425000
BEGIN                                                                   23430000
   BADREQST:=FALSE;                                                     23435000
      STOPSPDSEN;                                              <<02861>>23440000
      HALTSIO;  <<HALT SIO PROG>>                              <<04244>>23445000
      X:=LOGICAL(QPAR1P) LOR IOQPL(QPAR2);                              23450000
      IF = THEN                                                         23455000
      BEGIN        <<USE PRECONFIGURED VALUES>>                         23460000
         IF NOT DITPL.UP THEN                                  <<00637>>23465000
        BEGIN   <<OK TO USE DEFAULT VALUE>>                    <<00637>>23470000
         TOS:=DLASTP.TERMINALTYPE;                                      23475000
         TOS:=DLASTP.TERMSPEED;                                         23480000
        END                                                    <<00637>>23485000
           ELSE                                                <<00637>>23490000
        BEGIN                                                  <<00637>>23495000
         TOS:=DTYPEP.TTYPE;   <<USE LATEST VALUES>>            <<00637>>23500000
         TOS:=DSPEEDP.INSPEED;                                 <<00637>>23505000
        END;                                                   <<00637>>23510000
         IF = THEN BADREQST:=TRUE;   <<UNDETERMINED SPEED>>             23515000
      END                                                               23520000
         ELSE                                                           23525000
      BEGIN                                                             23530000
         TOS:=QPAR1P;                                                   23535000
         TOS:=IOQP(QPAR2);      <<GET NEW SPEED SPECIFICATION>>         23540000
         IF = THEN BADREQST:=TRUE                                       23545000
            ELSE                                                        23550000
         BEGIN                                                          23555000
            TEMP:=TOS;                                                  23560000
            X:=MAXSPEED;                                                23565000
            DO IF TEMP=SPEED(X) THEN GOTO OUT UNTIL DXBZ;               23570000
            BADREQST:=TRUE;     <<ILLEGAL SPEED SPECIFIED>>             23575000
         OUT:  TOS:=SPDCODE(X); <<GET NEW SPEED IN ADCC CODE>>          23580000
         END;                                                           23585000
      END;                                                              23590000
                                                               <<00637>>23595000
                                                                        23600000
   IF NOT BADREQST THEN                                                 23605000
   BEGIN                                                                23610000
      TOS:=S0;       <<DUPLICATE NEW SPEED AS OUTPUT SPEED>>            23615000
      SETTERMTYPE(*,*,*,DITP);                                          23620000
      IF <> THEN                                                        23625000
      BEGIN          <<BAD BAD LEROY BROWN!>>                           23630000
         QWBCTP:=0;                                                     23635000
         SETSTATUS(INVALIDOP);                                          23640000
         DSPEEDP.RESTSPD := 0;                                 <<02861>>23645000
         IF <> THEN IDLEWAIT(DITP);                            <<02861>>23650000
      END                                                               23655000
         ELSE                                                           23660000
      BEGIN                                                             23665000
         DISABLE;                                                       23670000
         DITP(DSAVE).HSTATE:=ONLINE;                                    23675000
         DITP.UP:=1;                                                    23680000
        IF = THEN                                              <<01464>>23685000
          BEGIN                                                <<01464>>23690000
           IF DITP(DTRLX).LOGONTRLX <> 0 THEN                  <<01449>>23695000
             STOPTIMEOUT(LOGONTO,DITP);                        <<01449>>23700000
          IF HP2631B THEN RQSTATE := RESET31;                  <<04869>>23705000
          END;                                                 <<01464>>23710000
         DSPEEDP.SPDSENSING:=0;                                         23715000
         SETBAUDRATE;                                                   23720000
         ENABLE;                                                        23725000
      IF RQSTATE=RESET31 THEN RESET2631 ELSE                   <<01464>>23730000
         SETSTATUS(GOODIO);                                             23735000
      END;                                                              23740000
   END                                                                  23745000
      ELSE                                                              23750000
   BEGIN                                                                23755000
       DDEL; << DEL SPEED AND T-TYPE >>                        <<01621>>23760000
      QWBCTP:=0;                                                        23765000
      SETSTATUS(INVALIDOP);                                             23770000
      DSPEEDP.RESTSPD := 0;                                    <<02861>>23775000
      IF <> THEN IDLEWAIT(DITP);                               <<02861>>23780000
   END;                                                                 23785000
END;     <<----------------END OF ALLOCATEF----------------->>          23790000
                                                                        23795000
                                                               <<00637>>23800000
                                                               <<00637>>23805000
                                                               <<00637>>23810000
SUBROUTINE FOPENF;                                             <<00637>>23815000
BEGIN                                                          <<00637>>23820000
    IF DITPL.UP THEN                                           <<01842>>23825000
      BEGIN                                                    <<01464>>23830000
      SETSTATUS(GOODIO);                                       <<01464>>23835000
      RETURN;                                                  <<01464>>23840000
      END;                                                     <<01464>>23845000
   QWBCTP:=0;                                                  <<00637>>23850000
   ALLOCATEF;                                                  <<00637>>23855000
END;                                                           <<00637>>23860000
                                                               <<00637>>23865000
                                                               <<00637>>23870000
                                                               <<00637>>23875000
                                                                        23880000
                                                                        23885000
                                                                        23890000
SUBROUTINE OUTSPDF ;                                                    23895000
BEGIN                                                                   23900000
   QWBCTP:=0;                                                           23905000
   TEMP:=DSPEEDP.OUTSPEED;  <<GET OLD OUTPUT SPEED IN ADCC CODE>>       23910000
   X:=MAXSPEED;                                                         23915000
   DO IF TEMP=SPDCODE(X) THEN QWBCTP:=SPEED(X) UNTIL DXBZ;              23920000
   TEMP:=QPAR1P;      <<GET NEW OUTPUT SPEED IN CHAR/SEC>>              23925000
   I:=MAXSPEED+1;                                                       23930000
   STOP:=FALSE;                                                         23935000
   BADREQST:=FALSE;                                                     23940000
   DO BEGIN                                                             23945000
         I:=I-1;                                                        23950000
         IF TEMP=SPEED(I) THEN                                          23955000
         BEGIN                                                          23960000
            STOP:=TRUE;                                                 23965000
            TOS:=DTYPEP.TTYPE;                                          23970000
            TOS:=DSPEEDP.INSPEED;                                       23975000
            TOS:=SPDCODE(I);                                            23980000
            SETTERMTYPE(*,*,*,DITP);                                    23985000
            IF <> THEN BADREQST:=TRUE   <<ILLEGAL OUTPUT SPEED>>        23990000
               ELSE                                                     23995000
            BEGIN                                                       24000000
               DISABLE;                                                 24005000
               DITP(DSAVE).HSTATE:=ONLINE;                              24010000
               DITP.UP:=1;                                              24015000
               DSPEEDP.SPDSENSING:=0;                                   24020000
               SETBAUDRATE;                                             24025000
               ENABLE;                                                  24030000
            END;                                                        24035000
         END;                                                           24040000
      END UNTIL                                                         24045000
          I=1 OR STOP;                                                  24050000
      IF NOT STOP OR BADREQST THEN                                      24055000
      BEGIN                                                             24060000
         QWBCTP:=0;                                                     24065000
         SETSTATUS(INVALIDOP);                                          24070000
      END                                                               24075000
         ELSE                                                           24080000
      SETSTATUS(GOODIO);                                                24085000
END;                                                                    24090000
                                                                        24095000
                                                                        24100000
                                                                        24105000
                                                                        24110000
SUBROUTINE INSPDF ;                                                     24115000
BEGIN                                                                   24120000
   QWBCTP:=0;                                                           24125000
   TEMP:=DSPEEDP.INSPEED;   <<GET OLD INPUT SPEED,ADCC CODE>>           24130000
   X:=MAXSPEED;   <<GET TOTAL NUMBER OF DIFFERENT SPEEDS>>              24135000
   DO IF TEMP=SPDCODE(X) THEN QWBCTP:=SPEED(X) UNTIL DXBZ;              24140000
         <<TRANSLATE ADCC CODE INTO CHAR/SEC>>                          24145000
   TEMP:=QPAR1P;    <<GET NEW INPUT SPEED IN CHAR/SEC>>                 24150000
   I:=MAXSPEED+1;                                                       24155000
   STOP:=FALSE;                                                         24160000
   BADREQST:=FALSE;                                                     24165000
   DO BEGIN                                                             24170000
         I:=I-1;                                                        24175000
         IF TEMP=SPEED(I) THEN                                          24180000
         BEGIN           <<NEW INPUT SPEED IS LEGAL>>                   24185000
            STOP:=TRUE;                                                 24190000
            TOS:=DTYPEP.TTYPE;  <<GET TERM TYPE>>                       24195000
            TOS:=SPDCODE(I);    <<TRANSLATE CHAR/SEC INTO ADCC CODE>>   24200000
            TOS:=DSPEEDP.OUTSPEED;                                      24205000
            SETTERMTYPE(*,*,*,DITP);                                    24210000
            IF <> THEN BADREQST:=TRUE    <<ILLEGAL INPUT SPEED>>        24215000
               ELSE                                                     24220000
            BEGIN                                                       24225000
               DISABLE;                                                 24230000
               DITP(DSAVE).HSTATE:=ONLINE;                              24235000
               DITP.UP:=1;                                              24240000
               DSPEEDP.SPDSENSING:=0;                                   24245000
               SETBAUDRATE;                                             24250000
               ENABLE;                                                  24255000
            END;                                                        24260000
         END;                                                           24265000
      END UNTIL                                                         24270000
          I=1 OR STOP;                                                  24275000
                                                                        24280000
      IF NOT STOP OR BADREQST THEN                                      24285000
      BEGIN                                                             24290000
         QWBCTP:=0;                                                     24295000
         SETSTATUS(INVALIDOP);                                          24300000
      END                                                               24305000
         ELSE                                                           24310000
      SETSTATUS(GOODIO);  <<RETURN OLD SPEED IN QWBCT>>                 24315000
END;     <<---------------END OF INSPDF----------------------->>        24320000
                                                                        24325000
                                                                        24330000
                                                                        24335000
                                                                        24340000
SUBROUTINE FCLOSEF ;                                                    24345000
BEGIN                                                                   24350000
   ENABLE;                                                              24355000
   IF DMODEMP.TMODE=NULL THEN CLEANUP;                                  24360000
   IF'PRINTER THEN                                             <<04869>>24365000
     BEGIN                                                     <<01464>>24370000
     NEWFORM := 1;                                             <<01464>>24375000
     IF = THEN                                                 <<01464>>24380000
       BEGIN                                                   <<01464>>24385000
       DOCRFF;                                                 <<01464>>24390000
       RETURN;                                                 <<01464>>24395000
       END;                                                    <<01464>>24400000
     DISABLE;                                                  <<04242>>24405000
     DITPL.NEWLINE := 1;                                       <<01464>>24410000
     ENABLE;                                                   <<04242>>24415000
     END;                                                      <<01464>>24420000
                                                               <<01464>>24425000
   IF NOT DITPL.NEWLINE THEN                                            24430000
   BEGIN                                                                24435000
      DISABLE;                                                 <<04242>>24440000
      DITP.DSTATE:=EORSYNC;                                             24445000
      ENABLE;                                                  <<04242>>24450000
      STOPSPDSEN ;            SENDCRLF(NXTNULL,DITP);                   24455000
      CHECKSERV:=FALSE;  <<DON'T SERVICE NEW REQST UNTIL CR/LF SENT>>   24460000
   END                                                                  24465000
      ELSE                                                              24470000
   BEGIN                                                                24475000
      QWBCTP:=0;                                                        24480000
      SETSTATUS(GOODIO);                                                24485000
   END;                                                                 24490000
END;  <<--------------------END OF FCLOSEF--------------------->>       24495000
                                                                        24500000
                                                                        24505000
                                                                        24510000
SUBROUTINE DCLOSEF ;                                                    24515000
BEGIN                                                                   24520000
   IF'PRINTER THEN                                             <<04869>>24525000
    BEGIN                                                      <<01464>>24530000
    NEWFORM := 1;                                              <<01464>>24535000
    IF = THEN                                                  <<01464>>24540000
      BEGIN;                                                   <<01464>>24545000
      DOCRFF;                                                  <<01464>>24550000
      RETURN;                                                  <<01464>>24555000
      END;                                                     <<01464>>24560000
    END;                                                       <<01464>>24565000
   DITP(DSAVE).HSTATE := CLOSED; << TO AVOID ABORTJOB >>       <<02860>>24570000
   QWBCTP:=0;                                                           24575000
   SETSTATUS(GOODIO);                                                   24580000
   SERVDISCNCT;                                                <<02860>>24585000
END;                                                                    24590000
                                                                        24595000
                                                                        24600000
                                                                        24605000
                                                                        24610000
                                                                        24615000
                                                                        24620000
SUBROUTINE SETTOF ;                                                     24625000
BEGIN                                                                   24630000
   DITP(DRTMAX):=QPAR1P;                                                24635000
   QWBCTP:=0;                                                           24640000
   SETSTATUS(GOODIO);                                                   24645000
END;                                                                    24650000
                                                                        24655000
                                                                        24660000
                                                                        24665000
SUBROUTINE OLDIOQ ;                                                     24670000
BEGIN                                                                   24675000
   IF FUNCTION > FMAX THEN SETSTATUS(INVALIDOP)                         24680000
      ELSE                                                              24685000
   CASE FUNCTION OF                                                     24690000
   BEGIN                                                                24695000
      READF ;    <<READ OPERATION>>                                     24700000
      WRITEF ;   <<WRITE OPERATION>>                                    24705000
      FOPENF ;   <<FILE OPEN>>                                          24710000
      FCLOSEF ;  <<FILE CLOSE>>                                         24715000
      DCLOSEF ;  <<DEVICE CLOSE>>                                       24720000
      SETTOF ;   <<SET READ TIMEOUT IN SECONDS>>                        24725000
      INSPDF ;   <<SET INPUT SPEED,GIVEN IN CHAR/SEC>>                  24730000
      OUTSPDF ;  <<SET OUTPUT SPEED>>                                   24735000
      ECHOF ;    <<ENABLE ECHO>>                                        24740000
      ECHOF ;    <<DISABLE ECHO>>                                       24745000
      BREAKF ;   <<DISABLE BREAK>>                                      24750000
      BREAKF ;   <<ENABLE BREAK>>                                       24755000
      SSBREAKF ; <<DISABLE CONTROL Y>>                                  24760000
      SSBREAKF ; <<ENABLE CONTROL Y>>                                   24765000
      TAPEF ;    <<DISABLE TAPEMODE>>                                   24770000
      TAPEF ;    <<ENABLE TAPEMODE>>                                    24775000
      TIMEF ;    <<DISABLE READ TIMER>>                                 24780000
      TIMEF ;    <<ENABLE READ TIMER>>                                  24785000
      READTIMEF ;<<RETURN READ TIME>>                                   24790000
      PARITYF ;  <<DISABLE PARITY CHECK>>                               24795000
      PARITYF ;  <<ENABLE PARITY CHECK>>                                24800000
      LOGGEDONF ;<<USER SUCCESSFULLY LOGGED ON>>                        24805000
      BADREQUESTF ;<<NOT USED>>                                         24810000
      TERMTYPEF ;<<SET TERM TYPE>>                                      24815000
      ALLOCATEF ;<<ALLOCATE TERMINAL>>                                  24820000
      CFWRITEF ; <<CLEAR FLUSH AND WRITE>>                              24825000
      CXECHOF ;  <<CNTRL X ECHO ON>>                                    24830000
      CXECHOF ;  <<CNTRL X ECHO OFF>>                                   24835000
      SETSTATUS(GOODIO);<<NO OP>>                                       24840000
      PTAPEF ;   <<PTAPE READ>>                                         24845000
      SETBMODEF ;<<SET BREAK MODE>>                                     24850000
      SETCMODEF ;<<SET CONSOLE MODE>>                                   24855000
      SETPTYF ;  <<SET PARITY>>                                         24860000
      ALLOCATEF ;<<ALLOCATE TERMINAL>>                                  24865000
      TERMTYPEF ;<<SET TERM TYPE>>                                      24870000
      GETTERMTYPEF ;<<RETURN TERM TYPE>>                                24875000
      RETURNSPDF ;<<RETURN OUTPUT SPEED>>                               24880000
      STOPCHAR ; <<SET STOP CHARS>>                                     24885000
      SETCNTRLAF ;<<SET CONSOLE INTERRUPT>>                             24890000
   END;                                                                 24895000
END;     <<----------------END OF OLDIOQ------------------>>            24900000
                                                                        24905000
                                                                        24910000
                                                                        24915000
SUBROUTINE NEWIOQ ;                                                     24920000
BEGIN                                                                   24925000
    IF DITP(DSAVE).HSTATE >= HANGUPTURN THEN BEGIN             <<02860>>24930000
        SETSTATUS(OFFLINE);                                    <<02860>>24935000
        RETURN;                                                <<02860>>24940000
    END;                                                       <<02860>>24945000
   IF DMODEMP.TMODE < CONSMODE OR IOQP.RPLEVEL >= CONSMODE THEN         24950000
   BEGIN                                                                24955000
      FLAG:=(IOQP(QPAR2).BINARY <> 0) XOR DLASTPL.BWRITE;               24960000
      IF NOT FLAG AND IOQP.RPLEVEL=DMODEMP.LPLEVEL AND FUNCTION         24965000
               <=WRITING AND DITP.DSTATE<=WRITING OR DITP.DSTATE        24970000
                =NULL  THEN                                             24975000
      BEGIN    <<OK TO CONCATENATE WRITE OPERATIONS>>                   24980000
         IF FUNCTION<>WRITING OR FLAG THEN DLASTP.BWRITE:=0;            24985000
                                                                        24990000
         IF IOQP.RPLEVEL > DMODEMP.LPLEVEL AND NOT DITPL.NEWLINE THEN   24995000
         BEGIN      <<HIGHER PREEMPT LEVEL AND NOT A NEW LINE>>         25000000
            DISABLE;                                           <<04242>>25005000
            DITP.DSTATE:=EORSYNC;                                       25010000
            ENABLE;                                            <<04242>>25015000
            STOPSPDSEN ;                                                25020000
            ENABLE;                                            <<01824>>25025000
            SENDCRLF(NXTNULL,DITP);   <<CR/LF TO CLEAN UP CARRIAGE>>    25030000
         END                                                            25035000
            ELSE                                                        25040000
         BEGIN                                                          25045000
            DISABLE;                                                    25050000
            DMODEMP.LPLEVEL:=IOQP;  <<RECORD NEW PREMPT LEVEL>>         25055000
            TOS:=QWBCTP;      <<GET REQUESTED XSFER COUNT>>             25060000
            IF < THEN TOS:=-TOS ELSE TOS:=TOS&LSL(1);                   25065000
            IF < THEN                                                   25070000
            BEGIN                                                       25075000
               DEL;                                                     25080000
               TOS:=%77777;                                             25085000
            END;                                                        25090000
            DRBCTP:=S0;      <<STORE REQUESTED XSFER BYTE COUNT>>       25095000
            WCNT:=(S0+1)&LSR(1);                                        25100000
            BCNT:=TOS;                                                  25105000
            DXCNTP:=0;       <<NO WRITE BYTES HAS BEEN TANKED YET>>     25110000
            ENABLE;                                                     25115000
            OLDIOQ ;    <<GO SERVICE IOQ>>                              25120000
         END;                                                           25125000
      END;                                                              25130000
   END;                                                                 25135000
END;        <<------------------END OF NEWIOQ------------------>>       25140000
                                                                        25145000
                                                                        25150000
                                                                        25155000
SUBROUTINE SERVIOQ ;                                                    25160000
BEGIN                                                                   25165000
   ENABLE;                                                              25170000
   IF'PRINTER OR FUNCTION <= WRITING OR                        <<04869>>25175000
     FUNCTION = CLRFLU'WRT THEN                                <<04869>>25180000
   BEGIN       <<SET UP BCNT,WCNT,AND QIADDR FOR USE>>                  25185000
      TOS:=DRBCTP;                                                      25190000
      WCNT:=(S0+1)&LSR(1);                                              25195000
      BCNT:=TOS;                                                        25200000
      TOS:=ABS(ABS(CPCB)+PCB3).DSTFIELD;                                25205000
           <<GET CURRENT PROCESS STACK DST NUMBER>>                     25210000
      PUSH(Q,DL);      <<A=DL-DB,B=Q-DB>>                               25215000
      TOS:=TOS-TOS+1;  <<GET Q-DL+1>>                                   25220000
      X:=-S0;                                                           25225000
      TOS:=TOS+Q0(X);  <<DST OFFSET OF Q+1=(Q-DL+1)+(DL-A)>>            25230000
      Q1ADDR:=TOS;                                                      25235000
   END;                                                                 25240000
   X:=RQSTATE.(12:4);    <<GET LAST 4 BITS OF REQUEST STATE>>           25245000
   CASE X OF                                                            25250000
   BEGIN                                                                25255000
      NEWIOQ ;  <<NEW REQUEST>>                                         25260000
      OLDIOQ ;  <<PREVIOUS OPERATION IN PROGRESS>>                      25265000
                       ;                                                25270000
      READDONE ;<<RD COMPLETED,DATA NOT YET XSFERRED TO                 25275000
                            CALLER'S STACK>>                            25280000
      SERVSTOPPED ; <<READ HAS BEEN STOPPED>>                           25285000
      STARTREAD ;<<STRT RD AS SOON AS CURRENT WRT FINISHES>>            25290000
       RESET2631;                                              <<01464>>25295000
      SERVWAITING;                                             <<04869>>25300000
      STRTPRETOPOST ; <<WAITING TO TANK A PRE TO POST CRLF>>            25305000
      STRTPRESPACE ;<<WAITING TO TANK PRESPACE CARRG CNTRL>>            25310000
      STRTTBWAIT ;  <<WAITING TO TANK MORE CALLER'S DATA>>              25315000
       STRTPOSTSPACE ;<<WAITING TO TANK POSTSP CARRG CNTRL>>            25320000
      FINISHENQ ;   <<WAITING TO TANK ENQ>>                             25325000
      FINISHENQ ;                                                       25330000
      FINISHENQ ;                                                       25335000
      FINISHENQ ;                                                       25340000
   END;                                                                 25345000
END;        <<----------------END OF SERVIOQ----------------->>         25350000
                                                                        25355000
                                                                        25360000
                                                                        25365000
                                                                        25370000
                                                                        25375000
                                                                        25380000
                                                                        25385000
                                                                        25390000
<<-------------------PROCEDURE MAIN BODY---------------------->>        25395000
                                                                        25400000
<<SET UP POINTERS TO ACCESS DIT INFORMATION>>                           25405000
TOS:=6;          <<SET UP SIOADDR: DST# OF ALL OF MEMORY>>              25410000
TOS:=SYSDB+WA0(DITP(DILTP)+ISIOP);  <<SIO PROG ABS ADDRESS>>            25415000
TOS:=DITP(DLDEV).DLDEVN;    <<LDEV: LOGICAL DEV NUMBER>>                25420000
TOS:=0D;                                                                25425000
TOS:=0D;                                                                25430000
TOS:=0D;         <<RESERVE SPACE FOR 6 WORK VARIABLES>>                 25435000
TOS:=0D;                                                                25440000
TOS:=0D;         <<RESERVE SPACE FOR IOQP,QMISCP,QWBCTP,QPAR1P>>        25445000
TOS:=@DITP+DRQST;    <<SET DRQSTP>>                                     25450000
TOS:=S0+1;            <<SET DTYPEP>>                                    25455000
TOS:=S0+1;            <<SET DMODEMP>>                                   25460000
TOS:=S0+1;            <<SET DSPEEDP>>                                   25465000
TOS:=S0+1;            <<SET DCNTRLP>>                                   25470000
TOS:=S0+1;            <<SET DRBCTP>>                                    25475000
TOS:=S0+1;            <<SET DBCNTP>>                                    25480000
TOS:=S0+4;            <<SET DXCNTP>>                                    25485000
TOS:=S0+7;            <<SET DLASTP>>                                    25490000
TOS:=S0+10;           <<SET DTANKBP>>                                   25495000
                                                                        25500000
                                                                        25505000
DISABLE;                                                                25510000
TOS:=DITP;                                                              25515000
TOS.ACTIVE:=1;        <<SET IOTERM ACTIVE FLAG>>                        25520000
IF = THEN                                                               25525000
BEGIN                 <<IOTERM NOT ALREADY ACTIVE,OK TO SERVICE CALL>>  25530000
   TOS.REQUEST:=1;    <<SET FLAG TO REQUEST SERVICE>>                   25535000
   WHILE LS0.REQUEST DO                                                 25540000
   BEGIN                                                                25545000
      TOS.REQUEST:=0;                                                   25550000
      CHECKSERV:=TRUE;                                                  25555000
      X:=DBCNTP;      <<GET COUNT OF BYTES READ OR REMAINING TO BE      25560000
                        WRITTEN>>                                       25565000
      IF <> AND NOT LS0.UP THEN SUDDENDEATH(203);                       25570000
      DITP:=TOS;                                                        25575000
      ENABLE;                                                           25580000
      WHILE CHECKSERV DO                                                25585000
      BEGIN                                                             25590000
         CONTINUE:=TRUE;                                                25595000
         CHECKSERV:=FALSE;                                              25600000
         TOS:=DITP(DIOQP);                                              25605000
         TOS:=S0;                                                       25610000
         TOS:=S0+QMISC;                                                 25615000
         QPQM:=TOS;    <<SET UP IOQP AND QMISCP>>                       25620000
         DISABLE;                                                       25625000
         ASMB(TEST);   <<TEST IF IOQ EXIST>>                            25630000
         IF <> THEN                                                     25635000
         BEGIN                                                          25640000
            TOS:=QMISCP.RSTATE;  <<SET UP RQSTATE>>                     25645000
            TOS:=IOQP(QFUNC).FUNC;   <<SET UP FUNCTION>>                25650000
         END                                                            25655000
            ELSE                                                        25660000
         ASMB(DZRO,DECA);  <<NULL RQSTATE AND INVALID FUNCTION>>        25665000
         RQSFUNC:=TOS;                                                  25670000
         TOS:=TOS+QWBCT;                                                25675000
         TOS:=S0+1;                                                     25680000
         QCQP1:=TOS;                                                    25685000
                                                                        25690000
         IF DRQSTP <> 0 THEN                                            25695000
            WHILE DRQSTP<>0 DO SERVDRQST                                25700000
            ELSE                                                        25705000
         BEGIN                                                          25710000
            X:=DITP(DIOQP);                                             25715000
            IF <> THEN                                                  25720000
            IF DITPL.UP OR 1<=(FUNCTION-ALLOCATE+1)<=16 AND             25725000
               %100130&CSL(X) OR FUNCTION=FOPEN THEN           <<00637>>25730000
            BEGIN       <<READY TO DO I/O OR CALL IS TO ALLOCATE        25735000
                          TERM,RETUEN TTYPE OR RETURN OUTPUT SPD>>      25740000
               IF QMISCPL.NOSTOP THEN SERVIOQ                           25745000
                  ELSE                                                  25750000
               BEGIN                                                    25755000
                  X:=IOQP;      <<TEST FOR ABORT FLAG>>                 25760000
                  IF < THEN ABORTIOQ                                    25765000
                     ELSE                                               25770000
                  BEGIN                                                 25775000
                     IF DITP.DSTATE = WRITING AND              <<04243>>25780000
                        (DITPL.ENQACKWAIT OR DTYPEPL.WAITXON)  <<04243>>25785000
                        OR NOABORTS THEN                       <<04243>>25790000
                     BEGIN       <<NOT PAUSED WRITE & NO ABORTS>>       25795000
                        X:=DMODEMP;                                     25800000
                        IF < AND NOT QMISCPL.NOPREMPT THEN              25805000
                           SERVPREMPT;                                  25810000
                           <<RETURNS CONTINUE=TRUE IF NOT PREMPTD>>     25815000
                        IF CONTINUE THEN SERVIOQ ;                      25820000
                     END;                                               25825000
                  END;                                                  25830000
               END;                                                     25835000
            END                                                         25840000
               ELSE                                                     25845000
            BEGIN                                                       25850000
               QWBCTP:=0;   <<DEV NOT UP,CAN'T PERFORM REQUSET>>        25855000
               SETSTATUS(OFFLINE);                                      25860000
               <<RETURN IOQ W/OFFLINE STATUS,SERVICE NEXT REQUEST>>     25865000
            END;                                                        25870000
         END;                                                           25875000
      END;                                                              25880000
      DISABLE;                                                          25885000
      TOS:=DITP;                                                        25890000
   END;                                                                 25895000
   TOS.ACTIVE:=0;                                                       25900000
END                                                                     25905000
   ELSE                                                                 25910000
   TOS.REQUEST:=1;                                                      25915000
                                                                        25920000
DITP:=TOS;                                                              25925000
END;                                                                    25930000
<<--------------------END OF TERMIOM------------------------------>>    25935000
                                                                        25940000
                                                                        25945000
                                                                        25950000
ASMB(                                                                   25955000
   PCAL TERMIOM;  <<MONITOR PLABEL>>                                    25960000
   PCAL HELP;     <<NO INITIATOR>>                                      25965000
   CON 0;         <<NO COMPLETOR>>                                      25970000
   CON 0;         <<USE SYSTEM I/O PROCESS>>                            25975000
                                                                        25980000
   PCAL ADCCINIT; <<TERMINAL INITIALIZATION>>                           25985000
                                                                        25990000
   CON 1;         <<1 INTERRUPT PROCESSOR >>                            25995000
   PCAL TIP );                                                          26000000
END.     <<TERMINAL MONITOR CODE SEGMENT>>                              26005000
