APL System			Copyright (c) 1996 Bernd-Gunter Nitzler

                                                   Bourdiguet, 30.12.1996
Hello all APL fans!

This is the fourth alpha version (V 0.4) of my APL interpreter. The third
alpha version was never released because of too much bugs in the final
test. For the first time there is also a LINUX version included.

The APLF.EXE (for systems without a coprocesor) is not included because
it costs additional download time and is needed only very seldom.
If you like to have it and cannot compile it yourself, please mail me.
I'll then mail it directly to you. This version is compiled for 486.
But you can compile it also for any other processor type, starting
from 8086 up to P6! If you like to move this APL to another processer
you have to look after the assembler inserts in the modules calc.cc
and dyadic.cc which check for overflow after add, sub, and mult.

Please read this README completely before starting APL. There are some
important installation tips hidden in it.

Thanks to someone who lent me a handbook of APL*PLUS there are a lot
of the system functions of that version implemented. I used the APLSE
to verify the results. There are already some functions missing, of course.

Caution: The format of the workspace file *.WS has changed. To transfer
workspaces from previous versions please use only the )put and )get commands!

You will find some ??? and !!! in the code which are markers for me to
do something there in the future.

Also a lot of the comments are in german :-). At the beginning all comments
were in german, now I'll translate them peu-a-peu (one after the other). But
this is not the first priority for me.

I am sure that there are some bugs in the code so be a little bit careful.

Please be *VERY* careful when making changes to the interrupt routine
"taste". A small "last minute optimising" there destroyed half of my
hard disk (under MSDOS). Luckily I make backups regularly so only two days
of restoring were necessary.

The format of the Workspace files (*.ws) is very easy, it is simply a
dump from the name list with all data and function definition appended
after each name. But the format will change from version to version and
I cannot guarantee that there exists a program to convert from one to the
next version. So if you like to save functions and variables for the future
please use the )put and )get commands, which will be compatible in all
versions. But this commands will not save any data of the status indicator.
And there are restrictions in the length of a line (currently 256 characters).
This length is not checked at this time in input, so be careful.

Until there is a V1.0 all are alpha and later beta versions. This means
that there will be a *lot* of changes in the sources between them. If you
find a bug please send me all details and/or better, send a diff of
the corrected source. Very important is the version number which you
used. I think there will be a new release every month, so if your
version is older (version and release date are displayed at startup) your
bug can already been fixed. Please try the newest version before sending
a very old bug report, since it is possible that I cannot reproduce
a bug in the newest version or (my disk space is limited) that I had to
delete the old sources.

Some functions are not yet implemented and some internal routines needs
to be optimized, like alloc.cc which uses now simply malloc with its
overhead per allocation, long search time for free storage, and the
uncollected garbage.

Error handling is very easy done now. Every error forgets to
free the used memory, so it is advisable to restart the APL system from
time to time. Correcting and restarting a function is not possible
because there are some global changes necessary to do that. Use the
command ")sic" to clear the status indicator after an error.

There is no stack checking for C, the normal stack should be enough,
but it is possible that calculations with variables of high ranks can
fill up the C stack. Some complex functions like TAKE, TRANSPOSE,
Output, ... are recursive over the ranks. The APL stack is limited only
by the available memory, which is checked.

The line editor is very simple. You cannot change the statement number
while creating a new function. For editing a function there is a nice
screen editor which can be called with ")edit function_name".

A NABLA (mode change) cannot be added to the end of the last statement
to end the definition mode. It has to be alone on a line. In the function
editor the NABLA is not necessary because the editor knows about the start
and end of a function.

The keyboard can be defined freely using the APL.INI file and changing
the keyboard definition files *.KEY. There are some standard files
included which can be easily changed if necessary. The same is true for
the LINUX keyboard definition files *.MAP. For this MAP files it is
necessary to install the LINUX.TIC terminfo description with the
command "tic linux.tic". The only thing I added to that description
is the last line so if you have another standard terminfo description
simply append that last line to your description.

The standard MSDOS version compiles with BORLAND C++ 4.0, I think also
with 3.5, but have not checked that. The extended version compiles with
GNU G++, I used the DJGPP implementation 2.00 with C-Compiler 2.7.2 and
libg 2.7.1. DJGPP 1.12 is too buggy, particularly the interrupt routine
don't work there. If someone likes to try the BORLAND BCC32 please do so
and send me the results (and changes). The LINUX version compiles with
GCC version 2.7.2. In the first attempt I tried to decode all the
scancodes myself, as it is done under MSDOS. That runs fairly well, it
was possible to change the screen font and keyboard layout dynamically
if one changed the virtual terminal. But for this there were a lot of
special LINUX dependencies in the source LINUX.CC necessary so I decided
to make some things easier and use normal keyboard maps and use
normal LINUX commands to load the APL font. Now all should run in
most LINUX versions. There remains a single special LINUX function
ioctl-KIOCSOUND.

Please use the same programming style as the existing style when making
changes to my sources. If you send changes to me please send only diff's
(diff -c2).

When unzipping this archive under LINUX please use the flag "-aL" to
remove all those CR/LF's and create lower case names. Make a chmod +x
with the files "a" and "apl" so they are executable. You can remove
"*.exe" under LINUX.

Now the first auxiliary processor is implemented, AP80 which uses the
new shared variables. This implementation is very simple and uses not the
multitasking features or APL-Interrupts to call internal APL functions but
this will change shortly. This AP80 needs a lot of soft fonts and graphic
character definitions for all the APL special characters. Many are
included and if you read "for DeskJet 500" this can also mean "for newer
DeskJet's" but I cannot test this because I have only a HP DeskJet 500.
The same is true for the HP LaserJet or the IBM printers.
A DeskJet 500 needs a memory cardridge to load the softfont. Future
releases will also allow the printing of all characters in the graphics
mode so all DeskJet's can print.

It would be very kind, if a native english speaker corrects my very bad
english in the documentation and maybe also this readme. Please contact
me in advance to make sure, that no one has it done before.

Here is a list of the files in this distribution:

MAKEFILE.BCC	Makefile for Borland C++ make
MAKEFILE.DJG	Makefile for GNU make only for DJGPP
MAKEFILE.LNX	Makefile for LINUX

COPYRITE	Please read before use
README		this file
TODO		a list of tasks to do
APL.DOC		a little documentation (load aplfont before reading)
CHANGES.*	description of the changes between the versions

A		shell script to load font, keys and start APL (make a chmod +x)
A.BAT		batch to load the aplfont and start APL
XA.BAT		batch to load the aplfont and start extended APL

APLFONT.C	Font loader/unloader for MSDOS

APLFONT.VGA	APL font for VGA screen

APLFONT.DJ5	Softfont for the HP Deskjet 500
APLFONT.LJ	Softfont for the HP Laserjet (not tested)
APLFONT.P0N	Graphics for the IBM standard printer for APL (not tested)
APLFONT.P4N	Graphics for the IBM 5182 printer for APL (not tested)
APLFONT.P6N	Graphics for the IBM 3852 printer for APL (not tested)
APLFONT.P5C	Graphics for the GRAFTRAX printer for APL (not tested)
APLFONT.P6C	Graphics for the IBM 3852 printer for APL (not tested)
APLFONT.ESC	Softfont for the IBM printer with downloadable font (not tested)

APL.H		main header file
STACK.H		header for all the stack structures and classes
FILES.H		header for all file access classes
EXTERN.H	header for all globals
FUNCTION.H	header for all global functions
SESSION.H	header for all screen input/output functions

ALLOC.CC	memory allocation functions
AP80.CC		Auxiliary Processor for printing
APL.CC		APL main source and lexical scanner
CALC.CC		basic calculation functions
COMMAND.CC	process the )xxx commands
CVT.CC		cvt functions which are missing in DJGPP
DEBUG.CC	internal debugging functions
DJGPP.CC	all special routines for DJGPP input/output
DYADIC.CC	all the dyadic functions
EDITOR.CC	the full screen syntax colored editor
EXEC.CC		statement interpreter
FILES.CC	file input/output
GAMMA.CC	the gamma function
INIT.CC		reading of the initialization file
IO.CC		input and output
LINUX.CC	all special routines for LINUX input/output
MONADIC.CC	all the monadic functions
MSDOS.CC	all special routines for MSDOS input/output
NAMETAB.CC	name list handling
QUAD.CC		execution of the standard quad functions
QUADPLUS.CC	execution of the APL*PLUS compatible quad functions
SESSION.CC	screen input/output handler
XDYADIC.CC	all the mixed dyadic functions

APLFONT.EXE	APL font loader/unloader
APL.EXE		the APL interpreter, normal DOS version
**APLF.EXE	the APL interpreter, runs without coprocessor** NOT INCLUDED
XAPL.EXE	the APL interpreter, extended DOS version
APL		the APL interpreter, LINUX version (ELF executable)

APL.INI		initialization file

APL2_US.KEY	keyboard layout identical with APL2 US version
APL2_GR.KEY	keyboard layout identical with APL2 German version
APL2_FR.KEY	keyboard layout identical with APL2 French version
LOCAL.KEY	keyboard layout for type LOCAL with usage of local KEYB.COM

APL2_US.MAP	keyboard layout identical with APL2 US version
APL2_GR.MAP	keyboard layout identical with APL2 German version
APL2_FR.MAP	keyboard layout identical with APL2 French version
LOCAL.MAP	keyboard layout for type LOCAL, additional to standard layout

LINUX.TIC	extended version of the standard terminfo definitions

PRINT.APL	APL functions to do printing with AP80 (load with ")get print")

CWSDPMI.EXE	DPMI handler for extended DOS version of APL
CWSDPMI.DOC	Documentation for this handler

CWSDPMI is Copyright (C) 1995,1996  Charles W Sandmann (sandmann@clio.rice.edu).
It is part of the DJGPP distribution which can be downloaded from many places
like SIMTEL.

Bernd-Gunter Nitzler
Bourdiguet
F-30700 Aigaliers
FRANCE
FAX: +33/466.22.03.43
Mail: bernd-nitzler@wanadoo.fr
