Archives.Mod 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. MODULE Archives; (** AUTHOR "FN"; PURPOSE "Abstract Archive Object"; *)
  2. IMPORT
  3. Configuration, Strings, Streams;
  4. CONST
  5. ArchiveNameSize = 128;
  6. TYPE
  7. StringObject*= OBJECT
  8. VAR value -: ARRAY 256 OF CHAR;
  9. PROCEDURE & Init*(CONST name : ARRAY OF CHAR);
  10. VAR i : LONGINT;
  11. BEGIN
  12. FOR i := 0 TO LEN(name)-1 DO
  13. value[i] := name[i];
  14. IF name[i] = 0X THEN RETURN END
  15. END
  16. END Init;
  17. END StringObject;
  18. EntryInfo*= OBJECT
  19. PROCEDURE GetName*() : Strings.String;
  20. BEGIN HALT(301)
  21. END GetName;
  22. PROCEDURE GetSize*() : LONGINT;
  23. BEGIN HALT(301)
  24. END GetSize;
  25. PROCEDURE GetInfoString*() : Strings.String;
  26. BEGIN HALT(301)
  27. END GetInfoString;
  28. END EntryInfo;
  29. Index* = POINTER TO ARRAY OF EntryInfo;
  30. Archive* = OBJECT
  31. VAR name *: ARRAY ArchiveNameSize OF CHAR;
  32. PROCEDURE Acquire*;
  33. BEGIN HALT(301)
  34. END Acquire;
  35. PROCEDURE Release*;
  36. BEGIN HALT(301)
  37. END Release;
  38. PROCEDURE GetIndex*() : Index;
  39. BEGIN HALT(301)
  40. END GetIndex;
  41. PROCEDURE GetEntryInfo*(CONST name : ARRAY OF CHAR) : EntryInfo;
  42. BEGIN HALT(301)
  43. END GetEntryInfo;
  44. PROCEDURE RemoveEntry*(CONST name : ARRAY OF CHAR);
  45. BEGIN HALT(301)
  46. END RemoveEntry;
  47. PROCEDURE RenameEntry*(CONST from, to : ARRAY OF CHAR) : EntryInfo;
  48. BEGIN HALT(301)
  49. END RenameEntry;
  50. PROCEDURE OpenSender*(CONST name : ARRAY OF CHAR) : Streams.Sender;
  51. BEGIN HALT(301)
  52. END OpenSender;
  53. PROCEDURE OpenReceiver*(CONST name : ARRAY OF CHAR) : Streams.Receiver;
  54. BEGIN HALT(301)
  55. END OpenReceiver;
  56. PROCEDURE Copy*(CONST name : ARRAY OF CHAR) : Archive;
  57. BEGIN HALT(301)
  58. END Copy;
  59. END Archive;
  60. FactoryProcedure = PROCEDURE (name : StringObject) : Archive;
  61. (* ----- api ----------------------------------------------------- *)
  62. PROCEDURE Old*(CONST name, type : ARRAY OF CHAR) : Archive;
  63. VAR
  64. old : FactoryProcedure;
  65. a : StringObject;
  66. archive : Archive;
  67. config, factoryName : ARRAY 128 OF CHAR;
  68. res : WORD;
  69. BEGIN
  70. archive := NIL;
  71. config := "Archives."; Strings.Append(config, type);
  72. Configuration.Get(config, factoryName, res);
  73. IF (res = Configuration.Ok) THEN
  74. GETPROCEDURE(factoryName, "Old", old);
  75. IF (old # NIL) THEN
  76. NEW(a, name);
  77. archive := old(a);
  78. END;
  79. END;
  80. RETURN archive;
  81. END Old;
  82. PROCEDURE New*(CONST name, type : ARRAY OF CHAR) : Archive;
  83. VAR
  84. new : FactoryProcedure;
  85. a : StringObject;
  86. archive : Archive;
  87. config, factoryName : ARRAY 128 OF CHAR;
  88. res : WORD;
  89. BEGIN
  90. archive := NIL;
  91. config := "Archives."; Strings.Append(config, type);
  92. Configuration.Get(config, factoryName, res);
  93. IF (res = Configuration.Ok) THEN
  94. GETPROCEDURE(factoryName, "New", new);
  95. IF (new # NIL) THEN
  96. NEW(a, name);
  97. archive := new(a);
  98. END;
  99. END;
  100. RETURN archive;
  101. END New;
  102. END Archives.