.TITLE THNSPL - TASK HEADER NS: LUN DISPLAY .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: ; ; TASK HEADER DISPLAY PAGE UPDATE PROCESSING ; GENERATE TEXT FOR NS: LUN ; ; ; ; DISTRIBUTED SYSTEMS SOFTWARE ENGINEERING ; ; IDENT HISTORY: ; ; 1.00 04-MAR-80 ; .SBTTL MACROS ; ; GLOBAL MACROS ; .MCALL UCBDF$,NSPIN$,RNBDF$,LLWDF$,PDVDF$,NSDDB$,HDRDF$ UCBDF$ ; DEFINE UCB OFFSETS AND SYMBOLS NSPIN$ ; DEFINE LOGICAL LINK TABLE OFFSETS RNBDF$ ; DEFINE REMOTE NODE NAME BLOCK OFFSETS LLWDF$ ; LOGICAL LINK WINDOW BLOCK OFFSETS PDVDF$ ; DEFINE PDV OFFSETS AND SYMBOLS NSDDB$ ; DEFINE NSP'S DDB OFFSETS AND SYMBOLS HDRDF$ ; DEFINE THE TASK HEADER OFFSETS .SBTTL LUN DISPLAY CONTROL LIST ENTRY ; ; EACH DEVICE WHICH REQUIRES SPECIAL HANDLING OF THE INFORMATION IN THE ; DEVICE/FILE WINDOW BLOCK SHOULD HAVE A SPECIAL ROUTINE PROGRAMMED FOR ; IT. THIS ROUTINE WILL BE PASSED THE ADDRESS OF THE WINDOW BLOCK, AND ; SHOULD FORMAT AN OUTPUT STRING (30. BYTES OR UNDER) TO DISPLAY ALL ; APPROPRIATE INFORMATION. ; ; EACH ROUTINE SHOULD BE IN A SEPARATE FILE, WITH THE FOLLOWING FORMAT: ; ; .PSECT XDEVX1,I ;LUN DISPLAY ROUTINE TABLE PSECT ; .WORD "DD 0 ;DEVICE NAME CATCH-ALL ; .WORD ADDR ;ADDRESS OF ROUTINE TO PROCESS LUN INFO ; ; .PSECT XDEVXX,I ;PSECT FOR ROUTINE ; ; ADDR: ... ;CODE ; RETURN ;FINISHED ; ; INPUTS TO THE ROUTINE ARE: ; R0 - ADDRESS OF NEXT BYTE IN OUTPUT BUFFER TO STORE DISPLAY INFORMATION ; R1 - ADDRESS OF DEVICE UCB ; R2 - ADDRESS OF FILE WINDOW BLOCK, OR ZERO (NONE) ; ; OUTPUTS EXPECTED FROM THE ROUTINE ARE: ; R0 - ADDRESS OF NEXT BYTE IN OUTPUT BUFFER ; ; CARRY: CLEAR - DEVICE INFO COMPLETELY FINISHED, NO MORE TO DO ; CARRY: SET - CONTINUE SCANNING LIST FOR MORE ROUTINES TO CALL ; ; .PSECT XDEVX1,I .WORD "NS ; FOR NS: DEVICE ONLY .WORD THNSPL ; ENTRY POINT .PSECT XDEVXX,I .SBTTL LOCAL DATA ; ; LOCAL DATA ; THNSNM: .BLKW 4 ;NODE NAME STORAGE THNSNN: .BLKW 1 ;NODE NUMBER STORAGE THNSLA: .BLKW 1 ;LOGICAL LINK ADDRESS THNSTY: .BLKW 1 ;ADDRESS OF TYPE STRING (FOR LINE-ID) THNSDB: .BLKW 1 ;NSP'S DDB ADDRESS .ENABL LC THNST1: .ASCIZ !Phase II! ;PHASE 2 NODE THNST2: .ASCIZ !Loop line! ;LOOPED LINE THNST3: .ASCIZ !Network mailbox! ;MAILBOX LUN .EVEN .DSABL LC .SBTTL THNSPL ENTRY POINT ;+ ; ; THNSPL - TASK HEADER DISPLAY UPDATE PROCESSING ; GENERATE STRING FOR NS: DEVICE LUN ; ; INPUTS: ; R0 - ADDRESS OF NEXT BYTE IN OUTPUT BUFFER TO STORE DISPLAY INFORMATION ; R1 - ADDRESS OF DEVICE UCB ; R2 - ADDRESS OF FILE WINDOW BLOCK, OR ZERO (NONE) ; ; OUTPUTS: ; R0 - ADDRESS OF NEXT BYTE IN OUTPUT BUFFER ; ; CARRY: CLEAR - DEVICE INFO COMPLETELY FINISHED, NO MORE TO DO ; CARRY: SET - CONTINUE SCANNING LIST FOR MORE ROUTINES TO CALL ;- THNSPL: JSR R5,$SAVRG ;SAVE R3, R4, R5 MOV R1,-(SP) ;SAVE R1 MOV R2,-(SP) ;SAVE R2 CLR THNSNM ;IN CASE NO NODE NAME MOV #-1,THNSNN ;IN CASE NO NODE NUMBER MOV #-1,THNSLA ;IN CASE NO LOGICAL LINK ADDRESS MOV #THNST3,THNSTY ;ASSUME THIS IS THE MAILBOX LUN MOV $THTHA,R5 ;POINT AT TASK HEADER CMPB $THTLN,H.NML(R5) ;IS THIS THE MAILBOX LUN? BEQ 55$ ;BR IF YES CLR THNSTY ;ASSUME NOT LOOP OR PHASE II LINE CALL $SWSTK,55$ ;;ENTER SYSTEM STATE, RETURN AT 55$ ; ; FIND THE LLT FOR THE LINK ; MOV R2,R5 ;;SAVE WINDOW BLOCK ADDRESS MOV #^RNSP,R2 ;;GET NSP PROCESS NAME CALL $PDVID ;;GET NSP'S PDV INDEX BCS 50$ ;;BR IF NOT THERE ADD $PDVTA,R2 ;;POINT TO PDV ENTRY MOV (R2),R2 ;;GET PDV ADDRESS MOV Z.DAT(R2),R1 ;;POINT TO NSP'S DDB (MUST BE IN DSR) BEQ 50$ ;;BR IF NOT THERE MOV R1,THNSDB ;;SAVE ADDRESS OF NSP'S DDB MOVB W.LLA(R5),R2 ;;GET THE LOGICAL LINK ADDRESS CMP R2,N$LVC(R1) ;;IS IT IN RANGE? BHIS 50$ ;;BR IF NO MOV N$LVC+2(R1),R1 ;;GET LLT POINTER TABLE (IN DSR) BEQ 50$ ;;BR IF NO LLT (LINK GONE) MOV R2,THNSLA ;;SAVE IT ASL R2 ;;MAKE IT INTO A WORD OFFSET ADD R2,R1 ;;POINT INTO THE LOGICAL LINK LIST MOV (R1),R1 ;;POINT AT AN LLT BEQ 50$ ;;BR IF NONE BIT #LF.LPL+LF.PH2,(R1) ;;IS IT A NODE NUMBER? BEQ 7$ ;;BR IF YES ; ; GOT A CHANNEL NUMBER, MIGHT BE "LOOPED LINE" ; MOV #THNST2,THNSTY ;;POINT AT LOOP LINE STRING BIT #LF.LPL,(R1) ;;IS IT A LOOP LINE? BNE 50$ ;;BR IF YES ; ; GOT A PHASE II CHANNEL NUMBER, TRANSLATE TO A NODE NUMBER ; MOV #THNST1,THNSTY ;;JUST DISPLAY "PHASE II" IF NO PLD MOV THNSDB,R3 ;;POINT AT NSP'S DDB MOV N$PLD+0(R3),R2 ;;GET NUMBER OF PLD'S MOV N$PLD+2(R3),R3 ;;POINT AT FIRST PLD (IN DSR) 3$: CMPB P$CHN(R3),L.REM(R1) ;;IS THIS THE PROPER CHANNEL? BEQ 5$ ;;BR IF YES ADD #P$LEN,R3 ;;POINT AT NEXT PLD DEC R2 ;;MORE PLD'S TO CHECK? BGT 3$ ;;BR IF YES BR 50$ ;;NO PLD, JUST DISPLAY FAKE MESSAGE 5$: MOV P$NOD(R3),THNSNN ;;GET THE NODE NUMBER CLR THNSTY ;;NO "PHASE II" MESSAGE OUTPUT BR 8$ ;;FIND THE NODE NAME ; ; GOT A NODE NUMBER, STORE THE NODE NUMBER AND NODE NAME, FOR LATER FORMATTING ; 7$: MOV L.REM(R1),THNSNN ;;GET NODE NUMBER 8$: MOV #THNSNM,R0 ;;POINT AT NODE NAME BUFFER .IF DF,M$$MGE MOV @#KISAR5,-(SP) ;;SAVE CURRENT MAPPING MOV $PBIAS,@#KISAR5 ;;MAP SINGLE WORD POOL .ENDC MOV #$RNNHD,R1 ;;POINT AT REMOTE NODE NAME LIST 10$: MOV (R1),R1 ;;POINT AT NEXT ENTRY BEQ 25$ ;;BR IF NONE .IF DF,M$$MGE CMP #140000,R1 ;;MAPPED TO $PBIAS POOL? BHI 15$ ;;BR IF NO SUB #140000,R1 ;;CLEAR OUT CURRENT MAPPING ADD #120000,R1 ;;MUST BE MAPPED TO APR5 15$: .ENDC CMP THNSNN,R.ADD(R1) ;;IS THIS THE NODE? BNE 10$ ;;BR IF NO ADD #R.NAM,R1 ;;POINT AT THE NODE NAME MOV #6,R2 ;;GET MAXIMUM LENGTH 20$: CMPB #40,(R1) ;;END OF NODE NAME? BEQ 25$ ;;BR IF YES MOVB (R1)+,(R0)+ ;;MOVE CHARACTER DEC R2 ;;COUNT THEM BGT 20$ ;;BR IF MORE 25$: CLRB (R0) ;;END NODE NAME WITH A NULL .IF DF,M$$MGE MOV (SP)+,@#KISAR5 ;;RESTORE MAPPING .ENDC ; ; FINISHED WITH SYSTEM STATE ; 50$: RETURN ;;RETURN TO USER STATE ; ; BACK IN USER STATE, SET THE STRING ; 55$: MOV THNSTY,R1 ;POINT AT LOOP OR PHASE II LINE STRING BEQ 70$ ;BR IF NO, JUST REGULAR NODE ; ; LINE WAS LOOPED, OR WENT TO A PHASE II NODE ; 60$: MOVB (R1)+,(R0)+ ;MOVE IN THE STRING BNE 60$ ;BR IF MORE MOVB #40,-(R0) ;END WITH SPACE BR 90$ ;FINISHED ; ; CONNECTION TO A REGULAR NODE ; 70$: MOV THNSNN,R1 ;GET THE NODE NUMBER CMP #-1,R1 ;IS IT VALID? BEQ 90$ ;BR IF NO CLR R2 ;SUPPRESS LEADING ZEROS CALL $CBDMG ;CONVERT TO DECIMAL MOVB #'.,(R0)+ ;TRAILING DECIMAL POINT MOV #THNSNM,R1 ;POINT AT NODE NAME TSTB (R1) ;ANY NAME AT ALL? BEQ 80$ ;BR IF NO MOVB #40,(R0)+ ;MOVE IN A SPACE MOVB #'(,(R0)+ ;MOVE IN NODE NAME LEADER 75$: MOVB (R1)+,(R0)+ ;MOVE IN THE NODE NAME BNE 75$ ;BR IF MORE MOVB #'),-1(R0) ;MOVE IN NODE NAME TRAILER 80$: MOV THNSLA,R1 ;GET THE LOGICAL LINK ADDRESS BMI 90$ ;BR IF NONE MOVB #40,(R0)+ ;SPACER MOVB #'<,(R0)+ ;MOVE IN LLA LEADER MOVB #'L,(R0) ;MOVE IN "LLA=" MOVB (R0)+,(R0)+ ;... MOVB #'A,(R0)+ ;... MOVB #'=,(R0)+ ;... CLR R2 ;NO LEADING ZEROS CALL $CBDMG ;CONVERT TO DECIMAL ASCII MOVB #'>,(R0)+ ;LOGICAL LINK ADDRESS TRAILER 90$: MOV (SP)+,R2 ;RESTORE R2 MOV (SP)+,R1 ;RESTORE R1 CLC ;TEXT PROCESSING IS FINISHED FOR LUN RETURN ;FINISHED, RESTORE R5, R4, R3 .END