Processor AA transfers control to processor BB with
a simple Fortran CALL BB
,
having readied the contents of its down call-bank
at LQDW
.
To trigger swopping of the processor environment,
the first executable statement in the processor BB should be
CALL JZIN (chIAM, IFDOWN, NAN, 0)
with chIAM processor ID, a text string of 4 characters exactly of type CHARACTER*4 IFDOWN flag indicating whether this processor does or does not call other processors: = 0 no / = 1 yes NAN number of processor constants used 0 zero; non-zero gives access to the extra features described in section~\ref{sec:JZextraJZIN}.
JZIN saves the environment of the upper processor and then sets up the environment of the new processor. If this does not yet exist, it calls the internal service routine JZLIFT to create the bank of support variables, digesting the titles for this processor, if any. JZIN returns the initialisation status thus:
IQUEST(1) = -ve : just initialized without JZAN title 0 : just initialized with JZAN title +ve : normal running
Thus a processor using processor constants can check this condition like in the following example:
SUBROUTINE BB +CDE, Q. declaring the store and /JZUC/ CHARACTER chIAM*4 PARAMETER (chIAM = 'BB ') CALL JZIN (chIAM,0,3,0) IF (IQUEST(1)) 11, 17, 21 C-- Initialize constants if and only if not set from title 11 Q(LQAN+1) = .0025 Q(LQAN+2) = .3 C-- Complete initialization calculating derived constants 17 Q(LQAN+3) = .5 * SIN (Q(LQAN+2)) 21 CALL MZWORK (...) ... processor body CALL JZOUT (chIAM) RETURN END
The 3rd and the 4th parameter to JZIN are looked at only on first contact for each processor.
Note that over-ruling with the JZAN title only works if the processor is programmed to handle it. This is done in this example where statement 11 is reached only if there is no title.
JZIN readies for the new processor these links:
COMMON /JZUC/LQJZ,LQUP,LQDW,LQSV,LQAN, JQLEV,JQFLAG(10) LQJZ the header bank supporting the JZ91 data-structure LQUP the upper call bank LQDW the down call bank, if needed, else = zero. LQSV the bank of support variables; IQ(LQSV+1) contains system information, IQ(LQSV+2) is 1 for first entry, 2 for second, etc. LQAN the processor constants inside the SV bank: IQ(LQAN) number of constants Q(LQAN+1) first constant Q(LQAN+2) second constant . . . and also: JQLEV is the current call depth level, = zero for the root JQFLAG(10) receives a copy of the flags for this processor.
Note that the data in this common /JZUC/
must not be changed
by the user, JQFLAG
excepted.
JZIN goes to ZFATAL if IFDOWN
is non-zero and
the lowest possible call-depth has been reached.
There are always 10 flag words.
Words not explicitely initialized with a JZFL
title
for a given processor are always zero.
This feature is only available with the program development version,
in the production version of ZEBRA the flags are
all initialized to zero and never change,
JZFL titles are dropped by JZINIT and are otherwise ignored.
If you need the working space also in the initialization
part of the processor, look out:
you cannot place the CALL \Rind{MZWORK
} before the
CALL \Rind{JZIN
},
nor immediately after, because MZWORK destroys IQUEST
.