The following sample program, DSQABFP, is shipped with QMF and uses IBM PL/I.
You can look at the sample source code listing here or you can access it online.
The sample program for the PL/I callable interface performs the following function:
QMF does not supply query Q1 or form F1, but the sample program uses these objects.
This section also shows how to compile, link-edit, and run a PL/I program using the callable interface. QMF does not ship the REXX EXEC, JCL, or CLIST in these examples, but you can copy them from here, altering them to suit your installation.
DSQABFP: PROCEDURE OPTIONS(MAIN REENTRANT) REORDER; 00001000 /********************************************************************/ 00002000 /* Sample Program: DSQABFP */ 00003000 /* PL/I Version of the SAA Query Callable Interface */ 00004000 /********************************************************************/ 00005000 00006000 /********************************************************************/ 00007000 /* Include and declare query interface communications area */ 00008000 /********************************************************************/ 00009000 %INCLUDE SYSLIB(DSQCOMML); 00010000 00011000 /********************************************************************/ 00012000 /* Builtin function */ 00013000 /********************************************************************/ 00014000 DCL LENGTH BUILTIN; 00015000 00016000 /********************************************************************/ 00017000 /* Query interface command length and commands */ 00018000 /********************************************************************/ 00019000 DCL COMMAND_LENGTH FIXED BIN(31); 00020000 DCL START_QUERY_INTERFACE CHAR(5) INIT('START'); 00021000 DCL SET_GLOBAL_VARIABLES CHAR(10) INIT('SET GLOBAL'); 00022000 DCL RUN_QUERY CHAR(12) INIT('RUN QUERY Q1'); 00023000 DCL PRINT_REPORT CHAR(22) INIT('PRINT REPORT (FORM=F1)'); 00024000 DCL END_QUERY_INTERFACE CHAR(4) INIT('EXIT'); 00025000 00026000 /********************************************************************/ 00027000 /* Query command extension, number of parameters and lengths */ 00028000 /********************************************************************/ 00029000 DCL NUMBER_OF_PARAMETERS FIXED BIN(31);/* number of variables */ 00030000 DCL KEYWORD_LENGTHS(10) FIXED BIN(31);/* lengths of keyword names*/ 00031000 DCL DATA_LENGTHS(10) FIXED BIN(31);/* lengths of variable data*/ 00032000 00033000
/********************************************************************/ 00034000 /* Keyword parameter and value for START command */ 00035000 /********************************************************************/ 00036000 DCL START_KEYWORDS CHAR(8) INIT('DSQSMODE'); 00037000 DCL START_KEYWORD_VALUES CHAR(11) INIT('INTERACTIVE'); 00038000 00039000 /********************************************************************/ 00040000 /* Keyword parameter and value for SET command */ 00041000 /********************************************************************/ 00042000 DCL 1 SET_KEYWORDS, 00043000 3 SET_KEYWORDS_1 CHAR(7) INIT('MYVAR01'), 00044000 3 SET_KEYWORDS_2 CHAR(5) INIT('SHORT'), 00045000 3 SET_KEYWORDS_3 CHAR(7) INIT('MYVAR03'); 00046000 00047000 DCL 1 SET_VALUES, 00048000 3 SET_VALUES_1 FIXED BIN(31), 00049000 3 SET_VALUES_2 FIXED BIN(31), 00050000 3 SET_VALUES_3 FIXED BIN(31); 00051000 00052000 /********************************************************************/ 00053000 /* Main program */ 00054000 /********************************************************************/ 00055000 DSQCOMM = ''; 00056000 DSQ_COMM_LEVEL = DSQ_CURRENT_COMM_LEVEL; 00057000 00058000 /********************************************************************/ 00059000 /* Start a query interface session */ 00060000 /********************************************************************/ 00061000 NUMBER_OF_PARAMETERS = 1; 00062000 COMMAND_LENGTH = LENGTH(START_QUERY_INTERFACE); 00063000 KEYWORD_LENGTHS(1) = LENGTH(START_KEYWORDS); 00064000 DATA_LENGTHS(1) = LENGTH(START_KEYWORD_VALUES); 00065000 00066000 CALL DSQCIPX(DSQCOMM, 00067000 COMMAND_LENGTH, 00068000 START_QUERY_INTERFACE, 00069000 NUMBER_OF_PARAMETERS, 00070000 KEYWORD_LENGTHS, 00071000 START_KEYWORDS, 00072000 DATA_LENGTHS, 00073000 START_KEYWORD_VALUES, 00074000 DSQ_VARIABLE_CHAR); 00075000 00076000
/********************************************************************/ 00077000 /* Set numeric values into query using SET command */ 00078000 /********************************************************************/ 00079000 NUMBER_OF_PARAMETERS = 3; 00080000 COMMAND_LENGTH = LENGTH(SET_GLOBAL_VARIABLES); 00081000 KEYWORD_LENGTHS(1) = LENGTH(SET_KEYWORDS_1); 00082000 KEYWORD_LENGTHS(2) = LENGTH(SET_KEYWORDS_2); 00083000 KEYWORD_LENGTHS(3) = LENGTH(SET_KEYWORDS_3); 00084000 DATA_LENGTHS(1) = 4; 00085000 DATA_LENGTHS(2) = 4; 00086000 DATA_LENGTHS(3) = 4; 00087000 SET_VALUES_1 = 20; 00088000 SET_VALUES_2 = 40; 00089000 SET_VALUES_3 = 84; 00090000 00091000 CALL DSQCIPX(DSQCOMM, 00092000 COMMAND_LENGTH, 00093000 SET_GLOBAL_VARIABLES, 00094000 NUMBER_OF_PARAMETERS, 00095000 KEYWORD_LENGTHS, 00096000 SET_KEYWORDS, 00097000 DATA_LENGTHS, 00098000 SET_VALUES, 00099000 DSQ_VARIABLE_FINT); 00100000 00101000 /********************************************************************/ 00102000 /* Run a Query */ 00103000 /********************************************************************/ 00104000 COMMAND_LENGTH = LENGTH(RUN_QUERY); 00105000 00106000 CALL DSQCIPL(DSQCOMM, 00107000 COMMAND_LENGTH, 00108000 RUN_QUERY); 00109000 00110000 /********************************************************************/ 00111000 /* Print the results of the query */ 00112000 /********************************************************************/ 00113000 COMMAND_LENGTH = LENGTH(PRINT_REPORT); 00114000 00115000 CALL DSQCIPL(DSQCOMM, 00116000 COMMAND_LENGTH, 00117000 PRINT_REPORT); 00118000 00119000 /********************************************************************/ 00120000 /* End the query interface session */ 00121000 /********************************************************************/ 00122000 COMMAND_LENGTH = LENGTH(END_QUERY_INTERFACE); 00123000 00124000 CALL DSQCIPL(DSQCOMM, 00125000 COMMAND_LENGTH, 00126000 END_QUERY_INTERFACE); 00127000 00128000 END DSQABFP; 00129000