MainframeSupports
tip uge 10/2001:

Det er efterhånden lang tid siden, jeg har skrevet et tip om EDIT-macroer. I denne uge vil jeg derfor fortælle lidt om, hvordan man sætter sin EDIT-macro i stand til at genkende linie-kommandoer og bruge dem til noget fornuftigt.

Jeg vil som sædvanligt starte med et eksempel, der viser alle herlighederne, for dem er der mange af:

/* REXX */
ADDRESS ISREDIT
"MACRO NOPROCESS"
ADDRESS ISPEXEC "CONTROL ERRORS RETURN"
"PROCESS RANGE S"
IF RC = 0
THEN DO
  "(FRSTLINE) = LINENUM .ZFRANGE"
  "(LASTLINE) = LINENUM .ZLRANGE"
  IF FRSTLINE = LASTLINE
  THEN
    CALL ISPF_MESSAGE 'One line selected', 'Line 'FRSTLINE' selected'
  ELSE
    CALL ISPF_MESSAGE 'More lines selected',,
                      'Lines 'FRSTLINE'-'LASTLINE' selected'
END
ELSE IF RC = 4 OR RC = 20
THEN
  CALL ISPF_MESSAGE 'Line command missing', 'Use S as line command'
ELSE IF RC = 16
THEN DO
  "(CMDUSED) = RANGE_CMD"
  IF CMDUSED = 'S'
  THEN
    CALL ISPF_MESSAGE 'Line command incomplete', 'SS command missing'
  ELSE
    CALL ISPF_MESSAGE 'Wrong line command',,
                      'Line command 'CMDUSED' invalid'
END
EXIT

Jeg tager forbehold for stavefejl, da EDIT-macroen er en omformuleret og kraftigt reduceret udgave af en fuldt udbygget udgave. Denne EDIT-macro mangler også proceduren ISPF_MESSAGE.

Hovedtrækkene er, at option NOPROCESS er krævet på MACRO-kommandoen for at få den til at forstå linie-kommandoer. Dernæst fortæller PROCESS-kommandoen, hvilke linie-kommandoer, man vil forstå og hvordan. Jeg har her valgt en blok-kommando (RANGE) kaldet S. Der er intet i vejen for at bruge eksisterende linie-kommandoer og man kan angive flere adskilt af blanke.

Returkoden fra PROCESS-kommandoen bestemmer, hvad man så kan foretage sig. Returkode 0 er alt OK og man har nu adgang til 2 system-definerede labels kaldet .ZFRANGE og .ZLRANGE, når man benytter option RANGE på PROCESS-kommandoen. .ZFRANGE peger på den første linie og .ZLRANGE på den sidste. De andre returkoders betydning håber jeg fremgår af programmet. Læg mærke til, at RANGE_CMD returnerer den valgte linie-kommando. Den er nødvendig ved returkode 0, hvis man har angivet flere forskellige linie-kommandoer på RANGE-kommandoen.

Forrige danske tip        Last tip in english        Tip oversigten