

(*********************************************************************
 
    :Program.  	 IntegerBoole.mod
    :Author.   	 Gary Struhlik  
    :Address.    -
    :Phone.      -
    :shortcut. 	 [gs]
    :Version.  	 1.0   
    :Date.     	 10.10.1988
    :Copyright.  PD
    :Language. 	 Modula-II
    :Translator. M2Amiga
    :Imports.	 -
    :UpDate.	 -
    :Contents.	 -
    :Remark.	 Für den Amiga Modula-2 Klub / Stuttgart
    :Remark.     Am 01.01.1989 mit M2Amiga 3.2d neu kompiliert

**********************************************************************)


IMPLEMENTATION  MODULE IntegerBoole;

FROM SYSTEM IMPORT BITSET,CAST;

PROCEDURE AndInt( a,b : INTEGER ) : INTEGER;  (* logisches UND mit INTEGER *)
VAR
	Wort1, Wort2 : BITSET;
BEGIN
	Wort1:=CAST( BITSET,a );
        Wort2:=CAST( BITSET,b );
	Wort1:=Wort1*Wort2;
        RETURN CAST( INTEGER, Wort1 )
END AndInt;

PROCEDURE OrInt( a,b : INTEGER ) : INTEGER; (* logisches OR mit INTEGER *)
VAR
	Wort1, Wort2 : BITSET;
BEGIN
	Wort1:=CAST( BITSET,a );
        Wort2:=CAST( BITSET,b );
        Wort1:=Wort1+Wort2;
        RETURN CAST( INTEGER, Wort1 )
END OrInt;

PROCEDURE NotInt( a : INTEGER ) : INTEGER; (* logisches NOT mit INTEGER *)
VAR                                        (* Einerkomplement           *)
	Wort, Gesamt : BITSET;
BEGIN
	Gesamt:=BITSET{ 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
        Wort:=CAST( BITSET,a );
        Wort:=Gesamt-Wort;
        RETURN CAST( INTEGER,Wort )
END NotInt;

PROCEDURE IntBitSet( a : INTEGER; Bitnum : INTEGER ) : INTEGER;
VAR
	Wort : BITSET;
BEGIN                             (* Bitnum muß zwischen 0..15 liegen ! *)
	Wort:=CAST( BITSET,a );
        Wort:=Wort+BITSET{ Bitnum };
        RETURN CAST( INTEGER, Wort )
END IntBitSet;

PROCEDURE IntBitClear( a : INTEGER; Bitnum : INTEGER ) : INTEGER;
VAR
	Wort : BITSET;
BEGIN
	Wort:=CAST( BITSET, a);
        Wort:=Wort-BITSET{ Bitnum };
        RETURN CAST( INTEGER, Wort)
END IntBitClear;

PROCEDURE IntTestBit( a : INTEGER; Bitnum : INTEGER ) : BOOLEAN;
VAR
	Wort : BITSET;
BEGIN
	Wort:=CAST( BITSET, a);
        IF Bitnum IN Wort THEN RETURN TRUE 
        ELSE RETURN FALSE END
END IntTestBit;

END IntegerBoole.
