PACKET bits DEFINES
AND ,
OR ,
XOR ,
bit ,
lowest reset ,
lowest set ,
reset bit ,
rotate ,
set bit :
LET bits per int = 16 ;
ROW bits per int INT VAR bit mask := ROW bits per int INT:
(1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,-32767-1) ;
PROC rotate (INT VAR bits, INT CONST number of bits) :
EXTERNAL 83
ENDPROC rotate ;
INT OP AND (INT CONST left, right) :
EXTERNAL 124
ENDOP AND ;
INT OP OR (INT CONST left, right) :
EXTERNAL 125
ENDOP OR ;
INT OP XOR (INT CONST left, right) :
EXTERNAL 121
ENDOP XOR ;
BOOL PROC bit (INT CONST bits, bit no) :
(bits AND bit mask (bit no+1)) <> 0
ENDPROC bit ;
PROC set bit (INT VAR bits, INT CONST bit no) :
bits := bits OR bit mask (bit no+1)
ENDPROC set bit ;
PROC reset bit (INT VAR bits,INT CONST bit no) :
bits := bits XOR (bits AND bit mask (bit no+1))
ENDPROC reset bit ;
INT PROC lowest set (INT CONST bits) :
INT VAR mask index ;
FOR mask index FROM 1 UPTO 16 REP
IF (bits AND bit mask (mask index)) <> 0
THEN LEAVE lowest set WITH mask index - 1
FI
PER ;
-1
ENDPROC lowest set ;
INT PROC lowest reset (INT CONST bits) :
INT VAR mask index ;
FOR mask index FROM 1 UPTO bits per int REP
IF (bits AND bit mask (mask index)) = 0
THEN LEAVE lowest reset WITH mask index - 1
FI
PER ;
-1
ENDPROC lowest reset ;
ENDPACKET bits ;