@c Copyright (C) 1997-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 Author: Frank Heckenbach <frank@pascal.gnu.de>
@c
@c Last modification: 2002-05-10 (file up to date)

@c @@@@ This is only meant for the standalone version. But it cannot
@c be in a conditional, and the tools don't seem to mind a second
@c `@setfilename'.
@setfilename gpc-todo.info

@ifclear GPCMANUAL
@settitle The GNU Pascal To-Do List.
@setchapternewpage odd
@node Top
@chapter The GNU Pascal To-Do List.
@end ifclear

@ifset GPCMANUAL
@node To Do
@chapter The GNU Pascal To-Do List.
@end ifset

This is the To-Do list for the GNU Pascal Compiler.

@ifclear GPCMANUAL
Information about GPC as well as GPC itself for download can be
found on the @uref{http://www.gnu-pascal.de,GPC home page}.

This list is part of GNU Pascal.
Copyright (C) 1997-2002 Free Software Foundation, Inc.
@end ifclear

The GNU Pascal development team is constantly working on making GNU
Pascal more reliable and more comfortable. However, there are some
known bugs which will take some time to be fixed (any help
welcome!), and we do not want to hide them from you. You might also
be interested to know what features are planned to be implemented in
the future. This list is meant to keep track of the known bugs and
wanted features of GPC.

If you want to report a new bug or suggest a new feature, the best
way to do it is in the mailing list. This way, other GPC users can
provide additional ideas, perhaps work-arounds for bugs, and the GPC
maintainers can sooner start to think about how to solve the
problem. The GPC mailing list is @email{gpc@@gnu.de}. To subscribe,
send the command @samp{subscribe gpc your@@email.address} in the
body of a mail to @email{majordomo@@gnu.de} (the subject is
ignored). An archive of the mailing list can be found on
@uref{http://www.gnu-pascal.de/crystal/gpc/en/}.

The list changes every few days. The present version refers to the
current GPC snapshot, @value{GPCVersion}.

This list is part of the GNU Pascal Manual, included in GPC
distributions and snapshots. You can always browse the most current
version of the list on GPC's WWW page in HTML.
@ifset html
You can also download a stand-alone
@uref{gpc-todo.info,GNU Info (essentially ASCII) version of the list}
or the
@uref{gpc-todo.texi.gz,source in GNU Texinfo format (gzipped)}.
@end ifset
If you check the To-Do list regularly you can decide if and when to
try a new snapshort.

@menu
* Known Bugs::        Known bugs in GPC
* Planned Features::  Features planned for GPC
* Done::              Fixed bugs and implemented features
@end menu

@node Known Bugs
@section Known bugs in GPC

In the following sections, you can find information about GPC bugs
that are known to the developers. The list always corresponds to the
latest developer versions of GPC, usually not to the latest official
distribution.

If you encounter a bug with GPC, please check whether it is one of
the known bugs. If not, report it to the GNU Pascal mailing list.
(But always report if you solve the problem! :@minus{})

Entries will be removed from the list as soon as the problem is
solved in the developers' current GPC version. (Exception: If we
can't reproduce the problem, but someone else can, the entry will be
removed when we hear from this person that the problem is solved.)
Problems which are announced to be solved, but for which we (or the
person who can reproduce the problem) did not get the proof (i.e., a
GPC source patch) yet, are marked @samp{(ok)}.

A message ID (like @samp{<42@@foo.bar>}) refers to a message in the
GPC mailing list (or a newsgroup, denoted with @samp{news:}) where
the topic was discussed (often a bug report). A note of the form
@file{(xy20001231)} refers to an internal message of the GPC
developers. A file name like @file{(foo42.pas)} refers to the
according program in the GPC test suite included in the GPC source
distribution.

@itemize @bullet
@item give a warning rather than an error (and nothing in @samp{--borland-pascal}) when assigning/passing by value an object of derived type to one of a base type (and change the VMT pointer in the destination/actual parameter), don't change the VMT pointer when assigning to a polymorphic object (chief35[ab].pas), don't allow value parameters of abstract types, handle value parameters like variables in @samp{is}/@samp{as}
@item possible stack overflow when using string concatenation in a loop, and problem with string concatenation and @samp{goto} (contourbug.pas, martin1.pas, fjf419.pas)
@item @samp{setlimit} is applied when it shouldn't be ((a) variable/constant declarations, (b) @samp{set of ShortCard}, (c) constant sets)
@item the capacity of strings declared in interfaces of modules is not initialized (daj3.pas, sven14c.pas)
@item (subrange) components of packed arrays should be packed as well (but not other types) (daj14[ab].pas)
@item initializers of packed arrays don't work (emil5.pas)
@item some functions in boolean shortcuts are always called (fjf226[a-\infty].pas)
@item arithmetic expressions don't work as lower array/subrange bounds (fjf248.pas)
@item global dynamic variables don't work (john1.pas)
@item check for using, incrementing, @dots{} unused variables <199711270257.VAA06393@@mint.mint.net> (kevin2.pas), especially for strings, also for @samp{for}-loop counters after the loop (EP 6.8.1) and modifying @samp{for}-loop counters within the loop or in local routines <200005240807.EAA05355@@mail.bcpl.net>
@item types declared in a module interface are not visible in the implementation (kevin13.pas, mod12.pas)
@item declaring a procedure in the implementation with the same name as an imported procedure doesn't work (chief18.pas), detect name collisions between imported EP modules (mod9.pas)
@item packed array/record fields don't work in @samp{Read} etc. (tom5.pas)
@item dynamic sets don't work (->PPS)
@item there are some bugs with mathematical functions; GPC fails, for example, the Paranoia test
@item the compiler does not always recover well after a parse error <199911040915.KAA11168@@humulus.daimi.au.dk>
@item count of parameters in error messages should not include @samp{Self} in methods or internal parameters for conformant/open arrays <8F990E3D9A6FD1118F3B0000F81EA1D84985CE@@exchsa2.dsto.defence.gov.au>
@item bug on machines with strict alignment requirements <199906021618.MAA06228@@sten27.software.mitel.com>
@item forward referencing pointers generate debug info that appears as generic pointers; no information of @samp{with} statements is currently given to the debugger
@item check parameter names in repeated forward etc. declarations <20010321204051.A611@@plato>
@item check that all routines declared in an interface are implemented in the corresponding implementation
@item the warnings about uninitialized/unused variables don't work for strings, sets, etc.
@item Sparc with gcc-2.95.x: @samp{goto} jumping out of two procedure nesting levels doesn't work (GCC bug; fixed in 3.0.1) <200111170922.KAA09125@@goedel.fjf.gnu.de> (fjf558[op].pas) (-> @samp{Trap} unit)
@item AIX: @samp{ReturnAddress} doesn't work after use of dynmamic variables (GCC bug)
@item powerpc: @samp{--strength-reduce} doesn't work with @samp{for} loops (ok?)
@end itemize

@node Planned Features
@section Features planned for GPC

In the following sections, you can find informations about features
which have been suggested and/or discussed for inclusion into GPC,
usually in the GPC mailing list. The division into the sections and
the names of the sections may change when this seems useful. The
entries within each section are in no particular order.

Some of the entries may be a bit difficult to read. Double question
marks (@samp{??}) within the entries mean that it's not yet clear
how to do the thing. Triple question marks (@samp{???}) mean that
it's not clear whether to do it at all. ;@minus{})

@menu
* Planned - Strings::            String types
* Planned - Records/arrays::     Record and array types
* Planned - Files::              Files
* Planned - Other types::        Other types
* Planned - Units and modules::  Units and modules
* Planned - OOP::                Object oriented programming extensions
* Planned - Misc::               Miscellaneous GPC topics
* Planned - Utilities::          Useful utilities for GPC
@end menu

@node Planned - Strings
@subsection Planned features: Strings

@itemize @bullet
@item const/var @samp{AnyString} parameters and pointers (records internally, cf. gpc.pas) (GetCapacity; only for var parameters)
@item @samp{SetLength} for non-Pascal string types; use truncate-flag
@item make work on all string types: string functions from rts/gstrings.pas, Concat/+ (function with conformant array; Optimize @samp{s := s + ch}) (fh19971105)
@item new option @samp{--arrays-of-char-as-cstrings=@{none,zero-based,all@}} to allow assigning [zero-based] arrays of char to cstring variables (warning otherwise) (cstrini2.pas); make padding of those arrays in initialized variables and in assignments dependent on this switch (fh19970921) (fjf57.pas, ok) and if the length matches exactly, give a warning (fh19971013) (cstrassign.pas); pass those arrays as cstrings in read*, write*, str (P_*STRING; current length=-1 in two places); compile time warning (and treatment as non-zero-based) if it's not clear at compile time if a conformant array or schema is zero-based or not, and an operation depends on this in the zero-based state
@item Short strings (Length, Capacity) and switches (tc19980326.2,tc19980327); allow @samp{type x=string} (undiscriminated) when switch is set so that strings don't default to length 255 (fh19971113) (fjf97.pas, ok); don't add a #0 terminator when passing as a CString parameter (automatically use String2CString)
@item automatically convert CStrings to Strings?
@item general switch @samp{--bp-strings}
@item offer trimming string relations as functions
@item @samp{WriteStr}-like function
@item wide characters
@item open array/string parameters (@samp{$P}, @samp{$V} in BP; undocumented @samp{OpenString} identifier in BP)
@item variables of type undiscriminated schema/strings -> remove pointers to string constants; functions returning undiscriminated schemata (pg19980813.3)
@end itemize

@node Planned - Records/arrays
@subsection Planned features: Records/arrays

@itemize @bullet
@item array/record values/initializers: recognize indices and field names (sven4.pas), ISO structured constants (constdef.pas); variant records <C1256791.0021F002.00@@synln01.synstar.de>; allow omitting fields; fields in arbitrary order ???; index/field name optional; arrays: warning/error when too few fields are given; initialized schemata; <200106170346.f5H3ksj22229@@mail.bcpl.net>
@item initialized types in records/arrays (inirec[24].pas)
@item when applying @samp{New} to a variant record type with a selector given, only allocate the space necessary for the selected variant (varrec2.pas) ???
@item Oregon and Vax Pascal structured constants <80256540.005E7D08.00@@buffer1.quantel.com> ???
@item automatically detected upper array bounds in structured constants/intialized variables (-> PXSC)
@item simplify code generated to compute size of dynamical variables if no bitfields are involved
@item tagging feature for @samp{with} statements (Sun Pascal) (tom6.pas) <200012022215.eB2MFD614424@@wsinpa16.win.tue.nl>
@item transpose arrays (Fortran)? <news:918557$mke$1@@nnrp1.deja.com>
@end itemize

@node Planned - Files
@subsection Planned features: Files

@itemize @bullet
@item @samp{AnyFile} parameters and pointers
@item keep files in FDRList while they live, not only while they're open, so @samp{_p_fdrdone} can be applied to all of them
@item packed files (EP) ??
@item @samp{FormatString}: left/center/both(?) justification (ok in RTS, NEG_WIDTH_LEFT_MASK etc.); rounding (PXSC) ???
@item improve TFDDs (also for typed and untyped files) (OpenProc/CloseProc)
@item read/write operators ???
@item let @samp{Assign} call @samp{_p_initfdr} in @samp{--borland-pascal}
@end itemize

@node Planned - Other types
@subsection Planned features: Other types

@itemize @bullet
@item UCSD Pascal's @samp{Integer[n]} ??? BCD?
@item enum types with specified values ???; Inc, Pred, @dots{} ??
@item enum type extensions (syntax??)
@item check for dereferencing nil pointers
@item general subtypes ???
@item type cast operators ???
@item make @samp{SizeOf} work on specially declared untyped var and const parameters (@samp{AnyType}?)
@item sparse sets; sets of arbitrary types ?? ???
@item optimize set constructors even better ???
@item superfluous warning with sets and variable elements (fh19970928)
@item initalization and finalization code for arbitrary types (e.g. GMP types)
@item give an error rather than a warning when casting between types of different size in @{$X-@}
@item storage class qualifiers (@samp{external}, @samp{asmname}, @samp{static}, @samp{volatile}, @samp{attribute})
@item @samp{SELECTED_REAL_KIND} for real types (cf. Fortran, drf) ?? ???
@item resize schemata (cf. @samp{SetLength} in Delphi)
@item subranges with variable limits (couper[23].pas)
@end itemize

@node Planned - Units and modules
@subsection Planned features: Units and modules

@itemize @bullet
@item qualified identifiers <34508F33.4F685BD1@@keele.ac.uk> (also @samp{program_name.identifier}?) (problem module.id vs. record.field); also for operators; @samp{gpc} for built-in identifiers; duplicate identifiers in different units (fjf260[ab].pas); giving the same name to a routine in an interface and a local routine doesn't work (fjf240.pas); don't capitalize variable names in error messages and file name queries (store the casing of the first occurrence of an identifier) -> remove @samp{@{$no-debug-info@}}
@item @samp{external name}, @samp{asmname}, @dots{}; (-> BP, Delphi) ??, like @samp{$L} (fh19990325.2)
@item modules without implementation ??? (pmod1.pas)
@item @samp{asmname} for units
@item qualified import (mod10.pas)
@item inline functions in GPI files
@item unit inheritance (of a complete interface with one statement or selectively) <Pine.HPP.3.96.971105161603.28577A-100000@@tea.geophysik.tu-freiberg.de>, <199711061008.LAA25341@@agnes.dida.physik.uni-essen.de> ??; virtual procedures ???
@item allow accessing non-exported identifiers in the implementation of a module <Pine.BSI.3.96.971110210330.7570A-100000@@malasada.lava.net>
@item @samp{Initialization/Finalization} (Delphi: =@samp{to begin/end do}) (???) (only in @samp{--delphi}?)
@end itemize

@node Planned - OOP
@subsection Planned features: OOP

@itemize @bullet
@item init VMT in initialized variables (fjf445*.pas)
@item @samp{published}, @samp{public}, @samp{protected}, @samp{private} (scope limited to a unit in @samp{--borland-pascal}, and to the object type normally)
@item @samp{ProcVar := Obj.Method} @{$X+@}; method pointers (@samp{procedure/function of object}) (-> Delphi) ???
@item VMT link (global, local, new: set to 0 or @@VMT; destructor: reset to 0)
@item checks: @samp{@@Obj <> nil}, @samp{TypeOf (Obj) <> nil}, @samp{TypeOf (Obj)^.Size = -TypeOf (Obj)^.NegatedSize}; separate switches; function initialized (that does these 3 tests) ???
@item virtual constructors
@item @samp{@var{class} is @var{class}} (implemented in Pascal with @samp{Parent})
@item interfaces (cf. OOE, Java); @samp{@var{obj} is @var{interface}} (not so easy?) ???; variables of type pointer to more than one interface [and class] (also possible!)
@item allow method-implementation right after the declaration ???
@item friends ???
@item @samp{dynamic} (= @samp{virtual} ?)
@item @samp{class} (reference to an object type); allow classes and object types to inherit from each other; OOE; <01BD7A3A.6B187A20.prucha@@helicon.co.at>; obpascal.zip
@item @samp{New}: Delphi syntax; Dispose?? (automatically?; set references automatically to nil) (-> FPC)
@item @samp{--base-class=foo}, @samp{--base-object=bar} ???
@item properties <01BD7A3A.6B187A20.prucha@@helicon.co.at>, <16131.199805071354@@potter.cc.keele.ac.uk>
@item virtual constructors in interfaces (load)???
@item VMT problem with interfaces (my solution??? also with dynamic linking???)
@item VMTs (also for local classes (EP modules???)!) in GPI files, written to assembler file by main program; @samp{--cfiles=foo}: .s file with VMTs for C/assembler??? (also .h???)
@item method overloading ??? ??
@item class libraries (more or less TV compatible?/Free Vision/EFLIB) (streams as interface type?)
@item VMT: ClassID (64/128 bits?) default 0, error when duplicated, warning when 0 and inherited from class with <>0 ?, not allowed for abstract classes!; ClassName (also for abstract classes?); []; ProgrammerID, BaseClassID at beginning of unit (redeclarable?) ???
@item VMT: Children: list of pVMT
@item find class by ClassID/ClassName (implementable in Pascal with @samp{Child})
@item object constants, class variables (-> other name for @samp{VMT}); virtual/static
@item store in GPI: whether ClassID used, ClassName used, which classes are instantiated
@item @samp{asmname} for methods
@end itemize

@node Planned - Misc
@subsection Planned features: Misc

@itemize @bullet
@item read Booleans and enum types from files, write enum types to files; @samp{--[no-]read-range-checking} (also for subtypes of Char, Boolean and enum types!)
@item make it possible to declare routines as @samp{iocritical} and @samp{ignorable}
@item switch to warn about everything that could cause portability problems
@item document all compiler options and switches; make @samp{gpc --help} output all the options ???
@item libraries (static/shared; DLL) <Pine.HPP.3.96.971110183550.7996B-100000@@tea.geophysik.tu-freiberg.de>
@item smart linking
@item range <Pine.LNX.4.21.0012091605570.8168-100000@@rusty.russwhit.com>, overflow (right operand of mod <=0 is an error), nil pointer, string length, object VMT (pointer, negative size field), etc. checking <199911040915.KAA11168@@humulus.daimi.au.dk>; also for array slice access (miklos1.pas); check that strings converted to CStrings don't contain #0 characters; initialize strings (length field), pointers, ordinal values and reals(?) with invalid values if checking is on
@item overloading of unary operators
@item intel assembler syntax; BP BASM ???
@item function overloading (in units and static methods?? -- with different parameters, override or overload?); asmname?? (perhaps: first occurrence of a procedure with normal asmname (=> all non-overloaded procedures get normal asmnames)?); cf. Delphi methods without @samp{override}
@item and_else, or_then (names??); guarantee complete evaluation in @samp{@{$B+@}} mode
@item @samp{?:} (@samp{x := if c then bar else baz})
@item C operators (@samp{,}, @samp{=}, @samp{++}/@samp{--} (pre/post), @samp{+=}, @dots{}), as functions ?
@item @samp{for var: type = foo to bar do} ???
@item error/exception handling (Java,Delphi?) <01BD7A3A.6B187A20.prucha@@helicon.co.at> (tc20000623)
@item RTS checking (libgpc_g), switch?
@item simplify math functions <199708091006.MAA26576@@agnes.dida.physik.uni-essen.de>
@item variable number of arguments <32F9CFE7.5CB@@lmemw.ericsson.se> ?? ???
@item multithreading support ?? ???
@item @samp{--wirth-pascal} :@minus{})
@item PXSC standard @dots{} (@file{pxsc.zip}, @file{contrib/peter/pxsc}) (??)
@item Object Oriented Extensions (Technical Report) (??)
@item generic types (cf. OOE section C.1) (gentypes.pas) ???
@item default parameters (cf. OOE section C.4; Delphi 4?) (iniparm[12].pas)
@item Pascal++ standard @dots{} (??) ???
@item allow @samp{procedure foo; inline;}
@item compile time assertions ???
@item Ignore@{Value,Result@}/Discard and Swap for arbitrary types
@item make operators also available as functions
@item @samp{absolute} with automatic type detection; @samp{absolute} procedures (with automatic parameter detection) ???
@item Delphi features: CompToCurrency, CurrencyToComp, Slice, TypeInfo ???, dynamic arrays (tc19991012); Assert (tc20010225.2)
@item output column numbers in error messages ??
@item warn when @samp{and} and @samp{or} are combined without parentheses (-Wparentheses; on by default)
@item assembler blocks should be considered volatile by default ??? (fh19980829.4)
@end itemize

@node Planned - Utilities
@subsection Planned features: Utilities

@itemize @bullet
@item @samp{gp} make utility to replace automake; compile and link programs, but compile units without linking and without a warning that there is nothing to link; store GPC version numbers, platform and options in GPD files and re-compile automatically in @samp{--automake} mode when they don't match
@item C header to Pascal translator
@item gdb: Pascal types (sets, files, subranges, schemata, strings, @dots{})
@item @samp{indent}-like source code formatter for Pascal
@item AT&T <-> Intel assembler syntax converter ???
@end itemize

@node Done
@section Fixed bugs and implemented features

@menu
* Fixed Bugs::            Problems that have been solved
* Implemented Features::  Features that have been implemented
@end menu

@node Fixed Bugs
@subsection Problems that have been solved

This section lists the bugs fixed since 1st Oct 1997, together with
the date (YYYYMMDD) on which they were fixed, so you can check if
some bug has already been solved in a recent release or developer
version.

After the release of GPC 2.1, this section will be cleared and
contain the bugs fixed after that release.

@itemize @bullet
@item 20020425: packed array types declared in units do not behave correctly (martin3.pas)
@item 20020424: error when declaring a forward pointer to an overwritten type of name @samp{Word} (carel2*.pas)
@item 20020423: runtime error on @samp{EOLn} when text file does not end in newline (emil20.pas)
@item 20020423: error in debug entries generated for objects <8F990E3D9A6FD1118F3B0000F81EA1D84985D7@@exchsa2.dsto.defence.gov.au>
@item 20020410: HP/UX: @samp{unrecognizable insn} error in connection with conformant or const string parameters) <199809280741.JAA17719@@rug105.cs.rug.nl> (sietse1.pas), <Pine.SOL.4.10.9908051751550.23095-100000@@niflheim.rutgers.edu>, <396C3531.3A327722@@cs.rug.nl>
@item 20020410: a schema which contains another schema whose discriminant depends on the first schema's disciminant, while no part of the inner schema depends on its discriminant, is not initialized properly (emil19*.pas)
@item 20020410: differences of unsigned integer constants are treated as unsigned, even if their value is negative (emil18.pas)
@item 20020409: @samp{ParamStr} is not accepted as the first argument of @samp{ReadStr} and @samp{Val} (maur10a.pas)
@item 20020409: GPC accepts function results of string type as well as @samp{Re} and @samp{Im} as ``lvalues'' (fjf657*.pas, fjf658*.pas)
@item 20020409: string constants are not accepted as actual parameters for conformant arrays of @samp{Char} (fjf655*.pas)
@item 20020409: building GPC with @samp{-pipe} fails <200204081912.16296.georges@@its.caltech.edu>
@item 20020407: using a unit of the same name as one of the RTS's units (e.g., @samp{Files}) does not work (carel1.pas)
@item 20020401: @samp{file of record end} fails at runtime (emil1[56].pas)
@item 20020325: GPC crashes on invalid comparisons between arrays and string constants (fjf652.pas)
@item 20020323: @samp{Val} reads only one digit in some circumstances (fjf651b.pas)
@item 20020323: @samp{ReadStr} and @samp{Val} evaluate their first argument twice (fjf651[ab].pas)
@item 20020322: assigning/passing fixed strings (i.e., @samp{array @dots{} of Char}) to @samp{CStrings} doesn't work correctly (emil17.pas, fjf390[a-d].pas)
@item 20020322: GPC crashes on @samp{Page} without parameters (mike1.pas)
@item 20020318: missing type checking in @samp{><} (fjf649a.pas); @samp{><} can't be overloaded (fjf649b.pas)
@item 20020314: GPC crashes on @samp{packed array [@dots{}] of record end;} (emil14.pas)
@item 20020314: GPC accepts @samp{[packed] array @dots{} of Void} (emil13[a-c].pas) and @samp{[packed] file [@dots{}] of Void} (fjf648[a-d].pas)
@item 20020314: GPC segfaults on @samp{set of Void} (emil12.pas)
@item 20020308: calling a virtual method @samp{Size} doesn't work (maur9.pas)
@item 20020226: @samp{Re}, @samp{Im} and @samp{Arg} do not accept integer and real arguments (fjf641*.pas)
@item 20020224: arrays whose domain is an enum type (not a subrange) behave slightly wrong with initializers containing schemata (fjf638.pas)
@item 20020224: @samp{inline} and @samp{asmname} don't work together when compiling without optimization (maur3.pas)
@item 20020224: identifiers declared in a unit that have the same name as some object method are not visible (russell2.pas, fjf278.pas, fjf571.pas)
@item 20020223: some redeclaration errors are not strict enough (fjf565*.pas)
@item 20020222: the warnings about unused variables don't work for global variables (fjf632[ab].pas)
@item 20020222: the VMT of object variables is not initialized until a constructor is called (fjf631.pas)
@item 20020214: gcc-2.95.x (mostly): spurious warnings (with @samp{-Wall} and @samp{-O}) about uninitialized variables near @samp{case} statements
@item 20020214: @samp{Break} and @samp{Continue} don't work correctly in a @samp{for @dots{} in []} loop (i.e., iterating over a constant empty set) (forloop.pas)
@item 20020214: @samp{Low} and @samp{High} yield wrong results when applied to set constructors (fjf626.pas)
@item 20020211: GPC might crash in the presence of corrupt GPI files
@item 20020211: automake doesn't recompile programs/modules/units that depend indirectly on interfaces that were changed
@item 20020211: GPC might crash or produce wrong results when mismatching GPI files are used together, e.g. due to limitations of the automake mechanism (after fixing this bug, it aborts with a @samp{checksum mismatch} error message in this case)
@item 20020210: enumeration types do not always properly survive transport through two interfaces that depend on each other (miguel2.pas) or two interfaces of the same module (daj2.pas)
@item 20020209: constant declarations whose values contain RTS calls can give wrong results or lead to compiler crashes (emil11*.pas)
@item 20020208: @samp{SizeOf} does not work on uninitialized non-polymorphic objects (chief32.pas)
@item 20020208: the operators @samp{pow} and @samp{**} cannot be redefined (maur7.pas)
@item 20020208: schema components of array fields of schemata are not initialized correctly <3A93D0C0.8F5A8308@@zkm.de> (sven19[ab].pas)
@item 20020208: methods returning records, arrays or pointers (chief39*.pas) and functions without parameters returning arrays or pointers (fjf619*.pas, fjf299.pas) don't work correctly
@item 20020207: initializers of arrays of length 1 don't work (fjf320*.pas, fjf617.pas)
@item 20020207: declaring several @samp{absolute} variables at once doesn't work correctly (fjf616.pas)
@item 20020205: @samp{-pedantic} wrongly warns about standard routines such as @samp{WriteLn} (emil10.pas)
@item 20020203: GPC sometimes crashes with @samp{-g} <Pine.SGI.4.10.9903231101500.6691-100000@@pugh.bip.bham.ac.uk>
@item 20020202: don't allow assignments to and other modifications of schema discriminants (e.g., string's @samp{Capacity}) (fjf615*.pas)
@item 20020201: import and export of huge interfaces is very slow (quadratic time behaviour)
@item 20020201: bug with const parameters and derived object types (chief42.pas)
@item 20020128: @samp{const} object parameters don't accept actual parameters of derived object type (chief42.pas)
@item 20020125: complex @samp{ArcTan} yields inaccurate results in some cases (emil9.pas)
@item 20020124: @samp{protected} and untyped files don't work in procedural types (fjf601[a-d].pas)
@item 20020123: sizes of schema types containing variant records are computed wrong (fjf600.pas)
@item 20020122: too weak type checking in assignment and initialization of procedural variables (fjf598*.pas)
@item 20020122: pointer types pointing to themselves don't work (fjf244.pas)
@item 20020117: complex @samp{pow} yields wrong results with a negative exponent (emil8.pas)
@item 20020116: packed arrays of types of size 24, 40, 48, @dots{} bits are not really packed (fjf582.pas)
@item 20020115: inlining of functions which locally declare a subrange type etc. can cause GPC to crash, especially when debug info is generated (emil7.pas)
@item 20020114: assignments to packed array fields whose RHS involves the field itself don't work correctly (emil6.pas)
@item 20020112: complex @samp{Abs} overflows too early (maur8.pas)
@item 20020111: give an error rather than a warning when using @samp{Return} without a value in a function <3BEC86B3.85264A58@@alcatel.be>
@item 20020108: @samp{MinReal}, @samp{MaxReal} and @samp{EpsReal} don't work (emil4.pas)
@item 20020108: complex @samp{SqRt} aborts with the false error @samp{argument to `SqRt' is < 0} on some arguments close to the real line (emil3.pas)
@item 20011229: the @samp{DST} field of @samp{TimeStamp} contains wrong values (fjf580.pas)
@item 20011229: the test scripts don't work on systems that use @file{a.exe} instead of @file{a.out}, e.g. Cygwin
@item 20011229: Cygwin: @samp{LineBreak} should not contain a CR
@item 20011227: Intl: automatically link @samp{-lintl} when necessary
@item 20011227: @samp{Get} does not behave lazy, unlike @samp{Read} (emil2.pas)
@item 20011214: GPC accepts string capacities <= 0 (fjf579[a-c].pas)
@item 20011214: fatal range overflows in set constructors (couper8.pas, couper10.pas) <2C4F3FEF.20000809173117.FOO-13A6.frank@@g-n-u.de>
@item 20011214: missing type checking in set constructors (fjf57[67][a-l].pas)
@item 20011213: packed records of (e.g.) 16 bit wide subranges are not handled correctly is assignments (emil1.pas)
@item 20011202: packed records break when imported from units/module interfaces (martin2[ab].pas)
@item 20011201: spurious warning when setting a function return value via @samp{Str} (fjf575.pas)
@item 20011201: overflows in real constants are not detected at compile time (fjf573.pas)
@item 20011130: real numbers that are very slightly larger than a power of 10 are output incorrectly with @samp{Write} on some platforms (e.g., IA32) (ian7.pas)
@item 20011129: @samp{mod} yields a wrong result when the result should be 0 and the right operand is a signed type (fjf572a.pas)
@item 20011123: some comparisons on packed subranges don't work correctly (couper1.pas)
@item 20011122: two-unit bug with objects (adam2.pas) <Pine.GSO.4.30.0108011501180.14499-100000@@math>
@item 20011121: @samp{protected} parameters are not always respected; @samp{type of} must not preserve protectedness; sets constructed with @samp{type of} give a type mismatch; @samp{for} @dots{} @samp{in} a protected set parameter doesn't work; @samp{const} parameters of real or @samp{LongInt} type to procedural types don't work; @samp{const} set parameters don't work; set expressions don't always work as actual parameters (fjf383.pas, fjf447.pas, fjf569[a-w].pas)
@item 20011121: @samp{setlimit} doesn't work as a compiler directive (fjf215.pas)
@item 20011121: @samp{set of Integer (42)} doesn't work (fjf215.pas)
@item 20011121: GPC crashes on @samp{set of Real} (fjf568.pas)
@item 20011120: Alpha/OSF: @samp{mips-tfile} crashes when the source is read from standard input (fjf519[abe].pas)
@item 20011120: don't pass @samp{-x} options with @samp{--automake} (fjf567[ab].pas)
@item 20011119: 64 bit machines: reading @samp{MedCard} variables doesn't work (readg9.pas)
@item 20011119: 64 bit machines: set operations @samp{in}, @samp{Include}, @samp{Exclude} and some set constructors fail (mirsad[00-12].pas)
@item 20011119: @samp{shl} should use the longest possible result type when necessary (shl.pas)
@item 20011119: Alpha/OSF: compiling C files to be linked fails in @samp{mips-tfile}
@item 20011115: some more obscure cases of operator precedence and associativity are wrong (fjf566[a-m].pas)
@item 20011114: infinite compiler recursion when a unit uses itself (sven18[a-c].pas) <3A2275D8.F2DEA31A@@zkm.de>
@item 20011114: fixed string comparisons are wrong (takashi1.pas)
@item 20011114: GPC doesn't handle sets with negative lower bounds correctly (fjf563*.pas, couper11.pas, wnj.pas)
@item 20011111: enumeration types declared within a set or record type or variable or constant declaration or the case selector of a record within a unit are not visible in the main program (fjf211*.pas, fjf239[ab].pas)
@item 20011108: the test suite scripts don't work with non-GNU versions of @samp{sed} and @samp{awk}
@item 20011108: results of set operations are truncated to the left operand's range (especially noticeable when it is a constant set) (drf3[a-c].pas)
@item 20011108: GPC should not accept @samp{set of Integer} etc. (drf2[ab].pas, couper11.pas)
@item 20011108: GPC crashes on @samp{set of Integer} (couper11.pas)
@item 20011108: functions returning sets don't work (fjf554[a-x].pas, setret.pas, chief41.pas)
@item 20011107: too many parameters to @samp{New} are not checked (fjf553[bd].pas)
@item 20011107: @samp{New} of an untyped pointer should not be allowed (fjf553a.pas)
@item 20011107: GPC accepts reals as the bounds of subrange types (eike1[ab].pas)
@item 20011106: guarantee full evaluation in @samp{@{$B+@}} (fjf552[ab].pas)
@item 20011106: @samp{const} and @samp{protected} parameters are accepted as the second argument to @samp{Move}, @samp{MoveLeft} and @samp{MoveRight} (fjf550[a-f].pas)
@item 20011106: GPC doesn't allow Booleans and enum types for the 3rd parameter to @samp{FillChar} (BP allows this) (fjf549[ab].pas)
@item 20011103: type-checking for @samp{+} etc. is not strict enough (fjf277.pas, fjf309.pas, fjf399[ab].pas, fjf488xk.pas, fjf547[a-o].pas)
@item 20011103: for @samp{mod} with a negative operand, behave standard-conformant by default, but non-standard in @samp{--borland-pascal} and similar modes (fjf424[ac-e].pas)
@item 20011026: GPC searches compiled units first in the current directory rather than the @samp{unit-path} etc.
@item 20011025: @samp{UpCase} and @samp{LoCase} don't accept character constants (fjf544[ab].pas)
@item 20011025: MIPS: writing reals doesn't work (gcc bug with varargs) <Pine.SGI.4.10.9903240952350.12280-300000@@pugh.bip.bham.ac.uk>, <39DDC168.7CFFE872@@larc.nasa.gov>
@item 20011024: the second parameter of @samp{Insert} and the first parameter of @samp{Delete} must not be constant (fjf268[a-d].pas, fjf473[ab].pas)
@item 20011024: non-default integer types like @samp{MedInt} (and therefore @samp{SizeType} under DJGPP) are not accepted as the 4th parameter to @samp{BlockRead} and @samp{BlockWrite} (chief33.pas, fjf252.pas, fjf543[a-f].pas)
@item 20011024: @samp{Concat} with only one argument does not work (fjf542.pas)
@item 20011024: @samp{Trunc}, @samp{Round} and @samp{Polar} don't accept integer parameters where reals are expected (fjf229.pas, fjf303.pas, fjf541[ab].pas)
@item 20011023: @samp{@{$local@}} and @samp{@{$ifopt@}} don't work with dialect options (e.g., @samp{gnu-pascal}) (fjf535[a-d].pas, fjf536[a-k].pas)
@item 20011021: GPC allows multiple declarations of the same variable if they are of the same type (dave1.pas, fjf316.pas, fjf453.pas)
@item 20011021: const real parameters don't work (fjf227[ab].pas, fjf228[a-c].pas, fjf319.pas, fjf391[ab].pas, fjf530.pas)
@item 20011017: declaration blocks in the wrong order are not detected in @samp{--classic-pascal} (chuck1[a-c].pas)
@item 20011015: wrong type mismatches with @samp{const} and @samp{protected} parameters used as array indexes, as case selectors, in writing to typed files, in @samp{Include}, @samp{Exclude}, @samp{in}, in set assignments, or in file seeks (adam3[a-v].pas, chief31.pas)
@item 20011014: files and discriminants of schemata inside arrays whose index is an enumeration type are not initialized correctly (theo1[ab].pas)
@item 20011014: GPC wrongly allows @samp{<}, @samp{>}, @samp{<=} and @samp{>=} comparison of char, enum and boolean values with integers (fjf235[a-d].pas, fjf392.pas, fjf463.pas, fjf503.pas, fjf529.pas)
@item 20011014: missing constant range-checking in the upper bound of @samp{for} loops (chuck2.pas)
@item 20010818: @samp{BlockRead} and @samp{BlockWrite} can behave wrong when the actual third parameter is larger than @samp{Integer} (especially on big-endian systems) (fjf526a.pas)
@item 20010818: on systems where @samp{LongReal} has the same size as @samp{Real} (e.g., AIX), when writing them while @samp{field-width}s are given, the width for @samp{Real} is used instead of that for @samp{LongReal}
@item 20010818: in @samp{for} loops with pointer counters, the pointer is always incremented/decremented by 1 instead of the correct type size (fjf525[ad].pas)
@item 20010816: confusing error message when declaring a value parameter of file type (fjf521*.pas)
@item 20010808: AIX etc.: StrSignal: segfaults when given an invalid signal number (fjf522.pas)
@item 20010806: GetPasswordEntries: needs too much memory on systems with many users
@item 20010801: CRT (X11 on AIX etc.): segfaults when program is interrupted by SIGINT
@item 20010720: MD5: some bugs with macros, covered by the following bug on some platforms (md5test.pas)
@item 20010720: the preprocessor treats @samp{$} as part of identifiers on some platforms (e.g., Linux, DJGPP, @dots{}) (fjf520.pas)
@item 20010720: on the other platforms (e.g., AIX), @samp{#$fe} does not work at the beginning of a line (dosunixtest.pas)
@item 20010713: the GPC configuration and build process fails on systems without GNU @samp{grep}
@item 20010713: @samp{-x Pascal} or @samp{--language=Pascal} causes @samp{gpc: Internal GPC problem: internal option `--amtmpfile' not given} (fjf519*.pas)
@item 20010707: GPC crashes in the presence of old GPI files <3A2275D8.F2DEA31A@@zkm.de>
@item 20010704: integer parameters to built-in routines are not always converted to the right type (fjf349.pas)
@item 20010703: gcc-2.95: GPC should call @samp{ld} when @samp{collect2} is not available
@item 20010623: initializers of arrays with non-zero lower bounds contained within other structures are wrong (fjf247*.pas)
@item 20010619: Sparc: the preprocessor doesn't understand @samp{defined} (fjf266.pas,fjf238.pas,ian6.pas) <19990129132623.21658.qmail@@euler.stams.strath.ac.uk>
@item 20010604: @samp{Delete (s, 3, MaxInt)} segfaults (fjf509a.pas)
@item 20010603: directory names in the unit path etc. are converted to lower case <156QP6-03q-00@@ux.warez.linux.it>
@item 20010601: writing a typed file of a structured type by assignments to the file buffer and @samp{Put} doesn't work correctly (daj23.pas) <74323@@tcs01.demon.co.uk>
@item 20010529: multiple @samp{--uses} options don't work (fjf508b.pas)
@item 20010518: FreeBSD: @file{rts/rts.c} does not compile because headers are included in the wrong order <Pine.BSF.4.21.0105160236480.63226-200000@@hurricane.math.miami.edu>
@item 20010516: file operations cause small memory leaks
@item 20010501: some RTS functions that take string parameters don't accept @samp{Char} parameters (fjf488*.pas)
@item 20010421: when reading from text files, sometimes a spurious space character appears at a newline <000c01c0bb97$2e0c7cc0$b900a8c0@@gbtwireless.com>, <003101c0c9a9$773398a0$b900a8c0@@gbtwireless.com> (george1.pas)
@item 20010421: with @samp{--nested-comments} and @samp{-Wnested-comments}, the preprocessor mistakenly complains about nested comments, e.g., in @file{gpc.pas} (nicola3[ab].pas)
@item 20010420: GPC sometimes fails to link the runtime library <3A26A0D2.92344330@@ujf-grenoble.fr>, <01041920501700.00458@@hal>
@item 20010419: @samp{Halt} does not return the correct status to the calling process (adam1.pas)
@item 20010411: file variables aren't treated correctly when cross-building from a 32 bit system to a 64 bit system
@item 20010410: @samp{Reset} etc. don't accept @samp{''} (only @samp{'-'}) for stdin/stdout (fjf484*.pas)
@item 20010410: @samp{Reset} etc. on untyped files allow two buffer size parameters (fjf483.pas)
@item 20010409: writing real numbers very close to 0 causes the program to hang (lrbug2.pas) <000401c0bff6$7d07d820$46261bd4@@machine>
@item 20010409: @samp{ExecutablePath}: the result should be @samp{FExpand}ed
@item 20010325: when reading real numbers like @samp{1.03e+02} with @samp{ReadLn} etc., there is a slight avoidable rounding error (couper12.pas)
@item 20010315: Mac OS X: @samp{--dollars-in-identifiers} should not be the default
@item 20010210: CRT: programs can segfault when interrupted (SIGINT etc.) shortly after startup
@item 20010207: StringUtils: @samp{StringReadWord} fails if the last word is a single character long (steve1.pas) <01020711035902.13914@@klaatu>
@item 20010205: removed the @samp{LongReal2Str} work-around for the varargs problem on the MIPS
@item 20010121: Trap: nested traps don't work (trap2test.pas)
@item 20010120: false warning if a function result is an array and is assigned field by field
@item 20010120: don't require extended syntax for @samp{SetLength}
@item 20010112: GPC crashes with invalid forward type declarations (nicola[12].pas)
@item 20001223: point to the GPC mailing list instead of the GCC bug reporting facilities in compiler error messages
@item 20001223: don't call procedures functions in error messages etc. <200007230522.BAA05497@@strawberry.ncifcrf.gov>
@item 20001206: DJGPP (and possibly other platforms): FileNameMatch (and related functions): patterns starting with @samp{*} or @samp{?} should not match file names starting with @samp{.}
@item 20001118: Linux/Alpha: build-problems in rts/rta-va.c <14812.54955.265326.731526@@gargle.gargle.HOWL>
@item 20001107: bug with two-dimensional schema arrays (rudy1.pas)
@item 20001106: System: the return type of @samp{MemAvail} and @samp{MaxAvail} should be @samp{Cardinal} rather than @samp{Integer}
@item 20001025: FreeBSD: @samp{`T_RESADFLT' undeclared} (fixed by removing IllReservedAddress, IllPriviledgedInstruction, IllReservedOp which are not very useful and may not have been supported on any system, anyway)
@item 20000902: if reading from files etc. is interrupted by signals, this causes an I/O error
@item 20000717: GMP unit: doesn't work with version 3.x of the GMP library
@item 20000626: slight errors in debug line number information for assignment or procedure call statements
@item 20000606: CRT doesn't work with windows > 255 chars wide or high
@item 20000529: the installation does not work without the @samp{install} program installed <latimer@@phg.mc.vanderbilt.edu>
@item 20000521: very hard reproducible bug(s?) (fjf212.pas; fh19980828.3)
@item 20000520: fatal signal 6 when trying to write a GPI file into a non-writable directory
@item 20000516: Dos: PackTime/UnpackTime give wrong results on big-endian machines
@item 20000505: @samp{-I} options are forgotten after each @samp{include} directive (ian4.pas)
@item 20000505: @samp{div} also works as a real division (kevin14.pas)
@item 20000505: the arguments of long real functions are converted to a wrong type <9811112136.AA18086@@sunflower.agron.iastate.edu> (robert1[ab].pas)
@item 20000505: problem with rewrite on file of packed array of packed record (daj7.pas) <48378@@tcs01.demon.co.uk>
@item 20000505: @samp{Extend}ing a file previously @samp{Reset} without an intermediate @samp{Close} doesn't work correctly (daj13.pas) <48469@@tcs01.demon.co.uk>
@item 20000503: Sparc: division by reals (fjf237.pas, matt1.pas) or @samp{Round (real_constant)} (chaput1.pas) make the compiler crash <199911040915.KAA11168@@humulus.daimi.au.dk>
@item 20000503: division of complex numbers by reals doesn't work (maur4.pas)
@item 20000503: the Pascal main program does not get lineno stabs, so it is hard to debug it with GDB or RHIDE
@item 20000503: @samp{Val} doesn't recognize hex numbers with @samp{$} (chief37.pas)
@item 20000421: DosUnix: TranslateRedirections erroneously translates quoted redirections
@item 20000420: the compiler segfaults on @samp{--uses=foo,bar} (fjf101[ab].pas)
@item 20000420: @samp{--executable-file-name} doesn't work correctly with file names containing @samp{\}
@item 20000420: DJGPP: @samp{--automake} is more buggy than on other systems
@item 20000406: the preprocessor only understands C operators in @samp{@{$if@}} directives, not Pascal operators like @samp{not}, @samp{and}, @samp{or} (fjf423.pas)
@item 20000324: unit/module initialization and finalization code is executed in the wrong order (fjf185.pas)
@item 20000324: IRIX and AIX (and wherever else): unit/module initializers and finalizers are not executed
@item 20000323: mingw: environment variables are not accessible
@item 20000319: ignore text after @samp{$else} and @samp{$endif}, but warn if @samp{--pedantic} was given (fjf412[ab].pas)
@item 20000319: character constants of the form #42 are not handled correctly in complicated macro usage (fjf205.pas)
@item 20000308: @samp{attribute (const)} doesn't work
@item 20000226: during GPC build, the info files should be created in the source rather than the build directory, because they're included in source distributions
@item 20000221: global goto bug (goto4.pas, demos/parserdemo.pas) <3832137D.21C612FD@@ujf-grenoble.fr>, <199911040324.WAA19382@@kaylor.ncifcrf.gov>
@item 20000213: processing of initialized arrays takes quadratic time
@item 20000206: superfluous warning @samp{cast increases required alignment of target type} (tmp) (fjf398.pas)
@item 20000202: @samp{Close} should not be predefined in @samp{--extended-pascal} <199912112311.SAA25109@@mail.bcpl.net> (fjf393.pas)
@item 20000202: @samp{case} in the main program doesn't work correctly (e.g. pretty.pas) (tmp)
@item 20000202: insufficient type checking with subranges (fjf305.pas)
@item 20000202: gpc-lex must not seek back (fjf311.pas; @samp{-pipe} doesn't work correctly)
@item 20000202: Big-endian machines: some set operations don't work correctly (fjf329[ab].pas)
@item 20000202: gpc1 crashes when initializing a string with @samp{ParamStr (1)}
@item 20000202: for a binary operation with a signed and an unsigned integer operand, use a signed type for the result (fjf325.pas, fjf326.pas)
@item 20000201: a few BP compatibility routines in the Dos and WinDos units (e.g. @samp{GetDate}) don't accept parameters of type Word if it was redefined using @samp{-D__BP_TYPE_SIZES__}
@item 20000131: @samp{--uses} doesn't work in units
@item 20000124: @samp{gpc -B. -L. -v} should not try to link
@item 19991221: reference string parameters to RTS functions break after declaring a procedural variable with a value string parameter (fontana1.pas)
@item 19991107: CRT, CRTDemo: improved behaviour in response to screen size changes
@item 19990913: Sparc: @samp{downto} loops with variables of size 1 bit don't work (fjf374.pas)
@item 19990905: GetCPUTime can't measure long CPU times reliably on some systems (e.g. Solaris)
@item 19990804: the variable @samp{Environment} can be made invalid by PutEnv (e.g. on DJGPP), assignments to it are not allowed (e.g. glibc), and some other problems with environment variables (fjf371.pas)
@item 19990802: GPM files are not stored in the unit-destination-path
@item 19990725: opened files can't be erased
@item 19990720: real constants of the form @samp{0.5E+00} are not interpreted correctly (rick1.pas)
@item 19990712: function results of a string type declared in another unit are not correctly converted to CStrings (fjf302.pas)
@item 19990623: type error with schemata containing strings (fjf189.pas)
@item 19990623: integer shifts should not alter the sign (fjf84[ab].pas, fjf355@{,a@}.pas)
@item 19990622: computed constants that don't fit into a LongestInt don't work (fjf41.pas,fjf88.pas)
@item 19990619: routines with const parameters don't work in procedural parameters (chief26.pas)
@item 19990618: two-unit bugs (baby2.pas, sam12.pas, maur6.pas)
@item 19990618: the construct @samp{^f_oo} is misinterpreted as a Borland-style char constant (fjf350.pas)
@item 19990618: conformant array bounds of enum types don't work <C1256784.0026BE34.00@@synln01.synstar.de> (pd2.pas)
@item 19990618: enum variables cannot be used in a @samp{for var in} statement <C1256784.0027179B.00@@synln01.synstar.de> (pd1.pas)
@item 19990609: superfluous warning when @samp{return}ing a char constant from a function returning a char (fjf249.pas,fjf351.pas)
@item 19990601: the Graph and CRT units cannot be used together (requires PDCurses update compiled with -DLIBBCC)
@item 19990512: Rewrite/Extend with a filename parameter don't check for the existence of the file (fjf348.pas)
@item 19990504: DJGPP: @samp{FExpand}ing @samp{x:} and @samp{x:\..} can give strange results
@item 19990428: IOSelect doesn't work with the X11 version of CRT (fix includes PDCurses patch)
@item 19990412: bug with goto and local variables of non-constant size (berend3.pas) <004001be4bc2$24bfc9c0$0321a8c0@@bmach.nederware.nl>
@item 19990411: EGCS: new errors (tom4.pas); new errors with @samp{-g -O3} (forvars1.pas)
@item 19990411: EGCS: @samp{New}ing a @samp{File} pointer doesn't work (chief30.pas)
@item 19990410: missing range checking in @samp{#42} char constants (fjf332.pas)
@item 19990403: Dos-like systems: Dos: FindFirst/FindNext file name matching should be case-insensitive <3705B550.B1AA360E@@ujf-grenoble.fr>
@item 19990313: Solaris 2.7 (and perhaps other systems): FExpand doesn't work correctly with an empty directory name
@item 19990308: don't turn the lower index of an array slice access to 1 (except for strings in @samp{--extended-pascal}) (fjf340[a-d].pas)
@item 19990304: BlockRead and BlockWrite don't check if the file is open for reading/writing (fjf339.pas)
@item 19990225: @samp{Copy} and some other built-in routines don't check the number of arguments (fjf333.pas)
@item 19990223: DJGPP (and other systems without sinl() etc. in libm): long real Sin etc. produce linking errors <36D3063C.4D14F73C@@cicc.unam.mx> (maur5.pas)
@item 19990222: @samp{Null} is not accepted as an open or conformant array parameter
@item 19990219: @samp{Break} and @samp{Continue} with case statements are handled like in C, not like in BP <368563CE.F7F2D31C@@mundivia.es> (fjf287[ab].pas)
@item 19990204: pointers to @samp{file} don't work (chief28.pas)
@item 19990203: the order of objects/libraries in a @samp{@{$L@}} directive is reversed
@item 19990203: cardinals are not converted correctly in some expressions (fjf324.pas)
@item 19990203: @samp{Length} should return integer, not cardinal (fjf323.pas) (tmp)
@item 19990202: using undefined strings can cause segfaults at runtime (fjf322.pas)
@item 19990202: chars are not accepted as value/const string parameters to @samp{Insert} (fjf254.pas)
@item 19990202: DJGPP: CRT: ReadKey returns #10, not #13, for the enter key when CheckBreak is True
@item 19990201: FreeBSD: @samp{StatFS} in the RTS doesn't compile <003001be4b65$1b0b2d50$0321a8c0@@bmach.nederware.nl>
@item 19990130: @samp{ForceExtension} doesn't handle empty wanted extensions or directory names with ExtSeparators in them
@item 19990129: @samp{RemoveDirSeparator} erroneously removes the root directory slash
@item 19990129: CRT with ncurses: @samp{Read[ln]} returns endless empty lines after the first line entered
@item 19990129: Bind should remove trailing @samp{DirSeparators} from the file name (-> FSplit and some other functions don't work always/on all systems)
@item 19990128: Big-endian machines: CRT: the declaration of @samp{TWindowXY} is wrong
@item 19990127: automake and autolink can't use units without source (fh19990124.2)
@item 19990127: let ExpandEnvironment, FileNameMatch and HasWildCards (formerly in GPCUtil, now in the RTS) handle @samp{\} quotations (except under Dos systems, of course)
@item 19990126: Extend/Append can cause segfaults under more or less strange circumstances
@item 19990126: the (non-trimming) @samp{>} and @samp{<=} string operators are mixed up (chief27.pas)
@item 19990123: CRT: let CRT_Done be called before runtime errors so the error messages are not overwritten by closing curses
@item 19990122: reading from TTYs/pipes doesn't handle #0's correctly (fjf318[ab].pas)
@item 19990122: some superfluous warnings in @samp{--borland-pascal} mode
@item 19990116: the compiler should abort if a C compilation fails (link8.pas)
@item 19990116: const parameters of schema type should be passed by reference, not by value (fjf315[ab].pas)
@item 19990115: problems treating @samp{string} as @samp{string(255)} in connection with procedural parameters (fjf241.pas)
@item 19990115: ignore @samp{--executable-file-name}, @samp{--executable-path}, @samp{--unit-destination-path} etc. when @samp{-S}, @samp{-c}, @dots{} is given
@item 19990112: Solaris (and other big-endian machines): writing chars doesn't work (fjf314.pas)
@item 19990110: DJGPP: when @{$executable-file-name@} is given, stubify doesn't get the correct file name, so no .exe is created
@item 19990109: linking errors with automake when a unit is not recompiled (fh19971015), <ABcLeYr887@@e00827.vno.lt> (marius2[ab].pas)
@item 19990109: choose a unique temporary file name for the (former) .gpc files so that concurrent compilations don't conflict
@item 19990109: empty .gpc files before usage
@item 19990109: automake doesn't handle @samp{uses} in implementation part of a unit (fjf200@{,c@}.pas)
@item 19990109: @samp{$L} in units doesn't always work without @samp{--autobuild} (link1[a-c].pas, link5[ab].pas)
@item 19990106: when compiling without automake and a needed unit is not found, compilation should abort immediately
@item 19990102: @samp{$L} at the beginning of a source file makes the compiler crash (link6.pas)
@item 19981230: an integer subrange type is destroyed when a subrange of another type of the same size is being used as an array index (ross1.pas)
@item 19981230: arguments to @samp{Dispose} are evaluated twice <36730596.81CC880C@@mundivia.es> (miguel1.pas)
@item 19981230: the result of @samp{Copy} can't be passed to @samp{Val} (fjf306.pas) (tmp)
@item 19981228: fatal signal 6 when trying to write a GPI file into a non-writable directory
@item 19981227: autobuild doesn't recompile C files if the object file exists already
@item 19981227: passing a CString result of a function with parameters to a string parameters works, although it shouldn't, at least not without conversion (fjf242.pas)
@item 19981227: procedural variables should not be dereferenced when passed as an untyped parameter (fjf261.pas)
@item 19981227: integers can be passed for string parameters (fjf253.pas)
@item 19981227: for loops with counters of type subranges of char don't work correctly (chars2.pas) (tmp)
@item 19981220: missing type checking in @samp{absolute} (fjf300.pas)
@item 19981219: don't pass Pascal specific options (e.g. @samp{--automake}) to gcc1, but do pass the other ones (fjf203.pas)
@item 19981217: @samp{Polar} doesn't accept integer constants (fjf303.pas)
@item 19981212: DJGPP: fflush() clobbers the file position which causes some problems with GPC's file handling
@item 19981211: procedural variables are always passed by value <ABcLeYr887@@e00827.vno.lt> (marius1.pas)
@item 19981208: the preprocessor gets confused by two Pascal comments in sequence in an unusual situation <199812081112.LAA25879@@stams.strath.ac.uk> (ian2.pas)
@item 19981207: set addition doesn't work correctly (ian1.pas)
@item 19981207: bug in set addition (fjf262.pas)
@item 19981207: some set operations don't work with optimization (fjf196.pas)
@item 19981207: comparing sets doesn't always work (chris5.pas)
@item 19981207: the automake mechanism doesn't always work properly to compile the Pascal parts of the RTS
@item 19981206: the result of built-in string functions can be passed as var (fjf298[a-\infty].pas)
@item 19981206: bugs on machines with strict alignment requirements (chris4.pas, confarr5.pas, pack@{4,5,6,10,11,12@}.pas)
@item 19981205: truncate strings in @samp{Copy} (fjf40b.pas)
@item 19981205: CString2String doesn't work correctly with CStrings of length > 4 (fjf295.pas,fjf297[a-c].pas) (tmp)
@item 19981202: another instance of the two-unit problem (fjf294[ab].pas) (tmp)
@item 19981202: GCC2: typed constants don't work with @samp{-g -O3} (fjf36.pas)
@item 19981202: don't allow files or structures containing files to be assigned via @samp{:=} or returned from a function (john2[a-d].pas)
@item 19981202: only 1 parameter is accepted for C functions with varargs <3.0.6.32.19981110215411.007bb100@@vegasnet.net> (ken1.pas)
@item 19981130: autobuild should recompile a unit only once, even if it is used from multiple places
@item 19981129: some invalid preprocessor directives cause infinite error messages (dollars.pas)
@item 19981129: storage class qualifiers don't work with typed constants and initialized variables (fjf245@{,a@}.pas)
@item 19981129: operator declarations with var parameters or const parameters of record type make the compiler crash (fjf232[a-c].pas)
@item 19981129: missing type checking with const parameters of record type (fjf231.pas)
@item 19981129: cyclic @samp{uses} don't work (jesper5.pas)
@item 19981129: using a named subrange type as an array index spoils the range (sam11.pas)
@item 19981119: enum types with 128 or more elements don't work (sam9.pas)
@item 19981118: missing type checking with value string parameters (fjf291.pas)
@item 19981118: superfluous warning with constant sets and unsigned variables (fjf290.pas)
@item 19981118: missing type checking of method function results against string parameters (fjf289.pas)
@item 19981118: gpc segfaults after the declaration of @samp{array [Char] of Boolean} (fjf288.pas)
@item 19981118: increase every object's alignment to the maximum in order to prevent alignment warnings with child types (fjf286.pas)
@item 19981118: schemata in variant records are not initialized correctly in some situations (fjf272.pas)
@item 19981118: another Low/High bug (fjf269.pas)
@item 19981118: another string parameter bug (cstrpar3.pas)
@item 19981118: gpc segfaults on @samp{operator +;}
@item 19981116: subranges that occur in packed records can't be passed by reference <802566BB.0043115A.00@@buffer1.HQ.quantel> (sam8.pas)
@item 19981116: val doesn't handle empty strings correctly (fjf292.pas)
@item 19981104: @samp{--ignore-function-results} doesn't work with string return values (fjf282.pas)
@item 19981104: gpc1 segfaults on a strange schema usage (fjf275.pas)
@item 19981104: const void parameters don't work (fjf274.pas)
@item 19981104: external variables shouldn't be initialized again (fjf273.pas)
@item 19981104: missing type checking with High applied to arrays indexed by enumeration types (fjf271.pas)
@item 19981104: indexing an @samp{array [False .. True] @dots{}} doesn't work (fjf270.pas)
@item 19981104: don't initialize schemata and files when using GetMem as a procedure (baby.pas)
@item 19981020: string return values of object methods are not initialized (fjf281.pas) (tmp)
@item 19981020: severe bug with CString2String in a case statement (fjf279.pas)
@item 19980920: pass the correct specs to gcc1 (e.g. -D__i386__ on an IA32) (predef.pas)
@item 19980918: @samp{--executable-file-name} doesn't work with program names like @samp{magic}, @samp{format}, and prefixes of them (magic.pas)
@item 19980830: DJGPP: GPC crashes if the DJGPP variable is set incorrectly <ABfsDYraQI@@e00827.vno.lt>
@item 19980830: DJGPP: @samp{JDIR} problem
@item 19980830: make the To-Do list, __GPC_RELEASE__ and GPC archive file names y2k safe
@item 19980830: check conditions that are always true/false also for Cardinal (fjf225.pas)
@item 19980830: superfluous warning with ParamStr(ByteVar) (fjf224.pas)
@item 19980830: variables initialized by a function call don't work (fjf210.pas)
@item 19980830: the preprocessor can't handle @samp{elif} (fjf236.pas)
@item 19980826: type checking bug with ^Longint (fjf223.pas)
@item 19980822: EGCS: new errors with @samp{-g -O3} (objects.pas, retval.pas, testounit.pas)
@item 19980822: CString2String evaluates its argument mutiple times (fjf208.pas)
@item 19980822: give an error rather than a warning when passing/assigning incompatible pointer types (fjf201[a-h].pas)
@item 19980822: @{$executable-file-name@} doesn't work without @samp{program foo} (results in a.out) (fjf51.pas)
@item 19980822: array ranges are not checked in schemata (schema4.pas)
@item 19980816: file buffers of files open for writing can't be read from (fjf220.pas) (tmp)
@item 19980802: extend/append should only work for text files in @samp{--borland-pascal} (fjf202.pas)
@item 19980802: type casts into @samp{file} don't work (fjf207.pas)
@item 19980729: define @samp{__NEED_ALIGNMENT__} when needed
@item 19980729: incorrect cyclic @samp{uses} are not recognized properly (fjf161.pas,fjf161u.pas,fjf162.pas)
@item 19980729: new does not work with an object pointer variable and constructor given (fjf155.pas)
@item 19980729: @samp{_p_binding()} must only be called for files (fjf153.pas)
@item 19980729: fatal signal 6 when confusing a schema type witha schema variable (fjf151.pas)
@item 19980729: constant char arrays with boolean index range can't be declared like strings (fjf150.pas)
@item 19980729: multi-dimensional packed arrays are packed only in the outermost dimension (fjf149.pas)
@item 19980729: missing type checking of boolean array indices (fjf124a.pas)
@item 19980729: @samp{virtual memory exceeded} with some sequences of automake options and an 8-char long program file name (fjf199aa.pas) (tmp)
@item 19980729: defining a type equals to text doesn't work in a unit (fjf198.pas)
@item 19980729: array slice access to CStrings doesn't work (fjf188.pas)
@item 19980729: gpc crashes when trying to pass a const string parameter to a value string parameter (fjf182.pas) (tmp)
@item 19980729: false warning when using @samp{forward} in the implementation part of a unit (fjf177.pas)
@item 19980729: initialized variables in statement part don't work (fjf176.pas)
@item 19980729: initialized records with no fields given (@samp{()}) don't work (fjf175.pas)
@item 19980729: returning a string constant with @samp{return} doesn't work (fjf174@{,a@}.pas)
@item 19980729: initialized string arrays, indexed with an enumeration type, don't work (fjf172.pas)
@item 19980729: initialized variables of simple (no record or array) schema types does not work (fjf171.pas)
@item 19980729: in some cases, a value type casting is done instead of a variable type casting for lvalues (fjf170.pas)
@item 19980729: problems treating @samp{string} as @samp{string(255)} in some cases (chief25a.pas)
@item 19980728: Bug with SeekWrite (russell1.pas)
@item 19980722: declaring an asmname for procedures in the implementation of a unit/module doesn't work
@item 19980722: schema, pointer and record types do not properly survive transport through two interfaces (fjf164.pas,orland1.pas,fjf178.pas) <Pine.3.89.9805202229.A26897-e400000@@bc.seflin.org.>, <Pine.3.89.9805211812.B6540-9200000@@bc.seflin.org.>
@item 19980722: DJGPP: Segfault while compiling a program which uses a unit with a long interface <3537FE98.A4417284@@ujf-grenoble.fr>
@item 19980722: GPC's preprocessor outputs too many empty lines when removing text between @{$ifdef@} @dots{} @{$endif@} (fh19971115), <ABcLeYr887@@e00827.vno.lt>
@item 19980722: missing file mkstemp with GCC2
@item 19980722: set constants are not accepted for const set parameters (chief21.pas)
@item 19980722: With dynamic variables whose discriminant is initialized with a function call, the function is called twice (john1a.pas)
@item 19980722: set constants don't work in units (fjf195.pas)
@item 19980722: CString2String doesn't work on nil (fjf191@{,b@}.pas) (tmp)
@item 19980722: filename argument to reset is not handled properly (fjf186.pas,fjf187.pas)
@item 19980722: bug with string parameters (fjf184.pas) (tmp?)
@item 19980722: preprocessor bug with unterminated strings constants in undef-ed parts (fjf183.pas)
@item 19980722: High/Low don't work with schema-arrays and strings (fjf181@{,a@}.pas) (tmp)
@item 19980722: when assigning a string to a CString, no #0 is appended (fjf180.pas) (tmp)
@item 19980722: bug with converting big integer constants to reals (fjf179.pas) (tmp?)
@item 19980722: substrings of string constants give strange results (fjf168.pas)
@item 19980722: initialized strings with a #0 in them are cut after the #0 (fjf168.pas)
@item 19980722: operations should be promoted to the bigger operand's size (fjf167a.pas,fjf167b.pas)
@item 19980722: the last parameter of BlockRead and BlockWrite is not type checked (fjf163.pas)
@item 19980722: schema discriminants are not assigned in @samp{New} (fjf152.pas)
@item 19980722: strings within a schema type are not recognized in read/write (fjf148.pas)
@item 19980722: exit doesn't work in main program in some situations (fjf147.pas)
@item 19980722: @samp{--executable-file-name} has problems with 8+3 character long file names (fjf141aa.pas)
@item 19980722: strange error message at strange position (fh19980121:fjf140.pas)
@item 19980722: var parameters of type untyped file don't work (fjf138.pas)
@item 19980722: reset, rewrite, extend on untyped files should require a size parameter (except in @samp{--borland-pascal}; there: default to 128 and give a warning) (fjf136.pas,fjf137.pas)
@item 19980722: reset, rewrite, extend on untyped files don't allow a size parameter when given a file name, too (fjf126.pas)
@item 19980722: array with two dimensions, indexed by booleans, doesn't work (fjf124.pas)
@item 19980722: wrong comparison of byte with integer (fh19971130.2:fjf118.pas)
@item 19980722: don't allow @samp{type y(b:integer)=array[1..b] of integer;x=y;} in @samp{--extended-pascal} (fjf115a.pas)
@item 19980722: schema types that are no records or arrays (fh19971124:fjf114.pas,fjf114a.pas)
@item 19980722: don't allow writing strings to a file of char (fh19971130:fjf111.pas)
@item 19980722: constants can't be written to typed files (fjf110.pas)
@item 19980722: no constant range checking in FillChar (fh19971124) (fjf102.pas)
@item 19980722: ReadStr doesn't work with bit fields (fjf37a.pas) (tmp?)
@item 19980722: bug with constants and parameters of function type (knuth1a.pas)
@item 19980715: assigning string constant pointers to string pointer variables doesn't work (fjf194@{,a,b,c@}.pas)
@item 19980715: file variables should be automatically bindable without @samp{--extended-pascal} (fjf193@{,a,b@}.pas)
@item 19980715: empty string constants don't work (fjf192.pas)
@item 19980715: superfluous warning when automatically adding the #0 terminator to const strings (fjf190.pas)
@item 19980630: System: The declaration @samp{Integer = Integer (16)} should come before @samp{pInteger = ^Integer}, and similarly for other declarations
@item 19980630: System: remove built-in procedures Seek and RunError
@item 19980629: an object type cannot be called @samp{Time} <359458B1.9EC44A39@@ujf-grenoble.fr>
@item 19980629: superfluous warnings @samp{no previous prototype for __init_unitname} in Pascal parts of the RTS when making GPC
@item 19980629: gpc does not return an error status after a used unit does not exist (neither as source nor precompiled) or when auto-making a unit failed
@item 19980629: fixed size strings are not accepted for const string parameters (fixstr1.pas)
@item 19980629: superfluous warnings when initializing CStrings with a string constant and when assigning a string to a CString (fjf176.pas)
@item 19980611: writing to files via @samp{filevar^} doesn't always work (fjf173.pas)
@item 19980531: allow resetting a file that was opened with rewrite, don't close it temporarily <199710081754.KAA17185@@gnarly.swdc.stratus.com>
@item 19980523: EMX (dos?,os/2!): randomize doesn't work
@item 19980521: automake doesn't work on djgpp in gpc980401 <352539F3.92DE9585@@ujf-grenoble.fr>
@item 19980520: strings are passed to Insert and Delete by value rather than by reference after the declaration of a procedure with a value string parameter (fjf166.pas)
@item 19980520: name space conflict with strcmp and other functions (chief24.pas)
@item 19980520: System: set ExitProc to nil before calling
@item 19980520: System: remove built-in procedures fillchar, move, assign, paramcount, paramstr, insert, delete, pos, copy, str, val, int, frac, binfile stuff
@item 19980520: GPCTypes: type declarations (esp. string=bpstring) should rather be in system
@item 19980520: GPCTypes: use the modern integer type declarations; Integer,Word 16 bit;comp 64 bit with _Borland_16_Bit_
@item 19980520: Dos: include a dummy @samp{SwapVectors} procedure
@item 19980512: don't pre-read the buffer in typed files after read (fjf104.pas)
@item 19980512: @samp{Seek} and @samp{SeekRead} etc. do not yet work in all situations (fjf95b.pas)
@item 19980416: non-text files opened with reset are not writable (fjf157.pas)
@item 19980416: position for writing into a file opened with reset is wrong by one record (fjf157.pas,fjf158.pas,fjf159.pas,fjf160.pas)
@item 19980410: @samp{EOF} doesn't work with untyped files in djgpp (tc19980324)
@item 19980410: Dos line endings are not handled correctly in @samp{ReadLn}
@item 19980405: reading chars from text files doesn't work (fjf131.pas) (tmp)
@item 19980405: @samp{--borland-pascal}: superfluous warnings @samp{compiler directives @dots{} incompatible} for @samp{@{$define@}}, @samp{@{$if[n]def@}}, @samp{@{$b+/-@}}, @samp{@{$x+/-@}}
@item 19980405: make parameter to @samp{GetFile} @samp{const}, not @samp{var}
@item 19980405: read/write don't work with a text file as the only argument (fjf132.pas)
@item 19980405: randomized automake (fh19971015)
@item 19980405: chars are not accepted for const string parameters (chief22.pas)
@item 19980405: @samp{xor} doesn't work with booleans (fjf154.pas)
@item 19980405: const parameters of undiscriminated schema type don't work (fjf144.pas)
@item 19980405: don't accept object methods that were not declared with the object type (fjf143.pas)
@item 19980405: GPC barfs on type checking with Boolean values in @samp{case} statements <199801171504.QAA13384@@agnes.dida.physik.uni-essen.de>
@item 19980405: Nested packed conformant arrays do not yet work in all cases <199801171504.QAA13384@@agnes.dida.physik.uni-essen.de>
@item 19980405: Inside @samp{New}, all methods of an object become visible and may cause name clashes <199801171504.QAA13384@@agnes.dida.physik.uni-essen.de>
@item 19980405: string value parameters don't work (fjf125.pas), <199802022303.SAA20015@@mint.mint.net>
@item 19980405: pack and unpack don't work with conformant arrays
@item 19980405: checking of string var parameters is not strict enough (fh19971213:fjf123.pas)
@item 19980405: check for division by zero in constants at compile time (fh19971201:fjf121.pas)
@item 19980405: missing type checking of different integer types in var parameters (fh19971130:fjf109.pas)
@item 19980405: variable type casting of @samp{^Integer} into @samp{Pointer} for passing as var parameter doesn't work (fh19971130:fjf108.pas)
@item 19980405: GPC crashes when writing an array of char to a file of char <199711262349.SAA17009@@mint.mint.net> (kevin3.pas)
@item 19980405: type casts of integer constants to @samp{[Long]Real} don't work (fh19971124) (fjf113.pas)
@item 19980405: don't allow @samp{Dec(Length(S), Count)} (fjf117.pas), @samp{S[0]} (fjf116.pas) <199711181231.NAA14069@@helena.mi.uni-erlangen.de> (2*fh19971124)
@item 19980405: produce an error instead of warning for constants out of range (fh19971124) (fjf103.pas)
@item 19980405: EMX: @samp{Extend} doesn't work <199803090440.XAA08386@@mint.mint.net>
@item 19980405: @samp{Read[ln]}: make INT_READ_HEX_MASK the default in @samp{--borland-pascal}; @samp{Write[ln]}: REAL_CAPITAL_EXP_MASK (capexp.pas), make it the default in @samp{--borland-pascal}
@item 19980401: fatal signal 11 with assignment to function method return value with a local type declaration (fjf142.pas)
@item 19980220: @samp{ReadStr} causes an error when reading strings and source is empty
@item 19980215: @samp{Seek} doesn't work with block devices
@item 19980215: @samp{Seek} doesn't work with untyped files
@item 19980209: treat nil CStrings as empty in write
@item 19980120: @samp{Overlay} is not a reserved word in BP
@item 19980113: bit fields don't work in read (bitfields.pas)
@item 19980112: @samp{Int} and @samp{Frac} don't work on constants <199801091201.HAA06756@@mint.mint.net> (fjf74.pas) (tmp)
@item 19980106: when reading strings from text files, the capacity is too big by 1 (fjf133.pas)
@item 19971230: read doesn't work with packed arrays of char <199712300500.AAA30736@@mint.mint.net>
@item 19971229: don't allow @samp{4 .. 1} <199711270257.VAA06393@@mint.mint.net> (subrw2.pas)
@item 19971229: too strict type checking with conformant arrays of char (confarr4.pas)
@item 19971229: too strict type checking in @samp{case} statement with chars (chars2.pas)
@item 19971216: don't pre-read the buffer in files (fjf120.pas) <199712051906.UAA00483@@agnes.dida.physik.uni-essen.de>
@item 19971215: use @samp{LongReal} for long real constants (fh19971105) (fjf77.pas)
@item 19971215: file and string variables declared in the statement part are not initialized (fh19971130:fjf106.pas,fjf107.pas)
@item 19971215: too strict type checking with Seek (kevin4.pas)
@item 19971215: segfault with for loop in init code of a unit (bpcompat1.0:system.pas),(fh19971005) (maur1.pas)
@item 19971130: move whole words and take care of alignment when necessary in MoveLeft, MoveRight (moves2.pas) (moves3.pas)
@item 19971130: @samp{Seek} to elements just written doesn't work (fh19971130:fjf110.pas) (tmp)
@item 19971130: remove @samp{Bound_objects} and @samp{Bound_free_list} <199710151621.SAA02929@@helena.mi.uni-erlangen.de> (ciriaco1.pas)
@item 19971121: give a warning for @samp{SizeOf (constant)}
@item 19971121: @samp{sizeof(1+1)=4}; @samp{sizeof(2)=8}; types of constants (fh19971113:fjf92.pas)
@item 19971121: LongInt constants for varargs parameters are passed as integers (fjf56.pas,fjf92.pas)
@item 19971121: sizes of [packed] subranges (fjf86.pas,fjf87.pas)
@item 19971121: detect integer constant overflows (fh19971113:fjf76.pas,fjf81.pas,fjf82.pas,fjf83.pas)
@item 19971121: make real numbers assignment compatible with complex numbers <97101711354779@@petrella.cfilm.ba.cnr.it> (pg19971113)
@item 19971121: allow sizeof(discriminated schema type) (fjf99.pas); don't allow sizeof(undiscriminated schema type) (2*fh19971115) (fjf98.pas)
@item 19971121: @samp{Seek} bug (2*fh19971113) (fh19971113) (fjf94.pas,fjf95.pas) (tmp); SeekRead bug (seekrd.pas)
@item 19971121: @samp{array[boolean] of String(2000)} doesn't work (fh19971113) (fjf96.pas) (tmp)
@item 19971121: local inline functions after var declaration aren't parsed correctly (fh19971013) (fjf75.pas)
@item 19971121: @samp{const procvar = proc} (fh19971113:fjf90.pas)
@item 19971121: check string var parameters for matching capacity (fh19971113:fjf91.pas)
@item 19971121: accept @samp{else}/@samp{otherwise} in a @samp{case} statement without preceding @samp{;} (fh19971112) (fjf80.pas)
@item 19971121: @samp{else}/@samp{otherwise} bug in @samp{case} (multiple statements); don't allow a colon before it <199710061122.HAA26981@@mint.mint.net>, <Pine.OSF.3.96.971007133527.1198C-100000@@capella.hut.fi>
@item 19971121: wrong error messages for Insert (2*fh19971109) (fjf93.pas) (tmp)
@item 19971121: pointer addition: allow @samp{+}/@samp{-} and @samp{Succ}/@samp{Pred}; bug: adds @samp{n*Sqr(SizeOf(@dots{}))} instead of @samp{n*SizeOf(@dots{})} (fh19971113:fjf72.pas)
@item 19971121: don't allow reading of (non-typed) constants (error, not only warning) (fh19970928) (fjf45.pas)
@item 19971121: segfault with assembler code using a record component in a procedure (fh19971015) (fjf73.pas)
@item 19971121: wrong error message for invalid record components <199710152102.XAA04800@@helena.mi.uni-erlangen.de> (fjf71.pas)
@item 19971116: accessing a packed array in a variant record does not work correctly <199711161700.SAA09857@@agnes.dida.physik.uni-essen.de>
@item 19971116: capacity is not stored in a string in a variant record <199711161700.SAA09857@@agnes.dida.physik.uni-essen.de>
@item 19971113: write blanks before @samp{NaN} (pg19971113) (tmp)
@item 19971112: @samp{Str} in @samp{--borland-pascal}: only a numeric argument (strbool.pas)
@item 19971112: bug with @samp{goto} in a unit <3.0.2.32.19971005235702.006a032@@icenet.com.au>
@item 19971112: array schema types of text files don't work (fh19971016) (fjf64.pas)
@item 19971112: don't allow schema object types (fh19971016) (fjf65.pas)
@item 19971112: don't allow the same identifier for schema type discriminator and a field of the schema (fh19971016) (fjf66.pas)
@item 19971112: fatal error with schema type referring to another schema type (fh19971016) (fjf67.pas)
@item 19971112: Pointers to string constants don't work (fh19971016) (fjf68.pas)
@item 19971112: bug with multidimensional conformant arrays <199710152102.XAA04800@@helena.mi.uni-erlangen.de> (fjf69.pas)
@item 19971112: don't allow arrays with negative size (fh19970928) (fjf44.pas)
@item 19971112: @samp{var procvar value proc}: last program in <199707022313.BAA08656@@helena.mi.uni-erlangen.de>,(fh19971003)
@item 19971112: segfault with @samp{SqRt} in constant declaration in a unit (fh19971111) (fjf78.pas) (tmp)
@item 19971112: procedure in a unit accessing an array passed by reference segfaults (fh19971111) (fjf79.pas) (tmp)
@item 19971112: string overflows <6dRwLb2VlJB@@rufus.central.de> <3258461722101997/A08869/HDC5/11BAB46E3A00*@@MHS> (fjf40a.pas) (fh19971013)
@item 19971112: SubStr/Copy bug (fh19971013)
@item 19971112: sizes of [packed] subranges (fjf85.pas,fjf88.pas)
@item 19971111: bug with Rewrite,Reset with filename as second parameter <1948441422101997/A07437/HDC5/11BAB3AC2F00*@@MHS>
@item 19971110: @samp{prior parameter's size depends on @dots{}} bug <80256546.003DB078.00@@buffer1.quantel.com>
@item 19971110: unknown identifiers in module implementations <Pine.BSI.3.96.971108223417.5629A-100000@@malasada.lava.net>
@item 19971106: string length check is off by 1 char (fh19971105)
@item 19971106: read and write without parameters are not accepted (fh19970928) (fjf43.pas)
@item 19971106: warn about assigning strings to chars (fh19971008)
@item 19971106: type checking in a case statement (fh19971008) (fjf58.pas)
@item 19971106: superfluous warning after reading in the return value of a function (fh19971003)
@item 19971106: @samp{x absolute procvar}: second to last program in <199707022313.BAA08656@@helena.mi.uni-erlangen.de>,(fh19971003) (fjf48.pas)
@item 19971102: @samp{Write (LongRealValue)} doesn't work with very big or small or unnormal numbers (2*fh19971105)
@item 19971101: problems with resetting an already open file <m0xIyyF-0006OkC@@bockermann.ping.de>
@item 19971101: division of LongReals doesn't use full precision
@item 19971101: segfault with wrong program (undeclared array bound) (fh19971010)
@item 19971101: accept strings like @samp{#48#49} <6dRwLb2VlJB@@rufus.central.de>, <SIMEON.9710101739.A@@muahost.cc.keele.ac.uk>, <199710102323.BAA15175@@helena.mi.uni-erlangen.de>
@item 19971101: sometimes @samp{*.gpc} files are not removed (fh19971015)
@item 19971101: give a warning for an assignment (or parameter passing) of a string to a char
@item 19971101: integer function result can't be assigned to a cardinal <199710282015.VAA17667@@helena.mi.uni-erlangen.de> (kevin1.pas)
@item 19971022: uses in implementation part of a unit; circular unit references <7420001522101997/A07601/HDC5/11BAB3C01400*@@MHS>
@item 19971013: @samp{Dispose (nil)} causes a segfault (fjf63.pas)
@item 19971001: @samp{type x=packed record a,b:packed 1..6 end}: SizeOf (x) = 8 (fjf31.pas) <199706271232.OAA15639@@helena.mi.uni-erlangen.de>
@item 19971001: objects bug <SIMEON.9704041456.A@@muahost.cc.keele.ac.uk>
@item 19971001: pointers to fields of packed arrays/records <199705010212.EAA29018@@helena.mi.uni-erlangen.de> (3 items) (fjf55.pas)
@item 19971001: bug with redefined operator <6ZV6gbuMRMB@@p-wendt.chateau.line.org> (chris1.pas)
@item 19971001: minor bug <199708111750.AA05985@@hoover.gilbarco.com> (rphil5.pas)
@item 19971001: exported type bug <1.5.4.16.19970613155920.32b721e4@@icenet.com.au>
@item 19971001: the set code generated in the Alpha causes runtime errors in the generated code
@item 19971001: put global variables into the data segment, not on the stack <199707261050.MAA21734@@agnes.dida.physik.uni-essen.de>
@item 19971001: bug with call of @samp{Sqr}/@samp{Abs}/@samp{Round}/@dots{} in an expression as a parameter <6dNsBq9VlJB@@rufus.central.de>
@item 19971001: GPC doesn't recognize equal types in connection with two units <2754032017091997/A08645/HDC5/11B98D033600*@@MHS>
@end itemize

@node Implemented Features
@subsection Features that have been implemented

This section lists the new features implemented since 1st Nov 1997,
together with the date (YYYYMMDD) on which they were implemented.

After the release of GPC 2.1, this section will be cleared, and the
features implemented after that release will either be listed in a
new section here or directly in the @dfn{news}.

@itemize @bullet
@item 20020424: new procedures @samp{Initialize}, @samp{Finalize} (fjf659*.pas)
@item 20020423: GMP: also supports GMP library version 4 now
@item 20020407: @samp{asmname} for programs, units and module interfaces (fjf656*.pas)
@item 20020306: new function @samp{CStringStrError}
@item 20020225: new field @samp{Parent} in @samp{PObjectType}; new operators @samp{is} and @samp{as} (fjf639*.pas)
@item 20020224: abstract methods and object types (fjf637*.pas); new options @samp{-W[no-]implicit-abstract}, @samp{-W[no-]inherited-abstract}
@item 20020224: new field @samp{Name} in @samp{PObjectType}, containing a pointer to the object type's name (fjf636*.pas)
@item 20020224: new built-in type @samp{PObjectType} with fields @samp{Size} and @samp{NegatedSize}, returned by @samp{TypeOf} and required by @samp{SetType} (fjf636*.pas)
@item 20020216: new function @samp{FormatString}, new variable @samp{FormatStringTransformPtr} (fjf629*.pas)
@item 20020203: additional make targets @samp{pascal.install-with-gcc}, @samp{pascal.bindist-with-gcc}
@item 20020125: new function @samp{Ln1Plus} (fjf602.pas)
@item 20020103: (start of) translation of the manual into Croatian
@item 20011221: BP compatible @samp{Graph} unit (in @samp{GRX} package)
@item 20011220: Intl: new unit
@item 20011213: new function @samp{LTrim}
@item 20011201: before adding @samp{#0} when assigning/passing string as CStrings, check if there is a @samp{#0} already, to avoid faults if the memory is read-only (fjf265.pas, fjf574a.pas)
@item 20011111: new options @samp{-W[no-]semicolon} (warn about a semicolon after @samp{then}, @samp{else} or @samp{do}) (fjf562*.pas)
@item 20011108: changed the syntax for computed @samp{goto}s from @samp{goto *Ptr} to @samp{goto (Ptr)} (only half as ugly:@minus{}) (drf4.pas)
@item 20011103: new options @samp{--[no-]double-quoted-strings} (fjf546[a-f].pas)
@item 20011102: support @samp{InitProc} (fjf482.pas)
@item 20011023: new options @samp{--[no-]typed-address}, also as compiler directives @samp{@{$[no-]typed-address@}} or @samp{@{$T+@}}/@samp{@{$T-@}} (fjf540[a-h].pas)
@item 20011023: @samp{asmname} and @samp{uses @dots{} in} now allow concatenated strings (fjf539[ab].pas)
@item 20011023: new @samp{public} and @samp{private} directives for interfaces (fjf538[ab].pas)
@item 20011023: new options @samp{--big-endian}, @samp{--little-endian}, @samp{--print-needed-options} for targets whose endianness can vary
@item 20011022: make @samp{@{$gpc-main@}} work in units (fjf545.pas)
@item 20011018: new predefined symbol @samp{__GPC_VERSION__}
@item 20011018: 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 20011016: new parameters @samp{TimeZone}, @samp{DST}, @samp{TZName1}, @samp{TZName2} to @samp{UnixTimeToTime}; new fields @samp{TimeZone}, @samp{DST}, @samp{TZName1}, @samp{TZName2} in @samp{TimeStamp}
@item 20011007: StringUtils: new procedure @samp{StrHashTableUsage}
@item 20010816: StringUtils: new function @samp{ShellTokenizeString}
@item 20010713: new option @samp{-x Preprocessed-Pascal} or @samp{--language=Preprocessed-Pascal} (fjf519*.pas)
@item 20010704: optimize string assignments
@item 20010704: optimize (non-padding) comparisons with and assignment of the constant empty string
@item 20010704: warn about some string comparisons and @samp{in} tests that are always @samp{True} or always @samp{False}
@item 20010614: ParserDemo: add support for @samp{cot} and angle degree notation
@item 20010604: allow @samp{Delete} to be called with two or three arguments (fjf509b.pas)
@item 20010531: CRT: new key codes @samp{kbShCtrlIns}, @samp{kbShCtrlDel}
@item 20010529: new option @samp{--init-modules} (ian3.pas, ian5[ab].pas) <01051815483106.01126@@ida>
@item 20010524: new variable @samp{FakeHighLetters}
@item 20010524: StringUtils: new routines @samp{ShellQuoteString}, @samp{AllocateTPStrings}, @samp{ClearTPStrings}, @samp{TokenizeString}
@item 20010506: @samp{InOutResString} and @samp{InOutResCErrorString} are now @samp{PString}s rather than @samp{CString}s
@item 20010506: new argument @samp{Caller} to the argument @samp{Proc} of @samp{ForEachMarkedBlock}
@item 20010503: new options @samp{--[no-]read-base-specifier}, @samp{--[no-]read-hex}, @samp{--[no-]read-white-space}
@item 20010502: new field @samp{Links} in @samp{BindingType}
@item 20010501: DosUnix: new functions @samp{OEM2Latin1} and @samp{Latin12OEM}
@item 20010430: @samp{GetTerminalName} now returns a string rather than a @samp{CString}
@item 20010421: make some lower-level RTS routines available in @samp{gpc.pas}, marked ``mostly for internal use''
@item 20010420: new function @samp{ReadLink}
@item 20010417: moved the @samp{PExecute} code to the @samp{Pipe} unit
@item 20010417: new parameter @samp{CloseFlag} to @samp{AssignHandle}; new field @samp{CloseFlag} in @samp{BindingType}
@item 20010415: new function IsTerminal
@item 20010412: many error messages now include libc's error message for a more accurate description
@item 20010412: new procedure RuntimeErrorErrNo; new variable InOutResCErrorString; @samp{InOutResStr}: renamed to @samp{InOutResString}, moved to the @samp{GPC} unit from a built-in declaration; new parameter @samp{ErrNoFlag} to @samp{IOError}, @samp{IOErrorInteger}, @samp{IOErrorCString} and @samp{IOErrorFile}
@item 20010409: make GPC build with gcc-2.95.3
@item 20010312: new routines @samp{GetDayOfYear}, @samp{GetSundayWeekOfYear}, @samp{GetMondayWeekOfYear}, @samp{GetISOWeekOfYear}
@item 20010304: new procedure @samp{ChOwn}
@item 20010227: System: new Delphi compatible routines and variables @samp{CompToDouble}, @samp{DoubleToComp}, @samp{AllocMemCount}, @samp{AllocMemSize}, @samp{Assert}, @samp{DefaultAssertErrorProc}, @samp{AssertErrorProc}, @samp{NoErrMsg}
@item 20010227: removed the alternative address operator @samp{&} (@samp{@@} is still there)
@item 20010227: removed the dialect specific behaviour if GPC is invoked as @samp{pc}, @samp{epc}, @samp{bpc}, etc.
@item 20010224: replaced the @samp{ReleaseCount} function by a more general @samp{ForEachMarkedBlock} procedure
@item 20010223: BP compatible @samp{binobj} utility
@item 20010223: System: new conditional @samp{__BP_PARAMSTR_0__}
@item 20010121: Trap: new procedure @samp{TrapReset}
@item 20010110: @samp{uses} and @samp{import} may now occur multiple times in a program, unit/module interface or unit/module implementation, even between declarations
@item 20010108: ParserDemo: add factorial support
@item 20010107: new functions @samp{IsAlpha}, @samp{IsSpace}
@item 20001216: CRT: new functions @samp{AltGrKey}, @samp{ExtraKey}
@item 20001215: new function @samp{GetTempFileNameInDirectory}
@item 20001210: new function @samp{FormatTime}, new constant @samp{InvalidYear}
@item 20001206: new constant @samp{MaskNoStdDir}
@item 20001205: the constant @samp{MonthLength} was replaced by a function of the same name that handles leap years
@item 20001201: new constant @samp{FileMode_Text_Reset_ReadWrite}
@item 20001115: @samp{shl} and @samp{shr} can also be used as procedures now
@item 20001112: new switches @samp{-W[no-]object-directives}
@item 20001106: StringUtils: new routines @samp{AppendStr}, @samp{StrCut}, @samp{Char2Boolean}, @samp{StrSkipSpaces}, @samp{StrReadQuoted}, @samp{StrReadDelimited}, @samp{StrReadWord}, @samp{StrReadConst}, @samp{StrReadComma}, @samp{StrReadInt}, @samp{StrReadReal}, @samp{StrReadBoolean}, @samp{StrReadEnum}
@item 20001017: DisposePPStrings
@item 20001016: @samp{GetIOErrorMessage} now returns a string rather than a @samp{CString}
@item 20001016: RegExType: changed the field @samp{Error} from @samp{CString} to @samp{PString}
@item 20001016: GlobBuffer: replaced fields @samp{Count} and @samp{Result} by @samp{Result} (@samp{PPStrings})
@item 20001015: @samp{GetOptErrorFlag} is now True by default
@item 20001014: StringUtils: new functions StrCount, StrReplace, Char2Digit, QuoteString, UnQuoteString, ExpandTabs, ExpandCEscapeSequences
@item 20001007: many new docdemo programs
@item 20001007: new options @samp{-W[no-]underscore}
@item 20001003: many new docdemo programs
@item 20001001: many new @samp{Reference} entries and new material in the @samp{Programming} chapter in the manual
@item 20000917: added the @samp{Size} field of BindingType again
@item 20000910: don't add a newline on @samp{Extend} to text files that were bound as binary
@item 20000909: @samp{GetOptLong} can now optionally derive the short options from the @samp{LongOptions} array
@item 20000909: @samp{CStringCharPos}, @samp{CStringLastCharPos}: renamed to @samp{CStringChPos} and @samp{CStringLastChPos} to avoid confusion with @samp{CharPos} and @samp{LastCharPos}
@item 20000902: CRT: new procedure CRTSetTerminal
@item 20000828: new procedure FileMove
@item 20000826: new constant DayOfWeekName
@item 20000825: integrated the FAQ into the GPC Manual
@item 20000820: new routines SystemInfo, FileLock, FileUnlock, Alarm
@item 20000819: StringUtils: new unit, implementing a string hash table (further routines to be added)
@item 20000817: CRT: new routines CRTSavePreviousScreen, CRTSavePreviousScreenWorks
@item 20000806: new function GetTerminalName
@item 20000803: new functions UserID, GroupID
@item 20000723: new parameter @samp{AccessTime} to SetFileName
@item 20000716: renamed the file mode constants from @samp{fm@var{foo}} to @samp{fm_@var{foo}}
@item 20000716: new routines MemoryMap, MemoryUnMap
@item 20000626: the default make target for testing GPC is called @samp{pascal.check} (or @samp{check-pascal}) rather than @samp{check-gpc} now; the test must be run in the build directory (not the @samp{p} subdirectory) or in the @samp{test} subdirectory of the source directory now
@item 20000619: @samp{--borland-pascal}: ignore everything after @samp{end.} (also takes care of ``^Z'' characters at the end of Dos text files)
@item 20000613: Dos: special versions of GetCBreak and SetCBreak for MS-Windows
@item 20000612: Dos: new procedures (not only on DJGPP) DosVersion, SetDate, SetTime
@item 20000611: CRT: new procedures @samp{SetScreenSize}, @samp{SetMonochrome}; renamed @samp{IsMonoMode} to @samp{IsMonochrome}
@item 20000610: each of the parameters @samp{Dir}, @samp{Name} and @samp{Ext} to @samp{FSplit} may now be @samp{Null}
@item 20000607: Single RTS command line options are now recognized with @samp{--gpc-rts=@var{option}} as well, and this can be given multiple times
@item 20000607: new procedure ResetGetOpt
@item 20000606: CRT: new functions CtrlKey, AltKey; new constants chCtrlA @dots{} chCtrlZ, kbCtrlA @dots{} kbCtrlZ
@item 20000605: new routines BlockSignal, SignalBlocked
@item 20000605: CRT with ncurses: 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 20000604: Dos: new procedures (not only on DJGPP) GetCBreak, SetCBreak, GetVerify, SetVerify
@item 20000604: new routines SetInputSignals, GetInputSignals
@item 20000531: new demo program @samp{DynamicArrayDemo}
@item 20000530: integrated the interface of all units included with GPC into the GPC Manual; formatted the interfaces, also of gpc.pas, more nicely
@item 20000528: integrated the To-Do list and the list of new GPC features into the GPC Manual
@item 20000528: include the demo programs printed in the GPC Manual (currently 59, but expected to become more) into binary distributions in a directory @file{docdemos}
@item 20000527: restructured the GPC Manual
@item 20000526: in the GPC Manual, 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
@item 20000526: changed the license of most units and the RTS from LGPL + exception to GPL + exception
@item 20000525: ReverseBytes, ConvertFromLittleEndian, ConvertFromBigEndian, ConvertToLittleEndian, ConvertToBigEndian: new parameter @samp{ElementSize}; new demo program @samp{EndianDemo}
@item 20000523: derive the keyword list in the documentation directly from the source
@item 20000521: WinCRT: new unit (identical to CRT)
@item 20000521: CRT: GetScreenSize renamed to ScreenSize (WinCRT compatibility); added some missing WinCRT compatibility stuff
@item 20000519: new function GetMountPoint
@item 20000516: new field Device in BindingType
@item 20000516: BlockReadLittleEndian, BlockReadBigEndian, BlockWriteLittleEndian, BlockWriteBigEndian: new parameter @samp{ElementSize}
@item 20000516: new procedures ReadStringLittleEndian, ReadStringBigEndian, WriteStringLittleEndian, WriteStringBigEndian
@item 20000509: System: new functions Ofs, Seg, Ptr, CSeg, DSeg, SSeg, SPtr and a number of variables (mostly useless and only for BP compatibility)
@item 20000507: new procedure IOErrorFile
@item 20000505: @samp{asmname} in variable and constant declarations must now come after the type; furthermore, @samp{asmname} doesn't imply @samp{external} anymore
@item 20000502: SeekEOF, SeekEOLn
@item 20000421: new function InstallSignalHandler
@item 20000418: recognize files with @samp{.pp} or @samp{.dpr} extension as Pascal sources
@item 20000415: new switch @samp{@{$[no-]debug-statement[=foo]@}} (call a procedure automatically before each statement for debugging)
@item 20000415: RTS command line options are now recognized after @samp{--gpc-rts} instead of @samp{-Grts}
@item 20000415: removed @samp{__cstring__}, @samp{__void__}
@item 20000414: 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 20000412: runtime errors are now printed with their address to help debugging (using addr2line), and the address is stored in ErrorAddr
@item 20000411: new functions ReturnAddress, FrameAddress
@item 20000411: local compiler directives and defines with @samp{@{$local@}} and @samp{@{$endlocal@}} (fjf430*.pas)
@item 20000409: @samp{@{$ifopt@}}
@item 20000409: case-[in]sensitve defines with @{@{$csdefine@}@} and @{@{$cidefine@}@} (or @samp{--csdefine} and @samp{cidefine}); @samp{@{$define@}} (but not @samp{--define}) is now case-insensitive
@item 20000407: make @samp{mod} with negative right operand work like in BP; allow expressions like @samp{-2 * +3}
@item 20000407: @samp{make check} now runs the current test suite rather than the (obsolete and removed) dejagnu tests; the test suite now produces a summary output by default, @samp{make pascal.check-long} (or @samp{check-pascal-long}) produces the long output format as before
@item 20000407: new option @samp{-W[no-]warnings} (enable/disable warnings)
@item 20000407: make single-letter compiler directives BP compatible (@samp{--borland-pascal}: ignore @samp{$F}, @samp{$O} etc., ignore numbers after @samp{$M}); new option @samp{--[no-]stack-checking}, also as compiler directives @samp{@{$[no-]stack-checking@}} or @samp{@{$S+@}}/@samp{@{$S-@}}; replace @samp{@{$P+@}}/@samp{@{$P-@}} by @samp{@{$[no-]pedantic@}} (or @samp{--[no-]pedantic} on the command line); ignore @samp{@{W+@}}/@samp{@{W-@}} in @samp{--borland-pascal} mode
@item 20000406: CRT: new variable CRTAutoInitProc; new procedure CRTNotInitialized
@item 20000405: new switches @samp{--[no-]macros}
@item 20000402: new switches @samp{-W[no-]field-name-problem}
@item 20000402: allow all @samp{-Wfoo} options also as @samp{@{$W foo@}} directives (no more @samp{@{$Wfoo@}} like in the last alpha release!)
@item 20000331: replace @samp{--no-nested-comments} by @samp{--mixed-comments} (and vice versa); new options @samp{--[no-]nested-comments}, @samp{-W[no-]mixed-comments}, @samp{-W[no-]nested-comments} (mixcom*.pas, nest*.pas); allow comments (but not compiler directives) within compiler directives
@item 20000331: make C style char escapes the default for strings enclosed in @samp{""} (like @samp{--char-escapes} used to do), and use @samp{\"} rather than @samp{""} to get a verbatim @samp{"} in them; remove the @samp{--[no-]char-escapes} switch and the @samp{@{$E[+-]@}} compiler directive
@item 20000331: Delphi style @samp{//} comments, new switch @samp{--[no-]delphi-comments} and compiler option @samp{@{$[no-]delphi-comments@}}
@item 20000327: new header gpc-in-c.h for inclusion of GPC code into C programs; new demo program GPC_C_Pas to demonstrate this
@item 20000327: allow @samp{^const} to create a pointer to a constant
@item 20000327: don't expand macros in @samp{--borland-pascal} and @samp{--delphi}
@item 20000327: Dos: added the unportable Dos-only routines under DJGPP if @samp{__BP_UNPORTABLE_ROUTINES__} is defined
@item 20000326: removed @samp{__asmname__}, @samp{__const__}, @samp{__external__}, @samp{__inline__}, @samp{__static__}, @samp{__volatile__}, @samp{__byte__}, @samp{__short__}, @samp{__long__}, @samp{__longlong__}, @samp{__unsigned__}
@item 20000322: cleaned up the lexer; removed some fossils, e.g. @samp{--c-numbers}
@item 20000306: 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 20000221: new types ByteBool, ShortBool, WordBool, MedBool, LongBool, LongestBool, Boolean(n) (fjf395.pas)
@item 20000219: build in @samp{Include}, @samp{Exclude}
@item 20000213: make @samp{nil} also a value of any procedural/functional type (fjf258[a-e].pas)
@item 20000211: new functions @samp{PathExists}, @samp{DataDirectoryName}, new parameter @samp{Prefix} to @samp{ConfigFileName}
@item 20000211: new fields SymLink, TextBinary in BindingType; new procedure AssignBinary; removed variable TextFilesBinary
@item 20000202: new options @samp{--[no-]progress-messages}, @samp{--[no-]progress-bar}
@item 20000202: ignore @samp{@{$L+@}}/@samp{@{$L-@}} directives (for BP compatibility)
@item 20000131: new unit MD5; new demo program MD5Demo
@item 20000124: new unit FileUtils; new demo program FindFilesDemo
@item 20000111: changed the internal file handling from using @samp{FILE *} to integer file handles, to make it more efficient and get rid of some problems; replaced the @samp{CFile} field in @samp{BindingType} by a @samp{Handle} field; replaced the @samp{AssignCFile} procedure by an @samp{AssignHandle} procedure; removed the @samp{GetFile} function (note @samp{FileHandle})
@item 20000111: new function Integer2String
@item 20000106: new functions IsPrintable, CharSet2RegEx
@item 19991217: System: new functions RealToBPReal, BPRealToReal
@item 19991217: new functions IsInfinity, IsNotANumber, SplitReal
@item 19991124: new demo program ProcVarDemo
@item 19991117: new function @samp{LongReal2Str} to work-around the @samp{Work (Real)} problem on the MIPS
@item 19991110: CRT: DJGPP: added support for 40 column modes (requires updated PDCurses library)
@item 19991104: new demo program FExpandDemo
@item 19991103: CRT: changed the define to get an X11 version from XCURSES to X11
@item 19991102: added @samp{Special} field to BindingType
@item 19991101: new function GetShellPath
@item 19991101: new option @samp{--[no-]transparent-file-names} to derive the external file names from the file variable names <199909010105.VAA23844@@kaylor.ncifcrf.gov> (fjf394.pas)
@item 19991025: CRT: new procedures SimulateBlockCursor, SimulateBlockCursorOff
@item 19991023: CRT: don't initialize curses at the beginning of the program, but initialize it automatically when the first CRT routine is called (for BP compatiblity); new procedure CRTInit to explicitly initialize CRT which also sets some defaults (PCCharSet and update level) to more natural (and less BP compatible) values
@item 19991023: CRT: allow any of the parameters to GetWindow to be @samp{Null}
@item 19991014: new procedure ReAlloc; previous ReAlloc function (libc) renamed to CReAlloc; new variable ReAllocPtr
@item 19991014: new functions GetPasswordEntryByName, GetPasswordEntryByUID, GetPasswordEntries; make ExpandEnvironment recognize @samp{~user}
@item 19991006: RegEx: support for converting subexpression references to upper/lower case while replacing them with @samp{\u7}/@samp{\l7}
@item 19990924: new functions MemCompCase, StrEqualCase, PosCase, LastPosCase, PosFromCase, LastPosTillCase, IsPrefixCase, IsSuffixCase, ExecuteNoTerminal
@item 19990922: System: new procedure SetTextBuf for BP compatibility
@item 19990905: before building the RTS, make sure that the compiler version used is current, to prevent strange bugs when building with an older version <17698.990820@@mg.dp.ua>
@item 19990805: new procedure SeedRandom; new variable SeedRandomPtr; automatically initialize the random number generator like Randomize does at the first call to Random unless SeedRandom was called before (only for the default RNG; not the BP compatible one in the System unit)
@item 19990802: new procedure RestoreTerminalClearCRT
@item 19990801: CRT: added support for panels (overlapping windows); new routines GetActivePanel, PanelNew, PanelDelete, PanelBindToBackground, PanelIsBoundToBackground, PanelActivate, PanelHide, PanelShow, PanelHidden, PanelTop, PanelBottom, PanelMoveAbove, PanelMoveBelow, PanelAbove, PanelBelow, IgnoreCursor
@item 19990728: new demo program ArraySliceDemo
@item 19990727: CRT: replaced the variables PCCharSet and UseControlChars by routines SetPCCharSet, GetPCCharSet, SetControlChars, GetControlChars
@item 19990727: GMP: new procedures mpf_exp, mpf_ln, mpf_pow, mpf_arctan, mpf_pi
@item 19990726: implemented environment variable management in Pascal, so that it's independent of libc differences (e.g. the presence or not of @samp{environ}); new routines UnSetEnv, GetCEnvironment; removed PutEnv and CSystem functions (obsoleted by SetEnv and Execute); turned the Environment variable into a schema which contains the environment variables as CStrings; allow empty and case-sensitive environment variables within GPC programs even under Dos
@item 19990723: make @samp{@{$gnu-pascal@}} completely equivalent to @samp{--gnu-pascal}; add @samp{@{$gnu-pascal@}} to all included units so they can also be compiled with @samp{--automake} when @samp{--foo-pascal} options are given (dialec[1-6].pas)
@item 19990723: new options @samp{-W[no-]typed-const} and @samp{-W[no-]near-far}
@item 19990720: new functions SetTerminalProcessGroup, GetTerminalProcessGroup
@item 19990719: new demo program RealPower
@item 19990709: new constants for signals; new routines Kill, WaitPID, SetProcessGroup (formerly in the Pipe unit)
@item 19990622: new function FileHandle; un-built-in GetFile -- it is now in the GPC unit, but obsolete
@item 19990622: new routines AllocateBigMem, DisposeBigMem, MoveToBigMem, MoveFromBigMem, MapBigMem for uniform access to big memory blocks for GPC and BP; new demo program BigMemDemo
@item 19990617: integrated the @samp{PExecute} unit into the RTS
@item 19990612: @samp{register} directive
@item 19990609: integrated the GetOpt unit into the RTS (because the RTS uses it, anyway); removed the Internal unit from the installation (because using it from programs is really not recommendable)
@item 19990603: new procedure SetEnv (makes obsolete libc's PutEnv)
@item 19990601: included a @samp{GPC} unit for BP to provide some GPC compatibility to BP programs
@item 19990527: new demo program TrapDemo
@item 19990527: new units HeapMon, Trap
@item 19990527: new function ReleaseCount
@item 19990526: new routines RegisterRestoreTerminal, UnregisterRestoreTerminal, RestoreTerminal
@item 19990502: new routine SetProcessGroup
@item 19990424: new function RegExPosFrom
@item 19990403: new constant FileNamesCaseSensitive, new function FileNameLoCase
@item 19990327: added 20 demo programs
@item 19990325: new function GetMicroSecondTime
@item 19990324: 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
@item 19990308: @samp{--no-default-paths}
@item 19990307: new functions IOSelect, IOSelectRead
@item 19990225: @samp{--no-@{unit,object@}-path}
@item 19990225: @samp{--[no-]io-checking} and @samp{@{$[no-]io-checking@}} as synonyms for @samp{@{$I+-@}}
@item 19990219: recognize (but currently ignore) published/public/protected/private
@item 19990218: renamed DataReady to CanRead
@item 19990213: change warnings of the form @samp{Foo-Pascal does not have foobars} into @samp{foobars are @{GPC-specific|a GPC extension@}} and add spaces before all but the first line of multi-line messages
@item 19990211: new procedures Sleep, SleepMicroSeconds, GetCPUTime
@item 19990211: CRT: new procedures CRTUpdate, CRTRedraw, SetScroll, CRTSetCursesMode
@item 19990209: renamed the __BP_INTEGERS__ (System unit) and _Borland_16_Bit_ (Dos and WinDos units) defines to __BP_TYPE_SIZES__
@item 19990209: Pipe: new parameter @samp{Process} to Pipe; new functions WaitPipeProcess, StrSignal, Kill, WaitPID; new constants (actually variables) for the signals
@item 19990205: new routines HasWildCardsOrBraces, BraceExpand, MultiFileNameMatch, GlobOn, MultiGlob, MultiGlobOn, QuoteFileName, UnQuoteFileName, FExpandQuoted, ForceAddDirSeparator, FindNonQuotedChar, FindNonQuotedStr, NameExtFromPath; new parameter @samp{Quoted} to RelativePath
@item 19990202: new declarations DirRoot, QuotingCharacter, EnvVarChars, EnvVarCharsFirst, WildCardChars, FileNameSpecialChars, ShellExecCommand
@item 19990127: new functions IsUpCase, IsLoCase, IsAlphaNum, IsAlphaNumUnderscore
@item 19990127: CRT: catch some signals and return pseudo function keys for them if CheckBreak is False
@item 19990125: added @samp{User}, @samp{Group}, @samp{Mode} and @samp{INode} fields to BindingType; new procedure ChMod
@item 19990125: CRT: react to screen size changes by external events and return a pseudo function key
@item 19990115: built in @samp{Null} (= @samp{nil^})
@item 19990115: Pipe unit (also for Dos!)
@item 19990115: new function DataReady to check if data can be read from a file without blocking
@item 19990110: integrated the @samp{PExecute} unit into GPC
@item 19990102: pass all given options to automake compilations too (without having to repeat them with @samp{--automake="foo"}), remove @samp{--automake="foo"}
@item 19990101: @samp{--[no-]autolink} (default is autolink)
@item 19981228: @samp{--[no-]executable-path}, @samp{--[no-]unit-destination-path}, @samp{--[no-]object-destination-path}
@item 19981222: implemented buffering to speed up reading from files
@item 19981213: integrated the following units into GPC: @samp{GetOpt}, @samp{RegEx}, @samp{GMP}, @samp{Ports}
@item 19981212: new string routines: SetString, StringOfChar (Delphi compatibility)
@item 19981212: integrated the @samp{DosUnix} unit into GPC
@item 19981210: integrated the @samp{GPCUtil} unit into GPC
@item 19981208: integrated the following units into GPC: @samp{System}, @samp{Turbo3}
@item 19981208: remove @{$W-@} as much as possible in the units
@item 19981208: built in Addr, Assigned
@item 19981207: integrated the following units into GPC: @samp{CRT}, @samp{Dos}, @samp{Overlay}, @samp{Printer}, @samp{Strings}, @samp{WinDos}
@item 19981206: @samp{--unit-path} (upath.pas), @samp{--object-path} (opath.pas); don't allow them in a source file
@item 19981206: allow @samp{Copy} with 2 arguments (fjf40e.pas)
@item 19981205: @samp{FileName} function with a Pascal string return value
@item 19981205: interpret @samp{@{$L foo@}} as @samp{-lfoo}; accept files with @samp{.so} extension in @samp{@{$L@}}
@item 19981203: pre-define @samp{__OS_DOS__} on Dos-like systems
@item 19981202: @samp{--uses=foo(bar.pas),bar,baz(../baz.pas)} (fjf101b.pas)
@item 19981202: make @samp{=} and so on for strings work as exact comparisons (@samp{--borland-pascal}; @samp{--[no-]exact-compare-strings}) (fjf38@{,[a-f]@}.pas)
@item 19981201: pre-define __BORLAND_PASCAL__ etc. depending on the dialect options and __GNU_PASCAL__ if no dialect option was given (dialdef@{,[1-6]@}.pas)
@item 19981108: new time routines UnixTimeToTimeStamp and TimeStampToUnixTime
@item 19981108: added @samp{AccessTime}, @samp{ModificationTime} and @samp{ChangeTime} fields to BindingType
@item 19981021: added a @samp{Force} field to BindingType
@item 19980921: procedures to convert the endianness of single variables (ReverseBytes, Convert@{From,To@}@{Little,Big@}Endian) and to do this while reading/writing them from/to untyped files (Block@{Read,Write@}@{Little,Big@}Endian)
@item 19980919: MaxLongInt
@item 19980918: a number of new CString routines, including almost all (that weren't already there) of BP's strings unit
@item 19980918: WinDos: portable BP compatible unit with most of the routines (those that can possibly be implemented in a portable way)
@item 19980917: CRT: some win (TP 5), wincrt and tpcrt compatibility routines and some extensions added
@item 19980915: Internal: unit, with the internal RTS declarations from gpc.pas moved into it
@item 19980914: System: remove built-in procedures UpCase, LoCase, ChDir, MkDir, RmDir, FileSize, AddNullTerminator, InOutRes, IOResult, FileMode
@item 19980914: System: GetDir, Lo, Hi, Swap, MemAvail, MaxAvail, HeapError, HeapErrorNilReturn
@item 19980912: declared CGetMem, CFreeMem, ReAlloc
@item 19980909: build in GetMemPtr, FreeMemPtr
@item 19980830: allow @samp{RunError} without arguments (error code -1)
@item 19980830: @samp{--no-automake}, @samp{--no-autobuild}, @samp{--no-autolink} (each of them disables all of @samp{--autolink}, @samp{--automake} and @samp{--autobuild})
@item 19980822: internally remove the @samp{type} parameter to _p_bind()
@item 19980818: build in GPC_StatFS
@item 19980724: procedures UpCaseString, LoCaseString, functions UpCaseStr, LoCaseStr
@item 19980722: longest@{int,real@}-field-width (fieldw.pas)
@item 19980722: allow collecting options in several @samp{--automake} oder @samp{--autobuild} options
@item 19980719: build in ExitCode, ErrorAddr
@item 19980719: Dos: portable BP compatible unit with most of the routines (those that can possibly be implemented in a portable way)
@item 19980717: added a @samp{DayOfWeek} field to TimeStamp and a DayOfWeek function
@item 19980715: define __GPC_RELEASE__
@item 19980702: new CString functions: StrLen, StrEnd, StrScan, StrRScan, StrDup, StrCmp, StrCaseCmp
@item 19980701: new file name declarations and routines: PathSeparator, DirSeparator, DirSeparators, ExtSeparator, DirSelf, DirParent, NullDevice, TTYDevice, ConsoleDevice, GetCurrentDirectory, GetTempDirectory, GetTempFileName, GetTempFileName_CString, Slash2OSDirSeparator, OSDirSeparator2Slash, Slash2OSDirSeparator_CString, OSDirSeparator2Slash_CString, FileExists, DirectoryExists, FSearch, FSearch_Executable, Expand_Environment, FExpand, FSplit, DirFromPath, NameFromPath, ExtFromPath, OpenDir, ReadDir, CloseDir
@item 19980629: runtime I/O error handling with @{$I+-@}
@item 19980629: build in NewCString, StrPCopy, CString2String (fjf156.pas); String2CString
@item 19980629: build in UpCase, LoCase (locale-dependent, except in @samp{--borland-pascal}, there only 7 bit ASCII) (fjf165a.pas,fjf165b.pas)
@item 19980629: build in High, Low (for ordinal types and arrays)
@item 19980629: build in Random (for LongestCard and LongestReal), Randomize
@item 19980629: build in SizeType, PtrDiffType
@item 19980629: build in Pi <Pine.SGI.3.96.980318113542.2662B-100000@@pugh.bip.bham.ac.uk>
@item 19980629: build in Erase, Rename, ChDir, MkDir, RmDir, FileMode, Flush
@item 19980628: internally remove the unused second parameter of Dispose/FreeMem
@item 19980626: allow mixing of New/GetMem/Dispose/FreeMem with malloc()/free() and with Mark/Release (except free() with Release in some cases)
@item 19980623: Turbo3 unit
@item 19980619: Printer: portable (piping to lpr under Un*x)
@item 19980613: @samp{--gnu-pascal}
@item 19980611: CRT: portable ncurses-based unit
@item 19980604: print error messsages in the form: @samp{a.out: [internal error:] unknown code in @samp{Write} (error #904)}
@item 19980531: when opening a file with a file name, do a binding actually (fjf169.pas)
@item 19980523: added a @samp{MicroSecond} field to TimeStamp
@item 19980520: printer unit for Dos
@item 19980520: @samp{--uses="foo"} (fjf101.pas,fjf101a.pas)
@item 19980511: build in FilePos, FileSize, Truncate, Append
@item 19980511: build in RunError
@item 19980405: accept (but currently ignore) @{$ifopt@}
@item 19980405: When passing a long string value to a PChar parameter, automatically add a #0 terminator
@item 19980405: allow @samp{type y(b:integer)=array[1..b] of integer; x=y;} (fjf115.pas)
@item 19980405: Fail (FreeMem, when constructor called by New)
@item 19980405: rename AssignLength and AssignType to SetLength and SetType, resp., for Delphi compatibility
@item 19980405: warn about absolute declarations and type casts that can cause alignment problems
@item 19980405: @samp{--autobuild}
@item 19980129: predefine symbols for endianness
@item 19980114: recognize @samp{--[no-]truncate-strings} in WriteStr (fjf59.pas,truncstr.pas)
@item 19980114: build in untyped files and BlockRead, BlockWrite (blockop.pas)
@item 19971230: build in Int, Frac (fjf129.pas)
@item 19971215: build in PtrInt, PtrCard, PtrWord
@item 19971130: allow opening files to @samp{''} or @samp{'-'} for stdin/stdout
@item 19971121: different versions of math functions for LongReal
@item 19971121: allow @samp{with} for schema types <199710152102.XAA04800@@helena.mi.uni-erlangen.de> (fjf70.pas)
@item 19971121: allow @samp{(var) := expr} (fjf100.pas)
@item 19971112: build in ParamCount, ParamStr (params.pas)
@item 19971112: initialize arrays of text in a loop rather than individually (fh19971016) (fjf64.pas)
@item 19971112: build in Seek
@item 19971112: build in FillChar, Move (moving whole words), MoveLeft, MoveRight (moving single bytes) (moves.pas)
@item 19971106: build in Delete (fjf62.pas) (fh19971008), Pos (delinspos.pas), Copy
@item 19971106: AssignLength (alength.pas)
@item 19971101: make the char array in a String @samp{[1..Capacity+1]} so that there's always space for a #0 terminator
@item 19971101: build in Str and Val; Str in @samp{--borland-pascal}: only one argument
@item 19971101: build in StdErr
@item 19971101: optimize @samp{in} with set constructors
@item 19971101: build in Insert (fjf61.pas)
@end itemize
