IMPLEMENTATION MODULE FileName; IMPORT InOut, Strings; (*----------------------------------------------------------------*) PROCEDURE Get(fname: ARRAY OF CHAR; VAR dir,name,ext: ARRAY OF CHAR); VAR LocalFname : Format; L : CARDINAL; save : CARDINAL; BEGIN L := LENGTH(fname); save := L; (* separating the dir part from the filename+ext part *) REPEAT DEC(save); IF fname[save] = "." THEN LocalFname.extPos := save + 1; LocalFname.extLen := L - LocalFname.extPos ; END; UNTIL fname[save] = "/"; LocalFname.namePos := save + 1; LocalFname.nameLen := LocalFname.extPos - LocalFname.namePos -1; (* now, directory part *) LocalFname.dirPos := 0; LocalFname.dirLen := save + 1; (* PROCEDURE Extract (source: ARRAY OF CHAR; startIndex, numberToExtract: CARDINAL; VAR destination: ARRAY OF CHAR); *) Strings.Extract(fname,LocalFname.namePos, LocalFname.nameLen,name); Strings.Extract(fname,LocalFname.dirPos, LocalFname.dirLen,dir); Strings.Extract(fname,LocalFname.extPos, LocalFname.extLen,ext); END Get; PROCEDURE GetDir(fname: ARRAY OF CHAR; VAR dir: ARRAY OF CHAR); VAR Dir, Name, Ext : ARRAY[0..256] OF CHAR; BEGIN Get(fname,Dir,Name,Ext); Strings.Assign(Dir,dir); END GetDir; PROCEDURE GetName(fname: ARRAY OF CHAR; VAR name: ARRAY OF CHAR); VAR Dir, Name, Ext : ARRAY[0..256] OF CHAR; BEGIN Get(fname,Dir,Name,Ext); Strings.Assign(Name, name); END GetName; PROCEDURE GetExt(fname: ARRAY OF CHAR; VAR ext: ARRAY OF CHAR); VAR Dir, Name, Ext : ARRAY[0..256] OF CHAR; BEGIN Get(fname,Dir,Name,Ext); Strings.Assign(Ext,ext); END GetExt; END FileName.