```(* ----------------------------------------------------------------------------
* \$Id: SACEXT2.mi,v 1.3 1992/10/15 16:28:55 kredel Exp \$
* ----------------------------------------------------------------------------
* This file is part of MAS.
* ----------------------------------------------------------------------------
* Copyright (c) 1989 - 1992 Universitaet Passau
* ----------------------------------------------------------------------------
* \$Log: SACEXT2.mi,v \$
* Revision 1.3  1992/10/15  16:28:55  kredel
* Changed rcsid variable
*
* Revision 1.2  1992/02/12  17:34:47  pesch
* Moved CONST definition to the right place
*
* Revision 1.1  1992/01/22  15:15:54  kredel
* Initial revision
*
* ----------------------------------------------------------------------------
*)

IMPLEMENTATION MODULE SACEXT2;

(* SAC Extensions 2 Implementation Module. *)

(* Import lists and declarations. *)

FROM MASSTOR IMPORT LIST, SIL, BETA,

FROM SACLIST IMPORT CONC, FIRST2, LAST;

FROM SACI IMPORT IDP2, IMP2, IORD2;

CONST rcsidi = "\$Id: SACEXT2.mi,v 1.3 1992/10/15 16:28:55 kredel Exp \$";

PROCEDURE RNBCR(A,B: LIST;  VAR M,N,KL: LIST);
(*Rational number binary common representation.  A and B are binary
rational numbers.  If both A eq 0 and B eq 0, then M eq N eq K eq 0.
If A eq 0, B ne 0, then M eq 0 and N and K are the unique integers
such that B eq N cdot 2 sup k with N odd.  If B eq 0, A ne 0, then
N eq 0 and M and K are the unique integers such that A eq
M cdot 2 sup K with M odd.  If A ne 0 and B ne 0, then M,N, and K
are the unique integers such that A eq M cdot 2 sup K and
B eq N cdot 2 sup K with at least one of M and N odd.*)
VAR  A2, B2, EL1, EL2, J1Y: LIST;
BEGIN
(*1*) (*express both A and B as odd integer times power of 2.*)
IF A = 0 THEN M:=0; ELSE FIRST2(A, M,A2);
IF A2 = 1 THEN EL1:=IORD2(M); M:=IDP2(M,EL1); ELSE
J1Y:=IORD2(A2); EL1:=-J1Y; END;
END;
IF B = 0 THEN N:=0; EL2:=0; ELSE FIRST2(B, N,B2);
IF B2 = 1 THEN EL2:=IORD2(N); N:=IDP2(N,EL2); ELSE
J1Y:=IORD2(B2); EL2:=-J1Y; END;
END;
(*2*) (*obtain common power of 2.*)
IF A = 0 THEN KL:=EL2; RETURN; ELSE
IF B = 0 THEN KL:=EL1; RETURN; END;
END;
IF EL1 <= EL2 THEN J1Y:=EL2-EL1; N:=IMP2(N,J1Y); KL:=EL1;
ELSE J1Y:=EL1-EL2; M:=IMP2(M,J1Y); KL:=EL2; END;
RETURN;
(*5*) END RNBCR;

END SACEXT2.
(* -EOF- *)
```