DEFINITION MODULE SUPINT; CONST Beta = 32; (* Nombre de bits d'un mot machine *) Exposant = (Beta - 2) DIV 2; (* Puissance de 2 maximale permettant *) (* la multiplication d'entiers sans *) (* qu'il y ait de debordement. *) Base = 32768; (* Base dans laquelle les *) (* SuperIntegers sont representes *) (* Note: Base = 2 ** Exposant *) LowPower = 2; (* La longueur minimale d'un vecteur *) (* d'entiers est 2 ** LowPower *) HighPower = Exposant; (* La longueur maximale d'un vecteur *) (* d'entiers est 2 ** HighPower *) MaxIndex = 4095; (* Indice maximum d'un vecteur *) (* d'entiers. Ici = 2 ** 12 - 1. *) TYPE Vector = POINTER TO ARRAY [0..MaxIndex] OF LONGINT; InfoSuperInteger = RECORD Negative : BOOLEAN; (* Signe du SuperInteger. *) (* TRUE si < 0, FALSE si >= 0. *) SigPos, (* Indice du digit le plus *) (* significatif du SuperInteger. *) (* 0 <= SigPos <= 2 ** Power - 1 *) (* Note: la position la moins *) (* significative est 0. *) Power : CARDINAL; (* Longueur de Digit^ = 2 ** Power. *) Digit : Vector; (* Pointeur sur le bloc de memoire *) (* contenant les chiffres. *) (* La longueur reelle de ce bloc est *) (* (2 ** Power) mots memoire. *) END; SuperInteger = POINTER TO InfoSuperInteger; VAR TwoExp : ARRAY [0..HighPower] OF CARDINAL; (* Puissances de 2. *) LongBase : LONGINT; PROCEDURE Create ( VAR A : SuperInteger; k : CARDINAL ); PROCEDURE Delete ( VAR A : SuperInteger ); PROCEDURE ReleaseStack; PROCEDURE IncreaseLen ( A : SuperInteger ); PROCEDURE CopyBlock ( VAR AA, AB : ARRAY OF LONGINT; Pos : CARDINAL; k : INTEGER ); PROCEDURE NumDigits ( A : SuperInteger ) : CARDINAL; PROCEDURE NumBits ( A : SuperInteger ) : CARDINAL; PROCEDURE Affect ( A, B : SuperInteger ); PROCEDURE Exchange ( VAR A, B : SuperInteger ); PROCEDURE StringToSup ( S : ARRAY OF CHAR; A : SuperInteger; B : CARDINAL ); PROCEDURE ReadSup ( A : SuperInteger; B : CARDINAL ); PROCEDURE WriteSup ( A : SuperInteger; B : CARDINAL; D : CARDINAL ); PROCEDURE WriteSupSci ( A : SuperInteger; B : CARDINAL; n : CARDINAL ); END SUPINT.