MainframeSupports
tip uge 42+43/1999:

COBOL har traditionelt ry for at være et kedeligt programmeringssprog, hvor man ikke kan gøre nogetsomhelst "frækt", såsom at kigge i storage. Men det er faktisk en gammel skrøne. Så derfor vil vi vise, hvordan man gør. Pga. efterårsferie håber vi til gengæld, at tippet er så godt, at det får lov til at gælde i to uger.

Før man går i gang, skal man finde ud af, hvad det er for en information i storage, man vil have fat i. Det kan f.eks. være navnet på det job, som programmet afvikles af. Så skal man finde ud af, hvordan man finder frem til informationen. Og så kan man gå igang med at kode. Man kan selvfølgelig også lave et program, der viser storage-arealer ud fra en angiven adresse. Her er det vigtigt at vide, at det langt fra er alle adresser i storage, man har lov til at kigge på, og at programmet abender, hvis man prøver at kigge et sted, man ikke har lov.

I working-storage section har man typisk behov for et par arbejdspointere:
 

01  WORK-POINTER POINTER.
01  AREA-ADDRESS PIC S9(9) COMP.
01  FILLER REDEFINES AREA-ADDRESS.
  02 AREA-POINTER POINTER.
 
Work-pointer er bare et ganske almindeligt pointer-felt i COBOL. Area-address og area-pointer er to felter defineret på samme adresse. Man kan putte en værdi i area-adress, som nøje svarer til den start-adresse i storage, som man ønsker at kigge på, og så vil area-pointer automatisk pege på denne adresse.

I linkage section definerer man de arealer eller kontrol-blokke, man ønsker at kigge i, som for eksempel:
 

01  PSA.
  02 FILLER PIC X(16).
  02 CVT-POINTER POINTER.
01 CVT.
  02 FILLER PIC X(556).
  02 ASVT-POINTER POINTER.
 
For de uindviede, så er PSA start-kontrolblokken i MVS, som altid er at finde på adresse 0. CVT'en er en kontrolblok, som indeholder pointere til alt muligt og umuligt inde i maven på MVS. Asvt-pointer er bare een af disse pointere.

Vi vil nu gerne sætte work-pointer i programmet lig asvt-pointer. Det gøres således:
 

MOVE 0 TO AREA-ADDRESS.
SET ADDRESS OF PSA TO AREA-POINTER.
DISPLAY 'PSA=' PSA.

SET ADDRESS OF CVT TO CVT-POINTER.
DISPLAY 'CVT=' CVT.

SET WORK-POINTER TO ASVT-POINTER.
 

Først sættes start-adressen på PSA til adresse 0. Herefter lader vi area-pointer pege på PSA. Og så skriver vi lige vores PSA-areal ud mest for sjov, da det fortrinsvis vil bestå af ikke printbare tegn. Så lader vi cvt-pointer i PSA pege på CVT, hvorefter vi igen mest for sjov skriver CVT ud. Og så er vi fremme ved målet, nemlig at lade vores work-pointer være lig med asvt-pointer i CVT. Læg mærke til, at pointer-felter ikke initialiseres med en MOVE, men med en SET.

Herfra er det sådan set kun fantasien, der sætter grænserne for, hvad man kan med storage og COBOL. Information om diverse kontrolblokke i MVS og felterne i dem findes i BookManager blandt MVS-manualerne. De hedder noget med Data Areas og der er en to-tre stykker. De er meget konkrete og hvis man ikke aner, hvor man skal starte med at lede efter en eller anden information, så er det meget lettere at spørge en garvet MVS-systemprogrammør.

Vi har selvfølgelig et lille sample-program på lager, og det kan stort set vise det samme som SDSF display active. Skriv til os, hvis du vil have en kopi.

Sidste uges tip        Tip oversigten