Tilbage i uge 21 skrev jeg om, hvordan man kan kalde loadmoduler fra REXX. En af de uhensigtsmæssige detaljer er, at man skal konvertere REXX-variable til de strukturer, der passer til loadmodulerne. Det vil jo være langt smartere, hvis man kunne kommunikere via REXX-variable. Og det kan man selvfølgelig også, selv om det ikke er verdens mest elegante interface. Heldigvis kan man skjule de mest kryptiske detaljer i et undermodul, men her får du et kørende eksempel på, hvordan man udfylder en REXX-variabel i COBOL, som efterfølgende kan benyttes direkte i den REXX, der kalder COBOL-programmet.
Al kommunikation med REXX-variable fra andre programmeringssprog sker via modulet IRXEXCOM. Dette modul kræver nogle ret kryptiske parametre, som du kan læse meget mere om ved at klikke her. For at få det til at virke fra COBOL skal du bruge følgende erklæringer i COBOL working-storage section:
Brugen af alle disse variable vil fremgå af følgende stump kode, der skal placeres i procedure division. Tilgiv mig den manglende indrykning:
Den allerførste move skal kun foretages en eneste gang i programmet. De næste fire move statements skal udføres for hver gang man ønsker at lave en REXX-variabel. RexxVarName udfyldes med navnet på REXX-variablen, rexxVarNameL udfyldes med længden på variabelnavnet, rexxVarValue udfyldes med den værdi REXX-variablen skal tildeles og rexxVarValueL med det antal tegn, som værdien fylder. Læg mærke til, at man kun skal benytte tegn til at kommunikere med. Ikke noget med binære eller pakkede værdier. REXX skal nok oversætte tegnstrengen til noget, der kan regnes på, hvis ellers REXX reglerne herfor er overholdt. Det giver selvfølgelig lidt arbejde i COBOL programmet med at oversætte fra binært eller pakket format til en streng af læsbare tegn.
De sidste mange move statements inden selve kaldet vil jeg anbefale at foretage før hvert eneste kald til IRXEXCOM, da IRXEXCOM kan ændre på de angivne variable. De sidste fire moves inden kaldet er de mest interessante, da det er her, at selve opdateringen af REXX-variablen klargøres vha. de fire rexxVar-variable.
Til sidst foretages kaldet til IRXEXCOM. Jeg har med vilje benyttet en variabel til at indeholde navnet på det modul, der kaldes. Så undgår du problemer med at få linket IRXEXCOM ind i dit COBOL loadmodul, da det bliver kaldt dynamisk. En anden vigtig detalje er brugen af variablen nil. Hvis du erstatter nil med COBOL ordet NULL, så virker kaldet ikke i følge forskellige kilder, jeg har læst på internettet. Det står der selvfølgelig ikke noget om i afsnittet om IRXEXCOM, som jeg har henvist til tidligere i tippet.
IRXEXCOM kan meget andet end at opdatere en REXX-variabel. Den kan også læse og fjerne REXX-variable og meget andet. Men det må du selv læse dig til og prøve af. Nu kender du i hvert fald hovedingredienserne og ved, hvor du kan læse mere. PL/I hajerne kan med garanti nemt omforme ovenstående kode til en generel anvendelig PL/I procedure. God fornøjelse.