130 lines
2.9 KiB
Plaintext
130 lines
2.9 KiB
Plaintext
(* Abbreviation: Decimals *)
|
||
(* Version 1.10, Dec 1984 *)
|
||
DEFINITION MODULE Decimals;
|
||
(*
|
||
Decimal Arithmetic
|
||
*)
|
||
|
||
EXPORT QUALIFIED
|
||
DECIMAL, DecDigits, DecPoint, DecSep, DecCur,
|
||
DecStatus, DecState, DecValid, StrToDec, DecToStr,
|
||
NegDec, CompareDec, AddDec, SubDec, MulDec,DivDec,
|
||
Remainder,DecRepr;
|
||
|
||
|
||
CONST
|
||
DecDigits = 18;
|
||
DecRepr = 10;
|
||
DecCur = '$';
|
||
DecPoint = '.';
|
||
DecSep = ',';
|
||
|
||
|
||
TYPE
|
||
DECIMAL = ARRAY [0..DecRepr-1] OF CHAR;
|
||
(* WARNING : Representation is
|
||
implementation dependent!
|
||
*)
|
||
|
||
|
||
DecState = (NegOvfl,
|
||
Minus,
|
||
Zero,
|
||
Plus,
|
||
PosOvfl,
|
||
Invalid
|
||
);
|
||
|
||
|
||
VAR
|
||
DecValid: BOOLEAN;
|
||
(* set after every operation *)
|
||
|
||
Remainder: CHAR;
|
||
(* remainder digit - set after DivDec *)
|
||
|
||
|
||
PROCEDURE StrToDec (String: ARRAY OF CHAR;
|
||
Picture: ARRAY OF CHAR;
|
||
VAR Dec: DECIMAL);
|
||
(*
|
||
Converts a DECIMAL number from an external format to an
|
||
internal format; after checking and matching between the
|
||
picture and the input string. The result is placed in
|
||
variable Dec.
|
||
*)
|
||
|
||
|
||
PROCEDURE DecToStr (Dec: DECIMAL;
|
||
Picture: ARRAY OF CHAR;
|
||
VAR RsltStr: ARRAY OF CHAR);
|
||
(*
|
||
Converts a DECIMAL number from an internal format to an
|
||
external format; after checking and matching between the
|
||
picture and the DECIMAL number. The result is placed in
|
||
variable RsltStr.
|
||
*)
|
||
|
||
|
||
PROCEDURE DecStatus (Dec: DECIMAL): DecState;
|
||
(*
|
||
Detects the state of the number represented as DECIMAL
|
||
and returns one of the following states :
|
||
|
||
- Negative overflow --> NegOvfl
|
||
- Negative --> Minus
|
||
- Null --> Zero
|
||
- Positive --> Plus
|
||
- Positive overflow --> PosOvfl
|
||
- Invalid representation --> Invalid
|
||
*)
|
||
|
||
|
||
PROCEDURE CompareDec (Dec0,Dec1: DECIMAL): INTEGER;
|
||
(*
|
||
Compares two DECIMAL numbers and returns an integer value
|
||
indicating the comparison result:
|
||
|
||
-1 if Dec0 is less than Dec1
|
||
0 if Dec0 equals Dec1
|
||
1 if Dec0 is greater than Dec1
|
||
*)
|
||
|
||
|
||
PROCEDURE AddDec (Dec0,Dec1: DECIMAL; VAR Sum: DECIMAL);
|
||
(*
|
||
Adds two DECIMAL numbers (Dec0 and Dec1) together and
|
||
places the result in the variable Sum.
|
||
*)
|
||
|
||
|
||
PROCEDURE SubDec (Dec0,Dec1: DECIMAL; VAR Sub: DECIMAL);
|
||
(*
|
||
Subtracts Dec1 from Dec0 and places the result in Sub.
|
||
*)
|
||
|
||
|
||
PROCEDURE MulDec (Dec0,Dec1: DECIMAL; VAR Prod: DECIMAL);
|
||
(*
|
||
Multiplies two DECIMAL numbers and places the result in
|
||
the variable Prod.
|
||
*)
|
||
|
||
|
||
PROCEDURE DivDec (Dec0,Dec1: DECIMAL; VAR Quot: DECIMAL);
|
||
(*
|
||
Dec0 is divided by Dec1. The quotient is placed in the
|
||
variable Quot and the remainder is placed in the global
|
||
variable Remainder.
|
||
*)
|
||
|
||
|
||
PROCEDURE NegDec (Dec: DECIMAL; VAR NDec: DECIMAL);
|
||
(*
|
||
The negative DECIMAL value of Dec is placed in the
|
||
variable NDec.
|
||
*)
|
||
|
||
|
||
END Decimals.
|
||
|