EDIT macro MACMAC EDIT macro MACMAC Author: David McRitchie formatted on 1995/04/01 06:54 for assistance contact: D. McRitchie DMcRitchie@hotmail.com -------------------------------------------------------------------------------- Macro name. MACMAC users. Clist creators needing means to invoke ISREDIT from non macro clist type. (REXX) Edit Macro resides in SYS1.TSOCLIST -------------------------------------------------------------------------------- MACMAC Invoke EDIT with preset ISREDIT commands -------------------------------------------------------------------------------- related MACMAC and MACMACS are same except for delimiter used -------------------------------------------------------------------------------- MACMAC allows updating a new or old PDS member with preset ISREDIT commands from a TSO or REXX clist. -------------------------------------------------------------------------------- Since square brackets are not available, optional material is enclosed in European brackets <...>. ISREDIT MACMAC isredit-command ... -------------------------------------------------------------------------------- Actually MACMAC would be used with a clist as opposed to being issued as a com- mand at the terminal. An example edit macro follows. Examples /*REXX -- into edit with macro edit macro @ECHO invoked */ MACPARM = "@ECHO;@ECHO 2nd time;LINE_BEFORE .ZF = msgline 'hello &SYSUID.'" Address "ISPEXEC" "VPUT (MACPARM) SHARED" Address "ISPEXEC" "EDIT DATASET('IS03.CLISTHLP.HELP(@DIR)') MACRO(MACMAC)" RETURN 1 /*place cursor on command line*/ A edit macro utilizing MACMAC PROC 0 DSN(IS03.LIBR.CLIST) MBR(MESSAGE) /********************************************/ IF &SYSDSN('&DSN.') ª= OK THEN DO WRITE GIGO -- &DSN. -- &SYSDSN('&DSN.') EXIT CODE(12) END /* --------------- FIND NEXT MEMBER ---------------------- */ SET C = 1 SET SOUP = &STR(ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$) DO WHILE &C <= &LENGTH(&SOUP) IF &C > &LENGTH(&SOUP) THEN GOTO END2 SET D = M&SUBSTR(7:8,&SYSDATE)&SUBSTR(1:2,&SYSDATE) &SUBSTR(4:5,&SYSDATE)&SUBSTR(&C.:&C.,&SOUP.) IF &SYSDSN('&DSN(&D)') ª= OK THEN GOTO END1 SET C = &C + 1 END GOTO END2 /* MORE THAN 39 UPDATES IN A DAY */ END1: SET MACPARM = COPY &MBR. AFTER 0; LINE_BEFORE .ZF &STR(= '&SYSDATE.) &SYSTIME. &SYSUID. &STR(--) DSN(&DSN.) MBR(&MBR.)&STR(');SAVE;END ISPEXEC VPUT (MACPARM) SHARED ISPEXEC EDIT DATASET('&DSN.(&D.)') MACRO(MACMAC) END2: EXIT CODE(1) Additional example(s) in IS03.LIBR.CLIST(MACFONT). Internal Aspects Internal aspects describes how the edit macro (MACRO/CLIST/EXEC) functions. This information is particularly useful to someone who may need to design a similarly functional edit macro. It may also provide additional insight to the user. The edit macro is rather short so the text will be included below: /*REXX -- Invoke EDIT with preset ISREDIT commands */ /* MACMAC and MACMACS same except for delimiter */ /* -------------------------------------------------- */ /* usage of MACMAC macro clist from a TSO clist */ /* SET MACPARM = COPY MESSAGE AFTER 0;SAVE;END */ /* ISPEXEC VPUT (MACPARM) SHARED */ /* ISPEXEC EDIT DATASET('&CNTL.(&D.)') MACRO(MACMAC) */ /* +--------------------------------------------------- */ /* | David McRitchie, 02/14/91 */ /* +--------------------------------------------------- */ ADDRESS "ISREDIT";"MACRO (TOKENS)" "IMACRO NONE" " ISREDIT (MEMBERX) = MEMBER " " ISREDIT (DSNX) = DATASET" ZEDSMSG = "Member="||MEMBERX ZEDLMSG = "MACMAC processed "DSNX||"("||memberx||")" Address "ISPEXEC" "SETMSG MSG(ISRZ000)" if TOKENS = "" then do Address ISPEXEC VGET (MACPARM) tokens = macparm end "(CAPS)=CAPS" /*will restore at exit*/ "caps off" /*for msglines*/ ORIGINAL = TOKENS Do forever; /*remove commas*/ if tokens = "" then leave /* MACMAC and MACMACS same except next line*/ Parse var TOKENS Left";"Right; Check = translate(left) if "END" = check then do "CAPS" caps "END" return end Address ISREDIT Left TOKENS = Right; End; "LINE_BEFORE 1 = noteline """TIME('N'), "MACMAC processed "DSNX||"("memberx||")""" "LINE_BEFORE 1 = noteline "" with ... "ORIGINAL """" "caps" caps return The @ECHO edit macro might look like the following: /*rexx*/ address "ISREDIT";"MACRO (TOK)" "(CAPS) = CAPS" "CAPS OFF" "(LINECNT) = LINENUM .ZLAST" if tok = 'r' then do @echo time('l') 1 Recursive Test @echo time('l') 2 " ditto" @echo time('l') 3 ditto @echo time('l') 4 ditto @echo time('l') 5 ditto return end if tok = "" then tok = "(no parameters supplied)" IF LINECNT = 0 THEN "LINE_AFTER 0 = NOTELINE """, date('u') TIME('L') "@ECHO --" tok"""" ELSE "LINE_BEFORE 1 = NOTELINE """, date('u') TIME('L') "@ECHO --" tok"""" "CAPS" CAPS return 1 Invoking @ECHO with ===> @echo and then with ===> @echo r 01/06/93 14:58:43.037028 @ECHO -- (no parameters supplied) 01/06/93 14:58:54.717523 @ECHO -- 14:58:54.611378 1 RECURSIVE TEST 01/06/93 14:58:54.816489 @ECHO -- 14:58:54.741824 2 ditto 01/06/93 14:58:54.932117 @ECHO -- 14:58:54.839793 3 DITTO 01/06/93 14:58:55.138861 @ECHO -- 14:58:54.957628 4 DITTO 01/06/93 14:58:55.329230 @ECHO -- 14:58:55.178379 5 DITTO