MODULE essai4; IMPORT InOut; TYPE BitFunction = (set, clr); BitResult = (Set, Clear, Err); VAR i, j, k, n : CARDINAL; PROCEDURE BitTest (pos, val : CARDINAL) : BitResult; VAR mask, res : CARDINAL; BEGIN IF pos >= 0 THEN mask := SHIFT(1,pos); res := val AND mask; IF res = 0 THEN RETURN Clear ELSE RETURN Set END END; RETURN Err END BitTest; PROCEDURE Bit (f : BitFunction; pos, val : CARDINAL) : CARDINAL; VAR mask, res : CARDINAL; BEGIN mask := SHIFT(1,pos); CASE f OF set : res := val OR mask | clr : res := val AND (NOT mask) END; RETURN res END Bit; BEGIN i := 64; j := 127; k := 48; FOR n := 0 TO 15 DO InOut.WriteString ("Bit "); InOut.WriteCard (n, 2); InOut.WriteString (" in 127 is "); (* IF BitTest (n, j) = Set THEN InOut.WriteString ("Set.") ELSE InOut.WriteString ("Clear") END; *) InOut.WriteLn END; (* IF BitTest (3, j) = Set THEN InOut.WriteString ("Bit 3 in 127 is set") END; *) InOut.WriteLn; (* IF BitTest (5, i) = Clear THEN InOut.WriteString ("Bit 5 in 64 is clear") END; *) InOut.WriteLn; k := VAL (CARDINAL, Bit (set, 1, k)); InOut.WriteCard (k, 6); InOut.WriteLn; END essai4.