17.18. ICMOVEX Funkce: Podprogram ICMOVEX vytvoří hexadecimální obraz zadaného vysílajícího pole. Používá se výhradně při ladění. Způsob volání: CALL 'ICMOVEX' USING vysílající příjmová [počet-bytů] Pravidla: Prvním argumentem je vysílající pole. Může to být argument libovolného typu i délky, jenž vyjadřuje adresu, tzn. položka, speciální index, jméno souboru, jméno třídicího souboru, externí jméno v kulatých závorkách (případně i s *), jméno komunikační oblasti, /položka a teoreticky i literál (jenž ovšem nemá rozumný smysl). Druhým argumentem je příjmové pole; měla by to být položka (nejlépe alfanumerická nebo skupinová) nebo externí jméno. Délka tohoto argumentu by měla být rovna dvojnásobku počtu zpracovávaných bytů (anebo větší). Je-li uveden třetí argument "počet-bytů", musí jím být celé číslo nebo nezáporná celočíselná numerická položka. Hodnota tohoto třetího argumentu pak určuje počet bytů vysílajícího pole, jejichž hexadecimální obrazy mají být přesunuty do příjmového pole. Implicitní délka prvního argumentu se pak ignoruje. Není-li uveden třetí argument "počet-bytů", přesunuje se do příjmového pole hexadecimální obraz celého vysílajícího pole v plné délce, to jest v implicitní délce prvního argumentu (při položce smí být tato délka i proměnná). Je-li prvním argumentem soubor, třídicí soubor, externí jméno (u nichž je implicitní délka nulová) nebo /položka (kde je implicitní délka rovna délce položky a nikoliv délce ukazatele), je nutno druhý argument explicitně uvést. Každý půlbyte vysílajícího pole určí obsah jednoho bytu příjmového pole v témže pořadí. Půlbyte vysílajícího pole s hexadecimální hodnotou 0,1,2,...,9,A,B,C,D,E,F způsobí zařazení znaku 0,1,2,...,9,A,B,C,D,E,F do příjmového pole. Je-li hodnota třetího argumentu resp. implicitní délka prvního argumentu rovna n, naplní se takto prvních 2n bytů příjmového pole (a to zcela nezávisle na implicitní délce druhého argumentu). Využití: Podprogram ICMOVEX se používá výhradně při ladění, chceme-li vypsat obsahy vybraných položek a polí v hexadecimálním tvaru. Lze sice k tomu účelu použít i podprogram ICHEXA (viz 17.1.), ten ovšem vypíše vždy i záhlaví (které uživatel při opakovaném výpisu krátké položky většinou nepotřebuje) a vyžaduje zvláštní volání (a tedy minimálně dva řádky výpisu) pro každou z několika sledovaných položek, což činí výpis nepřehledným. Naproti tomu při použití podprogramu ICMOVEX lze vypsat na témže jediném řádku hexadecimální obrazy i několika krátkých položek. (Podprogram ICMOVEX ovšem sám řádek nevypisuje, pouze pomáhá při jeho přípravě v paměti.) Příklad: V každé otáčce určitého cyklu potřebujeme vypsat hexadecimální obrazy položky A s PIC S9(5) COMP-3, položky B s PIC 9(9) COMP a prvních pěti bytů položky C. Popíšeme si pomocné položky 77 AP PIC X(6). 77 BP PIC X(8). 77 CP PIC X(10). a pak v každé otáčce cyklu provedeme příkazy CALL 'ICMOVEX' USING A AP. CALL 'ICMOVEX' USING B BP. CALL 'ICMOVEX' USING C CP 5. DISPLAY 'A = ' AP ', B = ' BP ', C = ' CP. Má-li např. položka A hodnotu -2938, položka B hodnotu 258 a prvních pět bytů položky C obsahuje znakově A*7-T, vypíše příkaz DISPLAY řádek A = 029384, B = 02010000, C = 412A372D54 Příklad: CALL 'ICMOVEX' USING (TAB) POLE 400. DISPLAY POLE. Do prvních 800 bytů položky POLE se uloží hexadecimální obraz prvních 400 bytů externího pole TAB. Následující příkaz DISPLAY pak tento hexadecimální obraz vypíše.