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

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