Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-04 - decus/20-0134/focal.rno
There are 2 other files named focal.rno in the archive. Click here to see a list.
.SPACING 1
.LEFT MARGIN 6
.RIGHT MARGIN 65
.TITLE^F^O^C^A^L-10
.SUBTITLE=================================================================
.NONUMBER
\\
#####################################^D^E^C-10-^A^J^A^A-^D
.SKIP 1
########################################19-^OCT-76
.SKIP 10
.CENTER
^D^E^C\S\Y\S\T\E\M-10
.SKIP 1
.CENTER
^F^O^C^A^L-10
.SKIP 1
.CENTER
^P^R^O^G^R^A^M^M^I^N^G ^M^A^N^U^A^L
.SKIP 12
^D^I^G^I^T^A^L ^E^Q^U^I^P^M^E^N^T ^A^U^S^T^R^A^L^I^A * ^MELBOURNE * ^AUSTRALIA
.SKIP 1
^THIS DOCUMENT REFLECTS ^F^O^C^A^L-10 AS OF VERSION 5^J(345)-1.
.SKIP 1
^THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY ^DIGITAL ^EQUIPMENT
^AUSTRALIA.
.SKIP 1
.INDEX ^DISTRIBUTION
^ACTUAL DISTRIBUTION OF THE SOFTWARE DESCRIBED IN THIS MANUAL WILL BE
SUBJECT TO TERMS AND CONDITIONS ANNOUNCED FROM TIME TO TIME BY
^DIGITAL ^EQUIPMENT ^AUSTRALIA ^PTY.#^LTD.
.SKIP 1
^DIGITAL ^EQUIPMENT ^AUSTRALIA ASSUMES NO RESPONSIBILITY FOR THE
USE OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT WHICH IS NOT
SUPPLIED BY ^DIGITAL ^EQUIPMENT ^AUSTRALIA ^PTY.#^LTD.
.SKIP 1
^FOR ADDITIONAL COPIES, ORDER ^D^E^C-10-^A^J^A^A-^D FROM
.BREAK
^DIGITAL ^EQUIPMENT ^AUSTRALIA,
60 ^PARK ^STREET,
^SOUTH#^MELBOURNE, ^V^I^C^T^O^R^I^A#3205, ^A^U^S^T^R^A^L^I^A.
.INDEX ^PRICE
.INDEX ^AVAILABILITY
^PRICE#-#$9.00.
.NUMBER
.PAGE
.NOFILL
.INDENT -6
^&0.0###^TABLE OF CONTENTS\&
.SKIP 1
0.1###^INTRODUCTION
0.2###^EQUIPMENT#REQUIREMENTS
0.3###^FEATURES OF ^F^O^C^A^L-10
0.4###^GETTING ON THE AIR WITH ^F^O^C^A^L
0.5###^RUBOUT
0.6###^ERRORS
1.0###^SIMPLE ARITHMETIC USING THE COMMANDS "^T^Y^P^E" AND "^S^E^T"
1.1###^SYMBOLS
1.2###^ARRAYS
1.3###^ARITHMETIC OPERATORS
1.4###^EXAMPLE OF "^T^Y^P^E" AND "^S^E^T"
1.5###^THE SYMBOL TABLE
2.0###^F^O^C^A^L PROGRAM COMMANDS
2.1###^THE PROGRAM TEXT: ^W^R^I^T^E, ^E^R^A^S^E, ^C^O^M^M^E^N^T, ^M^O^D^I^F^Y
2.1.1#^W^R^I^T^E
2.1.2#^E^R^A^S^E
2.1.3#^C^O^M^M^E^N^T
2.1.4#^M^O^D^I^F^Y
2.2###^PROGRAM DIRECTIVES: ^Q^U^I^T, ^G^O, ^G^O^T^O, ^D^O, ^R^E^T^U^R^N
2.2.1#^Q^U^I^T
2.2.2#^G^O
2.2.3#^G^O^T^O#\M\M.\N\N, ^G^O ^T^O \M\M.\N\N
2.2.4#^D^O
2.2.5#^R^E^T^U^R^N
2.3###^PROGRAM LOOPS AND BRANCHES:##^F^O^R,##^I^F
2.3.1#^F^O^R
2.3.2#^I^F
2.4###^S^E^T
2.5###^X^E^C^U^T^E
2.6###^T^Y^P^E
2.6.1#^T^Y^P^E#"TEXT"
2.6.2#^T^Y^P^E#'TEXT"
2.6.3#^T^Y^P^E#$
2.6.4#^T^Y^P^E#$$
2.6.5#^T^Y^P^E /\N\N
2.7###^TYPEOUT OF NUMERIC RESULTS
2.7.1#^T^Y^P^E#%\M\M.\N\N
2.7.2#^T^Y^P^E %^E\M\M.\N\N
2.8###^A^S^K
2.8.1#^A^S^K /\N\N
3.0###^L^I^B^R^A#^COMMANDS
3.1###^L^I^B^R^A#^C^A^L^L
3.2###^L^I^B^R^A#^D^E^L^E^T^E
3.3###^L^I^B^R^A#^S^A^V^E
3.4###^FORMAT OF ^L^I^B^R^A COMMANDS
4.0###^INPUT AND OUTPUT ON OTHER DEVICES
4.1###^INPUT AND OUTPUT CHANNELS
4.2###^INPUT DEVICE INITIALIZATION
4.3###^OUTPUT DEVICE INITIALIZATION
4.4###^RELEASING A DEVICE
4.5###^DEFAULTS
4.6###^DIFFERENCES BETWEEN ^O^P^E^R^A^T^E ^I^N^P^U^T AND ^L^I^B^R^A ^C^A^L^L
4.7###^NOTES ON FILE ^I/^O
5.0###^THE TRACE FEATURE
6.0###^EXAMPLES OF ^F^O^C^A^L PROGRAMS
7.0###^STOPPING ^F^O^C^A^L
7.1###^HOW TO FORCE A ^F^O^C^A^L PROGRAM TO EXIT
7.2###^THE "^R^E^E^N^T^E^R" MONITOR COMMAND
8.0###^FUNCTIONS
8.1###^WHAT IS A FUNCTION?
8.2###^STANDARD FUNCTIONS
8.3###^EXTERNAL FUNCTIONS: ^F^N^E^W
8.4###^PARAMETERS AND VALUES INTERNAL TO ^F^O^C^A^L:##^F^O^C^A^L
8.5###^MONITOR INFORMATION:##^G^E^T^T^A^B(^T^A^B^N^U^M,^T^A^B^I^N^X)
8.6###^RANDOM NUMBER GENERATOR: ^F^R^A^N
8.7###^SINGLE CHARACTER ^I/^O: ^F^C^H^R
8.8###^SINGLE CHARACTER STRING: ^F^C^H^R$
8.9###^SLEEPING AND HIBERNATING: ^F^H^I^B^E^R
8.10##^NOTES ON IMPLEMENTING NEW FUNCTIONS
9.0###^FUNCTION SUMMARY
10.0##^F^O^C^A^L COMMAND SUMMARY
11.0##^CHARACTER INTERPRETATIONS BY ^F^O^C^A^L
12.0##^COMPATIBILITY OF ^F^O^C^A^L IMPLEMENTATIONS.
12.1##^GENERAL DIFFERENCES.
12.2##^P^D^P-8 ^F^O^C^A^L.
12.3##^P^D^P-12 ^F^O^C^A^L.
12.4##^D^E^C\S\Y\S\T\E\M-10 ^F^O^C^A^L
12.5##^P^D^P-11 ^F^O^C^A^L.
12.6##^F^O^C^A^L-^G^T.
12.7##^F^O^C^A^L-11/^R^T^X.
12.8##^F^O^C^A^L-^G11.
12.9##^P^D^P-15 ^F^O^C^A^L.
13.0##^ERROR DIAGNOSTICS
13.1##^FATAL ERRORS
13.2##^NON-FATAL ERRORS
13.3##^FORMAT OF ERROR PRINT
13.4##^LIST OF ERROR DIAGNOSTICS
13.5##^PUSH-DOWN-LIST ^OVERFLOW
14.0##^EXTERNAL FUNCTION: ^F^N^E^W
14.1##^HOW TO LOAD YOUR ^F^N^E^W PROGRAM
14.2##^EXAMPLE OF AN ^F^N^E^W ROUTINE
15.0##^INTERNAL REPRESENTATION OF NUMBERS###---###ACCURACY
15.1##^SINGLE PRECISION
15.2##^DOUBLE PRECISION ^K^A-10
15.3##^DOUBLE PRECISION ^K^I-10
16.0##^SPEED OF ^F^O^C^A^L
16.1##^SPEED OF ^CHARACTER ^INTERPRETATION
16.2##^SPEED OF ^LINE-FINDING
16.3##^SPEED OF ^COMMAND-EXECUTION
16.4##^SPEED OF ^ARITHMETIC ^OPERATIONS
16.5##^SPEED OF ^ITEM ^EVALUATION
.SKIP 1
^A^P^P^E^N^D^I^C^E^S
^A#####^F^O^C^A^L MEMORY MAP
.FILL
.PAGE
.INDENT -6
^&0.1###^INTRODUCTION\&
.SKIP 1
^F^O^C^A^L IS AN ONLINE, CONVERSATIONAL, INTERPRETIVE LANGUAGE FOR THE
^D^I^G^I^T^A^L FAMILY OF COMPUTERS.
^IT IS DESIGNED TO HELP STUDENTS, ENGINEERS, AND SCIENTISTS SOLVE NUMERICAL PROBLEMS.
^THE LANGUAGE CONSISTS OF SHORT, EASY-TO-LEARN, IMPERATIVE ^ENGLISH STATEMENTS.
^MATHEMATICAL EXPRESSIONS ARE TYPED IN STANDARD NOTATION.
^F^O^C^A^L PUTS THE FULL CALCULATING POWER AND SPEED OF THE COMPUTER
AT YOUR FINGERTIPS.
^F^O^C^A^L IS AN EASY WAY OF SIMULATING MATHEMATICAL MODELS, PLOTTING
CURVES, HANDLING SETS OF SIMULTANEOUS EQUATIONS
IN N-DIMENSIONAL ARRAYS, AND
MUCH MORE.
.SKIP 1
^F^O^C^A^L-10 PROGRAMS AND DATA CAN BE READ FROM OR WRITTEN ON
ANY DEVICE - SEE SECTION 4.
.SKIP 1
^F^O^C^A^L-10 CAN CALL SUBROUTINES WRITTEN IN OTHER LANGUAGES -
SEE SECTION 14.
.SKIP 1
^THE BEST WAY TO LEARN THE ^F^O^C^A^L LANGUAGE IS TO
SIT AT THE COMPUTER TERMINAL AND TRY THE COMMANDS,
STARTING WITH A FEW OF THE EXAMPLES
IN THIS MANUAL.
.SKIP 1
.SKIP 1
.TEST PAGE 11
.INDENT -6
^&0.2###^EQUIPMENT#REQUIREMENTS\&
.SKIP 1
.SKIP 1
^F^O^C^A^L-10 OPERATES ON ANY ^D^E^C\S\Y\S\T\E\M-10 COMPUTER IN AT LEAST 3K
OF USER CORE.
.SKIP 1
^UNLIKE VERSIONS OF ^F^O^C^A^L WHICH RUN ON SMALLER MACHINES,
.INDEX ^INITIAL DIALOGUE
.INDEX ^CONFIGURATION
^F^O^C^A^L-10 HAS NO "INITIAL DIALOGUE".
^DUE TO THE LARGE SIZE OF AVAILABLE
MEMORY, ALL STANDARD FUNCTIONS ARE RETAINED AUTOMATICALLY.
.SKIP 1
^IN GENERAL ^F^O^C^A^L-10 LANGUAGE FEATURES ARE MORE EXTENSIVE
THAN THOSE ON SMALLER COMPUTERS (SECTION 12), AND THE USER
SHOULD TAKE CARE TO AVOID CERTAIN OF THEM IF HE WILL WANT HIS
PROGRAM TO RUN ELSEWHERE.
^HOWEVER, ALMOST ALL ^F^O^C^A^L PROGRAMS
.INDEX ^P^D^P-8,^P^D^P-9 ETC.
FOR THE ^P^D^P-8, ^P^D^P-9, ^P^D^P-11, ^P^D^P-12,
AND ^P^D^P-15 SHOULD RUN ON
THE ^D^E^C\S\Y\S\T\E\M-10.
^EXCEPTIONS ARE THOSE PROGRAMS WITH SPECIAL FUNCTIONS,
AND THOSE WITH THE ^P^D^P-11 TYPE OF SUBROUTINES.
(^EDIT OFF THE * AT THE END OF PAPERTAPE PROGRAMS.)
.SKIP 1
.SKIP 1
.TEST PAGE 16
.INDEX ^FEATURES OF ^F^O^C^A^L-10
.INDENT -6
^&0.3###^FEATURES OF ^F^O^C^A^L-10\&
.SKIP 2
.NOFILL
*#^SHARABLE INTERPRETER (^FULLY RE-ENTRANT)
.INDEX ^MEMORY REQUIREMENTS
*#^MEMORY REQUIREMENTS 2K HISEG + 0.5K LOSEG
*#^COMPLETELY VERSATILE MEMORY-MANAGEMENT (FULLY EXPANDABLE)
*#^DOUBLE PRECISION OR SINGLE PRECISION (ASSEMBLY FEATURE)
.INDEX ^K^A-10
.INDEX ^K^I-10
.INDEX ^P^D^P-6
*#^WILL RUN ON ^K^A-10, ^K^I-10 AND ^P^D^P-6 UNDER ALL MONITORS
*#^F^O^R-LOOPS CAN USE POSITIVE OR NEGATIVE INCREMENT
*#^VARIABLES CAN BE NUMBERS OR STRINGS
*#^THREE-LETTER VARIABLE NAMES
*#^VARIABLE NAMES CAN START WITH THE LETTER "^F"
*#^UP TO 18 SUBSCRIPTS MAY BE USED FOR EACH VARIABLE
*#^CAN HAVE FUNCTION SUBPROGRAMS IN OTHER LANGUAGES
*#^FILE ^I/^O TO 14 INPUT OR OUTPUT FILES PLUS ^T^T^Y AND ^L^I^B^R^A
*#^AUTOMATED TEST FILES INCLUDED
*#^ADJUSTABLE %^E FORMAT
*#^ERROR MESSAGES IN ^ENGLISH
*#^ERROR MESSAGES INCLUDE THE INTERPRETER'S POINTER
*#^FLOATING-POINT TRAP
*#^TWO LEVELS OF ERROR-MESSAGE SEVERITY
*#^CAN SUPPRESS NON-FATAL ERROR MESSAGES
*#^CAN SUPPRESS COLON CUE FOR "^A^S^K" COMMAND
*#^CAN SUPPRESS EQUALS SIGN ON NUMERIC TYPE-OUT
*#^NUMERIC TYPE-OUT HAS A FLOATING SIGN
*#^LISTING HEADERS HAVE TIME AND DATE
*#^SYMBOL TABLE NOT DESTROYED UNNECESSARILY
*#^SYMBOL TABLE TYPED IN ALPHABETICAL ORDER
*#^SPACE AFTER COMMANDS NOT MANDATORY IF NOT AMBIGUOUS
*#"^G^O ^T^O" ALLOWED AS TWO WORDS
*#^ALL COMMANDS ALLOWABLE IN INDIRECT MODE (EVEN ^M^O^D^I^F^Y)
*#^HANDLES UPPER AND LOWER CASE
*#^CAN TYPE OUT QUOTE MARKS, FORM FEED _& SPECIAL CHARACTERS
*#^CAN ABORT ON AN "^A^S^K" COMMAND IN A LOOP WITH CONTROL-^P
*#^L^I^B^R^A ^C^A^L^L, ^S^A^V^E AND ^D^E^L^E^T^E COMMANDS
*#^NESTED LIBRARY CALLS
*#^EXPONENTIATION WITH UPARROW OR DOUBLE ASTERISK
*#^POSITIVE RESPONSE IF TOO MANY RUBOUTS TYPED
*#^INTERNAL INDEXING OF TEXT (FOR GREATER SPEED)
*#^G^E^T^T^A^B FUNCTION TO OBTAIN MONITOR INFORMATION
*#^LOGICAL ^I^F
.FILL
.TEST PAGE 16
.INDEX ^GETTING STARTED
.INDEX ^GETTING ON THE AIR WITH ^F^O^C^A^L
.INDEX ^RUNNING ^F^O^C^A^L
.INDENT -6
^&0.4###^GETTING ON THE AIR WITH ^F^O^C^A^L\&
.SKIP 1
^THE USER SHOULD FIRST OBTAIN ACCESS TO A ^D^E^C\S\Y\S\T\E\M-10 TERMINAL,
.INDEX ^LOGGING ON PROCEDURE
.INDEX ^LOGIN
AND GO THROUGH THE "LOGIN" PROCEDURE, TYPING IN THE PROJECT-
.INDEX ^GETTING ^F^O^C^A^L PROGRAM
PROGRAMMER NUMBERS AND PASSWORD.
^THEREAFTER, ALL THAT IS REQUIRED IS TO TYPE "^R ^F^O^C^A^L" FOLLOWED BY CARRIAGE-RETURN.
.INDEX ^MONITOR
^THE MONITOR WILL THEN LOAD THE ^F^O^C^A^L INTERPRETER
INTO MEMORY AND START IT RUNNING.
.INDEX ^ASTERISK CUE
^F^O^C^A^L WILL TYPE AN ASTERISK INDICATING ITS READINESS TO ACCEPT
A COMMAND OR LINE FROM THE KEYBOARD.
^EACH TIME THE USER COMPLETES TYPING A PROGRAM
.INDEX ^ESCAPE
.INDEX ^ALT-MODE
.INDEX ^CARRIAGE-RETURN
LINE AND TERMINATES IT BY DEPRESSING THE CARRIAGE-RETURN
.INDEX ^LINE-FEED
.INDEX ^ALT-MODE
.INDEX ^ESCAPE
KEY (OR LINE-FEED OR ALT-MODE OR ESCAPE)
OR AFTER ^F^O^C^A^L HAS PERFORMED A COMMAND,
AN ASTERISK IS TYPED TO TELL THE
.INDEX ^PROGRAM LINES, GROUPS
USER THAT ^F^O^C^A^L IS READY FOR ANOTHER COMMAND OR LINE.
.INDEX ^F^O^C^A^L COMMANDS
.SKIP 1
.INDEX ^PROGRAM
^A PROGRAM LINE CONTAINS A COMMAND OR SERIES
OF COMMANDS PRECEDED BY A REFERENCE NUMBER AND TERMINATED
BY A CARRIAGE-RETURN, LINE-FEED, ALT-MODE, OR ESCAPE.
^IF THE REFERENCE NUMBER IS OMITTED, THE TYPED-IN
.INDEX ^IMMEDIATE MODE
LINE IS IMMMEDIATELY EXECUTED (IMMEDIATE MODE).
.SKIP 1
.INDEX ^LINE NUMBER
.INDEX ^GROUP NUMBER
.INDEX ^STEP NUMBER
^THE REFERENCE NUMBER IS CALLED A "LINE#NUMBER" AND HAS THE FORM \M\M.\N\N,
WHERE \M\M IS CALLED THE "GROUP NUMBER" AND \N\N IS CALLED THE "STEP NUMBER".
^THE GROUP NUMBER LIES BETWEEN 1 AND 99, AND THE STEP NUMBER LIES BETWEEN 01 AND 99.
.SKIP 1
^ALL LINES HAVING THE SAME \M\M FORM A "GROUP".
^THE GROUP IS THEN REFERENCED BY COMMANDS AS \M\M OR \M\M.0.
^FOR EXAMPLE:
.SKIP 1
56.78###^T^H^I^S#^A^N^D#^T^H^E#^N^E^X^T#^L^I^N^E#^A^R^E#^I^N#^G^R^O^U^P#56.
.BREAK
56.93###^T^H^I^S#^L^I^N^E#^I^S#^P^A^R^T#^O^F#^G^R^O^U^P#56.
.SKIP 1
63.22###^T^H^I^S#^L^I^N^E#^I^S#^T^H^E#^O^N^L^Y#^L^I^N^E#^I^N#^G^R^O^U^P#63.
.SKIP 1
.INDEX ;
.INDEX ^SEMICOLON
^WHEN SEVERAL COMMANDS ARE TYPED ON ONE LINE, THEY MUST BE
SEPARATED BY SEMICOLONS (;).
^FOR EXAMPLE:
.SKIP 1
49.76###^S^E^T#^X=6;^S^E^T#^Y=^X+3;^T^Y^P^E#^Y;^E^R^A^S^E#56.93
.SKIP 1
^THE SAME COMMAND MAY BE EXECUTED ON SEVERAL SUCCESSIVE ARGUMENTS BY 
SEPARATING THE ARGUMENTS WITH COMMAS.
^FOR EXAMPLE:
.SKIP 1
71.42###^S^E^T#^X=3,#^Y=4,#^Z=5
.BREAK
71.61###^T^Y^P^E#^X,#^Y,#^Z
.BREAK
71.62###^D^O#44,#45,#99.62
.SKIP 1
^AS ONLY THE FIRST LETTER OF A COMMAND WORD IS SIGNIFICANT
TO ^F^O^C^A^L, ONLY THE FIRST LETTER NEED BE TYPED.
^ALSO SPELLING IS UNIMPORTANT.
^FOR EXAMPLE THE FOLLOWING FORMS ARE ALL EQUIVALENT:
.SKIP 1
^T^Y^P^E#^X
.BREAK
TYEP######^X
.BREAK
^T#^X
.SKIP 1
.INDEX ^ABBREVIATIONS
^NOTE: ^F^O^C^A^L-10 COMMANDS AND COMMAND-MODIFIERS
MAY BE ANY SEQUENCE OF ALPHABETIC CHARACTERS.
^SPACES, TABS OR CONTROL CHARACTERS (ANY CHARACTER WITH ^A^S^C^I^I VALUE LESS
THAN 41-OCTAL) MAY BE USED BETWEEN COMMANDS, COMMAND-MODIFIERS
OR ARGUMENTS TO IMPROVE CLARITY.
^THEY DO NOT AFFECT EXECUTION.
.SKIP 1
^THE AVAILABLE COMMANDS ARE SUMMARISED IN SECTION 10 AND DESCRIBED FULLY
IN SECTIONS 2, 3 AND 4.
.SKIP 1
.TEST PAGE 13
.INDEX ^RUBOUT
.INDEX ^BACKSPACE
.INDEX ^CONTROL-^U
.INDENT -6
^&0.5###^RUBOUT\&
.SKIP 1
^F^O^C^A^L-10 USES THE CONTROL-^U CHARACTER TO DELETE BACK TO THE
BEGINNING OF THE LINE. (^THIS IS IN CONTRAST
TO ^P^D^P-8 ^F^O^C^A^L, WHICH USES THE
BACKARROW.)
.SKIP 1
^SINGLE CHARACTERS MAY BE DELETED WITH THE ^R^U^B^O^U^T OR ^B^A^C^K^S^P^A^C^E KEY.
^IF SUFFICIENT RUBOUTS ARE USED TO GO BACK BEYOND THE
BEGINNING OF THE LINE, ^F^O^C^A^L-10 WILL ECHO _^, ^U, CR,
LF, AND ASTERISK.
(^IN A ^M^O^D^I^F^Y COMMAND THE ASTERISK IS NOT PRINTED).
.INDEX ^CONTROL-^R
.SKIP 1
^AFTER A FEW RUBOUTS, YOU MAY WISH TO USE CONTROL-^R TO DISPLAY
THE INPUT-LINE-SO-FAR.
.SKIP 1
.INDEX ^ERRORS
.INDENT -6
^&0.6###^ERRORS\&
.SKIP 1
^F^O^C^A^L CONSTANTLY CHECKS USER INPUT FOR
INVALID COMMANDS, ILLEGAL FORMATS,
AND MANY OTHER KINDS OF ERRORS.
^IT TYPES A MESSAGE INDICATING THE KIND OF ERROR DETECTED.
^IN THE FOLLOWING EXAMPLE,
.INDEX ^H^E^L^P
^H^E^L^P IS NOT A VALID COMMAND:
.NOFILL
.SKIP 1
#######*^H^E^L^P
#######?
#######?^I\L\L\E\G\A\L \C\O\M\M\A\N\D
#######^H^E^L^P
.INDEX _^
#######_^
#######*
.FILL
.SKIP 1
.INDEX ^DIAGNOSTICS
^THE COMPLETE LIST OF ERROR DIAGNOSTICS AND MEANINGS
IS GIVEN UNDER "ERROR DIAGNOSTICS" (SEE SECTION 13).
.SKIP 1
^A TRACE (DEBUG) FEATURE IS INCLUDED (SEE SECTION 5).
.PAGE
.INDEX ^SIMPLE ARITHMETIC
.INDEX ^ARITHMETIC
.INDEX ^CALCULATOR
.INDEX ^DESK CALCULATOR
.INDENT -6
^&1.0###^SIMPLE ARITHMETIC USING THE COMMANDS "^T^Y^P^E" AND "^S^E^T"\&
.SKIP 1
.INDEX ^T^Y^P^E COMMAND
"^T^Y^P^E" TO ^F^O^C^A^L MEANS "TYPE OUT
THE RESULT OF THE FOLLOWING EXPRESSION."
^WHEN YOU TYPE (FOLLOWING THE ASTERISK WHICH ^F^O^C^A^L PRINTED),
.NOFILL
.SKIP 1
########*^T^Y^P^E 36.4318+48.1346
.FILL
.SKIP 1
^AND THEN PRESS THE CARRIAGE-RETURN KEY, ^F^O^C^A^L PRINTS
.NOFILL
.SKIP 1
########=###84.5664*
.FILL
.SKIP 1
^THE NEXT COMMAND MAY BE ENTERED IMMEDIATELY, OR
.INDEX ^CARRIAGE-RETURN
CARRIAGE RETURN MAY BE TYPED TO IMPROVE READABILITY.
.INDEX ^EXCLAMATION(!)
.INDEX !
^IF THE "^T^Y^P^E" COMMAND IS TERMINATED BY AN EXCLAMATION MARK (!),
OUTPUT ADVANCES TO THE NEXT LINE AFTER THE ANSWER HAS BEEN PRINTED.
.SKIP 1
.INDEX ^S^E^T COMMAND
"^S^E^T" TELLS ^F^O^C^A^L "STORE THIS
SYMBOL AND ITS NUMERICAL VALUE.
^WHEN THIS SYMBOL APPEARS IN AN EXPRESSION, INSERT THE NUMERICAL VALUE."
^THUS, YOU MAY TYPE,
.NOFILL
.SKIP 1
########*^S^E^T ^A=3.14159;^S^E^T ^B=428.77; ^S^E^T ^C=2.71828
########*
.FILL
.SKIP 1
^YOU MAY NOW USE THESE SYMBOLS TO MANIPULATE
THE VALUES DEFINED IN THE ^S^E^T COMMAND.
.SKIP 1
.TEST PAGE 1
.INDENT -6
^&1.1###^SYMBOLS\&
.SKIP 1
.INDEX ^SYMBOLS
.INDEX ^VARIABLES
.INDEX ^OPERATORS
.INDEX ^HEIRARCHY OF OPERATORS
^SYMBOLS CONSIST OF ONE, TWO OR THREE ALPHANUMERIC CHARACTERS.
^THE FIRST CHARACTER MUST BE A LETTER.
.INDEX ^ALPHANUMERIC
.SKIP 1
#####^NOTE:"ALPHANUMERIC" MEANS ONE OF THE CHARACTERS:
#############^A^B^C^D^E^F^G^H^I^J^K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^Z (^U^P^P^E^R#^C^A^S^E)
#############\A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z (\L\O\W\E\R#\C\A\S\E)
#############0987654321
.INDEX ^VECTORS
.INDEX ^DIMENSION
.INDEX ^SUBSCRIPTS
.INDEX ^ARRAYS
.SKIP 1
.INDENT -6
^&1.2###^ARRAYS\&
.BREAK
^ARRAYS MAY BE STORED IN ^F^O^C^A^L.
^HOWEVER, THE ARRAYS MAY BE SPARSE, AND DO NOT REQUIRE A ^D^I^M^E^N^S^I^O^N STATEMENT,
SINCE THEY ARE STORED WITHOUT INTERVENING UNUSED ELEMENTS.
^EACH SUBSCRIPT MAY CONSIST OF A NUMBER, SYMBOL OR EXPRESSION
AND THE SUBSCRIPTS ARE ALL ENCLOSED IN PARENTHESES,
SO THAT ELEMENTS OF AN ARRAY ARE WRITTEN IN ONE OF THE FORMS:
.SKIP 1
#####^A(5), ^B(^X), ^Q(3,3,^X), OR ^V^E^C(^Q+2*^J/43.)
.SKIP 1
^FURTHER DETAILS ARE GIVEN IN SECTION 12.9.
.SKIP 2
.INDEX ^ARITHMETIC OPERATORS
.INDEX ^OPERATORS
.INDEX ^ARITHMETIC
.INDENT -6
^&1.3###^ARITHMETIC ^OPERATORS\&
.SKIP 1
^NUMERIC EXPRESSIONS MAY BE FORMED BY COMBINING NUMERIC
VARIABLES AND CONSTANTS WITH THE ARITHMETIC OPERATORS.
^IN ORDER OF PRECEDENCE THE ARITHMETIC OPERATORS ARE:
.SKIP 1
.INDEX ^PARENTHESES
.INDENT 8
PARENTHESES
.INDENT 8
.INDEX ^EXPONENTIATION
.INDEX **
.INDEX _^
EXPONENTIATION _^ OR **
.INDENT 8
.INDEX ^DIVISION
.INDEX /
DIVISION /
.INDENT 8
.INDEX *
.INDEX ^MULTIPLICATION
MULTIPLICATION *
.INDENT 8
.INDEX ^ADDITION
.INDEX +
.INDEX ^SUBTRACTION
.INDEX -
ADDITION + AND SUBTRACTION -
.SKIP 1
^EVALUATION IS DONE FROM LEFT TO RIGHT, SO THAT, FOR EXAMPLE,
15/3/2#HAS#THE#VALUE 2.5 (NOT#10).
.SKIP 1
.TEST PAGE 16
.INDENT -6
^&1.4###^EXAMPLE OF "^T^Y^P^E" AND "^S^E^T"\&
.SKIP 1
.INDEX ^EXAMPLES
^THE FOLLOWING DIALOGUE ILLUSTRATES THE USE OF THE "^T^Y^P^E" AND "^S^E^T"
COMMANDS AND THE ARITHMETIC OPERATORS. (^SEE ALSO SECTION 2.7 ON FORMATS)
.INDEX ^F^O^C^A^L EXAMPLES
.SKIP 1
*^S^E^T ^A=2,^B=3;^T^Y^P^E ^A*^B;^S^E^T ^X=^A_^^B;^T^Y^P^E ^X;^S^E^T ^Y=^X/^A+5;^T^Y^P^E ^Y
.BREAK
=####^6.0000=####8.0000=####9.0000*
.BREAK
*^S^E^T ^A^S^Q=^F^S^Q^T(^A);^T^Y^P^E ^A^S^Q,^A,^A*^A,^A*(^A+1)
.BREAK
=###1.4142=###2.0000=###4.0000=###6.0000*
.FILL
.SKIP 1
.INDEX ^T^Y^P^E $
.INDEX ^SYMBOL TABLE
.INDENT -6
^&1.5###^THE SYMBOL TABLE\&
.SKIP 1
.INDEX $
^THE COMMAND "^T^Y^P^E $" CAUSES BOTH THE CURRENTLY DEFINED SYMBOLS
AND THEIR CURRENT VALUES TO BE TYPED OUT. (^SEE SECTION 2.6.3)
.PAGE
.INDENT -6
^&2.0###^F^O^C^A^L PROGRAM COMMANDS\&
.SKIP 1
^A COMMAND PRECEDED BY A LINE NUMBER IS NOT EXECUTED IMMEDIATELY BUT
.INDEX ^TEXT
.INDEX ^TEXT BUFFER
STORED IN THE ^F^O^C^A^L TEXT BUFFER AREA IN MEMORY.
.SKIP 1
.INDEX ^PROGRAM
.INDENT -6
^&2.1###^THE PROGRAM TEXT: ^W^R^I^T^E, ^E^R^A^S^E, ^C^O^M^M^E^N^T, ^M^O^D^I^F^Y\&
.SKIP 1
.INDEX ^W^R^I^T^E COMMAND
.INDENT -6
^&2.1.1#^W^R^I^T^E\&
.SKIP 1
^THE ^W^R^I^T^E COMMAND LISTS ALL OR PART OF THE PROGRAM
CONTAINED IN THE ^F^O^C^A^L TEXT BUFFER AREA IN MEMORY. ^ARGUMENTS,
IF ANY, MAY BE "^A^L^L", GROUP NUMBER OR LINE NUMBER, OR
A STRING OF THESE SEPARATED BY COMMAS. ^IF THE FIRST ARGUMENT IS
NOT A LINE OR GROUP NUMBER, ^F^O^C^A^L WILL
.INDEX ^TIME
.INDEX ^DATE
.INDEX ^TIME-OF-DAY
WRITE A HEADER SHOWING TIME AND
DATE.
^TO LIST THE ENTIRE PROGRAM WITH A HEADER, TYPE "^W^R^I^T^E ^A^L^L", AND
TO LIST THE ENTIRE PROGRAM WITHOUT A HEADER, TYPE "^W^R^I^T^E 0".
.SKIP 1
.INDEX ^E^R^A^S^E COMMAND
.INDENT -6
^&2.1.2#^E^R^A^S^E\&
.SKIP 1
.INDEX ^SYMBOLS
"^E^R^A^S^E" DELETES THE CURRENTLY DEFINED SYMBOLS AND THEIR VALUES.
.SKIP 1
"^E^R^A^S^E \M\M", "^E^R^A^S^E \M\M.\N\N", "^E^R^A^S^E \M\M.\N1,\M\M.\N3,\M\M.\N4"
.INDEX ^PROGRAM TEXT
ERASES FROM THE PROGRAM TEXT THE GROUP, LINE,
OR LINES SPECIFIED.
"^E^R^A^S^E ^A^L^L" REMOVES THE WHOLE PROGRAM TEXT.
.SKIP 1
^AN ^E^R^A^S^E COMMAND CONTAINED WITHIN A PROGRAM WILL BE EXECUTED.
^THIS IS USEFUL IN PROGRAMMING "ONCE-ONLY" APPLICATIONS, OR WHERE
YOU WISH TO ERASE A LINE AFTER EXECUTING IT.
^IF THE COMMAND ERASES ITSELF, THE REST OF THE LINE WON'T BE EXECUTED.
^SIMILARLY, IF A "^D^O", "^F^O^R" OR "^L^I^B^R^A ^C^A^L^L"
(SEE SECTIONS 2.2.4, 2.3.1 AND 3.1)
WAS IN PROGRESS WHEN THE LINE CONTAINING IT WAS ERASED,
THE REST OF THE LINE WOULD BE IGNORED.
.SKIP 1
.TEST PAGE 9
.INDEX ^C^O^M^M^E^N^T COMMAND
.INDENT -6
^&2.1.3#^C^O^M^M^E^N^T\&
.SKIP 1
^BEGINNING A COMMAND WITH THE LETTER ^C WILL CAUSE THE REMAINDER
OF THAT LINE TO BE IGNORED.
.SKIP 1
.TEST PAGE 20
.INDEX ^M^O^D^I^F^Y COMMAND
.INDENT -6
^&2.1.4#^M^O^D^I^F^Y\&
.SKIP 1
^THE "^M^O^D^I^F^Y" COMMAND ENABLES ALTERATION OF PART OF A LINE.
.SKIP 1
^TO ALTER LINE \M\M.\N\N, TYPE "^M^O^D^I^F^Y \M\M.\N\N" FOLLOWED BY CARRIAGE RETURN.
.INDEX ^SEARCH CHARACTER
^F^O^C^A^L TYPES A BELL AND AWAITS A CHARACTER (THE SEARCH CHARACTER).
^CHOOSE A SUITABLE CHARACTER IN LINE \M\M.\N\N FOR ^F^O^C^A^L TO USE AS A SEARCH CHARACTER, AND KEY IT IN.
^F^O^C^A^L WILL TYPE OUT THE LINE
UP TO AND INCLUDING THE FIRST OCCURRENCE OF THE SEARCH CHARACTER. 
^AT THIS POSITION IN THE LINE YOU MAY PERFORM ANY OF THE FOLLOWING FUNCTIONS:
.LEFT MARGIN 10
.INDENT -2
*#^INSERT CHARACTERS BY TYPING THEM IN.
.INDENT -2
.INDEX ^RUBOUT
.INDEX ^BACKSPACE
.INDEX ^CONTROL-^U
*#^DELETE CHARACTERS TO THE LEFT ONE AT A TIME WITH THE ^R^U^B^O^U^T OR ^B^A^C^K^S^P^A^C^E KEYS, OR ALL TO THE LEFT WITH CONTROL-^U (_^^U).
.INDENT -2
.INDEX ^CARRIAGE-RETURN
*#^DELETE ALL THE LINE TO THE RIGHT BY PRESSING CARRIAGE-RETURN.
.INDENT -2
.INDEX ^SEARCH CHARACTER
.INDEX ^CONTROL-^L
.INDEX ^FORM FEED
*#^PROCEED TO THE NEXT OCCURRENCE OF THE SEARCH CHARACTER BY TYPING
CONTROL-^L (FORM-FEED).
.INDENT -2
.INDEX ^CONTROL-^G (BELL)
*#^CHANGE TO A DIFFERENT SEARCH CHARACTER BY TYPING CONTROL-^G
(BELL) FOLLOWED BY THE NEW CHARACTER.
.INDENT -2
.INDEX ^LINE-FEED
*#^PRESERVE THE LINE AS MODIFIED BY TYPING A LINE FEED.
.INDENT -2
.INDEX ^CONTROL-^P
*#^ABORT THE MODIFICATION BY TYPING CONTROL-^P.
.INDENT -2
.INDEX ^CONTROL-^R
*#^DISPLAY THE LINE TO THE LEFT (CLEANED UP) BY TYPING CONTROL-^R.
.LEFT MARGIN 6
.SKIP 1
^TECHNICAL NOTES:
.SKIP 1
.INDENT -3
A.#^A "^M^O^D^I^F^Y" COMMAND MAY BE INCLUDED IN A PROGRAM,
BUT IF THE OBJECT LINE CONTAINS AN ACTIVE "^D^O", "^F^O^R"
OR "^L^I^B^R^A ^C^A^L^L" (SECTIONS 2.2.4, 2.3.1, 3.1) THEN THE REST OF THE LINE WON'T BE EXECUTED.
^FOR EXAMPLE:
.SKIP 1
32.22 ^T^Y^P^E ^X; ^D^O 34.44; ^T^Y^P^E ^Y
.BREAK
34.44 ^M^O^D^I^F^Y 32.22
.SKIP 1
^THE EXECUTION OF LINE 32.22 CAN NEVER PROCEED BEYOND THE SECOND SEMICOLON,
NO MATTER WHAT THE ^M^O^D^I^F^Y COMMAND DOES.
.SKIP 1
.INDENT -3
B.#^THE "^M^O^D^I^F^Y" COMMAND WILL NOT WORK EXACTLY THE SAME ON A 
.INDEX ^HALF-DUPLEX
HALF-DUPLEX TERMINAL.
^THE PRINTING OF THE SEARCH CHARACTER IS BY
HARDWARE AND SO CANNOT BE SUPPRESSED BY SOFTWARE.
.INDEX ^BACK-SLASH
.INDEX _\
^ALSO, RUBBED-OUT CHARACTERS ARE PRINTED WITH A BACK-SLASH BEFORE EACH
.INDEX ^FULL-DUPLEX
ONE, RATHER THAN AS A GROUP INSIDE BACK-SLASHES AS ON FULL-DUPLEX
TERMINALS.
.SKIP 1
.INDENT -3
C.#^INPUT-END-OF-FILE HAS THE SAME EFFECT AS LINE-FEED.
.SKIP 1
.INDENT -3
D.#^THE LINE NUMBER ITSELF
CANNOT BE ALTERED IN ANY WAY BY THE "^M^O^D^I^F^Y" COMMAND.
^IF THIS IS REQUIRED, THE LINE MUST BE INSERTED AGAIN BY RE-TYPING.
^AN EMPTY LINE WILL BE DELETED.
.SKIP 1
.TEST PAGE 35
.INDEX ^F^O^C^A^L COMMANDS
.INDENT -6
^&2.2###^PROGRAM DIRECTIVES: ^Q^U^I^T, ^G^O, ^G^O^T^O, ^D^O, ^R^E^T^U^R^N\&
.SKIP 1
.INDEX ^Q^U^I^T COMMAND
.INDENT -6
^&2.2.1#^Q^U^I^T\&
.SKIP 1
^THE "^Q^U^I^T" COMMAND TERMINATES EXECUTION, ^F^O^C^A^L
THEN AWAITS FURTHER COMMANDS FROM THE CURRENT INPUT DEVICE.
.INDEX *
^IF THE KEYBOARD IS THE CURRENT INPUT DEVICE, A * CUE WILL BE GIVEN.
(^EMERGENCY STOPS - SECTION 7).
.SKIP 1
.INDEX ^G^O COMMAND
.INDENT -6
^&2.2.2#^G^O\&
.SKIP 1
^THE "^G^O" COMMAND (OR "^G^O^T^O") WITHOUT AN ARGUMENT
IS INTERPRETED EXACTLY AS "^D^O ^A^L^L". (^SEE 2.2.4 BELOW).
^IT WILL THEREFORE START EXECUTING AT THE
BEGINNING OF THE ^F^O^C^A^L PROGRAM,
AND IF THE "^G^O" IS PART OF THE PROGRAM OR A ^L^I^B^R^A-^C^A^L^L FILE,
THAT PROGRAM OR FILE WILL BE CONTINUED WHEN THE "^D^O ^A^L^L" FINISHES.
.SKIP 1
.INDEX ^G^O ^T^O COMMAND
.INDEX ^G^O^T^O COMMAND
.INDENT -6
^&2.2.3#^G^O^T^O#\M\M.\N\N, ^G^O ^T^O \M\M.\N\N\&
.SKIP 1
^THE "^G^O^T^O" COMMAND MAY BE FOLLOWED BY A LINE NUMBER (\M\M.\N\N).
.BREAK
^IN THIS USAGE "^G^O^T^O" MAY BE WRITTEN AS TWO SEPARATE WORDS.
.SKIP 1
^THE "^G^O^T^O" COMMAND EFFECTIVELY CAUSES THE LINE TO WHICH IT POINTS
(OBJECT LINE) TO BE INTERPRETED AS A CONTINUATION
OF THE LINE CONTAINING THE
"^G^O^T^O" COMMAND.
.SKIP 1
^ACTION AT THE END OF THIS "OBJECT LINE" DEPENDS ON
WHICH OF THE FOLLOWING OCCURRED MOST RECENTLY AND IS STILL NOT COMPLETELY EXECUTED (SEE SECTIONS 2.2.4, 2.3.1, 3.1 FOR DETAILS):
.SKIP 1
.LEFT MARGIN 35
.INDEX ^D^O COMMAND
.INDENT -29
^D^O-LINE######################^THE ^D^O IS CONCLUDED.
.INDENT -29
^D^O-GROUP,#^G^O^T^O#OUTSIDE#GROUP#^THE ^D^O IS CONCLUDED.
.INDENT -29
.INDEX ^D^O COMMAND
^D^O-GROUP,#^G^O^T^O#WITHIN#GROUP##^EXECUTION
CONTINUES TO THE END OF THE GROUP.
.INDENT -29
^D^O#^A^L^L#######################^EXECUTION CONTINUES TO END OF PROGRAM.
.INDENT -29
^F^O^R##########################^THE NEXT ITERATION IS BEGUN.
.INDENT -29
^L^I^B^R^A#^C^A^L^L###################^EXECUTION CONTINUES TO END OF PROGRAM, THEN
^L^I^B^R^A ^C^A^L^L FILE IS CONTINUED.
.INDENT -29
^NONE#OF#THESE################^EXECUTION#CONTINUES TO END OF PROGRAM.
.LEFT MARGIN 6
.SKIP 1
.TEST PAGE 19
.INDEX ^D^O COMMAND
.INDEX ^SUBROUTINES (^D^O)
.INDENT -6
^&2.2.4#^D^O\&
.SKIP 1
"^D^O"#OR#"^D^O#^A^L^L"#####MEANS EXECUTE ALL LINES OF THE PROGRAM
.BREAK
#####################TEXT.
.BREAK
"^D^O \M\M.\N\N"###########MEANS EXECUTE THE LINE \M\M.\N\N
.BREAK
"^D^O#\M\M.0"#OR#"^D^O \M\M"#MEANS EXECUTE THE LINES OF GROUP \M\M.
.SKIP 1
^CONTROL RETURNS TO THE COMMAND AFTER THE ^D^O WHEN EXECUTION HAS
BEEN COMPLETED AS SPECIFIED OR WHEN A "^R^E^T^U^R^N" COMMAND IS
.INDEX ^R^E^T^U^R^N COMMAND
ENCOUNTERED.
.SKIP 1
^LINES OF THE FORM
.BREAK
######^D^O \M\M.\N\N;^D^O \M2;^D^O \M\M.\N2
.BREAK
MAY BE WRITTEN AS
.BREAK
######^D^O \M\M.\N\N, \M2, \M\M.\N2
.SKIP 1
.TEST PAGE 15
.INDENT -6
^&2.2.5#^R^E^T^U^R^N\&
.SKIP 1
^THE "^R^E^T^U^R^N" COMMAND HAS THE FOLLOWING EFFECTS:
.SKIP 1
.INDEX ^F^O^R COMMAND
^DURING A "^F^O^R" COMMAND (SECTION 2.3.1), ITERATION CONTINUES AS THOUGH END-OF-LINE
WAS REACHED.
.SKIP 1
^DURING A "^D^O" COMMAND, CONTROL RETURNS AS THOUGH THE
.INDEX ^D^O COMMAND
LIMIT OF THE ^D^O (END OF LINE, END OF GROUP, END OF TEXT) HAD
BEEN REACHED.
.SKIP 1
^DURING A "^L^I^B^R^A^R^Y ^C^A^L^L" COMMAND (SECTION 3.1), THE REMAINDER OF THAT FILE
.INDEX ^L^I^B^R^A^R^Y ^C^A^L^L COMMAND
IS IGNORED.
.SKIP 1
^IF NONE OF THE ABOVE COMMANDS IS IN PROGRESS, EXECUTION
TERMINATES AS FOR A ^Q^U^I^T COMMAND.
.SKIP 1
^IF ANY OF THE ABOVE COMMANDS ARE NESTED, ^R^E^T^U^R^N ONLY AFFECTS THE MOST RECENT OF THE NESTED COMMANDS.
.SKIP 1
.TEST PAGE 33
.INDENT -6
^&2.3###^PROGRAM LOOPS AND BRANCHES:##^F^O^R,##^I^F\&
.SKIP 1
.INDEX ^F^O^R COMMAND
.INDEX ^LOOPS
.INDEX ^ITERATION
.INDENT -6
^&2.3.1#^F^O^R\&
.SKIP 1
"^F^O^R ^X=^A,^B,^C;\C\O\M\M\A\N\D\S"
.SKIP 1
^THE \C\O\M\M\A\N\D\S ARE EXECUTED WITH ^X=^A.
^X IS THEN INCREMENTED BY ^B AND THE FOLLOWING TEST IS MADE:
.SKIP 1
^IF ^B IS POSITIVE OR ZERO, IS ^X GREATER THAN ^C?
.BREAK
^IF ^B IS NEGATIVE, IS ^X LESS THAN ^C?
.SKIP 1
^IF THE ANSWER IS NO, THE LOOP IS CONTINUED (COMMANDS EXECUTED, ^X INCREMENTED AGAIN,
TEST ^X AGAIN).
^IF THE ANSWER IS YES, CONTROL PASSES TO THE NEXT STATEMENT.
.SKIP 1
^IF THERE ARE ONLY TWO ARGUMENTS, ^B IS ASSUMED TO BE 1.
^IF ^B IS ZERO, AND ^C IS GREATER THAN ^A, THE LOOP WILL REPEAT INDEFINITELY.
^IF THERE ARE MORE COMMANDS THAN WILL FIT ON ONE LINE,
CONTINUE THE LINE WITH A ^G^O^T^O OR ^D^O-LINE,
OR USE A ^D^O-GROUP COMMAND.
.SKIP 1
^NOTE THAT THE PARAMETERS ^A, ^B AND ^C ARE COMPUTED ONLY ONCE, BEFORE THE
BEGINNING OF THE FIRST LOOP.
.SKIP 1
.INDEX ^I^F COMMAND
.INDEX ^CONDITIONAL BRANCHING
.INDENT -6
^&2.3.2#^I^F\&
.SKIP 1
.INDENT -6
^&2.3.2.1#^ARITHMETIC#^I^F\&
.SKIP 1
"^I^F(X)\M1.\N1,\M2.\N2,\M3.\N3"
.BREAK
"^I^F(X)\M1.\N1,\M2.\N2;COMMANDS"
.BREAK
"^I^F(X)\M1.\N1;COMMANDS"
.SKIP 1
WHERE X IS A DEFINED NUMERIC SYMBOL, VALUE, OR EXPRESSION.
.SKIP 1
^IF X#<#0 CONTROL PASSES TO LINE \M1.\N1
.BREAK
^IF X#=#0 CONTROL PASSES TO LINE \M2.\N2
.BREAK
^IF X#>#0 CONTROL PASSES TO LINE \M3.\N3
.SKIP 1
^WHERE \M2.\N2 OR \M3.\N3 IS NOT SPECIFIED, THE COMMANDS ON THE ^I^F LINE ARE EXECUTED.
.SKIP 1
.INDENT -6
^&2.3.2.2#^LOGICAL#^I^F\&
.SKIP 1
"^I^F(X);COMMANDS"
.SKIP 1
WHERE X IS A LOGICAL EXPRESSION. ^THE COMMANDS ARE EXECUTED IF THE
LOGICAL EXPRESSION IS TRUE.
^A LOGICAL EXPRESSION CONSISTS OF A PAIR OF NUMERIC EXPRESSIONS
OR A PAIR OF STRING EXPRESSIONS SEPARATED BY A LOGICAL OPERATOR.
^THE LOGICAL OPERATOR MAY BE ONE OF THE FOLLOWING:
.BREAK
###=######(TEST FOR EQUALITY)
.BREAK
###_#######(TEST FOR INEQUALITY)
.BREAK
#.^E^Q.#####)
.BREAK
#.^N^E.#####)
.BREAK
#.^L^T.#####)
.BREAK
#.^L^E.#####) COMPARATIVE OPERATORS (MUST BE UPPER CASE)
.BREAK
#.^G^T.#####)
.BREAK
#.^G^E.#####)
.BREAK
^THE PROGRAMMER MUST ENSURE THAT AMBIGUOUS CASES SUCH AS 1.^N^E.2
ARE ELIMINATED BY USING SPACES OR EXTRA PERIODS.
^AMBIGUITIES WILL ARISE IF COMMAND SCANNING WOULD ALLOW A CHARACTER
TO BE INTERPRETED FROM THE LEFT AS PART OF A NUMBER WHEREAS THE
PROGRAMMER INTENDED A LOGICAL OPERATOR.
^FOR EXAMPLE IN THE CASE 1.^N^E.2, THE ^N IS REGARDED AS 14 IN THE FIRST
DECIMAL PLACE, ^E IS REGARDED AS THE EXPONENT INDICATOR, AND .2 IS THE
POWER OF TEN USED, SO IT CAN MAKE A LEGAL NUMBER.
^REMOVE THE AMBIGUITY BY USING 1..^N^E.2 OR 1#.^N^E.2 INSTEAD.
.PAGE
.INDENT -6
^&2.4###^S^E^T\&
.BREAK
^SEE SECTION 1.0 FOR AN INTRODUCTION TO THE ^S^E^T STATEMENT.
^THE ^S^E^T COMMAND MAY BE USED TO ASSIGN VALUES TO ANY SYMBOL.
^IF THE SYMBOL CONTAINS A TERMINATING $#SIGN, (E.G.#^A^B^C$(5,4)
OR ^X$) THEN THE SYMBOL REFERS TO A STRING VARIABLE, BUT
OTHERWISE THE SYMBOL REFERS TO A NUMERIC VARIABLE.
^THE ^S^E^T COMMAND TAKES THE FORM:
.BREAK
#########SYM#=#EXPR
.BREAK
WHERE SYM IS A VARIABLE NAME AND EXPR IS AN EXPRESSION OF THE SAME TYPE.
^A STRING VARIABLE CAN ONLY BE ASSIGNED THE VALUE OF A STRING EXPRESSION,
AND A NUMERIC VARIABLE CAN ONLY BE ASSIGNED THE VALUE OF A NUMERIC EXPRESSION.
.SKIP 1
.INDEX ^STRING CONSTANTS
.INDEX ^STRING VARIABLES
.INDEX ^STRING EXPRESSIONS
^STRING EXPRESSIONS MAY BE FORMED BY COMBINING STRING VARIABLES WITH STRING
CONSTANTS, USING THE STRING-CONCATENATION OPERATOR "+".
.SKIP 1
^FOR EXAMPLE:
.SKIP 1
#########^S^E^T#^S^V$(4)#=#^S^V$(4)+"^T^O^D^A^Y"
.SKIP 1
^TECHNICAL NOTES:
.SKIP 1
.INDENT -3
A.#^THE SETTING OF A SYMBOL TO ZERO IS INSUFFICIENT TO PLACE A NEW
ENTRY IN THE SYMBOL TABLE.
^TO ENSURE THAT A SYMBOL IS PLACED IN THE SYMBOL TABLE IT MUST BE ASSIGNED
A NON-ZERO VALUE.
.TEST PAGE 10
.SKIP 2
.INDEX ^X^E^C^U^T^E ^COMMAND
.INDEX ^EXECUTE ^COMMAND
.INDENT -6
^&2.5###^X^E^C^U^T^E\&
.SKIP 1
"^X^E^C^U^T^E ^E^X^P^R"
.SKIP 1
WILL EVALUATE THE EXPRESSION ^E^X^P^R AND DISCARD THE RESULT.
^IT HAS THE SAME EFFECT AS
.SKIP 1
#####^S^E^T ^D^U^M^M^Y=^E^X^P^R
.SKIP 1
AND IS USED IN CASES WHERE A FUNCTION IS TO BE CALLED WITHOUT REQUIRING
ANY VALUE TO BE RETURNED.
.PAGE
.INDENT -6
^&2.6###^T^Y^P^E\&
.SKIP 1
^SEE SECTION 1.0 FOR INTRODUCTION TO "^T^Y^P^E".
.SKIP 1
.INDEX ^T^Y^P^E COMMAND
^THE "^T^Y^P^E" COMMAND MAY BE USED TO OUTPUT NUMBERS, VALUES,
EXPRESSIONS, TEXT, OR THE CONTENTS OF THE SYMBOL TABLE.
.INDEX ^EXCLAMATION(!)
^TO CAUSE CARRIAGE-RETURN AND LINEFEED AFTER TYPING,
TERMINATE THE COMMAND WITH THE EXCLAMATION MARK(!).
.INDEX _#
.INDEX ^CARRIAGE-RETURN
.INDEX ^HATCH(_#)
^TO CAUSE CARRIAGE-RETURN ONLY, TERMINATE WITH HATCH (_#).
^WHEN OUTPUTTING TEXT, ENCLOSE THE TEXT IN DOUBLE QUOTES.
.SKIP 1
.TEST PAGE 8
.INDEX "
.INDEX ^QUOTE MARKS
.INDEX ^TEXT
.INDENT -6
^&2.6.1#^T^Y^P^E#"TEXT"\&
.SKIP 1
^ALL MATERIAL WITHIN THE QUOTE MARKS IS TYPED OUT.
^THE QUOTE MARKS THEMSELVES ARE NOT TYPED OUT.
^THE TEXT MAY INCLUDE SINGLE QUOTES AND MUST BE ALL ON ONE LINE.
^IF THERE ARE NO CLOSING QUOTE MARKS, THE COMMAND WILL TYPE OUT EVERYTHING UP TO THE END OF THE LINE.
.SKIP 1
.TEST PAGE 9
.INDENT -6
^&2.6.2#^T^Y^P^E#'TEXT"\&
.SKIP 1
^A DOUBLE QUOTE IS TYPED OUT FOLLOWED BY THE TEXT, WHICH MAY BE
NULL.
^IF YOU WANT TO TYPE OUT SOME TEXT ENCLOSED IN DOUBLE QUOTES,
YOU SHOULD USE THE FORM:
.SKIP 1
^T^Y^P^E '\T\E\X\T"'"
.SKIP 1
^NOTE:###^THIS FEATURE MAY BE REMOVED AT A LATER DATE TO PROVIDE
.INDEX ^P^D^P-11 ^F^O^C^A^L
COMPATIBILITY WITH ^P^D^P-11 ^F^O^C^A^L.
.SKIP 1
.TEST PAGE 15
.INDEX $
.INDENT -6
^&2.6.3#^T^Y^P^E#$\&
.SKIP 1
.FILL
.INDEX ^SYMBOL TABLE
.INDEX ^DOLLAR($)
^THE SYMBOL TABLE IS TYPED IN ALPHABETICAL ORDER.
^FOR EXAMPLE:
.NOFILL
.SKIP 1
^S#^I#####=######6.0000
^S#^J#####=######6.0000
^S#^P^I####=######3.1415
^S#^X#####=######3.0999
^S#^Y#####=#####22.4000
^S#^Z(43)#=####126.0000
^S#^F^O^O$##=#######"^HI THERE!"
.SKIP 1
.FILL
.SKIP 1
.INDENT -6
^&2.6.4#^T^Y^P^E#$$\&
.SKIP 1
^THE SYMBOL TABLE IS TYPED IN THE SAME WAY AS FOR ^T^Y^P^E#$,
BUT THE OCTAL VALUE OF THE SYMBOL IS COMMENTED ON TO THE TABLE THUS:
.NOFILL
.SKIP 1
^S#^I#####=######6.0000#####;^C#203600000000#000000000000
^S#^J#####=######6.0000#####;^C#203600000000#000000000000
^S#^P^I####=######3.1415#####;^C#202622077325#021026430215
^S#^X#####=######3.0999#####;^C#202614623027#301573224215
^S#^Y#####=#####22.4000#####;^C#205546314631#231463146315
^S#^Z(43)#=####126.0000#####;^C#207770000000#000000000000
^S#^F^O^O$##=#######"^HI THERE!"
.SKIP 1
.FILL
.SKIP 1
.INDEX /
.INDEX ^I/^O CHANNEL
.INDEX ^CHANNEL
.INDENT -6
^&2.6.5#^T^Y^P^E /\N\N\&
.SKIP 1
^TO SELECT ANOTHER OUTPUT CHANNEL, GIVE THE COMMAND ^T^Y^P^E /\N\N, WHERE
\N\N IS A DECIMAL NUMBER LESS THAN 16, REPRESENTING A CHANNEL WHICH HAS PREVIOUSLY BEEN INITIALIZED
FOR OUTPUT (SEE SECTION 4).
^IF ZERO IS SELECTED, THE CONTROLLING TERMINAL WILL BE USED FOR OUTPUT.
^ONCE A CHANNEL HAS BEEN SELECTED FOR OUTPUT, ALL
OUTPUT GENERATED BY ^T^Y^P^E AND ^W^R^I^T^E COMMANDS WILL BE DIRECTED TO THAT CHANNEL.
.SKIP 1
.TEST PAGE 23
.INDENT -6
^&2.7###^TYPEOUT OF NUMERIC RESULTS\&
.SKIP 1
.INDEX ^FORMAT
^WHEN ^F^O^C^A^L TYPES OUT NUMERIC RESULTS, THE FORMAT MAY BE EITHER
OF THE FOLLOWING:
.SKIP 1
.INDEX ^F-FORMAT
^F-FORMAT#####3672.4906######OR
.BREAK
.INDEX ^E-FORMAT
^E-FORMAT#####0.3672^E+4
.SKIP 1
^F^O^C^A^L IS INITIALLY SET TO TYPE OUT
RESULTS IN ^F-FORMAT WITH UP TO EIGHT DIGITS,
FOUR TO THE LEFT OF THE DECIMAL POINT (THE INTEGER PART) AND FOUR
TO THE RIGHT OF THE DECIMAL POINT (THE FRACTIONAL PART).
.INDEX ^PERCENT MARK
.INDEX %
^THIS FORMAT IS %8.04.
^LEADING ZEROES ARE SUPPRESSED AND SPACES ARE SHOWN INSTEAD.
^TRAILING ZEROES ARE ALWAYS PRINTED.
^F^O^C^A^L-10 WILL USE ^F-FORMAT IF IT IS LEGAL AND THE VALUE DOES NOT EXCEED THE MAXIMUM ALLOWABLE BY THE CURRENT ^F-FORMAT SPECIFICATION.
^E-FORMAT WILL BE USED OTHERWISE.
^TO FORCE THE USE OF ^E-FORMAT THE COMMAND
^T^Y^P^E % MAY BE GIVEN (EQUIVALENT TO %00.00).
.SKIP
.TEST PAGE 29
.INDEX %
.INDEX ^PERCENT MARK
.INDEX ^F-FORMAT
.INDEX ^FORMAT
.INDENT -6
^&2.7.1#^T^Y^P^E#%\M\M.\N\N\&
.SKIP 1
^TO CHANGE THE ^F-FORMAT SPECIFICATION, USE THE COMMAND 
.SKIP 1
###########^T^Y^P^E %\M\M.\N\N
.SKIP 1
WHERE \M\M IS THE TOTAL NUMBER OF DIGITS INCLUDING ANY LEADING
SPACES, AND \N\N IS THE NUMBER OF DIGITS TO THE RIGHT
OF THE DECIMAL POINT INCLUDING TRAILING ZEROES.
(\N\N MAY BE EITHER BLANK OR TWO DIGITS BUT NOT ONE DIGIT.)
.SKIP 1
^IF \N\N IS ZERO OR BLANK, THE DATA WILL BE PRINTED AS INTEGERS WITHOUT
A DECIMAL POINT.
^IF \M\M.\N\N IS ZERO OR BLANK, THE DATA WILL BE PRINTED IN ^E-FORMAT.
.SKIP
^IF THE ^F-FORMAT SPECIFICATION IS CHANGED, THE CHANGED FORMAT WILL REMAIN OPERATIVE UNTIL
RESET BY THE USER.
.SKIP 1
^FOR EXAMPLE:
.SKIP 1
.INDEX ^F^O^C^A^L EXAMPLES
.NOFILL
*^S^E^T ^A=-12.34;^T^Y^P^E ^A;^T^Y^P^E %2,^A;^T^Y^P^E %,^A;^T^Y^P^E ^A;^T^Y^P^E %8.04,^A
=##-12.3400=-12=-1.2340^E+1=-1.2340^E+1=##-12.3400*
*
.FILL
.SKIP 1
^RULE: \M\M MUST BE GREATER THAN OR EQUAL TO \N\N.
.SKIP 1
^F-FORMAT IS INITIALLY SET AT %8.04.
.SKIP 1
.TEST PAGE 12
.INDEX ^E-FORMAT
.INDENT -6
^&2.7.2#^T^Y^P^E %^E\M\M.\N\N\&
.SKIP 1
^TO CHANGE THE ^E-FORMAT:###\N\N IS THE NUMBER OF DECIMAL PLACES
(AND MUST BE SPECIFIED AS TWO DIGITS).
.BREAK
^RULE: \M\M MUST BE GREATER THAN \N\N BY AT LEAST 1.
.SKIP 1
^E-FORMAT IS INITIALLY SET AT %^E5.04.
.SKIP 1
.TEST PAGE 50
.INDEX ^A^S^K COMMAND
.INDENT -6
^&2.8###^A^S^K\&
.SKIP 1
#####^A^S^K ^X,^Y,^Z
.SKIP 1
^WHEN THIS COMMAND IS ENCOUNTERED DURING EXECUTION, ^F^O^C^A^L TYPES A
.INDEX :
.INDEX ^COLON
COLON (:).
.BREAK
(^THE : MAY BE SUPPRESSED - ^SEE SECTION 8.4)
.BREAK
^THE USER THEN TYPES A VALUE FOR THE FIRST
SYMBOL (^X), FOLLOWED BY A COMMA, CARRIAGE-RETURN,
.INDEX ^ALT-MODE
LINE-FEED, ALT-MODE, ESCAPE OR SPACE. ^LEADING SPACES
ARE IGNORED BEFORE NUMERIC VALUES.
^F^O^C^A^L THEN TYPES ANOTHER COLON
.INDEX ^SYMBOLS
AND SO ON UNTIL ALL SYMBOLS IN THE ^A^S^K
STATEMENT HAVE BEEN GIVEN VALUES.
^IF THE ^A^S^K STATEMENT HAD BEEN WRITTEN AS
.SKIP 1
########^A^S^K "X,Y,Z?" ^X,^Y,^Z
.SKIP 1
THE TEXT X,Y,Z? WOULD HAVE BEEN TYPED OUT BEFORE THE FIRST COLON.
^IF A STRING IS BEING ASKED FOR,
IT MUST BE TERMINATED BY CARRIAGE-RETURN OR LINE-FEED.
.SKIP 1
.INDEX ^ESCAPE
^IF THE USER TYPES A VALUE FOLLOWED BY AN ESCAPE, OR JUST AN ESCAPE
BY ITSELF, THEN THE SYMBOL RETAINS ITS ORIGINAL VALUE.
.INDEX ^ALT-MODE
(^ESCAPE AND ALT-MODE HAVE THE SAME EFFECT.)
.SKIP 1
^CHARACTERS MAY BE RUBBED OUT INDIVIDUALLY WITH THE ^R^U^B^O^U^T
OR ^B^A^C^K^S^P^A^C^E KEYS.
^IF A SPACE IS RUBBED OUT, THEN LEADING SPACES ARE ONCE
AGAIN ACCEPTABLE (I.E.#IGNORED).
.INDEX ^RUBOUT
.INDEX ^BACKSPACE
^IF ALL THE CHARACTERS WERE RUBBED OUT BEFORE ^R^U^B^O^U^T OR ^B^A^C^K^S^P^A^C^E WAS
STRUCK, ^F^O^C^A^L WOULD ECHO _^^U, ^C^R, ^L^F AND
THE COLON CUE AGAIN.
.INDEX ^CONTROL-^R
^YOU MAY DISPLAY THE CUE AND CLEANED-UP LINE-SO-FAR BY TYPING
CONTROL-^R.
.SKIP 1
.INDEX ^CONTROL-^P
^IF A CONTROL-^P IS TYPED, THE PROGRAM WILL BE ABORTED, SINCE CONTROL-^P
HAS THE EFFECT OF AN INSTANTANEOUS "^Q^U^I^T".
^THUS A PROGRAM LOOP CONTAINING AN "^A^S^K" CAN BE BROKEN
BY TYPING CONTROL-^P, AND
THE PROGRAM WILL BE TERMINATED AS THOUGH THE "^A^S^K" COMMAND
HAD BEEN A "^Q^U^I^T" COMMAND.
^IT SHOULD BE NOTED, HOWEVER, THAT IF THE ^A^S^K ARGUMENTS WERE
.INDEX ^DEBUG
ENCLOSED IN QUESTION MARKS, THEN THE DEBUG SWITCH WILL REMAIN ON.
.SKIP 1
^TECHNICAL#^NOTES:
.SKIP 1
"^LEADING SPACE" INCLUDES ANY "NON-WAKE-UP" CHARACTER WITH ^A^S^C^I^I VALUE LESS THAN SPACE.
.SKIP 1
^INPUT-END-OF-FILE HAS THE SAME EFFECT AS LINE-FEED.
.SKIP 1
^DURING AN ^A^S^K COMMAND, OUTPUT DATA WILL NEVER GO ANYWHERE
BUT TO ^T^T^Y.
^HOWEVER, OUTPUT IS GENERATED ONLY IF THE CURRENTLY-SELECTED INPUT CHANNEL (SEE SECTION 4) IS ^T^T^Y.
.TEST PAGE 8
.SKIP 1
.INDEX /
.INDEX ^I/^O CHANNEL
.INDEX ^CHANNEL
.INDENT -6
^&2.8.1#^A^S^K /\N\N\&
.SKIP 1
^TO SELECT ANOTHER INPUT CHANNEL, GIVE THE COMMAND ^A^S^K /\N\N, WHERE
\N\N IS A DECIMAL NUMBER LESS THAN 16, REPRESENTING A CHANNEL WHICH HAS
PREVIOUSLY BEEN INITIALIZED
FOR INPUT (SEE SECTION 4).
^IF ZERO IS SELECTED, THE CONTROLLING TERMINAL WILL BE USED.
^ONCE A CHANNEL HAS BEEN SELECTED FOR INPUT, ^F^O^C^A^L WILL
EXPECT ALL INPUT TO COME FROM THAT CHANNEL, INCLUDING COMMANDS AND DATA.
.PAGE
.INDEX ^L^I^B^R^A ^C^A^L^L COMMAND
.INDEX ^L^I^B^R^A ^S^A^V^E COMMAND
.INDENT -6
^&3.0###^L^I^B^R^A#^COMMANDS\&
.SKIP 2
.INDEX ^PROGRAM STORAGE
.INDEX ^FILE STORAGE
.INDENT -6
^&3.1###^L^I^B^R^A#^C^A^L^L\&
.SKIP 1
^A PREVIOUSLY WRITTEN PROGRAM IS RECALLED
FROM A FILE - EITHER PROGRAM OR IMMEDIATE-MODE
COMMANDS OR BOTH.
^THE WHOLE FILE IS READ INTO MEMORY BEFORE ITS DATA IS USED IN ANY WAY.
^IF YOU ARE USING THE ^L^I^B^R^A ^C^A^L^L COMMAND TO REPLACE A PROGRAM
ALREADY IN THE TEXT BUFFER, YOU SHOULD FIRST
GIVE THE "^E^R^A^S^E ^A^L^L" COMMAND,
SO THAT THE OLD TEXT BUFFER IS REMOVED; OTHERWISE THE NEW PROGRAM
IS SUPERIMPOSED ON THE OLD. ^THE ^F^O^C^A^L-10 ^L^I^B^R^A
.INDEX ^W^E^A^V^E
^C^A^L^L IS AKIN TO ^B^A^S^I^C-10'S "^W^E^A^V^E" COMMAND.
.SKIP 1
.INDEX ^DELETION OF FILES
.INDENT -6
^&3.2###^L^I^B^R^A#^D^E^L^E^T^E\&
.BREAK
^THE FILE SPECIFIED IS DELETED FROM THE DEVICE.
.SKIP 1
.INDENT -6
^&3.3###^L^I^B^R^A#^S^A^V^E\&
.BREAK
^ALL OR PART OF THE PROGRAM TEXT MAY BE SAVED AS A FILE.
^IF NO LIST IS SPECIFIED ON THE ^L^I^B^R^A#^S^A^V^E COMMAND,
THE SYMBOL TABLE IS WRITTEN OUT AS PART OF THE FILE,
SO THAT A SUBSEQUENT ^L^I^B^R^A#^C^A^L^L WILL RESTORE THE
SYMBOLS AS WELL AS THE PROGRAM.
^F^O^C^A^L WILL PERFORM A BACKUP FUNCTION IF ^L^I^B^R^A ^S^A^V^E IS GIVEN FOR
AN ALREADY-EXISTING FILE NAME.
^THE EXISTING FILE WILL BE RENAMED TO *.^B^A^K, AND THE NAME WILL BE GIVEN TO THE NEWLY CREATED SAVE.
[^THE BACKUP FEATURE IS NOT AVAILABLE FOR ^K^A-10 DOUBLE-PRECISION ^F^O^C^A^L.]
.SKIP 1
.INDENT -6
^&3.4###^FORMAT OF ^L^I^B^R^A COMMANDS\&
.SKIP 1
.LEFT MARGIN 11
.INDEX ^PROTECTION OF FILES
.INDEX ^PROJECT-PROGRAMMER NUMBERS
^L^I^B^R^A FUNC DEV:FILE.EXT [PROJ,PROG] <PRT> LIST
.SKIP 1
.INDENT -11
^L^I^B^R^A######IS THE ^F^O^C^A^L COMMAND (MAY BE ABBREVIATED).
.INDENT -11
FUNC#######IS THE LIBRARY FUNCTION "^S^A^V^E" OR "^C^A^L^L" (MAY BE ABBREVIATED.)
.INDENT -11
DEV:#######(OPTIONAL) IS THE DEVICE NAME.
^ONLY THE FIRST SIX CHARACTERS ARE SIGNIFICANT.
^SPACES MAY NOT BE INCLUDED.
^THE DELIMITER ":" MUST IMMEDIATELY FOLLOW THE NAME.
^IF OMITTED, "^D^S^K" IS ASSUMED.
.INDENT -11
FILE#######IS THE FILENAME.
^ONLY THE FIRST SIX CHARACTERS ARE SIGNIFICANT.
^SPACES MAY NOT BE INCLUDED.
^IF OMITTED, "^F^O^C^A^L" IS ASSUMED.
^THE DELIMITER ".", IF GIVEN, MUST IMMEDIATELY FOLLOW THE FILE NAME.
.INDENT -11
EXT########(OPTIONAL) IS THE FILE EXTENSION.
^IF THE DELIMITER "." IS ENCOUNTERED,
THE PROGRAM EXPECTS A FILE EXTENSION TO FOLLOW IT.
^HOWEVER A NULL EXTENSION IS ALLOWED,
WHICH IS INDICATED BY A SPACE FOLLOWING THE ".".
^ONLY THE FIRST THREE CHARACTERS ARE SIGNIFICANT.
^SPACES MAY NOT BE INCLUDED.
^IF NO FILE EXTENSION IS GIVEN, THE DEFAULTS ARE:
.BREAK
.LEFT MARGIN 23
.INDENT -8
^C^A^L^L:###^FIRST LOOK FOR "^F^C^L".
^IF NOT FOUND, LOOK FOR A NULL EXTENSION.
.INDENT -8
^S^A^V^E:###"^F^C^L" IS THE DEFAULT EXTENSION.
.LEFT MARGIN 11
.INDENT -11
[PROJ,PROG](OPTIONAL) INDICATES THE DISK AREA TO
BE USED FOR THE COMMAND.
.INDENT -11
.INDEX ^PROTECTION
<PRT>######(OPTIONAL)(^S^A^V^E FUNCTION ONLY) IS AN OCTAL NUMBER
INDICATING THE PROTECTION TO BE GIVEN TO THE FILE.
^WARNING: ^IF AN ERROR OCCURS DURING ^L^I^B^R^A ^S^A^V^E
COMMAND, AND A PRE-5-SERIES MONITOR IS BEING USED,
THE DEVICE IS RELEASED WITHOUT RENAMING TO
THE REQUESTED PROTECTION.
.INDENT -11
LIST#######(OPTIONAL)(^S^A^V^E FUNCTION ONLY) INDICATES WHICH
LINES OR GROUPS ARE TO BE SAVED.
^IF OMITTED, OR "ALL" IS SPECIFIED, THE WHOLE PROGRAM IS SAVED.
.SKIP 1
^L^I^B^R^A COMMANDS MAY BE INCLUDED IN PROGRAMS, WITH SOME RESTRICTIONS
ON THE ^L^I^B^R^A ^C^A^L^L.
^L^I^B^R^A ^C^A^L^L MAY NOT ATTEMPT TO OVERWRITE THE PROGRAM LINE
WHICH ISSUED THE CALL.
^ON A ^L^I^B^R^A ^C^A^L^L, THERE MUST GENERALLY BE SUFFICIENT MEMORY SPACE TO
HOLD THE WHOLE FILE BECAUSE IT IS READ IN IN ITS ENTIRETY BEFORE
EXECUTION/LOADING IS COMMENCED.
(^THIS ENABLES ^I/^O FUNCTIONS TO BE NESTED TO ANY DEPTH.)
.PAGE
.LEFT MARGIN 6
.INDEX ^GENERALISED ^I/^O
.INDEX ^DISK ^I/^O
.INDEX ^PERIPHERAL DEVICES
.INDENT -6
^&4.0###^INPUT AND OUTPUT ON OTHER DEVICES\&
.SKIP 1
^ALTHOUGH THE CONTROLLING TERMINAL IS USUALLY SELECTED AS THE INPUT AND OUTPUT
DEVICE, THIS IS NOT ESSENTIAL; IN FACT IT IS POSSIBLE TO USE
ALMOST ANY ^D^E^C\S\Y\S\T\E\M-10 DEVICE FOR THIS PURPOSE.
^TO SELECT ANOTHER INPUT OR OUTPUT DEVICE, IT MUST FIRST BE INITIALIZED,
AND THE FOLLOWING SET OF COMMANDS PERFORMS BOTH THE INITIALIZATION AND
SELECTION FUNCTIONS.
.SKIP 1
.INDEX ^I/^O CHANNEL
.INDEX ^CHANNEL
.INDENT -6
^&4.1###^INPUT AND OUTPUT CHANNELS\&
.BREAK
^D^E^C\S\Y\S\T\E\M-10 SOFTWARE ALLOWS PROGRAMS LIKE ^F^O^C^A^L TO ASSOCIATE
UP TO 16 (DECIMAL) DEVICES OR FILES WITH THE PROGRAM, AND EACH
SUCH ASSOCIATION IS CALLED A "CHANNEL".
^IN ^F^O^C^A^L, THE CONTROLLING TERMINAL USES CHANNEL ZERO,
THE ^L^I^B^R^A COMMANDS USE CHANNEL ONE,
AND THE OTHER CHANNELS ARE AVAILABLE FOR FILE INPUT AND OUTPUT.
^THE CHANNELS ARE NUMBERED IN DECIMAL FROM 0 TO 15.
^IN ^F^O^C^A^L IT IS NOT POSSIBLE TO USE A SINGLE CHANNEL FOR BOTH INPUT
AND OUTPUT SIMULTANEOUSLY, AND ATTEMPTS TO
DO SO WILL RESULT IN THE FIRST SELECTION
BEING CLEARED. (^THE CONTROLLING TERMINAL, HOWEVER, CAN HAVE
BOTH INPUT AND OUTPUT ON THE SAME CHANNEL).
.SKIP 1
^IN ^F^O^C^A^L, WHEN A CERTAIN CHANNEL HAS
BEEN SELECTED FOR INPUT, THEN ALL
INPUT, (COMMANDS AND DATA) WILL BE TAKEN FROM
THAT CHANNEL. ^THIS APPLIES TO SUCH
COMMANDS AS ^A^S^K, ^M^O^D^I^F^Y, AND INPUT
SUBSEQUENT TO THE ^Q^U^I^T COMMAND.
.SKIP 1
^IN ^F^O^C^A^L, WHEN A CERTAIN CHANNEL HAS
BEEN SELECTED FOR OUTPUT, THEN ALL
SUBSEQUENT OUTPUT FROM ^W^R^I^T^E AND ^T^Y^P^E WILL BE DIRECTED TO THAT CHANNEL.
.SKIP 1
.INDENT -6
^&4.2###^INPUT DEVICE INITIALIZATION\&
.BREAK
^THE COMMAND:
.SKIP 1
.INDEX ^O^P^E^R^A^T^E ^I^N^P^U^T COMMAND
.INDEX /
^O^P^E^R^A^T^E ^I^N^P^U^T \D\E\V:\F\I\L\E.\E\X\T[\P\R\J,\P\R\G]/\M
.SKIP 1
INITIALIZES THE SPECIFIED FILE ON CHANNEL N, AND SELECTS CHANNEL N
FOR INPUT.
^DEFAULTS ARE USED IF NECESSARY AS SPECIFIED BELOW.
^CHANNEL 1 IS USED FOR THE ^L^I^B^R^A COMMAND, AND
IS THEREFORE UNAVAILABLE FOR INPUT IN OTHER WAYS.
.TEST PAGE 10
.SKIP 1
.INDENT -6
^&4.3###^OUTPUT DEVICE INITIALIZATION\&
.BREAK
^THE COMMAND:
.SKIP 1
.INDEX ^O^P^E^R^A^T^E ^O^U^T^P^U^T COMMAND
.INDEX /
^O^P^E^R^A^T^E ^O^U^T^P^U^T \D\E\V:\F\I\L\E.\E\X\T[\P\R\J,\P\R\G]<\P\R\T>/\M
.SKIP 1
IS USED TO INITIALIZE A FILE FOR OUTPUT ON CHANNEL
M AND SELECT CHANNEL M FOR OUTPUT.
^DEFAULTS ARE USED IF NECESSARY AS SPECIFIED BELOW.
^CHANNEL 1 IS USED FOR THE ^L^I^B^R^A COMMAND, AND
IS, THEREFORE, UNAVAILABLE FOR OUTPUT IN OTHER WAYS.
.TEST PAGE 13
.SKIP 1
.INDENT -6
^&4.4###^RELEASING A DEVICE\&
.SKIP 1
^THE MOST CONVENIENT METHOD FOR RELEASING A DEVICE/FILE FROM A CHANNEL
IS TO ATTEMPT TO INITIALIZE DEVICE "^T^T^Y" ON THAT CHANNEL.
^THIS WILL AUTOMATICALLY RELEASE THE CHANNEL BECAUSE THE DEVICE "^T^T^Y",
BEING THE USER'S CONSOLE IS ALWAYS ASSIGNED TO CHANNEL ZERO.
.TEST PAGE 13
.SKIP 1
.INDENT -6
^&4.5###^DEFAULTS\&
.LEFT MARGIN 12
.SKIP 1
.INDENT -6
DEV:##^D^S^K
.INDENT -6
FILE##^F^O^C^A^L
.INDENT -6
_.EXT##.^L^S^T FOR OUTPUT.
.BREAK
_.^F^C^L FOR INPUT, BUT IF THE FILE IS NOT FOUND, LOOK FOR A NULL EXTENSION.
.INDEX /
.INDENT -6
/M####2 FOR OUTPUT.
.BREAK
3 FOR INPUT.
.LEFT MARGIN 6
.SKIP 1
.TEST PAGE 15
.INDEX ^L^I^B^R^A ^C^A^L^L COMMAND
.INDEX ^O^P^E^R^A^T^E ^I^N^P^U^T COMMAND
.INDENT -6
^&4.6###^DIFFERENCES BETWEEN ^O^P^E^R^A^T^E ^I^N^P^U^T AND ^L^I^B^R^A-^C^A^L^L\&
.SKIP 1
^AT THE END-OF-FILE, THE ^L^I^B^R^A-^C^A^L^L WILL CONTINUE THE
PROGRAM WHICH CALLED IT; WHEN THE ^O^P^E^R^A^T^E ^I^N^P^U^T FILE REACHES THE END,
.INDEX ^E^X^I^T
^F^O^C^A^L WILL EXIT.
.SKIP 1
.INDEX ^L^I^B^R^A ^C^A^L^L COMMAND
^THE ^Q^U^I^T COMMAND WILL TERMINATE THE ^L^I^B^R^A-^C^A^L^L BUT NOT THE ^O^P^E^R^A^T^E ^I^N^P^U^T FILE.
.SKIP 1
^THE ENTIRE ^L^I^B^R^A-^C^A^L^L FILE IS READ INTO MEMORY FIRST; THE ^O^P^E^R^A^T^E ^I^N^P^U^T FILE IS
READ IN ONE BUFFER AT A TIME.
.TEST PAGE 15
.SKIP 1
.INDENT -6
^&4.7###^NOTES ON FILE ^I/^O\&
.SKIP 1
^ERRORS ARE TYPED OUT AND CAUSE REVERSION TO KEYBOARD MODE,
AND THE OUTPUT DEVICE IS RELEASED (WITHOUT <PRT> ON 4-SERIES MONITORS).
.SKIP 1
^AT END-OF-FILE, THE FOLLOWING ACTION TAKES PLACE:
.SKIP 1
^F^C^H^R(-1) TAKES THE VALUE -1.
^INPUT TO ^M^O^D^I^F^Y AND ^A^S^K IS AS THOUGH TERMINATED BY A LINE-FEED.
^INPUT TO THE COMMAND SCANNER CAUSES ^F^O^C^A^L-10 TO EXIT
AFTER THE LAST COMMAND HAS BEEN EXECUTED.
.SKIP 1
^WHILE NON-KEYBOARD INPUT IS IN PROGRESS, ^F^O^C^A^L SUPPRESSES
.INDEX ^ASTERISK CUE
THE ASTERISK CUE USED TO INDICATE READINESS TO ACCEPT ANOTHER COMMAND.
^THIS ASTERISK IS NEITHER TYPED OUT NOR SENT TO THE OUTPUT FILE.
.PAGE
.FILL
.INDEX ^TRACE FEATURE
.INDEX ^DEBUG
.INDEX ^QUERY(?)
.INDEX ?
.INDENT -6
^&5.0###^THE TRACE FEATURE\&
.SKIP 1
^THE "?" CHARACTER HAS SPECIAL SIGNIFICANCE WHEN IT APPEARS IN A
STRING BEING INTERPRETED BY ^F^O^C^A^L.
^IT IS IGNORED EXCEPT FOR ITS ACTION IN TURNING THE "DEBUG" FEATURE ON AND OFF.
^WHEN ^F^O^C^A^L IS STARTED OR RE-STARTED, THE "DEBUG" FEATURE IS INACTIVE.
^THIS MEANS THAT ANY "?" APPEARING IN THE INTERPRETER'S INPUT STRING
IS ABLE TO ACTIVATE THE "DEBUG" FEATURE.
^WHEN "DEBUG" IS ACTIVE, EVERY CHARACTER PASSING THROUGH THE INTERPRETER IS TYPED OUT.
^A SECOND "?" WILL DE-ACTIVATE THE "DEBUG".
^ANY ERRORS WILL DE-ACTIVATE THE "DEBUG".
.BREAK
"^APPEARING IN THE INTERPRETER'S INPUT STRING" MEANS APPEARING
ANYWHERE WITHIN A LINE NUMBER, COMMAND, COMMAND-MODIFIER OR ARGUMENT
BUT NOT INSIDE A PAIR OF DOUBLE#QUOTES AS A STRING CONSTANT.
^THE QUESTION MARK ITSELF IS NEVER TYPED.
^LINES TYPED IN BY THE USER WITH LINE NUMBERS AT THE BEGINNING
("INDIRECT" COMMANDS) ARE NOT CONSIDERED AS BEING INTERPRETED WHILE
THEY ARE MERELY BEING PLACED IN THE PROGRAM.
^THIS APPLIES TO THE ^L^I^B^R^A ^C^A^L^L COMMAND TOO.
.SKIP 1
^IT IS ILLEGAL TO PUT A QUESTION MARK IN A LINE NUMBER
PRECEDING A LINE TO BE PLACED IN A PROGRAM.
^IN OTHER WORDS YOU MUST NOT TYPE
.SKIP 1
##########1.0?1 ^S^E^T ^X=5
.SKIP 1
^WARNING: ^IF ?? ARE PUT AROUND THE ARGUMENTS OF AN ^A^S^K COMMAND, THEN ANY
.INDEX ^CONTROL-^C
.INDEX ^CONTROL-^P
ABNORMAL ACTION (CONTROL-^C OR CONTROL-^P) LEAVES THE TRACE FEATURE ACTIVATED.
.PAGE
.INDEX ^F^O^C^A^L EXAMPLES
.INDEX ^EXAMPLES
.INDEX ^EXAMPLES OF ^F^O^C^A^L PROGRAMS
.INDENT -6
^&6.0###^EXAMPLES OF ^F^O^C^A^L PROGRAMS\&
.SKIP 1
.NOFILL
_.^R ^F^O^C^A^L
*^C ^T^H^E ^F^O^L^L^O^W^I^N^G ^I^S ^A ^S^A^M^P^L^E ^S^H^O^W^I^N^G ^U^S^E ^O^F ^F^O^C^A^L
*^C ^T^O ^W^R^I^T^E ^A^N^D ^R^U^N ^A ^P^R^O^G^R^A^M, ^D^E^B^U^G ^I^T ^A^N^D ^S^A^V^E ^I^T.
*^C ^T^H^E ^P^R^O^G^R^A^M ^W^I^L^L ^C^O^N^V^E^R^T ^D^E^G^R^E^E^S ^F ^T^O ^D^E^G^R^E^E^S ^C.
*
*1.02 ^A^S^K "^E^N^T^E^R ^F",^F; ^D^O 2
*1.04 ^G^O ^T^O 1.02
*2.02 ^S^E^T ^C =(^F-32)*5/9; ^T "^F",^F," ^C",^C!
*^C ^N^O^W ^W^R^I^T^E ^O^U^T ^A^L^L
*^W
^C-^F^O^C^A^L###\V3^C(245)-1 1227######15-^J\A\N-74
.SKIP 1
1.02###^A^S^K "^E^N^T^E^R ^F",^F; ^D^O 2
1.04###^G^O ^T^O 1.02
.SKIP 1
2.02###^S^E^T ^C =(^F-32)*5/9; ^T "^F",^F," ^C",^C!
*
*^C ^T^H^E ^P^R^O^G^R^A^M ^A^S ^W^R^I^T^T^E^N ^W^I^L^L ^C^O^N^T^I^N^U^E ^F^O^R^E^V^E^R ^U^N^L^E^S^S
.INDEX ^C\O\N\T\R\O\L-^C
*^C ^S^T^O^P^P^E^D ^W^I^T^H _^^C (^S^E^E ^S^E^C^T^I^O^N 7).
*^C ^O^T^H^E^R^W^I^S^E ^W^E ^C^O^U^L^D,
*^C ^B^Y ^D^I^R^E^C^T ^C^O^M^M^A^N^D, ^R^U^N ^A ^S^E^R^I^E^S ^O^F ^C^H^O^S^E^N ^V^A^L^U^E^S:
*^F^O^R ^F=34,2,38;^D^O 2
^F=###34.0000 ^C=####1.1111
^F=###36.0000 ^C=####2.2222
^F=###38.0000 ^C=####3.3333
*
*^C ^T^H^E ^T^E^X^T ^M^A^Y ^B^E ^S^T^O^R^E^D ^A^S ^A ^F^I^L^E ^W^I^T^H ^A ^L^I^B^R^A ^S^A^V^E
*^L ^S ^T^E^X^T^F
*
*^C ^W^H^I^C^H ^S^T^O^R^E^S ^I^T ^A^S ^T^E^X^T^F.^F^C^L ^O^N ^D^I^S^K.
*
*^C ^S^U^P^P^O^S^E, ^I^N ^T^Y^P^I^N^G 2.02, ^W^E ^H^A^D ^W^R^I^T^T^E^N 3" ^I^N^S^T^E^A^D ^O^F
*^C 32, ^L^E^A^D^I^N^G ^T^O ^A^N ^I^L^L^E^G^A^L ^C^H^A^R^A^C^T^E^R ^M^E^S^S^A^G^E
*^C
*^C ^I^F ^T^H^E ^C^A^U^S^E ^I^S ^N^O^T ^O^B^V^I^O^U^S, ^U^S^E ^D^E^B^U^G - ^S^E^C^T^I^O^N 5.
.INDEX ^TRACE FEATURE
.INDEX ^DEBUG
.INDEX ^QUERY(?)
*^C ^T^H^E ^C^H^A^R^A^C^T^E^R ^C^A^U^S^I^N^G ^T^H^E ^T^R^O^U^B^L^E ^C^A^N ^B^E ^L^O^C^A^T^E^D.
*?^D^O 2.02
^D^O 2^S^E^T ^C =(^F-3?
?^M\I\S\M\A\T\C\H\E\D \P\A\R\E\N\T\H\E\S\E\S
02.02###^S^E^T ^C =(^F-3")*5/9; ^T "^F",^F," ^C",^C!
###################_^
*
*^C ^T^H^E ^E^R^R^O^R ^M^E^S^S^A^G^E ^T^U^R^N^S ^O^F^F ^T^H^E ^D^E^B^U^G.
*
*
*
*^C ^N^O^W ^G^E^T ^A ^P^R^O^G^R^A^M ^P^R^E^V^I^O^U^S^L^Y ^S^A^V^E^D ^A^S ^F^I^L^E ^G1.^F^C^L ^O^N ^D^S^K
*^E^R^A^S^E ^A^L^L;^C- ^U^S^U^A^L^L^Y ^A ^G^O^O^D ^I^D^E^A.
*^L ^C ^G1
*^C ^T^O ^G^E^T ^A ^L^I^S^T^I^N^G ^G^I^V^E ^C^O^M^M^A^N^D ^W^R^I^T^E, ^O^R ^W^R^I^T^E ^A^L^L
*^W
^C-^F^O^C^A^L \V3^C(245)-1######2123####15-^J\A\N-74
.SKIP 1
1.01###^C-^P^R^O^G^R^A^M ^T^O ^T^Y^P^E ^T^H^E ^V^A^L^U^E ^O^F ^P^I.
1.02###^T^Y^P^E %20.17,"^P^I",4*^F^A^T^N(1)!
1.03###^Q^U^I^T
*
*^G^O
^P^I=###3.14159265358980672
*
.INDEX ^CONTROL-^Z
*^C ^N^O^W ^I^F ^W^E ^H^A^V^E ^F^I^N^I^S^H^E^D, ^W^E ^C^A^N ^T^Y^P^E ^C^O^N^T^R^O^L-^Z
*_^^Z
.SKIP 1
^E^X^I^T
.SKIP 1
_.
.FILL
.PAGE
.INDEX ^STOPPING
.INDEX ^EMERGENCY
.INDEX ^E^X^I^T
.INDEX ^S^T^A^R^T COMMAND
.INDEX ^R^E^E
.INDEX ^R^E^E^N^T^E^R
.INDENT -6
^&7.0###^STOPPING ^F^O^C^A^L\&
.SKIP 1
^IF ^F^O^C^A^L IS WAITING FOR YOU TO TYPE SOMETHING,
.INDEX ^MONITOR
YOU MAY RETURN TO THE ^D^E^C\S\Y\S\T\E\M-10 MONITOR BY TYPING CONTROL-^C.
^IF ^F^O^C^A^L HAS TIED ITSELF INTO A LOOP OR IF FOR SOME OTHER REASON
YOU WISH TO QUIT DURING EXECUTION, YOU MAY
RETURN TO THE ^D^E^C\S\Y\S\T\E\M-10 MONITOR BY TYPING
CONTROL-^C TWICE.
^IN EITHER CASE, YOU MAY CONTINUE BY GIVING THE MONITOR COMMAND "^C^O^N^T^I^N^U^E"
OR RE-START ^F^O^C^A^L WITH THE "^S^T^A^R^T" OR "^R^E^E^N^T^E^R" COMMANDS
.INDEX ^K^J^O^B
OR LOG OFF THE SYSTEM WITH THE "^K^J^O^B" COMMAND (SEE MONITOR MANUAL).
"^S^T^A^R^T" WILL GIVE AN ERROR MESSAGE, BUT "^R^E^E" WILL CAUSE THE
ACTION OF A "^Q^U^I^T" COMMAND TO BE EXECUTED.
.SKIP 1
^IF YOU HAVE BEEN DOING OUTPUT ("^O^P^E^R^A^T^E" COMMAND), AND WANT
TO CLOSE THE OUTPUT FILES BEFORE FINISHING, YOU SHOULD
TYPE CONTROL-^Z, WHICH CAUSES ^F^O^C^A^L TO EXIT TO THE MONITOR.
^THIS IS A CLEAN METHOD OF CLOSING ALL FILES.
.SKIP 2
.INDEX ^S^A^V^E COMMAND
^F^O^C^A^L MAY BE SAVED WITH THE MONITOR "^S^A^V^E" COMMAND AFTER TYPING
.INDEX ^MONITOR ^S^A^V^E COMMAND
CONTROL-^C, BUT THEREAFTER IT CANNOT BE RE-STARTED OR CONTINUED
EXCEPT BY THE "^S^T^A^R^T" COMMAND.
^ALL TEXT, SYMBOLS AND VALUES ARE RETAINED, BUT ^I/^O IN PROGRESS
WILL BE ABORTED.
(^TO SAVE PROGRAM ONLY SEE SECTION 3)
.SKIP 2
.INDEX ^RE-STARTING ^F^O^C^A^L
^A RE-START WILL ALWAYS RESET THE "^F^O^C^A^L" FUNCTION SWITCHES.
.SKIP 1
.INDEX ^CONTROL-^P
^IF ^F^O^C^A^L IS WAITING FOR YOU TO TYPE A COMMAND
OR TO TYPE SOMETHING DURING AN
^A^S^K COMMAND, YOU MAY ABORT BY TYPING CONTROL-^P.
^THIS WILL HAVE THE EFFECT OF EXECUTING AN INSTANTANEOUS "^Q^U^I^T".
.SKIP 2
.INDENT -6
^&7.1###^HOW TO FORCE A ^F^O^C^A^L PROGRAM TO EXIT\&
.SKIP 1
^YOU CAN TAKE ADVANTAGE OF ^F^O^C^A^L'S BEHAVIOUR WHEN IT REACHES THE END OF ITS INPUT FILE.
^FOR EXAMPLE, THE FOLLOWING PROGRAM WILL EXIT CLEANLY:
.SKIP 1
.INDEX ^CONTROL-^Z
.INDEX ^O^P^E^R^A^T^E ^I^N^P^U^T COMMAND
.INDEX ^O^P^E^R^A^T^E ^O^U^T^P^U^T COMMAND
.INDEX ^E^X^I^T
^O^P^E^R^A^T^E ^I^N^P^U^T ^N^U^L: ;^Q^U^I^T
.SKIP 1
^ALTERNATIVELY, IF INPUT IS FROM THE KEYBOARD,
CONTROL-^Z WILL CAUSE ^F^O^C^A^L TO EXIT.
.TEST PAGE 15
.SKIP 1
.INDEX ^R^E^E^N^T^E^R
.INDEX ^MONITOR
.INDEX ^CONTROL-^C
.INDEX ^R^E^E
.INDENT -6
^&7.2###^THE "^R^E^E^N^T^E^R" MONITOR COMMAND\&
.SKIP 1
^WHILE ^F^O^C^A^L IS EXECUTING A PROGRAM, YOU
MAY WISH TO ABORT THE CURRENT TASK.
^TO DO THIS, TYPE TWO CONTROL-^C'S AND "^R^E^E^N^T^E^R".
^R^E^E^N^T^E^R HAS THE EFFECT OF EXECUTING A ^Q^U^I^T COMMAND WITHOUT RELEASING ANY ^I/^O DEVICES.
^F^O^C^A^L WILL CONTINUE USING THE SAME INPUT DEVICE AS BEFORE;
IT WILL TAKE ITS NEXT COMMAND FROM THERE AND CONTINUE EXECUTION.
.PAGE
.INDEX ^FUNCTION NAMES
.INDENT -6
^&8.0###^FUNCTIONS\&
.SKIP 1
.INDENT -6
^&8.1###^WHAT IS A FUNCTION?\&
.BREAK
^CERTAIN SPECIFIC NAMES RELATE TO MATHEMATICAL FUNCTIONS THAT
TAKE AN ARGUMENT (IN PARENTHESES FOLLOWING THE FUNCTION NAME)
AND USE IT TO PRODUCE A NUMERICAL RESULT.
^FOR EXAMPLE:
.SKIP 1
########*^S^E^T ^X=^F^S^I^N(37.5*180/^P^I)
.SKIP 1
^THIS STATEMENT WILL GIVE ^X THE VALUE REPRESENTED BY THE SINE OF THE
.INDEX ^PARENTHESES
EXPRESSION INSIDE THE PARENTHESES. ^IF THERE IS NO EXPRESSION
IN PARENTHESES IMMEDIATELY FOLLOWING THE FUNCTION NAME
(OR NO PARENTHESES AT ALL), ZERO WILL BE USED AS THE ARGUMENT.
^FOR EXAMPLE:
.SKIP 1
########*^S^E^T ^X=5+^F^C^O^S+3
.SKIP 1
^THIS WILL USE THE COSINE OF ZERO IN EVALUATING THE EXPRESSION
TO THE RIGHT OF "=".
.SKIP 1
.INDENT -6
^&8.2###^STANDARD FUNCTIONS\&
.SKIP 1
^THE STANDARD ^F^O^C^A^L FUNCTIONS, ^F^S^I^N, ^F^C^O^S,
^F^A^T^N, ^F^S^Q^T, ^F^E^X^P, AND
^F^L^O^G ARE TABULATED IN SECTION 9.0.
.SKIP 1
^ADDITIONAL FUNCTIONS INCLUDED ARE:
.NOFILL
^F^L^O^G10#####LOG TO BASE 10
^F^S^I^N^D######SINE IN DEGREES
^F^C^O^S^D######COSINE IN DEGREES
.FILL
.SKIP 1
.INDEX ^F^N^E^W FUNCTION
.INDENT -6
^&8.3###^EXTERNAL FUNCTIONS: ^F^N^E^W\&
.SKIP 1
^EXTERNAL FUNCTION - SEE SECTION 14.
.SKIP 1
.TEST PAGE 19
.INDEX ^F^O^C^A^L FUNCTION
.INDEX ^FUNCTION ^F^O^C^A^L
.INDENT -6
^&8.4###^PARAMETERS AND VALUES INTERNAL TO ^F^O^C^A^L:##^F^O^C^A^L\&
.SKIP 1
^IF THE FIRST ARGUMENT IS IN THE RANGE 1-18 INCLUSIVE,
"^F^O^C^A^L" IS A TWO-ARGUMENT FUNCTION CAPABLE OF MODIFYING THE OPERATION
OF ^F^O^C^A^L ITSELF.
^THE FIRST ARGUMENT SPECIFIES THE SWITCH
TO BE MODIFIED BY ITS SERIAL NUMBER.
^THE SECOND ARGUMENT PROVIDES THE VALUE TO BE INSERTED.
^FOR LOGICAL SWITCHES, +1.0 MEANS SET,
-1.0 MEANS CLEAR, AND ZERO MEANS
RESTORE TO INITIAL SETTING.
^THE PREVIOUS SETTING IS RETURNED AS THE FUNCTION VALUE.
.SKIP 1
.NOFILL
^&^SWITCH###INITIALLY######IF SET, SWITCH WILL\&
.INDEX ^PROMPT FOR ^A^S^K DATA
.INDEX ^CUE FOR ^A^S^K DATA
###1######CLEARED#######SUPPRESS ":" CUE FOR ^A^S^K DATA
###2######CLEARED#######SUPPRESS "=" PREFIX TO NUMERIC ^O/^P
.INDEX ^ERROR MESSAGES
###3######CLEARED#######SUPPRESS NON-FATAL ERROR MESSAGES.
.FILL
.SKIP 2
^IF THE FIRST ARGUMENT IS GREATER THAN OR EQUAL TO 23, "^F^O^C^A^L" IS
.INDEX ^P^E^E^K
A ONE-ARGUMENT FUNCTION PERFORMING A "^P^E^E^K" ON ^F^O^C^A^L'S LOW SEGMENT.
^THE ARGUMENT IS THE ADDRESS IN THE LOW SEGMENT, AND THE VALUE RETURNED
BY THE FUNCTION IS A SIGNED 36-BIT NUMBER WHICH IS THE CONTENTS OF THAT
LOCATION.
^SOME USEFUL LOCATIONS ARE:
.NOFILL
^&^ADDRESS#^CONTENTS\&
.INDEX ^JOB DATA AREA
23-95###^JOB DATA AREA
34######^ACCUMULATED ERROR COUNT
36######^HIGHEST ADDRESS IN LOW SEGMENT
95######^F^O^C^A^L'S VERSION NUMBER
97######^RIGHT HALF HOLDS ADDRESS OF INDEX DATA BLOCK
98######^RIGHT HALF POINTS JUST BELOW ^F^O^C^A^L'S TEXT AREA
101#####^POINTER TO LAST CHARACTER IN ^F^O^C^A^L TEXT AREA
.INDEX ^I/^O CHANNEL
102#####^CURRENT OUTPUT CHANNEL NUMBER
103#####^CURRENT INPUT CHANNEL NUMBER
104-151#^SIXTEEN SETS OF 3-WORD BUFFER-HEADERS
152-167#^BUFFER SPACE POINTERS - ONE PER CHANNEL
168#####^F^O^R^F^L^G: ^CURRENT "^F^O^R" LINE NUMBER (RIGHT HALF)
170#####^MOST RECENT ARGUMENT OF REPETITIVE LOOP (LINE NUMBER)
172#####^CURRENT LINE NUMBER
173#####^L^I^N^N^U^M: ^CURRENT LINE NUMBER IN RIGHT HALF
176#####^HIGHEST ADDRESS IN THE SYMBOL TABLE
.INDEX ^FORMAT
177#####^F-FORMAT CONTROL
178#####^E-FORMAT CONTROL
.INDEX ^RANDOM NUMBERS
179#####^LAST RANDOM NUMBER (FLOATING POINT)
.FILL
.SKIP 1
^FURTHER DETAILS MUST BE OBTAINED FROM ^APPENDIX ^A.
.SKIP 1
.TEST PAGE 14
.INDEX ^G^E^T^T^A^B
.INDEX ^MONITOR
.INDEX ^TIME-OF-DAY
.INDEX ^DATE
.INDEX ^JIFFIES
.INDEX ^KILO-CORE-TICKS
.INDEX ^RUN TIME
.INDEX ^U^U^O -^G^E^T^T^A^B
.INDENT -6
^&8.5###^MONITOR INFORMATION:##^G^E^T^T^A^B(^T^A^B^N^U^M,^T^A^B^I^N^X)\&
.SKIP 1
^F^O^C^A^L PROGRAMS MAY OBTAIN CERTAIN INFORMATION
FROM THE ^D^E^C\S\Y\S\T\E\M-10 MONITOR
BY THE USE OF THE ^G^E^T^T^A^B FUNCTION.
^THE ^F^O^C^A^L "^G^E^T^T^A^B" FUNCTION USES
THE MONITOR ^G^E^T^T^A^B ^U^U^O WHICH MUST
THEREFORE BE AVAILABLE AS A MONITOR SERVICE.
^G^E^T^T^A^B REQUIRES TWO ARGUMENTS - A TABLE NUMBER AND A TABLE INDEX.
^THE TABLE NUMBERS AND TABLE INDICES ARE LISTED IN THE MONITOR MANUAL,
BUT IT SHOULD BE NOTED THAT NUMBERS IN ^F^O^C^A^L ARE DECIMAL WHILE THE
NUMBERS IN THE MONITOR MANUAL ARE PROBABLY OCTAL!
^THE ANSWER RETURNED BY THE MONITOR IS INTERPRETED AS A SIGNED 36-BIT
INTEGER. ^SINGLE-PRECISION VERSIONS OF ^F^O^C^A^L ARE NOT CAPABLE OF
HOLDING ALL 36 BITS AT ONCE.
^THERE ARE NO PLANS TO REMOVE THIS RESTRICTION.
.SKIP 1
^EXAMPLES OF ^G^E^T^T^A^B CALLS.
.SKIP 1
^G^E^T^T^A^B(4,-1) TOTAL TIME USED BY THIS JOB (IN JIFFIES)
.BREAK
^G^E^T^T^A^B(5,-1) KILO-CORE-TICKS OF THIS JOB
.BREAK
^G^E^T^T^A^B(9,8)##TIME OF DAY IN JIFFIES SINCE MIDNIGHT
.BREAK
^G^E^T^T^A^B(9,9)##TODAY'S DATE (12-BIT FORMAT)
.SKIP 1
^IF THE ^G^E^T^T^A^B ^U^U^O GIVES THE ERROR RETURN,
LOCATION .^J^B^E^R^R IN THE JOB DATA AREA WILL BE INCREMENTED, AND
THE ^G^E^T^T^A^B FUNCTION WILL RETURN ^T^A^B^N^U^M+(^T^A^B^I^N^X*2**18).
.TEST PAGE 15
.SKIP 1
.INDEX ^RANDOM NUMBERS
.INDENT -6
^&8.6###^RANDOM NUMBER GENERATOR: ^F^R^A^N\&
.SKIP 1
^FUNCTION ^F^R^A^N WILL GENERATE A RANDOM OR PSEUDO-RANDOM NUMBER
GREATER THAN OR EQUAL TO 0.5 AND LESS THAN 1.0.
^THE ARGUMENT DETERMINES WHAT KIND OF RANDOM NUMBER IS GIVEN:
.NOFILL
.SKIP 1
^&####^A^R^G^U^M^E^N^T##^R^E^S^U^L^T\&
########0#####^NEXT#IN PSEUDO-RANDOM SEQUENCE.
.SKIP 1
####^POSITIVE##^RESTART PSEUDO-RANDOM SEQUENCE AS FOR
##############VIRGIN PROGRAM.
.SKIP 1
####^NEGATIVE##^TRUE RANDOM NUMBER
.FILL
.TEST PAGE 17
.SKIP 1
.INDEX ^F^C^H^R FUNCTION
.INDENT -6
^&8.7###^SINGLE CHARACTER ^I/^O: ^F^C^H^R\&
.SKIP 1
^TO OUTPUT A SINGLE CHARACTER WITH ^A^S^C^I^I VALUE Q, EXECUTE
THE FUNCTION ^F^C^H^R(Q), WHERE Q IS ZERO OR POSITIVE.
.SKIP 1
^TO INPUT A SINGLE CHARACTER, WAITING FOR IT IF NECESSARY, BUT
NOT AFFECTING TERMINAL ECHOING STATUS, USE THE FUNCTION ^F^C^H^R(-1),
WHICH WILL RETURN THE ^A^S^C^I^I VALUE OF THE CHARACTER.
^IF END OF FILE HAS BEEN PASSED, ^F^C^H^R WILL RETURN THE VALUE -1.
^ALL NEGATIVE ARGUMENTS ARE TREATED AS -1, BUT ARE
RESERVED FOR FUTURE DEFINITION, TO CONTROL ECHOING, WAITING ETC.
^YOU MAY USE ^F^H^I^B^E^R(1+2_^21) TO TEST WHETHER ^F^C^H^R(-1) WOULD WAIT FOR INPUT OR NOT.
^F^O^C^A^L PROGRAMS USING ^F^C^H^R FOR INPUT
SHOULD INCLUDE A CHECK FOR _^^P SO THAT USERS CAN ESCAPE
FROM PROGRAM LOOPS EASILY.
.SKIP 1
.TEST PAGE 7
.INDENT -6
^&8.8###^SINGLE CHARACTER STRING: ^F^C^H^R$\&
.SKIP 1
^F^C^H^R$(X) RETURNS A STRING CONTAINING A SINGLE CHARACTER
CREATED BY TAKING THE VALUE OF X MODULO 128 AS AN ^A^S^C^I^I VALUE.
.SKIP 1
.TEST PAGE 6
.INDEX ^SLEEPING AND HIBERNATING
.INDEX ^HIBERNATING AND SLEEPING
.INDEX ^F^H^I^B^E^R FUNCTION
.INDENT -6
^&8.9###^SLEEPING AND HIBERNATING: ^F^H^I^B^E^R\&
.SKIP 1
^AT TIMES IT IS USEFUL FOR A ^F^O^C^A^L PROGRAM TO PAUSE FOR A WHILE
DURING EXECUTION. ^THE ^F^H^I^B^E^R FUNCTION MAY BE USED TO DO THIS BY SPECIFYING THE LENGTH OF PAUSE AS THE ARGUMENT (IN MILLISECONDS).
^FOR EXAMPLE A FIVE-SECOND PAUSE MAY BE INTRODUCED BY THE ^F^O^C^A^L COMMAND
^X#^F^H^I^B^E^R(5000).
^THERE ARE OTHER WAYS OF HIBERNATING TOO, SUCH AS WAITING FOR CERTAIN EVENTS TO OCCUR, AND DETAILS MAY BE OBTAINED FROM THE DOCUMENTATION OF THE ^H^I^B^E^R MONITOR ^U^U^O.
^F^H^I^B^E^R ACCEPTS AN ARGUMENT WHICH IS TREATED AS A SIGNED 36-BIT INTEGER.
 ^THE 36-BIT NUMBER SO FORMED IS USED IN AN ACCUMULATOR FOR THE ^H^I^B^E^R ^U^U^O.
^FOR EXAMPLE ^X#^F^H^I^B^E^R(5000+2_^21) WILL SLEEP FOR 5 SECONDS OR UNTIL A CHARACTER IS TYPED ON THE CONTROLLING TERMINAL - WHICHEVER OCCURS FIRST.
^AS ANOTHER EXAMPLE, ^X#^F^H^I^B^E^R(10000-2_^(35)) WILL CAUSE AN IMMEDIATE SWAP-OUT AND A PAUSE FOR 10 SECONDS.
^IF ^F^O^C^A^L IS RUNNING UNDER A MONITOR LACKING THE ^H^I^B^E^R ^U^U^O,
^F^O^C^A^L USES THE ^S^L^E^E^P ^U^U^O,
AND THE ^F^H^I^B^E^R ARGUMENT IS THE NUMBER OF SECONDS TO SLEEP, MODULO 4096.
.SKIP 1
^THE VALUE RETURNED BY THE ^F^H^I^B^E^R FUNCTION GIVES THE STATUS OF THE TERMINAL CONTROLLING ^F^O^C^A^L.
^IF THE TERMINAL'S INPUT BUFFER IS EMPTY, ^F^H^I^B^E^R RETURNS ZERO,
BUT OTHERWISE IT RETURNS 1.0.
^THIS FEATURE IS USEFUL WHEN YOU DON'T WANT YOUR PROGRAM TO HANG
UP IN "INPUT-WAIT" STATE, AND CAN ALSO BE USED TO DETERMINE WHETHER
THE ^F^H^I^B^E^R SLEEP WAS WOKEN BY THE TELETYPE OR NOT, IF YOU USED THOSE PARTICULAR WAKE BITS IN THE ^F^H^I^B^E^R ARGUMENT.
^IT SHOULD BE NOTED THAT DUE TO CERTAIN IDIOSYNCRASIES OF THE ^H^I^B^E^R ^U^U^O IT MAY BE NECESSARY TO INCLUDE ^X#^F^H^I^B^E^R(1) AT THE BEGINNING OF YOUR PROGRAM TO REMOVE A SPURIOUS WAKE-UP LATER ON.
.SKIP 1
^EXECUTION OF THE ^F^H^I^B^E^R FUNCTION WILL CAUSE .^J^B^E^R^R
TO BE INCREMENTED IF THE JOB IS DETACHED OR ^T^R^M^N^O.#^U^U^O IS ILLEGAL.
.SKIP 1
.TEST PAGE 17
.INDENT -6
^&8.10##^NOTES ON IMPLEMENTING NEW FUNCTIONS\&
.SKIP 1
^BY RE-ASSEMBLING ^F^O^C^A^L, MORE FUNCTIONS MAY BE INCLUDED.
.SKIP 1
.INDEX ^FUNCTION NAMES
^FUNCTION NAMES MAY BE ANY NUMBER OF CHARACTERS
OF WHICH THE FIRST SIX ARE SIGNIFICANT.
.SKIP 1
^FUNCTION NAMES NEED NOT COMMENCE WITH THE LETTER "^F" IN ^F^O^C^A^L-10.
^HOWEVER, IT IS SUGGESTED THAT THEY SHOULD, TO COMPLY WITH THE RULE
THAT RESERVED WORDS BEGIN WITH "^F".
.SKIP 1
^NOTE: ^IN EVALUATING AN EXPRESSION, IF THE INTERPRETER FINDS
A NAME IN THE LIST OF FUNCTIONS, THEN THE INTERPRETER TAKES IT AS A FUNCTION NAME.
.PAGE
.INDEX ^FUNCTION NAMES
.INDENT -6
^&9.0###^FUNCTION SUMMARY\&
.SKIP 1
.NOFILL
^&^N^A^M^E#######^D^E^S^C^R^I^P^T^I^O^N\&
^F^S^Q^T#######^SQUARE ROOT
^F^A^B^S#######^MAGNITUDE PART
^F^S^G^N#######^SIGN#PART#(I.E.#+1.0#OR#-1.0)
^F^I^T^R#######^INTEGER#PART#(ROUNDED#TOWARDS#ZERO)
^F^R^A^N#######^RANDOM#NUMBER#BETWEEN#0.5#AND#1.0
^F^E^X^P#######^EXPONENTIAL
^F^S^I^N#######^SINE WITH ARGUMENT IN RADIANS
^F^C^O^S#######^COSINE WITH ARGUMENT IN RADIANS
^F^S^I^N^D######^SINE#WITH#ARGUMENT#IN#DEGREES
^F^C^O^S^D######^COSINE#WITH#ARGUMENT#IN#DEGREES
^F^A^T^N#######^ARCTANGENT (RANGE -^P^I/2 TO +^P^I/2)
^F^L^O^G#######^LOGARITHM
^F^L^O^G10#####^LOGARITHM#TO#BASE#10
^F^O^C^A^L######^CHANGE#INTERNAL#PARAMETERS#OF#^F^O^C^A^L
^G^E^T^T^A^B#####^OBTAIN MONITOR INFORMATION
^F^N^E^W#######^EXTERNAL FUNCTION CALL
^F^C^H^R#######^SINGLE CHARACTER ^I/^O
^F^C^H^R$######^SINGLE CHARACTER STRING
^F^H^I^B^E^R#####^HIBERNATE OR SLEEP
.PAGE
.LEFT MARGIN 25
.INDEX ^F^O^C^A^L COMMANDS
.INDENT -25
^&10.0##^F^O^C^A^L COMMAND SUMMARY\&
.SKIP 1
.FILL
.INDENT -25
^A^S^K#^X####################^ACCEPTS A VALUE FROM THE KEYBOARD.
.SKIP 1
.INDENT -25
^C^O^M^M^E^N^T##################^ALLOWS DUMMY LINES IN A PROGRAM.
.SKIP 1
.INDENT -25
^D^O#\M\M.\N\N#################^EXECUTES A LINE OR GROUP AS A SUBROUTINE.
.SKIP 1
.INDENT -25
^E^R^A^S^E####################^WIPES THE SYMBOL TABLE.
.SKIP 1
.INDENT -25
^E^R^A^S^E#\M\M.\N\N##############^WIPES A LINE (OR GROUP) FROM THE PROGRAM.
.SKIP 1
.INDENT -25
^F^O^R#^X=1,.5,20############^LOOPS WHILE INCREMENTING A VARIABLE.
.SKIP 1
.INDENT -25
^G^O,#^G^O^T^O#################^REROUTES EXECUTION.
.SKIP 1
.INDENT -25
^I^F (^X) \M1.\N1,\M2.\N2,\M3.\N3#^ALLOWS CONDITIONAL BRANCHING.
.SKIP 1
.INDENT -25
^I^F ^N^A^M^E$ = "^HARRY" ;^T^Y^P^E "^FRED."##^ALLOWS CONDITIONAL COMMANDS.
.SKIP 1
.INDENT -25
^L^I^B^R^A#^C^A^L^L###############^EXECUTES A FILE OR LOADS IT IF IT HAS LINE NUMBERS.
.SKIP 1
.INDENT -25
^L^I^B^R^A#^D^E^L^E^T^E#FILE########^DELETES THE NAMED FILE FROM THE USERS FILE DIRECTORY ON THE DISK.
.SKIP 1
.INDENT -25
^L^I^B^R^A#^S^A^V^E#\M\M.\N\N#########^WRITES A LINE OR GROUP AS A FILE.
.SKIP 1
.INDENT -25
^L^I^B^R^A#^S^A^V^E###############^WRITES THE PROGRAM AS A FILE.
.SKIP 1
.INDENT -25
^M^O^D^I^F^Y#\M\M.\N\N#############^ALLOWS PROGRAM EDITTING.
.SKIP 1
.INDENT -25
.INDEX ^O^P^E^R^A^T^E ^I^N^P^U^T COMMAND
^O^P^E^R^A^T^E#^I^N^P^U^T#FILE#######^INITIALIZES A NEW FILE FOR INPUT.
.SKIP 1
.INDENT -25
.INDEX ^O^P^E^R^A^T^E ^O^U^T^P^U^T COMMAND
^O^P^E^R^A^T^E#^O^U^T^P^U^T#FILE######^INITIALIZES A NEW FILE FOR OUTPUT.
.SKIP 1
.INDENT -25
^Q^U^I^T#####################^STOPS EXECUTION.
.SKIP 1
.INDENT -25
^R^E^T^U^R^N###################^TERMINATES SUBROUTINE AND RETURNS TO CALLER.
.SKIP 1
.INDENT -25
^S^E^T#^X=^Y+3################^ASSIGNS A VALUE TO A VARIABLE.
.SKIP 1
.INDENT -25
^T^Y^P^E#"^HELLO",^X!##########^PRINTS DATA ON THE TERMINAL.
.SKIP 1
.INDENT -25
^W^R^I^T^E#\M\M.\N\N##############^LISTS A LINE OR GROUP
.SKIP 1
.INDENT -25
^W^R^I^T^E#^A^L^L################^LISTS THE ENTIRE PROGRAM.
.SKIP 1
.INDENT -25
^X^E^C^U^T^E#EXP###############^EVALUATES EXPRESSION EXP AND DISCARDS THE RESULT.
.PAGE
.LEFT MARGIN 7
.INDEX ^CHARACTER INTERPRETATIONS
.INDENT -7
^&11.0##^CHARACTER INTERPRETATIONS BY ^F^O^C^A^L\&
.INDENT -7
^&^SYMBOL##################MEANING OR USE\&

.SKIP 1
.INDENT -7
^A-^Z####^USED TO CONSTRUCT COMMANDS, FUNCTION NAMES AND VARIABLE NAMES.
.INDENT -7
.SKIP 1
\A-\Z####^LOWER CASE LETTERS ARE TREATED AS UPPER CASE LETTERS
EXCEPT WHEN THEY APPEAR IN STRINGS BETWEEN QUOTE MARKS.
.INDENT -7
.SKIP 1
^E OR \E#^USED TO INTRODUCE THE EXPONENT PART OF A CONSTANT.
.INDENT -7
.SKIP 1
0-9####^DECIMAL DIGITS.
^USED TO CONSTRUCT NUMERIC CONSTANTS AND ARRAY INDICES
.INDENT -7
.SKIP 1
#+#####^ARITHMETIC ADDITION OPERATOR.
.INDENT -7
.SKIP 1
#-#####^ARITHMETIC SUBTRACTION OPERATOR.
.INDENT -7
.SKIP 1
#*#####^ARITHMETIC MULTIPLICATION OPERATOR, OR
PART OF ARITHMETIC EXPONENTIATION OPERATOR.
.INDENT -7
.SKIP 1
#/#####^ARITHMETIC DIVISION OPERATOR. ^ALSO CHANNEL-SELECTION INDICATOR (SEE SECTIONS 2.6.4, 4.2 AND 4.3).
.INDENT -7
.SKIP 1
#_^#####^ARITHMETIC EXPONENTIATION OPERATOR.
.SKIP 1
.INDEX ^PARENTHESES
.INDENT -7
(#)####^PARENTHESES.
^USED TO HOLD ARRAY INDICES, FUNCTION PARAMETERS, AND ARITHMETIC SUB-EXPRESSIONS.
.SKIP 1
.INDENT -7
[#]####^PARENTHESES.
^MAY BE USED INSTEAD OF ().
^ALSO TO HOLD PROJECT-PROGRAMMER PAIRS.
.SKIP 1
.INDENT -7
<#>####^PARENTHESES.
^MAY BE USED INSTEAD OF ().
^ALSO TO HOLD FILE PROTECTION CODE.
^IT IS SUGGESTED THAT THE USE OF <> AS PARENTHESES SHOULD BE AVOIDED
WHERE POSSIBLE IN ^F^O^C^A^L-10.
^THE PRESENT SPECIFICATION PROVIDES
COMPATIBILITY OF ^F^O^C^A^L-10 WITH OTHER ^F^O^C^A^L IMPLEMENTATIONS,
BUT A FUTURE EXTENSION OF ^F^O^C^A^L TO
COVER LOGICAL OPERATIONS MAY REQUIRE <> FOR OTHER PURPOSES.
.SKIP 1
.INDENT -7
#,#####^COMMA.
^USED TO SEPARATE FUNCTION ARGUMENTS AND COMMAND ARGUMENTS.
.SKIP 1
.INDENT -7
#.#####^DECIMAL POINT.
^USED TO CONSTRUCT NUMBERS AND LOGICAL OPERATORS, AND
ALSO TO SEPARATE FILE NAME FROM FILE EXTENSION.
.SKIP 1
.INDEX ^SEMICOLON
.INDEX ;
.INDENT -7
#;#####^SEMICOLON.
^USED TO TERMINATE STATEMENTS.
.SKIP 1
.INDENT -7
#:#####^COLON.
^USED TO DELIMIT DEVICE NAME.
.SKIP 1
.INDENT -7
#=#####^EQUALS.
^USED IN THE CONSTRUCTION OF THE "^F^O^R" AND "^S^E^T"
STATEMENTS.
^ALSO USED AS A LOGICAL OPERATOR.
.SKIP 1
.INDENT -7
#!#####^EXCLAMATION MARK.
^IN THE ^A^S^K OR ^T^Y^P^E STATEMENT - CR/LF (SEE SECTIONS 1.0, 2.6 AND 2.8).
.SKIP 1
.INDENT -7
#_######^HATCH.
^IN THE ^A^S^K OR ^T^Y^P^E STATEMENT - ^C^R ONLY (SEE SECTION 2.6).
^ALSO USED AS A LOGICAL OPERATOR TO MEAN "NOT EQUAL TO".
.SKIP 1
.INDENT -7
#"#####^DOUBLE QUOTE.
^USED TO DELIMIT STRING CONSTANTS (SEE SECTION 2.6.1 AND 2.4).
.SKIP 1
.INDENT -7
#'#####^SINGLE QUOTE.
^USED IN THE "^T^Y^P^E" AND "^A^S^K" STATEMENTS
TO DELIMIT STRING CONSTANTS (SEE SECTION 2.6.2).
.SKIP 1
.INDENT -7
#_&#####^AMPERSAND.
^NOT LEGAL EXCEPT IN TEXT.
.SKIP 1
.INDENT -7
#@#####^AT.
^NOT LEGAL EXCEPT IN TEXT.
.SKIP 1
.INDENT -7
#%#####^PERCENT.
^USED IN "^T^Y^P^E" STATEMENTS TO CHANGE THE FORMAT (SEE SECTIONS 2.7.1, 2.7.2).
.SKIP 1
.INDENT -7
#$#####^DOLLAR.
^USED IN "^T^Y^P^E" STATEMENTS TO CAUSE
OUTPUT OF THE SYMBOL TABLE (SEE SECTION 2.6.3).
^ALSO AS THE DELIMITER OF A STRING NAME.
.SKIP 1
.INDEX ^ESCAPE
.INDENT -7
#$#####^ESCAPE.
^MAY BE USED TO TERMINATE A COMMAND IN THE SAME WAY THAT
A CARRIAGE-RETURN DOES.
.SKIP 1
.INDENT -7
#__#####^BACKARROW.	^NOT LEGAL EXCEPT IN TEXT.
.SKIP 1
.INDENT -7
#?#####^QUESTION MARK.
^USED TO TURN THE "TRACE" FEATURE ON AND OFF (SEE SECTION 5).
.SKIP 1
.INDEX ^CONTROL-^C
.INDENT -7
#_^^C####^CONTROL-^C. ^THIS IS A MONITOR-CALL REQUEST. ^IT SUSPENDS ^F^O^C^A^L AND PUTS THE TERMINAL INTO MONITOR MODE.
(^TWO CONTROL-^C'S MAY BE REQUIRED IF A PROGRAM IS RUNNING.)

.SKIP 1
.INDEX ^CONTROL-^P
.INDENT -7
#_^^P####^CONTROL-^P. ^IF ^F^O^C^A^L ENCOUNTERS A CONTROL-^P
IN INPUT DATA, IT WILL EXECUTE A ^Q^U^I^T COMMAND.
.SKIP 1
.INDEX ^CONTROL-^R
.INDENT -7
#_^^R####^CONTROL-^R. ^DURING TYPE-IN YOU CAN DISPLAY THE LINE-SO-FAR
BY TYPING CONTROL-^R.
^THE CUE WILL PRECEDE IT AT THE BEGINNING OF THE LINE.
.SKIP 1
.INDEX ^CONTROL-^U
.INDENT -7
#_^^U####^CONTROL-^U.
^NEVER APPEARS IN ^F^O^C^A^L TEXT.
^USED FROM THE KEYBOARD TO ERASE THE WHOLE OF THE CURRENT INPUT LINE.
.SKIP 1
.INDEX ^CONTROL-^Z
.INDENT -7
#_^^Z####^CONTROL-^Z.
^F^O^C^A^L-10 WILL ^E^X^I^T IF YOU TYPE CONTROL-^Z ON THE KEYBOARD
DURING KEYBOARD INPUT.
.SKIP 1
.INDEX ^RUBOUT
.INDENT -7
^R^U^B^O^U^T#^NEVER APPEARS IN ^F^O^C^A^L TEXT.
^USED FROM THE KEYBOARD
TO ERASE THE MOST RECENT CHARACTER FROM THE INPUT LINE.
.SKIP 1
.INDEX ^BACKSPACE
.INDENT -7
^B^A^C^K^S^P^A^C^E#^NEVER APPEARS IN ^F^O^C^A^L TEXT.
^USED FROM THE KEYBOARD
TO ERASE THE MOST RECENT CHARACTER FROM THE INPUT LINE.
.PAGE
.LEFT MARGIN 9
.INDENT -9
^&12.0#####^COMPATIBILITY OF ^F^O^C^A^L IMPLEMENTATIONS.\&
.BREAK
^HISTORICALLY, THE RAISON-D'ETRE OF ^F^O^C^A^L WAS THE NEED FOR
A POWERFUL INTERPRETER IN A MINIMAL CORE SIZE.
^THE LANGUAGE WAS DESIGNED TO ALLOW THE IMPLEMENTER TO TAKE
SHORT CUTS IN CODING BY RESTRICTING THE FREEDOM OF THE LANGUAGE TO A
CERTAIN EXTENT, AND MANY OF THESE RESTRICTIONS REMAIN IN THE
SMALL-COMPUTER ^F^O^C^A^LS TODAY.
^RECENT ENHANCEMENTS, PARTICULARLY IN THE ^P^D^P-11 VERSIONS,
HAVE ENABLED ^F^O^C^A^L TO BE USED AS A SOFTWARE OPERATING SYSTEM TO DRIVE 
SPECIAL HARDWARE, AND WE SEE ^F^O^C^A^L-^G^T,
^F^O^C^A^L-11/^R^T^X ETC. WITH LARGE SETS OF SPECIAL
FUNCTIONS FOR SPECIAL HARDWARE.
.SKIP 1
^THE PROBLEM FOR THE USER, HOWEVER, IS THE INCREASED COMPLEXITY
OF THE LANGUAGE INTRODUCED BY SUCH ENHANCEMENTS, AND THE CONFUSION WHICH NEW
INCOMPATIBILITIES INTRODUCE.
^THE INTENT OF THE FOLLOWING SECTION IS TO SERVE AS A GUIDE TO THE
DIFFERENCES BETWEEN ^F^O^C^A^L IMPLEMENTATIONS, TO ASSIST THE USER
WHO CHANGES MACHINES OR WHO WISHES TO ALLOW HIMSELF FULL FLEXIBILITY.
.SKIP 2
.INDENT -9
^&12.1#####^GENERAL DIFFERENCES.\&
.BREAK
^THE FOLLOWING LIST ILLUSTRATES INCOMPATIBILITIES WHICH ARISE BECAUSE
OF THE ENVIRONMENT SUCH AS WORD SIZE, SOFTWARE OPERATING SYSTEM
AND INTERFACING.
.SKIP 1
.INDENT -9
12.1.1###^ALWAYS DIFFERENT.
.LEFT MARGIN 11
.INDENT -2
-#^ACCURACY. ^EVERY IMPLEMENTATION OF ^F^O^C^A^L USES A DIFFERENT
INTERNAL STORAGE METHOD AND THEREFORE THE NUMBER
OF SIGNIFICANT FIGURES VARIES.
.INDENT -2
-#^LOADING, STARTING AND RE-STARTING.
^THIS IS ALWAYS MACHINE-DEPENDENT.
.INDENT -2
-#^ERROR MESSAGES. ^EACH ^F^O^C^A^L HAS ITS OWN SET OF ERROR MESSAGES.
.LEFT MARGIN 9
.INDENT -9
12.1.2###^O^P^E^R^A^T^E COMMAND.
.BREAK
^PAPER-TAPE-ONLY SYSTEMS USUALLY HAVE A * COMMAND.
^MORE SOPHISTICATED SYSTEMS USE THE ^O^P^E^R^A^T^E COMMAND WITH
A SINGLE LETTER AS ARGUMENT.
^UNDER A HIGH-LEVEL DISK OPERATING SYSTEM, A HIGH-LEVEL ^O^P^E^R^A^T^E COMMAND IS USED.
.INDENT -9
12.1.3###^FUNCTION LIST.
.BREAK
^ALL ^F^O^C^A^LS HAVE CERTAIN FUNCTIONS SPECIFIC TO THEMSELVES.
^THERE IS NO STANDARD FOR THE RANGE OR DISTRIBUTION OF THE
^F^R^A^N FUNCTION, NOR FOR THE MEANING OF ITS ARGUMENT.
.INDENT -9
12.1.4###^L^I^B^R^A COMMAND.
.BREAK
^NOT ALL ^F^O^C^A^LS HAVE THIS COMMAND.
^THOSE WHICH DO USUALLY HAVE ^L^I^B^R^A#^C^A^L^L AND
^L^I^B^R^A#^S^A^V^E; SOME HAVE MORE OPTIONS.
.INDENT -9
12.1.5###^CHARACTER SET.
.BREAK
^MOST ^F^O^C^A^LS USE ^A^S^C^I^I-1968 (^A^N^S^I ^X3.4-1968) WITH A FEW MINOR VARIATIONS.
.SKIP 2
.TEST PAGE 35
.INDENT -9
^&12.2#####^P^D^P-8 ^F^O^C^A^L.\&
.SKIP 1
.INDENT -9
12.2.1###^IMPLEMENTATION CHARACTERISTICS.
.LEFT MARGIN 11
.INDENT -2
-#^THE FUNDAMENTAL INTERPRETING PROCESS IS FAIRLY SIMPLE.
^F^O^C^A^L-8 WILL ALMOST ALWAYS SCAN UNTIL A "TERMINATOR" IS FOUND,
SKIP OVER THE TERMINATOR AND THEN PERFORM THE FUNCTION.
^THIS REQUIRES THAT ALL COMMANDS BE DELIMITED BY A SPACE
OR SIMILAR "NOISE CHARACTER", SINCE THE INTERPRETER WILL NOT
BACKSPACE OVER IT WHEN IT CONTINUES AFTER PERFORMING THE
COMMAND.
^IN A FEW CASES THIS MAY LEAD TO PROBLEMS UNLESS LIBERAL SPACING
IS ALLOWED. ^THE ^TECHNICAL ^SPECIFICATIONS (PARA 2.1.3) DOES NOT
ACTUALLY DEFINE "TERMINATOR".
.INDENT -2
-#^ADDITIONAL TERMINATORS FOR ^A^S^K DATA ARE ALLOWED BEYOND SPACE, COMMA,
CARRIAGE-RETURN, LINE-FEED AND ESCAPE.
.INDENT -2
-#^ARITHMETIC EXPRESSIONS MUST BE TERMINATED BY A COMMA.
.INDENT -2
-#^W^R^I^T^E DISABLES TRACE.
.INDENT -2
-#^W^R^I^T^E .., ^M^O^D^I^F^Y .., ^E^R^A^S^E .., ^T^Y^P^E $ CANNOT BE FOLLOWED BY ;COMMANDS.
.INDENT -2
-#^LINE NUMBERS ONLY EXTEND TO 31.99.
.INDENT -2
-#^FORMAT DESCRIPTORS ARE LIMITED TO 19.19.
.INDENT -2
-#^SYMBOLS ARE HELD AS TWO CHARACTERS.
.LEFT MARGIN 9
.INDENT -9
12.2.2###^O^P^E^R^A^T^E COMMAND.
.BREAK
^F^O^C^A^L-8 USES THE *#COMMAND WHICH IS INCOMPATIBLE WITH THE MORE USUAL ^O^P^E^R^A^T^E
COMMAND BECAUSE OF ITS USAGE AND HANDLING OF END-OF-FILE.
.INDENT -9
12.2.3###^FUNCTION LIST.
.BREAK
^F^O^C^A^L-8 HAS ALL STANDARD FUNCTIONS.
.INDENT -9
12.2.4###^L^I^B^R^A COMMAND.
.BREAK
^THE ^L^I^B^R^A VERSION OF ^F^O^C^A^L-8 HAS THIS COMMAND, INCLUDING
^L^I^B^R^A ^L^I^S^T, BUT IT IS NOT NECESSARILY COMPATIBLE
WITH OTHER ^F^O^C^A^LS.
.INDENT -9
12.2.5###^CHARACTER SET.
.BREAK
^USES ^A^S^C^I^I-1963.
^ALTMODE IS NON-PRINTING.
^CHARACTERS 175 176 AND 33 OCTAL ARE TREATED AS ALTMODE.
^BACKARROW IS USED INSTEAD OF _^^U.
^THE RUBOUT KEY IS HANDLED DIFFERENTLY FROM MOST ^F^O^C^A^LS.
.TEST PAGE 14
.SKIP 2
.INDENT -9
^&12.3#####^P^D^P-12 ^F^O^C^A^L.\&
.SKIP 1
.INDENT -9
12.3.1###^IMPLEMENTATION CHARACTERISTICS.
.BREAK
^F^O^C^A^L-12 IS AN EXPANSION OF ^F^O^C^A^L-8.
^THE EXTENSIONS ARE PRINCIPALLY FOR UTILIZING
THE ^P^D^P-12 PERIPHERAL DEVICES INCLUDING ^L^I^N^C TAPE.
.INDENT -9
12.3.2###^O^P^E^R^A^T^E COMMAND.
.BREAK
^F^O^C^A^L-12 USES A COMMAND CALLED "^O^U^T^P^U^T" WHICH
IS SIMILAR TO AN "^O^P^E^R^A^T^E" COMMAND.
^IT IS USED TO CHANGE THE OUTPUT DEVICE (^O ^S AND ^O ^T),
BUT IT ALSO HAS SOME UNRELATED FUNCTIONS (^O ^D TO DISPLAY OR
TO INDICATE THE DISPLAY REFRESH RATE; ^O ^E AND ^O ^C TO CLEAR
ALL OR PART OF THE DISPLAY SCREEN; ^O ^I TO DO TIMING).
^SOME OF THE FUNCTIONS NORMALLY ASSOCIATED WITH THE
^O^P^E^R^A^T^E COMMAND ARE PERFORMED BY THE ^L^I^B^R^A COMMANDS
IN ^F^O^C^A^L-12 (SEE BELOW).
.INDENT -9
12.3.3###^FUNCTION LIST.
.BREAK
^F^O^C^A^L-12 FUNCTIONS ARE VERY SIMILAR TO ^F^O^C^A^L-8
FUNCTIONS.
.INDENT -9
12.3.4###^L^I^B^R^A COMMAND.
.BREAK
^L^I^B^R^A ^S^A^V^E AND ^L^I^B^R^A ^L^O^A^D IN ^F^O^C^A^L-12 ARE
THE TRADITIONAL COMMANDS TO SAVE AND RECALL ^F^O^C^A^L PROGRAMS
(^L^I^B^R^A ^S^A^V^E AND ^L^I^B^R^A ^C^A^L^L IN ^F^O^C^A^L-10).
^THE COMMAND ^L^I^B^R^A ^G^O IN ^F^O^C^A^L-12 IS A
CONVENIENCE TO FACILITATE CHAINING OF ^F^O^C^A^L PROGRAMS.
(^IN ^F^O^C^A^L-10 THIS WOULD BE DONE BY USING ^L^I^B^R^A ^C^A^L^L;^G^O).
^IN ^F^O^C^A^L-12 ^L^I^B^R^A ^L^O^A^D AND ^L^I^B^R^A ^G^O
IMPLY PRIOR ^E^R^A^S^E ^A^L^L AND ^E^R^A^S^E.
^THIS MEANS A ^W^E^A^V^E IS NOT POSSIBLE.
^IN ^F^O^C^A^L-10 YOU WOULD USE ^E^R^A^S^E ^A^L^L,;^L^I^B^R^A ^C^A^L^L ETC.#TO SIMULATE
THE ^F^O^C^A^L-12 ^L^I^B^R^A ^L^O^A^D.
.BREAK
^F^O^C^A^L-12'S ^L^I^B^R^A ^M^A^K^E IS USED TO
ALLOCATE A SPACE ON THE FILE STORAGE DEVICE FOR USE AS RANDOM-ACCESS
STORAGE.
^THE SPACE IS USED BY OPENING (^L^I^B^R^A ^O^P^E^N), REFERENCING
(^F\N(MM)), AND CLOSING (^L^I^B^R^A ^C^L^O^S^E) SUCH A RANDOM-ACCESS
AREA.
^IN ^F^O^C^A^L-10 THIS KIND OF OPERATION WOULD BE DONE BY USING
NORMAL ^F^O^C^A^L VARIABLES, SINCE LARGE AMOUNTS OF CORE STORAGE
ARE USUALLY AVAILABLE.
^THE ARRAY COULD BE SAVED AND RECALLED FROM DISK WITH THE USUAL
^L^I^B^R^A ^S^A^V^E AND ^L^I^B^R^A ^C^A^L^L COMMANDS OR
BY EXPLICITLY WRITING THE ARRAY WITH THE ^T^Y^P^E COMMAND.
.INDENT -9
12.3.5###^CHARACTER SET.
.BREAK
^USES ^A^S^C^I^I-1963.
^ALTMODE IS NON-PRINTING.
^CHARACTERS 175 176 AND 33 OCTAL ARE TREATED AS ALTMODE.
^BACKARROW IS USED INSTEAD OF _^^U.
.SKIP 2
.TEST PAGE 20
.INDENT -9
^&12.4#####^D^E^C\S\Y\S\T\E\M-10 ^F^O^C^A^L\&
.SKIP 1
.INDENT -9
12.4.1###^IMPLEMENTATION CHARACTERISTICS.
.INDENT -9
.SKIP 1
12.4.1.1#** MAY BE USED FOR
.INDEX ^ARITHMETIC OPERATORS
.INDEX ^CHARACTER INTERPRETATIONS
EXPONENTIATION.
.SKIP 1
.INDENT -9
12.4.1.2#^VARIABLE NAMES MAY BE ANY NUMBER OF CHARACTERS, OF WHICH THE
FIRST THREE ARE SIGNIFICANT, AND THE FIRST MUST BE A LETTER.
(^IT MAY BE "^F")
[^IN EVALUATING AN EXPRESSION, IF THE INTERPRETER DOES NOT FIND
A NAME IN THE LIST OF FUNCTIONS, THEN IT TAKES IT AS A VARIABLE NAME.]
.SKIP 1
.INDENT -9
12.4.1.3#^ANY NON-ALPHANUMERIC CAN BE USED TO DELIMIT, AND
^F^O^C^A^L-10 (IN CONTRAST TO ^F^O^C^A^L-8) WILL INTERPRET THE DELIMITER.
^FOR EXAMPLE,##^T^Y^P^E"^A^B^C"##WILL WORK IN ^F^O^C^A^L-10 AS IF IT HAD A SPACE AFTER THE ^E.
.SKIP 1
.INDEX ^ARRAYS
.INDEX ^DIMENSION
.INDEX ^VECTORS
.INDEX ^SUBSCRIPTS
.INDENT -9
12.4.1.4#^ARRAYS MAY BE MULTIPLE-DIMENSIONED.
.BREAK
^ELEMENTS OF AN ARRAY ARE WRITTEN AS THE ARRAY NAME FOLLOWED BY THE
LIST OF SUBSCRIPTS IN PARENTHESES, EACH SEPARATED BY COMMAS.
^IT IS UP TO THE USER TO REMEMBER TO SPECIFICALLY CITE THE EXACT NUMBER
OF SUBSCRIPTS EACH TIME AN ELEMENT IS REFERENCED,
OTHERWISE WRONG VALUES MAY BE USED.
^THE SUBSCRIPTS ARE EVALUATED AND USED MODULO A CERTAIN VALUE WHICH
DEPENDS ON THE TOTAL NUMBER OF SUBSCRIPTS.
^THE FOLLOWING TABLE DESCRIBES THE ARRAY ELEMENT
SUCCESSOR FUNCTION, THE COMBINED SUBSCRIPT VALUE, AND
THE MODULO APPLICABLE TO EACH SUBSCRIPT.
.SKIP 2
.TEST PAGE 20
.NOFILL
.TAB STOPS 21,33,55
^NUMBER OF	^SUBSCRIPTS	^SUBSCRIPT	^MODULO
^SUBSCRIPTS		^VALUE
.SKIP 1
NONE	NONE	###0	###-
##1	(A)	###A	262144
##2	(A,B)	A+512*B	512
##3	(A,B,C)	A+64*B+4096*C	64
##4	(A,B,C,D)	A+16*B+256*C+4096*D	16
##5	(A,...E)	A+8*B+...+4096*E	8
##6	(A,...F)	A+8*B+...+32768*F	8
##7	(A,...G)	A+4*B+...+4096*G	4
##8	(A,...H)	A+4*B+...+16384*H	4
##9	(A,...I)	A+4*B+...+65536*I	4
#10	(A,...J)	A+2*B+...+512*J	2
#11	(A,...K)	A+2*B+...+1024*K	2
_....	.....	......	2
#18	(A,...R)	A+2*B+...+131072*R	2
19 OR MORE	(A,B,...)	###0	-
.FILL
.SKIP 1
.INDENT -9
12.4.1.5#^REPLACEMENT OF AN ACTIVE LINE.
.BREAK
^IF WHILE A LINE IS BEING EXECUTED A REPLACEMENT IS INSERTED, ^F^O^C^A^L-10
WILL BEHAVE AS IF THE LINE WERE FIRST ERASED AND THEN A NEW ONE INSERTED.
^FOR EXAMPLE:
.BREAK
2.22 2.22 ^THE QUICK BROWN FOX
.BREAK
WILL EFFECTIVELY ERASE ITSELF. ^ALSO THE PROGRAM:
.BREAK
2.22 ^D^O 4.44; ^T^Y^P^E ^Y
.BREAK
4.44 2.22 ^D^O 4.44; ^T^Y^P^E ^Y
.BREAK
WILL NEVER EXECUTE BEYOND THE SEMICOLON.
.SKIP 1
.INDENT -9
12.4.1.6#^THE SYMBOL TABLE IS TYPED IN ALPHABETICAL ORDER.
^F^O^C^A^L-10 HAS THE CAPABILITY (^T^Y^P^E#$$) TO INCLUDE OCTAL
IN THE SYMBOL-TABLE PRINTOUT.
^THE SYMBOL TABLE IS NOT DESTROYED UNLESS EXPLICITLY ^E^R^A^S^ED; SOME SMALL COMPUTER ^F^O^C^A^LS USE THE SYMBOL TABLE SPACE DURING IMMEDIATE-MODE COMMANDS.
.SKIP 1
.INDENT -9
12.4.1.7#^G^O ^T^O MAY BE TWO WORDS.
.SKIP 1
.INDENT -9
12.4.1.8#^A^S^K DATA MAY HAVE LEADING SPACES.
.SKIP 1
.INDENT -9
12.4.1.9#^NEGATIVE ^F^O^R INDICES ARE ALLOWED.
.SKIP 1
.INDENT -9
12.4.1.10#^F^O^C^A^L-10 HAS NO COMPUTED ^G^O^T^O.
.SKIP 1
.INDENT -9
12.4.1.11#^F^O^C^A^L-10 HAS NO ^F^S^B^R FUNCTION.
.BREAK
^THE REASON FOR THIS IS THAT
THE CHARACTER _& IS RESERVED FOR FUTURE EXPANSION IN ^F^O^C^A^L-10.
.SKIP 1
.INDENT -9
12.4.1.12#^THE ^F^C^H^R FUNCTION DOES NOT HAVE MULTIPLE ARGUMENTS.
.BREAK
^THE REASON FOR THIS IS THAT EXPANSION PLANS CALL FOR CONTROL OF
ECHOING, WHICH IS DIFFICULT FOR MULTI-ARGUMENT ^F^C^H^R.
^F^C^H^R SHOULD BE CALLED ONCE FOR EACH DESIRED ARGUMENT.
.SKIP 1
.INDENT -9
12.4.1.13#^F^O^C^A^L-10 DOES NOT HAVE A CONTROL CHARACTER TO INTERRUPT EXECUTION.
^THIS IS A MONITOR RESTRICTION.
^IT HAS BEEN SUGGESTED THAT CONTROL-^C MIGHT HAVE BEEN USED, BUT
CONTROL-^C, IN MY OPINION, SHOULD BE USED ONLY TO RETURN TO MONITOR
MODE, AND IT IS NOT POSSIBLE TO USE IT FOR TWO PURPOSES.
.SKIP 1
.INDENT -9
12.4.1.14#^F^O^C^A^L-10 ALLOWS STRING VALUES.
.SKIP 1
.INDENT -9
12.4.1.15#^F^O^C^A^L-10 ALLOWS LOGICAL ^I^F.
.SKIP 1
.INDEX ^ASTERISK FOR PAPER-TAPE INPUT
.INDENT -9
12.4.2###^O^P^E^R^A^T^E COMMAND.
.BREAK
^THE ASTERISK (FOR PAPER-TAPE MODE)
IS NOT USED IN ^D^E^C\S\Y\S\T\E\M-10 ^F^O^C^A^L.
.SKIP 1
.INDENT -9
12.4.3###^FUNCTION LIST.
.BREAK
^UNIQUE ^F^O^C^A^L-10 FUNCTIONS INCLUDE ^G^E^T^T^A^B, ^F^O^C^A^L,
^F^S^I^N^D, ^F^C^O^S^D, ^F^L^O^G10, ^F^H^I^B^E^R AND ^F^C^H^R$.
^SOME OF THE STANDARD FUNCTIONS MAY BEHAVE SLIGHTLY DIFFERENTLY
ON THE ^D^E^C\S\Y\S\T\E\M-10.
.SKIP 1
.INDENT -9
12.4.4###^L^I^B^R^A ^COMMAND.
.BREAK
^ONLY ^L^I^B^R^A ^C^A^L^L,  ^L^I^B^R^A ^S^A^V^E AND ^L^I^B^R^A ^D^E^L^E^T^E ARE AVAILABLE.
^THERE IS NO ^L^I^B^R^A ^L^I^S^T COMMAND AND IT IS UNLIKELY TO BE
IMPLEMENTED, SINCE ^D^E^C\S\Y\S\T\E\M-10 USERS EXPECT WILD-CARD
HANDLING WHICH IS VERY COMPLEX AND CAN BE OBTAINED WITH THE ^D^I^R^E^C^T
PROGRAM.
^IF THE USER DESIRES THE ^F^O^C^A^L TEXT AREA TO BE CLEARED
BEFORE THE ^L^I^B^R^A ^C^A^L^L HE SHOULD EXECUTE ^E^R^A^S^E
^A^L^L FIRST.
^IF THE USER DESIRES IMMEDIATE EXECUTION FOLLOWING
THE ^C^A^L^L, HE SHOULD EITHER ARRANGE TO HAVE ^G^O IN THE
CALLED FILE, OR EXECUTE ^L^I^B^R^A ^C^A^L^L ..;^G^O.
.SKIP 1
.INDENT -9
12.4.5###^CHARACTER SET.
.LEFT MARGIN 11
.BREAK
^F^O^C^A^L-10 USES ^A^S^C^I^I-1968.
^SPECIAL CHARACTER-HANDLING IS AS FOLLOWS.
.INDENT -2
-#^ESCAPE ECHOES AS $, FOR COMPATIBILITY WITH OTHER ^D^E^C\S\Y\S\T\E\M-10
SOFTWARE.
.INDEX ^CONTROL-^Z
.INDEX ^E^X^I^T
.INDENT -2
-#^ANY CONTROL-^Z CHARACTER FROM THE KEYBOARD WILL CAUSE ^F^O^C^A^L TO EXIT.
.INDEX ^CONTROL-^P
.INDENT -2
-#^ANY CONTROL-^P CHARACTER IN THE INPUT FILE
WILL CAUSE IMMEDIATE EXECUTION OF A ^Q^U^I^T.
.INDEX ^CONTROL-^R
.INDENT -2
-#^A CONTROL-^R FROM THE KEYBOARD WILL DISPLAY THE CUE AND FIRST PART
OF THE INPUT LINE.
.INDENT -2
-#^LINES ARE DELIMITED BY LINE-FEED ONLY.
^ESCAPE (33 OCTAL)
IS ALWAYS CHANGED TO LINE-FEED EXCEPT IN THE ^A^S^K DATA;
.INDEX ^CARRIAGE-RETURN
CARRIAGE-RETURNS ARE IGNORED.
^OTHER BREAK CHARACTERS SUCH AS FORM-FEED ETC.#MAY BE USED AS ORDINARY CHARACTERS.
.INDEX ^BACKARROW
.INDENT -2
-#^CONTROL-^U, RATHER THAN BACKARROW, IS USED FOR LINE DELETION.
.INDENT -2
-#^RUBOUT ECHOES THE RUBBED-OUT CHARACTERS EMBEDDED IN
.INDENT -2
-#^BACKSPACE IS USED TO RUB OUT.
.LEFT MARGIN 9
.TEST PAGE 12
.SKIP 2
.INDENT -9
^&12.5#####^P^D^P-11 ^F^O^C^A^L.\&
.SKIP 1
.INDENT -9
12.5.1###^IMPLEMENTATION CHARACTERISTICS.
.LEFT MARGIN 11
.INDENT -2
-#^ONLY THE FIRST TWO CHARACTERS OF A SYMBOL'S NAME ARE STORED INTERNALLY.
.INDENT -2
-#^F^O^C^A^L-11 VARIABLES CAN TAKE EITHER ONE OR TWO SUBSCRIPTS.
.INDENT -2
-#^F^O^C^A^L-11 VARIABLES CANNOT BEGIN WITH THE LETTER ^F.
.INDENT -2
-#^THE SYMBOL TABLE PRINT-OUT ALWAYS USES TWO SUBSCRIPTS INSTEAD OF ONE.
.INDENT -2
-#^CARE SHOULD BE TAKEN WHEN USING THE ^A^S^K COMMAND.
^SOME VERSIONS OF ^F^O^C^A^L-11 ACCEPT EXPRESSIONS BUT NOT ALPHABETIC
EQUIVALENTS OF NUMERIC LITERALS (SUCH AS "^Y^E^S"="0^Y^E^S").
.INDENT -2
-#^THE RUBOUT KEY CANNOT BE USED WHILE INPUTTING DATA FOR THE ^A^S^K COMMAND.
.INDENT -2
-#^DATA TAPES REQUIRE NULLS EMBEDDED IN THEM.
.INDENT -2
-#^CARE SHOULD BE TAKEN WITH THE FUNCTION ^F^I^T^R(-X), SINCE IT MAY NOT
BE COMPATIBLE WITH YOUR INTUITIVE CONCEPTS.
.INDENT -2
-#^THE FORMAT-SIZE SPECIFIER % CAN ACCEPT AN EXPRESSION
AS ARGUMENT.
.INDENT -2
-#^THE WIDTH OF ^E-FORMAT PRINTOUT CANNOT BE VARIED.
.INDENT -2
-#^THE INPUT LINE WIDTH IS LIMITED TO 79 CHARACTERS.
(77 FOR INDIRECT COMMANDS.)
.INDENT -2
-#^THE OUTPUT LINE WIDTH IS LIMITED TO 71 CHARACTERS.
.INDENT -2
-#^THE EXPONENTIATION OPERATOR (_^) IS RESTRICTED TO POSITIVE INTEGER ARGUMENTS.
.INDENT -2
-#^THE COMMAND ^E^R^A^S^E ^A^L^L IN ^P^D^P-11 ^F^O^C^A^L NOT ONLY
ERASES ALL TEXT, BUT IT ALSO ERASES THE SYMBOL TABLE;
THE COMMAND ^E^R^A^S^E ^T^E^X^T TAKES THE FORM ^E^R^A^S^E ^A^L^L IN OTHER ^F^O^C^A^LS.
.INDENT -2
-#^THE ^K^I^L^L COMMAND IS UNNECESSARY IN OTHER ^F^O^C^A^LS.
.INDENT -2
-#^COMPUTED ^G^O^T^O EXCEPT WITH EXPRESSIONS THAT BEGIN WITH THE LETTER ^A.
.INDENT -2
-#^THE ^D^O COMMAND CAN ACCEPT AS ARGUMENT A VARIABLE OR A NUMBER
EXCEPT A VARIABLE THAT BEGINS WITH THE LETTER ^A.
.INDENT -2
-#^THE SYMBOL TABLE IS NOT RETAINED IN ANY PARTICULAR ORDER.
.INDENT -2
-#^THE MAXIMUM TOTAL WIDTH OF NUMERICAL TYPE-OUT IS LIMITED.
.INDENT -2
-#^A^S^K WILL PRINT A COLON ON THE TERMINAL EVEN THOUGH INPUT
IS COMING FROM ANOTHER DEVICE.
.INDENT -2
-#^IN THE ^F^O^R COMMAND, IF THE INCREMENT IS NEGATIVE,
ITERATIONS BEYOND THE SECOND WILL CONTINUE INDEFINITELY BECAUSE THE
SENSE OF THE LOOPING TEST IS INDEPENDENT OF THE SIGN OF THE
INCREMENT.
^THIS IS DIFFERENT FROM ^F^O^C^A^L-10.
.LEFT MARGIN 9
.INDENT -9
12.5.2###^O^P^E^R^A^T^E COMMAND.
.BREAK
^THIS HAS SINGLE-LETTER ARGUMENTS AND HENCE IS NOT COMPATIBLE WITH
DISK SYSTEM ^F^O^C^A^LS.
.INDENT -9
12.5.3###^FUNCTION LIST.
.BREAK
^UNIQUE ^F^O^C^A^L-11 FUNCTIONS ARE ^F^X, ^F^C^L^K AND ^F^S^B^R.
^THE RANGE OF ^F^R^A^N IS FROM -1 TO +1.
^THE ARGUMENT OF ^F^R^A^N IS LESS GENERALIZED THAN ^F^O^C^A^L-10'S ^F^R^A^N.
^F^S^G^N(0) IS ZERO INSTEAD OF +1.
^F^C^H^R FUNCTION ACCEPTS MULTIPLE ARGUMENTS AND TREATS THEM AS THOUGH
THE FUNCTION WERE CALLED MULTIPLE TIMES.
.INDENT -9
12.5.4###^L^I^B^R^A COMMAND.
.INDENT -9
12.5.5###^CHARACTER SET.
.BREAK
^USES ^A^S^C^I^I-1963.
^ALTMODE IS NON-PRINTING.
^CHARACTER 175 OCTAL IS TREATED AS ALT MODE(ESC).
^BACKARROW IS USED INSTEAD OF _^^U.
^CONTROL-^C IS USED AS AN INTERRUPT CHARACTER.
^RUBOUT ECHOES AS _\ IN ^M^O^D^I^F^Y COMMANDS.
.SKIP 2
.INDENT -9
^&12.6#####^F^O^C^A^L-^G^T.\&
.SKIP 1
.INDENT -9
12.6.1###^IMPLEMENTATION CHARACTERISTICS.
.BREAK
^F^O^C^A^L-^G^T FOLLOWS ^P^D^P-11 ^F^O^C^A^L IN MOST RESPECTS.
.INDENT -9
12.6.2###^O^P^E^R^A^T^E COMMAND.
.BREAK
^THIS IS THE SAME AS ^F^O^C^A^L-11.
.INDENT -9
12.6.3###^FUNCTION LIST.
.BREAK
^F^O^C^A^L-^G^T HAS THE FOLLOWING UNIQUE FUNCTIONS:
^F^V^E^C, ^F^M^O^V, ^F^X^C^O, ^F^Y^C^O, ^F^P^T,
^F^S^E^T, ^F^C^L^R, ^F^T^X^T, ^F^S^K^P, ^F^L^P,
^F^S^A^M, ^F^L^E^D, ^F^D^I^S, ^F^T^I^C.
.INDENT -9
12.6.4###^L^I^B^R^A COMMAND.
.INDENT -9
12.6.5###^CHARACTER SET.
.BREAK
^USES ^A^S^C^I^I-1963.
^F^O^C^A^L-^G^T PROMPTS WITH _# RATHER THAN *.
^CONTROL-^C IS USED TO ESCAPE FROM THE DISPLAY PROGRAM.
^CONTROL-^T AND ^CONTROL-^F HAVE SPECIAL FUNCTIONS.
^ALTMODE IS NON-PRINTING.
^CHARACTERS 175, 176 AND 33 OCTAL ARE TREATED AS ALTMODE.
^BACKARROW IS USED INSTEAD OF _^^U.
.SKIP 2
.TEST PAGE 11
.INDENT -9
^&12.7#####^F^O^C^A^L-11/^R^T^X.\&
.SKIP 1
.INDENT -9
12.7.1###^IMPLEMENTATION CHARACTERISTICS.
.BREAK
^F^O^C^A^L-11/^R^T^X IS VERY SIMILAR TO ^P^D^P-11 ^F^O^C^A^L.
.LEFT MARGIN 11
.INDENT -2
-#^F^O^C^A^L-11/^R^T^X HAS AN OPTION ON THE ^T^Y^P^E COMMAND
TO PROVIDE A FACILITY LIKE ^F^O^R^T^R^A^N'S ^T-FORMAT.
^T^Y^P^E '\M\M BRINGS THE CARRIAGE TO COLUMN \M\M.
.INDENT -2
-#^ALL COMMANDS MUST BE DELIMITED BY A SPACE.
.INDENT -2
-#^THERE IS A ^B^L^O^C^K COMMAND BUT ITS PURPOSE IS OBSCURE.
.LEFT MARGIN 9
.INDENT -9
12.7.2###^O^P^E^R^A^T^E COMMAND.
.INDENT -9
12.7.3###^FUNCTION LIST.
.BREAK
^UNIQUE ^F^O^C^A^L-11/^R^T^X FUNCTIONS ARE
^F^W^T, ^F^Z^C^L, ^F^T^I^C, ^F^D^I, ^F^D^O, ^F^T^R,
^F^A^D^C, ^F^D^A^C, ^F^D^T, ^F^T^I, ^F^T^O, ^F^L^E^D, ^F^S^A^M,
^F^S^C^D, ^F^O^C^A^L, ^F^I^N^T AND ^F^A^T^R.
^THE ^F^O^C^A^L FUNCTION IS INCOMPATIBLE WITH ^F^O^C^A^L-10'S
FUNCTION OF THE SAME NAME, SINCE ^F^O^C^A^L-11/^R^T^X DOES NOT ALLOW
YOU TO LEAVE A PARAMETER UNCHANGED OR TO FIND OUT WHAT ITS PREVIOUS SETTING
WAS.
.INDENT -9
12.7.4###^L^I^B^R^A COMMAND.
.INDENT -9
12.7.5###^CHARACTER SET.
.BREAK
^USES ^A^S^C^I^I-1963.
^ALTMODE IS NON-PRINTING.
^CHARACTERS 175 176 AND 33 OCTAL ARE TREATED AS ALTMODE.
^BACKARROW IS USED INSTEAD OF _^^U.
.SKIP 2
.INDENT -9
^&12.8#####^F^O^C^A^L-^G11.\&
.SKIP 1
.INDENT -9
12.8.1###^IMPLEMENTATION CHARACTERISTICS.
.BREAK
^F^O^C^A^L-^G11 IS AN IMPLEMENTATION OF ^F^O^C^A^L DESIGNED TO
WORK WITH THE ^G^A^M^M^A-11 SYSTEM.
^F^O^C^A^L-^G11 FOLLOWS ^P^D^P-11 ^F^O^C^A^L IN MOST RESPECTS.
^THE ^U^T^I^L^I^T^Y COMMAND PERFORMS A DATA INTERFACE FUNCTION
WITH THE ^G^A^M^M^A-11 ^SAVE REGISTERS.
.BREAK
^THE ^A^S^K COMMAND HAS BEEN SLIGHTLY MODIFIED IN ^F^O^C^A^L-^G11
TO ALLOW COMMENT MATERIAL ON DATA TAPES.
.BREAK
^T^Y^P^E $ IS NOT INCLUDED IN ^F^O^C^A^L-^G11.
.INDENT -9
12.8.2###^O^P^E^R^A^T^E COMMAND.
.BREAK
^THIS IS THE SAME AS ^F^O^C^A^L-11.
.INDENT -9
12.8.3###^FUNCTION LIST.
.BREAK
^F^O^C^A^L-^G11 HAS THE FOLLOWING UNIQUE FUNCTIONS:
^F^M^P^A^R, ^F^M^A^T^G, ^F^M^A^T^D, ^F^M^A^T^S, ^F^M^A^T^W, ^F^M^A^T^B, ^F^M^A^T^S^M,
^F^R^P^A^R, ^F^R^O^I^G, ^F^R^O^I^D, ^F^R^O^I^P, ^F^R^O^I^C, ^F^N^C^R, ^F^P^I^C^K.
^F^O^C^A^L-^G11 CONTAINS THE STANDARD FUNCTIONS ^F^E^X^P AND ^F^L^O^G.
.INDENT -9
12.8.4###^L^I^B^R^A COMMAND.
.BREAK
^F^O^C^A^L-^G11 ^L^I^B^R^A COMMAND IS SIMILAR TO ^D^E^C\S\Y\S\T\E\M-10 ^L^I^B^R^A EXCEPT THAT IT DOES NOT INCLUDE PPN OR PROTECTION FACILITIES.
^F^O^C^A^L-^G11 HAS A ^L^I^B^R^A ^L^I^S^T COMMAND, WHICH ^D^E^C\S\Y\S\T\E\M-10 ^F^O^C^A^L DOES NOT.
^F^O^C^A^L-^G11 ^L^I^B^R^A ^C^A^L^L READS THE ENTIRE PROGRAM IN AS A BLOCK
AND DESTROYS THE OLD PROGRAM.
.INDENT -9
12.8.5###^CHARACTER SET.
.BREAK
^USES ^A^S^C^I^I-1963.
^CONTROL-^L IS USED TO ENTER ^F^O^C^A^L-^G11, AND CONTROL-^S
IS USED TO LEAVE ^F^O^C^A^L-^G11 AND RETURN TO ^G^A^M^M^A-11.
^ALTMODE IS NON-PRINTING.
^CHARACTERS 175, 176 AND 33 OCTAL ARE TREATED AS ALTMODE.
^BACKARROW IS USED INSTEAD OF _^^U.
.SKIP 2
.INDENT -9
^&12.9#####^P^D^P-15 ^F^O^C^A^L.\&
.SKIP 1
.INDENT -9
12.9.1###^IMPLEMENTATION CHARACTERISTICS.
.LEFT MARGIN 11
.INDENT -2
-#^SINCE THE ^P^D^P-15 CONSOLE ^TELETYPE IS WIRED FOR HALF-DUPLEX OPERATION, VARIOUS
COMMANDS SUCH AS ^M^O^D^I^F^Y WILL APPEAR DIFFERENTLY ON THE ^P^D^P-15.
.INDENT -2
-#^F^O^C^A^L-15 USES A CONCEPT OF "^C^O^M^M^O^N" TO ALLOW CERTAIN
VARIABLES TO BE RETAINED PERMANENTLY AND NOT BE ERASED DURING
THE ^E^R^A^S^E COMMAND OR DURING ^M^O^D^I^F^Y.
.INDENT -2
-#^M^O^D^I^F^Y ERASES THE SYMBOL TABLE.
.INDENT -2
-#^M^O^D^I^F^Y USES ALT-MODE INSTEAD OF FORM-FEED.
.INDENT -2
-#^BECAUSE ONLY ^L^I^N^E^S ARE ACCEPTABLE AS DATA FOR THE ^A^S^K COMMAND,
A COMMA OR SPACE WILL NOT TERMINATE THE ^A^S^K COMMAND.
.INDENT -2
-#^COMMANDS TO ^F^O^C^A^L-15 MAY BE SPELLED IN FULL OR ABBREVIATED TO
A SINGLE LETTER, BUT MAY NOT BE PARTIALLY ABBREVIATED OR MISSPELLED.
.INDENT -2
-#^E^R^A^S^E ^A^L^L WILL ERASE THE SYMBOL-TABLE TOO.
.INDENT -2
-#^F^O^C^A^L-15 ALLOWS ONLY A SINGLE SUBSCRIPT IN ARRAYS.
.INDENT -2
-#^SYMBOLS MAY NOT BEGIN WITH THE LETTER ^F.
.INDENT -2
-#^ONLY A SINGLE ^E IS PERMITTED IN NUMBERS. ^THIS IS REALISTIC BUT MAY
REPRESENT A MINOR DIFFERENCE FROM OTHER IMPLEMENTATIONS.
.INDENT -2
-#^EXPONENTS CAN BE USED TO + OR - 999.
.INDENT -2
-#^EXPONENTIATION CAN BE PERFORMED ONLY WITH POSITIVE INTEGERS.
I.E.#IN M_^N, N MUST BE A POSITIVE INTEGER.
.INDENT -2
-#^F^O^C^A^L-15 DOES NOT USE THE EQUAL SIGN (=) DURING NUMERIC PRINT-OUT.
.INDENT -2
-#^THE FORMAT OF SYMBOL-TABLE PRINT-OUT DOES ALLOW FOR READING IT
BACK IN THROUGH THE PAPER-TAPE READER.
.INDENT -2
-#^OUTPUT LINES ARE LIMITED TO A WIDTH OF 72 CHARACTERS.
.INDENT -2
-#^THE WIDTH OF THE ^E-FORMAT PRINTOUT CANNOT BE VARIED.
.LEFT MARGIN 9
.INDENT -9
12.9.2###^O^P^E^R^A^T^E COMMAND.
.BREAK
^F^O^C^A^L-15 USES THE * COMMAND WHICH IS INCOMPATIBLE WITH THE MORE USUAL ^O^P^E^R^A^T^E
COMMAND BECAUSE OF ITS USAGE AND HANDLING OF END-OF-FILE.
.INDENT -9
12.9.3###^FUNCTION LIST.
.BREAK
^F^O^C^A^L-15 HAS ALL THE STANDARD FUNCTIONS. ^HOWEVER, ^F^R^A^N
HAS A DIFFERENT RANGE AND IS BY NO MEANS RANDOM.
("^MOST NUMBERS ARE POSITIVE.")
.INDENT -9
12.9.4###^L^I^B^R^A COMMAND.
.BREAK
^F^O^C^A^L-15 HAS A COMPLICATED SET OF ^L^I^B^R^A COMMANDS BUT THEY
ESSENTIALLY PERFORM JUST THE STANDARD ^L^I^B^R^A ^S^A^V^E AND ^L^I^B^R^A
^C^A^L^L FUNCTIONS.
^IT IS NECESSARY TO PERFORM THE ^L^I^B^R^A ^S^A^V^E FUNCTION IN
THREE STEPS - ^L^I^B^R^A ^O^U^T, ^L^I^B^R^A ^W^R^I^T^E, AND ^L^I^B^R^A
^C^L^O^S^E. ^A SLIGHT ADVANTAGE HERE IS THAT THE ^L^I^B^R^A ^W^R^I^T^E
CAN ACTUALLY PERFORM EDITTING OPERATIONS SUCH AS PREFIXING AN
^E^R^A^S^E ^A^L^L TO THE FILE OR SUFFIXING A ^G^O TO THE FILE.
^ON ^F^O^C^A^L-10 THIS COULD BE DONE IN A MORE COMPLICATED WAY OR
ELSE THEY COULD BE DONE AT CALLING TIME WITH A COMMAND SUCH AS
.BREAK
^E^R^A^S^E ^A^L^L,;^L^I^B^R^A ^C^A^L^L ^F^I^L^N^A^M;^G^O^T^O 55.46.
.BREAK
^THE ^L^I^B^R^A ^I^N COMMAND OF ^F^O^C^A^L-15 IS THE SAME AS
^F^O^C^A^L-10'S ^L^I^B^R^A ^C^A^L^L EXCEPT THAT THE * COMMAND APPARENTLY
TERMINATES READING THE FILE.
.INDENT -9
12.9.5###^CHARACTER SET.
.BREAK
^USES ^A^S^C^I^I-1963.
^ALTMODE IS NON-PRINTING.
^CHARACTERS 175 176 AND 33 OCTAL ARE TREATED AS ALTMODE.
^BACKARROW IS USED INSTEAD OF _^^U.
_^^U ECHOES AS "@".
.PAGE
.LEFT MARGIN 6
.INDEX ^ERROR MESSAGES
.INDEX ^DIAGNOSTICS
.INDENT -6
^&13.0##^ERROR DIAGNOSTICS\&
.SKIP 1
^ALL ERRORS OCCURRING DURING EXECUTION OF A ^F^O^C^A^L PROGRAM
WILL BE COUNTED IN .^J^B^E^R^R (LOCATION 34 DECIMAL)
AND MAY OR MAY NOT CAUSE AN ERROR MESSAGE TO BE PRINTED.
.SKIP 1
.INDENT -6
^&13.1##^FATAL ERRORS\&
.SKIP 1
^CERTAIN ERRORS WILL NOT ALLOW EXECUTION TO CONTINUE.
^THESE ERRORS ARE FLAGGED WITH A QUESTION MARK (?).
.SKIP 1
.INDENT -6
^&13.2##^NON-FATAL ERRORS\&
.SKIP 1
^CERTAIN ERRORS MAY OCCUR WHICH, ALTHOUGH REPRESENTING
A FAILURE OF LOGIC, ACCURACY, ETC., WILL ALLOW
EXECUTION TO CONTINUE IF DESIRED.
.INDEX ^PERCENT MARK
.INDEX %
^THESE ARE FLAGGED BY A PERCENT MARK (%),
AND EXECUTION CONTINUES AS BEST IT CAN.
^ARITHMETIC UNDERFLOW AND OVERFLOW ARE FIXED
BY MAKING THE BEST APPROXIMATION
AND OTHER OPERATIONS LEADING TO ERRORS ARE TREATED BY IGNORING THEM.

^IF DESIRED, THE MESSAGES FROM THESE ERRORS MAY BE SUPPRESSED.
(^SEE SECTION 8.4)
.SKIP 1
.INDENT -6
^&13.3##^FORMAT OF ERROR PRINT\&
.SKIP 1
^ERROR MESSAGES ARE TYPED IN THE FOLLOWING FORMAT:
.NOFILL
?
?^ERROR DIAGNOSTIC
\M\M.\N\N THIS LINE WAS IN ERROR
################_^
.FILL
.SKIP 1
EXCEPT WHERE AN IMMEDIATE-MODE COMMAND WAS INVOLVED
IN WHICH CASE \M\M.\N\N IS OMITTED.
^THE UP-ARROW POINTS TO THE PLACE WHERE
THE INTERPRETER DISCOVERED THE ERROR.
.TEST PAGE 50
.SKIP 1
.INDEX ^DIAGNOSTICS
.INDEX ^ERROR MESSAGES
.INDENT -6
^&13.4##^LIST OF ERROR DIAGNOSTICS\&
.SKIP 1
.INDENT -6
^C\A\N\N\O\T \F\I\N\D ^F^O^C^A^L.^S^H^R \O\N ^D^S^K: \O\R ^S^Y^S: \O\R ^N^E^W: \O\R ^O^L^D:.
.INDENT -6
^E\R\R\O\R \D\E\T\E\C\T\E\D \B\Y ^F^N^E^W^G^O \R\O\U\T\I\N\E \I\N ^F^O^C^A^L^L.^R^E^L.
.BREAK
^IN LOADING ^F^N^E^W WITH ^F^O^C^A^L^L.^R^E^L, AND EXECUTING AT THE NORMAL STARTING
ADDRESS, A ROUTINE CALLED ^F^N^E^W^G^O IS INVOKED, WHICH TRIES TO SET UP
THE HIGH SEGMENT.
^F^N^E^W^G^O TRIES TO FIND ^F^O^C^A^L.^S^H^R ON VARIOUS PLACES ON THE
DISK, AND FAILS IF ^F^O^C^A^L.^S^H^R OR ^F^O^C^A^L.^E^X^E CANNOT BE FOUND
ON THE USER'S DISK OR ON ^S^Y^S OR ^N^E^W OR ^O^L^D.
.TEST PAGE 6
.INDEX ^C\H\A\N\N\E\L#\N\O\T#\C\O\R\R\E\C\T\L\Y#^I^N^I^T\T\E\D
.INDENT -6
^C\H\A\N\N\E\L#\N\O\T#\C\O\R\R\E\C\T\L\Y#^I^N^I^T\T\E\D
.BREAK
^IN ORDER TO SELECT A CHANNEL WITH A ^T^Y^P^E COMMAND IT MUST HAVE PREVIOUSLY BEEN INITIALIZED FOR OUTPUT, AND TO SELECT A CHANNEL WITH AN ^A^S^K COMMAND IT MUST
HAVE BEEN INITIALIZED FOR INPUT.
.INDEX ^E^N^T^E^R \E\R\R\O\R##_#
.INDENT -6
^E^N^T^E^R \E\R\R\O\R##_#
.BREAK
^THIS FILE NAME CANNOT BE USED TO WRITE ON THE DEVICE.
^PERHAPS THE ^D^E^CTAPE DIRECTORY HAS 22 FILE NAMES IN IT OR YOU CANNOT
ENTER THIS PARTICULAR NAME IN THE DISK ^U^F^D. - ^THE MONITOR MANUAL
WILL EXPLAIN THE MEANING OF THE OCTAL NUMBER CODE.
.INDEX ^F\L\O\A\T\I\N\G-\P\O\I\N\T \O\V\E\R\F\L\O\W
.INDENT -6
^F\L\O\A\T\I\N\G-\P\O\I\N\T \O\V\E\R\F\L\O\W
.BREAK
^RESULT OF AN ARITHMETIC OPERATION (E.G. ^DIVIDE BY ZERO) PRODUCED A NUMBER
GREATER THAN THE COMPUTER COULD HANDLE.
^THE RESULT WAS REPLACED BY THE NEAREST APPROXIMATION AND EXECUTION CONTINUED.
.INDEX ^F\L\O\A\T\I\N\G-\P\O\I\N\T \U\N\D\E\R\F\L\O\W
.INDENT -6
^F\L\O\A\T\I\N\G-\P\O\I\N\T \U\N\D\E\R\F\L\O\W
.BREAK
^RESULT OF AN ARITHMETIC OPERATION PRODUCED A NUMBER SMALLER THAN THE
COMPUTER COULD HANDLE.
^ZERO WAS USED INSTEAD, AND EXECUTION CONTINUED.
^REMEMBER THAT THE "^F^O^C^A^L" FUNCTION
CAN BE USED TO SUPPRESS THE PRINTING
OF THIS WARNING MESSAGE, SO IT WON'T MESS UP YOUR OUTPUT.
.INDENT -6
^F^O^C^A^L^L.^R^E^L \A\N\D ^F^O^C^A^L.^S^H^R \A\R\E \D\I\F\F\E\R\E\N\T \V\E\R\S\I\O\N\S.
.BREAK
^THIS IS A WARNING MESSAGE, INDICATING THAT THE PROCEDURE IN ^F^O^C^A^L^L.^R^E^L WHICH FOUND ^F^O^C^A^L.^S^H^R ON EITHER ^D^S^K OR ^S^Y^S OR ^N^E^W OR ^O^L^D COULD NOT FIND A VERSION WHICH EXACTLY MATCHED THE
REQUIREMENTS OF ^F^O^C^A^L^L.^R^E^L.
^CHECKS ARE MADE ON THE VERSION NUMBER AND ON A CORE LOCATION TOWARDS THE END
OF THE HIGH SEGMENT.
^IT IS LIKELY THAT THIS WARNING MESSAGE WILL BE FOLLOWED BY A FATAL ERROR
SUCH AS ^I\L\L\E\G\A\L ^U^U^O, INDICATING THAT THE ATTEMPT TO CONTINUE
DID NOT SUCCEED.
.INDEX ^I\L\L\E\G\A\L \C\O\M\M\A\N\D
.INDENT -6
^I\L\L\E\G\A\L \C\O\M\M\A\N\D
.BREAK
^ONE OF -
.BREAK
^UNRECOGNIZABLE COMMAND NAME (FIRST LETTER UNRECOGNIZABLE)
.BREAK
^UNRECOGNIZABLE ^L^I^B^R^A OPTION (NOT ^C^A^L^L, ^S^A^V^E OR ^D^E^L^E^T^E)
.INDEX ^I\L\L\E\G\A\L \F\O\R\M\A\T (\I\G\N\O\R\E\D)
.INDENT -6
^I\L\L\E\G\A\L \F\O\R\M\A\T (\I\G\N\O\R\E\D)
.BREAK
^THAT PARTICULAR FORMAT SPECIFIER WAS
NOT LEGAL. ^REMEMBER THAT TWO DIGITS
MAY BE REQUIRED AFTER THE DECIMAL POINT.
^ALSO REMEMBER THAT THE NUMBER BEFORE THE DECIMAL POINT MUST BE LARGER THAN THE NUMBER AFTER IT.
^IN ANY EVENT YOUR SPECIFICATION WAS IGNORED AND EXECUTION CONTINUED.
.TEST PAGE 5
.INDEX ^I\L\L\E\G\A\L \N\U\M\B\E\R
.INDENT -6
^I\L\L\E\G\A\L \N\U\M\B\E\R
.BREAK
^A REQUEST WAS MADE TO STORE A PROGRAM LINE
WITH AN ILLEGAL NUMBER, OR
TO USE AN ^I/^O CHANNEL OUTSIDE THE RANGE 0-15 DECIMAL.
.INDEX ^I\L\L\E\G\A\L \V\A\R\I\A\B\L\E
.INDENT -6
^I\L\L\E\G\A\L \V\A\R\I\A\B\L\E
.BREAK
^A "^F^O^R" INDEX, OR THE ARGUMENT OF A "^S^E^T" COMMAND,
IS NOT A VARIABLE NAME.
.INDEX ^I\M\A\G\I\N\A\R\Y \R\O\O\T\S \R\E\Q\U\I\R\E\D
.INDENT -6
^I\M\A\G\I\N\A\R\Y \R\O\O\T\S \R\E\Q\U\I\R\E\D
.BREAK
^AN ATTEMPT HAS BEEN MADE TO TAKE THE SQUARE ROOT OF A NEGATIVE NUMBER.
.TEST PAGE 4
.INDEX ^I^N^I^T ERROR
.INDENT -6
^I^N^I^T ERROR
.BREAK
^THIS DEVICE CANNOT BE INITIALIZED EITHER BECAUSE SOME-ONE ELSE IS
USING IT OR YOU DO NOT HAVE THE PRIVILEGE TO DO SO.
.TEST PAGE 7
.INDEX ^I\N\P\U\T \D\E\V\I\C\E \E\R\R\O\R
.INDENT -6
^I\N\P\U\T \D\E\V\I\C\E \E\R\R\O\R##_#
.BREAK
^PROBABLY A PARITY ERROR. - ^CONSULT THE MONITOR
MANUAL TO FIND THE MEANING OF THE NUMBER CODE, AS THAT
MAY HELP YOU TO UNDERSTAND WHY THE ERROR OCCURRED.
(^THE NUMBER COMES FROM A ^G^E^T^S^T^S ^U^U^O.)
.INDEX ^I\N\S\U\F\F\I\C\I\E\N\T C\O\R\E
.INDENT -6
^I\N\S\U\F\F\I\C\I\E\N\T C\O\R\E
.BREAK
^THE PROGRAM IS PROBABLY IN AN ERRONEOUS LOOP.
^THERE IS A REQUEST FOR MORE VARIABLES TO BE SET UP OR MORE PROGRAM LINES
TO BE ENTERED THAN THE SYSTEM CAN HANDLE.
.INDENT -6
^L\O\A\D\I\N\G \E\R\R\O\R: ^F^O^C^A^L^L.^R^E^L \M\U\S\T \B\E \L\O\A\D\E\D \F\I\R\S\T.
.INDENT -6
^E\R\R\O\R \D\E\T\E\C\T\E\D \B\Y ^F^N^E^W^G^O \R\O\U\T\I\N\E \I\N ^F^O^C^A^L^L.^R^E^L.
.BREAK
^L^I^N^K-10 MUST BE INSTRUCTED TO LOAD ^F^O^C^A^L^L.^R^E^L IN SUCH A WAY
THAT THE LOW SEGMENT LOCATION COUNTER IS ZERO (TO START IN ABSOLUTE 140 OCTAL).
^THIS IS BECAUSE ^F^O^C^A^L.^S^H^R HIGH SEGMENT RELIES ON CERTAIN LOCATIONS IN THE LOW SEGMENT
IN MUCH THE SAME WAY AS AN OVERLAY DOES.
.INDENT -6
^L\O\A\D\I\N\G \E\R\R\O\R: ^H\I\G\H \S\E\G\M\E\N\T \I\S \F\O\R\B\I\D\D\E\N.
.INDENT -6
^E\R\R\O\R \D\E\T\E\C\T\E\D \B\Y ^F^N^E^W^G^O \R\O\U\T\I\N\E \I\N ^F^O^C^A^L^L.^R^E^L.
.BREAK
^IN LOADING AND EXECUTING ^F^O^C^A^L^L.^R^E^L WITH ^F^N^E^W,
THE HIGH SEGMENT SPACE CANNOT BE USED BY ANY ROUTINE SUCH AS ^F^O^R^O^T^S, BECAUSE IT IS GOING TO BE USED BY ^F^O^C^A^L.^S^H^R.
^F^O^C^A^L^L CHECKS FOR THE ABSENCE OF A HIGH SEGMENT PRIOR TO DOING A ^G^E^T^S^E^G ON ^F^O^C^A^L.^S^H^R.
.INDEX ^L^O^O^K^U^P ERROR##_#
.INDENT -6
^L^O^O^K^U^P ERROR##_#
.BREAK
^F^O^C^A^L CANNOT FIND THIS FILE NAME ON THE DEVICE. - ^CONSULT THE MONITOR
MANUAL TO FIND THE MEANING OF THE NUMBER CODE, AS THAT
MAY HELP YOU TO UNDERSTAND WHY THE ERROR OCCURRED.
.INDEX ^M\I\S\M\A\T\C\H\E\D \P\A\R\E\N\T\H\E\S\E\S
.INDENT -6
^M\I\S\M\A\T\C\H\E\D \P\A\R\E\N\T\H\E\S\E\S
.BREAK
^EITHER MISMATCHED NUMBER OF BRACKETS IN AN ARITHMETIC EXPRESSION, OR
MISMATCHED "[" WITH "]" IN PROJECT-PROGRAMMER PAIR, OR
MISMATCHED "<" WITH ">" IN PROTECTION KEY FIELD
.INDEX ^N\O\N\E\X\I\S\T\A\N\T \L\I\N\E
.INDENT -6
^N\O\N\E\X\I\S\T\A\N\T \L\I\N\E
.BREAK
^AN "^I^F", "^G^O^T^O", OR "^M^O^D^I^F^Y" COMMAND
SPECIFIES A LINE NUMBER WHICH DOES NOT EXIST.
.INDEX ^O\U\T\P\U\T \D\E\V\I\C\E \E\R\R\O\R
.INDENT -6
^O\U\T\P\U\T \D\E\V\I\C\E \E\R\R\O\R##_#
.BREAK
^FOR EXAMPLE WRITE-LOCK ON, PARITY ERROR, TAPE FULL, ETC.
 - ^CONSULT THE MONITOR
MANUAL TO FIND THE MEANING OF THE NUMBER CODE, AS THAT
MAY HELP YOU TO UNDERSTAND WHY THE ERROR OCCURRED.
(^THE NUMBER COMES FROM A ^G^E^T^S^T^S ^U^U^O.)
.TEST PAGE 5
.INDEX ^P\R\O\G\R\A\M \R\E-\S\T\A\R\T\E\D
.INDENT -6
^P\R\O\G\R\A\M \R\E-\S\T\A\R\T\E\D
.BREAK
^EITHER A PREVIOUSLY-RUN PROGRAM WAS SAVED AND RE-EXECUTED
.INDEX ^CONTROL-^C
OR CONTROL-^C/^S^T^A^R^T SEQUENCE WAS USED.
(^THIS IS NOT REALLY AN ERROR.)
.INDEX ^R^E^N^A^M^E ERROR##_#
.INDENT -6
^R^E^N^A^M^E ERROR##_#
.BREAK
^EITHER DURING LIBRARY DELETION OR AT THE END OF WRITING A FILE,
THERE WAS A PROTECTION FAILURE OR OTHER KIND OF FAILURE DURING A RENAME
^U^U^O.
^PLEASE CONSULT THE MONITOR MANUAL TO DETERMINE THE MEANING OF THE
OCTAL CODE.
.INDEX ^U\N\E\X\P\E\C\T\E\D \C\H\A\R\A\C\T\E\R
.INDENT -6
^U\N\E\X\P\E\C\T\E\D \C\H\A\R\A\C\T\E\R
.BREAK
^F^O^C^A^L WAS EXPECTING EITHER A SEMICOLON OR
CARRIAGE-RETURN (AT THE END OF A COMMAND),
A "=" (AFTER A "^S^E^T" COMMAND VARIABLE),
OR A COMMA
(AFTER A PROJECT NUMBER BEFORE THE PROGRAMMER NUMBER).
^STRING EXPRESSIONS CANNOT BE MIXED WITH NUMERIC EXPRESSIONS.
.SKIP 1
.INDENT -6
^NOTE:
.BREAK
_# IS THE (OCTAL) NUMERICAL CODE RETURNED BY THE MONITOR
.SKIP 3
.INDEX ^PUSH-DOWN-LIST ^OVERFLOW
.INDEX \P\D\L \O\V (MONITOR ERROR MESSAGE)
.INDEX ^LOOPS
.INDEX ^S^T^A^R^T COMMAND
.INDENT -6
^&13.5##^PUSH-DOWN-LIST ^OVERFLOW\&
.SKIP 2
^OCCASIONALLY A ^F^O^C^A^L PROGRAM MAY ENTER A LOOP WHICH CAUSES ^F^O^C^A^L'S
INTERNAL PUSH-DOWN LIST TO FILL TO CAPACITY.
^THIS MAY BE CAUSED, FOR EXAMPLE, BY A PROGRAM WHICH INCLUDES A ^D^O ^A^L^L WHICH CALLS ITSELF.
^THE PUSH-DOWN-LIST OVERFLOW ERROR MESSAGE (PDL OV) IS GENERATED BY THE MONITOR,
AND IF IT OCCURS, THE USER SHOULD RECOVER BY GIVING THE MONITOR ^S^T^A^R^T
COMMAND.
.PAGE
.INDEX ^FUNCTION ^F^N^E^W
.INDEX ^F^N^E^W FUNCTION
.INDENT -6
^&14.0##^EXTERNAL FUNCTION: ^F^N^E^W\&
.SKIP 1
^IF YOU DESIRE TO LINK ^F^O^C^A^L WITH SOME OTHER LANGUAGE,
THIS IS DONE USING THE ^F^N^E^W CONSTRUCTION. ^BY THIS METHOD,
^F^O^C^A^L MAY CALL A ROUTINE OR SUBROUTINE WITH AN UNLIMITED NUMBER OF
ARGUMENTS, MAY EXECUTE MACHINE CODE DIRECTLY, AND MAY RETURN ONE NUMERIC RESULT.
^THE ARGUMENTS ARE TRANSFERRED TO THE SUBROUTINE BY VALUE ONLY,
AND IT IS THEREFORE NOT POSSIBLE TO MODIFY AN ARGUMENT FROM THE SUBROUTINE.
^ARGUMENTS MAY BE NUMERIC (SINGLE OR DOUBLE PRECISION)
OR ^A^S^C^I^I STRING (^F^O^R^T^R^A^N TYPE 17).
^THE ^D^E^C\S\Y\S\T\E\M-10 STANDARD CALLING SEQUENCE IS USED.
.SKIP 1
^IF THERE IS NO ^F^N^E^W ROUTINE,
A CALL TO ^F^N^E^W WILL PRODUCE AN ERROR MESSAGE OR, IF THERE
IS ONLY ONE ARGUMENT, WILL GIVE THE VALUE OF THE ARGUMENT.
.SKIP 1
.INDENT -6
^&14.1##^HOW TO LOAD YOUR ^F^N^E^W PROGRAM\&
.SKIP 1
^TO USE THE "^F^N^E^W" FEATURE,
YOU MUST WRITE THE ^F^N^E^W ROUTINE ITSELF AND COMPILE IT.
^THEN LOAD IT WITH THE RELOCATABLE BINARY FILE "^F^O^C^A^L^L.^R^E^L",
MAKING SURE THAT ^F^O^C^A^L^L IS LOADED FIRST AND THAT THERE IS NO
HIGH SEGMENT.
^THE CORE IMAGE THUS OBTAINED CAN BE EXECUTED WITH THE MONITOR "^S^T^A^R^T" COMMAND.
THEN ^F^N^E^W MAY BE
CALLED FROM A ^F^O^C^A^L PROGRAM JUST LIKE ANY OTHER FUNCTION.
.SKIP 1
.INDENT -6
^&14.2##^EXAMPLE OF AN ^F^N^E^W ROUTINE\&
.SKIP 1
^HERE IS AN EXAMPLE OF A ^F^O^R^T^R^A^N SUBROUTINE WHICH MAY BE CALLED
FROM ^F^O^C^A^L.
^THE VALUE RETURNED BY ^F^N^E^W WILL BE EQUAL TO THE NUMBER OF CHARACTERS IN THE STRING.
.TEST PAGE 19
.NOFILL
.TAB STOPS 12,13,22,31,41,51
.SKIP 1
	^D^O^U^B^L^E ^P^R^E^C^I^S^I^O^N ^F^U^N^C^T^I^O^N ^F^N^E^W(^I)
^C	^F^N^E^W ^R^E^T^U^R^N^S ^T^H^E ^N^U^M^B^E^R ^O^F ^C^H^A^R^A^C^T^E^R^S ^I^N ^A ^S^T^R^I^N^G.
	^D^I^M^E^N^S^I^O^N ^I(100)
	^F^N^E^W=0
	^D^O 100 ^J=1,100
	^M=^I(^J)/2
	^D^O 100 ^K=1,5
	^I^F((^M.^A^N^D."376000000000).^E^Q.0)^R^E^T^U^R^N
	^M=^M*128
100	^F^N^E^W=^F^N^E^W+1
	^E^N^D
.FILL
.TEST PAGE 12
.SKIP 1
^HERE IS HOW YOU MIGHT USE THIS FUNCTION IN ^F^O^C^A^L:
.SKIP 1
_.^E^X^E^C^U^T^E ^S^Y^S:^F^O^C^A^L^L/^R^E^L,^D^S^K:^F^N^E^W.^F4/^C^O^M^P/^F10
.BREAK
_...........
.BREAK
*1.01####^A^S^K ^X$;^I^F (^F^N^E^W(^X$)_#7) ; ^G^O ^T^O 1.01
.BREAK
*^G^O
.BREAK
:^N^O#:^F^O^O#:^W^O^R^R^Y#:^A^S^K#:^C^O^R^R^E^C^T
.BREAK
*
.SKIP 1
^NOTE:###^F^O^R^T^R^A^N SUBROUTINES ^&MUST\& BE COMPILED WITH ^F^O^R^T^R^A^N-10, ^&NOT\& ^F40.
.PAGE
.INDEX ^ACCURACY
.INDEX ^PRECISION
.INDENT -6
^&15.0##^INTERNAL REPRESENTATION OF NUMBERS###---###ACCURACY\&
.SKIP 2
^DATA WORDS MAY BE REPRESENTED INTERNALLY WITHIN THE ^D^E^C\S\Y\S\T\E\M-10
IN A NUMBER OF DIFFERENT FORMS, DEPENDING ON HOW ^F^O^C^A^L WAS ASSEMBLED.
^IT IS NORMALLY ASSEMBLED AS DOUBLE-PRECISION.
.SKIP 1
.INDENT -6
15.1##^SINGLE PRECISION
.SKIP 1
^THE ^D^E^C\S\Y\S\T\E\M-10 HOLDS THE NUMBERS
IN 36-BIT WORDS, OF WHICH 27 BITS ARE FRACTION AND NINE BITS ARE EXPONENT.
^OF THE 27 BITS, THE LEFT-MOST IS ALWAYS A 1, SO THERE ARE REALLY ONLY
26 BITS OF PRECISION, OR 26 TIMES LOG-2-TO-BASE-10 =8 DIGITS.
.SKIP 1
.INDEX ^K^A-10
.INDENT -6
15.2##^DOUBLE PRECISION ^K^A-10
.SKIP 1
^THERE ARE 26+27 FRACTION BITS, SO THE ACCURACY IS
26+27 TIMES LOG-2-TO-BASE-10 =53*0.30103=16 DIGITS
.SKIP 1
.INDEX ^K^I-10
.INDENT -6
15.3##^DOUBLE PRECISION ^K^I-10, ^K^L-10
.SKIP 1
^THERE ARE 26+35 FRACTION BITS, SO THE ACCURACY IS 26+35
TIMES LOG-2-TO-BASE-10 =61*0.30103=18 DIGITS.
.SKIP 1
.INDENT -6
15.4##^STRING VALUES.
.SKIP 1
^THE SYMBOL TABLE HOLDS ONLY A POINTER TO THE STRING WHICH IS STORED IN
A DIFFERENT AREA OF CORE.
.PAGE
.INDEX ^SPEED
.SKIP 2
.INDENT -6
^&16.0##^SPEED OF ^F^O^C^A^L\&
.SKIP 2
^THERE ARE MANY FACTORS GOVERNING THE SPEED OF EXECUTION OF A ^F^O^C^A^L PROGRAM.
^THE MOST IMPORTANT THING TO REALIZE IS THAT THE PROGRAM ITSELF IS
STORED IN SOURCE FORM, \I.\E. AS STRINGS OF ^A^S^C^I^I CHARACTERS
MAKING UP THE LINES OF THE PROGRAM.
^AS THE PROGRAM IS EXECUTED, ^F^O^C^A^L EXAMINES EACH LETTER OF THE
PROGRAM TEXT, DECIDING WHAT MEANING TO GIVE TO EACH LETTER, AND THEN
DOING WHATEVER IS REQUIRED.
^FOR EXAMPLE, IF THE LINE CONTAINED "^S^E^T ^X= 0", ^F^O^C^A^L
WOULD FIRST FIND THE "^S", DETERMINE THAT IT WAS THEREFORE A "^S^E^T"
COMMAND, AND MOVE THE SCANNING POINTER FORWARD PAST THE "^E" AND "^T"
UNTIL IT FOUND THE SPACE.
^THEN IT WOULD GO TO THE "^SYMBOL-FIND" ROUTINE WHICH WOULD FIND
THE "^X", DETERMINE THAT IT WAS NOT INDEXED, AND ENSURE THAT IT WAS
FOLLOWED BY "=" AND SKIP THE "=".
^A CALL TO THE "^E^V^A^L" ROUTINE WOULD THEN SKIP THE SPACE, EVALUATE THE
ZERO, AND RETURN TO THE "^S^E^T" ROUTINE WHICH WOULD STORE THE ANSWER.
^THE ONLY REMAINING THING TO DO WOULD BE TO ENSURE THAT THE LINE IS TERMINATED
CORRECTLY.
^THUS IT APPEARS THAT SINCE ^F^O^C^A^L IS AN "INTERPRETER", TIME COULD
BE SAVED BY OMITTING THE "^E" AND "^T", AND THE SPACE BEFORE THE ZERO.
.SKIP 2
.INDEX ^INTERPRETATION SPEED
.INDENT -6
^&16.1##^SPEED OF ^CHARACTER ^INTERPRETATION\&
.SKIP 2
^THE BASIC SPEED OF ^F^O^C^A^L'S CHARACTER INTERPRETER MAY BE MEASURED
IN UNITS OF MICRO-SECONDS PER CHARACTER, BY FINDING THE DIFFERENCE BETWEEN TIMES FOR
.SKIP 1
^F^O^R ^X=1,1000;^S ^Y=0
.BREAK
AND
.BREAK
^F^O^R ^X=1,1000;^S^E^T ^Y=0
.SKIP 1
^IT IS APPARENT THAT THESE LINES DIFFER BY TWO CHARACTERS, AND THE
INTERPRETER'S SPEED WILL BE THE TIME DIFFERENCE AS MEASURED ABOVE, DIVIDED
BY 2000.
.SKIP 1
^DEPENDING ON MEMORY SPEED, CONFIGURATION ETC., ^F^O^C^A^L-10 WILL SHOW
ABOUT 75 MICROSECONDS PER CHARACTER (^K^I-10) OR 125 MICROSECONDS
PER CHARACTER (^K^A-10).
^SINCE ^F^O^C^A^L-10 HAS A SPECIAL CAPABILITY TO SKIP SPACES QUICKLY,
THE FIGURE IS ABOUT 30 TO 40 MICROSECONDS PER CHARACTER FOR SPACES AND TABS.
.TEST PAGE 28
.SKIP 2
.INDEX ^LINE-FINDING SPEED
.INDENT -6
^&16.2##^SPEED OF ^LINE-FINDING\&
.SKIP 2
^INTERPRETERS SUCH AS ^F^O^C^A^L-10 HAVE VARIOUS METHODS OF STORING
PROGRAM LINES.
^ONE METHOD COULD BE TO STORE ALL PROGRAM LINES WITH THEIR LINE NUMBERS
IN THE TEXT STORAGE AREA.
^IN SUCH A CASE, THE LINE-FINDING ROUTINE WOULD NEED TO SCAN ALL TEXT,
SEARCHING FOR END-OF-LINE FOLLOWED BY THE LINE NUMBER.
^F^O^C^A^L-10, HOWEVER, STORES THE LINE NUMBERS IN A SEPARATE TABLE,
IN ORDER OF LINE NUMBER, WITH A SIMILAR TABLE OF POINTERS TO
THE LINE ITSELF.
^IN FINDING A LINE, THEN, ^F^O^C^A^L-10 MUST FIRST SCAN THE TABLE AND
THEN USE THE POINTER TO GET TO THE LINE ITSELF.
^SPEEDS ARE MEASURED BY FINDING THE DIFFERENCE BETWEEN
.SKIP 1
^F^O^R ^X=1,1000;^D^O 1.01
.BREAK
AND
.BREAK
^F^O^R ^X=1,1000;^D^O 1.99
.SKIP 1
WHERE 1.01 THROUGH 1.99 ARE IDENTICAL AND CONTAIN ONLY THE LETTER "^C".
.SKIP 1
^TYPICAL TIMES FOR ^F^O^C^A^L-10 ARE 18 - 30 MICROSECONDS PER LINE
SCANNED OVER.
^THE TIME DEPENDS ON THE NUMBER OF ENTRIES IN THE TABLE OF LINE
NUMBERS.
^OBVIOUSLY IT WILL BE QUICKER TO FIND LOW-NUMBERED
LINES IN ^F^O^C^A^L-10, BUT IN ALL CASES IT WOULD BE FASTER THAN
AN INTERPRETER WHICH DID NOT HAVE A LINE TABLE.
(^A 100-LINE PROGRAM WOULD STILL TAKE ONLY 2 MILLISECONDS TO FIND THE
HUNDREDTH LINE).
.SKIP 2
.INDEX ^SPEED
.INDENT -6
^&16.3##^SPEED OF ^COMMAND-EXECUTION\&
.SKIP 1
^MANY COMMANDS IN ^F^O^C^A^L CAN BE TIMED BY INCLUDING THEM IN
LOOPS AND PERFORMING THEM MANY TIMES.
^THE TIMES MAY BE COMPARED WITH "^C^O^M^M^E^N^T" EXECUTION.
^HOWEVER, MANY COMMANDS CAN NOT BE EXECUTED SATISFACTORILY DURING
LOOPS ("^E^R^A^S^E", "^M^O^D^I^F^Y", "^W^R^I^T^E") AND SOME OTHERS ARE
^I/^O-DEPENDENT.
.SKIP 1
^SOME EXAMPLES OF TIMES IN ^F^O^C^A^L-10 ARE:
.SKIP 1
.LEFT MARGIN 13
.INDENT -7
"^D^O"###2100#(^K^A-10), 1000#(^K^I-10) MICROSECONDS
INCLUDING LINE-NUMBER DECODING.
.INDENT -7
"^G^O^T^O"#1150#(^K^A-10), 780#(^K^I-10) MICROSECONDS
INCLUDING LINE-NUMBER DECODING.
.INDENT -7
"^S^E^T"##680#(^K^A-10), 450#(^K^I-10) MICROSECONDS
INCLUDING DATA-STORAGE BUT NOT EXPRESSION-EVALUATION.
.LEFT MARGIN 6
.SKIP 2
.TEST PAGE 15
.INDEX ^ARITHMETIC SPEED
.INDENT -6
^&16.4##^SPEED OF ^ARITHMETIC ^OPERATIONS\&
.SKIP 1
^MULTIPLICATION, DIVISION ETC. WILL TAKE A TIME DEPENDENT ON THE
HARDWARE BEING USED AND ALSO PRECISION (SINGLE OR DOUBLE).
^ALL SIMPLE OPERATIONS TAKE ABOUT THE SAME TIME WITHIN ABOUT
20% OR 30%, INCLUDING ADDITION, SUBTRACTION, MULTIPLICATION,
DIVISION, AND EXPONENTIATION.
^TEST RESULTS MAY BE PRODUCED BY THE ^F^O^C^A^L TEST PROGRAM ^X^S^P^E^E^D.^F^C^L.
.SKIP 2
.INDEX ^EVALUATION SPEED
.INDENT -6
^&16.5##^SPEED OF ^ITEM ^EVALUATION\&
.SKIP 2
^THERE ARE MANY TYPES OF EVALUATIONS PERFORMED BY ^F^O^C^A^L.
^FOR EXAMPLE ARITHMETIC FUNCTIONS, CONSTANTS AND VARIABLES.
^EACH OF THESE IS DETERMINED AND PRINTED BY THE TEST PROGRAM ^X^S^P^E^E^D.^F^C^L;
NOTE THAT PER-CHARACTER INTERPRETATION TIMES MUST BE COMPUTED
SEPARATELY AND ADDED TO THOSE FIGURES.
.PAGE
.INDENT -6
^&^APPENDIX ^A. ^F^O^C^A^L MEMORY MAP.\&
.INDENT -3
^ACCUMULATORS (000000 THRU 000017)
.SKIP 1
.INDEX ^JOB DATA AREA
.INDENT -3
^JOB DATA AREA (000020 THRU 000137)
.SKIP 1
.INDENT -3
^STATIC DATA BASE (SEE BELOW: ^B^U^F^H THRU ^P^D^L-1)
.SKIP 1
.INDENT -3
^PUSH-DOWN LIST (^P^D^L THRU ^P^D^L+^P^D^C-1)
.SKIP 1
.INDENT -3
^LOW SEGMENT PROGRAM (IF ANY)
.BREAK
^F^O^C^A^L PROGRAM IF NON-SHARABLE VERSION (^F^O^C^A^L#THRU#^C^O^D^E^N^D-1)
.BREAK
^FUNCTION SUBROUTINES (IF ANY - E.G.#^F^N^E^W)
.BREAK
^D^D^T IF ANY (^D^D^T THRU ^D^D^T^E^N^D-1)
.SKIP 1
.INDEX ^D^D^T SYMBOLS
.INDENT -3
^D^D^T SYMBOLS (IF ^D^D^T IS LOADED)
.SKIP 1
.INDEX ^PATCH AREA
.INDENT -3
^PATCH AREA (IF ANY)
.BREAK
^A PATCH AREA MAY BE CREATED AT RUN TIME IF REQUIRED FOR ^D^D^T
DEBUGGING, BY MODIFYING THE LEFT HALF OF .^J^B^S^A BEFORE STARTING ^F^O^C^A^L.
^FOR EXAMPLE:
.BREAK
_.^G^E^T ^F^O^C^A^L
.BREAK
_.^D^D^T
.BREAK
^F^O^C^A^L$:
.BREAK
_.^J^B^S^A/##7016,,400010####7116,,400010
.BREAK
7016/###0#(OR#RUBBISH)##^P^A^T:####^P^A^T^C^H:
.BREAK
_^^C
.BREAK
_.^S^A^V^E ^F^O^C^A^L
.SKIP 1
.INDEX ^DATA BASE
.INDENT -3
^DYNAMIC DATA BASE (@.^J^B^S^A/^L THRU @.^J^B^R^E^L)
.SKIP 1
^I/^O BUFFERS POINTED TO BY ^B^U^F^T^A^B.(@.^J^B^S^A/^L THRU @^I^N^D^E^X-2)
.SKIP 1
^F^O^C^A^L TEXT INDEX (@^I^N^D^E^X-1 THRU @^T^E^X^T^L)
.BREAK
^THIS DATA BLOCK CONSISTS OF ONE-WORD LINKS
IN THE FORMAT
.INDENT 4
^BITS 4-17#######^PROGRAM LINE NUMBER.
.INDENT 4
^BITS 18-35######^ADDRESS JUST BELOW TEXT.
.BREAK
^WORDS MUST BE STORED IN ORDER OF LINE NUMBER.
^ZERO WORDS REPRESENT DELETED LINE NUMBERS.
^THE FIRST WORD CONTAINS -1; ^I^N^D^E^X POINTS TO THIS WORD.
^THE LAST WORD CONTAINS -1; ^T^E^X^T^L POINTS TO THIS WORD.
.SKIP 1
^F^O^C^A^L PROGRAM TEXT(@^T^E^X^T^L+1 THRU @^B^U^F^L)
.BREAK
^THE RIGHT HALF OF ^T^E^X^T^L
POINTS JUST BELOW THE FIRST CHARACTER.
^THE POINTER IN ^B^U^F^L POINTS TO THE RIGHT-MOST
CHARACTER-POSITION OF THE LAST WORD IN THIS
DATA AREA.
^STATEMENTS APPEAR IN THIS DATA AREA AS CHARACTER STRINGS,
WITHOUT THE LINE-NUMBER PREFIX.
^EACH NEW STATEMENT BEGINS IN A NEW WORD.
^THE LINE-DELIMITER IS STORED AS A SINGLE CHARACTER,
"EOL".
.SKIP 1
^L^I^B^R^A-^C^A^L^L TEXT AREA(@^B^U^F^L+1 THRU @^B^U^F^H)
.BREAK
^THIS CONTAINS GROUPS OF TEXT-LINES, WHERE
LINES ARE SEPARATED BY EOL'S.
^B^U^F^L DEFINES THE LOWER LIMIT OF THIS AREA,
SUCH THAT THE FIRST CHARACTER WOULD BE OBTAINED
INTO ^C^H BY EXECUTING ^I^L^D^B ^C^H,^B^U^F^L.
^B^U^F^H DEFINES THE UPPER LIMIT OF THIS AREA SUCH THAT
^B^U^F^H ALWAYS POINTS ABOVE THE TOP EOL.
^INITIALLY THE BUFFER AREA IS EMPTY AND C(^B^U^F^L)=C(^B^U^F^H).
^THE AREA IS SET TO EMPTY CONDITION EACH TIME ^F^O^C^A^L
TYPES "*" TO ACCEPT A NEW ^F^O^C^A^L COMMAND.
^WHEN WE EXECUTE CODE IN THIS SECTION IT IS
EXECUTED AS LINE ZERO.
^DURING THE EVALUATION OF STRING EXPRESSIONS, ^B^U^F^H IS TEMPORARILY MOVED UP AND THE TEMPORARY STRINGS ARE STORED IN THIS AREA.
.SKIP 1
^UNUSED CORE (@^B^U^F^H THRU @^S^Y^M^T^B^L)
.SKIP 1
^SYMBOL TABLE (1+@^S^Y^M^T^B^L THRU @.^J^B^R^E^L)
.BREAK
^VARIABLE LABELS AND VALUES (1+@^S^Y^M^T^B^L THRU @^S^Y^M^T^B^C)
.BREAK
^IF A VARIABLE EXISTS, IT WILL HAVE AN ENTRY IN THIS TABLE.
^IF THERE IS NO ENTRY, THEN THE VARIABLE HAS NOT BEEN DEFINED AND WE MAY ASSUME IT DOES NOT EXIST.
^ENTRIES ARE STORED IN ALPHABETICAL ORDER,
WORKING DOWNWARDS FROM @^S^Y^M^T^B^C.
^EACH ENTRY HAS THE FOLLOWING FORMAT:
^TOP WORD IS THE NAME, IN WHICH BIT 0 INDICATES WHETHER STRING (0) OR NUMBER (1), BITS 1-17 ARE THE SIXBIT LABEL, AND BITS 18-35 CONTAIN THE INDEX IF ANY.
^THE OTHER WORD(S) CONTAIN THE VALUE BEING A FLOATING-POINT NUMBER IN THE CASE OF NUMERIC DATA,
OR A STRING POINTER IN THE CASE OF STRING DATA.
^THE DOUBLE PRECISION ENTRY ALSO CONTAINS A ZERO WORD OF PADDING.
^THE PURPOSE OF THIS IS TO SPEED SEARCHING.
^THE FLOATING-POINT FORMAT USED DEPENDS ON THE HARDWARE ^F^O^C^A^L-10 IS ASSEMBLED FOR.
^DOUBLE-PRECISION VERSIONS OF ^F^O^C^A^L-10 CONTAIN THE STRING POINTER IN THE WORD WITH THE LESSER ADDRESS, AND THE OTHER WORD IF ANY CONTAINS ZERO.
.SKIP 1
^STRING VARIABLE VALUES (1+@^S^Y^M^T^B^C THRU @^S^Y^M^T^B^H)
.BREAK
^THE DATA PORTION OF STRING VARIABLES IS STORED HERE.
^SPACE IS NEVER RECLAIMED, SO AS THE VARIABLE VALUES CHANGE, THIS SPACE EXPANDS WITHOUT LIMIT.
.SKIP 1
.INDENT -3
^HIGH SEGMENT (IF APPLICABLE)(400000 THRU @.^J^B^H^R^L/^R)
.INDEX ^VESTIGIAL JOBDATA AREA
.BREAK
^VESTIGIAL JOBDATA AREA(400000 THRU 400007)
.BREAK
^FUNCTION SUBROUTINES (IF ANY)(^F^N^E^W THRU ^F^N^W^E^N^D-1)
.BREAK
^F^O^C^A^L PROGRAM (IF SHARABLE VERSION)(^F^O^C^A^L THRU ^C^O^D^E^N^D-1)
.PAGE
.CENTER
^&^F^O^C^A^L LOW SEGMENT DATA BASE (EXTRACT FROM ^F^O^C^A^L.^M^A^C)\&
.CENTER
(SUBJECT TO CHANGE WITHOUT NOTICE)
.BREAK
.LEFT MARGIN 19
^S^U^B^T^T^L ^L^O^W ^S^E^G^M^E^N^T ^D^A^T^A
.BREAK
^R^E^L^O^C 0
.CENTER
;********#####^DATA-BLOCK POINTERS#####********
.INDENT -16
^B^U^F^H:##^B^L^O^C^K 1 ;^POINTER TO LAST CHARACTER IN ^L^I^B^R^A-^C^A^L^L TEXT AREA.
.INDENT -16
^D^B^P:###########;^THIS GROUP IS CHECKED BY THE ^S^Q^U^E^E^Z ROUTINE.
.INDENT -16
^I^N^D^E^X:#^B^L^O^C^K 1 ;^LEFT HALF UNUSED (CONTAINS -1).
^RIGHT HALF - ADDRESS OF INDEX DATA BLOCK.
.INDENT -16
^T^E^X^T^L:#^B^L^O^C^K 1 ;^RIGHT HALF POINTS JUST BELOW ^F^O^C^A^L PROGRAM TEXT.
^LEFT HALF CONTAINS -1.
.INDENT -16
^P^N^T^R:##^B^L^O^C^K 1 ;^CURRENT BYTE POINTER TO ^F^O^C^A^L TEXT.
.INDENT -16
^T^H^I^S^P^T:^B^L^O^C^K 1 ;^POINTER TO BEGINNING OF EXECUTION OF CURRENT LINE.
.INDENT -16
^B^U^F^L:##^B^L^O^C^K 1 ;^POINTER TO JUST BELOW ^L^I^B^R^A-^C^A^L^L TEXT AREA.
^LEFT HALF CONTAINS 010700.
.INDENT -16
^D^B^P^E^N^D=+.######;^END OF DATA-BLOCK POINTERS.
.CENTER
;******** ^PROGRAM STATUS DATA WORDS ********
.INDENT -16
^O^U^T^C^H^N:^B^L^O^C^K 1 ;^CURRENT-OUTPUT-CHANNEL.
.INDENT -16
^I^N^C^H^N:#^B^L^O^C^K 1 ;^CURRENT-INPUT-CHANNEL.
.INDENT -16
^W^P^C==3#########;^THREE WORDS PER CHANNEL.
.INDENT -16
^H^E^D^T^A^B:^B^L^O^C^K 20*^W^P^C ;^BUFFER HEADERS.
.INDENT -16
^B^U^F^T^A^B:^B^L^O^C^K 20;^TABLE OF POINTERS TO BUFFER SPACE
ALLOCATED TO EACH CHANNEL.
^IF ENTRY IS ZERO, THEN NO BUFFERS ARE ALLOCATED.
^IF THE WORD IS NEGATIVE, IT MEANS THE CHANNEL IS
INITTED FOR OUTPUT. ^FOLLOWING DATA IS GOTTEN
BY NEGATING THE WHOLE WORD FIRST:
^LEFT HALF - SIZE OF BUFFER SPACE.
^RIGHT HALF - ADDRESS OF BUFFER SPACE.
.INDENT -16
^F^O^R^F^L^A:^B^L^O^C^K#1#;^CONTAINS ZERO IF NO '^F^O^R' IN EXECUTION.
^OTHERWISE ^X^W^D -1,^L^I^N^N^U^M-OF-^F^O^R.
.INDENT -16
^F^O^V^S^U^P:^B^L^O^C^K 1 ;^IF THIS WORD IS NON-ZERO (SET TO -1),
THEN SUPPRESS FLOATING-POINT TRAP ERROR MESSAGES.
.INDENT -16
^L^U^P^A^R^G:^B^L^O^C^K 2 ;^MOST RECENT ARGUMENT OF REPETITIVE LOOP.
.BREAK
(2 LOCATIONS TO PRESERVE HISTORICAL MAP.)
.INDENT -16
^T^H^I^S^L^N:^B^L^O^C^K 1 ;_# OF THE LINE BEING EXECUTED.
.INDENT -16
^L^I^N^N^U^M:^B^L^O^C^K 1#;^RIGHT-HALF - LINE NUMBER OF CURRENT INTEREST
(^ALWAYS POSITIVE).
^LEFT HALF IF NEGATIVE IS A LINK
TO NESTED LINES AND POINTERS.
^PREVIOUS ^L^I^N^N^U^M IS AT ^P^D^L^E^N^D-2+^L^H(^L^I^N^N^U^M).
^PREVIOUS ^P^N^T^R IS AT ^P^D^L^E^N^D-1+^L^H(^L^I^N^N^U^M).
.CENTER
;********#####^SYMBOL TABLE POINTERS#####********
.INDENT -16
^S^Y^M^T^B^L:^B^L^O^C^K 1 ;^ADDRESS JUST BELOW BOTTOM OF SYMBOL-TABLE.
^IT IS A POINTER INCLUDING INDEX ^R^L.
.INDENT -16
^S^Y^M^T^B^C:^B^L^O^C^K 1 ;^ADDRESS OF FIRST NAME IN SYMBOL TABLE.
^IT IS A POINTER INCLUDING INDEX ^R^L.
.INDENT -16
^S^Y^M^T^B^H:^B^L^O^C^K 1 ;^HIGHEST LOCATION OF SYMBOL TABLE.
^NORMALLY CONTAINS SAME AS .^J^B^R^E^L.
.INDENT -16
.INDEX ^FORMAT
^F^O^R^M^A^T:^B^L^O^C^K#1#;^FORMAT CONTROL FOR TYPING NUMBERS.
^BITS 0-28:TOTAL _# OF DIGITS.
^BITS 29-35:_# OF DIGITS RIGHT OF POINT.
.INDENT -16
^E^O^R^M^A^T:^B^L^O^C^K 1 ;^FORMAT CONTROL FOR ^E-FORMAT OUTPUT
.INDENT -16
.INDEX ^RANDOM NUMBERS
^O^L^D^R^A^N:^B^L^O^C^K ^W^P^V;^SAVE LAST RANDOM NUMBER.
.INDENT -16
.INDEX ^FORMAT
^F^O^R^M^A^X:^B^L^O^C^K ^W^P^V;^LOGARITHM OF UPPER SIZE LIMIT FOR ^F-FORMAT
OUTPUT BEFORE ROUNDING.
.INDENT -16
^E^O^R^M^A^X:^B^L^O^C^K ^W^P^V;^LOGARITHM OF UPPER SIZE-LIMIT
^OF ^F-PART OF ^E-FORMAT TYPE-OUT.
.CENTER
;********#####^TEMPORARY STORAGE#####********
.INDENT -16
^T^E^M^P1:#^B^L^O^C^K ^W^P^V;^THIS STORAGE IS NOT
.INDENT -16
^T^E^M^P2:#^B^L^O^C^K ^W^P^V;GUARANTEED PRESERVED BY SUBROUTINES.
.INDENT -16
^T^E^M^P3:#^B^L^O^C^K ^W^P^V;^THEREFORE ONLY USE IT ON THE ONE PAGE.
.INDENT -16
^T^E^M^P4:#^B^L^O^C^K ^W^P^V
.INDENT -16
^T^E^M^P^E:#^B^L^O^C^K ^W^P^V;^TEMPORARY STORAGE FOR ^E^X^P. ROUTINE.
.INDENT -16
^T^E^M^P^R:#^B^L^O^C^K ^W^P^V;^TEMPORARY STORAGE FOR ^R^E^C^I^P^R ROUTINE.
.INDENT -16
^T^E^M^P^T:#^B^L^O^C^K ^W^P^V;^TEMPORARY STORAGE FOR TYPE-OUT ROUTINE.
.INDENT -16
^L^U^K^E^N^T:^B^L^O^C^K#.^R^B^D^E^V+2+^A^A#;^L^O^O^K^U^P/^E^N^T^E^R BLOCK.
.INDENT -16
^I^F^L^E ^M^O^N^I^T^O^R-4.72,<
.INDENT -16
^W^P^D=4#########;^WORDS PER DIRECTORY ENTRY.
.INDENT -16
^F^I^L^T^A^B:^B^L^O^C^K 20*^W^P^D ;^SPACE FOR FILE NAME ETC.
.INDENT -16
>;^END ^I^F^L^E ^M^O^N^I^T^O^R-4.72
.INDENT -16
^B^U^F^B^O^T:^B^L^O^C^K#1#;^SAVE .^J^B^F^F HERE.
.CENTER
;********#####^PUSH-DOWN LIST#####********
.INDENT -16
^P^D^L:###^B^L^O^C^K ^P^D^C;^PROGRAM PUSH-DOWN LIST.
.INDENT -16
^P^D^L^E^N^D:^B^L^O^C^K 2 #;^TWO SPARE FOR OVERFLOW.
.PAGE
.LEFT MARGIN 1
.PRINT INDEX