Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-04 - decus/20-0134/focal10.ctl
There is 1 other file named focal10.ctl in the archive. Click here to see a list.
;Control File for DECsystem-10 FOCAL version 5J(345)-1 [19-Oct-76].

;C - THIS FILE CAN BE USED FOR THE FOLLOWING PURPOSES:
;C	1. PRINT THE CONTROL FILE:	.PRINT LPT1:=FOCAL.CTL/PRINT:ARROW
;C	2. INPUT TEST FILE FOR FOCAL:	.R FOCAL
;C					*OPERATE INPUT FOCAL.CTL
;C	3. ASSEMBLE AND LOAD FOCAL:	.SUBMIT FOCAL
;C	4. TEST FOCAL:			.SUBMIT FOCAL/TIME:55:00/TAG:TEST

;C	THE FOLLOWING FEW LINES ALLOW THE .CTL FILE TO BE EXECUTED BY FOCAL.
;C	THIS CODE WILL SKIP TO D0AA AND EXECUTE IT.
;01.20	I FCHR(-1)-37 1.2,1.3,1.2
;01.30	IF -FABS(FCHR(-1)-37)1.2;S K=1,A(1)=37,A(2)=37,A(3)=69,A(4)=87,A(5)=68,A(6)=48,A(7)=65,A(8)=65,A(9)=46,A(10)=70,A(11)=67,A(12)=76
;01.40	S K=K+1;IF -FABS(FCHR(FCHR(-1))-A(K)) 1.2;IF K-12 1.4;E,A;Q
;GO



;ASSEMBLY AND LOADING INSTRUCTIONS FOR DECsystem-10 FOCAL.
;FEATURE-TEST SWITCHES
;---------------------
;PROCESSOR TYPE.	PDP-6:	.CPU=1
;			KA-10:	.CPU=2
;			KI-10:	.CPU=3	(DEFAULT)
;			KL-10:	.CPU=4
;MONITOR TYPE (TO ALLOW USE UNDER MONITORS WITH SUNDRY MINOR DEFICIENCIES)
;MONITOR=3.27 OR 4.72 OR 5.03 OR 5.04 OR 5.05 OR 5.06 (DEFAULT 5.06)
;ARITHMETIC PRECISION:	WPV=1 SINGLE PRECISION
;			WPV=2 DOUBLE PRECISION (DEFAULT)
;FACET:		FNEW UNDEFINED:	HIGH SEGMENT ONLY (NULL LOW SEGMENT)
;		EXTERNAL FNEW : LOW SEGMENT ONLY. (FOCALL.REL)
.R TECO
*ERFOCAL.CTL_%%^E<45>EWFCLTMP.MAC12RXAMAK0,.KN%%^E<45>EF
.EXECUTE FCLTMP.MAC
.DELETE FCLTMP.MAC,FCLTMP.REL
.R MACRO
*FOCALH,FOCALH/C=FCLTMP.PRM,FOCAL
*FOCALL,FOCALL/C=TTY:,DSK:FCLTMP.PRM,FOCAL
*EXTERNAL FNEW
*
*
.LOAD FOCALH
.SSAVE DSK:FOCAL
.DELETE FOCALH.REL
.R CREF
*DSK:FOCALH=FOCALH/O
*DSK:FOCALL=FOCALL/O
.R RUNOFF
*FOCAL.MEM=FOCAL.RNO/UNDERLINE:SEPARATE
*FOCAL.DOC=FOCAL.RND/UNDERLINE:SEPARATE
.KJOB/F/Z:0
.IF(ERROR).GOTO HANG
TEST::
.CHKPNT HANG
.RENAME FHOLD.SHR=FOCAL.SHR	;SAVE STANDARD FILE.
.IF(ERROR)			;IGNORE ERRORS
.RENAME FHOLD.REL=FOCALL.REL	;SAVE STANDARD FILE.
.IF(ERROR)			;IGNORE ERRORS
.R TECO				;CREATE SOME TEMPORARY FILES.
*ERFOCAL.CTL3_%%%<XAMAK0,.KN%%%;0K0,.PEF>EX
.DELETE XMISC.FCL,XLUNAR.FCL,XMULPK.FCL,XLEARN.FCL
.DELETE XHAM.FCL,XRESEQ.FCL,XSYSTA.FCL
.EXECUTE FCLTMP.MAC		;CREATE PARAMETER & COMMAND FILES
.DELETE FCLTMP.MAC,FCLTMP.REL
.ASSIGN DSK LPT			;FORCE SYSTAT OUTPUT TO HAVE A KNOWN FILE NAME.
.SYSTAT/L
.DEASSIGN LPT
.R TECO
*ERSYSTAT.TXT_OF0,.KIFOCAL report forL.,ZKI
*HXAHK
*EBFOCAL.RPT<A-1-^N;>ZJ
.IF(ERROR)*EWFOCAL.RPT
*GAHPEF
;CONVENTION:	"PERMANENT RECORDS IN FOCAL.RPT END WITH CRLF."
.DELETE SYSTAT.TXT
.EXECUTE FCLSET
.LOAD FCLTMP.PRM+FOCAL.MAC/MACRO
.SSAVE
.DELETE FOCAL.REL

;CHECK VERSION NUMBERS OF DOCUMENTATION.
.DIR FCLTMP.DIR=/OPTION:FOCAL/W
.R RUNOFF
*FOCAL.MEM=FOCAL.RNO/UNDERLINE:SEPARATE
*FOCAL.DOC=FOCAL.RND/UNDERLINE:SEPARATE
.R TECO
*ERFCLTMP.DIR<A-1-^N;>J<S:;0KK>
*!VERSION(SHR)! J:SFOCAL	EXE"SOA'JSFOCAL	SHR!A!LRR27II2EO0LS>2S-S^ESI1EOS4RXA
*!DATE(RNO)!    JSFOCAL	RNOLRR27II2EO0LS>S^EDRI1EOS4RXB
*!DATE(RND)!    JSFOCAL	RNDLRR27II2EO0LS>S^EDRI1EOS4RXC
*HKERFOCAL.MEM_ ^EDR0,.KL.,ZKJMB!CHECK DATE IN RNO = DATE OF RNO!
*HKERFOCAL.MEM_VERSION 0,.KL.,ZKJMA!CHECK VERS IN RNO = VERS(SHR)!
*HKERFOCAL.DOC_[XDRR.,ZK0LSVERSION0,.KMA!VERS IN RND = VERS(SHR)!
*HKGDJMC!CHECK DATE IN .RND = DATE OF .RND!
.DELETE FCLTMP.DIR
.R TECO
*ERFOCAL.MEMEWFNEW1.FOR
*_DOUBLE PRECISION FUNCTION0L0,.KS      END
*.,ZKJ<6DS
*      ;6R>HPEF
.COPY NUL:=FOCAL.MAC	;THE MACRO SOURCE FILE.
.IF(NOERROR).GOTO LOOP
.TECO FOCAL.RPT
*<A-1-^N;>ZJISOURCE FILE ABSENT - NO ASSEMBLIES DONE
*EX
.DELETE FCLTMP.PRM
.GOTO FNEWT
CRASH::
.TECO FOCAL.RPT
*<A-1-^N;>ZJI[RE-STARTED AFTER CRASH]
*EX

LOOP::
.REVIVE
.CHKPNT CRASH
.EXECUTE FCLSET
.TECO FOCAL.RPT
*<A-1-^N;>ZJ0KIASSEMBLE NEXT CONFIGURATION FOR TESTEX
.R MACRO
*FCLTMP,FCLTMP=FCLTMP.PRM,FOCAL
*FOCALL=TTY:,DSK:FCLTMP.PRM,FOCAL
*EXTERNAL FNEW
*^Z
*^Z
.DELETE FOCAL.SAV,FOCAL.SHR,FOCAL.EXE,FOCAL.LOW
.LOAD FCLTMP/MAP:TTY:FOCAL
.SSAVE
.R TECO
*ERFCLTMP.LST<A-1-^N;>_PROGRAM^XBREAK.UAJ:SHI-SEG. BREAK"UQAJ'0LXBJS^EAR0,.KS	MACRO6R0XA
*HKEBFOCAL.RPT<A-1-^N;>ZJ0KITEST OF GAI
*-TGBITEST OF FNEWEX
.DELETE FCLTMP.LST,FCLTMP.REL
FNEWT::
.LOAD FOCALL/REL,FNEW1.FOR/F10
.ASSIGN NUL DSK
.ASSIGN NUL SYS
.ASSIGN NUL NEW
.ASSIGN NUL OLD
.START
.IF(ERROR).GOTO FNEWU
;HERE IF PDP-6.
.DEASSIGN
.GET FOCAL
.E 400000
.IF(NOERROR).GOTO CHECK	;AHA! NOT PDP-6!
.LOAD FOCALL/REL,FNEW1.FOR/F10
.ASSIGN DSK OLD
FNEWU::
.DEASSIGN OLD
.ASSIGN DSK OLD
.START
;NEXT LINE HAS A RUBOUT AFTER THE Z, TO CHECK THAT FEATURE.
*ZIF (-FABS(FNEW("ABC")-3));QUIT
;NEXT LINE HAS A BACKSPACE AFTER THE Z, TO CHECK THAT FEATURE.
*Z^HIF (-FABS(FNEW("ABCD")-4));QUIT
;NEXT LINE HAS TWO BACKSPACES AFTER THE Z TO CHECK THAT FEATURE.
*Z^H^HIF (-FABS(FNEW("1234567890")-10));QUIT
.DEASSIGN
.LOAD FOCALL/REL,FNEW1.FOR/F10
.ASSIGN NUL DSK
.ASSIGN NUL SYS
.ASSIGN DSK NEW
.ASSIGN NUL OLD
.START
.DEASSIGN
.LOAD FOCALL/REL,FNEW1.FOR/F10
.ASSIGN NUL DSK
.ASSIGN DSK SYS
.ASSIGN NUL NEW
.ASSIGN NUL OLD
.START
.DEASSIGN
.LOAD FOCALL/REL,FNEW1.FOR/F10
.ASSIGN NUL SYS
.ASSIGN NUL NEW
.ASSIGN NUL OLD
.START
.DEASSIGN
.TECO FOCAL.RPT
*<A-1-^N;>ZJ0KICORE SIZE CHECK AND GET/SAVE TESTEX
.TI
.GET FOCAL	;CHECK SIZE.
.E 404000	;HIGH SEG MUST BE LESS THAN OR EQUAL 2K.
.IF(NOERROR).GOTO CHECK
.E 400000
.IF(NOERROR).GOTO TWOSEG
.E 6000		;IF JUST LOW SEG, THEN IT MUST BE LESS THAN OR EQUAL 3K.
.IF(NOERROR).GOTO CHECK
TWOSEG::.START
*1.01 IF(X+1) ,1.03;Z - X IS NOT NEGATIVE.
*1.03 QUIT
*SET X=-1
*GO;CHECK PROGRAM FIRST.
*SET QQ$="HOW-DO-YOU-DO",YY=4.7537
*LIBRA SAVE FCLTMP.A
.REENTER
*LIBRA SAVE FCLTMP.B
.NSAVE FCLTMX
.IF(ERROR).SAVE FCLTMX
.REENTER
.IF(NOERROR).GOTO CHECK
*LIBRA SAVE FCLTMP.C
.START
.IF(NOERROR).GOTO CHECK
*LIBRA SAVE FCLTMP.D
.CORE 0
.GET FCLTMX.LOW
.IF(ERROR).GET FCLTMX
.START
.IF(NOERROR).GOTO CHECK
*LIBRA SAVE FCLTMP.E
*1.02 Z - CRASH HERE IF 1.01 DID NOT SKIP.
*GO
*SET X=3;LIBRA SAVE FCLTMP.F ALL;SET X=-1;LIBRA CALL FCLTMP.F
*LIBRA DELETE FCLTMP.F;GO;CHECK THAT IF LIST THEN NO SYMBOL TABLE.
.DELETE FCLTMX.SAV,FCLTMX.HGH,FCLTMX.LOW,FCLTMX.EXE
.TECO FCLTMP.A
*SVS^ESKI
*EX
.TECO FCLTMP.B
*SVS^ESKI
*EX
.TECO FCLTMP.C
*SVS^ESKI
*EX
.TECO FCLTMP.D
*SVS^ESKI
*EX
.TECO FCLTMP.E
*SVS^ESKI
*EX
.R FILCOM
*=FCLTMP.A,.B/Q/B
*=FCLTMP.A,.C/Q/B
*=FCLTMP.A,.D/Q/B
*=FCLTMP.A,.E/Q/B
.DELETE FCLTMP.A,FCLTMP.B,FCLTMP.C,FCLTMP.D,FCLTMP.E
.MAKE FOCAL.TMP
*I
*C - PLACE A NULL IN THE IMMEDIATE-MODE TEXT AREA PRIOR TO THIS COMMENT
*1.01	QUIT
*1.02	Z - CRASH LIBRA CALL.
*EX
.RUN FOCAL
*LIBRA CALL FOCAL.TMP
*GO;C - CHECK LIBRA CALL WITH INITIAL CRLF IN THE FILE.
.DELETE FOCAL.TMP
.TECO FOCAL.RPT
*<A-1-^N;>ZJ0KIELEMENTARY AND D0AA TESTSEX
.RUN FOCAL
*D
*E
*F X=1
*G
*I X
*Q
*R
*S X=0
*T
*W
*W ALL
*X
*O I D0AA
.IF(ERROR).GOTO CHECK
.TECO FOCAL.RPT
*<A-1-^N;>ZJ0KILIBRA CALL/SAVE TESTSEX
.RUN FOCAL
*L C XSPEED
*FOR I=1,127;SET COUNT(I)=I,STR$(I)=FCHR$(I)
*L S FCLTMP.A
*e a,;l c FCLTMP.A;l s FCLTMP.B
*E A,;L C FCLTMP.B;L S FCLTMP.B
.TECO FCLTMP.A
*SVS^ESKI
*EX
.TECO FCLTMP.B
*SVS^ESKI
*EX
.R FILCOM
*=FCLTMP.A,FCLTMP.B/Q/B
.RUN FOCAL
*L D FCLTMP.BAK
*L D FCLTMP.A
*l d FCLTMP.B
.TECO FOCAL.RPT
*<A-1-^N;>ZJ0KITYPING AND STRING MANIPULATION CHECKOUTEX
.RUN FOCAL	;TYPING CHECKOUT.
*TYPE %E5.04
*OPERATE OUTPUT DSK:FCLTMP.A/6
*OPERATE OUTPUT DSK:FCLTMP.B/7
*TYPE /6,0!		,/7,"=    0.0000"!
*TYPE /6,.000049!	,/7,"=    0.0000"!
*TYPE /6,.000051!	,/7,"=    0.0001"!
*TYPE /6,.0001!		,/7,"=    0.0001"!
*TYPE /6,.1!		,/7,"=    0.1000"!
*TYPE /6,1!,/7,"=    1.0000"!
*TYPE /6,9999!,/7,"= 9999.0000"!
*TYPE /6,%,1!,/7,"= 1.0000E+0"!
*TYPE /6,%,0!,/7,"= 0.0000E+0"!
*TYPE /6,%,.1!,/7,"= 1.0000E-1"!
*TYPE /6,%,10!,/7,"= 1.0000E+1"!
*TYPE /6,%,-1!,/7,"=-1.0000E+0"!
*TYPE /6,%,$,  /7,!
*SET X=5,Q(76)=76
*TYPE /6,%,$,  /7,!"S Q(76)	= 7.6000E+1"!"S X	= 5.0000E+0"!
*TYPE /6,%,X,! /7,"= 5.0000E+0"!

;CHECK STRING OPERATIONS TOO.
*SET X=5,X$="5",X6=6
*TYPE /6,X,X$,X6;TYPE X6;TYPE X$;TYPE X!;TYPE /7,"= 5.0000E+05= 6.0000E+0= 6.0000E+05= 5.0000E+0"!
*SET X$="A",X$(1)="BC",X$(2,0)="DEF",X$(3,0,0)="GHIJ",X$(4)="KLMNO", X$(5)= "PQRSTU"
*SET X$=X$+X$(1)+X$(2)+X$(3)+X$(4)+X$(5)
*SET Y$="ABCDEFGHIJKLMNOPQRSTU"+FCHR$(10)+FCHR$(13)
*TYPE /6,X$,!,/7,Y$
*SET X$="";TYPE /6 X$+X$
*SET X$="ABC"
*TYPE %2.01,/6,2.0,"HELLO","",2.0,X$,!/7"= 2.0HELLO= 2.0ABC"!
*TYPE /6,X,"HELLO",X,X$!/7"= 5.0HELLO= 5.0ABC"!
*TYPE /6 X "HELLO" X X$ /7 "= 5.0HELLO= 5.0ABC"
*TYPE /6 2.0 "HELLO" 2.0 X$ /7 "= 2.0HELLO= 2.0ABC"
*TYPE /6!"HELLO",2.0,X$,2.0,/7!"HELLO= 2.0ABC= 2.0"
*TYPE /6 "HELLO" 2.0 X$ 2.0!/7 "HELLO= 2.0ABC= 2.0"!
*TYPE /6 "HELLO",X , X$ , X ,!,/7, "HELLO= 5.0ABC= 5.0"!
*TYPE /6 "HELLO" X   X$   X  ! /7  "HELLO= 5.0ABC= 5.0"!
*ERASE
*ASK ;CHECK THAT NO COLON APPEARS IN THE OUTPUT.
*ASK "HOWDY";TYPE /6!/7!
*ASK X$;TYPE /6 X$! /7 "SPACEDELIMITER COMMA,"!
*SPACEDELIMITER COMMA,
*ASK W$,X$,Y$;TYPE /6 W$+X$+Y$!/7"SPACEDELIMITER COMMA,GREEN"!
*
*FOOYELLOW ^UA^U^RAB^RGAABABCABCDABCDEABCDEFREEN
*ASK W$,X$,Y$;TYPE /6 W$+X$+Y$!/7"SPACEDELIMITER COMMA,GREEN"!
*
*FOOYELLOW ^U^HA^U^RAB^H^H^RGA^HAB^H^HABC^H^H^HABCD^H^H^H^HABCDE^H^H^H^H^HABCDEF^H^H^H^H^H^HREEN
*ASK W$,X$,Y$;TYPE /6 W$+X$+Y$!/7"SPACEDELIMITER COMMA,GREEN"!
*
*FOOYELLOW ^U^HA^U^RAB^H^RGAAB^HABC^H^HABCD^H^HABCDE^H^HABCDEF^H^H^HREEN
*ERASE;SET X$="ALPHA"+FCHR$(10)+FCHR$(13)+"BETA"
*TYPE /6 $ /7 $$
*TYPE /6 $ /7 !"S X$	=	",FCHR$(34),"ALPHA",FCHR$(34),"+FCHR$(10)+",FCHR$(34),FCHR$(34),"+FCHR$(13)+",FCHR$(34),"BETA",FCHR$(34)!
*^UA^U^RAB^R^POAABABCABCDABCDEABCDEFPER^RATE OUTPUT TTY:/6;OPERATE OUTPUT TTY:/7
*^U^HA^U^RAB^R^POA^HAB^H^HABC^H^H^HABCD^H^H^H^HABCDE^H^H^H^H^HABCDEF^H^H^H^H^H^HPER^RATE OUTPUT TTY:/6;OPERATE OUTPUT TTY:/7
*^UA^U^RAB^R^POA^HAB^HABC^HABCD^H^HABCDE^H^H^HABCDEF^H^H^HPER^RATE OUTPUT TTY:/6;OPERATE OUTPUT TTY:/7
.R FILCOM
*=FCLTMP.A,.B/Q/B
.DELETE FCLTMP.A,FCLTMP.B
.TECO FOCAL.RPT
*<A-1-^N;>ZJ0KITELETYPE-SPECIFIC TESTSEX
;TELETYPE-SPECIFIC TESTS.
.RUN FOCAL
.REE
*1.1 C
*DO 1.1,1.1;DO 1.1
*
*?
*DO 1.1
*?
*L S TTY:
*1.1 C
*M 1.1
*
*O O TTY:
*O I TTY:
*T " ","?"
*	
.TECO FOCAL.RPT
*<A-1-^N;>ZJ0KIINACCESIBLE-CODE TEST.EX
.TECO FCLTMP.PRM
*:N.CPU=3"S^A
*?IT'S A KI-10!	GO MAN GO!
*^A'
.IF(NOERROR).GOTO NOSIM		;ONLY SIMULATE VERSIONS WITH PURE HI-SEG.
.LOAD FOCALL/REL,SIMFCL
.START
*L C XACCES
*^Z
.START
.IF(NOERROR).GOTO CHECK
*GO TO 1.01
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.IF(NOERROR).GOTO CHECK
*GO
.SET TTY NO ECHO
.IF(ERROR);IGNORE BATCH'S INCAPACITY!
.START
.IF(NOERROR).GOTO CHECK
*GO
=
.SET TTY ECHO
.IF(ERROR);IGNORE BATCH'S INCAPACITY!
.REENTER
*GO
;WE CAN'T DETACH, CCONT, DELAY, ATTACH, CONTROL-C, CONTINUE IN BATCH.
.R TECO
*ERSIMFCL.RPTYAHXAHKEBFOCAL.RPT<A-1-^N;>ZJ0LGAEX
.DELETE SIMFCL.RPT
NOSIM::
.TECO FOCAL.RPT
*<A-1-^N;>ZJ0KIERROR-MESSAGE CHECKOUT.EX
.RUN FOCAL
*OPERATE CALL FOCAL.CTL
.IF(NOERROR).GOTO CHECK
*OPERATE OUTPUT :
.IF(NOERROR).GOTO CHECK
*LIBRA OUTPUT
.IF(NOERROR).GOTO CHECK
*ERASE ALL
*12.34 ERASE ALL
*GO
*FOR X$=2,3,4;
.IF(NOERROR).GOTO CHECK
*FOR X="FIVE",3;
.IF(NOERROR).GOTO CHECK
*FOR X=2,"FIVE";
.IF(NOERROR).GOTO CHECK
*FOR X=2,X$;
.IF(NOERROR).GOTO CHECK
*FOR X=2,3,X$;
.IF(NOERROR).GOTO CHECK
*SET Y=X$
.IF(NOERROR).GOTO CHECK
*SET X$=Y
.IF(NOERROR).GOTO CHECK
*SET X$=2
.IF(NOERROR).GOTO CHECK
*SET X$=+Y$
.IF(NOERROR).GOTO CHECK
*SET X$=-Y$
.IF(NOERROR).GOTO CHECK
*SET X$=*5
.IF(NOERROR).GOTO CHECK
.ERROR %
.RUN
;ENSURE NO FOV ERROR FOR THE FOLLOWING TYPE-OUT:
*TYPE %%E25.18,1E-26
.RUN
;ENSURE ERROR MESSAGE FOR SQUARE ROOT OF -1:
*SET X=FSQT(-1)
.IF(NOERROR).GOTO CHECK
*TYPE %E3.03
.IF(NOERROR).GOTO CHECK
*TYPE %3.04
.IF(NOERROR).GOTO CHECK
*TYPE %100
.IF(NOERROR).GOTO CHECK
*TYPE /1 ;CHANNEL 1 IS NEVER AVAILABLE.
.IF(NOERROR).GOTO CHECK
.ERROR
.E 400000		;IS THIS THE PDP-6 VERSION?
.IF(ERROR).GOTO NOFPT
.ERROR %
.RUN
*TYPE 10^55
.IF(NOERROR).GOTO CHECK
*TYPE 10^(-55)
.IF(NOERROR).GOTO CHECK
NOFPT::.ERROR
.RUN
*GO ..;CHECK LOOP WITH DOUBLE PERIODS.!
.IF(NOERROR).GOTO CHECK
.CORE 15
.IF(NOERROR).GOTO BYPASS
;COME HERE TO CHECK THAT OVERFLOWING CORE IS O.K.
;DON'T CHECK IT IF IT WOULD TAKE TOO MUCH CPU TIME!
.RUN
*1.99 S I=I+1,X(I)=I;G 1.99;USE ALL AVAILABLE CORE
*GOTO 1.99
.IF(NOERROR).GOTO CHECK
.CORE
.CONTINUE
*TYPE I;ERASE
.CORE
BYPASS::.RUN
*OPERATE INPUT DSK:FOCAL.RNO/0
.IF(NOERROR).GOTO CHECK
*OPERATE INPUT DSK:FOCAL.RNO/5;ASK /0;TYPE /0
.TECO FOCAL.RPT
*<A-1-^N;>ZJ0KITEST COMPLETED.
*EX
.TECO FCLTMP.PRM
.IF(ERROR).GOTO DONE
*:SWPV=2"S-DI1EX':SWPV=1"U!A!^A
*?BAD PARAMETER FILE.
*^AEX'-DI2J:S.CPU="UOA'1A-1IDEX
.TECO FCLTMP.PRM
*:S.CPU=0"S^A
*?END OF FOCAL TESTS.
*^A'EX
.IF(ERROR).GOTO DONE
.SILENCE
.BACKTO LOOP

DONE::
.CHKPNT HANG
.DELETE FOCAL.SHR,FOCAL.SAV,FOCAL.EXE,FOCAL.LOW,FOCALL.REL
.RENAME FOCAL.SHR=FHOLD.SHR	;RESTORE STANDARD FILE.
.IF(ERROR)			;IGNORE ERRORS
.RENAME FOCAL.LOW=FHOLD.LOW	;RESTORE STANDARD FILE.
.IF(ERROR)			;IGNORE ERRORS
.RENAME FOCALL.REL=FHOLD.REL	;RESTORE STANDARD FILE.
.IF(ERROR)			;IGNORE ERRORS
.DELETE FCLTMP.PRM,FCLTMP.BAK,FNEW1.FOR,FNEW1.REL
.DELETE FCLSET.MAC,FCLSET.REL,SIMFCL.MAC,SIMFCL.REL,FCLTMP.FCL
.DELETE D0AA.FCL,XACCESS.FCL,XSPEED.FCL
.DELETE FOCAL.MEM,FOCAL.DOC,FOCALH.LST,FOCALL.LST

.TECO FOCAL.RPT
*<A-1-^N;>ZJI
*FOCAL SUCCESSFUL
*EX
.DELETE FOCAL.BAK
.DIRECTORY/S/OPTION:FOCAL
.SUBMIT FOCAL/TAG:STATS/TIME:03:00/OUTPUT:0
.KJOB/F/Z:0
.IF(ERROR).GOTO HANG
;CLOSE THE LOG FILE AND RE-OPEN IT.
;TO COMPLETE TESTS, YOU SHOULD ALSO FOLLOW THROUGH ALL EXAMPLES IN THE
;MANUAL AT THE KEYBOARD TO ENSURE THAT THERE ARE NO DISCREPANCIES.

%ERR::
CHECK::
.NOERROR
.DEASSIGN
.VERSION
.CORE
.REENTER
*WRITE ALL;TYPE $
=^Z
%FIN::
FAILED::
.CHKPNT HANG
.DEASSIGN
.VERSION
.CORE
.TECO FOCAL.RPT
*<A-1-^N;>ZJI
*FOCAL FAILED
*HERE IS AN EXTRACT FROM THE LOG FILE:
*[ONE MOMENT PLEASE...]EX
.SUBMIT FOCAL/TAG:FAIL2/TIME:03:00/OUTPUT:0
.ERROR
.KJOB/F/Z:0
.IF(ERROR).GOTO HANG
;CLOSE THE LOG FILE AND RE-OPEN IT.
FAIL2::
.CHKPNT HANG
.R TECO
*0UAERFOCAL.LOG!LOOP!Y:SERR:"SOA'J:SCHECK:"S!A!0L.,ZKJ<S^ED^ED:^ED^ED:^ED^ED;%A>ODONE'<S^ED^ED:^ED^ED:^ED^ED;%A>^N"EOLOOP'!DONE!
*EBFOCAL.RPT
*Y<A-1-^N;>ZJ0KHXB
*ERFOCAL.LOGHKQA-10_^ED^ED:^ED^ED:^ED^ED0L0,.KGBEX
.KJOB/F/Z:0
.IF(ERROR).GOTO HANG

STATS::
.CHKPNT HANG
.TECO FOCAL.RPT
*<A-1-^N;>ZJI
*HERE ARE SOME STATISTICS OF THE TEST...
*EX
.R TECO
*ERFOCAL.LOG:_	RUNTIME "U^Z'8R.UJ0L.,.+8XIQJJ0,.KI
*
*TOTAL TEST LITEST CONCLUDED AT GII
*0,.XTHKEBFOCAL.RPT<A-1-^N;>ZJGTEX
.DELETE FOCAL.BAK
.KJOB/F/Z:0
.IF(ERROR).GOTO HANG
%FIN::
.KJOB/F/Z:0
.IF(ERROR).GOTO HANG
HANG::
.CHKPNT HANG
.K/F/Z:0
.IF(ERROR)	;WELL IT WAS WORTH TRYING.
.DIR FCLTMP.DIR=/OPTION:FOCAL/W
.TECO FCLTMP.DIR
*<A-1-^N;>S[S,0,.KIALL:.UFD[*,L.,ZKEX
.DIR [email protected]/OPTION:FOCAL/W
.DIR FCLTMP.BAK=FCLTMP.BAK/OPTION:FOCAL/W
.R TECO
*ERFCLTMP.BAK<A-1-^N;>S[R0,.KS].,ZKHXT-D@I/;0KK>/JDI<SHXMHKEBFCLTMP.DIR
*<A-1-^N;><S[1,1];-5D><STOTAL;0KK>MM<S,;S^N^ED;RI]=*.*GTKI
*-LI*.*[L>EX
HANG1::
.NOERROR
.DELETE FCLTMP.BAK
.PROTECT *.*
.PROTECT FCLTMP.DIR<577>
.RENAME @FCLTMP.DIR
.K/F/Z:0
.PROTECT FCLTMP.DIR
.TECO FCLTMP.DIR
.ERROR
*<A-1-^N;>KCEX
.IF(NOERROR).BACKTO HANG1
.DELETE FCLTMP.*
.IF(ERROR)
.K/F/Z:0
.IF(ERROR)
.MAKE HANG.MAC
*IHANG:	RESET
*	MOVEI	^^D6	;6 SECONDS SLEEP
*	SLEEP
*	INIT
*	SIXBIT "DSK"
*	0
*	JRST	HANG
*	SETZM	LKBLK+2
*	SETZM	LKBLK+3
*	HLLZS	LKBLK+1
*	LOOKUP	LKBLK
*	EXIT
*	JRST	HANG
*LKBLK:	SIXBIT	"HANG"
*	SIXBIT	"REL"
*	BLOCK	2
*	END	HANG
*EX
.IF(ERROR).BACKTO HANG
.EXECUTE HANG
.IF(ERROR).BACKTO HANG
.KJOB/F/Z:0
.IF(ERROR).BACKTO HANG
%FIN::
.KJOB/F/Z:0
.IF(ERROR).BACKTO HANG
%%%EWFCLSET.MAC
TITLE SETBIG - PROGRAM TO CHANGE THIS USERS SEARCH LIST
SUBTTL TO ENSURE MAXIMUM QUOTA FOR DISK FILES.

;THIS PROGRAM WILL SCAN ALL FILE STRUCTURES IN THE SYSTEM,
;	REJECTING THOSE WITH NO UFD FOR THIS JOB,
;	REJECTING THOSE WRITE-PROTECTED FOR THIS JOB,
;	REJECTING THOSE OFF-LINE OR DOWN,
;	TO FIND THE ONE WITH THE LARGEST AVAILABLE DISK SPACE FOR THIS JOB,
;	AND PLACE IT IN THE JOB'S SEARCH LIST AS THE FIRST ONE.
;	[ANY /NOCREATE WILL BE IGNORED AND CANCELLED.]

	SM=ST-1			;ACCUMULATOR JUST BELOW ST.
	ST=1			;NAME OF A DISK STRUCTURE.
	SP=ST+1			;ACCUMULATOR JUST ABOVE ST.
	AC=SP+1			;GENERAL-PURPOSE ACCUMULATOR.
	MQ=AC+1			;GENERAL-PURPOSE ACCUMULATOR.

	CH=1			;I/O CHANNEL.

	DC.OFL==1B1		;THE UNIT IS OFF-LINE.
	DC.HWP==1B2		;THE UNIT IS HARDWARE WRITE-PROTECTED.
	DC.SWP==1B3		;THE STR IS SOFTWARE WR-PROT 4 THIS JOB.
	DC.STD==1B8		;THE UNIT DOWN. (NOT STRICTLY CORRECT).
	DC.STN==1B7		;NO PACK MOUNTED (NOT STRICTLY CORRECT).
	DC.NNA==1B10		;THE UNIT IS IN A STR FOR NO NEW ENTERS.
	DC.AWL==1B11		;THE STR IS WRITE-LOCKED FOR ALL JOBS.
	.DCUFT==1		;OFFSET FOR LOGGED-IN QUOTA.
	.DCFCT==2		;OFFSET FOR TOTAL FCFS BLOCKS LEFT.
	.GTPPN==2		;TABLE NUMBER FOR PPN'S FOR GETTAB.

	OPDEF	GETTAB [CALLI 41]
	OPDEF	DSKCHR [CALLI 45]
	OPDEF	SYSSTR [CALLI 46]
	OPDEF	JOBSTR [CALLI 47]
	OPDEF	STRUUO [CALLI 50]

DEFINE ERROR (A),<
XWD 1000,[ASCIZ "?
?A
"]
>;END DEFINE ERROR (A)

LOC 41
	JRST	FAULT
RELOC

START:	RESET			;ENTER HERE FOR PROGRAM START.
	SETZM	BIGGEST		;CLEAR BIGGEST DISK SPACE SO FAR.
	SETZM	BIGSTR		;CLEAR STRUCTURE NAME FOR THAT SPACE.
	SETZM	ST		;CLEAR STRUCTURE NAME.
NXTSTR:	SYSSTR	ST,		;SYSSTR UUO - GET NEXT SYSTEM STRUCTURE.
	ERROR	SYSSTR UUO NOT IMPLEMENTED.
	JUMPE	ST,DUNSYS	;EXIT AT END OF SYSTEM LIST.
	MOVEM	ST,LOC		;STORE THE STRUCTURE NAME.
	MOVE	AC,[XWD 4,LOC]	;POINT TO THE LIST OF ARGUMENTS.
	DSKCHR	AC,
	ERROR	SYSSTR GAVE US A NON-DISK STRUCTURE!
	TDNE	AC,[DC.OFL!DC.HWP!DC.SWP!DC.STD!DC.STN!DC.NNA!DC.AWL]
	JRST	NXTSTR		;CAN'T USE THIS STRUCTURE.
	SETZB	SM,SP		;CLEAR I/O STATUS AND BUFFER ADDRESSES.
	OPEN	CH,SM		;SEE IF WE CAN INIT THE STR.
	ERROR	ONE OF THE SYSTEM DISK STRUCTURES CAN'T BE INITTED.
	HRROI	AC,.GTPPN	;SET UP TO ACQUIRE OUR OWN PPN.
	GETTAB	AC,
	ERROR	GETTAB .GTPPN FAILED
	MOVEM	AC,LKBLCK	;STORE PPN IN LOOKUP BLOCK.
	HRLZI	AC,(SIXBIT 'UFD')
	MOVEM	AC,LKBLCK+1	;LEFT HALF OF SECOND WORD IS SIXBIT 'UFD'.
	SETZB	AC,LKBLCK+2	;JUST FOR SAFETY.
	AOBJP	AC,.+1		;GET MFD PPN.
	MOVEM	AC,LKBLCK+3	;STORE TO LOOK IN MFD FOR OUR UFD.
	LOOKUP	CH,LKBLCK	;TRY TO FIND OUR OWN UFD ON THIS STR.
	JRST	NXTSTR		;NONE.	IT'S NO GOOD UNLESS WE HAVE A UFD.
	MOVE	AC,LOC+.DCUFT	;GET LOGGED-IN QUOTA FOR THIS UFD.
	CAML	AC,LOC+.DCFCT	;IS THAT MORE THAN BLOCKS AVAILABLE?
	MOVE	AC,LOC+.DCFCT	;YES! TAKE THE SMALLER VALUE.
	CAMG	AC,BIGGEST	;IS THE NEW ONE BIGGER?
	JRST	NXTSTR		;NO.
	MOVEM	AC,BIGGEST	;YES! STORE THE NEW VALUE.
	MOVEM	ST,BIGSTR	;ALSO STORE THE NAME OF THE STRUCTURE.
	JRST	NXTSTR		;NOW TRY THE NEXT STRUCTURE.

DUNSYS:	SKIPN	AC,BIGSTR	;DID WE FIND AT LEAST ONE STRUCTURE?
	ERROR	NO DISK STRUCTURE IS AVAILABLE TO THIS JOB.
	MOVEM	AC,LOC+1	;PLACE THAT STRUCTURE FIRST IN S.L.
	SETZM	LOC+2		;CLEAR RESERVED WORD.
	SETZM	LOC+3		;CLEAR STATUS TO ENABLE WRITING AND CREATION.
	SETOB	ST,LOC+4	;HERE TO OBTAIN THE JOB'S SEARCH LIST.
	MOVE	AC,[XWD 3,LOC+4];ARGUMENTS FOR JOBSTR UUO.
NXTJST:	MOVE	MQ,AC		;PRESERVE JOBSTR'S ACCUMULATOR.
	JOBSTR	MQ,
	ERROR	JOBSTR UUO FAILED.
	MOVE	ST,(AC)		;GET NAME OF NEXT STRUCTURE.
	CAME	ST,BIGSTR	;IS THIS THE STRUCTURE WE PUT UP AHEAD?
	ADDI	AC,3		;NO. MOVE TO NEXT ITEM IN THE LIST.
	MOVEM	ST,(AC)		;STORE  FOR NEXT JOBSTR CALL.
	AOJN	ST,NXTJST	;LOOP TO END OF JOB'S SEARCH LIST.
	MOVEM	ST,LOC		;SET STRUUO FUNCTION TO .FSSRC=0.
	SUBI	AC,LOC+3	;COMPUTE NUMBER OF WORDS IN ARGUMENT LIST.
	HRL	AC,AC		;PUT WORD-COUNT IN LEFT HALF.
	HRRI	AC,LOC		;POINT TO ARGUMENT LIST.
	STRUUO	AC,
	ERROR	STRUUO FAILED.
	EXIT

;UUO HANDLER...
FAULT:	OUTSTR	@40		;TYPE OUT THE ERROR MESSAGE.
	EXIT

BIGGES:	BLOCK	1		;BIGGEST DISK SPACE SO FAR.
BIGSTR:	BLOCK	1		;STRUCTURE CONTAINING BIGGEST SPACE.
LKBLCK:	BLOCK	4		;LOOKUP BLOCK.
LOC:	BLOCK	1+3*14		;DSKCHR BLOCK, JOBSTR BLOCK OR STRUUO BLOCK.
	END START
%%%EWFCLTMP.MAC
TITLE FCLTMP PROGRAM TO CREATE A PARAMETER FILE, CONTENTS DEPENDING ON CPU TYPE.
;FILE:	FCLTMP.PRM	PARAMETER FILE FOR FOCAL ASSEMBLY.
	AC=1
	MQ=2
	PC=3
	QC=4
	PT=5		;BYTE POINTER
	.GTCNF=11	;GETTAB CONFIGURATION TABLE.
	%CNVER=34	;MONITOR VERSION NUMBER.
START:	RESET
	INIT
	SIXBIT	"DSK"
	XWD	OBUF,0
	HALT	.
	ENTER	E2		;CREATE PARAMETER FILE.
	HALT	.
	JSP	PC,OUTASC
	ASCIZ	"IF1 <
WPV=2
.CPU="
	MOVEI	MQ,"1"		;DEFAULT VALUE FOR IF IT'S A PDP-6
	JFCL	17,.+1
	JRST	.+1
	JFCL	1,MON		;JUMP IF PDP-6
	AOS	MQ
	MOVNI	AC,1
	AOBJN	AC,.+1
	JUMPN	AC,MON		;JUMP IF KA-10
	AOS	MQ
	BLT	AC,0
	JUMPE	AC,MON		;JUMP IF KI-10
	AOS	MQ
MON:	JSP	QC,OUTONE	;OUTPUT ONE CHARACTER =C(MQ)
	MOVE	AC,[XWD %CNVER,.GTCNF]
	GETTAB	AC,		;FIND THE MONITOR'S VERSION NUMBER IN AC.
	JRST	FIN		;HERE IF IT HASN'T GOT ONE.
	MOVE	PT,[POINT 3,AC,17];SET TO PICK ONE DIGIT AT A TIME.
	JSP	PC,OUTASC	;CLOSE PREVIOUS LINE AND START NEW ONE.
	ASCIZ "
MONITOR="
	JSP	QC,OUTDIG	;FIRST DIGIT OF VERSION NUMBER.
	JSP	QC,OUTDIG	;SECOND. (E.G. 6)
	MOVEI	MQ,"."		;DECIMAL POINT.
	JSP	QC,OUTONE
	JSP	QC,OUTDIG	;HIGH ORDER OF MINOR VERSION NUMBER (E.G. 0)
	JSP	QC,OUTDIG	;LOW ORDER (E.G. 1)
FIN:	JSP	PC,OUTASC
	ASCIZ	"
>;END IF1
"
	EXIT
OBUF:	BLOCK 3
E2:	SIXBIT "FCLTMP"
	SIXBIT "PRM"
	BLOCK 2
OUTASC:	HRLI	PC,(POINT 7)
OUTAS1:	ILDB	MQ,PC		;PICK NEXT CHAR IN STRING.
	JUMPE	MQ,1(PC)	;RETURN TO IN-LINE CODE.
	MOVEI	QC,OUTAS1	;DUMMY UP A RETURN ADDRESS TO LOOP.
OUTONE:	SOSGE	OBUF+2		;DECREMENT & TEST COUNT
	OUT			;OUTPUT A BUFFER.
	SKIPA			;O.K. OUTPUT OR NO OUTPUT.
	HALT	.
	IDPB	MQ,OBUF+1	;PUT CHAR IN BUFFER.
	JRST	(QC)		;RETURN.
;HERE TO SEND AN OCTAL DIGIT FROM WHERE PT POINTS BELOW.
OUTDIG:	ILDB	MQ,PT		;GET 3 BITS.
	ADDI	MQ,"0"		;MAKE IT A DIGIT.
	JRST	OUTONE	;SEND IT.
	END	START
%%%EWSIMFCL.MAC
TITLE SIMFCL PROGRAM TO MEASURE THE EXCERCISE OF LOCATIONS OF FCL331.MAC
SUBTTL	PARAMETERS, DEFINITIONS AND INITIALIZATION.
;A CODE TABLE IS FILLED WITH JSR INSTRUCTIONS.
;THAT TABLE IS THEN USED FOR THE SIMULATION, BY EXECUTING EACH JSR
;IN TURN.
;THE JSR IS REPLACED BY REAL CODE IF:
;	1. THE CODE IS FETCHED, AND
;	2. THE INSTRUCTION IS NOT A PC-SENSITIVE ONE, AND
;	3. IT DOES NOT REFERENCE A VARIABLE HIGH SEGMENT LOCATION.
;THE JSR IS REPLACED BY A SIMULATION INSTRUCTION IF:
;	1. THE ABOVE CONDITIONS HOLD, AND
;	2. IT IS A LUUO OR A JUMP INSTRUCTION.
	CA==13		;CUSTOMER ACCUMULATOR.
DEFINE HALT (A) <
JRST [
OUTSTR [ASCIZ "
?A
"]
JRST	4,.
]
>;END DEFINE HALT (A)
BTYPE==1B1		;THIS IS A BYTE INSTRUCTION OR XCT.
STYPE==1B2		;TTCALL ONLY.
MTYPE==1B3		;THIS INSTRUCTION WILL REFERENCE MEMORY.
DTYPE==1B4		;THIS INSTRUCTION WILL REFERENCE MEM+1
LTYPE==1B5		;THIS INSTRUCTION HAS A 4-WORD ARGUMENT BLOCK.
JTYPE==1B6		;THIS INSTRUCTION MAY JUMP.
PTYPE==1B7		;THIS INSTRUCTION IS PC-SENSITIVE.
ILLTYPE==1B8		;ILLEGAL INSTRUCTION IF EFFECTIVE ADDRESS IS IN HISEG.
COD:	BLOCK	4000		;THE JSR TABLE.
USE:	BLOCK	4000		;BIT TABLE OF USAGE.; AN IMAGE OF 400000-404000.

OPTAB:			;TABLE OF BITS ILLUSTRATING OP CODES.
REPEAT 40,<Z>		;LUUO'S
MTYPE			;CALL
PTYPE!ILLTYPE		;INIT		NOTE: THIS IS IMPERFECT!
REPEAT 5,<ILLTYPE>	;UUO'S 42-46
ILLTYPE			;CALLI		NOTE: THIS IS IMPERFECT!
MTYPE!DTYPE!ILLTYPE	;OPEN		NOTE: THIS IS IMPERFECT!
STYPE			;TTCALL
REPEAT 3,<ILLTYPE>	;UUO'S 52-54
MTYPE!DTYPE!LTYPE	;RENAME
ILLTYPE			;IN
ILLTYPE			;OUT
Z			;SETSTS
Z			;STATO
MTYPE			;GETSTS
Z			;STATZ
Z			;INBUF
Z			;OUTBUF
ILLTYPE			;INPUT
ILLTYPE			;OUTPUT
Z			;CLOSE
Z			;RELEASE
Z			;MTAPE
MTYPE!ILLTYPE		;UGETF
Z			;USETI
Z			;USETO
MTYPE!DTYPE!LTYPE	;LOOKUP
MTYPE!DTYPE!LTYPE	;ENTER
ILLTYPE			;UJEN
REPEAT 7,<ILLTYPE>	;UNDEFINED UUO'S.
REPEAT 4,<DTYPE!MTYPE>	;DFAD ETC
REPEAT 4,<ILLTYP>	;UNDEFINED
DTYPE!MTYPE		;DMOVE
DTYPE!MTYPE		;DMOVN
MTYPE			;FIX
ILLTYP
DTYPE!MTYPE
DTYPE!MTYPE
REPEAT 4,<MTYPE>	;FIXR ETC
Z
MTYPE			;IBP
REPEAT 4,<BTYPE!MTYPE>	;BYTE POINTERS
REPEAT 4,<
REPEAT 5,<MTYPE>
Z
MTYPE
MTYPE
>;END REPEAT 4		;FLOATING POINT.
REPEAT 8,<
MTYPE
Z
MTYPE
MTYPE
>;END REPEAT 8		;MOVES, FIXED POINT MUL,DIV.
Z
Z
Z
JTYPE
Z
Z
Z
ILLTYPE
MTYPE		;EXCH
ILLTYPE!MTYPE	;BLT
JTYPE
JTYPE
JTYPE
JTYPE
BTYPE!MTYPE		;XCT
ILLTYPE	;MAP
JTYPE!PTYPE		;PUSHJ
MTYPE
MTYPE
Z
REPEAT 3,<JTYPE!PTYPE>	;JSR,JSP,JSA
JTYPE
REPEAT 2,<
MTYPE
Z
MTYPE
MTYPE
>;END REPEAT 2	;ADD,SUB
REPEAT 8,<Z>
REPEAT 8,<MTYPE>
REPEAT 3,<
REPEAT 8,<JTYPE>
REPEAT 8,<MTYPE>
>;END REPEAT 3	;JUMP,SKIP,AOJ,AOS,SOJ,SOS
REPEAT 3,<
Z
Z
MTYPE
MTYPE
REPEAT 4,<
MTYPE
Z
MTYPE
MTYPE
>;END REPEAT 4		;AND,ANDCA,SETM,ANDCM
>;END REPEAT 3	;RIGHT UP TO ORCBB
Z
Z
MTYPE
MTYPE
REPEAT 20,<
MTYPE
Z
MTYPE
MTYPE
>;END REPEAT 20		;HALF WORDS.
REPEAT 4,<
REPEAT 8,<Z>
REPEAT 8,<MTYPE>
>;END REPEAT 4		;TEST INSTRUCTIONS.
REPEAT 100,<ILLTYPE>
TTCTAB:			;TABLE OF BITS FOR TTCALL UUO.
REPEAT 3,<MTYPE>	;INCHRW,OUTCHR,INCHRS
STYPE!MTYPE		;OUTSTR
REPEAT 4,<MTYPE>	;INCHWL,INCHSL,GETLCH,SETLCH
REPEAT 5,<Z>		;RESCAN,CLRBFI,CLRBFO,SKPINC,SKPINL
MTYPE			;IONEOU
REPEAT 2,<Z>		;RESERVED FOR EXPANSION.
BEGIN:	RESET
	MOVE	CA,41		;MODIFY THE UUO TRAP LOCATION.
	SUBI	CA,400000
	ADDI	CA,COD		;GO TO THE SIMULATED HANDLER.
	MOVEM	CA,41
	MOVEI	CA,STRP.H	;PRE-SET TO HANDLE OUR OWN TRAPS.
	MOVEM	CA,.JBAPR##
	MOVE	CA,[JSR	DECODE]
	MOVEM	CA,COD		;SET TO FILL SIMULATION SPACE WITH TRAPS.
	MOVE	CA,[XWD COD,COD+1]
	BLT	CA,COD+3777	;FILL HIGH SEGMENT WITH TRAPS.
	SKIPA	CA,.+1		;PICK UP ENTRY TO SIMULATOR
	JRST	COD+10		;CORRESPONDS TO ONCE IMAGE.
	MOVEM	CA,FNEWEX##	;GO THERE WHEN DONE FNEWGO.
	JRST	FNEWGO##	;GO AND FIND FOCAL.SHR

;ROUTINE TO RETURN EITHER:
;1.	THE NUMBER OF REFERENCES IN THE USAGE TABLE [FNEW(-1)], OR
;2.	THE POSSIBLE SCORE, [CALLED BY FNEW(0)], OR
;3.	THE RELATIVE LOCATION OF THE NEXT UNREFERENCED LOCATION AFTER
;		THE ONE GIVEN BY THE ARGUMENT [POSITIVE ARGUMENT].
FNEW::	HLRZ	0,400000+.JBHRN##	;GET SIZE OF HIGH SEGMENT.
	SUBI	0,10		;SUBTRACT VESTIGIAL JOB DATA AREA.
	SKIPN	1,@0(16)	;WAS THE ARGUMENT ZERO?
	JRST	FNEW2		;YES.
	JUMPL	1,FNEW1		;REQUIRE NEXT RELATIVE LOCATION?
	FIXR	1,1		;OBTAIN FIXED-POINT ANSWER.
	ANDI	1,7777		;YES.	RESTRICT ARGUMENT TO 4K WORDS.
	SKIPGE	USE+1(1)	;HAS THE NEXT LOCATION BEEN REFERENCED?
	AOJA	1,.-1		;YES.
	MOVE	0,1
	AOJA	0,FNEW2		;POINT TO THE NEXT RELATIVE LOCATION.
FNEW1:	MOVE	1,[-4000,,USE]
	SETZM	0			;COUNT IN HERE.
	SKIPE	(1)
	AOS	0
	AOBJN	1,.-2
FNEW2:	FSC	0,233		;FLOAT THE ANSWER.
	SETZM	1		;MAKE IT DOUBLE-PRECISION.
	POPJ	17,		;RETURN.
SUBTTL INSTRUCTION SIMULATOR SECTION 1:	EFFECTIVE ADDRESS CALCULATION.
DECODE:	0			;COME HERE FROM SIMULATION SPACE.
	MOVE	CA,DECODE	;SAVE PC OF TRAP.
	SUBI	CA,COD
	ADDI	CA,400000	;POINT TO THE HIGH SEGMENT.
	MOVEM	CA,SIMPC1	;SAVE THE SIMULATION OF THE PC.
	MOVEM	CA,SIMPC
	SOS	CA,SIMPC	;POINT TO THE INSTRUCTION BEING SIMULATED.
	SOS	USE-400000(CA)	;MARK THE USAGE.
	MOVE	CA,@SIMPC	;GET THE INSTRUCTION BEING SIMULATED.
	MOVEM	CA,LASTEF	;SAVE FOR JRSTF FLAGS.
	TLZ	CA,777740	;CLEAR SPACE FOR THE TYPE BITS.
	MOVEM	CA,EFFADD	;SAVE FOR THE EFFECTIVE ADDRESS CALCULATION.
	LDB	CA,PSIMOP	;GET OP CODE.
	HLLZ	CA,OPTAB(CA)	;GET NATURE OF THE OPCODE.
	IORB	CA,EFFADD	;GET EFFECTIVE ADDRESS IN CA.
	SETZM	VARIAB		;MARK EFFECTIVE ADDRESS FIXED.
MOREFF:	LDB	CA,[POINT 4,EFFADD,17]	;GET INDEX FIELD.
	JUMPE	CA,EFF1		;SKIP ALL THIS IF NO INDEX FIELD.
	HLLOS	VARIAB		;MARK VARIABLE EFFECTIVE ADDRESS.
	HRR	CA,(CA)		;GET CONTENTS OF INDEX REGISTER.
	ADD	CA,EFFADD	;COMPUTE EFFECTIVE ADDRESS.
	HRRM	CA,EFFADD	;SAVE RESULT.
EFF1:	MOVE	CA,EFFADD
	TLZ	CA,17		;CLEAR INDEX FIELD.
	TLZN	CA,20		;INDIRECT BIT ON?
	TLZE	CA,(BTYPE)	;NO.	BYTE POINTER?
	SKIPA
	JRST	MARK		;NO.	COMPUTATION IS COMPLETE.
	MOVEM	CA,EFFADD	;SAVE THE BTYPE BIT.
	TRNN	CA,400000	;YES.	INDIRECT A HIGH SEGMENT ADDRESS?
	HLLOS	VARIAB		;NO.	THAT MEANS EFF ADD IS VARIABLE.
	TRNN	CA,400000	;YES.	INDIRECT A HIGH SEGMENT ADDRESS?
	JRST	EFF3		;NO.
	SKIPE	VARIAB		;IS EFF ADD VARIABLE?
	SETOM	VARIAB		;YES.	VARIABLE HIGH SEGMENT ADDRESS.
	SOS	USE-400000(CA)	;MARK USAGE.
EFF3:	MOVE	CA,(CA)		;GET NEW CODE.
	MOVEM	CA,LASTEF	;SAVE FOR JRSTF FLAGS.
	DPB	CA,[POINT 23,EFFADD,35]	;SAVE NEXT ADDRESS.
	JRST	MOREFF		;LOOP FOR MORE EFFECTIVE ADDRESS CALCULATION.
SUBTTL INSTRUCTION SIMULATOR SECTION 2:	MARK THE DATA FETCH REFERENCES.
;AT THIS STAGE CA CONTAINS ...
;BIT	0	0	UNUSED
;BITS	2-8		STYPE,MTYPE,DTYPE,LTYPE,JTYPE,PTYPE,ILLTYPE
;BITS	9-12	0	UNUSED
;BITS 13-17	0
;BITS 18-35		EFF  ADD OF SIMULATED INSTR. OR BYTE PTR IF ANY.
MARK:	TLZN	CA,(STYPE)	;TTCALL?
	JRST	MARK2		;NO.
	MOVEM	CA,EFFADD	;STORE WITH ZERO I AND X FIELDS.
	LDB	CA,PSOPAC	;GET OP CODE AND AC.
	HLLZ	CA,TTCTAB-1220(CA)	;GET NEW NATURE.
	HRR	CA,EFFADD	;PRESERVE ADDRESS.
	IORB	CA,EFFADD	;SAVE IT.
	TLZE	CA,(STYPE)	;OUTSTR?
	TRNN	CA,400000	;IS EFFECTIVE ADDRESS IN LO SEG?
	JRST	MARK2		;NO.
	HRLI	CA,(POINT 7,,)	;MAKE A BYTE POINTER.
	MOVEM	CA,BYTADD	;SAVE THE POINTER.
MARK1:	IBP	BYTADD		;POINT TO NEXT BYTE.
	MOVE	CA,BYTADD	;GET THE BYTE POINTER.
	SOS	USE-400000(CA)	;FLAG THE REFERENCE.
	LDB	CA,BYTADD	;GET THE NEXT BYTE.
	JUMPN	CA,MARK1	;LOOP UNTIL NUL BYTE.
	MOVE	CA,EFFADD
MARK2:	MOVEM	CA,EFFADD
	TRNN	CA,400000	;IS EFFECTIVE ADDRESS IN LO SEG?
	JRST	CRESIM		;IGNORE MTYPE IF LO SEG EFFECTIVE ADDR.
	TLNE	CA,(ILLTYPE)
	HALT	ILLEGAL INSTRUCTION.
	TLNN	CA,(MTYPE)	;WILL IT REFERENCE MEMORY?
	JRST	CRESIM		;NO.
	SOS	USE-400000(CA)	;MARK MEMORY REFERENCE.
	SKIPE	VARIAB		;EFF ADD VARIABLE?
	SETOM	VARIAB		;YES. AND REFERENCING HIGH SEGMENT.
	TLNE	CA,(DTYPE)	;DOUBLE PRECISION?
	SOS	USE-400000+1(CA)	;MARK E+1.
	TLNE	CA,(LTYPE)	;LOOKUP ENTER OR RENAME?
	SOS	USE-400000+2(CA)	;MARK E+2
	TLNE	CA,(LTYPE)	;LOOKUP ENTER OR RENAME?
	SOS	USE-400000+3(CA)	;ASSUME SHORT LOOKUP.
SUBTTL INSTRUCTION SIMULATOR SECTION 3:	CREATE THE SIMULATION INSTRUCTION.
CRESIM:	MOVE	CA,@SIMPC	;GET THE INSTRUCTION WE'RE SIMULATING.
	MOVEM	CA,SIMINSTR	;SAVE AS INSTRUCTION TO BE EXECUTED.
	MOVE	CA,EFFADD	;GET SOME FLAG BITS.
	TLNN	CA,(JTYPE)	;IS THIS A JUMP INSTRUCTION?
	JRST	CRSIM1		;NO.
;	LDB	CA,PSOPAC	;PICK OP CODE AND AC OF SIMULATED INSTR.
;	CAIN	CA,<JFCL>_-27	;IS IT JFCL 0?
;	JRST	CRSIM1		;YES.
;	MOVE	CA,EFFADD
;	TRZN	CA,400000	;JUMP TO LOW SEGMENT?
;	HALT	JUMP TO LOW SEGMENT.
	TRZE	CA,400000	;JUMP TO LOW SEGMENT?
	ADDI	CA,COD
	HLL	CA,SIMINSTR	;GET REST OF THE INSTRUCTION.
	TLZ	CA,37		;REMOVE H AND X FIELDS.
	MOVEM	CA,SIMINSTR	;SAVE.
	SKIPE	VARIAB		;JUMP TO VARIABLE ADDRESS?
	SETOM	VARIAB		;YES.	SIMULATE EVERY TIME.
	TLC	CA,(JRSTF)	;CHECK AGAINST JRSTF.
	TLNE	CA,777777	;IS IT JRSTF?
	JRST	CRSIM1		;NO.
	HLL	CA,LASTEF	;YES.	GET FLAGS.
	JRSTF	@CA		;RESTORE FLAGS AND JUMP.
CRSIM1:	TLNE	CA,(MTYPE)	;IS THIS A MEMORY REFERENCE INSTRUCTION?
	TRNE	CA,777600	;YES.	LOW SEGMENT JOB DATA AREA?
	JRST	CRSIM3		;NO.
	HRRZS	CA		;GET THE ACTUAL MEMORY REFERENCE.
	CAIE	CA,.JBREN##	;IS IT REFERENCING .JBREN?
	CAIN	CA,.JBSA##	;	OR .JBSA?
	JRST	CRSIM2		;YES.
	CAIE	CA,.JBAPR##	;IS IT A SET-UP?
	JRST	CRSIM3		;NO.
	MOVEI	CA,SIMAPR	;YES.	MAKE IT USE A DIFFERENT LOCATION.
	DPB	CA,PINS22	;CHANGE THE SIMULATION IN ACCORDANCE.
	JRST	CRSIM3
CRSIM2:	;HERE IF THE INSTRUCTION REFERENCES .JBSA OR .JBREN.
	MOVE	CA,SIMINSTR	;GET THE INSTRUCTION.
	TLC	CA,500000	;CHECK IF IT'S A HALF-WORD INSTRUCTION
	TLNE	CA,700000	;IS IT?
	HALT	NON-HALF-WORD INSTRUCTION REFERENCES .JBSA OR .JBREN
	TLNE	CA,040000	;IS IT STORING IN RIGHT HALF?
	TLNN	CA,002000	;IS IT STORING IN EFFECTIVE ADDRESS?
	JRST	CRSIM3		;NO.
	TLNN	CA,004000	;FROM RIGHT HALF?
	TLNE	CA,001000	;YES.	M-MODE?
	HALT	ILLEGAL STORE INTO .JBSA OR .JBREN
	LDB	CA,PSIMAC	;O.K.	GET THE SIMULATED ACCUMULATOR.
	HRL	CA,(CA)		;GET THE DATA.
	JUMPGE	CA,.-3		;ENSURE WE KNOW WHAT WE'RE DOING.
	ADD	CA,[XWD COD-400000,0]
	HLRM	CA,(CA)		;STORE THE DATA.
CRSIM3:	LDB	CA,PSIMOP	;GET THE OP CODE.
	CAIG	CA,37
	JRST	XLUUO
	CAIN	CA,<CALLI>_-33
	JRST	XCALLI
	CAIN	CA,<PUSHJ>_-33
	JRST	XPUSHJ
	CAIN	CA,<POPJ>_-33
	JRST	XPOPJ
	CAIN	CA,<JSP>_-33
	JRST	XJSP
	HLL	CA,OPTAB(CA)	;GET NATURE OF OP CODE.
	TLNE	CA,(BTYPE)	;IS IT A BYTE INSTRUCTION?
	SETOM	VARIAB		;THERE IS ONE THAT SWITCHES EFF ADD FROM LO TO HI SEG.
	TLNN	CA,(PTYPE)	;PC-SENSITIVE INSTRUCTION?
	JRST	SIMUL		;NO.
	HALT	SIMULATION FAILS ON UNEXPECTED PC-SENSITIVE INSTR.
XLUUO:	HLRO	CA,@SIMPC	;GET THE INDIRECT BIT OF THE UUO ITSELF.
	TRNN	CA,(@)		;IS THE INDIRECT BIT ON?
	SETZB	CA,VARIAB	;NO.	NO NEED TO CONTINUE SIMULATION.
	MOVE	CA,SIMPC	;GET THE ADDRESS OF THE ACTUAL UUO.
	HRLI	CA,(JRST)	;PREPARE TO EXECUTE THE UUO FROM THE HIGH SEG
	MOVEM	CA,SIMINSTR
	JRST	SIMUL
XCALLI:	HRRZ	CA,EFFADD	;GET THE NUMBER OF THE CALLI.
	CAIG	CA,115		;IGNORE ALL CALLI'S LESS THAN TRMOP.
	JRST	SIMUL
	LDB	CA,PSIMAC	;GET THE SIMULATED INSTRUCTION'S AC.
	MOVE	CA,(CA)		;GET THE CONTENTS OF THAT AC.
	TRZN	CA,400000	;DOES IT POINT TO THE HIGH SEGMENT?
	JRST	SIMUL		;NO.
	TLC	CA,777777	;MAKE THE LENGTH NEGATIVE.
	SOS	USE(CA)		;MARK A DATA REFERENCE.
	AOBJN	CA,.-1
	JRST	SIMUL
SUBTTL INSTRUCTION SIMULATOR SECTION 4:	STORE THE SIMINSTR AND DO IT.
SIMUL:	SKIPGE	VARIAB		;NO. VARIABLE HIGH SEGMENT REFERENCE?
	JRST	SIMUL4		;YES. CAREFUL SIMULATION NEEDED.
	SOS	DECODE		;POINT TO THE SPOT IN CODE TABLE.
	MOVE	CA,SIMINSTR	;YES.	GET MODIFIED INSTRUCTION.
	MOVEM	CA,@DECODE
	JRST	@DECODE
SIMUL4:	XCT	SIMINSTR
	JRST	@DECODE		;THEN CONTINUE.
	AOS	DECODE		;UNLESS THE INSTRUCTION SKIPPED.
	JRST	@DECODE

XPOPJ:	HLRZ	CA,SIMINSTR	;GET INSTR BEING SIMULATED.
	CAIE	CA,(POPJ 17,)	;PRESUMABLY FOCAL ALWAYS USES 17.
	HALT	POPJ WITH NON-STANDARD ARGUMENT.
	MOVE	CA,[JRST DOPOPJ]
	MOVEM	CA,SIMINSTRUCTION
	JRST	SIMUL		;STORE A SHORT CUT.
DOPOPJ:	POP	17,CA		;REMOVE ONE FROM THE STACK.
	TRZE	CA,400000	;RELATIVE TO BEGINNING OF CODE.
	ADDI	CA,COD		;SIMULATED CODE.
	JRST	(CA)
XPUSHJ:	MOVE	CA,SIMINSTR	;GET INSTR BEING SIMULATED.
	TLC	CA,(<PUSHJ>^!<PUSH>)
	JRST	XJRST
XJSP:	MOVE	CA,SIMINSTR	;GET INSTR BEING SIMULATED.
	TLC	CA,(<JSP>^!<MOVE>)
XJRST:	TLZ	CA,37		;REMOVE I AND X FIELDS.
	HRRI	CA,SIMPC1	;POINT TO THE CURRENT SIMULATED PC.
	XCT	CA
	JRST	@SIMINSTRUCTION

STRP.H:	HRRE	CA,.JBTPC##	;WHERE DID THE TRAP COME FROM?
	CAIG	CA,COD+4000	;ABOVE SIMULATED CODE?
	CAIG	CA,COD		;NO. BELOW SIMULATED CODE?
	JRST	STRPH1		;YES.	AVOID SIMULATION.
	SUBI	CA,COD-400000	;NO.	PRETEND THAT WE DID.
	HRRM	CA,.JBTPC##	;PUT A SIMULATION THERE.
STRPH1:	SKIPN	CA,SIMAPR
	HALT	A TRAP OCCURRED WITHOUT .JBAPR SET UP
	TRZE	CA,400000	;DID HE THINK IT WAS THE HIGH SEGMENT?
	ADDI	CA,COD		;YES.	THAT'S O.K. LET HIM THINK THAT.
	JRST	@CA

PINS22:	POINT	23,SIMINS,35	;COVER I X AND E FIELDS.
PSIMOP:	POINT	9,@SIMPC,8	;THE OP CODE OF THE SIMULATED INSTRUCTION.
PSIMAC:	POINT	4,@SIMPC,12	;THE AC OF THE SIMULATED INSTRUCTION.
PSOPAC:	POINT	13,@SIMPC,12	;THE OP CODE AND AC OF THE SIMULATED INSTR.
VARIAB:	BLOCK	1	;ZERO MEANS EFFECTIVE ADDRESS IS CONSTANT.
LASTEF:	BLOCK	1	;THE LAST ADDRESS REFERENCED DURING EFF ADD CALC.
EFFADD:	BLOCK	1	;BUILD EFFECTIVE ADDRESS OF THE SIMULATED INSTR.
			;BITS 0-12 SHOW THE TYPE OF INSTRUCTION.
BYTADD:	BLOCK	1	;TEMPORARY STORAGE.
SIMAPR:	BLOCK	1	;PLACE TO SIMULATE CONTENTS OF .JBAPR
			;NON-ZERO MEANS EFF ADD IS VARIABLE.
			;NEGATIVE MEANS A VARIABLE HIGH SEG REFERENCE IS INVOLVED.
SIMPC:	BLOCK	1	;POINT TO THE INSTRUCTION BEING SIMULATED.
SIMPC1:	BLOCK	1	;POINT TO THE INSTRUCTION AFTER THE ONE BEING SIMULATED.
SIMINS:	BLOCK	1	;MAKE THE INSTRUCTION WHICH WE SIMULATE.
	END	BEGIN
%%%EWD0AA.FCL
C FOCAL INSTRUCTION TEST D0AA
C THIS TEST WILL CONSIST OF SEVERAL PAGES EACH WITH DIFFERENT TESTS.
C PAGE 1
TYPE %8.04;SET DUMMY=FOCAL(1,-1)+FOCAL(2,-1)+FOCAL(3,-1)

C -TEST CORE EXPANSION FOR PROGRAM TEXT.
01.01	C - LINE ONE POINT OH ONE.
01.02	C - LINE ONE POINT OH TWO.
01.04	QUIT TO AVOID ERROR.
01.03	CHECK THAT THIS PRESERVES THE ABOVE LINE.
01.05	Z- SHOULD NEVER COME HERE.
GO
1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.30 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.40 1.41 1.42 1.43 1.44
GO
C -TEST CORE EXPANSION FOR VARIABLES.
FOR I=1,512;SET X(I)=I
1.01 IF(X(I)-I) 1.9,1.2,1.9
1.2 RETURN
1.9 OPERATE OUTPUT TTY: ;TYPE "?",!, "?CORE EXPANSION FAILURE FOR "?I?!;Z
FOR I=1,512;DO 1.01
C - TEST CORE EXPANSION FOR DISK INITIALIZATION.
ERASE ALL
01.01	IF (FOCAL(102)-2) 1.02,1.1,1.8;CHECK OUTPUT CHANNEL.
01.02	IF (-FABS(FOCAL(102)))1.8;X FOCAL(9,9);C SET FLAG 9 FOR "TTY: OUTPUT"
01.10	IF (FOCAL(103)-3) 1.9,1.2,1.9;CHECK INPUT CHANNEL.
01.80	Z - D0AA WORKS CORRECTLY ONLY FOR OUTPUT ON CHANNEL 2 (FILE) OR CHANNEL 0 (TTY:).
01.90	Z - D0AA WORKS CORRECTLY ONLY FOR INPUT ON CHANNEL 3.
01.20	IF (FOCAL(36)-FOCAL(80)+FOCAL(174)-63) 1.3;COUNT SPACE AND TRY FOR 100 OCTAL WORDS.
01.21	S I=I+1,X(I)=I;G 1.2 ;CONTINUE FILLING CORE UNTIL 100 OCTAL OR SO WORDS REMAIN.
01.30	OPERATE OUTPUT DSK:CH4TMP/4
01.31	IF (FOCAL(36)-FOCAL(80)+FOCAL(174)-191) 1.4 ;COUNT SPACE AND TRY FOR 300 OCTAL WORDS.
01.32	S I=I+1,X(I)=I;G 1.31
01.40	OPERATE OUTPUT DSK:CH5TMP/5
01.41	FOR I=1,3200; X FCHR(I)
01.42	O O TTY:/4;O O TTY:/5;TYPE /0;IF(-FOCAL(9,9))1.43;X FOCAL(9,-1);TYPE /2;C - RELEASE I/O CHANNELS.
01.43	O I DSK:CH5TMP.LST/4
01.44	FOR J=1,3200/128;FOR I=1,127;S Q=FCHR(-1);IF -FABS(I-Q) 1.7
01.45	IF FCHR(-1)+1 ,1.47;Z - END-OF-FILE FCHR FAILURE.
01.47	O I TTY:/4;ASK/3;L D CH4TMP.LST;L D CH5TMP.LST;GOTO 2.01
01.70	Z - ERROR IN DISK I/O.

02.01	C - TEST SYMBOL TABLE STABILITY.
02.05	ERASE
02.10	IF FOCAL(36)-FOCAL(176),2.2;Z - .JBREL NOT EQUAL SYMTBH
02.20	IF FOCAL(174)-FOCAL(175),2.3;Z - SYMTBL NOT EQUAL SYMTBC
02.30	RETURN

DO ALL
ERASE

X (-1)^.5+(-1)^.4+(-1)^.6+(-1)^.500000000001+(-1)^.499999999999
C PAGE 2 - LOGIC TESTS
ERASE ALL
1.01	Z - CHECK THIS GETS OVERWRITTEN.
1.06	Z - CHECK THIS GETS OVERWRITTEN.
1.01	C - LOGIC TEST.
1.02	GO TO 1.06;CHECK UPPER CASE "T".
1.04	Z
1.06	GO tO 1.10;CHECK LOWER CASE "t".
1.08	Z
1.10	gOTO 1.14;CHECK LOWER CASE "g".
1.12	Z
1.14	GZAZBZAZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZZ 1.18
1.16	Z;CHECK UPPER CASE LETTERS ARE ALPHANUMERIC.
1.18	gzazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzz 1.22
1.20	Z;CHECK LOWER CASE LETTERS ARE ALPHANUMERIC.
1.22	S B01=B23,B45=B67,B89=0;G 1.26;CHECK NUMERICS ARE ALPHANUMERIC.
1.24	Z
1.26	GO	TO	1.30;CHECK TAB SEPARATORS.
1.28	Z
1.30	CHECK SUPERFLUOUS SPACES.
1.32	E 1.01 , 1.01 
1.34	GO TO 1.38 ;
1.36	Z ;
1.38	IF ( -1 ) 1.42 , 1.40 , 1.40 ;
1.40	Z
1.42	IF ( -1 + 0 ) 1.46 ;Z ;Z
1.44	Z
1.46	IF ( +0 ) 1.48 , 1.50 , 1.48 Z
1.48	Z - MODIFY COMMAND CHECKOUT - PLEASE IGNORE ...
1.50	IF (	+1	+0	)	1.52	,	1.52	,	1.54	Z
1.52	NOW IS THE TIME FOR ALL GOOD MEN TO COME TO THE AID OF THE PARTY.
1.54	IF	(+1)1.56,1.56	;GO	TO	1.58	Z
1.56	Z - THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.
1.58	LIBRA SAVE TMPTMP.TMP 1.01 , 1.05 , 1.03	;	LIBRA	CALL	TMPTMP.TMP	; L D TMPTMP.TMP 
1.59	IF (-FABS(FOCAL(103)-3)) 1.60;SET I=FOCAL(9,9);X FOCAL(9,I);IF (FABS(FOCAL(102)+I-1)) ,1.61
1.60	Z - LIBRA CALL OR SAVE DESTROYS INCHN OR OUTCHN.
1.61	OPERATE OUTPUT DSK:TMPTMP.TMP/4
1.62	MODIFY 1.48 ; MODIFY 1.52 , 1.56 
1.64	FOR I=1;TYPE I!
1.66	FOR I=2,10;TYPE I!
1.68	FOR I=1,.2,3;TYPE I!
1.70	FOR I=1,5;TYPE !;FOR J=1,5;TYPE I*J,"	"
1.72	SET X = 1 + 2 - 3 / 4 * 5 ^ 6 ** 7 ;
1.73	TYPE %8.04 /4 %E16.10 /4 ;
1.74	OPERATE OUTPUT TTY:/4;TYPE/0;IF(-FOCAL(9,9))1.75;X FOCAL(9,-1);TYPE /2
1.75	L D TMPTMP.TMP
1.76	S X=1 , Y = 2
1.78	WRITE 3 , 03.00 , 3. , 03 , 03. , 03.0 , 3.0 , 3.00 ;
1.80	ASK X , Y	,	Z	;
1.82	S V=2,Y=FOCAL(1,0),Z(V)=1
1.84	S W=FOCAL( 1 , Z ( V ) ) ; IF( 1+W ) 1.86,1.88,1.86
1.86	Z
1.88	CONTINUE
1.90	CONTINUE
1.92	S XX(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)=1264
1.94	I(XX(7,7,7,7,7,7)-XX(3,3,3,3,3,3,3,3,3)) 1.96,1.98,1.96
1.96	Z - MULTIPLE SUBSCRIPTING FAILS.
1.98	I(XX(63,63,63) - 1264 ) 1.96,2.01,1.96
2.01	S XX(1,1)=XX(2^18-1)
2.02	I(XX(1+2^9)-1264) 1.96,2.04,1.96
2.04	S PI=4*ATAN(1)
2.06	IF(PI*2-PI-PI) 2.08,2.10,2.08
2.08	Z - ROUNDING ERROR IN MULTIPLY-BY-2.
2.10	CONTINUE
2.12	IF 5=5 ;GO TO 2.16
2.14	Z - LOGICAL IF FAILED.
2.16	IF 5#5 ;Z - LOGICAL IF FAILED.
2.18	IF 5=4	;Z - LOGICAL IF FAILED.
2.20	IF 5#4	;GO TO 2.24
2.22	Z - LOGICAL IF FAILED.
2.24	IF 5 .EQ. 5 ;GO TO 2.28
2.26	Z - LOGICAL IF FAILED.
2.28	IF 5 .NE. 5 ;Z - LOGICAL IF FAILED.
2.30	IF 5 .EQ.4 ;Z - LOGICAL IF FAILED.
2.32	IF 5 .NE. 4 ;GO TO 2.36
2.34	Z - LOGICAL IF FAILED.
2.36	I 5 .EQ.5;I 5 .NE.4;I 5=5;I 5#4;I 5 .LE.5;I 5 .LE.6;I 5 .LT.6;I 5 .GE.5;I 5 .GE.4;I 5 .GT.4; GO TO 2.40
2.38	Z - LOGICAL IF FAILED.
2.40	IF 5 .LE. 4 ;Z - LOGICAL IF FAILED.
2.42	IF 5 .LT. 4 ;Z - LOGICAL IF FAILED.
2.44	IF 5 .LT. 5 ;Z - LOGICAL IF FAILED.
2.46	IF 5 .GE. 6 ;Z - LOGICAL IF FAILED.
2.48	IF 5 .GT. 5 ;Z - LOGICAL IF FAILED.
2.50	IF 5 .GT. 6 ;Z - LOGICAL IF FAILED.
2.52	IF 5 .LE.-4 ;Z - LOGICAL IF FAILED.
2.60	I"A".EQ."A";I"A".NE."B";I"A"="A";I"A"#"B";I"A".LE."A";I"A".LE."B";I"A".LT."B";I"A".GE."A";I"B".GT."A";I"AA".GT."A";I"AA".GE."A";I"AA".NE."A";I"AA"#"A";I"A".LT."AA";I"A".LE."AA";I"A".NE."AA";I"A"#"AA";GO TO 2.64
2.62	Z - LOGICAL IF STRING COMPARISONS FAILED.
2.64	IF"B".LE."A";Z - LOGICAL IF FAILED
2.66	IF"B".LT."A";Z - LOGICAL IF FAILED
2.68	IF"B".LT."B";Z - LOGICAL IF FAILED
2.70	IF"B".GE."C";Z - LOGICAL IF FAILED
2.72	IF"B".GT."B";Z - LOGICAL IF FAILED
2.74	IF"B".GT."C";Z - LOGICAL IF FAILED
2.76	IF"A".EQ."B";Z - LOGICAL IF FAILED
2.78	IF"A"= "B";Z - LOGICAL IF FAILED
2.80	IF"A".NE."A";Z - LOGICAL IF FAILED
2.81	IF"A" #  "A";Z - LOGICAL IF FAILED
2.84	IF"AA".LE."A";Z - LOGICAL IF FAILED
2.86	IF"AA".LT."A";Z - LOGICAL IF FAILED
2.88	IF"AA".LT."AA";Z - LOGICAL IF FAILED
2.90	IF"AA".GE."C";Z - LOGICAL IF FAILED
2.92	IF"AA".GT."AA";Z - LOGICAL IF FAILED
2.94	IF"AA".GT."C";Z - LOGICAL IF FAILED
2.96	IF"AA".EQ."A";Z - LOGICAL IF FAILED
2.98	IF"AA" =  "A";Z - LOGICAL IF FAILED
20.01	C - 'FOR' TESTS
20.02	S REP=4;FOR X=-2,2;FOR INC=-2,2;DO 20.7
20.04	IF -FABS(X-3) 20.95;IF -FABS(INC-3) 20.95;GOTO 20.06
20.06	FOR F=-3,3;FOR INC=-0.35,.1,.3;DO 20.8
20.08	SET C=0;FOR MM=1,5;GOTO 20.82
20.10	IF(C-5) 20.95,20.12,20.95
20.12	CONTINUE
20.40	GOTO 20.99
20.70	IF FABS(INC) 20.75,20.75;DO 20.8;IF INC*(Y-END) 20.95;RETURN
20.75	RETURN
20.80	S END = X+INC*REP,W=X ; FOR Y=X,INC,END;DO 20.9
20.82	SET C=C+1
20.90	IF -FABS(W-Y) 20.95;S W=W+INC
20.95	O O TTY:;T$;Z - ERROR IN 'FOR'.
20.99	C - END OF 'FOR' TESTS.
DO ALL
QQ11 2 3
COMMENT - ABOVE ARE FOR THE MODIFY COMMANDS AT 1.62 AND ASK COMMAND AT 1.48.
C PAGE 3 - MODIFY COMMAND
ERASE ALL,
OPERATE OUTPUT TMPTMP.LST/5
21.01	ZET D
21.02	SET W=23.;ZET X=5.2
21.03	SET X=77;ZET U=89.66
21.04	SET Q=5;Z-CATASTROPHE
21.06	21.06 Z - CHECK ERASE / INSERT
21.07	ERASE 21.07 Z CHECK ERASE
21.08	DO 21.09 Z CHECK MODIFY
21.09	MODIFY 21.08,21.09 Z!
21.10	Z--ZZ;#-) 21.4,21.2,21.4
21.20	C-FIFTH LINE
21.30	IF (D-4.63) 21.4,21.5,21.4
21.40	Z - CATASTROPHE IN MODIFY TESTS
21.45	?THIS WILL BE MODIFIED TO REMOVE THE ?'S.
21.50	IF (X-5.2) 21.4,21.6,21.4
21.55	Z - NOW IS THE TIME ETC.
21.60	IF(Y-4.532) 21.4,21.7,21.4
21.70	IF (W-23) 21.4,21.8,21.4
21.80	IF (U-89.66) 21.4,21.82,21.4
21.82	OPERATE OUTPUT TTY:/5
21.85	CHECK LINE 21.45
21.86	L S TMPTMP.LST;OPERATE INPUT TMPTMP.LST/5
21.87	S X=FCHR(-1);IF FABS(63-X) 21.89,21.89;IF(X-39) 21.87,21.94,21.87
21.89	Z - THIS PROGRAM STILL HAS ? IN LINE 21.45
21.94	A /3;T /0;IF(-FOCAL(9,9))21.95;X FOCAL(9,-1);TYPE /2;Q
21.95	QUIT
21.05	Z-CAUSE A BLANK ENTRY IN THE INDEX TABLE! DELETE THIS LINE -
21.05
MODIFY 21.01
ZS

MODIFY 21.01
D=4.63
MODIFY 21.02
ZSET Y=4.532;S

MODIFY 21.03
ZS

MODIFY 21.04
;
MODIFY 21.1
#IF (Q-5
MODIFY 21.55;C - TO MAKE A NULL LINE.

DO 21.55
MODIFY 21.3
Z
MODIFY 21.45;CHECK QUESTION MARKS ARE NOT DELETED.

MODIFY 21.45
?Z - ERROR IN MODIFY - QUESTION MARKS ARE DELETED.

MODIFY 21.45;CHECK WE CAN REMOVE INITIAL QUESTION MARKS BY MODIFY.
?C
Z - CHECK THAT SECOND QUESTION MARK WAS FOUND.

DO ALL
QF

LIBRARY DELETE TMPTMP.LST
ERASE ALL
C PAGE 4 - WRITE COMMAND DIAGNOSTIC
C CHECK THAT 'WRITE' WRITES QUESTION MARKS O.K.
01.05	F S=1,18;X FCHR(-1)
01.08	DO 9.2
01.10	S S=34;D 9;S S=75;D 9;S S=83;D 9;O I TTY:/4;A/3;L D TMPTMP.LST;QUIT
01.23	CHECK THIS "?" AND IS THIS OK? OR THIS?
09.10	IF (FCHR(-1)-S) 9.1,9.2,9.1
09.20	S NEX=FCHR(-1);IF (NEX-63) 9.3,9.4,9.3
09.30	Z - BAD MATCH IN WRITE TEST
09.40	RETURN
O O TMPTMP.LST/4
TYPE "CAN YOU CHECK THIS?"!
WRITE 0
O O TTY:/4;T/0;O I TMPTMP.LST/4;DO ALL
ERASE ALL
1.1	TYPE /0;IF(-FOCAL(9,9))1.43;X FOCAL(9,-1);TYPE /2
1.43	QUIT
DO ALL
ERASE ALL
C PAGE 5 - INPUT ROUTINE DIAGNOSTIC

ERASE ALL

23.1 S PI=3.14159265;A PI ; IF (PI-3.14159265) 23.2,23.3,23.2
23.2 Z - ALTMODE ON 'ASK' FAILED
23.3 A X,Y;IF (-FABS(X-742)) 23.4;IF(Y-123456789) 23.4,23.5
23.4 Z - 'ASK' INPUT FAILURE
23.5 A X; IF (X-0.12346789) 23.6,23.7,23.6
23.6 Z - ASK INPUT OF LETTERS FAILURE
23.7 A X;IF(X+63) 23.8,23.9,23.8
23.8 Z - ASK DATA NEGATIVE FAILURE
23.9 A X; IF (+FABS(X+3.473E+6)) 23.05,23.92;Z - ASK ERROR
23.92 RETURN

DO ALL
43.65742 123456789
.ABCDFGHI
-63
-3.473E+6
ERASE ALL
1.01 IF(25.-25) 7.01,1.02,8.01
1.02 IF(25-2.5E1) 7.02,1.03,8.02
1.03 IF(3.0-3.E+0) 7.03,1.04,8.03
1.04 IF(123.456-123.456E-00) 7.04,1.05,8.04
1.05 RETURN
7.01 Z
7.02 Z
7.03 Z
7.04 Z
8.01 Z
8.02 Z
8.03 Z
8.04 Z
DO ALL
C - PAGE 6 ARITHMETIC TESTS

ERASE ALL
C-FOCAL	v4(261)-1	1659	4-Aug-74

20.01	ERASE;SET X=1+2^(-58),NB=27
20.02	IF(FOCAL(FOCAL(36)-2))20.08,20.05;IF(FOCAL(FOCAL(36)-1))	20.05,20.06,20.07
20.05	Z - COME HERE IF NOT DECSYSTEM-10.
20.06	SET NB=54;GO TO 20.10;KA-10 DOUBLE PRECISION.
20.07	SET NB=62;GO TO 20.10;KI-10 DOUBLE PRECISION.
20.08	SET NB=27;GO TO 20.10;C - SINGLE PRECISION.
20.10	SET PI=2*FATN(2^(NB+4))
20.11	SET DR=1;IF-FABS(PI/4-PI*(1/4))20.12;SET DR=0;C - DIVISION-ROUNDING ALLOWANCE.
20.12	SET PS=2^(14-NB);C - SMALL PERTURBATION.
20.13	SET PL=2^(5-NB/2);C - LARGE PERTURBATION.
20.15	SET NR=8;C - MAXIMUM ALLOWABLE NUMBER OF STEPS IN REDUCTION FORMULA.
20.20	SET NS=FITR(NB/2-6);C - MAXIMUM ALLOWABLE NUMBER OF STEPS IN SERIES FORMULA.
20.30	SET FL2=FLOG(2);CONSTANT IS HANDY TO SAVE RE-COMPUTATION ALL THE TIME.
20.40	ERASE 37,38

21.14	IF FCOS(-PI/2) 21.17,21.15;Z
21.15	S N=21.15,X=360,YE=0,YO=FSIND(X),DYDX=PI/180;D 39
21.16	IF FCOSD(-90) 21.17,21.20;Z
21.17	Z - ERROR IN FCOS OR FCOSD.
21.20	37.10	S DYDX=FCOS(X)
21.22	38.10	S YO=FSIN(X)
21.24	S N=21.24,X=1.467,YE=+FSIN(1.467);DO 37,38,39
21.26	S N=21.26,X=-.1239,YE=-FSIN(.1239);DO 37,38,39
21.28	S N=21.28,X=2*PI+PS,YE=+PS;DO 37,38,39
21.30	S N=21.30,X=2*PI-PS,YE=-PS;DO 37,38,39
21.32	S N=21.32,X=PI+PS,YE=-PS;DO 37,38,39
21.34	S N=21.34,X=PI-PS,YE=+PS;DO 37,38,39
21.36	S N=21.28,X=PI/2+PS,YE=+(1-PS^2/2);DO 37,38,39
21.38	S N=21.38,X=PI/2+PS,YE=+FSIN(PI/2-PS);DO 37,38,39
21.40	S N=21.40,X=PI/2+PS,YE=-FSIN(3*PI/2+PS);DO 37,38,39
21.42	S N=21.42,X=3*PI/2+PS,YE=+FSIN(3*PI/2-PS);DO 37,38,39
21.46	S N=21.46,X=PI/2+PL,YE=+(1-PL*PL/2);DO 37,38,39
21.48	S N=21.48,X=PI/2+PL,YE=+FSIN(PI/2-PL);DO 37,38,39
21.50	S N=21.50,X=3*PI/2+PL,YE=-FSIN(PI/2+PL);DO 37,38,39
21.52	S N=21.52,X=3*PI/2-PL,YE=+FSIN(3*PI/2+PL);DO 37,38,39
21.54	S N=21.54,X=PI/4-PS,YE=+.5^.5*(1-PS);DO 37,38,39
21.56	S N=21.56,X=PI/4+PS,YE=+.5^.5*(1+PS);DO 37,38,39
21.58	S N=21.58,X=3*PI/4-PS,YE=+FSIN(PI/4+PS);DO 37,38,39
21.60	S N=21.60,X=3*PI/4+PS,YE=+FSIN(PI/4-PS);DO 37,38,39
21.62	S N=21.62,X=5*PI/4-PS,YE=-FSIN(PI/4-PS);DO 37,38,39
21.64	S N=21.64,X=5*PI/4+PS,YE=-FSIN(PI/4+PS);DO 37,38,39
21.66	S N=21.66,X=7*PI/4-PS,YE=-FSIN(PI/4+PS);DO 37,38,39
21.68	S N=21.68,X=7*PI/4+PS,YE=-FSIN(PI/4-PS);DO 37,38,39
21.70	S N=21.70,X=PI/8,YE=((1-.5^.5)/2)^.5;DO 37,38,39
21.72	S N=21.72,X=3*PI/8,YE=+FSIN(PI/8)*(1+2*.5^.5);DO 37,38,39
21.74	S N=21.74,X=5*PI/8,YE=+FSIN(3*PI/8);DO 37,38,39
21.76	S N=21.76,X=7*PI/8,YE=+FSIN(PI/8);DO 37,38,39
21.78	S N=21.78,X=9*PI/8,YE=-FSIN(PI/8);DO 37,38,39
21.80	S N=21.80,X=11*PI/8,YE=-FSIN(3*PI/8);DO 37,38,39
21.82	S N=21.82,X=13*PI/8,YE=-FSIN(3*PI/8);DO 37,38,39
21.84	S N=21.84,X=15*PI/8,YE=-FSIN(PI/8);DO 37,38,39
21.86	37.10 S DYDX=2*FSIN(2*X)
21.88	38.10 S YO=FSIN(X)^2+FCOS(X)^2
21.92	38.20 S YE=1
21.93	S N=21.93;F X=.001,.001,.01;DO 37,38,39
21.94	S N=21.94;F X=.01, .01, .1 ;DO 37,38,39
21.95	S N=21.95;F X=.1,  .1,  1  ;DO 37,38,39
21.96	S N=21.96;F X=1,   1,   10 ;DO 37,38,39
21.97	S N=21.97;F X=10, 10,  100 ;DO 37,38,39

22.01	C Logarithm test.
22.04	37.10 S DYDX=2/X
22.06	38.10 S YO=FLOG(X*(1+PS))+FLOG(X/(1+PS))
22.10	38.20 S YE=2*FLOG(X)
22.20	S N=22.20;F I=1,16.5;S X=1+I/16;DO 37,38,39
22.22	S N=22.22;F W=-3,3;F Z=1.3,15;S X=Z*10^W;DO 37,38,39
22.30	ERASE 37,38
22.31	37.1 S DYDX=2
22.32	38.1 S YE=0,YO=FLOG(FEXP(X))-X
22.33	F X=-70,3.14159265,+84;DO 37,38,39

23.01	IF (FABS(0)) 7.01,23.02;Z-CATASTROPHE - NON-ZERO RESULT
23.02	IF (FABS(1-1)) 7.02,23.03;Z-CATASTROPHE - NON-ZERO RESULT
23.03	IF (FABS(1*0)) 7.03,23.04;Z-CATASTROPHE - NON-ZERO RESULT
23.04	IF (FABS(0*1)) 7.04,23.05;Z-CATASTROPHE - NON-ZERO RESULT
23.05	IF (FABS(3^3-27)) 7.05,23.06;Z-CATASTROPHE - NON-ZERO RESULT
23.06	IF (FABS((+1)-(+1))) 7.06,23.07;Z-CATASTROPHE - NON-ZERO RESULT
23.07	IF (FABS(((+1)+(-1)))) 7.07,23.08;Z-CATASTROPHE - NON-ZERO RESULT
23.08	IF (FABS((-1+1)-(1-1))) 7.08,23.09;Z-CATASTROPHE - NON-ZERO RESULT
23.09	IF (FABS((2*3)-(3*2))) 7.09,23.10;Z-CATASTROPHE - NON-ZERO RESULT
23.10	IF (FABS(0/1)) 7.10,23.11;Z-CATASTROPHE - NON-ZERO RESULT
23.11	IF (FABS(0^5)) 7.11,23.12;Z-CATASTROPHE - NON-ZERO RESULT
23.12	IF (1) 23.13,23.13,23.14
23.13	Z-CATASTROPHE - (1) IS NOT POSITIVE!
23.14	IF (-1) 23.15;Z-CATASTROPHE - (-1) IS NOT NEGATIVE!
23.15	SET RADIUS=23.652;IF (FABS(RAD-23.652)) 7.15,23.16;Z-CATASTROPHE
23.16	S X=(1-(1+2^(-40))*(1/(1+2^(-40))));IF (X-2^(2-NB)) 23.17,23.17;Z
23.17	CONTINUE

24.01	C DATAN TEST
24.02	ERASE 37,38
24.04	37.10	S DYDX=2/(1+X^2)
24.06	38.10	S YO=FATN(X)+FATN(-X),YE=0
24.08	S N=24.08;D 24.90
24.10	38.10	S YO=FATN(X)+FATN(1/X),YE=FSGN(X)*PI/2
24.15	S N=24.15;D 24.90
24.20	38.10	S YO=FATN(X)-FATN((X*3^.5-1)/(X+3^.5)),YE=PI/6
24.22	37.10	S DYDX=(1+FABS(1-X*3^.5)/4+FABS(3+X*3^.5)/4)/(1+X^2)
24.25	S N=24.25;D 24.90
24.30	GO TO 24.99
24.90	S Z=(3)^.5*2^(-27);D 24.92;S Z=2-3^.5;D 24.92;S Z=1;D 24.92
24.92	S ZZ=Z^2;D 24.94;S ZZ=Z;D 24.94
24.94	S ZZZ=ZZ-PL;D 24.96;S ZZZ=ZZ;D 24.96;S ZZZ=ZZ+PL;D 24.96
24.96	S X=ZZZ-PS;D 24.98;S X=ZZZ;D 24.98;S X=ZZZ+PS;D 24.98
24.98	D 37,38,39
24.99	CONTINUE AFTER CONCLUSION OF DATAN TESTS.

25.01	C EXPONENTIATION TEST.
25.02	IF (1/2-0.5),25.04;Z
25.03	Z - EXPONENTIATION TEST FAILURE.
25.04	IF (1/2-2^(-1)),25.05;Z
25.05	IF (1/2-(1/2)^1),25.06;Z
25.06	IF (FSQT(1.000001)-(1.000001)^.5),25.08;Z
25.08	IF (FSQT(1.0000000000001)-(1.0000000000001)^.5),25.10;Z
25.10	37.10	S DYDX=FEXP(X)
25.12	38.10	S YO=FEXP(X),YE=0;F Z=22,-1,1;S YE=1+X*YE/Z
25.14	S N=25.14;F X=0,1/8,1;D 37,38,39
25.16	S N=25.16;F X=PL,1/8,1;D 37,38,39
25.18	S N=25.18;F X=-PL,1/8,1;D 37,38,39
25.20	S N=25.20;F X=PS,1/8,1;D 37,38,39
25.22	S N=25.22;F X=-PS,1/8,1;D 37,38,39
25.24	IF FEXP(0)-1 ,25.26,
25.26	IF 2^26-67108864,25.28,
25.28	IF (2^26*2^(-26)-1),25.99,
25.99	CONTINUE

26.01	C FHIBER TEST
26.02	S X=FHIBER(1);IF X,26.03;IF X-1,26.03,
26.03	S X=GETTAB(9,8);X FHIBER(5000);S X=GETTAB(9,8)-X;IF X-249,

27.01	C ERROR INCREMENT TEST.
27.02	S I=FOCAL(34);X GETTAB(9,8);IF I-FOCAL(34) ,27.04,
27.04	X GETTAB(99,99);IF I-FOCAL(34)+1 ,27.06,
27.06	S X=FOCAL(3,3);X FLOG(0),FOCAL(3,X);IF I-FOCAL(34)+2 ,27.08,
27.08	CONTINUE

29.99	QUIT

37.01	C DERIVATIVE OF FUNCTION WRT X.

38.01	C OBSERVED VALUE OF FUNCTION.

39.01	CHECK THAT YO AND YE AGREE WITHIN TOLERANCE.
39.02	C - THIS METHOD IS NOT VALID IF YE DEPENDS ON X.
39.03	C - IF YO HAS X OCCURRING MORE THAN ONCE, THEN DYDX MUST BE THE SUM
39.04	C - OF THE MAGNITUDES OF THE DERIVATIVES OF YO WITH RESPECT TO
39.05	C - EACH OCCURRENCE OF X.
39.10	S VS=0;I FABS(YE) 39.2,39.2;S VS=NS*2^(FITR(FLOG(YE)/FL2)-NB)
39.20	S VR=0;I FABS(X) 39.3,39.3;S VR=NR*FABS(DYDX)*2^(FITR(FLOG(X)/FL2)-NB)
39.30	I -FABS(YO-YE)+VR+VS 39.4;RETURN
39.40	I VR-VS 39.5
39.41	TYPE "?"!"?INACCURACY IN REDUCTION FORMULA CORRESPONDING TO"!
39.42	TYPE "ARGUMENT DIFFERENCE OF",%8,FABS(YO-YE)*NR/VR," IN LSB"!
39.43	G 39.7
39.50	TYPE "?"!"?INACCURACY IN POWER SERIES FORMULA OF"
39.52	TYPE %8,FABS(YO-YE)*NS/VS," IN LSB"!
39.70	TYPE "?ACCURACY FAILURE ON LINE"%4.02,N!
39.80	TYPE %%E18.16,?X?!?YE?!?YO?!
39.90	TYPE $$;Z

DO ALL
C PAGE 8 LIBRARY SAVE/CALL TEST
E,A
01.10	O O DSK:CH4.TMP/4;TYPE "1.99 C";F X=1,1024;TYPE "ABCDE"
01.20	O O TTY:/4;L C CH4.TMP;S X=FOCAL(36);L C CH4.TMP;S X=FOCAL(36)-X
01.30	IF X ,1.4;Z - SUCCESSIVE LIBRA CALLS OF SAME PROGRAM CAUSE CORE EXPANSION.
01.40	L D CH4.TMP;IF 1#1+2^(-30);IF 1=1+2^(-58); QUIT IF KA-10 DOUBLE PRECISION.
01.50	L D CH4.BAK;X FOCAL(3,3);C - SUPPRESS NON-FATAL ERROR MESSAGES.
01.60	S X=FOCAL(34);L C CH4.TMP;IF X#FOCAL(34)-1;Z - NON-FATAL LIBRA CALL FAILED TO COUNT.
01.70	L S CH4.TMP;L C CH4.TMP;IF X#FOCAL(34)-1;Z - NO ERROR HERE.
01.80	L C CH4.BAK;IF X#FOCAL(34)-2;Z - STILL NO .BAK FILE.
01.87	L S CH4.TMP;L C CH4.BAK;IF X#FOCAL(34)-2;Z .BAK FILE NOT CREATED.
01.89	L D CH4.TMP;L D CH4.BAK

GO

C WRITE A FILE THEN READ IT BACK
ERASE ALL
1.1 RETURN
LIBRARY SAVE FOCAL.TMP
ERASE ALL
1.1 Z - THIS NEVER GOT OVERWRITTEN!
LIBRARY CALL FOCAL.TMP
LIBRARY DELETE FOCAL.TMP
GO
C PAGE 9 - CHECK OF MULTI-CHANNEL I/O.
CHANNELS 2 AND 3 MAY BE IN USE BY THE TEST PROGRAM ITSELF!
O O DSK:CH4.TMP/4
O O DSK:CH5.TMP/5
O O DSK:CH6.TMP/6
O O DSK:CH7.TMP/7
O O DSK:CH8.TMP/8
O O DSK:CH9.TMP/9
O O DSK:CH10.TMP/10
O O DSK:CH11.TMP/11
O O DSK:CH12.TMP/12
O O DSK:CH13.TMP/13
O O DSK:CH14.TMP/14
O O DSK:CH15.TMP/15
TYPE /4,"1.12 GO TO 1.15"!
SET I=FOCAL(2,2);CAUSE SUPPRESSION OF EQUALS TYPE-OUT.
FOR I=1.13,.01,1.50;T %4.02,I," Z"!
TYPE 1.48," QUIT"!
TYPE /5,"1.15 GO TO 1.18"!
TYPE /6,"1.18 GO TO 1.21"!
TYPE /7,"1.21 GO TO 1.24"!
TYPE /8,"1.24 GO TO 1.27"!
TYPE /9,"1.27 GO TO 1.30"!
TYPE /10,"1.30 GO TO 1.33"!
TYPE /11,"1.33 GO TO 1.36"!
TYPE /12,"1.36 GO TO 1.39"!
TYPE /13,"1.39 GO TO 1.42"!
TYPE /14,"1.42 GO TO 1.45"!
TYPE /15,"1.45 GO TO 1.48"!
O O TTY:CH4.TMP/4
O O TTY:CH5.TMP/5
O O TTY:CH6.TMP/6
O O TTY:CH7.TMP/7
O O TTY:CH8.TMP/8
O O TTY:CH9.TMP/9
O O TTY:CH10.TMP/10
O O TTY:CH11.TMP/11
O O TTY:CH12.TMP/12
O O TTY:CH13.TMP/13
O O TTY:CH14.TMP/14
O O TTY:CH15.TMP/15
E A
L C CH4.TMP;L C CH5.TMP;L C CH6.TMP;L C CH7.TMP;L C CH8.TMP;L C CH9.TMP
L C CH10.TMP;L C CH11.TMP;L C CH12.TMP;L C CH13.TMP;L C CH14.TMP;L C CH15.TMP
L D CH4.TMP;L D CH5.TMP;L D CH6.TMP;L D CH7.TMP;L D CH8.TMP;L D CH9.TMP
L D CH10.TMP;L D CH11.TMP;L D CH12.TMP;L D CH13.TMP;L D CH14.TMP;L D CH15.TMP
GO
C - RANDOM NUMBER TEST.
ERASE ALL
ERASE
01.01	C- ACCURACY OF INTERNAL NUMBERS ...
01.02	S X=FOCAL(1,1)+FOCAL(2,2),X=1,DX=1
01.03	S M=N,DX=DX/2,Y=X+DX;D 31;IF (N-1000) 1.03
01.04	S LSB=M+8;C-THE BIT NUMBER OF THE LEAST SIGNIFICANT BIT.
01.10	C - SORT INTO BINS ACCORDING TO VALUE OF EACH BINARY BIT.
01.11	F BIT=9,20;S BIN(BIT)=-50
01.12	F X=1,100;S Y=FRAN;F BIT=9,20;D 3
01.13	F BIT=10,20;IF(15-FABS(BIN(BIT)))1.99
01.40	C - MEASURE SEQUENCE LENGTH.
01.41	F X=1,2000;X FRAN
01.42	SET X=FRAN(0)
01.44	FOR C=1,2000;I FABS(X-FRAN),1.98
01.45	IF(-FABS(FRAN(1)-FRAN(1)))1.99;QUIT
01.98	O O TTY:;T"?"!"?RANDOM NUMBER REPEAT SEQUENCE LENGTH",%5,C;Z
01.99	O O TTY:;T"?"!"?ERROR IN RANDOM NUMBER GENERATOR"!%3$;Z

03.10	S Y=Y*2-1
03.20	I Y 3.3;S BIN(BIT)=BIN(BIT)+1;R
03.30	S Y=Y+1;R

31.10	C- SUBROUTINE TO MEASURE DIFFERENCE BETWEEN X AND Y.
31.11	C- N IS THE NUMBER OF BITS REQUIRED TO SEPARATE X FROM Y.
31.20	SET N=100000;IF (-FABS(X-Y)) 31.3;RETURN
31.30	SET N=1-FLOG(FABS(2*(X-Y)/(X+Y)))/FLOG(2);RETURN
GO
TYPE "END OF D0AA."!
O O TMPTMP.LST;T "L D TMPTMP.LST"!!;O O TTY:;O I TMPTMP.LST;C- EXIT.
%%%EWXACCES.FCL
C-FOCAL	v5J(331)-1	1847	13-Mar-76

01.01	C - PROGRAM TO CHECK THE SIMULATION OF FOCAL-10.

02.01	C - FUNCTION EXECUTION.
02.10	X FOCAL(3,3),FOCAL(1,1),FOCAL(2,2),FOCAL(99),FLOG10(2),FLOG(2)
02.20	X FRAN,FRAN,FRAN,FRAN(1),FRAN(-1)
02.30	X FSIN,FSIN(2^(-99)),FSIN(12),FSIND,FCOS,FCOSD
02.40	X GETTAB(5000,5000),GETTAB(0)
02.50	X FEXP,FSQT,FATN(2^10),FATN,FATN(1),FABS,FSGN,FRAN,FITR(1E35)
02.99	ERASE 2

03.01	C - INPUT/OUTPUT ROUTINES.
03.10	O O NUL:/6;O O NUL:/7;O O NUL:/10;O O TTY:/7;O O TTY:/6;O O FCLTMP.FCL/5;TYPE" 3"!;X FCHR(65),FCHR(127),FCHR(127),FCHR(127),FCHR(127),FCHR(127),FCHR(127),FCHR(127),FCHR(65),FCHR(72),FCHR(72),FCHR(18),FCHR(21),FCHR(65),FCHR(32),FCHR(65),FCHR(27),FOCAL(2,2);ty/5%16,9999999999999999.4#!;O O TTY:/5;O O TTY:/10;L D NUL:
03.20	O I DSK:FORLIB.REL[1,4];O I FCLTMP;A X,A$,X,X;X FCHR(-1),FCHR(-1),FCHR(-1);O I TTY:;l D fCLTMP.FCL
03.30	S X$(1,2,3)="ABC"+FCHR$(10)+"ABC"+FCHR$(34),X(1,2,3)=1.E24,X=-1E-20
03.40	O O NUL:;W;W 3;T%,1E-1%30,1E20,1E33$$%E6.01'BOO";O O TTY:
03.50	O O FCLTMP.TMP;T"S";X FCHR(127),FCHR(127),FCHR(8),FCHR(21),FCHR(127),FCHR(8),FCHR(7),FCHR(69),FCHR(12),FCHR(18),FCHR(10);T"M"!;X FCHR(16);T!"O I TTY:;E 3.5,3.51;GO"!;O O TTY:;O I FCLTMP.TMP;M 3.51,3.51,3.51
03.51	PLEASE IGNORE THIS EXAMPLE OF MODIFICATION BY PROGRAM.
03.99	E 3

04.01	C - GENERAL REFERENCES ... EXPRESSIONS AND COMMANDS.
04.02	E? 
04.03	?I(0 .NE.1);I(0 .EQ.0);I(0#1);I(-1=(-1));I("A"="A");I("A"#"B");L S NUL:<100>;L S NUL: 4.01,ALL
04.04	SET X$(1,2,3)="ABC"+X$+"DEF";SET X(1,23,3)=A+B-C*D/4*(3+2)^1.32**0,X$(1,2,3)=X$(1,2,3)
04.06	DO 4.07;GO TO 4.08
04.07	RETURN
04.08	FOR X=1;
04.09	FOR Y=1,2,3;ERASE
04.10	FOR Z=2,-1,1;
04.11	I 0,4.12
04.12	I 1,,4.13
04.13	C
04.99	erase 4

05.01	C - NON-FATAL ERROR MESSAGES.
05.02	T"PLEASE IGNORE THE FOLLOWING NON-FATAL ERROR MESSAGES."!
05.03	X FOCAL(3,-1)
05.04	T/5
05.05	X 1/0
05.06	X 2^(-130)
05.08	X FSQT(-1)
05.09	L D SYS:FOROTS.SHR
05.12	T%200
05.88	X FOCAL(3,3),FEXP(99),FEXP(-99)
05.99	E 5

09.01	C - COMPUTE HOW WE'RE GOING.
09.04	TYPE%4!"SCORE:	"FNEW(-1)" OUT OF"FNEW(0)" POSSIBLE."!

10.01	C - FATAL ERROR MESSAGES.
10.05	DO 11.05
10.06	DO 11.06
10.07	DO 11.07
10.11	DO 11.11
10.12	DO 11.12
10.13	DO 11.13
10.14	DO 11.14
10.15	DO 11.15
10.16	DO 11.16
10.17	DO 11.17
10.18	DO 11.18
10.19	DO 11.19
10.20	DO 11.20
10.21	DO 11.21
10.22	DO 11.22
10.23	DO 11.23
10.24	DO 11.24
10.25	DO 11.25
10.26	DO 11.26
10.27	DO 11.27
10.28	DO 11.28
10.29	DO 11.29
10.30	DO 11.30
10.31	DO 11.31
10.32	DO 11.32
10.33	DO 11.33
10.34	DO 11.34
10.35	DO 11.35
10.36	DO 11.36
10.37	DO 11.37
10.38	DO 11.38
10.39	DO 11.39
10.40	DO 11.40
10.41	DO 11.41
10.42	DO 11.42
10.43	DO 11.43
10.44	DO 11.44
10.45	DO 11.45
10.46	DO 11.46
10.47	DO 11.47
10.48	DO 11.48
10.49	DO 11.49
10.50	DO 11.50
10.51	DO 11.51
10.52	DO 11.52
10.53	DO 11.53
10.54	DO 11.54
10.55	DO 11.55
10.99	L D FCLTMP.TMP;ERASE 12,11,9,10

11.05	ERASE 10.05;D 12.05
11.06	ERASE 10.06;D 12.06
11.07	ERASE 10.07;D 12.07
11.11	ERASE 10.11;D 12.11
11.12	ERASE 10.12;D 12.12
11.13	ERASE 10.13;D 12.13
11.14	ERASE 10.14;D 12.14
11.15	ERASE 10.15;D 12.15
11.16	ERASE 10.16;D 12.16
11.17	ERASE 10.17;D 12.17
11.18	ERASE 10.18;D 12.18
11.19	ERASE 10.19;D 12.19
11.20	ERASE 10.20;D 12.20
11.21	ERASE 10.21;D 12.21
11.22	ERASE 10.22;D 12.22
11.23	ERASE 10.23;D 12.23
11.24	ERASE 10.24;D 12.24
11.25	ERASE 10.25;D 12.25
11.26	ERASE 10.26;D 12.26
11.27	ERASE 10.27;D 12.27
11.28	ERASE 10.28;D 12.28
11.29	ERASE 10.29;D 12.29
11.30	ERASE 10.30;D 12.30
11.31	ERASE 10.31;D 12.31
11.32	ERASE 10.32;D 12.32
11.33	ERASE 10.33;D 12.33
11.34	ERASE 10.34;D 12.34
11.35	ERASE 10.35;D 12.35
11.36	ERASE 10.36;D 12.36
11.37	ERASE 10.37;D 12.37
11.38	ERASE 10.38;D 12.38
11.39	ERASE 10.39;D 12.39
11.40	ERASE 10.40;D 12.40
11.41	ERASE 10.41;D 12.41
11.42	ERASE 10.42;D 12.42
11.43	ERASE 10.43;D 12.43
11.44	ERASE 10.44;D 12.44
11.45	ERASE 10.45;D 12.45
11.46	ERASE 10.46;
11.47	ERASE 10.47;
11.48	ERASE 10.48;
11.49	ERASE 10.49;
11.50	ERASE 10.50;D 12.50
11.51	ERASE 10.51;D 12.51
11.52	ERASE 10.52;
11.53	ERASE 10.53;D 12.53
11.54	ERASE 10.54;D 12.54
11.55	ERASE 10.55;D 12.55

12.05	I 4 .G??E.2;I 4 .GT.2;I 4 .LE.4;I 4 .LT.5;T!"NOW WE HAVE THE ERROR MESSAGE CHECKOUT."
12.06	T!"PLEASE COOPERATE BY FOLLOWING THE INSTRUCTIONS FOR EACH ERROR MESSAGE."
12.07	T!"IN GENERAL THE IDEA IS TO TYPE GO AFTER EACH ONE."!!
12.11	L D PLEASE:TYPE.GO
12.12	12.00 PLEASE TYPE GO.
12.13	G 82.34; PLEASE TYPE GO.
12.14	I PLEASE$ TYPE GO.
12.15	S PLEASE TYPE GO.
12.16	O O SYS:PLEASE.TYPE GO
12.17	SET 2 PLEASE TYPE GO
12.18	L C SYS:ACCT;	PLEASE TYPE GO.
12.19	SET X=2+;PLEASE TYPE GO.
12.20	MODIFY 12.00 - PLEASE TYPE GO.
12.21	O O NUL:[1] - PLEASE TYPE GO.
12.22	O O NUL:[1,2 - PLEASE TYPE GO.
12.23	O O NUL:<100 - PLEASE TYPE GO.
12.24	X (,	PLEASE TYPE GO
12.25	999.99 - PLEASE TYPE GO.
12.26	SET FSIN(X)=5 - PLEASE TYPE GO.
12.27	U - PLEASE TYPE GO.
12.28	O O NUL:/30 - PLEASE TYPE GO.
12.29	X +*	PLEASE TYPE GO.
12.40	X 2+"A" - PLEASE TYPE GO.
12.41	Z - PLEASE TYPE GO.
12.42	O I PLEASE:TYPE.GO
12.50	T!"PLEASE TYPE	SET TTY NO ECHO,	START,	GO."!;O I NUL:;Q
12.51	O O FCLTMP.FCL;T"S";X FCHR(127),FCHR(16);T!"O I TTY:;GO TO 10.01"!;O O TTY:;O I FCLTMP.FCL;M 11.51
12.53	T!"PLEASE TYPE   RUBOUT,   CONTROL-C,   SET TTY ECHO,   REENTER,	GO."!;A X
12.55	T!"PLEASE MAKE THIS JOB RUN DETACHED UNTIL IT GOES INTO TO STATE IN 30 SECONDS."!;X FHIBER(1),FHIBER(30000);T!"THANKYOU"!

91.01	C - HERE TO COUNT AND DISPLAY THE REMAINING UNMARKED LOCATIONS.
91.02	C - FNEW FUNCTION HAS THE FOLLOWING CHARACTERISTICS:
91.03	C - ARGUMENT -1 RETURNS NUMBER OF LOCATIONS IN THE USE TABLE 
91.04	C - 	WHICH HAVE BEEN REFERENCED IN THE SIMULATION.
91.05	C - ARGUMENT  0 RETURNS TOTAL POSSIBLE NUMBER OF REFERENCES.
91.06	C - ARGUMENT POSITIVE IS TAKEN AS A RELATIVE LOCATION IN FOCAL,
91.07	C -	AND RETURNS THE NEXT UNREFERENCED LOCATION AFTER THAT.
91.15	TYPE%4!"SCORE:	"FNEW(-1)" OUT OF"FNEW(0)" POSSIBLE."!
91.17	T!"HERE ARE THE LOCATIONS IN FOCAL.SHR NOT SO FAR REFERENCED."!
91.20	SET LOC=8
91.30	SET LAS=LOC,LOC=FNEW(LOC);IF FNEW(0)+8-LOC 99.99,99.99;D 92;G 91.3

92.10	IF(LOC.EQ.LAS+1);T",40";G 92.3
92.20	T!"40"
92.30	S X=LOC/4096,LAS=LOC;F J=1,4;S X=(X-FITR(X))*8;X FCHR(FITR(X)+48)

99.99	O O SIMFCL.RPT;T%4"ACCESS TEST SCORE: "FNEW(-1)" [PAR"FNEW(0)-31"] OUT OF"FNEW(0)" POSSIBLE."!;O O TTY:;T!"FINISHED"!;O I NUL:;Q

T!"PLEASE TYPE CONTROL-Z,	START,	GO TO 1.01"!
%%%EWXMISC.FCL
10.10	T!"HERE ARE SEVERAL SMALL FOCAL PROGRAMS, SET ONE TO A GROUP."
10.20	T!"THE FIRST LINE OF EACH GROUP DESCRIBES THE GROUP'S FUNCTION:"!
10.30	W 11.01,12.01,13.01,14.01,15.01,16.01,17.01,18.01,19.01,20.01,21.01,22.01,23.01,24.01,25.01,26.01,27.01,28.01,29.01,30.01
10.40	T!"TO RUN ONE OF THE PROGRAMS, SAY GROUP MM, TYPE 'DO MM'"!!!
10.50	QUIT

11.01	C - FOCAL EXAMPLE 1	TABLE GENERATION USING FUNCTIONS
11.03	TYPE %E8.07;xecute FOCAL(2,2);C SUPPRESS "=" TYPEOUT.
11.05	T! "     I         SINE      COSINE          LOG             E"!
11.07	FOR I=1,.00001,1.000101;T %7.06,I,"  ",FSIN(I),"  ",FCOS<I>,"  ",%,FLOG[I],"  ",FEXP(I),!
11.09	QUIT

12.01	C - FOCAL EXAMPLE 2	DECIMAL TO OCTAL CONVERSION.
12.20	S I=0,M=0;X FOCAL(1,1)+FOCAL(2,2);C SUPPRESS COLON AND EQUALS.
12.25	A "DECIMAL: "
12.30	S I=I+1,A(I)=FCHR(-1)-48;IF A(I)*(A(I)-9) 12.3,12.3
12.31	I FABS(A(I)+48-16),12.96;I A(I)+48-127 12.35,12.2,12.35
12.35	I M 12.4,12.7,12.4
12.40	I -FABS(A(I)+48-13) 12.5;X FCHR(-1);G 12.8 ;CARRIAGE-RETURN - SWALLOW LINE-FEED.
12.50	T " ";G 12.8 ;CHARACTER OTHER THAN CR
12.60	I -FABS(A(M)+48-13) 12.5;X FCHR(-1);G 12.8
12.70	F M=1,I-1;S A(M-I)=A(M)
12.75	S M=I,I=0;I A(M)+48-46 12.6,12.3,12.6
12.80	T "OCTAL:";IF FABS(M) 12.8,12.95;S K=0
12.85	S A=0,B=0;F J=-M+1,-1;S A(J)=(10*A+A(J))/8,A=8*(A(J)-FITR(A(J))),A(J)=FITR(A(J)),B=B+A(J)
12.90	S K=K+1,B(K)=A;IF -FABS(B) 12.85;F J=K,-1,1;X FCHR(48+B(J))
12.95	S I=I-1;T ".";F J=1,I*1.2;D 12.98;X FCHR(A+48)
12.96	T !;Q
12.98	S A=0;F K=I,-1,1;S A(K)=8*A(K)+A,A=FITR(A(K)/10),A(K)=A(K)-10*A

13.01	C - FOCAL EXAMPLE 3	FINDING ROOTS OF A QUADRATIC EQUATION
13.10	A!"FOR EQUATION:"!!"  2"!"AX +BX+C	ENTER A ",A,"ENTER B ",B,"ENTER C ",C;S ROOT=B^2-4*A*C
13.20	IF -FABS(A) 13.4;T ! "THIS IS A FIRST DEGREE EQUATION" !; GOTO 13.10
13.40	T %6.03, ! " THE ROOTS ARE"; IF (ROOT) 13.7,13.6
13.50	T !,(-B+FSQT(ROOT))/(2*A),!,(-B-FSQT(ROOT))/(2*A); GOTO 13.1
13.60	T ! -B/(2*A),!; GOTO 13.10
13.70	T " IMAGINARY"!, -B/(2*A)," + (",FSQT(-ROOT)/(2*A),")*i"
13.80	T !,-B/(2*A)," - (",FSQT(-ROOT)/(2*A),")*i",!; GOTO 13.10

14.01	C - FOCAL EXAMPLE 4	POETRY READING.
14.02	T!"LET'S HAVE SOME POETRY!"!!;G 14.07
14.03	ASK"WHICH POEM WOULD YOU LIKE?  ";S N=FCHR(-1);I-FABS(N-27)14.04;Q
14.04	S X=FCHR(-1);I-FABS((X-27)*(X-127)*(X-10)) 14.04;T!!!!!;I(127-X),14.03
14.05	IF(N-33) 14.99;S N=N-64
14.06	I FABS(N-0M),14.30;I FABS(N-0G),14.09;I FABS(N-0H),14.51;I FABS(N-0J),14.61;I FABS(N-0L),14.71;I FABS(N-0B),14.81;I FABS(N-0X),14.07;I FABS(N-0Q),14.41;I FABS(N-0P),14.21,14.03
14.07	T"THE POEMS AVAILABLE ARE..."!!
14.08	T"(X) INDEX"!,"(G) ";D 14.09;T"(M) ";D 14.30;T"(H) ";D 14.51;T"(J) ";D 14.61;T"(L) ";D 14.71;T"(B) ";D 14.81;T"(P) ";D 14.21;T"(Q) ";D 14.41;T!!;G 14.03
14.09	T"GEORGIE PORGIE PUDDING AND PIE"!
14.10	T"KISSED THE GIRLS AND MADE THEM CRY"!
14.11	T"WHEN THE BOYS CAME OUT TO PLAY"!
14.12	T"GEORGIE PORGIE RAN AWAY"!!!
14.13	G 14.03
14.21	T"LITTLE BO PEEP HAS LOST HER SHEEP"!
14.22	T"AND CAN'T TELL WHERE TO FIND THEM"!!!
14.29	G 14.03
14.30	TYPE "MARY HAD A LITTLE LAMB"!
14.31	T"ITS FLEECE WAS WHITE AS SNOW"!
14.32	T"AND EVERYWHERE THAT MARY WENT "!
14.33	T"THE LAMB WAS SURE TO GO"!!
14.34	T"SHE TOOK IT TO THE SCHOOL ONE DAY"!
14.35	T"IT WAS AGAINST THE RULE"!
14.36	T"IT MADE THE CHILDREN LAUGH AND PLAY"!
14.37	T"AND I DON'T KNOW THE REST"!!!
14.39	G 14.03
14.41	T"MARY MARY QUITE CONTRARY"!
14.42	T"HOW DOES YOUR GARDEN GROW"!
14.43	T"WITH SILVER BELLS AND COCKLE SHELLS"!
14.44	T"AND ALL LITTLE MAIDS IN A ROW"!!!!!
14.45	G 14.03
14.51	T"HUMPTY DUMPTY SAT ON A WALL"!
14.52	T"HUMPTY DUMPTY HAD A GREAT FALL"!
14.53	T"ALL THE KINGS HORSES AND ALL THE KINGS MEN"!
14.54	T"COULDN'T PUT HUMPTY TOGETHER AGAIN"!!!!
14.59	G 14.03
14.61	T"LITTLE JACK HORNER SAT IN THE CORNER"!
14.62	T"EATING HIS CHRISTMAS PIE"!
14.63	T"PUT IN HIS THUMB AND PULLED OUT A PLUM"!
14.64	T"AND SAID WHAT A GOOD BOY AM I"!!!!!
14.69	G 14.03
14.71	T"LITTLE MISS MUFFET SAT ON A TUFFET"!
14.72	T"EATING HER CURDS AND WHEY"!
14.73	T"ALONG CAME A SPIDER AND SAT DOWN BESIDE HER"!
14.74	T"AND FRIGHTENED MISS MUFFET AWAY"!!!!!
14.79	G 14.03
14.81	T"BAA BAA BLACK SHEEP"!
14.82	T"HAVE YOU ANY WOOL"!
14.83	T"YES SIR YES SIR"!
14.84	T"THREE BAGS FULL"!
14.85	T"ONE FOR THE MASTER AND ONE FOR THE DAME"!
14.86	T"AND ONE FOR THE LITTLE BOY WHO LIVES DOWN THE LANE"!!!!!
14.87	G 14.03
14.99	QUIT

15.01	C - FOCAL EXAMPLE 5	INTEREST PAYMENT PROGRAM
15.10	ASK !!"ENTER INTEREST IN PERCENT " J,!
15.14	SET J=J/100
15.16	ASK "ENTER AMOUNT OF LOAN " A,!
15.20	ASK "NUMBER OF YEARS " N,!
15.24	ASK "NUMBER OF PAYMENTS PER YEAR " M,!!
15.30	SET N=N*M; SET I=J/M
15.34	SET B=1+I
15.40	SET R=A*I/(1-1/B^N)
15.42	TYPE "MONTHLY PAYMENT ",%7.02, R,!
15.48	TYPE "TOTAL INTEREST  " R*N-A,"(APPROX.)"!!
15.55	SET B=A
15.60	TYPE " INTEREST       APP TO PRINC          BALANCE",!
15.62	SET L=B*I; SET P=R-L
15.66	SET B=B-P
15.68	TYPE L, "      "P,"            "B,!
15.70	IF (B-R) 15.74,15.74,15.62
15.74	TYPE B*I,"      "R-B*I,! "LAST PAYMENT!" B*I+B,!
15.80	QUIT

16.01	C - FOCAL EXAMPLE 6	TEMPERATURE CONVERSION
16.10	ASK !,"FROM ",START,"  TO ",END,"  DEGREES FAHRENHEIT",!
16.20	ASK "     IN INCREMENTS OF ",INCR," DEGREES",!!
16.30	TYPE "THE APPROXIMATE FAHRENHEIT TO CENTIGRADE CONVERSIONS ARE:"
16.40	FOR T=START,INCR,END; TYPE !; DO 16.50
16.45	QUIT
16.50	TYPE " ",T," FAHRENHEIT DEG.  ",(T-32)*5/9," CENTIGRADE DEG."

17.01	C - FOCAL EXAMPLE 7	ONE-LINE FUNCTION PLOTTING
17.50	F I=0,.5,15; T "*",!; F J=0,30+15*FSIN(I)*FEXP[-.1*I]; T " "

18.01	C - FOCAL EXAMPLE 8	U.S. TO AUST DOLLAR CONVERSION
18.05	S RATE=.915
18.09	T %8.02;X FOCAL(2,2)
18.10	F P=1,100;D 18.31,18.32
18.20	X FCHR(12);Q
18.31	X FCHR(12);T"	";F X=1,3;T"         $US       $AUS"
18.32	T!!;F L=1,50;D 18.4;T!
18.40	T"	";F X=1,3;S U=L*10+(X-1)*500+(P-1)*1500;T"   ",U,U*RATE

19.01	C - FOCAL EXAMPLE 9	FHIBER DEMONSTRATION
19.02	TYPE!"THIS PROGRAM IS TUNED FOR USE ON A TERMINAL SPEED OF AT LEAST 150 BAUD"!!
19.04	SET MISTAKES=0,DELAY=0;X FOCAL(1,1),FOCAL(2,2),FHIBER(1)
19.05	T%3!"WHAT IS YOUR NAME?	";IF FHIBER(4000+2^21),19.05;A N$;G 19.1
19.07	T"TOO SMALL"
19.08	S MIS=MIS+1,DEL=DEL+5000;T!"YOU HAVE MADE",MIS," MISTAKE";I MIS-1,19.09;T"S"
19.09	T!"COME ON THERE ",N$!;S DEL=DEL+2000
19.10	T"WHAT IS 2+2 ?	";X FHIBER(1);IF FHIBER(DEL+5000+2^21),19.09;S DEL=0;A X;I X-4 19.07,19.7;T"TOO BIG";G 19.08
19.70	T"CONGRATULATIONS."!;Q

20.01	C - FOCAL EXAMPLE 10	EXPRESSION EVALUATOR.
20.02	TYPE!"ENTER YOUR EXPRESSION DELIMITED BY A SPACE:"!
20.10	A X$;O O FOO.FCL;T "T ",X$,"!"!;O O TTY:;L C FOO;G 20.1

21.01	C - FOCAL EXAMPLE 11	BATCH JOB MONITOR.
21.02	C - PROGRAM TO RING BELLS WHEN OTHER JOB SAME PPN LOGS OFF.
21.05	X FOCAL(2,2)
21.10	S ME=GETTAB(2,-1),MINE=GETTAB(8,-1),ERR=FOCAL(34),NUM=0
21.20	F JOB=1,GETTAB(10,16);I-FABS(ME-GETTAB(2,JOB))-FABS(ERR-FOCAL(34))21.99;I FABS(MINE-GETTAB(8,JOB)),21.99;S NUM=NUM+1,JB1=JB,JB=JOB;I NUM-1,21.99;S JB=JB1;T%2,JOB","
21.30	I 1-NUM 21.4,21.45
21.35	T!"THERE ARE NO OTHER JOBS WITH";G 21.44
21.40	T JB1" ARE JOB NUMBERS UNDER"
21.44	T" THIS PPN."!"PLEASE SELECT THE JOB NUMBER TO WATCH ";A JB
21.45	T!"WAITING FOR JOB",%3,JB," .....";G 21.5
21.48	I FHIBER(9999+2^21),21.5;I FABS(FCHR(-1)-16),21.99;T"[CONTROL-P TO ESCAPE]"!
21.50	I FABS(ME-GETTAB(2,JB)),21.48;T!"FINISHED."!
21.90	T"";X FHIBER(500);T"";I FHIBER(3000+2^21),21.9;I FABS(FCHR(-1)-16),21.99;T"[CONTROL-P TO ESCAPE]"!;G 21.9
21.99	R
%%%EWXLUNAR.FCL
C - FOCAL example 9 Lunar Lander Game.
Erase All,

01.01	X FOCAL(1,1)+FOCAL(3,3)+FOCAL(2,1)
01.04	T !,"CONTROL CALLING LUNAR MODULE....EMERGENCY ..."
01.05	T !,"MANUAL CONTROL IS NECESSARY.",!
01.06	T !,"YOU MAY RESET FUEL RATE K TO 0, OR ANY VALUE FROM"
01.07	T !,"8 TO 200 LBS/SEC AT 10 SECOND INTERVALS."
01.08	T !,"A NEGATIVE VALUE ABORTS THE LANDING."
01.10	T !!,"YOUR ESTIMATED FUEL RESERVE IS 16000 LBS"!
01.12	T !,"FREE FALL IMPACT TIME = 120 SEC. CAPSULE WT. 32500 LBS."
01.14	T !,"WE ARE TURNING ON YOUR RADAR....GOOD LUCK ! ",!!
01.16	S Q=1
01.20	T !,"FIRST RADAR CHECK COMING UP ",!!!
01.30	T !,"COMMENCE LANDING PROCEDURE",!
01.31	T !,"   TIME        HEIGHT            SPEED"
01.32	T "        FUEL      FUEL RATE",!
01.33	T "  SECONDS   MILES   FEET          MPH"
01.34	T "          LBS       LBS/SEC"
01.50	T !!

02.05	S L=0;S A=120;S V=1;S M=33000;S N=17000;S G=.001;S Z=1.8
02.10	T %6,L,%8,FITR(A),%7,5280*(A-FITR(A))
02.20	T %13.02,3600*V,%11.01,M-N,"     K=";A K;S T=10
02.70	T %7.02,;I (K) 2.74;I (200-K) 2.72; I (K-8) 2.71,3.1,3.1
02.71	I (K) 2.74,3.1,2.72
02.72	T !,"NOT POSSIBLE ";F X=1,51;T "."
02.73	T "K= ";A K; G 2.7
02.74	T !!,"LANDING ABORTED - CHICKEN!"!!!;Q

03.10	I ((M-N)-.001) 4.1;I (T-.001) 2.1;S S=T
03.40	I ((N+S*K)-M)  3.5,3.5;S S=(M-N)/K
03.50	D 9;I (I) 7.1,7.1;I (V) 3.8,3.8;I (J) 8.1
03.80	D 6;G 3.1

04.10	T "FUEL OUT AT ",L," SECS.",!
04.40	S S=(-V+FSQT(V*V+2*A*G))/G;S V=V+G*S;S L=L+S

05.10	T "ON MOON AT ",L," SECS.",!;S W=3600*V
05.20	T "IMPACT VELOCITY OF ",W," M.P.H. ",!,"FUEL LEFT: "
05.30	T M-N, " LBS.",!; I (-W+1) 5.5,5.5
05.40	T "PERFECT LANDING ! - (LUCKY ?) ",!;G 5.9
05.50	I (-W+10) 5.6,5.6;T "GOOD LANDING - (COULD BE IMPROVED ) ",!;G 5.9
05.60	I (-W+25) 5.7,5.7;T "CONGRATULATIONS ON A POOR LANDING",!;G 5.9
05.70	I (-W+60) 5.8,5.8;T "CRAFT DAMAGED - GOOD LUCK ",!;G 5.9
05.80	T "SORRY, BUT THERE WERE NO SURVIVORS - YOU BLEW IT ",!
05.82	T "IN FACT YOU CREATED A NEW LUNAR CRATER ",W*.277," FT. DEEP ",!
05.90	T !!,"CONTROL OUT ",!!;Q

06.10	S L=L+S;S T=T-S;S M=M-S*K;S A=I;S V=J

07.10	I (S-.005) 5.1;S S=2*A/(V+FSQT(V*V+2*A*(G-Z*K/M)))
07.30	D 9;D 6;G 7.1

08.10	S W=(1-M*G/(Z*K))/2;S S =M*V/(Z*K*(W+FSQT(W*W+V/Z)))+.05;D 9
08.30	I (I) 7.1,7.1;D 6; I (-J) 3.1,3.1; I (V) 3.1,3.1,8.1

09.10	S Q=S*K/M;S J=V+G*S+Z*(-Q-Q^2/2-Q^3/3-Q^4/4-Q^5/5)
09.40	S I =A-G*S*S/2-V*S+Z*S*(Q/2+Q^2/6+Q^3/12+Q^4/20+Q^5/30)

TYPE !"LUNAR LANDER GAME."!
TYPE !"THIS GAME ALLOWS YOU TO ATTEMPT A LUNAR LANDING SIMULATION"
TYPE !"BY ADJUSTING ROCKET POWER TO CUSHION THE LANDING."
TYPE !"START THE PROGRAM BY TYPING 'GO' FOLLOWED BY THE CR KEY."!!
%%%EWXMULPK.FCL
C - FOCAL MULTIPLE PRECISION PACKAGE.
C-FOCAL	v3A(222)-1	2102	28-AUG-73
ERASE ALL,

1.01	TYPE !!"IN ORDER TO USE THE MULTIPLE-PRECISION PACKAGE,"
1.02	TYPE !"CREATE A FOCAL APPLICATIONS PROGRAM IN GROUPS 1-39,"
1.03	TYPE !"THEN CALL IN THE PACKAGE, AND RUN THE COMBINATION."!
1.04	QUIT

40.01	C - INITIALIZE PARAMETERS AND CONSTANTS
40.10	S N=6 ;C - NUMBER OF WORDS OF PRECISION.
40.11	C - ITEM 0 IS THE SIGN/OVERFLOW WORD.
40.12	C - ITEM N+1 IS THE REMAINDER WORD.
40.20	S M=2^24 ;C - MODULO OF WORDS OF PRECISION
40.21	C - M*M*N MUST NOT OVERFLOW WORD LENGTH.
40.30	S P=0 ;C - STACK POINTER ;C - STACK IS A(P,I)
40.40	S U=1 ;C - INDEX OF WORD WITH DECIMAL POINT AT THE RIGHT OF IT.
40.50	C - ARG = SINGLE-WORD ARGUMENT.
40.60	X FOCAL(2,2);T%3;ERASE 41.01,42.01,43.01,44.01,45.01,46.01,47.01,48.01,49.01,50.01,51.01,52.01,53.01,54.01,55.01,56.01,57.01,58.01,59.01

41.01	C - CREATE A NUMBER WITH VALUE ARG.
41.10	S P=P+1,T1=N+1,T3=0;IF FABS(ARG) 41.2,41.2;S T1=U-FITR(FLOG(FABS(ARG))/FLOG(M)),T3=ARG*M^(T1-U)
41.20	F T2=0,T1-1;S A(P,T2)=0
41.30	F T2=T1,N+1;S A(P,T2)=FITR(T3),T3=M*(T3-FITR(T3))

42.01	C - ADD TOP NUMBER INTO SECOND TOP.
42.10	S P=P-1,T2=0;F T1=N,-1,1;S T3=T2+A(P,T1)+A(P+1,T1),T2=FITR(T3/M),A(P,T1)=T3-M*T2
42.20	S A(P,0)=T2

43.01	C - SUBTRACT TOP NUMBER INTO SECOND TOP.
43.10	S P=P-1,T2=0;F T1=N,-1,1;S T3=T2+A(P,T1)-A(P+1,T1),T2=FITR(T3/M),A(P,T1)=T3-M*T2
43.20	S A(P,0)=T2

44.01	C - SCALE (MULTIPLY) TOP NUMBER BY INTEGER, ARG.
44.10	S T2=0;F T1=N,-1,1;S T3=T2+A(P,T1)*ARG,T2=FITR(T3/M),A(P,T1)=T3-M*T2
44.20	S A(P,0)=T2

45.01	C - DIVIDE TOP NUMBER BY INTEGER, ARG.
45.10	S T2=0;F T1=1,N;S T3=FITR((T2*M+A(P,T1))/ARG),T2=T2*M+A(P,T1)-ARG*T3,A(P,T1)=T3
45.20	S A(P,N+1)=T2

46.01	C - MULTIPLY TOP NUMBER INTO SECOND TOP
46.10	S T4=P-1;F T5=1,N;D 47;S ARG=A(T4,T5);D 44,48
46.20	F T5=1-U,2*N-U;S A(T4,T5)=0
46.30	F T5=1,N;F T1=0,N;S A(T4,T1+T5-U)=A(T4,T1+T5-U)+A(T4+T5,T1)
46.40	S P=T4,T2=0;F T1=2*N-U,-1,-U;S T3=A(P,T1)+T2,T2=FITR(T3/M),A(P,T1)=T3-M*T2

47.01	C - COPY ONE NUMBER TO MAKE A NEW ENTRY, INDEX P
47.10	S P=P+1;F T1=1,N;S A(P,T1)=A(P-1,T1)

48.01	C - INTERCHANGE TOP AND SECOND TOP
48.10	F T1=1,N;S T2=A(P,T1),A(P,T1)=A(P-1,T1),A(P-1,T1)=T2

51.01	C - CREATE LOGARITHM OF TOP ENTRY AS A NEW ENTRY.
51.10	C - NUMBER >= 1
51.20	S POW=0;D 47,53;I -ARG 51.3;Z "ILLEGAL LOGARITHM ARGUMENT".
51.30	I ARG-1.05 51.4;S POW=POW+1;D 55,48,57,53;G 51.30
51.40	S ARG=1;D 41,48,43,47,47;S ITER=1
51.50	S ARG=P-1;D 56;S ARG=P-3;D 56,46,51.9,53;I -FABS(ARG) 51.6;D 57,43;S ARG=2^POW;D 44;R
51.60	S ITER=ITER+1,ARG=ITER;D 45,42;G 51.5
51.90	F T1=1,N;S A(P-2,T1)=A(P,T1)

52.01	C - TYPE OUT TOP NUMBER IN RADIX RAD
52.05	S RAD=FITR(RAD+.5);I -RAD 52.1;S RAD=10;C - DEFAULT DECIMAL.
52.10	D 47,53;F T1=U,-1,1;S A(P,N+T1-U)=A(P,T1)*FSGN(ARG)
52.20	F T1=0,N-U;S A(P,T1)=0
52.30	S ND=0;I -ARG 52.4,52.4;T "-"
52.40	S ND=ND+1,ARG=RAD;D 45,53;S CH(ND)=A(P,N+1);I -FABS(ARG) 52.4
52.50	F T1=ND,-1,1;X FCHR(CH(T1)+48)
52.60	T ".";S ND=(N-U)*FLOG(M)/FLOG(RAD)
52.70	D 57,47;F T7=1,ND;S A(P,U)=0,ARG=RAD;D 44;X FCHR(A(P,U)+48)
52.80	D 57

53.01	C - RETURN VALUE OF TOP NUMBER IN ARG.
53.10	S ARG=0;F T1=1,N;S ARG=ARG+A(P,T1)*M^(U-T1)

54.01	C - ACCEPT A (POSITIVE) (FIXED-POINT) NUMBER TYPED IN, TO CREATE A NEW NUMBER
54.05	I -RAD 54.1;S RAD=10
54.10	S T4=1,ARG=0;D 41
54.20	S CH=FCHR(-1);I CH-46 54.9,54.6;I CH-48 54.9;I 57-CH 54.9;S ARG=RAD;D 44;S ARG=CH-48;D 41,42;G 54.2
54.60	S CH=FCHR(-1);I (CH-48)*(57-CH) 54.9;S ARG=CH-48;D 41;F T8=1,T4;S ARG=RAD;D 45
54.70	D 42;S T4=T4+1;G 54.6
54.90	IF CH-13 54.99,54.91,54.99
54.91	X FCHR(-1);C - SWALLOW LINE-FEED AFTER CARRIAGE-RETURN
54.99	RETURN

55.01	C - CREATE SQUARE ROOT OF TOP NUMBER AS A NEW NUMBER.
55.10	D 53;S ARG=FSQT(ARG),TSQ=2*ARG;D 41
55.20	D 47,47,46;S ARG=P-2;D 56,43;S ARG=TSQ;D 45,53,43;I -FABS(ARG) 55.2

56.01	C - COPY ONE NUMBER TO MAKE A NEW ENTRY, INDEX ARG.
56.10	S P=P+1;F T1=1,N;S A(P,T1)=A(ARG,T1)

57.01	C - DELETE TOP ENTRY
57.10	S P=P-1

58.01	C - TYPE OUT TOP NUMBER IN DECIMAL
58.10	D 47,53;F T1=U,-1,1;S A(P,N+T1-U)=A(P,T1)*FSGN(ARG)
58.20	F T1=0,N-U;S A(P,T1)=0
58.30	S ND=0;I -ARG 58.4,58.4;T "-"
58.40	S ND=ND+1,ARG=10;D 45,53;S CH(ND)=A(P,N+1);I -FABS(ARG) 58.4
58.50	F T1=ND,-1,1;X FCHR(CH(T1)+48)
58.60	T ".";S ND=(N-U)*LOG10(M)
58.70	D 57,47;F T7=1,ND;S A(P,U)=0,ARG=10;D 44;X FCHR(A(P,U)+48)
58.80	D 57

59.01	C - TYPE OUT TOP NUMBER IN OCTAL
59.10	D 47,53;F T1=U,-1,1;S A(P,N+T1-U)=A(P,T1)*FSGN(ARG)
59.20	F T1=0,N-U;S A(P,T1)=0
59.30	S ND=0;I -ARG 59.4,59.4;T "-"
59.40	S ND=ND+1,ARG=8;D 45,53;S CH(ND)=A(P,N+1);I -FABS(ARG) 59.4
59.50	F T1=ND,-1,1;X FCHR(CH(T1)+48)
59.60	T ".";S ND=(N-U)*FLOG(M)/FLOG(8)
59.70	D 57,47;F T7=1,ND;S A(P,U)=0,ARG=8;D 44;X FCHR(A(P,U)+48)
59.80	D 57

TYPE !"FOCAL MULTIPLE-PRECISION PACKAGE."!
TYPE !"	THIS PACKAGE IS A COLLECTION OF SUBROUTINES"
TYPE !"WHICH MUST BE CALLED BY AN APPLICATIONS PROGRAM"
TYPE !"USING THE FOCAL 'DO' COMMAND."
TYPE !"THE APPLICATIONS PROGRAM IS RESPONSIBLE FOR"
TYPE !"SETTING UP THE ARGUMENTS FOR EACH SUBROUTINE AND"
TYPE !"FOR MODIFYING AND CALLING GROUP 40 PRIOR TO INITIAL USE."
TYPE !!"	THE PACKAGE USES VARIABLES"
TYPE !"ARG, ITER, N, ND, M, P, POW, RAD, TSQ, T1,T2,T3,T4,T5,T6,T7,T8 AND V."
TYPE !"ARRAYS A(..,..) AND CH(..) ARE ALSO USED."
TYPE !!"	THE ARRAY A(..,..) IS USED IN THE FORM OF A PUSH-DOWN STACK."
TYPE !"THE PACKAGE INCLUDES ADDITION, SUBTRACTION, MULTIPLICATION,"
TYPE !"DIVISION BY INTEGER, STACK MANIPULATION (DUPLICATE, INTERCHANGE,"
TYPE !"DELETE TOP ENTRIES), LOGARITHM, SQUARE ROOT AND DATA ENTRY AND"
TYPE !"TYPE-OUT IN OCTAL AND DECIMAL."
GO
%%%EWXLEARN.FCL
ERASE,ALL
C - FOCAL LEARNING PROGRAM
C-FOCAL	v3A(226)-1	1716	24-OCT-73

01.01	X FOCAL(2,2);D 2
01.02	D 3.1
01.03	E 3.1;D 3
01.04	D 4
01.05	D 5.1
01.06	E 5.1;D 5
01.07	D 6.1
01.08	E 6.1;D 6
01.09	D 7.1
01.10	E 2,3,4,5,6,7,8,9,10,1.10
01.11	D 21
01.12	D 22
01.13	D 23.05
01.14	E 23.05;D 23
01.15	E 23.1;D 23
01.16	E 23.2;D 23
01.17	D 24
01.18	D 25
01.19	D 26
01.20	E 20,21,22,23,24,25,26,27,28,29,1.20
01.21	D 31
01.22	D 32
01.23	E 32.1;D 32
01.24	D 33
01.25	D 34
01.26	D 35
01.27	D 36
01.28	D 37
01.29	D 38
01.30	E 38.1;D 38
01.31	E 11,19,31,32,33,34,35,36,37,38,39,1.31
01.40	D 41
01.41	D 42
01.42	E 42.1;D 42
01.43	D 43
01.44	D 44
01.45	D 45
01.46	D 46
01.47	D 47
01.48	D 48

02.10	T %8.04,!!"FOCAL MAY BE USED IN PROGRAM OR";D 9.1;T !;D 9.1
02.20	T " ALLOWS 'DESK CALCULATOR' OPERATION"!;D 9.2;T " IS USEFUL FO
02.30	T "R THIS PURPOSE"!!"THE COMPUTER WILL RECEIVE A COMMAND ON TYP
02.40	T "ING '*'";D 9.3;T !"TYPE 123.456";D 8;E 1.01;Q

03.10	D 9.4;E 1.02;Q
03.20	T !!;D 9.2;T " CAN ALSO BE USED IN CALCULATING.";D 9.3
03.30	T !"TYPE 1+2";D 8;E 1.03;Q

04.10	T !!"'*' REPRESENTS MULTIPLY, '/' DIVIDE AND BRACKETS ARE AVAIL
04.20	T "ABLE";D 9.3;T !"TYPE (3/4-9)/(1.23*2.45+1)";D 8;E 1.04;Q

05.10	D 9.4;E 1.05;Q
05.20	T !!;D 9.2;T " CAN BE USED TO PRINT TEXT";D 9.3
05.30	T !"TYPE ";X FCHR(34);T"MARY HAD A LITTLE LAMB";X FCHR(34)
05.40	D 9.5,8,10;E 1.06;Q

06.10	D 9.4,10;E 1.07;Q
06.20	T !!"TEXT, EXPRESSIONS ETC. MAY ALL BE PLACED AFTER";D 9.2
06.25	T !"SEPARATED BY COMMAS";D 9.3
06.30	T !"TYPE ";X FCHR(34);T"ONE=";X FCHR(34);T",1,";X FCHR(34);T"A=";X FCHR(34);T",3.4/5.6,";X FCHR(34);T"B=";X FCHR(34);T",(9-0.7)/4"
06.40	D 9.5,8.3;E 10.21;D 10;E 1.08;Q

07.10	D 9.4,10;E 1.09;Q
07.20	L C F29B;G

08.20	T !"END ALL COMMANDS WITH THE RETURN KEY 
08.30	T !"TYPE 'GO' TO RESUME THE TUTORIAL"!!

09.10	T " IMMEDIATE MODE
09.20	T " THE 'TYPE' COMMAND
09.30	T !" TRY TYPING THE COMMAND:
09.40	T !!"TRY 2 OR 3 SIMILAR COMMANDS - AGAIN";D 8
09.50	T !"N.B. TYPE DOUBLE QUOTES AROUND THE TEXT

10.10	T "IF YOU MIS-TYPE"!"THE 'RUBOUT' OR 'DEL' KEY DELETES THE PRECED
10.20	T "ING LETTER(S)"!
10.21	T"EACH DELETED LETTER IS ECHOED AS IT IS RUBBED OUT."!

20.10	T !"RESUME THE TUTORIAL WITH 'GO'"!!

21.30	T !!%8.04"A SPECIAL SYMBOL, '!', IS USED WITH";D 29.2;T !"TO STA
21.40	T "RT A NEW LINE"!"TRY";D 29.3;T !"TYPE !"!"THEN TRY";D 29.3
21.50	T !"TYPE !!!!!";D 20;E 1.11;Q

22.10	D 29.4;T " WITH TEXT, EXPRESSIONS & '!'"!"SEPARATED BY ','";D 20;E 1.12;Q

23.05	D 29.9;D 29.3;T !"SET A=43.73";D 28;E 1.13;Q
23.10	T !!"NOW TRY"!"SET A=2+3*4-5.6/7.8";D 28;E 1.14;Q
23.20	D 29.4,20;E 1.15;Q
23.30	T !!"THE '=' SIGN IN";D 29.6;T " DIFFERS FROM AN ALGEBRAIC '='
23.40	T !"TRY";D 29.3;T !"SET A=1";D 28.1;T !"SET A=A+1";D 28;E 1.16;Q

24.10	T !!"SO FAR WE HAVE WORKED IN IMMEDIATE MODE"!"WE PROGRAM WITH
24.20	D 29.8;T "S. TRY";D 29.3;T !"11.12 SET A=1";D 28.1;T !"11.15 TYPE 
24.30	T " A,!"!"A";D 29.8;D 29.7;T " THROUGH THE 'DO' COMMAND"!"AFTER T
24.40	T "YPING THE";D 29.8;T "S ABOVE TRY";D 29.3;T !"DO 11.12";D 28.1
24.50	T !"DO 11.15";D 20;E 1.17;Q

25.10	T !!"NOW TYPE A NEW LINE"!"11.13 SET A=A+1"!"TRY 'DO'ING ALL 3
25.20	T " LINES IN VARIOUS ORDERS";D 20;E 1.18;Q

26.10	T !!"YOU CAN WRITE OUT A LINE THUS - TRY"!"WRITE 11.12";D 28.1
26.20	T !"WRITE 11.13";D 28.1;T !"WRITE 11.15";D 20;E 1.19;Q

27.10	T !!"WRITE 11"!"AND"!"DO 11"!"'WRITE' AND 'DO' ALL '11' LINES

28.10	T !" FOLLOWED BY
28.20	T !"TYPE A";D 20

29.20	T " THE 'TYPE' COMMAND
29.30	T " TYPING:
29.40	T !!"NOW TRY SOME SIMILAR COMMANDS
29.60	T " THE 'SET' COMMAND
29.70	T " MAY BE USED
29.80	T " NUMBERED COMMAND
29.90	T !!;D 29.6;D 29.7;T " TO SET THE VALUE OF A VARIABLE"!"TRY

30.10	T !"RESUME WITH 'GO'"!!

31.30	T %8.04" - TRY THEM";D 30;E 1.21;Q

32.10	T !!;D 39.2;T " HALTS A PROGRAM - TRY IT"!"REENTER FOCAL BY THE 'REENTER' MONITOR COMMAND"!;E 1.22;Q
32.20	T !!"GOTO 11.12"!"WILL CAUSE THE PROGRAM TO TRANSFER TO THE
32.30	T " NUMBERED LINE,"!"CARRY OUT THAT COMMAND & THEN EACH NU
32.40	T "MBERED COMMAND IN TURN"!"TRY IT"!"THEN TRY 'GOTO' WITH EA
32.45	12.01	Q
32.50	T "CH OTHER '11' LINE";D 30;E 1.23;Q

33.10	T !!"TYPE IN"!"11.19 GOTO 11.13"!"NOW TRY"!"WRITE 11"!"& STAR
33.20	T "T WITH"!"GOTO 11.12"!"N.B. YOU MUST HALT BY";D 39.2;T!"RESUME WITH 'REENTER' AND 'GO'"!;E 1.24;Q

34.10	T !!"AN ALTERNATIVE TO 'SET' IS 'ASK' - TRY"!"ASK A"!"FOLLOWED B
34.20	T "Y"!"TYPE A,!"!"TYPE IN A NUMBER AFTER ':'";D 30;E 1.25;Q

35.10	T !!"ERASE 11"!"ERASES ALL '11' LINES -TRY IT"!"THEN TRY
35.20	T !"WRITE 11";D 30;E 1.26;Q

36.10	T !!"ENTER & TRY A PROGRAM (USE '11' LINES) USING ASK & TYPE
36.20	T !"N.B. 'ERASE' MAY BE USED WITH SINGLE LINES";D 30;E 1.27;Q

37.10	T !!"SUBSCRIPTS ARE SHOWN BY BRACKETED NUMBERS"!"AFTER THE VA
37.20	T "RIABLE NAME"!"TRY"!"SET A(1)=30.34"!"&"!"SET A(2)=43.75
37.30	T !"THEN"!"TYPE A(1),!"!"&"!"TYPE A(2),!";D 30;E 1.28;Q

38.10	T !!"SET AND TYPE MORE SUBSCRIPTED VARIABLES";D 30;E 1.29;Q
38.20	T !!"IF (X)LINE 1,LINE 2,LINE 3"!"ACTS AS";D 39.1;T " 1' IF X<0 ,
38.30	D 39.1;T " 2' IF X=0 , OR";D 39.1;T " 3' IF X>0"!"'ASK' PRINTS TE
38.40	T "XT LIKE 'TYPE'"!"'ERASE 11' & ENTER THE FOLLOWING 'LOOPING' PROGRAM ....."
38.50	T !"11.10 ASK ";X FCHR(34);T"NO. OF READINGS";X FCHR(34);T",N"!

39.10	T !"'GOTO LINE
39.20	T " TYPING CONTROL/C TWICE

41.50	T %8.04"11.20 SET I=0"!"11.30 SET I=I+1
41.60	T !"11.40 ASK A(I)"!"11.50 IF (I-N)11.3,11.6,11.3"!"11.60 SET I=0
41.70	T !"11.70 SET I=I+1"!"11.80 TYPE A(I),!"!"11.90 IF (I-N)11.7,11
41.75	12.01	Q
41.80	T ".95,11.7"!"11.95 TYPE ";X FCHR(34);T"OUTPUT FINISHED";X FCHR(34);T",!"!" ";T !!;E 1.40;Q

42.10	T !!"NOW TYPE 'GOTO 11.1'"!!;E 1.41;Q
42.20	T !!"'LOOPING' IS BETTER DONE WITH 'FOR'"!"11.20 FOR I=1,N;A
42.40	T "SK A(I)";D 49.2;T " 11.2 TO 11.5";D 49.3;T " 11.2";D 49.4;E 1.42;Q

43.10	T !!"SIMILARLY"!"11.60 FOR I=1,N;TYPE A(I),!";D 49.2
43.20	T " 11.6 TO 11.9";D 49.3;T " 11.6";D 49.4;E 1.43;Q

44.10	T !!"'FOR I=1,N;-' MEANS FOR I=1 UP TO I=N CARRY OUT ALL COMMANDS
44.20	T " AFTER ';'"!"N.B. A LINE MAY CONTAIN DIFFERENT COMMANDS SE
44.30	T "PARATED BY ';'"!"'FOR' IS USED IN SUMMING - ENTER"!"11.70 SET S=
44.40	T "0;FOR I=1,N;SET S=S+A(I)"!"11.92 TYPE ";X FCHR(34);T"S=";X FCHR(34);T",S"!;D 49.4;E 1.44;Q

45.10	T !!"'TYPE' USES THE LAST FORMAT GIVEN"!"ABOVE IT WAS '%8.04'
45.20	T !"[SPACE FOR 8 DIGITS & 4 DECIMALS]"!"'%' IS FORMAT - TRY
45.30	T !"TYPE %8.04,1,!,%5.02,1,!,%2,1,!,%,1,!
45.40	T !"[N.B. INTEGER & 'E' FORMATS]"!!;E 1.45;Q

46.10	T !!"TRY MORE FORMATS"!!;E 1.46;Q

47.10	T !!"CALCULATE FACTORIAL 30 BY"!"SET M=1;FOR A=1,30;SET M=
47.20	T "M*A"!"THEN"!"TYPE %,M,!"!!;E 1.47;Q

48.10	T !"**TUTORIAL ENDS**"!"READ THE FOCAL MANUAL"!!;E A

49.20	T !"WILL REPLACE LINES
49.30	T !"ERASE THEM & TYPE IN THE NEW
49.40	T !"'WRITE 11' & START AS ABOVE"!!
TYPE "FOCAL LEARNING PROGRAM."!!!"THIS PROGRAM WILL ASSIST YOU TO LEARN HOW TO USE FOCAL"!
TYPE "AS A DESK CALCULATOR AND AS A PROGRAMMING TOOL."!
TYPE "FOCAL WILL LEAD YOU THROUGH A LESSON, IN WHICH YOU WILL"!
TYPE "RECEIVE INSTRUCTIONS, YOU WILL TRY SOME EXAMPLES, AND"!
TYPE "YOU WILL RETURN TO THE INSTRUCTOR BY TYPING 'GO' AND CARRIAGE-RETURN."!!!
TYPE !"TO PROCEED, TYPE 'GO' AND STRIKE THE CARRIAGE-RETURN KEY."!
%%%EWXHAM.FCL
ERASE,ALL
C-FOCAL	v3C(245)-1	1001	22-JUN-74

01.10	X FOCAL(2,2),FOCAL(1,1),FCHR(29);D 8;X FCHR(31);D 8
01.20	S TONS=FITR(FRAN*4000),POP=FITR(FRAN*6000),YEAR=1792,POI=0
01.30	X FCHR(29);T!"O KING HAMURABI! LIVE FOREVER!	HERE IS THE"!%4,YEA" B.C. ANNUAL REPORT."!"IN THE KINGDOM THERE ARE"!%5,POP," PEOPLE	(ORIGINALLY"POP")"!TON" TONS OF GRAIN"!
01.40	T"HOW MANY TONS OF GRAIN WOULD YOU LIKE TO SOW THIS SEASON?"
01.90	G 2.2

02.10	S TON=FITR(TON+.5);X FCHR(29);D 8;T%4,!!YEA!!%5,POP!TON!
02.20	S TON=FITR(TON+.5);T!;X FCHR(30);D 8;A SOW;S SOW=FITR(SOW+.5)
02.21	IF(YEA-1751) 9.9;IF(TONS-SOW)3.8,3.7
02.22	I(YEA-1792) 4.1;X FCHR(31)

03.20	G 4.1
03.70	T!!!!;X FCHR(31);T"YOU WISH TO SOW EVERY BIT OF GRAIN IN THE KINGDOM!!"!"NEVERTHELESS, YOUR MAJESTY,! YOUR WISH IS MY COMMAND!"!;X FCHR(14),FCHR(42),FCHR(32);G 2.22
03.80	T!!!!;X FCHR(31);T"WITH EVERY RESPECT YOUR MAJESTY, WE HAVE ONLY"TONS" TONS OF GRAIN"!"AND WE ARE THEREFORE UNABLE TO SOW"SOW" TONS WITHOUT EXTERNAL HELP"!"WHAT IS YOUR ADVICE O KING?"!;G 2.1

04.10	S YEAR=YEAR-1
04.20	S STO=TON-SOW
04.30	S RAT=FITR(STO*FRAN(-1)*STO/POP);IF(.95-FRAN) 4.31;S RAT=0
04.31	S FLOODS=FSQT(FRAN)-.5;IF(.95-FRAN)4.32;S FLOODS=0
04.32	S DROUGHT=FSQT(FRAN)-.5;IF(.95-FRAN)4.33;S DROUGHT=0
04.33	I(RAT-STO) 4.34;S RAT=FITR(STO*3/4)
04.34	S KIL=0;I(RAT)4.4;I(POI)4.4;I(RAT-100*POI)4.35;S POI=0,RAT=RAT-100*POI,KIL=10000*POI;G 4.4
04.35	S POI=POI-RAT/100,KIL=100*RAT,RAT=0
04.40	S HARVEST=FITR(SOW*2.1*FRAN*(1-FLO)*(1-DRO))
04.60	S ENEMYDEATHS=FITR(.5+(FRAN-.9)*SOW*(1+POP*POP/10000)^.1);IF(-ENE) 4.61;S ENE=0
04.61	S EAT=FITR(POP*.1);I(EAT+RAT-STO)4.62;S EAT=FITR((STO-RAT)*.9)
04.62	CONT
04.65	S BIRTH=FITR(.5+POP*.01*(1+FRAN))
04.66	S DEATH=FITR(.5+POP*.003*(1+FRAN))
04.70	S STA=FITR(.5+POP-EAT*20);IF(-STA) 4.9;S STA=0
04.90	S TON=STO-RAT+HAR-EAT
04.91	S OVERFLOWFROMSTORAGEBINS=0;I(TON-9999)4.92;S OVE=TON-9999,TON=9999
04.92	CONTINUE
04.95	S POP=POP+BIR-DEA-ENE-STA;I(-POP)4.96;X FCHR(31);T!!!!"ALL THE PEOPLE ARE DEAD";G 9.9
04.96	C

05.01	I(YEA-1791)5.15
05.02	T BIR" BAB";D 12.3;T" BORN DURING THE YEAR   "!
05.03	T DEA" DEATH";S X=DEA;D 12.01;T" OCCURRED FROM NATURAL CAUSES "!
05.04	T EAT" TON";S X=EAT;D 12.01;T" OF GRAIN W";D 12.1;T" SOLD AS FOOD   "!
05.10	T HAR" TON";S X=HAR;D 12.01;T" OF GRAIN W";D 12.1;T" HARVESTED THIS YEAR   "!;S REMEMBER=(DEA-1)*(EAT-1)*(BIR-1)*(HAR-1)
05.11	G 5.2
05.15	IF FABS(REM) 11.99,5.02;IF FABS((BIR-1)*(DEA-1)*(EAT-1)*(HAR-1)) 11.99,5.02;T BIR!DEA!EAT!HAR!;X FCHR(31)
05.20	I(RAT-.5)5.23;T RAT" TON";S X=RAT;D 12.01;T" OF GRAIN W";D 12.1;T" EATEN BY RATS THIS YEAR"!
05.21	I(-POI)5.23;I(FRAN-.8)5.23;T"WOULD YOU LIKE TO PURCHASE SOME RAT POISON?"!"THE PRICE IS CURRENTLY 10 TONS OF GRAIN PER BIN OF POISON.	? ";S X=FCHR(-1);A X1;X FCHR(26);D 8;X FCHR(26);D 8;I(-FABS(X-89))5.23;T"HOW MANY BINS OF POISON? ";X FCHR(30);D 8;A POI;I(10*POI-TON)5.22;S POI=FITR(TON/10)
05.22	S POI=FITR(POI+.5),TON=TON-10*POI;T POI" BIN";S X=POI;D 12.01;T" OF POISON PURCHASED.   EACH BIN WILL KILL 10,000 RATS	"!
05.23	X FCHR(31);D 8;I(KIL-.5)5.3;T KIL" RAT";S X=KIL;D 12.01;T" DIED FROM POISONING"!
05.30	IF(STA-.5)5.4;IF(POP) 9.1,9.1;T STA;D 12.2;T" DIED OF STARVATION"!
05.31	I(FRAN-.95)5.4;T"THE AIM OF THE GAME IS TO BUILD UP THE POPULATION!"!
05.40	CONTINUE
05.50	I(ENE-.5)5.6;T ENE" FARMER";S X=ENE;D 12.01;T" W";D 12.1;T" KILLED BY ENEMY RAIDERS"!
05.51	I(FRAN-.9)5.6;I(FRAN-.75)5.52;T"PERHAPS YOU ARE SENDING TOO MANY FARMERS TO THE FIELDS?"!;G 5.6
05.52	T"THE MORE WE SOW, YOUR MAJESTY, THE MORE THE ENEMY WILL RAID US"!
05.60	I(FLO-.005)5.7;T 100*FLO" PERCENT OF THE HARVEST WAS RUINED BY FLOODS"!
05.70	I(DRO-.005)5.8;T 100*DRO" PERCENT OF THE HARVEST WAS RUINED BY DROUGHT"!
05.80	I(OVE-.5)5.9;T OVE" TON";S X=OVE;D 12.01;T" OF WHEAT HAD TO BE THROWN IN THE SEA BECAUSE"!"	WE RAN OUT OF STORAGE BINS"!
05.90	I(-TON) 2.1;T!!"ALL THE FOOD IS USED UP 	!!!"

08.01	X FCHR(127),FCHR(127),FCHR(127)

09.01	X FOCAL(2,2);TYPE %2
09.10	T!!"O KING! ALL THE PEOPLE HAVE DIED OF STARVATION!"!!!;QUIT
09.90	T!!!!;X FCHR(31);T"WELL DONE HAMURABI!"!;QUIT

11.02	S X=X*2^(-36);IF(-X)11.04,11.99;S X=X+1
11.04	F XC=1,6;X FCHR(32+FITR(X*64));S X=X*64-FITR(X*64)
11.99	RETURN

12.01	IF FABS(X-1) 11.99,11.99;T"S"
12.10	IF FABS(X-1) 11.99,12.11;T"ERE"
12.11	T"AS"
12.20	IF FABS(STA-1) 11.99,12.21;T" PEOPLE"
12.21	T" PERSON"
12.30	IF FABS(BIR-1) 11.99,12.31;T"IES WERE"
12.31	T"Y WAS"
TYPE "THIS PROGRAM IS INTENDED ONLY FOR VT05 TERMINAL!"!!
TYPE "TYPE 'GO' TO COMMENCE"!
%%%EWXSPEED.FCL

ERASE ALL,
C - ACCURACY TEST.
01.01	C- ACCURACY OF INTERNAL NUMBERS ...
01.02	X FOCAL(1,1),FOCAL(2,2);S INI=GETTAB(4,-1),X=1,DX=1
01.03	S M=N,DX=DX/2,Y=X+DX;D 30;IF (N-1000) 1.03
01.04	TYPE %2,M," BITS ACCURACY FOR INTERNAL NUMBERS."!
01.05	S Y=1.0000001,M=7;D 30;IF(1000-N)1.25
01.06	S Y=1.00000001,M=8;D 30;IF(1000-N)1.25
01.07	S Y=1.000000001,M=9;D 30;IF(1000-N)1.25
01.08	S Y=1.0000000001,M=10;D 30;I(1000-N)1.25
01.09	S Y=1.00000000001,M=11;D 30;I(1000-N)1.25
01.10	S Y=1.000000000001,M=12;D 30;I(1000-N)1.25
01.11	S Y=1.0000000000001,M=13;D 30;I(1000-N)1.25
01.12	S Y=1.00000000000001,M=14;D 30;I(1000-N)1.25
01.13	S Y=1.000000000000001,M=15;D 30;I(1000-N)1.25
01.14	S Y=1.0000000000000001,M=17;D 30;I(1000-N)1.25
01.15	S Y=1.000000000000000001,M=18;D 30;I(1000-N)1.25
01.16	S Y=1.0000000000000000001,M=19;D 30;I(1000-N)1.25
01.17	S Y=1.00000000000000000001,M=20;D 30;I(1000-N)1.25
01.18	S Y=1.000000000000000000001,M=21;D 30;I(1000-N)1.25
01.19	S Y=1.0000000000000000000001,M=22;D 30;I(1000-N)1.25
01.20	S Y=1.00000000000000000000001,M=23;D 30;I(1000-N)1.25
01.21	S Y=1.000000000000000000000001,M=24;D 30;I(1000-N)1.25
01.22	S Y=1.0000000000000000000000001,M=25;D 30;I(1000-N)1.25
01.23	S Y=1.00000000000000000000000001,M=26;D 30;I(1000-N)1.25
01.24	TYPE!"?ERROR IN NUMERIC INPUT ROUTINE"!;RETURN
01.25	TYPE%2,M," SIGNIFICANT DIGITS DISCERNED ON INPUT."!
01.40	T %9.03;C TYPE IN MILLISECONDS TO NEAREST MICRO-SECOND.
01.45	S JIF=50;IF FITR(FITR(2^6+GETTAB(9,15)/2^29)/2)-FITR(2^6+GETTAB(9,15)/2^29)/2 1.5;S JIF=60
01.50	T!"FOLLOWING FIGURES ARE BASED ON A"%2,JIF," CYCLE CLOCK:"!
01.80	G 3.01;COMMENCE EXECUTION.
01.90	C GROUP 2 IS A SCRATCH AREA.

03.01	OPERATE OUTPUT DSK:FOCAL.TMP;F X=2.01,.01,2.99;T%3.02,X,"C"!;C MAKE TEMPORARY FILE
03.02	OPERATE OUTPUT TTY:;L C FOCAL.TMP;T%5.03;C SET UP GROUP 2 FULL OF COMMENTS
03.03	31.02 F X=1,999;C
03.04	D 31;S A=B
03.05	31.02 F X=1,999;                                                  C
03.06	D 31;S SPT=B
03.07	31.02 F X=1,999;C12345678901234567890123456789012345678901234567890
03.08	D 31;S INT=B
03.09	31.02 F X=1,999;D 2.01
03.10	D 31;S DOT=B
03.11	2.01 G 2.02
03.12	D 31;S GOT=B
03.14	31.02 F X=1,999;D 2.99
03.16	D 31; S DPT=B
03.22	31.02 F X=1,999;S Y=0
03.23	D 31;S SET=B
03.24	31.02	F X=1,999;X
03.25	D 31;S XET=B
03.26	31.02 F X=1,999;X .
03.28	D 31;S DP=B
03.32	31.02 F X=1,999;X 0
03.34	D 31;S ZER=B
03.36	31.02 F X=1,999;X .0
03.38	D 31;S DRP=B
03.40	31.02 F X=1,999;X E
03.42	D 31;S DEX=B
03.44	31.02 F X=1,999;X +0
03.46	D 31;S SGN=B
03.50	31.02 F X=1,999;X 1+1
03.52	D 31;S OPA=B
03.54	31.02 F X=1,999;X 1-1
03.56	D 31;S OPS=B
03.58	31.02 F X=1,999;X 1*1
03.60	D 31;S OPM=B
03.62	31.02 F X=1,999;X 1/1
03.64	D 31;S OPD=B
03.66	31.02 F X=1,999;X 1^0
03.68	D 31;S OPE=B
03.70	31.02 F X=1,999;X 1^8
03.72	D 31;S OPF=B
03.74	31.02 F X=1,999;X ()
03.76	D 31;S OPB=B
03.78	31.02	F X=1,999;X FSIN(2)
03.80	D 31;S OFS=B
03.82	31.02	F X=1,999;X FEXP(2)
03.84	D 31;S OFE=B
03.86	31.02	F X=1,999;X FLOG(2)
03.88	D 31;S OFL=B
03.90	31.02	F X=1,999;X FRAN(0)
03.92	D 31;S OFR=B
03.94	31.02	F X=1,999;X FATN(2)
03.96	D 31;S OFA=B

10.01	C TYPE-OUT SECTION.
10.02	T!!!"FEATURE				TIME (MILLISEC)		NOTES."!
10.04	T!"TO INTERPRET 1 SPACE		",(SPT-A)/999/50
10.06	T!"TO INTERPRET 1 CHARACTER	",(INT-A)/999/50
10.08	T!"TO SCAN FOR A LINE NUMBER	",(DPT-DOT)/999/98,"	PER LINE SCANNED OVER"
10.10	T!"TO EXECUTE A "'DO"'		",(DOT-A)/999,"	INCL. # INTERPRETATION"
10.12	T!"TO EXECUTE A "'GO TO"'		",(GOT-DOT)/999,"	INCL. # INTERPRETATION"
10.14	T!"TO EXECUTE A "'SET"'		",(SET-A)/999,"	INCLUDES DATA STORAGE"
10.16	T!"NUMERIC INPUT..."!"	DECIMAL POINT		",(DP-XET)/999
10.18	T!"	DIGITS LEFT OF POINT	",(ZER-XET)/999,"	PER DIGIT"
10.20	T!"	DIGITS RIGHT OF POINT	",(DRP-DP)/999,"	PER DIGIT"
10.22	T!"	EXPONENT		",(DEX-XET)/999,"	PLUS TIME FOR INTEGER"
10.24	T!"	SIGN (+ OR -)		",(SGN-ZER)/999
10.26	T!"OPERATION +			",(OPA-SGN+ZER-XET)/999,"	PLUS INTERPRETATION"
10.28	T!"OPERATION -			",(OPS-SGN+ZER-XET)/999,"	PLUS INTERPRETATION"
10.30	T!"OPERATION *			",(OPM-SGN+ZER-XET)/999,"	PLUS INTERPRETATION"
10.32	T!"OPERATION /			",(OPD-SGN+ZER-XET)/999,"	PLUS INTERPRETATION"
10.34	T!"OPERATION ^			",(OPE-SGN+ZER-DP)/999,"	IF FRACTIONAL POWER"
10.36	T!"		PLUS		",(OPF-OPE)/999/4,"	PER POWER-OF-2 IN EXPONENT"
10.38	T!"OPERATION ()			",(OPB-XET)/999,"	*"
10.40	T!"OPERATION FSIN(2)		",(OFS-XET)/999,"	*"
10.42	T!"OPERATION FEXP(2)		",(OFE-XET)/999,"	*"
10.44	T!"OPERATION FLOG(2)		",(OFL-XET)/999,"	*"
10.46	T!"OPERATION FRAN(0)		",(OFR-XET)/999,"	*"
10.48	T!"OPERATION FATN(2)		",(OFA-XET)/999,"	*"
10.98	T!!"*	INCLUDING TIME TO INTERPRET THE CHARACTERS"
10.99	T!!"TIME FOR THIS TEST PROGRAM	",%3,(GETTAB(4,-1)-INI)/JIF,"	SECONDS."!

29.99	T!!!!;E 2;LIBRARY DELETE FOCAL.TMP;QUIT

30.10	C- SUBROUTINE TO MEASURE DIFFERENCE BETWEEN X AND Y.
30.11	C- N IS THE NUMBER OF BITS REQUIRED TO SEPARATE X FROM Y.
30.20	SET N=100000;IF (-FABS(X-Y)) 30.3;RETURN
30.30	SET N=1-FLOG(FABS(2*(X-Y)/(X+Y)))/FLOG(2);RETURN

31.01	S B=GETTAB(4,-1)
31.02	F X=1,999;S Y=+0
31.03	S B=(GETTAB(4,-1)-B)*1000/JIF;R
TYPE !"FOCAL SPEED TRIALS. TO COMMENCE, TYPE 'GO'."!
C - END OF XSPEED
%%%EWXRESEQ.FCL

ERASE ALL,
C-FOCAL	v5D(315)-1	2019	18-Sep-75

01.01	C PROGRAM TO RE-SEQUENCE A FOCAL PROGRAM.
01.02	10.01
01.03	11.01
01.04	12.01
01.05	13.01
01.06	14.01
01.07	15.01
01.08	16.01
01.09	17.01
01.10	X FOCAL(1,1),FOCAL(2,2)
01.20	A!"NAME OF FOCAL PROGRAM TO RESEQUENCE:"I$
01.25	O O RS.TMP;T I$;O O TTY:;O I RS.TMP
01.30	S I$="",CNT=6,FLAG=0
01.40	S C=FCHR(-1);I(C-46)1.7,1.6;I(C-48)*(C-57)*(C-65)*(C-90)*(C-97)*(122-C)1.2
01.50	I CNT 1.4;S CNT=CNT-1,I$=I$+FCHR$(C);G 1.4
01.60	I FLAG 1.2;S CNT=4,FLAG=-1;G 1.5;C HERE IF EXTENSION SPECIFIED
01.70	I FLAG 1.8;S I$=I$+".FCL";C HERE IF NO EXTENSION SPECIFIED
01.80	O I TTY:
01.90	COLLECT ALL OLD LINE NUMBERS IN ARRAY A(N), N=1,FLN
01.95	O O RS.TMP;T"L S RS.TMP;E,A;L C "I$";E;S X=(2^36+FOCAL(97))/2^18,X=(X-FITR(X))*2^18,FLN=0"!"99.98	S X=X+1;I FOCAL(X)99.99,99.98;S FLN=FLN+1,T=FITR(FOCAL(X)/2^18)/2^7,A(FLN)=100*FITR(T)+128*(T-FITR(T));G 99.98"!"99.99	R"!"D 99.98;E A;L S RS1.TMP;L C RS.TMP;L C RS1.TMP;L D RS1.TMP"!;O O TTY:
01.99	L C RS.TMP

02.10	A"SELECT THE PORTION TO BE RE-SEQUENCED:"!"1.  THE WHOLE PROGRAM."!"2.  ONE GROUP."!"3.  A RANGE OF LINES."!":"J
02.11	I J-1 2.1,2.12;I J-2 2.1,2.5;I J-3 2.1,2.6,2.1
02.12	S L=A(1)/100,LO=1.01,U=A(FLN)/100;T!"THERE ARE"%4,FLN-2" LINES IN THE PROGRAM"!
02.20	A"DO YOU WANT TO PRESERVE THE PROGRAM IN A GROUP STRUCTURE? (YES OR NO)"J;I J-0NO 2.2,2.3;I J-0YES 2.2,2.4,2.2
02.30	T"WARNING: REFERENCES TO GROUPS WILL NOT BE CHANGED."!
02.31	A"WHAT STEP INTERVAL BETWEEN LINE NUMBERS? "S
02.32	S S=FITR(S*100+.5)/100;I S-.01 4.21;I 99*.99-FLN*S 4.21,4.21
02.33	G 2.8
02.40	D 2.31;S S=FITR(S*100+.5)/100,X=101;I S-.01 4.21;F J=1,FLN;D 2.45
02.41	I S,4.21,4.4
02.45	I FITR(A(J)/100)-FITR(X/100),2.46;S X=FITR(A(J)/100)*100+1;G 2.45
02.46	S B(A(J))=X/100,X=X+100*S;I FITR(A(J)/100)-FITR(X/100)2.47
02.47	S X=X-100*S+.01;I FITR(A(J)/100)-FITR(X/100+.5)2.48
02.48	S S=0,J=FLN+1;CAUSE PREMATURE EXIT AND ERROR MESSAGE.
02.50	T"WHAT GROUP NUMBER? :";A L;S U=FITR(L+.5)+.99
02.51	A"ENTER NEW GROUP NUMBER AND STEP SIZE: "LO,S
02.52	I-(LO-FITR(LO))^2 2.51;I LO-1 2.51;I 99-LO 2.51;I S-.01 2.51;I .98-S 2.51;I(L-LO)^2,2.53;S B(L*100)=LO;F J=1,FLN;I(A(J)-LO*100)^2 ,2.59
02.53	I LO 2.1;S LO=LO+.01
02.54	F J=1,FLN;I(FITR(A(J)/100)-L)^2,2.58
02.55	I S,4.21,4.4
02.57	S J=FLN,S=0
02.58	S B(A(J))=LO,LO=LO+S;I FITR(LO-S)-FITR(LO)2.57
02.59	S J=FLN,LO=-1;T!"THERE ARE ALREADY LINES IN THAT GROUP.  SUGGEST OPTION 3."!
02.60	A"ENTER THE NUMBERS OF THE FIRST AND LAST LINES OF THE RANGE: ",L,U;G 2.7
02.70	A"RANGE THESE ARE TO BECOME"!"[LOWEST,INTERVAL]"!LO,S
02.80	I 100-LO 2.7;I S-.01 2.7;I 1-LO 2.9;S LO=1.01
02.90	C

04.01	CHECK THAT RESEQUENCING IS POSSIBLE; MAKE RESEQUENCING MATRIX.
04.10	S K=0;F J=1,FLN;I(A(J)-L*100)*(U*100-A(J))4.3;S B(A(J))=LO+S*K,K=K+1;I FITR(B(A(J)))-B(A(J))4.3;S B(A(J))=B(A(J))+.01;I .015-S 4.3;S K=K+1
04.11	S E$=""
04.13	F J=1,FLN;I(A(J)-L*100)*(A(J)-U*100)4.3,4.3;I(A(J)-LO*100)*(LO*100+(K-1)*100*S-A(J))4.3;S E$=FCHR$(13)+FCHR$(10)+"%OVERLAP WILL OCCUR";I FITR((A(J)-LO*100)/S)-(A(J)-LO*100)/S 4.3;S E$="";T!"%OVERWRITING WILL OCCUR AT LINE"%4.02,A(J)/100" ..."!;S J=FLN
04.14	T E$!
04.20	I LO+K*S-100 4.4
04.21	T!"RE-SEQUENCING IS NOT POSSIBLE WITH THAT INCREMENT"!;G 2.1
04.30	R
04.40	C

05.01	C DO THE RESEQUENCING
05.02	O O RS.TMP;T"O I "I$"/4;O O RS.TMP/5";O O TTY:;L C RS.TMP;L D RS.TMP
05.10	S C0=0,C=0;D 10;C IS THE CURRENT CHARACTER JUST READ FROM THE INPUT FILE; C0 HAS BEEN PROCESSED BUT NOT YET WRITTEN TO THE OUTPUT FILE.
05.90	O I TTY:/4;O O TTY:/5;CLOSE OUTPUT FILE.
05.92	O O RS1.TMP;T"E,A;L C RS.TMP;L D RS1.TMP;L D RS.TMP;T!";X FCHR(34);T"THE RESEQUENCED FILE IS NOW IN CORE.	PLEASE SAVE IT.";X FCHR(34);T"!;Q"!;O O TTY:
05.94	L C RS1.TMP

10.01	C PROGRAM TRANSLATOR
10.02	COME HERE WITH CHARACTER IN C READY TO PROCESS
10.03	CHARACTER IN C0 READY TO WRITE TO THE OUTPUT FILE.
10.04	C - THIS ROUTINE PROCESSES A LINE AT A TIME TILL EOF THEN EXITS.
10.10	I C 10.9;D 11
10.15	C - WE OUGHT TO EXIT GROUP 11 WITH C CONTAINING A LINE FEED.   BEST CHECK THIS HOWEVER...
10.20	D 15;I(C0-10)^2,10.1;I-C0 10.2,10.2
10.90	R

11.01	C LINE TRANSLATOR
11.10	S Z=0,CH(-1)=C0,CH(0)=C
11.20	D 12;I C 11.9;I-(C-10)^2 11.2
11.90	R

12.01	C COMMAND TRANSLATOR
12.02	I(C-48)*(57-C)12.03;D 14;R
12.03	I-C 12.04,12.04;R
12.04	I-((C-10)*(C-13)*(C-59))^2 12.05;D 15;R
12.05	I 32-C 12.06;D 15;G 12.02
12.06	S X=C
12.07	D 15;I(C-47)*(C-58)*(C-64)*(C-91)*(C-96)*(C-123)12.07
12.08	I 32-C 12.09;D 15;I-C 12.08,12.08;R
12.09	I(X-96)*(123-X)12.1;S X=X-32
12.10	I (X-65)*(X-70)*(X-79)*(X-81)*(X-82)*(X-83)*(X-84)*(X-88) 12.11,12.40,12.11	;ASK FOR OPERATE QUIT RETURN SET TYPE XECUTE
12.11	I X-67 12.12,12.55,12.12	;COMMENT
12.12	I (X-68)*(X-69)*(X-77)*(X-87) 12.13,12.46,12.13	;DO;ERASE;MODIFY;WRITE
12.13	I X-71 12.16,12.75,12.16	;GO
12.16	I X-73 12.17,12.45,12.17	;IF
12.17	I X-76 12.18,12.50,12.18	;LIBRA
12.18	T/0!"%ILLEGAL COMMAND IN LINE BEGINNING..."!
12.19	F J=0,Z;X FCHR(CH(J))
12.20	T!/5;G 12.55
12.40	D 13;I C 12.9;I ((C-59)*(C-13)*(C-10))^2,12.9;I ((C-34)*(C-40))^2*(C-48)*(C-57)*(C-65)*(C-90)*(C-97)*(C-122)12.42,12.42;D 15;G 12.4
12.42	D 13;G 12.4
12.45	D 13
12.46	D 14;I-(C-44)^2 12.4;D 15;G 12.46
12.50	I(C-83)*(C-115)12.4,12.51,12.4;C - CONVERT ONLY LIBRA SAVE.
12.51	D 15;I(C-47)*(C-58)*(C-64)*(C-91)*(C-96)*(C-123)12.51
12.52	D 13;I-(C-58)^2 12.46;D 15;G 12.52
12.55	I C 12.99;I(C-10)^2,12.99;D 15;G 12.55
12.75	I FABS((C-84)*(C-116)),12.76;D 14;G 12.55
12.76	D 13,14;G 12.55
12.80	D 15;G 12.02
12.90	I-(C-59)^2 12.99;D 15
12.99	R

13.01	C EXPRESSION SKIPPER
13.02	I C-34 13.1,13.03,13.1
13.03	D 18;G 13.02
13.10	I C-40 13.2,13.11,13.2
13.11	D 17;G 13.5
13.20	I((C-46)*(C-36))^2*(C-48)*(C-57)*(C-65)*(C-90)*(C-97)*(C-122)13.21,13.21,13.4
13.21	D 15;G 13.2;COME TO THIS LINE TO FIND THE END OF ALPHANUMERIC/ALPHANUM$.
13.40	I C-40 13.5,13.11,13.5
13.50	I (C-45)*(C-43)*(C-42)*(C-47)13.9,13.51,13.9
13.51	D 15;G 13.02
13.90	R

14.01	C NUMBER TRANSLATOR
14.10	I C-58 14.2;D 13;R
14.20	I (C-59)*(C-10)*(C-13) 14.3,14.9
14.30	I 32-C 14.4;D 15;G 14.1
14.40	I 47-C 14.5;D 13;R
14.50	S J=0,NP=10,NPI=1,ZZ=Z-1
14.60	S NPI=NPI*10/NP,J=J*NP+(C-48)/NPI;D 16;I(C-46)^2,14.7;I(C-47)*(58-C)14.8,14.8,14.6
14.70	I NP-5 14.8;S NP=1,NPI=.1,C=48;G 14.6
14.80	S J=FITR(J*100+.5);I B(J),14.89;I((CH(ZZ)-32)*(CH(ZZ)-9))^2,14.81;X FCHR(CH(ZZ))
14.81	S C0=0;T%4.02,B(J);R
14.89	S C0=0;F J=ZZ,Z-1;X FCHR(CH(J))
14.90	R

15.01	CHARACTER PUTTER AND GETTER
15.10	X FCHR(C0);S C0=C,C=FCHR(-1),Z=Z+1,CH(Z)=C

16.01	CHARACTER GETTER WITH NO PUTTER.
16.20	S C0=C,C=FCHR(-1),Z=Z+1,CH(Z)=C

17.01	C - IF YOUR CURRENT CHARACTER IS LEFT PARENS (40), DO 17.
17.02	C - THIS GROUP WILL SKIP ALL THE CONTENTS INCLUDING THE ).
17.03	C - ON EXIT, C WILL CONTAIN THE CHARACTER TO RIGHT OF THE ).
17.10	S NP=0
17.20	D 15
17.25	I C 17.99;I C-13 17.2,17.99;I C-34 17.2,17.4;I C-40 17.2,17.5;I 41-C 17.2;S NP=NP-1;I-NP 17.2;D 15;G 17.99
17.40	D 18;G 17.25;COME TO THIS LINE IF " ENCOUNTERED.
17.50	S NP=NP+1;G 17.2;COME TO THIS LINE IF NESTED ().
17.99	R

18.01	C - IF YOUR CURRENT CHARACTER IS DOUBLE QUOTE (34), DO 18.
18.02	C - THIS GROUP WILL SKIP ALL THE CONTENTS INCL THE CLOSING ".
18.03	C - ON EXIT, C WILL CONTAIN THE CHAR TO RIGHT OF CLOSING ".
18.04	D 15;I 34-C 18.04,18.05;I 10-C 18.04,18.9,18.04
18.05	D 15
18.90	R
TYPE!!"BEWARE!	THIS PROGRAM IS PRETTY SLOW."!"IT RESEQUENCES ABOUT 50 LINES PER MINUTE OF CPU TIME."!
%%%EWXSYSTA.FCL
ERASE ALL,
C-FOCAL	v5D(315)-1	1527	2-Aug-75

09.01	C - SYSTAT
09.02	D 9.95;T!"Status of ";F I=0,4;S X=GETTAB(9,I);D 9.98
09.03	T" at";S X=GETTAB(9,8);D 9.97;T" on";S X=GETTAB(9,9);D 9.96;T!
09.04	S X=FITR((GETTAB(9,15)+2^35)/256)/2;I X-FITR(X),9.05;T!"No operator on duty"!
09.05	T"Uptime";S X=GETTAB(10,13);D 9.97;T","100*GETTAB(4,0)/GETTAB(10,13)"%Null time ="100*(GETTAB(4,0)-GETTAB(10,18))/GETTAB(10,13)"%Idle +"100*GETTAB(10,18)/GETTAB(10,13)"%Lost"!
09.06	S X=0;F J=1,GETTAB(10,16);S Z=FITR((GETTAB(0,J)+2^35)/2^32)/2,X=X+2*(Z-FITR(Z))
09.07	T%2,X" Jobs in use out of"SJN".  "GETTAB(9,44)" logged in, out of"GETTAB(9,40)".  (LOGMAX)"!
09.08	T!"Job     Who       User       What   Size(P) State Run Time"!!
09.09	F JOB=1,SJN;S X=FITR(GETTAB(0,JOB)/2^32+8)/2;I X-FITR(X),9.99;T%2,JOB;S X=GETTAB(2,JOB);D 9.93;T"	";S X=GETTAB(25,JOB);D 9.94;S X=GETTAB(26,JOB);D 9.94;T" ";S X=GETTAB(3,JOB);D 9.94;S X=GETTAB(7,JOB)/2^17,X=X-FITR(X),X=X*512,Z=GETTAB(1,JOB)/2^27;D 9.90;S X=JOB;D 9.87;S X=GETTAB(4,JOB);D 9.97;T!
09.80	Q
09.86	T%3,Z"+"%2,GETTAB(1,2^18*(GETTAB(12,JOB)/2^18-FITR(GETTAB(12,JOB)/2^18)))/2^27
09.87	S X=GETTAB(34,FITR(X))/2^18;I-X 9.87;S X=1+FITR(-X),Z=(1+GETTAB(21,FITR(X/3))/2^36)*2^(12*(X-3*FITR(X/3))),Z=64*(Z-FITR(Z));X FCHR(32),FCHR(32+FITR(Z)),FCHR(32+FITR(64*(Z-FITR(Z)))),FCHR(32);S Z=FITR(GETTAB(0,JOB)/2^28+2^8),Z=FSGN(FITR(Z-2*FITR(Z/2))-1);X FCHR(57.5+25.5*Z),FCHR(16*(1-Z)+.5*(1+Z)*(70+17*FITR(1+GETTAB(7,JOB)/2^35+.5)))
09.88	T%3,Z"    ";R
09.89	T%3,Z"+SPY";R
09.90	I GETTAB(12,JOB)9.89,9.88;I FABS(FITR(GETTAB(0,JOB)/2^29)-FITR(GETTAB(0,JOB)/2^29+.5)),9.86;S Z=GETTAB(12,JOB)/2^18,Z=Z-FITR(Z),Z=GETTAB(7,Z*2^18)/2^17,Z=(Z-FITR(Z))*256;T%3,X/2"+"%2,Z
09.91	S X=X/2^36;X FCHR(40+FITR(8*(X-FITR(X)))-8*FSGN(-FITR(8*X)));S X=X*8;X FCHR(40+FITR(8*(X-FITR(X)))-8*FSGN(-FITR(8*X)));S X=X*8;X FCHR(40+FITR(8*(X-FITR(X)))-8*FSGN(-FITR(8*X)));S X=X*8;X FCHR(40+FITR(8*(X-FITR(X)))-8*FSGN(-FITR(8*X)));S X=X*8;X FCHR(40+FITR(8*(X-FITR(X)))-8*FSGN(-FITR(8*X)));S X=X*8;X FCHR(40+FITR(8*(X-FITR(X)))-8*FSGN(-FITR(8*X)));T",";S X=X*8,X=X-FITR(X);F J=1,6;X FCHR(88+FITR(8*(X-FITR(X)))+40*(FSGN(-FITR(8*X))));S X=X*8
09.92	T"    [OPR]";R
09.93	I X-2-2^18,9.92;I-FABS(X-GETTAB(2,-1))9.91;T"   [SELF]"
09.94	S Z=X/2^36+1;F J=1,6;S Z=(Z-FITR(Z))*64;X FCHR(Z+31.5)
09.95	S SJN=(GETTAB(9,13)+2^35)/2^18,SJN=(SJN-FITR(SJN))*2^18-1,JIF=50,DAT$(1)="Jan",DAT$(2)="Feb",DAT$(3)="Mar",DAT$(4)="Apr",DAT$(5)="May",DAT$(6)="Jun",DAT$(7)="Jul",DAT$(8)="Aug",DAT$(9)="Sep",DAT$(10)="Oct",DAT$(11)="Nov",DAT$(12)="Dec";X FOCAL(2,2)
09.96	S Z=FITR(X/31);T%2,X-31*FITR(Z)+1,"-",DAT$(Z-12*FITR(Z/12)+1),"-";S Z=FITR(Z/12);X FCHR(48+FITR(Z/10)+6),FCHR(48+Z-10*FITR(Z/10)+4)
09.97	S Z=FITR(.5+X/JIF);X FCHR(40+FITR(Z/360000)+8*FSGN(FITR(Z/360000)-1)),FCHR(40+FITR(Z/36000-10*FITR(Z/360000))+8*FSGN(FITR(Z/36000)-1)),FCHR(40+FITR(Z/3600-10*FITR(Z/36000))+8*FSGN(FITR(Z/3600)-1)),FCHR(45+13*FSGN(FITR(Z/3600)-1)),FCHR(40+FITR(Z/600-6*FITR(Z/3600))+8*FSGN(FITR(Z/600)-1)),FCHR(40+FITR(Z/60-10*FITR(Z/600))+8*FSGN(FITR(Z/60)-1)),FCHR(45+13*FSGN(FITR(Z/60)-1)),FCHR(40+FITR(Z/10-6*FITR(Z/60))+8*FSGN(FITR(Z/10)-1)),FCHR(48+Z-10*FITR(Z/10))
09.98	S Z=X/2^36+1;F J=1,5;S Z=(Z-FITR(Z))*128;X FCHR(Z+127.5)
09.99	R