.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] 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 ######(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 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