OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic...

43
OpenCOBOL Manual for OpenCOBOL 2.0 Keisuke Nishida / Roger While Edition 2.0 Updated for OpenCOBOL 2.0 26 January 2012 OpenCOBOL is an open-source COBOL compiler, which translates COBOL programs to C code and compiles it using GCC or other C compiler system. This manual corresponds to OpenCOBOL 2.0. Copyright c 2002,2003,2004,2005,2006 Keisuke Nishida Copyright c 2007-2012 Roger While Permission is granted to make and distribute verbatim copies of this manual provided the copy- right notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the condi- tions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation.

Transcript of OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic...

Page 1: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

OpenCOBOL Manualfor OpenCOBOL 2.0

Keisuke Nishida / Roger WhileEdition 2.0Updated for OpenCOBOL 2.026 January 2012

OpenCOBOL is an open-source COBOL compiler, which translates COBOL programs to C codeand compiles it using GCC or other C compiler system.This manual corresponds to OpenCOBOL 2.0.

Copyright c© 2002,2003,2004,2005,2006 Keisuke NishidaCopyright c© 2007-2012 Roger WhilePermission is granted to make and distribute verbatim copies of this manual provided the copy-right notice and this permission notice are preserved on all copies.Permission is granted to copy and distribute modified versions of this manual under the condi-tions for verbatim copying, provided that the entire resulting derived work is distributed underthe terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language,under the above conditions for modified versions, except that this permission notice may bestated in a translation approved by the Free Software Foundation.

Page 2: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

i

Table of Contents

1 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1 Hello World! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

2 Compile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.1 Compiler Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.1.1 Help Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.1.2 Built Target . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.1.3 Source Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.1.4 Warning Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.1.5 Configuration Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.1.6 Debug Switches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.1.7 Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2 Multiple Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2.1 Static Linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2.2 Dynamic Linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2.3 Building Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.2.4 Using Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.3 C Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3.1 Writing Main Program in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3.2 Static linking with COBOL programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.3.3 Dynamic linking with COBOL programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3.4 Static linking with C programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.3.5 Dynamic linking with C programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3 Customize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.1 Customizing Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.2 Customizing Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

4 Optimize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.1 Optimize Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.2 Optimize Call . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.3 Optimize Binary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

5 Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145.1 Debug Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

Appendix A cobc --help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Appendix B cobc --info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

Appendix C cobc --list-reserved . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Appendix D cobc --list-intrinsics . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Appendix E cobc --list-system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

Page 3: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

ii

Appendix F cobc --list-mnemonics . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

Appendix G config/default.conf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Page 4: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Chapter 1: Getting Started 1

1 Getting Started

1.1 Hello World!

This is a sample program that displays “Hello World”:---- hello.cob -------------------------

* Sample COBOL programIDENTIFICATION DIVISION.PROGRAM-ID. hello.PROCEDURE DIVISION.DISPLAY "Hello World!".STOP RUN.

----------------------------------------

The compiler is cobc, which is executed as follows:$ cobc -x hello.cob$ ./helloHello World!

The executable file name (i.e., ‘hello’ in this case) is determined by removing the extensionfrom the source file name.

You can specify the executable file name by specifying the compiler option -o as follows:$ cobc -x -o hello-world hello.cob$ ./hello-worldHello World!

Using more modern sources.---- hellonew.cob ----------------*> Sample OpenCOBOL programidentification division.program-id. hellonew.procedure division.display

"Hello New World!"end-displaygoback.----------------------------------

$ cobc -x -free hellonew.cob$ ./hellonewHello New World!

Showing the use of free format, to end of line comments, the goback verb, and proper use ofterminator with end-display.

Page 5: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Chapter 2: Compile 2

2 Compile

This chapter describes how to compile COBOL programs using OpenCOBOL.

2.1 Compiler Options

The compiler cobc accepts the options described in this section.General syntax -cobc [options] file [file ..]A complete list of options can be displayed by using the help option.

2.1.1 Help Options

The following switches can be used for informational displays:

--help Display help screen (see Appendix A [cobc –help], page 15). -h will also display thehelp. No further actions will be taken except for further display options.

--versionDisplay compiler version, author package date and executable build date. -V willalso display version. No further actions will be taken except for further displayoptions.

--info Display build information (see Appendix B [cobc –info], page 18). No further actionswill be taken except for further display options.

-v Verbosely displays the programs invoked during compilations.

--list-reservedDisplay reserved words(see Appendix C [cobc –list-reserved], page 19). A Y/N fieldshows if the word is supported.1 No further actions will be taken except for furtherdisplay options.

--list-intrinsicsDisplay intrinsic functions (see Appendix D [cobc –list-intrinsics], page 31). A Y/Nfield shows if the function is implemented. No further actions will be taken exceptfor further display options.

--list-systemDisplay system routines (see Appendix E [cobc –list-system], page 34). No furtheractions will be taken except for further display options.

--list-mnemonicsDisplay mnemonic names (see Appendix F [cobc –list-mnemonics], page 36). Nofurther actions will be taken except for further display options.

2.1.2 Built Target

The cobc compiler can handle ‘*.cob’, ‘*.cbl’ as COBOL source code, ‘*.c’ for C source code,‘*.o’ for object code, ‘*.i’ for preprocessed code and ‘*.so’ for dynamic modules and will dothe right thing in terms of generation, compilation, or link.

The following options specify the target type produced by the compiler:

-E Preprocess only. Compiler directives are executed. Comment lines are removed.COPY statements are expanded. The output is saved in file ‘*.i’.

-C Translation only. COBOL source files are translated into C files. The output issaved in file ‘*.c’.

1 Support may be partial or complete

Page 6: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Chapter 2: Compile 3

-S Compile only. Translated C files are compiled by the C compiler to assembler code.The output is saved in file ‘*.s’.

-c Compile and assemble. This is equivalent to cc -c. The output is saved in file ‘*.o’.

-m Compile, assemble, and build a dynamically loadable module (i.e., a shared library).The output is saved in file ‘*.so’. This is the default behaviour if not other optionsare given.2.

-b Compile, assemble, and combine all input files into a single dynamically loadablemodule. Unless -o is also used, the output is saved using the first filename as ‘*.so’.

-x Include the main function in the output, creating an executable image. The mainentry point being the outermost PROGRAM-ID.This option takes effect at the translation stage. If you give this option with -C,you will see the main function at the end of the generated C file.

-I <directory>Add <directory> to copy/include search path

-L <directory>Add <directory> to library search path

-l <lib> Link the library <lib>

-D <define>Pass <define> to the COBOL compiler

-o <file> Place the output into <file>

Without any options above, the compiler builds a dynamically loadable module.

2.1.3 Source Format

OpenCOBOL supports both fixed and free source format.The default format is the fixed format. This can be explicitly overwritten by one of the

following options:

-free Free format. The program-text area starts in column 1 and continues till the endof line. Effectively 255 characters in OpenCOBOL.

-fixed Fixed format. Source code is divided into a 1-6 column sequence number area,column 7 indicator area, columns 8-72 program-text area, with columns 72-80 asa reference area. Historically this format is based on 80 character punch cards.FIXED format is the default used by the compiler unless overridden by compilerswitch or source code directive, >>SOURCE [FORMAT] [IS] {FIXED|FREE}.

2.1.4 Warning Options

-W Enable every possible warning. This includes more information than -Wall wouldnormally provide.

-Wall Enable all common warnings

-WarchaicWarn if archaic features are used

-Wcall-paramsWarn non 01/77 items for CALL params (NOT set with -Wall)

2 The extension varies depending on your host.

Page 7: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Chapter 2: Compile 4

-Wcolumn-overflowWarn if text after column 72 in FIXED format (NOT set with -Wall)

-WconstantWarn inconsistent constant

-Wimplicit-defineWarn implicitly defined data items

-WlinkageWarn dangling LINKAGE items (NOT set with -Wall)

-WobsoleteWarn if obsolete features are used

-WparenthesesWarn lack of parentheses around AND within OR

-WredefinitionWarn incompatible redefinition of data items

-Wstrict-typingWarn type mismatch strictly

-WterminatorWarn lack of scope terminator END-XXX (NOT set with -Wall)

-WtruncateWarn possible field truncation (NOT set with -Wall)

-WunreachableWarn unreachable statements (NOT set with -Wall)

2.1.5 Configuration Options

-std=<dialect>Compiler uses the given dialect to determine certain compiler features and warnings.See Appendix G [config/default.conf], page 38, and ‘config/*.conf’.

-std=cobol2002Cobol 2002

-std=cobol85Cobol 85

-std=ibm IBM Compatible

-std=mvs MVS Compatible

-std=bs2000BS2000 Compatible

-std=mf Micro Focus Compatible

-std=defaultWhen not specified

-conf=<file>User defined dialect configuration. See -std= above.See Appendix G [config/default.conf], page 38, and ‘config/*.conf’.

Page 8: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Chapter 2: Compile 5

2.1.6 Debug Switches

-debug Enable all run-time error checking

-g Produce debugging information in the output

-O Enable optimization of code size and execution speed. See man gcc for details.

-O2 Optimize even more.

-Os Optimize for size. Optimizer will favour code size over execution speed.

-ftrace Generate trace code (Executed SECTION/PARAGRAPH)

-ftraceallGenerate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)

-fsyntax-onlySyntax error checking only; don’t emit any output

-fdebugging-lineEnable debugging lines (’D’ in indicator column)

-fsource-locationGenerate source location code (Turned on by -debug or -g)

-fimplicit-initDo automatic initialization of the Cobol runtime system

-fstack-checkPERFORM stack checking (Turned on by -debug or -g)

-fnotruncDo not truncate binary fields according to PICTURE

2.1.7 Miscellaneous

-P Generate and place a program listing into ‘*.lst’

-ext <extension>Add default file extension

-fmfcomment’*’ or ’/’ in column 1 treated as comment (FIXED only)

-fsign=ASCIINumeric display sign ASCII (Default on ASCII machines)

-fsign=EBCDICNumeric display sign EBCDIC (Default on EBCDIC machines)

-ffunctions-allAllow use of intrinsic functions without FUNCTION keyword

-ffold-copy=LOWERFold COPY subject to lower case (Default no transformation)

-ffold-copy=UPPERFold COPY subject to upper case (Default no transformation)

-save-temps(=<dir>)Save intermediate files (default current directory)

Page 9: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Chapter 2: Compile 6

2.2 Multiple Sources

A program often consists of multiple source files. This section describes how to compile multiplesource files.

This section also describes how to build a shared library that can be used by any COBOLprograms and how to use external libraries from COBOL programs.

2.2.1 Static Linking

The easiest way of combining multiple files is to compile them into a single executable.One way is to specify all files on the command line:

$ cobc -x -o prog main.cob subr1.cob subr2.cob

Another way is to compile each file with the option -c, and link them at the end. Thetop-level program must be compiled with the option -x:

$ cobc -c subr1.cob$ cobc -c subr2.cob$ cobc -c -x main.cob$ cobc -x -o prog main.o subr1.o subr2.o

You can link C routines as well using either method:Method 1:

$ cobc -o prog main.cob subrs.c

Method 2:$ cobc -c subrs.c$ cobc -c -x main.cob$ cobc -x -o prog main.o subrs.o

Any number of functions can be contained in a single C file.The linked programs will be called dynamically; that is, the symbol will be resolved at run

time. For example, the following COBOL statementCALL "subr" USING X.

will be converted into an equivalent C code like this:int (*func)() = cob_resolve("subr");if (func != NULL)func (X);

With the compiler options -fstatic-call, more efficient code will be generated like this:subr(X);

Note that this option is effective only when the called program name is a literal (like CALL"subr".). With a data name (like CALL SUBR.), the program is still called dynamically.

2.2.2 Dynamic Linking

There are two methods to achieve this. Method 1 (Using driver program). Compile all programswith the option -m:

$ cobc -m main.cob subr.cob

This creates shared object files ‘main.so subr.so’3.Before running the main program, install the module files in your library directory:

$ cp subr.so /your/cobol/lib

Set the environment variable COB_LIBRARY_PATH to your library directory, and run the mainprogram:

3 The extension varies depending on your host.

Page 10: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Chapter 2: Compile 7

$ export COB_LIBRARY_PATH=/your/cobol/lib

Note: You may set the variable to directly point to the directory where you compiled thesources.

Now execute your program:$ cobcrun main

Method 2. The main program and subprograms can be compiled separately.The main program is compiled as usual:

$ cobc -x -o main main.cob

Subprograms are compiled with the option -m:$ cobc -m subr.cob

This creates a module file ‘subr.so’4.Before running the main program, install the module files in your library directory:

$ cp subr.so /your/cobol/lib

Now, set the environment variable COB_LIBRARY_PATH to your library directory, and run themain program:

$ export COB_LIBRARY_PATH=/your/cobol/lib$ ./main

2.2.3 Building Library

You can build a shared library by combining multiple COBOL programs and even C routines:$ cobc -c subr1.cob$ cobc -c subr2.cob$ cc -c subr3.c$ cc -shared -o libsubrs.so subr1.o subr2.o subr3.o

2.2.4 Using Library

You can use a shared library by linking it with your main program.Before linking the library, install it in your system library directory:

$ cp libsubrs.so /usr/lib

or install it somewhere else and set LD_LIBRARY_PATH:$ cp libsubrs.so /your/cobol/lib$ export LD_LIBRARY_PATH=/your/cobol/lib

Then, compile the main program, linking the library as follows:$ cobc -x main.cob -L/your/cobol/lib -lsubrs

2.3 C Interface

This chapter describes how to combine C programs with COBOL programs.

2.3.1 Writing Main Program in C

Include ‘libcob.h’ in your C program. Call cob_init before using any COBOL module:#include <libcob.h>

intmain (int argc, char **argv)

4 The extension varies depending on your host.

Page 11: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Chapter 2: Compile 8

{/* initialize your program */...

/* initialize the COBOL run-time library */cob_init (argc, argv);

/* rest of your program */...

/* Clean up and terminate - This does not return */cob_stop_run (return_status);

}

You can write cobc_init(0, NULL); if you do not want to pass command line arguments toCOBOL.

You can compile your C program as follows:cc -c ‘cob-config --cflags‘ main.c

The compiled object must be linked with libcob as follows:cc -o main main.o ‘cob-config --libs‘

2.3.2 Static linking with COBOL programs

Let’s call the following COBOL module from a C program:---- say.cob ---------------------------

IDENTIFICATION DIVISION.PROGRAM-ID. say.ENVIRONMENT DIVISION.DATA DIVISION.LINKAGE SECTION.01 HELLO PIC X(6).01 WORLD PIC X(6).PROCEDURE DIVISION USING HELLO WORLD.DISPLAY HELLO WORLD.EXIT PROGRAM.

----------------------------------------

This program accepts two arguments, displays them, and exits.From the viewpoint of C, this is equivalent to a function having the following prototype:

extern int say(char *hello, char *world);

So, your main program will look like as follows:---- hello.c ---------------------------#include <libcob.h>

extern int say(char *hello, char *world);

intmain(){int ret;char hello[7] = "Hello ";

Page 12: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Chapter 2: Compile 9

char world[7] = "World!";

cob_init(0, NULL);

ret = say(hello, world);

return ret;}----------------------------------------

Compile these programs as follows:$ cc -c ‘cob-config --cflags‘ hello.c$ cobc -c -static say.cob$ cobc -x -o hello hello.o say.o$ ./helloHello World!

2.3.3 Dynamic linking with COBOL programs

You can find a COBOL module having a specific PROGRAM-ID by using a C function cob_resolve, which takes the module name as a string and returns a pointer to the module function.

cob_resolve returns NULL if there is no module. In this case, the function cob_resolve_error returns the error message.

Let’s see an example:---- hello-dynamic.c -------------------#include <libcob.h>

static int (*say)(char *hello, char *world);

intmain(){int ret;char hello[7] = "Hello ";char world[7] = "World!";

cob_init(0, NULL);

/* find the module with PROGRAM-ID "say". */say = cob_resolve("say");

/* if there is no such module, show error and exit */if (say == NULL) {fprintf(stderr, "%s\n", cob_resolve_error ());exit(1);

}

/* call the module found and exit with the return code */ret = say(hello, world);

return ret;}----------------------------------------

Page 13: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Chapter 2: Compile 10

Compile these programs as follows:

$ cc -c ‘cob-config --cflags‘ hello-dynamic.c$ cobc -x -o hello hello-dynamic.o$ cobc -m say.cob$ export COB_LIBRARY_PATH=.$ ./helloHello World!

2.3.4 Static linking with C programs

Let’s call the following C function from COBOL:

---- say.c -----------------------------intsay(char *hello, char *world){int i;for (i = 0; i < 6; i++)putchar(hello[i]);

for (i = 0; i < 6; i++)putchar(world[i]);

putchar(’\n’);return 0;

}----------------------------------------

This program is equivalent to the foregoing ‘say.cob’.

Note that, unlike C, the arguments passed from COBOL programs are not terminated bythe null character (i.e., \0).

You can call this function in the same way you call COBOL programs:

---- hello.cob -------------------------IDENTIFICATION DIVISION.PROGRAM-ID. hello.ENVIRONMENT DIVISION.DATA DIVISION.WORKING-STORAGE SECTION.01 HELLO PIC X(6) VALUE "Hello ".01 WORLD PIC X(6) VALUE "World!".PROCEDURE DIVISION.CALL "say" USING HELLO WORLD.STOP RUN.

----------------------------------------

Compile these programs as follows:

$ cc -c say.c$ cobc -c -static -x hello.cob$ cobc -x -o hello hello.o say.o$ ./helloHello World!

2.3.5 Dynamic linking with C programs

You can create a dynamic-linking module from a C program by passing an option -shared tothe C compiler:

Page 14: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Chapter 2: Compile 11

$ cc -shared -o say.so say.c$ cobc -x hello.cob$ export COB_LIBRARY_PATH=.$ ./helloHello World!

Page 15: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Chapter 3: Customize 12

3 Customize

3.1 Customizing Compiler

These settings are effective at compile-time.Environment variables (default value):

COB_CC C compiler ("gcc")

COB_CFLAGSFlags passed to the C compiler ("-I$(PREFIX)/include")

COB_LDFLAGSFlags passed to the C compiler ("")

COB_LIBS Standard libraries linked with the program ("-L$(PREFIX)/lib -lcob")

COB_LDADDAdditional libraries linked with the program ("")

3.2 Customizing Library

These settings are effective at run-time.Environment variables (default value):

COB_LIBRARY_PATHDynamic-linking module path (".:$(PREFIX)/lib/open-cobol")

Page 16: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Chapter 4: Optimize 13

4 Optimize

4.1 Optimize Options

There are three compiler options for optimization: -O, -Os and -O2. These options enableoptimization at both translation (from COBOL to C) and compilation (C to assembly) levels.

Currently, there is no difference between these optimization options at the translation level.The option -O, -Os or -O2 is passed to the C compiler as it is and used for C level optimization.

4.2 Optimize Call

When a CALL statement is executed, the called program is linked at run time. By specifyingthe compiler option -fstatic-call, you can statically link the program at compile time andcall it efficiently. (see Section 2.2.1 [Static Linking], page 6)

4.3 Optimize Binary

By default, data items of usage binary or comp are stored in the big-endian form. On thosemachines whose native byte order is little-endian, this is not quite efficient.

If you prefer, you can store binary items in the native form of your machine. Set the configoption binary-byteorder to native in your config file (see Chapter 3 [Customize], page 12).

In addition, setting the option binary-size to 2-4-8 or 1-2-4-8 is more efficient thanothers.

Page 17: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Chapter 5: Debug 14

5 Debug

5.1 Debug Options

The compiler option -debug can be used during the development of your programs. It enablesall run-time error checking, such as subscript boundary checks and numeric data checks, anddisplays run-time errors with source locations.

Page 18: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix A: cobc --help 15

Appendix A cobc --help

Usage: cobc [options] file ...

Options:-help Display this message-version, -V Display compiler version-info, -i Display compiler build information-v Display the commands invoked by the compiler-x Build an executable program-m Build a dynamically loadable module (default)-std=<dialect> Warnings/features for a specific dialect :

cobol2002 Cobol 2002cobol85 Cobol 85ibm IBM Compatiblemvs MVS Compatiblebs2000 BS2000 Compatiblemf Micro Focus Compatibledefault When not specified

See config/default.conf and config/*.conf-free Use free source format-fixed Use fixed source format (default)-O, -O2, -Os Enable optimization-g Enable C compiler debug / stack check / trace-debug Enable all run-time error checking-o <file> Place the output into <file>-b Combine all input files into a single

dynamically loadable module-E Preprocess only; do not compile or link-C Translation only; convert COBOL to C-S Compile only; output assembly file-c Compile and assemble, but do not link-P(=<dir or file>) Generate preprocessed program listing (.lst)-Xref Generate cross reference through ’cobxref’

(V. Coen’s ’cobxref’ must be in path)-I <directory> Add <directory> to copy/include search path-L <directory> Add <directory> to library search path-l <lib> Link the library <lib>-A <options> Add <options> to the C compile phase-Q <options> Add <options> to the C link phase-D <define> DEFINE <define> to the COBOL compiler-K <entry> Generate CALL to <entry> as static-conf=<file> User defined dialect configuration - See -std=-list-reserved Display reserved words-list-intrinsics Display intrinsic functions-list-mnemonics Display mnemonic names-list-system Display system routines-save-temps(=<dir>) Save intermediate files

- Default : current directory-ext <extension> Add default file extension

-W Enable ALL warnings

Page 19: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix A: cobc --help 16

-Wall Enable all warnings except as noted below-Wobsolete Warn if obsolete features are used-Warchaic Warn if archaic features are used-Wredefinition Warn incompatible redefinition of data items-Wconstant Warn inconsistent constant-Woverlap Warn overlapping MOVE items-Wparentheses Warn lack of parentheses around AND within OR-Wstrict-typing Warn type mismatch strictly-Wimplicit-define Warn implicitly defined data items-Wcorresponding Warn CORRESPONDING with no matching items-Wexternal-value Warn EXTERNAL item with VALUE clause-Wcall-params Warn non 01/77 items for CALL params

- NOT set with -Wall-Wcolumn-overflow Warn text after column 72, FIXED format

- NOT set with -Wall-Wterminator Warn lack of scope terminator END-XXX

- NOT set with -Wall-Wtruncate Warn possible field truncation

- NOT set with -Wall-Wlinkage Warn dangling LINKAGE items

- NOT set with -Wall-Wunreachable Warn unreachable statements

- NOT set with -Wall

-fsign=<value> Define display sign representation- ASCII or EBCDIC (Default : machine native)

-ffold-copy=<value> Fold COPY subject to value- UPPER or LOWER (Default : no transformation)

-ffold-call=<value> Fold PROGRAM-ID, CALL, CANCEL subject to value- UPPER or LOWER (Default : no transformation)

-fdefaultbyte=<value> Initialize fields without VALUE to decimal value- 0 to 255 (Default : initialize to picture)

-fintrinsics=<value> Intrinsics to be used without FUNCTION keyword- ALL or intrinsic function name (,name,...)

-ftrace Generate trace code- Executed SECTION/PARAGRAPH

-ftraceall Generate trace code- Executed SECTION/PARAGRAPH/STATEMENTS- Turned on by -debug

-fsyntax-only Syntax error checking only; don’t emit any output-fdebugging-line Enable debugging lines

- ’D’ in indicator column or floating >>D-fsource-location Generate source location code

- Turned on by -debug/-g/-ftraceall-fimplicit-init Automatic initialization of the Cobol runtime system-fstack-check PERFORM stack checking

- Turned on by -debug or -g-fsyntax-extension Allow syntax extensions

- eg. Switch name SW1, etc.-fwrite-after Use AFTER 1 for WRITE of LINE SEQUENTIAL

- Default : BEFORE 1-fmfcomment ’*’ or ’/’ in column 1 treated as comment

Page 20: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix A: cobc --help 17

- FIXED format only-fnotrunc Allow numeric field overflow

- Non-ANSI behaviour-fodoslide Adjust items following OCCURS DEPENDING

- Requires implicit/explicit relaxed syntax-fsingle-quote Use a single quote (apostrophe) for QUOTE

- Default : double quote-frecursive-check Check recursive program call-frelax-syntax Relax syntax checking

- eg. REDEFINES position-foptional-file Treat all files as OPTIONAL

- unless NOT OPTIONAL specified

Page 21: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix B: cobc --info 18

Appendix B cobc --info

cobc (OpenCOBOL) 2.0.0Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Keisuke NishidaCopyright (C) 2006-2012 Roger WhileThis is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.Built Jan 26 2012 12:30:55Packaged Nov 26 2011 16:18:14 UTCC version "4.3.2 [gcc-4_3-branch revision 141291]"Build informationBuild environment : x86_64-unknown-linux-gnuCC : gcc -std=gnu99CPPFLAGS :CFLAGS : -g -O2 -pipe -finline-functions -fsigned-char

-Wall -Wwrite-strings -Wmissing-prototypes-Wno-format-y2k

LD : /usr/x86_64-suse-linux/bin/ld -m elf_x86_64LDFLAGS : -Wl,-z,relro,-z,now

OpenCOBOL informationCOB_CC : gcc -std=gnu99COB_CFLAGS : -I/usr/local/include -pipeCOB_LDFLAGS :COB_LIBS : -L/usr/local/lib -lcob -lm -lgmp -lncursesw

-ldbCOB_CONFIG_DIR : /usr/local/share/open-cobol/configCOB_COPY_DIR : /usr/local/share/open-cobol/copyCOB_LIBRARY_PATH : /usr/local/lib/open-cobolCOB_MODULE_EXT : soCOB_EXEEXT :Dynamic loading : System"CBL_" param check : DisabledVariable format : 0BINARY-C-LONG : 8 bytesSequential handler : InternalISAM handler : BDB

Page 22: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix C: cobc --list-reserved 19

Appendix C cobc --list-reserved

Reserved Words Implemented (Y/N)

ACCEPT YACCESS YACTIVE-CLASS NADD YADDRESS YADVANCING YAFTER YALIGNED NALL YALLOCATE YALPHABET YALPHABETIC YALPHABETIC-LOWER YALPHABETIC-UPPER YALPHANUMERIC YALPHANUMERIC-EDITED YALSO YALTER YALTERNATE YAND YANY YANYCASE NARE YAREA YAREAS YARGUMENT-NUMBER YARGUMENT-VALUE YARITHMETIC N (Context sensitive)AS YASCENDING YASCII Y (Context sensitive)ASSIGN YAT YATTRIBUTE Y (Context sensitive)AUTO YAUTO-SKIP YAUTOMATIC YAUTOTERMINATE YAWAY-FROM-ZERO Y (Context sensitive)B-AND NB-NOT NB-OR NB-XOR NBACKGROUND-COLOR YBACKGROUND-COLOUR YBASED YBEEP Y

Page 23: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix C: cobc --list-reserved 20

BEFORE YBELL YBINARY YBINARY-C-LONG YBINARY-CHAR YBINARY-DOUBLE YBINARY-INT YBINARY-LONG YBINARY-LONG-LONG YBINARY-SHORT YBIT NBLANK YBLINK YBLOCK YBOOLEAN NBOTTOM YBY YBYTE-LENGTH Y (Context sensitive)CALL YCANCEL YCAPACITY N (Context sensitive)CD N (85 obsolete)CENTER N (Context sensitive)CF YCH YCHAIN NCHAINING YCHARACTER YCHARACTERS YCLASS YCLASS-ID NCLASSIFICATION Y (Context sensitive)CLOSE YCODE YCODE-SET YCOL YCOLLATING YCOLS YCOLUMN YCOLUMNS YCOMMA YCOMMAND-LINE YCOMMIT YCOMMON YCOMMUNICATION N (85 obsolete)COMP YCOMP-1 YCOMP-2 YCOMP-3 YCOMP-4 YCOMP-5 YCOMP-6 Y

Page 24: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix C: cobc --list-reserved 21

COMP-X YCOMPUTATIONAL YCOMPUTATIONAL-1 YCOMPUTATIONAL-2 YCOMPUTATIONAL-3 YCOMPUTATIONAL-4 YCOMPUTATIONAL-5 YCOMPUTATIONAL-X YCOMPUTE YCONDITION YCONFIGURATION YCONSTANT YCONTAINS YCONTENT YCONTINUE YCONTROL YCONTROLS YCONVERSION Y (Context sensitive)CONVERTING YCOPY YCORR YCORRESPONDING YCOUNT YCRT YCRT-UNDER YCURRENCY YCURSOR YCYCLE Y (Context sensitive)DATA YDATA-POINTER NDATE YDAY YDAY-OF-WEEK YDE YDEBUGGING YDECIMAL-POINT YDECLARATIVES YDEFAULT YDELETE YDELIMITED YDELIMITER YDEPENDING YDESCENDING YDESTINATION NDETAIL YDISABLE NDISC Y (Context sensitive)DISK Y (Context sensitive)DISPLAY YDIVIDE YDIVISION YDOWN Y

Page 25: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix C: cobc --list-reserved 22

DUPLICATES YDYNAMIC YEBCDIC Y (Context sensitive)EC YEGI N (85 obsolete)ELSE YEMI N (85 obsolete)EMPTY-CHECK YENABLE N (85 obsolete)END YEND-ACCEPT YEND-ADD YEND-CALL YEND-CHAIN NEND-COMPUTE YEND-DELETE YEND-DISPLAY YEND-DIVIDE YEND-EVALUATE YEND-IF YEND-MULTIPLY YEND-OF-PAGE YEND-PERFORM YEND-READ YEND-RECEIVE N (85 obsolete)END-RETURN YEND-REWRITE YEND-SEARCH YEND-START YEND-STRING YEND-SUBTRACT YEND-UNSTRING YEND-WRITE YENTRY YENTRY-CONVENTION N (Context sensitive)ENVIRONMENT YENVIRONMENT-NAME YENVIRONMENT-VALUE YEO NEOL Y (Context sensitive)EOP YEOS Y (Context sensitive)EQUAL YEQUALS YERASE YERROR YESCAPE YESI N (85 obsolete)EVALUATE YEXCEPTION YEXCEPTION-OBJECT NEXCLUSIVE Y

Page 26: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix C: cobc --list-reserved 23

EXIT YEXPANDS N (Context sensitive)EXTEND YEXTERNAL YFACTORY NFALSE YFD YFILE YFILE-CONTROL YFILE-ID YFILLER YFINAL YFIRST YFLOAT-BINARY-128 NFLOAT-BINARY-32 NFLOAT-BINARY-64 NFLOAT-DECIMAL-16 YFLOAT-DECIMAL-34 YFLOAT-EXTENDED NFLOAT-INFINITY NFLOAT-LONG YFLOAT-NOT-A-NUMBER N (Context sensitive)FLOAT-SHORT YFOOTING YFOR YFOREGROUND-COLOR YFOREGROUND-COLOUR YFOREVER YFORMAT NFREE YFROM YFULL YFUNCTION YFUNCTION-ID YFUNCTION-POINTER NGENERATE YGET NGIVING YGLOBAL YGO YGOBACK YGREATER YGROUP YGROUP-USAGE NHEADING YHIGH-VALUE YHIGH-VALUES YHIGHLIGHT YI-O YI-O-CONTROL YID YIDENTIFICATION Y

Page 27: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix C: cobc --list-reserved 24

IF YIGNORE YIGNORING YIMPLEMENTS N (Context sensitive)IN YINDEX YINDEXED YINDICATE YINDIRECT N (Context sensitive)INHERITS NINITIAL YINITIALISE YINITIALISED YINITIALIZE YINITIALIZED YINITIATE YINPUT YINPUT-OUTPUT YINSPECT YINTERFACE NINTERFACE-ID NINTERMEDIATE N (Context sensitive)INTO YINTRINSIC Y (Context sensitive)INVALID YINVOKE NIS YJUST YJUSTIFIED YKEPT YKEY YKEYBOARD Y (Context sensitive)LABEL YLAST YLC_ALL N (Context sensitive)LC_COLLATE N (Context sensitive)LC_CTYPE N (Context sensitive)LC_MESSAGES N (Context sensitive)LC_MONETARY N (Context sensitive)LC_NUMERIC N (Context sensitive)LC_TIME N (Context sensitive)LEADING YLEFT YLEFT-JUSTIFY NLEFTLINE YLENGTH YLENGTH-CHECK YLESS YLIMIT YLIMITS YLINAGE YLINAGE-COUNTER Y

Page 28: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix C: cobc --list-reserved 25

LINE YLINE-COUNTER YLINES YLINKAGE YLOCAL-STORAGE YLOCALE YLOCK YLOW-VALUE YLOW-VALUES YLOWER Y (Context sensitive)LOWLIGHT YMANUAL YMEMORY YMERGE YMESSAGE N (85 obsolete)METHOD NMETHOD-ID NMINUS YMODE YMOVE YMULTIPLE YMULTIPLY YNAME Y (Context sensitive)NATIONAL YNATIONAL-EDITED YNATIVE YNEAREST-AWAY-FROM-ZERO Y (Context sensitive)NEAREST-EVEN Y (Context sensitive)NEAREST-TOWARD-ZERO Y (Context sensitive)NEGATIVE YNESTED NNEXT YNO YNO-ECHO YNONE N (Context sensitive)NORMAL Y (Context sensitive)NOT YNULL YNULLS YNUMBER YNUMBERS YNUMERIC YNUMERIC-EDITED YOBJECT NOBJECT-COMPUTER YOBJECT-REFERENCE NOCCURS YOF YOFF YOMITTED YON YONLY Y

Page 29: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix C: cobc --list-reserved 26

OPEN YOPTIONAL YOPTIONS NOR YORDER YORGANISATION YORGANIZATION YOTHER YOUTPUT YOVERFLOW YOVERLINE YOVERRIDE NPACKED-DECIMAL YPADDING YPAGE YPAGE-COUNTER YPARAGRAPH Y (Context sensitive)PERFORM YPF YPH YPIC YPICTURE YPLUS YPOINTER YPOSITION YPOSITIVE YPREFIXED N (Context sensitive)PRESENT YPREVIOUS YPRINTER Y (Context sensitive)PRINTING YPROCEDURE YPROCEDURE-POINTER YPROCEDURES YPROCEED YPROGRAM YPROGRAM-ID YPROGRAM-POINTER YPROHIBITED Y (Context sensitive)PROMPT YPROPERTY NPROTOTYPE NPURGE N (85 obsolete)QUEUE N (85 obsolete)QUOTE YQUOTES YRAISE NRAISING NRANDOM YRD YREAD YRECEIVE N (85 obsolete)

Page 30: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix C: cobc --list-reserved 27

RECORD YRECORDING YRECORDS YRECURSIVE Y (Context sensitive)REDEFINES YREEL YREFERENCE YREFERENCES YRELATION N (Context sensitive)RELATIVE YRELEASE YREMAINDER YREMOVAL YRENAMES YREPLACE YREPLACING YREPORT YREPORTING YREPORTS YREPOSITORY YREQUIRED YRESERVE YRESET YRESUME NRETRY NRETURN YRETURNING YREVERSE-VIDEO YREVERSED YREWIND YREWRITE YRF YRH YRIGHT YRIGHT-JUSTIFY NROLLBACK YROUNDED YROUNDING N (Context sensitive)RUN YSAME YSCREEN YSCROLL Y (Context sensitive)SD YSEARCH YSECONDS N (Context sensitive)SECTION YSECURE YSEGMENT N (85 obsolete)SEGMENT-LIMIT YSELECT YSELF NSEND N (85 obsolete)

Page 31: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix C: cobc --list-reserved 28

SENTENCE YSEPARATE YSEQUENCE YSEQUENTIAL YSET YSHARING YSIGN YSIGNED YSIGNED-INT YSIGNED-LONG YSIGNED-SHORT YSIZE YSORT YSORT-MERGE YSOURCE YSOURCE-COMPUTER YSOURCES NSPACE YSPACE-FILL NSPACES YSPECIAL-NAMES YSTANDARD YSTANDARD-1 YSTANDARD-2 YSTANDARD-BINARY N (Context sensitive)STANDARD-DECIMAL N (Context sensitive)START YSTATEMENT N (Context sensitive)STATIC Y (Context sensitive)STATUS YSTDCALL Y (Context sensitive)STEP YSTOP YSTRING YSTRONG N (Context sensitive)SUB-QUEUE-1 N (85 obsolete)SUB-QUEUE-2 N (85 obsolete)SUB-QUEUE-3 N (85 obsolete)SUBTRACT YSUM YSUPER NSUPPRESS YSYMBOL N (Context sensitive)SYMBOLIC YSYNC YSYNCHRONISED YSYNCHRONIZED YSYSTEM-DEFAULT YTABLE NTALLYING YTAPE Y (Context sensitive)TERMINAL N (85 obsolete)

Page 32: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix C: cobc --list-reserved 29

TERMINATE YTEST YTEXT N (85 obsolete)THAN YTHEN YTHROUGH YTHRU YTIME YTIME-OUT Y (Context sensitive)TIMEOUT Y (Context sensitive)TIMES YTO YTOP YTOWARD-GREATER Y (Context sensitive)TOWARD-LESSER Y (Context sensitive)TRAILING YTRAILING-SIGN NTRANSFORM YTRUE YTRUNCATION Y (Context sensitive)TYPE YTYPEDEF NUCS-4 N (Context sensitive)UNDERLINE YUNIT YUNIVERSAL NUNLOCK YUNSIGNED YUNSIGNED-INT YUNSIGNED-LONG YUNSIGNED-SHORT YUNSTRING YUNTIL YUP YUPDATE YUPON YUPPER Y (Context sensitive)USAGE YUSE YUSER Y (Context sensitive)USER-DEFAULT YUSING YUTF-16 N (Context sensitive)UTF-8 N (Context sensitive)VAL-STATUS NVALID NVALIDATE NVALIDATE-STATUS NVALUE YVALUES YVARYING YWAIT Y

Page 33: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix C: cobc --list-reserved 30

WHEN YWITH YWORDS YWORKING-STORAGE YWRITE YYYYYDDD Y (Context sensitive)YYYYMMDD Y (Context sensitive)ZERO YZERO-FILL NZEROES YZEROS Y

Extra (obsolete) context sensitive wordsAUTHORDATE-COMPILEDDATE-MODIFIEDDATE-WRITTENINSTALLATIONREMARKSSECURITY

Extra internal registers DefinitionRETURN-CODE USAGE BINARY-LONGSORT-RETURN USAGE BINARY-LONGNUMBER-OF-CALL-PARAMETERS USAGE BINARY-LONGCOB-CRT-STATUS PIC 9(4)’LENGTH OF’ phrase USAGE BINARY-LONG

Page 34: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix D: cobc --list-intrinsics 31

Appendix D cobc --list-intrinsics

Intrinsic Function Implemented ParametersABS Y 1ACOS Y 1ANNUITY Y 2ASIN Y 1ATAN Y 1BOOLEAN-OF-INTEGER N 2BYTE-LENGTH Y 1CHAR Y 1CHAR-NATIONAL N 1COMBINED-DATETIME Y 2CONCATENATE Y VariableCOS Y 1CURRENCY-SYMBOL Y 0CURRENT-DATE Y 0DATE-OF-INTEGER Y 1DATE-TO-YYYYMMDD Y VariableDAY-OF-INTEGER Y 1DAY-TO-YYYYDDD Y VariableDISPLAY-OF N VariableE Y 0EXCEPTION-FILE Y 0EXCEPTION-FILE-N N 0EXCEPTION-LOCATION Y 0EXCEPTION-LOCATION-N N 0EXCEPTION-STATEMENT Y 0EXCEPTION-STATUS Y 0EXP Y 1EXP10 Y 1FACTORIAL Y 1FORMATTED-CURRENT-DATE N 1FORMATTED-DATE N 2FORMATTED-DATETIME N VariableFORMATTED-TIME N VariableFRACTION-PART Y 1HIGHEST-ALGEBRAIC Y 1INTEGER Y 1INTEGER-OF-BOOLEAN N 1INTEGER-OF-DATE Y 1INTEGER-OF-DAY Y 1INTEGER-OF-FORMATTED-DATE N 2INTEGER-PART Y 1LENGTH Y 1LENGTH-AN Y 1LOCALE-COMPARE Y VariableLOCALE-DATE Y 2LOCALE-TIME Y 2LOCALE-TIME-FROM-SECONDS Y 2LOG Y 1

Page 35: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix D: cobc --list-intrinsics 32

LOG10 Y 1LOWER-CASE Y 1LOWEST-ALGEBRAIC Y 1MAX Y VariableMEAN Y VariableMEDIAN Y VariableMIDRANGE Y VariableMIN Y VariableMOD Y 2MODULE-CALLER-ID Y 0MODULE-DATE Y 0MODULE-FORMATTED-DATE Y 0MODULE-ID Y 0MODULE-PATH Y 0MODULE-SOURCE Y 0MODULE-TIME Y 0MONETARY-DECIMAL-POINT Y 0MONETARY-THOUSANDS-SEPARATOR Y 0NATIONAL-OF N VariableNUMERIC-DECIMAL-POINT Y 0NUMERIC-THOUSANDS-SEPARATOR Y 0NUMVAL Y 1NUMVAL-C Y 2NUMVAL-F Y 1ORD Y 1ORD-MAX Y VariableORD-MIN Y VariablePI Y 0PRESENT-VALUE Y VariableRANDOM Y VariableRANGE Y VariableREM Y 2REVERSE Y 1SECONDS-FROM-FORMATTED-TIME Y 2SECONDS-PAST-MIDNIGHT Y 0SIGN Y 1SIN Y 1SQRT Y 1STANDARD-COMPARE N VariableSTANDARD-DEVIATION Y VariableSTORED-CHAR-LENGTH Y 1SUBSTITUTE Y VariableSUBSTITUTE-CASE Y VariableSUM Y VariableTAN Y 1TEST-DATE-YYYYMMDD Y 1TEST-DAY-YYYYDDD Y 1TEST-FORMATTED-DATETIME N 2TEST-NUMVAL Y 1TEST-NUMVAL-C Y 2TEST-NUMVAL-F Y 1TRIM Y 2

Page 36: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix D: cobc --list-intrinsics 33

UPPER-CASE Y 1VARIANCE Y VariableWHEN-COMPILED Y 0YEAR-TO-YYYY Y Variable

Page 37: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix E: cobc --list-system 34

Appendix E cobc --list-system

System routine Parameters

SYSTEM 1CBL_AND 3CBL_CHANGE_DIR 1CBL_CHECK_FILE_EXIST 2CBL_CLOSE_FILE 1CBL_COPY_FILE 2CBL_CREATE_DIR 1CBL_CREATE_FILE 5CBL_DELETE_DIR 1CBL_DELETE_FILE 1CBL_EQ 3CBL_ERROR_PROC 2CBL_EXIT_PROC 2CBL_FLUSH_FILE 1CBL_GET_CSR_POS 1CBL_GET_CURRENT_DIR 3CBL_GET_SCR_SIZE 2CBL_IMP 3CBL_NIMP 3CBL_NOR 3CBL_NOT 2CBL_OC_NANOSLEEP 1CBL_OPEN_FILE 5CBL_OR 3CBL_READ_FILE 5CBL_RENAME_FILE 2CBL_TOLOWER 2CBL_TOUPPER 2CBL_WRITE_FILE 5CBL_XOR 3C$CALLEDBY 1C$CHDIR 2C$COPY 3C$DELETE 2C$FILEINFO 2C$GETPID 0C$JUSTIFY 1C$MAKEDIR 1C$NARG 1C$PARAMSIZE 1C$PRINTABLE 1C$SLEEP 1C$TOLOWER 2C$TOUPPER 2X"91" 2X"E4" 0X"E5" 0

Page 38: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix E: cobc --list-system 35

X"F4" 2X"F5" 2

Page 39: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix F: cobc --list-mnemonics 36

Appendix F cobc --list-mnemonics

Mnemonic namesSYSIN Device nameSYSIPT Device nameSTDIN Device nameSYSOUT Device nameSYSLIST Device nameSYSLST Device nameSTDOUT Device namePRINTER Device nameSYSERR Device nameSTDERR Device nameCONSOLE Device nameC01 Feature nameC02 Feature nameC03 Feature nameC04 Feature nameC05 Feature nameC06 Feature nameC07 Feature nameC08 Feature nameC09 Feature nameC10 Feature nameC11 Feature nameC12 Feature nameCSP Feature nameFORMFEED Feature nameCALL-CONVENTION Feature nameSWITCH-0 Switch nameSWITCH-1 Switch nameSWITCH-2 Switch nameSWITCH-3 Switch nameSWITCH-4 Switch nameSWITCH-5 Switch nameSWITCH-6 Switch nameSWITCH-7 Switch nameSWITCH-8 Switch nameSWITCH-9 Switch nameSWITCH-10 Switch nameSWITCH-11 Switch nameSWITCH-12 Switch nameSWITCH-13 Switch nameSWITCH-14 Switch nameSWITCH-15 Switch name

Extended mnemonic names (with -fsyntax-extension)SW0 Switch nameSW1 Switch nameSW2 Switch nameSW3 Switch name

Page 40: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix F: cobc --list-mnemonics 37

SW4 Switch nameSW5 Switch nameSW6 Switch nameSW7 Switch nameSW8 Switch nameSW9 Switch nameSW10 Switch nameSW11 Switch nameSW12 Switch nameSW13 Switch nameSW14 Switch nameSW15 Switch name

Page 41: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix G: config/default.conf 38

Appendix G config/default.conf

# OpenCOBOL compiler configuration## Copyright (C) 2001,2002,2003,2004,2005,2006,2007 Keisuke Nishida# Copyright (C) 2007-2012 Roger While## This file is part of OpenCOBOL.## The OpenCOBOL compiler is free software: you can redistribute it# and/or modify it under the terms of the GNU General Public License# as published by the Free Software Foundation, either version 3 of the# License, or (at your option) any later version.## OpenCOBOL is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with OpenCOBOL. If not, see <http://www.gnu.org/licenses/>.

# Value: any stringname: "OpenCOBOL"

# Value: enumstandard-define 0# CB_STD_OC = 0,# CB_STD_MF,# CB_STD_IBM,# CB_STD_MVS,# CB_STD_BS2000,# CB_STD_85,# CB_STD_2002

# Value: inttab-width: 8text-column: 72

# Value: ’mf’, ’ibm’#assign-clause: mf

# If yes, file names are resolved at run time using# environment variables.# For example, given ASSIGN TO "DATAFILE", the file name will be# 1. the value of environment variable ’DD_DATAFILE’ or# 2. the value of environment variable ’dd_DATAFILE’ or# 3. the value of environment variable ’DATAFILE’ or# 4. the literal "DATAFILE"# If no, the value of the assign clause is the file name.

Page 42: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix G: config/default.conf 39

#filename-mapping: yes

# Alternate formatting of numeric fieldspretty-display: yes

# Allow complex OCCURS DEPENDING ONcomplex-odo: no

# Allow REDEFINES to other than last equal level numberindirect-redefines: no

# Binary byte size - defines the allocated bytes according to PIC# Value: signed unsigned bytes# ------ -------- -----# ’2-4-8’ 1 - 4 same 2# 5 - 9 same 4# 10 - 18 same 8## ’1-2-4-8’ 1 - 2 same 1# 3 - 4 same 2# 5 - 9 same 4# 10 - 18 same 8## ’1--8’ 1 - 2 1 - 2 1# 3 - 4 3 - 4 2# 5 - 6 5 - 7 3# 7 - 9 8 - 9 4# 10 - 11 10 - 12 5# 12 - 14 13 - 14 6# 15 - 16 15 - 16 7# 17 - 18 17 - 18 8#binary-size: 1-2-4-8

# Numeric truncation according to ANSIbinary-truncate: yes

# Binary byte order# Value: ’native’, ’big-endian’binary-byteorder: big-endian

# Allow larger REDEFINES itemslarger-redefines-ok: no

# Allow certain syntax variations (eg. REDEFINES position)relaxed-syntax-check: no

# Perform type OSVS - If yes, the exit point of any currently# executing perform is recognized if reached.perform-osvs: no

Page 43: OpenCOBOL Manual · 2017-02-20 · 2.3.2 Static linking with COBOL programs ::::: 8 2.3.3 Dynamic linking with COBOL ... Generate trace code (Executed SECTION/PARAGRAPH/STATEMENTS)-fsyntax-only

Appendix G: config/default.conf 40

# If yes, linkage-section items remain allocated# between invocations.sticky-linkage: no

# If yes, allow non-matching level numbersrelax-level-hierarchy: no

# If yes, allow reserved words from the 85 standardcobol85-reserved: no

# Allow Hex ’F’ for NUMERIC test of signed PACKED DECIMAL fieldhostsign: no

# not-reserved:# Value: Word to be taken out of the reserved words list# (case independent)# Words that are in the (proposed) standard but may conflict

# Dialect features# Value: ’ok’, ’archaic’, ’obsolete’, ’skip’, ’ignore’, ’unconformable’

alter-statement: obsoleteauthor-paragraph: obsoletedata-records-clause: obsoletedebugging-line: obsoleteeject-statement: skipentry-statement: obsoletegoto-statement-without-name: obsoletelabel-records-clause: obsoletememory-size-clause: obsoletemove-noninteger-to-alphanumeric: errormultiple-file-tape-clause: obsoletenext-sentence-phrase: archaicodo-without-to: okpadding-character-clause: obsoletesection-segments: ignorestop-literal-statement: obsoletesynchronized-clause: oktop-level-occurs-clause: okvalue-of-clause: obsolete