This is the announcement of

    GNU Pascal, beta version gpc-19990118

which is now available from

    ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/beta/ .

Binaries for various platforms are available in a subdirectory
`binary/'.  These platforms include:

    i586-pc-linux-gnulibc1 (gcc-2.8.1 and egcs-1.1.1)
    i386-linux-glibc2 (egcs-1.1.1)
    alpha-unknown-linux-gnu
    alphaev56-dec-osf4.0d
    mips-sgi-irix6.2
    sparc-sun-solaris2.6
    i386-pc-djgppv201 (for MS-DOS)
    i386-pc-mingw32 (egcs-1.1.1; for MS-Windows 9x/NT)
    i386-pc-emx0.9d (for MS-DOS and OS/2)

This is intended to be the next-to-last beta release before
the release of GPC 2.1.  If you have some suggestions for
GPC 2.1 that are not yet listed in the GPC To-Do list at
http://agnes.dida.physik.uni-essen.de/~gnu-pascal/todo.html,
please contact us at the GPC mailing list <gpc@hut.fi> without
delay.


About GNU Pascal
================

The GNU Pascal Compiler (GPC) is part of the GNU compiler
family, GNU CC or GCC.  It combines a Pascal front-end with the
proven GNU C back-end for code generation and optimization.
Unlike utilities such as p2c, this is a true compiler, not just
a converter.

This version of GPC corresponds to GCC version 2.8.1 or EGCS 1.1.1.

The purpose of the GNU Pascal project is to produce a Pascal
compiler which:

1) combines the clarity of Pascal with powerful tools suitable
   for real-life programming,

2) supports both the Pascal standard and the Extended Pascal
   standard as defined by ISO, ANSI and IEEE. (ISO 7185:1990,
   ISO/IEC 10206:1991, ANSI/IEEE 770X3.160-1989)

3) supports other Pascal standards (UCSD Pascal, Borland Pascal,
   Pascal-SC) in so far as this serves the goal of clarity and
   usability,

4) can generate code for and run on any computer for which the
   GNU C compiler can generate code and run on.

The current beta release gpc-19990118 implements Standard Pascal
(ISO 7185, level 1), a large subset of Extended Pascal (ISO 10206,
aiming for full compliance), is highly compatible to Borland
Pascal (version 7.0) with some Delphi extensions, and provides a
lot of useful GNU extensions.

For more information about GNU Pascal, see

    http://home.pages.de/~GNU-Pascal/ .


Changes since the previous beta release
=======================================

Units
-----

The main focus in this GPC release is the inclusion of many standard
units. Besides a complete set of BP compatibility units -- except
the Graph unit (which is currently distributed separately due to its
license) and the OOP stuff --, there are some units to make C
functionality available for GPC and some new units.

BP compatibility units:

- CRT: Curses based text screen handling. Compatible to BP's unit,
  even in a lot of minor details like the values of function key
  codes. Includes some routines for compatibility with TP5's `Win'
  unit as well as BP's `WinCrt' and Turbo Power's `TPCrt' units,
  and some extensions.

- Dos: Portable implementation of those routines from BP's unit that
  are useful to most programs.  Those routines that are only meant
  for access to Dos internals and cannot be implemented in a portable
  way, have intentionally been left out.

- Overlay: Dummy replacement for BP's unit, since GPC doesn't need
  overlays.

- Ports: Access routines for the hardware ports on the x86, as a
  partial replacement for BP's `Port' and `PortW' pseudo arrays.

- Printer: Implementation of BP's interface for Dos (using printer
  devices) and Unix systems (using printer utilities). Might need
  porting to mingw32 to use its native printing abilities.

- Strings: Almost empty since most of BP's CString routines have
  been included into GPC's RTS (available by using the `GPC' unit).

- System: Portable implementations for BP's more exotic routines
  which are not built into GPC's RTS (ExitProc, Lo, Hi, Swap,
  GetDir, HeapError, MemAvail, MaxAvail), and on special request (by
  setting some defines), also BP compatible integer type sizes and a
  100% BP compatible random number generator.

- Turbo3: Compatibility unit for BP's TP3 compatibility unit. ;-)

- WinDos: Portable implementation of BP's unit, see the comments
  for the Dos unit.

Other units:

- DosUnix: A unit, intented to be growing when necessary, to
  overcome some differences between Dos and Unix systems. Currently
  features translation of bash style input/output redirections
  (`foo 2>&1') into `redir' calls for DJGPP (`redir -eo foo') and a
  way to read files with Dos CR/LF pairs on any system.

- GetOpt: Comfortable command line option parsing.

- GMP: Interface to the GNU Multiprecision Library to handle
  integer, rational and real numbers of unlimited size/precision.

- GPCUtil: Some utility routines by The Chief, including
  implementations of some routines from Turbo Power's units for BP.

- Internal: Unit which contains declarations for internal RTS
  routines that are not declared in the `GPC' unit. Only meant for
  low-level access by people who know what they're doing.

- PExecute: Executing processes. Overcomes some of the differences
  between Dos and Unix systems.

- Pipe: Start a child process and write to/read from its
  Input/Output/StdErr via pipes. Emulated transparently under Dos as
  far as possible.

- RegEx: Matching and replacing text with regular expressions.

Some of the units come with demo programs to show their usage that
are installed in <prefix>/doc/gpc/demos/ .

A few of the units (in particular: CRT, GMP and RegEx) require C
libraries. The sources of the libraries, sometimes with small
patches when necessary, and binaries for i586-pc-linux-gnulibc1,
i386-pc-go32 and sparc-sun-solaris2 are available from

    ftp://agnes.dida.physik.uni-essen.de/gnu-pascal/libs/ .


Compiler features
-----------------

The new compiler features have concentrated on making it easier to
write and use the units. The AutoMake mechanism is now much more
reliable than it was, doesn't recompile units unnecessarily any
more, and does not require repeating the options, i.e. instead of
writing `--foo --bar --baz --automake="--foo --baz --baz"' one can
now simply write `--foo --bar --baz --automake'.

The following directives, related to units, are now understood:

- --unit-path -- search path(s) (can be used multiple times) for
  units used by a program.

- --object-path -- search paths(s) for object, assembler, C, or
  other external files used by a program.  Defaults to the unit
  path(s).

- --unit-destination-path -- the destination path for units compiled
  by AutoMake.

- --object-destination-path -- the destination path for C, assembler
  or other external files compiled by AutoMake.  Defaults to the
  unit destination path.

- --executable-path -- the destination path for executables compiled.

- --uses=foo(bar.pas),bar,baz(../baz.pas) -- automatically using
  units in a program, optionally specifying a source file name.
  Useful e.g. for maximum BP compatibility to use units like `GPC'
  and `System' without changing the source code.

The unit and object paths default to the directory where the
standard units are installed, i.e.
<prefix>/lib/gcc-lib/<target>/<version>/units/, so these units are
found automatically.

Libraries can now be used by a `{$L foo}' compiler directive, just
like simple object files, and this directive also works in units
(used a lot in the standard units).

The compiler pre-defines `__BORLAND_PASCAL__' etc. depending on the
dialect option used or `__GNU_PASCAL__' by default if no dialect
option was given (besides `__GPC__' as before, regardless of the
dialect used). `__OS_DOS__' is pre-defined on Dos-like systems.


Other declarations
------------------

Some of the following declarations are built into the compiler,
others are declared in the `GPC' unit.

- Memory:

  Addr (B)
  Assigned (B)
  CGetMem
  CFreeMem
  ConvertFromLittleEndian
  ConvertFromBigEndian
  ConvertToLittleEndian
  ConvertToBigEndian
  FreeMemPtr
  GetMemPtr
  Null (D?)
  ReAlloc
  ReverseBytes

- Files and I/O:

  BlockReadLittleEndian
  BlockReadBigEndian
  BlockWriteLittleEndian
  BlockWriteBigEndian
  DataReady
  FileName

  New fields Force, AccessTime, ModificationTime and ChangeTime
  in the BindingType record.

  Text files now use internal buffering to speed up reading and
  writing -- even on operating systems that do good buffering
  themselves. (B ;-)

- Strings:

  Copy with only 2 arguments
  SetString (D)
  StringOfChar (D)

  A number of new CString routines, including almost all (that
  weren't already there) of BP's `Strings' unit. (B)

  The string comparison operators (`=', `>', etc.) now work like
  in BP by default, and as described in the ISO-10206 Standard in
  `--extended-pascal' mode or with the `--no-exact-compare-strings'
  switch. (B)

- Date/Time:

  GetUnixTime
  IsLeapYear
  TimeStampToUnixTime
  UnixTimeToTimeStamp

`(B)': BP compatibility
`(D)': Delphi compatibility


Have fun,

    The GNU Pascal development team
