MainframeSupports
tip uge 1/2008:

I det forrige danske tip skrev jeg, at du er nødt til at sætte ISPF variablen ZISPFRC, hvis du vil have ISPSTART programmet til at hoste op med en returkode, der er forskellig fra nul. Efterfølgende kom jeg i tanke om, at det faktisk ikke er helt lige til at få sat ZISPFRC fra COBOL eller PL/I. Følgende PL/I procedure kan du benytte til at sætte ZISPFRC:

setIspfRC: proc(ispfRc);

dcl ispfRC fixed bin(15);
dcl ispfReturnCode pic'(8)9';
dcl isplink ext entry options(asm inter retcode);
ispfReturnCode = ispfRC;
call isplink('VREPLACE', 'ZISPFRC ', bin(8,31), ispfReturnCode);
call isplink('VPUT ', 'ZISPFRC ', 'SHARED ');

end setIspfRC;

De af jer, der hellere vil benytte COBOL, kan finde lidt hjælp i tip 39/2002. Jeg starter med at undre mig over, at ZISPFRC skal defineres som en PIC'8(9)' (COBOL: PIC 9(8)), hvorfor ikke som en FIXED BIN(15). Næste undren opstår, når man har udført en CALL setIspfRC(20), for så returnerer ISPSTART i stedet returkode 12. Jeg kan i hvert fald ikke få ISPSTART til at returnere andet end 12, når jeg sætter ZISPFRC > 12. Det begrænser anvendeligheden en del.

For at ISPSTART returnerer værdien af ZISPFRC, så skal ZISPFRC ligge i den såkaldte shared pool, hvor værdien bliver placeret med en VPUT. For at overføre værdien af ZISPFRC fra dit program til ISPF er du nødt til at fortælle ISPF, hvilken variabel i dit program som indeholder ZISPFRC. Dette gøres traditionelt med VDEFINE, men da du kun skal skrive variablen til ISPF kan du bruge VREPLACE i stedet.

Forrige danske tip        Last tip in english        Tip oversigten