You can look at the sample source code listings here or you can access them online.
The sample programs for the assembler callable interface perform the following functions:
QMF does not supply query Q1 or form F1, but the sample programs use these objects.
This section also shows how to assemble, link-edit, and run an assembler 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.
The program DSQABFAC is shipped with QMF for CICS.
TITLE 'Sample HLASM Query Callable Interface' 00001000 *********************************************************************** 00002000 * * 00003000 * Sample Program: DSQABFAC * 00004000 * Assembler Version of the SAA Query Callable Interface * 00005000 * * 00006000 *********************************************************************** 00007000 DSQABFAC DFHEIENT CODEREG=(12),DATAREG=(13),EIBREG=(11) 00008000 SPACE 1 00009000 *********************************************************************** 00010000 * Start a query interface session * 00011000 *********************************************************************** 00012000 LA R4,CICOMM ESTABLISH ACCESS TO DSQCOMM 00013000 USING DSQCOMM,R4 00014000 SPACE 1 00015000 MVC DSQ_COMM_LEVEL,DSQ_CURRENT_COMM_LEVEL 00016000 ST R4,QMFP1 Address of DSQCOMMA 00017000 LA R1,STARTQIL Address of START command length 00018000 ST R1,QMFP2 00019000 LA R1,STARTQI Address of START command 00020000 ST R1,QMFP3 00021000 LA R1,1 One Start command parameter 00022000 ST R1,NUMPARMS 00023000 LA R1,NUMPARMS Address of number of parameters 00024000 ST R1,QMFP4 00025000 LA R1,STARTKYL Address of keyword lengths 00026000 ST R1,QMFP5 00027000 LA R1,STARTKY Address of keywords 00028000 ST R1,QMFP6 00029000 LA R1,STARTVL Address of value lengths 00030000 ST R1,QMFP7 00031000 LA R1,STARTV Address of values 00032000 ST R1,QMFP8 00033000 LA R1,DSQ_VARIABLE_CHAR Address of value data type 00034000 ST R1,QMFP9 00035000 OI QMFP9,X'80' Set end of parameter list 00036000 LA R1,QMFPLIST Address of parameter list 00037000 CALL DSQCIA 00038000 SPACE 1 00039000
*********************************************************************** 00040000 * Set numeric values into query using SET command * 00041000 *********************************************************************** 00042000 SPACE 1 00043000 LA R1,20 Set values for SET GLOBAL command 00044000 ST R1,VVAL1 00045000 LA R1,40 00046000 ST R1,VVAL2 00047000 LA R1,84 00048000 ST R1,VVAL3 00049000 LA R1,SETGL Addr of SET GLOBAL command length 00050000 ST R1,QMFP2 00051000 LA R1,SETG Address of SET GLOBAL command 00052000 ST R1,QMFP3 00053000 LA R1,3 Three SET GLOBAL variables 00054000 ST R1,NUMPARMS 00055000 LA R1,NUMPARMS Address of number of parameters 00056000 ST R1,QMFP4 00057000 LA R1,VNAME1L Address of variable name lengths 00058000 ST R1,QMFP5 00059000 LA R1,VNAME1 Address of variable names 00060000 ST R1,QMFP6 00061000 LA R1,VVAL1L Address of value lengths 00062000 ST R1,QMFP7 00063000 LA R1,VVAL1 Address of values 00064000 ST R1,QMFP8 00065000 LA R1,DSQ_VARIABLE_FINT Address of value data type 00066000 ST R1,QMFP9 00067000 OI QMFP9,X'80' Set end of parameter list 00068000 LA R1,QMFPLIST Address of parameter list 00069000 CALL DSQCIA 00070000 SPACE 1 00071000 *********************************************************************** 00072000 * Run a query * 00073000 *********************************************************************** 00074000
LA R1,QUERYL Addr of RUN QUERY command length 00075000 ST R1,QMFP2 00076000 LA R1,QUERY Address of RUN QUERY command 00077000 ST R1,QMFP3 00078000 OI QMFP3,X'80' Set end of parameter list 00079000 LA R1,QMFPLIST Address of parameter list 00080000 CALL DSQCIA 00081000 SPACE 1 00082000 *********************************************************************** 00083000 * Print the result of the query * 00084000 *********************************************************************** 00085000 LA R1,REPTL Addr of PRINT Report command lth 00086000 ST R1,QMFP2 00087000 LA R1,REPT Address of PRINT Report command 00088000 ST R1,QMFP3 00089000 OI QMFP3,X'80' Set end of parameter list 00090000 LA R1,QMFPLIST Address of parameter list 00091000 CALL DSQCIA 00092000 SPACE 1 00093000 *********************************************************************** 00094000 * End the query interface session * 00095000 *********************************************************************** 00096000 LA R1,ENDQIL Address of EXIT command length 00097000 ST R1,QMFP2 00098000 LA R1,ENDQI Address of EXIT command 00099000 ST R1,QMFP3 00100000 OI QMFP3,X'80' Set end of parameter list 00101000 LA R1,QMFPLIST Address of parameter list 00102000 CALL DSQCIA 00103000 SPACE 1 00104000 *********************************************************************** 00105000 * Return * 00106000 *********************************************************************** 00107000 SPACE 1 00108000
XR R15,R15 ZERO RETURN CODE 00109000 DFHEIRET RCREG=15 00110000 *********************************************************************** 00111000 * Data Areas * 00112000 *********************************************************************** 00113000 SPACE 1 00114000 * Query Interface commands 00115000 SPACE 1 00116000 STARTQI DC C'START' START FUNCTION 00117000 SETG DC C'SET GLOBAL' SET GLOBAL FUNCTION 00118000 QUERY DC C'RUN QUERY Q1' RUN QUERY 00119000 REPT DC C'PRINT REPORT (FORM=F1)' PRINT REPORT 00120000 ENDQI DC C'EXIT' END INTERFACE 00121000 SPACE 1 00122000 DS 0F 00123000 STARTQIL DC AL4(L'STARTQI) LENGTH OF START FUNCTION 00124000 SETGL DC AL4(L'SETG) LENGTH OF SET GLOBAL FUNCTION 00125000 QUERYL DC AL4(L'QUERY) LENGTH OF RUN QUERY COMMAND 00126000 REPTL DC AL4(L'REPT) LENGTH OF PRINT REPORT COMMAND 00127000 ENDQIL DC AL4(L'ENDQI) LENGTH OF END INTERFACE COMMAND 00128000 SPACE 1 00129000 * START command keyword 00130000 SPACE 1 00131000 STARTKY DC C'DSQSMODE' 00132000 STARTV DC C'INTERACTIVE' 00133000 DS 0F 00134000 STARTKYL DC AL4(L'STARTKY) 00135000 STARTVL DC AL4(L'STARTV) 00136000 SPACE 1 00137000 * SET GLOBAL command variable names 00138000 SPACE 1 00139000 VNAME1 DC C'MYVAR01' 00140000 VNAME2 DC C'SHORT' 00141000 VNAME3 DC C'MYVAR03' 00142000 DS 0F 00143000 VNAME1L DC AL4(L'VNAME1) 00144000 VNAME2L DC AL4(L'VNAME2) 00145000 VNAME3L DC AL4(L'VNAME3) 00146000 SPACE 1 00147000 * SET GLOBAL command values 00148000 SPACE 1 00149000 VVAL1L DC AL4(L'VVAL1) 00150000 VVAL2L DC AL4(L'VVAL2) 00151000 VVAL3L DC AL4(L'VVAL3) 00152000 * Callable interface communications definition 00153000 DSQCOMMA 00154000
* Equates for registers 0-15 00155000 R0 EQU 00 00156000 R1 EQU 01 00157000 R2 EQU 02 00158000 R3 EQU 03 00159000 R4 EQU 04 00160000 R5 EQU 05 00161000 R6 EQU 06 00162000 R7 EQU 07 00163000 R8 EQU 08 00164000 R9 EQU 09 00165000 R10 EQU 10 00166000 R11 EQU 11 00167000 R12 EQU 12 00168000 R13 EQU 13 00169000 R14 EQU 14 00170000 R15 EQU 15 00171000 * Local variables located in CICS working storage 00172000 DFHEISTG DSECT 00173000 ORG DFHEIUSR 00174000 NUMPARMS DS F NUMBER OF KEYWORDS 00175000 * QMF SET GLOBAL command values 00176000 VVAL1 DS F 00177000 VVAL2 DS F 00178000 VVAL3 DS F 00179000 * QMF Callable interface parameter list 00180000 QMFPLIST DS 0D 00181000 QMFP1 DS F 00182000 QMFP2 DS F 00183000 QMFP3 DS F 00184000 QMFP4 DS F 00185000 QMFP5 DS F 00186000 QMFP6 DS F 00187000 QMFP7 DS F 00188000 QMFP8 DS F 00189000 QMFP9 DS F 00190000 * Callable interface communications area 00191000 CICOMM DS CL(DSQCOMM_LEN) 00192000 CSECT 00193000 SPACE 1 00194000 END DSQABFAC 00195000
For TSO and CMS, QMF ships the following program with the product. It is named DSQABFA.
DSQABFA TITLE 'SAMPLE SAA QUERY CALLABLE INTERFACE' DSQABFA CSECT *********************************************************************** * * * Sample Program: DSQABFA * * Assembler Version of the SAA Query Callable Interface * * * *********************************************************************** SPACE 1 STM R14,R12,12(R13) SAVE ENTRY REGISTERS BALR R12,0 INITIALIZE BASE REGISTER USING *,R12 LA R2,SAVEAREA CHAIN SAVE AREAS ST R2,8(R13) ST R13,SAVEAREA+4 LR R13,R2 ESTABLISH SAVE AREA SPACE 1 *********************************************************************** * Start a query interface session * *********************************************************************** LA R4,CICOMM ESTABLISH ACCESS TO DSQCOMM USING DSQCOMM,R4 SPACE 1 MVC DSQ_COMM_LEVEL,DSQ_CURRENT_COMM_LEVEL LA R1,1 1 PARAMETER ST R1,NUMPARMS CALL DSQCIA, X (CICOMM, QI COMMON AREA X STARTQIL, START COMMAND LENGTH X STARTQI, START COMMAND X NUMPARMS, NUMBER OF KEYWORDS X STARTKYL, KEYWORD LENGTHS X STARTKY, KEYWORDS X STARTVL, VALUE LENGTHS X STARTV, VALUES X DSQ_VARIABLE_CHAR),VL VALUES ARE CHARACTERS SPACE 1
*********************************************************************** * Set numeric values into query using SET command * *********************************************************************** SPACE 1 LA R1,20 SET VALUES TO BE MODIFIED ST R1,VVAL1 LA R1,40 ST R1,VVAL2 LA R1,84 ST R1,VVAL3 LA R1,3 3 PARAMETERS ST R1,NUMPARMS SPACE 1 CALL DSQCIA, X (CICOMM, X SETGL, SET GLOBAL COMMAND LENGTH X SETG, SET GLOBAL COMMAND X NUMPARMS, NUM OF VARIABLES TO BE SET X VNAME1L, VARIABLE NAME LENGTHS X VNAME1, VARIABLE NAMES X VVAL1L, VALUE LENGTHS X VVAL1, VALUES X DSQ_VARIABLE_FINT),VL VALUES ARE INTEGERS SPACE 1 *********************************************************************** * Run a query * *********************************************************************** SPACE 1 CALL DSQCIA, X (CICOMM, X QUERYL, QUERY COMMAND LENGTH X QUERY),VL TEXT OF QUERY COMMAND SPACE 1 *********************************************************************** * Print the result of the query * *********************************************************************** SPACE 1 CALL DSQCIA,(CICOMM,REPTL,REPT),VL SPACE 1 *********************************************************************** * End the query interface session * *********************************************************************** SPACE 1 CALL DSQCIA,(CICOMM,ENDQIL,ENDQI),VL SPACE 1
*********************************************************************** * Return * *********************************************************************** SPACE 1 SR R15,R15 SET RETURN CODE L R13,4(R13) L R14,12(R13) RESTORE CALLER REGISTERS LM R0,R12,20(R13) BR R14 EJECT *********************************************************************** * Data Areas * *********************************************************************** SPACE 1 * Query Interface commands SPACE 1 STARTQI DC C'START' START FUNCTION SETG DC C'SET GLOBAL' SET GLOBAL FUNCTION QUERY DC C'RUN QUERY Q1' RUN QUERY REPT DC C'PRINT REPORT (FORM=F1)' PRINT REPORT ENDQI DC C'EXIT' END INTERFACE SPACE 1 DS 0F STARTQIL DC AL4(L'STARTQI) LENGTH OF START FUNCTION SETGL DC AL4(L'SETG) LENGTH OF SET GLOBAL FUNCTION QUERYL DC AL4(L'QUERY) LENGTH OF RUN QUERY COMMAND REPTL DC AL4(L'REPT) LENGTH OF PRINT REPORT COMMAND ENDQIL DC AL4(L'ENDQI) LENGTH OF END INTERFACE COMMAND SPACE 1 * START command keyword SPACE 1 STARTKY DC C'DSQSMODE' STARTV DC C'INTERACTIVE' DS 0F STARTKYL DC AL4(L'STARTKY) STARTVL DC AL4(L'STARTV) SPACE 1
* SET GLOBAL command variable names SPACE 1 VNAME1 DC C'MYVAR01' VNAME2 DC C'SHORT' VNAME3 DC C'MYVAR03' DS 0F VNAME1L DC AL4(L'VNAME1) VNAME2L DC AL4(L'VNAME2) VNAME3L DC AL4(L'VNAME3) SPACE 1 * SET GLOBAL command values SPACE 1 VVAL1 DS F VVAL2 DS F VVAL3 DS F VVAL1L DC AL4(L'VVAL1) VVAL2L DC AL4(L'VVAL2) VVAL3L DC AL4(L'VVAL3) SPACE 1 NUMPARMS DS F NUMBER OF KEYWORDS SPACE 1 * callable interface communications area SPACE 1 CICOMM DS CL(DSQCOMM_LEN) SPACE 1 SAVEAREA DS 18F EJECT DSQCOMMA SPACE 1 R0 EQU 00 EQUATES FOR REGISTERS 0-15 R1 EQU 01 R2 EQU 02 R3 EQU 03 R4 EQU 04 R5 EQU 05 R6 EQU 06 R7 EQU 07 R8 EQU 08 R9 EQU 09 R10 EQU 10 R11 EQU 11 R12 EQU 12 R13 EQU 13 R14 EQU 14 R15 EQU 15 SPACE 1 END DSQABFA