Go to LeighWeb Home Page            

Back To LeighWeb Mainframe Utilities Page

View the documentation associated with this module

/**********************************************************************
/* UTILITY: ECHANGE                                                   *
/* AUTHOR: DAVID LEIGH                                                *
/* FUNCTION: THIS UTILITY PROVIDES A WAY TO CHANGE EXTRA LONG STRINGS *
/*           WITHOUT HAVING TO WRITE A MACRO OR SET KEYS.  IT ALSO    *
/*           AUTOMATICALLY PARSES FOR A SPACE DELIMITED WORD IF YOUR  *
/*           CURSOR IS IN THE DATA.  THAT BECOMES THE "FROM" STRING.  *
/**********************************************************************
ISREDIT MACRO (PARM1 PARM2)
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 ASIS
ELSE +
    CONTROL NOMSG NOLIST NOFLUSH NOPROMPT ASIS
IF &STR(&SYSNSUB(1,&PARM)) = HELP THEN GOTO HELPSEC

/**********************************************************************
/* EVALUATE ANY PASSED PARMS                                          *
/**********************************************************************
SET QT = &STR(')
SELECT (&SYSCAPS(&PARM1))
    WHEN (PREFIX) SET PREFIX = &STR(&SYSNSUB(1,&PARM2))
    WHEN (SUFFIX) SET SUFFIX = &STR(&SYSNSUB(1,&PARM2))
    WHEN (TO)     SET CTO    = &STR(&QT&SYSNSUB(1,&PARM2)&QT)
END

/**********************************************************************
/* SAVE THE CURSOR POSITION AND SEE IF WE'RE ON THE COMMAND LINE      *
/**********************************************************************
ISREDIT (LN,CL) = CURSOR
IF &CL = 0 THEN GOTO DISPLAY

/**********************************************************************
/* IF NOT ON THE COMMAND LINE FIND THE STRING OUR CURSOR IS ON        *
/**********************************************************************
ISREDIT FIND PREV ' ' .ZCSR .ZCSR
ISREDIT FIND NEXT P'¬' .ZCSR .ZCSR
ISREDIT (LN1,CL1) = CURSOR
ISREDIT FIND NEXT ' ' .ZCSR .ZCSR
ISREDIT FIND PREV P'¬' .ZCSR .ZCSR
ISREDIT (LN2,CL2) = CURSOR
ISREDIT (CFROM) = LINE .ZCSR
SET CFROM = &SUBSTR(&CL1:&CL2,&STR(&SYSNSUB(1,&CFROM)))
IF &SYSINDEX(&STR('),&STR(&SYSNSUB(1,&CFROM))) > 0 AND +
   &SYSINDEX(&STR("),&STR(&SYSNSUB(1,&CFROM))) = 0 THEN +
    SET QT = &STR(")
IF &STR(&SYSNSUB(1,&CTO)) =       THEN +
    SET CTO   = &STR(&QT&SYSNSUB(1,&PREFIX)+
                      &SYSNSUB(1,&CFROM)+
                      &SYSNSUB(1,&SUFFIX)&QT)
SET CFROM = &STR(&QT&SYSNSUB(1,&CFROM)&QT)

/**********************************************************************
/* DISPLAY THE DATA ENTRY PANEL AND EXIT IF THE USER "END"S OUT       *
/**********************************************************************
DISPLAY: +
ISPEXEC DISPLAY PANEL(ECHANGE)

IF &LASTCC > 7 THEN +
    DO
        SET ZEDSMSG = &STR(NO CHANGE PERFORMED)
        ISPEXEC SETMSG MSG(UTLZ000)
        EXIT
    END

/**********************************************************************
/* INFORM THE USER OF THE ACTIVITY                                    *
/**********************************************************************
SET ZEDLMSG = &STR(CHANGING: &CFROM TO: &CTO +
                   PARMS: &CPARM)
ISPEXEC CONTROL DISPLAY LOCK
ISPEXEC DISPLAY MSG(UTLZ000W)

/**********************************************************************
/* LET'S FINALLY DO THE WORK!                                         *
/**********************************************************************
ISPEXEC VGET (CFROM CTO CPARM) SHARED
ISREDIT CHANGE &STR(&SYSNSUB(1,&CFROM)) +
               &STR(&SYSNSUB(1,&CTO)) +
               &STR(&SYSNSUB(1,&CPARM))

/**********************************************************************
/* TELL THE USER THE RESULTS AND GO BACK TO THE LINE THEY WERE ON     *
/**********************************************************************
SET CC = &LASTCC
ISREDIT (X,Y) = CHANGE_COUNTS
SET X = &X
SET Y = &Y
SELECT (&CC)
    WHEN (0) DO
        SET ZEDSMSG = &STR(CHANGE SUCCESSFUL)
        SET ZEDLMSG = &STR(CHANGED &X STRING OCCURANCES)
        ISPEXEC SETMSG MSG(UTLZ000)
    END
    WHEN (4) DO
        SET ZEDSMSG = &STR(STRING NOT FOUND)
        SET ZEDLMSG = &STR(COULD NOT FIND "&SYSNSUB(1,&CFROM)" +
        TO CHANGE)
        ISPEXEC SETMSG MSG(UTLZ001)
    END
    WHEN (8) DO
        SET ZEDSMSG = &STR(SOME DATA UNCHANGED)
        SET ZEDLMSG = &STR(&X OCCURANCES CHANGED AND &Y OCCURANCES +
                           UNCHANGED)
        ISPEXEC SETMSG MSG(UTLZ001)
    END
    OTHERWISE DO
        SET ZEDSMSG = &STR(SEVERE ECHANGE ERROR)
        SET ZEDLMSG = &STR(THE CHANGE HAD A RETURN CODE OF: &CC)
        ISPEXEC SETMSG MSG(UTLZ001)
    END
END
ISREDIT CURSOR = &LN &CL
EXIT

/**********************************************************************
/* DISPLAY ANY "HELP" WHICH IS AVAILABLE FOR THIS UTILITY             *
/**********************************************************************
HELPSEC: +
ISPEXEC SELECT PGM(ISPTUTOR) PARM(HELPSHEL)
SET ZEDLMSG = &STR(*** HELP DISPLAYED FOR ECHANGE UTILITY +
                   *** NO PROCESSING PERFORMED ***)
ISPEXEC SETMSG MSG(UTLZ000)
EXIT