(* Release 3.10 *) (*-------------------------------------------------------------------------* * * * FILENAME.MOD - COMMS Toolkit filename parser * * * * COPYRIGHT (C) 1990..1992 Clarion Software Corporation. * * All Rights Reserved * * * *--------------------------------------------------------------------------*) IMPLEMENTATION MODULE Filenames; IMPORT Lib,Str; PROCEDURE ParseFilename(f:ARRAY OF CHAR;VAR drive,path,name,ext:ARRAY OF CHAR):BOOLEAN; VAR Lnth,pos,NameLnth : CARDINAL; BEGIN drive[0]:=0C; path[0]:=0C; name[0]:=0C; ext[0]:=0C; Lnth := Str.Length(f); IF Lnth=0 THEN RETURN FALSE; END; pos := Lnth-Lib.ScanL(ADR(f[Lnth-1]),Lnth,':'); IF pos>0 THEN IF pos<>2 THEN RETURN(FALSE); END; drive[0] := CAP(f[0]); drive[1] := 0C; DEC(Lnth,2); Lib.Move(ADR(f[2]),ADR(f),Lnth+1) ELSE drive[0] := 0C; END; IF Lnth=0 THEN RETURN(FALSE); END; pos := Lnth-Lib.ScanL(ADR(f[Lnth-1]),Lnth,'\'); IF pos>0 THEN Lib.Move(ADR(f),ADR(path),pos); DEC(Lnth,pos); Lib.Move(ADR(f[pos]),ADR(f),Lnth+1); END; path[pos] := 0C; IF Lnth=0 THEN RETURN(FALSE); END; pos := Lnth-Lib.ScanL(ADR(f[Lnth-1]),Lnth,'.'); IF pos>0 THEN IF pos=1 THEN RETURN(FALSE); END; IF pos-1>8 THEN NameLnth:=8; ELSE NameLnth:=pos-1; END; Lib.Move(ADR(f),ADR(name),NameLnth); name[NameLnth]:=0C; DEC(Lnth,pos); Lib.Move(ADR(f[pos]),ADR(f),Lnth+1); Lib.Move(ADR(f),ADR(ext),Lnth+1) ELSE IF Lnth+1>8 THEN NameLnth:=8; ELSE NameLnth:=Lnth+1; END; Lib.Move(ADR(f),ADR(name),NameLnth); name[Lnth]:=0C; ext[0] := 0C; END; RETURN(TRUE); END ParseFilename; (*.................................................*) PROCEDURE MakeFilename(drive,path,name,ext:ARRAY OF CHAR;VAR f:ARRAY OF CHAR); VAR Lnth,LnthDest : CARDINAL; BEGIN f[0] := 0C; IF drive[0]<>0C THEN f[0]:=drive[0]; f[1]:=':'; f[2]:=0C; END; Str.Concat(f,f,path); IF path[0]<>0C THEN Lnth := Str.Length(f); IF f[Lnth-1]<>'\' THEN f[Lnth]:='\'; f[Lnth+1]:=0C; END; END; Lnth := Str.Length(name); IF Lnth>8 THEN name[8]:=0C; END; Str.Concat(f,f,name); IF ext[0]<>0C THEN Lnth := Str.Length(f); IF ext[0]<>'.' THEN f[Lnth]:='.'; f[Lnth+1]:=0C; END; Str.Concat(f,f,ext); END; END MakeFilename; END Filenames.