(* Version 1.10, Nov 1984 *) DEFINITION MODULE RealInOut; (* Terminal input/output of REAL values The implementation of this module uses the procedures 'ReadString' and 'WriteString' of module 'InOut' for reading and writing of REAl values. Therefore, redirection of i/o through 'InOut' applies, too. From the book 'Programming in Modula-2' by Prof. N. Wirth. *) EXPORT QUALIFIED ReadReal, WriteReal, WriteRealOct, Done; VAR Done: BOOLEAN; PROCEDURE ReadReal (VAR x: REAL); (* - Read a REAL from the terminal. out: x the number read. The range of representable valid real numbers is: 1.0E-307 <= ABS(r) < 1.0E308 The syntax accepted for input is: realnumber = fixedpointnumber [exponent]. fixedpointnumber = [sign] {digit} [ '.' {digit} ]. exponent = ('e' | 'E') [sign] digit {digit}. sign = '+' | '-'. digit = '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'| '8'|'9'. The following numbers are legal representations of one hundred: 100, 10E1, 100E0, 1000E-1, E2, +E2, 1E2, +1E2, +1E+2, 1E+2 . At most 15 digits are significant, leading zeros not counting. Input terminates a control character or space. DEL or BS is used for backspacing The variable 'Done' indicates whether a valid number was read. *) PROCEDURE WriteReal (x: REAL; n: CARDINAL); (* - Write a REAL to the terminal, right-justified. in: x number to write, n minimum field width. If fewer than n characters are needed to represent x, leading blanks are output. At least 10 characters are needed to write any REAL number. *) PROCEDURE WriteRealOct (x: REAL); (* - Write a REAL to terminal, as four words in octal form in: x number to write, *) END RealInOut.