Return to Mainframe Utilities Page
Module
ISREDIT MACRO (OPT1)
ISPEXEC CONTROL ERRORS RETURN
/**** SET MESSAGE DISPLAY ON/OFF BASED ON THE DEBUG SWITCH ***/
ISPEXEC VGET (DBGSWTCH) PROFILE
IF &DBGSWTCH = &STR(ON) THEN CONTROL MSG LIST CONLIST SYMLIST NOFLUSH
ELSE CONTROL NOMSG NOLIST NOFLUSH NOPROMPT
/******************************************************************/
/* 'PIC' EDIT MACRO. DISPLAY THE LENGTH OF A PICTURE LITERAL */
/* AUTHOR : DAVID LEIGH DATE : 5-8-89 */
/******************************************************************/
IF &STR(&OPT1) = &STR(HELP) THEN GOTO HELPSEC
ISREDIT (LN,CL) = CURSOR
ISREDIT (DATA) = LINE .ZCSR
SET A = &SYSINDEX(&STR('),&NRSTR(&DATA))
IF &A = 0 THEN +
DO
SET ZEDLMSG = &STR(NO "'" FOUND IN LINE. THERE MUST BE 2 )+
&STR("'"'S.)
ISPEXEC SETMSG MSG(UTLZ001)
EXIT CODE(8)
END
ELSE +
DO
SET A = &A + 1
SET B = &LENGTH(&NRSTR(&DATA))
SET DATA = &SUBSTR(&A:&B,&NRSTR(&DATA))
END
SET A = &SYSINDEX(&STR('),&NRSTR(&DATA))
IF &A = 0 THEN +
DO
SET ZEDLMSG = &STR(2ND "'" NOT FOUND IN LINE. THERE MUST BE 2 )+
&STR("'"'S.)
ISPEXEC SETMSG MSG(UTLZ001)
EXIT CODE(8)
END
ELSE +
DO
SET A = &A - 1
SET DATA = &SUBSTR(1:&A,&NRSTR(&DATA))
END
SET A = &LENGTH(&NRSTR(&DATA))
ISREDIT CURSOR = &LN &CL
IF &STR(&OPT1) = BATCH THEN +
DO
SET PICLEN = &STR(&A)
ISPEXEC VPUT PICLEN SHARED
EXIT
END
SET ZEDSMSG = &STR(STRING LENGTH = &A)
SET ZEDLMSG = &STR(THE STRING BETWEEN "'"'S IS &A CHARATERS LONG)
ISPEXEC SETMSG MSG(UTLZ000)
IF &OPT1 = WRITE THEN +
DO
SET X = &LENGTH(&A)
SET Y =
DO &I = 1 TO &X
SET Y = &STR(&Y=)
END
ISREDIT CHANGE P'&Y' '&A' .ZCSR .ZCSR &CL
END
EXIT
HELPSEC: +
CLEAR
WRITE *** HELP FOR EDIT MACRO 'PIC' ***
WRITE
WRITE THE 'PIC' EDIT MACRO WILL AUTOMATICALLY DISPLAY HOW LONG A STRING
WRITE IS IN THE CURRENT LINE THAT THE CURSOR IS ON IN A FILE THAT YOU
WRITE ARE EDITING. IT LOOKS FOR 2 SINGLE QUOTES AND COUNTS THE NUMBER
WRITE OF CHARACTERS BETWEEN THE QUOTES. A PROBABLE APPLICATION IS FOR
WRITE THE WORKING STORAGE SECTION OF A COBOL PROGRAM. IT WOULD SAVE
WRITE "CURSOR COUNTING" TIME FOR LONG "VALUE" CLAUSES.
WRITE
WRITE BASIC SYNTAX : (PLACE CURSOR ON THE DESIRED DATA LINE)
WRITE
WRITE COMMAND ===> PIC
WRITE
WRITE EXAMPLE (ASSUME THE CURSOR IS ON LINE 3
WRITE
WRITE EDIT ---- MY.PDS(MYMEMBER) - 01.00 --------------- COLUMNS 001 072
WRITE COMMAND ===> PIC
WRITE ****** ***************************** TOP OF DATA *****************
WRITE 000001 01 RECORD-LAYOUT.
WRITE 000002 05 FILLER PIC X(??) VALUE
WRITE 000003 'LJHLKJHSDLHFLKJHSDOUIYOAUEYR,MBDXVLSIUSE'.
WRITE 000004
WRITE 000005
WRITE ****** **************************** BOTTOM OF DATA ***************
WRITE
WRITE &STR(MESSAGE AFTER COMMAND EXECUTION : =============/)
WRITE &STR( /)
WRITE EDIT ---- MY.PDS(MYMEMBER) - 01.00 ------------ STRING LENGTH = 40
WRITE COMMAND ===>
WRITE ****** ***************************** TOP OF DATA *****************
WRITE 000001 01 RECORD-LAYOUT.
WRITE 000002 05 FILLER PIC X(??) VALUE
WRITE 000003 'LJHLKJHSDLHFLKJHSDOUIYOAUEYR,MBDXVLSIUSE'.
WRITE 000004
WRITE 000005
WRITE ****** **************************** BOTTOM OF DATA ***************
WRITE
WRITE *** END OF HELP *** NO PROCESSING PERFORMED ***
EXIT
Documentation
This utility is particularly helpful in languages such as COBOL where you have
to match the length of a literal string delimited by single quotes with an
explicit length number. It can be used in any edit session however. Place the
cursor on the line w/the string and type PIC on the command line. You may also
set a PF key to PIC. An example is as follows :
EDIT ---- TCWCA.TWB.QNDPGMS(ALLUSERS) - 01.01 ------------ STRING LENGTH = 52
COMMAND ===> pic SCROLL ===> CSR
023400 01 ws-start pic x(52) value
023500 '*** program allusers working storage begins here ***'.
You have verified that this string is 52 chars. long w/o having to count it.

0 Comments