home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / pastrans.zip / SAMPLES / VUNPACK.P < prev    next >
Text File  |  1989-11-25  |  1KB  |  28 lines

  1. PROCEDURE vunpack(VAR intarray : I_ARRAY;
  2.     start_index : INTEGER;
  3.     VAR boolarray : B_ARRAY;
  4.     lb, ub : INTEGER);
  5. VAR i, j, end_index, unpack_index : INTEGER;
  6. BEGIN
  7.  { intarray IS THE ARRAY TO UNPACK FROM INTEGER BITS }
  8.  { TO CHAR FORMAT;  boolarray IS THE UNPACKING DESTINATION. }
  9.  { ACTUAL UPPER ARRAY BOUNDS ARE IGNORED C-STYLE, AND IT IS }
  10.  { ASSUMED THAT BOUNDS CHECKING HAS BEEN TURNED OFF TO PREVENT }
  11.  { SPURIOUS 'ERROR' MESSAGES. start_index IS THE BEGINNING }
  12.  { PACKED ARRAY ADDRESS; lb IS THE LOWER BOUND INDEX OF THE }
  13.  { UNPACKED DESTINATION ARRAY, AND ub IS THE UPPER BOUND. A }
  14.  { 16-bit WORD ARCHITECTURE IS ASSUMED FOR THIS VERSION OF }
  15.  { THE ALGORITHM: }
  16.  end_index := (ub - lb + 1) * 16 + start_index;
  17.  { ZERO OUT THE ARRAY PRIOR TO UNPACKING INTO IT: }
  18.  FOR i := lb TO ub DO boolarray[i] := FALSE;
  19.  FOR i := start_index TO end_index DO
  20.   BEGIN
  21.    unpack_index := i DIV 16 + 1; j := i MOD 16;
  22.    { 'OR' FOR INTEGERS IS 'LOGICAL OR'; SHL = 'SHIFT LEFT' }
  23.    IF (intarray[unpack_index] AND (1 SHL (j-1))) <> 0 THEN
  24.     boolarray[i] := TRUE
  25.    ELSE boolarray[i] := FALSE
  26.   END
  27. END;
  28.