StdCodecs.txt 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. MODULE EncStdCodecs;
  2. (* THIS IS TEXT COPY OF StdCodecs.odc *)
  3. (* DO NOT EDIT *)
  4. (*
  5. A. V. Shiryaev, 2012.10
  6. *)
  7. IMPORT Meta, Codecs := EncCodecs, Aliases := EncStdAliases;
  8. TYPE
  9. Directory = POINTER TO RECORD (Codecs.Directory) END;
  10. VAR
  11. dir-: Directory;
  12. (* Directory *)
  13. PROCEDURE (dir: Directory) NewEncoder* (enc: Codecs.Encoding): Codecs.Encoder;
  14. VAR modName: ARRAY LEN(Codecs.Encoding) + 16 OF CHAR;
  15. item: Meta.Item; ok: BOOLEAN;
  16. item0: RECORD (Meta.Value)
  17. fun: PROCEDURE (): Codecs.Encoder
  18. END;
  19. e: Codecs.Encoder;
  20. BEGIN
  21. e := NIL;
  22. Aliases.GetModName(enc, modName, ok);
  23. IF ok THEN
  24. Meta.Lookup(modName, item);
  25. IF item.obj = Meta.modObj THEN
  26. item.Lookup("NewEncoder", item);
  27. IF item.obj = Meta.procObj THEN
  28. item.GetVal(item0, ok);
  29. IF ok THEN
  30. e := item0.fun()
  31. END
  32. END
  33. END
  34. END;
  35. RETURN e
  36. END NewEncoder;
  37. PROCEDURE (dir: Directory) NewDecoder* (enc: Codecs.Encoding): Codecs.Decoder;
  38. VAR modName: ARRAY LEN(Codecs.Encoding) + 16 OF CHAR;
  39. item: Meta.Item; ok: BOOLEAN;
  40. item0: RECORD (Meta.Value)
  41. fun: PROCEDURE (): Codecs.Decoder
  42. END;
  43. d: Codecs.Decoder;
  44. BEGIN
  45. d := NIL;
  46. Aliases.GetModName(enc, modName, ok);
  47. IF ok THEN
  48. Meta.Lookup(modName, item);
  49. IF item.obj = Meta.modObj THEN
  50. item.Lookup("NewDecoder", item);
  51. IF item.obj = Meta.procObj THEN
  52. item.GetVal(item0, ok);
  53. IF ok THEN
  54. d := item0.fun()
  55. END
  56. END
  57. END
  58. END;
  59. RETURN d
  60. END NewDecoder;
  61. PROCEDURE Init*;
  62. BEGIN
  63. NEW(dir); Codecs.SetDir(dir)
  64. END Init;
  65. BEGIN
  66. Init
  67. END EncStdCodecs.