system/base/1.7.5/src/bits

Raw file
Back to index

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 ;