
Ved Renden 31 2870 Dyssegaard Tel. +45 23 34 54 43
| 
MainframeSupports tip uge 39/2002:
Når man laver EDIT macroer, der laver meget, så kører de ikke altid
så hurtigt som det er ønskeligt. Man kan heldigvis skrive EDIT macroer
i andre sprog end CLIST og REXX. Det vil jeg nu illustrere med et eksempel
i COBOL.
Først er der lige en vigtig detalje. EDIT macroer skrevet i
eksempelvis COBOL ender med at blive til LOAD moduler. LOAD moduler ligger
ikke i SYSPROC eller SYSEXEC concateneringen, så derfor skal man fortælle
ISPF editoren, at ens favorit EDIT macro nu er et LOAD modul. Det gøres enten
ved at skrive et ¤-tegn foran navnet på LOAD modulet eller ved at lave en
lille forbrænder REXX (eller CLIST) som kan se således ud:
/* REXX */
ADDRESS ISREDIT
"MACRO"
"DEFINE MYMACRO PGM MACRO"
"MYMACRO"
Denne REXX EDIT macro starter et LOAD modul, der hedder MYMACRO.
Macro kaldet DEFINE MYMACRO PGM MACRO fortæller ISPF editoren, at den
skal kigge efter macroen med navnet MYMACRO i LOAD modul
søgerækken. Macro kaldet MYMACRO starter simpelthen macroen. Jeg kan
varmt anbefale dette trick til opstarten, da det dels er besværligt at
huske at indtaste ¤ foran macro navnet og dels, at ¤ i nogen emulatorer
er et helt andet tegn. Eksempelvis angiver ISPF EDIT-manualen, at man
skal bruge ! før macro navnet, men på de fleste danske installationer er
! mappet til ¤. På din installation er det måske et helt fjerde tegn, der
vil virke. Derfor er den lille forbrænder en særdeles god ide.
Det er nu op til MYMACRO at overholde konventionerne for
god EDIT macro opførsel i LOAD moduler. Lad os derfor straks
kaste os over et eksempel på, hvordan MYMACRO kan se ud:
.
01 ISPF-COMMAND PIC X(8).
01 ISPF-NAME PIC X(8).
01 ISPF-TYPE PIC X(8).
01 BYTE-COUNT PIC S9(9) COMP.
01 MACRO-COMMAND PIC X(80).
01 MACRO-COMMANDL PIC S9(9) COMP.
01 CSRLINE PIC S9(9) COMP.
.
MOVE 'ISREDIT' TO ISPF-COMMAND
MOVE 5 to MACRO-COMMANDL
MOVE 'MACRO' to MACRO-COMMAND
CALL 'ISPLINK' USING ISPF-COMMAND MACRO-COMMAND MACRO-COMMANDL
.
MOVE 'VDEFINE' TO ISPF-COMMAND
MOVE 'CSRLINE' TO ISPF-NAME
MOVE 'FIXED' TO ISPF-TYPE
MOVE 4 TO BYTE-COUNT
CALL 'ISPLINK' USING ISPF-COMMAND ISPF-NAME CSRLINE ISPF-TYPE BYTE-COUNT
.
MOVE 'ISREDIT' TO ISPF-COMMAND
MOVE 25 to MACRO-COMMANDL
MOVE '(CSRLINE) = LINENUM .ZCSR' to MACRO-COMMAND
CALL 'ISPLINK' USING ISPF-COMMAND MACRO-COMMAND MACRO-COMMANDL
.
DISPLAY 'CURSOR-LINE IS LINE ' CSRLINE
.
MOVE 'VDELETE' TO ISPF-COMMAND
MOVE 'CSRLINE' TO ISPF-NAME
CALL 'ISPLINK' USING ISPF-COMMAND ISPF-NAME
Jeg har udeladt en hel del af de nødvendige COBOL besværgelser for at kunne
komme hurtigere til sagen. Først de nødvendige erklæringer. Herefter et
kald til ISPF via ISPLINK som svarer præcist til ISREDIT "MACRO" i en REXX. Nu vil ISPF
editoren opfatte programmet som en EDIT macro. Herefter er det bare derudaf,
næsten. Alle variable, der kommunikeres mellem EDIT og programmet SKAL
VDEFINEs. Så det gør jeg med et linie-nummer kaldet CSRLINE. Næste kald
sætter CSRLINE til nummeret på den linie, som cursoren stod i, da jeg trykkede
Enter. Dette linie-nummer skriver jeg nu ud med en DISPLAY bare for at se om det virker.
Til sidst rydder jeg pænt op over for ISPF ved at VDELETE de variable, jeg har
VDEFINEt.
Herefter er det sådan set kun fantasien, der sætter grænserne.
For en god ordens skyld vil jeg nævne, at man kan udstede ISREDIT kommandoerne fra
programmet på en anden måde, hvor man i stedet for at skulle angive længden
på EDIT macro kommandoen bare angiver det samme delimiter tegn i starten og i
slutningen af kommandoen. Du kan læse meget mere om EDIT macroer i ISPF manualen
EDIT and EDIT macroes. Hvis du ikke har dyrket VDEFINEs og VDELETEs, så kan du
læse mere i manualen ISPF services guide eller skrive til mig, hvis du mener, der
er et behov for et tip om VDEFINEs og VDELETEs.
Forrige danske tip
Last tip in english
Tip oversigten
|