! RLS/RL A.L. IBBETSON UNIKENT 1979
! DOWN-LINE LOADING VIA RING
! FILE ON STREAM 1 IN A-P FORMAT
!
CONTROL K'100001'
BEGIN
RECORDFORMAT BUFF(BYTEINTEGERARRAY A(0:100))
RECORDFORMAT MEF(RECORD (MEF) NAME LINK,BYTEINTEGER LEN,TYPE,C
RECORD (BUFF) BUF)
RECORDFORMAT PE(BYTEINTEGER SER,REPLY,FN,PORT,RECORD (MEF) NAME MES,C
BYTEINTEGER L,S)
RECORD (PE) P
CONSTBYTEINTEGER RING SER = 10, BUF MAN = 17; ! STD SERVICES IN FEP
CONSTBYTEINTEGERNAME MYID = K'160030', INT=K'160060'
BYTEINTEGERARRAYNAME BUFFER
INTEGER ADR,I,EOF,TIME,C1,C2,LEN
!
SYSTEMROUTINESPEC ALARM(INTEGER TICKS)
SYSTEMROUTINESPEC MAP VIRT(INTEGER TASK,SEG,MYSEG)
!
!
ROUTINE MESSAGE(RECORD (PE) NAME P)
IF INT#0 THEN PRINTSTRING("PON") AND WRITE(P_SER,3)
PON(P)
REPOFF:
P_SER = 0; POFF(P)
IF INT # 0 START
PRINTSTRING(" POFF")
WRITE(P_REPLY,3)
NEWLINE
FINISH
IF P_SER=MYID AND P_REPLY=0 START ;! CLOCK
TIME = TIME - 1
IF TIME=0 START
PRINTSTRING("TIMED OUT. LOAD FAILED"); NEWLINE
STOP
FINISH
ALARM(50) ;! 1 SEC
-> REPOFF
FINISH
END
!
!
INT = 0
ADR = 0
CYCLE
PROMPT("Station address for RL load :")
CYCLE
READSYMBOL(I)
EXITUNLESS '9' >= I >= '0'
I = I-'0'
ADR = ADR*10 + I
REPEAT
EXIT IF ADR#0
REPEAT
!
SELECTINPUT(1)
MAP VIRT(BUFMAN,5,4)
EOF = 0
ALARM(50) ;! ONE SECOND
!
UNTIL EOF # 0 CYCLE
TIME = 5 ;! SECS TO COMPLETE A TXFR
P_SER=BUFMAN; P_REPLY=MYID
P_FN=0; P_L=1 ;! REQUEST 64 BYTE BUFFER
MESSAGE(P)
LEN = 0; BUFFER == P_MES_BUF_A
CYCLE I=0,1,31
READSYMBOL(C1); READSYMBOL(C2)
IF C1=C2=4 THEN EOF=1 ANDEXIT
BUFFER(LEN) = (((C1-'A')<<4) + C2-'A') & K'377'
LEN = LEN+1
REPEAT
!
P_SER=RINGSER; P_REPLY=MYID
P_FN=2; P_PORT=ADR; P_MES_LEN=LEN
MESSAGE(P); ! REQUEST SINGLE-SHOT RING TRANSFER
IF P_L = 0 AND P_FN = 1 THENCONTINUE
PRINTSTRING("LOAD FAILED. ")
IF P_L=1 THEN PRINTSTRING("TCP DEAD") ELSE PRINTSTRING("FEP BUSY")
NEWLINE
EXIT
REPEAT
P_SER=0; POFF(P) ;! ALLOW ALARM TO COME THRO
ENDOFPROGRAM