This user exit is given control by Adabas immediately after a command is received by the Adabas nucleus. The command itself has yet to be processed except for the determination of the type of command (simple access, complex access, update).
One of the most common applications of this user exit is to insert a security password and/or a cipher code into the Adabas control block.
The call to the user exit is made using a standard BALR 14,15 assembler instruction. Register 1 contains the address of a parameter list. All registers must be saved when control is received and restored immediately prior to returning control to Adabas.
Notes:
If a buffer is not supplied by the caller, the associated address field in the IUB address list is set to zero. Depending on the command type, if a buffer is not needed the corresponding address is disregarded. Do not change important buffer addresses.
This document covers the following topics:
* Indicator: Before calling user exit 1, the fullword indicator area are set to zero. As output from the user exit 1 call, 00 in the first Indicator byte means that the command can be executed; a non-zero value in the first byte means that the command should not be executed, and returns response code 22.
000000 CQH DSECT COMMAND QUEUE HEADER 000000 CQHAIDTE DS A ADDR(IDTE) (SET BY 0-CALL) * THE FOLLOWING 2 LABELS MUST REMAIN CONTIGUOUS IN THE SAME ORDER 000004 CQHPID DS H PHYSICAL ID (SET BY SERVICE) 000006 CQHFLAG DS X FLAGS CQHFTRAN EQU X'80' TRANSLATOR (SET BY SERVICE) CQHFCOMM EQU X'40' COMMUNICATOR (SET BY SERVICE) CQHFNDBT EQU X'20' NOT DATABASE TARGET (SET BY * SERVICE) CQHFISO EQU X'10' ISOLATED ID (SET BY SERVICE) CQHFABR EQU X'08' ATTACHED BUFFERS REQUIRED (SET * BY SERVICE) CQHFORCE EQU X'04' FORCE NEW IDTE (SET BY MPM) CQHFANCH EQU X'02' ANCHOR SERVICE (SET BY SERVICE) 000007 CQHFLAG1 DS X FLAGS CQH1NMC EQU X'80' NO MORE COMMANDS (SET BY * SERVICE) CQH1UPG EQU X'40' USER PROBABLY GONE (SET BY * 8/12/20-CALLS) * 8/12-CALL PARMS (THE FOLLOWING 5 LABELS MUST REMAIN CONTIGUOUS IN * THE SAME ORDER) 000008 CQHPARMS DS 0A PARMS (SET BY MPM) 000008 CQHPARM1 DS 0A PARM 1 000008 CQHAIUB DS A ADDR(CURRENT IUB) 00000C CQHPARM2 DS 0A PARM 2 00000C CQHACQE DS A ADDR(CURRENT CQE) * MPM PARMS 000010 CQHNCQES DS F NUM(CQES) (SET BY MPM) 000014 CQHIUBL DS F MAX LEN(IUB) (SET BY MPM) * SERVICE POST PARMS (THE FOLLOWING 4 LABELS MUST REMAIN CONTIGUOUS * IN THE SAME ORDER) 000018 CQHAECB DS A ADDR(SERVICE ECB) (SET BY * SERVICE) 00001C CQHTSN DS 0F ADDR(SERVICE TSN) (BS2000) (SET * BY 0-CALL) 00001C CQHTID DS 0F SERVICE TID (DOS) (SET BY 0-CALL) 00001C CQHAASCB DS A ADDR(SERVICE ASCB) (MVS) (SET BY * 0-CALL) * ATTACHED BUFFERS 000020 CQHAABST DS A ADDR(ATTACHED BUFFER SEGMENT * TABLE (SET BY MPM) 000024 CQHLABST DS F LEN(ATTACHED BUFFER SEGMENT * TABLE (SET BY MPM) 000028 CQHAABA DS A ADDR(ATTACHED BUFFER AREA) (SET * BY MPM) 00002C CQHLABP DS F LEN(ATTACHED BUFFER PREFIX) (SET * BY SERVICE) 000030 CQHABHWM DS F ATTACHED BUFFER SEGMENT TABLE * HIGH WATER MARK CQHABSTS EQU 4 ATTACHED BUFFER SEGMENT TABLE * SHIFT CQHABAS EQU 8 ATTACHED BUFFER AREA SHIFT CQHLABS EQU 256 LEN(ATTACHED BUFFER SEGMENT) CQHABSEG EQU X'EE' ATTACHED BUFFER SEGMENT TABLE * SEGMENT ALLOCATED BYTE(MUST * BE <0) CQHABBAR EQU X'77' ATTACHED BUFFER SEGMENT TABLE * BARRIER (MUST BE >=0) 000034 CQHAECQ DS A ADDR(END OF CQ) (SET BY MPM) * SYSTEM DEPENDENT OVERLAY AREA 000038 CQHOVLAY DS XL105 * DOS 0000A1 ORG CQHOVLAY 000038 CQHACOMR DS A ADDR(SERVICE COMREG) (SET BY * 0-CALL) * VS1 00003C ORG CQHOVLAY 000038 CQHAJTCB DS A ADDR(SERVICE JOB STEP TCB) (SET * BY 0-CALL) * MVS 00003C ORG CQHOVLAY * THE FOLLOWING 3 LABELS MUST REMAIN CONTIGUOUS IN THE SAME ORDER 000038 CQHLXL DS 0F LX LIST 000038 CQHLXLN DS F'1' NUM(LXS) 00003C CQHLXLLX DS F LX VALUE 000040 CQHET DS XL44 ENTRY TABLE (LENGTH MUST BE AT * LEAST ETDLEN+2*ETDELEN) 00006C CQHTSECB DS F TRANSWAP ECB 000070 CQHSAVE2 DS F R2 SAVE AREA * THE FOLLOWING 2 LABELS MUST REMAIN CONTIGUOUS IN THE SAME ORDER 000074 CQHSAVEC DS F RC SAVE AREA 000078 CQHSAVED DS F RD SAVE AREA 00007C CQHLXRES DS 2F LXRES PARM LIST 000084 CQHETCON DS 3F ETCON PARM LIST * THE FOLLOWING 2 LABELS MUST REMAIN CONTIGUOUS IN THE SAME ORDER 000090 CQHCPUID DS CL8 CPU ID (SET BY 0-CALL) 000098 CQHVMID DS CL8 VM ID (SET BY 0-CALL) 0000A0 CQHKEY DS X SERVICE PSW-KEY (SET BY 0-CALL) * 0000A1 ORG 0000A1 DS XL19 RESERVED * 0000B4 CQHANCHR DS F ANCHOR (CQHFANCH SET) (SET BY * SERVICE) * * THE FOLLOWING 2 WORDS MUST BE THE LAST 2 WORDS IN THE CQH AND * REMAIN CONTIGUOUS IN THE SAME ORDER 0000B8 CQHWI DS F SERVICE WAIT INDICATOR 0000BC CQHSEQNR DS F COMMAND SEQUENCE NUMBER (SET BY * 4-CALL) CQHLEN EQU *-CQH CQH LENGTH (MUST BE GE CQELEN) CQHCQE EQU * FIRST CQE
and Queue Element (CQE) DSECT 000000 CQE DSECT 000000 CQECNTL DS X TS CONTROL BYTE 000001 CQEUBF DS X UB FLAGS (UBFLAG) * 000002 CQEBIN DS X BUFFERS IN (UBBIN) 000003 CQEBOUT DS X BUFFERS OUT (UBBOUT) 000004 CQEID DS H ID (UBID) (UBFPID SET IN * CQEUBF IF PHYSICAL) * 000006 CQEFLAG DS X G E N E R A L PURPOSE FLAGS CQEFBUF EQU X'80' USER BUFFERS IN SERVICE * PARTITION, REGION, ADDR * SPACE (MUTUALLY EXCLUSIVE * WITH CQEFAB) CQEFETW EQU X'40' ET COMMAND WAITING FOR 12-CALL CQEFW16 EQU X'20' WAITING FOR 16-CALL (MUTUALLY * EXCLUSIVE WITH CQEF16R) CQEF16R EQU X'10' 16-CALL REQUIRED (MUTUALLY * EXCLUSIVE WITH CQEFW16) CQEFAB EQU X'08' ATTACHED BUFFER (MUTUALLY * EXCLUSIVE WITH CQEFBUF) CQEFABR EQU X'04' ATTACHED BUFFER REQUIRED * (MUTUALLY EXCLUSIVE WITH * CQEFBUF) CQECML EQU X'02' CML LOCK HELD (MVS) CQEHELD EQU CQEFLAG * 000007 CQESFLAG DS X S E L E C T I O N FLAGS CQSFPROC EQU X'80' IN PROCESS CQSFRDYS EQU X'40' READY TO BE SELECTED CQSFSUQD EQU X'20' SEARCH FOR UQE DONE CQSFUQEF EQU X'10' UQE FOUND CQSFA9 EQU X'08' NOT SELECTABLE DURING * BSS=X'80' STATUS * CQSFETSY EQU X'04' NOT SELECTABLE DURING ET-SYNC CQSFWSPC EQU X'02' WAITING FOR SPACE CQSFWISN EQU X'01' WAITING FOR ISN IN HQ * * P O S T 000008 CQEAECB DS A ADDR(USER ECB) (UBECB/UBAECB) 00000C CQETID DS 0F USER TID (VSE) 00000C CQETSN DS 0F USER TSN (BS2000) 00000C CQEAASCB DS A ADDR(USER ASCB) (MVS) * * U S E R I N T E R F A C E 000010 CQEAAB DS A ADDR(ATTACHED BUFFER) (CQEFAB * SET) 000014 CQEAFABS DS A ADDR(FIRST ATTACHED BUFFER * SEGMENT TABLE BYTE) (CQEFAB * SET) 000018 CQENABS DS F NUM(ATTACHED BUFFER SEGMENT * TABLE BYTES) (CQEFAB SET) 00001C CQEAUI DS A ADDR(USER INFO) (UBAUINFO IF * UBFINUB SET) 000020 CQEJNAME DS CL8 USER JOB NAME (UBJNAME IF * UBFINUB SET) 000028 CQECKSUM DS D CHECKSUM (TOD-CLOCK) 000030 CQESEQNR DS F COMMAND SEQUENCE NUMBER * (CQHSEQNR) 000034 CQELSB DS F LEN(REQUIRED IUB) (UBLSB) 000038 CQEAUPL DS A ADDR(USER PARAMETER LIST) * (UBAUPL) 00003C CQEAUB DS A ADDR(UB) * W O R K A R E A FOR SVC AND PC * ROUTINES (LENGTH MUST BE AT * LEAST MAX(UBLEN,64)) 000040 CQEWORK DS XL64 000080 ORG CQEWORK 000040 CQESAVE DS 16F SAVE AREA 000080 ORG CQEWORK 000040 CQEUB DS XL64 UB (MVS) 000080 ORG CQEWORK 000040 CQEAPL DS 5A APL WITHOUT ADDR(ACB) (MVS) 000054 ORG * * U S E R I D (COMMUNICATION) 000080 CQEUSID DS 0XL28 USER ID (UBAUID IF UBFINUB SET) 000080 CQECPUID DS D CPU ID (IDCPUID) (THE USER WILL * BE IDENTIFIED EXTERNALLY BY THE * CONTENTS OF CQEJNAME IF THE * LOW-ORDER BIT OF CQECPUID IS 0, * AND BY THE CONTENTS OF CQEUID * IF THE BIT IS 1) 000088 CQEVMID DS CL8 VM ID (IDVMID) 000090 CQEOSID DS F OPSYS ID 000094 CQEUID DS XL8 ID (UBUID/ACBADD2) * 00009C CQERBIBL DS 0F ACTUAL RB/IB LENS 00009C CQERBL DS H ACTUAL RB LEN 00009E CQEIBL DS H ACTUAL IB LEN 0000A0 CQEPASID DS H CALLER'S PASID (MVS) 0000A2 CQE16CTL DS X 16-CALL TS CONTROL BYTE (CQEW16 * SET) 0000A3 CQEKEY DS X CALLER'S PSW-KEY 0000A4 CQEPRTY DS X PRIORITY OF USER (UBPRTY IF * UBFINUB SET) 0000A5 CQECMDT DS X COMMAND TYPE (UBCMDT) * EQU X'20' RESERVED * EQU X'10' RESERVED CQETET EQU X'08' ET COMMAND CQETUC EQU X'04' UPDATE COMMAND CQETCC EQU X'02' COMPLEX COMMAND CQETSC EQU X'01' SIMPLE COMMAND 0000A6 CQEFNR DS H FILNR (ACBFNR) * * TARGET AND SYSTEM DEPENDENT OVERLAY AREA, WHICH CAN BE USED AS * FOLLOWS: * - BY THE ROUTER 04-CALL PRIOR TO SETTING 'CQSFRDYS' IN * 'CQESFLAG'; * - BY THE TARGET FROM THE TIME 'CQSFRDYS' IS SET UNTIL EITHER A * ROUTER 12-CALL FOR WHICH NO 16-CALL IS REQUIRED ('CQEF16R' IN * 'CQEFLAG' IS NOT SET) OR UNTIL THE ROUTER 16-CALL OR COMMAND * TIMEOUT OCCURS ('CQE16CTL' CONTAINS X'FF' INSTEAD OF X'00'); * - BY THE ROUTER 16-CALL FROM THE TIME IS ACQUIRES THE CQE * (SUCCESSFULLY SETS 'CQE16CTL' TO X'FF') UNTIL IT FREES THE * CQE (SETS 'CQECNTL' TO X'00'). 0000A8 CQEOVLAY DS XL20 * 0000BC ORG CQEOVLAY M V S * THE FOLLOWING 2 LABELS MUST REMAIN CONTIGUOUS IN THE SAME ORDER 0000A8 CQESAVED DS A RD SAVE AREA 0000AC CQESAVEE DS A RE SAVE AREA * THE FOLLOWING 3 LABELS MUST REMAIN CONTIGUOUS IN THE SAME ORDER 0000B0 CQESAVE3 DS 0F R3 SAVE AREA * 0000B0 CQEARB DS A ADDR(RB) 0000B4 CQEAIB DS A ADDR(IB) 0000B8 ORG CQEOVLAY N U C L E U S 0000A8 CQEAUQE DS A ADDR(UQE) 0000AC CQEACA DS A ADDR(WORK-AREA) FOR CONTINUATION 0000B0 CQERQST DS F REQUESTED RESOURCE (SPACE/FNR/ * ISN) 0000B4 CQETHROB DS F TIME OF LAST THROWBACK 0000B8 CQECTHR DS 0F CMD COUNT OF LAST THROWBACK 0000B8 CQEAIUB DS 0A ADDR(IUB) 0000B8 CQET12C DS F TIME OF MPM 12-CALL 0000BC ORG 0000BC CQECMD DS XL2 COMMAND * 0000BE CQEX DS H CQE INDEX CQELEN EQU *-CQE CQE LENGTH * * AQUQE EQU CQEAUQE-CQE