.NH 1
A ``startup'' function in \*a?
.PP
\*a has a startup facility
which allows automatic execution
of an \*a expression when a
workspace is loaded.
If you define the variable
``\*(qdlx'' to be some \*a expression
and then save the workspace,
when you next ``)load'' the
workspace,
\*a will automatically read
and execute ``\*(qdlx''.
For example,
if you have the function ``hello''
which looks like this:
.DS
	hello
[1]     \'hi there, my friend\'
[2]     \'welcome to apl\'
.DE
and
you want \*a to perform
``hello'' when you load
the workspace file ``hi'',
you can say:
.DS L
	\*(qdlx { \'hello\'
	)save hi
  14.59.31 10/26/78  saved hi
	)off
.DE
Then, if you run \*a with:
.sp
$ apl hi
.sp
you will get:
.DS L
a p l \\\\ 1 1
25 oct 1978

  14.59.31 10/26/78 loaded hi

hi there, my friend
welcome to apl

	\_
.DE
.NH 1
\*u \*a\\11 Limitations
.PP
\*u \*a does have
some limitations.
Tracing,
which is controlled by the
``)trace'' and ``)untrace'' commands,
is not compatible
with the standard
\*a
trace facility.
.PP
Some operators have not
been implemented
(for example, laminate
is not supported).
Dyadic format is available in
a restricted form:
the left argument cannot be a
scalar or one-element vector
and negative precision
(``E format'')
is not permitted.
There is a function
/usr/lib/apl/fn/dft
which performs dyadic format
according to the standard definition.
Inner and outer product will not
work with character data.
.PP
Functions which are created with
``\*(qdfx'' should not have the same
name as existing variables;
occasionally
\*a
gets confused and mistakenly
zaps a newly-fixed function.
Functions containing overstrikes
that were created by ``\*(qdfx''
cannot
be properly edited.
The only quad variable which has
been implemented is
``\*(qdlx'',
and it is always a global variable.
.PP
The biggest limitation for PDP-11
\*u \*a is space.
Despite efforts to use as
much memory as \*u
and the computer itself permit,
only about 5000 numeric values
may be stored in an \*a
workspace.
In order to permit workspaces
containing more data,
there is a second version
of \*u \*a called ``apl2''.
\*(a2 is used exactly the
same way as \*a \(em
the only difference is that
it uses single precision
floating-point instead of
double-precision.
As a result,
some precision is lost,
but \*(a2 allows twice
as many workspace items
as \*a.
Although
\*(a2 and \*a workspaces
are in different formats,
\*a and \*(a2 will convert
each other's workspace files
they are loaded with ``)load''
or merged with ``)copy'',
so workspaces may be
used interchangably.
In all other respects,
the operation of \*(a2 is
identical to the operation of \*a.
(On the VAX 11/780,
the size of the workspace is essentially
limited only by the virtual memory system.
Hence,
\*(a2 provides no real advantage over \*a).
.PP
Finally,
an unfortunate restriction in using \*a
on both PDP-11's and VAX-11/780's is that
workspaces are not
directly interchangeable
between machines.
However,
there is a program to convert them.
To convert a PDP-11 workspace to the VAX,
run (on the VAX) the command:
.DS
$ aplcvt filename
.DE
The workspace will be converted to VAX
format and placed into the file
``filename.vax''.
Similarly,
you can convert VAX format workspaces
to PDP-11 format by running
``aplcvt'' on a PDP-11.
(There are other options available;
for a description of these see the
online manual by typing
.DS
$ help aplcvt		<or>		$ man aplcvt
.DE
.NH 1
Conclusion
.PP
Well,
that wraps up this manual.
Reference information about
\*a is found in the
online manual.
Type:
.DS
$ help apl		<or>		$ man apl
.DE
for the online document.
Good luck with \*a!
