× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.


  • Subject: Re: QSCMATPG and QSCCRTPG
  • From: "Simon Coulter" <shc@xxxxxxxxxxxxxxxxx>
  • Date: Wed, 30 May 01 21:02:57 +1000

h
To All,

I found some old notes of mine regarding these programs so I thought I would 
incorporate them in the documentation I sent earlier.  The updates incorporate 
the supported special values and Gene's comment regarding LVLCHK(*NO).  At the 
end you will find CMD and CL source for using them which I wrote years ago, 
hence the code to cope with S/38 -- remember that :)

QSCMATPG

   
    1  Program name     Input    CHAR(10)  
   
    2  Library name     Input    CHAR(10)  
   
    3  File name        Input    CHAR(10)  
   
    4  File library     Input    CHAR(10)  
   
    5  Member name      Input    CHAR(10)  
   
    6  Member option    Input    CHAR(8)   
   

The Materialize Program (QSCMATPG) API retrieves the program template for an 
OPM 
program and places it in the specified file member.

Program name: The name of the program to materalize.

Library name: The name of the library containing the program. *LIBL is 
supported.

File name:    The name of the output file.  This is a physical file with a 
record length of 80 bytes and LVLCHK(*NO).  The file must exist before the API 
is called.

File library: The name of the library containing the output file.  *LIBL is 
supported.

Member name:  The name of the member to receive the program template.  *PGM 
causes the program template to be stored in a member with the same name as the 
program.

Member option: *ADD or *REPLACE



QSCCRTPG

   
    1  Program name     Input    CHAR(10)  
   
    2  Library name     Input    CHAR(10)  
   
    3  File name        Input    CHAR(10)  
   
    4  File library     Input    CHAR(10)  
   
    5  Member name      Input    CHAR(10)  
   

The Create Program (QSCCRTPG) API creates a program from the program template 
retrieved by the Materialise Program (QSCMATPG) API.  

Program name: The name of the program to create.

Library name: The name of the library to contain the program. Special values 
are 
not supported.

File name:    The name of the file containing the program template.  This is a 
physical file with a record length of 80 bytes.  The file must exist before the 
API is called.

File library: The name of the library containing the file.  *LIBL is supported.

Member name:  The name of the member containing the program template.  *PGM 
uses 
a member with the same name as the program.


Example code:

 MATPG:      CMD        PROMPT('Materialise Program Template')        
                                                                      
             PARM       KWD(PGM) TYPE(Q1) MIN(1) PROMPT('Program')    
                                                                      
             PARM       KWD(FILE) TYPE(Q2) MIN(1) PROMPT('File')      
                                                                      
             PARM       KWD(MBR) TYPE(*NAME) DFT(*PGM) SPCVAL((*PGM) +
                          (*FILE)) EXPR(*YES) PROMPT('Member')        
                                                                      
             PARM       KWD(MBROPT) TYPE(*CHAR) LEN(8) RSTD(*YES) +   
                          DFT(*REPLACE) VALUES(*REPLACE *ADD) +       
                          PROMPT('Replace or add records')            
                                                                      
 Q1:         QUAL       TYPE(*NAME) MIN(1) EXPR(*YES)                 
             hUAL       TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL)) +      
                          EXPR(*YES) PROMPT('Library')                
                                                                      
 Q2:         QUAL       TYPE(*NAME) MIN(1) EXPR(*YES)                 
             QUAL       TYPE(*NAME) DFT(*CURLIB) SPCVAL((*CURLIB +    
                          *CURLIB) (*LIBL)) EXPR(*YES) +              
                          PROMPT('Library')                           

 MATPGC:     PGM        PARM(&QUALPGM &QUALFILE &MBR &MBROPT)         
                                                                      
/*                                                                 */ 
/*----------------- Input Parameter Declarations ------------------*/ 
/*                                                                 */ 
             DCL        VAR(&QUALPGM) TYPE(*CHAR) LEN(20)             
             /* NameLibrary */                                        
             DCL        VAR(&QUALFILE) TYPE(*CHAR) LEN(20)            
             /* NameLibrary */                                        
             DCL        VAR(&MBR) TYPE(*CHAR) LEN(10)                 
             /* Work file member */                                   
             DCL        VAR(&MBROPT) TYPE(*CHAR) LEN(8)               
             /* *ADD or *REPLACE */                                   
                                                                      
/*                                                                 */ 
/*-------------------- Program Declarations -----------------------*/ 
/*                                                                 */ 
             DCL        VAR(&PGM) TYPE(*CHAR) LEN(10)                 
             DCL        VAR(&PLIB) TYPE(*CHAR) LEN(10)                
             DCL        VAR(&FILE) TYPE(*CHAR) LEN(10)                
             /* Program template work file */                         
             DCL        VAR(&FLIB) TYPE(*CHAR) LEN(10)                
             /* Work file library */                                  
             DCL        VAR(&REALLIB) TYPE(*CHAR) LEN(10) /* Actual + 
                          library containing program (for *LIBL +     
                          search) */                                  
             DCL        VAR(&MSGTYPE) TYPE(*CHAR) LEN(5)              
             DCL        VAR(&IGC) TYPE(*CHAR) LEN(1)                  
                                                                      
/*                                                                 */ 
/*----------------- Mnemonic Value Declarations -------------------*/ 
/*                                                                 */ 
             DCL        VAR(&BLANK) TYPE(*CHAR) LEN(1) VALUE(X'40')   
                       /* Mnemonic for 'blank' */                     
             DCL        VAR(&TRUE) TYPE(*LGL) LEN(1) VALUE('1') 
                       /* Mnemonic for 'true' */                      
             DCL        VAR(&FALSE) TYPE(*LGL) LEN(1) VALUE('0')
                       /* Mnemonic for 'false' */                     
             DCL        VAR(&ERROR) TYPE(*LGL) LEN(1)                 
                       /* Mnemonic for 'error' */                     
                                                                      
/*                                                                 */   
/*-------------- Global Message Monitor Declarations --------------*/   
/*                                                                 */   
             DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(40)                
             DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                  
             DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)                  
             DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)               
                                                                        
/*                                                                 */  h
/*--------------- Global Message Monitor Intercept ----------------*/   
/*                                                                 */   
             MONMSG     MSGID(CPF0000 MCH0000) EXEC(GOTO CMDLBL(ERROR)) 
                                                                        
/* Substring out the program and library names */                       
             CHGVAR     VAR(&PGM) VALUE(%SST(&QUALPGM 1 10))            
             CHGVAR     VAR(&PLIB) VALUE(%SST(&QUALPGM 11 10))          
             CHGVAR     VAR(&REALLIB) VALUE(&PLIB)                      
             CHGVAR     VAR(&FILE) VALUE(%SST(&QUALFILE 1 10))          
             CHGVAR     VAR(&FLIB) VALUE(%SST(&QUALFILE 11 10))         
                                                                        
/* Handle special values from command definition */                     
             IF         COND(&MBR *EQ '*PGM') THEN(DO)                  
               CHGVAR     VAR(&MBR) VALUE(&PGM)                         
             ENDDO                                                      
             IF         COND(&MBR *EQ '*FILE') THEN(DO)          
               CHGVAR     VAR(&MBR) VALUE(&FILE)                 
             ENDDO                                               
                                                                 
/* ********************************************************** */ 
/* If '*LIBL' was passed in for library, get the name of the  */ 
/* actual library containing the program.                     */ 
/*                                                            */ 
/* The trick to determining the library of an existing object */ 
/* is as follows:                                             */ 
/*                                                            */ 
/*  1. Rename the object to itself                            */ 
/*  2. CPF returns a message informing that the object was    */ 
/*      not renamed.                                          */ 
/*     On the AS/400, an escape message is sent.              */ 
/*     On the S/38, an informational message is sent          */ 
/*     This code section works on either machine.             */ 
/*  3. The library of the object is in positions 11 - 20      */ 
/*      of the message data associated with the message.      */ 
/* ********************************************************** */ 
             IF         COND(&REALLIB *EQ '*LIBL') THEN(DO)      
               CHGVAR     VAR(&MSGTYPE) VALUE('*INFO')           
               RNMOBJ     OBJ(&PGM) OBJTYPE(*PGM) NEWOBJ(&PGM)   
               MONMSG     MSGID(CPF2132) EXEC(DO)                
                 CHGVAR     VAR(&MSGTYPE) VALUE('*EXCP')                   
               ENDDO                                                       
                                                                           
               RCVMSG     MSGTYPE(&MSGTYPE) MSGDTA(&MSGDTA) MSGID(&MSGID)  
               CHGVAR     VAR(&REALLIB) VALUE(%SST(&MSGDTA 11 10))         
             ENDDO      /* RealLib */                                      
                                                                           
/* Allocate the program */                                                 
             ALCOBJ     OBJ((&REALLIB/&PGM *PGM *EXCL))                    
                                                                           
/* Ensure work file and member exist */                                    
             CHKOBJ     OBJ(&FLIB/&FILE) OBJTYPE(*FILE)                    
             MONMSG     MSGID(CPF9801) EXEC(DO)                            
               RCVMSG     MSGTYPE(*LAST)                              
               RTVSYSVAL  SYSVAL(QIGC) RTNVAR(&IGC)                        
               IF         COND(&IGC *EQ '1') THEN(DO)                      
                 CRTPF      FILE(&FLIB/&FILE) RCDLEN(80) MBR(&MBR) +       
                              TEXT('Work file for MATPG/CRTPG command.'h + 
                              OPTION(*NOLIST *NOSOURCE) MAXMBRS(*NOMAX) +  
                              SIZE(*NOMAX) LVLCHK(*NO) IGCDTA(*YES)        
               ENDDO                                                       
               ELSE       CMD(DO)                                          
                 CRTPF      FILE(&FLIB/&FILE) RCDLEN(80) MBR(&MBR) +       
                              TEXT('Work file for MATPG/CRTPG command.') + 
                              OPTION(*NOLIST *NOSOURCE) MAXMBRS(*NOMAX) +  
                              SIZE(*NOMAX) LVLCHK(*NO)                
               ENDDO                                                  
             ENDDO                                                    
                                                                      
             CLRPFM     FILE(&FLIB/&FILE) MBR(&MBR)                   
             MONMSG     MSGID(CPF3141) EXEC(DO)                       
               RCVMSG     MSGTYPE(*LAST)                              
               ADDPFM     FILE(&FLIB/&FILE) MBR(&MBR)                 
             ENDDO                                                    
                                                                      
/* ************************************************************ */    
/* Call the CPF module to materialise the program.              */    
/* This will convert the internal representation of the program */    
/* into an external form we can modify.                         */    
/* The materialised information is placed in the work file.     */    
/* Note:- this interface is not supported after V2R1.1.         */    
/* ************************************************************ */    
             CALL       PGM(QSCMATPG) PARM(&PGM &REALLIB &FILE +      
                          &FLIB &MBR &MBROPT)                         
                                                                      
/*                                                                 */ 
/*--------------------- Send User a Message -----------------------*/ 
/*                                                                 */ 
             SNDPGMMSG  MSGID(CPF9898) MSGF(QCPFMSG) +                
                          MSGDTA('Program' *BCAT &PGM *BCAT 'in' +     
                          *BCAT &REALLIB *BCAT 'materialised in +      
                          member' *BCAT &MBR *BCAT 'in file' *BCAT +   
                          &FILE *BCAT 'in' *BCAT &FLIB) MSGTYPE(*COMP) 
                                                                       
 EXIT:       RETURN     /* Normal end of program */                    
                                                                       
/*                                                                 */  
/*---------------------- Exception Routine ------------------------*/  
/*                                                                 */  
 ERROR:      RCVMSG     MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) + 
                          MSGF(&MSGF) MSGFLIB(&MSGFLIB)                
             MONMSG     MSGID(CPF0000 MCH0000) EXEC(RETURN) 
                        /* Just in case */                                   
             IF         COND(&MSGID *NE &BLANK) THEN(DO)                
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +           
                          MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)             
             MONMSG     MSGID(CPF0000 MCH0000) EXEC(RETURN)
                        /* Just in case */                                   
             ENDDO                                                     
                                                                       
 MATPGX:     ENDPGM                                                    

                                                                        
 CRTPG:      CMD        PROMPT('Create Program from Template')         
                                                                       
     h       PARM       KWD(PGM) TYPE(Q1) MIN(1) PROMPT('Program')     
                                                                       
             PARM       KWD(FILE) TYPE(Q2) MIN(1) PROMPT('File')       
                                                                       
             PARM       KWD(MBR) TYPE(*NAME) DFT(*PGM) SPCVAL((*PGM) + 
                          (*FILE)) EXPR(*YES) PROMPT('Member')         
                                                                       
 Q1:         QUAL       TYPE(*NAME) MIN(1) EXPR(*YES)                  
             QUAL       TYPE(*NAME) DFT(*CURLIB) SPCVAL((*CURLIB +     
                          *CURLIB)) EXPR(*YES) PROMPT('Library')       
                                                                       
 Q2:         QUAL       TYPE(*NAME) MIN(1) EXPR(*YES)                  
             QUAL       TYPE(*NAME) DFT(*LIBL) SPCVAL((*LIBL) +        
                          (*CURLIB *CURLIB)) EXPR(*YES) +              
                          PROMPT('Library')                            

  CRTPGC:     PGM        PARM(&QUALPGM &QUALFILE &MBR)                 
                                                                       
 /*                                                                 */ 
 /*----------------- Input Parameter Declarations ------------------*/ 
 /*                                                                 */ 
              DCL        VAR(&QUALPGM) TYPE(*CHAR) LEN(20)             
              /* NameLibrary */                                        
              DCL        VAR(&QUALFILE) TYPE(*CHAR) LEN(20)            
              /* NameLibrary */                                        
              DCL        VAR(&MBR) TYPE(*CHAR) LEN(10)                 
              /* Work file member */                                   
                                                                       
 /*                                                                 */ 
 /*-------------------- Program Declarations -----------------------*/ 
 /*                                                                 */ 
              DCL        VAR(&PGM) TYPE(*CHAR) LEN(10)                 
              DCL        VAR(&PLIB) TYPE(*CHAR) LEN(10)                
              DCL        VAR(&FILE) TYPE(*CHAR) LEN(10)                
              /* Program template work file */                         
              DCL        VAR(&FLIB) TYPE(*CHAR) LEN(10)                
              /* Work file library */                                  
              DCL        VAR(&REALLIB) TYPE(*CHAR) LEN(10) /* Actual + 
                           library containing file (for *LIBL +        
                           search) */                                  
             DCL        VAR(&MSGTYPE) TYPE(*CHAR) LEN(5)              
                                                                      
             DCLF       FILE(QADSPOBJ)                                
                                                                      
/*                                                                 */ 
/*----------------- Mnemonic Value Declarations -------------------*/ 
/*                                                                 */ 
             DCL        VAR(&BLANK) TYPE(*CHAR) LEN(1) VALUE(X'40')   
                       /* Mnemonic for 'blank' */                     
             DCL        VAR(&TRUE) TYPE(*LGL) LEN(1) VALUE('1')   
                       /* Mnemonic for 'true' */                      
             DCL        VAR(&FALSE) TYPE(*LGL) LEN(1) VALUE('0') 
                       /* Mnemonic for 'false' */                     
             DCL        VAR(&ERROR) TYPE(*LGL) LEN(1)                 
                       /* Mnemonic for 'error' */                     
                                                                      
/*                                                                 */ 
/*-------------- Global Message Monithr Declarations --------------*/ 
 /*                                                                 */   
              DCL        VAR(&MSGDTA) TYPE(*CHAR) LEN(40)                
              DCL        VAR(&MSGID) TYPE(*CHAR) LEN(7)                  
              DCL        VAR(&MSGF) TYPE(*CHAR) LEN(10)                  
              DCL        VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)               
                                                                         
 /*                                                                 */   
 /*--------------- Global Message Monitor Intercept ----------------*/   
 /*                                                                 */   
              MONMSG     MSGID(CPF0000 MCH0000) EXEC(GOTO CMDLBL(ERROR)) 
                                                                
 /* Substring out the program and library names */                       
              CHGVAR     VAR(&PGM) VALUE(%SST(&QUALPGM 1 10))            
              CHGVAR     VAR(&PLIB) VALUE(%SST(&QUALPGM 11 10))          
              CHGVAR     VAR(&FILE) VALUE(%SST(&QUALFILE 1 10))          
              CHGVAR     VAR(&FLIB) VALUE(%SST(&QUALFILE 11 10))         
              CHGVAR     VAR(&REALLIB) VALUE(&FLIB)                      
                                                                         
 /* Handle special values from command definition */                     
              IF         COND(&MBR *EQ '*PGM') THEN(DO)                  
                CHGVAR     VAR(&MBR) VALUE(&PGM)                         
              ENDDO                                                      
              IF         COND(&MBR *EQ '*FILE') THEN(DO)                 
                CHGVAR     VAR(&MBR) VALUE(&FILE)                       
             ENDDO                                                
                                                                  
/* ********************************************************** */  
/* If '*LIBL' was passed in for library, get the name of the  */  
/* actual library containing the file.                        */  
/*                                                            */  
/* The trick to determining the library of an existing object */  
/* is as follows:                                             */  
/*                                                            */  
/*  1. Rename the object to itself                            */  
/*  2. CPF returns a message informing that the object was    */  
/*      not renamed.                                          */  
/*     On the AS/400, an escape message is sent.              */  
/*     On the S/38, an informational message is sent          */  
/*     This code section works on either machine.             */  
/*  3. The library of the object is in positions 11 - 20      */  
/*      of the message data associated with the message.      */  
/* ********************************************************** */  
             IF         COND(&REALLIB *EQ '*LIBL') THEN(DO)       
               CHGVAR     VAR(&MSGTYPE) VALUE('*INFO')            
               RNMOBJ     OBJ(&FILE) OBJTYPE(*FILE) NEWOBJ(&FILE) 
               MONMSG     MSGID(CPF2132) EXEC(DO)                 
                 CHGVAR     VAR(&MSGTYPE) VALUE('*EXCP')          
               ENDDO                                              
                                                                          
               RCVMSG     MSGTYPE(&MSGTYPE) MSGDTA(&MSGDTA) MSGID(&MSGID) 
               CHGVAR     VAR(&REALLIB) VALUE(%SST(&MSGDTA 11 10))        
             ENDDO      /* RealLib */                                     
                                                                          
/* Allocate the program */                                                
             ALCOBJ     OBJ((&PLIB/&PGM *PGM *EXCL))                      
             MONMSG     MSGID(CPF1085) EXEC(DO)
               RCVMSG     MSGTYPE(*EXCP)                  h           
               GOTO       CMDLBL(CREATE) /* Not found */      
             ENDDO
                                                                          
/* Ensure work file and member exist */                                   
             CHKOBJ     OBJ(&REALLIB/&FILE) OBJTYPE(*FILE) MBR(&MBR)      
                                                                          
/* Find out the current owner of the object */                            
             DSPOBJD    OBJ(&PLIB/&PGM) OBJTYPE(*PGM) +                   
                          DETAIL(*SERVICE) OUTPUT(*OUTFILE) +             
                          OUTFILE(QTEMP/@RTVPGMOWN)                       
                                                                          
             OVRDBF     FILE(QADSPOBJ) TOFILE(QTEMP/@RTVPGMOWN)           
             RCVF                                                         
                                                                          
/* Delete the existing program */                                         
             DLTPGM     PGM(&PLIB/&PGM)                                   

/* ************************************************************ */     
/* Call the CPF module to recreate the program from the update  */     
/* program template.                                            */     
/* Note:- this interface is not supported after V2R1.1.         */     
/* ************************************************************ */     
 CREATE:     CALL       PGM(QSCCRTPG) PARM(&PGM &PLIB &FILE +          
                          &REALLIB &MBR)                               
                                                                       
/* Ensure the original owner still owns the program */                 
/* Note:- Need to adopt GOD to ensure this works    */                 
             IF         COND(&ODOBOW *NE &BLANK) THEN(DO)              
               CHGOBJOWN  OBJ(&REALLIB/&PGM) OBJTYPE(*PGM) +           
                            NEWOWN(&ODOBOW)                            
             ENDDO                                                     
                                                                       
/*                                                                 */  
/*--------------------- Send User a Message -----------------------*/  
/*                                                                 */  
             SNDPGMMSG  MSGID(CPF9898) MSGF(QCPFMSG) +                 
                          MSGDTA('Program' *BCAT &PGM *BCAT 'in' +     
                          *BCAT &REALLIB *BCAT 'created from +         
                          member' *BCAT &MBR *BCAT 'in file' *BCAT +   
                          &FILE *BCAT 'in' *BCAT &FLIB) MSGTYPE(*COMP) 
                                                                       
 EXIT:       RETURN     /* Normal end of program */                    
                                                                       
 ERROR:      RCVMSG     MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) + 
                          MSGF(&MSGF) MSGFLIB(&MSGFLIB)                
             MONMSG     MSGID(CPF0000 MCH0000) EXEC(RETURN)
                        /* Just in case */                                   
             IF         COND(&MSGID *NE &BLANK) THEN(DO)                
             SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +           
                          MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)             
             MONMSG     MSGID(CPF0000 MCH0000) EXEC(RETURN)
                        /* Just in case */                                   
             ENDDO                                                     
                                                                       
 CRTPGX:     ENDPGM                                                    

Regards,
Simon Coulter.


 FlyByNight Software         AS/400 Technical Specialists       
 Eclipse 
the competition - run your business on an IBM AS/400.  
                                                                
 Phone: +61 3 9419 0175   Mobile: +61 0411 091 400        /"\   
 Fax:   +61 3 9419 0175   mailto: shc@flybynight.com.au   \ /   
                                                           X    
               ASCII Ribbon campaign against HTML E-Mail  / \   

+---
| This is the MI Programmers Mailing List!
| To submit a new message, send your mail to MI400@midrange.com.
| To subscribe to this list send email to MI400-SUB@midrange.com.
| To unsubscribe from this list send email to MI400-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: dr2@cssas400.com
+---

As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.