11.7. PROCEDURE DIVISION USING Formát: PROCEDURE DIVISION USING položka ... . Tohoto formátu záhlaví oddílu procedur používá programátor tehdy, když celý tento cobolský program má sloužit jako podprogram volaný příkazem CALL s předáváním argumentů. Ovšem i při obyčejném zápisu záhlaví "PROCEDURE DIVISION." bez klauzule USING lze do tohoto cobolského programu předat řízení příkazem CALL, avšak pouze bez předávání argumentů. Vyvolávající program může být napsán i v jiném jazyce, dodrží-li cobolské konvence. V obou případech externím jménem, na které je třeba zvnějšku předat řízení, (tj. které musí být zapsáno za slovem CALL) je jméno programu uvedené v paragrafu PROGRAM-ID. Po předání řízení se jakožto první příkaz vyvolaného programu provádí první příkaz v jeho oddílu procedur (má-li program deklarativa, pak až první příkaz za END DECLARATIVES). Argumenty uvedené v klauzuli USING musí být položky z LINKAGE SECTION nebo z FILE SECTION s čísly úrovně 01 nebo 77. Jejich význam je přesně stejný jako u položek uvedených v klauzuli USING v příkazu ENTRY. Má-li záhlaví oddílu procedur tvar PROCEDURE DIVISION USING položka ..., jsou registrové konvence, způsob úklidu registrů a přebírání argumentů přesně stejné jako při následujícím zápisu, který má prakticky stejný význam: PROCEDURE DIVISION. ENTRY 'jméno-programu' USING položka ... (Při tomto zápisu by ovšem bylo porušeno pravidlo, že se externí jméno uvedené za slovem ENTRY musí lišit od jména programu z paragrafu PROGRAM-ID.) Návrat k volateli se provádí stejným způsobem jako při příkazu ENTRY, tj. příkazem GOBACK nebo EXIT PROGRAM. Příklad: Jako ukázku napíšeme podprogram, který sečítá dva údaje s PIC S999 a součet ukládá do položky též s PIC S999: IDENTIFICATION DIVISION. PROGRAM-ID. SECTI. DATA DIVISION. LINKAGE SECTION. 77 X PIC S999. 77 Y PIC S999. 77 Z PIC S999. PROCEDURE DIVISION USING X Y Z. COMPUTE Z = X + Y. GOBACK. Tento podprogram může být vyvoláván např. příkazem CALL 'SECTI' USING ALFA BETA GAMA nebo CALL 'SECTI' USING A(I J) '024' B OF C. O připojení podprogramu SECTI se uživatel nemusí starat, neboť spojovací program jej může připojit tzv. autolinkem. Poznámka: Pomocí příkazu CALL lze předat řízení kterémukoliv cobolskému programu, ať má nebo nemá klauzuli PROCEDURE DIVISION USING. Za slovem CALL přitom píšeme jméno programu z paragrafu PROGRAM-ID tohoto volaného programu. Naproti tomu program, který je překladači a spojovacímu programu označen jako hlavní (takže bude obsahovat funkci main, která pak volá funkci pojmenovanou jménem programu z PROGRAM-ID; při překladu a spojování jediného cobolského programu je tomu tak vždy), je na začátku výpočtu volán operačním systémem. Pokud by takto vyvolaný cobolský program měl klauzuli PROCEDURE DIVISION USING, budou položkám v ní uvedeným přiděleny nesmyslné adresy, takže vyvolaný program by s těmito položkami neměl pracovat. Cobolský program vyvolaný příkazem CALL se může vrátit k volateli příkazem GOBACK nebo EXIT PROGRAM; může ovšem též ukončit zpracování příkazem STOP RUN. Program vyvolaný operačním systémem by měl ukončit zpracování příkazem STOP RUN; příkaz GOBACK by způsobil chybu, zatímco příkaz EXIT PROGRAM by byl neúčinný. Bývá-li cobolský program vyvoláván někdy operačním systémem a jindy pomocí příkazu CALL, může končit např. takto: IDENTIFICATION DIVISION. PROGRAM-ID. MICKEY. REMARKS. VYTISKNE MICKEY MOUSE A VRATI SE K VOLATELI. . . . PROCEDURE DIVISION. . . . KONEC1. EXIT PROGRAM. & NAVRAT PRI VOLANI PRIKAZEM CALL KONEC2. STOP RUN. & NAVRAT PRI VOLANI OPERACNIM SYSTEMEM Poznámka: Program s PROCEDURE DIVISION USING smí mít deklarativní část oddílu procedur (DECLARATIVES). První příkaz prováděný po vyvolání programu příkazem CALL nebo operačním systémem je pak stejný, jako kdyby klauzule USING nebyla uvedena, tj. je jím první příkaz následující za záhlavím END DECLARATIVES. Poznámka: Program s PROCEDURE DIVISION USING smí mít v oddílu procedur příkazy ENTRY.