Hvordan finder du egentlig et dataset på mainframen. Mit gæt er, at du bruger DSLIST i ISPF også kendt som punkt 3.4. Hvis du så har haft brug for at finde datasets fra et program, så har du garanteret kodet en REXX og kaldt de ISPF services, der svarer til DSLIST funktionaliteten. Måske har dit behov bare været, at finde ud af om et dataset fandtes eller ej. I så fald har du sandsynligvis benyttet funktionen SYSDSN. Måske benytter du ind i mellem LISTCAT til noget af ovenstående.
Rent faktisk findes der en service på MVS kaldet CSI for Catalog Service Interface, som kan kaldes fra stort set hvilket som helst programmeringssprog og som kan alt det, jeg lige har nævnt. Igen må jeg tilskrive æren for denne opdagelse til Johnny Mossin. Der er sikkert mange andre end Johnny, der kender CSI, men jeg havde ikke kendt til CSI, hvis jeg ikke havde kendt Johnny. Fordelen ved CSI er, at man undgår ISPF services, og at man kan undgå REXX. Og så er der det ved CSI, at man kan fremtrylle alle de informationer, der står i MVS catalogstrukturen (det er ikke småting) og så kører CSI rasende stærkt.
Desværre er interfacet til CSI lidt kringlet, især hvis man vil hente rigtig mange forskellige informationer om datasets frem. Jeg vil her give to eksempler på kald til CSI, et fra PL/1 og et fra REXX. Begge eksempler gør nøjagtig det samme, nemlig henter oplysning om hvilken volume et dataset ligger på. Det er ret praktisk, hvis man har behov for at bestemme om datasettet er migreret eler ej, da CSI ikke udsteder nogen HSM recall. I PL/1 ser det således ud:
Og i REXX ser det således ud:
I PL/1 subrutinen har jeg benyttet de navne, som angives i CSI interfacet. Det har jeg fuldstændigt udeladt i REXX subrutinen, da man jo ikke kan lave strukturer i REXX. Hvis datasetnavnet ikke findes i MVS kataloget, så vil feltet med volume serial være udfyldt med blanke, og hvis det er migreret, så vil det være udfyldt med teksten MIGRAT.
CSI interfacet giver kun returkoder forskelligt fra 0, hvis der er noget helt galt. Output arealet til CSI skal være på mindst 1024 bytes, og længden skal være angivet i de første 4 bytes af output arealet. Hvis du glemmer at sætte plads af i dit program til den længde, du angiver i de første 4 bytes, så risikerer du at lave storage overskrivninger og endda at fremprovokere 0C4 abends. Det samme kan ske, hvis du glemmer at putte en fornuftig værdi i de fire første bytes.
Man kan angive wildcards i input datasetnavnet. Så begynder CSI at returnere alle de datasetnavne med tilhørende oplysninger, som matcher dit wildcard. Alle disse oplysninger returneres af CSI på en bestemt måde, som du selv må læse dig til i Appendix B i manualen Managing Catalogs. I dette appendix står der alt, hvad der er værd at vide om CSI.