home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 03 / praxis / binaryio.mod < prev    next >
Encoding:
Modula Implementation  |  1989-12-13  |  5.6 KB  |  191 lines

  1. (* ------------------------------------------------------ *)
  2. (*                   BINARYIO.MOD                         *)
  3. (*         (c) 1990  Roland Minges & TOOLBOX              *)
  4. (* ------------------------------------------------------ *)
  5. IMPLEMENTATION MODULE BinaryIO;
  6.  
  7. IMPORT SYSTEM, (* STDLIB, *) Streams, Strings;
  8.  
  9. (* --- nicht exportierte modul-globale Vereinbarungen --- *)
  10.  
  11. VAR
  12.   PB : POINTER TO SYSTEM.BYTE;
  13.   PW : POINTER TO SYSTEM.WORD;
  14.   PL : POINTER TO SYSTEM.LONGWORD;
  15.  
  16. (* --------------------- schreiben ---------------------- *)
  17.  
  18. PROCEDURE WRite (s : Streams.Stream; Char : CHAR);
  19. BEGIN
  20.   Put (s, SYSTEM.ADR (Char), 1);
  21. END WRite;
  22.  
  23. PROCEDURE WRiteString (s         : Streams.Stream;
  24.                        TheString : ARRAY OF CHAR);
  25. VAR
  26.   NoOfChars : CARDINAL;
  27. BEGIN
  28.   NoOfChars := Strings.Length (TheString);
  29.   Put (s, SYSTEM.ADR(NoOfChars), SYSTEM.TSIZE (CARDINAL));
  30.   Put (s, SYSTEM.ADR (TheString), LONGCARD (NoOfChars));
  31. END WRiteString;
  32.  
  33. PROCEDURE WRiteCard (s         : Streams.Stream;
  34.                      TheNumber : CARDINAL);
  35. BEGIN
  36.   Put (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (CARDINAL));
  37. END WRiteCard;
  38.  
  39. PROCEDURE WRiteLongCard (s         : Streams.Stream;
  40.                          TheNumber : LONGCARD);
  41. BEGIN
  42.   Put (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (LONGCARD));
  43. END WRiteLongCard;
  44.  
  45. PROCEDURE WRiteInt (s         : Streams.Stream;
  46.                     TheNumber : INTEGER);
  47. BEGIN
  48.   Put (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (INTEGER));
  49. END WRiteInt;
  50.  
  51. PROCEDURE WRiteLongInt (s         : Streams.Stream;
  52.                         TheNumber : LONGINT);
  53. BEGIN
  54.   Put (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (LONGINT));
  55. END WRiteLongInt;
  56.  
  57. PROCEDURE WRiteReal (s         : Streams.Stream;
  58.                      TheNumber : REAL);
  59. BEGIN
  60.   Put (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (REAL));
  61. END WRiteReal;
  62.  
  63. PROCEDURE WRiteBlock (s     : Streams.Stream;
  64.                       Start : SYSTEM.ADDRESS;
  65.                       Size  : LONGCARD     );
  66. BEGIN
  67.   Put (s, SYSTEM.ADR (Size), SYSTEM.TSIZE (LONGCARD));
  68.   Put (s, Start, Size);
  69. END WRiteBlock;
  70.  
  71. (* ----------------------- lesen ------------------------ *)
  72.  
  73. PROCEDURE REad (    s    : Streams.Stream;
  74.                 VAR Char : CHAR);
  75. BEGIN
  76.   Get (s, SYSTEM.ADR (Char), 1);
  77. END REad;
  78.  
  79. PROCEDURE REadString (    s         : Streams.Stream;
  80.                       VAR TheString : ARRAY OF CHAR);
  81. VAR
  82.   NoOfChars : CARDINAL;
  83.   Dummy     : SYSTEM.BYTE;
  84. BEGIN
  85.   Get (s, SYSTEM.ADR (NoOfChars), SYSTEM.TSIZE (CARDINAL));
  86.  
  87.   IF NoOfChars > (HIGH (TheString) + 1) THEN
  88.     Get (s, SYSTEM.ADR (TheString),
  89.             LONGCARD (HIGH (TheString) + 1));
  90.     DEC (NoOfChars, HIGH (TheString) + 1);
  91.     PB := SYSTEM.ADR (Dummy);
  92.     WHILE NoOfChars > 0 DO
  93.       Get (s, PB, 1);
  94.       DEC (NoOfChars);
  95.     END (* WHILE *);
  96.   ELSE
  97.     Get (s, SYSTEM.ADR (TheString),
  98.             LONGCARD (NoOfChars));
  99.     IF NoOfChars <= HIGH (TheString) THEN
  100.       TheString[NoOfChars] := 00C;
  101.     END (* IF *);
  102.   END (* IF *);
  103. END REadString;
  104.  
  105. PROCEDURE REadCard (    s         : Streams.Stream;
  106.                     VAR TheNumber : CARDINAL);
  107. BEGIN
  108.   Get (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (CARDINAL));
  109. END REadCard;
  110.  
  111. PROCEDURE REadLongCard (    s         : Streams.Stream;
  112.                         VAR TheNumber : LONGCARD);
  113. BEGIN
  114.   Get (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (LONGCARD));
  115. END REadLongCard;
  116.  
  117. PROCEDURE REadInt (    s         : Streams.Stream;
  118.                    VAR TheNumber : INTEGER);
  119. BEGIN
  120.   Get (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (INTEGER));
  121. END REadInt;
  122.  
  123. PROCEDURE REadLongInt (    s         : Streams.Stream;
  124.                        VAR TheNumber : LONGINT);
  125. BEGIN
  126.   Get (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (LONGINT));
  127. END REadLongInt;
  128.  
  129. PROCEDURE REadReal (    s         : Streams.Stream;
  130.                     VAR TheNumber : REAL);
  131. BEGIN
  132.   Get (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (REAL));
  133. END REadReal;
  134.  
  135. PROCEDURE REadBlock (    s     : Streams.Stream;
  136.                          Start : SYSTEM.ADDRESS;
  137.                      VAR Size  : LONGCARD);
  138. BEGIN
  139.   Get (s, SYSTEM.ADR (Size), SYSTEM.TSIZE (LONGCARD));
  140.   Get (s, Start, Size);
  141. END REadBlock;
  142.  
  143. (* ------------ nicht exportierte Prozeduren ------------ *)
  144.  
  145. PROCEDURE Put (s     : Streams.Stream;
  146.                Start : SYSTEM.ADDRESS;
  147.                Size  : LONGCARD);
  148. BEGIN
  149.   PL := Start;
  150.   WHILE Size >= 4 DO
  151.     Streams.Write32Bit (s, PL^);
  152.     INC (PL); INC (PL); INC (PL); INC (PL); DEC (Size, 4);
  153.   END (* WHILE *);
  154.   PW := SYSTEM.ADDRESS (PL);
  155.   WHILE Size >= 2 DO
  156.     Streams.Write16Bit (s, PW^);
  157.     INC (PW); INC (PW);                     DEC (Size, 2);
  158.   END (* WHILE *);
  159.   PB := SYSTEM.ADDRESS (PW);
  160.   WHILE Size >= 1 DO
  161.     Streams.Write8Bit (s, PB^);
  162.     INC (PB);                               DEC (Size   );
  163.   END (* WHILE *);
  164. END Put;
  165.  
  166. PROCEDURE Get (s     : Streams.Stream;
  167.                Start : SYSTEM.ADDRESS;
  168.                Size  : LONGCARD);
  169. BEGIN
  170.   PL := Start;
  171.   WHILE Size >= 4 DO
  172.     Streams.Read32Bit (s, PL^);
  173.     INC (PL); INC (PL); INC (PL); INC (PL); DEC (Size, 4);
  174.   END (* WHILE *);
  175.   PW := SYSTEM.ADDRESS (PL);
  176.   WHILE Size >= 2 DO
  177.     Streams.Read16Bit (s, PW^);
  178.     INC (PW); INC (PW);                     DEC (Size, 2);
  179.   END (* WHILE *);
  180.   PB := SYSTEM.ADDRESS (PW);
  181.   WHILE Size >= 1 DO
  182.     Streams.Read8Bit (s, PB^);
  183.     INC (PB);                               DEC (Size   );
  184.   END (* WHILE *);
  185. END Get;
  186.  
  187. BEGIN
  188. END BinaryIO.
  189. (* ------------------------------------------------------ *)
  190. (*                Ende von BINARYIO.MOD                   *)
  191.