Previous | Contents | Index |
If a VFC file is created on OpenVMS Alpha and then read on Tru64 UNIX, the data record will be returned with the 2-byte control string in the data record when it is read.
The workaround is to convert the file to a non-VFC format on OpenVMS Alpha by specifying /NOVFC. Alternatively, you can skip over the VFC bytes when you read the file on Tru64 UNIX.
The following files are by default created in VFC format on OpenVMS Alpha:
LINAGE
REPORT WRITER
SEQUENTIAL EXTERNAL/GLOBAL
Output with WRITE ADVANCING
Compaq COBOL on Tru64 UNIX provides limited file attribute checking. No file attribute checking is performed for sequential and relative files. For indexed files, Compaq COBOL verifies that the following file attributes match what is specified in the application:
If these attributes do not match, the file will not be opened and a fatal run-time error will occur (or Declaratives will be invoked, if applicable).
However, with the relax key checking option selected, Compaq COBOL for Tru64 UNIX will allow you to open a file that specifies fewer keys than were specified when the file was originally created. This option will provide correct results only in those cases where the unspecified keys are USAGE DISPLAY (PIC X). Also, -rkc allows you to open a file that specifies DUPLICATES for a key in a way differently from the specification given when the file was created.
There is an additional check in creating an indexed file: unless relax
key checking is specified, you cannot have two keys that are identical
except for whether DUPLICATES are allowed. If this restriction is
violated, there will be an explicit run-time error message and those
operations that are affected by DUPLICATES might give unexpected
results.
B.5.5 Indexed Files
Compaq COBOL for Tru64 UNIX treats indexed files differently from the way they are treated by both Compaq COBOL for OpenVMS Alpha and Compaq COBOL for OpenVMS VAX. Specifically, on Tru64 UNIX:
Compaq COBOL for Tru64 UNIX does not support RMS Special Registers. If you include them, you may receive the following general diagnostic message when you attempt to compile the program:
cobol: Severe: ...Undefined name |
Files created by different programming languages may require special processing because of language and character set incompatibilities. The most common incompatibilities are data types and data record formats. You should be aware of the following:
Data types vary by programming language and by utilities. For example, Compaq Fortran does not support the PACKED-DECIMAL data type and, therefore, cannot easily use PACKED-DECIMAL data in COBOL files.
You can use the following techniques to overcome data type incompatibilities:
In the following example, the input file is written in EBCDIC. This creates a file that would be difficult to handle in most languages other than COBOL on OpenVMS Alpha.
ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. ALPHABET FOREIGN-CODE IS EBCDIC. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INPUT-FILE ASSIGN TO "INPFIL" CODE-SET IS FOREIGN-CODE. . . . |
If you use LIB$INITIALIZE when the main program is written in Compaq COBOL on Alpha, or on an OpenVMS VAX version prior to Version 7.1, and the initialize routine is written in Compaq C, the initialize routine will not be called. If you are using OpenVMS VAX Version 7.1 or higher, however, the routine will be called; also, it will be called if your main program is in C or in BASIC rather than COBOL, so this can be a practical workaround.
The problem is due to the quadword alignment with which C creates the
LIB$INITIALIZE psect. The LIB$INITIALIZE psect requires longword
alignment. The programmer can explicitly specify longword alignment on
the extern_model pragma to avoid the problem.
B.8 Reserved Words
Depending on the use of the /RESERVED_WORDS qualifier or equivalent
flag, there are a number of additional reserved words in Compaq COBOL
on Alpha that are not reserved in Compaq COBOL on VAX. Refer to the
appendix on reserved words in the Compaq COBOL Reference Manual for complete
information.
B.9 Debugger Support Differences
Compaq COBOL debugger support on Alpha differs in several ways from VAX, as follows:
%COBOL-I-DEBUGOPT, /NOOPTIMIZE is recommended with /DEBUG |
Compaq COBOL on Alpha does not support the DECset/LSE Program Design
Facility, the /DESIGN qualifier, design comments, or pseudocode
placeholders.
B.11 DBMS Support
On OpenVMS, Compaq COBOL support for Oracle CODASYL DBMS has some
differences depending on whether you are developing programs with
Compaq COBOL on OpenVMS Alpha or with Compaq COBOL for OpenVMS VAX.
B.11.1 Compiling on Tru64 UNIX
In Compaq COBOL for Tru64 UNIX, Oracle CODASYL DBMS sub-schema access (DML for Oracle CODASYL DBMS) is not supported. Attempting to compile a program containing any Oracle CODASYL DBMS syntax results in the following diagnostic message:
cobol: Severe: ...DBMS Data Manipulation Language is not supported |
Oracle CODASYL DBMS syntax includes the following language elements: COMMIT, CONNECT, DB, DB-EXCEPTION, EMPTY, ERASE, FETCH, FIND, FREE, GET, KEEP, LD, MEMBER, MODIFY, OWNER, READY, RECONNECT, RETAINING, ROLLBACK, STORE, SUB-SCHEMA, TENANT, and WHERE.
You might also receive the following general diagnostic message when you attempt to compile a program (on Tru64 UNIX) that contains variables defined in your Oracle CODASYL DBMS sub-schema:
cobol: Severe: ...Undefined name |
With Compaq COBOL for OpenVMS Alpha, when you use multistream Oracle CODASYL DBMS DML, you must access different schemas or streams from separate source files.
<>
Various programming productivity tools can help you increase your productivity as a Compaq COBOL programmer. These include the following:
This appendix includes representative debugging sessions that demonstrate debugger features for both the OpenVMS Debugger and the Tru64 UNIX Ladebug Debugger. These tools are source-level, symbolic debuggers that support Compaq COBOL data types and use.
Both the OpenVMS Debugger and the Tru64 UNIX Ladebug Debugger let you:
The debugging examples in Section C.2 and Section C.3 focus on a sample program, shown in Example C-1. One common program has been used, to emphasize the portability of Compaq COBOL.
As you read the debugging sections that follow, refer to the code in Example C-1 to identify source lines.
The program, TESTA, accepts a character string from the terminal and passes it to contained program TESTB. TESTB reverses the character string and returns it (and its length) to TESTA.
Example C-1 Source Code Used in the Sample Debug Sessions |
---|
module TESTA 1: IDENTIFICATION DIVISION. 2: PROGRAM-ID. TESTA. 3: DATA DIVISION. 4: WORKING-STORAGE SECTION. 5: 01 TESTA-DATA GLOBAL. 6: 02 LET-CNT PIC 9(2)V9(2). 7: 02 IN-WORD PIC X(20). 8: 02 DISP-COUNT PIC 9(2). 9: PROCEDURE DIVISION. 10: BEGINIT. 11: DISPLAY "ENTER WORD:". 12: MOVE SPACES TO IN-WORD. 13: ACCEPT IN-WORD. 14: CALL "TESTB" USING IN-WORD LET-CNT. 15: PERFORM SHOW-IT. 16: STOP RUN. 17: SHOW-IT. 18: DISPLAY IN-WORD. 19: MOVE LET-CNT TO DISP-COUNT. 20: DISPLAY DISP-COUNT " CHARACTERS". 21: IDENTIFICATION DIVISION. 22: PROGRAM-ID. TESTB INITIAL. 23: DATA DIVISION. 24: WORKING-STORAGE SECTION. 25: 01 SUB-1 PIC 9(2) COMP. 26: 01 SUB-2 PIC S9(2) COMP-3. 27: 01 HOLD-WORD. 28: 03 HOLD-CHAR PIC X OCCURS 20 TIMES. 29: 01 HOLD-CHARS-REHOLD-WORD. 30: 03 CHARS PIC X(20). 31: LINKAGE SECTION. 32: 01 TEMP-WORD. 33: 03 TEMP-CHAR PIC X OCCURS 20 TIMES. 34: 01 TEMP-CHARS REDEFINES TEMP-WORD. 35: 03 CHARS PIC X(20). 36: 01 CHARCT PIC 99V99. 37: PROCEDURE DIVISION USING TEMP-WORD, CHARCT. 38: STARTUP. 39: IF TEMP-WORD = SPACES 40: MOVE 0 TO CHARCT 41: EXIT PROGRAM. 42: MOVE SPACES TO HOLD-WORD. 43: PERFORM LOOK-BACK VARYING SUB-1 FROM 20 BY -1 44: UNTIL TEMP-CHAR (SUB-1) NOT = SPACE. 45: MOVE SUB-1 TO CHARCT. 46: PERFORM MOVE-IT VARYING SUB-2 FROM 1 BY 1 UNTIL SUB-1 = 0. 47: MOVE HOLD-WORD TO TEMP-WORD. 48: MOVE-IT. 49: MOVE TEMP-CHAR (SUB-1) TO HOLD-CHAR (SUB-2). 50: SUBTRACT 1 FROM SUB-1. 51: LOOK-BACK. 52: EXIT. 53: END PROGRAM TESTB. 54: END PROGRAM TESTA. |
The Ladebug Debugger is used to debug Compaq COBOL programs on the Tru64 UNIX operating system.
This section provides a representative debugging session that is designed to demonstrate the use of debugger features. For complete reference information on the Ladebug Debugger, you should refer to the Ladebug Debugger Manual in the Tru64 UNIX operating system documentation set. Online help is immediately available to you during a debugging session when you type help command at the debugger prompt (ladebug) . Additional information about the flags shown in this section is available in the man page. For example, you can type man cobol , and page to the appropriate topic to read information about the flags ( -g , -o ) used at the beginning of the example in this section.
% cobol -g -o testa testa.cob cobol: Warning: file not optimized; use -g3 for debug with optimize % |
% ladebug testa Welcome to the Ladebug Debugger Version 2.0.8 eft ------------------ object file name: testa Reading symbolic information ...done (ladebug) |
(ladebug) stop at 43 [#2: stop at "testa.cob":43 ] |
(ladebug) run ENTER WORD |
abc [2] stopped at [TESTB:43 0x120001aa4] 43 PERFORM LOOK-BACK VARYING SUB-1 FROM 20 BY -1 |
(ladebug) stop at 47 [#2: stop at "testa.cob":47 ] (ladebug) when at 50 { print chars of hold-chars; print SUB-1; cont; } [#3: when at "testa.cob":50 { print CHARS of HOLD-CHARS; print SUB-1; ; cont ; } ] |
(ladebug) status #1 PC==0x120001e14 in testa "testa.cob":2 { break } #2 PC==0x120001ba4 in TESTB "testa.cob":47 { break } #3 PC==0x120001c1c in TESTB "testa.cob":50 { ; print CHARS of HOLD-CHARS; print SUB-1; ; cont ; ; } |
(ladebug) list 43,50 43 PERFORM LOOK-BACK VARYING SUB-1 FROM 20 BY -1 44 UNTIL TEMP-CHAR (SUB-1) NOT = SPACE. 45 MOVE SUB-1 TO CHARCT. 46 PERFORM MOVE-IT VARYING SUB-2 FROM 1 BY 1 UNTIL SUB-1 = 0. 47 MOVE HOLD-WORD TO TEMP-WORD. 48 MOVE-IT. 49 MOVE TEMP-CHAR (SUB-1) TO HOLD-CHAR (SUB-2). 50 SUBTRACT 1 FROM SUB-1. |
(ladebug) trace at 15 [#3: trace at "testa.cob":15 ] |
(ladebug) stop disp-count of testa-data [#4: stop if DISP-COUNT of TESTA-DATA changes ] |
(ladebug) cont [3] when [TESTB:50 0x120001c1c] "c " 3 [3] when [TESTB:50 0x120001c1c] "cb " 2 [3] when [TESTB:50 0x120001c1c] "cba " 1 [2] stopped at [TESTB:47 0x120001ba4] 47 MOVE HOLD-WORD TO TEMP-WORD. |
(ladebug) whatis sub-1 unsigned short SUB-1 (ladebug) print sub-1 0 |
(ladebug) whatis sub-2 pic s99 usage comp-3 SUB-2 (ladebug) assign sub-2=-42 |
(ladebug) print sub-2 -42 |
(ladebug) whatis charct pic 99v99 usage display charct (ladebug) print charct 3.00 |
(ladebug) assign charct=15.95 |
(ladebug) print charct 15.95 |
(ladebug) print temp-char of temp-word(2) "b" |
(ladebug) print in-word of testa-data "abc " |
(ladebug) assign charct=3.00 |
(ladebug) cont [3] [calling testa from main cob_main.c:253 0x3ff8181f054] cba [4] The value of DISP-COUNT of TESTA-DATA was changed in testa, before entering cob_acc_display Old value = 0 New value = 3 [4] stopped at [cob_acc_display:349 0x3ff81808744] (Cannot find source file cob_accdis.c) |
(ladebug) where >0 0x3ff81808744 in cob_acc_display() cob_accdis.c:349 #1 0x120001fbc in testa() testa.cob:20 #2 0x3ff8181f054 in main() cob_main.c:253 (ladebug) file testa.cob (ladebug) stop at 20 [#6: stop at "testa.cob":20 ] |
(ladebug) cont 03 CHARACTERS Thread has finished executing |
(ladebug) q <> |
Previous | Next | Contents | Index |