Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-03 - 43,50312/impl.rnd
There are no other files named impl.rnd in the archive.
.SPACING 1
.LEFT MARGIN 5
.PAPER SIZE 58 70
.TITLE ^^MANTIS\\ ^IMPLEMENTATION ^MANUAL\&
#
.SKIP 15
.LEFT MARGIN 15
^TITLE: ^^MANTIS\\ ^IMPLEMENTATION ^DOCUMENT
.SKIP 1
^DATE: 10 - ^JANUARY - 1975
.SKIP 1
^AUTHOR: ^LOREN ^SALMONSON
.SKIP 1
^FILE: ^^IMPL.RND\\
.PAGE
.LEFT MARGIN 5
.SKIP 2
.INDENT 5
^PREFACE
.SKIP 2
^THIS IS AN IMPLEMENTATION AND LOGIC MANUAL DESCRIBING, IN COMPLETE 
DETAIL,
THE ^^MANTIS\\ DEBUG PACKAGE FOR THE ^^DEC\\SYSTEM-10 ^^FORTRAN IV\\
LANGUAGE SYSTEM.  ^IT IS WRITTEN FOR THE EXPERIENCED ^^MACRO\\-10 PROGRAMMER
WHO IS INTERESTED IN UNDERSTANDING AND MODIFYING THE SUBSYSTEM.  ^FAMILIARITY
WITH ^^FORTRAN\\ PROGRAMMING IS ASSUMED.  ^THE
READER SHOULD HAVE AVAILABLE FOR REFERENCE, THE ^^MANTIS\\ ^USER'S
^DOCUMENT AND THE ^^FORTRAN IV\\ ^PROGRAMMER'S ^REFERENCE ^MANUAL.
.SKIP 2
^THIS MANUAL REFLECTS THE SOFTWARE AS OF ^VERSION 5 OF THE ^^MANTIS\\
^DEBUGGER, ^VERSION 26 OF THE ^^FORTRAN\\ ^COMPILER, ^VERSION
4 OF THE RUN-TIME OPERATING SYSTEM (^^FOROTS\\), AND ^VERSION 57
OF THE ^LOADER.
^THE FLOWCHARTS STILL REFLECT VERSION 4 / ^^LIB\\40.
.SKIP 2
.INDENT 5
^^TERMINOLOGY\\
.SKIP 2
^&^MONITOR\& - ^THE ^^TOPS\\-10 ^SUPERVISOR.
.SKIP 1
.LEFT MARGIN 13
.INDENT -8
^&^OPSYS\& - ^THE RUN-TIME ^^FORTRAN\\ ^OPERATING ^SYSTEM (^^FOROTS\\).
.SKIP 1
.LEFT MARGIN 5
^&^^MUUO\\\& - ^A MONITOR ^^UUO\\ WITH OPCODE 40-100.
.SKIP 1
^&^^LUUO\\\& - ^A LOCAL USER ^^UUO\\ WITH OPCODE 1-37.
.SKIP 1
.LEFT MARGIN 13
.INDENT -8
^&^BREAK\& - ^AN ^^LUUO\\ TRAP TO THE DEBUGGER WHERE THE 
REQUIRED FUNCTIONS ARE PERFORMED.
.SKIP 1
.LEFT MARGIN 13
.INDENT -8
^&^VARIABLE ^DIMENSIONS\& - ^WITHIN A ^^FUNCTION\\ OR ^^SUBROUTINE\\ FOR
ARRAYS THAT ARE DUMMY ARGUMENTS OF THE SUBPROGRAM, THOSE
DIMENSIONS THAT ARE DECLARED AS DUMMY ARGUMENTS.  ^THE
VARIABLE DIMENSIONS CANNOT BE ALTERED WITHIN THE SUBPROGRAM.
.INDENT -8
.SKIP 1
^&^LOGICAL ^I^F\& - ^A ^^FORTRAN\\ ^LOGICAL ^I^F STATEMENT THAT DOES NOT GOVERN A ^^GOTO\\ STATEMENT. ^IF ^^TRACE\\ IS ENABLED, ^^'IF TRUE\\' IS SIGNALED INSTEAD OF ^^'GOTO\\'.
.SKIP 1
.INDENT -8
^&^SQUOZE\& - ^THE SYMBOL NAME FORMAT THAT PACKS A SIX-CHARACTER NAME
INTO 32 BITS LEAVING A FOUR BIT CODE FIELD IN BITS 0-3.  ^SAME AS ^^RADIX\\50.
.SKIP 2
.LEFT MARGIN 5
.INDENT 5
.TEST PAGE 5
^^SYNOPSIS\\
.SKIP 2
^THE MANUAL IS DIVIDED INTO THREE SECTIONS.  ^THE FIRST SECTION IS AN
OVERVIEW OF THE ^DEBUGGER SUBSYSTEM WHICH GIVES SPECS AND DESCRIBES THE
SYMBOL TABLES AND THE STRUCTURE OF THE ^^FORTRAN\\ PROGRAMS.  ^THE SECOND
SECTION DESCRIBES THE LOGIC OF THE ^DEBUGGER PROPER WHILE THE THIRD SECTION
DISCUSSES OTHER COMPONENTS OF THE LANGUAGE SYSTEM AND THE ^DEBUGGER TABLE
INITIALIZATION.  ^THE FIRST SECTION MAY BE REFERENCED WHILE STUDYING
THE OTHERS.
.SKIP 2
^A SEPARATE DOCUMENT CONTAINS THE FLOWCHARTS.
.PAGE
.SKIP 3
.CENTER
^^SECTION I\\: ^^DETAILED OVERVIEW\\
.NOFILL
.TAB STOPS 53
.SKIP 2
   ^PREFACE, ^TERMINOLOGY, ^SYNOPSIS
1##^INTRODUCTION

2##^EXTERNAL ^SPECS
2.1   ^EQUIPMENT REQUIREMENTS
2.2   ^IMPLEMENTATION RESTRICTIONS
2.3   ^COMMAND FORMAT
2.4   ^PRE-EMPTED LOGICAL UNIT 24
2.5   ^INTERRUPTION OF USER EXECUTION
2.6   ^OPSYS ERROR AND EXIT INTERCEPTION

3   ^INTERNAL ^SPECS
3.1   ^COMMAND FACILITIES
3.2   ^COMMAND CATEGORIES
3.3   ^GENERAL PROGRAM FLOW
3.4   ^MEMORY LAYOUT (SEE 4. ^FIG 1)
3.5   ^ASSEMBLY
3.6   ^STORAGE MANAGEMENT
3.7   ^OPSYS/DEBUGGER INTERRELATION
3.8   ^IMPLEMENTATION LIMITS

4   ^INTERNAL ^TABLES	[^FIG 1]
4.1   ^SYMBOL TABLES
4.1.1   STRUCTURE OF PROGRAM SYMBOL BLOCK
4.1.2   SYMBOL BLOCK HEADER	[^FIG 2]
4.1.3   LABEL SYMBOLS AND ^&^^STATAB\\\& TABLE	[^FIG 3]
4.1.4   VARIABLE SYMBOLS	[^FIG 4]
4.1.5   ^&^^SCRIPT\\\& ARRAY DESCRIPTORS	[^FIG 5]
4.2   ^COMMAND ROLLS
4.3   ^DISPLACED INSTRUCTION AREA

5   ^F4 ^PROGRAM ^STRUCTURE	[^FIG 6]
5.1   ^ACCUMULATOR CONVENTIONS
5.2   ^CALL AND RETURN
5.2.1   FINE PROLOGUE STRUCTURE
5.2.2   FINE EPILOGUE STRUCTURE
5.3   ^ARRAY MULTIPLIER CALCULATION	[^FIG 7]
5.4   ^EXECUTABLE STATEMENTS
5.4.1   ^^FORMAT\\ STMTS
5.4.2   ^^GOTO, IF, DO\\ AND ^^RETURN\\ STMTS
5.4.3   ^INPUT/^OUTPUT STMTS
5.5   ^DATA ACCESS
.PAGE
.SKIP 2
.CENTER
^^SECTION II: LOGIC FOR DEBUGGER PROPER\\
.SKIP 2
.NOFILL
6   ^BREAK ^MANAGEMENT
6.1   ^^ONCALL\\ BREAKS
6.2   ^A^T AND ^^BEFORE RETURN\\ BREAK
6.3   ^^SUBCHECK\\ BREAKS
6.3.1   USE OF SYMBOL TABLES
6.3.2   BREAK WITHIN ^I/^O STMT
6.4   ^O^N(STORE) BREAKS	[^FIG 8]
6.5   ^TRACE BREAKS

7   ^COMMAND ^CYCLE	[^CHART 1]
7.1   ^USE OF OPSYS TO READ COMMAND DATA
7.2   ^GLOBAL VARIABLES
7.3   ^COMMAND DISPATCH	[^CHART 2]
7.4   ^COMMAND NODE INSERTION IN ROLL	[^CHART 3]
7.5   ^INPUT SUBROUTINES
7.5.1   BASIC ROUTINES	[^CHART 4]
7.5.1.1   ^^ACCEPT, WIN, SKIP, SKIPS\\
7.5.1.2   ^^FIRSCH, TSKIP, STOP\\
7.5.1.3   ^^SQZIN, SQZINK, SQZINS\\
7.5.1.4   ^^INPUT\\
7.5.2   SYMBOL LOOKUP ROUTINES	[^CHART 5]
7.5.2.1   ^^GLOOK, LOOK, IDENT2\\
7.5.2.2   ^^IDENT, IDENT0\\
7.5.3   ARRAY ELEMENT ROUTINE ^^LOCATE, IDENTL\\	[^CHART 6]
7.5.3.1   BASIC PROCESSING
7.5.3.2   SECTION NOTATION
7.5.4   PROGRAM POSITION ROUTINES	[^CHART 7]
7.5.4.1   ^^ATLOC\\
7.5.4.2   ^^ADDLOC\\
7.5.4.3   ^^BETWEEN\\
8    ^STORED ^COMMAND ^DECODE
8.1    ^A^T AND ^^BEFORE RETURN\\ DECODE	[^CHART 8]
8.2    ^^ONCALL\\ DECODE	[^CHART 9]
8.3    ^O^N (STORE) DECODE	[^CHART 10]
8.4    ^O^N COMMAND STORE	[^CHART 11]
8.5    ^O^N BREAK SETUP	[^CHART 12]
8.5.1   INITIALIZATION
8.5.2   CODE INSPECTION FOR UNCOMPUTED REFERENCES
8.5.3   BREAKS ON COMPUTED REFERENCES
        ^^ONSET\\ ROUTINE TO PERHAPS PLACE BREAK	[^CHART 13]
9    ^DIRECT ^ONLY ^COMMAND ^DECODE
9.1    ^^SUBCHECK \\DECODE SUBROUTINE	[^CHART 14]
9.2    ^^TOPGET\\ TO OBTAIN DISPLACED INSTRUCTION WORD
9.3    ^^TRACE\\ DECODE AND BREAK HANDLE	
9.3.1   ^^TROUT\\ AND ^^PAUSE\\ FLAG WORDS
9.3.2   PLACEMENT OF BREAKS	[^CHART 16]
9.4    ^^HISTORY\\ COMMAND
9.5    ^^USE\\ COMMAND
9.6    ^MAGTAPE COMMANDS
.PAGE
10    ^OUTPUT ^SUBROUTINES
10.1    ^SQUOZE OUTPUT ROUTINES ^^SQZDATA,SQZOUT\\
10.2    ^LOOKUP ADDRESS ROUTINE ^^INTERN\\
10.3    ^OUTPUT POSITION ROUTINES ^^IOLOC, IOLOCA\\	[^CHART 17]
12    ^BREAK ^HANDLING
12.1    ^^ONCALL\\	[^CHART 20]
12.2    ^^AT\\ AND ^^BEFORE RETURN\\	[^CHART 21]
12.3    ^^SUBCHECK\\	[^CHART 22]
12.4    ^O^N(STORE)	[^CHART 23]
13    ^ATTACHABLE ^COMMANDS
13.1    ^DECODE OF ATTACHABLE COMMANDS
13.1.1   ^G^O	[^CHART 24]
13.1.2   ASSIGNMENT	[^CHART 25]
13.1.3   ^^OUTPUT\\	[^CHART 26]
13.1.4   ^^KILL\\
13.1.4.1   ^^KILLER, KATS, KNODE\\ SUBROUTINES	[^CHART 27]
13.1.4.2   ^^KILLON\\ TO REVOKE INTERSECTING ^O^NS	[^CHART 28]
13.1.5   ^^CLEAR\\ SUBROUTINE FOR GENERAL ^^KILL\\	[^CHART 29]
13.2    ^EXERCISE OF ATTACHED COMMANDS	[^CHART 30]
13.2.1   ASSIGNMENT
13.2.2   ^^OUTPUT\\	[^CHART 31]
13.2.3   ^^KILL\\
.PAGE
.CENTER
^^SECTION III: DEBUGGER TABLE INITIALIZATION\\
.SKIP 2
14    ^COMPILER ^OUTPUT
15    ^TABLE ^INITIALIZATION	[^CHART 33]
15.1    ^REORGANIZATION OF LOADER SYMBOL TABLE	[^CHART 34]
15.2    ^OVERVIEW OF ^^SCRIPT\\ BUILD	[^CHART 35]
15.3    ^DETAIL OF ^^SCRIPT\\ FOR DUMMY ARRAYS	[^CHART 36]
15.4    ^^STATAB\\ BUILD	[^CHART 37]
.FILL
.PAGE
.SKIP 3
.CENTER
^^SECTION I:  DETAILED OVERVIEW\\
.SKIP 2
1.  ^^INTRODUCTION\\
.SKIP 2
^^MANTIS\\ IS AN INTERACTIVE DEBUGGING EXTENSION TO THE ^^DEC\\SYSTEM-10
^^FORTRAN\\ LANGUAGE SYSTEM.  ^ITS COMMAND FACILITIES ARE SIMPLE, POWERFUL
AND A NATURAL EXTENSION OF ^^FORTRAN\\.  ^SPECIAL DEBUG STATEMENTS NEED
NOT BE INSERTED INTO THE ORIGINAL SOURCE PROGRAM.  ^PROGRAMS, VARIABLES
AND STATEMENTS ARE USED ENTIRELY IN TERMS OF THE SOURCE
AND THERE ARE NO SIDE EFFECTS INTRODUCED BY COMPONENTS OF THE DEBUGGING
SUBSYSTEM.  ^CORE OVERHEAD IS LOW.
.SKIP 2
^^MANTIS\\ CAN ALSO BE USED WITH BATCH JOBS TO PROVIDE A SYMBOLIC TRACE,
DISPLAYS OF CRITICAL VARIABLE AND ARRAY VALUES AT SELECTED POINTS AND
SELECTIVE SUBSCRIPT  CHECKING.  ^IT CANNOT BE USED TO DEBUG
OTHER HIGH-LEVEL PROGRAMS NOR ^^MACRO\\ PROGRAMS.
.SKIP 2
^DEBUGGER INITIALIZATION ORGANIZES AND COMPACTS THE SYMBOL TABLES
AND AUXILLARY INFORMATION GENERATED BY THE COMPILER AND LEFT IN CORE
BY THE LOADER.  ^ALMOST ALL DEBUGGER INPUT-OUTPUT IS DONE WITH STANDARD
CALLS TO THE ^^FORTRAN\\ OPERATING SYSTEM (OPSYS).  ^NO INTERPRETIVE
EXECUTION IS USED; INSTEAD, BREAKS ARE PLACED AS NEEDED.
.PAGE
.SKIP 2
2.  ^^EXTERNAL SPECS\\
.SKIP 2
2.1  ^&^EQUIPMENT ^REQUIREMENTS\&
.SKIP 2
^DUAL RELOCATION AND PROTECTION REGISTERS ARE REQUIRED SINCE THE
DEBUGGER MUST RESIDE IN THE HIGH SEGMENT WITH THE SHAREABLE OPSYS.
.SKIP 2
2.2  ^&^IMPLEMENTATION ^RESTRICTIONS\&
.SKIP 2
.INDENT 5
A.  ^^CHAIN\\ MAY NOT BE USED.
.SKIP 1
.INDENT 5
B.   ^ALL ^^LUUO\\S ARE RESERVED FOR THE DEBUGGER AND THE OPSYS.
.SKIP 1
^SEE IMPLEMENTATION LIMITS (3.8).
.SKIP 2
2.3 ^&^COMMAND ^FORMAT\&
.SKIP 2
^A COMMAND IS ONE OR MORE LINES EACH TERMINATED BY A CARRIAGE RETURN.  ^KEY
WORDS AND NAMES MUST BE DELIMITED BY BLANKS OR SPECIAL CHARACTERS.
^OTHER DATA MUST FOLLOW THE RULES FOR ^G FORMAT INPUT.  ^THE COMMAND
PROMPT CHARACTER IS AN ASTERISK.
.SKIP 2
2.4  ^&^PRE-EMPTED ^LOGICAL ^UNIT\&
.SKIP 2
^THE ^^USE\\ COMMAND DIRECTS SUBSEQUENT DEBUGGER OUTPUT TO A FIXED
^^FORTRAN\\ LOGICAL UNIT NUMBER.  ^UNIT 24 IS UNAVAILABLE TO THE USER
PROGRAMS ONLY AFTER FIRST USE BY THE DEBUGGER. ^SEE ^ASSEMBLY (3.5).
.SKIP 2
2.5  ^&^INTERRUPTION OF ^USER ^EXECUTION\&
.SKIP 2
^THERE ARE TWO SITUATIONS IN WHICH PROGRAM EXECUTION MAY BE INTERRUPTED
ON THE USER'S INITIATIVE.  ^IF ON A BREAK AFTER PERFORMING THE ACTIONS
SPECIFIED BY THE STORED COMMAND, SEQUENTIAL EXECUTION IS TO CONTINUE,
AND IF A LINE HAS BEEN INPUT AS SENSED BY THE ^^TTCALL SKPINL\\, THEN THE
DEBUGGER WILL HALT, PROMPT AND INTERPRET THE LINE AS A COMMAND LINE.
.SKIP 2
^A LOOP MAY BE INTERRUPTED BY TWO CONTROL ^C'S AND ^^REENTER\\.  ^AN 
^I/^O STATEMENT IN PROGRESS WILL BE COMPLETED AND THE USER MAY 
CONTINUE EXECUTION.
.SKIP 2
2.6 ^&^OPSYS ^ERROR AND ^EXIT ^INTERCEPTION\&
.SKIP 2
^ANY ERROR ENCOUNTERED BY OPSYS WILL TRAP TO THE DEBUGGER AFTER THE 
STANDARD MESSAGES.^THE ONLY WAY TO EXIT WITH THE OPSYS TIME AND ERROR SUMMARY IS WITH THE
^^EXIT MANTIS\\ COMMAND.
.PAGE
.SKIP 3
3.  ^^INTERNAL SPECS\\
.SKIP 2
3.1  ^&^COMMAND ^FACILITIES\&
.SKIP 2
^^MANTIS\\ ALLOWS THE USER TO SET A LARGE NUMBER OF BREAKS IN PROGRAMS
TO BE DEBUGGED; TO SET BREAKS ON SUBROUTINE CALLS OR RETURNS; TO
DISPLAY AND CHANGE THE VALUES OF VARIABLES AND
ARGUMENTS; TO INTERRUPT AND INITIATE PROGRAM EXECUTION; TO CHANGE THE
NORMAL EXECUTION PATTERN OF STATEMENTS AND PROGRAMS; AND TO
CONTINUE EXECUTION WITHOUT DEBUGGER OVERHEAD.  ^IT ALSO PROVIDES A
TRACE FACILITY THAT LOGS EACH EXCEPTION TO SEQUENTIAL EXECUTION, FLEXIBLE
SUBSCRIPT CHECKING AND A LIMITED DATA BREAK.
.SKIP 2
3.2  ^&^COMMAND ^CATEGORIES\&
.SKIP 2
^THERE ARE THREE CATEGORIES OF DEBUGGING COMMANDS:  DIRECT, STORED,
AND ATTACHABLE.  ^DIRECT COMMANDS ARE EXECUTED IMMEDIATELY AFTER
INPUT.  ^THE DIRECT COMMANDS, ^^SUBCHECK\\ AND ^^TRACE\\, PLACE BREAKS
IN THE PROGRAMS.  ^STORED COMMANDS (^^AT, ON, ONCALL, BEFORE RETURN\\)
ARE TRANSLATED INTO NODES IN THE DATA BASE ROLL AREA IN ADDITION TO
BREAK PLACEMENT.  (^SEE 6.  ^BREAK ^MANAGEMENT)
.SKIP 2
^ATTACHABLE COMMANDS ARE ASSOCIATED WITH STORED COMMANDS AND SPECIFY
THE ACTIONS TO BE PERFORMED WHEN A STORED COMMAND IS EXERCISED.  ^AN
ATTACHED COMMAND IS SEPARATED FROM ITS STORED COMMAND AND OTHER 
ATTACHMENTS BY A SEMICOLON CHARACTER.  ^ALL ATTACHABLE COMMANDS
HAVE A DIRECT COMMAND FORM.
.SKIP 2
3.3  ^&^GENERAL ^PROGRAM ^FLOW\&
.SKIP 2
^THE DEBUGGER CAN BE DIVIDED INTO FIVE FUNCTIONAL PARTS: INITIALIZATION;
DECODING AND EXECUTING THE COMMAND STRING; HANDLING BREAKS;
EXECUTING ATTACHED COMMANDS; AND FIELDING RE-ENTRY AND PROGRAM ERRORS.
^AFTER SYMBOL TABLE INITIALIZATION IS COMPLETED BY THE LOW-SEGMENT
PART USING TABLES BUILT BY THE LOADER, AND THE OPERATING SYSTEM IS
INITIALIZED, THE COMMAND CYCLE IS ENTERED.  ^STORED COMMANDS ARE
PLACED IN THE ROLL AREA FOR USE WHEN THE ASSOCIATED BREAK(S) LATER
HAPPEN.
.SKIP 2
^THE DEBUGGER MAY NOT TAKE CONTROL IMMEDIATELY AFTER A ^^REENTER\\
COMMAND.  ^THE MONITOR DELAYS EXECUTION OF ^^REENTER\\ UNTIL COMPLETION
OF ANY ^^MUUO\\, SUCH AS AN ^I/^O OPERATION.  ^THE DEBUGGER MAY ENTER
THE COMMAND CYCLE IMMEDIATELY OR IT MAY DETERMINE THAT AN ^I/^O
STATEMENT HAS NOT COMPLETED.  ^IN THE LATTER CASE, THE ^^'JRA 16,(16)'\\ WHICH EXITS FROM ^^FOROTS\\
IS CHANGED AND ALSO THE ^^'JRSTF'\\ WHICH EXITS FROM THE ^^FORJAK\\ MODULE.
^WHEN THE ^I/^O IS COMPLETED THESE TRAPS ARE REMOVED AND THE
COMMAND CYCLE IS ENTERED. 
.SKIP 2
^PROGRAM ERRORS OR PROCESSOR ERRORS, SUCH AS FLOATING UNDERFLOW, ARE
ROUTED TO THE DEBUGGER BY THE OPSYS AFTER IT HAS PERFORMED THE
STANDARD ACTIONS.
.SKIP 2
^A ^^CALL EXIT\\ IS INTERCEPTED IN OPSYS BEFORE ANY CHANNELS ARE CLOSED AND BEFORE THE STANDARD TIME
AND ERROR SUMMARY.
.SKIP 2
3.4  ^&^MEMORY ^LAYOUT\&
.SKIP 2
^DEBUGGER LOGIC RESIDES WITH THE SHAREABLE OPSYS IN THE HIGH SEGMENT.
^IT IS REACHED THROUGH THE HIGH SEGMENT VESTIGAL STARTING ADDRESS.
.SKIP 2
^THE LOW SEGMENT IS DIVIDED INTO THE DEBUGGER DATA BASE (WHICH
OVERLAYS INITIALIZATION CODE), ^F4 PROGRAMS AND DATA, SYMBOL TABLES,
AND CONTIGUOUS FREE CORE AND MACHINE INSTRUCTIONS DISPLACED BY ^^MANTIS\\
BREAKS.  ^ANY OF THIS DATA MAY BE CLOBBERED BY THE USER'S PROGRAMS
THROUGH AN INVALID ARRAY SUBSCRIPT.  ^THE ^^SUBCHECK\\ DEBUGGER COMMAND
CAN BE USED TO CATCH THE ERROR.
.SKIP 2
^FIGURE 1 SHOWS MEMORY LAYOUT.  ^THE LEFT SIDE SHOWS THE MAJOR DIVISIONS
WHILE THE RIGHT SIDE SHOWS TABLE AND OTHER POINTER SYMBOLICS.
^ASSEMBLY OF ^^MANTIS\\ AND STORAGE MANAGEMENT ARE COVERED IN 3.5 AND 3.6.
.SKIP 2
^A BREAK COMMAND NODE IS HELD IN ONE OF THREE ROLLS (POINTED TO BY
^&^^CALL\\\&, ^&^O^N\& OR ^&^^AT\\\&).  ^&^^BEFORE RETURN\\\& NODES ARE HELD IN THE &^A&^T ROLL.  ^A ROLL IS A SEQUENTIAL LIST TO WHICH INSERTION, DELETION
AND REFERENCE MAY BE MADE AT ARBITRARY POINTS WITHIN IT.  ^SEE 7.4 FOR HOW A
COMMAND NODE IS INSERTED IN A ROLL.  ^SEE 8. FOR STORED COMMAND DECODE
AND NODE FORMATS.
.SKIP 2
^THE POINTER ^&^^HISTORY\\\& GIVES THE BASE AND CURRENT POINT FOR THE TRACE
HISTORY TABLE.  ^THE WORD ^&^^HISTOP\\\& GIVES THE TOP OF THE TABLE
AND THE FIRST WORD OF THE FIXED-LENGTH WORKSPACE.  ^THE WORKSPACE IS 
USED TO HOLD A COMMAND NODE WHILE IT IS DECODED AND IN THE ^^SUBCHECK\\
AND ^^RETRY\\ FUNCTIONS. ^IT ALSO HOLDS THE ^^FORMAT\\ BUILT
DURING EXERCISE OF AN ATTACHED OUTPUT CMD.
.SKIP 2
^THE ^^AOBJN\\ POINTER ^&^^MANSYM\\\& GIVES THE BASE OF THE ^^MANTIS\\-FORMATTED
SYMBOL TABLE.  ^THIS TABLE IS COMPOSED OF ONE OR MORE SUBBLOCKS FOR THE MAIN- AND
SUBPROGRAMS.  ^SYMBOL ENTRIES MAY POINT INTO THE SUBSCRIPT DATA TABLE OR THE STATEMENT
LENGTH TABLE.  ^SEE 4.1.1.
.SKIP 2
^THE WORD ^&^^SCRIPT\\\& GIVES THE BASE OF A TABLE WITH DESCRIPTIVE
ENTRIES FOR EACH ARRAY.  ^THE OFFSET FROM THE BASE TO AN ENTRY IS GIVEN
IN THE ARRAY'S SYMBOL ENTRY PAIR.  ^IF ^&^^SCRIPT\\\& IS
ADDRESSED INDIRECTLY, THEN AC 1 MUST HOLD THE OFFSET(INDEX). ^SEE
4.1.5.
.SKIP 2
^THE WORD ^&^^STATAB\\\& GIVES THE BASE OF A TABLE GIVING THE LENGTH
OF EACH OBJECT STATEMENT.  ^THESE LENGTHS ARE PACKED 9 4-BIT BYTES
PER WORD.  ^EACH LABEL SYMBOL POINTS TO BEFORE  THE BYTE(S) GIVING
THE LENGTH OF THE LABELLED STATEMENT.  ^SEE 4.1.3.
.SKIP 2
^THE AREA WHERE INSTRUCTIONS DISPLACED BY BREAKS ARE PLACED IS GIVEN
BY ^&^^TOPFF$\\\& AND ^&^^BROKE$\\\&.  ^IF ^&^^BROKE$\\\&
IS ADDRESSED INDIRECTLY, THEN AC 1
MUST HOLD THE NEGATIVE INDEX INTO THE AREA.  ^SEE 4.3.
.SKIP 2
3.5  ^&^ASSEMBLY\&
.SKIP 2
^PARAMETER ^&^^REENT\\\& DEFAULTS TO 0 TO ASSEMBLE THE IMPURE OBJECT
FILE.  ^THE FILE MUST BE NAMED ^^MANTIS.REL\\
AND IS EXPLICITLY LOADED BEFORE ANY OTHER PROGRAMS.  ^IF ^^REENT\\
IS SET TO 1, THEN THE IMPURE PART IS PROCESSED ONLY THE
FIRST ASSEMBLY PASS.  ^SYMBOLS IN THE DATA BASE ARE DEFINED
ABSOLUTELY FOR USE BY THE SHAREABLE HIGH PART.
.SKIP 2
^SYMBOL ^&^^USECHAN\\\& DEFINES THE LOGICAL UNIT NUMBER USED BY THE
DEBUGGER TO OUTPUT TO OTHER THAN THE TERMINAL.
.SKIP 2
^SYMBOL ^&^^DEPTH\\\& DEFINES THE SIZE OF FLOW-TRACE HISTORY KEPT.
.SKIP 2
^SYMBOL ^&^^RSPACE\\\& IS SET BY ASSEMBLY TO THE SIZE OF THE COMMAND
STORAGE ROLL AREA..SKIP 2
3.6  ^&^STORAGE ^MANAGEMENT\&
.SKIP 2
^INSTRUCTIONS DISPLACED BY DEBUGGER BREAKS ARE HELD IN AN AREA
ALLOCATED FROM ^^FOROTS\\ DYNAMIC CORE AND BY ^^MANTIS\\ ROUTINE ^^TOPGET\\.
.SKIP 2
3.7  ^&^^OPSYS\\/DEBUGGER ^INTERRELATION\&
.SKIP 2
^REFER TO SOURCE CODE IN LOWSEG (^^GETHGH\\) AND INITIALIZATION OF HIGH SEG (^^SETHGH\\).
.SKIP 2
3.8  ^&^IMPLEMENTATION ^LIMITS\&
.SKIP 2
.LEFT MARGIN 13
.INDENT -3
A.#ANY SINGLE STATEMENT MAY NOT EXCEED 255 MACHINE INSTRUCTIONS.
.SKIP 1
.INDENT -3
B.#THE SYMBOL TABLE FOR ALL PROGRAMS TO BE DEBUGGED MUST BE UNDER 8^K (<4^K SYMBOLS).
.SKIP 1
.INDENT -3
C.#THE SUBSCRIPT TABLE MUST NOT EXCEED 4^K.
.SKIP 1
.INDENT -3
D.#^THE STATEMENT LENGTHS BYTE TABLE MUST NOT EXCEED 4^K.
.SKIP 1
.INDENT -3
E.#NOT MORE THAN 16^K INSTRUCTIONS CAN BE DISPLACED BY BREAKS.
.SKIP 1
.INDENT -3
F.#NOT MORE THAN 256 ^O^N COMMANDS CAN BE STORED.
.SKIP 1
.INDENT -3
G.#NOT MORE THAN 64 SUBROUTINES MAY BE DEBUGGED.
.SKIP 1
.INDENT -3
H.#THE INTERNAL LENGTH OF A STORED COMMAND (PLUS ATTACHMENTS) MUST BE LESS THAN 64 WORDS.
.LEFT MARGIN 5
.PAGE
.SKIP 2
4.  ^^INTERNAL TABLES\\
.SKIP 2
4.1  ^&^SYMBOL ^TABLES\&
.SKIP 2
^THE ^^MANTIS\\ SYMBOL TABLE IS COMPOSED OF SUBBLOCKS FOR EACH ^F4
PROGRAM.  ^NO SYMBOLS FOR OTHER PROGRAMS NOR INTERNAL (GLOBAL)
SYMBOLS NEED BE PRESENT.  ^IF SUCH SYMBOLS ARE INCLUDED, THEY SHOULD
BE PLACED BETWEEN PROGRAM SUBBLOCKS.  ^THE MAIN PROGRAM SUBBLOCK, IF
PRESENT, ALWAYS APPEARS AT THE VERY START OF THE SYMBOL TABLE.  
^LOCATION ^&^^MANSYM\\\& CONTAINS AN ^^AOBJN\\ POINTER TO THE TABLE.
.PAGE
.SKIP 2
.CENTER 
^FIGURE 1
.SKIP 2
.LEFT MARGIN 0
.TAB STOPS 20 40
.CENTER
^^DETAILED MEMORY LAYOUT\\\
.CENTER
^^DURING DEBUGGING\\
.SKIP 1
.CENTER
^SEE ^MEMORY ^LAYOUT 3.4
.SKIP 1
^NOTE: //// DESIGNATES STORAGE AVAILABLE FOR USE.
^NOT SHOWN: POINTERS ^^BROKE$, TOPFF$, _& BRIST$\\ WHICH HANDLE INSTRUCTIONS DISPLACED BY ^^MANTIS\\ BREAKS.
.SKIP 2
.NOFILL
.TAB STOPS 16 43
^GROSS		  DEBUGGER POINTER
  STRUCTURE	!--------------------------!   SYMBOLICS
	!         ^^JOBDAT\\	!
        140-->	!--------------------------!
	! ^^MANTIS\\ STATUS _& POINTERS	! (FILENAME IS
	!--------------------------!	   ^^MANLOW.REL\\)
^^MANTIS\\	!  ^EXECUTE BROKEN INSTR _&	!
  DATA BASE	!   RETURN TO ^F4 PROGRAM	!
 (OVERLAYS	!--------------------------!  <--^LH ^&^^CALL\\\&
 INITIALIZATION !  ^^ONCALL\\ BREAKS ROLL	!
 CODE)	!--------------------------!  <--^RH
	!//////////////////////////!
	!//////////////////////////!
	!--------------------------!  <--^LH &^O&^N
    <1^K	!      ^O^N BREAKS ROLL	!
	!--------------------------!  <--^RH
	!//////////////////////////!
	!//////////////////////////!
	!--------------------------!  <--^LH &^A&^T
	!    ^A^T BREAKS ROLL	!
	!--------------------------!  <--^RH
	!//////////////////////////!
	!//////////////////////////!
	!--------------------------!     <--^LH ^&^^HISTORY\\\&
	!   FIXED TRACE HISTORY	!     <--^RH IS
	!	!       CURRENT POINT
	!--------------------------!     <--^&^^HISTOP\\\&
	!       WORKSPACE	!
	!--------------------------!
	! CORE RETURNED TO ^^FOROTS\\	!
	!--------------------------!
  ^^FORTRAN\\	!	!
    PROGRAMS	!	!
    _& DATA	/	/
               /                          /
               _\                          _\
	_\	_\
	 _\	 _\
 	/ 	/
	!--------------------------!
	!     OPERATING SYSTEM	!
	!      ^^FORJAK\\ MODULE	!
	!--------------------------!
	!     LIBRARY ROUTINES	!
	!	!
	!--------------------------!  <--^&^^MANSYM\\\&
  SYMBOL	/	/
   TABLES	_\	_\
	!--------------------------!
	!      4 WORD HEADER	!
	!--------------------------!  <--^&^^CURRENT\\\&(PROGRAM'S
	!    STATEMENT LABEL	!       SYMBOL BLOCK)
	!     SYMBOL PAIRS	!------:
	!--------------------------!      :
	!   VARIABLE SYMBOL PAIRS	!---:  :
	!--------------------------!   :  :
   	/	/   :  :
	_\	_\   :  :
	!--------------------------!   :  : <--^&^^SCRIPT\\\&
	/	/   :  : (SUBSCRIPT DATA
	_\	_\   :  :  INDEXED BY AC1)
	!       _#DIMENSIONS	!<--:  :
	!       BOUNDS WORDS	!      :  ENTRY FOR
	!     REFERENCE BYTES	!      :  PARTICULAR ARRAY
	/	/      :
	_\	_\      :
	!--------------------------!      : <--^&^^STATAB\\\&
	!  !  !  !  !  !  !  !  !  !      :   (STMT LENGTHS
	!        <-----------------!------:    BYTES, 9/WORD)
	!  !  !  !  !  !  !  !  !  !
	!--------------------------!  <--^&^^JOBSYM\\\&
	/	/     (ONLY IF ^^DDT\\
	_\	_\      LOADED)
	!--------------------------!
	!     ^^FOROTS\\ DATA BASE	!	_<-- ^^JOBOPS\\
	!     AND DYNAMIC CORE	!
	!	!
	!	!
.SKIP 2
 ^^SHAREABLE\\	+--------------------------+  (FILENAME IS
  ^^HIGH	!    ^^FORTRAN\\ OPERATING	!    ^^MANOTS.SHR\\)
   ^^SEGMENT\\	!          SYSTEM	!
	!--------------------------!  <--^&^^MANTS.\\\&
	!      DEBUGGER LOGIC	!
.FILL
.PAGE
.LEFT MARGIN 5
.SKIP 3
4.1.1  ^&^STRUCTURE OF ^PROGRAM ^SYMBOL ^BLOCK\& [SEE ^FIG 1]
.SKIP 2
^THE SYMBOL BLOCK FOR EACH ^F4 PROGRAM IS DIVIDED INTO THREE PARTS; THE
HEADER, STATEMENT LABEL PAIRS AND VARIABLE SYMBOL PAIRS.  ^A 
PROGRAM'S SYMBOL POINTER POINTS TO THE LABEL PAIRS AND CONTAINS THE
NEGATIVE LENGTH OF THE LABEL PLUS VARIABLE PARTS.
.SKIP 2
4.1.2  ^&^SYMBOL ^BLOCK ^HEADER\&  [SEE ^FIG 2]
.SKIP 2
^THE PROGRAM BLOCK HEADER GIVES THE PROGRAM NAME, NEGATIVE LENGTH OF
THE OTHER TWO BLOCK PARTS AND THE ADDRESS OF THE TOP OF THE CONSTANT AND
TEMPORARY EXPRESSION AREA FOR THE PROGRAM WHICH IS JUST ABOVE THE 
PROGRAM'S CODE LOGIC.  ^THE HEADER ALSO GIVES THE PROLOGUE AND EPILOGUE
ADDRESSES, UNLESS IT IS THE MAIN PROGRAM, AND THE ADDRESS OF THE FIRST PROGRAM
STATEMENT,  UNLESS MULTIPLIERS FOR VARIABLE-DIMENSIONED ARRAYS ARE 
CALCULATED (CALLS TO ^^ADJ\\.). ^A FLAG IN BIT ^&^^LBLFLG\\\& IN THE FOURTH
HEADER WORD SIGNALS THE ABSENCE OF A WORD GIVING THE ADDRESS OF THE FIRST
EXECUTABLE STATEMENT.  ^THIS WORD IS JUST BEFORE THE FIRST STATEMENT
LENGTHS BYTE WORD FOR THE PROGRAM.  ^THE COMPRESSED BYTE POINTER TO 
THAT TABLE IS IN THE LEFT HALF OF THE FOURTH WORD OF THE HEADER.
.PAPER SIZE 58 80
.SKIP 3
.LEFT MARGIN 0
.TEST PAGE 28
.CENTER
^FIGURE 2
.CENTER
^^PROGRAM-SYMBOL-BLOCK HEADER\\
.NOFILL
.TAB STOPS 36 72
.SKIP 3
 0     3 4	18                                 35
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
!   0  0!                PROGRAM NAME IN ^^SQUOZE\\	!
!       !		!
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
!       NEGATIVE LABEL PLUS  	!       BASE OF PROGRAM'S	!
!       VARIABLE LENGTH	!          CODE LOGIC	!
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
!       PROLOGUE ADR	!        EPILOGUE ADR	!
!	!	!
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
!         ! !   BYTE TABLE	!       TOP OF TEMPORARY AREA	!
!         ! !     OFFSET	!              ADR	!
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
         4 5 6
      _^    _^        _^
      _^    _^       OFFSET INTO STATEMENT LENGTHS BYTE TABLE
      _^    _^
      _^     FLAG FOR ABSENCE OF FIRST EXECUTABLE STATEMENT ADR WORD
      _^
     STATEMENT LENGTHS BYTE POSITION
.FILL
.LEFT MARGIN 5
.PAPER SIZE 58 70
.SKIP 3
4.1.3  ^&^LABEL ^SYMBOLS\&  [SEE ^FIG 3]
.SKIP 2
^STATEMENT LABEL PAIRS IMMEDIATELY FOLLOW THE SYMBOL BLOCK HEADER AND
ARE SEQUENTIALLY ORDERED.  ^THE '^P' APPENDED TO THE NAME BY THE COMPILER
HAS BEEN DIVIDED OFF BY TABLE INITIALIZATION.  ^THE LEFT HALF OF THE
SECOND WORD IS A COMPRESSED BYTE POINTER INTO THE STATEMENT LENGTHS
BYTE TABLE (^&^^STATAB\\\&).
.SKIP 2
^EACH WORD IN ^^STATAB\\ IS DIVIDED INTO 9 4-BIT BYTES.  ^THE
COMPRESSED BYTE POINTER IS EXPANDED BY MAKING THE OFFSET ABSOLUTE IN
THE RIGHT HALF, ZEROING BIT 5 TO GIVE THE BYTE POSITION WHICH IS A
MULTIPLE OF 4, AND SETTING THE BYTE SIZE TO 4.  ^AN ^^ILDB\\ IS USED TO
LOAD THE BYTE POINTED TO.
.SKIP 2
^EACH STATEMENT IS REPRESENTED BY EITHER ONE OR THREE BYTES (IF ITS
LENGTH EXCEEDS 15).  ^FOR A LONG STATEMENT, THE FIRST BYTE IS ZERO
AND THE SECOND BYTE (WHICH MAY NOT BE IN THE SAME WORD) IS THE LEAST
SIGNIFICANT HALF OF A MAXIMUM STATEMENT LENGTH OF 255.  ^THE THIRD
BYTE WILL NEVER BE ZERO. ^AFTER THE BYTE(S) FOR THE LAST STMT IN A SUBPROGRAM
ARE THREE ZERO BYTES.
.LEFT MARGIN 0
.PAPER SIZE 58 80
.TEST PAGE 18
.CENTER
^FIGURE 3
.CENTER
^^LABEL SYMBOL PAIR\\
.SKIP 3
.NOFILL
 0     3 4	                                   35
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
!   1  0!                  LABEL NAME IS ^^SQUOZE\\	!
!       !		!
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
!          1!    ^^STATAB\\ OFFSET	!           STATEMENT ADR	!
!           !	!	!
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
           5 6	18
    _^      _^
    _^     ^&^^LBLFLG\\\& IS ALWAYS SET
    _^
   STATEMENT LENGTHS BYTE POSITION
.FILL
.LEFT MARGIN 5
.PAPER SIZE 58 70
.SKIP 3
4.1.4  ^&^VARIABLE ^SYMBOLS\&  [SEE ^FIG 4]
.SKIP 2
^VARIABLE SYMBOL PAIRS FOLLOW THE LABEL PAIRS IN THE PROGRAM SYMBOL
BLOCK.  ^BITS 0-2 CONTAIN ONE OF EIGHT TYPE CODES GENERATED BY THE
COMPILER.  ^THE VARIABLE IS SCALAR IF BITS 3-4 ARE ZERO, ELSE IT IS
AN ARRAY AND BITS 6-17 GIVE A POSITIVE OFFSET INTO THE SUBSCRIPT TABLE 
(^&^^SCRIPT\\\&) ENTRY FOR THE ARRAY.  ^&^^DMYFLG\\\& SET MEANS THE ARRAY IS A
(CALL-BY-NAME) DUMMY.  ^&^^ARRFLG\\\& CLEAR MEANS THAT THE ARRAY HAS VARIABLE DIMENSIONS (ONE OR MORE OF ITS DIMENSIONS IS DECLARED
AS A DUMMY ARGUMENT).
.SKIP 2
4.1.5 ^&^^SCRIPT\\\& ^ARRAY ^DESCRIPTION  [SEE ^FIG 5]
.SKIP 2
^EACH ^&^^SCRIPT\\\& ENTRY CONTAINS A HEADER WORD FOLLOWED BY BOUNDS PAIR
WORDS (UNLESS VARIABLE-DIMENSIONED), FOLLOWED BY ARRAY REFERENCE OFFSETS
BYTES WITH THE LAST BYTE A ZERO.  ^THE OFFSETS GIVE
THE LOCATIONS OF COMPUTED ARRAY REFERENCES RELATIVE TO THE PROGRAM
LOGIC BASE (RIGHT HALF OF THE SECOND WORD IN THE PROGRAM SYMBOL BLOCK
HEADER).   ^THE LEFT HALF OF THE FIRST WORD IS THE SIZE OF THE ARRAY
OR A POINTER TO THE SIZE IF VARIABLE.  ^THE RIGHT HALF IS THE
DIMENSIONALITY OR A POINTER INTO THE MULTIPLIER CALCULATION CALLING
SEQUENCE (IN ^^ADJ\\. CALL) FOR THIS ARRAY.
.SKIP 1
^OFFSET BYTES ARE 18 BITES UNTILL AFTER AN OFFSET THAT WILL FIT IN 9 BITS.
.LEFT MARGIN 0
.PAPER SIZE 58 80
.TEST PAGE 18
.SKIP 3
.CENTER
^FIGURE 4
.CENTER
^^VARIABLE SYMBOL PAIR\\
.SKIP 3
.NOFILL
 0     3 4	                                   35
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
!   1  0!             VARIABLE NAME IN ^^SQUOZE\\	!
!       !		!
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
!TYPE ! ! !0!     ^&^^SCRIPT\\\&	!             BASE ADR	!
!CODE ! ! ! !     OFFSET	!	!
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
     2 3 4 5 6	18
         _^
       _^ ^&^^DMYFLG\\\&
      ^&^^ARRFLG\\\&
.SKIP 2
^THE TYPE CODES ARE AS FOLLOWS:
.SKIP 2
.LEFT MARGIN 15
0   ^INTEGER    4   ^OCTAL
1   UNUSED     5   ^HOLLERITH
2   ^REAL       6   ^DOUBLE ^REAL
3   ^LOGICAL    7   ^COMPLEX
.LEFT MARGIN 0
.TEST PAGE 15
.SKIP 2
.CENTER
^FIGURE 5
.BREAK
.CENTER
^&^^SCRIPT\\\& ^ENTRY
.LEFT MARGIN 0
.SKIP 2
	18
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
!  ARRAY SIZE OR	!  DIMENSIONALITY OR	!
!  POINTER TO SIZE	!  POINTER INTO ^^ADJ\\. ^^CALL\\	!
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
!	!	!
!        LOWER BOUNDS	!        UPPER BOUNDS	!
!	!	!
/	!	/
_\	!	_\
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
!        REF OFFSET	!  OTHER 18-BIT THEN 9-BIT BYTES	!
!        BYTE #1 (18-BITS)		!
/		/
_\	                    0	_\
+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+.+
.FILL
.LEFT MARGIN 5
.PAPER SIZE 58 70
.SKIP 3
4.2  ^&^COMMAND ^ROLLS\&
.SKIP 2
^STORED COMMANDS WITH THEIR ATTACHMENTS ARE HELD IN ROLLS IN A FIXED-LENGTH
SECTION OF THE DATA BASE.   ^A ROLL IS A SEQUENTIAL LIST TO WHICH
INSERTION, DELETION AND REFERENCE MAY BE MADE AT ARBITRARY POINTS.  ^A
STORED COMMAND IS REPRESENTED BY A VARIABLE-LENGTH NODE
IMBEDDED IN A ROLL.  ^A NODE IS INSERTED INTO A ROLL BY MOVEMENT OF THE
REST OF THE ROLL, OR OTHER ROLLS, UP, OR DOWN, IN THE ROLL STORAGE AREA.
^DELETION OF A NODE INVOLVES MOVING ALL THE NODES ABOVE IT, IN THE ROLL,
DOWN.  ^A ROLL IS DEFINED BY A LEFT HALF POINTER TO ITS BOTTOM AND A
RIGHT HALF POINTER PAST ITS TOP.  ^REFERENCE TO A NODE REQUIRES STEPPING THROUGH
ALL NODES BELOW IT IN THE ROLL.
.SKIP 2
^THE SKELETON FORMAT OF A NODE IN ANY ROLL IS A BREAK STOP FLAG IN BIT
0 AND A NODE LENGTH FIELD IN BITS 12-17.  ^NODES MAY NOT EXCEED 63 WORDS.
^THE CORRESPONDENCE BETWEEN A COMMAND NODE AND ITS BREAK(S) IS DIFFERENT
FOR EACH COMMAND TYPE. ^SEE 8.
.SKIP 2
4.3  ^&^DISPLACED ^INSTRUCTION ^AREA\&
.SKIP 2
^THE INSTRUCTIONS DISPLACED BY BREAKS ARE PUT AT THE TOP OF THE LOW
SEGMENT (THE BROKEN AREA).  ^A 14-BIT NEGATIVE OFFSET IN THE BREAK 
INSTRUCTION POINTS TO THE BROKEN INSTRUCTION RELATIVE TO THE LOW SEGMENT
TOP.  ^THE OPSYS RESPECTS THIS AREA BY MOVING IT UP WHEN CORE
EXPANSION IS REQUIRED.
.SKIP 2
^WHEN A BREAK IS REMOVED, THE WORD IS ADDED TO A LINKED LIST WITH ITS
HEAD AT THE TOP OF THE SEGMENT.  ^SPACE IS NOT RETURNED TO THE CONTIGUOUS
FREE CORE AND CAN ONLY BE REUSED BY THE DEBUGGER (NOT THE ^^OPSYS\\) UNLESS ALL STORED COMMANDS
ARE REVOKED (A GENERAL ^^KILL\\) AND ALL ^^SUBCHECK\\ING IS
STOPPED.
.PAGE
.SKIP 3
5.  ^^F4 PROGRAM STRUCTURE\\  [SEE ^FIG 6]
.SKIP 2
^A ^^FORTRAN\\ PROGRAM CAN BE DIVIDED INTO FIVE PARTS:  1)ARRAY MULTIPLIER
CALCULATIONS FOR THOSE SUBPROGRAMS THAT HAVE VARIABLE-DIMENSIONED 
ARRAY ARGUMENTS OR STMT FUNCTIONS; 2)EXECUTABLE STATEMENTS (WITH ^^FORMAT\\S INTERSPERSED);
THE MAIN PROGRAM ENTRY POINT OR THE SINGLE SUBROUTINE ENTRY AND EXIT POINTS; 4)CONSTANTS AND TEMPORARY LOCATIONS; AND, FINALLY,
ALL VARIABLES AND ARRAYS (AND ^^NAMELIST\\ TABLES).  ^COMPONENTS OF
THE DEBUGGER ARE DEPENDENT ON ALL PROGRAM STRUCTURE DESCRIBED IN THIS
SECTION.
.TEST PAGE 37
.SKIP 3
.CENTER
^FIGURE 6
.CENTER
^^F4 SUBPROGRAM STRUCTURE\\
.SKIP 3
.TAB STOPS 8 32
.NOFILL
	+-----------------------+  <--PROGRAM LOGIC BASE
	! VARIABLE-DIMENSIONED  !
	!   ARRAY MULTIPLIER	!
	!     ADJUSTMENTS	!
	+-----------------------+  <--FIRST EXECUTABLE STATEMENT
	!	!
	!	!
	/         CODE         /
  /          LOGIC       /
  _\                      _\
	_\                      _\
    _\                      _\
    /                      /
	!	!
	!	!
	!-----------------------!  <--PROLOGUE OR ^^START\\
	! PROLOGUE _& EPILOGUE   !          _&
	!-----------------------!       EPILOGUE
	!     CONSTANTS _&	!
	!       TEMPORARIES	!
	!-----------------------!  <--TOP OF TEMPORARY AREA
	!	!
	/	/
  /                       /
  _\                       _\
	_\	_\
    _\                       _\
	 /	 /
	!	!
	+-----------------------+
.FILL
.LEFT MARGIN 5
.SKIP 3
5.1  ^&^ACCUMULATOR ^CONVENTIONS\&
.SKIP 2
^AC17(^P) IS A PUSHDOWN POINTER TO THE STACK USED BY THE PROGRAMS AND
THE DEBUGGER.  ^AC16(^J) IS USED IN CALLING SEQUENCES AND MAY BE
DESTROYED BY THE DEBUGGER ON A BREAK.  ^AC15 HOLDS THE CURRENT ^D^O
LOOP INDEX.  ^ACS 0, 1(^T, ^U) ARE TEMPORARY.  ^THEY ARE NOT USED
FOR CALCULATIONS, BUT MAINLY FOR FUNCTION RESULTS AND MAY BE USED
TEMPORARILY DURING THE EXECUTION,  OUT OF LINE, OF A BROKEN INSTRUCTION.
^OPSYS DOES NOT DESTROY ACS 0 OR 1.
.SKIP 2
5.2  ^&^CALL AND ^RETURN\&
.SKIP 2
^A CALL IS A ^^JSA\\ TO THE SUBROUTINE PROLOGUE (SEE 9.1 IN ^^FORTRAN \\^PROGRAMMER ^REFERENCE).  ^THE PROGRAM COUNTER
IS SAVED AND SCALAR VALUES AND ARRAY ADDRESSES ARE MOVED TO ARGUMENT
LOCATIONS.  ^CALCULATED ACTUAL ELEMENT ADDRESSES WERE STORED INTO THE CALLING SEQUENCE
USING '^^HRRM\\'.  ^THERE IS A BREAK TO THE DEBUGGER (WHICH WAS PLACED BY INITIALIZATION) WHERE
THE ^^JSA\\ LOCATION IS SET TO THE (OLD) CURRENT PROGRAM AND THE 
NEW CURRENT PROGRAM SYMBOL POINTER (LOCATION ^^CURRENT\\) IS SET.
^ANY MULTIPLIER ADJUSTMENTS ARE FORCED USING A TEMPORARY BREAK AT
THE FIRST EXECUTABLE STATEMENT BECAUSE THE ADJUSTMENTS ARE 
FUNCTIONALLY PART OF THE PROLOGUE.  ^ON RETURN, THE PREVIOUS
CURRENT PROGRAM SYMBOL POINTER IS SET FROM THE ^^JSA\\ LOCATION.
.SKIP 2
5.2.1  ^&^FINE ^PROLOGUE ^STRUCTURE\&
.SKIP 2
^THE PROLOGUE STARTS BY SAVING THE ACS AND THEN SETS UP A PUSHDOWN
POINTER TO BEFORE THE ARGUMENT AREA USING '^^MOVEI\\0,'.  ^SINGLE PRECISION
SCALARS ARE MOVED USING '^^PUSH\\ 0,@X(16)', ARRAY ADDRESSES USING
'^^PUSH\\ 0,X(16)', AND DOUBLE-PRECISION SCALARS USING
'^^HRRZ\\ 1,X(16)' AND '^^PUSH\\ 0,1(1)' IN ADDITION TO A FIRST ^^PUSH\\.
^A ^^JRST\\ TO THE BEGINNING COMPLETES THE PROLOGUE.
.SKIP 2
^THE MAIN PROGRAM HAS AN ENTRY POINT OF A ^^RESET\\. OPSYS ^^LUUO\\
FOLLOWED BY A ^^JRST\\ TO THE BEGINNING OF THE PROGRAM.
.SKIP 2
5.2.2  ^&^FINE ^EPILOGUE ^STRUCTURE\&
.SKIP 2
^THE EPILOGUE FOR A SUBROUTINE STARTS WITH A '^^MOVEM\\ 1,' IF A MULTIPLE
RETURN NUMBER MUST BE HELD.  ^THE ACS ARE THEN RESTORED.  ^AFTER VALUES
ARE MOVED BACK TO THE CALLING PROGRAM, A MULTIPLE RETURN IS CHECKED
FOR USING ^^SKIPG\\ AND RETURNS WITH '^^JRA\\ 16,X(16)'.  ^IF A NON-STANDARD
RETURN IS POSSIBLE, THEN '^^ADD\\ 16,' AND '^^JRA\\ 16,@-1(16)'
COMPLETE THE EPILOGUE.
.SKIP 2
5.3  ^&^ARRAY ^MULTIPLIER ^CALCULATION\&  [SEE ^FIG 7]
.SKIP 2
^THE LIBRARY UTILITY ROUTINE ^&^^ADJ\\\&. IS CALLED AT RUN-TIME FOR EACH
ARRAY WHOSE DIMENSIONS ARE SUBROUTINE ARGUMENTS TO CALCULATE THE
MULTIPLIERS AND OFFSET FOR SUBSCRIPT CALCULATION.  ^THE CALCULATED
ARRAY SIZE IS POINTED TO BY THE LEFT HALF OF THE HEADER WORD OF THE
^&^^SCRIPT\\\& ENTRY.  ^THE THIRD ARGUMENT OF ^^ADJ\\. IS POINTED TO
BY THE RIGHT HALF.  ^THE ADDRESSES OF UPPER AND LOWER BOUNDS FOLLOW IN THE ^^ADJ\\. CALLING SEQUENCE.
.SKIP 2
.SKIP 3
.CENTER
^FIGURE 7
.CENTER
^MULTIPLIER ^CALCULATION
.CENTER
^CALLING ^SEQUENCE
.SKIP 3
.NOFILL
.TAB STOPS 10 20 35
	^^JSA\\	16,^^ADJ.\\
	^^ARG	N\\	;DIMENSIONALITY
	^^ARG	TEMP+N-1\\	;POINTER TO MULTIPLIERS
	^^ARG	U\\1	;ADR OF 1ST UPPER BOUND
	^^ARG	L\\1	;ADR OF 1ST LOWER BOUND
	 :		        :
	 :		        :
.FILL
.SKIP 3
5.4  ^&^EXECUTABLE ^STATEMENTS\&
.SKIP 2
^MANY STATEMENTS MAY BE DIVIDED INTO SUBSTATEMENTS WHICH ARE, THEMSELVES,
COMPLETE STATEMENTS OR WHICH PERFORM A SUBTASK OF THE STATEMENT.  ^FOR
EXAMPLE, A LOGICAL ^I^F STMT IS COMPOSED OF A SUBSTATEMENT WHICH
COMPUTES A LOGICAL VALUE AND ONE WHICH IS EXECUTED IF THE VALUE IS TRUE.
^THE  DEBUGGER DETERMINES THE TYPE OF A STATEMENT BY INSPECTING CERTAIN
OF ITS OBJECT INSTRUCTIONS.
.SKIP 2
5.4.1  ^&^^FORMAT\\ ^STATEMENTS\&
.SKIP 2
^^FORMAT\\ STMTS ARE COMPILED INLINE BUT ARE NOT CONSIDERED EXECUTABLE 
BY THE DEBUGGER.  ^^FORMAT\\ LABELS ARE NOT INCLUDED IN THE SYMBOL TABLE
AND THE PROGRAM SHOULD NOT ^^GOTO\\ SUCH A LABEL (SPECIFICALLY BECAUSE
OF THE METHOD USED TO IDENTIFY LOGICAL ^I^F STMTS).
.SKIP 2
^A ^^FORMAT\\ STMT IS COMPOSED OF A ^^JRST\\ AROUND THE ^^ASCII\\ CHARACTERS
OF THE ^^FORMAT\\.  ^IT IS DISTINGUISHED FROM A ^^GOTO\\ STMT BY THE SEVEN
MOST SIGNIFICANT BITS (THE FIRST CHARACTER) BEING A LEFT PARENTHESIS, WHICH
IS THE CODE FOR A SHIFT-TYPE INSTRUCTION.
.SKIP 2
5.4.2  ^&^^GOTO, IF, DO _& RETURN\\ ^STATEMENTS\&
.SKIP 2
^IF A STATEMENT ENDS WITH A ^^JRST\\ INSTRUCTION, IT MAY BE A CONDITIONAL OR UNCONDITIONAL ^^GOTO\\ STATEMENT UNLESS IT JUMPS TO THE
EPILOGUE (A ^^RETURN\\).
.SKIP 2
^THE FIRST PART OF A LOGICAL ^I^F (SEE ^TERMINOLOGY) MAY END IN A ^^JRST\\
AROUND THE SECOND PART PRECEDED BY A COMPARE OR IT MAY END IN A ^^JUMP\\.
.SKIP 2
^A COMPUTED ^^GOTO\\ IS THE ONLY STATEMENT THAT CONTAINS AN INDIRECT
ADDRESS.
.SKIP 2
^A ^D^O CONTINUE IS THE CODE GENERATED TO END ONE ^D^O LOOP AND MAY NOT 
CORRESPOND EXACTLY WITH A SOURCE STMT.
^A ^D^O CONTINUE MAY END IN A ^^JRST\\ PRECEDED BY A COMPARE AC15
OR A ^^JUMP\\ PRECEDED BY '^^SKIPGE\\ 0,' AND ^^MOVNS\\ INSTRUCTIONS.
.SKIP 2
5.4.3  ^&^I/^O ^STATEMENTS\&
.SKIP 2
^EXCEPT FOR STATEMENTS THAT DO NOT TRANSFER DATA, SUCH AS MAGTAPE OPERATIONS, ^I/^O STMTS MAY BE DIVIDED INTO FIVE PARTS.  ^THE FIRST PART
INITIALIZES OPSYS VARIABLES FOR ^^END\\=, ^^ERR\\= OPTIONS AND THE ENCODE/DECODE
ARRAY USING ^^MOVEI\\ AND '^^HRRM\\ 0,'.  ^THE SECOND PART SETS UP A ^^FORMAT\\
ADDRESS USING '^^MOVEI\\ 1,' AND THE SIZE OF AN ARRAY USING '^^HLRI\\ 1,'.
^THE THIRD PART INITIATES THE TRANSFER WITH AN '^I^N. 1,' OR '^^OUT\\. 1,'
OR OTHER OPSYS ^^LUUO\\.   ^THE FOURTH PART OF THE ^I/^O STATEMENT ACTUALLY
TRANSFERS THE VARIABLES AND ARRAYS, POSSIBLY WITH IMPLIED LOOPS.  ^THIS
PART IS, OF COURSE, NOT PRESENT FOR ^^NAMELIST I/O\\.  ^THE TRANSFERS
ARE MADE WITH ^^DATA.\\ OR ^^SLIST. LUUO\\S.  ^THE LAST PART
TERMINATES THE OPERATION WITH A ^^FIN. LUUO.\\
.SKIP 2
^THE SECOND PART OF A ^^NAMELIST\\ TRANSFER SETS UP A TABLE ADDRESS INSTEAD OF
A ^^FORMAT\\ ADDRESS.  ^THE FIRST WORD OF THE TABLE GIVES THE NAMELIST
NAME.   ^TWO WORD ENTRIES FOR SCALARS AND FIVE+N WORD ENTRIES FOR ARRAYS
FOLLOW WITH A TERMINATING ZERO WORD.  ^THE FIRST WORD OF AN ENTRY IS
AN ARRAY FLAG, TYPE CODE AND SQUOZE NAME.  ^THE SECOND
WORD CONTAINS THE ADDRESS.  ^FOR AN ARRAY, THE DIMENSIONALITY, RANGE WORDS
AND AN OFFSET AND TOTAL SIZE FOLLOW.
.SKIP 2
5.5  ^&^DATA ^ACCESS\&
.SKIP 2
^ACCESSING A DOUBLE-PRECISION VARIABLE REQUIRES TWO INSTRUCTIONS (ON A ^^KA10\\), AS
DOES ACCESSING AN ELEMENT OF A FIXED-DIMENSIONED DUMMY ARRAY.  ^ACCESSING
A VARIABLE-DIMENSIONED DUMMY ARRAY REQUIRES SEVERAL INSTRUCTIONS.
.SKIP 2
^A DOUBLE-PRECISION OR COMPLEX OPERATION MAY REQUIRE A SUBROUTINE CALL
USING '^^PUSHJ P,'\\.  ^THE DATA ADDRESS IS PASSED USING '^^MOVEI 16,'\\.
^IT IS AN OPERATION TO MEMORY IF THE FOURTH CHARACTER OF THE SIXBIT NAME
PRECEDING THE ENTRY POINT IS AN '^M'.
.SKIP 2
^THE ADDRESS OF A FIXED-DIMENSIONED DUMMY ARRAY IS ^^MOVE\\D, OR 
^^ADD\\ED IN THE CASE OF A COMPUTED REFERENCE, AT SOME POINT BEFORE THE
ACTUAL REFERENCE.
.SKIP 2
^THE INSTRUCTION SKELETON FOR A VARIABLE-DIMENSIONED
ARRAY ELEMENT ACCESS IS AS FOLLOWS.
.SKIP 2
.LEFT MARGIN 10
^^MOVEI\\#####;IF REFERENCE IS SPECIFIC BUT NOT POWER OF TWO
.SKIP 1
^^IMUL\\######;MULTIPLIER FOR EACH DIMENSION
.SKIP 1
^^ASH\\#######;IF SPECIFIC ELEMENT IS POWER OF TWO
.SKIP 1
^^ADD\\#######;FOR EACH DIMENSION AFTER FIRST
.SKIP 1
^^LSH\\ ,1####;IF DOUBLE-PRECISION
.SKIP 1
^^MOVE\\######;LOAD ADR OF ARRAY
.SKIP 1
^^ADD\\#######;AND ADD IT
.SKIP 1
^^MOVN\\######;LOAD OFFSET
.SKIP 1
^^ADD\\#######;AND ADD IT
.BREAK
##.
.BREAK
##.
.BREAK
##.
.BREAK
ACCESS
.LEFT MARGIN 5
.PAGE
.SKIP 3
.CENTER
^^SECTION II:  LOGIC FOR DEBUGGER PROPER\\
.SKIP 2
6.  ^^BREAK MANAGEMENT\\
.SKIP 2
^A BREAK IS AN ^^LUUO\\ TRAP TO THE DEBUGGER WHERE THE REQUIRED FUNCTIONS
ARE PERFORMED.  ^THE ^^UUO\\ HANDLER IN THE LOW SEGMENT IS ^^PUSHJ\\ED
TO AND IMMEDIATELY JUMPS TO THE HIGH SEGMENT DISPATCHER UNLESS THE ^^LUUO\\ IS FOR THE OPSYS,
IN WHICH CASE A ^^JSR\\ TO THE LOW SEGMENT HANDLER IS SIMULATED.
^BREAK DISPATCH INVOLVES SAVING ACS 0-1 IN ^^ACSAVE\\ AND JUMPING TO
THE APPROPRIATE HANDLER.
.SKIP 2
^THE LOW 14 BITS IN A BREAK FOR A STORED OR SUBCHECK COMMAND IS A
NEGATIVE OFFSET FROM THE LOW SEGMENT  TOP INTO THE BROKEN INSTRUCTION.
^A TYPICAL SEQUENCE TO GET THE BROKEN INSTRUCTION IS:  ^^MOVE U,; ORCMI U,BRKMSK;
MOVE,@BROKE$\\.  ^USUALLY THIS BROKEN INSTRUCTION IS PLACED IN LOCATION
^&^^INSTR\\\&.  ^WHEN THE USER'S PROGRAM IS TO CONTINUE, ROUTINE ^&^^TINUE\\\&
MAY BE ENTERED TO RESTORE THE ACS AND PERFORM THE INSTRUCTION.
.SKIP 2
^THE SKELETON FORMAT OF A STORED COMMAND NODE IS A BREAK STOP FLAG
IN BIT 0 AND A LENGTH FIELD IN BITS 12-17 OF THE FIRST WORD.  ^^TRACE\\
AND ^^SUBSCHECK\\ BREAKS DO NOT HAVE CORRESPONDING NODES.
.SKIP 2
6.1  ^&^^ONCALL\\ BREAKS\&
.SKIP 2
^^CALL\\. BREAKS ARE SET BY DEBUGGER INITIALIZATION ON THE PROLOGUE
JUMP (TO THE SUBPROGRAM BEGINNING) AND THE EPILOGUE ^^JRA\\ RETURN(S).
^THEY ARE NOT REMOVED.  
.SKIP 2
^A PROLOGUE 
BREAK HAS A ZERO AC FIELD WHILE A RETURN BREAK HAS A NONZERO
AC FIELD.  ^THE ADDRESS FIELD OF A PROLOGUE BREAK POINTS
PAST ITS SUBPROGRAM SYMBOL BLOCK HEADER.  ^THE CORRESPONDING ^^CALL\\
NODE HAS THIS SAME POINTER IN THE RIGHT HALF OF THE FIRST NODE 
WORD.  ^BIT 1 IS SET IF AN ^^ONCALL\\ COMMAND HAS BEEN GIVEN FOR THE
SUBPROGRAM.
.SKIP 2
^A RETURN BREAK IS ONLY AN OPCODE CHANGE AND DOES NOT
INVOLVE IDENTIFICATION OF A NODE.
.TEST PAGE 5
.TEST PAGE 5
.SKIP 2
6.2  ^&^A^T AND ^^BEFORE RETURN\\ BREAKS\&
.SKIP 2
^AN ^A^T. BREAK IS PLACED ON THE FIRST INSTR OF A STATEMENT OR THE
EPILOGUE.  ^THE RIGHT HALF OF THE FIRST NODE WORD GIVES THE BREAK ADDRESS.
^THE LEFT AND RIGHT HALVES OF THE SECOND WORD GIVE THE INITIAL AND 
CURRENT COUNT.
.SKIP 2
6.3 ^&^^SUBCHECK\\ BREAKS\&
.SKIP 2
^^SUB\\. BREAKS ARE PLACED ON COMPUTED ARRAY REFERENCES AND DO NOT
HAVE CORRESPONDING NODES.  ^A 12-BIT OFFSET INTO THE SYMBOL TABLE
IDENTIFIES THE ARRAY BEING CHECKED.  ^THE 12 BITS ARE SPREAD BETWEEN
THE AC, INDEX, AND ADDRESS FIELDS OF THE ^^LUUO\\.  ^^ATSUB\\. BREAKS
ARE A COMBINATION OF ^A^T. AND ^^SUB\\. BREAK.  ^THE SUBSCRIPT CHECKING
IS DONE FIRST.
.SKIP 2
6.3.1  ^&^USE OF SYMBOL TABLES\&
.SKIP 2
^THE 12-BIT OFFSET IS EXTRACTED AND ^^MANSYM\\ ADDED TO OBTAIN THE
ARRAY ENTRY ADDRESS.  ^THE VALUE FIELD IS THE BOTTOM OF THE ARRAY
UNLESS IT IS DUMMY (^^DMYFLG\\ SET), IN WHICH CASE THE SYMBOL VALUE POINTS
TO THE BOTTOM ADDRESS.  ^THE TOP OF THE ARRAY IS OBTAINED BY FIRST GETTING
THE ^^SCRIPT\\ ENTRY HEADER.  ^IF ARRAY IS VARIABLE-DIMENSIONED (RIGHT
HALF ISN'T A DIMENSIONALITY) THEN THE LEFT HALF IS NOT THE ARRAY SIZE
BUT A POINTER TO THE SIZE.
.SKIP 2
6.3.2  ^&^BREAK WITHIN ^I/^O STMT\&
.SKIP 2
^IF A COMPUTED REFERENCE WITHIN AN ^I/^O STMT IS OUT OF BOUNDS
THEN THE ARRAY NAME IS NOTED IN THE WORKSPACE AND THE STMT IS CONTINUED AND THE ARRAY NAMES ARE DISPLAYED WHEN THE STMT
FINISHES.
.SKIP 2
6.4  ^&^O^N (STORE) BREAKS\&
.SKIP 2
^O^N. BREAKS ARE PLACED ON STORE-TYPE INSTRUCTIONS.  ^AN 8-BIT FIELD
SPREAD OVER THE INDEX AND ADDRESS FIELDS IDENTIFIES THE CORRESPONDING
NODE.  ^FOUR FLAGS ARE IN THE AC FIELD.  ^^AT, SUBCHECK\\ AND ^O^N
BREAKS, ON THE SAME INSTR, ARE CHAINED TOGETHER IN THE BROKEN AREA WITH
ANY ^^AT., SUB.,\\ OR ^^ATSUB.\\ BREAK FIRST, AND THE LEAST RECENTLY
SETUP ^O^N. POINTING TO THE MACHINE INSTRUCTION.
.SKIP 2
^THE ^^ON ID\\ IS  HELD IN THE FIRST NODE WORD IN BITS 1-8 AND THE
RELATION CODE IN BITS 9-11.
.SKIP 2
.NOFILL
.LEFT MARGIN 15
^THE RELATION CODES ARE AS FOLLOWS:
.SKIP 2
0   ALWAYS     2   ^L^T
1   ^E^Q         4   ^L^E
2   ^N^E         5   ^G^E
               6   ^G^T
.FILL
.SKIP 2
.LEFT MARGIN 5
^THE RIGHT HALF OF THE FIRST NODE WORD HOLDS THE ELEMENT ADDRESS
(ZERO, IF WHOLE ARRAY OR RELATIVE +1, IF DUMMY).  ^BIT 0
OF THE SECOND NODE WORD IS A FLAG FOR TRIGGERED BY INPUT; THE REST OF THE LEFT HALF IS ZERO.
^THE RIGHT HALF IS THE SYMBOL ADDRESS FOR THE SCALAR OR ARRAY.  ^THE
THIRD NODE WORD HOLDS THE CODE ADDRESS LIMITS BETWEEN WHICH STORE
MONITORING IS SETUP.  ^ONE OR TWO OPTIONAL WORDS HOLD THE COMPARE
CONSTANT.
.LEFT MARGIN 0
.SKIP 2
.CENTER
^FIGURE 8
.CENTER
^CHAINING OF ^BREAKS ^EXAMPLE
.NOFILL
.TAB STOPS 16 43
.SKIP 2
	!--------------------------!
	/	/
	_\	_\
	!	!
    ^^F4	!--------------------------!
OBJECT\\      :---! BREAK ^^LUUO !   14 BITS   !
INSTRUCTIONS:	!--------------------------!
            :	!	!
            :	/	/
            :	_\	_\
            :	!--------------------------!
            :
            :
            :
            :
            :
            :	!--------------------------!    <--^&^^TOPFF$\\\&
            :	/	/
            :	_\	_\
            :	!--------------------------!
            :	!  ORIGINAL OBJECT INSTR   !<---:
            :	!--------------------------!    :
            :	!	!    :
            :	!--------------------------!    :
            :-->!  BREAK ^^LUUO !   14 BITS	!----:
	!--------------------------!    <--^&BROKE$\&\\
.TEST PAGE 10
.FILL
.SKIP 2
.LEFT MARGIN 5
 
.FILL
6.5  ^&^TRACE ^BREAKS\&
.SKIP 2
^^A JRST, JUMP\\, OR ^^CAM\\ INSTRUCTION MAY BE MADE A TRACE BREAK BY
ZEROING ALL OPCODE BITS EXCEPT THE MODE BITS (6-8).  ^NOTE
THAT THOSE BITS IN A ^^JRST\\ ARE THE ^^ALWAYS\\ MODE IN A ^^JUMP\\
OR ^^CAM.\\  ^FOR A LOGICAL ^I^F THAT ^&^^JRST\\\&S AROUND THE CONTROLLED
SUBSTATEMENT, THE BREAK IS PLACED ON THE ^^CAM\\ INSTR PRECEDING 
THE ^^JRST\\ AND THE ^^JRST\\ IS CHANGED TO A ^^JSP\\ TO FLAG THIS.
^FOR A LOGICAL ^I^F THAT ^&^^JUMP\\\&S AROUND THE SUBSTATEMENT, BIT 18 IS 
SET.  ^THESE CODE MODIFICATIONS MEAN THAT NO ROLL OR BROKEN INSTRUCTION
SPACE IS REQUIRED.
.PAGE
.SKIP 3
7.  ^^COMMAND CYCLE\\    [SEE ^CHART 1]
.SKIP 2
^THE COMMAND CYCLE IS ENTERED AFTER DEBUGGER INITIALIZATION AND AFTER
A BREAK STOP, OR AN OPSYS DIAGNOSED ERROR, TO DECODE AND EXECUTE 
DEBUGGER COMMAND STRINGS. ^ANY OPSYS INPUT/OUTPUT RECORD WILL BE TERMINATED.
.SKIP 2
^A COMMAND STRING MAY BE
SEVERAL LINES LONG.  ^AN ERROR AT ANY POINT INVALIDATES THE ENTIRE
STRING AND THE CYCLE IS ENTERED AT ITS BEGINNING.
.SKIP 2
7.1  ^&^USE OF ^OPSYS TO ^READ ^COMMAND ^DATA\&
.SKIP 2
^COMMAND INPUT IS DONE BY USING ^^LUUO\\S ^I^N. TO PASS AN INPUT FORMAT
TO OPSYS, AND ^^DATA\\. TO READ NUMBERS.  ^G FORMAT, WITH
AN UNSPECIFIED FIELD WIDTH, IS USED FOR FREE-FORM INPUT.  ^THE DATA TYPE
IS GIVEN IN THE AC FIELD OF EACH ^^DATA. LUUO\\.  ^THE OPSYS ^^IBYTE.\\ ROUTINE IS USED TO
READ EACH CHARACTER.
^WHEN READING NUMBERS, THE FIRST CHARACTER IS READ AND STORED IN ^^OPSYS\\ DATA LOCATION ^^CH.SAV\\.
.SKIP 2
.SKIP 2
7.2 ^&^GLOBAL ^VARIABLES\&
.SKIP 2
^LOCATION ^&^^GLOBAL\\\& HOLDS THE DEFAULT PROGRAM SYMBOL POINTER GOTTEN
FROM ^&^^CURRENT\\\& AND UPDATED BY STORED-COMMAND DECODE.  ^AC^F ZERO
INDICATES THAT WE ARE DECODING THE STORED COMMAND OF A COMPOUND STRING.
^AC^H IS ZERO UNLESS BIT 0 IS SET BECAUSE THE KEYWORD '^^STOP\\' WAS
SEEN.  ^AC^Y POINTS AT A FREE WORD IN THE WORKSPACE AS A STORED COMMAND
NODE IS BUILT.  ^AC^X IS SET UP TO WHERE THE NODE IS TO BE INSERTED
IN ITS ROLL (IDENTIFIED BY THE LEFT HALF UNLESS ^O^N).
.SKIP 2
.TEST PAGE 5
7.3 ^&^COMMAND ^DISPATCH\&
.SKIP 2
^AT ^^GETSQZ\\ THE FIRST WORD OF A COMMAND IS READ.  ^IF THE FOLLOWING
CHARACTER INDICATES THAT THIS IS AN ASSIGNMENT THEN WE JUMP TO ROUTINE
^^STORE\\ ELSE WE LOOK UP THE COMMAND IN TABLE ^^SQZTAB\\ AND THE OFFSET 
FROM THE START OF THIS TABLE IS HELD IN AC^W.  ^THE CORRESPONDING
ROUTINE IS JUMPED TO UNLESS THE COMMAND IS NOT ALLOWED ATTACHED.
.SKIP 2
7.4  ^&^COMMAND ^NODE ^INSERTION IN ^ROLL\&
.SKIP 2
^PARTS OF ROLLS ABOVE AND BELOW THE INSERTION POINT (IN AC^X) ARE MOVED
UP/DOWN TO MAKE ROOM FOR THE NEW NODE.  ^ONLY IF THERE IS ENOUGH ROOM
IS A PREVIOUS NODE (AND BREAK IF ^A^T) REMOVED EXCEPT FOR ^O^N WHERE
CONFLICTING COMMANDS ARE KILLED BEFORE ATTEMPTING INSERTION.
.SKIP 2
7.5 ^&^INPUT ^SUBROUTINES\&
.SKIP 2
^ALL ROUTINES ARE CALLED BY ^^PUSHJ P\\, TO INPUT ELEMENTS OF COMMANDS.
.SKIP 2
7.5.1 ^&^BASIC ROUTINES\& [SEE ^CHART 4]
.SKIP 2
7.5.1.1 ^^ACCEPT \\SETS UP COMMAND INPUT FROM THE ^^TTY\\ USING THE ^^IN.#LUUO\\.  ^ACS ^T AND
^U DESTROYED.  ^^WIN\\ READS ONE ASCII CHAR RIGHT ADJUSTED IN AC^V.
^NULL INDICATES END-OF-LINE.  ^^SKIP\\ RETURNS THE NEXT NON-BLANK
CHAR IN AC^V.  ^^SKIPS\\ MAKES SURE THAT THE CHAR IN AC^V IS NON-BLANK.
.SKIP 2
7.5.1.2 ^^FIRSCH\\ READS A NON-BLANK CHARACTER. ^IF IT WAS NOT A DIGIT, PLUS,
MINUS, OR DOT THEN IT RETURNS THE CHARACTER IN AC ^T. ^ELSE THE NUMBER
IS READ BY ^^XCT\\ING THE ^^DATA. LUUO\\ AT THE INCREMENTED
RETURN ADDRESS. ^THE NON-BLANK DELIMITING CHAR IS LOADED INTO AC ^T
FROM THE ^^OPSYS\\ BUFFER BYTE-POINTER AND RETURNED TO THE
CALLER AFTER THE ^^DATA.#LUUO\\.
 ^AC ^U IS DESTROYED.  ^^TSKIP\\ RETURNS THE 
NEXT NON-BLANK CHAR IN AC ^T.  ^^STOP\\ EXPECTS A NON-BLANK CHAR IN AC ^T
BUT IMMEDIATELY MOVES IT TO AC^V.  ^IF A WORD ISN'T PRESENT (THE
CHAR IS SPECIAL) IT RETURNS IMMEDIATELY.  ^IT GIVES AN ERROR IF THE
WORD IS NOT '^^STOP\\' ELSE IT SETS THE STOP BIT AND RETURNS
THE NEXT NON-BLANK CHAR.  ^AC^W IS DESTROYED.
.SKIP 2
7.5.1.3  ^^SQZIN\\ RETURNS A WORD (VARIABLE OR LABEL NAME) IN SQUOZE
FORMAT IN AC^W.  ^IT EXPECTS THE FIRST CHAR OF THE WORD IN AC^V.  ^IF NOT,
IT RETURNS ZERO IN AC^W WHILE ^^SQZINS\\ GIVES AN ERROR.  ^^SQZINK\\
READS THE NEXT NON-BLANK CHAR BEFORE CALLING ^^SQZIN\\.  ^^SQZINS\\
RETURNS THE NON-BLANK CHAR DELIMITING THE WORD.
.SKIP 2
7.5.1.4  ^^INPUT\\ READS DATA OF THE TYPE GIVEN BY AC^W INTO THE ONE
OR TWO WORDS POINTED TO BY AC^A.  ^IT WILL READ IT IN OCTAL OR ASCII
IF THE FIRST CHAR READ IS A DOUBLE OR SINGLE QUOTE.  ^THE NON-BLANK
DELIMITING CHAR IS RETURNED IN AC ^T.  ^ACS ^^A, V\\ AND ^U ARE DESTROYED.
.SKIP 2
7.5.2  ^&^SYMBOL LOOKUP ROUTINES\&  [SEE ^CHART 5]
.SKIP 2
7.5.2.1 ^^GLOOK\\ RETURNS A PROGRAM'S SYMBOL POINTER IN AC^V GIVEN ITS
NAME IN AC^W.  ^FOR ALL THESE ROUTINES, AC^V IS POSITIVE IF THE SYMBOL
IN UNDEFINED.  ^^LOOK\\ RETURNS A LOCAL VARIABLE OR LABEL'S SYMBOL
POINTER IN AC^V AND ITS VALUE IN AC^A GIVEN ITS PROGRAM SYMBOL POINTER
IN AC^V.  ^^IDENT\\2 MOVES THE CHAR IN AC^V INTO AC ^T AND CALLS ^^LOOK\\
WITH THE PROGRAM SYMBOL POINTER GIVEN IN AC^B.
.SKIP 2
7.5.2.2  ^^IDENT\\ SETS AC^B TO THE DEFAULT PROGRAM GIVEN BY LOCATION
^^GLOBAL\\ OR READ DELIMITED BY A SLASH AND CALLS ^^IDENT\\2 UNLESS ARGUMENT
NOTATION IS USED.  ^IF SO, A NUMBER OF ERRORS CAN BE GIVEN.  ^IF THERE
ARE NONE THEN ITS ADDRESS IS RETURNED IN THE LEFT HALF OF AC^A WITH
RIGHT HALF POINTING TO THE ^^PUSH\\ INSTR IN THE PROLOGUE THAT 
REFERENCES THE ACTUAL ARG AND BIT 18 SET AS A FLAG.
.SKIP 2
7.5.3  ^&^ARRAY ELEMENT ROUTINE ^^LOCATE, IDENTL\\\&  [SEE ^CHART 6]
.SKIP 2
7.5.3.1  ^^LOCATE\\ CALLS ^^^^IDENT\\ TO SET UP A PROGRAM POINTER IN AC^B,
A VARIABLE POINTER IN AC^V AND ITS VALUE WORD IN AC^A.  ^IT RETURNS
THE VARIABLE TYPE IN AC^W, THE DELIMITING CHAR IN AC^T AND FOR ARRAYS, THE
ELEMENT ADDRESS IN RELATIVE AND ABSOLUTE FORMS IN ACS ^E AND ^A.  ^IF
ARRAYS SUBSCRIPTS ARE NOT GIVEN THEN IT RETURNS AC^A ZERO.  ^IF AC^F
IS ZERO THEN SECTION NOTATION IS RECOGNIZED.  ^^LOCATE\\ DESTROYS ACS
^^U, C, D, G\\ AND ^H.
.SKIP 2
^NOTE THAT FOR A VARIABLE-DIMENSIONED DUMMY ARRAY THAT APPEARS IN AN ATTACHED
COMMAND, THE RELATIVE ELEMENT ADDRESS IS CALCULATED
FROM THE SPECIFIED SUBSCRIPTS USING BOUNDS INFORMATION THAT MAY
DIFFER FROM THAT IN FORCE AT THE TIME THAT THE STORED ATTACHMENT
IS EXERCISED.
.SKIP 2
7.5.3.2  ^IF AC^F IS ZERO THEN SECTION NOTATION IS RECOGNIZED BY ^^LOCATE\\.
^AC^F WILL BE SET NEGATIVE.  ^AC^J MUST BE ZERO.  ^^LOCATE\\ BUILDS A LIST
IN THE WORKSPACE OF INCREMENT AND RANGE WORD-PAIRS POINTED TO BY AC^Y.
^EACH RANGE WORD GIVES THE NUMBER OF ELEMENTS IN THAT SECTION DUPLICATED
IN BOTH HALVES.  ^ACS ^E AND ^A REFLECT THE CONSTANT SUBSCRIPTS.
^AC^J IS DESTROYED.
.SKIP 2
7.5.4  ^&^PROGRAM POSITION ROUTINES\&  [SEE ^CHART 7]
.SKIP 2
7.5.4.1  ^^ATLOC\\ RETURNS A PROGRAM ADDRESS IN AC^A, A PROGRAM SYMBOL
POINTER IN AC^B, A POINTER TO THE LAST STMT LENGTHS BYTE IN AC ^C, AND THE
DELIMITING CHAR IN AC^V.  ^ACS ^T, ^U AND ^W ARE DESTROYED.
.SKIP 2
7.5.4.2  ^^ADDLOC\\ MODIFIES A PROGRAM ADDRESS IN AC^A GIVEN A POSITIVE
OR NEGATIVE EXECUTABLE STATEMENT COUNT IN AC^V AND A STMT LENGTHS BYTE
POINTER IN AC ^C WHICH IS LEFT POINTING TO THE LAST BYTE.  ^IF AC^V 
IS POSITIVE THEN ONLY ACS ^U AND ^V ARE DESTROYED ELSE ACS ^T, ^W AND ^D
ARE ALSO DESTROYED.
.SKIP 2
7.5.4.3  ^^BETWEEN\\ RETURNS A LOWER AND UPPER PROGRAM ADDRESS IN ACS
^G AND ^H AND THE STMT LENGTHS BYTE POINTER FOR THE LOWER IN AC^C.  ^IF
NO ^^BETWEEN\\ OR ^A^T PHRASE IS PRESENT, DEFAULTS OF THE START 
AND END OF THE CURRENT PROGRAM ARE RETURNED.  ^THE CURRENT CHAR IS GIVEN
IN AC ^T BUT IS IMMEDIATELY MOVED TO THE DELIMITING CHAR AC^V.
.PAGE
8. ^^STORED COMMAND DECODE\\
.SKIP 2
8.1 ^&^A^T AND ^^BEFORE RETURN FROM\\ ^DECODE\& [^SEE ^CHART 8]
.SKIP 2
^AFTER DECODING THE ^A^T OR ^^RETURN\\ COMMAND  AND BUILDING A TWO-WORD
NODE IN THE WORKSPACE, THE ^A^T ROLL IS SEARCHED FOR AN IDENTICAL
BREAK ADDRESS.  ^IF FOUND, AC ^J (WHICH WAS ZERO) IS SET TO THE LENGTH
OF THAT NODE WHICH WILL BE DELETED.  ^THE LEFT HALF OF AC^J IS SET TO
2 SINCE THE ^A^T ROLL POINTER IS SECOND AFTER THE ^^ONCALL\\ ROLL POINTER
IN THE DATA BASE.  ^AC^X IS LEFT POINTING TO WHERE THE NEW NODE WILL BE
INSERTED.
.SKIP 2
8.2 ^&^^ONCALL\\ ^DECODE\& [SEE ^CHART 9]
.SKIP 2
^A BASIC ONE WORD NODE IS PLACED IN THE WORKSPACE WITH AC^X POINTING TO
THE OLD NODE AND AC^J GIVING ITS LENGTH.
.SKIP 2
8.3 ^&^O^N (STORE) ^DECODE\& [SEE ^CHART 10]
.SKIP 2
^A THREE TO FIVE WORD NODE IS BUILT IN THE WORKSPACE BUT THE INSERTION POINT
IN THE ^O^N ROLL WILL BE DETERMINED AFTER ANY ATTACHMENTS ARE DECODED
AND THE NODE IS COMPLETE.  ^THE STATEMENT LENGTHS BYTE POINTER RETURNED
BY ^^BETWEEN\\ IS SAVED ON THE STACK.  ^IT POINTS BEFORE THE BYTES FOR THE AFFECTED STATEMENTS.
.SKIP 2
8.4 ^&^O^N ^COMMAND ^STORE\& [SEE ^CHART 11]
.SKIP 2
^BEFORE ATTEMPTING TO STORE THE ^O^N NODE THAT IS IN THE WORKSPACE,
^O^N NODES WITH INTERSECTING RANGES WITH THE NEW NODE ARE KILLED
(SEE 13.6.2).  ^INDICATION OF WHETHER ANY NODES WERE KILLED IS SAVED
ON THE STACKS.  ^AN ^I^D CODE IS SELECTED FOR THE NEW NODE AND FINALLY
INSERTION IS ATTEMPTED.
.SKIP 2
8.5 ^&^^ON\\ ^BREAK ^SETUP\& [SEE ^CHART 12]
.SKIP 2
^PLACING BREAKS REQUIRES TWO PASSES OVER THE CODE FOR THE SELECTED STATEMENTS
UNLESS THE ^O^N COMMAND SPECIFIED A DUMMY ARRAY.  ^THE FIRST PASS LOOKS
AT ALL UNINDEXED STORES FOR ONES THAT AFFECT THE SPECIFIED LOCATIONS.
 ^THE SECOND PASS PLACES BREAKS ON INDEXED STORES
INTO ARRAYS WHICH OVERLAP THE SPECIFIED LOCATIONS.  ^DUMMY ARRAYS ARE ASSUMED
NOT TO OVERLAP ANYTHING ELSE.
.SKIP 2
^THE FOUR AC BITS ARE USED FOR FLAGS IN EACH ^O^N BREAK.  ^BIT 9 IS
UNUSED.  ^BIT 10 IS SET IF THE BREAK IS PLACED NEAR THE 
BEGINNING OF AN INPUT STATEMENT THAT HAS AN UNSUBSCRIPTED ARRAY IN ITS
VARIABLE LIST.  ^THIS IS CALLED A WHOLE BREAK AND ALWAYS 
HAPPENS (WITHOUT EXERCISING ATTACHMENTS).  ^BIT 11 IS SET FOR
AN INDEXED STORE TO FORCE CHECKING THAT THE STORE AFFECTS THE 
SPECIFIED LOCATIONS. ^BIT 12 HAS HISTORICAL SIGNIFICANCE ONLY.
.SKIP 2
^NOTE THAT THE ^O^N FACILITY DOES NOT DETECT CHANGES TO SUBROUTINE
ACTUAL ARGUMENTS OR AN ^^ENCODE\\ DESTINATION.  ^IT DOES NOT DETECT CHANGES
MADE BY ^^NAMELIST\\ INPUT.
.SKIP 2
8.5.1 ^&^INITIALIZATION\&
.SKIP 2
^THE FIRST SETUP PASS IS PREPARED BY SETTING AC ^E TO THE ELEMENT ADDRESS,
OR ZERO IF A WHOLE ARRAY WAS SPECIFIED.  ^IT WILL BE FLAGGED NEGATIVE FOR THE
SECOND PASS. ^ACS ^A AND ^B ARE SET TO THE BOTTOM AND TOP OF THE ARRAY
OF LOCATIONS MONITORED. ^ACS ^G AND ^H ADDRESS THE SELECTED STATEMENTS AND ARE
SAVED ON THE STACK (0(^P),-1(^P)).  ^THE STATEMENT LENGTHS BYTE POINTER
FROM THE STACK IS HELD IN AC ^H FOR USE WITH THE STATEMENT ADDRESS
IN AC ^G IN STEPPING THROUGH THE MONITORED STATEMENTS.
.SKIP 2
8.5.2 ^&^CODE ^INSPECTION FOR ^UNCOMPUTED ^REFERENCES\&
.SKIP 2
^THE BASIC PROCEDURE IS TO STEP THROUGH THE SPECIFIED STATEMENTS,
LOOKING AT THE END OF EACH FOR A STORE INSTRUCTION. ^^ONSET\\ IS
CALLED TO PERHAPS PLACE EACH BREAK.  ^INSTRUCTIONS TERMINATING ^D^O LOOPS
MUST BE SCANNED TO FIND THE TRUE END OF A STATEMENT AND INPUT STATEMENTS 
MUST BE GIVEN SPECIAL TREATMENT.
.SKIP 2
8.5.3 ^&^BREAKS ON ^COMPUTED ^REFERENCES\&
.SKIP 2
^THE SYMBOL TABLE FOR THIS SUBPROGRAM IS SCANNED FOR ARRAYS WHICH
OVERLAP THE ELEMENT OR ARRAY SPECIFIED IN THE COMMAND.  ^THE 
REFERENCE OFFSETS IN THE ^^SCRIPT\\ ENTRY FOR EACH ARRAY (SEE 4.1.5)
ARE SCANNED FOR THOSE IN THE STATEMENT(S) SPECIFIED.
^ROUTINE ^^ONSET\\ PLACES BREAKS ON THE STORE-TYPE
REFERENCES.
.PAGE
9. ^^DIRECT ONLY COMMAND DECODE\\
.SKIP 2
.TEST PAGE 5
9.1 ^&^^SUBCHECK\\ ^DECODE\&  [SEE ^CHART 14]
.SKIP 2
^THIS ROUTINE IS ENTERED FROM COMMAND DISPATCH TO PLACE OR REMOVE ^^SUBCHECK\\
BREAKS.  ^IT COULD BE CALLED BY SETTING AC ^H PLUS OR MINUS AND AC ^V
ZERO.  ^IF ALL BREAKS ARE REMOVED AND THE FIRST WORKSPACE WORD
IS ZERO AS SET BY THE ^^CLEAR\\ ROUTINE WHICH ^^KILL\\S ALL OTHER BREAKS,
THEN ALL DISPLACED INSTRUCTION SPACE IS RETURNED TO FREE CORE.
.SKIP 2
9.2 ^&^^TOPGET\\ TO ^OBTAIN ^DISPLACED ^INSTRUCTION ^WORD\&
.SKIP 2
^THIS ROUTINE IS CALLED BY ^^PUSHJ\\ ANY TIME A WORD IS NEEDED FOR AN INSTRUCTION
DISPLACED BY A BREAK.  ^IF POSSIBLE, THE WORD IS OBTAINED FROM THE
AVAILABLE LINKED-LIST WHICH HAS ITS HEAD IN THE LOCATION ^^BRIST$\\.
 ^THE LINKS ARE 14
BIT NEGATIVE OFFSETS FROM LOCATION ^^BROKE$\\.  ^IF THE LIST IS EMPTY,
A LARGER AREA IS OBTAINED AND THE OLD AREA IS RETURNED TO LINKED FREE CORE.
.SKIP 2
^^TOPGET\\ RETURNS A NEGATIVE OFFSET IN AC ^U AND THE CORRESPONDING ADDRESS
IN AC ^W.  ^AC ^T IS DESTROYED.  ^IF CORE CANNOT BE EXPANDED WHEN NEEDED,
THEN WHATEVER COMMAND IS IN PROGRESS IS ABORTED AND THE COMMAND
CYCLE REENTERED.
.SKIP 2
9.3 ^&^^TRACE\\ ^DECODE AND ^BREAK ^HANDLE\&
.SKIP 2
^THIS ROUTINE IS ENTERED FROM COMMAND DISPATCH TO PLACE OR REMOVE
ALL ^^TRACE\\ BREAKS.  ^IT COULD BE CALLED BY SETTING AC ^H 
TO ZERO OR 1^B0 AND AC ^V TO ZERO.  ^IT SETS A FLAG WORD
SO THAT ^^ONCALL\\ BREAKS WILL REPORT CALLS AND RETURNS.  ^IF WE PAUSE
AFTER REPORTING A BREAKS, THEN LOCATION ^&^^DRAIN\\\& IS SET MINUS SO THAT IF WE ^G^O SOMEWHERE
ELSE, THE ^^HISTORY\\ ENTRY FOR THE POSSIBLE JUMP IS FORGOTTEN.
.SKIP 2
9.3.1 ^THE FLAG WORD ^&^^TROUT\\\& IS SET TO ZERO WHEN TRACING IS OFF,
POSITIVE WHEN IT'S ON, AND NEGATIVE WHEN EACH CHANGE FROM SEQUENTIAL
EXECUTION IS TO BE REPORTED TO THE USER, IN ADDITION
TO BEING RECORDED IN THE ^^HISTORY\\ TABLE. ^THE WORD
^^^&PAUSE\\\& IS SET NON-ZERO TO STOP EXECUTION AFTER EACH REPORT 
EXCLUDING CALLS AND RETURNS.
.SKIP 2
9.3.2 ^^TRACE\\ BREAKS ARE PLACED BY LOOKING THROUGH ALL THE OBJECT
INSTRUCTIONS FOR EACH SUBPROGRAM.  ^AC ^F IS USED TO CYCLE THROUGH
^^MANSYM\\. ^AC ^E IS USED TO CYLE THROUGH THE INSTRUCTIONS. ^AC ^D
IS SET TO THE PROLOGUE ADDRESS FOR EACH SUBPROGRAM SO THAT ^^RETURN\\ STMTS
CAN BE RECOGNIZED SINCE THEY ^^JRST\\ TO THE EPILOGUE (WHICH FOLLOWS
THE PROLOGUE).  ^SEE ^CHART 16.
.SKIP 2
9.4 ^&^^HISTORY\\ ^COMMAND\&
.SKIP 2
^THE ^^HISTORY\\ TABLE IS SCANNED FROM THE CURRENT (MOST RECENT) WORD
GIVEN BY THE RIGHT HALF OF LOCATION ^^HISTORY\\.  ^IF
THE WORD IS NEGATIVE, IT'S A CALL OR RETURN ENTRY; A
CALL IF ADDRESS INSIDE ^^MANSYM\\, ELSE THE ADDRESS RETURNED TO.  ^IF
THE ^^HISTORY\\ WORD IS POSITIVE, THEN IT'S A ^^GOTO\\ UNLESS BIT 18 IS
SET FOR '^^IF TRUE AT\\' OR BIT 1 SET FOR '^^CMD GOTO\\'.
.SKIP 2
9.5 ^&^^USE\\ ^COMMAND\&
.SKIP 2
^THE LOGICAL FILE NUMBER BEING USED IS HELD IN ^&^^USECHAN\\\&
AND THE FILENAME IN ^&^^USENAME\\\&.  ^THE LAST FOUR BITS OF THE WORD
IN OPSYS TABLE ^&^^DATTB\\.\& ARE SET TO ONE OUTPUT BUFFER TO
CONSERVE SPACE.
.SKIP 2
9.6 ^&^MAGTAPE ^COMMANDS\&
.SKIP 2
^THE ^^MTOP\\ ROUTINE FIRST CHECKS THE GIVEN LOGICAL FILE NUMBER FOR
PLAUSIBLE RANGE.  ^IF COMMAND IS ^^RELEASE\\ THEN AN '^^FCALL.0\\,' \\
IS GIVEN WITH THE FILE NUMBER IN AC 0.  ^THE OTHER COMMANDS ARE ORDERED
IN THE COMMAND TABLE (^^SQZTAB\\) SO THAT SUBTRACTION OF THE
ADDRESS FOR THE FIRST ONE IN THE TABLE GIVES THE CORRECT AC CODE
FOR THE ^^MTOP.#LUUO.\\
.PAGE
10. ^^OUTPUT SUBROUTINES\\
.SKIP 2
^ALL ROUTINES ARE CALLED BY ^^PUSHJ P,\\ TO PROCESS ELEMENTS OF A
^^FORTRAN\\ PROGRAM INSTRUCTION ADDRESS.
.SKIP 2
10.1 ^^SQZDATA\\ RETURNS THE ^^ASCII\\ CHARACTERS IN ACS ^G AND ^H OF
A SQUOZE NAME GIVEN IN AC ^W.  ^ACS ^T AND ^V ARE DESTROYED.  ^^SQZOUT\\
OUTPUTS A NAME.  ^THERE MUST BE AN ^A CODE IN THE ^^FORMAT\\  LIST
GIVEN TO OPSYS BY THE ^^OUT.#LUUO\\.
.SKIP 2
10.2 ^^INTERN\\ RETURNS THE SYMBOL TABLE ADDRESS IN AC ^A AND RIGHT HALF
OF VALUE IN AC ^W OF THE SYMBOL CLOSEST AND LESS THAN THE ADDRESS
GIVEN IN AC ^T.  ^AC ^W IS MINUS-ONE IF NONE WAS FOUND.  ^ACS ^U AND ^V
ARE DESTROYED.
.SKIP 2
10.3 ^^IDLOC\\ SYMBOLICALLY OUTPUTS AN ADDRESS GIVEN IN AC ^T. 
^^IDLOCA\\ OUTPUTS ONE IN AC ^A.  ^AC ^J IS SET ZERO IF A PROGRAM 
NAME IS NOT WANTED OR MINUS-ONE IF A STMT OFFSET (LABEL &+OFFSET) IS
WANTED EVEN IF IT'S ZERO.  ^THERE MUST BE APPROPRIATE CODES IN THE ^^FORMAT\\
LIST GIVEN TO OPSYS BY THE ^^OUT.#LUUO\\.  ^THE TYPICAL CODES FOR A
COMPLETE ADDRESS ARE '2^A7,^A1,^I4'.  ^THE '2^A7' IS FOR A PROGRAM NAME,
SLASH AND STMT-LABEL NAME (MAY BE BLANK).  ^THE '^A1' IS FOR THE SIGN OF
THE FOLLOWING OFFSET (MAY BE BLANK).  ^IF THE ADDRESS GIVEN IS SOMEWHERE
IN THE LIBRARY PROGRAMS, AN ATTEMPT IS MADE TO TRACE THROUGH THE CHAIN
OF ^^JSA\\S OR ^^PUSHJ\\S FOR A ^^FORTRAN\\ INSTRUCTION ADDRESS.  ^IF
THE GIVEN OR DERIVED ADDRESS IS NOT INSIDE A PROGRAM THAT HAS SYMBOLS, THEN
A QUESTION MARK IS OUTPUT.  ^ONLY ACS ^C - ^F ARE PRESERVED. ^SEE ^CHART 17.
.SKIP 2
12.  ^&^^BREAK HANDLING\&\\
.SKIP 2
^REFER TO SECTION 6 ON ^BREAK ^MANAGEMENT.
.SKIP 2
/12.1 ^&^^ONCALL\\ ^BREAKS\& [SEE ^CHART 20]
.SKIP 2
^THE PROLOGUE BREAK SETS THE ENTRY POINT (WHERE AC16 WAS STORED BY THE
^^JSA\\) TO THE SYMBOL POINTER FOR THE CALLING PROGRAM SO THAT LOCATION
^&^^CURRENT\\\& WILL ALWAYS IDENTIFY THE SYMBOLS FOR THE CURRENT PROGRAM
WITH SYMBOLS.  ^IF THE CALL IS NOT REPORTED THE LOCATION ^&^^GLOBAL\\\& IS
FLAGGED MINUS SO THAT A SUBSEQUENT ^A^T. BREAK WILL REPORT THE
NEW PROGRAM NAME.  ^AC ^J IS ZEROED SO THAT IF AN ERROR OCCURS IN A LIBRARY
SUBPROGRAM, A TRACE OF '^^JSA\\ 16,' CALLS WILL END WITH THIS PROGRAM.
.SKIP 2
12.2 ^&^A^T AND ^^BEFORE RETURN\\ ^BREAKS\& [SEE ^CHART 21]
.SKIP 2
^THE HANDLER IS ENTERED FROM THE ^^SUBCHECK\\ HANDLER IF THE BREAK WAS
A COMBINATION ^^ATSUB.\\, WITH THE BREAK ^^LUUO\\ IN AC ^F AND BIT 0 SET
IF THE SUBSCRIPT WAS OUT-OF-BOUNDS.  ^IF THE BREAK EXECUTION COUNT
IN THE NODE REACHES ZERO, THEN THE BREAKS HAPPENS.  ^AN EPILOGUE
BREAK IS RECOGNIZED BY THE PRECEDING PROLOGUE ^^ONCALL\\ BREAK.
.SKIP 2
12.3 ^&^^SUBCHECK\\ ^BREAKS \& [SEE ^CHART 22]
.SKIP 2
^LOCATIONS ^&^^SUBINS\\\& AND ^&^^SUBSYM\\\& ARE SET TO THE BROKEN INSTRUCTION
AND ARRAY SYMBOL POINTER.  ^IF A BAD REFERENCE IS INSIDE AN ^I/^O STATEMENT
ITS SYMBOL POINTER IS REMEMBERED IN THE WORKSPACE SO THAT IT CAN BE
REPORTED WHEN THE STMT TERMINATES.  ^A SYMBOL IS RECORDED ONLY ONCE. 
^LOCATION ^&^^DRAIN\\\& IS A RELATIVE POINTER TO THE
NEXT AVAILABLE WORD IN THE WORKSPACE.  ^THE LEFT HALF MAY BE
FLAGGED MINUS FOR DATA BREAKS INSIDE ^I/^O.  ^IT IS CHECKED AFTER AN INPUT
OR ^^APR\\ ERROR IS INTERCEPTED.
.SKIP 2
12.4  ^&^O^N (^STORE) ^BREAKS\& [SEE ^CHART 23]
.SKIP 2
^THE FIRST (OR ONLY) ^O^N BREAK IN A CHAIN ACTUALLY EXECUTES THE DEPOSIT
AND SETS LOCATION ^&^^ONA\\\& TO THE DATA ADDRESS WITH BIT 0 AN ^I/^O
FLAG.  ^IF A BREAKS HAPPENS INSIDE ^I/^O THEN THE LEFT HALF OF THE SECOND
NODE WORD IS FLAGGED AND ^^^&DRAIN\\\&
IS FLAGGED MINUS.  ^WHEN THE INPUT STMT TERMINATES, THE WHOLE ^O^N
ROLL IS SCANNED FOR FLAGGED NODES.
.PAGE
13. ^^ATTACHABLE COMMANDS\\
.SKIP 2
13.1 ^&^DECODE OF ^ATTACHABLE ^COMMANDS\&
.SKIP 2
13.1.1 ^AN ATTACHED ^G^O COMMAND IS ONE WORD WITH BIT 1 SET.  ^A DIRECT
COMMAND WITH A POSITION MAKES AN ENTRY IN THE ^^HISTORY\\, CANCELLING 
PREVIOUS ENTRY IF ^^DRAIN\\ IS MINUS ONE.  ^THE ENTRY IS FLAGGED BY BIT 1.
^SEE ^CHART 24.
.SKIP 2
13.1.2 ^ASSIGNMENT DECODE CALLS ROUTINE ^^IDENTL\\ (SECTION 7.5.3) TO
DECODE THE ELEMENT OR SECTION.  ^ROUTINE ^^INPUT\\ IS CALLED TO DECODE
THE VALUE.  ^AN ATTACHED CMD HAS BITS 0-2 CLEAR AND BIT 4 SET IF DOUBLEWORD
VALUE.
^THE RELATIVE SYMBOL POINTER IS IN THE LEFT HALF.  ^^ARG:\\
NOTATION REQUIRES CALLING ROUTINE ^^INTERN\\ TO DETERMINE THE VARIABLE
IN THE CALLED PROGRAM.  ^THE ADDRESS OF THE ARGUMENT WAS RETURNED BY 
^^IDENTL\\ IN LEFT HALF OF AC ^A.  ^SEE ^CHART 25.
.SKIP 2
13.1.3 ^^OUTPUT\\ DECODE CALLS ROUTINE ^^LOCATE \\(SECTION 7.5.3) TO
DECODE THE ELEMENT OR SECTION.  ^AN ATTACHED CMD HAS BIT 0 SET, BIT
1 SET IF TEXT WANTED, AND THE TYPE CODE FROM THE SYMBOL TABLE IN
BITS 2-4.  ^THE RELATIVE SYMBOL POINTER (UNLESS ^^ARG:\\)
IS IN THE LEFT HALF.  ^^ARG:\\ NOTATION WILL USE THE TYPE AND ADDRESS OF THE
VARIABLE IN THE CALLING PROGRAM.  ^THE ADDRESS OF THE '^^PUSH\\' INSTRUCTION
THAT MOVES THE ARGUMENT INTO ITS DUMMY WAS RETURNED BY ^^LOCATE\\ IN THE
RIGHT OF AC ^A.  ^SEE ^CHART 26.
.SKIP 2
13.1.4 ^&^^KILL\\ ^COMMAND ^DECODE\&
.SKIP 2
^AN ATTACHED CMD HAS BIT 2 SET, THE ROLL ^I^D IN BITS 3-4, AND OTHER
INFO DEPENDENT ON THE TYPE OF NODE TO BE REVOKED.  ^FOR ^O^N, A 
SECOND WORDS HOLDS THE PROGRAMS LIMITS.
.SKIP 2
13.1.4.1 ^^KILLER\\ IS CALLED FROM ^^KILL\\ AT COMMAND LEVEL OR FROM $^^KILL\\
AT ATTACHED LEVEL WITH A NODE ^I^D (OFFSET FROM ADDRESS OF ^^CALL\\ ROLL
POINTER) IN AC ^D AND A MATCH ADDRESS IN AC ^A (OR AC ^E IF ^O^N).
^AC ^D IS DECREMENTED.  ^THE ROLL POINTER (BOTTOM AND TOP) IS
RETURNED IN AC ^C.  ^ACS ^T-^B ARE DESTROYED.  ^^KILLER\\ CALLS
^^KILLON\\ TO REMOVE ^O^N BREAKS AND ROUTINE
^^KATS\\ TO REMOVE AN ^A^T BREAK.  ^ROUTINE
^^KNODE\\ REMOVES A NODE FROM A ROLL BY MOVING THE NODES ABOVE IT, IN THE
ROLL, DOWN; GIVEN THE NODE ^I^D MINUS ONE IN AC ^D, THE ROLL POINTER 
IN AC ^C, THE NODE ADDRESS IN AC ^B, AND THE NODE LENGTH
IN AC ^V.  ^ACS ^T _& ^V ARE DESTROYED. ^SEE ^CHART 27.
.SKIP 2
13.1.4.2 ^^KILLON\\ IS GIVEN THE ELEMENT ADDRESS AND RELATIVE SYMBOL POINTER
IN LEFT AND RIGHT AC ^E.  ^THE CODE LIMITS ARE GIVEN IS ACS ^G _& ^H.
^IF AC ^E IS ZERO THEN ^&ALL\& NODES ARE REVOKED. ^SEE ^CHART 28.
.SKIP 2
13.1.5 ^^CLEAR\\ IS CALLED FOR A GENERAL ^^KILL. KATS\\ IS CALLED TO
REMOVE EACH ^A^T BREAK AND ^^KILLON\\ IS CALLED TO
REVOKE ALL ^O^N NODES. ^SEE ^CHART 29.
.SKIP 2
13.2 ^&^EXERCISE OF ^ATTACHED ^COMMANDS\& [SEE ^CHART 30]
.SKIP 2
^THE LOOP TO EXERCISE THE COMMAND NODES ATTACHED TO A STORED BREAK
COMMAND IS ENTERED AT ^^EXERCISE\\ WITH A NODE ^I^D IN AC ^F, STOP FLAG
IN BIT 0, NODE ADDRESS IN AC ^Y, NODE LENGTH IN AC ^X, AND LENGTH
OF BREAK PART OF NODE IN AC ^G. ^REFER TO 13.1
FOR FORMATS OF ATTACHED CMDS.
.SKIP 2
13.2.1 ^AN ATTACHED ASSIGNMENT TO A DUMMY ARRAY MUST COMPUTE THE ABSOLUTE
ADDRESS AND MAKE SURE THAT IT DOESN'T REFER TO A LABEL, CONSTANT OR
EXPRESSION IN THE CALLING PROGRAM ELSE WE REPORT A BAD ASSIGNMENT,
THE STOP BIT IS SET, AND THE EXERCISE LOOP IS CONTINUED.
.SKIP 2
13.2.2 ^IF THE ATTACHED ^^OUTPUT\\ IS AN ARGUMENT IT IS OUTPUT USING THE TYPE AND ADDRESS
TYPE OF THE CALLING PROGRAM.  ^THE OUTPUT IS IGNORED IF IT IS A DUMMY
ARRAY ELEMENT BUT ITS PROGRAM HAS NEVER BEEN CALLED.  ^THE ROUTINE $^^OUT60\\ WHICH
DOES THE OUTPUT EXPECTS THE VARIABLE ADDRESS IN AC ^A WITH BIT 1 SET FOR
TEXT FORMAT, THE VARIABLE TYPE IN AC ^B, THE SYMBOL POINTER IN AC ^C,
THE ^^SCRIPT\\ INDEX IN AC ^D, AND THE RELATIVE ELEMENT OF AN ARRAY IN AC ^J
WHICH IS USED TO COMPUTE SUBSCRIPTS OF THE ELEMENT.  ^^A FORMAT\\ WITH
THE RIGHT NUMBER OF DIMENSIONS IS BUILT IN THE WORKSPACE. ^SEE ^CHART 31.
.SKIP 2
13.2.3 ^THE $^^KILL\\ ROUTINE FIRST KILLS THE KILL ATTACHMENT ITSELF AND 
THEN CALLS ^^KILLER\\ TO PERFORM THE ^^KILL\\.  ^UPON RETURN, THE ROLL
IS SEARCHED FOR THE NODE BEING EXERCISED.
^IF THAT WAS WHAT WAS KILLED, THERE'S NOTHING MORE TO DO ELSE THE EXERCISE
LOOP IS CONTINUED.
.PAGE
.CENTER
^^SECTION III. DEBUGGER TABLE INITIALIZATION\\
.SKIP 2
14. ^^COMPILER OUTPUT\\
.SKIP 2
^THE ^^FORTRAN\\ COMPILER (^F40-^V26) ALWAYS OUTPUTS SOME SYMBOLIC
INFORMATION IN THE ^^REL\\ FILE.  ^THIS INCLUDES FLAG ^^ARRFLG\\
(FOR ARRAY SYMBOLS) AND A 3-BIT TYPE CODE BOTH IN THE VALUE
WORD OF A SYMBOL ENTRY.  ^IF THE /^D SWITCH IS SET THEN ADDITIONAL 
INFORMATION IS COLLECTED. (1)
.FOOTNOTE 4
.SKIP 1
---------------
.SKIP 1
(1) ^THE COMPILER CODE ROLL IS BYPASSED.
!
^THE INFORMATION IS NOT PRINTED EVEN IF AN OBJECT LISTING IS ENABLED.
.SKIP 2
^ONE WORD OF INFORMATION IS OUTPUT IN EACH SUB-BLOCK (HEADER=-1,,770001)
BUT SEVERAL WORDS COULD BE COLLECTED BEFORE OUTPUT.   ^THE LOADER PLACES
THESE WORDS IMMEDIATELY AFTER THE LOADER SYMBOL TABLE FOR DEBUGGER USE
IN INITIALIZATION.
.SKIP 2
^THERE ARE FOUR TYPES OF SPECIAL DEBUGGER DATA.  ^THE FIRST WORD OUTPUT
GIVES THE SUBPROGRAM NAME IN SQUOZE (ZERO IF MAIN PROG).  ^ONLY THE
SIGN BIT OF THE WORD IS SET.
.SKIP 2
14.1 ^&^SPECIAL ^ARRAY ^INFO ^WORDS\&
.SKIP 2
^IF THE SIGN BIT AND  BIT 2 ARE SET, THEN THE WORD GIVES AN ARRAY NAME.
^A DUMMY ARRAY IS INDICATED BY BIT 3.  ^ONE WORD FOR EACH DIMENSION 
FOLLOWS GIVING THE LOWER AND UPPER BOUNDS.  ^THE LIST IS TERMINATED
BY A ZERO WORD UNLESS THE ARRAY HAS A VARIABLE DIMENSION IN WHICH
CASE MINUS-ONE TERMINATES (MAKING SUPERFLUOUS ANY
BOUNDS WORDS).
.SKIP 2
^FOR EACH COMPUTED NON-DUMMY ARRAY REFERENCE GENERATED BY THE COMPILER
THE ARRAY NAME IS OUTPUT (SIGN BIT ZERO).
.SKIP 2
14.2 ^&^STMT-LENGTHS ^INFO ^WORD\&
.SKIP 2
^EACH STMT-LENGTH BYTES WORD IS DIVIDED IN 9 4-BIT BYTES.
^EACH STATEMENT IS REPRESENTED BY EITHER ONE
OR THREE BYTES (IF ITS LENGTH EXCEEDS 15).  ^FOR A LONG STATEMENT, THE FIRST BYTE
IS ZERO AND THE SECOND BYTE (WHICH MAY NOT BE IN THE SAME WORD) IS
THE LEAST SIGNIFICANT HALF OF A MAXIMUM STATEMENT LENGTH OF 255.
^THE FIRST BYTE OF THE FIRST LENGTHS WORD GENERATED BY THE COMPILER IS
UNUSED BECAUSE IF  THE FIRST SOURCE STMT RESULTS IN ONLY A SINGLE 
OBJECT INSTRUCTION, THEN IT IS INCLUDED IN THE COUNT FOR THE FOLLOWING SOURCE
STMT.  ^THE DEBUGGER INITIALIZATION CORRECTS THIS BY PUTTING A ONE IN
THE RESERVED FIRST BYTE.
.SKIP 2
15.  ^^TABLE INITIALIZATION\\  [SEE ^CHART 33]
.SKIP 2
^THE INITIALIZATION CODE IN THE DATA BASE IS STARTED BY THE LOADER AT
^^JOBREN\\ OR AT (^^JOBREN\\)+1 IF SHOULD STOP BEFORE ^^GETSEG\\ING THE ^^OPSYS\\.  ^IT ORGANIZES AND COMPACTS THE SYMBOL TABLE AND ADDITIONAL
INFO GENERATED BY THE COMPILER AND LEFT IN CORE BY THE LOADER.  ^THE RESULTS
ARE THE ^^ONCALL\\ ROLL AND THE TABLES ^^MANSYM, SCRIPT\\  AND ^^STATAB\\
(SEE 4.).  ^IF ^^DDT\\ WAS LOADED, ^^JOBSYM\\ IS SAVED ON DISK SINCE IT IS
OVERLAYED BY THE NEW TABLES.
.SKIP 2
^TWO WORDS IN OPSYS DATA-BASE ARE MODIFIED.  ^THE RUN AND CLOCK
TIMES (^^XCTTM.\\ AND ^^DAYTM\\.) ARE CHANGED TO REFLECT THE TIME REQUIRED FOR INITIALIZATION. 
.SKIP 2
15.1 ^&^REORGANIZATION OF ^LOADER ^SYMBOL ^TABLE\& [SEE ^CHART 34]
.SKIP 2
^THE SYMBOL TABLE CONSTRUCTED BY THE LOADER CONTAINS PROGRAM NAMES, PROLOGUE
AND EPILOGUE ADDRESSES AND LABEL AND VARIABLE NAMES AND ADDRESSES.  ^A
TYPE CODE AND ARRAY BIT ARE ALSO IN THE VALUE OF EACH VARIABLE.  ^SYMBOL
TABLE ENTRIES DISCARDED INCLUDE COMPILER- OR LOADER-GENERATED SYMBOLS,
INTERNAL (GLOBAL) SYMBOLS AND ALL ENTRIES FOR NON-^^FORTRAN\\ PROGRAMS.
^LABELS FOR FORMATS ARE ALSO DISCARDED.  ^SEE SECTION 4.1 FOR THE TABLE
FORMAT.
.SKIP 2
^AN INITIAL ^^ONCALL\\ ROLL IS BUILT WITH ONE WORD FOR EACH ^^FORTRAN
\\ SUBROUTINE.
.PAGE
15.2 ^&^OVERVIEW OF ^^SCRIPT\\ ^BUILD\&
.SKIP 2
^AS THE ADDITIONAL INFO FOR EACH PROGRAM IS PROCESSED A PART OF THE
^^SCRIPT\\ TABLE IS BUILT.  ^AN ENTRY IS BUILT FOR EACH ARRAY (SEE 4.1.5)
BUT FOR NON-DUMMY ARRAYS ALL THE INFO FOR A PROGRAM MUST BE SCANNED BEFORE
ANY ENTRIES CAN BE BUILT.  ^A LINKED-LIST OF ARRAYS AND THEIR OBJECT
REFERENCES IS KEPT WITH THE HEAD IN AC ^X.
.SKIP 2
.CENTER
^FIGURE OF ^MEMORY ^LAYOUT ^DURING ^^SCRIPT\\ ^BUILD
.SKIP 2
.NOFILL
.TAB STOPS 15 43
	!	!
	!---------------------------!  <--^^MANSYM
	!	!
	/	/
	_\	_\
	/	/
	!	!
	!---------------------------!  <--SCRIPT
	!	!
	!	!  <--\\AC ^E
	!	!
	!	!  <--AC ^G
	!       LINKED-LISTS	!
	!	!
	!---------------------------!  <--^^RFLINK
	!       \\STMT LENGTHS	!
	!       BYTES  WORDS	!  <--^^STATAB\\
	!	!
	!     ADDITIONAL INFO	!  <--^^RDPNT
	!	!
	!	!
	!---------------------------!  <--JOBREL\\\\
.TEST PAGE 24
.SKIP 3
.CENTER
^FIGURE OF ^LINKED ^STRUCTURE
     ^A
     !
     :--- !---------------------------!
	!LINK TO NEXT !   ADDR OF	!
	!  REFERENCE  !  REFERENCE  !
     :--->!---------------------------!
     :
     :    !---------------------------!
     :	!	!
     :	!       BOUNDS WORDS	!
     :	!	!
     :	!---------------------------!
     :	!   ADDR OF   !_# DIMENSIONS !
     :	! SYMBOL PAIR !	!
     :	!---------------------------!
     :----!   LINK TO   !   LINK TO	!---:
	!  REFERENCES ! NEXT ARRAY  !   :
	!---------------------------!   :
		    :
		    ^V
.FILL
.SKIP 2
^SINCE ^^SCRIPT\\ AND THE LINKED STRUCTURE GROW TOWARD EACH OTHER, THE
LINKED STRUCTURE AND  THE PARTIAL ^^STATAB\\ AND INFO BEING USED MAY
NEED TO BE MOVED UP.  ^THEREFORE, ALL LINKS ARE NEGATIVE RELATIVE TO 
^&^^RFLINK\\\&.  ^EACH ARRAY NODE IN THE LIST IS POINTED TO BY THE
^^SCRIPT\\ FIELD IN THE SYMBOL PAIR IN TABLE ^^MANSYM\\.
.SKIP 2
^CHART 35 DETAILS THE KLUDGE WHEREBY EACH COMPUTED ARRAY REFERENCE ADDRESS
IS DETERMINED.
.SKIP 2
15.3 ^&^DETAIL OF ^^SCRIPT\\ ^BUILD FOR ^DUMMY ^ARRAYS\& [SEE ^CHART 36]
.SKIP 2
^WHEN BOUNDS INFO FOR A DUMMY ARRAY IS ENCOUNTERED IN THE ADDITIONAL INFO,
A ^^SCRIPT\\ ENTRY IS IMMEDIATELY BUILT.  ^THE SUBROUTINE OBJECT INSTRUCTIONS
ARE  SCANNED FOR ALL REFERENCES TO THE ARRAY (FOR OBJECT FORMAT SEE 5.5).
^COMPUTED REFERENCES ARE PACKED INTO THE ^^SCRIPT\\ ENTRY.
.SKIP 2
^A SPECIAL CHECK IS MADE FOR ARRAYS SPECIFIED AS ONLY ONE ELEMENT.
^BIT 1, AC ^F IS SET TO LATER TELL THE USER THAT SUCH ARRAYS CANNOT BE
REFERENCED IN COMMANDS.
.TEST PAGE 5
.SKIP 2
.TEST PAGE 5
15.4  ^^^&STATAB B\\UILD\& [SEE ^CHART 37]
.SKIP 2
^EXCEPT FOR THE FIRST WORD OR SO OF STMT-LENGTH BYTES, ONLY A MOVE FROM
^^RDPNT\\ TO ^^STATAB\\ IS NEEDED.  ^A ONE-WORD STATEMENT OR CALLS TO ^^ADJ\\.
TO CALCULATE VARIABLE MULTIPLIERS OR STATEMENT FUNCTIONS AT THE BEGINNING 
OF THE THE SUBPROGRAM REQUIRE SPECIAL PROCESSING.  ^FOR A ONE-WORD STATEMENT,
THE RESERVED FIRST BYTE IS SET TO ONE AND THE SECOND IS DECREMENTED
BECAUSE SUCH A STATEMENT DOES NOT RESULT IN A LENGTH BYTE IN THE 
COMPILER.  ^THE OTHER SPECIAL CASES MEAN THAT THERE ARE LENGTH BYTES
FOR CODE THAT SHOULD BE CONSIDERED PART OF THE PROLOGUE.
^A WORD GIVING THE ADDRESS OF THE EXECUTABLE STMT AFTER THIS SPECIAL
CODE IS PLACED IN ^^STATAB\\ BEFORE THE FIRST STMT-LENGTH BYTES
WORD FOR THE SUBPROGRAM.  ^BITS 15-16, AC ^F FLAG THIS SPECIAL PROCESSING.
.SKIP 2
^AFTER THE ENTIRE ^^SCRIPT\\ TABLE IS BUILT, THE TABLE DEFINED BY
POINTERS ^^RFLINK\\ AND ^^STATAB\\ IS MOVED TO ITS FINAL POSITION AFTER
^^SCRIPT\\.
.SKIP 6
_[^^END OF IMPL.RND\\_]