Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

HELP: PL1 access ADABAS complie error

11 views
Skip to first unread message

kelvin

unread,
Nov 11, 2009, 11:47:14 PM11/11/09
to
Hi guys,

I am a newbie in the pl1 world. I am glad to find such place to learn
pl1 language.
I meet a problem when accessing ADABAS from PL1.
Hope you guys give me some advice, and thanks in advance!

The problem information as follow:
OS: windows xp
Development platform and tools: IBM Rational Developer for System z,
Adabas 6.1.8 community edition

The accessAdabas.OBJ has been generated successfully.When I do the
action of linking the .obj+.ddl to .exe application,
---ilink accessAdabas.OBJ adalnks.lib adalnk32.lib adalnknc.lib
The complier throw the exception:
---error LNK2029: "?ADABAS":unresolved external
---There was 1 error detected

The source code pasted:
>>>>>>>>>>>>>>>>>>>>>>>>>>
*process langlvl(saa2);
*process or('|');
*process prefix(nofofl);


accessadabas: proc();

/*** CONTROL BLOCK ***/
DCL 1 CONTROL_BLOCK,
02 FILLER1 CHAR (2) INIT (' '),
02 COMMAND_CODE CHAR (2) INIT (' '),
02 COMMAND_ID CHAR (4) INIT (' '),
02 FILE_NUMBER BIN FIXED (15) INIT (0),
02 RESPONSE_CODE BIN FIXED (15) INIT (0),
02 ISN BIN FIXED (31) INIT (0),
02 ISN_LOWER_LIMIT BIN FIXED (31) INIT (0),
02 ISN_QUANTITY BIN FIXED (31) INIT (0),
02 FORMAT_BUFFER_LENGTH BIN FIXED (15) INIT (100),
02 RECORD_BUFFER_LENGTH BIN FIXED (15) INIT (250),
02 SEARCH_BUFFER_LENGTH BIN FIXED (15) INIT (50),
02 VALUE_BUFFER_LENGTH BIN FIXED (15) INIT (100),
02 ISN_BUFFER_LENGTH BIN FIXED (15) INIT (20),
02 COMMAND_OPTION_1 CHAR(1) INIT (' '),
02 COMMAND_OPTION_2 CHAR(1) INIT (' '),
02 ADDITIONS_1 CHAR(8) INIT (' '),
02 ADDITIONS_2 CHAR(4) INIT (' '),
02 ADDITIONS_3 CHAR(8) INIT (' '),
02 ADDITIONS_4 CHAR(8) INIT (' '),
02 ADDITIONS_5 CHAR(8) INIT (' '),
02 COMMAND_TIME BIN FIXED (31) INIT (0),
02 USER_AREA CHAR(4) INIT (' ');

/*** USER BUFFER AREAS ***/
DCL FORMAT_BUFFER CHAR(100),
RECORD_BUFFER CHAR(250),
SEARCH_BUFFER CHAR(50),
VALUE_BUFFER CHAR(100),
ISN_BUFFER CHAR(20);

/*** ADDITIONAL FIELDS USED IN THE EXAMPLES ***/
DCL
COMM_ID_X BIN FIXED(31);
/*** COMM_ID CHAR(4) BASED (ADDR(COMM_ID_X)); ***/
DCL INPUT_KEY CHAR(8);
DCL SYNC_CHECK_SWITCH CHAR(1) INIT('0');
DCL 1 RECORD_BUFFER_EX2,
2 RECORD_BUFFER_A CHAR(8),
2 RECORD_BUFFER_B DEC FIXED(3,0),
2 FILLER3 CHAR(240);
DCL 1 RECORD_BUFFER_EX3,
2 OPEN_RECORD_BUFFER,
3 OPEN_RECORD_BUFFER_X CHAR(8),
3 FILLER4 BIN FIXED(31),
2 FILLER5 CHAR(18),
2 UPDATED_XC CHAR(6),
2 LAST_XD CHAR(8),
2 FILLER6 CHAR(5),
1 USER_DATA,
2 RESTART_XD CHAR(8),
2 RESTART_ISN BIN FIXED(31);
DCL ADABAS ENTRY OPTIONS(ASM);

/*** Issue Open Command **/
EXMP1:
COMMAND_CODE = 'OP';
RECORD_BUFFER = 'ACC.';
CALL ADABAS (CONTROL_BLOCK,FORMAT_BUFFER,RECORD_BUFFER);
IF RESPONSE_CODE > 0 THEN GOTO EX1ERR;


/*** Issue Find Command ***/
COMMAND_CODE = 'S1';
COMMAND_ID = 'S101';
FILE_NUMBER = 2;
ISN_LOWER_LIMIT = 0;
ISN_BUFFER_LENGTH = 0;
FORMAT_BUFFER = '.';
SEARCH_BUFFER = 'XB,3,U.';
VALUE_BUFFER = '099';
CALL ADABAS (CONTROL_BLOCK, FORMAT_BUFFER,
RECORD_BUFFER, SEARCH_BUFFER, VALUE_BUFFER);
IF RESPONSE_CODE > 0 THEN GOTO EX1ERR;
EX1A:
IF ISN_QUANTITY = 0 THEN GOTO EX1EXIT;
EX1B:
COMMAND_CODE = 'L1';
ISN = 0;
COMMAND_OPTION_1 = 'N';
FORMAT_BUFFER = 'RG.';
EX1C:
CALL ADABAS (CONTROL_BLOCK,FORMAT_BUFFER,RECORD_BUFFER);
IF RESPONSE_CODE = 0 THEN
GOTO EX1D;
IF RESPONSE_CODE = 3 THEN
GOTO EX1EXIT;
EX1D:
/*** . . .PROCESS RECORD . . . ***/
Display(FORMAT_BUFFER);
Display(RECORD_BUFFER);
GOTO EX1C;

/*** Error Routine ***/
EX1ERR:
/* . DISPLAY ERROR MESSAGE */
/* . TERMINATE USER PROGRAM */

/** Issue Close Command **/
EX1EXIT:
COMMAND_CODE = 'CL';
CALL ADABAS (CONTROL_BLOCK);
IF RESPONSE_CODE > 0 THEN
GOTO EX1ERR;

end accessadabas;

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Thanks&Best regards,
Kelvin

Peter Flass

unread,
Nov 12, 2009, 6:56:20 AM11/12/09
to
Upper/lower case mismatch? Try either case-insensitive linking or (if
this version of PL/I supports the option) the "environment name" on the
EXTERNAL attribute to specify the correct case.

kelvin

unread,
Nov 12, 2009, 8:58:31 AM11/12/09
to
On Nov 12, 8:56 pm, Peter Flass <Peter_Fl...@Yahoo.com> wrote:
> Upper/lower case mismatch?  Try either case-insensitive linking or (if
> this version of PL/I supports the option) the "environment name" on the
> EXTERNAL attribute to specify the correct case.
>

HI Peter,

Thanks for your information!
you are right. It passed the compile after one line is added:
---FETCH ADABAS title('adalnk32/adabas');

Could you kindly answer me another question?


>>>>>
/*** CONTROL BLOCK ***/
DCL 1 CONTROL_BLOCK,
02 FILLER1 CHAR (2) INIT (' ')
>>>>

I do not familiar with PL/I grammar.
Is it possible to assign decimal 12 to the first char of 'FILLER1' in
the hexadecimal format?
(like 0xC?)

Thanks & Best regards,
Kelvin

James J. Weinkam

unread,
Nov 12, 2009, 4:20:48 PM11/12/09
to
kelvin wrote:
> 02 FILLER1 CHAR (2) INIT (' ')
>
> I do not familiar with PL/I grammar.
> Is it possible to assign decimal 12 to the first char of 'FILLER1' in
> the hexadecimal format?
> (like 0xC?)

... init('0c'x),

kelvin

unread,
Nov 13, 2009, 2:13:33 AM11/13/09
to

Hi James,

Thanks for your help!
Could you do me another favor, which confirm the following data
structure definition in PL/I is correct or not?

>>>>>>>>>requirement start >>>>>>>>>>>>>>>
Name Field Control Offset Length Format
Block (in Bytes)
Position
ACBTYPE Call Type 1 00 1 binary
reserved (reserved) 2 01 1 binary
ACBCMD Command Code 3-4 02 2 alphanumeric
ACBCID Command ID 5-8 04 4 alphanumeric / binary
ACBFNR File Number 9-10 08 2 binary
ACBRSP Response Code 11-12 0A 2 binary
>>>>>>>>>requirement end>>>>>>>>>>>>>>>

>>>>>>>>>>>>correspond to PL1 data structure start>>>>>>>>>>>>
DCL 1 CONTROL_BLOCK,
02 CALL_TYPE BIN FIXED (7) INIT (0),
02 CB_RESERVER BIN FIXED (7) INIT (0),


02 COMMAND_CODE CHAR (2) INIT (' '),
02 COMMAND_ID CHAR (4) INIT (' '),

02 FILE_NUMBER BIN FIXED (15) INIT (1101),
02 RESPONSE_CODE BIN FIXED (15) INIT (0);

>>>>>>>>>>>>correspond to PL1 data structure end>>>>>>>>>>>>>>>

James J. Weinkam

unread,
Nov 13, 2009, 3:21:37 PM11/13/09
to
kelvin wrote:
...

> Could you do me another favor, which confirm the following data
> structure definition in PL/I is correct or not?
>
>>>>>>>>>> requirement start >>>>>>>>>>>>>>>
> Name Field Control Offset Length Format
> Block (in Bytes)
> Position
> ACBTYPE Call Type 1 00 1 binary
> reserved (reserved) 2 01 1 binary
> ACBCMD Command Code 3-4 02 2 alphanumeric
> ACBCID Command ID 5-8 04 4 alphanumeric / binary
> ACBFNR File Number 9-10 08 2 binary
> ACBRSP Response Code 11-12 0A 2 binary
>>>>>>>>>> requirement end>>>>>>>>>>>>>>>
>
>>>>>>>>>>>>> correspond to PL1 data structure start>>>>>>>>>>>>
> DCL 1 CONTROL_BLOCK,
> 02 CALL_TYPE BIN FIXED (7) INIT (0),
> 02 CB_RESERVER BIN FIXED (7) INIT (0),
> 02 COMMAND_CODE CHAR (2) INIT (' '),
> 02 COMMAND_ID CHAR (4) INIT (' '),
> 02 FILE_NUMBER BIN FIXED (15) INIT (1101),
> 02 RESPONSE_CODE BIN FIXED (15) INIT (0);
>
>>>>>>>>>>>>> correspond to PL1 data structure end>>>>>>>>>>>>>>>

I see no syntax errors in your declaration. I have two minor comments: 1)
reserved is misspelled -- of course this is not a programming error as long as
you are consistent; 2) the initial value for file number consists only of
zeros and ones --if you intend the value to be one thousand one hundred and
one you are correct; if you intend the value to be thirteen you need to write
either 13 or 1101b.

0 new messages