Open topic with navigation
WTSupported in traditional Synergy on Windows
USupported on UNIX
VSupported on OpenVMS
xcall PAK(record, size, field[, …])
The record that contains the fields to be compressed. (a)
A variable that contains the size of the compressed record after the PAK operation. (n)
One or more decimal fields in the specified record. These fields must exist in record and must be listed in ascending order as they appear in the record. (d)
The PAK subroutine compresses fields of numeric data to save disk space.
Each packed field produced by the PAK subroutine has the following length:
(number of characters/2) + 1
Use the UNPAK subroutine (see UNPAK) to restore the fields’ original values.
The PAK subroutine has been superseded by the p data type.
If we have the following data division:
record rec1 fld1 ,d5 fld2 ,a4 fld3 ,d18 fld4 ,d9 fld5 ,a33 fld6 ,d3
record ,x fld1x ,a3 fld2x ,a4 fld3x ,a10 fld4x ,a5 fld5x ,a33 fld6x ,a2 record
the following statement compresses rec1 down to the fields described in the overlay record:
xcall pak(rec1, size, fld1, fld3, fld4, fld6)
This shortened record can then be output to a file to save space. When you’re ready to read the record back, the following statement restores the original values to the fields.
xcall unpak(rec1, fld1, fld3, fld4, fld6)
Assuming the above layout is in the file layout.def, the following subroutine save the data from one file to a packed backup file.
subroutine bck_restore a_flag ,d a_source ,a a_bckup ,a .include "layout.def" .define BCKUP ,1 .define RESTORE ,2 .define SRCCHN ,10 .define BCKCHN ,11
proc if (a_flag.eq.BCKUP) then begin open(BCKCHN, o, a_bckup) open(SRCCHN, i, a_source) repeat begin reads(SRCCHN, rec1) [eq = done] xcall pak(rec1, size, fld1, fld3, fld4, fld6) puts(BCKCHN, rec1) end end else begin open(BCKCHN, i, a_bckup) open(SRCCHN, o, a_source) repeat begin gets(BCKCHN, rec1) [eq = done] xcall unpak(rec1, fld1, fld3, fld4, fld6) writes(SRCCHN, rec1) end end done, close SRCCHN close BCKCHN xreturn endsubroutine