!************************ !* COMMS * !* TT BUFFER * !* DATE: 09.JAN.80 * !* IMP77 VSN:24.OCT.80 * !* time prefix added * !* 13/12/83 * !************************ ! !prep option: !k : time option for kent CONSTSTRING (7) VSN = "VSN01C" CONTROL K'100401' ;!JB #if k externalroutinespec alarm(integer ticks) #fi EXTERNALROUTINESPEC MAP VIRT(INTEGER SER,SEG1,SEG2) ;!JB EXTERNALROUTINESPEC LINKIN(INTEGER SER) ;!JB EXTERNALROUTINESPEC MAPHWR(INTEGER SEG);!JB BEGIN RECORDFORMAT PF(BYTEINTEGER SER, REPLY, INTEGER A, B, C) RECORDFORMAT P2F(BYTEINTEGER SER, REPLY, INTEGER A, C BYTEINTEGERNAME B, INTEGER C) EXTERNALROUTINESPEC POFF(RECORD (PF)NAME P) ;!JB EXTERNALROUTINESPEC PON(RECORD (PF)NAME P) ;!JB CONSTBYTEINTEGERNAME ID == K'160030' ;!JB CONSTINTEGER TT HANDLER = 1 CONSTINTEGER T3SER = 21 CONSTBYTEINTEGERNAME INT == K'160060' ;!JB CONSTINTEGER EOT = 4 RECORD (PF)P RECORD (P2F) NAME P2 CONSTINTEGER MYSEG = 5, MYSEGA = K'120000' OWNINTEGER ON, OFF, UP TO, TT STATE, QUIET INTEGER I, SEG, REPLY, LEN, N, TEMP RECORDFORMAT BUFF(BYTEINTEGERARRAYNAME B) RECORDFORMAT BUXF(INTEGER ARRAY PT) RECORD (BUFF)BUF RECORD (BUXF) NAME BUX #if k ownbyteintegerarray time(0:5)='*','*',':','*','*',' ' owninteger mincount=-1; !undefined owninteger hrcount #fi CONSTINTEGER END = 1023 OWNBYTEINTEGERARRAY HOLD(0:END) #if k routine setup time(integer h,m) time(0)=h//10+'0' time(1)=h-h//10*10+'0' time(3)=m//10+'0' time(4)=m-m//10*10+'0' end routine settime hrcount=p_b//60 mincount=p_b-60*hrcount setup time(hrcount, mincount) end #fi routine put(byteintegerarrayname b, integer len) integer TEMP,I IF (ON+1)&END # OFF AND QUIET=0 START FOR I = 0, 1, len-1 CYCLE ;!JB HOLD(ON) = 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 end #if k alarm(50*60); !every minute #fi BUX == BUF; P2 == P LINKIN(T3SER) CYCLE P_SER = 0 POFF(P) REPLY = P_REPLY IF INT # 0 START IF INT = 'Q' THEN QUIET = 1 ELSE QUIET = 0 FINISH if P_REPLY=0 start ; !clock int #if k if mincount>=0 start ; !time valid mincount=mincount+1; if mincount>=60 start mincount=0 hrcount=hrcount+1 if hrcount>=24 then hrcount=0 finish setup time(hrcount, mincount) finish ALARM(50*60) #fi CONTINUE finish 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 #if k !see if a call to set the time if P_A=-1 then settime and continue #fi SEG = P_B >> 13 MAP VIRT(REPLY, SEG, MYSEG) BUX_ARRAYPT = MYSEGA+(P_B&K'17777') LEN = P_C #if k put(time, 6) #fi put(BUF_B, LEN) 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