SURVO 84C modules are usually large model programs and compiled with
the /AL option of the Microsoft C compiler. Small modules could also be
in small model mode, but the current SURVO 84C libraries support only
the large model. In large model programs there are no limitations for
the size of code and data except the total memory available. In 16 bit
micros we additionally have the limit 64KB for each data item (array).
We have the same limitation, too, for the code in each compiland, but
this is never a real problem, since one module (if reasonably written)
is divided into compilands of much smaller size.
Within these limitations each module should be written so that space
is allocated according to each application separately. This means that
all vectors and matrices, etc. should get their dimensions dynamically
during the run.
However, temporary arrays whose sizes depend on the line length of
the edit field, are typically dimensioned by using the SURVO 84C system
constant LLENGTH
and its multiplicities. The current value of LLENGTH
is
256 and it implies the maximum line length of the edit field to be 253.
Another constant is LNAME
(current value 64) which is used for names of
files (pathnames) etc.
In some cases the maximum number of columns (or maximum number of
words or numbers on a single edit line) is critical for some arrays. The
system constant EP4
(current value 100) gives that limit. The
counterpart of EP4
in the SURVO.APU file is the system parameter ep4
which may be used in dynamic space allocation for arrays related to
number of columns in the edit field.
Matrices should always be defined as one-dimensional arrays and their
elements should be saved columnwise. Thus the element on row i
and
column j
of a m*n
matrix A
will be A[i+n*j]
where i=0,1,...,m-1
and
j=0,1,...,n-1
. In all arrays the base value for the indices is 0. In
output, however, the base value is always 1.
Since double precision should normally used in matrix computations,
the largest square matrix (within the 64KB limit) is 90*90.
Some of the library functions make their own space reservations. For
example, when a data set (SURVO_DATA
) is opened by the data_open
function, memory is allocated for all arrays pointed to by members of
this structure.