@c Copyright (C) 1999-2002 Free Software Foundation, Inc.
@c For copying conditions, see the file gpc.texi.
@c This file is part of the GPC Manual.
@c
@c Authors: Peter Gerwinski <peter@gerwinski.de>
@c          Frank Heckenbach <frank@pascal.gnu.de>
@c
@c Last modification: 2002-05-10 (file up to date)

@ifclear NEWSONLY
@node News
@chapter New Features of GNU Pascal.
@cindex news
@end ifclear

@ifset NEWSONLY
@include version.texi
@c Note: The following line gets inserted into the destination file,
@c       it does not apply to this Texinfo file!
This file was generated automatically from news.texi.@*
@sc{DO NOT CHANGE THIS FILE MANUALLY!}

@settitle GPC News
@node Top
@chapter GPC News
@paragraphindent 0

@end ifset

There's a number of new or changed features which are listed in the
following sections. Features without further description refer to
new routines or options.

@menu
* News - General Changes And Possible Incompatibilies with Previous Versions::
* News - Command Line Options and Compiler Directives::
* News - Compiler and RTS Built-in Declarations::
* News - Units::
* News - GPC Manual::
* News - Demo Programs::
* News - Utilities::
* News - Test Suite::
* Legend::
@end menu

@node News - General Changes And Possible Incompatibilies with Previous Versions
@section General Changes And Possible Incompatibilies with Previous Versions

This release of GPC has been cleaned up substantially. Consequently,
a few old and obsolete features have been dropped or replaced by
cleaner, more flexible or otherwise more useful ones. This might
lead to minor problems with old programs, but we suppose they're
very rare (many programmers might not even know about the old
features) and easy to overcome. The most important ones are listed
here, the rest of them is contained in the following sections and
marked with @samp{(@@)}.

@itemize @bullet

@item The executables @samp{bpc}, @samp{pc} and @samp{epc} as well
as the dialect specific behaviour if GPC is invoked by those names
have been dropped. What they did was equivalent to
@samp{gpc --borland-pascal}, @samp{gpc --classic-pascal} or
@samp{gpc --extended-pascal}, respectively, and you can use these
forms now. If you need them often, you can put them in scripts or
aliases called @samp{bpc} etc., of course.

@item @samp{asmname} in variable and constant declarations must now
come after the type
(e.g. @samp{var foo: Integer = 42; asmname 'bar';}). Furthermore,
@samp{asmname} doesn't imply @samp{external} anymore for variables.

@item The internal file handling in the RTS was changed from using
@samp{@w{FILE *}} pointers to integer file handles, to make it more
efficient and to get rid of some problems. Accordingly, the
@samp{CFile} field in @samp{BindingType} was replaced by a
@samp{Handle} field, the @samp{AssignCFile} procedure by an
@samp{AssignHandle} procedure, and the @samp{GetFile} function was
removed (a substitute is the function @samp{FileHandle} which has
already existed in previous releases).

@item The option @samp{--no-nested-comments} (to allow comments like
@samp{@{ *)} as the standard requires) has been renamed to
@samp{--mixed-comments} (note the inverted value). Accordingly, the
compiler directives @samp{@{$N+@}} and @samp{@{$N-@}} have been
renamed to @samp{@{$no-mixed-comments@}} and
@samp{@{$mixed-comments@}}. The default, when no dialect options are
given, is still @samp{--no-mixed-comments} (i.e., what used to be
@samp{--nested-comments}).

@item A new option @samp{--nested-comments} to allow real nested
comments like @samp{@{ @{ @} @}} (also available as a compiler
switch, like almost all command-line options). Note the new meaning
of this switch, so if you used it before, you'll probably have to
change it to @samp{--no-mixed-comments} (see above). If nested
comments are enabled, comments are also allowed within compiler
directives and macros -- however, compiler directives within other
compiler directives are still not allowed, and compiler directives
within comments are, of course, still ignored.

@item C style character escapes (@samp{\n}, @samp{\007} etc.) are
now the default for strings enclosed in double quotes, while single
quoted strings do not allow them (according to the standard).
Accordingly, a verbatim @samp{"} in a double quoted string is now
obtained with @samp{\"} rather than @samp{""} (but a verbatim
@samp{'} in a single quoted string still with @samp{''}, of course).
Therefore, the option @samp{--[no-]char-escapes} and the compiler
directives @samp{@{$E+@}}/@samp{@{$E-@}} have been dropped. If you
used these features, please change to the appropriate kind of
quotes.

@item Macros are no more expanded in @samp{--borland-pascal} and
@samp{--delphi} modes. Expanding them causes a few problems with
strange sources written for BP which use the same name for a
conditional define and an identifier. Macros can be turned on/off,
independently of the dialect, with the new switches
@samp{--[no-]macros}. (B)

@item Macros and conditionals defined with @samp{@{$define@}} are
now case-insensitive. (B) Macros and conditionals defined with
@samp{--define} on the command line are still case-sensitive for
compatibility to other GNU compilers. In addition, GPC provides
@samp{@{$csdefine@}} or @samp{--csdefine} and @samp{@{$cidefine@}}
or @samp{--cidefine} to define case sensitive or insensitive macros
or conditionals, respectively. If you have defined macros or
conditionals with @samp{@{$define@}} and rely on them being
case-sensitive, change it to @samp{@{$csdefine@}} now.

@item The mechanism for including GPC code into code written in
other languages has changed and is now more robust. A header
gpc-in-c.h is provided for inclusion of GPC code into C programs,
and a demo program GPC_C_Pas (together with C code calling it) is
supplied to demonstrate this. (Including C code into GPC programs
works as before.)

@item The preprocessor is now called @samp{gpcpp} (it was
@samp{gpc-cpp} before). If you have installed an older GPC version,
please remove gpc-cpp now. If you have any scripts that refer to
gpc-cpp directly, change the reference to gpcpp. If you use DJGPP,
and you added the GPC specific sections to djgpp.env as described in
the FAQ, please change @samp{[gpc-cpp]} to @samp{[gpcpp]}.

@item In @samp{--borland-pascal} mode, GPC now ignores everything
after @samp{end.}. (This also takes care of ``^Z'' characters at the
end of Dos text files). In particular, multiple units or modules in
one file don't work anymore in @samp{--borland-pascal} mode. (B)

@item GPC has introduced a few new keywords which may break programs
that use those names as identifiers. Most of them are only
``conditionally reserved'', i.e. they act as keywords only in those
situations where the keyword makes sense, and can be used as
identifiers elsewhere. While this does not eliminate all possible
conflicts, it avoids a number of them. Among the new keywords are
@samp{attribute}, @samp{class} and @samp{published}. (D, partly)
@end itemize

@node News - Command Line Options and Compiler Directives
@section Command Line Options and Compiler Directives

@ifclear NEWSONLY
(Here are GPC's @emph{new} options. For an overview of the options,
see @ref{Invoking GPC}.)
@end ifclear

@itemize @bullet

@item @samp{-x Pascal}/@samp{--language=Pascal} works now; new
option
@samp{-x Preprocessed-Pascal}/@samp{--language=Preprocessed-Pascal}
to compile without preprocessing

@item @samp{@{$ifopt@}} works now, with short directives like in BP
(@samp{@{$ifopt X+@}}) (B) and also with long directives
(@samp{@{$ifopt extended-syntax@}})

@item Local compiler directives and defines can be specified with
@samp{@{$local@}} and @samp{@{$endlocal@}}.

@item Delphi (or C++) style @samp{//} comments in default and
@samp{--delphi} modes, and a switch @samp{--[no-]delphi-comments} to
turn them on/off explicitly. (D)

@item @samp{-W[no-]implicit-abstract} (warn if an object type not
declared @samp{abstract} contains an abstract method)

@item @samp{-W[no-]inherited-abstract} (warn if an abstract object
type inherits from a non-abstract one)

@item @samp{-W[no-]typed-const} (warn about BP style misuse of typed
constants)

@item @samp{-W[no-]near-far} (warn about use of the obsolete BP
compatible @samp{near} and @samp{far} directives)

@item @samp{-W[no-]underscore} (warn about double/leading/trailing
underscores in identifiers)

@item @samp{-W[no-]mixed-comments} (warn about use of mixed
comments)

@item @samp{-W[no-]nested-comments} (warn about use of nested
comments)

@item @samp{-W[no-]semicolon} (warn about a semicolon after
@samp{then}, @samp{else} or @samp{do})

@item @samp{-W[no-]field-name-problem} (don't warn about a problem
with field names)

@item @samp{-W[no-]object-directives} (don't warn about
unimplemented @samp{private}, @samp{protected} and @samp{public}
directives)

@item @samp{-W[no-]warnings} (enable/disable warnings)

@item All @samp{-Wfoo} warning options also work as
@samp{@{$W foo@}} compiler directives. In contrast to the last alpha
release, there must now be a space after the @samp{W}. (@@)

@item @samp{--no-default-paths} (disable standard unit etc. paths)

@item @samp{--no-unit-path}, @samp{--no-object-path} (disable any
unit/object paths given so far)

@item @samp{--[no-]read-base-specifier} (in read statements, allow
non-decimal input with @samp{n#})

@item @samp{--[no-]read-hex} (in read statements, allow hexadecimal
input with @samp{$})

@item @samp{--[no-]read-white-space} (in read statements, require
whitespace after numbers)

@item @samp{--[no-]io-checking} (same as @samp{@{$I+@}},
@samp{@{$I-@}})

@item @samp{--[no-]double-quoted-strings}

@item @samp{--[no-]stack-checking}, also as compiler directives
@samp{@{$[no-]stack-checking@}} or @samp{@{$S+@}}/@samp{@{$S-@}} (B)

@item @samp{--[no-]typed-address}, also as compiler directives
@samp{@{$[no-]typed-address@}} or @samp{@{$T+@}}/@samp{@{$T-@}} (B)

@item @samp{--[no-]transparent-file-names} (derive the external file
names from the file variable names

@item @samp{--[no-]progress-messages}, @samp{--[no-]progress-bar}
(output information to give progress messages or display a progress
bar while compiling, using suitable utilities)

@item @samp{--init-modules=foo:bar} (initialize the named modules in
addition to those imported regularly; kind of a kludge)

@item @samp{@{$[no-]debug-statement[=foo]@}} (call a procedure
automatically before each statement for debugging)

@item @samp{--big-endian}, @samp{--little-endian},
@samp{--print-needed-options} for targets whose endianness can vary

@item The @samp{--[no-]c-numbers} switch has been removed. If you
really used C style octal or hex numbers (@samp{0400},
@samp{0xf00}), you can easily convert them to the Extended Pascal
notation (@samp{8#400}, @samp{16#f00}) or (hex only) to the Borland
Pascal notation (@samp{$foo}). (@@)

@item @samp{@{$gnu-pascal@}} is now completely equivalent to
@samp{--gnu-pascal}; @samp{@{$gnu-pascal@}} has been added to all
units shipped with GPC, so they can also be compiled when
@samp{--borland-pascal} or other dialect options are given on the
command line.

@item @samp{@{$if@}} directives now understand Pascal operators like
@samp{and}, @samp{or}, @samp{not} (C operators are also still
understood).

@item @samp{@{$P+@}}/@samp{@{$P-@}} was replaced by
@samp{@{$[no-]pedantic@}} (or @samp{--[no-]pedantic} on the command
line)

@item The single-letter compiler directives are now BP compatible.
Those that are not meaningful or not necessary in GPC (e.g.
@samp{@{$F+@}}, @samp{@{$O...@}}, or @samp{@{$M@}} with only numbers
following) are ignored in @samp{--borland-pascal} mode and warned
about otherwise. (B) Note: @samp{@{$W+@}}/@samp{@{$W-@}} is now also
ignored in @samp{--borland-pascal} mode (it is the only
single-letter directive left that has a different meaning in BP and
in GPC, and besides, the BP meaning can be safely ignored in GPC).
To enable/disable warnings in @samp{--borland-pascal} mode, you can
use @samp{@{$W [no-]warnings@}} now. (@@)

@item The RTS command line options are now also available as long
options; new RTS options @samp{--version} (print RTS version and
exit), @samp{--abort-on-error} (abort with SIGABRT on runtime
error), @samp{--error-file}, @samp{--error-fd} (dump runtime error
messages and strack trace to given file name or FD).

@item RTS command line options are now recognized after
@samp{--gpc-rts} instead of @samp{-Grts}. Also, a single option can
be given with @samp{--gpc-rts=@var{option}}. This is allowed
multiple times. (@@)

@item The items of @samp{--field-widths} are now delimited by `:'
rather than `,' so they can be distinguished from the `,' used to
delimit several compiler options. (@@)

@item Files with @file{.pp} or @file{.dpr} extension are recognized
as Pascal sources. (D)

@item New options @samp{--classic-pascal} and
@samp{--classic-pascal-level-1} (equivalent to
@samp{--standard-pascal} and @samp{--standard-pascal-level-1}, and
meaning to supersede the latter in the future)

@item New predefined symbol @samp{__GPC_VERSION__}

@end itemize

@node News - Compiler and RTS Built-in Declarations
@section Compiler and RTS Built-in Declarations

@itemize @bullet

@item Syntax:

@itemize @minus
@item New operators @samp{is} and @samp{as} for objects
@item @samp{shl} and @samp{shr} can also be used as procedures now.
@item @samp{mod} with negative right operand now works like in BP.
(B)
@item Expressions like @samp{-2 * +3} are now allowed without
parentheses. (B)
@item The alternative address operator @samp{&} was removed.
(@samp{@@} is still there.) (@@)
@item @samp{register} directive
@item @samp{asmname} and @samp{uses @dots{} in} now allow
concatenated strings
@item @samp{asmname} for programs, units and module interfaces
@item Directives with double underscores like @samp{__asmname__},
@samp{__inline__} have been dropped. The same directives without
underscores have been available for a long time. Furthermore, GPC
now supports @samp{^const} to create a pointer to a constant (which
could be done in a C like fashion with the @samp{__const__}
directive before). (@@)
@end itemize

@item Types:

@itemize @minus
@item Abstract methods and object types
@item PObjectType with fields @samp{Size}, @samp{NegatedSize},
@samp{Parent} and @samp{Name}, returned by @samp{TypeOf} and
required by @samp{SetType}
@item ByteBool, ShortBool, WordBool, MedBool, LongBool, LongestBool,
Boolean(42) (D?)
@item Type qualifiers like @samp{__byte__} or @samp{__unsigned__}
have been dropped. GPC has been supporting ``real'' type names like
@samp{Byte} or @samp{ByteWord} for a long time, and it's easy to
change to them. Similar for @samp{__cstring__} and @samp{__void__}
where @samp{CString} and @samp{Void} are available. (@@)
@item @samp{nil} is accepted as a value of any procedural/functional
type (B)
@end itemize

@end itemize

Some of the following declarations are built into the compiler,
others are declared in the @samp{GPC} module.

@itemize @bullet

@item Files and I/O:

@itemize @minus
@item SeekEOF, SeekEOLn (B)
@item IOErrorFile
@item New parameter @samp{ElementSize} to ReverseBytes,
ConvertFromLittleEndian, ConvertFromBigEndian,
ConvertToLittleEndian, ConvertToBigEndian, BlockReadLittleEndian,
BlockReadBigEndian, BlockWriteLittleEndian, BlockWriteBigEndian (@@)
@item ReadStringLittleEndian
@item ReadStringBigEndian
@item WriteStringLittleEndian
@item WriteStringBigEndian
@item GetTempFileNameInDirectory
@item PathExists
@item DataDirectoryName
@item AssignBinary
@item HasWildCardsOrBraces
@item BraceExpand
@item MultiFileNameMatch
@item GlobOn
@item MultiGlob
@item MultiGlobOn
@item QuoteFileName
@item UnQuoteFileName
@item ReadLink
@item FExpandQuoted
@item ForceAddDirSeparator
@item FindNonQuotedChar
@item FindNonQuotedStr
@item NameExtFromPath
@item SystemInfo
@item GetMountPoint
@item FileMove
@item ChMod
@item ChOwn
@item IOSelect
@item IOSelectRead
@item FileNameLoCase
@item FileNamesCaseSensitive (constant)
@item DirRoot (constant)
@item MaskNoStdDir (constant)
@item QuotingCharacter (constant)
@item EnvVarChars (constant)
@item EnvVarCharsFirst (constant)
@item WildCardChars (constant)
@item FileNameSpecialChars (constant)
@item ShellExecCommand (constant)
@item DataReady renamed to CanRead (@@)
@item FileLock, FileUnlock
@item MemoryMap, MemoryUnMap
@item RuntimeErrorErrNo
@item InOutResCErrorString
@item CStringStrError
@item @samp{StatFS} is now a function rather than a procedure. (@@)
@item @samp{InOutResStr} was renamed to @samp{InOutResString}, is
now a @samp{PString} rather than a @samp{CString}, and is now in the
@samp{GPC} module rather than built into the compiler. (@@)
@item New parameter @samp{ErrNoFlag} to @samp{IOError},
@samp{IOErrorInteger}, @samp{IOErrorCString} and @samp{IOErrorFile} (@@)
@item New parameter @samp{Quoted} to RelativePath (@@)
@item New parameter @samp{Prefix} to ConfigFileName (@@)
@item New parameter @samp{AccessTime} to SetFileName (@@)
@item ExpandEnvironment recognizes @samp{~user}
@item Each of the parameters @samp{Dir}, @samp{Name} and @samp{Ext}
to @samp{FSplit} may now be @samp{Null}.
@item New fields @samp{User}, @samp{Group}, @samp{Mode},
@samp{Device}, @samp{INode}, @samp{Links}, @samp{SymLink},
@samp{TextBinary} and @samp{Special}, @samp{CloseFlag} in
@samp{BindingType}
@item The variable @samp{TextFilesBinary} has been dropped. Instead,
you can now use the procedure @samp{AssignBinary} or the field
@samp{TextBinary} in @samp{BindingType}. (@@)
@item File sizes can now be bigger than @samp{Integer} (e.g. 64 bit
files on 32 bit machines) if supported by the OS via lseek64() or
llseek() (e.g. Linux, Solaris, IRIX).
@item Renamed the file mode constants from @samp{fm@var{foo}} to
@samp{fm_@var{foo}}. (@@)
@item @samp{GetIOErrorMessage} now returns a string rather than a
@samp{CString}. (@@)
@item In @samp{GlobBuffer}, the fields @samp{Count} and
@samp{Result} (pointer to an array of @samp{CString}s, 0 baser) were
replaced by @samp{Result}, a pointer to an array of pointers to
strings, 1 based). (@@)
@end itemize

@item Strings:

@itemize @minus
@item FormatString
@item FormatStringTransformPtr
@item Integer2String
@item IsUpCase
@item IsLoCase
@item IsAlpha
@item IsAlphaNum
@item IsAlphaNumUnderscore
@item IsSpace
@item IsPrintable
@item Renamed the CString routines in the RTS so they get a
@samp{CString} prefix, moved the BP compatibility identifiers for
the same routines into the @samp{Strings} unit (B) (@@)
@item MemCompCase
@item StrEqualCase
@item PosCase
@item LastPosCase
@item PosFromCase
@item LastPosTillCase
@item IsPrefixCase
@item IsSuffixCase
@item LTrim (VS/Pascal compatibility :@minus{})
@item LineBreak (constant)
@item SetEnv (makes obsolete libc's PutEnv (@@))
@item UnSetEnv
@item GetCEnvironment
@item DisposePPStrings
@item @samp{SetLength} does not require extended syntax anymore.
@item The environment variable management is now implemented in
Pascal, so it's independent of libc differences (e.g. the presence
or not of @samp{environ}). Access via @samp{GetEnv} etc. works
unchanged.
@item The @samp{Environment} variable is now a schema which contains
the environment variables as CStrings. (@@)
@item Empty and case-sensitive environment variables are allowed
within GPC programs even under Dos.
@end itemize

@item Random:

@itemize @minus
@item SeedRandom
@item SeedRandomPtr (variable)
@item Randomize is called automatically when necessary (except when
using the BP compatible random number generator in the System unit
(B)).
@end itemize

@item Memory:

@itemize @minus
@item ReAlloc; previous ReAlloc function (libc) renamed to CReAlloc (@@)
@item ReAllocPtr (variable)
@item ForEachMarkedBlock
@item AllocateBigMem, DisposeBigMem, MoveToBigMem, MoveFromBigMem,
MapBigMem for uniform access to big memory blocks for GPC and BP (B)
@end itemize

@item Time:

@itemize @minus
@item Sleep
@item SleepMicroSeconds
@item Alarm
@item GetCPUTime
@item GetMicroSecondTime
@item GetDayOfWeek
@item GetDayOfYear
@item GetSundayWeekOfYear
@item GetMondayWeekOfYear
@item GetISOWeekOfYear
@item FormatTime
@item The constant @samp{MonthLength} was replaced by a function of
the same name that handles leap years. (@@)
@item DayOfWeekName (constant)
@item InvalidYear (constant)
@item New parameters @samp{TimeZone}, @samp{DST}, @samp{TZName1}, @samp{TZName2} to @samp{UnixTimeToTime} (@@)
@item New fields @samp{TimeZone}, @samp{DST}, @samp{TZName1}, @samp{TZName2} in @samp{TimeStamp}
@end itemize

@item Misc:

@itemize @minus
@item Include and Exclude for sets (B)
@item InitProc (D)
@item Initialize (D)
@item Finalize (D)
@item IsInfinity
@item IsNotANumber
@item SplitReal
@item Ln1Plus
@item ReturnAddress
@item FrameAddress
@item Runtime errors are now printed with their address to help
debugging (using addr2line), and the address is stored in ErrorAddr. (B)
@item RegisterRestoreTerminal
@item UnregisterRestoreTerminal
@item RestoreTerminal
@item ExecuteNoTerminal
@item SetProcessGroup
@item SetTerminalProcessGroup
@item GetTerminalProcessGroup
@item IsTerminal
@item GetTerminalName
@item SetInputSignals
@item GetInputSignals
@item GetShellPath
@item GetPasswordEntryByName
@item GetPasswordEntryByUID
@item GetPasswordEntries
@item StrSignal
@item Kill
@item WaitPID
@item InstallSignalHandler
@item BlockSignal
@item SignalBlocked
@item Constants for the signals
@item UserID
@item GroupID
@item IllReservedAddress, IllPriviledgedInstruction, IllReservedOp
were removed. (@@)
@end itemize

@end itemize

@node News - Units
@section GPC Units

@itemize @bullet

@item Compiler features related to units:

@itemize @minus
@item @samp{uses} and @samp{import} may now occur multiple times in
a program, unit/module interface or unit/module implementation, even
between declarations.
@item @samp{gpc-main} settings are now possible in units
@item @samp{public} and @samp{private} directives for interfaces
@end itemize

@item CRT:

@itemize @minus
@item Works now under Cygwin and mingw.
@item DJGPP: support for 40 column modes (requires updated PDCurses library)
@item Renamed the the conditional to get an X11 version from XCURSES to X11. (@@)
@item Renamed GetScreenSize to ScreenSize (WinCRT compatibility) (B) (@@)
@item WindowOrg, WindowSize, Cursor, Origin, InactiveTitle,
AutoTracking, WindowTitle, (variables), ScrollTo, TrackCursor
(WinCRT compatibility) (B)
@item SimulateBlockCursor, SimulateBlockCursorOff
@item Curses is not initialized at the beginning of the program, but
rather when the first CRT routine is called. (B)
@item CRTInit to explicitly initialize CRT and also set some
defaults (PCCharSet and update level) to more natural (and less BP
compatible) values.
@item CRTSetTerminal
@item CRTAutoInitProc (variable)
@item CRTNotInitialized
@item CRTSavePreviousScreen
@item CRTSavePreviousScreenWorks
@item Any of the parameters to GetWindow may now be @samp{Null}.
@item Support for panels (overlapping windows): GetActivePanel,
PanelNew, PanelDelete, PanelBindToBackground,
PanelIsBoundToBackground, PanelActivate, PanelHide, PanelShow,
PanelHidden, PanelTop, PanelBottom, PanelMoveAbove, PanelMoveBelow,
PanelAbove, PanelBelow, IgnoreCursor
@item Replaced the variables PCCharSet and UseControlChars by
routines SetPCCharSet, GetPCCharSet, SetControlChars,
GetControlChars. (@@)
@item SetScreenSize
@item SetMonochrome
@item Renamed IsMonoMode to IsMonochrome. (@@)
@item On ncurses platforms, changing the screen is now done through
a shell command definable in the environment variable
@samp{RESIZETERM} (which defaults to @samp{resize},
@samp{SVGATextMode} and @samp{setfont}). The variables
@samp{crt_setfont_command_80_25}, @samp{crt_setfont_command_80_50},
@samp{crt_setfont_command_40_25} and
@samp{crt_setfont_command_40_50} (Linux only) were removed. (@@)
@item CRTUpdate
@item CRTRedraw
@item SetScroll
@item CRTSetCursesMode
@item RestoreTerminalClearCRT
@item CtrlKey
@item AltKey
@item AltGrKey
@item ExtraKey
@item constants chCtrlA @dots{} chCtrlZ, kbCtrlA @dots{} kbCtrlZ
@item Catch some signals and return pseudo function keys for them if
CheckBreak is False.
@item React to screen size changes by external events and return a
pseudo function key.
@item Reduced the (already small) system-dependent code, and added
an overview of the few problematic features in the comment at the
beginning of crt.pas.
@end itemize

@item RegEx:

@itemize @minus
@item RegExPosFrom
@item CharSet2RegEx
@item Support for converting subexpression or complete matching
references to upper or lower case while replacing them with
@samp{\u7} or @samp{\l7}.
@item In @samp{RegExType}, the field @samp{Error} is now of type
@samp{PString} rather than @samp{CString}. (@@)
@end itemize

@item GMP:

@itemize @minus
@item mpf_exp
@item mpf_ln
@item mpf_pow
@item mpf_arctan
@item mpf_pi
@item The unit now works with version 4.x of the GMP library, but it
also still works with version 2.x or 3.x.
@end itemize

@item System:

@itemize @minus
@item SetTextBuf (B)
@item CompToDouble (D)
@item DoubleToComp (D)
@item AllocMemCount (D)
@item AllocMemSize (D)
@item Assert (D)
@item DefaultAssertErrorProc
@item AssertErrorProc (variable) (D)
@item NoErrMsg (variable) (D)
@item RealToBPReal, BPRealToReal to convert between binary BP
compatible 6 byte reals and GPC's reals (useful, e.g., for binary
file exchange with BP programs) (B)
@item Ofs, Seg, Ptr, CSeg, DSeg, SSeg, SPtr (mostly useless and only
for BP compatibility) (B)
@item A number of variables like SelectorInc (mostly useless and
only for BP compatibility) (B)
@item Renamed the @samp{__BP_INTEGERS__} conditional to
@samp{__BP_TYPE_SIZES__}. (@@)
@item New conditional @samp{__BP_PARAMSTR_0__}
@end itemize

@item Dos, WinDos:

@itemize @minus
@item GetCBreak
@item SetCBreak
@item GetVerify
@item SetVerify
@item Renamed the @samp{_Borland_16_Bit_} conditional to
@samp{__BP_TYPE_SIZES__}. (@@)
@item Intr, MsDos, only under DJGPP if
@samp{__BP_UNPORTABLE_ROUTINES__} is defined. (B)
@item DosVersion, SetDate, SetTime, only if
@samp{__BP_UNPORTABLE_ROUTINES__} is defined (emulated on
non-DJGPP). (B)
@end itemize

@item Pipe:

@itemize @minus
@item New parameter @samp{Process} to Pipe (@@)
@item WaitPipeProcess
@end itemize

@item PExecute:

@itemize @minus
@item Routines moved to the @samp{Pipe} unit. The @samp{PExecute}
unit does not exist anymore. (@@)
@end itemize

@item GetOpt:

@itemize @minus
@item ResetGetOpt
@item @samp{GetOptErrorFlag} is now True by default. (@@)
@item Integrated into the RTS so you don't need a @samp{uses GetOpt}
directive anymore. (@@)
@item Renamed the variables and constants used (see gpc.pas under
@samp{Command Line Option Parsing}). (@@)
@item @samp{GetOptLong} can now optionally derive the short options
from the @samp{LongOptions} array.
@end itemize

@item DosUnix:

@itemize @minus
@item OEM2Latin1
@item Latin12OEM
@end itemize

@item WinCRT:

New unit (identical to CRT) (B)

@item HeapMon:

New unit for (simple) heap checking.

@item Trap:

New unit for runtime error trapping.

@item MD5:

New unit for computing MD5 message digests.

@item FileUtils:

New unit with some file and directory utilities.

@item StringUtils:

New unit with some string utilities.

@item Intl:

New unit for internationalization.

@item GPC-BP:

A @samp{GPC} unit for BP to provide some GPC compatibility to BP
programs and make it easier to gradually convert them to GPC. (G)

@end itemize

A few of the units (in particular: CRT, GMP and RegEx) require
libraries. The sources of the libraries, with small patches where
necessary, as well as binaries for i586-pc-linux-gnu,
i586-pc-linux-gnulibc1, m68k-linux, sparc-sun-solaris2,
i386-pc-go32, i386-pc-cygwin32 and i386-pc-mingw32 are available
from
@example
@uref{http://www.gnu-pascal.de/libs/}
@end example

@node News - GPC Manual
@section GPC Manual

@itemize @bullet

@item Some very obsolete sections of the manual (e.g., the output of
running the PVS test suite on an Alpha machine in 1995 ;@minus{})
were removed.

@item The manual was restructured. Several partly overlapping
chapters were included into the Programmer's Guide, and the
overlapping material was merged into more coherent sections.

@item The BP QuickStart Guide was left a separate chapter and
completed with a section about differences between BP and GPC,
especially mentioning endianness issues.

@item A lot of new material was added to the @samp{Programming} and
@samp{Reference} chapters.

@item The list of command-line options and the list of keywords for
the various dialects were updated, and from now on, they are
automatically kept up to date, directly from the source. The
@samp{Invoking GPC} chapter does not contain all options inherited
from GCC anymore (these can be found in the GCC manual, anyway), but
rather more extensive descriptions of the most commonly used GPC
options, with examples.

@item The interface of all units included with GPC, together with a
short description of the units, is now included in the manual. The
interface, also that of the @samp{GPC} module which describes the
interface to the Run Time System, is formatted more nicely,
especially in the printed version of the manual.

@item The @samp{Support} chapter was updated, now including
information about GPC's Test Suite and how to report bugs most
effectively, as well as up-to-date contact information.

@item The installation instructions were updated, now matching the
current GPC and GCC versions.

@item The FAQ, the To-Do list, and the list of new features (this
one :@minus{}) were integrated into the manual.

@item The list of authors in the manual was updated, and the list of
contributors was included from the WWW page.

@item The manual was integrated with GPC's WWW pages, i.e. most of
the WWW pages were synchronized with the corresponding information
in the manual, and both now contain the same information.

@item The GNU Pascal Coding Standards (English, German and Croatian)
have been added.

@item Translation of the manual into Croatian has started.

@end itemize

@node News - Demo Programs
@section Demo Programs

@itemize @bullet

@item There is a number of new demo programs to demonstrate some
features of the compiler and the units. The demo programs are part
of source and binary GPC distributions. After installation, they can
be found in @file{<prefix>/doc/gpc/demos/}.

@item The demo programs printed in the GPC Manual (currently 192,
but expected to become more) are now installed as separate files,
ready to be compiled, in a directory
@file{<prefix>/doc/gpc/docdemos/}.

@end itemize

@node News - Utilities
@section Utilities

@itemize @bullet

@item BP compatible @samp{binobj} utility

@end itemize

@node News - Test Suite
@section Test Suite

The Test Suite is used to verify that all features of GPC work as
expected and to reproduce bugs reported. Test programs for bugs
found by users and for new features are constantly added. The test
suite is part of source, not binary, GPC distributions, and it is
available separately for download.

@itemize @bullet

@item As usual, many new tests have been added to the Test Suite.

@item The Test Suite now supports @samp{WARN} to check for warnings.
On the other hand, @samp{WRONG} tests are now run with warnings
switched off to detect only real errors.

@item The few checks dependent on the system or certain installed
tools or libraries have been equipped with checks about the system
properties, and are skipped on systems on which they are not
applicable.

@item The old dejagnu tests have been integrated into the Test
Suite.

@item @samp{make pascal.check} (or @samp{make check-pascal}) now
runs the current Test Suite (as @samp{make check2-gpc} did before)
rather than the (now removed) dejagnu tests. This must be done in
the build directory (not the @samp{p} subdirectory) or in the
@samp{test} subdirectory of the source directory. (@@)

@item The Test Suite now produces a summary output by default. To
get the long output format as before, run
@samp{make pascal.check-long} (or @samp{check-pascal-long}) now. (@@)

@item The GPC Manual as well as the @file{test/README} file in
source distributions (or @samp{BUGS} in binary distributions) tells
you how to run the Test Suite and describes all features of the
testing environment, to make it easier for users to construct even
exotic new tests, and contains some generic instructions on
how to report bugs.
@ifclear NEWSONLY
See @ref{Testing}, and see @ref{Reporting Bugs}.
@end ifclear
@end itemize

@node Legend
@section Legend

@multitable {xxxxxx}    {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
@item  @samp{(@@)}: @tab minor backward-incompatibility
@item  @samp{(B)}:  @tab BP compatibility
@item  @samp{(D)}:  @tab Delphi compatibility
@item  @samp{(G)}:  @tab GPC compatibility :@minus{})
@end multitable

Have fun,

The GNU Pascal Development Team
