!******************** !* COMMS * !* TT BUFFER * !* 21:OCT:77 15.13 * !******************** CONTROL K'101011'; ! 'SYSTEM' PROGRAM (FAST ! ROUTINE ENTRY/EXIT) SYSTEMROUTINESPEC LINKIN(INTEGER SER) SYSTEMROUTINESPEC MAPHWR(INTEGER SEG) BEGIN RECORDFORMAT PF(BYTEINTEGER SER, REPLY, INTEGER A, B, C) RECORDFORMAT P2F(BYTEINTEGER SER, REPLY, INTEGER A, C BYTEINTEGERNAME B, INTEGER C) CONSTBYTEINTEGERNAME ID = K'160030' CONSTINTEGER TT HANDLER = 1 CONSTINTEGER T3SER = 21 CONSTINTEGER EOT = 4 RECORD (PF)P RECORD (P2F) NAME P2 CONSTINTEGER MYSEG = 5, MYSEGA = K'120000' OWNINTEGER ON, OFF, UP TO, TT STATE INTEGER I, SEG, REPLY, LEN, N, TEMP RECORDFORMAT BUFF(BYTEINTEGERARRAYNAME B) RECORDFORMAT BUXF(INTEGER ARRAY PT) RECORD (BUFF)BUF RECORD (BUXF) NAME BUX CONSTINTEGER END = 511 OWNBYTEINTEGERARRAY HOLD(0:END) BUX == BUF; P2 == P LINKIN(T3SER) CYCLE P_SER = 0 POFF(P) REPLY = P_REPLY CONTINUEIF P_REPLY = 0; ! UNWANTED INTERRUPT IF P_SER = ID START ; ! TT REPLY TT STATE = 0 OFF = (UP TO)&END IF ON # OFF START DO OUT: IF OFF > ON THEN UP TO = END+1 ELSE UP TO = ON ! ONLY TO END OF CIRC BUFF P_SER = TT HANDLER; P_REPLY = ID P_A = 1; P2_B == HOLD(OFF); P_C = UP TO-OFF TT STATE = 1 PON(P) FINISH CONTINUE FINISH SEG = P_B >> 13 MAP VIRT(REPLY, SEG, MYSEG) BUX_ARRAYPT = MYSEGA+(P_B&K'17777') LEN = P_C IF (ON+1)&END # OFF START CYCLE I = 0, 1, LEN-1 HOLD(ON) = BUF_B(I) TEMP = ON ON = (ON+1)&END IF (ON+1)&END = OFF START HOLD((ON-2)&END) = '@'; HOLD(TEMP) =NL EXIT FINISH REPEAT FINISH MAP VIRT(0, -1, MY SEG) P_SER = REPLY; P_REPLY = T3SER P_A = 0 PON(P) IF TTSTATE = 0 THEN -> DO OUT REPEAT ENDOFPROGRAM