4.5.4 Klauzule BLANK Formát: BLANK WHEN ZERO Pravidla: Klauzule BLANK smí být uvedena jedině u numerické editované položky, nikoliv však u položky s klauzulí SIGN formátu 1 (s LEADING a bez SEPARATE). To může být: a) Položka, jejíž vzor v klauzuli PICTURE určuje jednoznačně, že se jedná o numerickou editovanou položku. b) Položka s klauzulí SIGN formátu 3 (s volbou SEPARATE, např. PIC S999 SIGN TRAILING SEPARATE BLANK). c) Položka bez klauzule USAGE (anebo s USAGE DISPLAY) a bez klauzule SIGN, jejíž vzor v klauzuli PICTURE obsahuje pouze znaky 9,V,P. Taková položka by sice bez klauzule BLANK byla numerickou položkou s pevnou řádovou tečkou (a to rozpakovanou), ale právě klauzule BLANK z ní "udělá" plnoprávnou numerickou editovanou položku (např. PIC 99V9 BLANK). Klauzule BLANK způsobí, že bude-li do položky posílána nulová hodnota, bude celý úsek paměti přidělený položce (včetně znaménka, měnového symbolu, tečky, výplňkových znaků atd.) vymezerován. Vyskytuje-li se však ve vzoru v klauzuli PICTURE znak * (hvězdička), bude při posílání nulové hodnoty celý úsek paměti přidělený položce vyplněn hvězdičkami (s výjimkou znaku tečka, který se nikdy hvězdičkou nenahrazuje a objeví se tedy na svém místě v položce). Příklad: 02 A PIC $++,++9.99B(24)/ BLANK. 02 B PIC B(6)*,**9.99CR BLANK WHEN ZERO. Příkaz "MOVE 0 TO A B" vymezeruje celou položku A (dosadí do ní 35 mezer), zatímco do položky B dosadí ***********.****. 4.5.5 Klauzule USAGE Formát: [USAGE IS] { DISPLAY | COMP | COMPUTATIONAL | COMP-1 | COMPUTATIONAL-1 | COMP-2 | COMPUTATIONAL-2 | COMP-3 | COMPUTATIONAL-3 | INDEX } Funkce: Klauzule USAGE spoluurčuje (s klauzulemi PICTURE, BLANK, SIGN a VALUE) typ položky; u numerických položek určuje navíc způsob zobrazení hodnoty položky v paměti. Pravidla: 1) Slovo USAGE resp. slova USAGE IS jsou nepovinná a bezvýznamná. Zápisy "USAGE volba", "USAGE IS volba" a pouze "volba" jsou proto zcela ekvivalentní. 2) Je-li klauzule USAGE uvedena u elementární položky, platí pouze pro ni. Je-li uvedena u skupinové položky, platí (tj. přenáší se) pro každou její podřízenou elementární položku, která nemá vlastní klauzuli USAGE a jejíž klauzule PICTURE, BLANK a SIGN nejsou v rozporu s touto "nadřízenou" klauzulí USAGE. (Tj. pro každou takovou podřízenou elementární položku, u níž by takováto klauzule USAGE mohla být doplněna. Pro podřízené položky alfanumerické, alfanumerické editované, exponenciální znakové a numerické editované se tedy nepřenáší žádná nadřízená klauzule USAGE, pro podřízené položky s klauzulí PICTURE libovolného tvaru se nepřenášejí nadřízené klauzule USAGE COMP-1, USAGE COMP-2 ani USAGE INDEX.) Má-li skupinová položka s klauzulí USAGE podřízenu skupinovou položku, která má rovněž klauzuli USAGE, pak se tato klauzule USAGE u podřízené skupinové položky ignoruje; pro podřízené elementární položky se přenáší výhradně klauzule USAGE od hierarchicky vyšší nadřízené skupinové položky. 3) Není-li klauzule USAGE v popisu položky uvedena (a nepřenáší se ani z nějaké nadřízené položky), je to ekvivalentní s uvedením USAGE DISPLAY. (Explicitní zápis USAGE DISPLAY je tedy pouze poznámkový a nemusí být uváděn.) 4) Hovoří-li se někde v této příručce o "položkách s USAGE DISPLAY", rozumí se tím vždy i skupinové položky. I kdyby skupinová položka měla uvedenu nějakou jinou klauzuli USAGE, platila by pouze pro její podřízené elementární položky, ne však pro ni samu; skupinová položka jako celek se vždy zpracovává alfanumericky. Použití: U alfanumerické, alfanumerické editované, numerické editované a u exponenciální znakové položky smí být uvedena jedině volba USAGE DISPLAY; u těchto položek je tedy klauzule USAGE pouze poznámková a je zbytečné ji uvádět. U ostatních elementárních položek určuje klauzule USAGE typ položky. Vzhledem ke klauzuli PICTURE jsou jen tyto možnosti: 1) Klauzule PICTURE je uvedena, přičemž vzor obsahuje pouze znaky 9,S,V,P v přípustné kombinaci (viz 4.5.3.C1). Klauzule BLANK ani klauzule SIGN formátu 1 nebo 3 nejsou uvedeny. Taková položka se nazývá numerická položka s pevnou řádovou tečkou (viz začátek 4.5.). V klauzuli USAGE lze pak uvést pouze tyto volby: a) Vynechání klauzule USAGE a uvedení USAGE DISPLAY jsou ekvivalentní možnosti určující numerickou rozpakovanou položku. b) USAGE COMP a USAGE COMPUTATIONAL jsou ekvivalentní možnosti určující numerickou binární položku. c) USAGE COMP-3 a USAGE COMPUTATIONAL-3 jsou ekvivalentní možnosti určující numerickou pakovanou položku. 2) Klauzule PICTURE, BLANK ani SIGN nejsou uvedeny. V klauzuli USAGE lze pak uvést pouze tyto volby: a) USAGE COMP-1 a USAGE COMPUTATIONAL-1 jsou ekvivalentní možnosti určující exponenciální krátkou položku. b) USAGE COMP-2 a USAGE COMPUTATIONAL-2 jsou ekvivalentní možnosti určující exponenciální dlouhou položku. c) USAGE INDEX určuje tzv. "položku s USAGE INDEX", kterou zkráceně nazýváme "UI-položka". Všechny zde neuvedené kombinace jsou syntakticky chybné. Je tedy nepřípustné uvést USAGE COMP nebo COMP-3 při neuvedení klauzule PICTURE nebo při vzoru nevyhovujícím pravidlům pro numerické položky s pevnou řádovou tečkou, a rovněž tak je nepřípustné uvést USAGE COMP-1 nebo COMP-2 nebo INDEX současně s klauzulí PICTURE. A) Rozpakovaná položka (USAGE DISPLAY nebo vynecháno) Hodnota položky je v paměti zobrazena v dekadickém rozpakovaném (používají se i termíny "zónovém" nebo "znakovém") tvaru. Každá dekadická cifra položky je uložena do jednoho bytu, přičemž levý půlbyte posledního bytu vyjadřuje znaménko hodnoty uložené v položce. Délka položky je rovna počtu znaků 9 v PICTURE. Aby položka měla přípustný obsah, musí být splněna tato pravidla: a) Nemá-li položka v PICTURE znak S, musí všechny byty položky obsahovat znakové cifry 0 až 9 (tj. hexadecimálně 30 až 39). Hodnota položky je pak vždy nezáporná. b) Má-li položka v PICTURE znak S, musí první až předposlední byte položky obsahovat znakové cifry 0 až 9 (hex. 30 až 39), levý půlbyte posledního bytu musí být hexadecimální 3 (pro kladné znaménko) resp. 4 (pro záporné znaménko) a pravý půlbyte posledního bytu musí být hexadecimální číslice 0 až 9. (Poslední byte položky obsahuje tedy při nezáporné hodnotě znakovou cifru 0 až 9 a při záporné hodnotě znak @ s hexadecimálním ekvivalentem 40 nebo písmeno A až I s hexadecimálním ekvivalentem 41 až 49.) Příklad: PICTURE USAGE délka hodnota obsah hex. obsah znak. ------------------------------------------------------------ 999 DISPLAY 3 28 303238 028 S999 DISPLAY 3 28 303238 028 S999 DISPLAY 3 0 303030 000 S999 DISPLAY 3 -28 303248 02H S999 DISPLAY 3 -700 373040 70@ S99V99 DISPLAY 4 -56.79 35363749 567I S99V99 DISPLAY 4 5 30353030 0500 S99V99 DISPLAY 4 -5 30353040 050@ S9 DISPLAY 1 -5 45 E S999PPV DISPLAY 3 6700 303637 067 S999PPV DISPLAY 3 -6700 303647 06G SVPP99 DISPLAY 2 0.0062 3632 62 SVPP99 DISPLAY 2 -0.0001 3041 0A SVPP99 DISPLAY 2 -0.001 3140 1@ B) Pakovaná položka (USAGE COMP-3) Hodnota položky je v paměti zobrazena v dekadickém pakovaném (též "zhuštěném" nebo "staženém") tvaru. Každá dekadická cifra položky je uložena do jednoho půlbytu; cifry se ukládají zprava doleva počínaje levým půlbytem posledního bytu položky. Pravý půlbyte posledního bytu položky vyjadřuje znaménko hodnoty uložené v položce. Označme n počet znaků 9 v PICTURE položky. Pak délka (počet bytů) pakované položky v paměti je rovna celočíselné části ze zlomku (n+2)/2 (pro každou dekadickou cifru položky jeden půlbyte a pro znaménko též jeden půlbyte zaokrouhleno nahoru na celý počet bytů). Aby položka měla přípustný obsah, musí být splněna tato pravidla: a) První až předposlední půlbyte položky musí obsahovat hexadecimální číslici 0 až 9. b) Má-li vzor položky sudý počet znaků 9 v PICTURE, musí první půlbyte položky (tj. levý půlbyte prvního bytu položky) vždy obsahovat hexadecimální 0. c) Nemá-li položka v PICTURE znak S, musí pravý půlbyte posledního bytu položky obsahovat hexadecimální číslici 3. Hodnota položky je pak vždy nezáporná. d) Má-li položka v PICTURE znak S, musí pravý půlbyte posledního bytu položky obsahovat hexadecimální číslici 3 (pro nezápornou hodnotu) resp. 4 (pro zápornou hodnotu). Příklad: PICTURE USAGE délka hodnota obsah hex. --------------------------------------------------- 999 COMP-3 2 160 1603 99 COMP-3 2 56 0563 S99 COMP-3 2 56 0563 S99 COMP-3 2 -56 0564 S9 COMP-3 1 -7 74 S999V999 COMP-3 4 -678.987 06789874 S999V999 COMP-3 4 -28.9 00289004 S999V999 COMP-3 4 8 00080003 S999V999 COMP-3 4 0 00000003 SV9(5) COMP-3 3 0.56 560003 99PPPV COMP-3 2 28000 0283 SVPPP9 COMP-3 1 .0007 73 SVPPP9 COMP-3 1 -.0007 74 Poznámka: Při popisu "02 A PIC 99 COMP-3." budou položce přiděleny dva byty paměti, ovšem první půlbyte položky nebude obsahovat stovky, nýbrž povinně hexadecimální nulu. Příkaz "MOVE 567 TO A" odřízne stovky a do položky A uloží hodnotu 67, tedy hexadecimální obsah 0673. Kdyby uživatel uměle "dostrkal" do položky A hexadecimální obsah 5673 (např. při čtení nebo pomocí redefinice nebo alfanumerickým přesunem apod.), byl by takovýto obsah položky A považován za nepřípustný, test NUMERIC by byl pro položku A nepravdivý a nebylo by definováno, zda numerická hodnota položky A bude 67 nebo 567; zpracování takovéto položky může mít nedefinovaný průběh i výsledek. Poznámka: Pokud rozpakovaná nebo pakovaná položka nemá v PICTURE znak S (např. "02 B PIC 999." nebo "02 B PIC 999 COMP-3."), musí její znaménkový půlbyte obsahovat hexadecimální 3. Příkaz "MOVE -567 TO B" odřízne znaménko a do položky B uloží hodnotu 567, tedy hexadecimální obsah 353637 resp. 5673. Kdyby uživatel uměle "dostrkal" do položky B hexadecimální obsah 353647 resp. 5674 (např. při čtení nebo pomocí redefinice nebo alfanumerickým přesunem apod.), byl by takovýto obsah položky B považován za nepřípustný, test NUMERIC by byl pro položku B nepravdivý a nebylo by definováno, zda numerická hodnota položky B bude 567 nebo -567; zpracování takovéto položky může mít nedefinovaný průběh i výsledek. Příklad: 02 P PIC S999 VALUE -567. 02 Q REDEFINES P PIC 999. : 02 R PIC 999. 02 S PIC S999. Položka Q má nepřípustný obsah 353647 (zde jsme toho dosáhli uměle redefinicí, velmi častý případ však je, že položka Q je součástí vstupní logické věty a uživatel u ní zapomněl v PICTURE znak S, ačkoliv příslušný úsek logické věty může obsahovat zápornou hodnotu). Jakákoliv operace s položkou Q může mít nedefinovaný průběh i výsledek, protože překladač při překládání kterékoliv operace vždy předpokládá, že obsah položky Q (i kterékoliv jiné položky) přípustný je. Tak např. příkaz "MOVE Q TO R" může (leč nemusí) překladač vzhledem ke shodnosti popisů přeložit jako alfanumerický přesun, takže i položka R získá nepřípustný obsah 353647; při jiném způsobu překladu však může získat obsah 353637. Podobně není definováno, zda příkaz "MOVE Q TO S" uloží do položky S obsah 353647 nebo 353637. Poznámka: U rozpakovaných i u pakovaných položek se znakem S v PICTURE se při numerickém dosazování nulové hodnoty (včetně explicitních zápisů "VALUE -0" a "MOVE -0 TO A") dosazuje do znaménkového půlbytu vždy hexadecimální 3. Hexadecimální 4 (která by znamenala též numericky přípustné zakódování nulové hodnoty řečené "záporná nula") může vzniknout pouze úmyslným "trikem" programátora, např. redefinicí, alfanumerickým přesunem apod. ("Záporná nula" je jediný případ u neexponenciálních položek, kdy dva alfanumericky rozdílné obsahy určují touž numerickou hodnotu.) Vstupuje-li položka obsahující "zápornou nulu" do numerické operace, bude její hodnota vždy považována za nulovou a výpočet proběhne řádně. Při numerickém srovnání na rovnost však není definováno, zda taková položka bude nebo nebude rovna položce obsahující "kladnou nulu" (neboť toto srovnání může být za určitých podmínek převedeno na alfanumerické srovnání) a zda její hodnota bude při testech ZERO a NUMERIC považována za nulovou nebo za zápornou. Vzhledem k tomu, že "záporná nula" při normálním způsobu práce vzniknout nemůže, nepovažují autoři této příručky za potřebné situaci okolo "záporné nuly" přesněji definovat. C) Binární položka (USAGE COMP) Hodnota položky je v paměti zobrazena v binárním tvaru, a to v tzv. doplňkovém kódu. Do tohoto binárního tvaru se hodnota položky převádí z dekadického tvaru bez ohledu na desetinnou tečku - jako kdyby se jednalo o celé číslo vzniklé z původní hodnoty vypuštěním desetinné tečky. Má-li vzor položky v klauzuli PICTURE 1-4 znaky 9, budou položce přiděleny dva byty (odpovídající typu "short" v jazyku C), při 5-9 znacích 9 budou položce přiděleny čtyři byty (odpovídající typu "long" v jazyku C), při 10-18 znacích 9 bude položce přiděleno osm bytů (odpovídající dvěma "longům" v jazyku C); více znaků 9 než 18 je při USAGE COMP zakázáno. Aby položka měla přípustný obsah, nesmí její hodnota překročit rozsah určený vzorem v klauzuli PICTURE. (Např. při PIC 99 musí uživatel zajistit, aby hodnota byla mezi 0 a 99, i když typ "short" je schopen pojmout celá čísla -32768 až +32767; podrobněji viz popis parametru CBL TRUNC.) Příklad: Přesun hodnoty -5.4 do položky s PIC S9V99 COMP se provádí tak, jako bychom tuto hodnotu nejprve přesunuli do pomocné rozpakované položky s týmž PICTURE (dostáváme hexadecimálně 353440) a tuto hodnotu pak bez ohledu na desetinnou tečku převedli do typu "short"; do dvou bytů přidělených naší položce tedy přijde číslo -540 převedené do typu "short". (Hexadecimální obsazení dvoubytového úseku paměti přiděleného naší položce závisí na způsobu zobrazení "shortu" v paměti a je tedy počítačově závislé; na počítačích typu PC to bude E4FD, na počítačích typu IBM resp. JSEP to bude FDE4.) Poznámka: Binární položka s více než 9 znaky 9 ve vzoru (tj. o délce 8 bytů) je implementována pouze kvůli kompatibilitě a neměla by být pokud možno vůbec používána (proto též na každý takový popis hlásí překladač upozornění). Pro zpracování takovýchto položek totiž na žádném z používaných počítačů neexistují vhodné strojové instrukce (ani ekvivalent v jazyku C). Položce jsou přiděleny dva po sobě jdoucí "longy", z nichž první obsahuje vyšší řády a druhý nižší řády hodnoty. Při jakékoliv práci s takovouto položkou je nutno převádět její hodnotu pomocí podprogramu do tvaru "double" nebo naopak, takže zpracování takové položky je velmi pomalé a zabírá mnoho paměti. Nelze-li snížit počet znaků 9 v PICTURE na 9, doporučujeme přejít na exponenciální dlouhou (případně na rozpakovanou) položku. Příklad: obsah (hexadecimálně) PICTURE USAGE délka hodnota na PC na IBM/JSEP ------------------------------------------------------------ S999 COMP 2 42 2A00 002A S9V99 COMP 2 5.16 0402 0204 SV9 COMP 2 -.6 FAFF FFFA S99PV COMP 2 240 1800 0018 S99PV COMP 2 -240 E8FF FFE8 S9(5) COMP 4 860 5C030000 0000035C S9(9) COMP 4 -860 A4FCFFFF FFFFFCA4 9(6)V9(3) COMP 4 1 E8030000 000003E8 9(18) COMP 8 33 0000000021000000 0000000000000021 S9(8)V99 COMP 8 -10 FFFFFFFF18FCFFFF FFFFFFFFFFFFFC18 Použití: Vzhledem k tomu, že počítače typu PC, pro které je tento překladač převážně určen, nemají strojové instrukce pro zpracování pakovaných operandů, je nutné rozpakované a pakované položky pro jakékoliv numerické zpracování převádět do typu "short" nebo "long" nebo "double". Tím se ovšem zpracování těchto položek výrazně zpomaluje. a) Rozpakované položky je vhodné používat pouze pro čitelný resp. tisknutelný vstup a výstup, tedy v logických větách čtených z obrazovky (nebo i z jiného média) a v logických větách zapisovaných na obrazovku nebo na tiskárnu apod. b) Pakované položky jsou implementovány pouze kvůli kompatibilitě; vzhledem k neexistenci pakovaných strojových instrukcí na počítačích typu PC neposkytují pakované položky žádné výhody. c) Binární položky představují nejvýhodnější typ položek a měly by být používány všude tam, kde se nevyžaduje čitelnost resp. tisknutelnost obsahu paměti (pak viz rozpakované, numerické editované a exponenciální znakové položky) a kde lze vystačit s nejvýše devíti předem známými dekadickými řády (pak viz exponenciální dlouhé nebo krátké položky); tedy jako pracovní numerické položky a mezivýsledky, jako indexy a různé čítače, v logických větách na magnetických médiích apod. Oproti jiným typům numerických položek zajišťují binární položky nejrychlejší a většinou též paměťově nejúspornější zpracování. D) Exponenciální krátká položka (USAGE COMP-1) Položka má přiděleny 4 byty paměti a její hodnota je na nich zobrazena v typu "float" jazyka C. Nejvyšší zobrazitelná hodnota, nejnižší zobrazitelná kladná hodnota a způsob zakódování hodnoty v paměti jsou počítačově závislé. E) Exponenciální dlouhá položka (USAGE COMP-2) Položka má přiděleno 8 bytů paměti a její hodnota je na nich zobrazena v typu "double" jazyka C. Nejvyšší zobrazitelná hodnota, nejnižší zobrazitelná kladná hodnota a způsob zakódování hodnoty v paměti jsou počítačově závislé. Poznámka: Zobrazení hodnoty v exponenciální položce nemusí (a u převážné většiny necelých čísel ani nemůže) být zcela přesné, zvláště když hodnota položky byla získána delším výpočtem. Je proto nevhodné používat tyto položky v relačních testech na rovnost a v podobných situacích, v nichž zaokrouhlovací chyby mohou mít rozhodující vliv na průběh výpočtu. Poznámka: Exponenciální krátká položka zajišťuje přesnost asi 7-9 platných dekadických cifer, exponenciální dlouhá položka zajišťuje přesnost asi 16-18 platných dekadických cifer. (Rozpakovaná nebo pakovaná položka sice zdánlivě poskytují až 30 dekadických cifer, ovšem při zpracování jsou stejně převáděny do pracovní exponenciální dlouhé položky, takže se z jejich hodnoty stejně využije pouze prvních 16-18 platných cifer.) Poznámka: Oba typy exponenciálních binárních položek se používají především při vědeckotechnických výpočtech, kdy není předem znám rozsah hodnot položek (nebo v případě, že nevystačíme s 9 dekadickými řády). Exponenciální dlouhá položka (USAGE COMP-2) umožňuje značně přesnější výpočet než exponenciální krátká položka (USAGE COMP-1). Zvláště při složitějších výpočtech, při nichž může být vliv zaokrouhlovacích chyb významný, často nelze exponenciální krátké položky vůbec použít. Veškeré příkazy přeloženého programu i všechny dodávané podprogramy pracují výhradně s exponenciálními dlouhými položkami, takže exponenciální krátké položky jsou pro účely jakéhokoliv zpracování stejně převáděny do exponenciálního dlouhého tvaru (je tedy zpracování exponenciálních dlouhých položek dokonce o něco rychlejší). Proto má používání exponenciálních krátkých položek smysl jedině za účelem šetření kapacity vnitřní paměti nebo vnějšího média. F) Položka s USAGE INDEX (tzv. UI-položka) Položka s klauzulí USAGE INDEX je elementární položka, která nepatří mezi numerické ani mezi alfanumerické položky. Používá se k úschově hodnot speciálních indexů (úschova i pozdější obnova se provádějí příkazem SET), na rozdíl od speciálních indexů však není spjata s žádnou klauzulí OCCURS. Význam položky s USAGE INDEX spočívá v tom, že může být částí logické věty, může stát pod OCCURSem a může být argumentem v příkazu CALL. Položce jsou vždy přiděleny 4 byty paměti, přičemž hodnota položky je na nich zobrazena binárně v doplňkovém kódu dle typu "long" v jazyku C (stejně jako kdyby se jednalo o binární položku s PICTURE S9(9) USAGE COMP). Položku s USAGE INDEX budeme (obzvláště ve formátech) označovat "UI-položka". Poznámka: Zobrazení hodnoty numerické položky v paměti u binární položky o délce 2 nebo 4 byty, u exponenciální krátké položky a u exponenciální dlouhé položky je obvyklým způsobem zobrazení numerické hodnoty v paměti používaným rovněž v jazyku C; hodnoty těchto položek je možno přímo zpracovávat pomocí příhodných strojových instrukcí. Naproti tomu zobrazení hodnoty u rozpakované nebo pakované položky, u binární položky o délce 8 bytů, u exponenciální znakové položky a u numerické editované položky je speciálním způsobem zobrazení neznámým v jazyku C, pro které neexistují příhodné strojové instrukce a jejichž zpracovávání se proto musí realizovat pomocí dodávaných podprogramů. Poznámka: Jsou-li v předešlém textu vysloveny požadavky na obsah úseku paměti přiděleného položce ("aby položka měla přípustný obsah"), je třeba jim rozumět takto: a) Vstupuje-li položka do numerického přesunu jako vysílající položka nebo do numerické operace jako operand, je správná činnost prováděného příkazu zaručena pouze tehdy, vyhovuje-li obsah úseku paměti výše formulovaným požadavkům. Kdyby tyto požadavky nebyly splněny, může mít výpočet nedefinovaný průběh i výsledek a dokonce může dojít i k havárii výpočtu. b) Je-li položka použita jako příjmová položka v numerickém přesunu nebo v některém aritmetickém příkazu (kdy je původní obsah položky samozřejmě bezvýznamný a může být zcela libovolný) a též při dosazování počáteční hodnoty položky pomocí klauzule VALUE, je zabezpečeno, že její úsek paměti bude naplněn tak, aby výše formulované požadavky byly splněny. Výjimka může nastat u binárních položek, které bez použití parametru CBL TRUNC mohou nabýt i vyšších hodnot, než jak to odpovídá jejich vzoru v klauzuli PICTURE. Dále může výjimka nastat u numerického přesunu v případě, že již vysílající položka má nepřípustný obsah. c) Programátor musí zabezpečit, aby položka nezískala nepřípustný obsah při čtení (READ, ACCEPT), při přesunu skupinových položek, pomocí klauzule REDEFINES apod. Přípustnost obsahu položky lze u položek s USAGE DISPLAY nebo USAGE COMP-3 přezkoušet pomocí testu NUMERIC.