.TITLE RENAME .IDENT /V01/ .SBTTL DESCRIPTION ; ; ; COMPONENT: RENAME ; ; DATE: 18-JUL-79 ; ; AUTHOR: GR JOHNSON ; BATTELLE NORTHWEST ; P O BOX 999 ; RICHLAND WA 99352 ; ; SOURCE: MACRO-11 ; ; CALLER: FORTRAN IV-PLUS ; ; CALLING SEQUENCE: ; ; CALL RENAME(LUN,OLDFILE,NEWFILE,[ISW]) ; ; LUN = INTEGER CONTAINING THE LOGICAL UNIT NUMBER TO BE ; USED BY RENAME. ; ; OLDFILE = VARIABLE, ARRAY, OR LITERAL SPECIFYING THE OLD ; FILE SPECIFICATION. THE STRING MUST BE TERMINATED ; BY AN ASCII NULL CHARACTER. ; ; NEWFILE = VARIABLE, ARRAY, OR LITERAL SPECIFYING THE NEW ; FILE SPECIFICATION. THE STRING MUST BE TERMINATED ; BY AN ASCII NULL CHARACTER. ; ; ISW = VARIABLE TO RECEIVE THE INTEGER STATUS WORD. ; ; 00 = SUCCESS ; ; -01 = ILLEGAL FILE SPECIFICATION ; -16 = PRIVILEGE VIOLATION ; -26 = NO SUCH FILE ; -34 = LUN ALREADY IN USE ; -48 = CANNOT RENAME FROM ONE DEVICE TO ANOTHER ; -49 = NEW FILENAME ALREADY EXISTS ; -96 = INVALID LOGICAL UNIT NUMBER ; ; -NN = OTHER FCS ERROR CODE ; ; ; DESCRIPTION: ; ; "RENAME" ALLOWS THE USER TO RENAME SPECIFIED FILES FROM A FORTRAN ; PROGRAM. ; ; EXAMPLE: ; ; CALL RENAME(1,'FILE.OLD','FILE.NEW') ; ; .SBTTL SYMBOL DEFINITIONS ; ; ; .PSECT ; .MCALL CSI$,CSI$1,CSI$2 ; .MCALL OTSWA,$AOTS,FBLOCK ; IN [11,40]F4P.MAC .MCALL FDBDF$ ; .MCALL FDOP$R ; ; CSI$ ; DEFINE CSI OFFSETS OTSWA ; DEFINE OTS OFFSETS FBLOCK ; DEFINE FDB AND FFDB OFFSETS AND BITS ; CSIB: .BLKB C.SIZE ; CSI BLOCK ; OFDB: .WORD 0 ; OLD FDB ADDRESS OFNB: .WORD 0 ; OLD FNB ADDRESS ; NFDB=. ; NEW FDB ADDRESS NFNB=.+F.FNB ; NEW FNB ADDRESS FDBDF$ ; NEW FDB .SBTTL ENTRY POINT -- PROCESS OLD FILE SPECIFICATION ; ; ; RENAME:: ; ; ; SCAN FOR OLD FILESPEC STRING LENGTH MOV 4(R5),R1 ; STRING ADDRESS TO R1 CLR R2 ; CLEAR CHARACTER COUNT 2$: TSTB (R1)+ ; END-OF-STRING? BEQ 4$ ; YES, BRANCH FROM SCAN INC R2 ; NO, INCREMENT CHARACTER COUNT BR 2$ ; AND CONTINUE TO SCAN ; ; VALIDATE AND PARSE OLD FILESPEC 4$: MOV #CSIB,R0 ; CSI BLOCK ADDRESS TO R0 MOV 4(R5),R1 ; STRING ADDRESS TO R1 CSI$1 R0,R1,R2 ; CHECK FILE SPECIFICATION SYNTAX BCS IEBAD ; RETURN ON ERROR CSI$2 R0,OUTPUT ; PARSE FILE SPECIFICATION BCS IEBAD ; RETURN ON ERROR BITB #CS.WLD,C.STAT(R0) ; WILD CARD SPECIFIERS? BNE IEBAD ; YES, RETURN ON ERROR ; ; TEST LUN / FETCH FDB ADDRESS MOV @2(R5),R2 ; LOGICAL UNIT NUMBER TO R2 BLT IEILU ; RETURN ON ERROR $AOTS ; ADDRESS OF IMPURE OTS SECTION TO R3 CMP W.LUNS(R3),R2 ; COMPARE LUN TO TKB OPTION BLT IEILU ; RETURN ON ERROR CALL $FCHNL ; ADDRESS OF LUN'S FFDB TO R0 BIT #DV.OPN,D.STAT(R0) ; LUN OPEN? BNE IEALN ; YES, RETURN ON ERROR ADD #D.FDB,R0 ; ADDRESS OF LUN'S FDB TO R0 ; ; INITIALIZE LUN'S FNB WITH OLD FILSPEC MOV R0,R1 ; ADDRESS OF LUN'S FDB TO R1 ADD #F.FNB,R1 ; ADDRESS OF LUN'S FNB TO R1 MOV #CSIB+C.DSDS,R2 ; ADDRESS OF DSD TO R2 CLR R3 ; NO DEFAULT FNB CALL .PARSE ; INITIALIZE ; CALL .FIND ; LOAD OLD FNB BCS ERR ; FILE NOT FOUND, RETURN ON ERROR ; MOV R0,OFDB ; PRESERVE OLD FDB ADDRESS MOV R1,OFNB ; PRESERVE OLD FNB ADDRESS ; .SBTTL PROCESS NEW FILE SPECIFICATION ; ; ; ; SCAN FOR NEW FILESPEC STRING LENGTH MOV 6(R5),R1 ; STRING ADDRESS TO R1 CLR R2 ; CLEAR CHARACTER COUNT 6$: TSTB (R1)+ ; END-OF-STRING? BEQ 10$ ; YES, BRANCH FROM SCAN INC R2 ; NO, INCREMENT CHARACTER COUNT BR 6$ ; AND CONTINUE TO SCAN ; ; VALIDATE AND PARSE NEW FILESPEC 10$: MOV #CSIB,R0 ; CSI BLOCK ADDRESS TO R0 MOV 6(R5),R1 ; STRING ADDRESS TO R1 CSI$1 R0,R1,R2 ; CHECK FILE SPECIFICATION SYNTAX BCS IEBAD ; RETURN ON ERROR CSI$2 R0,OUTPUT ; PARSE FILE SPECIFICATION BCS IEBAD ; RETURN ON ERROR BITB #CS.WLD,C.STAT(R0) ; WILD CARD SPECIFIERS? BNE IEBAD ; YES, RETURN ON ERROR FDOP$R NFDB,@2(R5),#C.DSDS+CSIB ; INITIALIZE NEW FNB ; .SBTTL RENAME FILE ; ; ; MOV OFDB,R0 ; OLD FDB ADDRESS TO R0 MOV NFDB,R1 ; NEW FDB ADDRESS TO R1 CALL .RENAME ; RENAME FILES BCS ERR ; RETURN ON ERROR ; .SBTTL PROCESS ERRORS AND RETURN TO CALLER ; ; ; SUC: CLR R4 ; SUCCESS (ISW=0) BR RTN ; IEBAD: MOV #IE.BAD,R4 ; FILE SPECIFICATION ERROR BR RTN ; IEILU: MOV #IE.ILU,R4 ; INVALID LUN BR RTN ; IEALN: MOV #IE.ALN,R4 ; LUN ALREADY OPEN BR RTN ; ERR: MOVB F.ERR(R0),R4 ; RENAME FAILURE ; ; RTN: CMPB #4,(R5) ; FOUR ARGUMENTS? BGT 2$ ; NO, RETURN TO CALLER TST 10(R5) ; NULL ARGUMENT? BLT 2$ ; YES, RETURN TO CALLER MOV R4,@10(R5) ; NO, RETURN STATUS 2$: RTS PC ; RETURN TO CALLER .END ;