17.8. ICPACKB Funkce: Podprogram ICPACKB provádí opačnou operaci než podprogram ICUNPKB, převádí tedy osm bytů do jednoho bytu. Způsob volání: CALL 'ICPACKB' USING položka-8 položka-1 Pravidla: Položka-8 musí mít délku 8 bytů, položka-1 musí mít délku 1 byte. Podprogram ICPACKB převede položku-8 do položky-1 tím způsobem, že každý byte položky-8 určí obsah jednoho bitu položky-1 (v témže pořadí): byte s hodnotou '0' v položce-8 způsobí nastavení odpovídajícího bitu položky-1 na hodnotu 0, byte s jakoukoliv jinou hodnotou než '0' v položce-8 způsobí nastavení odpovídajícího bitu položky-1 na hodnotu 1. Příklad: 77 A PIC X. 01 B VALUE '01001110'. 02 C PIC X OCCURS 8. : CALL 'ICPACKB' USING B A. Podprogram ICPACKB dosadí do položky A hexadecimální obsah 4E neboli znak N. Příklad: Mají-li v jednobytové položce ALFA 1. a 5. bit zleva (80 a 08) hodnotu 0 a současně 3. a 6. bit zleva (20 a 04) hodnotu 1, máme provést proceduru AKCE a pak v položce ALFA změnit hodnotu 5., 6. a 8. bitu zleva (08, 04 a 01) na opačnou: 01 POMOCNA. 02 C PIC 9 OCCURS 8. : CALL 'ICUNPKB' USING ALFA POMOCNA. IF C(1) = 0 AND C(5) = 0 AND C(3) = 1 AND C(6) = 1 PERFORM AKCE MOVE 1 TO C(5) MOVE 0 TO C(6) COMPUTE C(8) = 1 - C(8) CALL 'ICPACKB' USING POMOCNA ALFA. Tuto úlohu lze ovšem vyřešit i bez položky POMOCNA a bez použití podprogramů ICUNPKB a ICPACKB výrazně rychleji pomocí příkazu UFO takto: UFO 'if (*(' ALFA ')&0XAC==0X24) {' #0A# PERFORM AKCE. UFO '*(' ALFA ')^=0X0D;}' #0A#. Poznámka: Podprogramy ICUNPKB a ICPACKB nekontrolují, zda zadané položky mají skutečně délky 1 a 8 bytů, nýbrž zpracovávají 1 resp. 8 bytů počínaje adresami, které dostanou k dispozici. Jako argumenty by místo jedné nebo obou položek mohla být uvedena i externí jména v závorkách.