.TITLE LLINIT - INITIALIZATION FOR LOGICAL LINK .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 LOGICAL LINK DISPLAY ; ; ; ; DISTRIBUTED SYSTEMS SOFTWARE ENGINEERING ; ; IDENT HISTORY: ; ; 1.00 15-APR-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: .ASCII /Local LLA: Task: Lun: / .ASCIZ /TI:/ HDR2: .ASCIZ /Remote LLA: Node:/ HDR3: .ASCIZ /State:/ HDR4: .ASCIZ /Int outstanding:/ HDR5: .ASCIZ /Rcvs outstanding:/ HDR6: .ASCIZ /Xmits outstanding:/ HDR7: .ASCIZ \I/LS xmits in progress:\ HDR8: .ASCIZ /Interrupt count/ HDR9: .ASCIZ /Data xmits in progress:/ HDR10: .ASCIZ /Transmit count:/ HDR11: .ASCIZ /Transmit segment size:/ HDR12: .ASCIZ /Long term timer (min.):/ .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 LINEN: MESS < TO RETURN> .EVEN ERM: MESS .EVEN ERMLLA: 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 - LOGICAL LINK INITIALIZATION ;+ ; ; INIT - LOGICAL LINK DISPLAY INITIALIZATION ; ; INPUTS: NONE ; ; OUTPUTS: ; INFORMATION TEXT IS DISPLAYED ON TERMINAL AND ; ANY COMMAND SPECIFIED IS PROCESSED ; ;- INIT: TST $XCLLA ; ANY LLA SPECIFIED? BNE 10$ ; BR IF YES CALL INICMD ; GET INITIAL COMMAND ; ; DISPLAY STATIC TEXT ; 10$: CALL $CLEAR ; BLANK SCREEN ; ; NODE IDENTIFICATION STATIC TEXT ; MOV $LLNID,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 LOCAL LLA,TASK,LUN,TI: ; 20$: MOV $LLSLC,R0 ; ADDRESS TO DISPLAY STATIC TEXT 1 MOV #HDR1,R1 ; POINT TO FIRST HEADER CALL STORTX ; STORE IN SCREEN BUFFER ; ; SET UP REMOTE LLA,NODE ; MOV $LLSRM,R0 ; ADDRESS TO DISPLAY STATIC TEXT 2 MOV #HDR2,R1 ; POINT TO SECOND HEADER CALL STORTX ; STORE IN SCREEN BUFFER ; ; SET UP STATE STATIC TEXT ; MOV $LLSST,R0 ; ADDRESS TO DISPLAY STATE STATIC TEXT MOV #HDR3,R1 ; POINT TO STATE TEXT CALL STORTX ; STORE IN SCREEN BUFFER ; ; SET UP INTERRUPTS OUTSTANDING STATIC TEXT ; MOV $LLSIO,R0 ; ADDRESS TO DISPLAY STATIC TEXT MOV #HDR4,R1 ; POINT TO TEXT TO DISPLAY CALL STORTX ; STORE IN SCREEN BUFFER ; ; SET UP RECEIVES OUTSTANDING STATIC TEXT ; MOV $LLSRO,R0 ; ADDRESS TO DISPLAY STATIC TEXT MOV #HDR5,R1 ; POINT TO TEXT TO DISPLAY CALL STORTX ; STORE IN SCREEN BUFFER ; ; SET UP TRANSMITS OUTSTANDING STATIC TEXT ; MOV $LLSXO,R0 ; ADDRESS TO DISPLAY STATIC TEXT MOV #HDR6,R1 ; POINT TO TEXT TO DISPLAY CALL STORTX ; STORE IN SCREEN BUFFER ; ; SET UP I/LS INTERRUPTS PENDING STATIC TEXT ; MOV $LLSIP,R0 ; ADDRESS TO DISPLAY STATIC TEXT MOV #HDR7,R1 ; POINT TO TEXT TO DISPLAY CALL STORTX ; STORE IN SCREEN BUFFER ; ; SET UP INTERRUPT COUNT STATIC TEXT ; MOV $LLSIC,R0 ; ADDRESS TO DISPLAY STATIC TEXT MOV #HDR8,R1 ; POINT TO TEXT TO DISPLAY CALL STORTX ; STORE IN SCREEN BUFFER ; ; SET UP DATA TRANSMITS PENDING STATIC TEXT ; MOV $LLSDP,R0 ; ADDRESS TO DISPLAY STATIC TEXT MOV #HDR9,R1 ; POINT TO TEXT TO DISPLAY CALL STORTX ; STORE IN SCREEN BUFFER ; ; SET UP TRANSMIT COUNT STATIC TEXT ; MOV $LLSXC,R0 ; ADDRESS TO DISPLAY STATIC TEXT MOV #HDR10,R1 ; POINT TO TEXT TO DISPLAY CALL STORTX ; STORE IN SCREEN BUFFER ; ; SET UP SEGMENT SIZE STATIC TEXT ; MOV $LLSSG,R0 ; ADDRESS TO DISPLAY STATIC TEXT MOV #HDR11,R1 ; POINT TO TEXT TO DISPLAY CALL STORTX ; STORE IN SCREEN BUFFER ; ; SET UP LONG TERM TIMER STATIC TEXT ; MOV $LLSLT,R0 ; ADDRESS TO DISPLAY STATIC TEXT MOV #HDR12,R1 ; POINT TO TEXT TO DISPLAY CALL STORTX ; STORE IN SCREEN BUFFER ; ; 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 STORTX - STORE STATIC TEXT IN SCREEN BUFFER ;+ ; ; STORTX - STORE STATIC TEXT IN SCREEN BUFFER ; ; INPUTS: ; R0 - ADDRESS IN SCREEN BUFFER TO STORE TEXT ; R1 - ADDRESS OF STRING TO DISPLAY ; ; OUTPUTS: ; THE TEXT IS MOVED INTO THE SCREEN BUFFER ; ;- STORTX: TST R0 ; DISPLAY THIS LINE? BEQ 20$ ; BR IF NOT TO BE DISPLAYED 10$: MOVB (R1)+,(R0)+ ; STORE HEADER 1 BNE 10$ ; BR IF NOT FINISHED MOVB #40,-(R0) ; DON'T DISPLAY NULLS 20$: 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 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 #'L,(R1) ; LLA=L COMMAND BEQ LLA CERR: PRINT ERM ; COMMAND ERROR BR IN ; READ ANOTHER COMMAND LLA: TSTB (R1) ; FIND '=' BEQ CERR ; DIDN'T FIND ONE CMPB #'=,(R1) BEQ 10$ INC R1 BR LLA 10$: INC R1 ; PAST '=' TSTB (R1) ; ANYTHING PAST IT BEQ CERR CMP ISTAT+2,#7. ; LLA MORE THAN 3 CHARACTERS? BLOS 20$ ; BR IF NO PRINT ERMLLA ; 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 ERMLLA ; PRINT ERROR MESSAGE BR 40$ ; FINISHED 30$: MOV R1,$XCLLA ; STORE LLA 40$: JMP IN .END