In the spirit of MEMO XMASGIFT,
and just for the sake of completeness, I'll paste in my "ONELINE EXEC" 
(which uses CMPRREXX EXEC if it is accessed) and adds some minor, nice 
features with better identification of the source exec.

Mike Walter 
Hewitt Associates 
Any opinions expressed herein are mine alone and do not necessarily 
represent the opinions or policies of Hewitt Associates.

/* Prolog; See Epilog for additional information ********************
 * Exec Name     - ONELINE EXEC                                     *
 * Unit Support  - IS                                               *
 * Status        - Version 2, Release 1.3                           *
 ********************************************************************/
vers='V2R1.3'
   address COMMAND
   parse source . . xfn xft xfm .

   parse upper arg ifn ift ifm ofn oft ofm . '(' options ')'

   If ifn='' | ifn='?' then Signal Explain
   If ift=''           then ift='EXEC'
   If ifm=''           then ifm='*'
   If ofn='' | ofn='=' then ofn=ifn
   If oft='' | oft='*' then
      If ift='EXEC'
         then oft='1$EXEC'
         else If ift='XEDIT'
                 then oft='1$XEDIT'
                 else oft='ONELINE'

   If oft='=' then oft=ift
   If ofm=''  then ofm='A'
   If ofm='=' then ofm=ifm

  'PIPE' ,
     '| COMMAND LISTFILE' ifn ift ifm '(NOHEADER LABEL ISODATE' ,
     '| VAR indata'
   If rc<>0 then
      Do
        say indata
        Exit rc
      End
   parse var indata ifn ift ifm irecfm ilrecl irecs iblks ,
                    iisodate itime ilabel .
  'PIPE' ,
     '| COMMAND LISTFILE' ifn ift ifm '(NOHEADER LABEL' ,
     '| VAR indata'
   parse var indata .   .   .   .      .      .     .     ,
                    iudate   .     .

   say xfn xft 'processing input='ifn ift ifm', output='ofn oft ofm'.'

  'STATEW * *' ofm
   If rc<>0 then
      Do
        say 'Output filemode' ofm 'is not Linked/Accessed Read/Write.'
        Exit rc
      End

   ?replace=0
   ?newdate=0
   invopts=''
   Do while options<>''
      parse var options opt options
      Select
        When abbrev('REPLACE',opt,3) then ?replace=1
        When abbrev('NEWDATE',opt,4) then ?newdate=1
        Otherwise invopts=invopts opt
      End
   End
   If invopts<>'' then
      Do
        say 'Invalid options found:' strip(invopts,'B')
        Exit 20
      End

  'PIPE CMS LISTFILE' ofn oft ofm   /* STATE checks extensions, too */
   If rc=0 & \?replace then
      Do
        say ofn oft ofm 'already exists.  If not needed, use the',
            'REPLACE option.'
        Exit 12
      End
  'ERASE' ofn oft ofm

  'STATE CMPRREXX REXX *'             /* PIPE's compresser avail? */
   ?cmprrexx=(rc=0)

   /* Note: IBM's ONELINE EXEC leaves the first line that       */
   /* starts with: /**/  ---about 111 blanks--- trace o         */
   /* untouched.  IBM's ONELINE expects that the calling EXEC   */
   /* will replace that comment and blanks with some of it's    */
   /* own documentation.  Since the EXEC to be ONELINE'd may    */
   /* contain a comment block before that '/**/' line, we must  */
   /* check the first bunch (an arbitrary limit) of lines.      */
   /* IBM's ONELINE also appears to delete comments before the  */
   /* first: /**/                                               */

  'PIPE <' ifn ift ifm '| TAKE 20 | STEM rec.'
   parse var rec.1 w1 .
   parse var w1 w1 3 .
   If w1<>"/*" then
      Do
        say 'Input file:' ifn ift ifm 'does not begin with a REXX' ,
            'comment line.'
        Exit 16
      End

   ?IBMstyle=0
   Do ix=1 to rec.0
      parse upper var rec.ix w1 w2 w3 w4 w5
      If w1<>'/**/' | w2<>'TRACE' | w4<>'' then Iterate
      ?IBMstyle=1
      Leave
   End

   If \?cmprrexx then
      Do
        SIGNAL ON ERROR
         'COPYFILE' ifn ift ifm 'X$EUPD$X CMSUT1' ofm '(REPLACE'
        /* Following X$EUPD$X XEDIT S dated  7/22/04 and is used to */
        /* delete the standard (non-EXECUPDT "/*! */") comments.    */
        /* If a comment leads any command, the output can end up    */
        /* with spaces in front of it rather than left adjusted.    */
       'XEDIT X$EUPD$X CMSUT1' ofm '( PROF X$EUPD$X NOMSG ) 0'

       'PIPE < X$EUPD$X CMSUT1' ofm '| STEM rec.'
        /* Use of X$EUPD$X causes "IBMstyle" EXECs to have the 1st  */
        /* "IBMstyle" line broken into two lines, with the 1st line */
        /* being "/* X$EUPD$X CMSUT1 */" and the second line being  */
        /* a bunch of spaces ending with: trace 'o'.                */
        If ?IBMstyle then
           Do
             rec.1=left('/*' ifn ift '*/',131) "trace 'o'"
             rec.2=''
           End
        Else rec.1='/*' ifn ift '*/'
       'ERASE X$EUPD$X CMSUT1' ofm
      End


  /* Insert a "trace 'o'" for later diagnostic capabilities.   */
   isodate=date('S',date('U'),'U','-','/')
   If ?IBMstyle then longline=''          /* IBM will replace line 1 */
   Else
      longline='/*' ifn ift ifm 'processed by: ONELINE EXEC' vers ,
               '-' left(date('W'),3) isodate time() ,
               'Input was:' ifn ift ifm irecfm ilrecl irecs iblks ,
                iisodate itime ilabel '*/;/* trace 'o' */;'
   maxlrecl=65535

   If ?cmprrexx then
      Do                                      /* Do it the easy way */
        If ?IBMstyle then
          'PIPE (end ? long) <' ifn ift ifm ,
             '| FRLABEL /**/' ,               /* Skip all before    */
             '| hold: DROP 1' ,               /* Pass rec 1 thru    */
             '| CMPRREXX % NODATE' ,          /* Don't add date/time*/
             '| fin: FANIN 1 0' ,             /* Join rec 1 at start*/
             '| JOIN * /;/' ,                 /* Merge these, too   */
             '| >' ofn oft ofm 'F' ,  /* Fixed has no rec max */
             '? hold:' ,
               '| DROP 0' ,                   /* Just pass back rec */
               '| fin:'                       /* Return to main pipe*/
        Else
          'PIPE (long) <' ifn ift ifm ,       /* OK to be > 65K!    */
             '| CMPRREXX % NODATE' ,
             '| CHANGE コ/*   */ココ' ,          /* Del. CMPRREXX comnt*/
             '| CHANGE ココ'longline'コ' ,       /* Little more detail */
             '| >' ofn oft ofm 'F'       /* Fixed has no record max */
      End
   Else                                       /* The hard way...    */
      Do
       /* This routine packs the commands together with only a ';'  */
       /* between each command (no spaces).  Since it will add a    */
       /* ';' as a command separator, we will delete any trailing   */
       /* ';'s from the input record.                               */
       /* In addition, since commas used as command continuations   */
       /* are invalid on a single line, trailing commas are also    */
       /* deleted from the input.  Since an input record which had  */
       /* a trailing comma (which we deleted before adding the      */
       /* record to the longline) might happen to be the last       */
       /* command in 'longline' before it is written, we must keep  */
       /* track of whether the previous record had a continuation   */
       /* so the trailing ';' we added can be replaced by a ','.    */
       /* If the previous record ended with a quoted string and     */
       /* was continued to another quoted string, don't abutt the   */
       /* quotes (or two '' will be interpreted as a single '.      */
        If ?IBMstyle then begin=1
                    else begin=2
        Do ix=begin to rec.0
           If rec.ix='' then Iterate
           rec=strip(strip(rec.ix,'B'),'T',';')
           parse var rec char1 2 .
           revrec=reverse(rec)
           parse var revrec endchar 2 rest
           rest=strip(rest,'L')
           parse var rest endcharm1 2 .
           If endchar=',' then
              rec=strip(strip(rec,'T',','),'T')
           longlinelen=length(longline)
           If length(rec)+longlinelen > maxlrecl then
              Do
                If PrevRecEndChar=',' then
                   longline=overlay(',',longline,longlinelen,1)
               'EXECIO 1 DISKW' ofn oft ofm '(VAR LONGLINE'
                longline=rec||';'
              End
           Else
              Do
                reqblank=''
                If PrevRecEndChar=',' & (char1='"' | char1="'") & ,
                  (PrevRecEndCharM1="'" | PrevRecEndCharM1='"')  then
                   reqblank=' '
                If endchar=','
                   then longline=longline||reqblank||rec||' '
                   else longline=longline||reqblank||rec||';'
              End
           PrevRecEndChar=endchar
           PrevRecEndCharM1=endcharm1
        End
        If longline<>'' then
          'EXECIO 1 DISKW' ofn oft ofm '(FINIS VAR LONGLINE'
   End

   If \?newdate then
     'DMSPLU'   ofn oft ofm right(iudate,8,0) right(itime,8,0)
   SIGNAL OFF Error
Exit rc


Error:
   say xfn xft 'failed at line' sigl', the contents of that line were:'
   say sourceline(sigl)
Exit rc


Explain:
   say 'The ONELINE EXEC is used to compress other EXECs into'
   say 'one long line.  This is done by using PIPEs CMPRREXX if,'
   say 'available, or by using EXECUPDT logic to delete all'
   say 'comments (except those in EXECUPDT-type format where'
   say 'comments begin in column 1 with: /*! ), all blank lines'
   say 'and all leading and trailing blanks on each record.'
   say
   say 'The resultant records are packed together on one line with'
   say 'REXX''s instruction separator ";" between them.'
   say
   say 'Lines continued with a "," are handled properly.'
   say 'If the resultant line exceeds 65,535 bytes, it is broken at'
   say 'suitable points into additional long records.'
   say
   say 'The command syntax is (defaults are underlined):'
   say '                                    ----------'
   say
   say 'ONELINE in_fname <EXEC|in_ftype> <*|in_fmode>'
   say '                  ----            -          '
   say
   say '        <=|out_fname> <1$EXEC|1$XEDIT|ONELINE|=|*|out_ftype>' ,
                                                    '<A|=|out_fmode>'
   say '         -             ______ _______ _______             ' ,
                                                    ' _ '
   say
   say '       <( <REPlace> <NEWDate> >'
   say
Exit

/* Epilog ***********************************************************
 * Function      - Compress EXECs into one long line to speed       *
 *                 initiation (single I/O).  Also produces a more   *
 *                 difficult EXEC to 'swipe' and diagnose.          *
 * Component of  - System Programmer's Tool Kit                     *
 * Command format- See 'Explain', above.                            *
 * Called by     - Smart Systems Programmers                        *
 * Dependencies  - VM/SP 3 or higher.                               *
 *               - X$EUPD$X XEDIT S (part of EXECUPDT EXEC)         *
 * Program Lang. - CMS REXX                                         *
 * Date Written  - 12/20/91                                         *
 * Author        - Michael R. Walter                                *
 * Changed | By  | Description of Change                            *
 * --------+-----+------------------------------------------------- *
 * 01/07/92  mrw - Support IBM's (IBMstyle) commenting at start.    *
 * 06/11/93  mrw - Include 'LISTFILE ... (LABEL' stats in comment.  *
 * 06/23/93  mrw - Handle lines ending with: ,,                     *
 * 07/16/93  mrw - Prevent lines ending with: 'string',             *
 *                 continued with: 'more'                           *
 *                 from being concatenated as: 'string''more'       *
 *               - Default out_ftype for EXEC and XEDIT to          *
 *                 1$EXEC and 1$XEDIT respectively.                 *
 * 07/21/93  mrw - If out_ftype entered as '*', use computed out_ft *
 * 08/02/93  mrw - Add support for CMPRREXX REXX stage.             *
 * 10/28/93  mrw - More PIPEs, less EXECIO.                         *
 *               - Better handling of IBMstyle with CMPRREXX.       *
 *               - Remove CMPRREXX's date/time and '/*   */'        *
 * 07/01/99  mrw - Change COPYFILE (DATE to use DMSPLU.             *
 * 20010118  mrw - Default to OLDDATE                               *
 *               - Use isodate for commenting.                      *
 * 20071227  mrw - Chg boolean variables from $varname to ?varname  *
 *               - Correct spelling of IBM's ONELINE.               *
 *               - Change "logical not" char (not on PC keyboard,   *
 *                 often xlated wrong) to backslash.                *
 *                                                                  *
 ********************************************************************/




"Wakser, David" <[EMAIL PROTECTED]> 

Sent by: "The IBM z/VM Operating System" <IBMVM@LISTSERV.UARK.EDU>
12/27/2007 03:56 PM
Please respond to
"The IBM z/VM Operating System" <IBMVM@LISTSERV.UARK.EDU>



To
IBMVM@LISTSERV.UARK.EDU
cc

Subject
Re: EXEC to "compress" EXECs






Thanks, but I don't believe this will be a problem.
 
David Wakser

From: The IBM z/VM Operating System [mailto:[EMAIL PROTECTED] On 
Behalf Of Huegel, Thomas
Sent: Thursday, December 27, 2007 4:53 PM
To: IBMVM@LISTSERV.UARK.EDU
Subject: Re: EXEC to "compress" EXECs

I was playing with this and hit a 'gotcha'. 
If you have this call: SOURCELINE() it always returns one line which is 
now the whole program. 
Probably not used that often but it is something to be aware of. 
-----Original Message----- 
From: The IBM z/VM Operating System [mailto:[EMAIL PROTECTED] 
Behalf Of Wakser, David 
Sent: Tuesday, December 25, 2007 10:32 AM 
To: IBMVM@LISTSERV.UARK.EDU 
Subject: Re: EXEC to "compress" EXECs 

Thanks, Dave - I figured it out. 
David Wakser 
-----Original Message----- 
From: The IBM z/VM Operating System [mailto:[EMAIL PROTECTED] On 
Behalf Of Dave Jones 
Sent: Tuesday, December 25, 2007 11:28 AM 
To: IBMVM@LISTSERV.UARK.EDU 
Subject: Re: EXEC to "compress" EXECs 
Hi, David. 
You can invoke it like so: 
PIPE < rexx exec a | FPLCMPRX | > compressed_rexx exec a 
where "rexx exec a" is the Rexx exzec to be compressed. 
Merry Christmas. 
DJ 
Wakser, David wrote: 
> Thanks, Bruce! I found it and it sounds exactly what I need. Do I need 
> to re-name (or rather, copy) it to a type EXEC? Or is it meant to be 
> invoked by another program (like PIPES)? If the latter, how? 
> 
> David Wakser 
> 
> -----Original Message----- 
> From: The IBM z/VM Operating System [mailto:[EMAIL PROTECTED] 
> On Behalf Of Bruce Hayden 
> Sent: Tuesday, December 25, 2007 11:04 AM 
> To: IBMVM@LISTSERV.UARK.EDU 
> Subject: Re: EXEC to "compress" EXECs 
> 
> What you're looking for is FPLCMPRX REXX on the 190 (S) disk.  It was 
> renamed when Pipes was put into CMS. 
> 
> On Dec 24, 2007 5:28 PM, Wakser, David <[EMAIL PROTECTED]> 
> wrote: 
>> 
>> Do you know what the COMPREXX state is - referenced by someone else? 
>> It sounds exactly like what I am looking for. 
>> 
>> David Wakser 
> 
> -- 
> Bruce Hayden 
> Linux on System z Advanced Technical Support Endicott, NY 
-- 
DJ 
V/Soft 
   z/VM and mainframe Linux expertise, training, 
   consulting, and software development 
www.vsoft-software.com 


 
The information contained in this e-mail and any accompanying documents may 
contain information that is confidential or otherwise protected from 
disclosure. If you are not the intended recipient of this message, or if this 
message has been addressed to you in error, please immediately alert the sender 
by reply e-mail and then delete this message, including any attachments. Any 
dissemination, distribution or other use of the contents of this message by 
anyone other than the intended recipient is strictly prohibited. All messages 
sent to and from this e-mail address may be monitored as permitted by 
applicable law and regulations to ensure compliance with our internal policies 
and to protect our business. Emails are not secure and cannot be guaranteed to 
be error free as they can be intercepted, amended, lost or destroyed, or 
contain viruses. You are deemed to have accepted these risks if you communicate 
with us by email. 

Reply via email to