@c Copyright (C) 1997-2000 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: 5 Jun 2000 (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://home.pages.de/~GNU-Pascal/,GPC home page}.

This list is part of GNU Pascal.
Copyright (C) 1997-2000 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 the GPC
home page.

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 it 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 where the topic was discussed (usually 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.

@menu
* Urgent::  Things left to do until the next release of GPC
* Bugs::    Other known bugs in GPC
@end menu

@node Urgent
@subsection Things left to do until the next release of GPC

Bugs:

@itemize @bullet
@item 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 enumeration types do not always properly survive transport through two interfaces (russell2.pas, miguel2.pas, daj2.pas)
@item some functions in boolean shortcuts are always called (fjf226[a-\infty].pas)
@item possible stack overflow when using string expressions in a loop (fjf419.pas)
@item GPC sometimes crashes with @samp{-g} <Pine.SGI.4.10.9903231101500.6691-100000@@pugh.bip.bham.ac.uk> (ok?)
@end itemize

Wanted features:

@itemize @bullet
@item make it possible to declare routines as I/O critical
@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; @samp{--library-path} and @samp{--include-path} as synonyms for (multiple) @samp{-L} and @samp{-I} options
@end itemize

@node Bugs
@subsection Other known bugs in GPC

@itemize @bullet
@item methods returning records don't work (chief39.pas)
@item bugs with packed subranges (couper[1-3].pas)
@item @samp{setlimit} is applied when it shouldn't be ((a) variable/constant declarations, (b) @samp{set of ShortCard}, (c) constant sets), fatal range overflows in set constructors (couper8.pas, couper10.pas) <2C4F3FEF.20000809173117.FOO-13A6.frank@@g-n-u.de>
@item string types declared in modules don't always work (daj3.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 don't allow assigning a pointer to a schema to a variable of type pointer to discriminated schema with different discriminant (fjf130.pas)
@item global dynamic variables (john1.pas) and global variables initialized by a function (fjf210b.pas) don't work
@item check for using, incrementing, ... 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 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 type problem with const/protected integer parameters (chief31.pas)
@item bug with const parameters and derived object types (tc19991003)
@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, fjf451*.pas)
@item @samp{prior parameter's size depends on `foo'} error with protected string parameters (daj1.pas)
@item declarations of subranges of enumeration types cause @samp{conflicting types} messages (drf8.pas)
@item file parameters must not automatically be bindable in @samp{--extended-pascal} (fjf193c.pas)
@item automatically close dynamically allocated files on dispose and files declared in a statement block at the end of the statement block (fjf219[a-c].pas); handle variant records correctly <6r9ir5$7v5$1@@nntpd.lkg.dec.com> (fjf219d.pas); close files before gotos out of their scope (fjf219[ef].pas)
@item const real parameters don't work (fjf228.pas)
@item arithmetic expressions don't work as lower array/subrange bounds (fjf248.pas)
@item identifiers declared in a unit that have the same name as some object method are not visible (fjf278.pas, russell2.pas)
@item pointers to objects returned by methods can't be dereferenced (fjf299.pas)
@item integer parameters to built-in routines are not always converted to the right type (fjf349.pas)
@item types declared in a module interface are not visible in the implementation (kevin13.pas)
@item procedural variables are always passed by value <ABcLeYr887@@e00827.vno.lt> (marius1.pas)
@item @samp{inline} and @samp{asmname} don't work together if compiling without optimization (maur3.pas)
@item module bug (mod12.pas)
@item Read, ReadStr and Val for all integer, real, char and string types; [no-]read-range-checking (also for subtypes of char!), [no-]read-base-specifier, [no-]read-white-space (not in Val!) (read?.pas)
@item fixed string comparisons are wrong (takashi1.pas)
@item char fields of packed records don't work in read (tom5.pas)
@item count of parameters to methods in error messages should not include Self <8F990E3D9A6FD1118F3B0000F81EA1D84985CE@@exchsa2.dsto.defence.gov.au>
@item bug on machines with strict alignment requirements <199906021618.MAA06228@@sten27.software.mitel.com>
@item too many parameters to @samp{New} are not checked
@item @samp{MedInt} (and therefore SizeType under DJGPP) is not accepted as the 4th parameter to BlockRead, BlockWrite (fjf252.pas)
@item compilation of interface declarations takes quadratic time
@item installation: bug(s) in GPC's makefiles; Make-lang.in is missing a rule so GPC can't be built without building GCC
@item forward referencing pointers generate debug info that appears as generic pointers; no information of @samp{with} statements is currently given to the debugger; error in debug entries generated for objects <8F990E3D9A6FD1118F3B0000F81EA1D84985D7@@exchsa2.dsto.defence.gov.au>
@item problems with initialising sets to the empty set <onOioOAQz365EwbY@@tcs02.demon.co.uk>
@item Solaris: the preprocessor doesn't understand @samp{defined} (fjf266.pas,fjf238.pas) <19990129132623.21658.qmail@@euler.stams.strath.ac.uk>
@item IRIX: 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 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>
@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; don't require extended syntax for @samp{SetLength}
@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 optimize assignment of and (non-trimming) comparison with a constant empty string
@item general switch @samp{--bp-strings}
@item offer trimming string relations as functions
@item undiscriminated strings -> remove pointers to string constants
@item @samp{WriteStr}-like function
@item unused local variables of string types are not detected
@item wide characters
@item open array/string parameters (@samp{$P}, @samp{$V} in BP; undocumented @samp{OpenString} identifier in BP)
@end itemize

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

@itemize @bullet
@item array/record 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
@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 to compute size of dynamical variables if no bitfields are involved
@end itemize

@node Planned - Files
@subsection Planned features: Files

@itemize @bullet
@item AnyFile parameters and pointers
@item keep files in FDRList while they live, not only while they're open, so _p_fdrdone() can be applied to all of them
@item packed files (EP) ??
@item write: left/center/both(?) justification???; rounding (PXSC) ???
@item BlockRead, BlockWrite: make last parameter internally a function result and allow any integer type to be passed for it for compatibility with 16 bit BP code
@item improve TFDDs (also for typed and untyped files) (OpenProc/CloseProc)
@item read/write operators ???
@item let Assign call _p_initfdr() in @samp{--borland-pascal}
@end itemize

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

@itemize @bullet
@item read Booleans and enum types from files, write enum types to files
@item UCSD Pascal's @samp{Integer[n]} ??? BCD?
@item enum types with specified values ???; Inc, Pred, ... ??
@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 variables of type undiscriminated schema; functions returning undiscriminated schemata (pg19980813.3)
@item record and array values (EP)
@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)
@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
@item @samp{external name}, @samp{asmname}, ...; (-> BP, Delphi) ??, like @samp{$L} (fh19990325.2)
@item modules without implementation ??? (pmod1.pas)
@item @samp{asmname} for units
@item @samp{gpc-main} in GPI files
@item qualified import (mod10.pas)
@item units without initialization code or variables needing initialization should not get a constructor
@item GPI format ??
@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 (fjf445*.pas)
@item published, public, protected, private (scope limited to a unit in @samp{--borland-pascal}, and to the object type normally)
@item @samp{ProcVar := Obj.Method} @{$X+@}
@item VMT link (global, local, new: set to 0 or @@VMT; destructor: reset to 0)
@item checks: @@object<>nil, typeof(object)<>0, size=-negsize; separate switches; function initialized (that does these 3 tests) ???
@item virtual constructors
@item @samp{@var{obj} is @var{class}}, type cast
@item @samp{is_exactly} (instead of @samp{TypeOf (@var{obj}) = TypeOf (@var{class})} ???
@item @samp{@var{class} is @var{class}} (implemented in Pascal with @samp{Parent})
@item @samp{@var{obj} is @var{interface}} (not so easy?) ???
@item abstract methods, object types
@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 interfaces (cf. OOE, Java)
@item object constants???
@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 Variables of type pointer to more than one interface [and class] (also possible!)
@item method overloading ??? ??
@item class libraries (more or less TV compatible?/Free Vision/EFLIB) (streams as interface type?)
@item method pointers (@samp{procedure/function of object}) (-> Delphi) ???
@item declare VMT format in Pascal (only Size, NegSize, Parent, Childs?); <obj>.pVMT ?
@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 in VMT: Parent: pVMT, Child: list of pVMT
@item for abstract classes: nearly empty VMTs (see VMT format)
@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
@end itemize

@node Planned - Misc
@subsection Planned features: Misc

@itemize @bullet
@item don't call procedures functions in error messages <200007230522.BAA05497@@strawberry.ncifcrf.gov>
@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 guarantee full evaluation in @samp{@{$B+@}}, @samp{--borland-pascal mode}
@item libraries (static/shared; DLL) <Pine.HPP.3.96.971110183550.7996B-100000@@tea.geophysik.tu-freiberg.de>
@item smart linking
@item range, 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 warn about assigning the address of a local procedure (variable?) to a global pointer variable (fjf139.pas) or returning it from a function
@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{+=}, ...), 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... (pxsc.zip, /home/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... (??) ???
@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: Initialize, Finalize, Slice, TypeInfo ???, dynamic arrays (tc19991012)
@item output column numbers in error messages ??
@item get the address of a (direct or indirect) caller
@item warn when @samp{and} and @samp{or} are combined without parentheses (-Wparentheses; on by default)
@item store the casing of the first occurrence of a Pascal identifier for error messages etc.
@item assembler blocks should be considered volatile by default ??? (fh19980829.4)
@item BP compatible @samp{Graph} unit
@end itemize

@node Planned - Utilities
@subsection Planned features: Utilities

@itemize @bullet
@item C header to Pascal translator
@item gdb: Pascal types (sets, files, subranges, schemata, strings, ...)
@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 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 `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 include statement (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 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: `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 illegal (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 insert (fjf254.pas)
@item 19990202: DJGPP: CRT: ReadKey returns #10, not #13, for the enter key when CheckBreak is True
@item 19990201: FreeBSD: StatFS in the RTS doesn't compile <003001be4b65$1b0b2d50$0321a8c0@@bmach.nederware.nl>
@item 19990130: ForceExtension doesn't handle empty wanted extensions or directory names with ExtSeparators in them
@item 19990129: RemoveDirSeparator erroneously removes the root directory slash
@item 19990129: CRT with ncurses: Read[ln] returns endless empty lines after the first line entered
@item 19990129: Bind should remove trailing 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 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}, ... 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 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]...} 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 x86) (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@} ... @{$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 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 ... 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 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 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 n*Sqr(SizeOf(...)) instead of n*SizeOf(...) (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 ...} 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 sqr/abs/round/... 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 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 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 `--csdefine' and `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-@}}; new option @samp{--[no-]typed-address}, also as compiler directives @samp{@{$[no-]typed-address@}} or @samp{@{$T+@}}/@samp{@{$T-@}}; 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 `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 Include, 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 LongReal2Str to work-around the @samp{Work (Real)} problem under IRIX
@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 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 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 `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
