{$S-,V-,R-,F+} PROGRAM REX; { Rename all files matching one extension with another CAUTION !!! This program will rename FILES !!!!!!!! Takes to parameters : Ext1(current) and Ext2(whatever) i.e. *.XXX to *.PAS or *.MOD to *.INT Uses some of the routines from EDDY THILLEMAN'S recursive directory roam whice can be found in the SWAG distribution Gayle Davis 1/26/94 } USES DOS, CRT; TYPE ProcessType = PROCEDURE (Path : PathStr; FR : SearchRec); CONST NotGoodFile : WORD = Directory + Hidden + Readonly + VolumeID + Sysfile; VAR Ext1 : Pathstr; Ext2 : Pathstr; ExitSave : POINTER; PROCEDURE Frename (SourceFile, TargetFile : STRING; VAR ErrCode : BYTE); VAR reg : REGISTERS; BEGIN { Frename } SourceFile := CONCAT (SourceFile, #0); TargetFile := CONCAT (TargetFile, #0); reg.ds := SEG (SourceFile [1]); reg.dx := OFS (SourceFile [1]); reg.es := SEG (TargetFile [1]); reg.di := OFS (TargetFile [1]); reg.ah := $56; MSDOS (reg); ErrCode := 0; IF (reg.flags AND FCarry) = 1 THEN ErrCode := reg.ax; END; { Frename } PROCEDURE DoitHere (Path : PathStr; FR : SearchRec); FAR; VAR Name1, Name2 : PathStr; D : PathStr; N : NameStr; E : ExtStr; Err : BYTE; BEGIN IF (FR.Attr AND NotGoodFile) <> 0 THEN EXIT; FSplit(FR.Name, D, N, E); Name1 := Path + FR.Name; Name2 := Path + N + Ext2; WRITELN (Name1, ' ', Name2); FRename(Name1,Name2,Err); END; FUNCTION Wildcard (Name : PathStr) : BOOLEAN ; BEGIN Wildcard := (POS ('*', Name) <> 0) OR (POS ('?', Name) <> 0) AND (POS('.',Name) > 0); END ; Procedure PathAnalyze (P: PathStr; Var D: DirStr; Var Name: NameStr); Var N: NameStr; E: ExtStr; begin FSplit(P, D, N, E); Name := N + E; end; PROCEDURE FindFiles (fMask : PathStr; fAttr : WORD; Process : ProcessType); VAR FR : SearchRec; Path : PathStr; Mask : NameStr; BEGIN PathAnalyze(fMask,Path,Mask); FINDFIRST (FMask, FAttr, FR); WHILE DosError = 0 DO BEGIN Process (Path,FR); FINDNEXT (FR); END; END; PROCEDURE ExitHandler; FAR; { Return the cursor to its original shape } BEGIN ExitProc := ExitSave END; BEGIN ExitSave := ExitProc; ExitProc := @ExitHandler; ClrScr; IF PARAMCOUNT < 2 THEN BEGIN WriteLn('REX : Rename all files matching Ext1 to Ext2'); WRITELN('Needs 2 Parameters .. *.ext1 *.ext2'); HALT; END; Ext1 := ParamStr(1); Ext2 := ParamStr(2); IF NOT WildCard(Ext1) THEN HALT; { must contain a wildcard } IF NOT WildCard(Ext2) THEN HALT; Ext2 := COPY(Ext2,POS('.',Ext2),$FF); { only want the extension } FindFiles (Ext1, Anyfile, DoitHere); END.