! FILE 'NCONT3S' !********************** !* NCON3S/NCON3Y * !* DATE: 13.MAR.80 * !********************* %CONSTSTRING (7) VSN = "VSN002A" !! STACK = 400, STREAMS = 3 !! MESSAGES FROM THE NETWORK SHOULD BE ENABLED - SEE !! THE COMMENT AT 'MESSAGES ENABLED' %CONTROL K'100001' !STACK=400, STREAMS=3 %RECORDFORMAT XF(%BYTEINTEGER UNIT,FSYS,%BYTEINTEGERARRAY FNAME(0:5)) %EXTERNALPREDICATESPEC READ FNAME(%RECORD(XF)%NAME FILE) %SYSTEMROUTINESPEC ALARM(%INTEGER TICKS) %SYSTEMROUTINESPEC LINKIN(%INTEGER SER) %BEGIN %CONSTINTEGER CONTROL SER = 11 %CONSTINTEGER KERNEL SER = 29 %RECORDFORMAT RJEF(%BYTEINTEGERARRAY DATA(0:239)) %RECORDFORMAT NSI1F(%BYTEINTEGER FN,SUFL,ST,SS,FLAG,UFLAG, %C %RECORD(RJEF) ITP) %RECORDFORMAT NSI2F(%BYTEINTEGER FN,SUFL,ST,SS,FLAG,UFLAG, %C %RECORD(RJEF) RJE) %RECORDFORMAT MEF(%RECORD(MEF)%NAME LINK,%BYTEINTEGER LEN,TYPE, %C %RECORD(NSI1F) NSL) %RECORDFORMAT ME2F(%RECORD(ME2F)%NAME LINK,%BYTEINTEGER LEN,TYPE, %C %RECORD(NSI2F) NSL) %RECORDFORMAT PF(%BYTEINTEGER SERVICE,REPLY,FN,PORT, %C %RECORD(ME2F)%NAME MES,%BYTEINTEGER LEN,S1) %RECORDFORMAT P2F(%BYTEINTEGER SERVICE,REPLY,FN,PORT, %C %INTEGER ADDRESS, %BYTEINTEGER LEN,S1) %RECORDFORMAT P3F(%BYTEINTEGER SERVICE,REPLY,FN,PORT,FACILITY,FLAG,NODE,TERM) %RECORDFORMAT P4F(%BYTEINTEGER SER, REPLY, A1, A2, B1, B2, C1, C2) %RECORDFORMAT FF(%BYTEINTEGERARRAY FN(0:5)) %RECORDFORMAT P5F(%BYTEINTEGER SER, REPLY, %RECORD (FF) FNAME) %RECORD(PF) P; %RECORD(P2F)%NAME P2; %RECORD(P3F)%NAME P3 %RECORD (P4F) %NAME P4; %RECORD (P5F) %NAME P5 %RECORD(RJEF)%NAME BLOCK %RECORD(RJEF)%NAME FRAME %CONSTRECORD(MEF)%NAME NULL=0 %CONSTINTEGER TT=0,LO=1,CR=2,LP=3,BT=7 %RECORDFORMAT LNF(%INTEGER STATE, NODE, TERM, SER NO, %C LINE TYPE, RX INT, TX INT, ADDRESS) %OWNRECORD (LNF) %NAME LN %OWNRECORD (LNF) %ARRAY LNA(0:30) %OWNSTRING (9) %ARRAY STA(0:6) = "", "Starting", "Halted", "Prot up", "Attached", "Removed", "Down" %CONSTINTEGER PRESENT=1, HALTED=2, LUP=3, ATT=4, REM=5, DOWN=6 %OWNINTEGER NODE, TERM, STRM %RECORDFORMAT HOSTF(%INTEGER NUMBER, %C %INTEGERARRAY PORT(CR:LP),STATUS(LO:LP), %C %INTEGER CR COUNT,CR K,LP COUNT,LP K, NODE) %RECORDFORMAT STRDF(%INTEGER A,B,C,D,%RECORD(XF) FILE,%INTEGER E,F,G,H) %RECORDFORMAT STRPF(%RECORD(STRDF)%NAME STRD) %RECORD(STRDF)%NAME STRD %RECORDFORMAT D1F(%INTEGER X); %RECORD(D1F) D1 %RECORDFORMAT D2F(%RECORD(STRPF)%NAME X); %RECORD(D2F)%NAME D2 %RECORDFORMAT D3F(%BYTEINTEGERNAME N); %RECORD (D3F) %NAME D3 %RECORDFORMAT D5F(%STRINGNAME S); %RECORD (D5F) %NAME D5 %RECORD (XF) %NAME FILE %RECORD(XF) CR FILE %STRINGNAME LINEX %CONSTBYTEINTEGERARRAY STATUS(0:6)=6,'S','T','A','T','U','S' %CONSTBYTEINTEGERARRAY PRINTER(0:2)=2,'L','P' %CONSTBYTEINTEGERARRAY FEP(0:2) = 2, 'F', 'E' %CONSTBYTEINTEGERARRAY EMAS NAME(0:5)=4,'E','M','A','S',0 %CONSTBYTEINTEGERARRAY E2970 NAME(0:5)=4,'2','9','7','0',0 %CONSTBYTEINTEGERARRAY E2980 NAME(0:5) = 4,'2','9','8','0', 0 %CONSTINTEGER EMAS NUMBER=34, E2970 NUMBER=49 %CONSTINTEGER E2980T = 80 %BYTEINTEGERARRAYNAME BUFF %CONSTBYTEINTEGERNAME ID=K'160030', INT = K'160060' %OWNINTEGER SETBFLAG, BINFLAG %CONSTINTEGER SET PR = 13; ! PAPER TAPE READER STREAM %CONSTINTEGER MAX COM = 10 %SWITCH SW(0:MAX COM) %CONSTSTRING (3) %ARRAY COMS(0:MAX COM) = ' ', 'TT', 'OP', 'CR', 'LP', 'SM', 'HA', 'ST', 'MO', 'DI', 'DL' %OWNSTRING (3) NEW = ' ' %OWNBYTEINTEGERARRAY LINE(0:119) %OWNINTEGER LPTR,LINE LENGTH,I,J %OWNINTEGER NO OF FILES,NLP SER, NLP ADD, NCR SER, NCR ADD, DL SER %CONSTINTEGER TT SER=1, GATE SER=16, BUFFER MANAGER=17, LOAD SER = 5 %CONSTINTEGER RD=0 %CONSTINTEGER REQUEST BUFFER=0, RELEASE BUFFER=1 %CONSTINTEGER ENABLE FACILITY=1, CALL REPLY=3 %CONSTINTEGER PUT OUTPUT=5, CLOSE CALL=6 %CONSTINTEGER ABORT CALL=7, OPEN CALL=8, OPEN MESSAGE=9 %CONSTINTEGER OPEN CALL REPLY=1, INCOMING CALL=2, INPUT RECD=3 %CONSTINTEGER OUTPUT TRANSMITTED=4, CALL CLOSED=5, CALL ABORTED=6 %CONSTINTEGER OPEN REPLY A=7, OPEN REPLY B=8, MESSAGE IN=9, MESSAGE REPLY=10 %CONSTINTEGER CR DATA=7, SOCIAL CALL=8 %CONSTINTEGER REJECT=0 %CONSTINTEGER IDLE=0, STARTING=1, RUNNING=2, OPENED=3, STOPPING=4, STOPPING2=5 %CONSTSTRING(9)%ARRAY STAT(0:6)='Idle','Starting','Running', 'Enabled', 'Stopping'(2), 'Running' %CONSTINTEGER BUFFER SIZE=230 %OWNBYTEINTEGERARRAY BUFFER(0:230) %OWNINTEGER CR STRM %OWNINTEGER PUT, GET, END, LEN POSN %OWNINTEGER CR STATUS, CR PORT, CR COUNT, CR K %PREDICATESPEC MATCH(%BYTEINTEGERARRAYNAME MASTER) %INTEGERFNSPEC EXIST(%RECORD (XF) %NAME FILE) %ROUTINE TO TT(%INTEGER FN) %RECORDFORMAT PF(%BYTEINTEGER SERVICE,REPLY,%INTEGER A1,%BYTEINTEGERARRAYNAME %C A2,%INTEGER A3) %RECORD(PF) P P_SERVICE=TT SER; P_REPLY=ID P_A1=FN; P_A2==LINE; P_A3=120 PON(P) %END %INTEGERFN READ ADDRESS !! USES GLOBALS NODE, TERM AND STRM %INTEGER K %INTEGERFN SIG LPTR = LPTR+1 %WHILE LINE(LPTR)=' ' %RESULT = LINE(LPTR) %END %INTEGERFN R NUM %INTEGER J, N N=0 %CYCLE J=LINE(LPTR) %UNLESS '0' <= J <= '9' %THEN %RESULT = N LPTR = LPTR+1 N = N*10+J-'0' %REPEAT %END %IF MATCH(EMAS NAME) %START TERM = EMAS NUMBER ADD NODE: NODE = TERM %RESULT = 1 %FINISH %IF MATCH(E2970NAME) %THEN TERM=E2970NUMBER %AND ->ADD NODE %IF MATCH(E2980 NAME) %START TERM = E2980T; ->ADD NODE %FINISH NODE = 0; ! DEPENDS ON USER SPECIFING K = SIG; LPTR = LPTR+1 %IF K = 'N' %START; ! SPECIFY NODE NUMBER NODE = RNUM K = LINE(LPTR); LPTR = LPTR+1 %FINISH %RESULT = 0 %UNLESS K='T' TERM = RNUM; K=LINE(LPTR); LPTR=LPTR+1 %IF K='S' %START STRM = RNUM; K=LINE(LPTR); LPTR=LPTR+1 %FINISH %RESULT = 0 %UNLESS K = ' ' LPTR = LPTR-1 %RESULT = 1 %END %PREDICATE MATCH(%BYTEINTEGERARRAYNAME MASTER) %INTEGER I LPTR=LPTR+1 %WHILE LINE(LPTR)=' ' %CYCLE I=1,1,MASTER(0) %FALSE %IF LINE(LPTR+I-1)#MASTER(I) %REPEAT LPTR=LPTR+I %TRUE %END %ROUTINE SET STREAM(%INTEGER STREAM,%RECORD(XF)%NAME FILE) %CONSTINTEGERARRAY DISC(0:3)=3,3,8,14 D1_X=K'160032'+STREAM<<1 STRD == D2_X_STRD STRD_A=0; STRD_B=2; STRD_C=0; STRD_D=ID<<8!DISC(FILE_UNIT) STRD_FILE=FILE; STRD_E=0; STRD_F=0; STRD_G=0; STRD_H=K'172' %END %ROUTINE PRINT COUNT(%INTEGER K,UNITS) PRINT SYMBOL(',') WRITE(K,0) %AND PRINT STRING('K +') %IF K>0 WRITE(UNITS,0); PRINT STRING(' CHARS') %END %ROUTINE SET CR FILE %CYCLE PROMPT("CR FILE:") SKIPSYMBOL %IF NEXTSYMBOL=NL %IF NEXTSYMBOL='.' %START SKIPSYMBOL %IF NEXTSYMBOL='T' %START SKIPSYMBOL; SKIPSYMBOL; SKIPSYMBOL CR FILE_UNIT = 255 SET B FLAG = 0; ! ALLWAYS IN ISO %RETURN %FINISH %FINISH %IF EXIST(CR FILE) = 1 %THEN %EXIT %REPEAT SET STREAM(1, CR FILE) %END %ROUTINE READ BUFFER %INTEGER CHAR, I, F %ROUTINE BUMP I=I+1 PUT=PUT+1 PUT=0 %IF PUT = BUFFER SIZE %END END=-1; F=0 I=BUFFER(LEN POSN) SELECT INPUT(1) %UNLESS CR FILE_UNIT = 255 %CYCLE READSYMBOL(CHAR) %IF (SET B FLAG=0 %AND CHAR=4) %OR CHAR<0 %START NO OF FILES = NO OF FILES-1 %IF NO OF FILES > 0 %START; ! MORE TO GO PRINTSTRING('CR: File done ') SELECT INPUT(0) SET BFLAG = BIN FLAG SET CR FILE SELECT INPUT(1) %UNLESS CR FILE_UNIT=255 %CONTINUE; ! GET NEXT SYMBOL %FINISH CR STATUS=STOPPING %IF F=0 PUT=-1 %EXIT %FINISH F = 1; ! CHARACTER PLANTED THIS TIME ROUND BUFFER(PUT)=CHAR END=PUT %IF CHAR=NL %OR CHAR=12 %OR CHAR=13 BUMP %IF CHAR=10 %OR CHAR=12 %OR CHAR=13 %START INSERT: BUFFER(LEN POSN)=I I=I+CR COUNT I=I-1024 %AND CR K=CR K+1 %IF %C I>=1024 CR COUNT=I BUFFER(PUT)=X'80'; BUMP LEN POSN=PUT; BUMP I=0 %FINISH %EXIT %IF PUT<=GET %AND PUT+5>GET %EXIT %IF PUT>GET %AND PUT+5-BUFFER SIZE>GET %REPEAT %IF END = -1 %START %IF PUT = 0 %THEN END = BUFFER SIZE-1 %ELSE %C END = PUT-1 -> INSERT %FINISH BUFFER(LEN POSN)=I SELECT INPUT(0) %END %ROUTINE FILL BUFFER %INTEGER I,J CR STATUS=STOPPING %IF PUT=-1 %CYCLE I=0,1,BUFFER SIZE-1 BLOCK_DATA(I)=BUFFER(GET) J=GET; GET=GET+1 GET=0 %IF GET = BUFFER SIZE %EXIT %IF J=END %REPEAT P_MES_LEN=I+7 %END %INTEGERFN EXIST(%RECORD(XF)%NAME FILE) %RECORDFORMAT PF(%BYTEINTEGER SERVICE,REPLY,%INTEGER A1, %C %RECORD(XF)%NAME A2,%INTEGER A3) %RECORD(PF) P %CONSTINTEGERARRAY DIRT(0:3)=4,4,9,15 %IF READ FNAME(FILE) %START P_SERVICE=DIRT(FILE_UNIT); P_REPLY=ID P_A1=0; P_A2==FILE; P_A3=0 PONOFF(P) %RESULT=1 %IF P_A1#0 %FINISH PRINTSTRING("CR: No File ") %RESULT=0 %END %ROUTINE GET BUFFER(%INTEGER REASON) P_SERVICE=BUFFER MANAGER; P_REPLY=ID P_FN=REQUEST BUFFER; P_LEN=0; P_S1=REASON PON(P) %END %ROUTINE FREE BUFFER(%RECORD(MEF)%NAME MES) P_SERVICE=BUFFER MANAGER; P_REPLY=ID P_FN=RELEASE BUFFER; P_MES==MES PON(P) %END %ROUTINE CONNECT(%INTEGER HOST NO,FACILITY) P3_SERVICE=GATE SER; P3_REPLY=ID P3_FN=OPEN CALL; P3_PORT=1; P3_FACILITY=FACILITY P3_FLAG=X'48'; P3_NODE=NODE; P3_TERM=HOST NO P3_TERM=48 %IF P3_TERM=34 %AND P3_FACILITY=18 PON(P) %END %ROUTINE TO GATE(%INTEGER FN,%RECORD(MEF)%NAME MES,%INTEGER FLAG) P_SERVICE=GATE SER; P_REPLY=ID P_FN=FN; P_MES==MES; P_S1=FLAG PON(P) %END %ROUTINE FROM GATE %INTEGER I,J,K,L %SWITCH SW(OPEN CALL REPLY:MESSAGE REPLY) ->SW(P_FN) SW(OPEN CALL REPLY):%RETURN SW(INCOMING CALL): TO GATE(CALL REPLY,NULL,REJECT) SW(INPUT RECD): %RETURN SW(OUTPUT TRANSMITTED): %IF CR STATUS=STOPPING %START TO GATE(CLOSE CALL,NULL,0) CR STATUS=STOPPING2 %ELSE P_PORT=1 GET BUFFER(CR DATA) %FINISH %RETURN SW(CALL CLOSED): PRINTSTRING("CR: Finished") PRINT COUNT(CR K,CR COUNT) NEWLINE CR STATUS=IDLE -> READ AGN SW(CALL ABORTED): TO GATE(ABORT CALL,NULL,0) PRINTSTRING("CR: Aborted ") CR STATUS = IDLE -> READ AGN SW(OPEN REPLY A): CR PORT = P_S1 %RETURN SW(OPEN REPLY B): %IF P_S1#0 %START PRINTSTRING("CR:Connect fails"); WRITE(P_S1,0); NEWLINE CR STATUS=IDLE %ELSE PRINTSTRING("CR: Connected ") CR COUNT=0; CR K=0 P_PORT=1 SET B FLAG = BIN FLAG SET CR FILE J=0 GET=0 BUFFER(0)=X'80'; BUFFER(1) = 0 LEN POSN=1; PUT=2 GET BUFFER(CR DATA) READ BUFFER CR STATUS=RUNNING %FINISH READ AGN: TO TT(RD) %RETURN SW(MESSAGE IN): BUFF==P_MES_NSL_RJE_DATA I=P_MES_NSL_ST WRITE(I,1) PRINT SYMBOL(':') K=BUFF(3) I=4; L=0 %UNTIL I+6>=P_MES_LEN %CYCLE SPACES(3) %UNLESS I=4 %IF BUFF(I)>127 %THEN I=I+1; J=BUFF(I) %CYCLE I=I+1,1,I+J L=BUFF(I) PRINT SYMBOL(L) %REPEAT NEWLINE %UNLESS L=NL; I=I+1 %REPEAT TO GATE(CALL REPLY,P_MES,128) %RETURN SW(MESSAGE REPLY): ! GATE VSN 3 ONWARDS PRINTSTRING("SM:") %IF P_MES_NSL_SUFL=0 %THEN PRINTSTRING(" OK") %ELSE %C WRITE(P_MES_NSL_SUFL, 3) NEWLINE FREE BUFFER(P_MES) %END %ROUTINE FROM BUFFER MANAGER %INTEGER I %RECORD (ME2F) %NAME MES MES == P_MES BLOCK==MES_NSL_RJE %IF P_S1 = SOCIAL CALL %START BLOCK_DATA(I+4)=LINE(LPTR+I) %FOR I=1,1,LINE LENGTH-LPTR-1 BLOCK_DATA(3)=5; BLOCK_DATA(4)=LINE LENGTH-LPTR-1 I=P_PORT; P_PORT=0; P3_NODE=NODE BLOCK_DATA(1) = STRM MES_LEN=10+LINE LENGTH-LPTR TO GATE(OPEN MESSAGE,P_MES,I) TO TT(RD) %ELSE FILL BUFFER %IF SETBFLAG=0 %THEN P_MES_NSL_UFLAG=5 %ELSE %C P_MES_NSL_UFLAG = 1 P_PORT=CR PORT TO GATE(PUT OUTPUT,P_MES,0) READ BUFFER %FINISH %END %INTEGERFN DO OP(%INTEGER STREAM) %INTEGER I STRM = STREAM %IF READ ADDRESS # 0 %START P_PORT=TERM GET BUFFER(SOCIAL CALL) %RESULT=2 %FINISH %RESULT=0 %END %INTEGERFN DO CR %INTEGER I %CONSTBYTEINTEGERARRAY FILESX(0:6) = 5, 'F','I','L','E','S',0 %CONSTBYTEINTEGERARRAY BINX(0:4) = 6, 'B', 'I', 'N', 0 %IF MATCH(STATUS) %START PRINTSTRING("CR:"); PRINTSTRING(STAT(CR STATUS)) %IF CR STATUS=RUNNING %START PRINT COUNT(CR K,CR COUNT) %FINISH NEWLINE %RESULT=1 %FINISH %IF CR STATUS=IDLE %START %RESULT = 0 %IF READ ADDRESS=0 BIN FLAG = 0 %IF MATCH(BINX) %THEN BIN FLAG = 1 %IF MATCH(PRINTER) %THEN CR STRM=4 %ELSE %START %IF MATCH(FEP) %THEN CR STRM = 9 %ELSE %START CR STRM=SET PR %FINISH %FINISH %IF MATCH(FILESX) %START NO OF FILES = LINE(LPTR+1)-'0' %ELSE NO OF FILES = 1 CONNECT(TERM,CR STRM) CR STATUS=STARTING %RESULT=2 %FINISH %RESULT=0 %END %INTEGERFN CALL LOADER(%STRINGNAME S) %RECORDFORMAT PE(%BYTEINTEGER SERVICE, REPLY, %INTEGER A1, %C %BYTEINTEGERNAME B, %INTEGER C) %RECORDFORMAT R1F(%STRINGNAME S) %RECORDFORMAT R2F(%BYTEINTEGERARRAYNAME A) %RECORD (R1F)R1; %RECORD (R2F) %NAME R2 %RECORD (PE)P R2 == R1 R1_S == S R2_A(LENGTH(S)+1) = NL P_SERVICE = LOAD SER; P_REPLY = ID P_A1 = 1; P_B == R2_A(1); P_C = 4 PONOFF(P) %RESULT = P_A1 %END %ROUTINE PRINT LN(%INTEGER N) LN == LNA(N) %IF LN_STATE >= PRESENT %START PRINTSTRING("LN"); WRITE(N, 1) SPACE; PRINTSTRING(STA(LN_STATE)) %IF LN_STATE >= ATT %START PRINTSTRING(" N"); WRITE(LN_NODE, 1) PRINTSTRING(" T"); WRITE(LN_TERM, 1) %FINISH NEWLINE %FINISH %END %ROUTINE FROM KERN %SWITCH SW(0:4) %INTEGER I, J, K %CONSTBYTEINTEGERARRAY FAC NOS(1:3) = 1, 2, 7 P4 == P %IF P4_A2 > 30 %START PRINTSTRING("ILLEGAL LINE NO ") WRITE(P4_A2, 1); NEWLINE %RETURN %FINISH LN == LNA(P4_A2) -> SW(P4_A1) SW(2): ! HELLO LN_SER NO = P4_C2; LN_STATE = PRESENT %RETURN SW(0): ! LINE UP LN_STATE = LUP; LN_NODE = P4_B1 %RETURN SW(3): ! ATT %IF LN_STATE # ATT %START LN_STATE = ATT; LN_NODE = P4_B1; LN_TERM = P4_B2 %IF P4_A2 = 30 %START; ! INTERNAL GATE TO GATE(ENABLE FACILITY, NULL, FAC NOS(I)) %FOR I=1,1,3 %FINISH PRINT LN(P4_A2) %FINISH %RETURN SW(4): ! REM %IF P4_B1 = LN_NODE %AND P4_B2 = LN_TERM %START LN_STATE = REM %FINISH %RETURN SW(1): ! LINE DOWN LN_STATE = DOWN PRINT LN(P4_A2) LN_NODE = 0; LN_TERM = 0 LN_STATE = PRESENT %UNLESS LN_STATE = HALTED %END %INTEGER %FN DO CONTROL(%INTEGER TYPE) %INTEGER J,K,N %CONSTSTRING (7) DOWNI = "DOWNY A" %SWITCH SW(6:10) %INTEGERFN ANALYSE LINE %CONSTBYTEINTEGERARRAY ALL(0:4) = 3, 'A','L','L',0 %CONSTBYTEINTEGERARRAY ACT(0:4) = 3, 'A','C','T',0 %CONSTBYTEINTEGERARRAY LN(0:3) = 2, 'L', 'N', 0 %INTEGER J,K %IF MATCH(ALL) %THEN %RESULT = -1 %IF MATCH(ACT) %THEN %RESULT = -2 %UNLESS MATCH(LN) %THEN %RESULT = -3 J=LINE(LPTR)-'0'; K=LINE(LPTR+1)-'0' LPTR = LPTR+1 %UNLESS 0<=J<=9 %THEN %RESULT = -3 %IF 0<=K<=9 %START LPTR = LPTR+1; %RESULT = 10*J+K %FINISH %RESULT = J %END J = ANALYSE LINE %RESULT = 0 %IF J = -3 %IF J>=0 %THEN K=J %ELSE J=0 %AND K=30 %CYCLE I = J, 1, K LN == LNA(I) %CONTINUE %UNLESS LN_STATE >= PRESENT -> SW(TYPE) SW(7): ! START LINE %IF LN_STATE = HALTED %THEN LN_STATE = PRESENT -> COM SW(6): ! HALT LINE LN_STATE = HALTED SW(8): ! MONITOR COM: P_SERVICE = LN_SER NO; P_REPLY = ID P_FN = TYPE-2 PON(P) %CONTINUE SW(9): ! DISPLAY PRINT LN(I) %REPEAT %RESULT = 1 SW(10): ! DOWN LINE LOAD, format: DL LN1 TCPOY1 %RESULT = 0 %UNLESS J >= 0 PRINTSTRING("Calling down-line loader ") DLSER = CALL LOADER(DOWNI) PRINTSTRING("SER ="); WRITE(DL SER, 1); NEWLINE P4_SER = DLSER; P4_REPLY = ID P4_A1 = LN_LINE TYPE P2_ADDRESS = LN_ADDRESS P4_C1 = LN_RX INT P4_C2 = LN_TX INT PON(P4) LPTR = LPTR+1 %CYCLE I = 0, 1, 5 P5_FNAME_FN(I) = ' ' %REPEAT %CYCLE I = 0, 1, 5 N = LINE(LPTR); LPTR = LPTR+1 %IF N = ' ' %OR N = NL %THEN %EXIT P5_FNAME_FN(I) = N %REPEAT P5_SER = DLSER; P_REPLY = ID PON(P) %RESULT = 1 %END P2==P; P3==P; P4==P; P5 == P4 D2==D1; D3 == D2; D5 == D3 D3_N == LINE(0) LINEX == D5_S LINKIN(CONTROL SER) MAP VIRT(BUFFER MANAGER,5,4) MAP VIRT(BUFFER MANAGER, 6, 5) TO TT(RD) !******************* TEMP FOR NOE ********************** LNA(3)_RX INT = -25; LNA(3)_TX INT = -24; LNA(3)_ADDRESS = K'067620' !******************************************************* %CYCLE P_SERVICE=0; POFF(P) %IF P_REPLY=GATE SER %START FROM GATE %ELSE %IF P_REPLY =BUFFER MANAGER %START FROM BUFFER MANAGER %ELSE %IF P_REPLY = KERNEL SER %START FROM KERN %ELSE %IF P_REPLY=TT SER %START LINE LENGTH=0 LINE LENGTH=LINE LENGTH+1 %WHILE LINE(LINE LENGTH)#NL LINE LENGTH=LINE LENGTH+1 LPTR=3 I = LINE(2) %IF I = '/' %OR I = ' ' %OR I = NL %START I=0 CHARNO(NEW, 1) = LINE(0); CHARNO(NEW, 2) = LINE(1) %CYCLE J = 1, 1, MAX COM ->SW(J) %IF COMS(J) = NEW %REPEAT ->BOT SW(2): ! OP I = DO OP(11) ->BOT SW(3): ! CR I = DO CR; -> BOT SW(4): ! LP I=0 %IF NLP SER # 0 %START P_SERVICE= NLP SER; P_REPLY = CONTROL SER MAP VIRT(NLP SER, NLP ADD>>13, 3); ! MAP ITS 7 TO MY 3 D1_X = NLP ADD&K'17777'!K'060000'; ! IN SEG 3 LINE(0) = LINE LENGTH; ! THIS OVERWRITES 1ST BYTE D5_S = LINEX; ! COPY THE STRING P_MES == D2_X PON(P) NLP SER = 0 I = 1 %FINISH -> BOT SW(5): ! SM (SEND MESSAGE) I = DO OP(2); ->BOT SW(6): ! START LINE SW(7): ! HALT LINE SW(8): ! MONITOR SW(9): ! DISPLAY SW(10): ! DOWN LINE LOAD I = DO CONTROL(J) SW(1): ! TT BOT: TO TT(RD) %IF I=1 %CONTINUE %IF I>0 %FINISH SPACES(LPTR) PRINTSTRING("! Invalid ") TO TT(RD) %ELSE %IF P_FN = RD %START; ! NLPS OR NCRS %IF P_PORT = 1 %START; ! NLPS NLP SER = P_REPLY D2_X == P_MES NLP ADD = D1_X %FINISH %FINISH %IF INT = '?' %THEN INT=0 %AND TO TT(RD) %FINISH %REPEAT %ENDOFPROGRAM