.TITLE THF11L - FILES-11 LUN PROCESSING .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: ; ; FILES-11 LUN PROCESSING FOR TASK HEADER DISPLAY PAGE ; ; ; ; DISTRIBUTED SYSTEMS SOFTWARE ENGINEERING ; ; IDENT HISTORY: ; ; 1.00 14-MAR-80 ; DECNET-11M/S V3.0 ; DECNET-11M-PLUS V1.0 ; .SBTTL GLOBAL MACROS ; ; GLOBAL MACRO DEFINITIONS ; .MCALL UCBDF$,DCBDF$,RUN$,QIOW$,F11DF$,DIR$,HDRDF$,ALUN$ .MCALL TCBDF$ DCBDF$ ; DEFINE DCB OFFSETS AND SYMBOLS UCBDF$ ; DEFINE UCB OFFSETS AND SYMBOLS F11DF$ ; DEFINE FILES-11 OFFSETS AND SYMBOLS HDRDF$ ; DEFINE HEADER OFFSETS AND SYMBOLS TCBDF$ ; DEFINE TCB OFFSETS AND SYMBOLS .SBTTL LUN DISPLAY ROUTINE TABLE .PSECT XDEVX1,I .WORD 0 ; CATCHALL ROUTINE - CHECKS FOR FILES-11 DEVICES .WORD F11LUN ; ADDRESS OF ROUTINE TO PROCESS LUNS .SBTTL LOCAL DATA .PSECT XDEVXX,I IOSB: .BLKW 2 ; I/O STATUS BLOCK OWNUIC: .BLKW 1 ; UIC OF OWNER OF FILE FILNAM: .BLKW 3+1+1 ; FILE NAME, FILE TYPE, VERSION NUMBER FNUM: .BLKW 1 ; FILE NUMBER FSEQ: .BLKW 1 ; FSQN: .BLKW 1 .ENABL LC ; ; ASCII MESSAGES ; DSWTXT: .ASCIZ /Directive error: / ONTXT: .ASCIZ /FID = / .DSABL LC .EVEN ; ; DIRECTIVE PARAMETER BLOCKS ; RQACP: RUN$ F11ACP,,,,,1,1 FILALN: ALUN$ $SLUN,SY,0 FILACR: QIOW$ IO.ACR,$SLUN,$QIOF,,IOSB,,<,10$,,,100000> 10$: .BYTE -5,12 .WORD FILNAM .BYTE -1,2 .WORD OWNUIC .WORD 0 FILDAC: QIOW$ IO.DAC,$SLUN,$QIOF .SBTTL F11LUN - PROCESS FILES-11 LUNS ;+ ; ; F11LUN - PROCESS FILES-11 LUNS ; ; INPUTS: ; R0 = NEXT BYTE IN BUFFER TO STORE LUN INFORMATION ; R1 = ADDRESS OF DEVICE UCB ; R2 = ADDRESS OF FILE WINDOW BLOCK ; ; OUTPUTS: ; R0 = NEXT BYTE IN BUFFER TO STORE INFORMATION ; CARRY: ; CLEAR = FILES-11 DEVICE WAS PROCESSED AND THE PROPER ; INFORMATION IS STORED IN THE BUFFER SPECIFIED ; IN R0 ; SET = NOT A FILES-11 DEVICE ; ;+ F11LUN: JSR R5,$SAVRG ; SAVE R3-R5 DIR$ #RQACP ; STARTUP F11ACP 3$: CMP U.RED(R1),R1 ; END OF REDIRECT LIST? BEQ 5$ ; BR IF YES BIT #DV.OSP!DV.ISP,U.CW1(R1) ; IS THIS A SPOOL DEVICE? BNE 10$ ; BR IF YES MOV U.RED(R1),R1 ; GET NEXT UCB IN REDIRECT LIST BR 3$ ; CHECK FOR END OF REDIRECT LIST 5$: BIT #DV.F11,U.CW1(R1) ; FILES-11 DEVICE? BEQ 10$ ; BR IF NO CALL FIND ; GET THE FILE INFORMATION CALL UPDATE ; PLACE THE INFORMATION IN THE BUFFER CLC ; BE SURE CARRY IS CLEAR BR 20$ ; DONE 10$: SEC ; INDICATE NOT FILES-11 DEVICE 20$: RETURN .SBTTL FIND ;+ ; ; FIND - GET FILE INFORMATION ; ; INPUTS: ; R1 = ADDRESS OF DEVICE UCB ; R2 = ADDRESS OF FILE WINDOW BLOCK ; ; OUTPUTS: ; FNUM = FILE NUMBER ; FSEQ = FILE SEQUENCE NUMBER ; FSQN = FILE SEQUENCE NUMBER ; ;- FIND: SWSTK$ 50$ ; ENTER SYSTEM STATE MOV W.FCB(R2),R2 ;; GET FCB ADDRESS CLR R3 CMP R2,#$POOL-1 BLOS 5$ CMP @#$EXSIZ,R2 5$: BCC 20$ CMP #120000,R2 BHI 30$ CMP #140000,R2 BHI 10$ ADD #200,R3 SUB #20000,R2 10$: MOV U.ACP(R1),R1 ;; GET TCB ADDRESS OF THE ACP BIT #TS.EXE,T.STAT(R1) ;; TASK IN EXECUTION? BNE 30$ ;; BR IF NO .IF NDF,R$$MPL BIT #TS.OUT,T.STAT(R1) ;; TASK OUT OF MEMORY? BNE 30$ ;; BR IF YES .IFTF MOV T.PCB(R1),R1 ;; GET PCB ADDRESS BEQ 30$ ;; BR IF NOT IN MEMORY .IFF BIT #PS.OUT,P.STAT(R1) ;; TASK OUT OF MEMORY? BNE 30$ ;; BR IF YES .ENDC ADD P.REL(R1),R3 ;; GET BASE ADDRESS OF PARTITION 20$: MOV @#KISAR5,-(SP) MOV R3,@#KISAR5 MOV F.FNUM(R2),FNUM MOV F.FSEQ(R2),FSEQ MOVB F.FSQN(R2),FSQN MOV (SP)+,@#KISAR5 BR 50$ 30$: CLR FNUM CLR FSEQ CLR FSQN 50$: RETURN .SBTTL UPDATE - UPDATE LUN INFORMATION ;+ ; ; UPDATE - UPDATE FILES-11 LUN INFORMATION (STORE DEVICE NAME, UIC, AND ; FILE NAME IN OUTPUT BUFFER) ; ; INPUTS: ; R0 = NEXT BYTE FOR STORAGE IN OUTPUT BUFFER ; R1 = DEVICE UCB ADDRESS ; R2 = FILE WINDOW BLOCK ADDRESS ; ; OUTPUTS: ; THE CORRECT TEXT STRING IS STORED IN THE OUTPUT BUFFER ; R0 = NEXT BYTE FOR STORAGE IN OUTPUT BUFFER ; R3 DESTROYED ; ;- UPDATE: MOV R2,-(SP) ; SAVE R2 CLR R2 ; INITIALIZE TO NO FILE NAME BIS FNUM,R2 ; FILE NAME SPECIFIED? BIS FSEQ,R2 ; ... BIS FSQN,R2 ; ... BNE 5$ ; BR IF YES JMP 100$ ; ELSE NO NAME 5$: MOV $THUNT,FILALN+A.LUNU ; GET DEVICE UNIT NUMBER MOV $THDNM,FILALN+A.LUNA ; GET DEVICE NAME MOV #FNUM,FILACR+Q.IOPL+0 ;POINT TO FILE ID TST @FILACR+Q.IOPL+0 BEQ 100$ DIR$ #FILALN ; ASSIGN THE LUN BCS 50$ ; BR IF CAN'T DIR$ #FILACR BCS 50$ DIR$ #FILDAC BCS 50$ TSTB IOSB BMI 70$ MOVB #'[,(R0)+ ; STORE OWNER UIC MOVB OWNUIC+1,R1 ; GET USER GROUP CODE CLR R2 ; ZERO SUPPRESSION CALL $CBTMG ; CONVERT IT TO ASCII MOVB #',,(R0)+ ; INSERT COMMA INTO STRING MOVB OWNUIC,R1 ; GET USER MEMBER CODE CLR R2 ; ZERO SUPPRESSION CALL $CBTMG ; CONVERT IT TO ASCII MOVB #'],(R0)+ ; INSERT RIGHT BRACKET MOV FILNAM+0,R1 CALL $C5TA MOV FILNAM+2,R1 CALL $C5TA MOV FILNAM+4,R1 CALL $C5TA 10$: CMPB #' ,-(R0) BEQ 10$ INC R0 MOVB #'.,(R0)+ MOV FILNAM+6,R1 CALL $C5TA 20$: CMPB #' ,-(R0) BEQ 20$ INC R0 MOVB #';,(R0)+ MOV FILNAM+10,R1 CLR R2 CALL $CBOMG BR 100$ 50$: MOV #DSWTXT,R2 ; GET ADDRESS OF ASCIZ TEXT STRING 60$: MOVB (R2)+,(R0)+ ; STORE STRING IN BUFFER BNE 60$ ; BR IF MORE MOVB $DSW,R1 CLR R2 CALL $CBDSG MOVB #'.,(R0)+ ; STORE DECIMAL POINT BR 100$ 70$: MOV #ONTXT,R2 ; GET ADDRESS OF ASCIZ TEXT STRING 90$: MOVB (R2)+,(R0)+ ; MOVE INTO BUFFER BNE 90$ ; BR IF MORE MOVB #'(,-1(R0) MOV @FILACR+Q.IOPL+0,R1 CLR R2 CALL $CBOMG MOVB #',,(R0)+ MOV FILACR+Q.IOPL+0,R1 MOV 2(R1),R1 CLR R2 CALL $CBOMG MOVB #'),(R0)+ 100$: MOV (SP)+,R2 ; RESTORE R2 RETURN .END