home *** CD-ROM | disk | FTP | other *** search
-
- UNIT bits;
- (* ------------------------------------------------- *)
- (* Diese Bibliothek stellt eine Reihe von Funk- *)
- (* tionen zur Bitmanipulation in Integer- und *)
- (* Wordvariablen zur Verfügung. *)
- (* ------------------------------------------------- *)
- INTERFACE
-
- (* Teste Bit mit Nummer BitNr. *)
- (* True : Bit gesetzt - False : Bit nicht gesetzt *)
- FUNCTION ITstBit (Zahl: word; BitNr: INTEGER): BOOLEAN;
- FUNCTION BTstBit (Zahl: BYTE; BitNr: INTEGER): BOOLEAN;
-
- (* Setze Bit mit Nummer BitNr. *)
- FUNCTION ISetBit (Zahl: word; BitNr: INTEGER): word;
- FUNCTION BSetBit (Zahl: BYTE; BitNr: INTEGER): BYTE;
-
- (* Rotiert Zahl um Bits-Stellen nach links. *)
- FUNCTION IROL (Zahl:word; Bits: INTEGER): word;
- FUNCTION BROL (Zahl:BYTE; Bits: INTEGER): BYTE;
-
- (* Rotiert Zahl um Bits-Stellen nach rechts. *)
- FUNCTION IROR (Zahl: word; Bits: INTEGER): word;
- FUNCTION BROR (Zahl: BYTE; Bits: INTEGER): BYTE;
-
- (* Lösche Bit mit Nummer BitNr. *)
- FUNCTION IClrBit (Zahl: word; BitNr: INTEGER): word;
- FUNCTION BClrBit (Zahl: BYTE; BitNr: INTEGER): BYTE;
-
- (* Wandle Integer in Binaerstring um *)
- FUNCTION IntStr (Zahl: word): STRING;
- FUNCTION BytStr (Zahl: BYTE): STRING;
-
- (* Wandle Binaerstring in Integer um *)
- FUNCTION IntVal (Str1: STRING): word;
- FUNCTION BytVal (Str1: STRING): BYTE;
-
- IMPLEMENTATION
-
- FUNCTION ITstBit (Zahl: word; BitNr: INTEGER): BOOLEAN;
- BEGIN
- BitNr := BitNr AND $000f;
- ITstBit := ((Zahl SHR BitNr) AND 1) = 1
- END;
-
- FUNCTION BTstBit (Zahl: BYTE; BitNr: INTEGER): BOOLEAN;
- BEGIN
- BitNr := BitNr AND $0007;
- BTstBit := ((Zahl SHR BitNr) AND 1) = 1
- END;
-
- FUNCTION ISetBit (Zahl: word; BitNr: INTEGER): word;
- VAR i : word;
- BEGIN
- BitNr := BitNr AND $000f;
- i := 1; ISetBit := Zahl OR (i SHL BitNr)
- END;
-
- FUNCTION BSetBit (Zahl: BYTE; BitNr: INTEGER): BYTE;
- VAR i : BYTE;
- BEGIN
- BitNr := BitNr AND $0007;
- i := 1; BSetBit := Zahl OR (i SHL BitNr)
- END;
-
- FUNCTION IROL (Zahl: word; Bits: INTEGER): word;
- VAR Bit15 : BOOLEAN;
- x : word;
- i : INTEGER;
- BEGIN
- Bits := Bits AND $000f;
- x := Zahl;
- FOR i := 1 TO Bits DO BEGIN
- Bit15 := ITstBit (x, 15);
- x := x SHL 1;
- IF Bit15 THEN x := ISetBit (x ,0)
- END;
- IROL := x
- END;
-
- FUNCTION BROL (Zahl: BYTE; Bits: INTEGER): BYTE;
- VAR Bit7 : BOOLEAN;
- x : BYTE;
- i : INTEGER;
- BEGIN
- Bits := Bits AND $0007;
- x := Zahl;
- FOR i := 1 TO Bits DO BEGIN
- Bit7 := BTstBit (x, 7);
- x := x SHL 1;
- IF Bit7 THEN x := BSetBit (x ,0)
- END;
- BROL := x
- END;
-
- FUNCTION IROR (Zahl: word; Bits: INTEGER): word;
- VAR Bit0 : BOOLEAN;
- x : word;
- i : INTEGER;
- BEGIN
- Bits := Bits AND $000f;
- x := Zahl;
- FOR i := 1 TO Bits DO BEGIN
- Bit0 := ITstBit (x, 0);
- x := x SHR 1;
- IF (Bit0) THEN x := ISetBit (x, 15)
- END;
- IROR := x
- END;
-
- FUNCTION BROR (Zahl: BYTE; Bits: INTEGER): BYTE;
- VAR Bit0 : BOOLEAN;
- x : BYTE;
- i : INTEGER;
- BEGIN
- Bits := Bits AND $0007;
- x := Zahl;
- FOR i := 1 TO Bits DO BEGIN
- Bit0 := BTstBit (x, 0);
- x := x SHR 1;
- IF (Bit0) THEN x := BSetBit (x, 7)
- END;
- BROR := x
- END;
-
- FUNCTION IClrBit (Zahl: word; BitNr: INTEGER): word;
- VAR x : word;
- BEGIN
- BitNr := BitNr AND $000f;
- x := $fffe;
- IClrBit := Zahl AND IROL (x, BitNr)
- END;
-
- FUNCTION BClrBit (Zahl: BYTE; BitNr: INTEGER): BYTE;
- VAR x : BYTE;
- BEGIN
- BitNr := BitNr AND $0007;
- x := $fe;
- BClrBit := Zahl AND BROL (x, BitNr)
- END;
-
- FUNCTION IntStr (Zahl : word) : STRING;
- VAR i : INTEGER;
- w : STRING[16];
- BEGIN
- w := '0000000000000000';
- FOR i := 15 DOWNTO 0 DO
- IF ITstBit (Zahl, i) THEN
- Insert ('1', w, 16 - i);
- IntStr := w
- END;
-
- FUNCTION BytStr (Zahl : BYTE) : STRING;
- VAR i : INTEGER;
- w : STRING[8];
- BEGIN
- w := '00000000';
- FOR i := 7 DOWNTO 0 DO
- IF BTstBit (Zahl, i) THEN
- Insert ('1', w, 8 - i);
- BytStr := w
- END;
-
- FUNCTION IntVal (Str1 : STRING) : word;
- VAR i, j : INTEGER;
- k : word;
- BEGIN
- k := 0;
- j := Length (Str1);
- IF (j > 16) THEN j := 16;
- FOR i := j DOWNTO 1 DO
- IF (Str1[i] = '1') THEN
- k := ISetBit (k, j - i);
- IntVal := k
- END;
-
- FUNCTION BytVal (Str1 : STRING) : BYTE;
- VAR i, j : INTEGER;
- k : BYTE;
- BEGIN
- k := 0;
- j := Length (Str1);
- IF (j > 8) THEN j := 8;
- FOR i := j DOWNTO 1 DO
- IF (Str1[i] = '1') THEN
- k := BSetBit (k, j - i);
- BytVal := k
- END;
-
- END.