[9] | 1 | (*
|
---|
| 2 | (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
---|
| 3 | See the copyright notice in the ACK home directory, in the file "Copyright".
|
---|
| 4 | *)
|
---|
| 5 |
|
---|
| 6 | (*$R-*)
|
---|
| 7 | IMPLEMENTATION MODULE RealInOut;
|
---|
| 8 | (*
|
---|
| 9 | Module: InOut for REAL numbers
|
---|
| 10 | Author: Ceriel J.H. Jacobs
|
---|
| 11 | Version: $Header: /cvsup/minix/src/lib/ack/libm2/RealInOut.mod,v 1.1 2005/10/10 15:27:46 beng Exp $
|
---|
| 12 | *)
|
---|
| 13 |
|
---|
| 14 | FROM InOut IMPORT ReadString, WriteString, WriteOct;
|
---|
| 15 | FROM Traps IMPORT Message;
|
---|
| 16 | FROM SYSTEM IMPORT WORD;
|
---|
| 17 | FROM RealConversions IMPORT
|
---|
| 18 | LongRealToString, StringToLongReal;
|
---|
| 19 |
|
---|
| 20 | CONST MAXNDIG = 32;
|
---|
| 21 | MAXWIDTH = MAXNDIG+7;
|
---|
| 22 | TYPE RBUF = ARRAY [0..MAXWIDTH+1] OF CHAR;
|
---|
| 23 |
|
---|
| 24 | PROCEDURE WriteReal(arg: REAL; ndigits: CARDINAL);
|
---|
| 25 | BEGIN
|
---|
| 26 | WriteLongReal(LONG(arg), ndigits)
|
---|
| 27 | END WriteReal;
|
---|
| 28 |
|
---|
| 29 | PROCEDURE WriteLongReal(arg: LONGREAL; ndigits: CARDINAL);
|
---|
| 30 | VAR buf : RBUF;
|
---|
| 31 | ok : BOOLEAN;
|
---|
| 32 |
|
---|
| 33 | BEGIN
|
---|
| 34 | IF ndigits > MAXWIDTH THEN ndigits := MAXWIDTH; END;
|
---|
| 35 | IF ndigits < 10 THEN ndigits := 10; END;
|
---|
| 36 | LongRealToString(arg, ndigits, -INTEGER(ndigits - 7), buf, ok);
|
---|
| 37 | WriteString(buf);
|
---|
| 38 | END WriteLongReal;
|
---|
| 39 |
|
---|
| 40 | PROCEDURE WriteFixPt(arg: REAL; n, k: CARDINAL);
|
---|
| 41 | BEGIN
|
---|
| 42 | WriteLongFixPt(LONG(arg), n, k)
|
---|
| 43 | END WriteFixPt;
|
---|
| 44 |
|
---|
| 45 | PROCEDURE WriteLongFixPt(arg: LONGREAL; n, k: CARDINAL);
|
---|
| 46 | VAR buf: RBUF;
|
---|
| 47 | ok : BOOLEAN;
|
---|
| 48 |
|
---|
| 49 | BEGIN
|
---|
| 50 | IF n > MAXWIDTH THEN n := MAXWIDTH END;
|
---|
| 51 | LongRealToString(arg, n, k, buf, ok);
|
---|
| 52 | WriteString(buf);
|
---|
| 53 | END WriteLongFixPt;
|
---|
| 54 |
|
---|
| 55 | PROCEDURE ReadReal(VAR x: REAL);
|
---|
| 56 | VAR x1: LONGREAL;
|
---|
| 57 | BEGIN
|
---|
| 58 | ReadLongReal(x1);
|
---|
| 59 | x := x1
|
---|
| 60 | END ReadReal;
|
---|
| 61 |
|
---|
| 62 | PROCEDURE ReadLongReal(VAR x: LONGREAL);
|
---|
| 63 | VAR Buf: ARRAY[0..512] OF CHAR;
|
---|
| 64 | ok: BOOLEAN;
|
---|
| 65 |
|
---|
| 66 | BEGIN
|
---|
| 67 | ReadString(Buf);
|
---|
| 68 | StringToLongReal(Buf, x, ok);
|
---|
| 69 | IF NOT ok THEN
|
---|
| 70 | Message("real expected");
|
---|
| 71 | HALT;
|
---|
| 72 | END;
|
---|
| 73 | Done := TRUE;
|
---|
| 74 | END ReadLongReal;
|
---|
| 75 |
|
---|
| 76 | PROCEDURE wroct(x: ARRAY OF WORD);
|
---|
| 77 | VAR i: CARDINAL;
|
---|
| 78 | BEGIN
|
---|
| 79 | FOR i := 0 TO HIGH(x) DO
|
---|
| 80 | WriteOct(CARDINAL(x[i]), 0);
|
---|
| 81 | WriteString(" ");
|
---|
| 82 | END;
|
---|
| 83 | END wroct;
|
---|
| 84 |
|
---|
| 85 | PROCEDURE WriteRealOct(x: REAL);
|
---|
| 86 | BEGIN
|
---|
| 87 | wroct(x);
|
---|
| 88 | END WriteRealOct;
|
---|
| 89 |
|
---|
| 90 | PROCEDURE WriteLongRealOct(x: LONGREAL);
|
---|
| 91 | BEGIN
|
---|
| 92 | wroct(x);
|
---|
| 93 | END WriteLongRealOct;
|
---|
| 94 |
|
---|
| 95 | BEGIN
|
---|
| 96 | Done := FALSE;
|
---|
| 97 | END RealInOut.
|
---|