.TITLE THINIT - INITIALIZATION FOR TASK HEADERS .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 TASK HEADERS ; ; ; ; DISTRIBUTED SYSTEMS SOFTWARE ENGINEERING ; ; IDENT HISTORY: ; ; 1.00 06-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 .IF DF,R$$MPL HEADER: .ASCIZ /RSX-11M-PLUS V01 BL/ .IFF HEADER: .ASCIZ /RSX-11M V3.2 BL/ .ENDC .ENABL LC HDR1: .ASCIZ /Task: Partition: Status:/ HDR2: .ASCIZ \ Own: I/O: Dpri: Pri: Spri:\ HDR3: .ASCII /R0 = R1 = R2 = R3 = / .ASCIZ /R4 = R5 = / HDR4: .ASCII /PC = PS = SP = $DSW = / .ASCIZ /Eflg = / HDR5: .ASCIZ /LUN File LUN File/ HDR6: .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 ERMTAS: 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 - TASK HEADER INITIALIZATION ;+ ; ; INIT - TASK HEADER DISPLAY INITIALIZATION ; ; INPUTS: NONE ; ; OUTPUTS: ; INFORMATION TEXT IS DISPLAYED ON TERMINAL AND ; ANY COMMAND SPECIFIED IS PROCESSED ; ;- INIT: TST $XCTSK ; ANY TASK SPECIFIED? BNE 10$ ; BR IF YES MOV #^R...,$XCTSK+0 ; STORE FIRST HALF OF DEFAULT TASK NAME MOV #^R...,$XCTSK+2 ; STORE SECOND HALF OF DEFAULT TASK NAME CALL INICMD ; GET INITIAL COMMAND ; ; DISPLAY STATIC TEXT ; 10$: CALL $CLEAR ; BLANK SCREEN MOV #HEADER,R1 ; GET ADDRESS OF HEADER TEXT MOV $THHDR,R0 ; GET ADDRESS TO STORE HEADER ON SCREEN 50$: MOVB (R1)+,(R0)+ ; STORE IT BNE 50$ ; ... DEC R0 ; DON'T DISPLAY NULL MOV #$SYSID,R1 ; STORE THE SYSTEM ID MOVB (R1)+,(R0)+ ; ... MOVB (R1)+,(R0)+ ; ... MOVB (R1)+,(R0)+ ; ... MOVB (R1)+,(R0)+ ; ... MOV $SYSIZ,R1 ; STORE THE SYSTEM SIZE .REPT 5 ASR R1 .ENDR CLR R2 ; ZERO SUPPRESSION CALL $CBDMG ; CONVERT TO ASCII MOVB #'K,(R0)+ ; ; ; TASK, PARTITION, STATUS LINE ; MOV $THTHD,R1 ; GET ADDRESS TO STORE TEXT BEQ 70$ ; BR IF WE DON'T WANT IT MOV #HDR1,R0 ; GET TEXT TO DISPLAY 60$: MOVB (R0)+,(R1)+ ; STORE IT BNE 60$ ; ... MOVB #40,-(R1) ; REPLACE NULL WITH A SPACE ; ; OWNER, I/O COUNT, PRIORITY LINE ; 70$: MOV $THOHD,R1 ; GET ADDRESS TO STORE TEXT BEQ 90$ ; BR IF WE DON'T WANT IT MOV #HDR2,R0 ; GET TEXT TO DISPLAY 80$: MOVB (R0)+,(R1)+ ; STORE IT BNE 80$ ; ... MOVB #40,-(R1) ; REPLACE NULL WITH A SPACE ; ; R0 - R5 LINE ; 90$: MOV $THRHD,R1 ; GET ADDRESS TO STORE TEXT BEQ 110$ ; BR IF WE DON'T WANT IT MOV #HDR3,R0 ; GET TEXT TO DISPLAY 100$: MOVB (R0)+,(R1)+ ; STORE IT BNE 100$ ; ... MOVB #40,-(R1) ; REPLACE NULL WITH A SPACE ; ; PC, PS, SP, $DSW, EVENT FLAGS LINE ; 110$: MOV $THPHD,R1 ; GET ADDRESS TO STORE TEXT BEQ 130$ ; BR IF WE DON'T WANT IT MOV #HDR4,R0 ; GET TEXT TO DISPLAY 120$: MOVB (R0)+,(R1)+ ; STORE IT BNE 120$ ; ... MOVB #40,-(R1) ; REPLACE NULL WITH A SPACE ; ; LUN, FILE LINE ; 130$: MOV $THLHD,R1 ; GET ADDRESS TO STORE TEXT BEQ 150$ ; BR IF WE DON'T WANT IT MOV #HDR5,R0 ; GET TEXT TO DISPLAY 140$: MOVB (R0)+,(R1)+ ; STORE IT BNE 140$ ; ... MOVB #40,-(R1) ; REPLACE NULL WITH A SPACE MOV $THLHL,R1 ; GET ADDRESS TO STORE TEXT BEQ 150$ ; BR IF NOT TO BE DISPLAYED MOV #HDR6,R0 ; GET TEXT TO DISPLAY 145$: MOVB (R0)+,(R1)+ ; STORE IT BNE 145$ ; ... MOVB #40,-(R1) ; REPLACE NULL WITH A SPACE ; ; FLAG ALL CHARACTERS AS NEW ; 150$: CALL $HOME ; START UPDATE AT HOME POSITION MOV #$SCRN,R1 ; BEGINNING OF SCREEN BUFFER MOV #$ESCRN,R2 ; END OF SCREEN BUFFER 160$: CMP R1,R2 ; AT END? BHIS 170$ ; BR IF YES CMPB #40,(R1)+ ; IS IT A BLANK BEQ 160$ ; BR IF YES FLAG -1(R1) ; ELSE FLAG IT AS CHANGED BR 160$ ; PROCESS NEXT CHARACTER 170$: 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 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 #'R,(R1) ; RATE=S COMMAND BEQ RATE CMPB #'T,(R1) ; TASK=T COMMAND BEQ TASK CERR: PRINT ERM ; COMMAND ERROR BR IN ; READ ANOTHER COMMAND RATE: TSTB (R1) ; FIND '=' BEQ CERR ; DIDN'T FIND ONE CMPB #'=,(R1) BEQ 10$ INC R1 BR RATE 10$: INC R1 ; PAST '=' TSTB (R1) ; ANYTHING PAST IT BEQ CERR MOV R1,R0 CALL $CDTB TSTB (R0) ; NOTHING MUST BE PAST NUMBER BNE CERR MOV R1,$TMG ; STORE NEW RATE JMP IN TASK: TSTB (R1) ; FIND '=' BEQ CERR ; DIDN'T FIND ONE CMPB #'=,(R1) BEQ 10$ INC R1 BR TASK 10$: INC R1 ; PAST '=' TSTB (R1) ; ANYTHING PAST IT BEQ CERR CMP ISTAT+2,#14. ; TASK NAME MORE THAN 6 CHARACTERS? BLOS 20$ ; BR IF NO PRINT ERMTAS ; PRINT ERROR MESSAGE JMP IN 20$: MOV R1,R0 ; STRING TO BE CONVERTED MOV #1,R1 ; PERIOD AND $ ARE VALID CHARACTERS CALL $CAT5 ; CONVERT ASCII TO RAD50 BCC 30$ ; BR IF OK TST R1 ; ANYTHING CONVERTED? BNE 30$ ; BR IF YES PRINT ERMTAS ; ILLEGAL TASK NAME JMP IN 30$: MOV R1,$XCTSK ; STORE TASK NAME MOV #1,R1 ; PERIOD AND $ ARE VALID CHARACTERS CALL $CAT5 ; CONVERT TO RAD50 BCC 40$ ; BR IF OK TSTB (R0) ; END OF STRING? BEQ 40$ ; BR IF YES PRINT ERMTAS ; ILLEGAL TASK NAME JMP IN 40$: MOV R1,$XCTSK+2 ; STORE SECOND HALF OF NAME JMP IN .END