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) alpha-unknown-linux-gnu alphaev56-dec-osf4.0d mips-sgi-irix6.2 sparc-sun-solaris2.6 i386-pc-djgppv201 (MS-DOS) Binaries for more platforms, including i586-pc-linux-gnulibc2, ix86-mingw32 (MS-Windows 9x/NT) and sparc-sun-solaris2.5.1 will follow soon and announced separately. 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 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 /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. /lib/gcc-lib///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