File FOCLF.DO

Directory of image this file is from
This file as a plain text file

















                                F O C L / F

              A CONVERSATIONAL LANGUAGE FOR THE PDP-8 FAMILY



                             DOUGLAS E. WREGE
                          NUCLEAR RESEARCH CENTER
                      GEORGIA INSTUTUTE OF TECHNOLOGY
                            ATLANTA, GA. 30332



































PREFACE FOCLF IS AN ADVANCED DIALECT OF FOCAL* FOR THE PDP-8 FAMILY OF COMPUTERS. IT IS DESIGNED TO PROVIDE CONVERSATIONAL PROGRAMMING CAPABILITIES IN A STAND ALONE, OS/8*, OR CAPS/8* ENVIRONMENT. THERE ARE CURRENTLY FOUR BASIC VERSIONS OF FOCLF WITH MANY OVERLAYS TO TAKE ADVANTAGE OF MACHINE CONFIGURATIONS. EACH OF THESE VERSIONS IS UPWARDS COMPATIBLE WITH THE PREVIOUS, AND ALL, WITH MINOR EXCEPTIONS ARE UPWARDS COMPATIBLE WITH FOCAL-8 AS SUPPLIED BY DIGITAL EQUIPMENT CORPERATION. *FOCAL, OS/8, AND CAPS/8 ARE REGISTERED TRADEMARKS OF DIGITAL EQUIPMENT CORPERATION. -1-
THE FOCLF LANGUAGE THE FOCLF LANGUAGE IS A SET OF COMMANDS WHICH SPECIFY OPERATIONS ON A SET OF DATA ELEMENTS AND ALLOW MODIFICATION OF THE FLOW OF CONTROL FROM ONE COMMAND TO THE NEXT. COMMANDS ARE PROVIDED TO ALLOW PROGRAMS AND DATA TO BE TRANSFERED TO AND FROM THE CONSOL TERMINAL AND, IN THE CASE OF THE OS/8 OR CAPS/8 VERSIONS, TO DEVICES UNDER CONTROL OF THE OPERATING SYSTEM. FOCLF IS A CONVERSATIONAL LANGUAGE WHICH MEANS THAT IT CONTAINS ALL THAT IS NECESSARY TO ENTER, CHANGE, AND EXECUTE PROGRAMS IN ITS LANGUAGE IN DIRECT INTERACTION WITH THE PROGRAMMER. THERE ARE FIVE CLASSES OF FOCLF COMMANDS: ASSIGNMENT COMMANDS CHANGE THE VALUES OF DATA ELEMENTS CONTROL COMMANDS MODIFY PROGRAM FLOW, PERHAPS BASED ON VALUES OF DATA ELEMENTS. INPUT/OUTPUT COMMANDS TRANSFER DATA ELEMENTS BEWEEN THE PROGRAM AND PERIPHERAL DEVICES. EDITING COMMANDS ALLOW PROGRAM MODIFICATION OF THE PROGRAM LINES PROGRAM MANAGMENT ALLOW STORAGE, RETRIEVAL, AND DELETION OF FOCLF PROGRAMS STORED ON OPERATING SYSTEM DEVICES. CHARACTER SET THE CHARACTER SET IS A SET OF SYMBOLIC CHARACTERS WHICH ARE A SUBSET OF THE ASCII CHARACTER CODE. 64 PRINTING CHARACTERS ALONG WITH A FEW CONTROL CHARACTERS MAKE UP THIS SET. THE CONTROL CHARACTERS AND A BRIEF DESCRIPTION OF THEIR FUNCTIONS ARE DESCRIBED HERE. IN THE FOLLOWING DISCUSSION "CTRL/" MEANS THAT THE CTRL KEY OF THE TERMINAL DEVICE IS HELD DOWN WHILE THE ASSOCIATED KEY IS STRUCK. CARRIAGE RETURN TERMINATES A PROGRAM OR DATA INPUT LINE ALTMODE LINE CONTINUATION CHARACTER. ACTS AS A SPACE IN PROGRAM EXECUTION, PRINTS AS ALT,$,CR,LF,TAB. CHARACTERS FOLLOWING THE ALT ARE -2-
IGNORED ON INPUT FROM THE DATA FILE. LINE FEED DURING PROGRAM MODIFICATION CAUSES REST OF LINE TO REMAIN UNCHANGED. RUBOUT(DEL) ERASE ONE CHARACTER DURRING PROGRAM ENTRY. CTRL/U ERASE CURRENT LINE. CTRL/P CONSOL RESTART. RETURNS CONTROL TO CONSOL FROM FOCLF PROGRAM EXECUTION OR ANY OTHER ACTIVITY CTRL/L(FORM) DURING PROGRAM MODIFY, SEARCH FOR NEXT OCCURANCE OF SEARCH CHARACTER. CTRL/G(BELL) DURING PROGRAM MODIFY, ENTER NEW SEARCH CHAR AND SEARCH FOR CHARACTER. CTRL/C RETURNS TO SYSTEM MONITOR VIA AN EFFECTIVE JMP I (7600. SECOND BELL CANCELS SEARCH AND PRESERVES REST OF LINE. SPACES ARE IGNORED WITHING FOCLF PROGRAM STATEMENTS EXCEPT IN TEXT AND IN CASES WHERE THEY ACT AS TERMINATORS. IDENTIFIERS USED AS VARIABLES OR FUNCTION NAMES AND NUMBERS ARE TERMINATED BY SPACES AS WELL AS ANY OTHER CHARACTER WHICH ARE ILLEGAL IN THE CONTEXT. ALTMODE IS EQUIVALENT TO SPACE SHEN USED IN PROGRAM LINES OUTSIDE TEXT LITERALS. SPACE AND ALTMODE ARE CALLED SPACE EQUIVALENTS. PROGRAM MODES FOCLF ACCEPTS COMMANDS IN EITHER OF TWO MODES: DIRECT AND INDIRECT. DIRECT MODE COMMANDS ARE ENTERED AND ARE EXECUTED BY FOCLF IMMEDIATELY WHEN CR IS TYPED ENDING THE COMMAND LINE. ANY FOCLF COMMMANDS MAY BE EXECUTED IN THIS WAY. SEVERAL COMMANDS MAY BE ENTERED ON THE INPUT LINE IF THEY ARE ARE SEPARATED BY SEMI-COLONS (;). THE MODIFY AND ERASE TEXT COMMANDS SHOULD BE EXECUTED IN DIRECT MODE ONLY AND FORCE RETURN TO COMMAND MODE UPON COMPLETION. INDIRECT MODE COMMANDS ARE PRECEDED BY A LINE NUMBER AND ARE SAVED FOR LATER EXECUTION. THE LINE NUMBER IDENTIFIES THE LINE'S SEQUENTIAL ORDERING WITHIN THE PROGRAM AND IDENTIFIES THE PART OF THE PROGRAM TO WHICH THE LINE BELONGS. THE INDIRECT PROGRAM IS STARTED BY DIRECT MODE COMMANDS WHICH TRANSFER CONTROL TO PARTS OR ALL OF THE INDIRECT PROGRAM. WHEN A QUIT STATEMENT IS ENCOUNTERED OR THE INDIRECT PROGRAM IS EXHAUSTED, CONTROL RETURNS TO THE DIRECT MODE WITH A PROMPT FOR A NEW -3-
COMMAND LINE (#). COMMAND LINE PROMPT FOCLF SIGNIFIES IT IS IN COMMAND MODE BY ISSUING A PROMPT CHARACTER AT THE LEFT MARGIN OF THE NEXT LINE ON THE CONSOL. THE PROMPT CHARACTER IS A HASH MARK (#). -4-
PROGRAM STRUCTURE COMMAND LINE STRUCTURE INDIRECT COMMANDS BEGIN WITH A LINE NUMBER FOLLOWED BY A NUMBER OF COMMANDS. EACH COMMAND IS A COMMAND WORD FOLLOWED BY A NUMBER OF ARGUMENTS. THE COMPLETE COMMAND, INCLUDING ARGUMENTS, MAY BE TERMINATED WITH A SEMICOLON (;) AND FOLLOWED BY ADDITIONAL COMMANDS. SEMICOLONS, SPACES, AND SPACE EQUIVALENTS ARE IGNORED BETWEEN COMMANDS. AT THE END OF EACH PROGRAM LINE, THAT IS WHEN A CR IS ENCOUNTERED, A DECISION IS MADE ABOUT THE NEXT LINE TO BE EXECUTED. IF NO TRANSFER OF CONTROL COMMANDS ARE IN EFFECT, FOR, DO, IF, ON, ETC., CONTROL TRANSFERS TO THE NEXT SEQUENTIAL NUMBERED LINE OF THE PROGRAM. LINE NUMBERS A LINE NUMBER LOOKS LIKE A DECIMAL NUMBER WITH AN INTEGER PART AND A DECIMAL POINT AND A FRACTION PART: PP.SS. THE INTEGER PART IS CALLED THE "PART" OR "GROUP" NUMBER AND DESIGNATES THE MAJOR SECTION OF THE PROGRAM TO WHICH THE LINE BELONGS. THE FRACTIONAL PART IS THE "STEP" NUMBER AND DESIGNATES A SUBSECTION OR INDIVIDUAL LINE WITHIN THE PART. PART NUMBERS MAY BE FROM 1 TO 31, WHILE STEP NUMBERS MAY BE FROM .01 TO .99 WITH .1 BEING THE SAME AS .10. A PART NUMBER MAY NEVER BE ZERO. STEP NUMBERS MAY NEVER BE ZERO EXCEPT AS ARGUMENTS TO THOSE COMMANDS WHICH ALLOW OPERATIONS ON WHOLE PROGRAM PARTS. WHEN THE STEP NUMBER IS OMITTED THE DECIMAL POINT MAY ALSO BE OMMITTED. COMPUTED OR GENERAL LINE NUMBERS IN MOST CASES IN FOCLF A LINE NUMBER MAY BE CALCULATED FROM A NEUMERIC EXPRESSION. THE RULE TO FOLLOW WHEN USING COMPUTED LINE NUMBERS IS THAT THE EXPRESSION MAY NOT BEGIN WITH A NEUMERIC CHARACTER. (THE REASON FOR THIS RULE IS TO AVOID ROUNDOFF ERRORS AS WELL AS INCREASE EXECUTION SPEED). IT IS A GOOD RULE TO FOLLOW THAT COMPUTED LINE NUMBERS BE INCLOSED IN PARENTHESES. COMMAND WORD RECOGNITION FOCLF IS A JOSS LIKE LANGUAGE AND THUS REQUIRES A UNIQUE WORD TO INITIATE EACH COMMAND. (OTHER JOSS LANGUAGES INCLUDE BASIC AND AID). A FOCLF COMMAND IS DESIGNATED BY THE FIRST ONE OR TWO NON-SPACE EQUIVALENT CHARACTERS OF A COMMAND, AND THEN -5-
ALL CHARACTERS ARE IGNORED UNTIL A COMMAND WORD TERMINATOR IS FOUND. THIS PRACTICE ALLOWS CONVENIENT ABBREVIATIONS BUT MAKES SELECTION OF DESCRIPTIVE COMMAND WORDS SOMETIMES DIFFICULT, AND MAKES SOME ERRORS DIFFICULT TO FIND BECAUSE SPELLING IS NOT CHECKED. LEGAL COMMAND TERMINATORS ARE: SPACE, (, !, ", %, :, $, ;, ALT, COMMA, AND CR. SINCE FOCLF HAS SOME COMMANDS WHICH ARE NOT UNIQUE IN THE FIRST CHARACTER, THE DETERMINATION OF THE PROPER COMMAND IS AS FOLLOWS: TWO COMMAND LISTS EXIST, ONE OF WHICH CONTAIN SINGLE CHARACTER COMMANDS ONLY. THIS LIST INCLUDES THOSE COMMANDS WHICH ARE MOST RECENTLY USED. IF A COMMAND WORD CONTAINS ONLY ONE CHARACTER, ONLY THE SINGLE CHARACTER COMMAND LIST WILL BE SEARCHED. THE SECOND LIST CONTAINS THOSE COMMANDS WHICH REQUIRE TWO CHARACTERS FOR UNIQUE IDENTIFICATION AND THE LEAST COMMON COMMAND OF A CONFLICTING FIRST CHARACTER PAIR. E.G. T(YPE) WOULD BE IN THE SINGLE CHAR LIST WHILE TR(ANSFER) WOULD BE IN THE DOUBLE CHARACTER LIST. IF A COMMAND WORD HAS TWO OR MORE CHARACTERS THE DOUBLE LIST IS SEARCHED FIRST, AND IF A MATCH IS NOT FOUND THEN THE SINGLE CHAR LIST IS SEARCHED. THUS MISSPELLED COMMANDS WILL DEFAULT TO THE SINGLE CHARACTER LIST. ALSO, THE USER SHOULD NOTE, THAT USING SINGLE CHARACTER ABBREVIATIONS, WHERE APPLICABLE, IS FASTER IN EXECUTION THAN ALWAYS COMPLETELY SPELLING THE COMMANDS. COMMAND LINE ENTRY AN ENTIRE LINE IS TYPED AND EDITED BEFORE IT IS PASSED TO FOCLF FOR PROCESSING. THIS LINE MAY CONSIST OF SEVERAL PHISICAL TERMINAL LINES IF THE LINE CONTINUATION CHARACTER (ALT) IS USED. CARRIAGE RETURN IS INTERPRETED BY FOCLF AS THE END OF THE LINE. CHARACTER DELETION RUBOUT DELETES THE LAST CHARACTER TYPED DURING ENTRY OF DIRECT OR INDIRECT COMMAND LINES. FOCLF WILL INDICATE THAT A CHARACTER HAS BEEN DELETED BY TYPING A BACKSLASH IN RESPONSE TO THE RUB CHARACTER. LINE DELETION CTRL/U DELETES ALL CHARACTERS BACK TO THE PREVIOUS CARRIAGE RETURN, I.E. DELETES THE CURRENT LINE. CTRL/U ECHOS AN UPARROW FOLLOWED BY U AND CR, LF TO BEGIN INPUT ON THE NEXT LINE. ON SOME TERMINAL UPARROW APPEARS AS A CIRCUMFLEX OR HAT. -6-
NUMBERS A FOCLF NUMBER MAY BE ANY DECIMAL NUMBER BETWEEN -10^615 AND +10^615, (WHERE UPARROW INDICATES EXPONENTIATION). NUMBERS MAY BE WRITTEN SIGNED OR UNSIGNED, EITHER WITH A DECIMAL POINT AND A FRACTIONAL PORT OR IN EXPONENTIAL FORMAT WITH A MANTISSA AND EXPONENT. IN FOCLF, ALL NUMBERS ARE INTERNALLY REPRESENTED IN FLOATING POINT FORMAT, RETAINING UP TO SIX SIGNIFICANT DIGITS. IF MORE THAN SIX DIGITS ARE SPECIFIED, THE NUMBER WILL BE ROUNDED TO SIX DIGITS. VARIABLE NAMES FOCLF VARIABLE NAMES MAY CONSIST OF EITHER ONE OR TWO CHARACTERS. THE FIRST CHARACTER MUST ALWAYS BE ALPHABETIC; HOWEVER, IT CANNOT BE AN "F" BECAUSE FOCLF RESERVES THAT CHARACTER FOR FUNCTION NAMES, (THE ONLY EXCEPTION TO THIS RULE IS "F'", SEE FOCLF DEFINED FUNCTIONS). THE SECOND CHARACTER MAY BE ANY LEGAL FOCLF CHARACTER, EITHER ALPHABETIC OR NUMERIC. THE USER MAY WRITE VARIABLE NAMES CONSISTEING OF MORE THAN TWO CHARACTERS, BUT FOCLF USES ONLY THE FIRST TWO CHARACTERS TO UNIQUELY IDENTIFY THE VARIABLE. THEREFORE THE FIRST TWO CHARACTERS MUST BE UNIQUE. VARIABLES MAY BE SUBSCRIPTED. THIS SUBSCRIPT MUST BE ENCLOSED IN PARENTHESES IMMEDIATELY FOLLOWING THE VARIABLE NAME. THE SUBSCRIPT MAY BE ANY ARITHMETIC EXPRESSION. THE LOW ORDER 12-BITS OF THE INTEGER PART OF THIS EXPRESSION IS USED FOR THE SUBSCRIPT. WHAT THIS MEANS IS THAT TO INSURE UNIQUENESS THE SUBSCRIPT SHOULD BE IN THE RANGE +-2047. NOTE THAT THE SUBSCRIPT 4095 IS THE SAME AS SUBSCRIPT -1. IN ORDER TO BE PROPERLY REPRESENTED BY THE TYPE $ COMMAND, SUBSCROPT NUMBERS MUST BE POSITIVE INTEGERS IN THE RANGE FORM 0 TO 99. THE TYPE $ COMMAND WILL PRINT SUBSCRIPTS GREATER THAN 99 AS TWO CHARACTERS. ARITHMETIC OPERATIONS ARITHMETIC OPERATIONS ARE PERFORMED FROM LEFT TO RIGHT, IN EXPRESSIONS, EXCEPT WHEN THE OPERATION ON THE RIGHT HAS HIGHER PRIORITY OR WHEN ENCLOSURES ARE USED. THE PRIORITY OF ARITHMETIC OPERATORS ARE: EXPONENTIATION(^) MULTIPLICATION(*) DIVISION(/) ADDITION(+) SUBTRACTION(-) WHERE THE FIRST MEMBER OF THE LIST HAS THE HIGHEST PRIORITY. IT -7-
IS SIGNIFICANT TO NOTE THAT DIVISION AND MULTIPLICATION DO NOT HAVE THE SAME PRIORITY, UNLIKE MANY HIGH LEVEL LANGUAGE, AND THUS ARE NOT EVALUATED LEFT TO RIGHT WHEN THEY OCCUR TOGETHER. THE ORDER OF EXECUTING ARITHMETIC OPERATIONS MAY BE FORCED BY USING ENCLOSURES. THREE KINDS OF ENCLOSURES MAY BE USED WITH FOCLF: PARENTHESES (), SQUARE BRACKETS [], AND ANGLE BRACKETS <>. FOCLF IS IMPARTIAL AND TREATS THEM ALL THE SAME, EXCEPT THAT MATCHING ENCLOSURES ARE CHECKED FOR MATCHING TYPE. IF AN EXPRESSION CONTAINS ENCLOSURES WITHIN ENCLOSURES, FOCLF EXECUTES THE CONTENTS OF THE INNERMOST ENCLOSURE FIRST AND WORKS OUTWARD. -8-
DESCRIPTION OF COMMANDS PROGRAM EDITING - WRITE, MODIFY, ERASE WRITE - LIST PROGRAM LINES THE WRITE COMMAND ALLOWS LISTING OF INDIVIDUAL LINES, WHOLE PARTS, OR THE ENTIRE PROGRAM. WRITE MAY BE FOLLOWED BY A LINE OR PART NUMBER, IN WHICH CASE THAT LINE OR PART WILL BE PRINTED IN SEQUENCE ON THE CONSOL. IF NO ARGUMENTS FOLLOW THE COMMAND THEN THE ENTIRE PROGRAM WILL BE LISTED WITH A LEADING COMMENT LINE IDENTIFING THE VERSON OF FOCLF WHICH IS BEING USED. THE WRITE COMMAND FORCES RETURN TO COMMAND MODE WHEN COMPLETED. PROGRAM LINE EDITING - MODIFY AND MOVE PROGRAM LINES ENTERED TO FOCLF MAY BE CONVENIENTLY CHANGED USING THE MODIFY COMMAND. MODIFY MAY BE ONLY EXECUTED FROM DIRECT MODE AND NO OTHER COMMANDS ON THE DIRECT COMMAND LINE WILL BE EXECUTED AFTER THE MODIFY. MODIFY CAN CAUSE THE TEXT SPACE TO CHANGE ITS LENGTH AND SINCE THE DIRECT COMMANDS ARE STORED IMMEDIATLY AFTER THE TEXT, THE DIRECT COMMANDS MAY BE DESTROYED BY MODIFY. UNDER NO CIRCUMSTANCES ARE VARIABLES ERASED BY CHANGING THE INDIRECT PROGRAM. MODIFY IS FOLLOWED BY NONE, ONE, OR TWO ARGUMENTS. (IN THE 4K VERSION ONLY THE SINGLE ARGUMENT FORM IS AVAILABLE). THESE MUST BE NUMERIC LINE NUMBERS NOT NUMERIC EXPRESSIONS. IF BOTH LINE NUMBERS ARE PRESENT THEY MUST BE SEPARATED BY A COMMA. THE FIRST ARGUMENT TO THE MODIFY COMMAND IS THE LINE TO BE OPERATED UPON. IF NO ARGUMENTS ARE PRESENT THEN THE LAST LINE NUMBER REFERENCED WITHIN THE FOCLF PROGRAM IS THE SOURCE LINE. IF THE SECOND LINE NUMBER IS PRESENT IT IS THE NUMBER OF THE RESULTING LINE. IN THIS CASE THE ORIGINAL LINE WILL REMAIN UNCHANGED. THIS MAY BE USED TO MOVE LINES ABOUT OR RENUMBER THEM IF THE ORIGINAL LINES ARE DELETED. THE TWO ARGUMENT MODIFY COMMAND IS SOMETIMES CALLED THE MOVE COMMAND. MODIFY BEGINS BY TYPING THE LINE NUMBER OF THE ORIGINAL LINE AND WAITS FOR A CHARACTER TO BE TYPED. THIS FIRST CHARACTER IS A SEARCH CHARACTER. FOCLF WILL ECHO THE LINE AS IT IS UNTIL THE CHARACTER TYPED IS ECHOED AND WILL THEN WAIT FOR FURTHER ENTRY. AT THIS POINT SEVERAL SPECIAL CHARACTERS ALLOW THE LINE TO BE CHANGED. ANY CHARACTERS NOT PART OF THE SPECIAL -9-
LIST WHICH ARE TYPED WILL BE ENTERED AT THE CURRENT POINT IN THE COMMAND LINE. NOTE HERE THAT RUBOUT AND CTRL/U HAVE THE SAME FUNCTIONS AS IN PROGRAM LINE ENTRY, BUT THAT LINE FEED HAS A VERY DIFFERNT FUNCTION. AS BEFORE CR STILL TERMINATES THE LINE IMMEDIATELY AND WILL CAUSE THE REST OF THE LINE TO BE OMITTED. IF IN THE PROCESS OF MODIFYING A LINE, IT IS DISCOVERED THAT THE WRONG LINE IS BEING CHANGED, IT IS ALWAYS SAFE TO TYPE A CONSOL RESTART (CTRL/P). THIS WILL LEAVE THINGS IN EXACTLY THE SAME CONDITION AS IF THE MODIFY HAD NEVER BEEN DONE. THE LIST OF SPECIAL MODIFY CHARACTERS ARE: RUBOUT DELETE ONE CHARACTER FROM THE LINE CTRL/U DELETE ALL CHARACTERS ON LINE CTRL/G (BELL) INPUT A NEW SEARCH CHARACTER CTRL/L (FORM FEED) FIND NEXT OCCURANCE OF SEARCH CHARACTER LF (LINE FEED) ECHO AND TAKE REST OF LINE UNCHANGED CR. (CARRIAGE RETURN) TERMINATE THE LINE IMMEDIATELY CTRL/P CONSOLE RESTART, ABORT MODIFY WITH NO CHANGES DELETION OF PROGRAM LINES AND VARIABLES ERASE PERFORMS THE FUNCTIONS OF DELETING PROGRAM TEXT AND VARIABLES. THE VARIOUS FORMS OF THE COMMAND ARE SPECIFIED BY A MODIFIER WHICH FOLLOWS THE ERASE COMMAND. THE MODIFIERS ARE: VARIABLES TEXT ALL IF NO MODIFIER FOLLOWS THE COMMAND, THEN ALL THE VARIABLES ARE ERASED. THE MODIFIER ALL MEANS DELETE ALL PROGRAM LINES AND ALL VARIABLES. THIS COMMAND MIGHT BE USED BEFORE PREPARING A NEW FOCLF PROGRAM. ERASE ALL MAY BE USED IN INDIRECT MODE, BUT IT CAUSES IMMEDIATE TERMINATION OF THE PROGRAM AND LEAVES NOTHING IN THE FOCLF PROGRAM SPACE. WHEN ERASE TEXT OR ERASE ALL ARE USED, NO ADDITIONAL COMMANDS SHOULD BE ENTERED FOLLOWING IT. ERASE MAY BE FOLLOWED BY A LINE OR PART NUMBER ARGUMENT IN WHICH CASE THE EFFECT IS TO ERASE ONLY THOSE LINES SPECIFIED. ERASE OR ERASE VARIABLES MAY BE USED IN INDIRECT MODE. -10-
ASSIGNMENT - SET THE SET COMMAND ASSIGNS THE VALUE OF A NUMERIC EXPRESSION TO A NUMERIC VARIABLE. THE SET COMMAND HAS THE FORM: SET VAR(J)=EXPRESSION TRANSFER OF CONTROL GOTO, DO, IF, ON, TRANSFER, RETURN GOTO THE GOTO COMMAND TRANSFERS CONTROL TO A SPECIFIC LINE NUMBER OR THE WHOLE PROGRAM AT THE LOWEST NUMBERED LINE. IF NO LINE NUMBER ARGUMENT APPEARS AFTER THE GOTO THEN THE LOWEST NUMBERED LINE OF THE PROGRAM IS THE TARGET OF THE COMMAND. COMPUTED LINE-NUMBERS MAY BE USED WITH GOTO. SUBROUTINE CALLING - DO THE COMMAND WHICH GIVES FOCLF ITS POWER IS THE DO COMMAND. SUBROUTINE CALLS OF A RECURSIVE NATURE ARE ACCOMPLISHED WITH THE DO COMMAND. CONTROL MAY BE TRANSFERED TO A SPECIFIC LINE OR TO ALL OF THE LINES OF A PART. AS WITH GOTO IF THE LINE NUMBER ARGUMENT IS NOT PRESENT, THE LOWEST NUMBERED LINE IS THE TARGET OF THE COMMAND AND THE ENTIRE INDIRECT PROGRAM IS THE SUBROUTINE. CONTROL IS RETURNED TO THE REMAINDER OF THE COMMANDS ON THE LINE OF THE DO UNDER THE FOLLOWING CONDITIONS: 1. WHEN A RETURN COMMAND IS ENCOUNTERED. 2. WHEN A CR IS ENCOUNTED AND THE NEXT SEQUENTIAL LINE NUMBER IS OUTSIDE OF THE RANGE OF THE DO LINE OR PART ARGUMENT. NOTE THAT THE NEXT COMMAND WHICH IS NORMALLY USED WITH A FOR COMMAND WILL ACT AS A CR IF IT OCCURS ON A LINE WITHOUT A MATCHING FOR PRECEEDING IT. (THE NEXT COMMAND IS NOT AVAILABLE IN THE 4K VERSION). NOTE ALSO THAT IF A GOTO OR IF COMMAND TRANSFERS CONTROL OUTSIDE OF THE RANGE OF THE DO COMMAND, THE TARGET OF THE GOTO OR IF WILL BE EXECUTED BEFORE CONTROL IS RETURNED. DO COMMANDS MAY BE NESTED TO ANY LEVEL CONSISTENT WITH AVAILABLE STORAGE. IN ADDITION COMPUTED LINE NUMBERS MAY BE USED AS ARGUMENTS TO THIS COMMAND. -11-
RETURN THE RETURN COMMAND CAUSES CONTROL TO BE RESUMED AFTER THE LAST DO COMMAND UNLESS THERE HAS BEEN NO DO SINCE THE PROGRAM BEGAN OR SINCE THE LAST FOR STATEMENT. RETURN MAY NOT BE MADE FROM A FOR ITERATION TO A PREVIOUS DO USING A RETURN. TRANSFER OF CONTROL CHECKING A WORD OF EXPLAINATION ABOUT THE INTERNAL WORKINGS AND CHECKS OF FOCLF WITH REGARD TO PART DO'S AND SUCH ARE IN ORDER. EACH TIME FOCLF REACHES THE END OF A COMMAND LINE, A CR, RETURN, OR NEXT, IT CHECKS TO SEE IF THE PART DO IS STILL SATISFIED. THAT IS, IS THE NEXT LINE TO BE EXECUTED WITHIN THE SAME PART OF THE PART DO. IF IT IS NOT, RETURN IS MADE TO COMMANDS FOLLOWING THE PREVIOUS DO. THE CHECK DOES NOT OCCUR AFTER A GOTO OR IF IS EXECUTED SO THAT GOTO MAY TRANSFER CONTROL OUT OF A PART DO AND THE ENTIRE TARGET LINE WILL BE EXECUTED BEFORE THE CHECK IS MADE AGAIN. IF THAT LINE CONTAINS ANOTHER GOTO THEN THIS PHENOMENA IS ENCOUNTERED AGAIN. IF TRANSFER IS MADE TO THE LINE IMMEDIATELY PRECEEDING THE PART OF THE DO, THE CHECK WILL FIND THE NEXT LINE IS WITHIN THE PART AND CONTINUE TO REPEAT THE PART. SOMETIMES THESE TRICKS CAN BE USED TO ADVANTAGE, BUT IN GENERAL IT IS BAD PROGRAMING PRACTICE TO DO SO. CONDITIONAL TRANSFER OF CONTROL - IF THE IF COMMAND IS A CONDITIONAL CONTROL COMMAND USED TO TRANSFER PROGRAM CONTROL TO A LINE NUMBER AFTER A COMPARISON. THE FULL FORM OF AN IF COMMAND IS: IF (EXPRESSION)LINE1,LINE2,LINE3 THE EXPRESSION IS EVALUATED, AND PROGRAM CONTROL IS TRANSFERED TO THE FIRST LINE NUMBER IF THE VALUE OF THE EXPRESSION IS LESS THAN ZERO, TO LINE2 IF THE VALUE IS ZERO, OR TO LINE3 IF THE VALUE IS GREATER THAN ZERO. PART NUMBERS MAY NOT BE USED IN IF STATEMENTS. THE IF COMMAND FORMAT CAN BE ALTERED TO TRANSFER CONTROL TO ONE OR TWO LINES. FOR EXAMPLE IF A SEMICOLON OR A CARRIAGE RETURN IS IMMEDIATELY AFTER THE FIRST LINE NUMBER, CONTROL GOES TO THE FIRST LINE NUMBER IF THE VALUE OF THE EXPRESSION IS LESS THAN ZERO. IF THE VALUE IS ZERO OR POSITIVE THEN FOCLF WILL PROCEED AS IF THERE HAD BEEN NO IF COMMAND. -12-
IF (X)1.8;TYPE "Q" WHEN THIS COMMAND IS EXECUTED, PROGRAM CONTROL GOES TO LINE 1.8 ONLY IF X IS LESS THAN ZERO. OTHERWISE Q IS TYPED. IF A SEMICOLON OR A CARRIAGE RETURN FOLLOWS THE SECOND LINE NUMBER, CONTROL GOES TO THE FIRST OR SECOND LINE NUMBER, DEPENDING UPON WHETHER THE VALUE OF THE EXPRESSION IS NEGATIVE OR ZERO. IF THE VALUE IS GREATER THAN ZERO, CONTROL GOES TO THE NEXT SEQUENTIAL COMMAND. IF THERE ARE NO LINE NUMBERS FOLLOWING THE IF EXPRESSION, THE NET EFFECT IS TO MERELY EVALUATE THE EXPRESSION. THIS FORM OF THE IF COMMAND IS USEFUL WHEN SPECIAL FUNCTIONS ARE DESIRED TO BE EXECUTED BUT THE PROGRAMMER IS NOT INTERESTED IN THE RESULT. FOR EXAMPLE THE FDIS FUNCTION PLOTS POINTS ON A STORAGE DISPLAY. IF(FDIS(X,Y));COMMANDS WOULD PLOT A POINT AT X,Y ON THE SCOPE, AND CONTINUE WITH THE PROGRAM. IF IN THE PROCESS OF EVALUATING LINE NUMBERS IN AN IF STATEMENT THE RESULT IS LINE 0.0, THEN FOCLF WILL CONTINUE CONTROL AT THE NEXT SEQUENTIAL COMMAND. THIS EFFECT IS ACQUIRED BY MERELY LEAVING OUT A LINE NUMBER. IF(EXPR),2.3;COMMANDS WILL TRANSFER CONTROL TO LINE 2.3 ONLY IF THE EXPRESSION EVALUATES TO ZERO. OTHERWISE, IF EXPR IS NON-ZERO, THE "COMMANDS" FOLLOWING THE SEMI-COLON ARE EXECUTED. OTHER EXAMPLES ARE: IF(EXPR),,LINE3;COMMANDS IF(EXPR)LINE1,,LINE3;COMMANDS IN THE FIRST CASE "COMMANDS" ARE EXECUTED IF THE EXPRESSION IS LESS THAN OR EQUAL TO ZERO, AND IN THE SECOND IF EXPR IS EQUAL TO ZERO. OTHERWISE TRANSFER IS MADE TO THE INDICATED LINE. COMPUTED LINE NUMBERS MAY BE USED IN THE IF COMMAND. CONDITIONAL SUBROUTINE CALL - ON THE ON COMMAND IS IDENTICAL IN SYNTAX WITH THE IF COMMAND WITH THE EXCEPTION THAT THE INDICATED LINE OR GROUP IS EXECUTED AS IN A DO COMMAND. ALL OF THE DESCRIPTIONS OF A DO COMMAND APPLY HERE AS WELL AS THAT OF THE IF COMMAND. UPON COMPLETEION -13-
OF THE INDICATED LINE OR PART DO, CONTROL CONTINUES WITH THE NEXT SEQUENTIAL COMMAND. AS IN THE IF COMMAND, IF LINE OR PART NUMBERS EVALUATE TO ZERO, OR ARE MISSING, CONTROL PROCEEDS WITH THE NEXT SEQUENTIAL COMMAND. ON (EXPRES)LN1,LN2,LN3;COMMANDS ON (EXPRES)PRT1,PRT2,PRT3;COMMANDS ON (EXPRES)PRT1,LN2,PRT3;COMMANDS ON (EXPRES),PRT2,LN3;COMMANDS ON (EXPRES),LN2;COMMANDS COMPUTED LINE NUMBERS MAY BE USED IN THE ON COMMAND. SPECIAL TRANSFER OF CONTROL - TRANSFER THE TRANSFER COMMAND, NOT AVAILABLE IN THE 4K VERSION, IS A SPECIAL CASE OF THE GOTO COMMAND. THE TRANSFER COMMAND IS IDENTICAL TO THE GOTO COMMAND WITH THE EXCEPTION THAT IT REMOVES ALL FOR, ON, AND DO NESTING. THE EFFECT IS A "LEVEL ZERO" GOTO, I.E. A GOTO EXECUTED AT COMMAND MODE LEVEL. LOOP CONTROL - FOR, NEXT, TERMFOR THE FOR COMMAND ALLOWS REPETITIVE EXECUTION OF A SET OF COMMANDS WITH A NUMERIC VARIABLE CHANGING WITH EACH REPETITION OF THE LOOP. THE FOR COMMAND HAS TWO FORMS: FOR VAR=INITIAL,STEP,FINAL;COMMANDS FOR VAR=INITIAL,FINAL;COMMANDS FOR ASSIGNS A VARIABLE (VAR) TO AN INITIAL VALUE (INITIAL) AND EXECUTES THE REMAINING COMMANDS ON THE LINE. ON EACH ITERATION, THE VALUE OF THE VARIABLE IS INDEXED BY THE VALUE OF THE STEP EXPRESSION (STEP). IF NO STEP EXPRESSION IS GIVEN, +1.0 IS ASSUMED. THE COMMANDS ARE REPEATED IF THE VALUE OF THE VARIABLE IS LESS THAN OR EQUAL TO THE FINAL VALUE WHEN THE STEP IS PLUS, AND WHEN THE VALUE OF THE VARIABLE IS GREATER THAN THE FINAL VALUE IF THE STEP IS NEGATIVE. THE ARGUMENTS TO THE FOR COMMAND ARE ONLY EVALUATED ONCE, THUS THE STEP AND LIMIT ARE NOT CHANGED AS VARIABLES CHANGE WITHIN THE FOR LOOP. ALSO THE VARIABLE IS LOOKED UP ONCE, WHICH MEANS THAT THE INCREMENTING VARIABLE REMAINS THE SAME THROUGHOUT THE FOR LOOP. FOR COMMANDS MAY BE NESTED TO ANY LEVEL CONSISTENT WITH -14-
STORAGE LIMITATIONS. THE NESTING LEVEL OF DO COMMANDS IS SAVED AND RESTORED BY FOR COMMANDS. THIS IS DONE SO THAT EXIT MAY NOT BE MADE FROM A FOR COMMAND BY A RETURN TO A PREVIOUS DO. TO RETURN FROM A PART DO WHILE IN CONTROL OF A FOR, IT IS NECESSARY TO TERMINATE THE FOR ITTERATION BY SETTING THE VARIABLE TO A VALUE GREATER THAN THE FINAL VALUE SO THAT THE LOOP WILL NOT BE EXECUTED AGAIN. (OR USE THE TERMFOR COMMAND, SEE BELOW). NEXT - (NOT AVAILABLE IN 4K VERS.) FOR COMMANDS MAY BE NESTED ON A LINE, BUT WITHOUT THE NEXT COMMAND THE LOOPED COMMANDS MUST ALL TERMINATE ON THE CR WHICH ENDS THE LINE. NEXT ALLOWS PREMATURE TERMINATION OF THE LOOPED COMMANDS OF A NESTED FOR LOOP. NEXT WILL ONLY WORK IN THIS WAY IF BOTH FOR COMMANDS ARE ON THE SAME LINE. IF NOT PRECEEDED BY A FOR, A NEXT COMMAND ACTS EXACTLY LIKE A CR ON THE LINE, NO COMMANDS WILL BE EXECUTED BEYOND IT. NEXT MATCHES ONLY ITS IMMEDIATELY PRCEEDING FOR AND ALL UNMATCHED FOR CMMMANDS TERMINATE WITH THE CR. IN THE FOLLOWING EXAMPLE THE TYPE COMMAND WILL ONLY BE EXECUTED IN THE OUTSIDE (J) LOOP. FOR J=0,3;FOR I=1,10;SET X(J*10+I)=J;NEXT;TYPE J,! THE FOLLOWING COMMAND STRING TYPES ONLY THE FINAL VALUE OF I. FOR I=1,10;SET X(I)=I;NEXT;TYPE I,! LINE CONTINUATION AND NEXT WORK WELL TOGETHER TO ALLOW MULTIPLE NESTED LOOPS TO BE STRUCTURED FOR EASY READING. 1.10 FOR I=1,10;$ SET J(I)=XI;$ TYPE J(I),!;$ FOR K=0,I;$ TYPE K,!;$ NEXT; TYPE ! TERMFOR - PREMATURE FOR LOOP TERMINATION THE TERMFOR COMMAND, (NOT AVAILABLE IN 4K VERSION), IS USED FOR PREMATURE TERMINATION OF A FOR LOOP. WHENEVER FOCLF RETURNS TO A FOR LOOP FOR INDEXING OF THE VARIABLE, IF A TERMFOR COMMAND -15-
WAS EXECUTED WITHIN THAT LOOP, THEN THE VARIABLE IS NOT INCREMENTED, AND NORMAL EXIT IS TAKEN FROM THE LOOP. IT SHOULD BE NOTED THAT THIS COMMAND DOES NOT TERMINATE THE LOOP, AS A NEXT COMMAND DOES, BUT RATHER CONDITIONS THE FOR LOOP FOR IMMEDIATE EXIT WHENEVER A NEXT OR END OF LINE OCCURS. STOPPING THE PROGRAM - QUIT THE QUIT COMMAND IS USED TO STOP EXECUTION OF THE INDIRECT PROGRAM WITH A RETURN TO COMMAND OR IMMEDIATE MODE. THE CONSOLE TERMINAL WILL RESPOND BY PRINTING THE PROMPT CHARACTER, #, AT THE LEFT MARGIN OF THE PAGE. (IN ALL BUT THE 4K VERSION THE PROMPT CHARACTER WILL ALWAYS APPEAR AT THE LEFT MARGIN. THE 4K VERSION WILL PRINT THE PROMPT CHARACTER WHEREVER THE TELEPRINTER IS POSITIONED). COMMENT OR CONTINUE THE COMMENT OR CONTINUE COMMAND CAUSES REST OF THE PROGRAM LINE TO BE IGNORED BY FOCLF. THE USER MAY USE THE COMMENT COMMAND TO INSERT COMMENTS INTO THE PROGRAM. HOWEVER, THE COMMENTS ARE PRINTED IN RESPONSE TO A WRITE COMMAND. -16-
INPUT - OUTPUT ASK AND TYPE THE ASK AND TYPE COMMANDS PROVIDE INPUT AND OUTPUT FOR FOCLF PROGRAMS TO THE CONSOLE AND FROM THE KEYBOARD. IN THE CASE OF THE OS/8 VERSIONS THESE COMMANDS ALSO PROVIDE FOR THE TRANSFER OF DATA BETWEEN THE MACHINE AND OS/8 ASCII FILES OR DEVICES. BOTH COMMANDS MAY CONTAIN FORMAT ELEMENTS WHICH SPECIFY TEXT LITERALS TO BE OUTPUT, CARRIAGE CONTROL TO BE PERFORMED OR CHANGE THE CURRENT NUMERIC OUTPUT FORMAT. FOR BOTH ASK AND TYPE THE FORMAT ELEMENTS BEHAVE THE SAME. THEY ALWAYS EFFECT THE OUTPUT. TEXT LITERALS ARE OUTPUT TO THE OUTPUT DEVICE(FILE) TO LABEL THE INPUT TO BE REQUESTED DURING ASK, OR THE RESULT DURING TYPE, OR PERHAPS JUST TO PROVIDE ADDITIONAL INFORMATION. CARRIAGE CONTROL ALSO ONLY EFFECTS OUTPUT AND CAUSES OUTPUT DURING AN ASK STATEMENT AS WELL. CARRIAGE CONTROL NEVER CAUSES RECORDS OR LINES TO BE SKIPPED IN THE INPUT STREAM. CARRIAGE CONTROL IS OF TWO FORMS: EXCLAMATION POINT (!) CAUSES OUTPUT OF CR, LF; AND EXCEPTING THE 4K VERSION COLON (:) CAUSES POSITIONING OF THE CARRIAGE TO A SPECIFIC COLUMN. NUMERIC OUTPUT FORMAT SPECIFIES ONLY THE FORMAT OF NUMERIC RESULTS. ONCE SET IT REMAINS IN EFFECT UNTIL EXPLICITLY CHANGED. THE NUMERIC OUTPUT FORMAT CONSISTS OF PERCENT SIGN (%) FOLLOWED BY A LINE NUMBER. THE LINE NUMBER IS SIMILAR TO A FORTRAN "F" FORMAT SPECIFIER. THE PART NUMBER SPECIFIES THE TOTAL WIDTH OF THE FIELD IF IT IS NONZERO. THE STEP NUMBER SPECIFIES THE NUMBER OF DIGITS TO THE RIGHT OF THE DECIMAL POINT. IF THE STEP PART IS ZERO THE PART NUMBER SPECIFIES THE DIGITS TO PRINT OF AN INTEGER FIELD. NO DECIMAL POINT WILL BE PRINTED IN THIS CASE. IF THE PART NUMBER IS ZERO, EXPONENTIAL OR "E" FORMAT IS SPECIFIED. FOR CASES IN WHICH THE OUTPUT NUMBER EXCEEDS THE INTEGER FIELD WIDTH OF THE FORMAT SPECIFIED, FOCLF WILL ADJUST THE POSITIONING OF THE DECIMAL POINT TO ALLOW OUTPUT. IF THE INTEGER PART OF THE OUTPUT NUMBER EXCEEDS THE TOTAL FIELD WIDTH OF THE OUTPUT FORMAT, FOCLF WILL AUTOMATICALLY TYPE THE OUTPUT IN SCIENTIFIC NOTATION. TYPE %6.3,!1.23456;!12.3456,!123.456,!1234.56,$ !12345.6,!123456.,!1234560 1.234 12.345 -17-
123.456 1234.56 12345.6 123456. 1.23456E 03 THUS THE PROGRAMER SELDOM NEEDS TO WORRY ABOUT OUTPUT FORMATS EXCEPT FOR ACHEIVING "PRETTY" OUTPUT. THE TYPE OR ASK COMMAND WILL OUTPUT LITERAL STRINGS BY ENCLOSING THEM IN QUOTATION MARKS ("). #TYPE "THIS IS A LINE OF TEXT" THIS IS A LINE OF TEXT # EXCEPTING THE 4K VERSION COLUMN POSITIONING MAY BE EFFECTED BY THE TABULATION FORMAT CONTROL CHARACTER COLON (:). THE FORM OF THIS FORMAT EFFECTOR IS A COLON FOLLOWED BY AN OPTIONAL EXPRESSION. IF THE EXPRESSION IS NON-ZERO, THEN IT IS TAKEN AS THE DESIRED COLUMN POSITION. IF IT IS ZERO THEN THE DESIRED COLUMN IS THE NEXT MULTIPLE OF 8 FROM THE CURRENT POSITION (TABULATION). THE DESIRED POSITION IS THEN COMPARED AGAINST THE CURRENT COLUMN POSITION OF THE OUTPUT DEVICE. IF THE DESIRED POSITION IS LESS THAN THE CURRENT POSITION A CARRIAGE RETURN IS OUTPUT, WITHOUT A LINE FEED, AND THE CURRENT POSITION IS SET TO ZERO. THE NUMBER OF SPACES EQUAL TO THE DIFFERENCE BETWEEN THE CURRENT POSITION AND THE DESIRED POSITION LESS ONE IS THEN OUTPUT. THE TOTAL EFFECT IS THAT THE CARRIAGE IS POSITIONED, ON THE CURRENT LINE, SUCH THAT THE NEXT PRINT POSITION WILL BE THE COLUMN DESIRED. SINCE THE 4K VERSION DOES NOT HAVE THE TABULATION CONTROL, A SPECIAL FORMAT CHARACTER "#" ALLOWS REPOSITIONING OF THE CARRIAGE AT THE BEGINNING OF A LINE, (CR WITHOUT LF). IT IS UP TO THE PROGRAMMER TO REPOSITION THE CARRIAGE AT THE APPROPRIATE COLUMN BY OUTPUTING THE CORRECT NUMBER OF SPACES. IN THE NON-4K VERSIONS THE OPERATION ":1" HAS THE SAME EFFECT AS "#". THE SPECIAL CHARACTER DOLLAR SIGN ($), WHEN USED IN A TYPE STATEMENT WILL CAUSE ALL OF THE NORMAL FOCLF VARIABLES TO BE PRINTED IN THE ORDER OF MOST RECENTLY CREATED FIRST IN THE CURRENT OUPUT FORMAT. THE ASK STATEMENT IS USED FOR INPUTING VARIABLES. THE FORMAT OF INPUT MAY BE ANY OF THE LEGAL OUTPUT FORMATS, AND IS INDEPENDENT OF THE OUTPUT FORMAT. THEREFORE, THE PROGRAMMER NEVER NEED CONCERN HIMSELF ABOUT INPUT FORMATS. WHENEVER INPUT IS REQUESTED A COLON (:) WILL BE PRINTED AS A PROMPT CHARACTER TO THE OPERATOR. -18-
#ASK "THE ANGLE AND RADIUS ARE",ANGLE,RAD,! THE ANGLE AND RADIUS ARE:1.2 :4 WHERE THE "1.2" AND "4" ARE TYPED BY THE OPERATOR. NEUMERIC INPUT IS TERMINATED BY ANY NON-LEGAL INPUT CHARACTER. LEGAL INPUT CHARACTERS ARE 0-9, A-Z, +, -, AND DECIMAL POINT (.). LEADING SPACES ARE IGNORED IN NEUMERIC INPUT. NOTE THAT WHEN ALPHA CHARACTERS A-Z ARE INPUT (WITH THE EXCEPTION OF "E" THE EXPONENTIAL CHARACTER), THE NUMBER INPUT IS THE LOW ORDER 6-BIT ASCII CODE. SUSCESSIVE CHARACTERS ARE ADDED TO THE PREVIOUS ACCUMULATED NUMBER MULTIPLIED BY TEN. E.G. #ASK X,Y,Z;TYPE X,Y,Z :A :AB :ABC 1.00 12.00 123.00 # THUS TO A LIMITED EXTENT FOCLF MAY PROCESS ALPHA NEUMERIC INPUT. SUMMARY OF ASK-TYPE FORMAT CHARACTERS ! OUTPUT CR, LF. " OUTPUT TEXT LITTERALS. % CHANGE NEUMERIC OUTPUT FORMAT. $ OUTPUT ALL NORMAL VARIABLES. : TABULATION (COLUMN) CONTROL, (NOT 4K). # OUTPUT CR WITHOUT LF (4K ONLY) IN BOTH THE TYPE AND ASK COMMANDS AS MANY OF THE ABOVE OPERATIONS MAY BE EXECUTED WITHIN THE SAME COMMAND AS DESIRED, BY SEPARATING THEM WITH COMMAS. THE COMMAS ARE ONLY REQUIRED AFTER THOSE OPERATIONS WHICH REQUIRE ARGUMENTS. OF COURSE ANY EXPRESSION MAY BE USED WHERE A VARIABLE OR ARITHMETIC EXPRESSION IS INDICATED. LEGAL STATEMENTS ARE: #TYPE %3.0,A,%6.03,B^2+FSIN(ANGLE),!:5,"TEXT"!! 12 4.567 TEXT #ASK :5,"A"A,!:,"B"B,!:9,"*":6,"&" A: -12E3 B: 123 & * # -19-
FOCLF FUNCTIONS THE FOCLF FUNCTIONS IMPROVE AND SIMPLIFY ARITHMETIC CAPABILITIES AND GIVE THE POTENTIAL FOR EXPANSION TO ADDITIONAL INPUT/OUTPUT DEVICES. IN GENERAL, THE FOCLF FUNCTIONS MAY BE USED ANYWHERE A NUMBER OR A VARIABLE IS LEGAL IN AN ARITHMETIC EXPRESSION. A STANDARD FUNCTION CALL CONSISTS OF THREE OR FOUR LETTERS BEGINNING WITH THE LETTER F AND FOLLOWED BY AN EXPRESSION IN PARENTHESES. THESE FUNCTIONS MUST BE USED WITH A LEGAL FOCLF COMMAND. THEY MAY NOT BE USED ALONE AS COMMANDS. WITHIN A NORMAL RANGE OF ARGUMENTS, AT LEAST FIVE SIGNIFICANT DIGITS OF ACCURACY MAY BE EXPECTED FOR THE TRIGONOMETRIC, EXPONENTIAL, AND LOGARITHMIC FUNCTIONS. THE FUNCTIONS MAY BE DIVIDED INTO TWO CLASSES: STANDARD AND EXTENDED. THE REASON FOR DIFFERENTIATING THEM THUS IS THAT THE STANDARD FUNCTIONS ARE AVAILABLE IN ALL VERSIONS OF FOCLF. IN OS/8 FOCLF V7, THE EXTENDED FUNCTIONS ARE LOADED AND SAVED WITH THE PROGRAM IN "PROGRAM" COMMANDS. THIS ALLOWS ENTIRE PROGRAMS TO BE CALLED, WITH ONLY THE FUNCTIONS THEY REQUIRE, THUS OBTAINING GREATER CORE EFFICIENCY. THE SUBDIVISION INTO TWO CATEGORIES HAS NO MEANING FOR THE OTHER VERSIONS OF FOCLF. STANDARD FUNCTIONS FABS(ARG) ABSOLUTE VALUE. FITR(ARG) INTEGER PART. FSGN(ARG) SIGN OF ARG. FDIS(X,Y) DISPLAY X,Y ON 34D DISPLAY EXTENDED FUNCTIONS FSIN(ARG) SINE FUNCTION: ARG IN RADIANS FCOS(ARG) COSINE FUNCTION FATN(ARG) ARC-TANGENT FUNCTION ABOVE ARGS ARE IN RADIANS FEXP(ARG) NATURAL EXPONENTIAL (E=2.71828) FLOG(ARG) NATURAL LOGARITHM FSQT(ARG) SQUARE ROOT FRAN() RANDOM NUMBER FNEW() UNDEFINED - MAY BE USED BY USER FCOM() UNDEFINED THIS CONCLUDES THE DOCUMENTATION OF STANDARD -20-
FEATURES OF THE FOCLF LANGUAGE. SECTIONS HEREAFTER ARE CONCERNED MAINLY WITH ADVANCED FEATURES AVAILABLE ONLY IN THE 8K OR GREATER VERSIONS, AND FOR VERSIONS WHICH USE THE OS/8 OR CAPS-8 OPERATING SYSTEMS. THERE ARE TWO VERSIONS OF THE BASIC INTERPRETER FOR 8K AND GREATER CONFIGURATIONS, VERSION 7 AND VERSION 8. THESE VERSIONS ARE BASICLY SIMILAR, DIFFERING MOSTLY IN ADDED CAPABILITIES WHEN THE OS/8 OVERLAY IS INVOLVED. VERSION 7 HAS AN OS/8 OVERLAY WHICH WILL RUN IN AN 8K ENVIRONMENT, WHEREAS VERSION 8 REQUIRES AT LEAST 12K AND IS CAN USE UP TO 24K OF CORE. VERSION 7 CANNOT USE MORE THAT 8K IN AN OS/8 ENVIRONMENT. THERE IS ESSENTIALLY NO DIFFERENCE BETWEEN THE VERSIONS FOR NON-OPERATING SYSTEM CONFIGURATIONS. -21-
ADVANCED FEATURES FOCLF V7 AND V8 INPUT/OUTPUT SPECIFICATIONS IN FOCLF V7 AND V8, THE FOCAL-8 "*" OR HIGH-SPEED READER COMMAND HAS BEEN DELETED. THE PRIMARY REASON FOR THIS WAS THE USER UNCERTAINTY CONCERNING THE STATE OF THE COMPLEMENTING SWITCH DURRING PROGRAM EXECUTION. TO CIRCUMVENT THIS PROBLEM, COMPLETE CONTROL OVER BOTH THE HIGH-SPEED READER (HSR) AND HIGH-SPEED PUNCH(HSP) HAS BEEN IMPLEMENTED (AS WELL AS CONTROL OVER THE TTY). A ONE PAGE HIGH-SPEED READER BUFFER IS INCLUDED TO REDUCE THE WEAR ON READER CLUTCHES. CONCEPTUALLY THERE ARE THREE I/O DEVICES: 1. THE INPUT DEVICE WHCIH MAY BE THE TTY OR THE HIGH-SPEED READER(HSR). 2. THE OUTPUT DEVICE WHICH MAY BE THE TTY OR THE HSP OR BOTH. 3. THE ECHO DEVICE WHICH MAY BE THE TTY OR THE HSR OR BOTH OR NEITHER. THE CHARACTERS #, :, (UP ARROW)U, AND OTHER ACKNOWLEDGE CHARACTERS ARE SENT ONLY TO THE ECHO DEVICE. ERRORS OR THE CTRL/P INTERRUPT CHARACTER RESET ALL DEVICES TO THE TTY. ALSO WHEN THE HSR RUNS OUT OF TAPE, OR AT THE CONCLUSION OF A WRITE COMMAND THE DEVICES ARE RESET (INPUT DEVICE AND OUTPUT DEVICE) TO THE TTY. THE I/O SWITCHING COMMANDS ARE: LIBRARY INPUT, TELETYPE (OR L I,T) LIBRARY INPUT, HIGHSPEED (OR L I,H) LIBRARY OUTPUT, TELETYPE (L O,T) LIBRARY OUTPUT, HIGHSPEED (L O,H) LIBRARY OUTPUT, BOTH (L O,B) LIBRARY ECHO, TELETYPE (L E,T) LIBRARY ECHO, HIGHSPEED (L E,H) LIBRARY ECHO, BOTH (L E,B) LIBRARY ECHO, NEITHER (L E,N) WHEN INPUT IS FROM THE HSR, A ONE PAGE BUFFER IS READ IN, AND CHARACTERS ARE FETCHED FROM THIS BUFFER. INPUT MAY BE SWITCHED TO THE TTY FOR A WHILE AND THEN BACK TO HIGHSPEED WITH INPUT FROM THE BUFFER RESUMING WHERE IT WAS LEFT OFF. IN ORDER TO IGNORE THE REST OF THE HSR BUFFER (E.G. WHEN THERE HAS BEEN A MISTAKE AND ONE WISHES TO START OVER FROM THE BEGINNING OF A TAPE) AN ADDITIONAL COMMAND HAS BEEN IMPLEMENTED: -22-
LIBRARY INPUT, REWIND (L I,R) FOR EXAMPLE TO INPUT A PROGRAM FROM THE HSR AND LIST IT ON THE TTY: #LIBRARY INPUT,HIGHSPEED TO INPUT FROM THE HSR AND NOT ECHO THE PROGRAM: #LIBRARY ECHO,NONE;LIBRARY INPUT,HIGHSPEED TO READ A DATA POINT FROM TAPE AND THEN ASK FOR A RESPONSE FROM THE TTY FOLLOWED BY ANOTHER DATA POINT FROM THE HSR, ENDING UP WITH INPUT FROM THE TTY: #L I,H;A D(J);L I,T;A FLG,!;L I,H;A D(J+L);L I,T NOTE THAT THE INPUT FROM THE HSR WILL BE ECHOED ON THE TTY. BY TURNING OFF THE ECHO TO THE TELETYPE, DATA MAY BE INPUT VIA THE LOW SPEED PAPER TAPE READER VIA THE ASK COMMAND. THE USER MUST INPUT THE ENTIRE LIST OF DATA ON THE TAPE, AND PERFORM NO SIGNIFICANT CALCULATIONS DURING INPUT TO PREVENT LOSS OF DATA. THE HIGH-SPEED INPUTS AND THE 8/E VERSION ARE NOT SUBJECT TO THIS LIMITATION. THE USER SHOULD INSERT BLAK LEADER AT THE END OF THE FILES TO BE INPUT ON THE LOW SPEED READER TO PROVIDE TIME TO TURN OFF THE READER. FOCLF DEFINED FUNCTIONS THE MOST SIGNIFICANT ADDITION TO THE FOCAL LANGUAGE THAT FOCLF HAS TO OFFER IS FOCLF DEFINED FUNCTIONS. CONCEPTUALLY, A FOCLF DEFINED FUNCTION IS A METHOD WHICH ALLOWS THE FOCLF PROGRAMMER TO CALL A LINE OR GROUP OF FOCLF PROGRAMMING AS A FUNCTION. THERE ARE TEN (10) FOCLF DEFINED FUNCTIONS AVAILABLE: F0, F1, ...FN, ..., AND F9. THE FUNCTIONS ARE DEFINED VIA THE LET COMMAND: LET F3=LINE OR PART NUMBER HENCEFORTH, WHENEVER F3 IS CALLED, THE LINE OR PART SPECIFIED IN THE LET COMMAND IS EXECUTED. TO DEASSIGN A FUNCTION: LET F3=0. IN ADDITION THERE IS A GENERAL PURPOSE FOCLF DEFINED FUNCTION, F(LINE #,ARGS), WHERE THE FIRST ARGUMENT IS THE LINE OR PART TO BE EXECUTED. THE RULES FOR WRITING THE FUNCTION ARE -23-
1. ARGUMENTS WILL BE PASSED TO THE FUNCTION BY VALUE IN THE ORDER: A', B', C', D', E', F', ... NOTE THAT F' IS A LEGAL VARIABLE NAME IN FOCLF. 2. THE VALUE OF THE FUNCTION WILL BE THE VALUE OF THE VARIABLE Z' UPON COMPLETEION OF THE LINE OR PART. 3. ALL PRIMED VARIABLES WILL BE LOCAL TO THE FUNCTION. 4. ALL NEWLY CREATED NON-PRIMED VARIABLES WILL BE LOCAL TO THAT LEVEL OF FUNCTION CALL. 5. ALL PREVIOUSLY DEFINED NON-PRIMED VARIABLES ARE GLOBAL. 6. THE FUNCTION MAY BE CALLED RECURSIVLY TO ANY DEPTH CONSISTENT WITH CORE STORAGE. EXAMPL TO WRITE A FUNCTION, SAY F7(ARG1,ARG2), WHICH WILL RASE ARG1 TO THE ARG2 POWER. #LET F7=30.1 #30.10 SET Z'=FEXP(B'*FLOG(A')) WHEN F7 IS USED IN THE ABOVE EXAMPLE, LINE 30.1 IS ENTERED WITH A'=ARG1 AND B'=ARG2. AFTER 30.10 IS COMPLETED WITH NO ERRORS, THE FUNCTION F7 TAKES THE VALUE OF Z'. HENCE F7(2,0.5) WILL HAVE THE VALUE 1.414. AN EQUIVALENT CALL TO THIS FUNCTION IS F(30.1,2,0.5) USING THE GENERAL PURPOSE FOCLF DEFINED FUNCTION. FOCLF DEFINED FUNCTIONS MAY BE USED RECURSIVELY, ARGUMENTS MAY BE ANY ARITHMETIC EXPRESSION, AND THE VARIABLES A', B', C', ... ARE DELETED UPON SUCESSFUL COMPLETEION OF THE FUNCTION EVALUATION. IF ANY ERROR OCCURS OR CTRL/P IS STRUCK WHILE IN THE FUNCTION, THESE VARIABLES WILL NOT BE DELETED. NOTE THAT ANY OTHER VARIABLES THAT WERE CREATED FOR THE FIRST TIME WITHIN THE FUNCTION ARE ALSO DELETED. VARIABLE SEARCH FOR THE PRIMED VARIABLES IS CONFINED TO THE PRIME LIST RATHER THAN THE ENTIRE LIST. THIS FEATURE CAN RESULT IN CONSIDERABLE TIME SAVINGS FOR COMPLEX PROGRAMS. THE RECURSIVITY OF THESE FUNCTIONS IS AN EXTREMELY POWERFUL FEATUR OF THE FOCLF DEFINED FUNCTIONS SINCE IT ALLOWS SOLUTION OF TRANSENDENTAL FUNCTIONS OR OTHER NORMALLY NON-ANALYTIC FUNCTIONS. FOR EXAMPLE, SUPOSE THAT WE HAVE A FUNCTION Y = F1(X)+C*FCOS(Y)+D*FATN(Y/2) WHERE F1 IS SOME DEFINED FUNCTION OF X AND THE LAST TWO TERMS ARE KNOWN TO BE CORRECTION TERMS MUCH SMALLER THAN F1(X). WE MAY DEFINE A FUNCTION, SAY F0(X,ARG) WHERE ARG IS A GUESS AT THE VALUE OF F0, (E.G. F1,X)). NOW FO MAY BE CODED TO ITERATIVELY APPROXIMATE ITSELF AS FOLLOWS: -24-
LET F0=10 10.1 SET Z'=F1(A')+C*FCOS(B)+D*FATN(B'/2) 10.2 IF(FABS(Z'*.001)-FABS(Z'-B'))10.3;RETURN 10.3 SET Z'=F0(A',Z') THIS FUNCTION WILL ITERATE ON ITSELF UNTIL A .1% VALUE IS OBTAINED. NOTE HOW SIMPLE THIS ITERATIVE FUNCTION IS WITH A RECURSIVE SUBROUTINE. ARRAYS IN ADDITION TO SUBSCRIPTED VARIABLES FOCLF HAS TRUE ONE-DIMENSIONAL ARRAYS. IN DIFFERENTIATING THESE ARRAYS FROM NORMAL FOCAL VARIABLES ONE MUST REALIZE THAT THE SUBSCRIPT IN REGULAR VARIABLES SHOULD ACTUALLY BE CONSIDERED AN EXTENSION OF THE VARIABLE NAME. UP TO EIGHT OF THESE ONE-DIMENSIONAL ARRAYS MAY BE SPECIFIED. ARRAYED VARIABLES MAKE MORE EFFICIENT UTILIZATION OF CORE THAN NORMAL FOCAL VARIABLES, SINCE THEY USE THE INDEX AS AN EXTENSION OF THE NAME, AND REQURIE FIVE CORE LOCATIONS FOR STORAGE, WHEREAS THE ARRAYED VARIABLES ONLY REQUIRE THREE LOCATIONS EACH. VARIABLE STORAGE ADDRESS COMPUTATION IS PERFORMED DIRECTLY RATHER THAN SEARCHING THE VARIABLE LIST, RESULTING IN AN INCREASE OF SPEED. THESE ARRAYS OCCUPY A "COMMON" AREA OF CORE WHICH IS SPECIFIED BY THE VARIABLE LIMITS COMMAND. THE USER MUST RESERVE VARIABLE NAMES FOR THESE ARRAYS VIA THE VARIABLE OPEN COMMAND AND MAKE SURE THAT THEY DO NOT OVERLAP. NO PROTECTION IS PROVIDED FOR THE USER OVERLAPPING ONE ARRAY WITH ANOTHER. VARIABLE LIMITS,EXPRESSION THIS COMMAND SETS ASIDE AN AREA OF CORE TO BE USED BY THE ARRAYED VARIABLES. VARIABLE OPEN, NAME, ORIGIN RESERVES THE VARIABLE "NAME" FOR AN ARRAYED VARIABLE STARTING AT "ORIGIN" IN THE RESERVED VARIABLE STORAGE AREA. VARIABLE CLOSE, NAME RELEASES "NAME" FROM ARRAYED VARIABLE STATUS. VARIABLES KILL RELEASES ALL NAMES FROM ARRAYED STATUS. FOR EXAMPLE, TO CREATE ARRAYED VARIABLES A(J), B(J), AND C(J) WITH 50 ELEMENTS EACH, NOT OVERLAPPING: -25-
#V L,150;C 150 VARIABLES #V O,A,1 #V O,B,51 #V O,C,101 NOTE THAT IT IS UP TO THE USER TO MAKE SURE THAT ONE ARRAY IS NOT OVERWRITING THE OTHER. FOR EXAMPLE IN THE ABOVE CASE A(51) WILL OCCUPY THE SAME STORAGE LOCATION AS B(1). FOCLF WILL NOT FLAG THIS ERROR. SPECIAL FUNCTIONS FRAN - IMPROVED RANDOM NUMBER GENERATOR FRAN IS AN IMPROVED RANDOM NUMBER GNERATOR WHICH GENERATES REPEATABLE RANDOM NUMBERS UNIVORM ON THE ONTERVAL 0 TO 1 (NON-INCLUSIVE OF 1). IT USES THE GENERATION FORMULA: X(N)=(2^17+3)*X(N-1) MODULO 36 WITH THE LEAD 23 BITS SUPPLYING THE RANDOM NUMBER. (THIS ALGORITHM IS DISCUSSED IN DETAIL IN DECUS FOCAL-1 BY G. A. GRIFFITH AND P. T. BRADY IN DECUS 5-25). FIN() FIN IS A SINGLE CHARACTER INPUT FUNCTION, WHICH FETCHES ON 8-BIT CHARACTER FROM THE CURRENT INPUT DEVICE AND CONVERTS IT TO THE DECIMAL EQUIVALENT. FOUT(ARG) FOUT IS A SINGLE CHARACTER OUTPUT FUNCTION, WHICH OUTPUTS ARG, A DECIMAL NUMBER, AS AN 8-BIT BINARY CHARACTER TO THE CURRENT OUTPUT DEVICE. FOCLF ON THE PDP-8/E FOR THOSE INSTALLATIONS WITH PDP-8/E COMPUTERS THERE ARE CONDITIONAL ASSEMBLY PARAMETERS IN FOCLF WHICH WILL SET THE TELETYPE READER RUN ONLY WHEN FOCLF NEEDS A CHARACTER. THUS LOW-SPEED INPUT IS FEASABLE FOR DATA INPUT OR PROGRAM INPUT WITHOUT SOMEONE STANDING THERE TURNING THE READER ON AND OFF. -26-
ALSO "BATCH MODE" PROCESSING IS POSSIBLE BY PUTTING COMMANDS ON A PAPER TAPE AND LEAVING IT IN THE READER. ERROR MESSAGES THE ERROR MESSAGES ARE NOW IN FIVE OCTAL-DIGIT FORMAT AND CORRESPOND TO THE FIELD AND CORE LOCATION OF THE ERROR SUBROUTINE CALL. IN ADDITION, THE LIST OF ERROR MESSAGES IS LARGER, GIVING A MORE COMPREHENSIVE SET FOR EASIER DEBUGGING. FOR THOSE USERS WHO WISH TO WRITE THEIR OWN MACHINE LANGUAGE SUBROUTINES, IT IS SIMPLE TO DETERMINE THE CORRESPONDING ERROR MESSAGES FROM THE LISTING OF THEIR ADDITIONAL CODING. -27-
PS/8 - OS/8 VERSIONS FOCLF V7 AND V8 THERE ARE OVERLAYS AVAILABLE FOR FOCLF V7 AND FOCLF V8 TO ALLOW USE OF THE CAPABILITIES OF THE OS/8 PROGRAMMING SYSTEM. THESE OVERLAYS IMPLEMENT DEVICE INDEPENDENT PROGRAM STORAGE AND RETREVAL, PROGRAM CALLING, VIRTUAL CORE VARIABLES, AND DEVICE INDEPENDENT ASCII I/O. TWO PAGE HANDLERS ARE ALLOWED IN BOTH VERSIONS. MOST OF THE OS/8 EXPANDED CAPABILITIES ARE IDENTICAL IN THE TWO VERSIONS, THEREFOR THE FOLLOWING DESCRIPTIONS WILL APPLY TO BOTH VERSIONS UNLESS SPECIFICALLY NOTED OTHERWISE. VERSION 7 WILL ONLY RUN IN AN 8K OS/8 ENVIRONMENT, WITH A RATHER LIMITED STORAGE AREA FOR TEXT AND VARIABLES. VERSION 8 CAN USE UP TO 24K OF CORE, BUT REQUIRES AT LEAST 12K. ALL CAPABILITIES OF VERSION 7 ARE INCLUDED IN VERSION 8, WITH SOMETIMES MINOR SYNTACTICAL DIFFERENCES. HOWEVER, VERSION 8 HAS SOME IMPROVED, AND MORE FLEXIBLE IMPLEMENTATIONS OF THESE CAPABILITIES. OS/8 ASCII I/O THE ASCII I/O CAPABILITES OF FOCLF OS ARE SIMILAR IN FORM THE THE LIBRARY SPECIFICATIONS IN THE BASIC INTERPRETERS, HOWEVER, THESE HAVE BEEN EXTENDED TO INCLUDE OS/8 DEVICES. INPUT AND OUTPUT DEVICES AND/OR FILES ARE SPECIFIED IN FOCLF VIA THE COMMANDS: INPUT DEV:NAME.EX OUTPUT DEV:NAME.EX THESE COMMANDS WILL DO ALL OF THE FILE LOOKUP AND CREATION FOR ASCII I/O FILES. IT SHOULD BE NOTED THAT THE ABBREVIATIONS FOR THESE COMMANDS ARE "IN" AND "OU" RESPECTIVELY AND MAY NOT BE ABBREVIATED TO A SINGLE LETTER AS THEY CONFILICT WITH THE IF AND ON COMMANDS IN THE FIRST CHARACTER. ONCE THE INPUT AND OUTPUT FILES HAVE BEEN SPECIFIED, THE USE OF THESE FILES IS AS IN BASIC FOCLF, I.E.: LIBRARY INPUT,FILE (OR L I,F) LIBRARY INPUT,TELETYPE (L I,T) LIBRARY OUTPUT,FILE (L O,F) LIBRARY OUTPUT,TTY (L O,T) LIBRARY OUTPUT,BOTH (L O,B) LIBRARY ECHO,TTY (L E,T) -28-
LIBRARY ECHO,FILE (L E,F) LIBRARY ECHO,NEITHER (L E,N) THE ONLY DIFFERENCE BETWEEN THESE AND BASIC FOCLF IS THE USE OF THE WORD "FILE" INSTEAD OF "HIGHSPEED". NOTE THAT THE INTERRUPT IS TURNED OFF WHILE ACCESSING OS/8 DEVICES. ALL INPUT AND OUTPUT IS BUFFERED WITH A SINGLE OS/8 BLOCK (256 WORDS). HENCE, THE USER NEED ONLY WAIT FOR PERIPHERAL OPERATION EVERY 384 CHARACTERS, LONG ENOUGH TO READ OR WRITE ONE BLOCK. WHENEVER A L I,F COMMAND IS GIVEN, THE EFFECT IS TO REPLACE THE TTY WITH THE CHARACTER STREAM IN THE FILE. THEREFORE PROGRAMS OR DATA MAY BE INPUT FROM ANY OS/8 DEVICE OR FILE. AS A RESULT OF THE "BLOCK"ING OF OUTPUT DATA, THE USER MUST SPECIFY WHEN AN OUTPUT FILE IS TO BE CLOSED (MADE PERMINENT) VIA: LIBRARY OUTPUT,CLOSE (L O,C) THIS WILL CAUSE A CTRL/Z END OF FILE CHARACTER TO BE WRITTEN INTO THE FILE, THE FINAL CORE RESIDENT BLOCK WRITTEN, AND THE TENATIVE FILE CLOSED (IF A FILE STRUCTURED DEVICE). NOTE THAT IT IS A RESTRICTION IN OS/8 THAT ONLY ONE OUTPUT FILE MAY BE ACTIVE AT A GIVEN TIME ON A SPECIFIC DEVICE. HENCE, CARE MUST BE TAKEN TO CLOSE ANY ACTIVE OUTPUT FILE BEFORE EXECUTING "OUTPUT", "VARIABLE MAKE", OR "PROGRAM SAVE" COMMANDS. AN EXAMPLE OF USING ASCII I/O FILES IS: TO ASK FOR TEN NUMBERS FROM THE FILE DATA.FD ON DTA1, FOLLOWED BY A VARIABLE FROM THE TTY, FOLLOWED BY AN ALPHANUMERIC STRING TERMINATED BY A CR TO BE OUTPUT TO THE FILE RESULTS, ON DSK: 10.1 INPUT DTA1:DATA.FD;L I,F;$ FOR J=1;10;$ ASK DA(J);$ NEXT;$ LIBRARY INPUT,TTY;ASK VARIABLE;$ OUTPUT RESULTS;L O,F; 10.3 IF(FOUT(FIN())-141),10.4;G 10.3 10.4 L O,T;C END UP WITH TTY OUTPUT WHERE 141 DECIMAL IS 215 OCTAL, THE ASCII CODE FOR CR. IF AN ADDITIONAL L I,F FOLLOWS, INPUT WILL RESUME FROM DATA.FD, AFTER THE 10TH VARIABLE. THE OUTPUT FILE ON DSK IS STILL OPEN FOR FURTHER OUTPUT. TO SAVE A PROGRAM (NAMED PROG.PA) AS AN ASCII FILE SUCH THAT WHEN IT IS INPUT IT WILL START AT LINE 10.1, THE FOLLOWING MAY BE USED: -29-
#OUTPUT DEV:PROG.PA #LIBRARY OUTPUT,FILE #WRITE ALL #LIBRARY OUTPUT,FILE;TYPE "GOTO 1O.1",! #LIBRARY OUTPUT,CLOSE TO READ BACK AND START THIS PROGRAM: #INPUT DEV:PROG.PA #LIBRARY INPUT,FILE;LIBRARY ECHO,NONE. OS/8 PROGRAM STORAGE A COMPREHENSIVE SET OF COMMANDS HAVE BEEN IMPLEMENTED TO ALLOW THE SAVING AND CALLING OF FOCLF PROGRAMS SAVED IN OS/8 FILES (AS IMAGE FIELS). PROGRAM SAVE,DEV:NAME.EX PROGRAM GET,DEV:NAME.EX PROGRAM DELETE,DEV:NAME.EX PROGRAM RUN,DEVICE:NAME.EX;COMMANDS PROGRAM CALL,DEVICE:NAME.EX;COMMANDS PROGRAM EXIT FOR ALL OS/8 COMMANDS THE DEVAULT DEVICE IS DSK: AND THE DEFAULT EXTENSION IS .FL. THE ";COMMANDS" IS OPTIONAL AND THE COMMANDS MAY BE ABBREVIATED TO A SINGLE LETTER. THE SAVE COMMAND SAVES THE CURRENT PROGRAM ON DEVICE DEV WITH FILENAME NAME.EX. IT IS RECOMMENDED THAT THE USER USE EXTENSIONS .FP OR .FL FOR SAVED PROGRAMS, .FV FOR VARIABLE FILES, AND .PA FOR ASCII I/O FILES. THE EXTENSION .FL IS THE DEFAULT EXTENSION FOR ALL FILES. THE GET COMMAND LOADS THE PROGRAM SPECIFIED INTO THE TEXT BUFFER AND EXITS TO THE FOCLF COMMAND (#) MODE. THE PROGRAM RUN COMMAND TAKES TWO FORMS: IF THE OPTIONAL ";COMMANDS" IS MISSING THE ENTIRE PROGRAM IS RUN ("DO ALL") AFTER LOADING. IF THERE ARE ADDITIONAL COMMANDS FOLLOWING THE PROGRAM RUN COMMAND, THEY ARE PASSED TO THE CALLED PROGRAM AS A COMMAND LINE, JUST AS IF TYPED IN THE COMMAND MODE. THE PROGRAM CALL COMMAND FUNCTIONS SIMILAR TO THE RUN COMMAND EXCEPT THAT THE CURRENT PROGRAM, CALLED MAIN, IS SAVED ON THE SYSTEM FOR LATER RESTORATION. WHEN THE CALLED PROGRAM HAS FINISHED EXECUTION THE CALLING PROGRAM IS RESTORED AND -30-
CONTINUES RUNNING FROM THE POINT FOLLOWING ";COMMANDS". VARIABLES CREATED IN MAIN ARE GLOBAL TO THE CALLED PROGRAM, BUT VARIABLES CREATED IN THE CALLED PROGRAM ARE ERASED WHEN MAIN IS RESTORED. OF COURSE, THE CALLED PROGRAM MAY CHANGE ANY GLOBAL VARIABLE TO PASS INFORMATION BACK TO MAIN. IF THE CALLED PROGRAM ERASES VARIABLES, THEN THEY ARE, OF COURSE, ERASED WHEN MAIN IS RESTORED AND VARIABLES CREATED BY THE SUBROUTINE WILL NOW BE GLOBAL (UP TO THE SAME NUMBER AS THERE WERE WHEN CALLED). IT IS A GOOD RULE TO FOLLOW THAT CALLED PROGRAMS NEVER ERASE VARIABLES. THE PROGRAM CALL COMMAND IS NOT RECURSIVE IN EITHER VERSION 7 OR VERSION 8. IN VERSION 7 IT IS NOT EVEN RE-ENTRANT. THUS IF A CALLED PROGRAM CALLS ANOTHER PROGRAM IT BECOMES MAIN AND EVENTUALLY WILL TERMINATE WITH AN ERROR MESSAGE ON COMPLETION. IN VERSION 8, THE PROGRAM CALL COMMAND IS RE-ENTRANT BUT NOT RECURSIVE. THUS A CALLED PROGRAM MAY CALL ANOTHER PROGRAM, WITH THIS PROCESS CONTINUING TO ANY LEVEL. HOWEVER, NOWHERE MAY THE CHAIN OF CALLS CLOSE A LOOP, CALLING A PROGRAM WAITING TO BE RETURNED TO. THE CALLING PROGRAM IS RETURNED TO WHEN THE COMMAND LINE IS FINISHED EXECUTION. IF AN ERROR OCCURS, LEAVING THE USER IN A CALLED PROGRAM, THE PROGRAM EXIT COMMAND MAY BE USED TO RESTORE A CALLING PROGRAM RETURN CHAIN. THE PROGRAM DELETE COMMAND DELETES FILES. WHENEVER A PROGRAM IS SAVED THE HEADER COMMENT LINE IS CHANGED TO REFLECT THE FILENAME AND THE OS/8 DATE THAT IT WAS SAVED. E.G. P S,FLPROG WILL CHANGE THE COMMENT LINE TO C OS/8 FLPROG .FL MM/DD/YY THIS LINE IS SAVED WITH THE PROGRAM SO THAT WHENEVER IT IS CALLED THE HEADER LINE IS CHANGED TO REMIND THE USER OF THE FILE NAME AND THE DATE CREATED. AN ERASE TEXT OR ERASE ALL RESTORES THE NAME FOCLF AND VERSION NUMBER OF THE INTERPRETER. IT SHOULD BE NOTED THAT IT IS IMPOSSIBLE TO REFERENCE A FILE WITH A NULL EXTENSION. OS/8 VIRTUAL CORE VARIABLES A SET OF "VARIABLE" COMMANDS HAVE BEEN IMPLEMENTED TO ALLOW SAVEING AND CALLING OF FOCLF ARRAYED VARIABLES FROM "VIRTUAL CORE" OS/8 FILES. IN VERSION 7 THESE VARIABLES REPLACE THE STANDARD SET OF "ARRAYED VARIABLES". IN VERSION 8 BOTH IN CORE ARRAYED VARIABLES AND VIRTUAL CORE VARIABLES ARE AVAILABLE. THE SYNTAX OF THE VARIABLE COMMANDS DIFFER BEWEEN THE TWO VERSIONS, FOR VERSION 7: -31-
VARIABLE MAKE,ARG1,DEV:NAME.EX VARIABLE OPEN,VNAME,DEV:NAME.EX VARIABLE CLOSE,VNAME VARIABLE KILL THE VARIABLE MAKE COMMAND CREATES A PERMANENT OS/8 FILE ON DEV: WITH THE FILENAME NAME.EX. THE DEFAULT DEVICE IS DSK: AND DEFAULT EXTENSION .FL. THE FILE LENGTH IS SPECIFIED BY "ARG1" WHICH MAY BE ANY ARITHMETIC EXPRESSION. THERE ARE 85 VARIABLES PER BLOCK AND 0 IS A LEGAL SUBSCRIPT. THE VARIABLE OPEN COMMAND RESERVES THE VARIABLE NAME VN AS AN ARRAYED VARIABLE TAKEN FROM FILE NAME.EX. THERE MAY BE UP TO EIGHT ARRAYED VARIABLES OPEN AT ANY ONE TIME. SINCE THERE ARE ONLY TWO VIRTUAL CORE VARIABLE BUFFERS, OF 256 WORDS EACH, CORE RESIDENT AT ANY GIVEN TIME, IT IS PREFERRED TO USE THESE ARRAYED VARIABLES IN SOMTHING RESEMBLING NUMERICAL ORDER TO MINIMIZE LOADING AND UPDATING OF BLOCKS IN CORE. ALSO, SINCE ONLY TWO ARE RESIDENT AT A GIVEN TIME, A THIRD VARIABLE MUST BE LOADED OVER ONE OF THE PREVIOUS ONES, REQUIRING RATHER SLOW ACCESS TIMES FOR EVEN SEQUENTIAL USE OF MORE THAN TWO OF THESE ARRAYED VARIABLES AT THE SAME TIME. FOCLF DOES MAKE AN ATTEMPT AT EFFICIENT LOADING BY ONLY UPDATING A BLOCK IF A VARIABLE HAS BEEN CHANGED IN IT, AND BY LOADING A NEW BLOCK INTO THE NOT MOST RECENTLY ACCESSED BUFFER. THE VARIABLE CLOSE COMMAND RELEASES THE VARIABLE NAME VNAME FROM RESERVED STATUS AND WRITES ANY FINAL CORE RESIDENT BLOCK BACK INTO THE FILE. THIS COMMAND SHOULD ALWAYS BE GIVEN PRIOR TO DISMISSING FOCLF OR THE VARIABLE FILE MAY NOT BE CORRECT FOR FUTURE USE. THE VARIABLE KILL COMMAND RELEASES ALL VARIABLE NAMES FROM RESERVED STATUS WITHOUT UPDATING THE CURRENTLY OPEN FILES. THIS COMMAND SHOULD ONLY BE USED TO REINITIALIZE SYSTEM TABLES WHEN A NEW SET OF PROGRAMS ARE TO BE STARTED. SINCE FOCLF V8 ALLOWS BOTH IN CORE AND VIRTUAL CORE VARIABLES, THE SYNTAX OF THESE COMMANDS IS: VCORE MAKE,ARG1,DEV:FILE.EX VCORE OPEN,VNAME,TYPE,DEV:FILE.EX VCORE CLOSE,VNAME VCORE KILL THESE COMMANDS FUNCTION IDENTICALLY WITH THE ABOVE DESCRIPTIONS FOR VERSION 7 WITH TWO EXCEPTIONS: 1. THE VARIABLE OPEN COMMAND CONTAINS AN ADDITIONAL ARGUMENT -32-
"TYPE" TO IDENTIFY ONE OF THE FOLLOWING TYPES OF VARIABLES: F FLOATING POINT S SIGNED INTEGER(12-BIT) U UNSIGNED INTEGER. 2. THE FILENAME SPECIFICATION MAY OPTIONALLY BE OF THE FORM: DEV:FILE.EX,ARG2 WHERE ARG2 IS AN EXPRESSION WHICH IS EVALUATED AND REPLACES THE SECOND CHARACTER OF THE EXTENSION AS FOLLOWS. ARG2=0 EXTENSION KEPT AS IS ARG2=1 SECOND CHAR CHANGED TO "A" ARG2=2 "B" ...... ARG2=28 "Z" THUS THERE IS SOME MEASURE OF DYNAMIC NAME CALCULATION AVAILABLE IN VERSION 8. ALSO IN VERSION 8, AT ASSEMBLY TIME, FROM TWO TO EIGHT VIRTUAL CORE VARIABLE BUFFERS MAY BE SPECIFIED BY CONDITIONAL ASSEMBLY PARAMETERS. ADDITIONAL BUFFERS WILL GREATLY SPEED UP THE ACCESSING OF MULTIPLE VARIABLE FILES IN A PROGRAM, ALTHOUGH SEQUENTIAL REFERENCING IS STILL REQUIRED FOR REASONABLE SPEED. MISCELLANEOUS THE OS/8 VERSIONS OF FOCLF USE THE SYSTEM SCRATCH BLOCKS FOR AN OVERLAY WHEN DOING FILE LOOKUPS, THUS FOCLF IS NOT RESTARTABLE AFTER RETURN TO THE MONITOR. THEREFORE, WHENEVER THE USER TYPES CTRL/C, FOCLF WILL ASK THE OPERATOR: REALLY? AND WAIT FOR THE RESPONSE "Y". ANY OTHER RESPONSE WILL RESULT IN AN ERROR MESSAGE, RETAINING FOCLF. ANOTHER GENERAL NOTE: FOCLF WILL ALLOW TWO PAGE DEVICE HANDLERS. IT WILL FIRST ATTEMPT TO LOAD A ONE PAGE HANDLER, AND WHEN THAT FAILS WILL TRY A TWO PAGE HANDLER. IN THIS WAY CORE STORAGE IS MINIMIZED, BUT ONLY ONE TWO-PAGE HANDLER MAY BE RESIDENT AT A TIME. -33-



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search