PL/I coding example for TRACE

You can use the TRACE command in a PL/I application to write trace information for the application to the QMF trace output.

The following coding example first verifies that the user is tracing QMF application activity by checking that the global variable DSQAO_APPL_TRACE is not set to '0'. If the application trace is on, then the TRACE command is issued. The TRACE command specifies three trace area definitions to write to the QMF trace output.

This example is not included in the DSQABFP file that is distributed with QMF.

 DSQABFP: PROCEDURE OPTIONS(MAIN REENTRANT) REORDER;                    
 /********************************************************************/ 
 /* Sample Program:  DSQABFP                                         */
 /* PL/I Version of the QMF Callable Interface                       */ 
 /********************************************************************/ 
                                                                        
 /********************************************************************/
 /* Include and declare query interface communications area          */ 
 /********************************************************************/ 
 %INCLUDE SYSLIB(DSQCOMML);                                             
                                                                        
 /********************************************************************/ 
 /* Builtin function                                                 */ 
 /********************************************************************/ 
 DCL LENGTH BUILTIN;                                                    
                                                                        
 /********************************************************************/ 
 /* Query interface command length and commands                      */ 
 /********************************************************************/ 
 DCL COMMAND_LENGTH         FIXED BIN(31);                              
 DCL START_QUERY_INTERFACE  CHAR(5)  INIT('START');                     
 DCL SET_GLOBAL_VARIABLES   CHAR(10) INIT('SET GLOBAL');                
 DCL GET_GLOBAL_VARIABLES   CHAR(10) INIT('GET GLOBAL');                
 DCL RUN_QUERY              CHAR(12) INIT('RUN QUERY Q1');             
 DCL PRINT_REPORT           CHAR(22) INIT('PRINT REPORT (FORM=F1)');   
 DCL TRACE_COMMAND          CHAR(5)  INIT('TRACE');                     
 DCL END_QUERY_INTERFACE    CHAR(4)  INIT('EXIT');                      
                                                                        
 /********************************************************************/ 
 /* Query command extension, number of parameters and lengths        */ 
 /********************************************************************/ 
 DCL NUMBER_OF_PARAMETERS   FIXED BIN(31);/* number of variables     */ 
 DCL KEYWORD_LENGTHS(10)    FIXED BIN(31);/* lengths of keyword names*/ 
 DCL DATA_LENGTHS(10)       FIXED BIN(31);/* lengths of variable data*/ 
                                                                        
 /********************************************************************/ 
 /* Trace command parameters                                         */ 
 /********************************************************************/ 
 DCL AREA_DESCRIPTION(10)        CHAR(40);                              
 DCL AREA_DESCRIPTION_LENGTH(10) FIXED BIN(31);                         
 DCL AREA_PTR(10)                PTR;                                   
 DCL AREA_LENGTH(10)             FIXED BIN(31); /* Length of area at */ 
                                                /* AREA_PTR to be    */ 
                                                /* displayed.        */ 
                                                                        
 /********************************************************************/ 
 /* Keyword parameter and value for START command                    */ 
 /********************************************************************/ 
 DCL 1 START_KEYWORDS,                                                  
     3 START_KEYWORDS_1     CHAR(8)  INIT('DSQSMODE'),                  
     3 START_KEYWORDS_2     CHAR(8)  INIT('DSQSDBUG'),                  
     3 START_KEYWORDS_3     CHAR(8)  INIT('DSQSSUBS'),                  
     3 START_KEYWORDS_4     CHAR(8)  INIT('DSQSPLAN');                  
 DCL 1 START_KEYWORD_VALUES,                                            
     3 START_KEYWORD_VALUES_1 CHAR(11) INIT('BATCH'),                   
     3 START_KEYWORD_VALUES_2 CHAR(3)  INIT('ALL'),                     
     3 START_KEYWORD_VALUES_3 CHAR(4)  INIT('DSNA'),                    
     3 START_KEYWORD_VALUES_4 CHAR(6)  INIT('QMFDEV');                  
                                                                        
 /********************************************************************/ 
 /* Keyword parameter and value for SET command                      */ 
 /********************************************************************/ 
 DCL 1 SET_KEYWORDS,                                                    
       3  SET_KEYWORDS_1    CHAR(7) INIT('MYVAR01'),                    
       3  SET_KEYWORDS_2    CHAR(5) INIT('SHORT'),                      
       3  SET_KEYWORDS_3    CHAR(7) INIT('MYVAR03');                    
                                                                        
 DCL 1 SET_VALUES,                                                      
       3  SET_VALUES_1      FIXED BIN(31),                              
       3  SET_VALUES_2      FIXED BIN(31),                              
       3  SET_VALUES_3      FIXED BIN(31);                              
                                                                        
 /********************************************************************/ 
 /* Keyword parameter and value for GET command                      */ 
 /********************************************************************/ 
 DCL 1 GET_TRACE_KEYWORDS,                                              
     3 GET_TRACE_KEYWORDS_1 CHAR(16) INIT('DSQAO_APPL_TRACE');          
                                                                        
 DCL 1 GET_TRACE_VALUE,                                                 
     3  GET_TRACE_VALUE_1 CHAR(1);                                      
                                                                        
 /********************************************************************/ 
 /* Main program                                                     */ 
 /********************************************************************/ 
 DSQCOMM = '';                                                          
 DSQ_COMM_LEVEL = DSQ_CURRENT_COMM_LEVEL;                               
                                                                        
 /********************************************************************/ 
 /* Start a query interface session                                  */ 
 /********************************************************************/ 
 NUMBER_OF_PARAMETERS = 4;                                              
 COMMAND_LENGTH = LENGTH(START_QUERY_INTERFACE);                        
 KEYWORD_LENGTHS(1) = LENGTH(START_KEYWORDS_1);                         
 KEYWORD_LENGTHS(2) = LENGTH(START_KEYWORDS_2);                         
 KEYWORD_LENGTHS(3) = LENGTH(START_KEYWORDS_3);                         
 KEYWORD_LENGTHS(4) = LENGTH(START_KEYWORDS_4);                         
 DATA_LENGTHS(1) = LENGTH(START_KEYWORD_VALUES_1);                      
 DATA_LENGTHS(2) = LENGTH(START_KEYWORD_VALUES_2);                      
 DATA_LENGTHS(3) = LENGTH(START_KEYWORD_VALUES_3);                      
 DATA_LENGTHS(4) = LENGTH(START_KEYWORD_VALUES_4);                      
                                                                        
 CALL DSQCIPX(DSQCOMM,                                                  
              COMMAND_LENGTH,                                           
              START_QUERY_INTERFACE,                                    
              NUMBER_OF_PARAMETERS,                                     
              KEYWORD_LENGTHS,                                          
              START_KEYWORDS,                                           
              DATA_LENGTHS,                                             
              START_KEYWORD_VALUES,                                     
              DSQ_VARIABLE_CHAR);                                       
                                                                        
 /********************************************************************/ 
 /* Find out current trace setting                                   */ 
 /********************************************************************/ 
 NUMBER_OF_PARAMETERS = 1;                                              
 COMMAND_LENGTH = LENGTH(GET_GLOBAL_VARIABLES);                         
 KEYWORD_LENGTHS(1) = LENGTH(GET_TRACE_KEYWORDS_1);                     
 DATA_LENGTHS(1) = LENGTH(GET_TRACE_VALUE_1);                           
                                                                        
 CALL DSQCIPX(DSQCOMM,                                                  
              COMMAND_LENGTH,                                           
              GET_GLOBAL_VARIABLES,                                     
              NUMBER_OF_PARAMETERS,                                     
              KEYWORD_LENGTHS,                                          
              GET_TRACE_KEYWORDS,                                       
              DATA_LENGTHS,                                             
              GET_TRACE_VALUE,                                          
              DSQ_VARIABLE_CHAR);                                       
                                                                        
 /********************************************************************/ 
 /* Set numeric values into query using SET command                  */ 
 /********************************************************************/ 
 NUMBER_OF_PARAMETERS = 3;                                              
 COMMAND_LENGTH = LENGTH(SET_GLOBAL_VARIABLES);                         
 KEYWORD_LENGTHS(1) = LENGTH(SET_KEYWORDS_1);                           
 KEYWORD_LENGTHS(2) = LENGTH(SET_KEYWORDS_2);                           
 KEYWORD_LENGTHS(3) = LENGTH(SET_KEYWORDS_3);                           
 DATA_LENGTHS(1) = 4;                                                   
 DATA_LENGTHS(2) = 4;                                                   
 DATA_LENGTHS(3) = 4;                                                   
 SET_VALUES_1 = 20;                                                     
 SET_VALUES_2 = 40;                                                     
 SET_VALUES_3 = 4;                                                     
                                                                        
 CALL DSQCIPX(DSQCOMM,                                                  
              COMMAND_LENGTH,                                           
              SET_GLOBAL_VARIABLES,                                     
              NUMBER_OF_PARAMETERS,                                     
              KEYWORD_LENGTHS,                                          
              SET_KEYWORDS,                                             
              DATA_LENGTHS,                                             
              SET_VALUES,                                               
              DSQ_VARIABLE_FINT);                                       
                                                                        
 /********************************************************************/ 
 /* Run a Query                                                      */ 
 /********************************************************************/ 
 COMMAND_LENGTH = LENGTH(RUN_QUERY);                                    
                                                                        
 CALL DSQCIPL(DSQCOMM,                                                  
             COMMAND_LENGTH,                                            
             RUN_QUERY);                                                
                                                                        
 /********************************************************************/ 
 /* Trace command                                                    */ 
 /********************************************************************/ 
 IF GET_TRACE_VALUE_1 ^= '0' THEN DO;                                   
   NUMBER_OF_PARAMETERS = 3;                                            
   COMMAND_LENGTH = LENGTH(TRACE_COMMAND);                              
   AREA_DESCRIPTION(1) = 'DSQAO_APPL_TRACE:';                           
   AREA_DESCRIPTION_LENGTH(1) = LENGTH(AREA_DESCRIPTION(1));            
   AREA_PTR(1) = ADDR(GET_TRACE_VALUE_1);                               
   AREA_LENGTH(1)  = LENGTH(GET_TRACE_VALUE_1);                         
   AREA_DESCRIPTION(2) = 'DSQ_COMM_LEVEL:';                             
   AREA_DESCRIPTION_LENGTH(2) = LENGTH(AREA_DESCRIPTION(2));            
   AREA_PTR(2) = ADDR(DSQ_COMM_LEVEL);                                  
   AREA_LENGTH(2)  = LENGTH(DSQ_COMM_LEVEL);                            
   AREA_DESCRIPTION(3) = 'DSQ_CURRENT_COMM_LEVEL:';                     
   AREA_DESCRIPTION_LENGTH(3) = LENGTH(AREA_DESCRIPTION(3));            
   AREA_PTR(3) = ADDR(DSQ_CURRENT_COMM_LEVEL);                          
   AREA_LENGTH(3)  = LENGTH(DSQ_CURRENT_COMM_LEVEL);                    
                                                                        
   CALL DSQCIPX(DSQCOMM,                                                
                COMMAND_LENGTH,                                         
                TRACE_COMMAND,                                          
                NUMBER_OF_PARAMETERS,                                   
                AREA_DESCRIPTION_LENGTH,                                
                AREA_DESCRIPTION,                                       
                AREA_LENGTH,                                            
                AREA_PTR,                                               
                DSQ_VARIABLE_FINT);                                     
   END;                                                                 
                                                                        
 /********************************************************************/ 
 /* Print the results of the query                                   */ 
 /********************************************************************/ 
 COMMAND_LENGTH = LENGTH(PRINT_REPORT);                                 
                                                                        
 CALL DSQCIPL(DSQCOMM,                                                  
             COMMAND_LENGTH,                                            
             PRINT_REPORT);                                             
                                                                        
 /********************************************************************/ 
 /* End the query interface session                                  */ 
 /********************************************************************/ 
 COMMAND_LENGTH = LENGTH(END_QUERY_INTERFACE);                          
                                                                        
 CALL DSQCIPL(DSQCOMM,                                                  
             COMMAND_LENGTH,                                            
             END_QUERY_INTERFACE);                                      
                                                                        
 END       DSQABFP;                                                     

When the program detects that the user has tracing set on, the following trace output is written to the QMF trace output:

--------------------------------------------------------------------
         DSQDTRC :TRACE COMMAND OUTPUT                   (14534)    
         TRACE_AREA_NUMBER                                          
341033B8:  00000001                               *....            *
         TRACE_AREA_TITLE                                           
341036A4:  C4E2D8C1 D66DC1D7 D7D36DE3 D9C1C3C5    *DSQAO_APPL_TRACE*
341036B4:  7A                                     *:               *
         TRACE_AREA_CONTENTS                                        
340D0A14:  F2                                     *2               *
--------------------------------------------------------------------
         DSQDTRC :TRACE COMMAND OUTPUT                   (14535)    
         TRACE_AREA_NUMBER                                          
341033B8:  00000002                               *....            *
         TRACE_AREA_TITLE                                           
341036A4:  C4E2D86D C3D6D4D4 6DD3C5E5 C5D37A      *DSQ_COMM_LEVEL: *
         TRACE_AREA_CONTENTS                                        
340D0500:  C4E2D8D3 6EF0F0F1 F0F0F24C             *DSQL>001002<    *
--------------------------------------------------------------------
         DSQDTRC :TRACE COMMAND OUTPUT                   (14536)     
         TRACE_AREA_NUMBER                                           
341033B8:  00000003                               *....            * 
         TRACE_AREA_TITLE                                            
341036A4:  C4E2D86D C3E4D9D9 C5D5E36D C3D6D4D4    *DSQ_CURRENT_COMM* 
341036B4:  6DD3C5E5 C5D37A                        *_LEVEL:         * 
         TRACE_AREA_CONTENTS                                         
33F00C50:  C4E2D8D3 6EF0F0F1 F0F0F24C             *DSQL>001002<    * 
---------------------------------------------------------------------