MainframeSupports
tip uge 12/2001:

På en IBM mainframe er mit foretrukne programmeringssprog absolut PL/1. PL/1 er langt mere elegant end COBOL nogensinde bliver, men jeg skal også indrømme, at der er visse ting i PL/1, som jeg og mange andre ville have været foruden. Jeg vil nu vise hvor elegant man kigger i storage med PL/1 i forhold til COBOL, hvor jeg vil henvise til tippet i uge 43/1999, hvor der også er forklaret en masse om, hvad de forskellige kontrolblokke er for noget.

For at gøre tippet lidt interessant vil jeg vise hvordan man finder LOAD-modul navnet for det kørende program. Man skal bruge følgende erklæringer:

DCL psa_address FIXED BIN(31) INIT(0);
DCL psa_pointer POINTER BASED(ADDR(psa_address));
DCL 1 psa BASED(psa_pointer)
  , 2 filler CHAR(536)
  , 2 tcb_pointer POINTER
  ;
DCL 1 tcb BASED(tcb_pointer)
  , 2 rb_pointer POINTER
  ;
DCL 1 rb BASED(rb_pointer)
  , 2 filler CHAR(12)
  , 2 cde_pointer POINTER
  ;
DCL 1 cde BASED(cde_pointer)
  , 2 filler CHAR(8)
  , 2 loadmodul_navn CHAR(8)
  ;

Ind til videre forekommer det måske ikke videre elegant. Pointen i forhold til COBOL er, at man kan samle sine erklæringer et sted. Det virkelig elegante set med mine øjne er, hvordan man får fat i de forskellige arealer. Lad os skrive arealerne ud som i det nævnte tip:

PUT SKIP LIST('PSA = ' !! string(psa));
PUT SKIP LIST('TCB = ' !! string(tcb));
PUT SKIP LIST('RB = ' !! string(rb));
PUT SKIP LIST('CDE = ' !! string(cde));
PUT SKIP LIST('LOADMODUL = ' !! loadmodul_navn);

Mere skal der ikke til. Ingen indledende knæbøjninger med at sætte adresser op. Man kan referere direkte til de variable, man har erklæret. De forskellige arealer jeg skriver ud er ikke den fulde PSA, TCB eller hvad det nu hedder. Hvis man vil se mere, så kan man lægge en filler ind bagefter. Filler er ikke en specialvariabel som i COBOL, så derfor skal flere fillere i samme struktur på samme niveau have forskellige navne.

Det er med vilje, at jeg ikke benytter DISPLAY, da DISPLAY i PL/1 skriver ud i MVS-loggen i modsætning til COBOL, der skriver ud i DD-navn SYSOUT. PUT skriver ud på DD-navn SYSPRINT.

Forrige danske tip        Last tip in english        Tip oversigten