.TITLE DEFILE .ENABL LC ; ; CALL DEFILE( LUN, IDEV, IUNIT, IGROUP, IOWNER, NAME, EXT, IVER ) ; This subroutine allows the user to either read the filename ; block associated with a particular LUN or to set certain ; values as defaults. ; ; LUN In absolute value, the logical unit number. If positive, ; filename block is read; if negative, certain defaults ; can be set. ; IDEV ASCII device name, 2 characters. ; IUNIT Unit number. ; IGROUP Group number portion of UIC; can be set also. ; IOWNER Owner number portion of UIC; can be set also. ; NAME ASCII filename, 9 characters. ; EXT ASCII extension, 3 characters; can be set also. ; IVER Version number. ; ; Note: All the arguments, except LUN, are optional. ; .PSECT DEFILE .MCALL FDOFF$, NBOF$L .GLOBL $OTSV FDOFF$ DEF$L ;DEFINE FDB OFFSETS LOCALLY NBOF$L ;DEFINE FILENAME OFFSETS LOCALLY ; DEFILE::MOV (R5),NARG ;GET NUMBER OF ARGUMENTS. MOV @2(R5),R2 ;MOVE LUN INTO R2. MOV R2,R4 ;COPY LUN. BGT 1$ ;BRANCH IF POSITIVE. NEG R2 ;MAKE POSITIVE. 1$: MOV @#$OTSV,R3 ;GET ADDRESS OF FORTRAN IMPURE AREA JSR PC,$FCHNL ;GET ADDRESS OF FDB INTO R0. MOV R0,R3 ;SET ADDRESS INTO R3. ADD #,R3 ;SET TO REFERENCE FILENAME BLOCK ; DEC NARG ;DECREMENT ARGUMENT COUNT. BEQ DONE ;BRANCH IF NONE REMAINING. CMP #-1,4(R5) ;ARGUMENT PRESENT? BEQ IUNIT ;BRANCH IF NOT. TST R4 ;TRYING TO SET? BLE IUNIT ;BRANCH IF SO MOV N.DVNM(R3),@4(R5) ;SAVE ASCII DEVICE NAME. ; IUNIT: DEC NARG ;DECREMENT ARGUMENT COUNT. BEQ DONE ;BRANCH IF NONE REMAINING. CMP #-1,6(R5) ;ARGUMENT PRESENT? BEQ IGROUP ;BRANCH IF NOT. TST R4 ;TRYING TO SET? BLE IGROUP ;BRANCH IF SO MOV N.UNIT(R3),@6(R5) ;READ UNIT NUMBER. ; IGROUP: DEC NARG ;DECREMENT ARGUMENT COUNT. BEQ DONE ;BRANCH IF NONE REMAINING. CMP #-1,10(R5) ;ARGUMENT PRESENT? BEQ IOWNER ;BRANCH IF NOT. JSR PC,.RDFUI ;GET DEFAULT UIC INTO R1 SWAB R1 ;SWAP BYTES TST R4 ;SET OR READ? BGT 1$ ;BRANCH IF READ. BIC #377,R1 ;CLEAR OUT OLD GROUP BISB @10(R5),R1 ;SET IN NEW GROUP SWAB R1 ;SWAP BACK JSR PC,.WDFUI ;SET NEW GROUP BR IOWNER ;BRANCH TO CONTINUE. 1$: MOVB R1,@10(R5) ;READ GROUP NUMBER ; IOWNER: DEC NARG ;DECREMENT ARGUMENT COUNT. BEQ DONE ;BRANCH IF NONE REMAINING. CMP #-1,12(R5) ;ARGUMENT PRESENT? BEQ NAME ;BRANCH IF NOT. JSR PC,.RDFUI ;GET DEFAULT UIC INTO R1 TST R4 ;SET OR READ? BGT 1$ ;BRANCH IF READ. BIC #377,R1 ;CLEAR OUT OWNER BISB @12(R5),R1 ;SET IN NEW OWNER JSR PC,.WDFUI ;SET NEW UIC BR NAME ;BRANCH TO CONTINUE. 1$: MOVB R1,@12(R5) ;READ OWNER ; NAME: DEC NARG ;DECREMENT ARGUMENT COUNT. BEQ DONE ;BRANCH IF NONE REMAINING. CMP #-1,14(R5) ;ARGUMENT PRESENT? BEQ EXT ;BRANCH IF NOT. TST R4 ;TRYING TO SET? BLE EXT ;BRANCH IF SO MOV 14(R5),R0 ;GET ADDRESS TO STORE STRING. MOV N.FNAM(R3),R1 ;GET FIRST 3 CHARACTERS. JSR PC,$C5TA ;CONVERT FROM RAD-50 TO ASCII. MOV (R3),R1 ;GET MIDDLE 3. JSR PC,$C5TA ;CONVERT. MOV (R3),R1 ;GET LAST 3. JSR PC,$C5TA ;CONVERT. ; EXT: DEC NARG ;DECREMENT ARGUMENT COUNT. BEQ DONE ;BRANCH IN NONE REMAINING. CMP #-1,16(R5) ;ARGUMENT PRESENT? BEQ IVER ;BRANCH IF NOT. TST R4 ;SET OR READ? BGT 1$ ;BRANCH IF READ. MOV 16(R5),R0 ;GET ADDRESS OF EXTENSION CLR R1 ;SET PERIOD DIPOSITION FLAG JSR PC,$CAT5 ;CONVERT ASCII TO RAD-50 MOV R1,@#<$FLDEF+56> ;SET NEW EXTENSION BY CHEATING BR IVER ;BRANCH TO CONTINUE. 1$: MOV 16(R5),R0 ;SET ADDRESS TO STORE STRING. MOV N.FTYP(R3),R1 ;GET FILE EXTENSION. JSR PC,$C5TA ;CONVERT FROM RAD-50 TO ASCII. ; IVER: DEC NARG ;DECREMENT ARGUMNET COUNT. BEQ DONE ;BRANCH IF NONE REMAINING. CMP #-1,20(R5) ;ARGUMENT PRESENT? BEQ DONE ;BRANCH IF NOT. TST R4 ;TRYING TO SET? BLE DONE ;BRANCH IF SO MOV N.FVER(R3),@20(R5) ;READ VERSION NUMBER. ; DONE: RTS PC ;RETURN. NARG: .WORD 0 ;NUMBER OF ARGUMENTS. .END