E N D
1. Adabas v8.1 Adabas Control Block Extended (ACBX) Becky Albin
Chief IT Architect
Becky.Albin@softwareagusa.com
2. Adabas Architecture
11. Enhanced Direct Call Interface
Adabas Calling Procedure between V7 and V8
12. Enhanced Direct Call Interface
Adabas Calling Procedure between V7 and V8
User Exit 1 is replaced by User Exit 11
Original ACB still supported
Nucleus runs in ACBX mode
Conversion normally performed during router logic
New Adalinks no longer be provided in source form
New ACBX interface required only with new features
Read the COMMAND REFERENCE manual
It is recommended that the entire ACBX be set to binary ZEROS before a call is initiated
13.
Applications can pass either the ACB or ACBX
Dependent upon v8 features being used
Adabas nucleus only uses ACBX
ACBX is 192 bytes
Needed for RBL > 32K
Needed for LOBs/Dynamic Variables
Needed for EntireX v7.3 Long Messages
Needed for multiple Record Buffer segments Adabas Control Block Extended – Direct Call Interface
14.
Overlays removed
DBID/Response Code
Many new areas
Format Buffers will map the Record Buffers; 1:1
Increased number of Command Option fields
Increased number of Additions Field
Increased size for User area
Positioned for the future changes Adabas Control Block Extended – Direct Call Interface
20. ACB versus ACBX:
ACBX has ‘F2’ at command code position of ACB – now ACBXVER
Rsp-22 if ACBX not supported
ACB and ACBX have response code at same position
ACBX has no buffer length fields
Variable number of buffers
21. ACB interface ? Adabas Parameter List (APL)
Call ADABAS(ACB,FB,RB,SB,VB,IB,NatInfo)
22. ACBX interface ? Adabas Parameter List Extended (APLX)
Call ADABAS(ACBX,0,Token,ABDX-FB1,...,ABDX-RB3,ABDX-PB)
23. Adabas Buffer Description (ABDX)
Each ABDX describes one buffer
Type (Format, Record, Search, Value, ISN, MultiFetch, User, Performance/Review)
Length
Address
Needed because number and type of buffers now variable
ABDX structure:
For now, must set Send size = Buffer size for buffers to send to Adabas
For calls with format buffer, specify corresponding FB-RB pairs
25. Example:
FB1 = ‘DAL,4,B,DBL1-4,DCL1-3(1).’
FB2 = ‘DB1-4,*,A,DA,50000.’
FB3 = ‘DC1-3(1),*.’
May do first call without FB2/RB2 and FB3/RB3 to determine lengths of LOB values
26. COBOL example (Mainframe):
IDENTIFICATION DIVISION.
PROGRAM-ID.
COBACBX
AUTHOR.
BECKY ALBIN.
**********
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
C01 IS TOP-OF-PAGE.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 ACBX.
05 ACBXTYP PIC S9(04) COMP VALUE +0.
05 ACBXVER PIC X(2) VALUE 'F2'.
05 ACBXLEN PIC S9(04) COMP VALUE +192.
05 ACBXCMD PIC X(02) VALUE SPACES.
05 ACBXRSV2 PIC S9(4) COMP VALUE +0.
05 ACBXRSP PIC S9(4) COMP VALUE +0.
05 ACBXCID PIC X(4) VALUE SPACES.
05 ACBXDBID PIC S9(8) COMP VALUE +0.
05 ACBXFNR PIC S9(8) COMP VALUE +0.
05 ACBXISNG PIC S9(8) COMP VALUE +0.
05 ACBXISN PIC S9(8) COMP VALUE +0.
05 ACBXISLG PIC S9(8) COMP VALUE +0.
05 ACBXISL PIC S9(8) COMP VALUE +0.
05 ACBXISQG PIC S9(8) COMP VALUE +0.
05 ACBXISQ PIC S9(8) COMP VALUE +0.
27. COBOL example (Mainframe):
05 ACBXCOP1 PIC X(1) VALUE SPACE.
05 ACBXCOP2 PIC X(1) VALUE SPACE.
05 ACBXCOP3 PIC X(1) VALUE SPACE.
05 ACBXCOP4 PIC X(1) VALUE SPACE.
05 ACBXCOP5 PIC X(1) VALUE SPACE.
05 ACBXCOP6 PIC X(1) VALUE SPACE.
05 ACBXCOP7 PIC X(1) VALUE SPACE.
05 ACBXCOP8 PIC X(1) VALUE SPACE.
05 ACBXADD1 PIC X(8) VALUE SPACES.
05 ACBXADD2 PIC S9(8) COMP VALUE +0.
05 ACBXADD3 PIC X(8) VALUE SPACES.
05 ACBXADD4 PIC X(8) VALUE SPACES.
05 ACBXADD5 PIC X(8) VALUE SPACES.
05 ACBXADD6 PIC X(8) VALUE SPACES.
05 ACBXRSV3 PIC S9(8) COMP VALUE +0.
05 ACBXERRG PIC S9(8) COMP VALUE +0.
05 ACBXERRA PIC S9(8) COMP VALUE +0.
05 ACBXERRB PIC S9(4) COMP VALUE +0.
05 ACBXERRC PIC X(2) VALUE SPACES.
05 ACBXERRD PIC X(1) VALUE SPACE.
05 ACBXERRE PIC X(3) VALUE SPACES.
05 ACBXSUBR PIC S9(4) COMP VALUE +0.
05 ACBXSUBS PIC S9(4) COMP VALUE +0.
05 ACBXSUBT PIC X(4) VALUE SPACES.
05 ACBXLCMP PIC S9(16) COMP VALUE +0.
05 ACBXLDEC PIC S9(16) COMP VALUE +0.
05 ACBXCMDT PIC S9(16) COMP VALUE +0.
05 ACBXUSER PIC X(16) VALUE SPACES.
05 ACBXRSV4 PIC X(24) VALUE SPACES.
*
28. COBOL example (Mainframe):
01 FBABD.
05 FBABDLEN PIC S9(4) COMP VALUE +48.
05 FBABDVER PIC X(2) VALUE 'G2'.
05 FBABDID PIC X(1) VALUE 'F'.
05 FBABDRS1 PIC X(1) .
05 FBABDLOC PIC X(1) VALUE SPACE.
05 FBABDRS2 PIC X(1) .
05 FBABDRS3 PIC S9(8) COMP VALUE +0.
05 FBABDRS4 PIC S9(8) COMP VALUE +0.
05 FBABDSIZ PIC S9(16) COMP VALUE +0.
05 FBABDSND PIC S9(16) COMP VALUE +0.
05 FBABDRCV PIC S9(16) COMP VALUE +0.
05 FBABDRS5 PIC S9(8) COMP VALUE +0.
05 FBABDADR PIC S9(8) COMP VALUE +0.
05 FBCONT PIC X(20) VALUE SPACES.
*
29. COBOL example (Mainframe):
01 RBABD.
05 RBABDLEN PIC S9(4) COMP VALUE +48.
05 RBABDVER PIC X(2) VALUE 'G2'.
05 RBABDID PIC X(1) VALUE 'R'.
05 RBABDRS1 PIC X(1) .
05 RBABDLOC PIC X(1) VALUE SPACE.
05 RBABDRS2 PIC X(1) .
05 RBABDRS3 PIC S9(8) COMP VALUE +0.
05 RBABDRS4 PIC S9(8) COMP VALUE +0.
05 RBABDSIZ PIC S9(16) COMP VALUE +0.
05 RBABDSND PIC S9(16) COMP VALUE +0.
05 RBABDRCV PIC S9(16) COMP VALUE +0.
05 RBABDRS5 PIC S9(8) COMP VALUE +0.
05 RBABDADR PIC S9(8) COMP VALUE +0.
05 RBCONT PIC X(20) VALUE SPACES.
*
*
01 CB-RES PIC S9(8) COMP VALUE +0.
01 CB-REE PIC S9(8) COMP VALUE +0.
*
30. COBOL example (Mainframe):
PROCEDURE DIVISION.
INITIAL-SETUP.
MOVE X'00' TO FBABDRS1.
MOVE X'00' TO RBABDRS1.
MOVE X'00' TO FBABDRS2.
MOVE X'00' TO RBABDRS2.
*
*
MOVE 238 TO ACBXDBID.
MOVE 4 TO ACBXFNR.
MOVE 'L2' TO ACBXCMD.
MOVE 'L2L2' TO ACBXCID.
MOVE 10 TO FBABDSIZ.
MOVE 10 TO FBABDSND.
MOVE 'AA.' TO FBCONT.
MOVE 20 TO RBABDSIZ.
MOVE 20 TO RBABDSND.
PERFORM CALLACBXR 20 TIMES.
*
31. COBOL example (Mainframe): CLOSE-CMD.
MOVE 238 TO ACBXDBID.
MOVE 'CL' TO ACBXCMD.
PERFORM CALLACBX.
STOP RUN.
*
CALLACBX.
CALL 'ADABAS' USING ACBX.
IF ACBXRSP NOT EQUAL TO 0 PERFORM ERR-HAND.
DISPLAY 'COMMAND CODE ' ACBXCMD
*
CALLACBXR.
CALL 'ADABAS' USING ACBX, CB-RES, CB-REE, FBABD, RBABD.
IF ACBXRSP EQUAL 3 THEN GO TO CLOSE-CMD.
IF ACBXRSP NOT EQUAL TO 0 GO TO ERR-HAND.
DISPLAY ACBXCMD ' CMD ' 'ISN= ' ACBXISN ' RECORD= ' RBCONT.
*
ERR-HAND.
DISPLAY '===== ACBX CALL ERROR ===='.
DISPLAY ACBXCMD.
DISPLAY ACBXFNR.
DISPLAY ACBXISN.
DISPLAY ACBXERRC.
*
32. Output from COBOL example:
L2 CMD ISN= 00000001 RECORD= 50005800
L2 CMD ISN= 00000002 RECORD= 50005600
L2 CMD ISN= 00000003 RECORD= 50005500
L2 CMD ISN= 00000004 RECORD= 50005300
L2 CMD ISN= 00000005 RECORD= 50004900
L2 CMD ISN= 00000006 RECORD= 50004600
L2 CMD ISN= 00000007 RECORD= 50004300
L2 CMD ISN= 00000008 RECORD= 50004200
L2 CMD ISN= 00000009 RECORD= 50004100
L2 CMD ISN= 00000010 RECORD= 50004000
L2 CMD ISN= 00000011 RECORD= 50003800
L2 CMD ISN= 00000012 RECORD= 50006900
L2 CMD ISN= 00000013 RECORD= 50007600
L2 CMD ISN= 00000014 RECORD= 50003700
L2 CMD ISN= 00000015 RECORD= 50003500
L2 CMD ISN= 00000016 RECORD= 50003300
L2 CMD ISN= 00000017 RECORD= 50003100
L2 CMD ISN= 00000018 RECORD= 50003000
L2 CMD ISN= 00000019 RECORD= 50002900
L2 CMD ISN= 00000020 RECORD= 50002700
COMMAND CODE CL
33. How does Adalink distinguish between ACB call and ACBX call?
If first parm points to control block with ‘F2’ at offset 2 ? ACBX call
Otherwise, if valid command code at offset 2 ? ACB call
On Mainframe:
Must use Adalink from V8.1 to perform ACBX call
Can use Adalink from V8.1 to perform ACB call
Can use Adalink from previous versions to perform ACB call
even for calls to V8.1 database
Applications can switch between ACB and ACBX calls
Dependent upon Adabas v8.1 features used
RB > 32k (spanned records, LOBs, MUPEX)
34. The following applies to Adabas on Mainframe
Adabas router (ADASVC) supports
clients sending ACB calls
clients sending ACBX calls
servers accepting only ACB calls (e.g., Adabas 7.4)
servers accepting ACB and ACBX calls
ACB calls as is (e.g., Net-Work 6.1)
ACB calls translated (by router) to ACBX format (e.g., Adabas 8.1)
ADASVC does not support translation of ACBX calls to ACB format
35. When registering a server (MPM-0 call):
Set CQHFLAG1.CQH1ACBE if server accepts ACB and ACBX calls
Router translates ACB calls to ACBX format
Used by Adabas 8.1
Additionally set CQHFLAG1.CQH1XACV if server wants ACB calls in ACB format (without translation to ACBX format)
Used by Net-Work 6.1
Must run with ADASVC and ADAMPM of V8.1
When receiving a call:
Router sets CQEFLAG.CQEFIUBE when call is in ACBX format
Issue MPM-108 call (instead of MPM-8) to receive buffers
Otherwise, call is in ACB format; issue MPM-8 to receive buffers
36. When receiving calls with CQEFLAG.CQEFIUBE not set:
MPM-8 call fills in IUB provided by caller (old structure)
When receiving calls with CQEFLAG.CQEFIUBE set:
MPM-108 call returns IUBE in attached buffers (new structure)
37. Sample IUBE structure for call in ACBX format:
38. Natural v4.2 on the Mainframe and Natural 6 on Open Systems supports both ACB & ACBX
Performs ‘mixed’ mode (switching between ACB & ACBX)
Natural Trace example
39. Software AG. Bright ideas, everywhere.