FileName.mod 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. IMPLEMENTATION MODULE FileName;
  2. IMPORT InOut, Strings;
  3. (*----------------------------------------------------------------*)
  4. PROCEDURE Get(fname: ARRAY OF CHAR; VAR dir,name,ext: ARRAY OF CHAR);
  5. VAR
  6. LocalFname : Format;
  7. L : CARDINAL;
  8. save : CARDINAL;
  9. BEGIN
  10. L := LENGTH(fname);
  11. save := L;
  12. (* separating the dir part from the filename+ext part *)
  13. REPEAT
  14. DEC(save);
  15. IF fname[save] = "." THEN
  16. LocalFname.extPos := save + 1;
  17. LocalFname.extLen := L - LocalFname.extPos ;
  18. END;
  19. UNTIL fname[save] = "/";
  20. LocalFname.namePos := save + 1;
  21. LocalFname.nameLen := LocalFname.extPos - LocalFname.namePos -1;
  22. (* now, directory part *)
  23. LocalFname.dirPos := 0;
  24. LocalFname.dirLen := save + 1;
  25. (* PROCEDURE Extract (source: ARRAY OF CHAR; startIndex, numberToExtract: CARDINAL; VAR destination: ARRAY OF CHAR); *)
  26. Strings.Extract(fname,LocalFname.namePos, LocalFname.nameLen,name);
  27. Strings.Extract(fname,LocalFname.dirPos, LocalFname.dirLen,dir);
  28. Strings.Extract(fname,LocalFname.extPos, LocalFname.extLen,ext);
  29. END Get;
  30. PROCEDURE GetDir(fname: ARRAY OF CHAR; VAR dir: ARRAY OF CHAR);
  31. VAR
  32. Dir, Name, Ext : ARRAY[0..256] OF CHAR;
  33. BEGIN
  34. Get(fname,Dir,Name,Ext);
  35. Strings.Assign(Dir,dir);
  36. END GetDir;
  37. PROCEDURE GetName(fname: ARRAY OF CHAR; VAR name: ARRAY OF CHAR);
  38. VAR
  39. Dir, Name, Ext : ARRAY[0..256] OF CHAR;
  40. BEGIN
  41. Get(fname,Dir,Name,Ext);
  42. Strings.Assign(Name, name);
  43. END GetName;
  44. PROCEDURE GetExt(fname: ARRAY OF CHAR; VAR ext: ARRAY OF CHAR);
  45. VAR
  46. Dir, Name, Ext : ARRAY[0..256] OF CHAR;
  47. BEGIN
  48. Get(fname,Dir,Name,Ext);
  49. Strings.Assign(Ext,ext);
  50. END GetExt;
  51. END FileName.