$CONTROL MAP,CODE,USLINIT                                               00010000
<<            IOTERM0, MODULE 26 - TERMINAL DRIVER  SERIES 33 >>        00012000
<< HP32002C MPE SOURCE C.00.00 >>                                       00014000
<< COPYRIGHT     "(C) COPYRIGHT HEWLETT-PACKARD CO. 1980.           >>  00016000
<<     THIS PROGRAM MAY BE USED WITH ONE COMPUTER SYSTEM AT A       >>  00018000
<<     TIME AND SHALL NOT OTHERWISE BE RECORDED, TRANSMITTED OR     >>  00020000
<<     STORED IN A RETRIEVAL SYSTEM.  COPYING OR OTHER REPRODUCTION >>  00022000
<<     OF THIS PROGRAM EXCEPT FOR ARCHIVAL PURPOSES IS PROHIBITED   >>  00024000
<<     WITHOUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.>>  00026000
<< **** Note - Dollar Copyright cannot be used with this module *** >>  00028000
$TITLE " JAN 1, 1978       ADCC MONITOR/DRIVER "                        00030000
$CONTROL PRIVILEGED, UNCALLABLE, MAIN = IOTERM0                         00032000
$THIRTY                                                                 00034000
  <<                                                                    00036000
       TERMINAL REQUESTS -                                              00038000
                                                                        00040000
  OPERATION         FUNC         PARAMETERS                             00042000
                                                                        00044000
    READ             0    P1.( 0:1)  = NOCRLF IF SET                    00046000
                            .(13:3)  = EOF  SPECIFICATION               00048000
                                                                        00050000
                          P2.(0:8 ) - IF <> 0 THEN SPECIAL RD STOP CHAR 00052000
                            .(11:2) - IF 0 THEN ASCII ELSE BINARY       00054000
                            .(10:1) - OWN DC1/DC2 HANDSHAKE             00056000
                            .( 9:1) - AUTO HANDSHAKE FOR VIEW           00058000
                                                                        00060000
    WRITE            1    P1 - VERTICAL FORMAT SPECIFICATION            00062000
                                                                        00064000
                                  1 - USE 1ST DATA CHAR AS FORMAT SPEC  00066000
                                                                        00068000
                                %53 - "+", CR ONLY NO LF                00070000
                                %60 - "0", DOUBLE SPACE                 00072000
                                %61 - "1", TOP OF FORM                  00074000
                                                                        00076000
                                %200-%277,  N-%200 LF'S AND A CR        00078000
                                                                        00080000
                                %320- NO CR OR LF                       00082000
                                                                        00084000
                              ALL OTHERS, DO A CR/LF                    00086000
                                                                        00088000
                          P2.(15:1) - PRESPACE FLAG                     00090000
                            .(11:2) - IF NOT 0 THEN BINARY              00092000
                                                                        00094000
                                                                        00096000
  FILE  OPEN         2    NOP                                           00098000
  FILE CLOSE         3    CLEAN UP AND CRLF IF NOT NEW LINE             00100000
  DEVICE CLOSE       4    DISCONNECT                                    00102000
                                                                        00104000
  SET READ TIMEOUT   5    P1 - IF 0 CLEAR TIMEOUT ELSE TIME IN SECONDS  00106000
                                                                        00108000
  SET INPUT SPEED    6    P1 - SPEED IN CHARACTERS/SECOND               00110000
                                OLD SPEED RETURNED IN COUNT             00112000
  SET OUTPUT SPEED   7    P1 - SPEED IN CHARACTERS/SECOND               00114000
                                OLD SPEED RETURNED IN COUNT             00116000
                                                                        00118000
  ENABLE ECHO        8    RETURN OLD ECHO SETTING IN COUNT              00120000
  DISABLE ECHO       9    RETURN OLD ECHO SETTING IN COUNT              00122000
                                                                        00124000
  DISABLE BREAK      10                                                 00126000
  ENABLE  BREAK      11                                                 00128000
                                                                        00130000
  DISABLE CONTROL Y  12                                                 00132000
  ENABLE CONTROL Y   13                                                 00134000
                                                                        00136000
  DISABLE TAPEMODE   14                                                 00138000
  ENABLE  TAPEMODE   15                                                 00140000
                                                                        00142000
  DISABLE READ TIMER 16                                                 00144000
  ENABLE READ TIMER  17                                                 00146000
  RETURN READ TIME   18   COUNT CONTAINS READ TIME IN 1/100 SECONDS     00148000
                                                                        00150000
  DISABLE PARITY     19                                                 00152000
  ENABLE PARITY      20                                                 00154000
                                                                        00156000
  LOGGED ON          21   P1 - IF 1 THEN SESSION, SO ENABLE BREAK       00158000
                               IF 2 THEN JOB, NO BREAK         <<01449>>00160000
                               IF 0 THEN DATA, NO BREAK        <<01449>>00162000
                                                                        00164000
  NOT USED           22                                                 00166000
  SET TERM TYPE      23   P1 - TERM TYPE AS SPECIFIED IN THE MPE ERS    00168000
                                                                        00170000
  ALLOCATE TERMINAL  24   P1 - TERM TYPE AS SPECIFIED IN THE MPE ERS    00172000
                          P2 - SPEED IN CHARACTERS/SECOND               00174000
                                                                        00176000
  CLR FLUSH & WRITE  25   PARAMETERS SAME AS WRITE                      00178000
                                                                        00180000
  CNTRL X ECHO ON    26                                                 00182000
  CNTRL X ECHO OFF   27                                                 00184000
                                                                        00186000
  NO OPERATION       28                                                 00188000
                                                                        00190000
  PTAPE READ         29   P1, P2 - SPOOL BUFFER BEGINNING DISC ADDRESS  00192000
                                                                        00194000
  SET BREAK MODE     30   P1 - ODD = SET, EVEN = CLEAR BREAK MODE       00196000
                                                                        00198000
  SET CONSOLE MODE   31   P1 - ODD = SET, EVEN = CLEAR CONSOLE MODE     00200000
                                                                        00202000
  SET PARITY         32   P1 - 0  - EVEN PTY ON RD/WRT IF ENABLED       00204000
                               1  - ODD PTY ON RD/WRT IF ENABLED        00206000
                               2  - EVEN PARITY ON WRITE, EXPECTED ON RD00208000
                               3  - ODD PARITY ON WRITE,EXPECTED ON READ00210000
                                                                        00212000
  ALLOCATE TERMINAL  33   P1 - TERM TYPE AS SPECIFIED IN THE MPE ERS    00214000
                          P2 - SPEED IN CHARACTERS/SECOND               00216000
                                                                        00218000
  SET TERM TYPE      34   P1 - TERM TYPE AS SPECIFIED IN THE MPE ERS    00220000
                                                                        00222000
  RETURN TERM TYPE   35   TERMINAL TYPE RETURNED IN COUNT WORD          00224000
                                                                        00226000
  RETURN OUT SPEED   36   OUTPUT SPEED RETURNED IN COUNT WORD           00228000
                                                                        00230000
  SET STOP CHARS     37   P1 - IF 0 THEN DISABLE SPECIAL EOR AND        00232000
                               SUBSYSTEM BREAK CHARACTERS ELSE          00234000
                            .(0:8) = SUB SYSTEM BREAK CHARACTER         00236000
                            .(8:8) = END OF RECORD CHARACER             00238000
                                                                        00240000
  SET CONS INTERRUPT 38   P1 - ODD,ENABLE CNTRL A; EVEN DISABLE CNTRL A 00242000
                                                                        00244000
                                                                        00246000
                                                                        00248000
                                                                        00250000
                                                                        00252000
                                                                        00254000
                                                                        00256000
                                                                        00258000
    TERMINAL STATUS RETURNS -                                           00260000
                                                                        00262000
      %00  - NOT COMPLETED OR NOT STARTED                               00264000
                                                                        00266000
       01  - NORMAL COMPLETION                                          00268000
       11  - COMPLETED ON SPECIAL READ STOP CHARACTER                   00270000
                                                                        00272000
       X2  - END OF FILE                                                00274000
                                                                        00276000
       13  - PARITY ERROR ON READ                                       00278000
       23  - READ TIMED OUT                                             00280000
       33  - I/O ABORTED EXTERNALLY                                     00282000
       43  - DATA LOST, NO BUFFER AVAILABLE OR TOO LONG TAPEMODE RECORD 00284000
       53  - NOT ON LINE, DATA SET NOT READY OR DISCONNECT              00286000
      153  - ENABLE SUB SYS BRK REQUESTED & NO CY PIN                   00288000
      163  - READ TIME RETURNED > (2**16-1) HUNDREDTHS                  00290000
      173  - READ STOPPED WHEN A BREAK DETECTED                         00292000
                                                                        00294000
       04  - INVALID REQUEST, FUNCTION OR PARAMETER                     00296000
        24  - BLOCK MODE TIMED OUT                             <<01822>>00298000
       34  - TIMING ERROR, UNIT WAS NOT SERVICED IN TIME                00300000
  >>                                                                    00302000
$PAGE                                                                   00304000
BEGIN    << TERMINAL MONITOR AND DRIVER >>                              00306000
                                                                        00308000
EQUATE                                                                  00310000
    WRTBASE   = 23,        << START OF SIO CHANNEL PROGRAM >>  <<04869>>00312000
    ABORTED   =%33,        << REQUEST ABORTED RETURN STATUS >>          00314000
    ABORTSTOP = 5,         << READ ABORTED STOP >>                      00316000
    ACTIVE'   = 2,         << MONITOR IS RUNNING AGAINST THIS DEVICE >> 00318000
    ADCCPROG  = 213,                                           <<00690>>00320000
    AJOBS'    = 2,         << THIS DEVICE ACCEPTS JOBS >>               00322000
    ALLOCATE  =24,         << ALLOCATE TERMINAL FUNCTION  CODE >>       00324000
    ALLOCATEX =33,         << ALLOCATE TERMINAL FUNCTION  CODE >>       00326000
    BADPARITY =%13,        << PARITY ERROR REQUEST ERROR STATUS >>      00328000
    BANDWAIT  = 5,         << WAITING FOR LESS TERM ACTIVITY >>         00330000
    BLOCKED'  = 5,         << BLOCKED I/O REQUEST >>                    00332000
    BLOCKMODRD= WRTBASE+233,                                            00334000
    BLOCKTIMED= %24,                                           <<01822>>00336000
    BLOCKTIMEOUT= 8,                                           <<01822>>00338000
    BLOCKTO   = 7,                                             <<01822>>00340000
    BLOCKTOSTOP= 6,                                            <<01822>>00342000
    BLOCKWAIT = WRTBASE+223,                                            00344000
    BMODE'    =12,         << TERMINAL IN BREAK MODE >>                 00346000
    BREAK'    = 10,        << BREAK IS ALLOWED AND HAS BEEN DETECTED >> 00348000
    BRKEND    = 2,         << READ ENDED WITH BREAK STATUS INDEX >>     00350000
    BREAKEND  =%173,       << READ COMPLETED WHEN A BREAK DETECTED >>   00352000
    BREAKSTOP = 1,         << READ STOP CODE AFTER BREAK ACCEPTED >>    00354000
    BRKOK'    =BREAK'+1,   << BREAK IS ENABLED >>                       00356000
    CBYTESZ   = 12,                                                     00358000
    CFAILTO   = 1,        <<CARRIER FAIL TIMEOUT REQUEST>>              00360000
    CLOSED    = 4,         << DCLOSE REQUESTED HSTATE >>                00362000
    CLRFLU'WRT=%31,        << CLR FLUSH & WRITE FUNCTION CALL>>         00364000
    CMODE'    =11,         << TERMINAL IS IN CONSOLE MODE >>            00366000
    COMPLETED'= 6,         << I/O REQUEST HAS BEEN COMPLETED >>         00368000
    CR        = %15,       << OCTAL VALUE OF C. R. >>          <<01464>>00370000
    CONSMODE  = 2,         << TMODE OR PREMPT LEVEL OF CONSOLE >>       00372000
    CPCB      = 4,         << CURRENT PCB INDEX >>                      00374000
    CPS120    = 11,    <<BAUDRATE CODE FOR 120 CHAR/SEC>>               00376000
    CPS240    =  7,    <<BAUDRATE CODE FOR 240 CHAR/SEC>>               00378000
    CPS960    =  8,    <<BAUDRATE CODE FOR 960 CHAR/SEC>>               00380000
    CRWAIT    = 1,                                                      00382000
    CRWAITLF  = 2,                                                      00384000
    DBLKTAIL  = 36,                                                     00386000
    DBREAK    =30,         << IOQP TO SAVED BROKEN READ DATA >>         00388000
    DBTIME    = 16,                                            <<01822>>00390000
    DC1'ETX   = %10403,    << DC1 TRIGGER AND ETX CHARACTERS>> <<01932>>00392000
    DCNT      = 18,        << COUNT OF BUFFER BEING WRITTEN , ALSO      00394000
                                HOLDS SPEED DURING SPEED SENSING >>     00396000
    DCNTRL    = 10,                                                     00398000
    DENQP     = 34,    <<DIT PNTR FOR STORING ENQ POSITIONS>>           00400000
    DHEAD     = 19,        << SYSDB POINTER TO HEAD OF TBUF LIST >>     00402000
    DILTP     = 5,         << ILT POINTER >>                            00404000
    DIOQP     = 2,         << IOQ POINTER TO FIRST REQUEST >>           00406000
    DISCNCT'  = 1,         << DATA SET HAS DISCONNECTED >>              00408000
    DLAST     = 23,                                                     00410000
    DLINK     = 1,         << DITP LINK TO QUEUED REQUESTS WAITING >>   00412000
    DLDEV     = 3,         << LOGICAL DEVICE AND UNIT NUMBERS >>        00414000
    DLFSYNC   = 25,        << DIT ENTRY FOR SYNC STATE,LF COUNT>>       00416000
    DMONTR    = 34,    <<DIT PNTR TO STORE MONTITOR CODE>>              00418000
    DMODEM    = 8,                                                      00420000
    DNXTB     = 25,        << TBUF POINTER OF A SAVE TBUF IF NOT 0 >>   00422000
    DPNTR     = 21,        << BYTE POINTER DURING READ & WRITE >>       00424000
    DRCNT     = 17,        << HOLDS COUNT OF READ DATA SAVED >>         00426000
    DRPTR     = 22,        << IF <> 0 THEN HEAD OF READ DATA SAVED >>   00428000
    DRQST     = 6,         << MONITOR SERVICE REQUEST FLAGS >>          00430000
                           << 0 - HANGUPTO    8  - READTO               00432000
                              1 - DISCONNECT  9  - ONLINE               00434000
                              2 - CFAILTO     10 - DSTREADY             00436000
                              3 - TURNTO      11 - LOGONTO              00438000
                              4 - IOERROR     12 - BREAK                00440000
                              5 - IODONE      13 - CONTROL Y            00442000
                              6 - SPOOLEND    14 - CFAIL                00444000
                              7 - SPOOLSW     15 - UNUSED               00446000
                           >>                                           00448000
    DRTMAX    =28,         << MAXIMUM TIME FOR READ TIMEOUT, SECONDS >> 00450000
    DRTIME    =26,         <<  INDEX TO I/O READ TIME >>                00452000
    DRTIMED   = DRTIME/2,                                               00454000
    DSAVE     =13,         << HOLDS WAITED DSTATE, HSTATE & TURN CHAR >>00456000
    DSIOPC    =35,         << HOLDS SIO PROG PNTR FOR RESTART >>        00458000
    DSPEED    = 9,                                                      00460000
    DSTATE'   =12,         << DEVICE STATE                              00462000
                               0 - NULL         %10 - EOR SYNC          00464000
                               1 - WRITING      %11 - WRITE BUF FILL    00466000
                               2 - READING      %12 - SEND XON NEXT     00468000
                               3 - XON WRITE    %13 - DELETE CR         00470000
                               4 - WRITE TURN   %14 - DOING SYNCS OR "!"00472000
                               5 - BAND WAIT    %15 - READ CHAR ECHO    00474000
                               6 - EOR LF       %16 - START READ        00476000
                               7 - EOR CR       %17 - STOP READ >>      00478000
    DSTOP     = 14,        << SUB SYS BRK AND EOR CHARACTERS >>         00480000
    DSYNC     = 29,        << CR,LF SYNC DATA AND SYNC COUNTER >>       00482000
    DTAIL     = 20,        << SYSDB POINTER TO END OF TBUF LIST >>      00484000
    FF        = %14,       << OCTAL VALUE OF FORM FEED >>      <<01464>>00486000
    DTANKB    = 33,                                                     00488000
    DTBLK     = 24,        << LINK WORD FOR QUEUED TBUF REQUESTS >>     00490000
    DTBUF     =18,         << FIRST TBUF POINTER  >>                    00492000
    DTBUFD    = DTBUF/2,   << DOUBLE INDEX TO FIRST TWO TBUF POINTERS >>00494000
    DTBF2     = DTBUFD+1,  << DBL INDEX TO DTBUF2, DISC ADDR IN PTAPE >>00496000
    DTRLX     = 31,                                                     00498000
    DTYPE     = 7,                                                      00500000
    DWAIT     = 15,        << DITP TO NEXT DEV ON ACTIVITY WAIT >>      00502000
    ECHO'     = 3,         << INPUT IS TO BE ECHOED TO OUTPUT CHANNEL >>00504000
    ECHOOFF   = 0,         << TURN ECHO OFF CODE TO MPXCONTROL >>       00506000
    EORLF     = 6,         << DSTATE - EOR LF IN PROGRESS >>            00508000
    EORSYNC   =%10,        << DSTATE EOR SEQUENCE START SYNC >>         00510000
    ESC       = %33,       << OCTAL VALUE OF ESCAPE CHAR >>    <<01464>>00512000
    FINISEND  = WRTBASE+121,                                            00514000
    FINREAD   =%17,        << FINISH STOPPED READ DSTATE >>             00516000
    FMAX      =  38,       <<MAXIMUM NUMBER OF FUNCTION CALLS>>         00518000
    FOPEN     = 2,         <<FOPEN FUNCTION CALL>>             <<00637>>00520000
    FORMFEED'  = 4,        << DEVICE RESPONDES TO A FORM FEED >>        00522000
    GOODIO    = 1,         << SUCCESSFUL I/O STATUS RETURN >>           00524000
    HANGINGUP = 7,         << DSET HANGUP DELAY IN PROGRESS >>          00526000
    HANGUP    = 3,         << HANG UP DSET CONTROL CODE >>              00528000
    HANGUPTURN= 6,         << HANGUP 202 TURN TK READ WAIT >>           00530000
    HANGUPTO  = 5,         << HANGUP TIMEOUT REQUEST TYPE >>            00532000
                                                               <<04869>>00534000
    HP2640X   = 11,                                                     00536000
    HP2640TO  = 0,         << 2640/44 READ/WRITE TIME OUT REQUEST >>    00538000
    ICNTRL    =  7,        <<ILT ENTRY FOR CHANNEL NO.,DEV NO.>>        00540000
    ISIOP     =  8,        <<ILT PNTR TO SIO PROGRAM AREA>>             00542000
    INITDSET  = 0,                                                      00544000
    INITTO    = 7,         << SPEED SENSE DISCONNECTED TIME REQUEST >>  00546000
    INVALIDOP = 4,         << INVALID OPERATION REQUESTED >>            00548000
    IOQSIZE   =11,         << IOQ ELEMENT SIZE >>                       00550000
    IOWAIT    =%100,       << UNBLOCKED I/O WAIT >>                     00552000
    IOWAKE'   = 4,         << WAKE CALLER ON COMPLETION IF SET >>       00554000
    JMATdst   = 25,                                            <<01465>>00556000
    JMATsir   = 15,                                            <<01465>>00558000
    JUNKWAIT  = %20,                                                    00560000
    JMPSRQOFF = 38,        <<JMP OFFSET TO DISABLE XMIT BUF EMPTY       00562000
                             SRQ = 100-62                        >>     00564000
    LDTDST    = 14,        << LOGICAL DEVICE TABLE DST NUMBER >>        00566000
    LOGGINGON = 2,         << HSTATE LOGGING ON >>                      00568000
    LOGONTO   = 4,         << LOG ON TIME OUT REQUEST TYPE >>           00570000
    LOSTCSTAT =%34,        << LOST CHARACTER REQUEST ERROR STATUS >>    00572000
    LOSTDATA  = 3,         << BUFFER NOT AVAILABLE >>                   00574000
    LOSTDSTAT =%43,        << LOST DATA REQUEST ERROR STATUS >>         00576000
    M202'     = 2,         << 202 OR 2002 MODEM >>                      00578000
    M202      =M202'+1,    << CIRCULAR SHIFT COUNT TO GET 202 TO BIT15>>00580000
    MAXSPEED  = 8,          <<MAX NUMBER OF SPEED CODES>>               00582000
    MAXSPECL  = 10,        << NUMBER OF SPECIAL CHARS FOR THE ADCC>>    00584000
    MAXTIO    = 12,        << MAX TERM I/O TO PREVENT BLOCK OVERRUNS >> 00586000
    MODEMSIO  =%16,        << DSTATE FOR SETTING UP MODEM CONTROL >>    00588000
    MODSIOCNTRL=WRTBASE+154,<<SIO PROG ADDRESS FOR MODEM CONTROL>>      00590000
    MODSIOPTY =WRTBASE+171,<< SIO PROG ADDRESS FOR INTERF CNTRL >>      00592000
    NEWLINE'  = 8,         << LF WAS LAST CHARACTER OUTPUT >>           00594000
    NEWSPECCHAR=WRTBASE+258,<<SIO PROG ADDRESS FOR CHAR SET >> <<02864>>00596000
    NOEOFCHECK= 5,         << NO CHECK & KEEP ANY SAVED DATA >>         00598000
    NOCYPIN   =%153,       << ENABLE ESCAPE & NO CY PIN ERROR >>        00600000
    NODATAYET = 5,                                                      00602000
    NOECHO    = 3,                                                      00604000
    NOPROTOCOL=18,  <<TERM TYPE WITHOUT DC1 READ OR ENQ WRITE>><<01821>>00606000
    NOTNEW    = 1,         << REQUEST PROCESSING HAS STARTED >>         00608000
    NOTRDYMSG = 11,        << CONSOLE MESSAGE INDEX >>         <<01464>>00610000
    NOTREADING = 0,         << DEVICE NOT IN READING STATE >>  <<01.02>>00612000
    NOWAIT    = 0,         << DONT WAIT IN WAKE >>                      00614000
    NULL      = 0,                                                      00616000
    NXTNULL   = 3,       <<SIO PROG INTERRUPT CODE IN CPVA1>>           00618000
    NXTBLKRD  = WRTBASE+221,                                            00620000
    OFFLINE   =%53,        << DEVICE OFFLINE OR HUNGUP RETURN STATUS >> 00622000
    ONLINE    = 1,         << SPEED SENSED AND ONLINE HSTATE >>         00624000
    OPCONSOLE = 0,         << DIRECTS IOMESSAGE TO CONSOLE >>  <<01464>>00626000
    OUTSPD    = 7,         << SET OUT SPEED FUNCTION CODE >>            00628000
    PAUSEDWRITE=%21,                                                    00630000
    PCB3      = 3,         << FOURTH WORD OF PCB >>                     00632000
    PCB9      = 9,                                                      00634000
    PCBSIZE   =16,                                                      00636000
    POSTSPACE =%33,        << RSTATE, POSTSPACE TBUF WAIT >>            00638000
    PREMPT'   = 0,         << A PREMPTIVE REQUEST IS IN THE QUEUE >>    00640000
    PREMPTSTOP= 3,         << STOP READ FOR PREMPTIVE REQUEST >>        00642000
    PRESPLAST'=13,         << LAST WRITE WAS A PRESPACE >>              00644000
    PRESPACE  =%31,        << REQUEST WAITING FOR TBUF FOR PRESPACE >>  00646000
    PRETOPOST =%30,        << ADDING A CR/LF IN PRE TO POST SPACING >>  00648000
    PRIMARY   = 1,         << GET ONLY FROM PRIMARY TABLE >>            00650000
    PRINTER   = 32,        << PRINTER TYPE VALUE     >>        <<04869>>00652000
    PTAPEFUNC = 29,       <<PAPER TAPE SPOOLING FUNCTION>>              00654000
    PTYCHK'   = 9,         << PARITY CHECK READS >>                     00656000
    PTYCNTRL' = 7,         << PARITY IS TO BE SENT IN 8TH BIT >>        00658000
    PTYERROR  = 5,         << READ PARITY ERROR >>             <<01.02>>00660000
    QADDR     = 5,         << TARGET BANK OF DST OFFSET >>              00662000
    QDSTN     = 4,         << BANK OR DST NUMBER >>                     00664000
    QFUNC     = 6,         << FUNCTION  >>                              00666000
    QLINK     = 1,         << NEXT IOQ POINTER >>                       00668000
    QMISC     = 3,         << MISCELLANEOUS STORAGE >>                  00670000
    QPAR1     = 8,         << READ EOF CONTROL; WRITE SPACE CONTROL >>  00672000
    QPAR2     = 9,         << READ STOP CHAR; WRITE PRESPACE FLAG >>    00674000
    QP1D      = QPAR1/2,   << DOUBLE INDEX TO QPAR1 AND QPAR2 >>        00676000
    QSTAT     =10,         << REQUEST STATUS AND PCB NUMBER >>          00678000
    QWBCT     = 7,         << WORD (+) OR BYTE (-) COUNT >>             00680000
    RD4THWORD = [1/1,1/0,14/0],  <<BURST MODE,STRT FROM LEFT BYTE>>     00682000
    RDBRK     = WRTBASE+135,                                            00684000
    RDDATA    = [8/3,8/0],                                              00686000
    RDDATAINSTR=WRTBASE+91,  <<OFFSET OF READ SIO PROG>>                00688000
    RDEXIT    = WRTBASE+128,                                            00690000
    RDINTRPT  = WRTBASE+147,                                            00692000
    RDNULL    = 28,          <<READ WITH BYTE COUNT=0 INTERRUPT CODE>>  00694000
    RDPROGSTRT = 18,             <<START OF READ OPERATION SIO PROG>>   00696000
    RDSPECL   = 2,         <<CPVA2 SPECL CHAR DETECTED INTRPT CODE>>    00698000
    RDSTRT    = WRTBASE+43,                                             00700000
    RDWAIT    = WRTBASE+76,                                             00702000
    READBINARY= 1,                                                      00704000
    READING   = 2,         << DSTATE- READ IN PROGRESS >>               00706000
    READTO    = 6,         << READ TIMED OUT READERRORS CODE >>         00708000
    READTIMEOUT= 3,        << READ TIME OUT REQUEST TYPE >>             00710000
    READTOSTOP= 4,         << STOP READ AFTER READ TIME OUT >>          00712000
    READWAITING= 5,        << READ WAITING TO START AFTER WRITE DONE >> 00714000
    RECVOFF   = WRTBASE+50,                                             00716000
    REPEATING = %14,                                           <<04236>>00718000
    REQUEST'  = 3,         << MONITOR SERVICE REQUESTED WHILE ACTIVE >> 00720000
    RESET31   = 6,         << REQUEST STATE WHEN RESETTING 31B <<01464>>00722000
    RTOVERFLOW=%163,       << READ TIME RETURNED TO LARGE ERROR >>      00724000
    SECONDARY =  2,     <<GET TBUF FROM SECONDARY AREA IF PRIMARY       00726000
                          AREA IS EMPTY>>                               00728000
    SENDXON   =%12,        << READ TO BE ACTUALLY STARTED DSTATE >>     00730000
    SESSION   = 1,         << JOB TYPE IS A SESSION >>                  00732000
    SIOSIZE   = 145,       << SIZE OF SIO CHANNEL PROG AREA >> <<04869>>00734000
    SOFTKILL  =%20,        << SOFT KILL FLAG >>                         00736000
    SIOBAUDBUF =8,      <<WORD OFFSET FROM SIO AREA OF THE BUFFER       00738000
                          FOR UART CNTRL>>                              00740000
    SIOINTRFBUF=3,      <<OFFSET OF INTRF CNTRL BUF FROM UART BUF>>     00742000
    SIOFFSETUR = 4,     <<UART BUF OFFSET FROM SIO PROG AREA>>          00744000
    SIOPROGUART= 22,    <<MEMORY ADDRESS WORD IN WRT CHANNEL INSTR      00746000
                          OFFSET FROM SIO PROG AREA>>                   00748000
    SIOPROGWRT = 113,   <<WRT UART INSTR ADDR IN WRT CHANNEL PROG>>     00750000
    SIORDINST  = 81,    <<OFFSET OF THE READ DATA INTO TBUF             00752000
                          CHANNEL INSTR>>                               00754000
    SIOWRTINST = 136,                                                   00756000
    SOFTPREMPT=3,          << PREMPT READS IF NOTHING INPUT SO FAR >>   00758000
    SPECIALEND=%11,        << TERM READ TERMINATE ON SPECIAL CHAR >>    00760000
    SPSENBAUD =WRTBASE+178,                                             00762000
    SPDSENSING'= 4,        << DEVICE IS IN DIAGNOSTIC OR SPD SNSE MODE>>00764000
    SPDSENSIO = 7,         <<SPEEDSENSE SIO PROG ACTIVE>>               00766000
    SPEEDTO   = 6,         << SPEED SENSING TIMEOUT TYPE >>             00768000
    SPOOLING' = 5,         << PTAPE READ IN PROGRESS >>                 00770000
    SRQOFF    = WRTBASE+209,                                            00772000
    SSBREAK'  = 4,         << SUB SYS BRK IS ALLOWED &  HAS BEEN DET. >>00774000
    SSBRKSTOP = 2,         << SUB SYSTEM BREAK READ STOP CODE >>        00776000
    SSBRKOK'  =SSBREAK'+1, << SUB SYS BRK IS ENABLED >>                 00778000
    STARTREAD =%16,        << TIP TO START READ NEXT >>                 00780000
    STOPPED   =%44,                                                     00782000
    SYNSTRT   = WRTBASE+57,                                             00784000
    SYSBUFR'  =  3,        << REQUEST DATA IS IN SYSTEM BUFFERS >>      00786000
    SBUFMAXB  = 256,                                                    00788000
    SYSDISK   = 1,         << SYSTEM DISK LOGICAL DEVICE # >>           00790000
    SYSDB     =%1000,                                                   00792000
    SYSDB1    = SYSDB + 1,                                              00794000
    SYSDB2    = SYSDB+2,                                                00796000
    SYSDST    = 2,                                             <<00.05>>00798000
    SYSLPDT   =%10,        << LOGICAL PHYSICAL DEVICE TABLE >>          00800000
    SYSPCB    = 3,                                                      00802000
    SYSSBUF   = 6,                                                      00804000
    TAPEMODE' = 0,         << PAPER TAPE READ MODE;NO EDIT RESPONSES >> 00806000
    TBMAXB    = 60,        << TBUF SIZE IN BYTES >>                     00808000
    TBQN      = 0,         << RESOUCE QUEUE # FOR TBUF REQUESTS >>      00810000
    TBMAXW    = TBMAXB/2,  << TBUF SIZE IN WORDS >>                     00812000
    TBWAIT    =%32,        << REQUEST WAITING FOR TBUF OR TBUF SPACE >> 00814000
    TDITSIZE   = 37,    <<TERMINAL DIT SIZE>>                           00816000
    TERMCHAR' = 10,                                                     00818000
    TERMJMP    = [8/15,8/1],  <<RD TERMINATION JMP TO 'END',            00820000
                                BURST= 1>>                              00822000
    TERMT15   = 15,        << TERMTYPE FOR 8-BIT HP2635>>      <<00328>>00824000
    TERMT16   = 16,        << TERMTYPE FOR 7/8-BIT HP2635 >>   <<00328>>00826000
    TRANSMIT  = 4,         << FINSH TURNING 202 TO WRITE STATE >>       00828000
    TIMEDOUT  = %23,      <<READ TIMED OUT REQUEST ERR STATUS>>         00830000
    TQUEUE    = DLINK,    <<RESOURCE NUMBER OF TERMINAL I/O QUEUE>>     00832000
    TURN202    = 4,        << DSTATE, TURNING 202 TO READ OR WRITE >>   00834000
    TURNTO     = 2,        << 202 TURN AROUND TIME OUT TYPE >>          00836000
    UARTBUFADR =10,     <<OFFSET FROM SIO AREA FOR RECV UART STAT>>     00838000
    UNDEFINED =%37,        << UNDEFINED TERMINAL TYPE >>                00840000
    UP'       = 1,         << ON LINE,SPEED SENSED AND CAN DO I/O >>    00842000
    WAIT2SIO  = WRTBASE+251,                                            00844000
    WAITACK    = 16,       <<CPVA2 SPECL CHAR DETECTED INTRPT CODE>>    00846000
    WAITCR     = 14,       <<  ---------------------------------- >>    00848000
    WAITC'A    = 18,       <<  ---------------------------------- >>    00850000
    WAITING   = 7,    <<IOQ IS WAITING FOR WRITE TO COMPLETE >><<01464>>00852000
    WAITSPDS   =  8,       <<  ---------------------------------- >>    00854000
    WAITED    =%11,        << READ/WRITE/BANDWAIT HELD FOR BREAK >>     00856000
    WECHO      =11,     <<ECHO ON BIT IN INTERF CNTRL BYTE>>            00858000
    WRITING   = 1,         << DSTATE IS WRITING >>                      00860000
    WRT4THWORD = [1/1,1/0,1/1,13/0],  <<4TH WORD IN WRT CHAN INST>>     00862000
    WRTDATA    = [8/4,8/0],                                             00864000
    WRTDATAINSTR=WRTBASE+34,<<OFFSET OF WRITE CHANNEL INSTR>>           00866000
    WRTSPD    = WRTBASE+190,                                            00868000
    WRTSPECL   = 3,                                            <<04236>>00870000
    WRTPROGSTRT= 109,                                                   00872000
    WRTCHAN   =-1,         << FLAG TO INDICATE WRITE CHANNEL MPXCNTRL >>00874000
    WRTSRQ    = WRTBASE+10, <<OFFSET OF WAIT FOR SRQ INSTR>>            00876000
    WRT'RD    = WRTBASE+66,                                             00878000
    WRT'RD2   = WRTBASE+246,                                            00880000
    YCINTRPT  = 2,         << CONTROL Y PSEUDOINTERRUPT FLAG >>         00882000
    XOFFPAIR  = 1,                                                      00884000
    XMITOFF   =WRTBASE+71,                                              00888000
    XMITON    =WRTBASE+5,                                               00890000
    ENDEQ       = 0;                                                    00892000
                                                                        00894000
  DEFINE                                                                00896000
    ABORTBIT  =( 0:1)#,                                                 00898000
    ABORTWRT  =( 5:1)#,                                                 00900000
    ABS       =ABSOLUTE#,                                               00902000
    ACCEPTING =(AJOBS':2)#,<< ACCEPTING JOBS AND DATA FIELDS IN LPDT >> 00904000
    ACTIVE    =(ACTIVE'  :1)#,                                          00906000
    ADDENQ    =(15:1)#,     <<SET WHEN AN ENQ IS BEING ADDED TO         00908000
                              A TANKED TBUF>>                           00910000
    ASMB      = ASSEMBLE#,                                              00912000
    BCNTED    =( 6:1)#,     <<SET WHEN BCNT FOR CURRENT TBUF HAS BEEN   00914000
                              UPDATED BY TIP>>                          00916000
    BINARYREAD =(11:1)#,  <<IF SET THEN XSFER 8 BITS ON READ>>          00918000
    BINARY    =(11:2)#,    << IF 0 THEN ASCII ELSE BINARY READ >>       00920000
    BLOCKED   =(BLOCKED':1)#,<< BLOCKED, WAIT CALLER UNTIL COMPLETION >>00922000
    BLOCKRD   =(10:1)#,                                                 00924000
    BMODE     =(BMODE':1)#,<< TERMINAL IN BREAK MODE >>                 00926000
    BRKOK     =(BRKOK':1)#,                                             00928000
    BWRITE    =( 7:1)#,    << BINARY WRITE, PTY DISABLE >>              00930000
    CB        = ( 5:1)#,   << CLEAR TO SEND, REQST TO SEND DELAYED >>   00932000
    CBSB      =( 5:2)#,                                                 00934000
    CC        =( 9:1)#,                                        <<02861>>00936000
    CCON      =(15:1)#,    <<CC ALWAYS ON FLAG>>               <<01046>>00938000
    CCVALUE   =( 9:1)#,    <<OLD CC VALUE>>                    <<01046>>00940000
    CF        =( 4:1)#,    << CARRIER DETECTED IF SET >>                00942000
    CFCB      =( 4:2)#,                                                 00944000
    CFAILCNT  =( 4:6)#,    << CARRIER FAILURE COUNTER >>                00946000
    CLRENQ    =(0:1)#,     <<SET IF THERE ARE ENTRIES IN DIT(34)        00948000
                             TO DIT(36)>>                               00950000
    CMODE     =(CMODE':1)#,<< TERMINAL IN CONSOLE MODE >>               00952000
    COMPLETED =(COMPLETED':1)#,   << REQUEST COMPLETED >>               00954000
    CYPIN     =( 8:8)#,    << SUB SYSTEM BREAK PIN IN LDT >>            00956000
    CONSINTRPT=(11:1)#,    << CONSOLE INTERRUPT OK IF SET >>            00958000
    CRSYNC    =( 4:4)#,    << NUMBER OF SYNCS REQUIRED AFTER CR >>      00960000
    DELACK    =( 8:1)#,                                                 00962000
    DEVREC    =( 0:2)#,    <<  DEVICE RECOGNITION STATE >>              00964000
    DISABLE   = ASSEMBLE( SED 0 )#,                                     00966000
    DISCNCT   =(DISCNCT' :1)#,                                          00968000
    DLDEVN    =(8:8)#,     << LOGICAL DEVICE NUMBER OF DIT >>           00970000
    DOMOD     =( 6:1)#,    << FLAG TO DO MODEM CONTROL NEXT>>           00972000
    DONXTMOD  =( 3:3)#,    << CONTROL CODE FOR MODEM CONTROL>>          00974000
    DOSTATREQ =( 3:1)#,    << REQUEST STATUS AT END OF DATA >> <<04869>>00976000
    DPAGEEJECT=DITPL(DSAVE).(11:1)#, << 1 -> AUTO EJECT >>     <<01464>>00978000
    DRTNUMBER =(9:7)#,     <<9:4-CHANNEL NO.,13:3-DEV NO.>>             00980000
    DSAVEPL   = DITPL(DSAVE)#,                                 <<02861>>00982000
    DSTATE    =(DSTATE'  :4)#,                                          00984000
    DSTFIELD  =(1:10)#,    << DST NUMBER EXTRACT FROM PCB >>            00986000
    ECHO      =(ECHO':1)#,                                              00988000
    EIGHTBITS =( 8:1)#,    << 2635/2645K 8-BIT PROTOCOL >>              00990000
    ENABLE    = ASSEMBLE( SED 1 )#,                                     00992000
    ENQACKWAIT=(11:1)#,    << 2640 WRITE ENQ/ACK WAIT >>                00994000
    ENQOFFSET =( 1:15)#,    <<BYTE OFFSET OF ENQ IN TBUF      >>        00996000
    EOFCODE   =(13:3)#,    << EOF CHECK SPECIFICATION >>                00998000
    EPE       =(6:1)#,     <<EVEN PTY ENABLE BIT IN UART CNTRL>>        01000000
    ESIZE     =(8:8)#,     << TABLE ENTRY SIZE >>                       01002000
    EVENPTY   =(8:1)#,     <<EVEN AND NOT ODD PTY BIT>>                 01004000
    FILLING   =(14:1)#,    << TERM IS FILLING TBUFS WITH WRITE DATA >>  01006000
    FLUSH     =( 0:1)#,    << FLUSH AFTER BREAK OR CONTROL Y >>         01008000
    FORMFEED  =(FORMFEED':1)#,                                          01010000
    FUNC      =( 8:8)#,    << QFUNC, FUNCTION CODE >>                   01012000
    HIOPWAIT  =( 0:1)#,     <<HIOP WAS ISSUED, BUT SIO PROG COULD       01014000
                              NOT BE HALTED IMMEDIATELY>>               01016000
    HP2631B   = (19 <= DTYPEP.TTYPE <= 22)#,                   <<04869>>01018000
    HP2631B7  = (DTYPEP.TTYPE = 19 OR DTYPEP.TTYPE = 21)#,     <<04869>>01020000
    HP2631BFX = (21 <= DTYPEP.TTYPE <= 22)#,                   <<04869>>01022000
    HP2631BNFX= (19 <= DTYPEP.TTYPE <= 20)#,                   <<04869>>01024000
    HSTATE    =( 4:3)#,    << HANG UP STATE                             01026000
                               0 - HUNGUP       3 - HNGP SPD SNS DISCNCT01028000
                               1 - ONLINE       4 - DCLOSE DISCONNECT   01030000
                               2 - LOGGING ON   5 - LO SPD SNS DISCNCT  01032000
                               6 - HANG UP TURN 7 - HANGING UP >>       01034000
    IDLESIO   =(0:3)#,     <<0-RUN STATUS,1-CHNG STAT,2-PWR RECVR>>     01036000
    IF'PRINTER= TOS := 0;                                      <<04869>>01038000
                TOS := DITP(DLDEV).LDEVN;                      <<04869>>01040000
                RESETDB(-1);                                   <<04869>>01042000
                TOS := LDEVTOTYPE(*);                          <<04869>>01044000
                SETSYSDB;                                      <<04869>>01046000
                IF TOS = PRINTER #,                            <<04869>>01048000
    ININ      =(14:1)#,    <<SYSTEM INITIALIZATION FLAG>>      <<01046>>01050000
    INSPEED   =(12:4)#,    << INPUT SPEED AND CHARACTER SIZE >>         01052000
                           <<  0 - NOT DETERMINED  4 - 30 CPS           01054000
                               1 - 240 CPS         5 - 15 CPS           01056000
                               2 - 120 CPS         6 - 10 CPS           01058000
                               3 -  60 CPS         7 - 14 CPS  >>       01060000
    IOSTAT    =( 8:8)#,    << TOTAL REQUEST STATUS RETURNED >>          01062000
    IOWAKE    =(IOWAKE':1)#,                                            01064000
    LDEVN     =( 8:8)#,                                                 01066000
    LEFTHLF   =(0:8)#,                                                  01068000
    LFCOUNT   =(10:6)#,    <<COUNT OF REMAINING LF'S TO TANK>> <<00637>>01070000
    LFLAST    =( 1:1)#,     <<A POSTSPACE LF HAS BEEN TANKED>>          01072000
    LFSYNC    =( 0:4)#,    << NUMBER OF SYNCS REQUIRED AFTER LF >>      01074000
    LOADMEMORY=ASSEMBLE( LSEA )#,                              <<00.05>>01076000
    LOGONTRLX =(8:8)#,     << TIM. REQ. INDEX FOR LOGONTO >>   <<01449>>01078000
    LOGONTYPE =(0:2)#,     << :DATA=0  :HELLO=1  :JOB=2 >>     <<01449>>01080000
    LPLEVEL   =(13:3)#,    << LAST PREMPT LEVEL                         01082000
                                0 - NONE       3 - SOFT PREMPT          01084000
                                1 - NOT USED   4 - HARD PREMPT          01086000
                                2 - CONSOLE                      >>     01088000
    MAINPIN   =( 0:8)#,    << JOB MAIN PIN IN LDT >>                    01090000
    MCODE     =(10:6)#,    << MONITORING FUNCTION CODE >>               01092000
    MODACTIVE =( 6:1)#,    <<INTERF MODEM CONTROL PROG ACTIVE>>         01094000
    MODBYTE   =(11:5)#,    << MODEM CONTROL BYTE >>                     01096000
    MODEM     =( 2:2)#,    << MODEM TYPE W/O SPEEDSENSE BIT >> <<02861>>01098000
    MODECHO   =(11:1)#,                                                 01100000
    MODCA     =(12:1)#,                                                 01102000
    MODCD     =(13:1)#,                                                 01104000
    MODCH     =(14:1)#,                                                 01106000
    MODSA     =(15:1)#,                                                 01108000
    MODCBREF  =( 3:1)#,                                                 01110000
    MODCCREF  =( 4:1)#,                                                 01112000
    MODCEREF  =( 5:1)#,                                                 01114000
    MODCFREF  =( 6:1)#,                                                 01116000
    MODSBREF  =( 7:1)#,                                                 01118000
    MODCBMSK  =(11:1)#,                                                 01120000
    MODCCMSK  =(12:1)#,                                                 01122000
    MODCEMSK  =(13:1)#,                                                 01124000
    MODCFMSK  =(14:1)#,                                                 01126000
    MODSBMSK  =(15:1)#,                                                 01128000
    MTYPE     =( 1:3)#,    << MODEM TYPE                                01130000
                                0 - HARDWIRED   2 - 202C                01132000
                                1 - 103         3 - 2002   >>           01134000
    NEWFORM   = DITP(DLAST).(9:1)#,                            <<01464>>01136000
    NEWLINE   =(NEWLINE' :1)#,                                          01138000
    NO'CX'ECHO=( 1:1)#,    << IF SET DONT ECHO !!! ON CONTROL X >>      01140000
    NOPREMPT  =(11:1)#,    << NO PREMPTS OF THIS STATE ALLOWED >>       01142000
    NOSTOP    =(10:1)#,    << NO PREMPTS OR ABORTS ALLOWED >>           01144000
    NOSYNC    =( 7:1)#,    << NO SYNC TERMINAL, USES ENQ AND ACK >>     01146000
    NOTLOGON  =(12:1)#,    << LOGON TIMER IS FILE CONNECT >>   <<02861>>01148000
    NXTDSTATE =( 9:4)#,    << NEXT DSTATE AFTER 202 TURN AROUND >>      01150000
    ODDPTY    =( 8:1)#,     <<SET IF ODD PARITY IS SPECIFIED>>          01152000
    OUTSPEED  =( 6:4)#,    << OUTPUT SPEED AND CHARACTER SIZE CODE      01154000
                               SEE INSPEED FOR MEANING >>               01156000
    OWNREAD   =(10:1)#,                                                 01158000
    PAIR      =( 7:1)#,    << INDICATES SPECIAL ACTION ON NEXT CHAR >>  01160000
    PCBS      =LSR(8)#,    << SHIFT TO GET PCB NUMBER FROM IOQ >>       01162000
    PDISABLE  = ASSEMBLE( PSDB )#,     << PSUEDO DISABLE >>             01164000
    PAIRCODE  =(12:4)#,    << DENOTES LAST PAIR CHAR INPUT >>  <<01.02>>01166000
    PENABLE   = ASSEMBLE( PSEB )#,     << PSEUDO ENABLE >>              01168000
    PINHB     =(7:1)#,     <<PTY INHIBIT BIT IN UART CNTRL>>            01170000
    PARITYBITS=(PTYCNTRL':2)#,<< PARITY CONTROL AND SENSE >>            01172000
    PARITYSAVE=( 8:2)#,    << HOLDS PRTY CNTRL DURING BINARY OPS >>     01174000
    POSTSPLAST=( 1:1)#,                                                 01176000
    PRIMED    =(10:1)#,                                                 01178000
    PTYCHK    =(PTYCHK'  :1)#,                                          01180000
    PTYON     =(7:1)#,     <<DIT ENTRY,SET IF PTY ENABLED>>             01182000
    PTYONODD  =(7:2)#,     <<PTY ON FLAG;ODD PTY FLAG>>        <<00637>>01184000
    PRESPLAST =(PRESPLAST':1)#,                                         01186000
    PREMPT    =(PREMPT' :1)#,                                           01188000
    QPAGEEJECT=IOQPL(QPAR2).(14:1)#, << 0 -> AUTO EJECT >>     <<01464>>01190000
    RBYTE     =(8:8)#,                                                  01192000
    RDCOUNTED =( 8:1)#,    << RDCOUNTER INCREMENTED >>                  01194000
    READSTOP  =( 7:3)#,    << IF NOT ZERO THEN STOP READ BECAUSE        01196000
                                 0 - NONE        4 - LOGON TIMED OUT    01198000
                                 1 - BREAK       5 - ABORTED            01200000
                                 2 - PREMPT      6 - NOT USED           01202000
                                 3 - TIMED OUT   7 - NOT USED  >>       01204000
    READTRLX  =(8:8)#,                                                  01206000
    REQUEST   =(REQUEST':1)#,<< REQUEST FOR SERVICE WHILE ACTIVE >>     01208000
    RESTSPD   =(10:1)#,    <<FLAG TO RESTART IDLE/SPDSENSE PROG>>       01210000
    RIGHTHLF  =(8:8)#,                                                  01212000
    RPLEVEL   =(13:3)#,    << REQUEST PREMPT LEVEL,SEE LPLEVEL  >>      01214000
    RSTATE    =(10:6)#,    << REQUEST STATE -                           01216000
                              0 - NEW       %30 - PRE TO POST TBUF WAIT 01218000
                              1 - STARTED   %31 - PRESPACE TBUF WAIT    01220000
                              2 - READING    32 - WRT DATA TBUF WAIT    01222000
                             43 - RD CMPLTD  33 - POSTSPACE TBUF WAIT   01224000
                             44 - RD STOPPED                            01226000
                              5 - READ WAITING                          01228000
                             %34-%37 SAME A %30-%33 BUT ENQ ADD WAIT    01230000
                           >>                                           01232000
    READERRORS=(10:3)#,    << 0-OK,1-SPECIALSTOP,2-PTY ERR,3-LOST DATA, 01234000
                              4-LOST CHAR,5-BRK STOP,6-TIMEDOUT >>      01236000
    SB        =( 6:1)#,    << SECONDARY CARRIER DETECT >>               01238000
    SBS       =( 5:1)#,    << STOP BIT SELECT  >>              <<01994>>01240000
    SCOUNT    =(8:8)#,                                                  01242000
    SERVREQ   =( 0:1)#,    << DEVICE RECOGNITION SERVICE REQUEST >>     01244000
    SPDSENSING=(SPDSENSING':1)#,                                        01246000
    SPDSIO    =( 2:1)#,    <<SPEEDSENSE SIO PROG ACTIVE>>               01248000
    SPOOLING  =(SPOOLING':1)#,                                          01250000
    SSBRKOK   =(SSBRKOK':1)#,                                           01252000
    STARTSIO  =ASMB(CON %20302;CON 0)#,                                 01254000
    STATDONE  = DRQSTP.(15:1)#,  << STAT REQ COMPLETE >>       <<01464>>01256000
    STATREQ   = DITPL(DSAVE).(13:1)#,  << ACTIVE STAT REQ >>   <<01464>>01258000
    STOPSIO   =ASMB(CON %20302;CON 1)#,                                 01260000
    STRTWRT   =(14:1)#,                                                 01262000
    SYNCSTATE =(2:2)#,     <<STATE OF TANKING LF/SYNC: >>      <<00637>>01264000
                           <<0 - TANK XOFF/CR                           01266000
                             1 - DETERMINE NO. OF LF'S TO TANK          01268000
                             2 - TANK LF/SYNC                 >>        01270000
    SYSBUFR   =(SYSBUFR':1)#,                                           01272000
    TAPEMODE  =(TAPEMODE':1)#,                                          01274000
    TERMCHAR  =(10:1)#,                                                 01276000
    TIMEREAD  =( 1:1)#,    << TIME READ OPERATIONS >>                   01278000
    TIMING    =(0:1)#,                                                  01280000
    TTYPE     =( 5:5)#,    << TERMINAL TYPE AS IN MPE ERS >>            01282000
    TERMINALTYPE=( 0:7)#,  << DEFAULT TERMINAL TYPE >>                  01284000
    TERMSPEED =(12:4)#,    << PRECONFIGURED TERMINAL SPEED >>  <<00.06>>01286000
    TESTBIT   = ASSEMBLE(TBC#,                                          01288000
    TMODE     =(11:2)#,    << TERMINAL MODE                             01290000
                                 0 - NORMAL   2 - CONSOLE               01292000
                                 1 - BREAK    3 - CONSOLE FROM BREAK >> 01294000
    TURNTOWRITE=(7:1)#,                                                 01296000
    UP        =(UP'      :1)#,                                          01298000
    WAITEDSTATE=(0:4)#,    << STATE WAITED FOR BREAK >>                 01300000
    WAITXON   =(10:1)#,    <<WRT SUSPENDED TO WAIT FOR XON>>   <<00496>>01302000
    WLS       =(3:2)#,     <<WORD LENGTH SELECT FIELD IN UART BYTE      01304000
                             00-5 BITS, 01-6 BITS                       01306000
                             10-7 BITS, 11-8 BITS >>                    01308000
    WRTCOUNTED=( 9:1)#,    << WRTCOUNTER INCREMENTED >>                 01310000
    WRTENQ    =(0:1)#,         <<SET WHEN AN ENQ IS IMBEDDED IN TBUF>>  01312000
    ENDDEF    = 0#;                                                     01314000
                                                                        01316000
                                                                        01318000
                                                                        01320000
                                                                        01322000
                                                                        01324000
  <<----------- GENERAL SERVICE VARIABLES -------------->>              01326000
                                                                        01328000
    INTEGER POINTER PS0 = S-0;                                          01330000
    LOGICAL LS0 = S-0,  LX = X;                                         01332000
    INTEGER S0=S-0, S1=S-1, S2=S-2, S3=S-3, S4=S-4, X = X;     <<01464>>01334000
                                                                        01336000
    LOGICAL SYSUP = DB + %73;   <<SYSTEM UP FLAG>>                      01338000
    INTEGER ARRAY WA0(*) = DB + 0;                                      01340000
    BYTE    ARRAY BA0(*) = DB + 0;                                      01342000
    BYTE POINTER  BPS1   = S  - 1;                                      01344000
                                                                        01346000
    INTEGER ARRAY LPDT(@) = DB + SYSLPDT;                               01348000
    DOUBLE ARRAY LPDTD(@) = DB + SYSLPDT;                               01350000
    INTEGER ARRAY SBUF(@) = DB + SYSSBUF;                               01352000
    INTEGER ARRAY PCB (@) = DB + SYSPCB ;                               01354000
    INTEGER ARRAY DST (@) = DB + SYSDST;                                01356000
    DOUBLE ARRAY DSTD (@) = DB + SYSDST;                                01358000
                                                                        01360000
    INTEGER RDCOUNTER  = DB + %64; << # OF TERMINAL READS IN PROGESS >> 01362000
    INTEGER WRTCOUNTER = DB + %65; << # OF TERMNAL WRITES IN PROGRESS >>01364000
                                                                        01366000
    INTEGER DEVRECPCBP = DB + %145;  << DEVICE RECOGNITION PCB INDEX >> 01368000
    INTEGER CONSLDEV   = DB + %74;  << SYSTEM CONSOLE LDEV >>           01370000
                                                                        01372000
    INTEGER ARRAY CST(@) = DB +1;                                       01374000
                                                                        01376000
  << DIT DEFINITION AND DRIVER LINKAGE DATA >>                          01378000
                                                                        01380000
BYTE ARRAY DLT(0:7 ) = DB :=                                            01382000
  TDITSIZE, 2, 0, 0, 0, 0, SIOSIZE, 0;  << TYPE 2 MONITOR >>   <<00690>>01384000
                                                                        01386000
ARRAY DIT(1:TDITSIZE) = DB :=                                           01388000
  %100400,    <<SET TERMINAL FLAG,STATE=NOT UP,PAIR=1>>                 01390000
  0, 0, 0, 0, 0, 0, %20, 0, << BIT SET TO ENABLE CONTROL A >>           01392000
  %010000,   << SET ECHO ON,NO SPEED SENSE >>                           01394000
  0,          <<DCNTRL: INHIBIT PARITY>>                                01396000
  0,0,0,0,0,0,0,0,0,0,0,0,0,                                            01398000
  0,0,0,0,0,80,<<DSYNC: 80>>                                            01400000
  0,0,0,0,0,0,0;    <<END OF TERMINAL DIT AREA>>                        01402000
                                                                        01404000
                                                                        01406000
ARRAY SIOA(1:504) = DB :=                                      <<04869>>01408000
                                                                        01410000
<<****************************************************************      01412000
  ****************************************************************      01414000
  ****************************************************************      01416000
  ******                                                    ******      01418000
  ******                                                    ******      01420000
  ******          SIO CHANNEL PROGRAM AREA                  ******      01422000
  ******                                                    ******      01424000
  ******                                                    ******      01426000
  ****************************************************************      01428000
  ****************************************************************      01430000
  ****************************************************************      01432000
>>                                                                      01434000
  %11415,         << 0 --DATA BUFFER FOR XOFF,CR>>                      01436000
  %5012,          <<  1--                LF,LF>>                        01438000
  %11415,         <<  2--                XOFF,CR>>                      01440000
  %6005,          <<  3--                FF,ENQ>>                       01442000
  %3,             <<  4--DATA BUFFER FOR UART CNTRL; ETX >>             01444000
  %6014,          <<  5--INTRF CNTRL:NOECHO,CA,CD; ECHO?,CA,CD>>        01446000
  %2401,          <<  6--XMIT BUF EMPTY SRQ, XMIT SRQ OFF >>   <<01932>>01448000
  %3002,          <<  7--CHAR RECVD SRQ ON,CHAR RECVD SRQ OFF>>         01450000
  %20,            <<  8--SEND BAUDRATE BYTE; RECV BAUDRATE BYTE>>       01452000
  %21,            <<  9--SYNC CHAR; DC1      >>                <<00637>>01454000
  0,              << 10--DEV RETURNED UART STATUS; BOTTOMLESS DATA      01456000
                         DUMP FOR ACK,CR AND SPECL CHARS          >>    01458000
  %20000,         << 11--SPACE, 0                                 >>    01460000
  0,              << 12--                                        >>     01462000
  0,              << 13--SSBRK CHAR; EOR CHAR  OR  SPECL RD STOP CHAR>> 01464000
  0,              << 14-- 0; MODEM CONTROL BYTE                       >>01466000
  0,              << 15-- MODEM STATUS REFERENCE; MODEM STATUS MASK   >>01468000
  %31,            << 16-- 0; CONTROL Y  >>                     <<00637>>01470000
  %15446,         << 17-- ESC, &   SET ALT CHAR SELECT TYPE >> <<04869>>01472000
  "k0",           << 18--                                   >> <<04869>>01474000
  %44417,         << 19-- I, SHIFTIN                        >> <<04869>>01476000
  %15446,         << 20-- ESC, &   SET LPI                  >> <<04869>>01478000
  "l6",           << 21--                                   >> <<04869>>01480000
  "D ",           << 22--                                   >> <<04869>>01482000
<<****************************************************************      01484000
  ****************************************************************      01486000
  *********    START OF SIO CHANNEL PROG AREA    *****************      01488000
  ****************************************************************      01490000
  ****************************************************************      01492000
>>                                                                      01494000
<<******************************************************************    01496000
  ***********                                            ***********    01498000
  ***********   CHANNEL PROGRAM FOR WRITE OPERATION      ***********    01500000
  ***********                                            ***********    01502000
  ******************************************************************    01504000
>>                                                                      01506000
<<--WRTBASE-->>                                                         01508000
  [8/4,8/2],   << 00--WRT INTERF CNTRL: NOECHO,CA,CD              >>    01510000
  1,           << 01--                                            >>    01512000
  1,           << 02--                                            >>    01514000
  [1/1,1/0,1/1,3/1,10/0],                                               01516000
               << 03--  LEFT BYTE,NO UPDATE                       >>    01518000
  0,           << 04--..BUFFER ADDRESS                            >>    01520000
<<--XMITON-->>                                                          01522000
  [8/4,8/3],   << 05--WRITE XMIT BUF NOT FULL SRQ ON >>        <<01668>>01524000
  1,                                                                    01526000
  1,                                                                    01528000
  [1/1,1/0,1/1,3/1,10/0],                                               01530000
               << 08--  LEFT BYTE, NO UPDATE                      >>    01532000
  0,           << 09--..BUFFER ADDRESS                            >>    01534000
<<--WRTSRQ-->>                                                          01536000
  [8/4,8/3],   << 10--WRT TO ENABLE CHAR RECVD SRQ                >>    01538000
  1,                                                                    01540000
  1,                                                                    01542000
  [1/1,1/0,1/1,3/1,10/0],                                               01544000
               << 13--  LEFT BYTE, NO UPDATE                      >>    01546000
  0,           << 14--..BUFFER ADDRESS                            >>    01548000
  [8/2,8/0],   << 15--WAIT FOR SRQ                                >>    01550000
  0,           << 16--                                            >>    01552000
  [8/5,8/3],   << 17--DSJ, RESPONSE= 0,1,2 OR 3                   >>    01554000
  0,           << 18--  HOLDS DEV RETURNED STATUS BYTE            >>    01556000
  2,           << 19--  RESPONSE=0 : READ                         >>    01558000
  11,          << 20--          =1 :WRITE                         >>    01560000
  79,          << 21--          =2 : READ DEV STATUS, JUMP TO 102 >>    01562000
   9,          << 22--          =3 : NO RQST PENDING,BACK TO WAIT SRQ>> 01564000
  [8/1,1/1,7/0],<<23--INTERRUPT/HALT, INFO TO CPVA3               >>    01566000
  1,           << 24--  ERROR IN DSJ RETURNED BYTE                >>    01568000
  [8/3,8/0],   << 25--RESPONSE=0:RD CHAR INTO BOTTOMLESS DUMP     >>    01570000
  1,                                                                    01572000
  [8/%361,8/1], << 27--  TERMINATION JMP TO WAIT SRQ,JMP TO -15    >>   01574000
  [1/1,1/1,4/1,10/0],                                                   01576000
               << 28--  RIGHT BYTE, NO UPDATE                     >>    01578000
  0,           << 29--..BUFFER ADDRESS                            >>    01580000
  [8/0,8/0],   << 30--RELATIVE JUMP TO 202 TO TURN OFF CHAR RECVD >>    01582000
  170,         << 31--  SRQ,THEN INTERRUPT/HALT                   >>    01584000
  [8/0,8/0],   << 32--JMP BACK TO WAIT SRQ                        >>    01586000
  -19,                                                                  01588000
<<--WRTDATAINSTR-->>                                                    01590000
  0,           << 34--DEV RESPONSE=1: WRITE OUT DATA              >>    01592000
  0,                                                                    01594000
  0,                                                                    01596000
  0,                                                                    01598000
  0,           << 38--**BUFFER ADDRESS                            >>    01600000
  0,           << 39--INTERRUPT/HALT OR RELATIVE JUMP             >>    01602000
  0,           << 40--  TO RD SPECL CHAR OR DISABLE RECV SRQ,INTRPT>>   01604000
  [8/0,8/0],   << 41--JUMP BACK TO WAIT FOR SRQ                   >>    01606000
  -28,                                                                  01608000
<<******************************************************************    01610000
  *******                                                    *******    01612000
  *******       CHANNEL PROGRAM FOR READ OPERATION           *******    01614000
  *******                                                    *******    01616000
  ******************************************************************    01618000
>>                                                                      01620000
<<--RDSTRT-->>                                                          01622000
  [8/4,8/5],   << 43--WRITE TO SET SPECL CHAR DETECTION LOGIC     >>    01624000
  1,           << 44--                                            >>    01626000
  1,           << 45--                                            >>    01628000
  [1/1,1/1,1/1,3/1,10/0],                                               01630000
               << 46--  RIGHT BYTE,NO UPDATE                      >>    01632000
  0,           << 47--  ..BUFFER ADDRESS                          >>    01634000
  [8/0,8/0],   << 48--JMP TO WRITE DC1 OR START READ              >>    01636000
  0,                                                                    01638000
<<--RECVOFF-->>                                                         01640000
  [8/4,8/3],   << 50--WRITE TO ENABLE XMIT BUF NOT FULL SRQ >> <<01668>>01642000
  1,                                                                    01644000
  1,                                                                    01646000
  [1/1,1/0,1/1,3/1,10/0],                                               01648000
               << 53--  LEFT BYTE, NO UPDATE                      >>    01650000
  0,           << 54--..BUFFER ADDRESS                            >>    01652000
  [8/0,8/0],   << 55--JUMP TO WRITE DC1 >>                     <<02861>>01654000
  -23,                                                         <<02861>>01656000
<<--SYNSTRT-->>                                                         01658000
  0,           << 57--WRITE 1 OR 2 BYTES: DC1 OR CR/LF            >>    01660000
  0,                                                                    01662000
  0,                                                                    01664000
  0,                                                                    01666000
  0,           << 61--**BUFFER ADDR FOR DC1 OR CR/LF              >>    01668000
  0,           << 62--FINISHED WRITING, JUMP OUT OR               >>    01670000
  0,           << 63    INTERRUPT/HALT                       >>         01672000
  [8/0,8/0],   << 64--NOT DONE, JUMP BACK TO WRITE NEXT >>     <<02861>>01674000
  -9,                                                          <<02861>>01676000
<<--WRT'RD-->>                                                          01678000
  [8/4,8/2],   << 66--WRITE INTERF CNTRL: ECHO? CD ON          >>       01680000
  1,           << 67--                                         >>       01682000
  1,           << 68--                                         >>       01684000
  [1/1,1/1,1/1,3/1,10/0],                                               01686000
               << 69--  RIGHT BYTE,NO UPDATE                   >>       01688000
  0,           << 70--..BUFFER ADDRESS                         >>       01690000
<<--XMITOFF-->>                                                         01692000
  [8/4,8/3],   << 71--WRITE TO DISABLE XMIT BUF EMPTY SRQ         >>    01694000
  1,           << 72--  BYTE COUNT=1                              >>    01696000
  1,           << 73--                                            >>    01698000
  [1/1,1/1,1/1,3/1,10/0],                                               01700000
               << 74--  RIGHT BYTE, NO UPDATE                     >>    01702000
  0,           << 75--..BUFFER ADDRESS                            >>    01704000
<<--RDWAIT-->>                                                          01706000
  [8/4,8/3],   << 76--WRITE TO ENABLE CHAR RECVD SRQ              >>    01708000
  1,                                                                    01710000
  1,                                                                    01712000
  [1/1,1/0,1/1,3/1,10/0],                                               01714000
               << 79--  LEFT BYTE, NO UPDATE                      >>    01716000
  0,           << 80--..BUFFER ADDRESS                            >>    01718000
  [8/2,8/0],   << 81--WAIT FOR CHAR RECVD SRQ                     >>    01720000
  0,                                                                    01722000
  [8/5,8/3],   << 83--DSJ; RESPONSE= 0,1,2 OR 3                   >>    01724000
  0,           << 84--  HOLDS DEV RETURNED STATUS BYTE            >>    01726000
  2,           << 85--  RESPONSE=0: READ                          >>    01728000
  11,          << 86--          =1: WRITE OR DEFAULT              >>    01730000
  13,          << 87--          =2: READ DEV STATUS               >>    01732000
  9,           << 88--          =3: NO PENDING CSRQ,BACK TO WAIT  >>    01734000
  [8/1,1/1,7/0],<< 89--INTERRUPT/HALT, INFO TO CPVA3              >>    01736000
  2,           << 90--   2: ERROR IN DEV RETURNED BYTE            >>    01738000
<<--RDDATAINSTR-->>                                                     01740000
  0,           << 91--RESPONSE=0, READ DATA                       >>    01742000
  0,                                                                    01744000
  0,           << 93--  TERMINATION JUMP TO INTERRUPT/HALT        >>    01746000
  0,                                                                    01748000
  0,           << 95--**BUFFER ADDRESS                            >>    01750000
  [8/1,1/1,7/2],<<96--SPECIAL CHAR DETECTED, INTERRUPT/HALT         >>  01752000
  0,           << 97--  HALT FOR SPECL CHAR DETECTED              >>    01754000
  [8/0,8/0],   << 98--JUMP BACK TO WAIT FOR SRQ                   >>    01756000
  -19,         << 99--                                            >>    01758000
  [8/1,1/1,7/0],<<100--RESPONSE=1:WRITE OR DEFAULT                >>    01760000
  2,           <<101--   ERROR IN DEV RETURNED STATUS             >>    01762000
  [8/3,8/1],   <<102--RESPONSE=2: READ DEV STATUS                 >>    01764000
  1,                                                                    01766000
  [8/2,8/1],   <<104--  TERMINATION JUMP TO READ MODEM STATUS     >>    01768000
  [1/1,1/0,4/1,10/0],                                                   01770000
               <<105--  LEFT BYTE, NO UPDATE                      >>    01772000
  0,           <<106--..BUFFER ADDRESS                            >>    01774000
  [8/0,8/0],   <<107--POSSIBLE BREAK,JUMP TO READ CHAR       >>         01776000
  26,          <<108--  JUMP DISPLM FROM 109 TO 135          >>         01778000
  [8/3,8/2],   <<109--READ MODEM STATUS                      >>         01780000
  1,           <<110--                                       >>         01782000
  [8/0,8/1],   <<111--  NO TERMINATION JUMP                  >>         01784000
  [1/1,1/0,4/1,10/0],                                                   01786000
               <<112--  LEFT BYTE ,NO UPDATE                 >>         01788000
  0,           <<113--..BUFFER ADDRESS                       >>         01790000
  [8/4,8/3],   <<114--WRITE TO DISABLE RECV SRQ              >>         01792000
  1,           <<115--                                          >>      01794000
  1,           <<116--                                          >>      01796000
  [1/1,1/1,1/1,3/1,10/0],                                               01798000
               <<117--  RIGHT BYTE,NO UPDATE                 >>         01800000
  0,           <<118--..BUFFER ADDRESS                       >>         01802000
  [8/1,1/1,7/2],<<119--INTERRUPT/HALT, INFO TO CPVA2         >>         01804000
  6,           <<120--  PE,OE OR MODEM STATUS CHANGE         >>         01806000
<<--FINISEND-->>                                                        01808000
  [8/4,8/3],   <<121--WRITE TO DISABLE XSMIT SRQ                >>      01810000
  1,           <<122--                                          >>      01812000
  1,           <<123--                                          >>      01814000
  [1/1,1/1,1/1,3/1,10/0],                                               01816000
               <<124--  RIGHT BYTE,NO UPDATE                    >>      01818000
  0,           <<125--..BUFFER ADDRESS                          >>      01820000
  0,            <<126--INTERRUPT/HALT,INFO TO CPVA1             >>      01822000
  0,           <<127--  FINISHED EMPTYING TBUF                  >>      01824000
<<--RDEXIT-->>                                                          01826000
  [8/4,8/3],   <<128--WRIE TO DISABLE RECV SRQ                 >>       01828000
  1,           <<129--                                          >>      01830000
  1,           <<130--                                          >>      01832000
  [1/1,1/1,1/1,3/1,10/0],                                               01834000
               <<131--  RIGHT BYTE,NO UPDATE                    >>      01836000
  0,           <<132--..BUFFER ADDRESS                          >>      01838000
  [8/1,1/1,7/1],<<133--INTERRUPT/HALT,INFO TO CPVA1             >>      01840000
  2,           <<134--  FINISHED FILLING TBUF                   >>      01842000
<<--RDBRK-->>                                                           01844000
  [8/3,8/0],   <<135--READ DATA (POSSIBLE BREAK)                >>      01846000
  1,           <<136--                                          >>      01848000
  [8/0,8/1],   <<137--                                          >>      01850000
  [1/1,1/1,4/1,10/0],                                                   01852000
               <<138--  RIGHT BYTE,NO UPDATE                    >>      01854000
  0,           <<139--..BUFFER ADDRESS                          >>      01856000
  [8/4,8/3],   <<140--WRITE TO DISABLE RECV SRQ                 >>      01858000
  1,           <<141--                                          >>      01860000
  1,           <<142--                                          >>      01862000
  [1/1,1/1,1/1,3/1,10/0],                                               01864000
               <<143--  RIGHT BYTE,NO UPDATE                    >>      01866000
  0,           <<144--..BUFFER ADDRESS                          >>      01868000
  [8/1,1/1,7/2],<<145--INTERRUPT/HALT                           >>      01870000
  4,           <<146--  POSSIBLE BREAK DETECTED                 >>      01872000
<<--RDINTRPT-->>                                                        01874000
  [8/4,8/3],   <<147--WRITE TO DISABLE RECV SRQ                 >>      01876000
  1,           <<148--                                          >>      01878000
  1,           <<149--                                          >>      01880000
  [1/1,1/1,1/1,3/1,10/0],                                               01882000
               <<150--  RIGHT BYTE,NO UPDATE                    >>      01884000
  0,           <<151--..BUFFER ADDRESS                          >>      01886000
  [8/1,1/1,7/2],<<152--INTERRUPT/HALT,INFO TO CPVA2             >>      01888000
  0,           <<153--**INTERRUPT CAUSED BY A CHAR RECEIVED     >>      01890000
<<--MODSIOCNTRL-->>                                                     01892000
  [8/4,8/2],   <<154--WRITE INTERF CNTRL: MODEM CNTRL LINES     >>      01894000
  1,           <<155--                                          >>      01896000
  1,           <<156--                                          >>      01898000
  [1/1,1/1,1/1,3/1,10/0],                                               01900000
               <<157--  RIGHT BYTE,NO UPDATE                    >>      01902000
  0,           <<158--..BUFFER ADDRESS                          >>      01904000
  [8/4,8/7],   <<159--WRITE OUT MODEM STATUS MASK               >>      01906000
  1,           <<160--                                          >>      01908000
  1,           <<161--                                          >>      01910000
  [1/1,1/1,1/1,3/1,10/0],                                               01912000
               <<162--  RIGHT BYTE,NO UPDATE                     >>     01914000
  0,           <<163--..BUFFER ADDRESS                          >>      01916000
  [8/4,8/7],   <<164--WRITE OUT MODEM STATUS REFERENCE          >>      01918000
  1,           <<165--                                          >>      01920000
  1,           <<166--                                          >>      01922000
  [1/1,1/0,1/1,3/1,10/0],                                               01924000
               <<167--  LEFT  BYTE,NO UPDATE                    >>      01926000
  0,           <<168--..BUFFER ADDRESS                          >>      01928000
  [8/1,1/1,7/2],<<169--INTERRUPT/HALT                           >>      01930000
  26,          <<170--  CNTRLFINI: FINISHED SENDING MODEM CONTROL >>    01932000
<<--MODSIOPTY-->>                                                       01934000
  [8/4,8/1],   <<171--WRITE UART CONTROL: WLS,SBS,PTY           >>      01936000
  1,           <<172--                                          >>      01938000
  1,           <<173--                                          >>      01940000
  [1/1,1/0,1/1,3/1,10/0],                                               01942000
               <<174--  LEFT  BYTE,NO UPDATE                    >>      01944000
  0,           <<175--..BUFFER ADDRESS                          >>      01946000
  [8/1,1/1,7/2],<<176--INTERRUPT/HALT                           >>      01948000
  20,          <<177--  CNTRLFINI: FINISHED SENDING MODEM CONTROL >>    01950000
<<--SPSENBAUD-->>                                                       01952000
  [8/4,8/1],    <<178--WRITE UART CONTROL: WLS,SBS,PE             >>    01954000
  1,                                                                    01956000
  1,                                                                    01958000
  [1/1,1/0,1/1,3/1,10/0],                                               01960000
                <<181--  LEFT BYTE, NO UPDATE                     >>    01962000
  0,            <<182--..BUFFER ADDRESS                           >>    01964000
  [8/4,8/6],    <<183--WRITE TO SET RECV BAUDRATE CODE            >>    01966000
  1,                                                                    01968000
  1,                                                                    01970000
  [1/1,1/1,1/1,3/1,10/0],                                               01972000
                <<186--  RIGHT BYTE, NO UPDATE                    >>    01974000
  0,            <<187--..BUFFER ADDRESS                           >>    01976000
  [8/0,8/0],    <<188--JMP TO DISABLE XMIT BUF EMPTY SRQ          >>    01978000
  0,            <<189--  TO 66 OR 71:INTERF CNTRL,DISABLE XMIT SRQ>>    01980000
<<--WRTSPD-->>                                                          01982000
  [8/4,8/6],    <<190--WRITE OUT SEND BAUDRATE                    >>    01984000
  1,            <<191-- >>                                     <<02064>>01986000
                                                               <<02064>>01988000
  1,            <<192--                                           >>    01990000
  [1/1,1/0,1/1,3/1,10/0],                                               01992000
                <<193--  LEFT BYTE,NO UPDATE                      >>    01994000
  0,            <<194--..BUFFER ADDRESS                           >>    01996000
  [8/4,8/6],    <<195--WRITE OUT RECEIVE BAUDRATE                 >>    01998000
  1,            <<196--                                           >>    02000000
  1,            <<197--                                           >>    02002000
  [1/1,1/1,1/1,3/1,10/0],                                               02004000
                <<198--  RIGHT BYTE,NO UPDATE                     >>    02006000
  0,            <<199--..BUFFER ADDRESS                           >>    02008000
  [8/0,8/0],    <<200--JUMP TO SET START BITS  >>              <<01994>>02010000
  -31,          <<201--                        >>              <<01994>>02012000
<<--WRTINTRPT-->>                                                       02014000
  [8/4,8/3],    <<202--WRITE TO DISABLE RECV SRQ                  >>    02016000
  1,            <<203--                                           >>    02018000
  1,            <<204--                                           >>    02020000
  [1/1,1/1,1/1,3/1,10/0],                                               02022000
                <<205--  RIGHT BYTE,NO UPDATE                     >>    02024000
  0,            <<206--..BUFFER ADDRESS                           >>    02026000
  [8/1,1/1,7/2],<<207--INTERRUPT/HALT,INFO TO CPVA2               >>    02028000
  3,            <<208--  SPECIAL CHAR RECEIVED DURING WRITE       >>    02030000
<<--SRQOFF-->>                                                          02032000
  [8/4,8/3],    <<209--WRITE TO DISABLE RECV SRQ                  >>    02034000
  1,            <<210--                                           >>    02036000
  1,            <<211--                                           >>    02038000
  [1/1,1/1,1/1,3/1,10/0],                                               02040000
                <<212--  RIGHT BYTE                               >>    02042000
  0,            <<213--..BUFFER ADDRESS                           >>    02044000
  [8/4,8/3],    <<214--WRITE TO DISABLE SEND SRQ                  >>    02046000
  1,            <<215                                             >>    02048000
  1,            <<216                                             >>    02050000
  [1/1,1/1,1/1,3/1,10/0],                                               02052000
                <<217--  RIGHT BYTE                               >>    02054000
  0,            <<218--..BUFFER ADDRESS                           >>    02056000
  [8/0,8/0],    <<219--JMP TO 81:WAIT FOR MODEM STATUS CHANGE     >>    02058000
  -140,         <<220                                             >>    02060000
<<--NXTBLKRD-->>                                                        02062000
  [8/1,8/3],    <<221--INTERRUPT/NO HALT                          >>    02064000
  1,            <<222--  START READ BY 2ND SIO PROG               >>    02066000
<<--BLOCKWAIT-->>                                                       02068000
  [8/2,8/0],    <<223--WAIT FOR SRQ                               >>    02070000
  0,            <<224                                             >>    02072000
  [8/5,8/3],    <<225--DSJ                                        >>    02074000
  0,            <<226--  HOLDS DEV RETURNED BYTE                  >>    02076000
  2,            <<227--  0:READ DATA                              >>    02078000
  -131,         <<228--  1:WRITE SRQ,JUMP TO 100                  >>    02080000
  -129,         <<229--  2:READ DEV STATUS,JUMP TO 102            >>    02082000
  -8,           <<230--  3:NO CSRQ,BACK TO WAIT                   >>    02084000
  [8/1,1/1,7/0],<<231--INTERRUPT/HALT                             >>    02086000
  2,            <<232--  ERROR IN DEV RETURNED BYTE               >>    02088000
<<--BLOCKMODRD-->>                                                      02090000
  [8/3,8/0],    <<233--READ DATA                                  >>    02092000
  0,            <<234                                             >>    02094000
  0,            <<235                                             >>    02096000
  0,            <<236                                             >>    02098000
  0,            <<237--**BUFFER ADDRESS                           >>    02100000
  [8/1,1/1,7/2],<<238--SPECIAL CHAR DETECTED,INTERRUPT/HALT       >>    02102000
  2,            <<239                                             >>    02104000
  [8/0,8/0],    <<240--JUMP BACK TO 223:WAIT SRQ                  >>    02106000
  -19,          <<241                                             >>    02108000
  [8/1,8/3],    <<242--INTERRUPT/NO HALT                             >> 02110000
  2,            <<243                                             >>    02112000
  [8/0,8/0],    <<244--JUMP TO 81:WAIT FOR CHAR RECVD SRQ         >>    02114000
  -165,         <<245                                             >>    02116000
<<--WRT'RD2-->>                                                         02118000
  [8/4,8/2],    <<246--WRITE INTERF CNTRL:ECHO?, CD ON            >>    02120000
  1,            <<247--                                           >>    02122000
  1,            <<248--                                           >>    02124000
  [1/1,1/1,1/1,3/1,10/0],                                               02126000
                <<249--                                           >>    02128000
  0,            <<250--..BUFFER ADDRESS                           >>    02130000
<<--WAIT2SIO-->>                                                        02132000
  [8/4,8/3],    <<251--WRITE TO ENABLE RECV SRQ                   >>    02134000
  1,            <<252                                             >>    02136000
  1,            <<253                                             >>    02138000
  [1/1,1/0,1/1,3/1,10/0],                                               02140000
                <<254--  LEFT BYTE,NO UPDATE                      >>    02142000
  0,            <<255--..BUFFER ADDRESS                           >>    02144000
  [8/0,8/0],    <<256--JUMP TO 223:WAIT SRQ                       >>    02146000
  -35,          <<257                                             >>    02148000
<<--NEWSPECCHAR-->>                                            <<02864>>02150000
  0,            <<258--SET OR CLEAR SPECIAL CHARS           >> <<02864>>02152000
  0,            <<259--                                     >> <<02864>>02154000
  0,            <<260--                                     >> <<02864>>02156000
  0,            <<261--                                     >> <<02864>>02158000
  0,            <<262--                                     >> <<02864>>02160000
  0,            <<263--JUMP TO READ OR INTERRUPT HALT       >> <<02864>>02162000
  0,            <<264--                                     >> <<02864>>02164000
  [8/0, 8/0],   <<265--JUMP TO CONTINUE SET/CLEAR           >> <<02864>>02166000
  -9,           <<266--                                     >> <<02864>>02168000
                                                                        02170000
                                                                        02172000
                                                                        02174000
<<******************************************************************    02176000
  ******************************************************************    02178000
  *******         END OF CHANNEL PROGRAM AREA                *******    02180000
  ******************************************************************    02182000
  ******************************************************************    02184000
>>                                                                      02186000
      213,   <<SIO PROG SIZE>>                                 <<02064>>02188000
      [8/4,8/1],1,1,[1/1,1/0,1/1,3/1,10/0],0,                  <<00690>>02190000
      <<WRITE UART CNTRL BYTE>>                                <<00690>>02192000
      [8/4,8/7],1,1,[1/1,1/1,1/1,3/1,10/0],0,                  <<00690>>02194000
      <<5--WRITE OUT MASK TO DISABLE MODEM CSRQ>>              <<00690>>02196000
      [8/4,8/3],1,1,[1/1,1/1,1/1,3/1,10/0],0,                  <<00690>>02198000
      <<WRITE TO ENABLE XMIT BUF NOT FULL SRQ>>                <<00690>>02200000
      [8/4,8/4],256,1,[1/1,1/0,1/1,13/0],0,                    <<00690>>02202000
      <<WRT OUT ALL 256 CHARS TO CLR SPECL CHAR LOGIC>>        <<00690>>02204000
      0,4,                                                     <<00690>>02206000
      <<ALL DONE,JUMP TO SET SPECL CHARS>>                     <<00690>>02208000
      [8/2,8/0],0,                                             <<00690>>02210000
      <<WAIT FOR WRITE SRQ>>                                   <<00690>>02212000
      0,-11,                <<JUMP BACK TO WRITE CHAR>>        <<00690>>02214000
      [8/4,8/5], 0,1,[1/1,1/0,1/1,13/0],0,                     <<00690>>02216000
      <<WRITE TO SET SPECL CHAR DETECTION LOGIC>>              <<00690>>02218000
      0,2,                  <<31--FINISHED WRITING SPECL CHAR>><<00690>>02220000
      0,-9,                 <<33--CONTINUE SEND SPECL CHARS>>  <<00690>>02222000
      [8/4,8/6],1,1,[1/1,1/0,1/1,3/1,10/0],0,                  <<00690>>02224000
      <<35--WRITE OUT SEND BAUDRATE>>                          <<00690>>02226000
      [8/4,8/6],1,1,[1/1,1/1,1/1,3/1,10/0],0,                  <<00690>>02228000
      <<40--WRITE OUT RECEIVE BAUDRATE>>                       <<00690>>02230000
      [8/4,8/3],1,1,[1/1,1/0,1/1,3/1,10/0],0,                  <<00690>>02232000
      <<45--WRITE TO DISABLE BUFFER EMPTY SRQ>>                <<00690>>02234000
      [8/0,8/0],0,                                             <<00690>>02236000
      <<50--JMP TO SKIP MODEM CNTRL IF NECESSARY>>             <<00690>>02238000
      [8/4,8/2],1,1,[1/1,1/1,1/1,3/1,10/0],0,                  <<00690>>02240000
      <<52--WRITE INTERFACE MODEM CONTROL>>                    <<00690>>02242000
      [8/4,8/7],1,1,[1/1,1/0,1/1,3/1,10/0],0,                  <<00690>>02244000
      <<57--WRITE MODEM STATUS REFERENCE>>                     <<00690>>02246000
      [8/4,8/7],1,1,[1/1,1/1,1/1,3/1,10/0],0,                  <<00690>>02248000
      <<62--WRITE MODEM STATUS MASK >>                         <<00690>>02250000
      [8/2,8/0],0,          <<67--IDLE WAIT      >>            <<00690>>02252000
                                                               <<00690>>02254000
      0,-4,                                                    <<00690>>02256000
      -1,                   <<71-------END OF SIO PROG>>       <<00690>>02258000
      %114404,              <<72--UART CNTRL BYTE;SRQ ON BYTE>><<00690>>02260000
      %40,                  <<73--XMIT SRQ OFF;MODEM MASK>>    <<00690>>02262000
      %410,                 <<74--CONTROL A; CONTROL H     >>  <<00690>>02264000
      %6406,                <<75--CR; ACK                  >>  <<00690>>02266000
      %10430,               <<76--XON   ; CONTROL X        >>  <<00690>>02268000
      %14433,               <<77--CONTROL Y ; ESC          >>  <<00690>>02270000
      %11023,               <<78--DC2; XOFF                >>  <<00690>>02272000
      %5001,                <<79--LF, CONTROL A              >><<00690>>02274000
      %35073,               <<80--SEMI-COLON AND COLON       >><<02064>>02276000
      0,                    <<81--DSTOP: EOR,SUBSYS BRK CHARS>><<02064>>02278000
      %20,                  <<82--SEND BAUDRATE;RECV BAUDRATE>><<02064>>02280000
      %7,                   <<83--0;MODEM CNTRL:ECHO,CD,CH,SA>><<02064>>02282000
      %50,                  <<84--MODEM REFERENCE; MODEM MASK>><<02064>>02284000
      128(0);               <<85--BUFFER TO HOLD 256 CHARS   >><<02064>>02286000
                                                                        02288000
PROCEDURE ABORTJOB(UMAINPIN);                                  <<01465>>02290000
  VALUE UMAINPIN; INTEGER UMAINPIN;                            <<01465>>02292000
  OPTION EXTERNAL;                                             <<01465>>02294000
                                                               <<01465>>02296000
PROCEDURE ADDTAIL(DITP,LINKINDEX,QUEUENUMBER);                          02298000
  VALUE LINKINDEX, QUEUENUMBER;   INTEGER LINKINDEX, QUEUENUMBER;       02300000
  ARRAY DITP;   OPTION EXTERNAL;                                        02302000
                                                                        02304000
DOUBLE PROCEDURE ATTACHIO(LDEV,QMISC,DSTX,ADDR,FNCT,CNT,P1,P2,FLAGS);   02306000
  VALUE LDEV,QMISC,DSTX,ADDR,FNCT,CNT,P1,P2,FLAGS;                      02308000
  INTEGER LDEV,QMISC,DSTX,ADDR,FNCT,CNT,P1,P2,FLAGS;                    02310000
  OPTION EXTERNAL;                                                      02312000
                                                                        02314000
PROCEDURE AWAKE(PCBPT, N, WAITF);                                       02316000
  VALUE PCBPT, N, WAITF;                                                02318000
  INTEGER PCBPT, N, WAITF;                                              02320000
  OPTION EXTERNAL;                                                      02322000
                                                                        02324000
PROCEDURE BREAKJOB(LDEV, PIN );                                         02326000
  VALUE LDEV, PIN;  INTEGER LDEV, PIN;                                  02328000
  OPTION EXTERNAL;                                                      02330000
                                                                        02332000
PROCEDURE BREAKSS(LDEV, PINS );                                         02334000
  VALUE LDEV, PINS;  INTEGER LDEV, PINS;                                02336000
  OPTION EXTERNAL;                                                      02338000
                                                                        02340000
PROCEDURE CHECKTQUEUE(DITP);                                            02342000
  ARRAY DITP;   OPTION EXTERNAL;                                        02344000
                                                                        02346000
PROCEDURE DELAY(TIME);                                                  02348000
  VALUE TIME;  DOUBLE TIME;                                             02350000
  OPTION EXTERNAL;                                                      02352000
                                                                        02354000
PROCEDURE EOFCHECK(IOQP,BUFADDR,COUNT,HARDEOF);                         02356000
  VALUE BUFADDR,COUNT,HARDEOF;  DOUBLE BUFADDR;                         02358000
  ARRAY IOQP;  INTEGER COUNT,HARDEOF;                                   02360000
  OPTION EXTERNAL;                                                      02362000
                                                                        02364000
PROCEDURE DMONITOR(DITP,ID,P1,P2);                                      02366000
  VALUE ID, P1, P2;  INTEGER ID, P1,P2;                                 02368000
  INTEGER ARRAY DITP;  OPTION EXTERNAL;                                 02370000
                                                                        02372000
                                                                        02374000
PROCEDURE  MODCONTROL( CONTROL, DITP );                                 02376000
  VALUE CONTROL, DITP;  INTEGER CONTROL;                                02378000
  INTEGER POINTER DITP;                                                 02380000
  OPTION EXTERNAL;                                                      02382000
                                                                        02384000
INTEGER PROCEDURE EXCHANGEDB(DSTNUMBER);                                02386000
  VALUE DSTNUMBER;  INTEGER DSTNUMBER;                                  02388000
  OPTION EXTERNAL;                                                      02390000
                                                                        02392000
INTEGER PROCEDURE GETIOQ(TYPE);                                         02394000
  VALUE TYPE;  INTEGER TYPE;                                            02396000
  OPTION EXTERNAL;                                                      02398000
                                                                        02400000
INTEGER PROCEDURE GETTBUF(FLAG);                                        02402000
  VALUE FLAG;  INTEGER FLAG;                                            02404000
  OPTION EXTERNAL;                                                      02406000
                                                                        02408000
INTEGER PROCEDURE GETSBUF(FLAG);                                        02410000
  VALUE FLAG;  INTEGER FLAG;                                            02412000
  OPTION EXTERNAL;                                                      02414000
                                                                        02416000
Logical Procedure Getsir (Sir);                                <<01465>>02418000
Value Sir;                                                     <<01465>>02420000
Integer Sir;                                                   <<01465>>02422000
OPTION EXTERNAL;                                               <<01465>>02424000
                                                               <<01465>>02426000
PROCEDURE HELP;  OPTION EXTERNAL;                                       02428000
                                                                        02430000
PROCEDURE IDLEWAIT (DITP);                                              02432000
  ARRAY DITP;                                                           02434000
  OPTION EXTERNAL;                                                      02436000
                                                                        02438000
                                                                        02440000
DOUBLE PROCEDURE IOSTATUS(IOQX);                                        02442000
  VALUE IOQX;  INTEGER IOQX;                                            02444000
  OPTION EXTERNAL;                                                      02446000
                                                                        02448000
PROCEDURE INITCHANNEL(DITP);                                            02450000
  INTEGER ARRAY DITP;  OPTION EXTERNAL;                                 02452000
                                                                        02454000
LOGICAL PROCEDURE IOMESSAGE(SETNO,MSGNO,MASK,P1,P2,P3,P4,P5,   <<01464>>02456000
  DEST,REPLY,OFFSET,DITP,IOTYPE);                              <<01464>>02458000
VALUE SETNO,MSGNO,MASK,P1,P2,P3,P4,P5,DEST,REPLY,OFFSET,DITP,  <<01464>>02460000
  IOTYPE;                                                      <<01464>>02462000
INTEGER SETNO,MSGNO,MASK,P1,P2,P3,P4,P5,DEST,REPLY,OFFSET,     <<01464>>02464000
  IOTYPE;                                                      <<01464>>02466000
INTEGER POINTER DITP;                                          <<01464>>02468000
OPTION VARIABLE,EXTERNAL;                                      <<01464>>02470000
                                                               <<01464>>02472000
                                                               <<04869>>02474000
INTEGER PROCEDURE LDEVTOTYPE(LDEV);                            <<04869>>02476000
   VALUE LDEV;                                                 <<04869>>02478000
   INTEGER LDEV;                                               <<04869>>02480000
   OPTION EXTERNAL;                                            <<04869>>02482000
                                                               <<04869>>02484000
                                                               <<04869>>02486000
PROCEDURE LOGERROR(DITP,IOQP,DEVSTAT);                                  02488000
  VALUE DEVSTAT;  ARRAY DITP,IOQP;                                      02490000
  INTEGER DEVSTAT;    OPTION EXTERNAL;                                  02492000
                                                                        02494000
Procedure Relsir (Sir,Sirstat);                                <<01465>>02496000
Value Sir,Sirstat;                                             <<01465>>02498000
Integer Sir;                                                   <<01465>>02500000
Logical Sirstat;                                               <<01465>>02502000
OPTION EXTERNAL;                                               <<01465>>02504000
                                                               <<01465>>02506000
PROCEDURE RESETDB(OLDDB);                                               02508000
  VALUE OLDDB;  INTEGER OLDDB;                                          02510000
  OPTION EXTERNAL;                                                      02512000
                                                                        02514000
PROCEDURE RETURNSYSBUF(INDEX);                                          02516000
  VALUE INDEX;  INTEGER INDEX;                                          02518000
  OPTION EXTERNAL;                                                      02520000
                                                                        02522000
PROCEDURE RETURNTBUF(TBUFP);                                            02524000
  VALUE TBUFP;  INTEGER TBUFP;                                          02526000
  OPTION EXTERNAL;                                                      02528000
                                                                        02530000
PROCEDURE RETURNIOQ(IOQP);                                              02532000
  VALUE IOQP;  INTEGER IOQP;                                            02534000
  OPTION EXTERNAL;                                                      02536000
                                                                        02538000
PROCEDURE SENDSYNC(NEWDSTATE,DITP);                                     02540000
  VALUE NEWDSTATE;  INTEGER NEWDSTATE;                                  02542000
  ARRAY DITP;   OPTION EXTERNAL;                                        02544000
                                                                        02546000
PROCEDURE SENDCRLF(INTRPTCODE,DITP);                                    02548000
  VALUE INTRPTCODE;  INTEGER INTRPTCODE;                                02550000
  ARRAY DITP;                                                           02552000
  OPTION EXTERNAL;                                                      02554000
                                                                        02556000
PROCEDURE SET'PSIF(PCBPT,FLAG);                                         02558000
  VALUE PCBPT, FLAG;  INTEGER PCBPT, FLAG;                              02560000
  OPTION EXTERNAL;                                                      02562000
                                                                        02564000
PROCEDURE SETREADERROR(IOQP,ENUMB);                                     02566000
  VALUE ENUMB;  INTEGER ENUMB;                                          02568000
  ARRAY IOQP;   OPTION EXTERNAL;                                        02570000
                                                                        02572000
INTEGER PROCEDURE SETSYSDB;  OPTION EXTERNAL;                           02574000
                                                                        02576000
PROCEDURE SETTERMTYPE(TYPE,ISPD,OSPD,DITP);                             02578000
  VALUE    TYPE, ISPD,OSPD;                                             02580000
  INTEGER  TYPE, ISPD,OSPD;                                             02582000
  ARRAY DITP;   OPTION EXTERNAL;                                        02584000
                                                                        02586000
PROCEDURE STARTTIMEOUT(TYPE,DITP);                                      02588000
  VALUE TYPE;   INTEGER TYPE;                                           02590000
  ARRAY DITP;   OPTION EXTERNAL;                                        02592000
                                                                        02594000
PROCEDURE STATREQUEST(DITP);                                   <<01464>>02596000
  INTEGER ARRAY DITP;                                          <<01464>>02598000
  OPTION EXTERNAL;                                             <<01464>>02600000
                                                               <<01464>>02602000
PROCEDURE STOPTIMEOUT(TYPE,DITP);                                       02604000
  VALUE TYPE;    INTEGER TYPE;                                          02606000
  ARRAY DITP;    OPTION EXTERNAL;                                       02608000
                                                                        02610000
                                                                        02612000
DOUBLE PROCEDURE TIMER;                                                 02614000
OPTION EXTERNAL;                                                        02616000
                                                                        02618000
PROCEDURE SUDDENDEATH(N);                                               02620000
  VALUE N;  INTEGER N;                                                  02622000
  OPTION EXTERNAL;                                                      02624000
                                                                        02626000
PROCEDURE TERMINIT(DITP);                                               02628000
  INTEGER ARRAY DITP;                                                   02630000
  OPTION EXTERNAL;                                                      02632000
                                                                        02634000
PROCEDURE TIP;   OPTION EXTERNAL;                                       02636000
$PAGE                                                          <<00.05>>02638000
                                                                        02640000
DOUBLE PROCEDURE DATA'ADR(IOQP);                                        02642000
  INTEGER ARRAY IOQP;                                                   02644000
  <<                                                                    02646000
    THIS PROCEDURE MAKES THE DATA SEGMENT REFERENCED IN THE IOQ         02648000
    PRESENT AND RETURNS THE DST NUMBER AND OFFSET TO THE TARGET         02650000
    IT MUST BE CALLED WITH ONE LEVEL OF PSEUDO DISABLE IN EFFECT        02652000
    IF THE DST IN NOT CORE RESIDENT.                                    02654000
  >>                                                                    02656000
  BEGIN                                                                 02658000
    INTEGER DSTN, OFFSET := 0;                                          02660000
    X := IOQP(QDSTN)&LSL(2);  << DST # TIMES 4 >>                       02662000
    DSTN := X&LSR(2);   << STRIP OFF DB RELATIVE BIT >>                 02664000
    WHILE DST(X)<0 DO  << ABSENT, SO MAKE PRESENT >>                    02666000
      BEGIN  << DUMY MOVE TO MAKE PRESENT >>                            02668000
        PENABLE;                                                        02670000
        TOS := DSTN;                                                    02672000
        ASMB(ZERO,DDUP);                                                02674000
        TOS := 1;    ASMB( MDS );                                       02676000
        PDISABLE;                                                       02678000
      END;                                                              02680000
    IF IOQP(QDSTN)<0 THEN  << STACK, ADD DB OFFSET TO ADDR >>           02682000
      BEGIN                                                             02684000
        TOS := DSTD(DSTN*2+1);    << BANK AND OFFSET >>                 02686000
        TOS := TOS + 1;   << ADDR OF DB OFFSET >>                       02688000
        LOADMEMORY;       << DB TO DL OFFSET   >>                       02690000
        OFFSET := TOS;                                                  02692000
      END;                                                              02694000
    TOS := DSTN;                                                        02696000
    TOS := IOQP(QADDR) + OFFSET;                                        02698000
    DATA'ADR := TOS;                                                    02700000
  END;   << DATA  ADR >>                                                02702000
PROCEDURE ADCCINIT(DITP);                                               02704000
INTEGER ARRAY DITP;                                                     02706000
OPTION PRIVILEGED, UNCALLABLE;                                          02708000
BEGIN                                                                   02710000
   INTEGER TEMP, ADDR, DRT, SPECLCNT ;                                  02712000
   DOUBLE STARTTIME;                                                    02714000
   LOGICAL NOTEND, SIOACTIVE ;                                          02716000
   TEMP:=WA0(%347);        <<SIO PROG STARTING LOCATION>>      <<00690>>02718000
   ADDR:=SYSDB + TEMP;                                         <<00690>>02720000
   SPECLCNT := 14;                                             <<02064>>02722000
   DRT:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                              02724000
                                                                        02726000
   IF NOT LOGICAL(DITP.UP) THEN                                         02728000
 BEGIN                                                                  02730000
   DITP(DSPEED).OUTSPEED:=DITP(DLAST).TERMSPEED;                        02732000
   DITP(DSPEED).INSPEED :=DITP(DSPEED).OUTSPEED;                        02734000
   DITP(DTYPE).TTYPE:=DITP(DLAST).TERMINALTYPE;                         02736000
   TOS:=LPDTD(DITP(DLDEV).LDEVN);                                       02738000
  << SUBTYPES 14 & 15 ARE USED FOR S.T. 0 & 1 IF TYPE = 32 >>  <<01464>>02740000
  IF S0.(12:4) > 13 THEN TOS := TOS-14;                        <<01464>>02742000
   DITP(DMODEM).MTYPE:=TOS;                                             02744000
   WA0(TEMP+82):=%3427; <<SET SEND,RECV BAUDRATE=2400 BAUD>>   <<02064>>02746000
 END                                                           <<00690>>02748000
    ELSE                                                       <<00690>>02750000
 BEGIN                                                         <<00690>>02752000
   WA0(TEMP+82).(0:8):=DITP(DSPEED).OUTSPEED;                  <<02064>>02754000
   WA0(TEMP+82).(12:4):=DITP(DSPEED).INSPEED;                  <<02064>>02756000
   IF DITP(DSTOP)<>0 THEN                                      <<00690>>02758000
   BEGIN                                                       <<00690>>02760000
      SPECLCNT:=16;                                            <<02064>>02762000
      WA0(TEMP+81):=DITP(DSTOP);                               <<02064>>02764000
   END;                                                        <<00690>>02766000
 END;                                                          <<00690>>02768000
   TOS := IF LOGICAL(DITP.PTYCHK) THEN %110004 ELSE %114404;   <<02051>>02770000
   IF LOGICAL(DITP.PTYCHK) AND NOT LOGICAL(DITP(DCNTRL).ODDPTY)<<02051>>02772000
      THEN TOS.EPE := 1;                                       <<02051>>02774000
   IF DITP(DSPEED).OUTSPEED = %17 THEN TOS.SBS := 1;           <<02051>>02776000
   WA0(TEMP+72) := TOS;                                        <<02051>>02778000
   WA0(TEMP+4):=WA0(TEMP+14):=ADDR+72;                         <<00690>>02780000
   WA0(TEMP+9):=WA0(TEMP+49):=ADDR+73;                         <<00690>>02782000
   WA0(TEMP+30):=ADDR+74;                                      <<00690>>02784000
   WA0(TEMP+16):=256; <<REGENERATE NO. OF CHARS TO CLEAR>>     <<00690>>02786000
   WA0(X:=X+2):=[1/1,1/0,1/1,13/0];                            <<00690>>02788000
   WA0(X:=X+1):=ADDR + 85;                                     <<02064>>02790000
   WA0(TEMP+27):=SPECLCNT;<<******VARIABLE NUMBER********>>    <<00690>>02792000
   WA0(X:=X+2):=[1/1,1/0,1/1,13/0];                            <<00690>>02794000
   WA0(TEMP+39):=WA0(TEMP+44):=ADDR+82; <<SEND RECV BAUDRATE>> <<02064>>02796000
   WA0(TEMP+51):=15; <<NOT MODEM,SKIP MODEM CONTROL>>          <<01046>>02798000
   X:=DITP(DMODEM).MTYPE;                                      <<00690>>02800000
   IF <> THEN                                                  <<00690>>02802000
   BEGIN     <<ON A MODEM>>                                    <<00690>>02804000
      IF LOGICAL(DITP(DMODEM)&CSL(M202)) THEN                  <<01046>>02806000
      BEGIN                                                    <<01046>>02808000
         WA0(TEMP+51):=0; <<DO NOT SKIP MODEM CONTROL>>        <<01046>>02810000
         WA0(X:=X+1):=[8/4,8/2]; <<WRITE MODEM CONTROL>>       <<01046>>02812000
         WA0(X:=X+1):=1;                                       <<01046>>02814000
         WA0(X:=X+1):=1;                                       <<01046>>02816000
         WA0(X:=X+1):=[1/1,1/1,1/1,3/1,10/0];                  <<01046>>02818000
         WA0(X:=X+1):=ADDR+83;                                 <<02064>>02820000
         WA0(X:=X+1):=[8/4,8/7]; <<WRITE MODEM REFERENCE>>     <<01046>>02822000
         WA0(X:=X+1):=1;                                       <<01046>>02824000
         WA0(X:=X+1):=1;                                       <<01046>>02826000
         WA0(X:=X+1):=[1/1,1/0,1/1,3/1,10/0];                  <<01046>>02828000
         WA0(X:=X+1):=ADDR+84;                                 <<02064>>02830000
         WA0(X:=X+1):=[8/4,8/7];                               <<01046>>02832000
         WA0(X:=X+1):=1;                                       <<01046>>02834000
         WA0(X:=X+1):=1;                                       <<01046>>02836000
         WA0(X:=X+1):=[1/1,1/1,1/1,3/1,10/0];                  <<01046>>02838000
         WA0(X:=X+1):=ADDR+84;                                 <<02064>>02840000
         IF DITP(DMODEM).MTYPE=3 THEN                          <<01046>>02842000
            WA0(TEMP+83).MODCH:=0;   <<2002 MODEM>>            <<02064>>02844000
      END                                                      <<01046>>02846000
         ELSE                                                  <<01046>>02848000
         IF DITP(DMODEM).MTYPE=1 OR DITP(DMODEM).MTYPE=5 THEN  <<01534>>02850000
         BEGIN                                                 <<01046>>02852000
            WA0(TEMP+51):=0;                                   <<01046>>02854000
            WA0(X:=X+1):=[8/3,8/2];                            <<01046>>02856000
            WA0(X:=X+1):=1;  <<READ MODEM SIGNALS>>            <<01046>>02858000
            WA0(X:=X+1):=[8/0,8/1];                            <<01046>>02860000
            WA0(X:=X+1):=[1/1,1/0,4/1,10/0];                   <<01046>>02862000
            WA0(X:=X+1):=ADDR+83;                              <<02064>>02864000
            WA0(X:=X+1):=0;  <<JUMP TO IDLE WAIT>>             <<01046>>02866000
            WA0(X:=X+1):=8;                                    <<01046>>02868000
         END;                                                           02870000
   END;                                                                 02872000
   X:=ADDR + 84;                                               <<02064>>02874000
   TOS:=1;                                                     <<00690>>02876000
   WHILE LS0 < %177377 DO  <<TEST IF BYTES 254,255 THERE>>     <<00690>>02878000
   BEGIN                                                       <<00690>>02880000
      ABS(X:=X+1):=S0;                                         <<00690>>02882000
      TOS:=TOS + %1002;    <<GET NEXT 2 HIGHER BYTES>>         <<00690>>02884000
   END;                                                        <<00690>>02886000
   ABS(X:=X+1):= TOS;      <<GET LAST 2 BYTES: 254,255>>       <<00690>>02888000
   DISABLE;                                                    <<00690>>02890000
   TOS:=DRT;                                                   <<00690>>02892000
   X:=ABS(S0*4+3).IDLESIO;                                     <<00690>>02894000
   IF <> THEN SUDDENDEATH(211); << HARDWARE PROBLEM >>         <<02003>>02896000
   TOS:=ADDR;                                                  <<00690>>02898000
   STARTSIO;                                                   <<00690>>02900000
   NOTEND:=TRUE;                                               <<00690>>02902000
   STARTTIME:=TIMER;                                           <<00690>>02904000
   TOS:=0D;                                                    <<00690>>02906000
   WHILE TOS<1500 AND NOTEND DO                                <<00690>>02908000
   BEGIN                                                       <<00690>>02910000
      DEL;                                                     <<00690>>02912000
      IF ABS(DRT*4)-ADDR >= 67 THEN NOTEND:=FALSE;             <<00690>>02914000
      TOS:=TIMER-STARTTIME;                                             02916000
   END;                                                                 02918000
   DEL;                                                                 02920000
                                                                        02922000
   IF NOTEND THEN BEGIN   <<ADCC NOT IN SYSTEM>>               <<00479>>02924000
                  ABS(DRT*4+3):=0;                             <<00479>>02926000
                  RETURN;                                      <<00479>>02928000
                  END;                                         <<00479>>02930000
                                                                        02932000
   TOS:=DRT;                                                            02934000
   STOPSIO;                                                             02936000
                                                                        02938000
   SPECLCNT:=WA0(TEMP+83);  <<GET CURRENT MODEM SIGNALS>>      <<02064>>02940000
                                                                        02942000
   TEMP:=WA0(DITP(DILTP)+ISIOP);    <<IOTERM0 SIO PROG AREA ADDR>>      02944000
   IF NOT LOGICAL(DITP.UP) THEN                                         02946000
 BEGIN                                                                  02948000
   ADDR:=TEMP+SYSDB;                                                    02950000
   X:=TEMP+WRTBASE+4;                                                   02952000
   WA0(X):=ADDR+5;  WA0(X:=X+5):=ADDR+6; <<INT CNTRL;XMIT SRQ ON >>     02954000
   WA0(X:=X+5):=ADDR+7;            <<ADDR FOR RECV SRQ ON BYTE>>        02956000
   X:=TEMP+WRTSRQ+19;                                                   02958000
   WA0(X):=ADDR+10;                 <<ADDR FOR BOTTOMLESS DATA DUMP>>   02960000
   X:=TEMP+RDSTRT+4;                                                    02962000
   WA0(X):=ADDR+13;                <<BUFF ADDR TO SET SSBRK, EOR CHAR>> 02964000
   X:=TEMP+RECVOFF+4;                                                   02966000
   WA0(X):=ADDR+6;                 <<ENABLE XMIT SRQ BYTE>>             02968000
   X:=TEMP+WRT'RD+4;                                                    02970000
   WA0(X):=ADDR+5;                 <<INTERFACE CONTROL BYTE>>           02972000
   WA0(X:=X+5):=ADDR+6;            <<DISABLE XMIT SRQ BYTE>>            02974000
   X:=TEMP+RDWAIT+4;               <<ENABLE RECV SRQ>>                  02976000
   WA0(X):=ADDR+7;                                                      02978000
   X:=TEMP+RDDATAINSTR+15;                                              02980000
   WA0(X):=ADDR+10;                 <<ADDR FOR RECVING DEV STATUS>>     02982000
   WA0(X:=X+7):=ADDR+15;           <<MODEM STATUS>>                     02984000
   WA0(X:=X+5):=ADDR+7;            <<DISABLE RECV SRQ>>                 02986000
   X:=TEMP+FINISEND+4;                                                  02988000
   WA0(X):=ADDR+6;                 <<DISABLE XSMIT SRQ>>                02990000
   X:=TEMP+RDEXIT+4;                                                    02992000
   WA0(X):=ADDR+7;                 <<DISABLE RECV SRQ>>                 02994000
   X:=TEMP+RDBRK+4;                                                     02996000
   WA0(X):=ADDR+10;                <<BUFFER TO RECV BREAK>>             02998000
   WA0(X:=X+5):=ADDR+7;            <<DISABLE RECV SRQ>>                 03000000
   X:=TEMP+RDINTRPT+4;                                                  03002000
   WA0(X):=ADDR+7;                 <<DISABLE RECV SRQ>>                 03004000
   X:=TEMP+MODSIOCNTRL+4;                                               03006000
   WA0(X):=ADDR+14;                <<INTERFACE MODEM CONTROL>>          03008000
   WA0(X:=X+5):=ADDR+15;           <<MODEM STATUS REFERENCE>>           03010000
   WA0(X:=X+5):=ADDR+15;           <<MODEM STATUS MASK>>                03012000
   X:=TEMP+MODSIOPTY+4;                                                 03014000
   WA0(X):=ADDR+4;                 <<INTERFACE MODEM CONTROL>>          03016000
   X:=TEMP+SPSENBAUD+4;                                                 03018000
   WA0(X):=ADDR+4;                  <<UART CONTROL BYTE>>               03020000
   WA0(X:=X+5):=ADDR+8;             <<RECV BAUDRATE CODE>>              03022000
   X:=TEMP+WRTSPD+4;                <<SEND BAUDRATE BYTE ADDRESS>>      03024000
   WA0(X):=ADDR+8;                                                      03026000
   WA0(X:=X+5):=ADDR+8;             <<RECV BAUDRATE BYTE ADDRESS>>      03028000
   WA0(X:=X+7):=ADDR+7;             <<DISABLE RECV SRQ>>                03030000
   X:=TEMP+SRQOFF+4;                                                    03032000
   WA0(X):=ADDR+7;                     <<DISABLE RECV SRQ>>             03034000
   WA0(X:=X+5):=ADDR+6;                <<DISABLE XSMIT SRQ>>            03036000
   X:=TEMP+WRT'RD2+4;                                                   03038000
   WA0(X):=ADDR+5;                     <<INTERF CNTRL BYTE>>            03040000
   X:=TEMP+WAIT2SIO+4;                                                  03042000
   WA0(X):=ADDR+7;       <<ENABLE RECV SRQ>>                            03044000
   WA0(TEMP+4):=%114403;            <<UART CNTRL: WL=8 BITS,PTY OFF>>   03046000
   WA0(TEMP+8):=%27;                <<SET RECV BAUDRATE TO 240CPS>>     03048000
   WA0(TEMP+5):=%6014;              <<NO ECHO,CD ON>>                   03050000
 END;                                                          <<01046>>03052000
                                                               <<01046>>03054000
   IF DITP(DMODEM).MTYPE=1 OR DITP(DMODEM).MTYPE=5 THEN BEGIN  <<01534>>03056000
      DITP(DSAVE).CCVALUE:=SPECLCNT.MODCCREF;<<KEEP NEW VALUE>><<01046>>03058000
      DITP(DMODEM).CF:=SPECLCNT.MODCFREF;                      <<01046>>03060000
      WA0(TEMP+15):=SPECLCNT; <<CURRENT VALUES AS NEW REFEREN>><<01046>>03062000
      WA0(X).(8:8):=%52;  WA0(X).(0:3):=0; <<MASK FOR CC,CF>>  <<01534>>03064000
      WA0(TEMP+14).(8:8):=%17;  <<SET CA,CD,CH,SA ON>>         <<01046>>03066000
      IF LOGICAL(SPECLCNT.MODCCREF) THEN                       <<01046>>03068000
         DITP(DSAVE).CCON:=1;   <<SET CC ALWAYS ON FLAG>>      <<01046>>03070000
      DITP.MODACTIVE:=1;                                       <<01046>>03072000
      DITP(DSAVE).ININ:=1;      <<SET SYSTEM INITIAL FLAG>>    <<01046>>03074000
      TOS:=DRT;                                                <<01046>>03076000
      TOS:=TEMP+SYSDB+MODSIOCNTRL;                             <<01046>>03078000
      STARTSIO;                                                <<01046>>03080000
      RETURN;                                                  <<01046>>03082000
   END;                                                        <<01046>>03084000
                                                               <<01046>>03086000
   IF NOT LOGICAL(DITP.UP) AND DITP(DLDEV).DLDEVN <>           <<01046>>03088000
  CONSLDEV.DLDEVN THEN BEGIN                                   <<01046>>03090000
   WA0(TEMP+SPSENBAUD+11):=-124;    <<190 TO 66:WRT'RD>>                03092000
   X:=TEMP+RDDATAINSTR;                                                 03094000
   WA0(X):=[8/3,8/0];                                                   03096000
   WA0(X:=X+1):=1;                                                      03098000
   WA0(X:=X+1):=[8/0 ,8/1]; <<JMP TO INTERRUPT W/CODE=8>>               03100000
   WA0(X:=X+1):=[1/1,1/1,4/1,10/0];                                     03102000
   WA0(X:=X+1):=SYSDB+TEMP+10;                                          03104000
   WA0(X:=X+2):=WAITSPDS;  <<JUMP TO INTERRUPT W/CODE=8         >>      03106000
   IF DITP(DMODEM).MTYPE=4 THEN                                <<01534>>03108000
      WA0(TEMP+8).(12:4):=DITP(DSPEED).INSPEED;<<NON-SPDSEN>>  <<01534>>03110000
   IF DITP(DMODEM).MTYPE=0 OR DITP(DMODEM).MTYPE=4             <<01534>>03112000
      THEN ADDR:=SPSENBAUD                                     <<01534>>03114000
      ELSE ADDR:=SRQOFF;                                       <<01534>>03116000
   DITP(DCNTRL).SPDSIO := 1;                                   <<01883>>03118000
  DOAGAIN:                                                              03120000
   TOS:=DRT;                                                            03122000
   TOS:=TEMP+SYSDB+ADDR;                                       <<01534>>03124000
                                                               <<01534>>03126000
   ENABLE;                                                              03128000
   STARTSIO;                                                            03130000
   IF > THEN GOTO DOAGAIN;                                              03132000
                                                                        03134000
  END                                                          <<01046>>03136000
                                                               <<01046>>03138000
    ELSE                                                                03140000
 BEGIN                                                                  03142000
    IF DITP(DLDEV).DLDEVN <> CONSLDEV.DLDEVN THEN                       03144000
       IF DITP.DSTATE=WRITING THEN                                      03146000
       BEGIN                                                            03148000
          IF WA0(TEMP+WRTDATAINSTR+1)<>0 THEN ADDR:=XMITON              03152000
             ELSE                                                       03154000
         BEGIN                                                          03156000
           DITP.ENQACKWAIT:=0;                                 <<03742>>03158000
           STOPTIMEOUT(HP2640TO,DITP);                         <<03742>>03160000
          WA0(TEMP+WRTDATAINSTR+5):=[8/1,1/1,7/1];                      03162000
          WA0(X:=X+1):=1; <<TBEMPTY INTERRUPT CODE>>                    03164000
          ADDR:=WRTDATAINSTR+5;                                         03166000
         END;                                                           03168000
                                                                        03170000
          TOS:=DRT;                                                     03172000
          TOS:=TEMP+SYSDB+ADDR;                                         03174000
          STARTSIO;                                                     03176000
       END;                                                             03178000
 END;                                                                   03180000
                                                                        03182000
 ENABLE;                                                                03184000
                                                                        03186000
END;                                                                    03188000
PROCEDURE TERMIOM(DITP,FLAGS);                                          03190000
  VALUE   FLAGS;  INTEGER FLAGS;                                        03192000
  INTEGER ARRAY DITP;                                                   03194000
  OPTION UNCALLABLE, PRIVILEGED;                                        03196000
  <<                                                                    03198000
    TERMINAL MONITOR.  THIS PROCEDURE HANDLES INITIATION, COMPLETION    03200000
    AND OTHER FUNCTIONS ASSOCIATED WITH I/O TO TERMINALS CONNECTED      03202000
    TO THE ASYNCHRONOUS DATA COMMUMICATION CHANNEL ( ADCC ).            03204000
  >>                                                                    03206000
  BEGIN                                                                 03208000
                                                                        03210000
    INTEGER ARRAY  Q0(  *  ) = Q + 0;                                   03212000
    INTEGER ARRAY  Q1( 0:30) = Q;  << TEMP WRITE DATA BUFFER >>         03214000
    BYTE    ARRAY BQ1(  *  ) = Q1;                                      03216000
                                                                        03218000
    INTEGER                                                             03220000
      BCNT,             << BYTE COUNT OF DATA TO BE TRANSFERED >>       03222000
      WCNT,             << WORD TRANSFER COUNT FOR READS >>             03224000
      SCNT,             << SPACE COUNT OR END OF SBUF COUNT >>          03226000
      TEMP,             << TEMP AND I ARE USED A PAIR IN SPOOLING >>    03228000
      I,                << GENERAL INDEX VARIABLE >>                    03230000
      IFLAG,            << FOR SETTING FLAG >>                          03232000
      RQSTATE,          << CURRENT REQUEST STATE >>                     03234000
      FUNCTION,         << FUNCTION CODE FOR CURRENT REQUEST >>         03236000
      TADDR,            << OFFSET IN DST OF TARGET BUFFER >>            03238000
      STACKDST,         << DST NUMBER OF CURRENT STACK >>               03240000
      TBASE;            << TBUF PNTR OR OFFSET TO ARRAY Q1 >>           03242000
                                                                        03244000
    DOUBLE                                                              03246000
      Q1ADDR  = STACKDST, << DSTN AND OFFSET OF ARRAY Q1 >>             03248000
      SIOADDR = TBASE +1; << DSTN & OFFSET OF CARRIAGE CONTROL CHARS >> 03250000
                                                                        03252000
    INTEGER                                                             03254000
      LDEV    = SIOADDR + 2,                                            03256000
      SIOAREA=SIOADDR+1,   <<ADDRESS OF SIO DATA/PROGRAM AREA>>         03258000
      TCNT    = IFLAG,     << WORDS REMAINING TO FILL TBUF >>           03260000
      NPL     = I;         << NEW PREMPT LEVEL >>                       03262000
                                                                        03264000
    INTEGER                                                             03266000
      L1   = LDEV+1,                                                    03268000
      M1   = L1+1,                                                      03270000
      N1   = M1+1,                                                      03272000
      O1   = N1+1,                                                      03274000
      J1   = O1+1,                                                      03276000
      K1   = J1+1;                                                      03278000
    LOGICAL                                                             03280000
      FLAG   = IFLAG,                                                   03282000
      LFLAGS = FLAGS,                                                   03284000
      BADREQST = O1,                                                    03286000
      CONTINUE = M1,                                                    03288000
      CHECKSERV= L1,                                                    03290000
      SENTLF   = M1,                                                    03292000
      STOP     = M1;                                                    03294000
                                                                        03296000
    INTEGER POINTER                                                     03298000
      THISP  = BCNT,    << POINTER TO IOQ TO BE EXAMINED >>             03300000
      LASTP  = BCNT+1,  << POINTER TO PREVIOUS IOQ >>                   03302000
      STHISP = SCNT,  << POINTER TO IOQ WITH HIGHEST PREMPT LEVEL >>    03304000
      SLASTP =SCNT+1,<<PNTR TO IOQ PRECEDING MOST PREMPTIVE>>           03306000
      SAVEP  = N1,                                                      03308000
      SIOAREAP =SIOADDR+1;                                              03310000
    INTEGER ARRAY                                                       03312000
      IOQP(@)    = K1   + 1,                                            03314000
      QMISCP(@)  = IOQP + 1,                                            03316000
      QWBCTP(@)  = QMISCP + 1,                                          03318000
      QPAR1P(@)  = QWBCTP + 1,                                          03320000
      DRQSTP(@)  = QPAR1P + 1,                                          03322000
      DTYPEP(@)  = DRQSTP + 1,                                          03324000
      DMODEMP(@) = DTYPEP + 1,                                          03326000
      DSPEEDP(@) = DMODEMP + 1,                                         03328000
      DCNTRLP(@) = DSPEEDP + 1,                                         03330000
      DRBCTP(@)  = DCNTRLP + 1,                                         03332000
      DBCNTP(@)  = DRBCTP  + 1,                                         03334000
      DXCNTP(@)  = DBCNTP  + 1,                                         03336000
      DLASTP(@)  = DXCNTP  + 1,                                         03338000
      DTANKBP(@) = DLASTP + 1;                                          03340000
                                                                        03342000
    LOGICAL POINTER                                                     03344000
      DMODEMPL = DMODEMP,                                               03346000
      DSPEEDPL = DSPEEDP,                                               03348000
      DTYPEPL  = DTYPEP,                                                03350000
      DITPL    = DITP,                                                  03352000
                                                                        03354000
                                                                        03356000
                                                                        03358000
                                                                        03360000
      DLASTPL  = DLASTP,                                                03362000
      QMISCPL  = QMISCP,                                                03364000
      IOQPL    = IOQP,                                                  03366000
      DCNTRLPL = DCNTRLP;                                               03368000
    DOUBLE POINTER                                                      03370000
      DITPD   = DITP,                                                   03372000
      IOQPD   = IOQP;                                                   03374000
                                                                        03376000
    DOUBLE                                                              03378000
      DS6     = S - 6,  << TO REFERENCE BUFADR IN MOVEDATA >>           03380000
      TEMPD   = TEMP,                                                   03382000
      RQSFUNC = RQSTATE,<< FOR SETTING RQSTATE AND FUNCTION >>          03384000
      QPQM    = IOQP,   << FOR SETTING IOQP AND QMISCP >>               03386000
      QCQP1   = QWBCTP, << FOR SETTING QWBCTP AND QPAR1P >>             03388000
      THESEPS = THISP,  << FOR SAVING POINTERS >>                       03390000
      SAVEPS  = STHISP;                                                 03392000
                                                               <<01464>>03394000
ARRAY ESCHP2631(0:3)=PB :=  <<ESC SEQ'S FOR VFC & SKIP PERF>>  <<01464>>03396000
  %15446,%66060,%00000,%53000; << ESC,&,l,0,NULL,NULL,V >>     <<01464>>03398000
                                                               <<01464>>03400000
  BYTE ARRAY B'RESET31B(0:53) = PB :=                          <<04869>>03402000
   ESC,"Z",            << TURN OFF DISPLAY FUNCTIONS >>        <<04869>>03404000
   ESC,"&d@",          << TURN OFF UNDERLINE         >>        <<04869>>03406000
   ESC,"&k1E",         << ENABLE PERMANENT UNDERLINE >>        <<04869>>03408000
   ESC,")A",           << SECONDARY CHARS IN ROM 1   >>        <<04869>>03410000
   ESC,"(@",           << PRIMARY CHARS IN ROM 0     >>        <<04869>>03412000
   ESC,"&k1F",         << ENABLE PERMANENT SI/SO     >>        <<04869>>03414000
   ESC,"&s1I",         << PRINT ROM 0 IF NO ROM 1    >>        <<04869>>03416000
   ESC,"&k0S",         << SELECT 10.0 CPI            >>        <<04869>>03418000
   ESC,"&l1L",         << ENABLE PERFORATION SKIP    >>        <<04869>>03420000
   ESC,"&l3M",         << CLEAR ALL VERTICAL TABS    >>        <<04869>>03422000
   ESC,"&l0N",         << DISABLE LF TO VERT TAB     >>        <<04869>>03424000
   ESC,"3",            << CLEAR ALL HORIZONTAL TABS  >>        <<04869>>03426000
   ESC,"&s0C";         << ENABLE END-OF-LINE WRAP    >>        <<04869>>03428000
  ARRAY RESET31B(*) = B'RESET31B;                              <<01464>>03430000
                                                                        03432000
    INTEGER ARRAY READSTATUS(0:7) = PB :=                      <<01822>>03434000
      GOODIO,SPECIALEND,BREAKEND,LOSTDSTAT,LOSTCSTAT,BADPARITY,<<01822>>03436000
      TIMEDOUT,BLOCKTIMED;                                     <<01822>>03438000
                                                                        03440000
    INTEGER ARRAY SPEED(0:MAXSPEED) = PB :=                             03442000
    960,960,480,240,120,60,30,15,10;                                    03444000
    INTEGER ARRAY SPDCODE(0:MAXSPEED)=PB:=                              03446000
    %10,%10,%11,%7,%13,%6,%15,%16,%17;                                  03448000
    ARRAY FFSYNCS(0:MAXSPEED) = PB :=                                   03450000
      0,0,0,0,255,240,120,60,30;                                        03452000
    INTEGER ARRAY SPECLCHAR(0:MAXSPECL) = PB :=                         03454000
      0, 1, 6, %10, %15, %21, %22, %23, %30, %31, %33;                  03456000
      <<BRK,C'A,ACK,C'H,CR,XON,DC2,XOFF,C'X,C'Y,ESC>>                   03458000
                                                                        03460000
SUBROUTINE WRTSPOOLBUF(SBUFP);                                          03462000
VALUE SBUFP;      INTEGER SBUFP;                                        03464000
BEGIN                                                                   03466000
   TOS:=ATTACHIO(SYSDISK,0,8,SBUFP-@SBUF,WRITING,128,                   03468000
                 DITP(DTAIL),DITP(DPNTR),%11);                          03470000
   DEL;                                                                 03472000
   IF TOS.(13:3)<>GOODIO THEN SETREADERROR(IOQP,LOSTDATA);              03474000
   DITPD(DTBF2):=DITPD(DTBF2) + 1D;                                     03476000
END;                                                                    03478000
SUBROUTINE HALTSIO;                                            <<04244>>03480000
   BEGIN                                                       <<04244>>03482000
   TOS := WA0(DITP(DILTP) + ICNTRL).DRTNUMBER;                 <<04244>>03484000
   STOPSIO;     <<HALT SIO PROGRAM>>                           <<04244>>03486000
   WHILE <> DO     <<SIO PROG CAN'T BE HALTED IMMEDIATELY>>    <<04244>>03488000
     BEGIN                                                     <<04244>>03490000
     IF < THEN SUDDENDEATH(210);                               <<04244>>03492000
     DCNTRLP.HIOPWAIT := 1;                                    <<04244>>03494000
     STOPSIO;                                                  <<04244>>03496000
     END;                                                      <<04244>>03498000
   MOVE WA0(DITP(DILTP)) := 4(0);   <<CLEAR CPVA>>             <<04244>>03500000
   END;                                                        <<04244>>03502000
                                                                        03504000
                                                                        03506000
                                                                        03508000
SUBROUTINE RETURNBUFS;                                                  03510000
  <<                                                                    03512000
     THIS SUBROUTINE RETURNS ANY TBUFS OUTSTANDING AS INDICATED         03514000
     BY NON ZERO TBUF POINTERS IN THE DIT. IF SPOOLING SET THEN         03516000
     THE POINTER AREA IS JUST CLEARED.                                  03518000
  >>                                                                    03520000
  BEGIN                                                                 03522000
    <<*******************CHECKTQUEUE***************************>>       03524000
                                                                        03526000
    DISABLE;                                                            03528000
    TEMP:=DITP(DNXTB);     DITP(X):=0;                                  03530000
    IF <> THEN BEGIN       TOS:=TEMP;  RETURNTBUF(*);      END;         03532000
                                                                        03534000
    DITP(DCNT) := DBCNTP := 0;                                          03536000
    DITP(DPNTR) := DTANKBP := 0 ;                                       03538000
    DITP(DSAVE).BLOCKRD:=0;                                             03540000
    DITP.ENQACKWAIT := 0;                                               03542000
    DITP.SPOOLING := 0;                                                 03544000
    ENABLE;                                                             03546000
                                                                        03548000
    IF = THEN                    <<NOT SPOOLING, RETURN TBUFS >>        03550000
   BEGIN                                                                03552000
    X := DITP(DHEAD);  << DBCNT#0, TBUFS TO RETURN >>                   03554000
    WHILE <> DO  << RETURN TBUFS >>                                     03556000
      BEGIN                                                             03558000
        TOS := X;   << GET POINTER FOR RETURNING >>                     03560000
        X:= WA0(X);       <<GET LINK TO NEXT>>                          03562000
        RETURNTBUF( * );                                                03564000
      END;                                                              03566000
   END;                                                                 03568000
    DITP(DHEAD):=0;                                                     03570000
    TOS:=DITP(DBLKTAIL);                                                03572000
    DITP(X):=0;                                                         03574000
    IF <> THEN RETURNTBUF(*)                                            03576000
          ELSE DEL;                                                     03578000
  END;  << RETURN BUFS >>                                               03580000
                                                                        03582000
LOGICAL SUBROUTINE UART;                                       <<02032>>03584000
   BEGIN                                                       <<02032>>03586000
   IF DITPL.PTYCHK AND NOT DITPL(DLAST).EIGHTBITS THEN         <<02862>>03588000
      BEGIN                                                    <<02862>>03590000
      UART := %10003;                                          <<02862>>03592000
      IF NOT DCNTRLPL.ODDPTY THEN                              <<02862>>03594000
         UART.EPE := 1;                                        <<02862>>03596000
      END                                                      <<02862>>03598000
   ELSE                                                        <<02862>>03600000
      UART := %14403;                                          <<02862>>03602000
   IF DSPEEDP.OUTSPEED = %17 THEN UART.SBS := 1;               <<02032>>03604000
   END;                                                        <<02032>>03606000
                                                                        03608000
                                                                        03610000
SUBROUTINE STOPSPDSEN ;                                                 03612000
BEGIN                                                                   03614000
   DISABLE;                                                             03616000
   IF DCNTRLPL.SPDSIO THEN                                              03618000
   BEGIN         <<SPEED SENSE OR IDLE WAIT SIO PROG ACTIVE>>           03620000
      DSPEEDP.RESTSPD:=1;  <<FLAG TO RESTART IF NECESSARY>>             03622000
      HALTSIO;  <<HALT SIO PROG>>                              <<04244>>03626000
      DCNTRLP.SPDSIO:=0;                                                03628000
   END;                                                                 03630000
                                                               <<01824>>03632000
END;                                                                    03634000
                                                                        03636000
                                                                        03638000
                                                                        03640000
                                                                        03642000
                                                                        03644000
SUBROUTINE CLEANUP;                                                     03646000
  <<                                                                    03648000
    THIS ROUTIME CLEANS UP TAPEMODE, NO CONTROL X ECHO, TIMEOUTS,       03650000
    SPECIAL EOR AND SUB SYSTEM BREAK AND PARITY CHECK FLAGS.            03652000
  >>                                                                    03654000
  BEGIN                                                                 03656000
    IF NOT HP2631B THEN BEGIN                                  <<04869>>03658000
   DISABLE;                                                    <<04242>>03660000
    DSPEEDP.TAPEMODE := 0;                                              03662000
    DITP(DLDEV).NO'CX'ECHO := 0;                                        03664000
    DITP(DRTMAX) := 0;   << DISABLE READ TIMEOUTS >>                    03666000
    DITP.PTYCHK := DCNTRLP.PTYON;                              <<02046>>03668000
   ENABLE;                                                     <<04242>>03670000
    BEGIN                                                               03672000
       TEMP:=WA0(DITP(DILTP)+ISIOP);                                    03674000
                                                               <<02046>>03676000
       WA0(TEMP+4) := UART;                                    <<02046>>03680000
       J1:=0;                                                           03682000
       IF DITP(DSTOP)<>0 THEN                                           03684000
       BEGIN                                                            03686000
          TOS:=DITP(X).(0:8);                                           03688000
          J1:=2;                                                        03690000
          X:=MAXSPECL;                                                  03692000
          WHILE  >= AND S0<>SPECLCHAR(X)  DO   X:=X-1;                  03694000
          IF >= THEN     <<CHAR IS AMONG THE ADCC SPECL CHAR LIST>>     03696000
          BEGIN          <<DO NOT CLEAR>>                               03698000
             J1:=J1-1;   <<1 LESS BYTE TO CLEAR>>                       03700000
             DITP(DSTOP).(0:8):=0;                                      03702000
          END;                                                          03704000
          DEL;                                                          03706000
          TOS:=DITP(DSTOP).(8:8);                                       03708000
          X:=MAXSPECL;                                                  03710000
          WHILE  >= AND S0<>SPECLCHAR(X)  DO   X:=X-1;                  03712000
          IF >= THEN     <<AMONG ADCC SPECL CHAR LIST,DON'T CLEAR>>     03714000
          BEGIN                                                         03716000
             J1:=J1-1;                                                  03718000
             DITP(DSTOP).(8:8):=0;                                      03720000
          END;                                                          03722000
          DEL;                                                          03724000
          TOS:=DITP(DSTOP);                                             03726000
          DITP(X):=0;                                                   03728000
          X:=J1;                                                        03730000
          IF <> THEN                                                    03732000
          BEGIN          <<SOMETHING TO CLEAR>>                         03734000
             IF X=1 THEN                                                03736000
                IF S0.(0:8)=0 THEN TOS:=TOS&LSL(8);                     03738000
             WA0(TEMP+13):=TOS;  <<PUT CHARS INTO BUFFER>>              03740000
             WA0(TEMP+SYNSTRT):=[8/4,8/4]; <<CLR SPECL CHAR INSTR>>     03742000
             WA0(X:=X+1):=J1;                                           03744000
             WA0(X:=X+1):=1;                                            03746000
             WA0(X:=X+1):=[1/1,1/0,1/1,13/0];  <<START FROM LEFT>>      03748000
             WA0(X:=X+1):=SYSDB+TEMP+13;                                03750000
             K1:=X+1;                                                   03752000
                                                               <<02046>>03754000
             BEGIN    WA0(K1):=[8/0,8/0]; <<JMP FROM 64 TO 171>>        03756000
                      WA0(X:=X+1):=107;   <<RESET WL & DISABLE PTY>>    03758000
             END                                                        03760000
          END                                                           03764000
             ELSE                                                       03766000
          DEL;        <<NOTHING TO CLEAR,CLEAN UP STACK>>               03768000
       END;                                                             03770000
       X:=J1;                                                           03772000
                                                               <<02046>>03774000
      BEGIN                                                             03776000
          DITP(DSIOPC):=SYSDB+TEMP+(IF J1<>0 THEN SYNSTRT      <<02861>>03778000
                                             ELSE MODSIOPTY);           03780000
          STOPSPDSEN;                                                   03782000
          DITP.DSTATE:=MODEMSIO;                                        03784000
          TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                       03786000
          TOS:=DITP(DSIOPC);                                            03788000
          STARTSIO;                                                     03790000
          IF < THEN BEGIN                                      <<00479>>03792000
                    TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;    <<00479>>03794000
                    ABS(TOS*4+3):=0;                           <<00479>>03796000
                    END;                                                03798000
      END;                                                              03800000
    END;                                                                03802000
    DISABLE;                                                            03804000
                                                               <<02046>>03806000
    DTYPEP.TIMEREAD := 0;                                               03808000
                                                                        03810000
    TOS := LPDTD(LDEV);                                                 03812000
    TOS.(SSBREAK':1) := 0;                                              03814000
    LPDTD( X ) := TOS;                                                  03816000
    TOS := DITP(DBREAK);                                                03818000
    IF <> THEN  << RETURN BREAK SAVE IOQ AND TBUFS >>                   03820000
      BEGIN                                                             03822000
        DITP(DBREAK) := 0;   << CLEAR BREAK SAVE >>                     03824000
        X := PS0( 7 );    << GET HEAD POINTER >>                        03826000
        WHILE <> DO   << RETURN ANY SAVED TBUFS >>                      03828000
          BEGIN                                                         03830000
            TOS := X;   << GET POINTER FOR RETURNTBUF >>                03832000
            X:= WA0(X);   <<GET LINK TO NEXT TBUF>>                     03834000
            RETURNTBUF( * );                                            03836000
          END;                                                          03838000
        RETURNIOQ( S0 );                                                03840000
      END;                                                              03842000
                                                                        03844000
    DEL;  << DELETE DBREAK WORD >>                                      03846000
    END;                                                       <<02865>>03848000
    RETURNBUFS;                                                         03850000
  END;    << CLEAN UP >>                                                03852000
                                                                        03854000
                                                                        03856000
                                                                        03858000
                                                                        03860000
                                                                        03862000
SUBROUTINE SETSTATUS(RETURNSTAT);                                       03864000
VALUE RETURNSTAT;    INTEGER RETURNSTAT;                                03866000
BEGIN                                                                   03868000
   DISABLE;                                                             03870000
   IOQP(QSTAT).IOSTAT:=RETURNSTAT;  <<PUT I/O COMPLETION STATUS IN IOQ>>03872000
   IOQP.COMPLETED:=1;                                                   03874000
   TEMP:=IOQP(QSTAT)&PCBS;      <<EXTRACT PCB NUMBER>>                  03876000
   DITP(DIOQP):=IOQP(QLINK);    <<DONE WITH CURRENT RQST,SERVICE NEXT>> 03878000
   ENABLE;                                                              03880000
   IF LOSTDATA<= IOQP.READERRORS <=PTYERROR THEN                        03882000
      LOGERROR(DITP,IOQP,RDCOUNTER+WRTCOUNTER);                         03884000
   IF IOQPL.IOWAKE THEN                                                 03886000
      AWAKE(TEMP*PCBSIZE,IOWAIT&LSL(IOQP.BLOCKED),NOWAIT);              03888000
   X:=TEMP;                     <<TEST PCB NUMBER>>                     03890000
   IF = THEN                                                            03892000
   BEGIN           <<NO PCB I/O,RETURN IOQ AND ANY SYSBUFS>>            03894000
      X:=IOQP(QADDR);           <<CHECK FOR ANY SYSBUF TO RETURN>>      03896000
      IF <> AND IOQPL.SYSBUFR THEN RETURNSYSBUF(X);            <<04237>>03898000
      RETURNIOQ(@IOQP);                                                 03900000
   END;                                                                 03902000
   CHECKSERV:=TRUE;             <<GO SERVICE NEXT REQUEST>>             03904000
END;               <<-----------END OF SETSTATUS----------->>           03906000
                                                                        03908000
                                                                        03910000
                                                                        03912000
                                                                        03914000
SUBROUTINE STARTWRITE;                                                  03916000
BEGIN                                                                   03918000
    DISABLE;                                                   <<01464>>03920000
    IF HP2631B THEN                                            <<04869>>03922000
      BEGIN                                                    <<01464>>03924000
      IF DBCNTP=0 THEN                                         <<01464>>03926000
        BEGIN  << 0 LENGTH WRITE AND NO CONTROL CHARS >>       <<01464>>03928000
        SETSTATUS(GOODIO);                                     <<01464>>03930000
        ENABLE;                                                <<01464>>03932000
        RETURN;                                                <<01464>>03934000
        END;                                                   <<01464>>03936000
      IF DITPL(DTYPE).WAITXON OR STATREQ THEN                  <<01464>>03938000
        BEGIN  <<WAIT FOR XON OR STATUS TO START WRITE, TIP>>  <<01464>>03940000
        DITP.DSTATE := WRITING;                                <<01464>>03942000
        ENABLE;                                                <<01464>>03944000
        RETURN;                                                <<01464>>03946000
        END;                                                   <<01464>>03948000
      END;                                                     <<01464>>03950000
                                                               <<01464>>03952000
   STOPSPDSEN;                                                          03954000
      DISABLE;                                                 <<01292>>03956000
   X:=DBCNTP;        <<CHECK PENDING WRITE BYTE COUNT>>                 03958000
   IF <> AND (DITP.DSTATE=NULL OR DITP(DCNT)=-2) THEN                   03960000
   BEGIN                                                                03962000
      <<***************** BUG CATCHER *********************>>           03964000
      TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                           03966000
      X:=ABS(TOS*4+3).IDLESIO;                                          03968000
      IF <> THEN SUDDENDEATH(209);                             <<01539>>03970000
      <<***************** CATCH A FALLING STAR & PUT IT IN YOUR         03972000
        ***************** POCKET, NEVER LET IT FADE AWAY **********>>   03974000
      TEMP:=WA0(DITP(DILTP)+ISIOP);   <<SIO PROG STARTING ADDRESS>>     03976000
      DITP(DSAVE).DELACK:=0;                                            03978000
      IF <> THEN BEGIN           <<IGNORE ACK BEFORE SENDING DATA>>     03980000
                    ENABLE;                                             03982000
                    DELAY(500D);                                        03984000
                 END;                                                   03986000
      IF DITP(DCNT)=-2 THEN                                             03988000
      BEGIN        <<RESTART PREVIOUSLY STOPPED WRITE>>                 03990000
         DITP(DCNT):=DBCNTP;   <<WRT OUT  DATA JUST TANKED>>            03992000
         ENABLE;                                                        03994000
         X:=TEMP+WRTDATAINSTR; <<ADDR OF WRT DATA CHANNEL INSTR>>       03996000
         WA0(X):=[8/4,8/0];                                             03998000
         WA0(X:=X+1):=DBCNTP;                                           04000000
         WA0(X:=X+1):=1;                                                04002000
         J1:=X+1;                                                       04004000
         IF DITPL(DPNTR) THEN                                           04006000
            WA0(J1):=[1/1,1/1,1/1,13/0]   <<FROM RIGHT BYTE>>           04008000
            ELSE                                                        04010000
            WA0(J1):=[1/1,1/0,1/1,13/0];  <<FROM LEFT BYTE>>            04012000
         WA0(J1+1):=SYSDB+DITP(DHEAD)+2+DITP(DPNTR)&LSR(1);             04014000
         IF LOGICAL(WA0(DITP(DHEAD)+1).WRTENQ)  THEN                    04016000
         BEGIN        <<ENQ WAS JUST ADDED TO TBUF>>                    04018000
            WA0(X).WRTENQ:=0;                                           04020000
            WA0(J1+2):=[8/0,8/0];  <<CHANNEL INSTR FOR REL JMP>>        04022000
            WA0(X:=X+1):=30;  <<JMP FROM 41 TO 71 TO DISABLE XMIT SRQ>> 04024000
            X:=TEMP+RDDATAINSTR;                                        04026000
            WA0(X):=[8/3,8/0];   <<CHANNEL INSTR FOR READ DATA>>        04028000
            WA0(X:=X+1):=1;                                             04030000
            WA0(X:=X+1):=[8/%361,8/1]; <<TERMINATION JMP OF -15>>       04032000
                         <<TERMINATION JMP BACK TO WAIT SRQ>>           04034000
            WA0(X:=X+1):=[1/1,1/1,4/1,10/0];  <<RD INTO RIGHT BYTE>>    04036000
            WA0(X:=X+1):=TEMP+10+SYSDB;   << DATA DUMP ADDRESS>>        04038000
            DITP.ENQACKWAIT:=1;   <<SET FLAG FOR ACK WAIT>>             04040000
            STARTTIMEOUT(HP2640TO,DITP);   <<TIMEOUT FOR 10 SECONDS>>   04042000
         END                                                            04044000
            ELSE                                                        04046000
         BEGIN                                                          04048000
            WA0(J1+2):=[8/1,1/1,7/1];   <<INTERRUPT/HALT,TBUF EMPTY>>   04050000
            WA0(X:=X+1):=1;                                             04052000
            <<INTERRUPT/HALT W/CODE TO CPVA1 AFTER TBUF EMPTIED>>       04054000
         END;                                                           04056000
         TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                        04058000
         X:=ABS(S0*4+3).IDLESIO;                                        04060000
         IF <> THEN SUDDENDEATH(209);                          <<01539>>04062000
         TOS:=SYSDB+TEMP+XMITON;                               <<00496>>04064000
            STARTSIO;                                                   04066000
         IF < THEN BEGIN                                       <<00479>>04068000
                   TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;     <<00479>>04070000
                   ABS(TOS*4+3):=0;                            <<00479>>04072000
                   END;                                        <<00479>>04074000
      END                                                               04076000
         ELSE                                                           04078000
      BEGIN                                                             04080000
         ENABLE;                                                        04082000
         DITP(DPNTR):=0;                                                04084000
         IF LOGICAL( WA0(DITP(DHEAD)+1).WRTENQ ) THEN                   04086000
         BEGIN                                                          04088000
            WA0(X).WRTENQ:=0;                                           04090000
            J1:=WA0(X).ENQOFFSET;                                       04092000
            DITP(DCNT):=J1+1;                                           04094000
            WA0(TEMP+WRTDATAINSTR+5):=[8/0,8/0];                        04096000
            WA0(X:=X+1):=30;  <<JMP FROM 41 TO 71:READ ACK>>            04098000
            WA0(TEMP+RDDATAINSTR):=[8/3,8/0];  <<READ CHANNEL INSTR>>   04100000
            WA0(X:=X+1):=1;                                             04102000
            WA0(X:=X+1):=[8/%361,8/1];  <<-15 BACK TO WAIT SRQ>>        04104000
            WA0(X:=X+1):=[1/1,1/1,4/1,10/0];  <<TO RIGHT BYTE>>         04106000
            WA0(X:=X+1):=SYSDB+TEMP+10; <<BOTTOMLESS DATA DUMP>>        04108000
            DITP.ENQACKWAIT:=1;                                         04110000
            STARTTIMEOUT(HP2640TO,DITP);                                04112000
         END                                                            04114000
            ELSE                                                        04116000
        BEGIN                                                           04118000
         WA0(TEMP+WRTDATAINSTR+5):=[8/1,1/1,7/1];                       04120000
         WA0(X:=X+1):=1;    <<INTERRUPT/HALT,TBUF EMPTY>>               04122000
         DITP(DCNT):=(IF DBCNTP<=TBMAXB THEN DBCNTP ELSE TBMAXB);       04124000
        END;                                                            04126000
                                                                        04128000
         X:=TEMP+WRTDATAINSTR;                                          04130000
         WA0(X):=[8/4,8/0];     <<WRT DATA CHANNEL INSTR>>              04132000
         J1:=X+1;                                                       04134000
         WA0(J1):=DITP(DCNT);                                           04136000
         WA0(X:=X+1):=1;                                                04138000
         WA0(X:=X+1):=[1/1,1/0,1/1,13/0];  <<START FROM LEFT BYTE>>     04140000
         J1:=X+1;                                                       04142000
         WA0(J1):=SYSDB+DITP(DHEAD)+2; <<TBUF STARTING ADDRESS>>        04144000
         X:=TEMP+RDDATAINSTR+6;                                         04146000
         WA0(X):=WAITACK;     <<PUT IN CPVA2 INTERRUPT CODE>>           04148000
         TOS:=DITP;                                                     04150000
         TOS.DSTATE:=WRITING;                                           04152000
         TOS.NEWLINE:=0;     <<START OF NEW WRITE,RESET FLAG>>          04154000
         DITP:=TOS;                                                     04156000
         TOS:=DMODEMP&CSL(M202);                                        04158000
         IF TOS AND DMODEMP.CBSB<>3 THEN                                04160000
         BEGIN        <<202 NOT IN WRITE STATE>>                        04162000
            STARTTIMEOUT(TURNTO,DITP);                                  04164000
            DISABLE;                                                    04166000
            MODCONTROL(WRITING,DITP);                                   04168000
            DITP(DSAVE).TURNTOWRITE:=1;                                 04170000
            DCNTRLP.NXTDSTATE:=WRITING;                                 04172000
            DITP.DSTATE:=TURN202;                                       04174000
            DITP(DSIOPC):=SYSDB+TEMP+XMITON;                            04176000
            ENABLE;                                                     04178000
         END                                                            04180000
            ELSE                                                        04182000
         BEGIN                                                          04184000
         TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                        04186000
         X:=ABS(S0*4+3).IDLESIO;                                        04188000
         IF <> THEN SUDDENDEATH(209);                          <<01539>>04190000
         TOS:=SYSDB+TEMP+(IF DMODEMPL&CSL(M202) THEN XMITON             04192000
                                                ELSE WRTBASE);          04194000
         STARTSIO;                                                      04196000
         IF < THEN BEGIN                                       <<00479>>04198000
                   TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;     <<00479>>04200000
                   ABS(TOS*4+3):=0;                            <<00479>>04202000
                   END;                                        <<00479>>04204000
         END;                                                           04206000
      END;                                                              04208000
   END                                                         <<00485>>04210000
      ELSE                                                              04212000
   IF DBCNTP=0 AND DITP.DSTATE=NULL THEN IDLEWAIT(DITP);       <<00485>>04214000
   <<NO PHYSICAL I/O,RESTART IDLE PROG TO LISTEN TO KEYBOARD>> <<00485>>04216000
END;     <<-----------------END OF STARTWRITE---------------->>         04218000
                                                                        04220000
                                                                        04222000
                                                                        04224000
                                                                        04226000
                                                                        04228000
                                                                        04230000
                                                                        04232000
                                                                        04234000
                                                                        04236000
SUBROUTINE ABORTIOQ ;                                                   04238000
BEGIN                                                                   04240000
   IF DSAVEPL.NOTLOGON THEN                                    <<02861>>04242000
      BEGIN                                                    <<02861>>04244000
      DSAVEPL.NOTLOGON := 0;                                   <<02861>>04246000
      STOPTIMEOUT(LOGONTO, DITP);                              <<02861>>04248000
      END;                                                     <<02861>>04250000
   IF RQSTATE=READING THEN                                              04252000
   BEGIN      <<READING AND ABORT REQUESTED>>                           04254000
      TOS:=QMISCP;                                                      04256000
      TOS.READSTOP:=ABORTSTOP;   <<RECORD WHY READ WAS STOPPED>>        04258000
      TOS.NOSTOP:=1;             <<SUPPRESS NEW PREMPT,ABORTS>>         04260000
      QMISCP:=TOS;                                                      04262000
      HALTSIO;  <<HALT SIO PROG>>                              <<04244>>04266000
         IDLEWAIT(DITP);         <<DON'T LOSE ANYTHING >>      <<02063>>04268000
         ENABLE;                                                        04270000
         DTYPEP.TIMING:=0;                                              04272000
         IF <> THEN                                                     04274000
         BEGIN                                                          04276000
            TOS:=TIMER-DITPD(DRTIMED);                                  04278000
            TOS:=10;             <<DIVIDE MSEC BY 10 TO GET 100THS>>    04280000
            ASMB(LDIV,DEL);      <<RETURN TIME IN HUNDREDTHS OF SEC>>   04282000
            IF OVERFLOW THEN                                            04284000
            BEGIN                                                       04286000
               DEL;                                                     04288000
               TOS:=-1;                                                 04290000
            END;                                                        04292000
            DITP(DRTIME):=TOS;                                          04294000
         END;                                                           04296000
         IF DITP(DTRLX).READTRLX<>0 THEN                                04298000
         BEGIN    <<CHECK ENTRY FOR LOGON/RD TIME LIMITS>>              04300000
            DITP(DRTMAX):=0;     <<CLR USER SPECIFIED TIME LIMIT>>      04302000
            STOPTIMEOUT(READTIMEOUT,DITP);                              04304000
         END;                                                           04306000
         DITP.PAIR:=1;                                                  04308000
         IF = OR DTYPEP.PAIRCODE<>XOFFPAIR THEN                         04310000
            DTYPEP.PAIRCODE:=NOTREADING;                                04312000
         DMODEMP.PRIMED:=0;                                             04314000
         DITP.DSTATE:=NULL;                                             04316000
         RETURNBUFS;             <<RETURN OUTSTANDING TBUFS>>           04318000
         QWBCTP:=0;                                                     04320000
         SETSTATUS(ABORTED);                                            04322000
                                                               <<04244>>04324000
   END                                                                  04326000
      ELSE                                                              04328000
   BEGIN                                                                04330000
      TOS:=DITP;                                                        04332000
      IF S0.DSTATE=WRITING THEN                                         04334000
      BEGIN                                                             04336000
         IF STATREQ THEN GOTO SKIPSTOP;<<KEEP STATUS REQUEST>> <<02063>>04338000
         HALTSIO;  <<HALT SIO PROG>>                           <<04244>>04342000
            IDLEWAIT(DITP);      <<DON'T LOSE ANYTHING >>      <<02063>>04344000
SKIPSTOP:                                                      <<02063>>04346000
                                                               <<04241>>04348000
            TOS.DSTATE:=NULL;                                           04350000
            DITP:=TOS;                                                  04352000
            ENABLE;                                            <<04241>>04354000
            RETURNBUFS;                                                 04356000
            QWBCTP:=0;                                                  04358000
            SETSTATUS(ABORTED);                                         04360000
                                                               <<04244>>04362000
      END                                                               04364000
         ELSE                                                           04366000
      BEGIN                                                             04368000
         TOS.ENQACKWAIT:=0;                                             04370000
         TOS.DSTATE:=NULL;                                              04372000
         DITP:=TOS;                                                     04374000
         RETURNBUFS;                                                    04376000
         QWBCTP:=0;                                                     04378000
         SETSTATUS(ABORTED);                                            04380000
      END;                                                              04382000
   END;                                                                 04384000
END;     <<-----------------END OF ABORTIOQ----------------->>          04386000
SUBROUTINE TANKDATA(BUFADR,COUNT,OFFSET);                               04388000
  VALUE BUFADR, COUNT, OFFSET;   INTEGER COUNT, OFFSET;   DOUBLE BUFADR;04390000
  <<                                                                    04392000
    THIS SUBROUTINE MOVES DATA INTO THE TERMINAL BUFFERS. IT CHECKS     04394000
    FOR ADDING AN ENQ AFTER 80 CHARACTERS ON THE HP2640.                04396000
                                                                        04398000
    RETURN CC - CCE = DATA TRANSFER COMPLETED                           04400000
                CCG = TOO MUCH DATA TO TANK NOW OR NO TBUF AVAILABLE    04402000
                                                                        04404000
     BUFADR - DST NUMBER AND OFFSET OF DATA TO BE WRITTEN               04406000
     COUNT  - NUMBER OF BYTES TO BE TANKED.                             04408000
     OFFSET - OFFSET IN BYTES FROM BUFADR TO START FROM                 04410000
  >>                                                                    04412000
  BEGIN                                                                 04414000
    X := DITP(DLDEV);   << TEST BREAK FLUSH IN BIT 0 >>                 04416000
    IF < OR QMISCPL.FLUSH THEN IF IOQP.RPLEVEL=NULL THEN                04418000
      BEGIN  << BREAK OR CONTROL Y FLUSH, DONT MOVE DATA >>             04420000
        DXCNTP := DXCNTP + COUNT;                                       04422000
        ASMB(DZRO, CMP);  RETURN;  << RETURN WITH CC = CCE >>           04424000
      END;                                                              04426000
                                                                        04428000
STARTM:                                                                 04430000
    I := COUNT;   IF = THEN RETURN;   << NO DATA TO TRANSFER >>         04432000
                                                                        04434000
    IF IOQPL.SYSBUFR THEN                                               04436000
      BEGIN  << FORM ADDR TO GET DATA AND CHECK COUNT >>                04438000
        TEMP := OFFSET&LSR(8);  << SBUF NUMBER IN LINKED LIST >>        04440000
        TOS := BUFADR;                                                  04442000
MV1:                                                                    04444000
        TEMP := TEMP - 1;                                               04446000
        IF >= THEN  << FIND SYSBUF IN LINKED LIST >>                    04448000
          BEGIN  X := TOS-1;  TOS := SBUF(X);  GOTO MV1; END;           04450000
                                                                        04452000
        X := TOS;   DEL;   << SAVE BASE OF SYSBUF IN X >>               04454000
        TADDR := X + OFFSET.(8:7) - INTEGER(BUFADR);                    04456000
        X := 256 - OFFSET.(8:8);                                        04458000
        IF X<I THEN I := X;   << REMAINING IN SYSBUF IS CONSTRAINT >>   04460000
      END                                                               04462000
    ELSE TADDR := OFFSET&LSR(1);   << OFFSET IN DST IN WORDS >>         04464000
                                                                        04466000
    X := 540 - DTANKBP;                                                 04468000
    IF = THEN  BEGIN  X := COUNT;  RETURN;  END; << NO ROOM LEFT >>     04470000
    IF X<I THEN   << LIMIT ON MAX TANKED IS CONSTRAINT >>               04472000
      IF 540>COUNT THEN RETURN   << DONT BREAK UP THIS BLOCK >>         04474000
        ELSE I := X;    << MAX TANK IS CONSTRAINT >>                    04476000
                                                                        04478000
    IF DMODEMPL.NOSYNC THEN    << CHECK FOR 80 CHARS TO 2640 >>         04480000
      BEGIN  X := DITP(DSYNC);    IF X<I THEN I := X;  END;             04482000
                                                                        04484000
    X := I;                                                             04486000
    IF <> THEN   << SOMETHING TO MOVE >>                                04488000
      BEGIN                                                             04490000
        DISABLE;                                                        04492000
                                                                        04494000
        TOS := DTANKBP  MOD TBMAXB;   TOS := -S0;                       04496000
        IF = THEN    << NEW TBUF NEEDED >>                              04498000
          BEGIN                                                         04500000
            TOS:=DITP(DNXTB);  TOS:=S0;  DITP(X):=0;                    04502000
            IF = THEN       <<NO TBUF SAVED FOR THIS TERMINAL>>         04504000
              BEGIN                                                     04506000
                DDEL;                                                   04508000
                TOS := GETTBUF(PRIMARY);     TOS := S0;                 04510000
                IF = THEN   << NO TBUF AVAILABLE >>                     04512000
                  BEGIN                                                 04514000
                    ENABLE;                                             04516000
                    DDEL;  DDEL;     << CLEAN UP STACK >>               04518000
                    ADDTAIL(DITP, DTBLK, TBQN); << QUEUE TBUF REQUEST >>04520000
                    RETURN;   << WITH CC = CCG >>                       04522000
                  END;                                                  04524000
              END;                                                      04526000
                                                                        04528000
            X := DBCNTP;  << TEST BYTE COUNT SO FAR >>                  04530000
            IF = THEN  << ADDING 1ST TBUF >>                            04532000
              BEGIN                                                     04534000
                DITP(DPNTR) := 0;                                       04536000
                DITP(DHEAD) := TOS;                                     04538000
              END                                                       04540000
          ELSE  WA0(DITP(DTAIL)):=TOS;   <<LINK TO END>>                04542000
                                                                        04544000
            DITP(DTAIL) := TOS;     << SET NEW END POINTER >>           04546000
            WA0(DITP(DTAIL)+1):=0;  <<CLR ENQ TANKED BIT,OFFSET>>       04548000
          END;                                                          04550000
                                                                        04552000
        DCNTRLP.FILLING := 1;                                           04554000
        ENABLE;                                                         04556000
                                                                        04558000
        X := TOS + TBMAXB;   IF X<I THEN TEMP := I := X;                04560000
        TEMP := TOS + DITP(DTAIL)&LSL(1) + 4;                           04562000
                                                                        04564000
        IF LOGICAL(OFFSET) OR LOGICAL(TEMP) THEN                        04566000
          BEGIN   << MOVE FROM OR TO ODD BYTE BOUNDRY REQUIRED >>       04568000
            TOS := BUFADR;  DEL;   << LEAVE SOURCE DST # ON TOS >>      04570000
            IF TOS<>FLAGS&LSR(6) THEN  << DATA NOT ON THIS STACK >>     04572000
              BEGIN   << MOVE DATA TO THE LOCAL BUFFER >>               04574000
                TOS := Q1ADDR;                                          04576000
                TOS := DS6;   << GET BUFADR >>                          04578000
                TOS := TOS + TADDR;                                     04580000
                TOS := (I+2)&LSR(1);   ASMB( MDS );                     04582000
                TADDR := 0;  << NO OFFSET FROM TBASE >>                 04584000
              END                                                       04586000
            ELSE                                                        04588000
              TADDR := INTEGER(BUFADR) + TADDR - TBASE;                 04590000
                                                                        04592000
            X := OFFSET.(15:1);                                         04594000
            PDISABLE;   PUSH( Q );                                      04596000
                                                                        04598000
            TOS := TEMP;  << BYTE POINTER TO ENTER IN TBUF >>           04600000
            TOS := I;     << BYTE COUNT TO MOVE >>                      04602000
            TOS := S2 + TADDR;     << BASE OF SOURCE BUFFER >>          04604000
            SET( Q );                                                   04606000
                                                                        04608000
MV2:                                                                    04610000
            BPS1 := BQ1(X);    << MOVE A BYTE >>                        04612000
            ASMB(INCX,INCB);   << BUMP ADDRESSES >>                     04614000
            TOS := TOS - 1;    IF > THEN GOTO MV2;                      04616000
                                                                        04618000
            DDEL;      SET( Q );                                        04620000
            PENABLE;                                                    04622000
          END                                                           04624000
        ELSE                                                            04626000
          BEGIN   << MOVE WORDS >>                                      04628000
          IF S4<>0 THEN                                        <<01464>>04630000
            BEGIN << MOVE NOT PB REL >>                        <<01464>>04632000
            TOS := 6;  TOS := TEMP&LSR(1)+SYSDB;  << TBUF OFFSET >>     04634000
            TOS := DS6;     << GET BUFADR >>                            04636000
            TOS := TOS + TADDR;                                         04638000
            TOS := (I+1)&LSR(1);    ASMB( MDS );                        04640000
            END                                                <<01464>>04642000
          ELSE << MOVE FROM PB ARRAY >>                        <<01464>>04644000
            MOVE WA0(TEMP&LSR(1)) := RESET31B(TADDR),          <<01464>>04646000
            ((I+1)&LSR(1));                                    <<01464>>04648000
          END;                                                          04650000
                                                                        04652000
        DISABLE;                                                        04654000
        DCNTRLP.FILLING := 0;                                           04656000
        IF DCNTRLPL.ADDENQ THEN                                         04658000
        BEGIN                                                           04660000
           WA0(DITP(DTAIL)+1).WRTENQ:=1;                                04662000
           <<SET FLAG TO INDICATE ENQ IMBEDDED IN TBUF>>                04664000
           WA0(DITP(DTAIL)+1).ENQOFFSET:=DTANKBP MOD TBMAXB;            04666000
           <<RECORD BYTE OFFSET OF ENQ IN THE TBUF    >>                04668000
                                                               <<00328>>04670000
        END;                                                            04672000
        DTANKBP:=DTANKBP+I;  <<INCREMENT TOTAL BYTES TANKED IN          04674000
                               OUTSTANDING TBUFS >>                     04676000
        DBCNTP:=DBCNTP+I;    <<INCREMENT TOTAL BYTES REMAINING TO       04678000
                               BE WRITTEN >>                            04680000
                                                               <<02020>>04682000
                                                               <<02020>>04684000
                                                               <<02020>>04686000
                                                                        04688000
        ENABLE;                                                         04690000
                                                                        04692000
        IF DMODEMPL.NOSYNC THEN DITP(DSYNC) := DITP(DSYNC) - I;         04694000
        DXCNTP := DXCNTP + I;    OFFSET := OFFSET + I;                  04696000
      END;                                                              04698000
                                                                        04700000
                                                                        04702000
    COUNT := COUNT - I;    IF = THEN   << MOVE DONE >>         <<00328>>04704000
    BEGIN            <<CHECK IF LAST BYTE TANKED IS ENQ>>      <<00328>>04706000
       DISABLE;                                                <<00328>>04708000
       IF NOT DCNTRLPL.ADDENQ AND NOT DLASTPL.BWRITE AND       <<01990>>04710000
        DMODEMPL.NOSYNC THEN BEGIN                             <<01990>>04712000
          X:=DTANKBP MOD TBMAXB;                               <<00328>>04714000
          IF = THEN J1:=DITP(DTAIL)+1+TBMAXW                   <<00328>>04716000
             ELSE                                              <<00328>>04718000
          J1:=DITP(DTAIL)+1+((DTANKBP MOD TBMAXB)+1)/2;        <<00328>>04720000
          K1:=IF LOGICAL(DTANKBP) THEN WA0(J1).(0:8)           <<00328>>04722000
                                  ELSE WA0(J1).(8:8);          <<00328>>04724000
          IF K1=%5 THEN                                        <<00328>>04726000
          BEGIN                                                <<00328>>04728000
             WA0(DITP(DTAIL)+1).WRTENQ:=1;                     <<00328>>04730000
             TOS := (DTANKBP MOD TBMAXB) - 1;                  <<02083>>04732000
             IF S0 < 0 THEN S0 := 59; << ADJUST FOR END >>     <<02083>>04734000
             WA0(DITP(DTAIL)+1).ENQOFFSET := S0;               <<02088>>04736000
             DEL;<< BECAUSE SPL COMPILER HAS BUG IN IT >>      <<02088>>04738000
          END;                                                 <<00328>>04740000
       END;                                                    <<00328>>04742000
       IF DITP(DCNT) = -2 THEN STARTWRITE;                     <<02020>>04744000
       ENABLE;                                                 <<00328>>04746000
       ASMB(DZRO, CMP);   <<SET CC=CCE>>                       <<00328>>04748000
       RETURN;                                                 <<00328>>04750000
    END;                                                       <<00328>>04752000
                                                               <<00328>>04754000
                                                                        04756000
    IF DMODEMPL.NOSYNC AND DITP(DSYNC)=0 THEN                           04758000
      BEGIN                                                             04760000
        DITP(DSYNC) := 81;                                              04762000
        IF NOT DLASTPL.BWRITE AND NOT DMODEMPL&CSL(M202) AND            04764000
           DSPEEDP.INSPEED=DSPEEDP.OUTSPEED THEN                        04766000
          BEGIN   << ADD ENQ FOR 2640 NOT ON A 202 >>                   04768000
            DISABLE;                                                    04770000
            DCNTRLP.ADDENQ:=1;                                          04772000
            ENABLE;                                                     04774000
            TOS := DXCNTP;   << SAVE DXCNT  OVER CALL >>                04776000
            TANKDATA(SIOADDR,1,7);    << ADD ENQ >>                     04778000
            DXCNTP := TOS;   << RESTORE DXCNT >>                        04780000
            IF <> THEN     << ENQ NOT ADDED, WAIT REQUEST >>            04782000
              BEGIN                                                     04784000
                DISABLE;                                                04786000
                DCNTRLP.ADDENQ:=0;                                      04788000
                ENABLE;                                                 04790000
                RQSTATE := RQSTATE + 4;  << INDICATE AN ADD ENQ WAIT >> 04792000
                RETURN;    << WITH CC = CCG >>                          04794000
              END;                                                      04796000
              DISABLE;                                                  04798000
              DCNTRLP.ADDENQ:=0;                                        04800000
              ENABLE;                                                   04802000
          END;                                                          04804000
      END;                                                              04806000
    IF DITP(DCNT) = -2 THEN STARTWRITE;                        <<02020>>04808000
    GOTO STARTM;        << CONTINUE THIS OPERATION >>                   04810000
                                                                        04812000
END;      << ---------END OF TANKDATA---------->>                       04814000
                                                               <<01464>>04816000
                                                               <<01464>>04818000
                                                               <<01464>>04820000
SUBROUTINE RESET2631;                                          <<01464>>04822000
  BEGIN                                                        <<01464>>04824000
  DISABLE;                                                              04826000
  IF HP2631B7 THEN                                             <<04869>>04828000
     DCNTRLP.PARITYBITS := 3                                   <<04869>>04830000
  ELSE                                                         <<04869>>04832000
     DCNTRLP.PARITYBITS := 0;                                  <<04869>>04834000
  TEMP := WA0(DITP(DILTP) + ISIOP);                            <<04869>>04836000
  IF HP2631B7 THEN                                             <<04869>>04838000
     TOS := %10003                                             <<04869>>04840000
  ELSE                                                         <<04869>>04842000
     TOS := %14403;                                            <<04869>>04844000
  IF DSPEEDP.OUTSPEED = %17 THEN                               <<04869>>04846000
     TOS.SBS := 1;                                             <<04869>>04848000
  WA0(TEMP+4) := TOS;                                          <<04869>>04850000
  STOPSPDSEN;                                                  <<01464>>04852000
                                                               <<04242>>04854000
  DITP.DSTATE := MODEMSIO;                                     <<01464>>04856000
  ENABLE;                                                      <<04242>>04858000
  TOS := WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                    <<01464>>04860000
  TOS := SYSDB + TEMP + MODSIOPTY;                             <<01464>>04862000
  STARTSIO;                                                    <<01464>>04864000
  DELAY(500D);                                                 <<01464>>04866000
                                                               <<01464>>04868000
  QMISCP.RSTATE := RQSTATE;                                    <<04869>>04872000
  IF DXCNTP < 54 THEN                                          <<04869>>04874000
     BEGIN                                                     <<04869>>04876000
     TANKDATA(0D, 54-DXCNTP, DXCNTP);                          <<04869>>04878000
     IF <> THEN                                                <<04869>>04880000
        RETURN;                                                <<04869>>04882000
     END;                                                      <<04869>>04884000
  IF DXCNTP < 65 THEN                                          <<04869>>04886000
     BEGIN                                                     <<04869>>04888000
     TEMP := WA0(DITP(DILTP) + ISIOP);                         <<04869>>04890000
     IF HP2631B7 THEN                                          <<04869>>04892000
        WA0(TEMP+18) := "k0"                                   <<04869>>04894000
     ELSE                                                      <<04869>>04896000
        WA0(TEMP+18) := "k1";  << USE 8-BIT METHOD >>          <<04869>>04898000
     TANKDATA(SIOADDR, 65-DXCNTP, DXCNTP-20);                  <<04869>>04900000
     IF <> THEN                                                <<04869>>04902000
        RETURN;                                                <<04869>>04904000
     END;                                                      <<04869>>04906000
  NEWFORM := 1;                                                <<04869>>04908000
  IF = THEN I := 67 ELSE I := 66; << TO FF OR NOT? >>          <<04869>>04910000
  TANKDATA(SIOADDR, I-DXCNTP, DXCNTP-60);                      <<04869>>04912000
  IF <> THEN                                                   <<04869>>04914000
     BEGIN                                                     <<04869>>04916000
     IF I = 67 THEN << WASN'T AT TOP OF FORM >>                <<04869>>04918000
        NEWFORM := 0; << SO FIX UP FOR NEXT TIME THROUGH >>    <<04869>>04920000
     RETURN;                                                   <<04869>>04922000
     END;                                                      <<04869>>04924000
  DPAGEEJECT := 1;                                             <<04869>>04926000
  QMISCP.RSTATE := WAITING;                                    <<04869>>04928000
  DISABLE;                                                     <<04869>>04930000
  DITP.DSTATE := WRITING;                                      <<04869>>04932000
  ENABLE;                                                      <<04869>>04934000
  STATREQUEST(DITP);                                           <<04869>>04936000
END;                                                           <<04869>>04938000
                                                               <<01464>>04940000
                                                               <<01464>>04942000
                                                               <<01464>>04944000
                                                               <<01464>>04946000
                                                               <<01464>>04948000
SUBROUTINE DOCRFF;                                             <<01464>>04950000
  BEGIN                                                        <<01464>>04952000
  IF DMODEMP.MODEM <> 0 AND NOT DSAVEPL.CC THEN                <<02861>>04954000
     RETURN;                                                   <<02861>>04956000
  TANKDATA(SIOADDR,2,5);                                       <<01464>>04958000
  IF HP2631B THEN                                              <<04869>>04960000
     BEGIN                                                     <<04869>>04962000
     QMISCP.RSTATE := WAITING;                                 <<04869>>04964000
     DITP(DLDEV).DOSTATREQ := 1;                               <<04869>>04966000
     END;                                                      <<04869>>04968000
  STARTWRITE;                                                  <<01464>>04970000
  END;                                                         <<01464>>04972000
                                                               <<01464>>04974000
                                                               <<01464>>04976000
SUBROUTINE CLRSPECL;                                                    04978000
BEGIN                                                                   04980000
   TOS:=IOQP(QPAR2)&LSR(8);                                             04982000
   X:=MAXSPECL;                                                         04984000
   WHILE  >= AND S0<>SPECLCHAR(X)  DO   X:=X-1;                         04986000
   IF < THEN    <<NOT IN ADCC SPECL CHAR LIST,OK TO CLEAR>>             04988000
   BEGIN                                                                04990000
      TEMP:=WA0(DITP(DILTP)+ISIOP);                                     04992000
      WA0(TEMP+13):=TOS;                                                04994000
      WA0(TEMP+SYNSTRT):=[8/4,8/4]; <<CLR SPECL CHAR INSTR>>            04996000
      WA0(X:=X+1):=1;                                                   04998000
      WA0(X:=X+1):=1;                                                   05000000
      WA0(X:=X+1):=[1/1,1/1,1/1,13/0]; <<RIGHT BYTE>>                   05002000
      WA0(X:=X+1):=SYSDB+TEMP+13;                                       05004000
      WA0(X:=X+1):=[8/1,1/1,7/2];   <<INTERRUPT/HALT>>                  05006000
      WA0(X:=X+1):=20;     <<CODE FOR CNTRLFINI>>                       05008000
      DITP(DSIOPC):=SYSDB+TEMP+SYNSTRT;                        <<02861>>05010000
      STOPSPDSEN ;                                                      05012000
      DITP.DSTATE:=MODEMSIO;                                            05014000
      TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                           05016000
      TOS:=DITP(DSIOPC);                                                05018000
      STARTSIO;                                                         05020000
   END                                                                  05022000
      ELSE                                                              05024000
   DEL;      <<NOTHING TO CLEAR>>                                       05026000
END;                                                                    05028000
                                                                        05030000
SUBROUTINE TANKSYNCS;                                                   05032000
BEGIN                                                                   05034000
   TOS:=DITP(DSYNC).SCOUNT;     <<GET COUNT OF SYNC BYTES TO TANK>>     05036000
   DITP(X).SCOUNT:=0;           <<ZAP THEM LITTLE BUGS>>                05038000
   WHILE S0 <> 0 DO                                                     05040000
   BEGIN                                                                05042000
      TANKDATA(SIOADDR,1,18);   <<PUT A SYNC BYTE INTO TBUF>>  <<00637>>05044000
      IF <> THEN                <<NO ROOM FOR AMATEURS>>                05046000
      BEGIN                                                             05048000
         DITP(DSYNC).SCOUNT:=TOS; <<STORE NEW SYNC BYTE COUNT>>         05050000
         RETURN;                                                        05052000
      END;                                                              05054000
      TOS:=TOS-1;                                                       05056000
   END;                                                                 05058000
   DEL;                                                                 05060000
END;      <<--------------END OF TANKSYNCS---------------->>            05062000
                                                                        05064000
                                                                        05066000
                                                                        05068000
SUBROUTINE DOSPACE;                                                     05070000
  <<                                                                    05072000
    THIS SUBROUTINE PUTS THE SPECIFED CARRIAGE CONTROL CHARACTERS IN    05074000
    THE TERMINAL TANKS.                                                 05076000
                                                                        05078000
    RETURN CC - CCE = DATA TRANSFER COMPLETED                           05080000
                CCG = TOO MUCH DATA TO TANK NOW OR NO TBUF AVAILABLE    05082000
  >>                                                                    05084000
BEGIN                                                                   05086000
    CONTINUE:=TRUE;                                                     05088000
     IF HP2631B AND DPAGEEJECT = QPAGEEJECT THEN               <<04869>>05090000
       BEGIN  << TANK ESC SEQ TO OR NOT TO AUTO PAGE EJECT >>  <<01464>>05092000
       X := 3;                                                 <<01464>>05094000
       WHILE >= DO                                             <<01464>>05096000
         BEGIN                                                 <<01464>>05098000
         Q1(X) := ESCHP2631(X);                                <<01464>>05100000
         X := X-1;                                             <<01464>>05102000
         END;                                                  <<01464>>05104000
       Q1(2) := IF QPAGEEJECT THEN %30114 ELSE %30514;         <<01464>>05106000
       TANKDATA(Q1ADDR,6-DXCNTP,DXCNTP);                       <<01464>>05108000
       IF <> THEN RETURN;                                      <<01464>>05110000
       DPAGEEJECT := NOT DPAGEEJECT;                           <<01464>>05112000
       DXCNTP := 0;                                            <<01464>>05114000
       END;                                                    <<01464>>05116000
    IF DLASTPL.BWRITE THEN GOTO ALLDONE;                                05118000
    TEMP := 0;     << INDEX TO LF EOR SEQUENCE >>                       05120000
                                                                        05122000
    IF QPAR1P=1 THEN  << SPACE CONTROL IMBEDED IN BUFFER >>             05124000
      BEGIN                                                             05126000
        X := BCNT;                                                      05128000
        IF = THEN                                                       05130000
        BEGIN                                                           05132000
           CONTINUE:=FALSE;                                             05134000
           RETURN;                                                      05136000
        END;                                                            05138000
        PDISABLE;                                                       05140000
        TOS := Q1ADDR;     TOS := DATA'ADR(IOQP);                       05142000
        TOS := 1;    ASMB( MDS );     << FIRST WORD TO ARRAY Q1 >>      05144000
        PENABLE;                                                        05146000
        X := BQ1;   << GET FIRST BYTE >>                                05148000
      END                                                               05150000
    ELSE X := QPAR1P;   << PUT SPACE CONTROL IN X >>                    05152000
                                                                        05154000
    TOS := X;                                                  <<01464>>05156000
    NEWFORM := IF S0="1" THEN 1 ELSE 0;                        <<01464>>05158000
                                                               <<04869>>05160000
    IF DMODEMPL.NOSYNC OR HP2631B THEN                         <<04869>>05162000
  BEGIN                <<NO NEED TO PUT IN SYNCS FOR CR/LF>>            05164000
    IF (%300 <= S0 <= %317) AND HP2631B THEN                   <<04869>>05166000
      BEGIN    << FORM VFC SEQ >>                              <<01464>>05168000
      X := TOS;                                                <<04869>>05170000
      TOS := (X-%277) MOD 10 + %60;                            <<01464>>05172000
      IF X>%310 THEN TOS := TOS LOR %30400                     <<04239>>05174000
        ELSE TOS := TOS LOR %30000;                            <<01464>>05176000
       X := 3;                                                 <<01464>>05178000
       WHILE >= DO                                             <<01464>>05180000
         BEGIN                                                 <<01464>>05182000
         Q1(X) := ESCHP2631(X);                                <<01464>>05184000
         X := X-1;                                             <<01464>>05186000
         END;                                                  <<01464>>05188000
      Q1(2) := TOS;                                            <<01464>>05190000
      TANKDATA(Q1ADDR,7-DXCNTP,DXCNTP);                        <<01464>>05192000
      IF <> THEN RETURN;                                       <<04869>>05194000
      IF HP2631BFX THEN                                        <<04869>>05196000
         DITP(DLDEV).DOSTATREQ := 1;                           <<04869>>05198000
      GOTO ALLDONE;                                            <<04869>>05200000
      END;                                                     <<01464>>05202000
    X := TOS;                                                  <<04869>>05204000
    X := X-%53;                                                         05206000
    IF < THEN GOTO SINGLESPACE;                                         05208000
    IF = THEN GOTO DS1;    << "+" = %53 = NO LF >>                      05210000
    X := X - 2;  << X = CHAR - %55 >>                          <<04238>>05212000
    IF = THEN    << "-" = %55 = TRIPLE SPACE>>                 <<04238>>05214000
      BEGIN                                                    <<04238>>05216000
        X := 3;                                                <<04238>>05218000
        GOTO DS1;                                              <<04238>>05220000
      END;                                                     <<04238>>05222000
    X := X - 3;  << X = CHAR - %60 = DOUBLE SPACE >>           <<04238>>05224000
    IF = THEN   <<  "0" = %60 = DOUBLE SPACE >>                         05226000
      BEGIN                                                             05228000
         DISABLE;                                                       05230000
         IF RQSTATE=POSTSPACE THEN DCNTRLP.LFLAST:=1;                   05232000
         ENABLE;                                                        05234000
         X:=2;       GOTO DS1;   <<BABY GOGO! BABY GOGO!>>              05236000
      END;                                                              05238000
    X := X-1;    << X = CHAR - %61 >>                                   05240000
    IF = AND DTYPEPL.FORMFEED THEN  << "1" = TOP OF FORM >>             05242000
      TEMP := 4;   << OFFSET TO XOFF, CR AND FF >>                      05244000
    X := X-%237;    << X = CHAR - %320 >>                               05246000
    IF <> THEN   << NOT A %320 >>                                       05248000
      BEGIN                                                             05250000
        X := X+%120;   << X = CHAR - %200 >>                            05252000
        IF NOT (0<=X<=%77) THEN    << NOT MULTIPLE LINE FEEDS >>        05254000
SINGLESPACE:                                                            05256000
          X := 1;   << SET X TO SINGLE SPACE >>                         05258000
        DISABLE;                                                        05260000
        IF RQSTATE=POSTSPACE THEN DCNTRLP.LFLAST:=1;                    05262000
        ENABLE;                                                         05264000
DS1:                                                                    05266000
        SCNT := X + 2;   << LF COUNT + 2 FOR XOFF, CR >>                05268000
                                                                        05270000
        X := DXCNTP;  << NO XOFF IF TERM NOT HARD COPY >>               05272000
        IF = AND DTYPEP.TTYPE <> 6 THEN DXCNTP := DXCNTP + 1;  <<02047>>05274000
        I := (IF SCNT>4 THEN 4 ELSE SCNT) - DXCNTP;                     05276000
        IF > THEN  << ADD XOFF, CR, 1 OR 2 LF'S OR FF >>                05278000
          BEGIN                                                         05280000
            TANKDATA(SIOADDR,I,DXCNTP+TEMP);                            05282000
            IF <> THEN RETURN;   << GO WAIT REQUEST >>                  05284000
          END;                                                          05286000
                                                                        05288000
        WHILE DXCNTP<SCNT DO                                            05290000
          BEGIN                                                         05292000
            TANKDATA(SIOADDR,1,2);   << APPEND LINE FEEDS >>            05294000
            IF <> THEN RETURN;  << GO WAIT REQUEST >>                   05296000
          END;                                                          05298000
      IF HP2631BFX THEN                                        <<04869>>05300000
         DITP(DLDEV).DOSTATREQ := 1;                           <<04869>>05302000
      END;                                                              05304000
  END                                                                   05306000
     ELSE                                                               05308000
  BEGIN                <<TERMINAL REQUIRES SYNC BYTES FOR CR/LF>>       05310000
     X := TOS;                                                 <<04869>>05312000
     L1 := X;                                                  <<01823>>05314000
     X:=X-%320;                                                         05316000
     IF <> THEN                                                         05318000
     BEGIN             <<NOT TO SUPPRESS CR/LF>>                        05320000
        X:=DITP(DMONTR).SYNCSTATE;                             <<00637>>05322000
        IF = THEN                                                       05324000
        BEGIN          <<TANK XOFF/CR FIRST,THEN SYNC BYTES>>           05326000
           X:=DITP(DSYNC).SCOUNT;                                       05328000
           IF = THEN                                                    05330000
           BEGIN       <<XOFF/CR HAS NOT BEEN TANKED>>                  05332000
              X:=DXCNTP;                                                05334000
              IF = AND DTYPEP.TTYPE = 6 THEN                   <<02047>>05336000
                 TANKDATA(SIOADDR,2,0)  <<PUT XOFF/CR >>       <<02047>>05338000
              ELSE                                             <<02047>>05340000
                 TANKDATA(SIOADDR,1,1); <<PUT CR      >>       <<02047>>05342000
              IF <> THEN RETURN;  <<TOO MUCH ALREADY TANKED>>           05344000
              TOS:=DITP(DSYNC).CRSYNC;  <<GET CR SYNC BYTES COUNT>>     05346000
              IF S0 > 7 THEN TOS:=(TOS-6)*5;                            05348000
              DITP(DSYNC).SCOUNT:=TOS;                                  05350000
           END;                                                         05352000
           TANKSYNCS;  <<TANK SYNC BYTES REQUIRED FOR CR>>              05354000
           IF <> THEN RETURN;  <<NO ROOM FOR ALL THEM SYNCS>>           05356000
           DITP(DMONTR).SYNCSTATE:=1;<<SET STATE TO TANK LF'S>><<00637>>05358000
        END;                                                            05360000
                                                                        05362000
        IF DITP(DMONTR).SYNCSTATE=1 THEN                       <<00637>>05364000
        BEGIN          <<FINISHED TANKING XOFF/CR/SYNC,START LF'S>>     05366000
           X := L1;    <<RESTORE CARRIAGE CNTRL BYTE>>         <<01823>>05368000
           X:=X-%53;                                                    05370000
           IF < THEN X:=1  <<SINGLESPACE>>                              05372000
              ELSE                                                      05374000
           IF = THEN BEGIN  <<"+"=%53: NO LF>>                 <<00637>>05376000
                        DITP(DMONTR).SYNCSTATE:=0;             <<00637>>05378000
                        GO TO ALLDONE;                         <<02047>>05380000
                     END                                       <<00637>>05382000
              ELSE                                                      05384000
           BEGIN                                                        05386000
             X := X - 2;  <<X = CHAR-%55>>                     <<04235>>05388000
             IF = THEN X := 3  <<"-"=%55: TRIPLE SPACE>>       <<04235>>05390000
                ELSE                                           <<04235>>05392000
             BEGIN                                             <<04235>>05394000
                X := X - 3;  <<X = CHAR-%60>>                  <<04235>>05396000
                IF = THEN X := 2  <<<"0"=%60: DOUBLE SPACE>>   <<04235>>05398000
                 ELSE                                                   05400000
              BEGIN                                                     05402000
                 X:=X-1;     <<X=CHAR-%61>>                             05404000
                 IF = THEN   <<FORMFEED SPECIFIED>>                     05406000
                 BEGIN                                                  05408000
                    IF DTYPEPL.FORMFEED THEN                            05410000
                    BEGIN    <<OK TO DO IT>>                            05412000
                       TOS:=DSPEEDP.OUTSPEED;                           05414000
                       DO X:=X+1 UNTIL S0=SPDCODE(X);                   05416000
                       <<FIND ADCC SPD CODE ARRAY INDEX>>               05418000
                       DEL;    TOS:=FFSYNCS(X); <<GET SYNC COUNT>>      05420000
                       IF DTYPEP.TTYPE=18 THEN S0:=0;          <<04825>>05422000
                       DITP(DSYNC).SCOUNT := TOS;              <<02084>>05424000
                       TANKDATA(SIOADDR,1,6);   <<PUT FF INTO TBUF>>    05426000
                    END                                                 05428000
                       ELSE                                             05430000
                    BEGIN    <<DUMMY DOES NOT DO FF>>                   05432000
                       TOS:=DITP(DSYNC).LFSYNC;                         05434000
                       IF S0 > 7 THEN TOS:=(TOS-6)*5;                   05436000
                       DITP(DSYNC).SCOUNT := TOS;              <<02084>>05438000
                       TANKDATA(SIOADDR,1,2);   <<TANK A LF INSTEAD>>   05440000
                    END;                                                05442000
                    IF <> THEN RETURN;  <<OUT OF ROOM IN TBUFS>>        05444000
                                                               <<02084>>05446000
                    X:=0;    <<NO MORE LF'S NECESSARY>>                 05448000
                 END                                                    05450000
                    ELSE                                                05452000
                 BEGIN                                                  05454000
                    X:=X-%117;                                          05456000
                    <<X=CHAR-%200>>                                     05458000
                    IF NOT (0<=X<=%77) THEN X:=1; <<NOT MULTIPLE LF'S>> 05460000
                 END;                                                   05462000
              END;                                                      05464000
             END;                                              <<04235>>05466000
           END;                                                         05468000
           TOS:=X;  <<STORE COUNT OF LF'S TO TANK>>                     05470000
           TOS.SYNCSTATE:=2;  <<SET STATE TO START TANKING LF'S>>       05472000
           DITP(DMONTR).(2:14):=TOS;                           <<01449>>05474000
        END;                                                            05476000
                                                                        05478000
        IF DITP(DMONTR ).SYNCSTATE=2 THEN                      <<00637>>05480000
        BEGIN   <<START TANKING LF'S AND SYNC BYTES>>                   05482000
           TANKSYNCS;   <<TANK SYNC BYTES IF NECESSARY>>                05484000
           IF <> THEN RETURN;                                           05486000
           WHILE DITP(DMONTR ).LFCOUNT <> 0 DO                 <<00637>>05488000
           BEGIN        <<TANK A LF>>                                   05490000
              TANKDATA(SIOADDR,1,2);  <<PUT LF INTO TBUF>>              05492000
              IF <> THEN RETURN;                                        05494000
              TOS:=DITP(DMONTR );                              <<00637>>05496000
              TOS:=TOS-1; <<DECREMENT REMAINING LF COUNT>>              05498000
              DITP(X):=TOS;                                             05500000
              TOS:=DITP(DSYNC).LFSYNC;                                  05502000
              IF S0>7 THEN TOS:=(TOS-6)*5;                              05504000
              DITP(DSYNC).SCOUNT:=TOS;                                  05506000
              TANKSYNCS;  <<TANK REQUIRED SYNC BYTES AFTER A LF>>       05508000
              IF <> THEN RETURN;                                        05510000
           END;                                                         05512000
           DITP(DMONTR).(2:14):=0; <<CLEAR STATE AND LF COUNT>><<01449>>05514000
        END;                                                            05516000
     END;                                                               05518000
  END;                                                                  05520000
                                                                        05522000
ALLDONE:                                                                05524000
    ASMB(DZRO,CMP );   << SET CC = CCE >>                               05526000
  END;    <<---------------------END OF DOSPACE----------------------->>05528000
INTEGER SUBROUTINE PINWORD;                                             05530000
  <<                                                                    05532000
     THIS SUBROUTINE RETURNS THE PIN OF THE MAIN PROCESS TO WHICH       05534000
     THE DEVICE IS CURRENTLY ATTACHED.                                  05536000
  >>                                                                    05538000
    BEGIN                                                               05540000
      RESETDB(-1);                                                      05542000
      TEMP := EXCHANGEDB(LDTDST);                                       05544000
      PINWORD :=WA0(WA0.ESIZE*LDEV+1);                                  05546000
      TOS := EXCHANGEDB(TEMP);   << RESTORE DB >>                       05548000
      ASMB( PCAL SETSYSDB );   DEL;                                     05550000
    END;    << MAIN PIN >>                                              05552000
                                                                        05554000
                                                                        05556000
                                                                        05558000
                                                                        05560000
                                                                        05562000
                                                                        05564000
SUBROUTINE READDONE ;                                                   05566000
BEGIN                                                                   05568000
   CONTINUE:=TRUE;    <<PRESUMED INNOCENCE UNLESS PROVEN OTHERWISE>>    05570000
   TOS:=IF DRBCTP<DBCNTP THEN DRBCTP ELSE DBCNTP;                       05572000
                      <<NUMBER OF BYTES TO XSFER INTO CALLER'S STACK>>  05574000
   WCNT:=(S0+1)&LSR(1);                                                 05576000
   BCNT:=TOS;                                                           05578000
   IF LOGICAL(BCNT) THEN                                                05580000
   BEGIN              <<ODD NUMBER OF BYTES MOVED INTO CALLER'S STACK>> 05582000
      X:=DITP(DHEAD);                                                   05584000
      TEMP:=BCNT/TBMAXB;  <<NUMBER OF COMPLETELY FILLED TBUFS>>         05586000
      WHILE > DO          <<GET TO THE LAST LINKED TBUF>>               05588000
      BEGIN                                                             05590000
         X:=WA0(X);                                                     05592000
         TEMP:=TEMP-1;                                                  05594000
      END;                                                              05596000
      TEMP:=(BCNT MOD TBMAXB) + (X+2)&LSL(1);                           05598000
      <<TBUF BYTE ADDR TO PUT CALLER'S LAST BYTE TO FORM LAST WORD>>    05600000
      PDISABLE;           <<TURN OFF YOUR CHARMS>>                      05602000
      TOS:=Q1ADDR;        <<ADDRESS OF TEMPORARY STORAGE>>              05604000
      TOS:=DATA'ADR(IOQP);<<STARTING ADDRESS OF CALLER'S STACK>>        05606000
      TOS:=TOS+WCNT-1;    <<ADDR WHERE LAST WORD WILL GO>>              05608000
      TOS:=1;                                                           05610000
      ASMB(MDS);          <<GET THAT LAST WORD FROM CALLER'S STACK      05612000
                            INTO TEMPORARY STORAGE>>                    05614000
      BA0(TEMP):=Q1;      <<XSFER THAT LAST BYTE INTO THE TBUF>>        05616000
      PENABLE;            <<DAZZLE THEM CHICKS>>                        05618000
   END;                                                                 05620000
                                                                        05622000
   X:=DBCNTP;                                                           05624000
   IF <> THEN                                                           05626000
   IF IOQP.READERRORS<BRKEND AND IOQP(QPAR2).BINARY=0 THEN              05628000
   BEGIN      <<NO BAD ERRORS AND NOT BINARY,CHECK FOR EOR>>            05630000
      EOFCHECK(IOQP,DOUBLE(DITP(DHEAD)+SYSDB2),-DBCNTP,1);              05632000
      IF <> THEN          <<AN EOF HAS BEEN DETECTED>>                  05634000
      BEGIN                                                             05636000
         IF < THEN        <<BACK UP AND SAVE DATA>>                     05638000
         BEGIN                                                          05640000
            DITP(DRCNT):=DBCNTP;  <<SAVE TOTAL COUNT OF DATA READ>>     05642000
            TOS:=DITP(DHEAD);    DITP(X):=0;                            05644000
            DITP(DRPTR):=TOS;                                           05646000
            DBCNTP:=0;    <<SO NO TBUFS WILL BE RETURNED>>              05648000
         END;                                                           05650000
         RETURNBUFS;      <<RETURN TBUFS IF DBCNT<>0 >>                 05652000
         IF IOQP(QPAR2)&LSR(8)<>0 THEN CLRSPECL;                        05654000
         SETSTATUS(IOQP(QSTAT));                                        05656000
         CONTINUE:=FALSE;                                               05658000
      END;                                                              05660000
   END;                                                                 05662000
                                                                        05664000
   IF CONTINUE THEN                                                     05666000
   BEGIN                                                                05668000
      X:=QWBCTP;                                                        05670000
      QWBCTP:=IF > THEN WCNT ELSE -BCNT;                                05672000
                          <<LOG ACTUAL WORD OR BYTE COUNT READ>>        05674000
      PDISABLE;                                                         05676000
      TOS:=DATA'ADR(IOQP);                                              05678000
      TADDR:=TOS;                                                       05680000
      TEMP:=TOS;                                                        05682000
      SCNT:=IF IOQPL.SYSBUFR THEN 128 ELSE WCNT;                        05684000
            <<REMAINING BYTES IN CURRENT BLOCK TO XSFER>>               05686000
      TCNT:=TBMAXW;                                                     05688000
      TBASE:=DITP(DHEAD)+SYSDB2;                                        05690000
      WHILE WCNT > 0 DO  <<THERE IS RD DATA TO XSFER INTO CALLERSTACK>> 05692000
      BEGIN                                                             05694000
         I:=WCNT;        <<I IS THE SIZE OF EACH MOVE>>                 05696000
         IF I>TCNT THEN I:=TCNT; <<MOVE BLKSIZE CONSTRAINED BY TBUFSIZ>>05698000
         IF I>SCNT THEN I:=SCNT; <<BLKSIZE CONSTRAINED BY END OF SYSBF>>05700000
         TOS:=TEMP;                                                     05702000
         TOS:=TADDR;   <<SET UP DESTINATION DST# & OFFSET IN SEGMENT>>  05704000
         TOS:=6;       <<DST# OF ALL OF MEMORY>>                        05706000
         TOS:=TBASE;   <<SOURCE TBUF DST# AND OFFSET>>                  05708000
         TOS:=I;                                                        05710000
         ASMB(MDS);    <<PUT ON YOUR MOVES>>                            05712000
         WCNT:=WCNT-I; <<UPDATE REMAINING WORD COUNT TO XSFER>>         05714000
         IF <> THEN                                                     05716000
         BEGIN                                                          05718000
            TBASE:=TBASE+I;                                             05720000
            TADDR:=TADDR+I;                                             05722000
            TCNT:=TCNT-I;                                               05724000
            IF = THEN                                                   05726000
            BEGIN      <<FINISHED EMPTYING A TBUF>>                     05728000
               TBASE:=WA0(TBASE-TBMAXW-SYSDB2)+SYSDB2;                  05730000
               <<ADDRESS OF NEXT LINKED TBUF>>                          05732000
               TCNT:=TBMAXW;                                            05734000
            END;                                                        05736000
            SCNT:=SCNT-I;                                               05738000
            IF = THEN                                                   05740000
            BEGIN      <<FINISHED EMPTYING A SYSBUF>>                   05742000
               TADDR:=SBUF(TADDR-129);                                  05744000
               SCNT:=128;                                               05746000
            END;                                                        05748000
         END;                                                           05750000
      END;                                                              05752000
      PENABLE;                                                          05754000
      DISABLE;                                                          05756000
      IF DMODEMPL.NOSYNC THEN DITP(DSYNC):=80;                          05758000
      RETURNBUFS;                                                       05760000
      IF IOQP(QPAR2)&LSR(8)<>0 THEN CLRSPECL;                           05762000
      SETSTATUS(READSTATUS(IOQP.READERRORS));                           05764000
   END;                                                                 05766000
END;     <<-------------END OF READDONE--------------->>                05768000
                                                                        05770000
                                                                        05772000
                                                                        05774000
SUBROUTINE SETBAUDRATE;                                                 05776000
BEGIN                                                                   05778000
   TEMP:=WA0(DITP(DILTP)+ISIOP);                                        05780000
   WA0(TEMP+8).LEFTHLF:=DSPEEDP.OUTSPEED;                               05782000
   WA0(X).(12:4)      :=DSPEEDP.INSPEED;   <<SET UP SEND/RECV CODES>>   05784000
   WA0(TEMP+4) := UART;                                        <<02032>>05786000
   DITP(DSIOPC):=SYSDB+TEMP+WRTSPD;                                     05790000
   STOPSPDSEN ;                                                         05792000
   IF SYSUP THEN                                                        05794000
  BEGIN     <<SYSTEM IS UP,TIMER HAS BEEN ENABLED>>                     05796000
   ENABLE;                                                              05798000
   DELAY(500D);                                                         05800000
  END;                                                                  05802000
                                                                        05804000
   DITP.DSTATE:=MODEMSIO;                                               05806000
   TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                              05808000
   X:=ABS(S0*4+3).IDLESIO;                                              05810000
   IF <> THEN SUDDENDEATH(209);                                <<01539>>05812000
   TOS:=DITP(DSIOPC);                                                   05814000
   STARTSIO;                                                            05816000
END;                                                                    05818000
                                                                        05820000
                                                                        05822000
SUBROUTINE SERVONLINE ;                                                 05824000
BEGIN                                                                   05826000
   TEMP:=DITP(DSAVE).HSTATE;  <<CHECK DEVICE HANGUP STATE>>             05828000
   IF = OR TEMP= LOGGINGON THEN                                         05830000
      IF LPDT(LDEV*2+1).DEVREC=0 AND LPDT(X).ACCEPTING<>0 THEN          05832000
      <<DEVICE NOT OWNED,JOBS AND DATA ARE ACCEPTED>>                   05834000
      BEGIN                                                             05836000
         DISABLE;                                                       05838000
         LPDT(X).SERVREQ:=1;                                            05840000
         LPDT(1):=LPDT(1)+1;                                            05842000
         <<REQUEST DEVREC SERVICE AND INCREMENT SERVICE REQST COUNTER>> 05844000
         ENABLE;                                                        05846000
         SETTERMTYPE(DLASTP.TERMINALTYPE,DITP(DCNT),DITP(X),DITP);      05848000
         <<ADCC SPEED CODE WAS PUT INTO DCNT BY TIP>>                   05850000
         IF <> THEN                                                     05852000
         BEGIN          <<CONFIGURE AS UNDEFINED DEVICE>>               05854000
            SETTERMTYPE(UNDEFINED,DITP(X),DITP(X),DITP);                05856000
            IF <> THEN SUDDENDEATH(207);                       <<01539>>05858000
         END;                                                           05860000
         DISABLE;                                              <<04242>>05862000
         DITP.UP:=1;     <<TERMINAL READY TO DO I/O>>                   05864000
         ENABLE;                                               <<04242>>05866000
         DSPEEDP.SPDSENSING:=0;                                         05868000
         DITP(DSAVE).HSTATE:=LOGGINGON;                                 05870000
         STARTTIMEOUT(LOGONTO,DITP);                                    05872000
         AWAKE(DEVRECPCBP,JUNKWAIT,NOWAIT);                             05874000
         IF NOT DMODEMPL.NOSYNC THEN DITP(DSYNC).SCOUNT:=0;    <<00637>>05876000
         TEMP:=WA0(DITP(DILTP)+ISIOP);                         <<00637>>05878000
         WA0(TEMP+8).LEFTHLF:=DSPEEDP.OUTSPEED;                <<00637>>05880000
         WA0(X).(12:4):=DSPEEDP.INSPEED;                       <<00637>>05882000
         STOPSPDSEN;                                           <<00637>>05884000
         DITP.DSTATE:=MODEMSIO;                                <<00637>>05886000
         IF DCNTRLPL.PTYONODD=%2 THEN  <<PTY ON,ODD PTY=0>>    <<00637>>05888000
            WA0(TEMP+4):=%11003  <<UART CNTRL:7 BITS,EVEN PTY>><<00637>>05890000
            ELSE WA0(TEMP+4):=%14403;  <<8 BITS,NO PTY>>       <<00637>>05892000
         IF DSPEEDP.OUTSPEED = %17 THEN << 110 BAUD >>         <<01994>>05894000
            WA0(TEMP+4).SBS := 1; << SET TWO STOP BITS >>      <<01994>>05896000
         TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;               <<00637>>05898000
         X:=ABS(S0*4+3).IDLESIO;                               <<00637>>05900000
         IF <> THEN SUDDENDEATH(209);                          <<00637>>05902000
         TOS := SYSDB + TEMP + WRTSPD;                         <<01994>>05904000
         STARTSIO;                                             <<00637>>05906000
      END;                                                     <<00637>>05908000
      CHECKSERV:=TRUE;   <<GO SERVICE NEW REQUEST>>                     05910000
   END;       <<-----------END OF ONLINE------------>>                  05912000
                                                                        05914000
                                                                        05916000
                                                                        05918000
                                                                        05920000
                                                                        05922000
SUBROUTINE RETURNWRTIOQ ;                                               05924000
BEGIN                                                                   05926000
   RETURNBUFS;       <<RETURN ANY OUTSTANDING TBUFS>>                   05928000
   X:=@IOQP;                                                            05930000
   IF <> THEN                                                           05932000
      IF %30<=RQSTATE<=%37 THEN                                         05934000
      BEGIN          <<WRITE RQST NOT COMPLETED DUE TO DATA STILL       05936000
                       BEING TANKED>>                                   05938000
         QWBCTP:=0;                                                     05940000
         SETSTATUS(ABORTED); <<RETURN IOQ,SET FLAG TO                   05942000
                                         SERVICE NEXT IOQ>>             05944000
      END;                                                              05946000
   END;        <<---------END OF RETURNWRTIOQ---------->>               05948000
                                                                        05950000
                                                                        05952000
SUBROUTINE RESET'SPEC'CHAR;                                    <<02864>>05954000
   BEGIN                                                       <<02864>>05956000
   TEMP := WA0(DITP(DILTP)+ISIOP);                             <<02864>>05958000
   WA0(TEMP+12) := %15412;  << ESCAPE AND LINE FEED >>         <<02864>>05960000
   WA0(X:=X+1) := ";:";                                        <<02864>>05962000
   WA0(TEMP + NEWSPECCHAR) := [8/4, 8/5]; << SET SPEC CHAR  >> <<02864>>05964000
   WA0(X:=X+1) := 4;  << FOUR CHARACTERS TO ADD >>             <<02864>>05966000
   WA0(X:=X+1) := 1;  << TERMINATION JUMP OF ZERO >>           <<02864>>05968000
   WA0(X:=X+1) := [1/1,1/0,1/1,3/0,10/0]; << LEFT BYTE, UPD >> <<02864>>05970000
   WA0(X:=X+1) := SYSDB+TEMP+12;                               <<02864>>05972000
   WA0(X:=X+1) := [8/1,1/1,7/2]; << INTERRUPT HALT TO CPVA 2>> <<02864>>05974000
   WA0(X:=X+1) := 10;  << DONE RESETTING CHAR SET >>           <<02864>>05976000
   TOS := WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                   <<02864>>05978000
   X := ABS(S0*4 + 3).IDLESIO;                                 <<02864>>05980000
   IF <> THEN SUDDENDEATH(209);                                <<02864>>05982000
   TOS := SYSDB + TEMP + NEWSPECCHAR;                          <<02864>>05984000
   STARTSIO;                                                   <<02864>>05986000
   END;                                                        <<02864>>05988000
                                                                        05990000
                                                                        05992000
SUBROUTINE SERVTO(TO'TYPE); VALUE TO'TYPE; INTEGER TO'TYPE;    <<01822>>05994000
BEGIN                                                                   05996000
   IF TO'TYPE = READTO THEN STOPTIMEOUT(READTIMEOUT, DITP)     <<01822>>05998000
                       ELSE STOPTIMEOUT(BLOCKTIMEOUT, DITP);   <<01822>>06000000
   DISABLE;                                                             06002000
   IF TO'TYPE = READTO THEN DITP(DRTMAX) := 0                  <<01822>>06004000
                       ELSE DITP(DBTIME) := 0;                 <<01822>>06006000
   X:=@IOQP;                                                            06008000
   IF <> AND QMISCP.RSTATE=READING AND QMISCP.READSTOP<READTOSTOP THEN  06010000
   BEGIN                                                                06012000
      TOS:=QMISCP;                                                      06014000
      TOS.READSTOP := IF TO'TYPE = READTO THEN READTOSTOP      <<01822>>06016000
                                          ELSE BLOCKTOSTOP;    <<01822>>06018000
      TOS.NOSTOP:=1;              <<NO MORE PREEMPTS,ABORTS ACCEPTED>>  06020000
      QMISCP:=TOS;                                                      06022000
      IF NOT DMODEMPL.RDCOUNTED THEN                                    06024000
      BEGIN           <<STOP NON-BLOCKMODE READ>>                       06026000
         HALTSIO;  <<HALT SIO PROG>>                           <<04244>>06030000
            RESET'SPEC'CHAR; << RE-ENABLE FOUR SPEC CHARS >>   <<02864>>06032000
            ENABLE;   <<SIO PROG WAS HALTED SUCCESSFULLY>>              06034000
            DTYPEP.TIMING:=0;                                           06036000
            IF <> THEN                                                  06038000
            BEGIN     <<TIME AT START OF READ HAS BEEN RECORDED>>       06040000
               TOS:=TIMER-DITPD(DRTIMED);                               06042000
               TOS:=10;                                                 06044000
               ASMB(LDIV,DEL);  <<DIVIDE MSEC BY 10 TO GET HUNDREDTHS   06046000
                                  OF A SECOND>>                         06048000
               IF OVERFLOW THEN                                         06050000
               BEGIN  <<READ TIME TOO LARGE>>                           06052000
                  DEL;                                                  06054000
                  TOS:=-1;                                              06056000
               END;                                                     06058000
               DITP(DRTIME):=TOS;                                       06060000
            END;                                                        06062000
            IF DITP(DTRLX).READTRLX<>0 THEN                             06064000
            BEGIN                                                       06066000
               DITP(DRTMAX):=0;                                         06068000
               STOPTIMEOUT(READTIMEOUT,DITP);                           06070000
            END;                                                        06072000
            DISABLE;                                           <<04242>>06074000
            DITP.PAIR:=1;   <<ME AND YOU,ME AND YOU,BABE!>>             06076000
            ENABLE;                                            <<04242>>06078000
            IF = OR DTYPEP.PAIRCODE<>XOFFPAIR THEN                      06080000
               DTYPEP.PAIRCODE:=NOTREADING;                             06082000
            DMODEMP.PRIMED:=0;                                          06084000
            RETURNBUFS;                                                 06086000
            <<********CHECKTQUEUE********>>                             06088000
            IOQP.READERRORS := TO'TYPE;                        <<01822>>06090000
            QWBCTP:=0;                                                  06092000
            DISABLE;                                           <<04242>>06094000
            DITP.DSTATE:=NULL;                                          06096000
            ENABLE;                                            <<04242>>06098000
            IF DMODEMPL.NOSYNC THEN DITP(DSYNC):=80;                    06100000
            IF TO'TYPE = READTO THEN SETSTATUS(TIMEDOUT)       <<01822>>06102000
                                ELSE SETSTATUS(BLOCKTIMED);    <<01822>>06104000
                                                               <<04244>>06106000
      END;                                                              06108000
   END;                                                                 06110000
END;        <<------------END OF READTO------------->>                  06112000
                                                                        06114000
                                                                        06116000
                                                                        06118000
                                                                        06120000
                                                                        06122000
SUBROUTINE SERVDSETRDY;                                                 06124000
BEGIN                                                                   06126000
   IF DSAVEPL.NOTLOGON THEN                                    <<02861>>06128000
      BEGIN                                                    <<02861>>06130000
      DSAVEPL.NOTLOGON := 0;                                   <<02861>>06132000
      STOPTIMEOUT(LOGONTO, DITP);                              <<02861>>06134000
      CHECKSERV := TRUE;                                       <<02861>>06136000
      RETURN;                                                  <<02861>>06138000
      END;                                                     <<02861>>06140000
   IF DITP(DSAVE).HSTATE=0 AND LPDT(LDEV*2+1).ACCEPTING<>0 AND <<01046>>06142000
   NOT DITPL(DSAVE).CCON THEN                                  <<01046>>06144000
   BEGIN                                                                06146000
      DITP(DSAVE).HSTATE:=LOGGINGON;                                    06148000
      STARTTIMEOUT (LOGONTO,DITP);                                      06150000
   END;                                                                 06152000
   IF DMODEMPL&CSL(M202) THEN                                           06154000
   BEGIN     <<TURN 202 AROUND TO SEND STATE>>                          06156000
      MODCONTROL(WRITING,DITP);   <<CLEAR SA>>                          06158000
      MODCONTROL(TRANSMIT,DITP);  <<RAISE CA>>                          06160000
      DELAY (2000D);              <<LET CF RISE AT TERMINAL>>           06162000
      MODCONTROL(READING,DITP);   <<DROP CF AT TERMINAL>>               06164000
      WHILE DITPL.MODACTIVE DO;                                <<01932>>06166000
      STOPSPDSEN;                                              <<01932>>06168000
      DSPEEDP.RESTSPD := 0;                                    <<01932>>06170000
      IDLEWAIT(DITP);             << START SPEEDSENSE      >>  <<01932>>06172000
   END                                                                  06174000
      ELSE                                                              06176000
   BEGIN                                                       <<00848>>06178000
      DISABLE;                                                 <<00848>>06180000
      IF NOT DCNTRLPL.SPDSIO THEN IDLEWAIT(DITP);              <<00848>>06182000
      ENABLE;                                                  <<00848>>06184000
   END;                                                        <<00848>>06186000
   CHECKSERV:=TRUE;                                                     06188000
END;    <<------------END OF SERVDSETRDY--------------------->>         06190000
                                                                        06192000
                                                                        06194000
                                                                        06196000
                                                                        06198000
                                                                        06200000
SUBROUTINE INITERM;                                                     06202000
BEGIN                                                                   06204000
   DISABLE;                                                             06206000
   DITP(DMONTR).CFAILCNT:=0;  <<CLR CF FAIL COUNTER>>                   06208000
   DMODEMP:=DMODEMPL LAND %70000;                              <<00848>>06210000
   <<CLR PREMPT,NOSYNC,RD/WRTCOUNTED,PRIMED,TMODE,LPLEVEL>>             06212000
   DITP(DSAVE).(0:15):=0;     <<CLR HSTATE,WAITEDSTATE>>       <<01046>>06214000
   DCNTRLP.PTYON:=0;                                                    06216000
   DTYPEP.TTYPE:=DLASTP.TERMINALTYPE;                                   06218000
   IF DMODEMPL&CSL(M202) THEN                                           06220000
   BEGIN                                                                06222000
      MODCONTROL(INITDSET,DITP);                                        06224000
   END                                                                  06226000
      ELSE                                                              06228000
   BEGIN                                                                06230000
      IF DITP.DSTATE=NULL THEN                                          06232000
      BEGIN                                                             06234000
         STOPSPDSEN ;                                                   06236000
         DSPEEDP.RESTSPD:=0;                                            06238000
         IF DMODEMP.MTYPE=1 OR DMODEMP.MTYPE=5 THEN            <<01534>>06240000
                 MODCONTROL(INITDSET,DITP) <<NON-SPEEDSEN>>    <<01534>>06242000
            ELSE                                               <<00848>>06244000
         IDLEWAIT(DITP);                                                06246000
      END;                                                              06248000
   END;                                                                 06250000
                                                                        06252000
   CHECKSERV:=TRUE;  <<SERVICE NEXT OR FINISH OFF CURRENT RQST>>        06254000
END;     <<----------END OF INITERM------------------->>                06256000
                                                                        06258000
                                                                        06260000
                                                                        06262000
                                                                        06264000
                                                                        06266000
SUBROUTINE SERVHANGUPTO;                                                06268000
BEGIN                                                                   06270000
   STOPTIMEOUT(HANGUPTO,DITP);                                          06272000
   IF DITP(DSAVE).HSTATE=HANGUPTURN THEN                                06274000
   BEGIN          <<202 TURN TO READ IS COMPLETED>>                     06276000
      MODCONTROL(HANGUP,DITP);                                          06278000
      DITP(DSAVE).HSTATE:=HANGINGUP;                                    06280000
      STARTTIMEOUT(HANGUPTO,DITP);                                      06282000
      CHECKSERV:=TRUE;                                                  06284000
   END                                                                  06286000
      ELSE                                                              06288000
      INITERM;                                                          06290000
END;                                                                    06292000
                                                                        06294000
                                                                        06296000
                                                                        06298000
                                                                        06300000
                                                                        06302000
SUBROUTINE SERVDISCNCT;                                        <<02860>>06306000
BEGIN                                                                   06308000
   IF DITP(DSAVE).HSTATE < HANGUPTURN THEN                              06310000
  BEGIN                                                                 06312000
   DISABLE;                                                             06314000
   HALTSIO;  <<HALT SIO PROG>>                                 <<04244>>06318000
   RESET'SPEC'CHAR; << RE-ENABLE THE FOUR SPECIAL CHARS >>     <<02864>>06320000
                                                               <<04242>>06322000
   TOS:=DITPL LAND %176200;                                             06324000
   TOS.PAIR:=0;                                                         06326000
   DITP:=TOS;                                                           06328000
   ENABLE;                                                     <<04242>>06330000
    DTYPEP.WAITXON := 0;                                       <<01464>>06332000
   DTYPEP.PAIRCODE:=NOTREADING;                                         06334000
   CLEANUP;                                                             06336000
   X:=DITP(DRPTR);                                                      06338000
   WHILE <> DO                                                          06340000
   BEGIN          <<RETURN ANY SAVED TBUFS>>                            06342000
      TOS:=X;                                                           06344000
      X:=WA0(X);                                                        06346000
      RETURNTBUF(*);                                                    06348000
   END;                                                                 06350000
   DITP(DRPTR):=0;                                                      06352000
   DISABLE;                                                             06354000
   DITP(DLDEV).FLUSH:=0;                                                06356000
   TOS:=DSPEEDP;                                                        06358000
   TOS.TAPEMODE:=0;                                                     06360000
   TOS.ECHO:=1;                                                         06362000
   TOS.SSBRKOK:=0;                                                      06364000
   TOS.BRKOK:=0;                                                        06366000
   DSPEEDP:=TOS;                                                        06368000
   TOS:=LPDTD(LDEV);                                                    06370000
   TOS := TOS LAND %173017;<<CLEAR EOF,(SS)BRK,LOGON)>>        <<02860>>06372000
   LPDTD(X):=TOS;                                                       06374000
   ENABLE;                                                              06376000
                                                               <<01449>>06378000
   IF DITP(DSAVE).HSTATE <> CLOSED AND                         <<02872>>06382000
      DITP(DMONTR).LOGONTYPE <> NULL THEN                      <<02872>>06384000
   BEGIN                                                       <<02872>>06386000
       X:=PINWORD.MAINPIN*PCBSIZE;                             <<02872>>06388000
       IF <> THEN                                              <<02872>>06390000
       BEGIN                                                   <<02872>>06392000
          DISABLE;                                             <<02872>>06394000
          IF PCB(X:=X+PCB9)<0 THEN    <<ALIVE>>                <<02872>>06396000
       << CHANGE FROM SETING SOFTKILL BIT TO ABORTING JOB >>   <<02872>>06398000
       << WILL ABORT ALL I/O ASSOCIATED WITH PROCESS AND >>    <<02872>>06400000
       << THEN SOFT KILL PROCESS.   3/80 >>                    <<02872>>06402000
               BEGIN                                           <<02872>>06404000
               ENABLE;                                         <<02872>>06406000
               TOS := GETSIR (JMATSIR);                        <<02872>>06408000
               RESETDB (-1);                                   <<02872>>06410000
               TOS := EXCHANGEDB (JMATDST);                    <<02872>>06412000
               ABORTJOB (X/PCBSIZE);                           <<02872>>06414000
               ASSEMBLE (ZERO,XCH);                            <<02872>>06416000
               TOS := EXCHANGEDB (*);                          <<02872>>06418000
               ASSEMBLE (PCAL SETSYSDB);                       <<02872>>06420000
               TOS := JMATSIR;                                 <<02872>>06422000
               ASSEMBLE (DELB,XCH);                            <<02872>>06424000
               RELSIR (*,*);                                   <<02872>>06426000
               END;                                            <<02872>>06428000
       END;                                                    <<02872>>06430000
   END;                                                        <<02872>>06432000
      DISABLE;                                                          06434000
      DITP.UP:=0;                                                       06436000
      DITP(DMONTR).LOGONTYPE := 0;  << CLEAR LOGONTYPE >>      <<01449>>06438000
      IF (DMODEMP.MTYPE).(14:2)<>0 AND DMODEMP.MTYPE<>4 THEN   <<01534>>06440000
      BEGIN    <<HANGUP MODEM>>                                         06442000
         IF DMODEMPL&CSL(M202) THEN                                     06444000
         BEGIN                                                          06446000
                                                               <<01668>>06448000
            DITP(DSAVE).HSTATE:=HANGUPTURN;                    <<01668>>06450000
            MODCONTROL(READING,DITP);                          <<01668>>06452000
         END                                                            06454000
            ELSE                                                        06456000
         BEGIN                                                          06458000
                                                               <<01668>>06460000
            DITP(DSAVE).HSTATE:=HANGINGUP;                     <<01668>>06462000
            MODCONTROL(HANGUP,DITP);                           <<01668>>06464000
         END;                                                           06466000
                                                               <<01668>>06468000
         STARTTIMEOUT(HANGUPTO,DITP);                                   06470000
         CHECKSERV:=TRUE;                                               06472000
      END                                                               06474000
         ELSE                                                           06476000
         INITERM;                                                       06478000
  END;                                                                  06480000
END;         <<-------------------END OF SERVDISCNCT-------------->>    06482000
                                                                        06484000
SUBROUTINE SERVCFAILTO;                                                 06486000
BEGIN                                                                   06488000
   STOPTIMEOUT(CFAILTO,DITP);                                           06490000
   IF NOT DMODEMPL&CSL(M202) OR DMODEMP.CBSB=2 OR DMODEMP.CFCB=0        06492000
      THEN SERVDISCNCT                                         <<02860>>06494000
      ELSE                                                              06496000
   BEGIN                                                                06498000
      DISABLE;                                                          06500000
      X:=@IOQP;                                                         06502000
      IF <> AND IOQPL.ABORTBIT THEN ABORTIOQ                            06504000
         ELSE                                                           06506000
      BEGIN                                                             06508000
         IF DITP.DSTATE=TURN202 THEN                                    06510000
         BEGIN                                                          06512000
            DITP(DCNTRL).SPDSIO:=0;                                     06514000
            IF <> THEN                                                  06516000
            HALTSIO;  <<HALT SIO PROG>>                        <<04244>>06520000
            MODCONTROL(TRANSMIT,DITP);                                  06522000
            DELAY(2000D);  <<WAIT FOR CF TO RISE AT TERMINAL>>          06524000
            MODCONTROL(READING,DITP);   <<DROP CF>>                     06526000
         END;                                                           06528000
         CHECKSERV:=TRUE;                                               06530000
      END;                                                              06532000
   END;                                                                 06534000
END;     <<----------------END OF SERVCFAILTO------------------->>      06536000
                                                                        06538000
                                                                        06540000
                                                                        06542000
                                                                        06544000
SUBROUTINE SERVTURNTO;                                                  06546000
BEGIN                                                                   06548000
   STOPTIMEOUT(TURNTO,DITP);                                            06550000
   DISABLE;                                                             06552000
   X:=@IOQP;                                                            06554000
   IF <> AND IOQPL.ABORTBIT THEN ABORTIOQ                               06556000
      ELSE                                                              06558000
   BEGIN                                                                06560000
      IF DITP.DSTATE=TURN202 THEN                                       06562000
      BEGIN                                                             06564000
         STARTTIMEOUT(TURNTO, DITP);                           <<02861>>06566000
         IF DITPL(DSAVE).TURNTOWRITE THEN                      <<02861>>06568000
              MODCONTROL(READING, DITP)                        <<02861>>06570000
         ELSE MODCONTROL(WRITING, DITP);                       <<02861>>06572000
         DSAVEPL.TURNTOWRITE := NOT DSAVEPL.TURNTOWRITE;       <<02861>>06574000
         ENABLE;                                               <<02861>>06576000
      END;                                                              06578000
      CHECKSERV:=TRUE;                                                  06580000
   END;                                                                 06582000
END;     <<---------------------END OF SERVTURNTO---------------->>     06584000
                                                                        06586000
                                                                        06588000
                                                                        06590000
                                                                        06592000
                                                                        06594000
                                                                        06596000
SUBROUTINE SERV2640TO ;                                                 06598000
BEGIN                                                                   06600000
   STOPTIMEOUT(HP2640TO,DITP);                                          06602000
   <<*************CHECKTQUEUE*********************>>                    06604000
    IF HP2631B THEN                                            <<04869>>06606000
      BEGIN  << STATUS REQUEST TIMED OUT >>                    <<01464>>06608000
      IF NOT IOMESSAGE (1,NOTRDYMSG, %10000,                   <<01464>>06610000
      DITP(DLDEV).DLDEVN,,,,,OPCONSOLE) THEN                   <<01464>>06612000
      BEGIN    END;   << NO SYSTEM MESSAGE BUFFER >>           <<01464>>06614000
      STATREQ :=0;                                             <<01464>>06616000
      IF = THEN << MUST BE XOFF TIME OUT >>                    <<04869>>06618000
         RETURN;<< SO DON'T DISCONNECT   >>                    <<04869>>06620000
      STATDONE := 0;                                           <<01464>>06622000
      << DISCONNECT & RETURN >>                                <<01464>>06624000
      IF @IOQP<>0 THEN SETSTATUS(OFFLINE);                     <<01464>>06626000
     DBCNTP := 0;  << CLEAR PAST WRITE COUNT >>                <<01464>>06628000
      SERVDISCNCT;                                             <<02860>>06630000
      RETURN;                                                  <<01464>>06632000
      END;                                                     <<01464>>06634000
   DISABLE;                                                             06636000
   DITP.ENQACKWAIT:=0;                                                  06638000
   IF <> AND DITP.DSTATE=WRITING THEN                                   06640000
   BEGIN                                                       <<00328>>06642000
      <<RESTART PAUSED WRITE>>                                 <<00328>>06644000
      IF DTYPEP.TTYPE=TERMT15 OR DTYPEP.TTYPE=TERMT16 THEN     <<00328>>06646000
      BEGIN                                                    <<00328>>06648000
         DITP.ENQACKWAIT:=1;  <<2635 POSSIBLY OUT OF PAPER>>   <<00328>>06650000
         TEMP:=WA0(DITP(DILTP)+ISIOP);                         <<00328>>06652000
         X:=TEMP+WRTDATAINSTR+1;                               <<00328>>06654000
         WA0(X):=1;           <<WRITE 1 BYTE>>                 <<00328>>06656000
         WA0(X:=X+1):=1;                                       <<00328>>06658000
         WA0(X:=X+1):=[1/1,1/1,1/1,13/0];  <<RIGHT BYTE>>      <<00328>>06660000
         WA0(X:=X+1):=SYSDB+TEMP+3; <<BUFFER ADDRESS OF ENQ>>  <<00328>>06662000
         HALTSIO;  <<HALT SIO PROG>>                           <<04244>>06666000
         STARTTIMEOUT(HP2640TO,DITP);                          <<00328>>06668000
         TOS := WA0(DITP(DILTP) + ICNTRL).DRTNUMBER;           <<04244>>06670000
         X:=ABS(S0*4+3).IDLESIO;                               <<00328>>06672000
         IF <> THEN SUDDENDEATH(209);                          <<00328>>06674000
         TOS:=SYSDB+TEMP+XMITON;                               <<00328>>06676000
         STARTSIO;                                             <<00328>>06678000
         IF < THEN ABS(O1*4+3):=0;                             <<00479>>06680000
      END                                                      <<00328>>06682000
         ELSE                                                  <<00328>>06684000
    BEGIN                                                      <<00328>>06686000
      DBCNTP:=DBCNTP-DITP(DCNT);  <<UPDATE NO. OF BYTES REMAINING       06688000
                                    TO BE WRITTEN>>                     06690000
         IF <= THEN                                            <<00328>>06692000
      BEGIN                                                    <<00328>>06694000
         TOS:=DITP(DHEAD);       DITP(X):=0;                   <<00328>>06696000
         RETURNTBUF(*);                                        <<00328>>06698000
         DTANKBP:=0;                                           <<00328>>06700000
         DBCNTP:=0;                                            <<00328>>06702000
         DITP(DPNTR):=0;                                       <<00328>>06704000
         DITP.DSTATE:=NULL;                                    <<00328>>06706000
         DMODEMP.WRTCOUNTED:=0;                                <<00328>>06708000
         IF <> THEN WRTCOUNTER:=WRTCOUNTER-1;                  <<00328>>06710000
         HALTSIO;  <<HALT SIO PROG>>                           <<04244>>06714000
         IDLEWAIT(DITP);                                       <<01990>>06716000
         CHECKSERV:=TRUE;                                      <<00328>>06718000
         RETURN;                                               <<00328>>06720000
     END;                                                      <<00328>>06722000
      O1:=(DITP(DPNTR)+DITP(DCNT));                                     06724000
      TEMP:=TBMAXB-O1;  <<REMAINING ROOM IN CURRENT TBUF>>              06726000
      IF = THEN                                                         06728000
      BEGIN                                                             06730000
         TOS:=DITP(DHEAD);    <<END OF CURRENT TBUF,GET POINTER>>       06732000
         DITP(DHEAD):=WA0(S0);                                          06734000
         RETURNTBUF(*);                                                 06736000
         DITP(DPNTR):=0;  <<RESET POINTER TO WHERE TO START WRITE>>     06738000
         TEMP:=TBMAXB;                                                  06740000
         DTANKBP:=DTANKBP-TBMAXB;   <<UPDATE CNT OF BYTES IN OUT-       06742000
                                      STANDING TBUFS>>                  06744000
      END                                                               06746000
         ELSE                                                           06748000
      DITP(DPNTR):=O1;  <<BYTE OFFSET IN TBUF TO START WRITING>>        06750000
                                                                        06752000
      IF DBCNTP>TEMP THEN DITP(DCNT):=TEMP                              06754000
                     ELSE DITP(DCNT):=DBCNTP; <<NEW BYTE CNT TO WRITE>> 06756000
      TEMP:=WA0(DITP(DILTP)+ISIOP);                                     06758000
      WA0(TEMP+10):=0;            <<CLEAR DATA DUMP AREA>>              06760000
      X:=TEMP+WRTDATAINSTR;                                             06762000
      WA0(X):=[8/4,8/0];                                                06764000
      O1:=X+1;                                                          06766000
      IF DITP(DCNT)>TBMAXB THEN SUDDENDEATH(208);                       06768000
      WA0(  O1  ):=DITP(DCNT);                                          06770000
      WA0(X:=X+1):=1;                                                   06772000
      O1:=X+1;                                                          06774000
      IF LOGICAL(DITP(DPNTR)) THEN                                      06776000
         WA0(O1):=[1/1,1/1,1/1,13/0]  <<START FROM RIGHT BYTE>>         06778000
         ELSE                                                           06780000
         WA0(O1):=[1/1,1/0,1/1,13/0]; <<START FROM RLEFT BYTE>>         06782000
      WA0(O1+1):=SYSDB+DITP(DHEAD)+2+DITP(DPNTR)&LSR(1);                06784000
      WA0(X:=X+1):=[8/1,1/1,7/1];                                       06786000
      WA0(X:=X+1):=1;       <<INTERRUPT/HALT: TBUF EMPTY    >>          06788000
      HALTSIO;  <<HALT SIO PROG>>                              <<04244>>06792000
         TOS := WA0(DITP(DILTP) + ICNTRL).DRTNUMBER;           <<04244>>06794000
         TOS:=SYSDB+TEMP+XMITON;<<ENABLE XMIT,RECV SRQ ;THEN WAIT SRQ>> 06796000
         STARTSIO;                                                      06798000
         IF < THEN ABS(O1*4+3):=0;                             <<00479>>06800000
                                                               <<04244>>06802000
    END;                                                       <<00328>>06804000
   END;                                                                 06806000
END;  <<-----------------END OF HP2640TO------------------->>           06808000
                                                                        06810000
                                                               <<01464>>06812000
                                                               <<01464>>06814000
                                                               <<01464>>06816000
SUBROUTINE CHKSTATSUB;                                         <<01464>>06818000
  BEGIN                                                        <<01464>>06820000
  IF @IOQP=0 THEN RETURN;                                      <<01464>>06822000
  TOS := IOQP(QSTAT).IOSTAT;                                   <<01464>>06824000
  IF = OR FUNCTION=2 THEN S0 := GOODIO;                        <<01464>>06826000
  SETSTATUS(*);                                                <<01464>>06828000
  IF FUNCTION = 4 THEN                                         <<01464>>06830000
    BEGIN << FINISH DISCONNECT >>                              <<01464>>06832000
    DITP(DSAVE).HSTATE := 0;                                   <<01464>>06834000
    QWBCTP := 0;                                               <<01464>>06836000
    SERVDISCNCT;                                               <<02860>>06838000
    END;                                                       <<01464>>06840000
  END;                                                         <<01464>>06842000
                                                               <<01464>>06844000
                                                                        06846000
                                                                        06848000
SUBROUTINE BRKSTOPD ;                                                   06850000
BEGIN                                                                   06852000
   X:=DBCNTP;    <<CHECK IF ANYTHING INPUT YET>>                        06854000
   IF <> AND IOQP.READERRORS=NULL THEN                                  06856000
   BEGIN         <<GET IOQ TO SAVE BROKEN READ DATA FOR RESTART LATER>> 06858000
      TOS:=GETIOQ(0);  <<IMPEDE IF NO IOQ AVAILABLE>>                   06860000
      MOVE PS0:=DBCNTP,(10);   <<SAVE DBCNT,DCNT,DHEAD,DTAIL,DPNTR>>    06862000
      PS0(QLINK):=0;                                                    06864000
      DITP(DBREAK):=TOS;       <<SAVE PNTR TO IOQ CONTAINING BROKEN>>   06866000
      DITP(DHEAD):=0;          <<READ INFORMATION>>                     06868000
      DBCNTP:=0;               <<SO TBUFS WOULD NOT BE RETURNED>>       06870000
   END;                                                                 06872000
   IF IOQP.READERRORS<BRKEND THEN  <<BRKEND=2,LESS THAN 3,4,5,6>>       06874000
      IOQP.READERRORS:=BRKEND;                                          06876000
   QWBCTP:=0;                                                           06878000
   RETURNBUFS;                                                          06880000
   IF DMODEMPL.NOSYNC THEN DITP(DSYNC):=81;                             06882000
   SETSTATUS(BREAKEND);                                                 06884000
END;        <<----------------END OF BRKSTOP----------------->>         06886000
                                                                        06888000
                                                                        06890000
                                                                        06892000
                                                                        06894000
                                                                        06896000
SUBROUTINE RESTARTOPERATION ;                                           06898000
BEGIN                                                                   06900000
   DITP(DSAVE).DELACK:=0;                                               06902000
   DISABLE;                                                             06904000
   IF DITP.DSTATE=WAITED THEN                                           06906000
   BEGIN          <<OPERATION WAS PAUSED DUE TO BRK OR SSBRK RECVD>>    06908000
      TEMP:=DITP(DSAVE).WAITEDSTATE;                                    06910000
      DITP.DSTATE:=NULL;                                                06912000
      I:=WA0(DITP(DILTP)+ISIOP);                                        06914000
      IF TEMP=WRITING THEN                                              06916000
      BEGIN                                                             06918000
         DITP.DSTATE:=WRITING;                                          06920000
         IF DITPL.ENQACKWAIT AND WA0(I+WRTDATAINSTR+1) = 0 OR  <<04243>>06922000
               DTYPEPL.WAITXON                                 <<04243>>06924000
            THEN J1:=SYSDB+I+RDWAIT  <<WAIT FOR ACK BYTE>>              06926000
            ELSE                                                        06928000
         J1:=SYSDB+I+XMITON;  <<SIO PROG RESTART ADDRESS>>     <<00496>>06930000
      END                                                               06932000
         ELSE                                                           06934000
      BEGIN                  <<RESTART PAUSED READ OR IDLEWAIT PROG>>   06936000
         DITP.DSTATE:=TEMP;  <<RESTORE PREVIOUS STATE>>                 06938000
         IF DITP.DSTATE = READING THEN                         <<04236>>06940000
            IF DITPL(DSAVE).BLOCKRD THEN                       <<04236>>06942000
               J1:=SYSDB+I+WAIT2SIO                            <<04236>>06944000
            ELSE J1:=SYSDB+I+RDWAIT                            <<04236>>06946000
         ELSE IF DITP.DSTATE = REPEATING OR                    <<04236>>06948000
                 DITP.DSTATE = WRTSPECL  OR                    <<04236>>06950000
                 DITP.DSTATE = EORSYNC   THEN                  <<04236>>06952000
            J1:=SYSDB+I+XMITON                                 <<04236>>06954000
         ELSE IF DITP.DSTATE = NULL THEN                       <<04236>>06956000
            J1:=SYSDB+I+RDWAIT;                                <<04236>>06958000
         X:=DITP.DSTATE;                                                06960000
         IF = THEN DCNTRLP.SPDSIO:=1; <<SET IDLEWAIT PROG ACTIVE FLG>>  06962000
      END;                                                              06964000
                                                                        06966000
      <<**********IF TEMP=BANDWAIT**************>>                      06968000
                                                                        06970000
      TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                           06972000
      X:=ABS(S0*4+3).IDLESIO;                                           06974000
      IF <> THEN SUDDENDEATH(209);                             <<01539>>06976000
      TOS:=J1;                <<SIO PROG START ADDRESS>>                06978000
      STARTSIO;                                                         06980000
   END;                                                                 06982000
   ENABLE;                                                              06984000
END;  <<---------------END OF RESTARTOPERATION---------------->>        06986000
                                                                        06988000
                                                                        06990000
                                                                        06992000
                                                                        06994000
                                                                        06996000
SUBROUTINE STOPOPERATION(STOPTYPE);                                     06998000
VALUE STOPTYPE;  INTEGER STOPTYPE;                                      07000000
BEGIN                                                                   07002000
   DISABLE;                                                             07004000
   IF DITP.DSTATE=WAITED THEN                                           07006000
   BEGIN       <<PREVIOUS I/O WAS STOPPED PENDING ACTION FROM IOTERM>>  07008000
      HALTSIO;  <<HALT SIO PROG>>                              <<04244>>07012000
      RESET'SPEC'CHAR; << RE-ENABLE THE FOUR SPEC CHARS >>     <<02864>>07014000
      STOPTIMEOUT(HP2640TO,DITP);                                       07016000
      DTYPEP.WAITXON:=0;  <<IN CASE BRK WHEN WAITING FOR XON>> <<00764>>07018000
      TEMP:=DITP(DSAVE).WAITEDSTATE;  <<GET DSTATE BEFORE STOPPED>>     07020000
      IF TEMP=BANDWAIT THEN TEMP:=DCNTRLP.NXTDSTATE;                    07022000
      <<RESTORE DSTATE BEFORE PAUSED FOR LESS BANDWIDTH ACTIVITY   >>   07024000
      DITP.DSTATE:=TEMP;    <<RESTORE DSTATE>>                          07026000
      X:=@IOQP;                                                         07028000
      IF <> AND QMISCP.RSTATE=READWAITING THEN                          07030000
      BEGIN                                                             07032000
         QMISCP:=0;         <<ENABLE BRAND NEW RESTART OF REQUEST>>     07034000
         RQSTATE:=0;                                                    07036000
      END;                                                              07038000
      X:=@IOQP;                                                         07040000
      IF <> AND QMISCP.RSTATE=READING AND QMISCP.READSTOP<STOPTYPE      07042000
      THEN                                                              07044000
      BEGIN      <<CURRENT STOP MORE URGENT,GO AHEAD AND DO IT>>        07046000
         QMISCP.READSTOP:=STOPTYPE;                                     07048000
         QMISCP.RSTATE:=STOPPED;   <<SUPPRESS PREEMPTS AND ABORTS>>     07050000
         IF STOPTYPE=BREAKSTOP AND DITP(DTRLX).READTRLX<>0 AND          07052000
            DITP(DSAVE).HSTATE=ONLINE THEN                              07054000
            SETREADERROR(IOQP,READTO);                                  07056000
         DTYPEP.TIMING:=0;                                              07058000
         IF <> THEN                                                     07060000
         BEGIN   <<FORM READ TIME>>                                     07062000
            TOS:=TIMER-DITPD(DRTIMED);                                  07064000
            TOS:=10;                                                    07066000
            ASMB(LDIV,DEL);  <<DIVIDE MSEC BY 10 TO GET 100THS OF SEC>> 07068000
            IF OVERFLOW THEN                                            07070000
            BEGIN                                                       07072000
               DEL;                                                     07074000
               TOS:=-1;                                                 07076000
            END;                                                        07078000
            DITP(DRTIME):=TOS;                                          07080000
         END;                                                           07082000
         IF DITP(DTRLX).READTRLX<>0 AND DITP(DSAVE).HSTATE=ONLINE THEN  07084000
         BEGIN                                                          07086000
            DITP(DRTMAX):=0;  <<CLEAR USER REQUESTED READ TIME LIMIT>>  07088000
            STOPTIMEOUT(READTIMEOUT,DITP);                              07090000
         END;                                                           07092000
         DITP.PAIR:=1;                                                  07094000
         IF = OR DTYPEP.PAIRCODE<>XOFFPAIR THEN                         07096000
            DTYPEP.PAIRCODE:=NOTREADING;                                07098000
         DMODEMP.PRIMED:=0;                                             07100000
         IF DITPL.NEWLINE OR STOPTYPE=SSBRKSTOP THEN                    07102000
         BEGIN                                                          07104000
            DITP.DSTATE:=NULL;                                          07106000
            IF STOPTYPE=BREAKSTOP THEN BRKSTOPD                         07108000
            <<SAVE BROKEN READ DATA IF NECESSARY,RETURN IOQ W/BRK STAT>>07110000
                                  ELSE                                  07112000
     BEGIN                                                              07114000
      TOS:=ABS(ABS(CPCB)+PCB3).DSTFIELD;                                07116000
           <<GET CURRENT PROCESS STACK DST NUMBER>>                     07118000
      PUSH(Q,DL);      <<A=DL-DB,B=Q-DB>>                               07120000
      TOS:=TOS-TOS+1;  <<GET Q-DL+1>>                                   07122000
      X:=-S0;                                                           07124000
      TOS:=TOS+Q0(X);  <<DST OFFSET OF Q+1=(Q-DL+1)+(DL-A)>>            07126000
      Q1ADDR:=TOS;                                                      07128000
      READDONE                    END;                                  07130000
            <<SSBRK TERMINATED READ,XSFER DATA TO CALLER'S STACK>>      07132000
         END                                                            07134000
            ELSE                                                        07136000
         BEGIN                                                          07138000
            DITP.DSTATE:=EORSYNC;   <<WRITING CR/LF>>                   07140000
            ENABLE;                                                     07142000
            SENDCRLF(NXTNULL,DITP);                                     07144000
         END;                                                           07146000
      END                                                               07148000
         ELSE                                                           07150000
      IF TEMP=WRITING THEN                                              07152000
      BEGIN                                                             07154000
         DITP.ENQACKWAIT:=0;                                            07156000
         RETURNBUFS;                                                    07158000
         DISABLE;                                              <<04242>>07160000
         DITP.DSTATE:=NULL;                                             07162000
         ENABLE;                                               <<04242>>07164000
         CHECKSERV:=TRUE;   <<OK TO SERVICE NEXT IOQ>>                  07166000
      END                                                               07168000
         ELSE                                                           07170000
      CHECKSERV:=TRUE;                                                  07172000
      ENABLE;                                                           07174000
   END;                                                                 07176000
END;  <<------------END OF STOPOPERATION----------------->>             07178000
                                                                        07180000
                                                                        07182000
                                                                        07184000
                                                                        07186000
                                                                        07188000
SUBROUTINE SSBREAK ;                                                    07190000
BEGIN                                                                   07192000
   BREAKSS(LDEV,PINWORD);                                               07194000
   IF = AND DMODEMP.TMODE=NULL THEN                                     07196000
   BEGIN     <<NOT ALREADY IN BRK,STOP RD/WRT & FLUSH REQUESTS>>        07198000
      STOPOPERATION(SSBRKSTOP);                                         07200000
      @THISP:=@IOQP;                                                    07202000
      WHILE <> DO    <<GO DOWN LINKED IOQS AND SET FLUSHED FLAGS>>      07204000
      BEGIN                                                             07206000
         DISABLE;                                                       07208000
         THISP(QMISC).FLUSH:=1;                                         07210000
         @THISP:=THISP(QLINK);        <<STEP TO NEXT IOQ>>              07212000
      END;                                                              07214000
   END                                                                  07216000
      ELSE                                                              07218000
   RESTARTOPERATION ; <<NO CNTRL Y PIN SO SSBRK NOT ALLOWED>>           07220000
   CHECKSERV:=TRUE;                                            <<04240>>07222000
END;        <<-------------END OF SSBREAK--------------->>              07224000
                                                                        07226000
                                                                        07228000
                                                                        07230000
                                                                        07232000
                                                                        07234000
SUBROUTINE BREAK ;                                                      07236000
BEGIN                                                                   07238000
   BREAKJOB(LDEV,PINWORD.MAINPIN);                                      07240000
   IF = THEN     <<BREAK ACCEPTED,STOP CURRENT OPERATION>>              07242000
   BEGIN                                                                07244000
      DITP(DLDEV).FLUSH:=1;                                             07246000
      STOPOPERATION(BREAKSTOP);                                         07248000
   END                                                                  07250000
      ELSE                                                              07252000
   RESTARTOPERATION ;     <<BREAK REFUSED>>                             07254000
   CHECKSERV:=TRUE;                                            <<04240>>07256000
END;          <<-------------END OF BREAK---------------->>             07258000
                                                                        07260000
                                                                        07262000
                                                                        07264000
SUBROUTINE SERVSPOOLSW;                                                 07266000
BEGIN                                                                   07268000
   X:=@IOQP;                                                            07270000
   IF <> THEN WRTSPOOLBUF(DITP(DHEAD));                                 07272000
   CHECKSERV:=TRUE;                                                     07274000
END;                                                                    07276000
                                                                        07278000
                                                                        07280000
                                                                        07282000
SUBROUTINE SERVSPOOLEND;                                                07284000
BEGIN                                                                   07286000
   X:=@IOQP;                                                            07288000
   IF = THEN CHECKSERV:=TRUE                                            07290000
      ELSE                                                              07292000
   BEGIN                                                                07294000
      WRTSPOOLBUF(DITP(DCNT));                                          07296000
      QWBCTP:=0;                                                        07298000
      DISABLE;                                                          07300000
      IF DMODEMPL.NOSYNC THEN DITP(DSYNC):=80;                          07302000
      RETURNBUFS;                                                       07304000
      SETSTATUS(READSTATUS(IOQP.READERRORS));                           07306000
   END;                                                                 07308000
END;                                                                    07310000
                                                                        07312000
                                                                        07314000
                                                                        07316000
SUBROUTINE SERVLOGONTO;                                                 07318000
BEGIN                                                                   07320000
   STOPTIMEOUT (LOGONTO,DITP);                                          07322000
   IF DSAVEPL.NOTLOGON THEN                                    <<02861>>07324000
      BEGIN                                                    <<02861>>07326000
      DSAVEPL.NOTLOGON := 0;                                   <<02861>>07328000
      SETSTATUS(OFFLINE);                                      <<02861>>07330000
      END                                                      <<02861>>07332000
   ELSE                                                        <<02861>>07334000
      SERVDISCNCT;                                             <<02861>>07336000
END;                                                                    07338000
                                                                        07340000
                                                                        07342000
                                                                        07344000
                                                                        07346000
                                                                        07348000
SUBROUTINE SERVDRQST ;                                                  07350000
BEGIN                                                                   07352000
   DISABLE;                                                             07354000
   TOS:=DRQSTP;                                                         07356000
   ASMB(SCAN 0);                                                        07358000
   DEL;                                                                 07360000
   TOS:=DRQSTP;        <<GET SERVICE REQUEST FLAGS>>                    07362000
   ASMB(TRBC 0, X);    <<CLEAR SERVICE REQUEST FLAG>>                   07364000
   DRQSTP:=TOS;                                                         07366000
   ENABLE;                                                              07368000
   CASE X OF                                                            07370000
   BEGIN               <<GO SERVICE THE CRY BABY>>                      07372000
      SERVHANGUPTO;       <<----HANGUPTO>>                              07374000
      SERVDISCNCT;        <<----DISCNCT>>                      <<02860>>07376000
      SERVCFAILTO;        <<----CFAIL>>                                 07378000
      SERVTURNTO;         <<----TURNTO>>                                07380000
      SERV2640TO ;<<ACKWAIT AFTER ENQ TIMED OUT,RESTART WRT>>           07382000
      RETURNWRTIOQ ;                                                    07384000
                          <<WRT SIO PROG HAS BEEN STOPPED & ABORTED>>   07386000
      SERVSPOOLSW;        <<SPOOLING;SBUF IS FULL>>                     07388000
      SERVSPOOLEND;       <<END OF PTAPE SPOOLING>>                     07390000
      SERVTO(READTO);  <<A READ OPERATION HAS BEEN TIMED OUT>> <<01822>>07392000
      SERVONLINE ;  <<CR HAS BEEN RECEIVED AND SPEEDSENSED>>            07394000
      SERVDSETRDY;        <<----DSETREADY>>                             07396000
      SERVLOGONTO;        <<----LOGONTO>>                               07398000
      BREAK ;   <<BREAK HAS BEEN DETECTED>>                             07400000
      SSBREAK ; <<CNTRL Y OR SSBRK HAS BEEN DETECTED>>                  07402000
      SERVTO(BLOCKTO); <<BLOCK MODE DIDN'T COMPLETE IN TIME>>  <<01822>>07404000
      CHKSTATSUB;  << 2631 WRITE COMPLETE >>                   <<01464>>07406000
   END;                                                                 07408000
END;  <<-----------------END OF SERVDRQST---------------->>             07410000
                                                                        07412000
                                                                        07414000
                                                                        07416000
                                                                        07418000
                                                                        07420000
SUBROUTINE ABORTSTPD ;                                                  07422000
BEGIN                                                                   07424000
   RETURNBUFS;       <<RETURN ANY OUTSTANDING TBUFS>>                   07426000
   QWBCTP:=0;                                                           07428000
   SETSTATUS(ABORTED);                                                  07430000
END;                                                                    07432000
                                                                        07434000
                                                                        07436000
                                                                        07438000
SUBROUTINE TIMEOUTSTOP ;                                                07440000
BEGIN                                                                   07442000
   RETURNBUFS;      <<THE LORD GIVETH,THE LORD TAKETH AWAY>>            07444000
   IF IOQP.READERRORS<READTO THEN                                       07446000
      IOQP.READERRORS:=READTO;                                          07448000
   QWBCTP:=0;                                                           07450000
   DISABLE;                                                             07452000
   IF DMODEMPL.NOSYNC THEN DITP(DSYNC):=80;                             07454000
   SETSTATUS(TIMEDOUT);                                                 07456000
END;                                                                    07458000
                                                                        07460000
                                                                        07462000
                                                                        07464000
                                                                        07466000
SUBROUTINE PRMPTSTOPD ;                                                 07468000
BEGIN                                                                   07470000
   RETURNBUFS;    <<REQUEST PREEMPTED,DON'T SAVE DATA ALREADY READ>>    07472000
   QMISCP:=0;    <<RESET RSTATE FOR BRAND NEW RESTART LATER>>           07474000
   CHECKSERV:=TRUE;   <<GO BACK AND RE-ORDER IOQS ACCORDING TO PREEMPT  07476000
                        LEVEL>>                                         07478000
END;                                                                    07480000
                                                                        07482000
                                                                        07484000
                                                                        07486000
                                                                        07488000
                                                                        07490000
SUBROUTINE SERVSTOPPED ;                                                07492000
BEGIN       <<I/O OPERATION WAS STOPPED,GO CLEAN UP>>                   07494000
   X:=QMISCP.READSTOP-1;                                                07496000
   CASE X OF                                                            07498000
   BEGIN                                                                07500000
      BRKSTOPD ;  <<BRK DETECTED AND ALLOWED>>                          07502000
      READDONE ;  <<SSBRK DETECTED AND ALLOWED>>                        07504000
      PRMPTSTOPD ;<<CURRENT REQUEST HAS BEEN PREEMPTED>>                07506000
      TIMEOUTSTOP ;<<READ OPERATION HAS BEEN TIMED OUT>>                07508000
      ABORTSTPD ; <<CURRENT REQUEST HAS BEEN ABORTED>>                  07510000
   END;                                                                 07512000
END;                                                                    07514000
                                                                        07516000
                                                                        07518000
                                                                        07520000
                                                                        07522000
                                                                        07524000
SUBROUTINE SERVPREMPT;                                                  07526000
BEGIN                                                                   07528000
   ENABLE;                                                              07530000
   CONTINUE:=TRUE;                                                      07532000
   @THISP:=@IOQP;                                                       07534000
   NPL:=0;       <<INITIALIZE THE NEW PREMPT LEVEL>>                    07536000
   WHILE <> DO                                                          07538000
   BEGIN         <<SEARCH FOR THE MOST PREMPTIVE REQUEST>>              07540000
      IFLAG:=THISP.RPLEVEL;  <<SET THE RQST PREMPT LEVEL>>              07542000
      IF IFLAG=CONSMODE AND NOT DMODEMPL.CMODE THEN                     07544000
         <<NORMAL RQST QUEUED WHEN TERMINAL WAS IN CONSOLE MODE>>       07546000
         THISP.RPLEVEL:=NULL   <<RESET PREMPT LEVEL TO NORMAL>>         07548000
      ELSE                                                              07550000
      IF IFLAG>NPL THEN    << A MORE PREMPTIVE REQUEST>>                07552000
      BEGIN                                                             07554000
         NPL:=THISP.RPLEVEL;  <<SET NEW HIGHEST PREMPT LEVEL>>          07556000
         SAVEPS:=THESEPS;     << SAVE THISP AND LASTP>>                 07558000
      END;                                                              07560000
      @LASTP:=@THISP;                                                   07562000
      @THISP:=THISP(QLINK);   <<GET NEW IOQ>>                           07564000
   END;                                                                 07566000
                                                                        07568000
   DISABLE;                                                             07570000
   TOS:=NPL;    <<GET THE HIGHEST PREMPT LEVEL AMONG PENDING RQSTS>>    07572000
   IF = THEN DMODEMP.PREMPT:=0;   <<NO PREMPTIVE REQUEST>>              07574000
   IF TOS>IOQP.RPLEVEL THEN       <<1ST REQUEST HAS BEEN PREMPTED>>     07576000
   BEGIN                                                                07578000
      CONTINUE:=FALSE;            <<TOO MUCH OF A GOOD THING>>          07580000
      IFLAG:=QMISCP.RSTATE;                                             07582000
      IF = OR IFLAG=READWAITING THEN                                    07584000
      BEGIN   <<NEW RQST OR READ HAS NOT BEEN STARTED,JUST RELINK>>     07586000
         QMISCP:=0;      <<RESET RSTATE FOR LATER RESTART>>             07588000
         DITP(DIOQP):=@STHISP;   <<LINK HIGHEST PREMPTIVE TO DIT>>      07590000
         SLASTP(QLINK):=STHISP(QLINK);                                  07592000
         <<RELINK REST OF IOQS TO THE ONE IMMEDIATELY PRECEDING>>       07594000
         STHISP(QLINK):=@IOQP;   <<LINK ALL IOQS TO THE NEW HEAD>>      07596000
         CHECKSERV:=TRUE;        <<SERVICE NEW HEAD OF IOQS>>           07598000
      END                                                               07600000
         ELSE                                                           07602000
      BEGIN        <<I/O ALREADY IN PROGRESS>>                          07604000
         CHECKSERV:=FALSE;       <<DO NOT SERVICE NEW IOQ>>             07606000
         IF IFLAG=READING THEN   <<GET COUNT OF BYTES ALREADY READ>>    07608000
         BEGIN                                                          07610000
            J1:=WA0(DITP(DILTP)+ISIOP);  <<SIO PROG STARTING ADDR>>     07612000
               J1:=DBCNTP+DITP(DCNT)-WA0(J1+RDDATAINSTR+1);             07614000
         END;                                                           07616000
         IF NPL>=SOFTPREMPT AND ( > OR J1=0) THEN                       07618000
         <<HARD PREMPT OR SOFT PREMP AND NOTHING INPUT YET>>            07620000
         IF IFLAG=READING AND QMISCP.READSTOP<PREMPTSTOP THEN           07622000
         BEGIN                                                          07624000
            TOS:=QMISCP;                                                07626000
            TOS.READSTOP:=PREMPTSTOP;                                   07628000
            TOS.NOSTOP:=1;                                              07630000
            QMISCP:=TOS;                                                07632000
            IF NOT DMODEMPL.RDCOUNTED THEN                              07634000
            BEGIN         <<DEV NOT PERFORMING BLOCKMODE READ>>         07636000
               HALTSIO;  <<HALT SIO PROG>>                     <<04244>>07640000
                  <<SIO PROGRAM HALTED SUCCESSFULLY>>                   07642000
                  ENABLE;                                               07644000
                  DITP.DSTATE:=EORSYNC;                                 07646000
                  QMISCP.RSTATE:=STOPPED;                               07648000
                  DTYPEP.TIMING:=0;   <<CLR FLAG TO TIME RD DURATION>>  07650000
                  IF <> THEN DTYPEP.TIMEREAD:=1;                        07652000
                  IF DITP(DTRLX).READTRLX<>0 AND DITP(DSAVE).HSTATE     07654000
                     =ONLINE THEN    STOPTIMEOUT(READTIMEOUT,DITP);     07656000
                  DITP.PAIR:=1;                                         07658000
                  IF = OR DTYPEP.PAIRCODE<>XOFFPAIR THEN                07660000
                     DTYPEP.PAIRCODE:=NOTREADING;                       07662000
                  DBCNTP:=1;   <<FAKE DBCNT FOR TBUF RETURN>>           07664000
                  DMODEMP.PRIMED:=0;                                    07666000
                  SENDCRLF(NXTNULL,DITP);    <<WRITE CR/LF>>            07668000
                                                               <<04244>>07670000
            END;                                                        07672000
         END;                                                           07674000
      END;                                                              07676000
   END;                                                                 07678000
END;              <<-------------END OF SERVPREMPT------------>>        07680000
                                                                        07682000
                                                                        07684000
                                                                        07686000
                                                                        07688000
LOGICAL SUBROUTINE NOABORTS ;                                           07690000
BEGIN                                                                   07692000
   NOABORTS:=TRUE;                                                      07694000
   IF DITP.DSTATE = WRITING AND                                <<04243>>07696000
      (DITPL.ENQACKWAIT OR DTYPEPL.WAITXON) THEN               <<04243>>07698000
   BEGIN          <<WRITE WAS PAUSED DUE TO ACKWAIT OR XOFF RECVD>>     07700000
      @THISP:=@IOQP;                                                    07702000
      WHILE <> DO                                                       07704000
      BEGIN                                                             07706000
         IF THISP < 0 THEN    <<THERE IS AN ABORTED RQST>>              07708000
         BEGIN                                                          07710000
            NOABORTS:=FALSE;                                            07712000
            DISABLE;                                           <<04242>>07714000
            DITP.ENQACKWAIT:=0;                                         07716000
            DTYPEPL.WAITXON := 0;                              <<04243>>07718000
            ENABLE;                                            <<04242>>07720000
            HALTSIO;  <<HALT SIO PROG>>                        <<04244>>07724000
            RETURNWRTIOQ ;                                              07726000
            <<RETURN TBUFS AND IOQ IF ANY EXIST>>                       07728000
         END;                                                           07730000
         @THISP:=THISP(QLINK);       <<GO TO NEXT IOQ>>                 07732000
      END;                                                              07734000
   END;                                                                 07736000
END;     <<------------END OF NOABORTS--------------->>                 07738000
                                                                        07740000
                                                                        07742000
                                                                        07744000
                                                                        07746000
                                                                        07748000
                                                                        07750000
SUBROUTINE STARTREAD ;                                                  07752000
BEGIN                                                                   07754000
   QMISCP.RSTATE:=READWAITING;                                          07756000
   IF DMODEMP.MODEM <> 0 AND NOT DSAVEPL.CC THEN               <<02861>>07758000
      BEGIN                                                    <<02861>>07760000
      DSAVEPL.NOTLOGON := 1;                                   <<02861>>07762000
      STARTTIMEOUT(LOGONTO, DITP);                             <<02861>>07764000
      RETURN;                                                  <<02861>>07766000
      END;                                                     <<02861>>07768000
   IF DITP.DSTATE=NULL THEN     <<IF ALREADY ACTIVE,SPLIT WITH>>        07770000
  BEGIN                                                                 07772000
      STOPSPDSEN ;                <<CHECKSERV=FALSE >>                  07774000
      ENABLE;                                                  <<01824>>07776000
      TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                  <<04242>>07778000
      X := ABS(TOS*4+3).IDLESIO;                               <<04242>>07780000
      IF <> THEN SUDDENDEATH(209);                             <<04242>>07782000
                                <<OK TO START READ OPERATION>>          07784000
      DSPEEDP.RESTSPD:=0;                                               07786000
      TEMP:=WA0(DITP(DILTP)+ISIOP);  <<SIO PROG STARTING ADDRESS>>      07788000
      TOS:=DITPL LAND %174700;   <<RESET STATUS FLAGS FOR READ OP>>     07790000
      IF IOQP(QFUNC).FUNC=PTAPEFUNC THEN TOS.SPOOLING:=1                07792000
         ELSE                                                           07794000
      IF IOQP(QPAR2).BINARY<>0 THEN TOS.BINARYREAD:=1                   07796000
         ELSE                                                           07798000
      BEGIN                                                             07800000
         IF IOQP(QPAR2)&LSR(8) <> NULL THEN                             07802000
         BEGIN                                                          07804000
            TOS.TERMCHAR:=1;                                            07806000
            WA0(TEMP+13).RIGHTHLF:=IOQP(QPAR2).LEFTHLF;                 07808000
         END;     <<SPECL READ TERMINATION CHAR IS SPECIFIED>>          07810000
         X:=DITP(DSTOP);                                                07812000
         IF <> AND DMODEMP.TMODE=NULL THEN                              07814000
         BEGIN    <<TRANSPARENT READ & NOT IN BRK OR CONSOLE MODE>>     07816000
            TOS.TERMCHAR:=1;                                            07818000
            TOS.BINARYREAD:=1;                                          07820000
         END;                                                           07822000
      END;                                                              07824000
   DITP:=TOS;                                                           07826000
   @SAVEP:=DITP(DBREAK);    <<TEST PNTR TO IOQ CONTAINING INFORMATION   07828000
                              ON BROKEN READ DATA>>                     07830000
   IF <> AND DMODEMP.TMODE=0 THEN                                       07832000
   BEGIN        <<BEGIN READ WITH PREVIOUSLY SAVED DATA ALERADY READ>>  07834000
      DITP(DBREAK):=0;                                                  07836000
      DBCNTP:=SAVEP;      <<RESTORE COUNT OF TOTAL BYTES READ>>         07838000
      MOVE DITP(DCNT):=SAVEP(6),(4);                                    07840000
                          <<RESTORE DCNT,DHEAD,DTAIL AND PNTR>>         07842000
      RETURNIOQ(@SAVEP);                                                07844000
      IF DRBCTP <= DBCNTP THEN                                          07846000
      BEGIN               <<ENOUGH HAS ALREADY BEEN READ>>              07848000
         CONTINUE:=FALSE;                                               07850000
         DITP.DSTATE:=EORSYNC;                                          07852000
         SENDCRLF(NXTNULL,DITP);                                        07854000
         READDONE ;                                                     07856000
         <<ALL DONE , GO SERVICE NEW REQUSET>>                          07858000
      END;                                                              07860000
   END;                                                                 07862000
                                                                        07864000
   IF CONTINUE THEN                                                     07866000
      BEGIN                                                             07868000
         QMISCP.RSTATE:=READING;                                        07870000
         TOS:=DITP;                                                     07872000
         TOS.DSTATE := WRTSPECL;                               <<04236>>07874000
         TOS.NEWLINE:=0;                                                07876000
         TOS.PAIR:=0;                                                   07878000
         DITP:=TOS;                                                     07880000
         DTYPEP.PAIRCODE:=0;                                            07882000
         IF NOT DITPL.SPOOLING THEN DITP(DPNTR):=0;                     07884000
         IF IOQP.RPLEVEL=NULL THEN                                      07886000
         BEGIN          <<OK TO DO TIMING OPERATIONS>>                  07888000
            STARTTIMEOUT(READTIMEOUT,DITP);                             07890000
                        <<TIMEOUT IF USER REQUESTED A READ TIME LIMIT>> 07892000
            DTYPEP.TIMEREAD:=0;                                         07894000
            IF <> THEN                                                  07896000
            BEGIN       <<TIME DURATION OF THE READ>>                   07898000
               DTYPEP.TIMING:=1;  <<INDICATE STARTING TIME RECORDED>>   07900000
               DITPD(DRTIMED):=TIMER;                                   07902000
            END;                                                        07904000
         END;                                                           07906000
                                                                        07908000
            IF IOQP(QPAR2)&LSR(8)<>NULL AND NOT DITPL.SPOOLING THEN     07910000
            BEGIN    <<SPECIAL RD EOR CHAR SPECIFIED>>                  07912000
               WA0(TEMP+RDSTRT+6):=0;   <<JMP FROM 50 TO 71:XMITOFF>>   07914000
               I:=SYSDB+TEMP+RDSTRT;    <<STRT AT SET SPECL CHAR INSTR>>07916000
            END                                                         07918000
               ELSE                                                     07920000
               I:=SYSDB+TEMP+RECVOFF;   <<STRT AT DISABLING XMIT SRQ>>  07922000
                                                                        07924000
         WA0(TEMP+RDDATAINSTR):=[8/3,8/0];                              07926000
                                  <<GENERATE READ DATA INSTR>>          07928000
         IF DRBCTP = 0 THEN                                             07930000
         BEGIN                                                          07932000
            WA0(X:=X+6):=RDNULL; <<CAUSE AN INTERRUPT TO CLEAN UP RD>>  07934000
            ENABLE;                                                     07936000
            TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                     07938000
            X:=ABS(S0*4+3).IDLESIO;                                     07940000
            IF <> THEN SUDDENDEATH(209);                       <<01539>>07942000
            TOS:=SYSDB+TEMP+RDDATAINSTR+5;                              07944000
            STARTSIO;                                                   07946000
            CONTINUE:=FALSE;                                            07948000
         END                                                            07950000
            ELSE                                                        07952000
         BEGIN                                                          07954000
            O1:=IF DITPL.SPOOLING THEN SBUFMAXB ELSE TBMAXB;            07956000
            J1:=O1-(DBCNTP MOD O1);  <<REMAINING ROOM IN TBUF>>         07958000
            K1:=DRBCTP-DBCNTP;   <<TOTAL BYTES REMAINING TO BE READ>>   07960000
            TOS:=IF K1 <= J1 THEN K1 ELSE J1;                           07962000
            IF NOT DITPL.SPOOLING THEN DITP(DCNT):=S0;                  07964000
            WA0(TEMP+RDDATAINSTR+1):=TOS;                               07966000
            IF NOT DITPL.SPOOLING AND K1>J1 THEN                        07968000
            BEGIN       <<PREFETCH 1 MORE TBUF>>                        07970000
               WA0(TEMP+RDDATAINSTR+2):=[8/125,8/1];<<96 TO 221>>       07972000
               TOS:=GETTBUF(SECONDARY);                                 07974000
               TOS:=S0;                                                 07976000
               IF = THEN                                                07978000
               BEGIN                                                    07980000
                  DDEL;                                                 07982000
                  RETURNBUFS;                                           07984000
                  IOQP.READERRORS:=LOSTDATA;                            07986000
                  DITP.DSTATE:=NULL;                                    07988000
                  SETSTATUS(LOSTDATA);                                  07990000
                  CONTINUE:=FALSE;                                      07992000
               END                                                      07994000
                  ELSE                                                  07996000
               BEGIN                                                    07998000
                  DITP(DBLKTAIL):=TOS;                                  08000000
                  X:=TEMP+BLOCKMODRD+4;                                 08002000
                  WA0(X):=TOS+SYSDB+2;                                  08004000
                  K1:=K1-DITP(DCNT); <<BYTES REMAINING FOR 2ND TBUF>>   08006000
                  IF K1>TBMAXB THEN                                     08008000
                  BEGIN   <<EVEN 2ND TBUF IS NOT ENOUGH>>               08010000
                     WA0(TEMP+BLOCKMODRD+1):=TBMAXB;                    08012000
                     WA0(X:=X+1):=[8/4,8/1]; <<238 TO 242>>             08014000
                  END                                                   08016000
                     ELSE                                               08018000
                  BEGIN                                                 08020000
                     WA0(TEMP+BLOCKMODRD+1):=K1;                        08022000
                     WA0(X:=X+1):=[8/%222,8/1]; <<238 TO 128:RDEXIT>>   08024000
                  END;                                                  08026000
                  WA0(X:=X+1):=[1/1,1/0,14/0];                          08028000
               END;                                                     08030000
            END                                                         08032000
               ELSE                                                     08034000
               WA0(TEMP+RDDATAINSTR+2):=[8/32,8/1];<<96 TO 128:RDEXIT>> 08036000
            WA0(TEMP+RDDATAINSTR+3):=IF LOGICAL(J1) THEN [1/1,1/1,14/0] 08038000
                                        ELSE [1/1,1/0,14/0];            08040000
            <<IF ODD BYTES REMAINING,RNXT BYTE GOES INTO RIGHT HALF>>   08042000
                                                                        08044000
            IF DITPL.SPOOLING THEN                                      08046000
               WA0(TEMP+RDDATAINSTR+4):=SYSDB+DITP(DTBUF)               08048000
               ELSE IF CONTINUE THEN                                    08050000
           BEGIN                                                        08052000
            IF DBCNTP MOD TBMAXB = 0 THEN                               08054000
            BEGIN                                                       08056000
               TOS:=GETTBUF(SECONDARY);                                 08058000
               TOS:=S0;     TOS:=S0;                                    08060000
               IF = THEN                                                08062000
               BEGIN        <<NO MORE TBUFS AVAILABLE>>                 08064000
                  DDEL;     DEL;                                        08066000
                  RETURNBUFS;                                           08068000
                  IOQP.READERRORS:=LOSTDATA;                            08070000
                  DITP.DSTATE:=NULL;                                    08072000
                  SETSTATUS(LOSTDATA);                                  08074000
                  CONTINUE:=FALSE;                                      08076000
               END                                                      08078000
                  ELSE                                                  08080000
               BEGIN                                                    08082000
                  IF DBCNTP=0 THEN DITP(DHEAD):=TOS                     08084000
                              ELSE WA0(DITP(DTAIL)):=TOS;               08086000
                  DITP(DTAIL):=TOS;  <<LINK TO HEAD OF LIST>>           08088000
                  X:=TEMP+RDDATAINSTR+4;                                08090000
                  WA0(X):=TOS+SYSDB+2;                                  08092000
                              <<TBUF STARTING ADDRESS>>                 08094000
               END;                                                     08096000
            END                                                         08098000
               ELSE                                                     08100000
            WA0(TEMP+RDDATAINSTR+4):=SYSDB+DITP(DTAIL)+2+(DBCNTP        08102000
                                     MOD TBMAXB)&LSR(1);                08104000
           END;                                                         08106000
            WA0(TEMP+RDDATAINSTR+6):=RDSPECL;                           08108000
            X:=TEMP+BLOCKMODRD+6;                                       08110000
            WA0(X):=RDSPECL;                                            08112000
         END;                                                           08114000
            <<PUT IN CPVA2 INTRPT CODE: SPECL CHAR DETECTED>>           08116000
            IF CONTINUE THEN                                            08118000
            IF DMODEMPL&CSL(M202) THEN                                  08120000
         BEGIN       <<ON A 202 MODEM>>                                 08122000
            IF DBCNTP=0 AND DMODEMPL.NOSYNC AND                <<01932>>08124000
             NOT DMODEMPL.PRIMED THEN BEGIN                    <<01932>>08126000
               WA0(TEMP+5).(11:1) := 0;                        <<01932>>08128000
               DITP.PAIR := 1;                                 <<01932>>08130000
               DTYPEP.PAIRCODE := NODATAYET;                   <<01932>>08132000
            END;                                               <<01932>>08134000
            IF DMODEMPL.CB THEN                                         08136000
            BEGIN    <<NOT IN READING STATE>>                           08138000
               WA0(TEMP+WRTDATAINSTR):=[8/4,8/0];              <<02861>>08140000
               WA0(X:=X+1):=2;                                 <<01932>>08142000
               WA0(X:=X+1):=1;                                          08144000
               WA0(X:=X+1):=[1/1,1/0,1/1,13/0]; << LEFT BYTE>> <<01932>>08146000
               WA0(X:=X+1):=SYSDB+TEMP+4;  <<BUFFER ADDR FOR ETX>>      08148000
               WA0(X:=X+1):=[8/1, 1/1, 7/2];                   <<02861>>08150000
               WA0(X:=X+1):=22; << ETX SENT, TURN MODEM >>     <<02861>>08152000
               WA0(TEMP + 4) := DC1'ETX;                       <<01932>>08154000
                                                               <<02861>>08156000
                                                               <<02861>>08158000
               IF DITP(DTYPE).TTYPE = NOPROTOCOL THEN BEGIN    <<01932>>08160000
                  WA0(TEMP+WRTDATAINSTR+1) := 1; << NO DC1 >>  <<02861>>08162000
                  WA0(X:=X+2) := [1/1,1/1,1/1,13/0];           <<01932>>08164000
               END;                                            <<01932>>08166000
               IF DMODEMP.CBSB<>3 THEN                                  08168000
               BEGIN                     <<NOT IN WRITE STATE>>         08170000
                  STARTTIMEOUT(TURNTO,DITP);                            08172000
                  DISABLE;                                              08174000
                  MODCONTROL(WRITING,DITP);                             08176000
                  DITP(DSAVE).TURNTOWRITE:=1;                           08178000
                  DCNTRLP.NXTDSTATE:=WRTSPECL;                 <<04236>>08180000
                  DITP.DSTATE:=TURN202;                                 08182000
                  DITP(DSIOPC):=I;                                      08184000
                  ENABLE;                                               08186000
               END                                                      08188000
                  ELSE                                                  08190000
               BEGIN      <<202 READY TO WRITE>>                        08192000
                  DITP.DSTATE := WRTSPECL;                     <<04236>>08194000
                  TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;               08196000
                  X:=ABS(S0*4+3).IDLESIO;                               08198000
                  IF <> THEN SUDDENDEATH(209);                 <<01539>>08200000
                  TOS:=I;                                               08202000
                  STARTSIO;                                             08204000
               END;                                                     08206000
            END                                                         08208000
               ELSE                                                     08210000
            BEGIN         <<202 READY TO READ>>                         08212000
               DITP.DSTATE := READING;                         <<04236>>08214000
               IF IOQP(QPAR2)&LSR(8)<>0 AND NOT DITPL.SPOOLING THEN     08216000
                  WA0(TEMP+RDSTRT+6):=21  <<SKIP OVER SEND DC1/ETX>>    08218000
                  ELSE                                                  08220000
                  I:=SYSDB+TEMP+XMITOFF; <<DISABLE XMIT,ENABLE RECV>>   08222000
               TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                  08224000
               X:=ABS(S0*4+3).IDLESIO;                                  08226000
               IF <> THEN SUDDENDEATH(209);                    <<01539>>08228000
               TOS:=I;                                                  08230000
               STARTSIO;                                                08232000
            END;                                                        08234000
         END                                                            08236000
            ELSE                                                        08238000
         BEGIN                                                          08240000
            WA0(TEMP+WRTDATAINSTR) := [8/4, 8/0];              <<02861>>08242000
            WA0(X:=X+1):=1;    <<WRITE OUT DC1>>                        08244000
            WA0(X:=X+1):=1;                                             08246000
            WA0(X:=X+1):=[1/1,1/1,1/1,13/0];  <<RIGHT BYTE>>            08248000
            WA0(X:=X+1):=SYSDB+TEMP+9;  <<BUFFER ADDR FOR DC1>>         08250000
            WA0(X:=X+1):=[8/1,1/1,7/1];                        <<04236>>08252000
            WA0(X:=X+1):=9;                                    <<04236>>08254000
            IF DITP(DTYPE).TTYPE = NOPROTOCOL THEN             <<01821>>08256000
               BEGIN                                           <<01821>>08258000
               DITP.DSTATE := READING;                         <<04236>>08260000
               WA0(TEMP+WRTDATAINSTR) := [8/0, 8/0];           <<02861>>08262000
               WA0(X:=X+1) := 30; << JUMP DC1 >>               <<02861>>08264000
               END;                                            <<01821>>08266000
            IF DBCNTP=0 AND DMODEMPL.NOSYNC AND NOT DMODEMPL.PRIMED THEN08268000
            BEGIN                                                       08270000
               IF DSPEEDPL.TAPEMODE OR DMODEMPL&CSL(M202) OR IOQPL      08272000
               (QPAR2).OWNREAD OR DTYPEP.TTYPE<>HP2640X OR DITP.        08274000
               (TERMCHAR':2)=READBINARY OR NOT DSPEEDPL.ECHO THEN       08276000
               BEGIN     <<START READ NORMALLY>>                        08278000
                  WA0(TEMP+5).(11:1):=DSPEEDP.ECHO;                     08280000
                  DITP.PAIR:=1;                                         08282000
                  DTYPEP.PAIRCODE:=NODATAYET;                           08284000
               END                                                      08286000
                  ELSE                                                  08288000
               BEGIN                                                    08290000
                  WA0(TEMP+5).(11:1):=0;  <<TURN OFF INTERF CNTRL ECHO>>08292000
                  DITP.PAIR:=1;                                         08294000
                  DTYPEP.PAIRCODE:=NOECHO;                              08296000
                  DITP(DCNT):=1;          <<READ ONLY 1 BYTE>>          08298000
                  WA0(TEMP+RDDATAINSTR+1):=1;                           08300000
                  WA0(X:=X+1):=[8/32,8/1];<<96 TO 128:RDEXIT>>          08302000
               END;                                                     08304000
                                                                        08306000
            END                                                         08308000
               ELSE                                                     08310000
            WA0(TEMP+5).(11:1):=DSPEEDP.ECHO;                           08312000
               TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                  08314000
               X:=ABS(S0*4+3).IDLESIO;                                  08316000
               IF <> THEN SUDDENDEATH(209);                    <<01539>>08318000
               TOS:=I;                                                  08320000
               STARTSIO;                                                08322000
               IF < THEN BEGIN                                 <<00479>>08324000
                       TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER; <<00479>>08326000
                       ABS(TOS*4+3):=0;                        <<00479>>08328000
                       END;                                    <<00479>>08330000
         END;                                                           08332000
      END;                                                              08334000
   END;                                                                 08336000
END;        <<-------------END OF STARTREAD-------------->>             08338000
                                                                        08340000
                                                                        08342000
                                                                        08344000
                                                                        08346000
SUBROUTINE READF ;                                                      08348000
BEGIN                                                                   08350000
   IF IOQP.RPLEVEL=NULL THEN                                            08352000
   BEGIN           <<NORMAL PREEMPT LEVEL, OK TO FLUSH>>                08354000
      X:=DITP(DLDEV);                                                   08356000
      IF < THEN                                                         08358000
      BEGIN        <<BREAK WAS DETECTED AND ACCEPTED>>                  08360000
         CONTINUE:=FALSE;                                               08362000
         QWBCTP:=0;                                                     08364000
         SETSTATUS(BREAKEND);                                           08366000
      END                                                               08368000
         ELSE                                                           08370000
      BEGIN                                                             08372000
         X:=QMISCP;                                                     08374000
         IF < THEN                                                      08376000
         BEGIN     <<CNTRL Y FLUSH,RETURN I/O SUCCESSFUL STATUS>>       08378000
            CONTINUE:=FALSE;                                            08380000
            QWBCTP:=0;                                                  08382000
            SETSTATUS(GOODIO);                                          08384000
         END;                                                           08386000
      END;                                                              08388000
   END;                                                                 08390000
                                                                        08392000
   IF CONTINUE THEN                                                     08394000
   BEGIN                                                                08396000
      EOFCHECK(IOQP,0D,0,0);                                            08398000
      IF <> THEN SETSTATUS(IOQP(QSTAT))                                 08400000
         <<END OF FILE DETECTED, NO READ>>                              08402000
         ELSE                                                           08404000
      BEGIN                                                             08406000
         X:=DITP(DRPTR);     <<TEST FOR SAVED RD DATA DUE TO EOF>>      08408000
         IF <> AND QPAR1P.EOFCODE<>NOEOFCHECK THEN                      08410000
         BEGIN                                                          08412000
            IF DITP.DSTATE=NULL THEN                                    08414000
            BEGIN            <<TERMINAL NOT IN WRITING STATE>>          08416000
               TOS:=DITP(DRPTR);                                        08418000
               DITP(X):=0;      <<CLEAR POINTER,TBUF WILL BE RETURNED>> 08420000
               DITP(DHEAD):=TOS;                                        08422000
               DBCNTP:=DITP(DRCNT);                                     08424000
               <<LINK IN SAVED TBUFS & RESTORE CNT OF BYTES READ>>      08426000
               READDONE ;  <<XSFER DATA TO STACK,SERV NXT>>             08428000
            END;                                                        08430000
         END                                                            08432000
            ELSE                                                        08434000
         STARTREAD ;                                                    08436000
      END;                                                              08438000
   END;                                                                 08440000
END;     <<-----------------END OF READF--------------------->>         08442000
                                                                        08444000
                                                                        08446000
                                                                        08448000
                                                                        08450000
                                                                        08452000
SUBROUTINE STRTPOSTSPACE ;                                              08454000
BEGIN                                                                   08456000
   RQSTATE:=POSTSPACE;                                                  08458000
   DOSPACE;                                                             08460000
   IF <> OR NOT CONTINUE THEN                                           08462000
   BEGIN                                                                08464000
      IF NOT CONTINUE THEN                                              08466000
      BEGIN      <<BCNT=0 BUT IMBEDDED CARRIAGE CNTRL SPECIFIED>>       08468000
         QWBCTP:=0;                                                     08470000
         SETSTATUS(INVALIDOP);                                          08472000
      END                                                               08474000
         ELSE                                                           08476000
      BEGIN      <<TOO MUCH ALREADY TANKED,CANNOT COMPLETE>>            08478000
         QMISCP.RSTATE:=RQSTATE;                                        08480000
         STARTWRITE;                                                    08482000
      END;                                                              08484000
   END                                                                  08486000
      ELSE                                                              08488000
   BEGIN                                                                08490000
      IF HP2631BNFX OR DITPL(DLDEV).DOSTATREQ THEN             <<04869>>08492000
         BEGIN                                                 <<04869>>08494000
         QMISCP.RSTATE := WAITING;                             <<04869>>08496000
         DITP(DLDEV).DOSTATREQ := 1;                           <<04869>>08498000
         END                                                   <<04869>>08500000
      ELSE                                                     <<04869>>08502000
         SETSTATUS(GOODIO);                                    <<04869>>08504000
      STARTWRITE;                                              <<04869>>08506000
   END;                                                                 08508000
END;     <<---------------END OF STRTPOSTSPACE--------------->>         08510000
                                                                        08512000
                                                                        08514000
                                                                        08516000
                                                                        08518000
SUBROUTINE STRTTBWAIT ;                                                 08520000
BEGIN                                                                   08522000
   RQSTATE:=TBWAIT;                                                     08524000
   IF DITPL(DLDEV).DOSTATREQ THEN                              <<04869>>08526000
      BEGIN                                                    <<04869>>08528000
      QMISCP.RSTATE := RQSTATE;                                <<04869>>08530000
      STARTWRITE;                                              <<04869>>08532000
      RETURN;                                                  <<04869>>08534000
      END;                                                     <<04869>>08536000
   PDISABLE;                                                            08538000
   TANKDATA(DATA'ADR(IOQP),BCNT-DXCNTP,DXCNTP);                         08540000
   IF <> THEN BEGIN                                                     08542000
                 PENABLE;   <<TOO MUCH TO TANK,CANNOT COMPLETE>>        08544000
                 QMISCP.RSTATE:=RQSTATE;                                08546000
                 STARTWRITE;                                            08548000
              END                                                       08550000
                 ELSE                                                   08552000
      BEGIN                                                             08554000
         PENABLE;                                                       08556000
         IF NOT IOQPL(QPAR2) THEN        <<POSTSPACE WRITE>>            08558000
         BEGIN                                                          08560000
            DXCNTP:=0;                                                  08562000
            STRTPOSTSPACE ; <<TANK CARRIAGE CNTRL BYTES>>               08564000
         END                                                            08566000
            ELSE                                                        08568000
         BEGIN                                                          08570000
            STARTWRITE;                                                 08572000
            IF HP2631BNFX THEN                                 <<04869>>08574000
               BEGIN                                           <<04869>>08576000
               QMISCP.RSTATE := WAITING;                       <<04869>>08578000
               DITP(DLDEV).DOSTATREQ := 1;                     <<04869>>08580000
               END                                             <<04869>>08582000
            ELSE                                               <<04869>>08584000
            SETSTATUS(GOODIO);                                          08586000
         END;                                                           08588000
      END;                                                              08590000
END;        <<------------END OF STRTTBWAIT-------------->>             08592000
                                                                        08594000
                                                                        08596000
                                                                        08598000
SUBROUTINE STRTANKDATA ;                                                08600000
BEGIN                                                                   08602000
   DXCNTP:=0;   <<NO DATA BYTE HAS BEEN TANKED YET>>                    08604000
   IF QPAR1P=1 THEN DXCNTP:=DXCNTP+1;                                   08606000
               <<SKIP OVER IMBEDDED CARRIAGE CNTRL BYTE,DON'T TANK>>    08608000
   STRTTBWAIT ;                                                         08610000
END;                                                                    08612000
                                                                        08614000
                                                                        08616000
                                                                        08618000
SUBROUTINE STRTPRETOPOST ;                                              08620000
BEGIN                                                                   08622000
   RQSTATE:=PRETOPOST;                                                  08624000
                                                               <<04869>>08626000
                                                               <<04869>>08628000
                                                               <<04869>>08630000
                                                               <<04869>>08632000
      TOS:=QPAR1P;    <<SAVE CALLING PARAMETER>>                        08634000
      QPAR1P:=0;      <<FAKE CR/SINGLESPACE>>                           08636000
      DOSPACE;        <<TANK CR/LF/SYNCS BEFORE DATA>>                  08638000
      QPAR1P:=TOS;                                                      08640000
                                                               <<04869>>08642000
   IF <> THEN                                                           08644000
         BEGIN                                                          08646000
            QMISCP.RSTATE:=RQSTATE;                                     08648000
            STARTWRITE;                                                 08650000
         END                                                            08652000
            ELSE                                                        08654000
         STRTANKDATA ;                                                  08656000
         <<PRE-WRITE CR/LF TANKED, START TANKING DATA>>                 08658000
END;                                                                    08660000
                                                                        08662000
                                                                        08664000
                                                                        08666000
SUBROUTINE STRTPRESPACE ;                                               08668000
BEGIN                                                                   08670000
   RQSTATE:=PRESPACE;                                                   08672000
   DOSPACE;   <<PUT IN SPECIFIED CARRIAGE CNTRL BYTES>>                 08674000
   IF <> OR NOT CONTINUE THEN                                           08676000
   BEGIN                                                                08678000
      IF NOT CONTINUE THEN                                              08680000
      BEGIN                                                             08682000
         QWBCTP:=0;                                                     08684000
         SETSTATUS(INVALIDOP);                                          08686000
      END                                                               08688000
         ELSE                                                           08690000
      BEGIN                                                             08692000
         QMISCP.RSTATE:=RQSTATE;                                        08694000
         STARTWRITE;                                                    08696000
      END;                                                              08698000
   END                                                                  08700000
      ELSE                                                              08702000
   STRTANKDATA ;    <<START TANKING WRITE DATA>>                        08704000
END;  <<---------------END OF STRTPRESPACE---------------->>            08706000
                                                                        08708000
                                                                        08710000
                                                                        08712000
SUBROUTINE FINISHENQ ;                                                  08714000
BEGIN                                                                   08716000
   DISABLE;                                                             08718000
   DCNTRLP.ADDENQ:=1;                                                   08720000
   ENABLE;                                                              08722000
   TOS:=DXCNTP;      <<DO NOT MODIFY DXCNT DURING TANKING>>             08724000
   TANKDATA(SIOADDR,1,7);      <<TANK AN ENQ>>                          08726000
   DXCNTP:=TOS;      <<RESTORE REAL COUNT>>                             08728000
   IF = THEN                                                            08730000
   BEGIN             <<ENQ TANKED SUCCESSFULLY>>                        08732000
      DISABLE;                                                          08734000
      DCNTRLP.ADDENQ:=0;   <<RESET FLAG>>                               08736000
      ENABLE;                                                           08738000
      X:=RQSTATE - %34;                                                 08740000
      CASE X OF                                                         08742000
      BEGIN                                                             08744000
         STRTPRETOPOST ; <<TANK CR/LF,POSTSP WRT AFTER PRESP>>          08746000
         STRTPRESPACE ;  <<TANK PRESPACE CARRIAGE CNTRL BYTE>>          08748000
         STRTTBWAIT ;    <<TANK WRITE DATA>>                            08750000
         STRTPOSTSPACE ; <<TANK POSTSPACE CARRIAGE CNTRL>>              08752000
      END;                                                              08754000
   END;                                                                 08756000
   DISABLE;                                                             08758000
   DCNTRLP.ADDENQ:=0;  <<STILL CAN'T TANK ENQ, STUBBORN MULE!>>         08760000
   ENABLE;                                                              08762000
END;     <<--------------END OF FINISHENQ-------------------->>         08764000
                                                                        08766000
                                                                        08768000
                                                                        08770000
SUBROUTINE SERVWAITING;                                        <<04869>>08772000
   BEGIN                                                       <<04869>>08774000
   IF DBCNTP = 0 AND @IOQP <> 0 THEN                           <<04869>>08776000
      SETSTATUS(GOODIO);                                       <<04869>>08778000
   END;                                                        <<04869>>08780000
                                                               <<04869>>08782000
                                                               <<04869>>08784000
                                                               <<04869>>08786000
SUBROUTINE WRITEF ;                                                     08788000
BEGIN                                                                   08790000
   IF DMODEMP.MODEM <> 0 AND NOT DSAVEPL.CC THEN               <<02861>>08792000
      BEGIN                                                    <<02861>>08794000
      DSAVEPL.NOTLOGON := 1;                                   <<02861>>08796000
      STARTTIMEOUT(LOGONTO, DITP);                             <<02861>>08798000
      RETURN;                                                  <<02861>>08800000
      END;                                                     <<02861>>08802000
   STOPSPDSEN ;                                                         08804000
   ENABLE;                                                     <<01824>>08806000
   DSPEEDP.RESTSPD:=0;                                                  08808000
   IF IOQP(QPAR2).BINARY <> 0 THEN                                      08810000
   BEGIN         <<REQUEST IS FOR BINARY WRITE>>                        08812000
      DISABLE;                                                          08814000
      DLASTP.BWRITE:=1;                                                 08816000
      DCNTRLP.PTYON:=0;    <<WRITE WITH NO PARITY>>                     08818000
      ENABLE;                                                           08820000
   END;                                                                 08822000
   IF IOQPL(QPAR2) THEN                                                 08824000
   BEGIN         <<PRESPACE SPECIFIED>>                                 08826000
      DISABLE;                                                          08828000
      TOS:=DCNTRLP;                                                     08830000
      TOS.LFLAST:=0;                                                    08832000
      TOS.PRESPLAST:=1;                                                 08834000
      DCNTRLP:=TOS;                                                     08836000
      ENABLE;                                                           08838000
      STRTPRESPACE ;                                                    08840000
   END                                                                  08842000
      ELSE                                                              08844000
   BEGIN         <<POSTSPACE SPECIFIED>>                                08846000
      DISABLE;                                                          08848000
      DCNTRLP.PRESPLAST:=0;                                             08850000
      ENABLE;                                                           08852000
      IF <> AND NOT DITPL.NEWLINE THEN                                  08854000
      BEGIN      <<POSTSP FOLLOWS A PREVIOUS PRESP,DP CR/LF>>           08856000
         STRTPRETOPOST ;                                                08858000
      END                                                               08860000
         ELSE                                                           08862000
      STRTANKDATA ;                                                     08864000
   END;                                                                 08866000
END;     <<---------------END OF WRITEF-------------------->>           08868000
                                                                        08870000
                                                                        08872000
                                                                        08874000
SUBROUTINE GETTERMTYPEF ;                                               08876000
BEGIN                                                                   08878000
   QWBCTP:=DTYPEP.TTYPE;    <<GET TERMINAL TYPE>>                       08880000
   SETSTATUS(GOODIO);                                                   08882000
END;                                                                    08884000
                                                                        08886000
                                                                        08888000
                                                                        08890000
SUBROUTINE RETURNSPDF ;                                                 08892000
BEGIN                                                                   08894000
   TEMP:=DSPEEDP.OUTSPEED;   <<SET CURRENT SPEED IN ADCC BAUDRATE CODE>>08896000
   X:=MAXSPEED;                                                         08898000
   DO IF TEMP=SPDCODE(X) THEN QWBCTP:=SPEED(X) UNTIL DXBZ;              08900000
      <<TRANSLATE AND RETURN CODE IN CHAR/SEC>>                         08902000
   SETSTATUS(GOODIO);                                                   08904000
END;                                                                    08906000
                                                                        08908000
                                                                        08910000
SUBROUTINE STOPCHAR ;                                                   08912000
BEGIN                                                                   08914000
   DITP(DSTOP):=QPAR1P;   <<SET SSBRK CHAR AND EOR CHAR>>               08916000
   IF DITP(X) <> 0 THEN                                                 08918000
   BEGIN                                                                08920000
      TEMP:=WA0(DITP(DILTP)+ISIOP);                                     08922000
      WA0(TEMP+13):=DITP(DSTOP);   <<PUT SSBRK & EOR CHARS INTO BUFR>>  08924000
      WA0(TEMP+SYNSTRT):=[8/4,8/5];<<SET SPECL CHAR SIO INSTRUCTION>>   08926000
      WA0(X:=X+1):=2;                                                   08928000
      WA0(X:=X+1):=1;                                                   08930000
      WA0(X:=X+1):=[1/1,1/0,1/1,13/0];  <<FROM LEFT BYTE>>              08932000
      WA0(X:=X+1):=SYSDB+TEMP+13;       <<BUFFER ADDRESS>>              08934000
      WA0(X:=X+1):=[8/1,1/1,7/2];       <<INTERRUPT/HALT>>              08936000
      WA0(X:=X+1):=20;                  <<CODE FOR CNTRLFINI>>          08938000
      DITP(DSIOPC) := SYSDB + TEMP + SYNSTRT;                  <<02861>>08940000
      STOPSPDSEN ;                                                      08942000
      DITP.DSTATE:=MODEMSIO;                                            08944000
      TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                           08946000
      TOS:=DITP(DSIOPC);                                                08948000
      STARTSIO;                                                         08950000
   END;                                                                 08952000
   QWBCTP:=0;                                                           08954000
   SETSTATUS(GOODIO);                                                   08956000
END;                                                                    08958000
                                                                        08960000
                                                                        08962000
                                                                        08964000
                                                                        08966000
                                                                        08968000
SUBROUTINE SETCNTRLAF ;                                                 08970000
BEGIN                                                                   08972000
   DTYPEP.CONSINTRPT:=QPAR1P;   <<SET OR CLR CNTRL A INTERRUPT FLAG>>   08974000
   QWBCTP:=0;                                                           08976000
   SETSTATUS(GOODIO);                                                   08978000
END;                                                                    08980000
                                                                        08982000
                                                                        08984000
                                                                        08986000
SUBROUTINE PTAPEF ;                                                     08988000
BEGIN                                                                   08990000
   DITPD(DTBF2):=IOQPD(QP1D);  <<STORE SPOOL BUF STARTING DISC ADDR>>   08992000
   TOS:=@SBUF+IOQP(QADDR);  <<CONVERT 1ST SBUF INDEX INTO SYSDB ADDR>>  08994000
   TOS:=@SBUF+SBUF(IOQP(X)-1);  <<GET LINK TO 2ND SBUF & FORM ADDRESS>> 08996000
   DITPD(DTBUFD):=TOS;                                                  08998000
   STARTREAD ;  <<START READ OPERATION,DO NOT SERVICE NXTIOQ>>          09000000
END;                                                                    09002000
                                                                        09004000
                                                                        09006000
                                                                        09008000
SUBROUTINE SETBMODEF ;                                                  09010000
BEGIN                                                                   09012000
   DISABLE;                                                             09014000
   DMODEMP.BMODE:=QPAR1P;  <<SET OR CLR BRK MODE BIT>>                  09016000
   ENABLE;                                                              09018000
   QWBCTP:=0;                                                           09020000
   SETSTATUS(GOODIO);                                                   09022000
END;                                                                    09024000
                                                                        09026000
                                                                        09028000
                                                                        09030000
SUBROUTINE SETCMODEF ;                                                  09032000
BEGIN                                                                   09034000
   DISABLE;                                                             09036000
   DMODEMP.CMODE:=QPAR1P;  <<SET OR CLR CONSOLE MODE BIT>>              09038000
   ENABLE;                                                              09040000
   QWBCTP:=0;                                                           09042000
   SETSTATUS(GOODIO);                                                   09044000
END;                                                                    09046000
                                                                        09048000
                                                                        09050000
                                                                        09052000
SUBROUTINE SETPTYF ;                                                    09054000
BEGIN                                                                   09056000
   IF LOGICAL(QPAR1P) > 3 OR DITPL(DLAST).EIGHTBITS THEN       <<04234>>09058000
   BEGIN              <<ILLEGAL CALL PARAMETER>>                        09060000
      QWBCTP:=0;                                                        09062000
      SETSTATUS(INVALIDOP);                                             09064000
   END                                                                  09066000
      ELSE                                                              09068000
   BEGIN                                                                09070000
      DISABLE;                                                          09072000
      QWBCTP:=DCNTRLP.PARITYBITS;  <<RETURN OLD PTY SETTING>>           09074000
      DCNTRLP.PARITYBITS:=QPAR1P;                                       09076000
      ENABLE;                                                           09078000
      SETSTATUS(GOODIO);                                                09080000
   END;                                                                 09082000
END;                                                                    09084000
                                                                        09086000
                                                                        09088000
                                                                        09090000
SUBROUTINE BADREQUESTF ;                                                09092000
BEGIN                                                                   09094000
   QWBCTP:=0;                                                           09096000
   SETSTATUS(INVALIDOP);                                                09098000
END;                                                                    09100000
                                                                        09102000
                                                                        09104000
                                                                        09106000
                                                                        09108000
                                                                        09110000
SUBROUTINE TERMTYPEF ;                                                  09112000
BEGIN                                                                   09114000
   TOS:=QPAR1P;   <<GET SPECIFIED NEW TERMTYPE>>                        09116000
   TOS:=DSPEEDP.INSPEED;                                                09118000
   TOS:=DSPEEDP.OUTSPEED;                                               09120000
   SETTERMTYPE(*,*,*,DITP);                                             09122000
   IF <> THEN                                                           09124000
   BEGIN                                                                09126000
      QWBCTP:=0;                                                        09128000
      SETSTATUS(INVALIDOP);                                             09130000
   END                                                                  09132000
      ELSE                                                              09134000
   BEGIN                                                                09136000
      DISABLE;                                                          09138000
      DITP(DSAVE).HSTATE:=ONLINE;                                       09140000
      DITP.UP:=1;                                                       09142000
      DSPEEDP.SPDSENSING:=0;                                            09144000
      SETBAUDRATE;                                                      09146000
      ENABLE;                                                           09148000
      SETSTATUS(GOODIO);                                                09150000
   END;                                                                 09152000
END;      <<-------------END OF TERMTYPEF-------------->>               09154000
                                                                        09156000
                                                                        09158000
                                                                        09160000
SUBROUTINE CFWRITEF ;                                                   09162000
BEGIN                                                                   09164000
   DISABLE;                                                             09166000
   DITP(DLDEV).FLUSH:=0;  <<CLR BRK ACCEPTED FLUSH FLAG>>               09168000
   IF <> THEN DCNTRLP.PRESPLAST:=1;                                     09170000
         <<FORCE A CR/LF IF NEXT WRITE IS A POSTPACE>>                  09172000
   ENABLE;                                                              09174000
   IOQP(QFUNC).FUNC:=WRITING;  <<REQUEST A WRITE FOR CURRENT IOQ>>      09176000
   FUNCTION:=WRITING;                                                   09178000
   WRITEF;                                                              09180000
END;                                                                    09182000
                                                                        09184000
                                                                        09186000
SUBROUTINE CXECHOF ;                                                    09188000
BEGIN                                                                   09190000
   DITP(DLDEV).NO'CX'ECHO:=FUNCTION;                                    09192000
   QWBCTP:=0;                                                           09194000
   SETSTATUS(GOODIO);                                                   09196000
END;                                                                    09198000
                                                                        09200000
                                                                        09202000
                                                                        09204000
SUBROUTINE READTIMEF ;                                                  09206000
BEGIN                                                                   09208000
   IF DITP(DRTIME) <> -1 THEN                                           09210000
   BEGIN           <<NO OVERFLOW,VALID READ TIME>>                      09212000
      QWBCTP:=DITP(X);                                                  09214000
      SETSTATUS(GOODIO);                                                09216000
   END                                                                  09218000
      ELSE                                                              09220000
   BEGIN                                                                09222000
      QWBCTP:=0;                                                        09224000
      SETSTATUS(RTOVERFLOW);                                            09226000
   END;                                                                 09228000
END;                                                                    09230000
                                                                        09232000
                                                                        09234000
                                                                        09236000
SUBROUTINE PARITYF ;                                                    09238000
BEGIN                                                                   09240000
   IF NOT DITPL(DLAST).EIGHTBITS THEN                                   09242000
  BEGIN        <<NOT USING 8-BIT PROTOCOL,PARITY ALLOWED>>              09244000
   DISABLE;                                                             09246000
   TEMP:=WA0(DITP(DILTP)+ISIOP);                                        09248000
   DITP.PTYCHK:=NOT LOGICAL(FUNCTION);                                  09250000
   DITP(DSIOPC):=SYSDB+TEMP+MODSIOPTY;                                  09252000
   WA0(TEMP+4) := UART;                                        <<02032>>09256000
   STOPSPDSEN ;                                                         09258000
   DITP.DSTATE:=MODEMSIO;                                               09260000
   TOS:=WA0(DITP(DILTP)+ICNTRL).DRTNUMBER;                              09262000
   X:=ABS(S0*4+3).IDLESIO;                                              09264000
   IF <> THEN SUDDENDEATH(209);                                <<01539>>09266000
   TOS:=DITP(DSIOPC);                                                   09268000
   STARTSIO;                                                            09270000
   ENABLE;                                                              09274000
   QWBCTP:=0;                                                           09276000
   SETSTATUS(GOODIO);                                                   09278000
  END                                                          <<04234>>09280000
  ELSE   <<8 BIT PROTOCOL, PARITY NOT ALLOWED>>                <<04234>>09282000
   BEGIN                                                       <<04234>>09284000
   QWBCTP := 0;                                                <<04234>>09286000
   SETSTATUS(INVALIDOP);                                       <<04234>>09288000
   END;                                                        <<04234>>09290000
END;                                                                    09292000
                                                                        09294000
                                                                        09296000
                                                                        09298000
                                                                        09300000
SUBROUTINE LOGGEDONF ;                                                  09302000
BEGIN                                                                   09304000
   STOPTIMEOUT(LOGONTO,DITP);                                           09306000
   IF DITP(DSAVE).HSTATE=LOGGINGON THEN DITP(DSAVE).HSTATE:=ONLINE;     09308000
   IF QPAR1P=SESSION THEN DSPEEDP.BRKOK:=1;                             09310000
   DITP(DMONTR).LOGONTYPE := QPAR1P;                           <<01449>>09312000
   QWBCTP:=0;                                                           09314000
   SETSTATUS(GOODIO);                                                   09316000
END;                                                                    09318000
                                                                        09320000
                                                                        09322000
                                                                        09324000
                                                                        09326000
SUBROUTINE ECHOF ;                                                      09328000
BEGIN                                                                   09330000
   TOS:=(NOT DSPEEDPL).ECHO;                                            09332000
   DSPEEDP.ECHO:=NOT LOGICAL(FUNCTION);                                 09334000
   QWBCTP:=TOS;                                                         09336000
   SETSTATUS(GOODIO);                                                   09338000
END;                                                                    09340000
                                                                        09342000
                                                                        09344000
SUBROUTINE BREAKF ;                                                     09346000
BEGIN                                                                   09348000
   DSPEEDP.BRKOK:=FUNCTION;                                             09350000
   QWBCTP:=0;                                                           09352000
   SETSTATUS(GOODIO);                                                   09354000
END;                                                                    09356000
                                                                        09358000
                                                                        09360000
SUBROUTINE SSBREAKF ;                                                   09362000
BEGIN                                                                   09364000
   DISABLE;                                                             09366000
   TOS:=LPDTD(LDEV);                                                    09368000
   TOS.(SSBREAK':1):=0;   <<CLEAR SSBREAK OCCURRED FLAG>>               09370000
   LPDTD(X):=TOS;         <<RESTORE LPDT ENTRY>>                        09372000
   DSPEEDP.SSBRKOK:=FUNCTION;                                           09374000
   QWBCTP:=0;                                                           09376000
   SETSTATUS(GOODIO);                                                   09378000
END;                                                                    09380000
                                                                        09382000
                                                                        09384000
SUBROUTINE TAPEF ;                                                      09386000
BEGIN                                                                   09388000
   DSPEEDP.TAPEMODE:=FUNCTION;                                          09390000
   QWBCTP:=0;                                                           09392000
   SETSTATUS(GOODIO);                                                   09394000
END;                                                                    09396000
                                                                        09398000
                                                                        09400000
SUBROUTINE TIMEF ;                                                      09402000
BEGIN                                                                   09404000
   DTYPEP.TIMEREAD:=FUNCTION;                                           09406000
   QWBCTP:=0;                                                           09408000
   SETSTATUS(GOODIO);                                                   09410000
END;                                                                    09412000
                                                                        09414000
                                                                        09416000
                                                                        09418000
SUBROUTINE ALLOCATEF ;                                                  09420000
BEGIN                                                                   09422000
   BADREQST:=FALSE;                                                     09424000
      STOPSPDSEN;                                              <<02861>>09428000
      HALTSIO;  <<HALT SIO PROG>>                              <<04244>>09432000
      X:=LOGICAL(QPAR1P) LOR IOQPL(QPAR2);                              09434000
      IF = THEN                                                         09436000
      BEGIN        <<USE PRECONFIGURED VALUES>>                         09438000
         IF NOT DITPL.UP THEN                                  <<00637>>09440000
        BEGIN   <<OK TO USE DEFAULT VALUE>>                    <<00637>>09442000
         TOS:=DLASTP.TERMINALTYPE;                                      09444000
         TOS:=DLASTP.TERMSPEED;                                         09446000
        END                                                    <<00637>>09448000
           ELSE                                                <<00637>>09450000
        BEGIN                                                  <<00637>>09452000
         TOS:=DTYPEP.TTYPE;   <<USE LATEST VALUES>>            <<00637>>09454000
         TOS:=DSPEEDP.INSPEED;                                 <<00637>>09456000
        END;                                                   <<00637>>09458000
         IF = THEN BADREQST:=TRUE;   <<UNDETERMINED SPEED>>             09460000
      END                                                               09462000
         ELSE                                                           09464000
      BEGIN                                                             09466000
         TOS:=QPAR1P;                                                   09468000
         TOS:=IOQP(QPAR2);      <<GET NEW SPEED SPECIFICATION>>         09470000
         IF = THEN BADREQST:=TRUE                                       09472000
            ELSE                                                        09474000
         BEGIN                                                          09476000
            TEMP:=TOS;                                                  09478000
            X:=MAXSPEED;                                                09480000
            DO IF TEMP=SPEED(X) THEN GOTO OUT UNTIL DXBZ;               09482000
            BADREQST:=TRUE;     <<ILLEGAL SPEED SPECIFIED>>             09484000
         OUT:  TOS:=SPDCODE(X); <<GET NEW SPEED IN ADCC CODE>>          09486000
         END;                                                           09488000
      END;                                                              09490000
                                                               <<00637>>09492000
                                                                        09494000
   IF NOT BADREQST THEN                                                 09496000
   BEGIN                                                                09498000
      TOS:=S0;       <<DUPLICATE NEW SPEED AS OUTPUT SPEED>>            09500000
      SETTERMTYPE(*,*,*,DITP);                                          09502000
      IF <> THEN                                                        09504000
      BEGIN          <<BAD BAD LEROY BROWN!>>                           09506000
         QWBCTP:=0;                                                     09508000
         SETSTATUS(INVALIDOP);                                          09510000
         DSPEEDP.RESTSPD := 0;                                 <<02861>>09512000
         IF <> THEN IDLEWAIT(DITP);                            <<02861>>09514000
      END                                                               09516000
         ELSE                                                           09518000
      BEGIN                                                             09520000
         DISABLE;                                                       09522000
         DITP(DSAVE).HSTATE:=ONLINE;                                    09526000
         DITP.UP:=1;                                                    09528000
        IF = THEN                                              <<01464>>09530000
          BEGIN                                                <<01464>>09532000
           IF DITP(DTRLX).LOGONTRLX <> 0 THEN                  <<01449>>09534000
             STOPTIMEOUT(LOGONTO,DITP);                        <<01449>>09536000
          IF HP2631B THEN RQSTATE := RESET31;                  <<04869>>09538000
          END;                                                 <<01464>>09540000
         DSPEEDP.SPDSENSING:=0;                                         09542000
         SETBAUDRATE;                                                   09544000
         ENABLE;                                                        09546000
      IF RQSTATE=RESET31 THEN RESET2631 ELSE                   <<01464>>09548000
         SETSTATUS(GOODIO);                                             09550000
      END;                                                              09552000
   END                                                                  09554000
      ELSE                                                              09556000
   BEGIN                                                                09558000
       DDEL; << DEL SPEED AND T-TYPE >>                        <<01621>>09560000
      QWBCTP:=0;                                                        09562000
      SETSTATUS(INVALIDOP);                                             09564000
      DSPEEDP.RESTSPD := 0;                                    <<02861>>09566000
      IF <> THEN IDLEWAIT(DITP);                               <<02861>>09568000
   END;                                                                 09570000
END;     <<----------------END OF ALLOCATEF----------------->>          09572000
                                                                        09574000
                                                               <<00637>>09576000
                                                               <<00637>>09578000
                                                               <<00637>>09580000
SUBROUTINE FOPENF;                                             <<00637>>09582000
BEGIN                                                          <<00637>>09584000
    IF DITPL.UP THEN                                           <<01842>>09586000
      BEGIN                                                    <<01464>>09588000
      SETSTATUS(GOODIO);                                       <<01464>>09590000
      RETURN;                                                  <<01464>>09592000
      END;                                                     <<01464>>09594000
   QWBCTP:=0;                                                  <<00637>>09596000
   ALLOCATEF;                                                  <<00637>>09598000
END;                                                           <<00637>>09600000
                                                               <<00637>>09602000
                                                               <<00637>>09604000
                                                               <<00637>>09606000
                                                                        09608000
                                                                        09610000
                                                                        09612000
SUBROUTINE OUTSPDF ;                                                    09614000
BEGIN                                                                   09616000
   QWBCTP:=0;                                                           09618000
   TEMP:=DSPEEDP.OUTSPEED;  <<GET OLD OUTPUT SPEED IN ADCC CODE>>       09620000
   X:=MAXSPEED;                                                         09622000
   DO IF TEMP=SPDCODE(X) THEN QWBCTP:=SPEED(X) UNTIL DXBZ;              09624000
   TEMP:=QPAR1P;      <<GET NEW OUTPUT SPEED IN CHAR/SEC>>              09626000
   I:=MAXSPEED+1;                                                       09628000
   STOP:=FALSE;                                                         09630000
   BADREQST:=FALSE;                                                     09632000
   DO BEGIN                                                             09634000
         I:=I-1;                                                        09636000
         IF TEMP=SPEED(I) THEN                                          09638000
         BEGIN                                                          09640000
            STOP:=TRUE;                                                 09642000
            TOS:=DTYPEP.TTYPE;                                          09644000
            TOS:=DSPEEDP.INSPEED;                                       09646000
            TOS:=SPDCODE(I);                                            09648000
            SETTERMTYPE(*,*,*,DITP);                                    09650000
            IF <> THEN BADREQST:=TRUE   <<ILLEGAL OUTPUT SPEED>>        09652000
               ELSE                                                     09654000
            BEGIN                                                       09656000
               DISABLE;                                                 09658000
               DITP(DSAVE).HSTATE:=ONLINE;                              09660000
               DITP.UP:=1;                                              09662000
               DSPEEDP.SPDSENSING:=0;                                   09664000
               SETBAUDRATE;                                             09666000
               ENABLE;                                                  09668000
            END;                                                        09670000
         END;                                                           09672000
      END UNTIL                                                         09674000
          I=1 OR STOP;                                                  09676000
      IF NOT STOP OR BADREQST THEN                                      09678000
      BEGIN                                                             09680000
         QWBCTP:=0;                                                     09682000
         SETSTATUS(INVALIDOP);                                          09684000
      END                                                               09686000
         ELSE                                                           09688000
      SETSTATUS(GOODIO);                                                09690000
END;                                                                    09692000
                                                                        09694000
                                                                        09696000
                                                                        09698000
                                                                        09700000
SUBROUTINE INSPDF ;                                                     09702000
BEGIN                                                                   09704000
   QWBCTP:=0;                                                           09706000
   TEMP:=DSPEEDP.INSPEED;   <<GET OLD INPUT SPEED,ADCC CODE>>           09708000
   X:=MAXSPEED;   <<GET TOTAL NUMBER OF DIFFERENT SPEEDS>>              09710000
   DO IF TEMP=SPDCODE(X) THEN QWBCTP:=SPEED(X) UNTIL DXBZ;              09712000
         <<TRANSLATE ADCC CODE INTO CHAR/SEC>>                          09714000
   TEMP:=QPAR1P;    <<GET NEW INPUT SPEED IN CHAR/SEC>>                 09716000
   I:=MAXSPEED+1;                                                       09718000
   STOP:=FALSE;                                                         09720000
   BADREQST:=FALSE;                                                     09722000
   DO BEGIN                                                             09724000
         I:=I-1;                                                        09726000
         IF TEMP=SPEED(I) THEN                                          09728000
         BEGIN           <<NEW INPUT SPEED IS LEGAL>>                   09730000
            STOP:=TRUE;                                                 09732000
            TOS:=DTYPEP.TTYPE;  <<GET TERM TYPE>>                       09734000
            TOS:=SPDCODE(I);    <<TRANSLATE CHAR/SEC INTO ADCC CODE>>   09736000
            TOS:=DSPEEDP.OUTSPEED;                                      09738000
            SETTERMTYPE(*,*,*,DITP);                                    09740000
            IF <> THEN BADREQST:=TRUE    <<ILLEGAL INPUT SPEED>>        09742000
               ELSE                                                     09744000
            BEGIN                                                       09746000
               DISABLE;                                                 09748000
               DITP(DSAVE).HSTATE:=ONLINE;                              09750000
               DITP.UP:=1;                                              09752000
               DSPEEDP.SPDSENSING:=0;                                   09754000
               SETBAUDRATE;                                             09756000
               ENABLE;                                                  09758000
            END;                                                        09760000
         END;                                                           09762000
      END UNTIL                                                         09764000
          I=1 OR STOP;                                                  09766000
                                                                        09768000
      IF NOT STOP OR BADREQST THEN                                      09770000
      BEGIN                                                             09772000
         QWBCTP:=0;                                                     09774000
         SETSTATUS(INVALIDOP);                                          09776000
      END                                                               09778000
         ELSE                                                           09780000
      SETSTATUS(GOODIO);  <<RETURN OLD SPEED IN QWBCT>>                 09782000
END;     <<---------------END OF INSPDF----------------------->>        09784000
                                                                        09786000
                                                                        09788000
                                                                        09790000
                                                                        09792000
SUBROUTINE FCLOSEF ;                                                    09794000
BEGIN                                                                   09796000
   ENABLE;                                                              09798000
   IF DMODEMP.TMODE=NULL THEN CLEANUP;                                  09800000
   IF'PRINTER THEN                                             <<04869>>09802000
     BEGIN                                                     <<01464>>09804000
     NEWFORM := 1;                                             <<01464>>09806000
     IF = THEN                                                 <<01464>>09808000
       BEGIN                                                   <<01464>>09810000
       DOCRFF;                                                 <<01464>>09812000
       RETURN;                                                 <<01464>>09814000
       END;                                                    <<01464>>09816000
     DISABLE;                                                  <<04242>>09818000
     DITPL.NEWLINE := 1;                                       <<01464>>09820000
     ENABLE;                                                   <<04242>>09822000
     END;                                                      <<01464>>09824000
                                                               <<01464>>09826000
   IF NOT DITPL.NEWLINE THEN                                            09828000
   BEGIN                                                                09830000
      DISABLE;                                                 <<04242>>09832000
      DITP.DSTATE:=EORSYNC;                                             09834000
      ENABLE;                                                  <<04242>>09836000
      STOPSPDSEN ;            SENDCRLF(NXTNULL,DITP);                   09838000
      CHECKSERV:=FALSE;  <<DON'T SERVICE NEW REQST UNTIL CR/LF SENT>>   09840000
   END                                                                  09842000
      ELSE                                                              09844000
   BEGIN                                                                09846000
      QWBCTP:=0;                                                        09848000
      SETSTATUS(GOODIO);                                                09850000
   END;                                                                 09852000
END;  <<--------------------END OF FCLOSEF--------------------->>       09854000
                                                                        09856000
                                                                        09858000
                                                                        09860000
SUBROUTINE DCLOSEF ;                                                    09862000
BEGIN                                                                   09864000
   IF'PRINTER THEN                                             <<04869>>09866000
    BEGIN                                                      <<01464>>09868000
    NEWFORM := 1;                                              <<01464>>09870000
    IF = THEN                                                  <<01464>>09872000
      BEGIN;                                                   <<01464>>09874000
      DOCRFF;                                                  <<01464>>09876000
      RETURN;                                                  <<01464>>09878000
      END;                                                     <<01464>>09880000
    END;                                                       <<01464>>09882000
   DITP(DSAVE).HSTATE := CLOSED; << TO AVOID ABORTJOB >>       <<02860>>09884000
   QWBCTP:=0;                                                           09886000
   SETSTATUS(GOODIO);                                                   09888000
   SERVDISCNCT;                                                <<02860>>09890000
END;                                                                    09892000
                                                                        09894000
                                                                        09896000
                                                                        09898000
                                                                        09900000
                                                                        09902000
                                                                        09904000
SUBROUTINE SETTOF ;                                                     09906000
BEGIN                                                                   09908000
   DITP(DRTMAX):=QPAR1P;                                                09910000
   QWBCTP:=0;                                                           09912000
   SETSTATUS(GOODIO);                                                   09914000
END;                                                                    09916000
                                                                        09918000
                                                                        09920000
                                                                        09922000
SUBROUTINE OLDIOQ ;                                                     09924000
BEGIN                                                                   09926000
   IF FUNCTION > FMAX THEN SETSTATUS(INVALIDOP)                         09928000
      ELSE                                                              09930000
   CASE FUNCTION OF                                                     09932000
   BEGIN                                                                09934000
      READF ;    <<READ OPERATION>>                                     09936000
      WRITEF ;   <<WRITE OPERATION>>                                    09938000
      FOPENF ;   <<FILE OPEN>>                                          09940000
      FCLOSEF ;  <<FILE CLOSE>>                                         09942000
      DCLOSEF ;  <<DEVICE CLOSE>>                                       09944000
      SETTOF ;   <<SET READ TIMEOUT IN SECONDS>>                        09946000
      INSPDF ;   <<SET INPUT SPEED,GIVEN IN CHAR/SEC>>                  09948000
      OUTSPDF ;  <<SET OUTPUT SPEED>>                                   09950000
      ECHOF ;    <<ENABLE ECHO>>                                        09952000
      ECHOF ;    <<DISABLE ECHO>>                                       09954000
      BREAKF ;   <<DISABLE BREAK>>                                      09956000
      BREAKF ;   <<ENABLE BREAK>>                                       09958000
      SSBREAKF ; <<DISABLE CONTROL Y>>                                  09960000
      SSBREAKF ; <<ENABLE CONTROL Y>>                                   09962000
      TAPEF ;    <<DISABLE TAPEMODE>>                                   09964000
      TAPEF ;    <<ENABLE TAPEMODE>>                                    09966000
      TIMEF ;    <<DISABLE READ TIMER>>                                 09968000
      TIMEF ;    <<ENABLE READ TIMER>>                                  09970000
      READTIMEF ;<<RETURN READ TIME>>                                   09972000
      PARITYF ;  <<DISABLE PARITY CHECK>>                               09974000
      PARITYF ;  <<ENABLE PARITY CHECK>>                                09976000
      LOGGEDONF ;<<USER SUCCESSFULLY LOGGED ON>>                        09978000
      BADREQUESTF ;<<NOT USED>>                                         09980000
      TERMTYPEF ;<<SET TERM TYPE>>                                      09982000
      ALLOCATEF ;<<ALLOCATE TERMINAL>>                                  09984000
      CFWRITEF ; <<CLEAR FLUSH AND WRITE>>                              09986000
      CXECHOF ;  <<CNTRL X ECHO ON>>                                    09988000
      CXECHOF ;  <<CNTRL X ECHO OFF>>                                   09990000
      SETSTATUS(GOODIO);<<NO OP>>                                       09992000
      PTAPEF ;   <<PTAPE READ>>                                         09994000
      SETBMODEF ;<<SET BREAK MODE>>                                     09996000
      SETCMODEF ;<<SET CONSOLE MODE>>                                   09998000
      SETPTYF ;  <<SET PARITY>>                                         10000000
      ALLOCATEF ;<<ALLOCATE TERMINAL>>                                  10002000
      TERMTYPEF ;<<SET TERM TYPE>>                                      10004000
      GETTERMTYPEF ;<<RETURN TERM TYPE>>                                10006000
      RETURNSPDF ;<<RETURN OUTPUT SPEED>>                               10008000
      STOPCHAR ; <<SET STOP CHARS>>                                     10010000
      SETCNTRLAF ;<<SET CONSOLE INTERRUPT>>                             10012000
   END;                                                                 10014000
END;     <<----------------END OF OLDIOQ------------------>>            10016000
                                                                        10018000
                                                                        10020000
                                                                        10022000
SUBROUTINE NEWIOQ ;                                                     10024000
BEGIN                                                                   10026000
    IF DITP(DSAVE).HSTATE >= HANGUPTURN THEN BEGIN             <<02860>>10028000
        SETSTATUS(OFFLINE);                                    <<02860>>10030000
        RETURN;                                                <<02860>>10032000
    END;                                                       <<02860>>10034000
   IF DMODEMP.TMODE < CONSMODE OR IOQP.RPLEVEL >= CONSMODE THEN         10036000
   BEGIN                                                                10038000
      FLAG:=(IOQP(QPAR2).BINARY <> 0) XOR DLASTPL.BWRITE;               10040000
      IF NOT FLAG AND IOQP.RPLEVEL=DMODEMP.LPLEVEL AND FUNCTION         10042000
               <=WRITING AND DITP.DSTATE<=WRITING OR DITP.DSTATE        10044000
                =NULL  THEN                                             10046000
      BEGIN    <<OK TO CONCATENATE WRITE OPERATIONS>>                   10048000
         IF FUNCTION<>WRITING OR FLAG THEN DLASTP.BWRITE:=0;            10050000
                                                                        10052000
         IF IOQP.RPLEVEL > DMODEMP.LPLEVEL AND NOT DITPL.NEWLINE THEN   10054000
         BEGIN      <<HIGHER PREEMPT LEVEL AND NOT A NEW LINE>>         10056000
            DISABLE;                                           <<04242>>10058000
            DITP.DSTATE:=EORSYNC;                                       10060000
            ENABLE;                                            <<04242>>10062000
            STOPSPDSEN ;                                                10064000
            ENABLE;                                            <<01824>>10066000
            SENDCRLF(NXTNULL,DITP);   <<CR/LF TO CLEAN UP CARRIAGE>>    10068000
         END                                                            10070000
            ELSE                                                        10072000
         BEGIN                                                          10074000
            DISABLE;                                                    10076000
            DMODEMP.LPLEVEL:=IOQP;  <<RECORD NEW PREMPT LEVEL>>         10078000
            TOS:=QWBCTP;      <<GET REQUESTED XSFER COUNT>>             10080000
            IF < THEN TOS:=-TOS ELSE TOS:=TOS&LSL(1);                   10082000
            IF < THEN                                                   10084000
            BEGIN                                                       10086000
               DEL;                                                     10088000
               TOS:=%77777;                                             10090000
            END;                                                        10092000
            DRBCTP:=S0;      <<STORE REQUESTED XSFER BYTE COUNT>>       10094000
            WCNT:=(S0+1)&LSR(1);                                        10096000
            BCNT:=TOS;                                                  10098000
            DXCNTP:=0;       <<NO WRITE BYTES HAS BEEN TANKED YET>>     10100000
            ENABLE;                                                     10102000
            OLDIOQ ;    <<GO SERVICE IOQ>>                              10104000
         END;                                                           10106000
      END;                                                              10108000
   END;                                                                 10110000
END;        <<------------------END OF NEWIOQ------------------>>       10112000
                                                                        10114000
                                                                        10116000
                                                                        10118000
SUBROUTINE SERVIOQ ;                                                    10120000
BEGIN                                                                   10122000
   ENABLE;                                                              10124000
   IF'PRINTER OR FUNCTION <= WRITING OR                        <<04869>>10126000
     FUNCTION = CLRFLU'WRT THEN                                <<04869>>10128000
   BEGIN       <<SET UP BCNT,WCNT,AND QIADDR FOR USE>>                  10130000
      TOS:=DRBCTP;                                                      10132000
      WCNT:=(S0+1)&LSR(1);                                              10134000
      BCNT:=TOS;                                                        10136000
      TOS:=ABS(ABS(CPCB)+PCB3).DSTFIELD;                                10138000
           <<GET CURRENT PROCESS STACK DST NUMBER>>                     10140000
      PUSH(Q,DL);      <<A=DL-DB,B=Q-DB>>                               10142000
      TOS:=TOS-TOS+1;  <<GET Q-DL+1>>                                   10144000
      X:=-S0;                                                           10146000
      TOS:=TOS+Q0(X);  <<DST OFFSET OF Q+1=(Q-DL+1)+(DL-A)>>            10148000
      Q1ADDR:=TOS;                                                      10150000
   END;                                                                 10152000
   X:=RQSTATE.(12:4);    <<GET LAST 4 BITS OF REQUEST STATE>>           10154000
   CASE X OF                                                            10156000
   BEGIN                                                                10158000
      NEWIOQ ;  <<NEW REQUEST>>                                         10160000
      OLDIOQ ;  <<PREVIOUS OPERATION IN PROGRESS>>                      10162000
                       ;                                                10164000
      READDONE ;<<RD COMPLETED,DATA NOT YET XSFERRED TO                 10166000
                            CALLER'S STACK>>                            10168000
      SERVSTOPPED ; <<READ HAS BEEN STOPPED>>                           10170000
      STARTREAD ;<<STRT RD AS SOON AS CURRENT WRT FINISHES>>            10172000
       RESET2631;                                              <<01464>>10174000
      SERVWAITING;                                             <<04869>>10176000
      STRTPRETOPOST ; <<WAITING TO TANK A PRE TO POST CRLF>>            10178000
      STRTPRESPACE ;<<WAITING TO TANK PRESPACE CARRG CNTRL>>            10180000
      STRTTBWAIT ;  <<WAITING TO TANK MORE CALLER'S DATA>>              10182000
       STRTPOSTSPACE ;<<WAITING TO TANK POSTSP CARRG CNTRL>>            10184000
      FINISHENQ ;   <<WAITING TO TANK ENQ>>                             10186000
      FINISHENQ ;                                                       10188000
      FINISHENQ ;                                                       10190000
      FINISHENQ ;                                                       10192000
   END;                                                                 10194000
END;        <<----------------END OF SERVIOQ----------------->>         10196000
                                                                        10198000
                                                                        10200000
                                                                        10202000
                                                                        10204000
                                                                        10206000
                                                                        10208000
                                                                        10210000
                                                                        10212000
<<-------------------PROCEDURE MAIN BODY---------------------->>        10214000
                                                                        10216000
<<SET UP POINTERS TO ACCESS DIT INFORMATION>>                           10218000
TOS:=6;          <<SET UP SIOADDR: DST# OF ALL OF MEMORY>>              10220000
TOS:=SYSDB+WA0(DITP(DILTP)+ISIOP);  <<SIO PROG ABS ADDRESS>>            10222000
TOS:=DITP(DLDEV).DLDEVN;    <<LDEV: LOGICAL DEV NUMBER>>                10224000
TOS:=0D;                                                                10226000
TOS:=0D;                                                                10228000
TOS:=0D;         <<RESERVE SPACE FOR 6 WORK VARIABLES>>                 10230000
TOS:=0D;                                                                10232000
TOS:=0D;         <<RESERVE SPACE FOR IOQP,QMISCP,QWBCTP,QPAR1P>>        10234000
TOS:=@DITP+DRQST;    <<SET DRQSTP>>                                     10236000
TOS:=S0+1;            <<SET DTYPEP>>                                    10238000
TOS:=S0+1;            <<SET DMODEMP>>                                   10240000
TOS:=S0+1;            <<SET DSPEEDP>>                                   10242000
TOS:=S0+1;            <<SET DCNTRLP>>                                   10244000
TOS:=S0+1;            <<SET DRBCTP>>                                    10246000
TOS:=S0+1;            <<SET DBCNTP>>                                    10248000
TOS:=S0+4;            <<SET DXCNTP>>                                    10250000
TOS:=S0+7;            <<SET DLASTP>>                                    10252000
TOS:=S0+10;           <<SET DTANKBP>>                                   10254000
                                                                        10256000
                                                                        10258000
DISABLE;                                                                10260000
TOS:=DITP;                                                              10262000
TOS.ACTIVE:=1;        <<SET IOTERM ACTIVE FLAG>>                        10264000
IF = THEN                                                               10266000
BEGIN                 <<IOTERM NOT ALREADY ACTIVE,OK TO SERVICE CALL>>  10268000
   TOS.REQUEST:=1;    <<SET FLAG TO REQUEST SERVICE>>                   10270000
   WHILE LS0.REQUEST DO                                                 10272000
   BEGIN                                                                10274000
      TOS.REQUEST:=0;                                                   10276000
      CHECKSERV:=TRUE;                                                  10278000
      X:=DBCNTP;      <<GET COUNT OF BYTES READ OR REMAINING TO BE      10280000
                        WRITTEN>>                                       10282000
      IF <> AND NOT LS0.UP THEN SUDDENDEATH(203);                       10284000
      DITP:=TOS;                                                        10286000
      ENABLE;                                                           10288000
      WHILE CHECKSERV DO                                                10290000
      BEGIN                                                             10292000
         CONTINUE:=TRUE;                                                10294000
         CHECKSERV:=FALSE;                                              10296000
         TOS:=DITP(DIOQP);                                              10298000
         TOS:=S0;                                                       10300000
         TOS:=S0+QMISC;                                                 10302000
         QPQM:=TOS;    <<SET UP IOQP AND QMISCP>>                       10304000
         DISABLE;                                                       10306000
         ASMB(TEST);   <<TEST IF IOQ EXIST>>                            10308000
         IF <> THEN                                                     10310000
         BEGIN                                                          10312000
            TOS:=QMISCP.RSTATE;  <<SET UP RQSTATE>>                     10314000
            TOS:=IOQP(QFUNC).FUNC;   <<SET UP FUNCTION>>                10316000
         END                                                            10318000
            ELSE                                                        10320000
         ASMB(DZRO,DECA);  <<NULL RQSTATE AND INVALID FUNCTION>>        10322000
         RQSFUNC:=TOS;                                                  10324000
         TOS:=TOS+QWBCT;                                                10326000
         TOS:=S0+1;                                                     10328000
         QCQP1:=TOS;                                                    10330000
                                                                        10332000
         IF DRQSTP <> 0 THEN                                            10334000
            WHILE DRQSTP<>0 DO SERVDRQST                                10336000
            ELSE                                                        10338000
         BEGIN                                                          10340000
            X:=DITP(DIOQP);                                             10342000
            IF <> THEN                                                  10344000
            IF DITPL.UP OR 1<=(FUNCTION-ALLOCATE+1)<=16 AND             10346000
               %100130&CSL(X) OR FUNCTION=FOPEN THEN           <<00637>>10348000
            BEGIN       <<READY TO DO I/O OR CALL IS TO ALLOCATE        10350000
                          TERM,RETUEN TTYPE OR RETURN OUTPUT SPD>>      10352000
               IF QMISCPL.NOSTOP THEN SERVIOQ                           10354000
                  ELSE                                                  10356000
               BEGIN                                                    10358000
                  X:=IOQP;      <<TEST FOR ABORT FLAG>>                 10360000
                  IF < THEN ABORTIOQ                                    10362000
                     ELSE                                               10364000
                  BEGIN                                                 10366000
                     IF DITP.DSTATE = WRITING AND              <<04243>>10368000
                        (DITPL.ENQACKWAIT OR DTYPEPL.WAITXON)  <<04243>>10370000
                        OR NOABORTS THEN                       <<04243>>10372000
                     BEGIN       <<NOT PAUSED WRITE & NO ABORTS>>       10374000
                        X:=DMODEMP;                                     10376000
                        IF < AND NOT QMISCPL.NOPREMPT THEN              10378000
                           SERVPREMPT;                                  10380000
                           <<RETURNS CONTINUE=TRUE IF NOT PREMPTD>>     10382000
                        IF CONTINUE THEN SERVIOQ ;                      10384000
                     END;                                               10386000
                  END;                                                  10388000
               END;                                                     10390000
            END                                                         10392000
               ELSE                                                     10394000
            BEGIN                                                       10396000
               QWBCTP:=0;   <<DEV NOT UP,CAN'T PERFORM REQUSET>>        10398000
               SETSTATUS(OFFLINE);                                      10400000
               <<RETURN IOQ W/OFFLINE STATUS,SERVICE NEXT REQUEST>>     10402000
            END;                                                        10404000
         END;                                                           10406000
      END;                                                              10408000
      DISABLE;                                                          10410000
      TOS:=DITP;                                                        10412000
   END;                                                                 10414000
   TOS.ACTIVE:=0;                                                       10416000
END                                                                     10418000
   ELSE                                                                 10420000
   TOS.REQUEST:=1;                                                      10422000
                                                                        10424000
DITP:=TOS;                                                              10426000
END;                                                                    10428000
<<--------------------END OF TERMIOM------------------------------>>    10430000
                                                                        10432000
                                                                        10434000
                                                                        10436000
ASMB(                                                                   10438000
   PCAL TERMIOM;  <<MONITOR PLABEL>>                                    10440000
   PCAL HELP;     <<NO INITIATOR>>                                      10442000
   CON 0;         <<NO COMPLETOR>>                                      10444000
   CON 0;         <<USE SYSTEM I/O PROCESS>>                            10446000
                                                                        10448000
   PCAL ADCCINIT; <<TERMINAL INITIALIZATION>>                           10450000
                                                                        10452000
   CON 1;         <<1 INTERRUPT PROCESSOR >>                            10454000
   PCAL TIP );                                                          10456000
END.     <<TERMINAL MONITOR CODE SEGMENT>>                              10458000
