home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1989-12-13 | 5.6 KB | 191 lines |
- (* ------------------------------------------------------ *)
- (* BINARYIO.MOD *)
- (* (c) 1990 Roland Minges & TOOLBOX *)
- (* ------------------------------------------------------ *)
- IMPLEMENTATION MODULE BinaryIO;
-
- IMPORT SYSTEM, (* STDLIB, *) Streams, Strings;
-
- (* --- nicht exportierte modul-globale Vereinbarungen --- *)
-
- VAR
- PB : POINTER TO SYSTEM.BYTE;
- PW : POINTER TO SYSTEM.WORD;
- PL : POINTER TO SYSTEM.LONGWORD;
-
- (* --------------------- schreiben ---------------------- *)
-
- PROCEDURE WRite (s : Streams.Stream; Char : CHAR);
- BEGIN
- Put (s, SYSTEM.ADR (Char), 1);
- END WRite;
-
- PROCEDURE WRiteString (s : Streams.Stream;
- TheString : ARRAY OF CHAR);
- VAR
- NoOfChars : CARDINAL;
- BEGIN
- NoOfChars := Strings.Length (TheString);
- Put (s, SYSTEM.ADR(NoOfChars), SYSTEM.TSIZE (CARDINAL));
- Put (s, SYSTEM.ADR (TheString), LONGCARD (NoOfChars));
- END WRiteString;
-
- PROCEDURE WRiteCard (s : Streams.Stream;
- TheNumber : CARDINAL);
- BEGIN
- Put (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (CARDINAL));
- END WRiteCard;
-
- PROCEDURE WRiteLongCard (s : Streams.Stream;
- TheNumber : LONGCARD);
- BEGIN
- Put (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (LONGCARD));
- END WRiteLongCard;
-
- PROCEDURE WRiteInt (s : Streams.Stream;
- TheNumber : INTEGER);
- BEGIN
- Put (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (INTEGER));
- END WRiteInt;
-
- PROCEDURE WRiteLongInt (s : Streams.Stream;
- TheNumber : LONGINT);
- BEGIN
- Put (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (LONGINT));
- END WRiteLongInt;
-
- PROCEDURE WRiteReal (s : Streams.Stream;
- TheNumber : REAL);
- BEGIN
- Put (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (REAL));
- END WRiteReal;
-
- PROCEDURE WRiteBlock (s : Streams.Stream;
- Start : SYSTEM.ADDRESS;
- Size : LONGCARD );
- BEGIN
- Put (s, SYSTEM.ADR (Size), SYSTEM.TSIZE (LONGCARD));
- Put (s, Start, Size);
- END WRiteBlock;
-
- (* ----------------------- lesen ------------------------ *)
-
- PROCEDURE REad ( s : Streams.Stream;
- VAR Char : CHAR);
- BEGIN
- Get (s, SYSTEM.ADR (Char), 1);
- END REad;
-
- PROCEDURE REadString ( s : Streams.Stream;
- VAR TheString : ARRAY OF CHAR);
- VAR
- NoOfChars : CARDINAL;
- Dummy : SYSTEM.BYTE;
- BEGIN
- Get (s, SYSTEM.ADR (NoOfChars), SYSTEM.TSIZE (CARDINAL));
-
- IF NoOfChars > (HIGH (TheString) + 1) THEN
- Get (s, SYSTEM.ADR (TheString),
- LONGCARD (HIGH (TheString) + 1));
- DEC (NoOfChars, HIGH (TheString) + 1);
- PB := SYSTEM.ADR (Dummy);
- WHILE NoOfChars > 0 DO
- Get (s, PB, 1);
- DEC (NoOfChars);
- END (* WHILE *);
- ELSE
- Get (s, SYSTEM.ADR (TheString),
- LONGCARD (NoOfChars));
- IF NoOfChars <= HIGH (TheString) THEN
- TheString[NoOfChars] := 00C;
- END (* IF *);
- END (* IF *);
- END REadString;
-
- PROCEDURE REadCard ( s : Streams.Stream;
- VAR TheNumber : CARDINAL);
- BEGIN
- Get (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (CARDINAL));
- END REadCard;
-
- PROCEDURE REadLongCard ( s : Streams.Stream;
- VAR TheNumber : LONGCARD);
- BEGIN
- Get (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (LONGCARD));
- END REadLongCard;
-
- PROCEDURE REadInt ( s : Streams.Stream;
- VAR TheNumber : INTEGER);
- BEGIN
- Get (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (INTEGER));
- END REadInt;
-
- PROCEDURE REadLongInt ( s : Streams.Stream;
- VAR TheNumber : LONGINT);
- BEGIN
- Get (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (LONGINT));
- END REadLongInt;
-
- PROCEDURE REadReal ( s : Streams.Stream;
- VAR TheNumber : REAL);
- BEGIN
- Get (s, SYSTEM.ADR (TheNumber), SYSTEM.TSIZE (REAL));
- END REadReal;
-
- PROCEDURE REadBlock ( s : Streams.Stream;
- Start : SYSTEM.ADDRESS;
- VAR Size : LONGCARD);
- BEGIN
- Get (s, SYSTEM.ADR (Size), SYSTEM.TSIZE (LONGCARD));
- Get (s, Start, Size);
- END REadBlock;
-
- (* ------------ nicht exportierte Prozeduren ------------ *)
-
- PROCEDURE Put (s : Streams.Stream;
- Start : SYSTEM.ADDRESS;
- Size : LONGCARD);
- BEGIN
- PL := Start;
- WHILE Size >= 4 DO
- Streams.Write32Bit (s, PL^);
- INC (PL); INC (PL); INC (PL); INC (PL); DEC (Size, 4);
- END (* WHILE *);
- PW := SYSTEM.ADDRESS (PL);
- WHILE Size >= 2 DO
- Streams.Write16Bit (s, PW^);
- INC (PW); INC (PW); DEC (Size, 2);
- END (* WHILE *);
- PB := SYSTEM.ADDRESS (PW);
- WHILE Size >= 1 DO
- Streams.Write8Bit (s, PB^);
- INC (PB); DEC (Size );
- END (* WHILE *);
- END Put;
-
- PROCEDURE Get (s : Streams.Stream;
- Start : SYSTEM.ADDRESS;
- Size : LONGCARD);
- BEGIN
- PL := Start;
- WHILE Size >= 4 DO
- Streams.Read32Bit (s, PL^);
- INC (PL); INC (PL); INC (PL); INC (PL); DEC (Size, 4);
- END (* WHILE *);
- PW := SYSTEM.ADDRESS (PL);
- WHILE Size >= 2 DO
- Streams.Read16Bit (s, PW^);
- INC (PW); INC (PW); DEC (Size, 2);
- END (* WHILE *);
- PB := SYSTEM.ADDRESS (PW);
- WHILE Size >= 1 DO
- Streams.Read8Bit (s, PB^);
- INC (PB); DEC (Size );
- END (* WHILE *);
- END Get;
-
- BEGIN
- END BinaryIO.
- (* ------------------------------------------------------ *)
- (* Ende von BINARYIO.MOD *)
-