Vous êtes sur la page 1sur 13

CBL-CMPT.

DOC File
Compatibility with Previous Releases of Microsoft(R) COBOL
(C) Copyright Microsoft Corporation, 1993

Contents
--------
Introduction
Changes in Microsoft COBOL 5.0
Changes in Microsoft COBOL 4.5
Changes in Microsoft COBOL 4.0
Documentation

Introduction
------------
This document is for use when maintaining applications created using
earlier releases of this product.
It describes the differences that may cause problems, and includes
documentation of features no longer documented in this system, but
maintained for compatibility.
Note that the use of the compiler with default settings will cause the
use of new words to become reserved. A list of these words is given
below.

Changes in Microsoft COBOL 5.0


------------------------------
Compiling
---------
o ON EXCEPTION is no longer allowed with CHAIN since it has never been
supported at run-time. It now gives a severity E error message which
does not prevent compilation from continuing. Using HIDEMESSAGE(1047)
will prevent the error from being visible."
o Use of the MF directive when compiling will cause some data-names
to be illegal as the reserved word list has been extended. If you
have this problem, either change the data-name, use the
REMOVE(reservedword) directive or recompile with MF(7).
New reserved words included when using MF(8) are:

IGNORE
KANJI
LOWER
NATIONAL
NATIONAL-EDITED
UPPER
WAIT

o The RW directive has been withdrawn. It has had no effect since


COBOL V4.0.
o The default for the PANVALET directive is now NOPANVALET. ++INCLUDE
is no longer flagged when PANVALET is specified, and -INC is no
longer flagged when LIBRARIAN is specified. If you specify LIBRARIAN
and PANVALET together, a warning is displayed that the compiled
program may not be mainframe-compatible.
o ON EXCEPTION and ON OVERFLOW clauses are no longer accepted for the
CHAIN verb. The WARNING message that was given for them has been
changed to an ERROR message. (In previous releases the syntax
was accepted but there was no run-time support.)
o The handling of Directives files has changed so that they can now be
truly nested. Previously, if you specified the DIRECTIVES directive
in a directives file, the Compiler switched to the new directives
file and did not return to the original one. Now it does return.
Consequently, further directives in the original Directives file are
processed, whereas in previous releases they were ignored.

Changes in Microsoft COBOL 4.5


------------------------------
Compiling
o Use of the MF directive when compiling will cause some data names
to be illegal as the reserved word list has been extended. Change
the dataname, use the REMOVE(reservedword) directive or recompile
with MF(6).
New reserved words included when using MF(7) are:
ALPHABET ALPHABETIC-LOWER ALPHABETIC-UPPER
ALPHANUMERIC ALPHANUMERIC-EDITED ANY
BINARY CLASS COMMON
COMP-1 COMP-2 COMP-4
COMPUTATIONAL-1 COMPUTATIONAL-2 COMPUTATIONAL-4
CONTENT CONTINUE CONVERTING
CYCLE DAY-OF-WEEK DBCS
DISPLAY-1 EJECT END-ADD
END-CALL END-COMPUTE END-DELETE
END-DISPLAY END-DIVIDE END-EVALUATE
END-IF END-MULTIPLY END-PERFORM
END-READ END-RECEIVE END-RETURN
END-REWRITE END-SEARCH END-START
END-STRING END-SUBTRACT END-UNSTRING
END-WRITE EOL EOS
EQUALS EVALUATE EXCEEDS
FALSE FUNCTION GLOBAL
ID INITIALIZE LOWLIGHT
NUMERIC-EDITED ORDER OTHER
PACKED-DECIMAL PADDING PARAGRAPH
PURGE REFERENCE REPLACE
SKIP1 SKIP2 SKIP3
SORT-RETURN STANDARD-2 TEST
TIME-OUT TIMEOUT TITLE
TRUE UNEQUAL WAIT
WHEN-COMPILED
Note that most of these words are already reserved under the ANS85 or
VSC2 directives, so will only become new if you are compiling with MF
but without ANS85 or VSC2.
o RM compatibility
When compiling for RM compatibility, if the same behavior is required
as with Microsoft COBOL 4.0 then you should compile with the
DETECTLOCK directive.
o ASSIGN TO PRINTER
Files defined with ASSIGN TO PRINTER are treated as LINE ADVANCING in
COBOL 4.5. In 4.0, they were treated as LINE SEQUENTIAL.
o NEXT SENTENCE
In COBOL 4.0, you could make NEXT SENTENCE jump to the appropriate
end-scope delimiter by using the MF"5" directive (see below). In 4.5
this directive does not have this effect.
o Nested Programs
In V4.0, nested programs could have Configuration Sections. In V4.5
they cannot.
o The "DISPLAY ... UPON CRT Attributes Behavior" switch S6 is no longer
documented in the Operating Guide. Here is its description. With the
Enhanced DISPLAY (see the Screen Handling chapter of the Language
Reference Manual), if no attributes are specified on the DISPLAY then,
by default, the attributes already existing in the given area will be
used. If the switch +S6 is specified at run time the normal screen
attributes will be used instead.
o In earlier versions of this COBOL system all system library routines
were call-by-number. Many of the call-by-name routines in the present
product replace old call-by-number routines. The list below indicates,
for each call-by-name routine that has replaced a call-by-number
routine, the number of the routine it has replaced. In some cases the
call-by-name routine has additional features.
Name Number
---- ------
CBL_READ_SCR_CHARS B7 0
CBL_READ_SCR_ATTRS B7 2
CBL_READ_SCR_CHATTRS B8 0
CBL_WRITE_SCR_CHARS B7 1
CBL_WRITE_SCR_ATTRS B7 3
CBL_WRITE_SCR_CHATTRS B8 1
CBL_WRITE_SCR_TTY 82
CBL_WRITE_SCR_N_CHAR B7 4
CBL_WRITE_SCR_N_ATTR B7 5
CBL_SWAP_SCR_CHATTRS B8 2
CBL_GET_SCR_SIZE E3
CBL_SET_CSR_POS E6
CBL_CLEAR_SCR E4
CBL_GET_KBD_STATUS D9
PC_READ_DRIVE 91 5
PC_SET_DRIVE 91 6
CBL_READ_DIR 91 7
CBL_CHANGE_DIR 91 8
CBL_DELETE_FILE 91 18
CBL_RENAME_FILE 91 17
PC_TEST_PRINTER B0 7
CBL_SPLIT_FILENAME 8C
CBL_JOIN_FILENAME 8D
o The behavior of COPY ... REPLACING has been changed depending on the
setting of the ANS85 or VSC2(3) directives. Previously all non-COBOL
characters were disallowed in operands to COPY ... REPLACING, and
lowercase and colon were added to the character set. This behavior now
only occurs if the ANS85 or VSC2(3) directive is used. Otherwise, the
operands may contain non-COBOL characters.

Changes in Microsoft COBOL 4.0


------------------------------
General
o When installing on an OS/2 system, SETUP will add PATH and
environment variable information to CONFIG.SYS and not to OS2INIT.CMD
as in previous releases. This conforms with the standard for
installing OS/2 v1.1 and later.
o The files, DBCS.EXE/.DLL and V-ISAM.DLL are no longer required, and
are not included with this release.
o The shared run-time files, COBLIB.DLE and COBLIB.DLL are used by the
components of this system, and must be loaded for the system to
operate. COBLIB.DLE is required for DOS, COBLIB.DLL for OS/2.
o The callable file handler interface is no longer part of this
product. If you wish to use the CALLFH feature, or to call the file
handler directly, you will require a copy of the Micro Focus COBOL/2
Toolset.
Compiling
o The default directives, NOCOPYLBR, ANS85, NOOSVS and MF are now built
into the compiler and are not included in the COBOL.DIR created by
SETUP. ANS85 and OSVS can be changed by SETUP, so that NOANS85 and/or
OSVS are included in the COBOL.DIR created by SETUP. SETUP also
allows selection of SAA and the default linking libraries.
o VSC2 is now equivalent to VSC2(3). Previously VSC2 was equivalent to
VSC2(2). The directives VSC2 OLDVSC2 have been replaced by VSC2(1).
o The directive OLDFILEIO has been replaced by the directive IDXFORMAT
which defines the type of indexed file required. IDXFORMAT"2" is
equivalent to OLDFILEIO.
o The verb, GOBACK, and the special register, RETURN-CODE are now part
of the standard Micro Focus(R) COBOL language and can be used without
needing VSC2 or OSVS. They are enabled by an MF level of 5 or above
(on by default) and can, therefore, be disabled by specifying MF(4).
o Comments following the PROGRAM-ID, which were allowed in previous
versions, are now not allowed by default. They can, however, be
enabled using the PROGID-COMMENT directive.
o For interfacing at the assembler level, note that the object segment
class names created by the COBOL compiler have changed in this
release.
o The default ALPHASTART value has been set to 1 to conform to the
ANSI'85 standard. In previous versions, this was set to 0. If you
have programs that use the ALPHABET clause of the SPECIAL-NAMES
paragraph, you may need to specify the directive ALPHASTART"0" to
maintain the required behavior.
o ACCEPT .. FROM DAY-OF-WEEK
The statement
ACCEPT data-item FROM DAY-OF-WEEK
incorrectly returned the value 0 for Sunday. It now returns a value
of 7, as documented.
o COMP-5
The default behavior of USAGE COMP-5 data items has been changed. In
previous versions of the product, COMP-5 was treated in a similar
fashion to signed COMP. It is now treated in a similar fashion to
COMP-X, allowing it to be a true binary numeric item using machine
specific byte ordering. This makes it a very efficient data type.
If you use COMP-5 in existing programs, and depend on its sign
handling, you should compile your programs with the COMP-5"1"
directive.
o NEXT SENTENCE
NEXT SENTENCE is handled differently in this version of the product.
In previous versions NEXT SENTENCE would cause control to move to the
end of the sentence (i.e. following the next period) or to the
statement following the next end-scope delimiter. In this version, it
will always go to the end of the sentence, as defined by the ANSI'85
standard.
If your program uses NEXT SENTENCE and relies on the change of
control being to the appropriate end-scope delimiter, you can use the
MF"5" directive (but see above for V4.5). Alternatively, change the
NEXT SENTENCE phrases to CONTINUE, which will have the desired
effect.
o SYMBOLIC CHARACTERS clause
The default SYMBSTART value has been set to 1 to conform to the
ANSI'85 standard. In previous versions, this was set to 0. If you
have programs that use the SYMBOLIC CHARACTERS clause of the
SPECIAL-NAMES paragraph, you may need to specify the directive
SYMBSTART"0" to maintain the required behavior.
o RECORDING MODE
The RECORDING MODE phrase has been amended so that, when it is
explicitly included in an FD, it overrides the RECORD clause in all
cases, with RECORDING MODE F always causing a fixed format file to be
created, and RECORDING MODE V a variable format file.
If you require the original behavior, whereby RECORDING MODE is
overridden by the RECORD clause, then use the MF"5" directive.
Note that the RECMODE directive will not override the RECORD clause.
o REPORT-WRITER reserved words
The RW directive has been made obsolete by incorporating the REPORT-
WRITER reserved words into the main dialects that support REPORT-
WRITER. If you have a program that uses some REPORT-WRITER reserved
words as data names, and used to be compiled with the NORW directive,
then you need to replace the NORW directive by USE(NORW). This will
cause the REPORT-WRITER reserved words to be removed from the
reserved word list, making them available for use as data names.
o INSPECT
The handling of the LEADING phrase in INSPECT has been amended to
make it conform to a recent interpretation of the ANSI'85 standard.
For example, if data-stream contains "//AAA BBB OOO CCC", the
statement
INSPECT data-stream TALLYING count-field
FOR LEADING "A" "\" " "O" "C"
returned the value 5 in count-field in previous versions, but now
returns the value 2. This is because the remaining characters in the
LEADING phrase are considered to be ineligible once a match has been
found on one of the characters.
o COPY filenames
Since this version now distinguishes between filenames with no
extension, but with a trailing period, and those without a trailing
period (treating the former as a specified extension of spaces),
some COPY statements in existing programs may appear to stop
working. If you want your copy files to have extension .CPY, but
code them in your program with no extension, then you must be sure
that the name does not have a trailing period. For example, change:
COPY "mycopy.".
to
COPY "mycopy".
Note that
COPY mycopy.
is treated as if it has no trailing period, and hence as in previous
versions.

Running
o A large number of the run-time system subprogram calls, provided in
earlier releases as call-by-number calls, have been replaced by named
calls. In addition to making the calls easier to remember and use,
the call-by-name calls can accept parameters defined in any part of
the data division.
The replaced call-by-number calls are still supported in this
release, and documented below. However, we recommend that you
replace them with the equivalent call-by-name calls as appropriate.
o Record sizes
In previous releases, the maximum and minimum record sizes specified
for a variable format file had to be the same in every program
referencing the file. This restriction has been removed, allowing
programs to specify record lengths different to those specified in
the program used to create the file. However, if an attempt is made
to write a record which is smaller than the smallest defined or
larger than the largest defined a run-time error, 9/044, will be
returned.
Animating
o The method required to animate programs has changed in this release.
When a program is compiled for animation, using the ANIM directive,
intermediate code files are packaged into .OBJ files and .DLL on
OS/2). These .EXE/.DLL files can be animated in the usual way. The
pure intermediate code files (.INT) are no longer required for
animation.
o Since the new animation method incorporates a link step, any non-
COBOL .OBJ files can be linked in prior to animation. These will
operate correctly when encountered, though always in zoom mode. This
new technique makes IANIM and augmented INT obsolete, and these
facilities are not supported in this release.
The same method allows OS/2 API function calls to be resolved prior
to animation, avoiding the need for the Install Function technology
of earlier releases.
o This release has the +F switch set by default. This will cause
illegal data in numeric fields to be trapped during animation, and
when running intermediate code .OBJ files (run-time system error
163). This may cause existing programs to fail where they previously
worked. However, trapping such instances will help prevent the
subsequently generated code from failing. All generated programs will
work as at present, always assuming that numeric fields contain
numeric data.
Linking
o The linking library, OS2.LIB, should be used instead of DOSCALLS.LIB
when linking applications for use on OS/2(tm). OS2.LIB is supplied as
part of the utilities. (DOSCALLS.LIB can be used provided the
application is not a Presentation Manager application.)
o The /NOP option is no longer required when linking for use on OS/2.
o The default environment for applications created using this release
is the shared run-time environment. This is particularly recommended
for use on OS/2, where a single copy of COBLIB.DLL can be shared by
any COBOL application (built to use COBLIB) running in any OS/2
session.
To use this environment, the application is linked in the usual way,
using the libraries, COBLIB.LIB, and COBAPI.LIB or OS2.LIB depending
on DOS or OS/2. The EXE files produced will be much smaller since
little run-time system code is included directly. System programs,
such as EXTFH and ADIS, can be linked in with the application, or
linked as standalone sub-programs. Again, for OS/2, if linked as
standalone .DLL files, they can be shared by any number of COBOL
applications.
Notes:
- These system programs MUST be linked with COBLIB for use with
COBLIB applications.
- Modules linked with COBLIB cannot be mixed with modules linked
with LCOBOL. Hence, applications must be either all LCOBOL or all
COBLIB. However, COBLIB applications and LCOBOL applications can
be run on the same environment as long as they don't try to call
each other.
o The linking library (.LIB) files supplied with the system have been
split in a different way to enable reduced disk usage. They now
consist of LCOBOL.LIB, COBLIB.LIB, and COBAPI.LIB. The new LCOBOL
is equivalent to the old PCOBOL. The addition of COBAPI.LIB to
LCOBOL.LIB gives the old LCOBOL. (Users may like to recombine these
libraries using LIB if they wish to retain old working practices.)
For OS/2 operation, LCOBOL.LIB is used in combination with OS2.LIB
(which supersedes DOSCALLS.LIB).
In the shared run-time system, the default, COBLIB.LIB, is equivalent
to the old PRCOBOL.LIB. Again, either COBAPI.LIB or OS2.LIB is used
in combination with COBLIB.LIB to complete the linking for DOS or
OS/2 respectively. Applications linked with these libraries will be
very much smaller, benefiting from the shared run-time system support
in COBLIB.DLE and COBLIB.DLL. (Note that the application itself can
be bound so that it will run on both DOS and OS/2 provided both
shared run-time system files are present.)
o If you select a linking environment other than the built-in default,
SETUP will create a default LINKLIB in your COBOL.DIR. The default,
and equivalent of earlier releases, is LINKLIB(LCOBOL+COBAPI). If
you normally use the system on OS/2, use LINKLIB(LCOBOL+OS2). With
this release, the default is to use the COBLIB shared run-time system,
requiring LINKLIB(COBLIB+COBAPI) on DOS, and LINKLIB(COBLIB+OS2) on
OS/2.
When the default has been set in this way, you can still link for use
in other environments by specifying the relevant libraries on the
LINK command line. However, you should use the /NOD directive when
doing so, otherwise link-time errors may occur.
o The file handler for indexed files, IXSIO, has been replaced by the
external file handler, EXTFH. This can be linked in exactly the same
way as IXSIO in earlier releases, either linked in with the
application or linked as a standalone system program.
Programs referencing ANSI'85 EXTERNAL files and normal indexed files
now only use EXTFH rather than two separate file handlers.
Compatibility issues
Compiling
o If you compile your programs on OS/2 using batch files, you will need
to alter the batch files to compile using the command COBOL instead
of PCOBOL. Alternatively, you can copy COBOL.EXE to PCOBOL.EXE in the
COBOL system directory.
o Programs previously compiled without the ANS85 directive, if
recompiled under this default system, may not work correctly. The
most likely cause is that the new system has ANS85 on by default.
This causes all file status codes to be ANS85 not ANS74 statuses.
The problem can be avoided by using the NOANS85 directive when
compiling any program that is designed to work with ANS74 file
statuses.
Animating
o The compiler dictionary structure has been amended. This means that
IDY files created by earlier releases will not be compatible with
ANIMATOR in this system. Hence, you should recompile, with this
release of the compiler, any program you wish to animate.
Linking
o .OBJ files created by this release are not compatible with .OBJ files
created by earlier releases. Hence, if you need to rebuild an
application where one of the OBJs has been created using this
release, you must recompile all the programs with this release of the
compiler before linking.
Running
o In previous versions of this software, an error is given when an
indexed file is opened if the record lengths of the file do not
exactly match those given in the FD. This has been changed so the
error is only given if an attempt is made to WRITE a record larger
than the maximum or smaller than the minimum.
o The Report Writer module has been changed so that it is compatible
with IBM(R) OS/VS COBOL when the OSVS directive is used. This is the
ANSI'68 COBOL standard. In previous versions, the default with OSVS
was ANSI'74 COBOL standard report writer. You may have report writer
programs using OSVS features, but requiring ANSI'74 report writer
compatibility. This mix is no longer possible, and you will either
need to remove the OSVS features (try VSC2), or accept ANSI'68 COBOL
report writer standard.

Documentation
-------------
Call-by-number subprogram calls.
Many of the COBOL system library routines provided in earlier releases as
call-by-number have been replaced by call-by-name routines. We recommend
that you replace all call-by-number routines by their equivalent call-by-
name routines. See your Operating Guide chapter, COBOL System Library
Routines, for details of which call-by-name routines replace these.
To allow you to maintain existing applications, the documentation for the
replaced call-by-number routines follows:
PUT A CHARACTER TO THE SCREEN
CALL X"82" USING character.
where:
character is a PIC X field containing the character to be put on the
screen in the current cursor position.
The cursor is then advanced one position to the right, or onto the next
line if it is in the rightmost position, or off the screen if it is in
the bottom right-hand corner.

READ A CHARACTER FROM THE KEYBOARD


CALL X"83" USING character.
where:
character is a PIC X field to contain the character returned.
Notes: 1. A call on this subprogram also causes the function key table
to be checked and the result byte updated.
2. If the character returned from this subprogram is a carriage-
return character (hex 0D), then the character read from the
keyboard has been recognized by the function key table, and
the result byte of that table should be checked to determine
the actual character which has been pressed.
3. If the character read is a 2-byte character (such as a
function key) and it was not matched in the function key
table, then both bytes are returned to this subprogram. The
first call returns a null byte (hex 00) and the next call
returns the scan code (refer to the IBM Personal Computer
Technical Reference Manual for details of scan codes).
4. Break can be used to interrupt a running program. However,
if the program was in the middle of a call to this subprogram
at the time, nothing happens until the call on this
subprogram is satisfied by reading another character from the
keyboard. Break is not returned by this routine.

SCREEN INPUT AND OUTPUT


CALL X"B7" USING function, parameter, buffer
where:
function is a PIC 99 COMP-X data item and contains a value:
0 to read characters from the screen
1 to write characters to the screen
2 to read attributes from the screen
3 to write attributes to the screen
4 to clear characters from the screen
5 to clear attributes from the screen
parameter is a group item consisting of three data items:
o a PIC 9(4) COMP-X field showing the length of the data to be
read or written.
o a PIC 9(4) COMP-X field giving the start position on the screen.
Top left is position 1, 81 is the start of the next line, etc.
o a PIC 9(4) COMP-X field showing the start position in the buffer.
The starting buffer position is 1.
buffer is the COBOL data area. It is a PIC X(n) field and may be as
large or small as you require to write your data.
An entire screen of text or attributes is 2000 bytes. No check is made
that any data to be read will fit into your buffer. Therefore, if the
length specified is greater than the length available in your buffer, any
subsequent data will be corrupted. Buffer is not used with a function of
4 or 5, but this parameter must still be supplied.
Note: When writing or clearing characters, the User attribute is imposed
on the character position, unless the User attribute flag is set
off, in which case the current Screen attribute for that character
position is used.

SCREEN CELL INPUT AND OUTPUT


CALL X"B8" using FUNCTION PARAMS CHARBUFF ATTRBUFF
where parameters are:
01 FUNCTION PIC 9(2) COMP-X
= 0 to read screen to character and attribute buffers
= 1 to write screen from character and attribute buffers
= 2 to swap screen with character and attribute buffers
01 PARAMS
03 P-LENGTH PIC 9(4) COMP-X.
03 P-SOFFSET PIC 9(4) COMP-X.
03 P-BOFFSET PIC 9(4) COMP-X.
P-LENGTH = number of screen cells to read/write/swap
P-SOFFSET = screen offset (1 = top left)
P-BOFFSET = buffer offset (1 = start of buffer)
01 CHARBUFF
03 CHARS PIC X OCCURS n TIMES
= an array of character bytes
01 ATTRBUFF
03 ATTRS PIC X OCCURS n TIMES
= an array of associated attribute bytes
TEST CONSOLE STATUS
CALL X"D9" USING parameter.
where:
parameter is a PIC 99 COMP-X field and shows the status of the
console:
zero there is no character waiting to be read from the
keyboard
non-zero there is a character waiting to be read from the
keyboard
When a program is being animated in other than zoom mode, this function
always returns a zero (i.e., it never detects a character), because
ANIMATOR always looks for characters. However, the function operates
correctly when zoom mode is used.

GET SCREEN SIZE


CALL X"E3" USING no-lines, no-cols.
where:
no-lines is a PIC 99 COMP-X field and shows the number of lines on
the screen.
no-cols is a PIC 99 COMP-X field and shows the number of columns on
the screen.

CLEAR SCREEN
CALL X"E4".
This routine clears the entire user screen.

MOVE THE CURSOR TO A DEFINED POSITION


CALL X"E6" USING result, parameter.
where:
result is a PIC 99 COMP-X field. It is not used.
parameter is a group item consisting of two data items:
o a PIC 99 COMP-X field specifying the row number for the cursor to
be moved to; in the range 0 to 24.
o a PIC 99 COMP-X field giving the column number for the cursor to
be moved to; in the range 0 to 79.

==========================================================================
Copyright (C) 1993 Microsoft Corporation
Copyright (C) 1993 Micro Focus Ltd