| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- (* 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.
|