MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Copying columns from one file to other using TSO cmds
Goto page Previous  1, 2
 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> TSO and ISPF
View previous topic :: View next topic  
Author Message
dbzTHEdinosauer
Supermod


Joined: 20 Oct 2006
Posts: 1411
Topics: 26
Location: germany

PostPosted: Tue Nov 23, 2010 4:20 am    Post subject: Reply with quote

the macro will also work in VIEW mode.
_________________
Dick Brenholtz
American living in Varel, Germany
Back to top
View user's profile Send private message
misi01
Advanced


Joined: 02 Dec 2002
Posts: 629
Topics: 176
Location: Stockholm, Sweden

PostPosted: Tue Nov 23, 2010 5:42 am    Post subject: Reply with quote

I wrote it long enough ago that either View didn't exist, or I didn't know about it
_________________
Michael
Back to top
View user's profile Send private message Send e-mail
chandra
Beginner


Joined: 26 Sep 2003
Posts: 130
Topics: 36

PostPosted: Tue Nov 23, 2010 11:31 am    Post subject: Reply with quote

Thank you very much for your code misi01.
_________________
Regards,
Chandra
Back to top
View user's profile Send private message
jim haire
Beginner


Joined: 30 Dec 2002
Posts: 140
Topics: 40

PostPosted: Mon Dec 06, 2010 4:12 pm    Post subject: Reply with quote

I am posting a couple of commands that would help you move these columns as well. It will move the columns one at a time, however. The commands are SNIP and GLUE. These are really nice if you put them behind a PFKey. (Think CUT and PASTE, but with columns instead of the entire line. I had a friend that said he thought I was sniffing glue when I came up with this, but see if you like them.)

Quick tutorial:
Put the SNIP command behind your PF4 key. Put the GLUE command behind your PF16 key (Shift + PF4). Place your cursor on a character within your view or edit session. This is the upper leftmost corner of the block of data you want to SNIP. Press the PF4 key. Place your cursor in the lower rightmost corner of the data you want to SNIP. Press the PF4 key again. You will see the cursor re-position itself in the upper lefthand corner. This indicates you have completed "snipping" your data.

Now place your cursor where you want to "glue" your data. Press the Shift + PF4. The data which you snipped will now appear where you asked the data to be glued. It also has been removed from your profile.


SNIP command:

Code:

/***************************** REXX ***********************************/
/*                                                                    */
/*    COMMAND NAME: SNIP <MOVE>                                       */
/*    WRITTEN BY:   JIM HAIRE                                         */
/*                                                                    */
/*    FORMAT:                                                         */
/*        THINK OF THIS COMMAND AS A SCISSORS.                        */
/*                                                                    */
/*        ENTER "SNIP" ON THE COMMAND LINE.                           */
/*        PLACE THE CURSOR AT THE TOP LEFTHAND CORNER OF THE AREA     */
/*        WHERE YOU WANT TO BEGIN CUTTING CODE.  PRESS <ENTER>.       */
/*                                                                    */
/*        ENTER "SNIP" ON THE COMMAND LINE AGAIN.                     */
/*        PLACE THE CURSOR AT THE BOTTOM RIGHTHAND CORNER OF THE      */
/*        AREA YOU WANT TO CUT.  PRESS <ENTER>.                       */
/*                                                                    */
/*        THE AREA THAT YOU HAVE INDICATED IS A SQUARE PIECE OF       */
/*        CODE WHICH WILL BE PLACED IN THE PROFILE AND CAN BE         */
/*        INSERTED SOMEWHERE USING THE "GLUE" COMMAND.                */
/*                                                                    */
/*                                                                    */
/*    ARGUMENT LIST:                                                  */
/*        <MOVE> - IF YOU TYPE "M" OR "MOVE" AFTER THE "SNIP"         */
/*                 COMMAND, THE AREA THAT YOU "SNIP" WILL BE          */
/*                 REMOVED FROM THE AREA YOU INDICATED.               */
/*                                                                    */
/*                                                                    */
/*    DESCRIPTION:                                                    */
/*       THIS EDIT MACRO WILL ALLOW YOU TO TAKE PORTIONS OF DIFFERENT */
/*       LINES IN A MEMBER BEING EDITED.  YOU WILL THEN BE ABLE TO    */
/*       ATTACH THOSE LINES TO ANY OTHER EDIT MEMBER.                 */
/*                                                                    */
/**********************************************************************/
/*--------------------------------------------------------------------*/
/*    THIS FIRST COMMAND DETERMINES WHETHER WE ARE DOING THE          */
/*    FIRST OR SECOND SNIP.  WE DETERMINE THIS BY SEEING IF WE HAVE   */
/*    A CURRENT VALUE FOR THE SNIP SWITCH.                            */
/*--------------------------------------------------------------------*/
ADDRESS ISPEXEC
"ISREDIT MACRO (MOVESW)"

"VGET (SNIPSW) PROFILE"
IF RC = 0 THEN
    SELECT
       WHEN SNIPSW = 'S' THEN CALL SNIP_END
       WHEN SNIPSW = 'E' THEN CALL SNIP_START
       OTHERWISE
           NOP
    END
ELSE
    DO
      SNIPSW = 'S'
      "VPUT (SNIPSW) PROFILE"
      CALL SNIP_START
    END

IF SNIPSW = 'E' THEN
    DO
      CALL LOAD_SNIP_LINES_TO_PROFILE
      CALL ERASE_SNIPPED_LINES
      CALL INITIALIZE_SNIP_POSITIONS
    END

"ISREDIT CURSOR = &SCOL &SROW"

EXIT
/**/
/**/
/**/
/**/
/**/
SNIP_START:
/*--------------------------------------------------------------------*/
/*    THIS PARAGRAPH DETERMINES THE BEGINNING COLUMN AND ROW WHERE    */
/*    THE SNIP WILL OCCUR.  IF BOTH THE COLUMN AND THE ROW ARE VALID, */
/*    THE SNIP SWITCH WILL BE SET TO 'S'.                             */
/*--------------------------------------------------------------------*/
ADDRESS ISPEXEC
    "ISREDIT (SCOL,SROW) = CURSOR"
    IF SCOL > 0 & SROW > 0 THEN
        DO
          SNIPSW = 'S'
          "VPUT (SNIPSW SCOL SROW) PROFILE"
        END
    ELSE
        DO
          ADDRESS ISPEXEC
          ZEDSMSG = 'PF1 FOR ERROR'
          ZEDLMSG = 'CURSOR MUST BE PLACED SOMEWHERE ON THE FILE'
          'SETMSG MSG(ISRZ001)'
          EXIT 12
        END

RETURN
/**/
/**/
/**/
/**/
/**/
SNIP_END:
/*--------------------------------------------------------------------*/
/*    THIS PARAGRAPH DETERMINES THE ENDING COLUMN AND ROW WHERE       */
/*    THE SNIP WILL OCCUR.  IF BOTH THE COLUMN AND THE ROW ARE VALID, */
/*    THE SNIP SWITCH WILL BE SET TO 'E'.                             */
/*--------------------------------------------------------------------*/
ADDRESS ISPEXEC
    "ISREDIT (ECOL,EROW) = CURSOR"
    IF ECOL > 0 & EROW > 0 THEN
        DO
          SNIPSW = 'E'
          "VPUT (SNIPSW ECOL EROW) PROFILE"
        END
    ELSE
        DO
          ADDRESS ISPEXEC
          ZEDSMSG = 'PF1 FOR ERROR'
          ZEDLMSG = 'CURSOR MUST BE PLACED SOMEWHERE ON THE FILE'
          'SETMSG MSG(ISRZ001)'
          EXIT 12
        END
    RETURN
/**/
/**/
/**/
/**/
/**/
LOAD_SNIP_LINES_TO_PROFILE:
/*------------------------------------------------------------------*/
/*    THE LINES THAT YOU HAVE CHOSEN TO SNIP ARE NOW STORED IN      */
/*    THE PROFILE ALONG WITH THE STARTING AND ENDING POSITIONS      */
/*    OF THE LINE.                                                  */
/*------------------------------------------------------------------*/
ADDRESS ISPEXEC

"VGET (SCOL SROW ECOL EROW) PROFILE"
CALL DETERMINE_SNIP_ORDER

"VGET (LINNBR) PROFILE"
IF RC = 0 THEN NOP
ELSE
    LINNBR = 0

I = 0
STARTCOL = SCOL
ENDCOL   = ECOL
DO I = STARTCOL TO ENDCOL
    CALL DETERMINE_STRING_AND_LENGTH
END

RETURN
/**/
/**/
/**/
/**/
/**/
DETERMINE_SNIP_ORDER:
/*------------------------------------------------------------------*/
/*    IT IS POSSIBLE THAT THE LATTER OF THE 2 SNIP COMMANDS COULD   */
/*    HAVE OCCURRED CLOSER TO THE TOP OF THE FILE.  IN ORDER TO     */
/*    MAKE THE PROGRAMMING THE SAME, WE WILL SWITCH THE VALUES OF   */
/*    THE CURSOR LOCATIONS SO THE LATTER SNIP WILL APPEAR AS IF IT  */
/*    WERE THE FIRST SNIP.                                          */
/*------------------------------------------------------------------*/
IF SCOL > ECOL THEN
    DO
      HOLDCOL = SCOL            /*  MOVE THE START COLUMN TO HOLD  */
      HOLDROW = SROW            /*  MOVE THE START ROW TO HOLD     */
      SCOL = ECOL               /*  OVERLAY START COLUMN WITH END  */
      SROW = EROW               /*  OVERLAY START ROW WITH END     */
      ECOL = HOLDCOL            /*  OVERLAY END COLUMN WITH HOLD   */
      EROW = HOLDROW            /*  OVERLAY END ROW WITH HOLD      */
    END

IF SROW > EROW THEN
    DO
      HOLDROW = SROW            /*  MOVE THE START ROW TO HOLD     */
      SROW = EROW               /*  OVERLAY START ROW WITH END     */
      EROW = HOLDROW            /*  OVERLAY END ROW WITH HOLD      */
    END

STRLGTH = (EROW - SROW) + 1
RETURN
/**/
/**/
/**/
/**/
/**/
DETERMINE_STRING_AND_LENGTH:
/*------------------------------------------------------------------*/
/*    THIS MODULE WILL REPOSITION THE CURSOR ON EACH LINE BEING     */
/*    SNIPPED AND WILL SNIP OUT THE SECTION OF CODE SELECTED BY     */
/*    THE USER AND PLACE IT ON THE PROFILE.                         */
/*------------------------------------------------------------------*/
"ISREDIT CURSOR = &SCOL"
"ISREDIT (LINEDATA) = LINE &I"

 LINNBR = LINNBR + 1
 SNIP = SUBSTR(LINEDATA,SROW,STRLGTH)
 INTERPRET "SNIP"LINNBR" = SNIP"

 "VPUT (SNIP"LINNBR") PROFILE"


RETURN
/**/
/**/
/**/
/**/
/**/
INITIALIZE_SNIP_POSITIONS:
/*------------------------------------------------------------------*/
/*    THIS MODULE WILL INITIALIZE VALUES THAT NEED TO BE RESET      */
/*    PRIOR TO THE NEXT SNIP.  IT WILL ALSO STORE THE LARGEST       */
/*    LINE NUMBER UP TO THIS POINT ON THE PROFILE.                  */
/*------------------------------------------------------------------*/
"VERASE (SCOL SROW ECOL EROW) PROFILE"
"VPUT (LINNBR) PROFILE"

RETURN
/**/
/**/
/**/
/**/
/**/
ERASE_SNIPPED_LINES:
/*------------------------------------------------------------------*/
/*    THIS PARAGRAPH WILL ERASE THE STRINGS THAT WE SNIPPED BEFORE  */
/*    LEAVING THE PROGRAM.                                          */
/*------------------------------------------------------------------*/
    UPPER MOVESW
    IF MOVESW = 'MOVE' | MOVESW = 'M' THEN
        DO P = SCOL TO ECOL
            CALL CHANGE_STRINGS_TO_SPACES
        END

RETURN
/**/
/**/
/**/
/**/
/**/
CHANGE_STRINGS_TO_SPACES:
/*------------------------------------------------------------------*/
/*    THIS PARAGRAPH IS PERFORMED IF A "MOVE" IS REQUESTED.  IT     */
/*    WILL SPACE OUT THE AREA THAT HAS BEEN SNIPPED BEFORE BEING    */
/*    GLUED.                                                        */
/*------------------------------------------------------------------*/
"ISREDIT (OLDDATA) = LINE &P"
OLDSTRG = SUBSTR(OLDDATA,SROW,STRLGTH)
NEWSTRG = COPIES(' ',STRLGTH)
NEWSTRG = "'"NEWSTRG"'"
"ISREDIT CURSOR = &P &SROW"
"ISREDIT CHANGE '&OLDSTRG' &NEWSTRG"

RETURN


GLUE Command:

Code:

/***************************** REXX ***********************************/
/*                                                                    */
/*    COMMAND NAME: GLUE                                              */
/*    WRITTEN BY:   JIM HAIRE                                         */
/*                                                                    */
/*    FORMAT:                                                         */
/*        TYPE "GLUE <KEEP>" ON COMMAND LINE                          */
/*                                                                    */
/*        THEN PLACE THE CURSOR SOMEWHERE WITHIN YOUR EDIT SESSION    */
/*        WHERE YOU WISH TO PUT THE CONTENTS OF THE PROFILE.  ANY     */
/*        LINES WHICH YOU HAVE PLACED IN THE PROFILE USING THE        */
/*        "SNIP" COMMAND WILL BE GLUED TO THE SPOT MARKED BY THE      */
/*        CURSOR.  "BEFORE" AND "AFTER" LINE COMMANDS CAN BE USED     */
/*        TO INSERT THE "SNIPPED" LINES INTO THE PROPER POSITION.     */
/*        IF NO LINE COMMANDS ARE USED, THE GLUE COMMAND WILL         */
/*        OVERLAY THE AREA WITH THE DATA FROM THE PROFILE.            */
/*                                                                    */
/*                                                                    */
/*    ARGUMENT LIST:                                                  */
/*        <KEEP> - IF YOU TYPE "K" OR "KEEP" AFTER THE "GLUE"         */
/*                 COMMAND, THE LINES THAT YOU GLUE WILL REMAIN       */
/*                 IN THE PROFILE.  OTHERWISE, THEY WILL BE ERASED    */
/*                 FROM THE PROFILE AFTER THEY HAVE BEEN "GLUED".     */
/*                                                                    */
/*                                                                    */
/*    DESCRIPTION:                                                    */
/*       THIS EDIT MACRO WILL ALLOW YOU TO TAKE THE PIECES OF CODE    */
/*       THAT HAVE BEEN CUT OUT WITH THE "SNIP" COMMAND AND ATTACH    */
/*       THEM TO ANOTHER FILE OR PROGRAM.                             */
/*                                                                    */
/*                                                                    */
/**********************************************************************/
/*--------------------------------------------------------------------*/
/*    THIS PARAGRAPH WILL CHECK THE SCREEN FOR LINE COMMANDS AND THE  */
/*    PROFILE FOR LINES TO BE GLUED.                                  */
/*--------------------------------------------------------------------*/
ADDRESS ISPEXEC
"ISREDIT MACRO NOPROCESS (KEEPSW)"
"ISREDIT (GLUESTAT) = USER_STATE"
/*--------------------------------------------------------------------*/
/*    GET THE LINE NUMBER FROM THE PROFILE.  THIS WILL TELL YOU HOW   */
/*    MANY LINES WE ARE ATTEMPTING TO GLUE.                           */
/*--------------------------------------------------------------------*/
"VGET (LINNBR) PROFILE"
IF LINNBR <= 0 THEN
    DO
      "ISREDIT (GLUECOL,GLUEROW) = CURSOR"
      ADDRESS ISPEXEC
      ZEDSMSG = 'NO LINES IN PROFILE'
      ZEDLMSG = '"SNIP" COMMAND MUST CUT LINES TO PROFILE '
      ZEDLMSG = ZEDLMSG || 'BEFORE USING "GLUE" COMMAND.'
      'SETMSG MSG(ISRZ001)'
      "ISREDIT CURSOR = &GLUECOL &GLUEROW"
      EXIT 12
    END

CALL DETERMINE_CURRENT_MEMBER

/*--------------------------------------------------------------------*/
/*    GET THE NUMBER OF GLUE POINTS THAT HAVE BEEN SET IN THE         */
/*    PROFILE.  GLUE POINTS ESTABLISH POSITIONS WITHIN YOUR EDIT      */
/*    MEMBER WHERE YOU WISH TO APPEND LINES.                          */
/*--------------------------------------------------------------------*/
"VGET (SETPOINT) PROFILE"
IF SETPOINT <= 0 THEN
    DO
      "ISREDIT PROCESS RANGE A B"
      "ISREDIT (CMDLINE) = LINENUM .ZLRANGE"
      "ISREDIT (LINECMD) = RANGE_CMD"
      CALL CHECK_CURSOR_POSITION
      CALL GLUE_THE_LINES
    END
ELSE
    DO
      "ISREDIT PROCESS RANGE A B"
      "ISREDIT (LINECMD) = RANGE_CMD"
      IF LINECMD = ' ' THEN
          DO
            DO GP = 1 TO SETPOINT
            DO GP = 1 TO SETPOINT
              "VGET (SETL"GP" SETC"GP") PROFILE"
              INTERPRET "GLUECOL = SETL"GP
              INTERPRET "GLUEROW = SETC"GP
              "ISREDIT (CMDLINE) = LINENUM .ZLRANGE"
              IF GLUECOL <= CMDLINE THEN CURSOR_PAST_EOF = 'N'
              "ISREDIT CURSOR = &GLUECOL &GLUEROW"
              CALL CHECK_FOR_TRUNCATION
              CALL GLUE_MULTIPLE_LINES
            END
            ORIGCOL = SETL1
            ORIGROW = SETC1
          END
      ELSE
          DO
            ADDRESS ISPEXEC
            ZEDSMSG = 'PF1 FOR ERROR'
            ZEDLMSG = 'LINE COMMANDS CANNOT BE USED WHEN USING GLUE '
            ZEDLMSG = ZEDLMSG || 'POINTS.  STRANGE RESULTS MAY OCCUR.'
            'SETMSG MSG(ISRZ001)'
            "ISREDIT CURSOR = .ZLRANGE"
            EXIT 12
          END
    END

CALL ERASE_PROFILE


SKIPIT:
  "ISREDIT USER_STATE = (GLUESTAT)"
  CALL REPOSITION_CURSOR
EXIT
/**/
/**/
/**/
/**/
/**/
DETERMINE_CURRENT_MEMBER:
/*--------------------------------------------------------------------*/
/*    THIS PARAGRAPH DETERMINES THE NAME OF THE CURRENT FILE AND      */
/*    WILL RETRIEVE INFORMATION ABOUT THE LENGTH OF THE RECORDS ON    */
/*    THE FILE SO WE CAN TELL IF WE ARE TRUNCATING LINES OR NOT.      */
/*--------------------------------------------------------------------*/
ADDRESS ISPEXEC
"ISREDIT (DSNAME) = DATASET"
"ISREDIT (MEMNAME) = MEMBER"

IF MEMNAME = ' ' THEN
    DSET = DSNAME
ELSE
    DSET = DSNAME"("MEMNAME")"

X = LISTDSI("'"DSET"'")

RETURN
/**/
/**/
/**/
/**/
/**/
CHECK_CURSOR_POSITION:
/*--------------------------------------------------------------------*/
/*    THIS PARAGRAPH DETERMINES IF THE CURSOR IS IN A VALID POSITION  */
/*    TO INSERT RECORDS.                                              */
/*--------------------------------------------------------------------*/
ADDRESS ISPEXEC
    "ISREDIT (GLUECOL,GLUEROW) = CURSOR"
    IF GLUECOL > 0 & GLUEROW > 0 THEN
        DO
          ORIGCOL = GLUECOL
          ORIGROW = GLUEROW
        END
    ELSE
        DO
          ADDRESS ISPEXEC
          ZEDSMSG = 'PF1 FOR ERROR'
          ZEDLMSG = 'PLACE CURSOR SOMEWHERE WITHIN THE MEMBER YOU'
          ZEDLMSG = ZEDLMSG || ' ARE EDITING.'
          'SETMSG MSG(ISRZ001)'
          EXIT 12
        END

CALL CHECK_FOR_TRUNCATION

RETURN
/**/
/**/
/**/
/**/
/**/
CHECK_FOR_TRUNCATION:
/*------------------------------------------------------------------*/
/*    THIS PARAGRAPH WILL CHECK THAT NONE OF THE LINES WILL BE      */
/*    TRUNCATED IF PLACED ON THE FILE WHERE THE USER HAS PUT THE    */
/*    CURSOR.  SINCE THE LINES ARE GOING TO START FROM THE CURSOR   */
/*    POSITION IN ALL CASES, WE CAN DETERMINE TRUNCATION BY ADDING  */
/*    EACH LINE'S LENGTH TO THE CURSOR POSITION.                    */
/*    IF THIS CALCULATION IS GREATER THAN THE LOGICAL RECORD        */
/*    LENGTH, AN ERROR WINDOW WILL APPEAR.                          */
/*                                                                  */
/*    THE DATASET BEING EDITED IS ALSO CHECKED TO SEE IF IT IS      */
/*    IN NUMBER MODE, THAT IS, TO SEE IF THE LAST EIGHT CHARACTERS  */
/*    OF THE DATASET CONTAIN LINE NUMBERS.  IF THEY DO, THE         */
/*    LENGTH OF THE DATASET WILL BE INTERPRETED TO BE SHORTER BY    */
/*    EIGHT CHARACTERS.                                             */
/*------------------------------------------------------------------*/
DROP T
DO T = 1 TO LINNBR
    "VGET (SNIP"T") PROFILE"
    INTERPRET "PROFILE_STRING =  SNIP"T
    STRLGTH = LENGTH(PROFILE_STRING)
    ANYCHAR = COPIES('=',STRLGTH)

    "ISREDIT (NUMMODE,NUMSTATS) = NUMBER"
    IF SYSLRECL <= ' ' THEN
        REAL_SYSLRECL = 80
    ELSE
        IF NUMMODE = 'ON' THEN
            REAL_SYSLRECL = SYSLRECL - 8
        ELSE
            REAL_SYSLRECL = SYSLRECL

    LCHARPOS  = GLUEROW + STRLGTH - 1
    IF LCHARPOS > REAL_SYSLRECL THEN
        DO
          ADDRESS ISPEXEC
          ZEDSMSG = 'PF1 FOR ERROR'
          ZEDLMSG = 'LINES EXTEND PAST END OF RECORD CAUSING TRUNCATION'
          'SETMSG MSG(ISRZ001)'
          "ISREDIT CURSOR = &GLUECOL &GLUEROW"
          EXIT 12
        END
END

RETURN
/**/
/**/
/**/
/**/
/**/
GLUE_THE_LINES:
/*------------------------------------------------------------------*/
/*    THIS PARAGRAPH WILL ATTACH THE LINES TO EVERY POSITION YOU    */
/*    HAVE INDICATED YOU WANT THE SNIPPED LINES TO BE PLACED.       */
/*------------------------------------------------------------------*/
"ISREDIT (CURRLINE) = LINENUM .ZLRANGE"
DROP P
DO P = 1 TO LINNBR
    INTERPRET "NEWSTRG = SNIP"P
    CALL DETERMINE_QUOTE_TO_USE
    SELECT
      WHEN LINECMD = 'A' THEN
        DO
          "ISREDIT LINE_AFTER &CURRLINE = <&GLUEROW,&QTE&NEWSTRG&QTE>"
          CALL PUT_BACK_AMPERSANDS
          CURRLINE = CURRLINE + 1
        END
      WHEN LINECMD = 'B' THEN
        DO
          "ISREDIT LINE_BEFORE &CURRLINE = &GLUEROW,&QTE&NEWSTRG&QTE>"
          CALL PUT_BACK_AMPERSANDS
          CURRLINE = CURRLINE + 1
        END
      WHEN LINECMD = ' ' THEN
        IF CURSOR_PAST_EOF = 'Y' THEN
          DO
           "ISREDIT LINE_AFTER &CURRLINE = <&GLUEROW,&QTE&NEWSTRG&QTE>"
           CALL PUT_BACK_AMPERSANDS
           CURRLINE = CURRLINE + 1
          END
        ELSE
            CALL CHANGE_THE_FILE
      OTHERWISE
          ADDRESS ISPEXEC
          ZEDSMSG = 'PF1 FOR ERROR'
          ZEDLMSG = 'ONLY USE (B) BEFORE AND (A) AFTER COMMANDS WHEN '
          ZEDLMSG = ZEDLMSG || 'USING "GLUE" COMMAND.'
          'SETMSG MSG(ISRZ001)'
          "ISREDIT CURSOR = .ZLRANGE"
          EXIT 12
    END
END

RETURN
/**/
/**/
/**/
/**/
/**/
GLUE_MULTIPLE_LINES:
/*------------------------------------------------------------------*/
/*    THIS PARAGRAPH WILL BE PERFORMED WHEN YOU USE THE GLUE        */
/*    POINTS FEATURE.  IT WILL PREVENT LINE COMMANDS FROM BEING     */
/*    USED.                                                         */
/*------------------------------------------------------------------*/
"ISREDIT (CURRLINE) = LINENUM &GLUECOL"
DROP P
DO P = 1 TO LINNBR
    INTERPRET "NEWSTRG = SNIP"P
    CALL DETERMINE_QUOTE_TO_USE
    IF CURSOR_PAST_EOF = 'Y' THEN
        DO
          "ISREDIT LINE_AFTER &CURRLINE = <&GLUEROW,&QTE&NEWSTRG&QTE>"
          CALL PUT_BACK_AMPERSANDS
          CURRLINE = CURRLINE + 1
        END
    ELSE
        CALL CHANGE_THE_FILE
END

RETURN
/**/
/**/
/**/
/**/
/**/
CHANGE_THE_FILE:
/*------------------------------------------------------------------*/
/*    THIS PARAGRAPH WILL DO A CHANGE AGAINST THE FILE SO THAT      */
/*    THE LINES THAT HAVE BEEN SNIPPED WILL NOW BECOME PART OF      */
/*    THE FILE YOU ARE EDITING.                                     */
/*------------------------------------------------------------------*/
 "ISREDIT (CURRDATA) = LINE &GLUECOL"

 CALL GET_RID_OF_AMPERSANDS
 CALL PUT_BACK_AMPERSANDS

 GLUECOL = GLUECOL + 1
 IF GLUECOL > CMDLINE THEN CURSOR_PAST_EOF = 'Y'
 ELSE
     DO
       CURSOR_PAST_EOF = 'N'
       "ISREDIT CURSOR = &GLUECOL &GLUEROW"
     END


RETURN
/**/
/**/
/**/
/**/
/**/
DETERMINE_QUOTE_TO_USE:
/*--------------------------------------------------------------------*/
/*-                                                                  -*/
/*-     BECAUSE THE STRING THAT WE ARE CHANGING HAS TO BE ENCLOSED   -*/
/*-     IN QUOTES IN THE CHANGE COMMAND, THE REXX LANGUAGE BECOMES   -*/
/*-     CONFUSED IF THERE ARE QUOTES IN THE STRING.  THIS PARAGRAPH  -*/
/*-     ATTEMPTS TO BUILD THE STRING IN THE CORRECT WAY.             -*/
/*-                                                                  -*/
/*--------------------------------------------------------------------*/

    QPOS = 0 | DQPOS = 0

    QPOS = POS("'",NEWSTRG)
    DQPOS = POS('"',NEWSTRG)

    IF QPOS = 0 & DQPOS = 0 THEN
        QTE = "'"
    ELSE
        IF QPOS > DQPOS THEN
            QTE = '"'
        ELSE
            QTE = "'"

    NEWSTRG = TRANSLATE(NEWSTRG,'`','&')

RETURN
/**/
/**/
/**/
/**/
/**/
GET_RID_OF_AMPERSANDS:
/*--------------------------------------------------------------------*/
/*-                                                                  -*/
/*-     THIS PARAGRAPH CHANGE THE AMPERSANDS IN THE STRING TO A      -*/
/*-     SELDOM USED CHARACTER SO THE STRING CAN BE CHANGED.  THIS    -*/
/*-     IS BECAUSE AMPERSANDS ARE INTERPRETED AS SUBSTITUTION        -*/
/*-     VARIABLES IN EDIT MACROS.                                    -*/
/*-                                                                  -*/
/*--------------------------------------------------------------------*/
    ADDRESS ISPEXEC
    "ISREDIT CURSOR = &GLUECOL &GLUEROW"
    "ISREDIT CHANGE '&' '`' ALL"
    "ISREDIT CURSOR = &GLUECOL &GLUEROW"
    "ISREDIT CHANGE P'"ANYCHAR"' &QTE&NEWSTRG&QTE"

RETURN
/**/
/**/
/**/
/**/
/**/
PUT_BACK_AMPERSANDS:
/*--------------------------------------------------------------------*/
/*-                                                                  -*/
/*-     THIS PARAGRAPH WILL PUT BACK THE AMPERSANDS SO THE STRING    -*/
/*-     WILL APPEAR IN ITS ORIGINAL STATE.                           -*/
/*-                                                                  -*/
/*--------------------------------------------------------------------
    ADDRESS ISPEXEC
    "ISREDIT CURSOR = &GLUECOL &GLUEROW"
    "ISREDIT CHANGE '`' '&' ALL"

RETURN
/**/
/**/
/**/
/**/
/**/
ERASE_PROFILE:
/*------------------------------------------------------------------*/
/*    THIS PARAGRAPH WILL ERASE THE PROFILE UNLESS THE USER HAS     */
/*    REQUESTED THAT WE KEEP THE PROFILE.                           */
/*------------------------------------------------------------------*/
    UPPER KEEPSW
    IF KEEPSW = 'KEEP' | KEEPSW = 'K' THEN NOP
    ELSE
        DO
          "VERASE (SNIPSW MOVESW) PROFILE"
          DO J = 1 TO LINNBR
              "VERASE (SNIP"J") PROFILE"
          END
          "VERASE (LINNBR) PROFILE"
        END

    IF SETPOINT > 0 THEN
        DO J2 = 1 TO SETPOINT
            "VERASE (SETL"J2" SETC"J2") PROFILE"
        END
    ELSE
        NOP

    "VERASE (SETPOINT) PROFILE"

RETURN
/**/
/**/
/**/
/**/
/**/
REPOSITION_CURSOR:
/*------------------------------------------------------------------*/
/*    THIS PARAGRAPH REPOSITION THE CURSOR TO ITS ORIGINAL          */
/*    POSITION.                                                     */
/*------------------------------------------------------------------*/
"ISREDIT CURSOR = &ORIGCOL &ORIGROW"

RETURN
/**/
/**/
/**/
/**/
/**/
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> TSO and ISPF All times are GMT - 5 Hours
Goto page Previous  1, 2
Page 2 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group