HP OpenVMS Systemsask the wizard |
The Question is: I am calling system services routines from a COBOL program, specifically SYS$SNDJBCW and SYS$GETQUI. I have declared the appropriate items and return values as external constants. Example: 01 W96_JBC_AUTONOTSTART PIC S9(9) COMP VALUE EXTERNAL JBC$_AUTONOTSTART. and 01 WS_QUI$_DISPLAY_ENTRY PIC S9(4) COMP VALUE EXTERNAL QUI$_DISPLAY_ENTRY. However, at link time all these external symbols remain undefined. What do I need to do to resolve the external symbols? The Answer is :
Please read the COBOL manual for assistance with this and with other
similar COBOL programming questions, and please also read the OpenVMS
Programming Concepts manual for information on OpenVMS programming.
The former is specific to COBOL programming, while the latter OpenVMS
documentation targets on OpenVMS programming interfaces and details.
The OpenVMS COBOL programming documentation and the OpenVMS operating
system documentation contain information and details for accessing
system services from various languages. You must read these manuals.
Properly-declared system service calls are resolved automatically during
the OpenVMS LINK operation.
For general programming information and for pointers to the COBOL
programming materials, please see:
http://www.openvms.compaq.com/doc/
http://www.openvms.compaq.com/doc/73final/cobol/
cobum_004.htm#link_sec
http://www.openvms.compaq.com/doc/73final/cobol/
cobum_040.htm#vms_ssr_sec
http://www.openvms.compaq.com/doc/73final/cobol/
cobum_041.htm#ret_stat_con_val_sec
COBOL does not provide a mechanism for language-specific include files
akin to that of Macro32, C, Fortran or other languages, and thus COBOL
relies on external references and linking with object modules built
using other languages (such as the Macro32 assembler or the Macro32
compiler) for access to these and other OpenVMS definitions.
http://www.openvms.compaq.com/doc/73final/cobol/
cobum_041.htm#inter_ex_sec
The OpenVMS Wizard strongly encourages you to become familar with the
AskQ website referenced in the OpenVMS FAQ, with the other COBOL-related
discussions here in the Ask The Wizard area -- including topics (1091),
(1134), (2228), (3061), (6353), and (8137), and particularly to become
familiar with the available COBOL and OpenVMS Programming Documentation.
-- here is SETSYM.COB
identification division.
program-id. SETSYM.
environment division.
data division.
working-storage section.
01 LOCAL-SYM pic S9(9) comp value external LIB$K_CLI_LOCAL_SYM.
01 GLOBAL-SYM pic S9(9) comp value external LIB$K_CLI_GLOBAL_SYM.
01 COND-VAL pic S9(9) comp.
88 COND-NORMAL value external SS$_NORMAL.
88 COND-AMBSYMDEF value external LIB$_AMBSYMDEF.
procedure division.
1. call "LIB$SET_SYMBOL" using
by descriptor "XSET*SYM"
by descriptor "Test1A"
by reference LOCAL-SYM
giving COND-VAL.
if COND-AMBSYMDEF display "Ambiguous"
else if COND-NORMAL display "OK"
else display "Not OK".
2. call "LIB$SET_SYMBOL" using
by descriptor "XSETS"
by descriptor "Test1B"
by reference LOCAL-SYM
giving COND-VAL.
if COND-AMBSYMDEF display "Ambiguous"
else if COND-NORMAL display "OK"
else display "Not OK".
3. call "LIB$SET_SYMBOL" using
by descriptor "XSETS"
by descriptor "Test1C"
by reference GLOBAL-SYM
giving COND-VAL.
if COND-AMBSYMDEF display "Ambiguous"
else if COND-NORMAL display "OK"
else display "Not OK".
9. stop run.
-- here is HLPDEF.MAR
.TITLE hlpdef
$HLPDEF GLOBAL ; case sensitive!
.END
-- here is SETSYM.COM
$ cobol setsym
$ macro hlpdef
$ link setsym,hlpdef
$ run setsym
$ show symbol xset*
-- here is the output of SETSYM.COM
OK
Ambiguous
OK
XSETS == "Test1C"
XSET*SYM = "Test1A"
|