.TITLE RMINIT - INITIALIZATION FOR REMOTE NODES .IDENT /V01.00/ .NLIST BEX ; ; COPYRIGHT (C) 1979, 1980 BY ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ; OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ; CORPORATION. ; ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. ; ; ; MODULE DESCRIPTION: ; ; INITIALIZATION ROUTINE FOR REMOTE NODE DISPLAY ; ; ; ; DISTRIBUTED SYSTEMS SOFTWARE ENGINEERING ; ; IDENT HISTORY: ; ; 1.00 19-MAR-80 ; .SBTTL MACROS ; ; MCALLS AND MACROS ; .MCALL QIOW$,DIR$ ; ; LOCAL MACROS ; .MACRO MESS,TXT ; CREATE ASCII STRING PRECEDED BY LENGTH .NCHR SYM, .WORD SYM .ASCII /TXT/ .ENDM .MACRO PRINT,TXT ; WRITE TEXT TO TERMINAL MOV #TXT+2,QIO+Q.IOPL MOV TXT,QIO+Q.IOPL+2 DIR$ #QIO .ENDM .MACRO SKIP,N ; WRITE N BLANK LINES TO TERMINAL MOV #LF,QIO+Q.IOPL MOV #N,QIO+Q.IOPL+2 DIR$ #QIO .ENDM .MACRO FLAG,DD ; FLAG CHARACTER AS NEW BISB #200,DD .ENDM .SBTTL SEGMENT DEFINITION .PSECT INIT,OVR,I,LCL .WORD INIT ; ENTRY POINT, FIRST WORD .SBTTL LOCAL DATA LF: .BYTE 40 ; FIRST BLANK LINE IS FREE FROM TTDRV .REPT 25. .BYTE 12 ; LINE FEED .ENDR .ENABL LC HDR1: .ASCIZ /Node: Type: State:/ HDR2: .ASCIZ /Line: Hops: Cost:/ HDR3: .ASCIZ /Seconds since zeroed: Connects received:/ HDR4: .ASCIZ /Bytes received: Connects sent:/ HDR5: .ASCIZ /Bytes sent: Response timeouts:/ HDR6: .ASCIZ /Messages received: Connect errors:/ HDR7: .ASCIZ /Messages sent: Max links active:/ HDR8: .ASCII /Task LUN LLA Task LUN LLA / .ASCIZ /Task LUN LLA/ HDR9: .ASCII /---- --- --- ---- --- --- / .ASCIZ /---- --- ---/ .DSABL LC .EVEN ; ; DPB'S USED FOR INITIAL COMMAND INPUT ; QIO: QIOW$ IO.WVB,$DLUN,$QIOF,,,,<,,40> PRMPT: QIOW$ IO.WVB,$DLUN,$QIOF,,,, READ: QIOW$ IO.RVB,$DLUN,$QIOF,,ISTAT,, ; ; TEXT LINES USED FOR INITIAL COMMAND INPUT ; .ENABL LC LINE1: MESS .EVEN LINE2: MESS .EVEN LINE3: MESS .EVEN LINEN: MESS < TO RETURN> .EVEN ERM: MESS .EVEN ERMNAM: MESS .EVEN ERMADD: MESS .EVEN PROMPT: .ASCII /COMMAND > / .EVEN .DSABL LC ; ; COMMAND BUFFER AND GENERAL DATA FOR INITIAL COMMAND INPUT ; CMDBUF: .BLKW <42.+1>/2 ERSTAT: .WORD 0 ISTAT: .WORD 0,0 .SBTTL INIT - REMOTE NODE INITIALIZATION ;+ ; ; INIT - REMOTE NODE DISPLAY INITIALIZATION ; ; INPUTS: NONE ; ; OUTPUTS: ; INFORMATION TEXT IS DISPLAYED ON TERMINAL AND ; ANY COMMAND SPECIFIED IS PROCESSED ; ;- INIT: TST $XCFLG ; ANY NODE SPECIFIED? BNE 10$ ; BR IF YES MOV #" ,$XCNOD+0 ; SET UP DEFAULT NODE NAME MOV #" ,$XCNOD+2 ; ... MOV #" ,$XCNOD+4 ; ... MOVB #0,$XCADD ; SET UP DEFAULT NODE ADDRESS CALL INICMD ; GET INITIAL COMMAND ; ; DISPLAY STATIC TEXT ; 10$: CALL $CLEAR ; BLANK SCREEN ; ; NODE IDENTIFICATION STATIC TEXT ; MOV $RMNID,R1 ; ADDRESS TO DISPLAY NODE IDENTIFICATION BEQ 20$ ; BR IF NOT TO BE DISPLAYED MOV #$NTNAM,R0 ; POINT TO LOCAL NODE NAME MOV #6,R2 ; NODE NAME IS 6 CHARACTERS LONG 15$: MOVB (R0)+,(R1)+ ; STORE THE NAME DEC R2 ; MORE TO MOVE? BGT 15$ ; BR IF YES MOVB #',,(R1)+ ; STORE DELIMITER MOVB #'I,(R1)+ ; STORE "ID=" STRING MOVB #'D,(R1)+ ; ... MOVB #'=,(R1)+ ; ... MOV #$NODID,R0 ; POINT TO NODE ID MOV (R0)+,R2 ; NODE ID IS 32. CHARACTERS LONG 18$: MOVB (R0)+,(R1)+ ; STORE IT DEC R2 ; MORE TO STORE? BGT 18$ ; BR IF YES ; ; SET UP NODE,TYPE,STATE LINE ; 20$: MOV $RMST1,R0 ; ADDRESS TO DISPLAY STATIC TEXT 1 BEQ 40$ ; BR IF NOT TO BE DISPLAYED MOV #HDR1,R1 ; POINT TO FIRST HEADER 30$: MOVB (R1)+,(R0)+ ; STORE HEADER 1 BNE 30$ ; BR IF NOT FINISHED MOVB #40,-(R0) ; DON'T DISPLAY NULLS ; ; SET UP LINE,HOPS,COST HEADER ; 40$: MOV $RMST2,R0 ; ADDRESS TO DISPLAY STATIC TEXT 2 BEQ 60$ ; BR IF NOT TO BE DISPLAYED MOV #HDR2,R1 ; POINT TO SECOND HEADER 50$: MOVB (R1)+,(R0)+ ; STORE HEADER 2 BNE 50$ ; BR IF MORE TO MOVE MOVB #40,-(R0) ; DON'T DISPLAY NULLS ; ; SET UP NODE COUNTERS STATIC TEXT ; 60$: MOV $RMCN1,R0 ; ADDRESS TO DISPLAY FIRST LINE OF COUNTERS BEQ 80$ ; BR IF NOT TO BE DISPLAYED MOV #HDR3,R1 ; POINT TO COUNTER HEADER 1 70$: MOVB (R1)+,(R0)+ ; STORE COUNTER HEADER 1 BNE 70$ ; BR IF MORE TO MOVE MOVB #40,-(R0) ; DON'T DISPLAY NULLS 80$: MOV $RMCN2,R0 ; ADDRESS TO DISPLAY SECOND LINE OF COUNTERS BEQ 100$ ; BR IF NOT TO BE DISPLAYED MOV #HDR4,R1 ; POINT TO COUNTER HEADER 2 90$: MOVB (R1)+,(R0)+ ; STORE COUNTER HEADER 2 BNE 90$ ; BR IF MORE TO MOVE MOVB #40,-(R0) ; DON'T DISPLAY NULLS 100$: MOV $RMCN3,R0 ; ADDRESS TO DISPLAY THIRD LINE OF COUNTERS BEQ 120$ ; BR IF NOT TO BE DISPLAYED MOV #HDR5,R1 ; POINT TO COUNTER HEADER 3 110$: MOVB (R1)+,(R0)+ ; STORE COUNTER HEADER 3 BNE 110$ ; BR IF MORE TO MOVE MOVB #40,-(R0) ; DON'T DISPLAY NULLS 120$: MOV $RMCN4,R0 ; ADDRESS TO DISPLAY FOURTH LINE OF COUNTERS BEQ 140$ ; BR IF NOT TO BE DISPLAYED MOV #HDR6,R1 ; POINT TO COUNTER HEADER 4 130$: MOVB (R1)+,(R0)+ ; STORE COUNTER HEADER 4 BNE 130$ ; BR IF MORE TO MOVE MOVB #40,-(R0) ; DON'T DISPLAY NULLS 140$: MOV $RMCN5,R0 ; ADDRESS TO DISPLAY FIRST LINE OF COUNTERS BEQ 160$ ; BR IF NOT TO BE DISPLAYED MOV #HDR7,R1 ; POINT TO COUNTER HEADER 1 150$: MOVB (R1)+,(R0)+ ; STORE COUNTER HEADER 1 BNE 150$ ; BR IF MORE TO MOVE MOVB #40,-(R0) ; DON'T DISPLAY NULLS ; ; SET UP LOGICAL LINK DISPLAY STATIC TEXT ; 160$: MOV $RMLN1,R0 ; ADDRESS TO STORE LOGICAL LINK TEXT LINE 1 BEQ 180$ ; BR IF NOT TO BE DISPLAYED MOV #HDR8,R1 ; POINT TO LOGICAL LINK HEADER 1 170$: MOVB (R1)+,(R0)+ ; STORE THE HEADER BNE 170$ ; BR IF MORE TO STORE MOVB #40,-(R0) ; DON'T DISPLAY NULLS 180$: MOV $RMLN2,R0 ; ADDRESS TO STORE LOGICAL LINK TEXT LINE 2 BEQ 200$ ; BR IF NOT TO BE DISPLAYED MOV #HDR9,R1 ; POINT TO LOGICAL LINK HEADER 2 190$: MOVB (R1)+,(R0)+ ; STORE THE HEADER BNE 190$ ; BR IF MORE TO STORE MOVB #40,-(R0) ; DON'T DISPLAY NULLS ; ; FLAG ALL CHARACTERS AS NEW ; 200$: CALL $HOME ; START UPDATE AT HOME POSITION MOV #$SCRN,R1 ; BEGINNING OF SCREEN BUFFER MOV #$ESCRN,R2 ; END OF SCREEN BUFFER 210$: CMP R1,R2 ; AT END? BHIS 220$ ; BR IF YES CMPB #40,(R1)+ ; IS IT A BLANK BEQ 210$ ; BR IF YES FLAG -1(R1) ; ELSE FLAG IT AS CHANGED BR 210$ ; PROCESS NEXT CHARACTER 220$: RETURN .SBTTL INITIAL COMMAND HANDLER ;+ ; ; INICMD - COMMAND HANDLER ; ; INPUTS: NONE ; ; OUTPUTS: ; INFORMATION TEXT IS DISPLAYED ON TERMINAL AND ; ANY COMMAND SPECIFIED IS PROCESSED ; ;- INICMD: CALL $CLEAR ; BLANK SCREEN PRINT LINE1 ; PRINT LINE 1 SKIP 2 ; SKIP 2 BLANK LINES PRINT LINE2 ; PRINT LINE 2 SKIP 1 PRINT LINE3 ; PRINT LINE 3 SKIP 1 PRINT LINEN SKIP 3 ; SKIP TO LOWER PART OF SCREEN IN: MOV #42,R0 MOV #CMDBUF,R1 1$: CLRB (R1)+ SOB R0,1$ DIR$ #PRMPT ; OUTPUT PROMPT DIR$ #READ ; READ COMMAND MOV #CMDBUF,R1 MOV R1,R2 ; SAVE TST ISTAT+2 ; BLANK LINE, RETURN BNE 10$ ; COMMAND GIVEN, PROCESS RETURN 10$: CMPB #40,(R2) ; DEBLANK LINE BEQ 30$ CMPB #141,(R2) ; ALSO CONVERT LOWER CASE TO UPPER BHI 20$ BICB #040,(R2) ; CONVERT 20$: MOVB (R2),(R1) INC R1 30$: INC R2 TSTB (R2) BNE 10$ ; STOP WHEN PAST CLRB (R1) ; FORCE ZERO AT END OF DEBLANKED LINE MOV #CMDBUF,R1 ; START AT BEGINNING AGAIN CMPB #'N,(R1) ; NODE=N COMMAND BEQ NAME CMPB #'A,(R1) ; ADDRESS=A COMMAND BEQ ADDRES CERR: PRINT ERM ; COMMAND ERROR BR IN ; READ ANOTHER COMMAND NAME: TSTB (R1) ; FIND '=' BEQ CERR ; DIDN'T FIND ONE CMPB #'=,(R1) BEQ 10$ INC R1 BR NAME 10$: INC R1 ; PAST '=' TSTB (R1) ; ANYTHING PAST IT BEQ CERR CMP ISTAT+2,#11. ; NODE NAME MORE THAN 6 CHARACTERS? BLOS 20$ ; BR IF NO PRINT ERMNAM ; PRINT ERROR MESSAGE JMP IN 20$: MOV #$XCNOD,R0 ; POINT TO NODE NAME MOV #6,R2 ; MAXIMUM NUMBER OF CHARACTERS IN NODE NAME 30$: DEC R2 ; DECREMENT NUMBER OF CHARACTERS BLT 50$ ; BR IF 6 CHARACTERS MOVED IN MOVB (R1)+,(R0)+ ; STORE NODE NAME BNE 30$ ; ... MOVB #40,-1(R0) ; REPLACE NULL WITH SPACE 40$: DEC R2 ; PAD NODE NAME WITH SPACES BLT 50$ ; BR IF FINISHED MOVB #40,(R0)+ ; STORE SPACE BR 40$ ; 50$: BIC #FL$ADD,$XCFLG ; INDICATE NODE NAME SPECIFIED BIS #FL$NAM,$XCFLG ; JMP IN ADDRES: TSTB (R1) ; FIND '=' BEQ CERR ; DIDN'T FIND ONE CMPB #'=,(R1) BEQ 10$ INC R1 BR ADDRES 10$: INC R1 ; PAST '=' TSTB (R1) ; ANYTHING PAST IT BEQ CERR CMP ISTAT+2,#14. ; NODE ADDRESS MORE THAN 6 CHARACTERS? BLOS 20$ ; BR IF NO PRINT ERMADD ; PRINT ERROR MESSAGE BR 40$ 20$: MOV R1,R0 ; POINT TO NUMBER CALL $CDTB ; CONVERT IT TO BINARY TSTB (R0) ; NOTHING MUST BE PAST NUMBER BEQ 30$ ; BR IF OK PRINT ERMADD ; PRINT ERROR MESSAGE BR 40$ ; FINISHED 30$: CMP R1,$NN ; NODE NUMBER IN RANGE BLOS 35$ ; BR IF YES PRINT ERMADD ; PRINT ERROR MESSAGE BR 40$ ; 35$: BIC #FL$NAM,$XCFLG ; INDICATE NODE ADDRESS SPECIFIED BIS #FL$ADD,$XCFLG ; ... MOV R1,$XCADD ; STORE NODE ADDRESS 40$: JMP IN .END