FILENAME.MOD 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. (* Release 3.10 *)
  2. (*-------------------------------------------------------------------------*
  3. * *
  4. * FILENAME.MOD - COMMS Toolkit filename parser *
  5. * *
  6. * COPYRIGHT (C) 1990..1992 Clarion Software Corporation. *
  7. * All Rights Reserved *
  8. * *
  9. *--------------------------------------------------------------------------*)
  10. IMPLEMENTATION MODULE Filenames;
  11. IMPORT Lib,Str;
  12. PROCEDURE ParseFilename(f:ARRAY OF CHAR;VAR drive,path,name,ext:ARRAY OF CHAR):BOOLEAN;
  13. VAR
  14. Lnth,pos,NameLnth : CARDINAL;
  15. BEGIN
  16. drive[0]:=0C;
  17. path[0]:=0C;
  18. name[0]:=0C;
  19. ext[0]:=0C;
  20. Lnth := Str.Length(f);
  21. IF Lnth=0 THEN
  22. RETURN FALSE;
  23. END;
  24. pos := Lnth-Lib.ScanL(ADR(f[Lnth-1]),Lnth,':');
  25. IF pos>0 THEN
  26. IF pos<>2 THEN
  27. RETURN(FALSE);
  28. END;
  29. drive[0] := CAP(f[0]);
  30. drive[1] := 0C;
  31. DEC(Lnth,2);
  32. Lib.Move(ADR(f[2]),ADR(f),Lnth+1)
  33. ELSE
  34. drive[0] := 0C;
  35. END;
  36. IF Lnth=0 THEN
  37. RETURN(FALSE);
  38. END;
  39. pos := Lnth-Lib.ScanL(ADR(f[Lnth-1]),Lnth,'\');
  40. IF pos>0 THEN
  41. Lib.Move(ADR(f),ADR(path),pos);
  42. DEC(Lnth,pos);
  43. Lib.Move(ADR(f[pos]),ADR(f),Lnth+1);
  44. END;
  45. path[pos] := 0C;
  46. IF Lnth=0 THEN
  47. RETURN(FALSE);
  48. END;
  49. pos := Lnth-Lib.ScanL(ADR(f[Lnth-1]),Lnth,'.');
  50. IF pos>0 THEN
  51. IF pos=1 THEN
  52. RETURN(FALSE);
  53. END;
  54. IF pos-1>8 THEN
  55. NameLnth:=8;
  56. ELSE
  57. NameLnth:=pos-1;
  58. END;
  59. Lib.Move(ADR(f),ADR(name),NameLnth);
  60. name[NameLnth]:=0C;
  61. DEC(Lnth,pos);
  62. Lib.Move(ADR(f[pos]),ADR(f),Lnth+1);
  63. Lib.Move(ADR(f),ADR(ext),Lnth+1)
  64. ELSE
  65. IF Lnth+1>8 THEN
  66. NameLnth:=8;
  67. ELSE
  68. NameLnth:=Lnth+1;
  69. END;
  70. Lib.Move(ADR(f),ADR(name),NameLnth);
  71. name[Lnth]:=0C;
  72. ext[0] := 0C;
  73. END;
  74. RETURN(TRUE);
  75. END ParseFilename;
  76. (*.................................................*)
  77. PROCEDURE MakeFilename(drive,path,name,ext:ARRAY OF CHAR;VAR f:ARRAY OF CHAR);
  78. VAR
  79. Lnth,LnthDest : CARDINAL;
  80. BEGIN
  81. f[0] := 0C;
  82. IF drive[0]<>0C THEN
  83. f[0]:=drive[0];
  84. f[1]:=':'; f[2]:=0C;
  85. END;
  86. Str.Concat(f,f,path);
  87. IF path[0]<>0C THEN
  88. Lnth := Str.Length(f);
  89. IF f[Lnth-1]<>'\' THEN
  90. f[Lnth]:='\';
  91. f[Lnth+1]:=0C;
  92. END;
  93. END;
  94. Lnth := Str.Length(name);
  95. IF Lnth>8 THEN
  96. name[8]:=0C;
  97. END;
  98. Str.Concat(f,f,name);
  99. IF ext[0]<>0C THEN
  100. Lnth := Str.Length(f);
  101. IF ext[0]<>'.' THEN
  102. f[Lnth]:='.';
  103. f[Lnth+1]:=0C;
  104. END;
  105. Str.Concat(f,f,ext);
  106. END;
  107. END MakeFilename;
  108. END Filenames.
  109.