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.