\chapter{Changelog}

\section{GnuCOBOL 4.0-early-dev}

\paragraph{General}
\begin{itemize}
\item \textbf{Bison}: dropped support for building with versions < 3.
\item \textbf{C API}: removed cob\_set\_num\_params.
\item \textbf{cobc command-line options}: added option -fno-fast-math to disable integer arithemtic optimisations.
\item \textbf{cobc command-line options}: removed -fif-cutoff.
\item \textbf{cobc command-line options}: added -G for experimental GDB use.
\item \textbf{configure}: fixed unwanted flags not being removed completely (\bug{627}).
\item \textbf{EXTFH}: added support for the external file handler (EXTFH) interface, letting users provide a custom file handler.
\item \textbf{EXTFH}: the old OpenCOBOL EXTFH interface (built into GnuCOBOL with the -{}-with-seqra-extfh and -{}-with-index-extfh build options) has been marked as obsolete.
\item \textbf{Jobs (-j compilation flag)}: fixed \bug{618}.
\item \textbf{libcob}: internal library number increased from 4 to 5.
\item \textbf{help2man documentation}: fixed error when building.
\end{itemize}

\paragraph{Configuration options}
\begin{itemize}
\item \textbf{Deleted compiler configuration options}: select-working (see \bug{421}).
\item \textbf{New compiler configuration options}: align-opt, align-record, assign-variable, assign-using-variable, assign-ext-dyn, assign-disk-from, implicit-assign-dynamic-var, reference-bounds-check, same-as-clause and sync-left-right.
\item \textbf{New runtime configuration options}:
  \begin{itemize}
  \item bdb\_byteorder (whether BDB should use native, big endian or little endian byte order).
  \item create\_table (whether the ODBC\slash{}OCI file handler should create a DDL file from an XFD file if no DDL exists).
  \item dups\_ahead (whether a duplicates in an INDEXED file leads to file status 02).
  \item mf\_ls\_instab (whether to replace tabs by spaces which fill up to the next tab stop (tab stops set 8 spaces apart)).
  \item keycheck (check whether INDEXED file keys match the SELECT specification exactly).
  \end{itemize}
\item \textbf{New runtime configuration environment variables}: IO\_OPTIONS, IX\_OPTIONS,\linebreak LA\_OPTIONS, LS\_OPTIONS, RL\_OPTIONS, SQ\_OPTIONS and IO\_$x$, where $x$ is any ASSIGN EXTERNAL name used in a program.
\end{itemize}

\paragraph{Compiler directives}
\begin{itemize}
\item \textbf{\directiveindicator{}SET directive}: added XFD phrase.
\end{itemize}

\paragraph{Identification division}
\begin{itemize}
\item \textbf{FUNCTION-ID clause}: added recognition of PROTOTYPE phrase.
\item \textbf{PROGRAM-ID clause}: added recognition of PROTOTYPE and RESIDENT phrases.
\end{itemize}

\paragraph{Environment division}
\begin{itemize}
\item \textbf{ALTERNATE RECORD KEY clause}: allow literal in SUPPRESS WHEN clause.
\item \textbf{ASSIGN clause}: allow pipe syntax in literals.
\end{itemize}

\paragraph{Data division}
\begin{itemize}
\item \textbf{SYNCHRONIZED clause}: LEFT phrase is now marked as unimplemented (see \bug{512}).
\end{itemize}

\paragraph{Procedure division}
\begin{itemize}
\item \textbf{COMMIT statement}: added optional word TRANSACTION.
\item \textbf{DELETE statement (file)}: added ON EXCEPTION handlers.
\item \textbf{File I-O}: added support for multiple simultaneous file handlers.
\item \textbf{File I-O}: allow file-handler to be configured for individual files or organizations using environment variables (or dictionary files).
\item \textbf{File I-O}: added support for INDEXED files based on LMDB.
\item \textbf{File I-O}: added initial support for ODBC and OCI as file-handlers.
\item \textbf{File I-O}: changed file status for detecting bad data in line sequential files from 34 to 71.
\item \textbf{File I-O}: fixed issues with LINE SEQUENTIAL and OPEN I-O on platforms that require output to be flushed between read and write of a file.
\item \textbf{INSPECT statement}: fixed multiple TALLYING phrases being rejected (see \bug{47})
\item \textbf{Procedure division header}: fixed error when a variable-length parameter was not referenced (\bug{648}).
\item \textbf{Procedure division header}: added recognition of z/OS-PARM-style main program parameter (\fr{357}).
\item \textbf{Reference modification}: added out-of-bounds checks within IF statement conditions.
\item \textbf{REWRITE statement}: enabled for LINE SEQUENTIAL files.
\item \textbf{ROLLBACK statement}: added optional word TRANSACTION.
\item \textbf{SET statement}: added support for FH-{}-FCD and FH-{}-KEYDEF (\fr{349}).
\item \textbf{START statement (transaction)}: added recognition of.
\item \textbf{STRING statement}: strengthened syntax checks (bugs \bugnoname{653} and \bugnoname{488}).
\item \textbf{Tracing}: fixed line numbers when tracing inside RECURSIVE programs (\bug{611}).
\item \textbf{UNSTRING statement}: strengthened syntax checks (bugs \bugnoname{653} and \bugnoname{488}).
\item \textbf{WRITE statement (indexed)}: fixed bug involving file status 21.
\end{itemize}

\section{GnuCOBOL 3.1.1-dev}

NB: Some changes have been made to 3.1.1-dev which have not yet been merged up to 4.0-early-dev. They have been marked with an asterisk (*).

\paragraph{General}
\begin{itemize}
\item \textbf{AIX support}: fixed NIST tests script.
\item \textbf{C API (configuration)}: added cob\_set\_runtime\_option and cob\_get\_runtime\_option for specifying the file handle which printer output or trace output should go to.
\item \textbf{C API (environment)}: added function cob\_getenv\_direct.
\item \textbf{C API (fields)}: added functions cob\_get\_dbl\_param, cob\_get\_field\_constant, cob\_get\_field\_digits, cob\_get\_field\_scale, cob\_get\_field\_sign, cob\_get\_field\_size, cob\_get\_field\_str, cob\_get\_field\_str\_buffered, cob\_get\_field\_type, cob\_get\_param\_field, cob\_get\_param\_str, cob\_get\_param\_str\_bufffered, cob\_put\_dbl\_param, cob\_put\_field\_str, cob\_put\_field\_str, explain\_field\_type (feature requests \frnoname{383} and~\frnoname{384}).
\item \textbf{C API (version)}: added libcob\_version and set\_libcob\_version for querying the version of libcob.
\item \textbf{cobc command-line options}: added -fcallfh (and COBOL-IT alias -use-extfh).
\item \textbf{cobc command-line options}: added -fdump to dump data of all modules on abend of program.
\item \textbf{cobc command-line options}: added -fno-dump to suppress dumps of data from certain sections.
\item \textbf{cobc command-line options}: disabled -fif-cutoff pending removal.
\item \textbf{cobc command-line options}: added -fno-remove-unreachable to disable removal of unreachable code.
\item \textbf{cobc command-line options}: -debug no longer implies -ftrace (\bug{449}).
\item \textbf{cobc command-line options}: added -O0 for disabling optimisations (\fr{255}).
\item \textbf{cobc command-line options}: replaced -tsymbols by -f(no-)tsysmbols.
\item \textbf{cobc command-line options}: added -fno-theader, -fno-tmessages and -fno-tsource to suppress parts of listings.
\item \textbf{cobc command-line options}: added -Wadditional to enable any messages not enabled by -Wall.
\item \textbf{cobc command-line options}: added -Wextra as alias for -W.
\item \textbf{cobc command-line options}: added -Wno-error.
\item \textbf{cobc command-line options}: added -Wno-dialect to suppress dialect-specific warnings.
\item \textbf{cobc command-line options}: added -Wother to enable miscellaneous warnings.
\item \textbf{cobc command-line options}: added -fgen-c-line-directives and -fgen-c-labels to enable generation of labels and directives indicating where generated C code came from in the original COBOL source.
\item \textbf{cobc command-line options}: honour POSIXLY\_CORRECT environment variable.
\item \textbf{cobc command-line options}: added -fec and -fno-ec to enable and disable exception checks.
\item \textbf{cobc command-line options}: added -f(no-)diagnostics-show-option, to show the command-line option resposible for a diagnostic message (\fr{386}).
\item \textbf{cobc command-line options}: added -Wdangling-text to warn on source text beyond the program area (previously only part of -Wall).
\item \textbf{cobc command-line options}: -Wimplicit-define and -Wcorresponding are now enabled by default.
\item \textbf{cobcrun}: allow redirection of cobcrun's output (\bug{616}).
\item \textbf{cobcrun command-line options}: renamed -runtime-conf to -runtime-config.
\item \textbf{cobcrun command-line options}: added --verbose.
\item \textbf{cobcrun command-line options}: expanded information in --info about the used curses library (\fr{385}).
\item \textbf{COBOL-85 NIST testsuite}: tests can now be downloaded from Sourceforge when the NIST website is unavailable (\bug{563}).
\item \textbf{COBOL-85 NIST testsuite}: tests can now be performed individually by running make in the test module directory.
\item \textbf{Copyfiles}: fixed segfault when GnuCOBOL tried and failed to open a copyfile (\bug{458}).
\item \textbf{Copyfiles}: GnuCOBOL now checks for recursive copyfiles (\bug{467}).
\item \textbf{Debugging}: Added debug logging for compiler developers (-{}-enable-debug-log ./configure option).
\item \textbf{Dependencies}: GnuCOBOL now (optionally) depends on libxml2 (for XML I-O) and cJSON or JSON-C (for JSON I-O).
\item \textbf{Dependencies}: moved documentation of GnuCOBOL's requirements from README to new file DEPENDENCIES.
\item \textbf{Dependencies}: minimum Texinfo version increased to 6.1.
\item \textbf{Documentation}: added Markdown versions of README and DEPENDENCIES.
\item \textbf{Documentation}: updated SourceForge URL to new \url{https://sourceforge.net/p/gnucobol/}.
\item \textbf{Documentation}: fixed warnings and errors while generating texi documentation.
\item \textbf{Documentation}: improved portability of documentation generation scripts.
\item \textbf{DJGGP support}: added minimal support for DJGGP.
\item \textbf{Error messages}: runtime error messages now use translated versions (depending on a user's language).
\item \textbf{Error messages}: added checks for version control conflict markers in source code.
\item \textbf{Error messages}: increased default maximum number of error messages to 128 from 100.
\item \textbf{Expressions}: fixed \bug{431}, where decimal constants were not initialised in INITIAL programs.
\item \textbf{Hardening}: added ./configure option -{}-enable-hardening to control hardening compilation options.
\item \textbf{IBM i support}: fixed segfault involving filepaths
\item \textbf{Listings}: fixed the substitution of tokens in quotes in copyfiles (\bug{494}).
\item \textbf{Listings}: fixed some cases of cross-reference listings containing wrong line numbers.
\item \textbf{Listings}: now require the size of a listing page to be at least 20 lines.
\item \textbf{Listings}: fixed segfault in listing programs with large REPLACE arguments (\bug{515}).
\item \textbf{Listings}: fixed stack overflow in listing programs long literals (\bug{569}).
\item \textbf{Mac OS support}: some build issues fixed (see \bug{644} and \bug{73}).
\item \textbf{Microsoft Visual C++}: dropped support for Visual Studio 2005.
\item \textbf{MinGW support}: added script for generating binaries using MinGW.
\item \textbf{MinGW support}: fixed issue with output filenames containing a dash.
\item \textbf{Modules}: enabled running of modules generated with older versions of GnuCOBOL (\fr{239}).
\item \textbf{MPIR support}: added as an alternative to GMP for GnuCOBOL's maths library.
\item \textbf{Multiple programs}: fixed crash when a single file contained a large number of programs and functions (\bug{666}).
\item \textbf{National literals}: added Fujitsu NC national character literals (\fr{352}).
\item \textbf{National literals}: fixed NX type literals being treated as alphanumeric (\bug{658}).
\item \textbf{Nested programs}: fixed \bug{435}, where identifiers in the containing program where not propagated to the contained program, causing a segfault.
\item \textbf{Nested programs}: fixed \bug{587}, where a memory error occurred when a program was nested inside a program with the same name.
\item \textbf{Numeric literals}: added support for HP~COBOL octal literals (\%\ldots).
\item \textbf{OrangeC support}: added minimal support for OrangeC.
\item \textbf{Recursion}: fixed \bug{222}, where the return value was lost when returning from a recursive call.
\item \textbf{Reserved words}: allow users to make default reserved words aliases for other words.
\item \textbf{Sandboxed builds}: fixed \bug{73} and \bug{576}.
\item  \textbf{Screen section testsuite}: added a manual testsuite for screen section functionality (\patch{26}).
\item \textbf{Signals}: added error message for SIGFPE (see \bug{434}).
\item \textbf{Solaris support}: fixed errors and warnings when compiling in Solaris 10.
\item \textbf{Tracing}: added new options for controlling tracing (see \fr{242}).
\item \textbf{Translations}: added Serbian and updated all others.
\item \textbf{User-defined words}: increased default maximum user-defined length to 63 characters (per COBOL~202X draft standard).
\item \textbf{Windows support}: renamed makedist.bat to makedist.cmd.
\item \textbf{Windows support}: fixed cjson.dll not being included in distributions.
\item \textbf{Windows support}: makedist.cmd now uses VCPKG\_EXPORT\_DIR if set.
\end{itemize}

\paragraph{Configuration options}
\begin{itemize}
\item \textbf{assign-clause compiler configuration option}: added options external (equivalent to ibm) and dynamic (equivalent to mf).
\item \textbf{assign-clause compiler configuration option}: changed value to ``external'' (i.e. ``ibm'') in the BS2000, COBOL-85, COBOL~2002 and COBOL~2014 dialects.
\item \textbf{IBM dialect}: reserved words updated to Enterprise COBOL V6.2.
\item \textbf{incorrect-conf-sec-order option}: changed to ``ok'' from ``error'' in mf and default dialects.
\item \textbf{MF dialect}: added ARGUMENT-NUMBER and ARGUMENT-VALUE as reserved words.
\item \textbf{New compiler configurations}: realia for CA Realia II.
\item \textbf{New compiler configuration options}: assign-disk-from, assign-ext-dyn, assign-using-variable, assign-variable, binary-comp-1, call-convention-mnemonic, call-convention-linkage, continue-after, display-special-fig-consts, dpc-in-data, free-redefines-position (\fr{211}), hp-octal-literals, implicit-assign-dynamic-var, goto-entry, line-col-zero-default, local-implies-recursive*, national-character-literals move-figurative-space-to-numeric, move-non-numeric-lit-to-numeric-is-zero, missing-statement, numeric-pointer, perform-without-varying-by, record-delimiter, record-delim-with-fixed-recs, records-mismatch-record-clause, ref-mod-zero-length*, report-column-plus, screen-section-rules, sequential-delimiters, symbolic-constant, type-to-clause*, usage-type*, vsam-status, xml-generate-extra-phrases, zero-length-literals.
\item \textbf{New runtime configuration options}:
  \begin{itemize}
  \item col\_just\_lrc (for enabling\slash{}disabling the LEFT\slash{}RIGHT\slash{}CENTER phrases of the report COLUMN clause),
  \item printer and display\_print\_pipe (for specifying what command should be executed before DISPLAY UPON PRINTER; similar to Micro Focus' COBPRINTER option);
  \item display\_print\_file (name of file which DISPLAY UPON PRINTER will append its output to), display\_punch\_file (name of file to created upon first DISPLAY UPON SYSPUNCH),
  \item mouse\_flags (to let mouse clicks move the cursor in ACCEPT),
  \item mouse\_interval (maximum time between mouse press and mouse release events for them to recognised as a click),
  \item trace\_format,
  \item dump\_file and
  \item dump\_width.
  \end{itemize}
\item \textbf{Registers}: disabling a register also removes the reserved word with the same name, if it exists (\fr{278}).
\item \textbf{Registers}: added COL and LIN.
\item \textbf{Runtime configuration options}: use the system's file path separator instead of always using : (so the path separator is now ; on Windows). (See \bug{610}.)
\end{itemize}

\paragraph{Compiler directives}
\begin{itemize}
\item \textbf{COPY statement}: added support for copybook and library names containing periods as text-names. For example,  ``COPY copybook.cpy.'' is now accepted. See \fr{344}.
\item \textbf{COPY statement}: for ``COPY copybook IN library'', GnuCOBOL tries to resolve ``library'' using the environment variable ``COB\_COPY\_LIB\_library'', before testing as-is and, if that fails, ignoring library entirely.
\item \textbf{COPY statement}: copybook names containing an extensions are no longer searched for by adding further extensions to the name.
\item \textbf{DISPLAY directives}: allow a wider range of characters.
\item \textbf{\directiveindicator{}IF directive*}: improved syntax error handling.
\item \textbf{\textdollar{}IF directive*}: added \textdollar{}END-IF as a scope terminator.
\item \textbf{@OPTIONS directive}: added recognition of.
\item \textbf{New Micro Focus directives}: ADDRSV, ADDSYN, MAKESYN, OVERRIDE and REMOVE (\fr{210}); ASSIGN, BOUND*, CALLFH, CHECKNUM*, COMP1, DPC-IN-DATA, and SSRANGE*.
\item \textbf{New Micro Focus directives*}: added detection of SPZERO.
\item \textbf{\directiveindicator{}REF-MOD-ZERO-LENGTH directive*}: added.
\item \textbf{\directiveindicator{}TURN directive*}: added experimental implementation.
\end{itemize}

\paragraph{Identification division}
\begin{itemize}
\item \textbf{OPTIONS paragraph}: added support for ARITHMETIC clause.
\end{itemize}

\paragraph{Environment division}
\begin{itemize}
\item \textbf{ALTERNATE RECORD KEY clause}: implemented split keys (SOURCE IS; \fr{23}) and sparse keys (SUPPRESS WHEN; \fr{281}).
\item \textbf{ALPHABET clause}: added recognition of more pre-defined alphabets.
\item \textbf{ASSIGN clause}: re-enabled use of linkage section or BASED items (\bug{421}).
\item \textbf{ASSIGN clause}: added SYSPCH and SYSPUNCH device-names for writing to a punch file (this is not related to CARD-PUNCH).
\item \textbf{ASSIGN clause}: added device-names S01 through to S05.
\item \textbf{ASSIGN clause}: allow ``ASSIGN VARYING \ldots''.
\item \textbf{ASSIGN clause}: strengthened syntax checks (\bug{553}).
\item \textbf{ASSIGN clause}: fixed \bug{571} involving external-file-names.
\item \textbf{ASSIGN clause}: added Micro Focus' DISK FROM phrase.
\item \textbf{CALL-CONVENTION phrase}: added C and PASCAL (see \fr{311}).
\item \textbf{CLASS phrase}: added recognition of ALPHANUMERIC\slash{}NATIONAL and alphabet phrases.
\item \textbf{CLASS phrase}: fixed \bug{566}, where class-names were not inherited by nested subprograms.
\item \textbf{CRT STATUS phrase}: improved syntax checks.
\item \textbf{CURRENCY phrase}: changed to emit error when CURRENCY SIGN other than ``\$'' is entered.
\item \textbf{CURRENCY phrase}: improved error messages for invalid currency signs.
\item \textbf{CURSOR phrase}: fixed \bug{579}, where the CURSOR data item was not used for the initially positioning the cursor in an ACCEPT statement.
\item \textbf{CURSOR phrase}: fixed for data items of length 4 characters.
\item \textbf{EXTERN clause}: improved error messages (\bug{446}).
\item \textbf{FILE-CONTROL entries}: added detection of the OS\slash{}VS-era phrases ACTUAL KEY, FILE-LIMIT, NOMINAL KEY, TRACK-AREA and TRACK-LIMIT.
\item \textbf{FILE STATUS clause}: added detection of VSAM secondary status identifier (\fr{51}).
\item \textbf{FILE STATUS clause}: strengthened syntax checks (\bug{656}).
\item \textbf{I-O-CONTROL paragraph}: added detection of APPLY COMMIT clause (from the COBOL~202X draft standard).
\item \textbf{I-O-CONTROL paragraph}: added detection of the OS\slash{}VS-era clauses CORE-INDEX, CYL-INDEX, CYL-OVERFLOW, EXTENDED-SEARCH, LOCK-HOLDING, MASTER-INDEX, PRINT-CONTROL, RECORD OVERFLOW, REORG-CRITERIA, WRITE-ONLY and WRITE-VERIFY.
\item \textbf{OBJECT-COMPUTER paragraph}: added recognition of NATIONAL collating sequences.
\item \textbf{OCCURS clause}: correctly implemented nested OCCURS DEPENDING tables (ODOSLIDE).
\item \textbf{PASSWORD clause}: added detection of.
\item \textbf{RECORD clause}: fixed behaviour in the IBM dialect when the maximum record length does not match the length in the RECORD clause.
\item \textbf{RECORD DELIMITER phrase}:  added support for BINARY-SEQUENTIAL and LINE-SEQUENTIAL phrases.
\item \textbf{RECORD DELIMITER phrase}: improved syntax checks (see \bug{442}).
\item \textbf{RECORD KEY clause}: implemented sparse keys (SOURCE IS; \fr{23}).
\item \textbf{RERUN clause}: added detection of.
\item \textbf{SELECT entry}: fixed \bug{619}.
\item \textbf{TOP phrase}: added as mnemonic for ADVANCING PAGE.
\end{itemize}

\paragraph{Data division}
\begin{itemize}
\item \textbf{88-level items}: improved error messages when used in the wrong places.
\item \textbf{ANY LENGTH clause}: fixed \bug{487}, where literals moved to ANY LENGTH items were incorrectly truncated.
\item \textbf{ANY LENGTH clause}: fixed \bug{511}, where comparisons treated ANY LENGTH items as having just one character.
\item \textbf{ANY LENGTH clause}: fixed segfault when referencing linkage-section ANY LENGTH items in the first compiled program.
\item \textbf{COLUMN clause}: ``COL +1'' and similar clauses are no longer allowed; there must now be a space between the sign and the number.
\item \textbf{COLUMN clause (screen)}: added POS as synonym for COLUMN.
\item \textbf{errno}: can now access the C global variable errno by declaring a variable as EXTERNAL AS "errno" (\fr{49}).
\item \textbf{LIKE clause*}: added recognition of (see \fr{193}).
\item \textbf{LINE clause}: ``LINE +1'' and similar clauses are no longer allowed; there must now be a space between the sign and the number.
\item \textbf{LINE clause (report)}: allow LINES instead of LINE.
\item \textbf{Local-storage section*}: in the Micro~Focus dialect, the presence of a local-storage section now implicitly defines a program as RECURSIVE.
\item \textbf{OCCURS clause}: fixed issues with OCCURS UNBOUNDED.
\item \textbf{PICTURE clause}: added recognition of PIC 1(n).
\item \textbf{PICTURE clause}: improved error messages.
\item \textbf{PICTURE clause}: added recognition of LOCALE phrase.
\item \textbf{PICTURE clause*}: fixed compiler crash with malformed picture-string (\bug{659}).
\item \textbf{RECORD VARYING clause}: added warning under -Wadditional for an FD with RECORD VARYING but with records of only one size (see \bug{441}).
\item \textbf{RENAMES clause}: strengthened syntax checks.
\item \textbf{RENAMES clause}: fixed \bug{623}, where RENAMES items had a LENGTH OF zero.
\item \textbf{SAME AS clause}: implemented (\fr{193}).
\item \textbf{Screen section}: made some COBOL words context-sensitive to screen section.
\item \textbf{Screen description}: the rules on which clauses must be specified when now depend on the dialect (see \bug{382}).
\item \textbf{SYNCHRONIZED clause}: deactivated RIGHT phrase, pending correct implementation (previously SYNCHRONIZED RIGHT was the same as SYNCHRONIZED LEFT).
\item \textbf{TYPE clause*}: added type-name format.
\item \textbf{TYPEDEF clause*}: implemented (\fr{193}).
\item \textbf{USAGE clause}: added option to make COMP-1 mean a 16-bit signed integer (\fr{272}).
\item \textbf{USAGE clause}: added recognition of BIT and COMP-0.
\item \textbf{USAGE clause}: added COMP-N.
\item \textbf{USAGE clause}: added experimental support for ACUCOBOL's numeric POINTER (\fr{376}).
\item \textbf{USAGE clause*}: added type-names.
\item \textbf{VOLATILE clause}: added recognition of.
\end{itemize}

\paragraph{Procedure division}
\begin{itemize}
\item \textbf{ACCEPT statement (environment)}: added recognition of INPUT~STATUS and TERMINAL-INFO and SYSTEM-INFO phrases.
\item \textbf{ACCEPT statement (screen)}: fixed ACCEPT WITH UPDATE and not working (\bug{423}).
\item \textbf{ACCEPT statement (screen)}: fixed \bug{426}, where backspacing at the start of a field moved the cursor to the second-to-last character of the preceding field.
\item \textbf{ACCEPT statement (screen)}: added detection of CONTROL KEY clause.
\item \textbf{ACCEPT statement (screen)}: allow numeric-edited fields to contain spaces (see \bug{491}).
\item \textbf{ACCEPT statement (screen)}: fixed error when filling in a one character field with insert mode on (\bug{498}).
\item \textbf{ACCEPT statement (screen)}: pressing the home key, or end key, now toggles between going to the start of, or end of, the field and the cursor's original position.
\item \textbf{ACCEPT statement (screen)}: added WITH NO BELL clause.
\item \textbf{ACCEPT statement (screen)}: added support for Microsoft COBOL position specifiers.
\item \textbf{ACCEPT statement (screen)}: removed silent minimum of 500~ms from TIME-OUT phrase (\fr{196}).
\item \textbf{ACCEPT statement (screen)}: added recognition of CURSOR clause.
\item \textbf{ACCEPT statement (screen)}: fixed some issues with mice.
\item \textbf{ACCEPT statement (screen)}: improved numeric entry
  \begin{itemize}
  \item prevent deletion, backspacing over or overwriting of decimal point;
  \item entering a decimal point now jumps to character after it;
  \item allow entry of plus\slash{}minus signs;
  \item added new insert behaviour: cursor on integral digits inserts to right, cursor on decimal digits inserts to left, cursor starts on rightmost integer digit upon entering field, GnuCOBOL beeps at last character only when no insertion is possible.
  \end{itemize}
\item \textbf{ACCEPT statement (temporal)}: fixed \bug{469}, where ACCEPT FROM DAY was off by $-1$.
\item \textbf{ALLOCATE statement}: added recognition of LOC clause.
\item \textbf{CALL statement}: fixed ON EXCEPTION not working properly with -fstatic (\bug{462}).
\item \textbf{CALL statement}: added LINKAGE phrase (\fr{311}).
\item \textbf{CALL statement*}: fixed RETURN-CODE being set with RETURNING field (\bug{651}).
\item \textbf{CANCEL statement}: fixed segfault in recursive programs (\bug{98}).
\item \textbf{Conditions}: strengthened syntax checks for abbreviated conditions.
\item \textbf{Conditions}: improved error messages (\bug{567}).
\item \textbf{Conditions}: fixed LESS OR EQUAL being accepted, but LESS OR EQUALS being rejected (\bug{663}).
\item \textbf{CONTINUE (after)}: added support for (from COBOL~202X draft standard). See \fr{354}.
\item \textbf{DISPLAY statement (printer)}: allow for redirecting DISPLAY UPON PRINTER(-1) to files based on the runtime configuration.
\item \textbf{DISPLAY statement (screen)}: fixed DISPLAY LOW-VALUE not setting position of cursor for next DISPLAY statement (\bug{423}).
\item \textbf{DISPLAY statement (screen)}: added configuration option to disable Micro Focus' special behaviour with some figurative constants (see \bug{423}).
\item \textbf{DISPLAY statement (screen)}: fixed \bug{428}, where DISPLAY ALL ``x'' WITH SIZE only displayed ``x'' once.
\item \textbf{DISPLAY statement (screen)}: added support for Microsoft COBOL's position specifiers and ERASE phrase.
\item \textbf{DISPLAY statement (screen)*}: fixed \bug{665}, where spaces where replaced with underscores in ``DISPLAY \ldots\ USING''.
\item \textbf{ENTRY statement}: added LINKAGE phrase (\fr{311}).
\item \textbf{Error messages}: runtime error messages now include ``error: '' after the filename and before the actual error message.
\item \textbf{Error messages}: fixed incorrect use of ``parameter'' where ``argument'' was meant.
\item \textbf{Error messages}: fixed \bug{586}, where GnuCOBOL would cause a buffer overflow when outputting an error message with a very long literal.
\item \textbf{EVALUATE statement}: added partial support for WHEN clauses not containing any statements, which transfer control to the next WHEN clause containing a statement, if any (so the behaviour is like C's switch statement).
\item \textbf{Exceptions}: the exception status is now only reset by SET LAST EXCEPTION TO OFF.
\item \textbf{Exceptions}: fixed EC-SIZE-OVERFLOW being raised when EC-SIZE-ZERO-DIVIDE is active (\bug{223}).
\item \textbf{EXHIBIT statement}: added.
\item \textbf{File I-O}: fixed \bug{457}, where file status 30 was set instead of the correct permanent error status (34, 35 or 37).
\item \textbf{File I-O}: added support for VBISAM 2.1.1.
\item \textbf{File I-O}: error messages from libcob now include the file I-O statement that caused them, when known.
\item \textbf{File I-O}: added support for file locking on Windows.
\item \textbf{File I-O}: filenames starting with a period or a number are no longer resolved; periods in an external-file-name are always replaced by an undrscore (so ``MY.FILE'' will be resolved as ``DD\_MY\_FILE'', ``dd\_MY\_FILE'' or ``MYFILE'').
\item \textbf{File I-O}: filename mapping is now applied in called subroutines.
\item \textbf{File I-O (BDB)}: fixed file status after OPEN OUTPUT on an OPTIONAL file.
\item \textbf{File I-O (ISAM)}: fixed bug involving START\ \ldots\ LESS EQUAL followed by READ PREVIOUS.
\item \textbf{File I-O (ISAM)}: fixed \bug{589}, where READ would skip records with duplicate keys after a DELETE.
\item \textbf{Floating-point arithmetic}: fixed incorrect SIZE ERROR exceptions (see \bug{470}).
\item \textbf{Floating-point arithmetic}: fixed \bug{478}, where calculations with the SIZE ERROR phrase have different results to calculations without it.
\item \textbf{Floating-point arithmetic}: now activate the SIZE ERROR handler when a floating-point variable is set to a non-finite value (see \bug{122}).
\item \textbf{GO TO statement}: added non-standard ENTRY phrase extension.
\item \textbf{INITIALIZE statement}: optimised.
\item \textbf{INQUIRE statement}: added recognition of.
\item \textbf{INSPECT statement}: optimised.
\item \textbf{JSON GENERATE statement}: added (\patch{45}).
\item \textbf{JSON PARSE statement}: added recognition of.
\item \textbf{LENGTH OF phrase}: fixed error message when used on group fields (\bug{175}).
\item \textbf{LENGTH OF phrase}: allow non-numeric literals.
\item \textbf{MODIFY statement}: added recognition of.
\item \textbf{MOVE statement}: added options to interpret moving non-numeric values to numeric items as moving zero to numeric items.
\item \textbf{MOVE statement}: improved detection of overlapping MOVEs when using reference modification.
\item \textbf{MOVE statement}: fixed remaining cases of \bug{220}, involving numeric-edited items.
\item \textbf{MOVE statement}: fixed incorrect truncation of COMP-4 items.
\item \textbf{PERFORM statement}: added check for non-zero item in BY phrase (\fr{268}).
\item \textbf{PERFORM statement}: allow the BY phrase to be omitted, which is the same as specifying BY 1 (\fr{158}).
\item \textbf{PERFORM statement (inline)}: added partial support for inline PERFORM statements not containing any statements.
\item \textbf{Procedure division header}: added recognition of MEMORY SIZE phrase.
\item \textbf{Procedure division header}: added LINKAGE phrase (\fr{311}).
\item \textbf{Procedure division header}: error if two USING BY REFERENCE parameters are the same (\bug{635}).
\item \textbf{Procedure division header*}: fixed use of variable-length RETURNING item (\bug{641}).
\item \textbf{Procedure division header*}: disabled RETURNING in programs, pending fix of \bug{650}.
\item \textbf{RAISE statement}: added recognition of.
\item \textbf{READ statement (relative)}: fixed file status on end of file.
\item \textbf{Reference modification}: improved out-of-bounds error message (\bug{445}).
\item \textbf{Reference modification*}: allow zero-length reference modification (\fr{390}).
\item \textbf{SORT statement}: added sorting of tables without keys (\patch{42}).
\item \textbf{SORT statement}: added recognition of more COLLATING SEQUENCE phrases.
\item \textbf{OPEN statement}: fail with file status 39 when the first record of an indexed file is larger than specified in the FD.
\item \textbf{OPEN statement}: fixed segfault when attempting to open a file in a non-existent folder (\bug{520}).
\item \textbf{OPEN statement}: added ACUCOBOL locking clauses.
\item \textbf{OPEN statement}: added detection of OS\slash{}VS-era input mode phrases.
\item \textbf{READ statement (indexed)}: fail with file status 43 when the read record is larger than specified in the FD.
\item \textbf{Reference modification}: added warnings for invalid reference modifications involving variables.
\item \textbf{Report writer}: implemented, including features from COBOL 2002 and the IBM Report Writer.
\item \textbf{REWRITE statement (indexed)}: now sets file status to 02 when duplicate key is detected.
\item \textbf{SET statement}: fixed \bug{225}, where an invalid SET statement caused an error saying ``invalid MOVE statement''.
\item \textbf{STRING statement}: fixed \bug{543}.
\item \textbf{STRING statement}: strengthened syntax checks (\bug{653}).
\item \textbf{SUBTRACT statement}: fixed \bug{603}, where subtracting an integer from a floating-point variable lead to incorrect results.
\item \textbf{STOP statement}: fixed the NORMAL phrase causing a compilation error (\bug{433}).
\item \textbf{UNSTRING statement}: strengthened syntax checks (\bug{653}).
\item \textbf{USE statement (exception)}: improved recognition of.
\item \textbf{VALIDATE statement}: added recognition of.
\item \textbf{WRITE statement}: fixed compilation error when writing to a GLOBAL file in a subprogram (\bug{87}).
\item \textbf{WRITE statement (indexed)}: now sets file status to 02 when duplicate key is detected.
\item \textbf{XML GENERATE statement}: added (\patch{41}).
\item \textbf{XML PARSE statement}: added recognition of.
\end{itemize}

\paragraph{Intrinsic functions}
\begin{itemize}
\item \textbf{CONCAT function}: added.
\item \textbf{CONTENT-OF function}: added.
\item \textbf{CONTENT-LENGTH function}: added.
\item \textbf{LENGTH, BYTE-LENGTH and LENGTH-AN functions}: now forbid numeric arguments.
\item \textbf{MOD function}: fixed EC-SIZE-ZERO-DIVIDE being raised instead of EC-ARGUMENT-FUNCTION when zero was provided as an argument.
\item \textbf{REM function}: fixed EC-SIZE-ZERO-DIVIDE being raised instead of EC-ARGUMENT-FUNCTION when zero was provided as an argument.
\item \textbf{WHEN-COMPILED function}: fixed timezone, which was missing its sign and contained nonsense when negative (\bug{436}).
\end{itemize}

\paragraph{Built-in subprograms}
\begin{itemize}
\item \textbf{C\$GETPID}: fixed wrong process ID being returned after forking (\bug{451}).
\item \textbf{C\$SLEEP}: if the requested time is too large, sleep for the maximum possible time instead of not at all.
\item \textbf{CBL\_GET\_CSR\_POS}: fixed wrong position being returned after ACCEPT statement (\bug{483}).
\item \textbf{CBL\_READ\_KBD\_CHAR}: this now works (\bug{500}).
\item \textbf{SYSTEM}: added workaround of buggy system() implementation on Windows, which removes leading and trailing quotes.
\item \textbf{X"91"}: corrected number of arguments from 2 to 3 (\bug{527}).
\end{itemize}

\section{GnuCOBOL 2.2}

This list tracks changes made from 23 November 2013. This excludes many changes made in 2009--2013 which would be pertinent to those upgrading from a 2009 build of OpenCOBOL 1.1 found in many package repositories.

\paragraph{General}
\begin{itemize}
\item \textbf{64-bit numbers}: fixed bugs in handling of 64-bit numbers (e.g. \bug{229}).
\item \textbf{ACUCOBOL windows}: added detection of ACUCOBOL's window\slash{}message box GUI syntax.
\item \textbf{C API (data)}: added several functions for getting and setting cob\_field items.
\item \textbf{C API (files)}: added cob\_file\_external\_addr, cob\_file\_malloc and cob\_file\_free.
\item \textbf{C API (screen)}: added several functions from Micro Focus' C to COBOL API: cob\_display\_text, cob\_sys\_get\_char, cob\_get\_char, cob\_get\_text, cob\_display\_formatted\_text, cob\_sys\_get\_csr\_pos, cob\_sys\_set\_csr\_pos, cobmove, cobaddstrc, cobprintf and cobgetch (feature requests \frnoname{148} and~\frnoname{187}).
\item \textbf{C API (signals)}: added cob\_raise to send signal to signal handlers.
\item \textbf{C compiler support}: fixed errors in compilers without designated initializers.
\item \textbf{cobc command-line options}: added -O3 to enable more optimisations.
\item \textbf{cobc command-line options}: added -Wfatal-error to make the compiler abort on the first error.
\item \textbf{cobc command-line options}: added -Wpossible-overlap to warn items that \emph{may} overlap (-Woverlap only warns if items definitely overlap).
\item \textbf{cobc command-line options}: added -fmax-errors to set number of errors at which the compiler aborts.
\item \textbf{cobc command-line options}: added -fwinmain to output WinMain instead of main (\fr{194}).
\item \textbf{cobc command-line options}: added -t and -T for complete listing support (-t for 80-characters wide listings and -T for 132-characters wide) which includes cross-references (thanks to Dave Pitts).
\item \textbf{cobc command-line options}: added -vvv (like -vv but passes verbose option to the linker as well) and -\#\#\# (like -v but commands are not executed).
\item \textbf{cobc command-line options}: allow -, i.e. stdin, as a source file.
\item \textbf{COBOL-85 NIST testsuite}: tests now refer to \$COBC, \$COBCRUN and \$COBCRUN\_DIRECT environment variables instead of directly calling cobc and cobcrun, allowing the testsuite to run in conjunction with tools like valgrind.
\item \textbf{COBOL-85 NIST testsuite}: tests for obsolete feature flagging are now executed, if possible.
\item \textbf{Comments}: added ACUCOBOL comments: \$ as synonym for * in indicator area and $\vert$ as synonym for floating comment indicator *>.
\item \textbf{Communication facility}: added detection of communication facility syntax.
\item \textbf{configure}: added useful error message when help2man, bison and flex are missing when they are needed.
\item \textbf{curses}: fixed compilation errors when configured without curses (\bug{90}).
\item \textbf{Error messages}: error messages are now lowercase, in line with the GNU Coding Standards (\bug{198}).
\item \textbf{Error messages}: segfaults in the compiler now cause an error message to be displayed.
\item \textbf{Error messages}: replaced instances of ``ODO'' by the clearer ``OCCURS DEPENDING ON''.
\item \textbf{Expressions}: resolve constant expressions and optimise constant decimals at compile time.
\item \textbf{Expressions}: added support for IBM OS\slash{}VS COBOL's arithmetic.
\item \textbf{Expressions}: improved error messages for malformed expressions.
\item \textbf{Indicators}: invalid indicators no longer cause compilation to immediately terminate (\fr{126}).
\item \textbf{Information}: output compiler version used to build GnuCOBOL and any mathematical libraries used (\fr{169}).
\item \textbf{Information}: output what a reserved word is an alias for in the -{}-list-reserved output (\fr{214}).
\item \textbf{Manpage}: added manpage generation and installation.
\item \textbf{Nested programs}: Nested programs no longer need to have END PROGRAM.
\item \textbf{National literals}: added basic support for national literals.
\item \textbf{Numeric literals}: added ACUCOBOL numeric literals: B\#\ldots\, for binary, O\#\ldots\, for octal, and X\#\ldots\ and H\#\ldots\, for hexadecimal.
\item \textbf{Literals}: fixed heap corruptions caused by uncommon literals (\bug{195}).
\item \textbf{Literals}: allow concatenation of literal and Boolean literals.
\item \textbf{Memory management}: all memory belonging to the parsers and lexers is freed upon a compiler abend.
\item \textbf{Memory management}: fixed memory leaks due to recursive CALLs.
\item \textbf{Microsoft Visual C++}: output when compiling with cl.exe is now filtered and temporary files are deleted.
\item \textbf{MinGW}: fixed use of wrong directory separator.
\item \textbf{Signals}: removed error message on SIGPIPE.
\item \textbf{Signals}: added error message for SIGBUS.
\item \textbf{Translations}: updated, with new support for German and Italian.
\item \textbf{User-defined functions}: function definitions must now end with END FUNCTION.
\item \textbf{User-defined functions}: function definitions may no longer be nested in programs (\bug{255}).
\item \textbf{Windows support}: allow linking with asm files.
\item \textbf{Windows support}: added support for DISAM in the batch file which creates distributables.
\item \textbf{Windows support}: fixed environment-setting batch files not working with Microsoft Visual Studio 2017.
\item \textbf{Windows support}: fixed 64-bit environment-setting batch files not checking the correct directories for binaries and libraries.
\end{itemize}

\paragraph{Configuration options}
\begin{itemize}
\item \textbf{Deleted compiler configuration options}: eject-statement, cobol85-reserved.
\item \textbf{New compiler configurations}: all dialects have been split into standard and strict dialects, with strict dialects maintaining source compatibility with the dialect's compiler(s).
\item \textbf{New compiler configurations}: acu for ACUCOBOL, cobol2014 for COBOL 2014, rm for RM-COBOL, xopen for X\slash{}Open.
\item \textbf{New compiler configuration options}: accept-display-extensions, accept-update, accept-auto, acu-literals, arithmetic-osvs, call-overflow, console-is-crt, constant-01, constant-78, constant-folding, define-constant-directive, hexadecimal-boolean, hexadecimal-national-literals, incorrect-conf-sec-order, intrinsic-function, listing-statements, literal-length, move-figurative-constant-to-numeric, move-figurative-quote-to-numeric, move-ibm, national-literals, no-echo-means-secure, not-exception-before-exception, numeric-boolean, numeric-literal-length, numeric-value-for-edited-item, pic-length, program-name-redefinition, program-prototypes, reference-out-of-declaratives (\fr{179}), register, renames-uncommon-levels, reserved, reserved-words, stop-identifier, system-name, title-statement, use-for-debugging, word-length (\fr{43}). % TO-DO: expand
\item \textbf{Registers}: compiler configurations can now specify all the registers to generate.
\item \textbf{Registers}: added registers not yet implemented by GnuCOBOL as reserved words.
\item \textbf{Renamed compiler configuration options}: debugging-line to debugging-mode, relaxed-syntax-check to relax-syntax-checks.
\item \textbf{Reserved words}: compiler configurations can now specify all the reserved words and context-sensitive words permitted.
\item \textbf{Reserved words}: compiler configurations can now specify whether a reserved word is an alias for another reserved word. % TO-DO: Improve
\item \textbf{Runtime configuration}: added ability to configure some libcob features at runtime.
\item \textbf{Support options}: options which specify if a feature is supported can now take a ``+'' before their argument to indicate it takes effect only if the current level of support is less strict than ``ok''.
\end{itemize}

\paragraph{Compiler directives}
\begin{itemize}
\item \textbf{\$ indicator character}: added \$ as an indicator for compiler directive lines.
\item \textbf{\directiveindicator{}IF directive}: fixed \bug{263}, where nested \directiveindicator{}IF directives were not handled correctly.
\item \textbf{New constants}: GCCOMP, GNUCOBOL.
\item \textbf{New directives}: \directiveindicator{}CALL-CONVENTION, \directiveindicator{}LISTING, \directiveindicator{}PAGE. % TO-DO: Expand
\item \textbf{New directives (detection only)}: *CBL, *CONTROL, TITLE.
\item \textbf{New \directiveindicator{}SET phrase}: SOURCEFORMAT.
\end{itemize}

\paragraph{Identification division}
\begin{itemize}
\item \textbf{Comment paragraphs}: fixed invalid parsing of quote characters inside comment paragraphs (\bug{297}).
\item \textbf{FUNCTION-ID}: added checks for redefinition of function-names.
\item \textbf{INITIAL phrase}: fixed premature deallocation of INITIAL programs (\bug{52}).
\item \textbf{OPTIONS paragraph}: added with implementation of DEFAULT ROUNDED MODE and ENTRY-CONVENTION phrases and recognition of INTERMEDIATE ROUNDING phrase.
\item \textbf{PROGRAM-ID}: added checks for redefinition of program-names.
\item \textbf{PROGRAM-ID phrases}: permit INITIAL or RECURSIVE before COMMON (\bug{244}).
\item \textbf{Program\slash{}function-names}: warn if program\slash{}function-names contain spaces.
\end{itemize}

\paragraph{Environment division}
\begin{itemize}
\item \textbf{ASSIGN clause}: missing ASSIGN clauses are now detected at compile-time.
\item \textbf{ASSIGN clause}: added PRINTER and PRINTER-1 device-names for writing to a printer.
\item \textbf{ASSIGN clause}: added CARD-PUNCH, CARD-READER, CASSETTE, INPUT, INPUT-OUTPUT, MAGNETIC-TAPE and OUTPUT device-names for line sequential devices.
\item \textbf{ASSIGN clause}: temporarily prohibit BASED and linkage items in ASSIGN USING due to \bug{421}.
\item \textbf{CALL-CONVENTION phrase}: statically calling functions with CALL-CONVENTION 74 no longer causes linker errors (\bug{316}).
\item \textbf{CURRENCY phrase}: fixed \bug{182}, where a preceding SWITCH phrase caused an incorrect duplicate CURRENCY clause error.
\item \textbf{File-control entry}: fixed \bug{71}, where referring to a global constant caused an internal error.
\item \textbf{File-control entry}: fixed \bug{331}, where using an identifier in a file record qualified with the file's name caused an error.
\item \textbf{FUNCTION phrase}: added checks for redefinition of function-(prototype-)names.
\item \textbf{FUNCTION phrase}: compiler will no longer stop when it encounters a syntax error.
\item \textbf{LOCK MODE clause}: fixed combination of LOCK MODE IS AUTOMATIC/MANUAL with LOCK ON MULTIPLE.
\item \textbf{PROGRAM phrase}: added support for program-prototype-names.
\item \textbf{SIGN clause}: improved syntax checks.
\item \textbf{SWITCH phrase}: added check for duplicate on\slash{}off clauses (\bug{136}).
\item \textbf{SWITCH phrase}: added new switch names: SWITCH-16 through to SWITCH-36 (\fr{65}), ``SWITCH 1'' to ``SWITCH 26'' (and their aliases  ``SWITCH A'' to ``SWITCH Z''), UPSI-0 to UPSI-8 (equivalent to ``SWITCH 0'' to ``SWITCH 8'') and USW-0 to USW-31 (equivalent to ``SWITCH 0'' to ``SWITCH 31'').
\end{itemize}

\paragraph{Data division}
\begin{itemize}
\item \textbf{78-level items}: strengthened syntax checks.
\item \textbf{88-level items}: strengthened syntax checks.
\item \textbf{ANY NUMERIC clause}: ANY NUMERIC items must now have PIC 9.
\item \textbf{ANY LENGTH clause}: ANY LENGTH items may no longer be BY VALUE parameters (see \bug{219}).
\item \textbf{ANY LENGTH clause}: ANY LENGTH items must now have PIC X or PIC N.
\item \textbf{BLANK clause}: fixed \bug{143}, where BLANK LINE\slash{}SCREEN did not colour line\slash{}screen.
\item \textbf{BLANK WHEN ZERO clause}: added checks that BLANK WHEN ZERO is not specified with PICTURE clauses containing S.
\item \textbf{Constant items}: expressions in VALUE clauses now permitted.
\item \textbf{Data description}: added a maximum record length.
\item \textbf{Data description}: increased maximum size of non-indexed file record to 64 MiB (maximum size of an indexed file record is 65535 bytes).
\item \textbf{ERASE clause}: fixed \bug{186}, where ERASE EOL and ERASE EOS could be specified simultaneously.
\item \textbf{FULL clause}: added warning for useless FULL clauses on numeric items (\fr{209}).
\item \textbf{HIGHLIGHT and LOWLIGHT clauses}: added checks that HIGHLIGHT and LOWLIGHT are not specified simultaneously.
\item \textbf{Local-storage section}: fixed \bug{78}, where local-storage items where initialised after file section items.
\item \textbf{LOWLIGHT clause}: implemented.
\item \textbf{OCCURS clause}: fixed internal compiler when used with SYNC (\bug{155}).
\item \textbf{OCCURS clause}: allow KEY phrase and INDEXED phrase in any order.
\item \textbf{OCCURS clause}: fixed \bug{167}, where overly large numeric literals where accepted in the OCCURS clause.
\item \textbf{OCCURS clause (depending)}: require the minimum length to be less than the maximum length (\fr{99}).
\item \textbf{OCCURS clause (depending)}: disabled nested OCCURS DEPENDING tables due to bugs.
\item \textbf{OCCURS clause (screen-section)}: require relative LINE\slash{}COLUMN clauses in OCCURS entries (\bug{83}).
\item \textbf{OCCURS clause (unbounded)}: added by Frank Swarbrick (\patch{50}).
\item \textbf{PICTURE clause}: restricted number of permitted PICTURE strings (\bug{232}).
\item \textbf{PICTURE clause}: improved checks of constant-names referenced in PICTURE strings.
\item \textbf{RENAMES items}: strengthened syntax checks.
\item \textbf{RESERVE clause}: allow the optional word AREAS.
\item \textbf{Screen description}: permit figurative constants in screen items (\bug{108}).
\item \textbf{TALLY special register}: added.
\item \textbf{USAGE clause}: added ACUCOBOL's HANDLE phrases (see \fr{77}).
\item \textbf{VALUE clause}: VALUE clauses in REDEFINES entries now cause warnings, not errors, for compatibility.
\item \textbf{Variable records}: added checks that the minimum size of a variable record is large enough to contain the record key.
\end{itemize}

\paragraph{Procedure division}
\begin{itemize}
\item \textbf{ACCEPT statement}: added ESCAPE as synonym for EXCEPTION.
\item \textbf{ACCEPT statement}: permit clauses in any order.
\item \textbf{ACCEPT statement}: allow WITH before every screen attribute clause.
\item \textbf{ACCEPT statement}: entering control-C now terminates the program.
\item \textbf{ACCEPT statement (screen)}: fixed failed ACCEPTs caused by a buffer overflow.
\item \textbf{ACCEPT statement (screen)}: enhanced support for special keys (insert, tab, delete, alt-delete, etc.).
\item \textbf{ACCEPT statement (screen)}: fixed \bug{161} where screens terminated after entering a few characters in a field.
\item \textbf{ACCEPT statement (screen)}: added DEFAULT as synonym for UPDATE.
\item \textbf{ACCEPT statement (screen)}: ERASE and BLANK clauses in screens are now ignored (\bug{192}).
\item \textbf{ACCEPT statement (screen)}: fixed \bug{160} where ACCEPT statement LINE\slash{}COLUMN clauses did not work.
\item \textbf{ACCEPT statement (screen)}: fixed segfault on ACCEPT OMITTED (\bug{300}).
\item \textbf{ACCEPT statement (screen)}: added checks that screen attributes are not specified multiple times or after conflicting attributes.
\item \textbf{ACCEPT statement (screen)}: fixed some phrases not being recognised without being preceded by WITH (\bug{402}).
\item \textbf{ACCEPT statement (screen)}: fixed the backspace and delete keys not working and the insert key not toggling between insertion and overwriting.
\item \textbf{ACCEPT statement (screen)}: cursor now changes with insertion\slash{}overwrite mode (if supported by the terminal).
\item \textbf{ACCEPT statement (screen)}: a beep is emitted on attempts to \emph{insert} data into a full field.
\item \textbf{ADD statement (corresponding)}: restricted to numeric items (\bug{235}).
\item \textbf{ADD statement (table)}: added detection of ADD TABLE.
\item \textbf{Addition of COMP-3 numbers}: fixed bug where COMP-3 addition failed.
\item \textbf{Addition of floating-point numbers}: fixed incorrect addition of floating-point numbers.
\item \textbf{CALL statement}: implemented \fr{101}, allowing more arguments to be provided.
\item \textbf{CALL statement}: fixed behaviour when calling cancelled modules.
\item \textbf{CALL statement}: added RETURNING NOTHING. % TO-DO: What does this do?
\item \textbf{CALL statement}: the generation of C function declarations for static CALLs can now be disabled.
\item \textbf{CALL statement}: added checks for static CALLs referring to C macros.
\item \textbf{CALL statement}: warn if a literal containing the program-name contains spaces.
\item \textbf{CALL statement}: added detection of NESTED phrase.
\item \textbf{CANCEL statement}: fixed crash caused by cancelling a cancelled module.
\item \textbf{Conditions}: restricted use of IS (\bug{321}).
\item \textbf{Conditions}: added warnings for always true\slash{}false conditions (including the reason why it is always true\slash{}false).
\item \textbf{DESTROY statement}: added detection of DESTROY.
\item \textbf{DISPLAY statement}: permit clauses in any order.
\item \textbf{DISPLAY statement}: allow WITH before every screen attribute clause.
\item \textbf{DISPLAY statement (screen)}: fixed bug where EC-SCREEN exceptions did not trigger ON EXCEPTION handler (\bug{243}).
\item \textbf{DISPLAY statement (screen)}: fixed bugs in DISPLAY SPACES\slash{}ALL X``02''\slash{}ALL X``07''.
\item \textbf{DISPLAY statement (screen)}: added checks that screen attributes are not specified multiple times or after conflicting attributes.
\item \textbf{DISPLAY statement (screen)}: DISPLAY OMITTED marked as unfinished; currently equivalent to DISPLAY LOW-VALUE.
\item \textbf{DISPLAY statement (screen)}: fixed some phrases not being recognised without being preceded by WITH (\bug{402}).
\item \textbf{END DECLARATIVES phrase}: fixed \bug{88}, where an erroneous unreachable code warning was emitted for code without a main procedure.
\item \textbf{ENTRY statement}: suppress incorrect unreachable code warnings.
\item \textbf{Exception handlers}: permit NOT ON EXCEPTION\slash{}END-OF-PAGE\slash{}etc. before ON EXCEPTION\slash{}END-OF-PAGE\slash{}etc.
\item \textbf{EXIT statement}: added extension RETURNING\slash{}GIVING clause for PROGRAM phrase.
\item \textbf{File I-O}: added detection of and handling for error when no disc space is available for output files.
\item \textbf{File I-O}: added RETRY and ADVANCING ON LOCK as pending features.
\item \textbf{File I-O}: fixed detection of DISAM file handler.
\item \textbf{FREE statement}: NULL addresses no longer cause an exception.
\item \textbf{GOBACK statement}: added extension RETURNING\slash{}GIVING clause.
\item \textbf{INITIALIZE statement}: fixed \bug{84}, where literals could be passed to INITIALIZE.
\item \textbf{INITIALIZE statement}: fixed \bug{287}, where reference-modified group items were not treated like elementary items.
\item \textbf{INSPECT statement}: fixed \bug{47}, where clauses were permitted in invalid orders.
\item \textbf{LENGTH OF phrase}: fixed \bug{89}, where the length of REDEFINES item where calculated incorrectly.
\item \textbf{LENGTH OF phrase}: fixed \bug{110}, where LENGTH OF was not allowed in the UNTIL phrase of a PERFORM statement or in a VALUE clause.
\item \textbf{MERGE statement}: added recognition of more COLLATING SEQUENCE phrases.
\item \textbf{MOVE statement}: added more checks for overlapping MOVE statements.
\item \textbf{MOVE statement}: fixed truncation of COMP numbers not conforming to the binary-truncate setting (\bug{69}).
\item \textbf{MOVE statement}: fixed \bug{344}, where trying to MOVE to a procedure-name caused a segfault.
\item \textbf{MOVE statement}: added support for IBM's character-by-character MOVE.
\item \textbf{PERFORM statement}: fixed \bug{368}, where the compiler segfaulted when there was a PERFORM statement with an empty body and DEBUGGING MODE was specified.
\item \textbf{Procedure division header}: fixed \bug{55}, where a user-defined function without parameters failed to compile.
\item \textbf{Procedure division header}: disabled the BY VALUE phrase, pending a working implementation.
\item \textbf{Procedure division header}: fixed \bug{349}, where BY VALUE pointer parameters lead to code that couldn't be compiled by older versions of Microsoft Visual C++ (patched by Mario Matos).
\item \textbf{Procedure division header}: RETURNING items must now be declared in the linkage section.
\item \textbf{Procedure division header}: added RETURNING OMITTED.
\item \textbf{Procedure division header}: added entry-convention specifiers.
\item \textbf{Procedure division header}: now mandatory in function definitions (see \bug{271}).
\item \textbf{Procedure division header}: CHAINING programs may no longer be called by other programs (\bug{354}), per the ACUCOBOL implementation.
\item \textbf{Reference modification}: fixed \bug{146}, where the length of reference-modified item in an OCCURS DEPENDING table was too long because it was assumed the OCCURS DEPENDING table was at its maximum size.
\item \textbf{READ statement}: a failed second READ of a missing OPTIONAL file now results in a file status of 46, not 23.
\item \textbf{REWRITE statement}: added REWRITE FILE (\fr{170}).
\item \textbf{Screen I-O}: added detection of situations which raise EC-SCREEN-LINE-NUMBER, EC-SCREEN-STARTING-COLUMN and EC-SCREEN-ITEM-TRUNCATED.
\item \textbf{Screen I-O}: added support for the LINE 0 and COL 0 extensions.
\item \textbf{Screen I-O}: added some ACUCOBOL synonyms (NO ECHO, OFF, REVERSED, REVERSE, etc.).
\item \textbf{Screen I-O}: added detection of ACUCOBOL's non-standard clauses like TAB, NO-ECHO, STANDARD, BACKGROUND-HIGH, BACKGROUND-LOW, BACKGROUND-STANDARD and SIZE.
\item \textbf{SEARCH statement (ALL)}: fixed \bug{314}, where SEARCH ALL with an empty OCCURS DEPENDING table did not exit as soon as possible.
\item \textbf{Segment numbers}: added syntax checks.
\item \textbf{SET statement (address)}: disallowed changing address of non-01\slash{}77-level item (\bug{366}).
\item \textbf{SET statement (attribute)}: made HIGHLIGHT ON imply LOWLIGHT OFF and vice versa.
\item \textbf{SET statement (exception)}: added.
\item \textbf{SET statement (thread)}: added detection of ACUCOBOL extension.
\item \textbf{STOP statement (identifier)}: added (see \bug{320}).
\item \textbf{STOP statement (literal)}: fixed segfault.
\item \textbf{STOP statement (thread)}: added detection of ACUCOBOL extension.
\item \textbf{STRING statement}: strengthened syntax checks (\bug{259}).
\item \textbf{SUBTRACT statement (corresponding)}: restricted to numeric items (\bug{235}).
\item \textbf{SUBTRACT statement (table)}: added detection of SUBTRACT TABLE.
\item \textbf{Tracing}: fixed \bug{216}, where a segfault occurred with a program made from modules some of which had been compiled with tracing and physical CANCEL % TO-DO: Define "physical CANCEL"
enabled and some of which hadn't.
\item \textbf{UNSTRING statement}: fixed \bug{54}, where the POINTER value was calculated incorrectly when the delimiter was longer than one character.
\item \textbf{UNSTRING statement}: allow a literal to be the subject of an UNSTRING.
\item \textbf{WRITE statement}: added WRITE FILE (\fr{170}).
\end{itemize}

\paragraph{Intrinsic functions}
\begin{itemize}
\item \textbf{New functions (ACUCOBOL)}: ABSOLUTE-VALUE (synonym for ABS).
\item \textbf{New functions (COBOL 2014)}: FORMATTED-CURRENT-DATE, FORMATTED-DATE, FORMATTED-DATETIME, FORMATTED-TIME, INTEGER-OF-FORMATTED-DATE, TEST-FORMATTED-DATETIME.
\item \textbf{ISO-8601-date-handling functions}: added extension SYSTEM-OFFSET as replacement for last optional argument.
\item \textbf{ISO-8601-date-handling functions}: added EC-IMP-UTC-UNKNOWN if a time format ending in Z is provided but the timezone cannot be found.
\item \textbf{LENGTH function}: added detection of PHYSICAL phrase.
\item \textbf{RANDOM function}: fixed non-random number generation.
\end{itemize}

\paragraph{Built-in subprograms}
\begin{itemize}
\item \textbf{CBL\_GC\_FORK}: added.
\item \textbf{CBL\_GC\_PRINTABLE}: renamed from C\$PRINTABLE.
\item \textbf{CBL\_GC\_WAITPID}: added.
\item \textbf{CBL\_SET\_CSR\_POS}: added (feature requests \frnoname{148} and~\frnoname{187}).
\item \textbf{CBL\_READ\_KBD\_CHAR}: added (feature requests \frnoname{148} and~\frnoname{187}).
\end{itemize}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: "grammar.tex"
%%% End:
