home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 03 / tricks / bit.mod < prev    next >
Encoding:
Modula Implementation  |  1989-12-13  |  1.8 KB  |  75 lines

  1. (* ------------------------------------------------------ *)
  2. (*                       BIT.MOD                          *)
  3. (*         (c) 1990 Roland Minges & TOOLBOX               *)
  4. (* ------------------------------------------------------ *)
  5. IMPLEMENTATION MODULE Bit;
  6.  
  7. IMPORT SYSTEM;
  8.  
  9. PROCEDURE and (w1, w2: SYSTEM.WORD): SYSTEM.WORD;
  10. BEGIN
  11.   RETURN SYSTEM.WORD (BITSET (w1) * BITSET (w2));
  12. END and;
  13.  
  14. PROCEDURE or (w1, w2: SYSTEM.WORD): SYSTEM.WORD;
  15. BEGIN
  16.   RETURN SYSTEM.WORD (BITSET (w1) + BITSET (w2));
  17. END or;
  18.  
  19. PROCEDURE xor (w1, w2: SYSTEM.WORD): SYSTEM.WORD;
  20. BEGIN
  21.   RETURN SYSTEM.WORD (BITSET (w1) / BITSET (w2));
  22. END xor;
  23.  
  24. PROCEDURE not (w: SYSTEM.WORD): SYSTEM.WORD;
  25. CONST AlleBits = { 0,  1,  2,  3,  4,  5,  6,  7,
  26.                    8,  9, 10, 11, 12, 13, 14, 15};
  27. BEGIN
  28.   RETURN SYSTEM.WORD (AlleBits - BITSET (w));
  29. END not;
  30.  
  31. PROCEDURE lsh (VAR w: SYSTEM.WORD; Bits: BITNO);
  32. VAR b: POINTER TO BITSET;
  33.     i: CARDINAL;
  34. BEGIN
  35.   b := SYSTEM.ADR (w);
  36.   FOR i := 1 TO Bits DO
  37.     EXCL (b^, 15);
  38.     w := SYSTEM.WORD (CARDINAL (w) * 2);
  39.   END (* FOR i *);
  40. END lsh;
  41.  
  42. PROCEDURE rsh (VAR w: SYSTEM.WORD; Bits: BITNO);
  43. VAR i: CARDINAL;
  44. BEGIN
  45.   FOR i := 1 TO Bits DO
  46.     w := SYSTEM.WORD (CARDINAL (w) DIV 2);
  47.   END (* FOR i *);
  48. END rsh;
  49.  
  50. PROCEDURE set (VAR w: SYSTEM.WORD; Bit: BITNO);
  51. VAR b: BITSET;
  52. BEGIN
  53.   b := BITSET (w);
  54.   INCL (b, Bit);
  55.   w := SYSTEM.WORD (b);
  56. END set;
  57.  
  58. PROCEDURE reset (VAR w: SYSTEM.WORD; Bit: BITNO);
  59. VAR b: BITSET;
  60. BEGIN
  61.   b := BITSET (w);
  62.   EXCL (b, Bit);
  63.   w := SYSTEM.WORD (b);
  64. END reset;
  65.  
  66. PROCEDURE isset (w: SYSTEM.WORD; Bit: BITNO): BOOLEAN;
  67. BEGIN
  68.   RETURN Bit IN BITSET (w);
  69. END isset;
  70.  
  71. BEGIN
  72. END Bit.
  73. (* ------------------------------------------------------ *)
  74. (*                    Ende von BIT.MOD                    *)
  75.