
/LOAD ALGOL INTERPRETIVE CODE TAPES
/MAIN LIST FROM 200-2777
/FORWARD REF LIST FROM 3000-3177

FIELD 0

T1=1
T2=2
T3=3
T4=4
T5=5
SP1=10

*20;	0	/NO SYSTEM OVERLAY (YET)
	/ NON-ZERO FOR SYS (=40 UNDER OS8)
	/ BITS 8-11 USED TO SET FIELD IF NON ZERO.
	/ FIELD USED - VALUE-1
	/BIT 0=1 IF OUTPUT DEVICE FILE STRUCTURED
*21;PSYS,	7600	/ EXIT TO SYS (CAN BE PATCHED)
*30
DEV,	0
DSWIT,	0
CHAR,	0
CL,	0
RESULT, 0
VALUE,	0
SVRES,	0
EX1,	0
AC1H,	0
AC1L,	0
SIGN,	0
EXP,	0
HORD,	0
LORD,	0
X,	0
SUDOMQ, 0

INDLST,	ERR; TTI; HSI; ERR; ERR; ERR; ERR; ERR
ODLST,	ERR; TTO; HSO; ERR; ERR; ERR; ERR; ERR
ADI,	ERR	/FILE OPENING ROUTINE

INDEV,	0; CLA; TAD XINL; TAD DEV
	DCA .+1; HLT; JMP I INDEV
XINL,	JMS I INDLST
OUTDEV,	0; DCA T5; TAD XOUTL; TAD DEV
	DCA .+2; TAD T5; HLT; CLA; JMP I OUTDEV
XOUTL,	JMS I ODLST

TTI,	0; KSF; JMP .-1; KRB; JMS TTO; JMP I TTI
TTO,	0; TSF; JMP .-1; TLS; JMP I TTO
HSI,	0; RSF; JMP .-1; RRB RFC; JMP I HSI
HSO,	0; PSF; JMP .-1; PLS; JMP I HSO

ERR,	0; JMP I .+1; ERMES

MESS,	0; TAD I MESS; ISZ MESS; SNA; JMP I MESS
	JMS TTO; CLA; JMP MESS+1

FLAC=EXP
ERR0=ERR
*200
	JMP LOAD
*3200
LOAD,	TLS; PLS; KCC; JMS MESS
	"B;"I;"N;"A;"L;"G;"O;"L;" ;0
	TAD 20; SNA CLA; JMP NOSYS
	IAC; JMS I ADI	/OPEN FILES ON MASS STORAGE
	TAD (3; DCA INDN; TAD (3; DCA OUTDN
	JMP CLEAR
NOSYS,	JMS MESS; "I; "N; "-; 0; JMS TTI; TAD (-260; DCA INDN
	JMS MESS; " ;"O; "U; "T; "-; 0
	JMS TTI; TAD (-260; DCA OUTDN
CLEAR,	RFC; TAD INDN; DCA DEV
	TAD (200-2777; DCA MLSIZE
	TAD (177; DCA SP1; TAD (177-3177; DCA CL
	DCA I SP1; ISZ CL; JMP .-2	/CLEAR LISTS
	TAD (202; DCA CL; JMS FDIG	/SKIP TO *1
LOOP,	CLA CMA; DCA SIGN
	JMS IN; JMS DIGTST; SKP; JMP CONST
	TAD (-"-; SNA; JMP NCONST
	TAD ("--";; SNA; JMP LOOP	/IGNORE MULTIPLE :
	TAD (";-"*; SNA; JMP END
	TAD ("*-"L; SNA; JMP LABEL
	TAD ("L-"F; SNA; JMP FCON; JMS ERR
END,	CLA CMA; TAD CL; DCA CL /ADDRESS OF FIXED SPACE
	CDF 10; TAD I CL; DCA I (176 /SAVE IT
	TAD CL; IAC; DCA I (175	/NEXT FREE SPACE
	TAD (JMP I 177; DCA I (201; CDF
	JMS MESS; 215;212;"E;"N;"D;"S;" ;0
	JMP PUNCH
INDN,	0
OUTDN,	0

*3400
PUNCH,	TAD CL; JMS OCTOUT; TAD OUTDN; DCA DEV
	CDF 10; TAD (614; DCA I (177
	TAD (CDF CIF 10; DCA I (200; CDF
/ NOW CHECK IF OPTION 0 - 7 USED FOR FIELD SETTING
	TAD 20; AND (17; TAD (-1; SMA
	JMP PUNCH2; CLA
	JMS MESS; 215;212; "F;"I;"E;"L;"D;"?; 0
	JMS TTI; TAD (-260; AND (7
PUNCH2,	CLL RTL; RAL; TAD (300; DCA T1 /FIELD SETTING
	TAD 20; SPA CLA; TAD (175; TAD (-200; DCA T2
PLOOP1,	TAD (200; JMS OUTDEV; ISZ T2; JMP PLOOP1
	TAD T1; JMS OUTDEV
	TAD (101; JMS OUTDEV; TAD (75; JMS OUTDEV /ORIGIN 175
	TAD (176; DCA SUM; TAD (174; DCA SP1
PLOOP2,	CDF 10; TAD I SP1; CDF; DCA EXP
	TAD EXP; CLL RTR; RTR; RTR
	AND (77; DCA T1; TAD T1; JMS OUTDEV
	TAD T1; TAD SUM; DCA SUM
	TAD EXP; AND (77; DCA T1
	TAD T1; JMS OUTDEV; TAD T1; TAD SUM; DCA SUM
	TAD SP1; CIA; TAD CL; SZA CLA; JMP PLOOP2
	TAD SUM; CLL RTR; RTR; RTR; AND (77; JMS OUTDEV
	TAD SUM; AND (77; JMS OUTDEV
	TAD 20; SPA CLA; TAD (175; TAD (-200; DCA T2
PLOOP3,	TAD (200; JMS OUTDEV; ISZ T2; JMP PLOOP3
	TAD 20; SNA CLA; HLT	/STOP IF NO SYSTEM
	TAD (232; JMS OUTDEV; JMP I PSYS /ELSE CLOSE O/P FILE
SUM,	0

*3600

MAXLOC,	7577	/CAN USE ALL OF F1
LABEL,	JMS IN; JMS DIGTST; JMS ERR
	DCA RESULT; JMS RCON; DCA CHAR; JMS CHKLNO	/LABEL NUMBER TO RESULT
	TAD CHAR; TAD (-",; SNA; JMP DECLAB
	TAD (",-"=; SNA; JMP DEFLAB
	TAD ("=-";; SZA; JMS ERR
STLAB,	JMS LOOKUP; JMP NOTDECL	/STORE LABEL. DECLARED?
	JMS STORE; JMP LOOP	/YES STORE IT
NOTDEC,	JMS STORE; CMA; TAD CL	/STORE LAST ADDRESS USED IN PROG
	DCA I T5	/AND THIS ADDRESS IN MAIN TABLE
	TAD RESULT; JMS SFWD	/SEE IF ITS IN FORWARD LIST
	JMP LOOP	/FINISHED IF ALREADY THERE
	JMS SFWD; SKP; JMS ERR	/ELSE LOOK FOR SLOT
	TAD RESULT; DCA I T1; JMP LOOP	/AND MAKE ENTRY
DECLAB,	TAD CL; DCA VALUE; JMP LABVAL	/VALUE IS CURRENT ADDRESS
DEFLAB,	TAD RESULT; DCA SVRES	/SAVE LABEL BEING DEFINED
	JMS IN; JMS DIGTST; JMP DEFL1	/ANOTHER LABEL?
	DCA RESULT; JMS RCON	/NO, READ CONSTANT
	CLA; TAD RESULT
DEFL2,	DCA VALUE; TAD SVRES; DCA RESULT	/RESTORE LABEL
	JMP LABVAL
DEFL1,	TAD PL; SZA CLA; JMS ERR	/CHECK FOR L
	DCA RESULT; JMS RCON; JMS CHKLNO	/READ DEFINING LABEL
	JMS LOOKUP; JMS ERR; JMP DEFL2	/CHECK DECLARED, VALUE IN AC
LABVAL,	JMS LOOKUP; SKP; JMS ERR	/FAIL IF ALREADY DECLARED
	DCA T4; DCA I T1	/SAVE ADDRESS LAST USE, CLEAR FREF ENTRY
	TAD VALUE; DCA I T5	/PUT VALUE IN MAIN TABLE
DFR,	TAD T4; SNA CLA; JMP LOOP	/FREFS TO FILL IN?
	CDF 10; TAD I T4; DCA T3	/YES, SAVE LINK
	TAD VALUE; DCA I T4; CDF	/REPLACE BY VALUE
	TAD T3; DCA T4; JMP DFR	/CHECK IF ANY MORE
PL,	-"L

STORE,	0
	CDF 10; DCA I CL; CDF; ISZ CL
	TAD CL; CIA; TAD MAXLOC; SNA CLA; JMS ERR; JMP I STORE

DIGTST, 0
	TAD (-260; SPA; JMP NOT1
	TAD (260-272; SMA; JMP NOT2
	TAD (272-260; ISZ DIGTST; JMP I DIGTST
NOT1,	TAD (260-272
NOT2,	TAD (272; JMP I DIGTST

FDIG,	0; JMS IN; JMS DIGTST; JMP .-2; JMP I FDIG

*4000

RCON,	0
	JMS IN; JMS DIGTST; JMP I RCON
	DCA IN; TAD RESULT; CLL RTL; TAD RESULT
	CLL RAL; TAD IN; DCA RESULT; JMP RCON+1

IN,	0
	JMS INDEV; TAD PM215; SNA; TAD (";-215
	TAD PM212; SNA; JMP IN+1
	TAD PM240; SNA; JMP IN+1
	TAD PM377; SNA; JMP IN+1
	TAD PM211; SNA; JMP IN+1
	TAD P211; SNA; JMP IN+1; JMP I IN
PM215,	-215
PM212,	215-212
PM240,	212-240
PM377,	240-377
PM211,	377-211
P211,	211

SFWD,	0	/SEARCH FORWARD LIST, LABEL NO. IN AC
	CIA; DCA T2; TAD (-200; DCA T3
	TAD (2777; DCA T1
SFWD1,	ISZ T1; TAD I T1; TAD T2
	SNA CLA; JMP I SFWD	/EXIT 1 IF FOUND, T1^ENTRY
	ISZ T3; JMP SFWD1	/IF NOT CHECK IF EXHAUSTED
	ISZ SFWD; JMP I SFWD	/AND EXIT 2 IF SO

LOOKUP,	0	/LOOKUP LABEL NO. IN RESULT, AC=0
	TAD RESULT; TAD (200; DCA T5	/POINT AT MAIN ENTRY
	TAD RESULT; JMS SFWD; JMP INFWD	/SEARCH FORWARD LIST
	TAD I T5; SZA; ISZ LOOKUP	/EXIT 2 IF DECLARED
	JMP I LOOKUP	/ELSE EXIT 1, NO PREVIOUS USE
INFWD,	TAD I T5; JMP I LOOKUP	/ADDRESS OF PREVIOUS USE

FCON,	JMS FINPUT; TAD DSWIT; SNA CLA; JMP FCON
	TAD FLAC; JMS STORE; TAD FLAC+1; JMS STORE
	TAD FLAC+2; JMS STORE
FC1,	JMS IN; TAD (-";; SZA CLA; JMP FC1; JMP LOOP
NCONST,	DCA SIGN
CONST,	DCA RESULT; JMS RCON; CLA; TAD RESULT
	ISZ SIGN; CIA; JMS STORE; JMP LOOP

DIX,	0; TAD 77; TAD (-ERR; SNA CLA; JMS ERR /IS DIX0 THERE?
	CLA IAC; JMS I 77; JMP I DIX /YES, DO IT

CHKLNO,	0; CLA; TAD RESULT; TAD MLSIZE; SZA SMA CLA; JMS ERR
	JMP I CHKLNO

MLSIZE,	0
/NEW FLOATING POINT ROUTINES. WRITTEN TO USE EAE, FOR NON-EAE
/MACHINES ADD INTEGER MULTIPLY AND DIVIDE AND SHIFT RIGHT LOGICAL.

*4200

FGET,	0; SNA; TAD I FGET; ISZ FGET; TAD M1; DCA 11
	TAD I 11; DCA EXP
	TAD I 11; DCA HORD
	TAD I 11; DCA LORD; JMP I FGET

GETOP,	0; TAD M1; DCA 11
	TAD I 11; DCA EX1
	TAD I 11; DCA AC1H
	TAD I 11; DCA AC1L; JMP I GETOP

FADD,	0; SNA; TAD I FADD; ISZ FADD
	JMS GETOP; JMS ADD; JMP I FADD

FMUL,	0; SNA; TAD I FMUL; ISZ FMUL; JMS GETOP
	JMS FMULT; JMP I FMUL

XORSGN,	0	/SET SIGN FOR MULTIPLY AND DIVIDE
	CLA CLL CML RAR; AND EXP; TAD EX1
	RAL; CLA RAR; DCA SIGN
	CLA CLL CMA RAR; AND EXP; DCA EXP
	CLA CLL CMA RAR; AND EX1; DCA EX1; JMP I XORSGN

FPUT,	0; SNA; TAD I FPUT; ISZ FPUT
	TAD M1; DCA 11
	TAD EXP; DCA I 11; TAD HORD; DCA I 11
	TAD LORD; DCA I 11; JMP I FPUT

FDIV,	0; SNA; TAD I FDIV; ISZ FDIV; JMS GETOP
	JMS DIV; JMP I FDIV

FINVD,	0; SNA; TAD I FINVD; DCA DIVOP; ISZ FINVD
	JMS FPUT; EX1	/FLAC TO OPERAND
	JMS FGET
DIVOP,	0	/OPERAND TO FLAC
	JMS DIV; JMP I FINVD

FINVS,	0; SNA; TAD I FINVS; ISZ FINVS; JMS GETOP
	CLA CLL CML RAR; TAD EXP; DCA EXP /NEGATE FLAC
	JMS ADD; JMP I FINVS

FSUB,	0; SNA; TAD I FSUB; ISZ FSUB; JMS GETOP
	CLA CLL CML RAR; TAD EX1; DCA EX1	/NEGATE OPERAND
	JMS ADD; JMP I FSUB

SQUARE,	0; JMS FMUL; EXP; JMP I SQUARE

FLOAT, 0; CLA CLL CML RAR; AND EXP; DCA SIGN
	TAD EXP; SPA; CML CIA
	DCA HORD; DCA LORD
	TAD FLO2; TAD SIGN; DCA EXP /ADD SIGN BIT
	JMS NORM; JMP I FLOAT
FLO2,	2014

M1,	-1
*4400

ADD,	0
	CLA CLL CML RAR; AND EXP; TAD EX1
	SPA CLA; JMP SUB	/SUBTRACT IF SIGNS DIFFER
	RAR; DCA SIGN	/ELSE RESULT SAME SIGN
	JMS ALIGN; JMP I ADD
	TAD LORD; TAD AC1L; DCA LORD
	RAL; TAD HORD; TAD AC1H
	SZL; JMP ADDOV	/MUST SHIFT IF OVERFLOWED
	DCA HORD; JMP I ADD /IF NOT MUST BE NORMALISED
ADDOV,	RAR; DCA HORD; TAD LORD; RAR; DCA LORD
	ISZ EXP; JMP I ADD; JMS ERR0
SUB,	CLA CLL CML RAR; AND EXP; DCA SIGN
	JMS ALIGN; JMP I ADD
	TAD AC1L; CIA; TAD LORD; DCA LORD
	TAD AC1H; CMA; SZL; CLL IAC
	TAD HORD; DCA HORD
	SZL; JMP SUBOK	/DID WE SUBTRACT SMALLER?
	TAD LORD; CIA; DCA LORD	/NO SO NEGATE RESULT
	TAD HORD; CMA; SZL; IAC; DCA HORD
	CLA CLL CML RAR; TAD EXP; DCA EXP
SUBOK,	JMS NORM; JMP I ADD


NORM,	0
	CLA CLL CML RAR; AND EXP; DCA SIGN
	CLA CLL CMA RAR; AND EXP; DCA EXP
	TAD HORD; SZA CLA; JMP HORNZ
	TAD LORD; SZA; JMP LORNZ
RZERO,	DCA EXP; JMP I NORM
LORNZ,	DCA HORD; DCA LORD	/SHIFT 12 PLACES
	TAD (-14; TAD EXP; SPA; JMP UFLO
	DCA EXP
HORNZ,	TAD HORD; SPA CLA; JMP ENORM
	TAD LORD; CLL RAL; DCA LORD
	TAD HORD; RAL; DCA HORD
	CMA; TAD EXP; SPA; JMP UFLO
	DCA EXP; JMP HORNZ
ENORM,	TAD EXP; TAD SIGN; DCA EXP; JMP I NORM
UFLO,	CLA; TAD SIGN; DCA EXP
	CLA CLL CML RAR; DCA HORD; DCA LORD /MAKE SMALLEST NO.
	JMP I NORM

MQLAUY, 0 /SIMULATE MQL MQA MUY
	DCA MQL2; TAD SUDOMQ; DCA MQL1
	TAD MQL2; DCA SUDOMQ
	TAD I MQLAUY; ISZ MQLAUY; DCA MQL3
	TAD MQL1; JMS PSDMUY
MQL3,	0; JMP I MQLAUY
MQL1,	0
MQL2,	0

*4600
DIV,	0; TAD HORD; SNA CLA; JMP I DIV /DIVIDEND ZERO
	TAD AC1H; SNA CLA; JMS ERR0	/ERROR DIVISOR ZERO
	JMS XORSGN	/SET SIGN AND REMOVE SIGN BITS
	TAD EX1; CIA; TAD EXP; TAD (2001 /SUBTRACT
	SPA; JMS ERR0; TAD SIGN; DCA EXP /FAIL OVER/UNDERFLOW
	DCA X; TAD AC1L; DCA DV3; TAD AC1H; DCA DV4
	TAD DV4; DCA DV2
	TAD HORD; CLL RAR; DCA HORD
	TAD LORD; RAR; DCA SUDOMQ; TAD HORD; JMS PSDDVI
DV2,	0; DCA DV2; TAD SUDOMQ; DCA HORD; JMS PSDMUY
DV3,	0; CLL CIA; TAD DV2; SNA; JMP DV5
	SNL; JMP DV6; DCA DV3
	CMA; DCA X; TAD SUDOMQ; CLL CIA; DCA SUDOMQ
	SNL; CMA; TAD DV3; JMS PSDDVI
DV4,	0; CLA; TAD SUDOMQ; CLL CML; ISZ X; CLL CIA
DV5,	DCA LORD; SNL; CMA; TAD HORD; SMA; JMP DV7
	DCA HORD; JMP I DIV
DV6,	CIA; DCA DV2; TAD DV4; CLL CIA; TAD DV2
	SNL; JMP .+5; DCA DV2; CMA; TAD HORD; DCA HORD
	CLA; TAD DV2; SZA; JMP DV4-1; JMP DV5-1
DV7,	DCA HORD; TAD LORD; CLL RAL; DCA LORD
	TAD HORD; RAL; DCA HORD /SHIFT RESULT LEFT IF NOT NORMALISED
	CMA; TAD EXP; DCA EXP; JMP I DIV

PSDMUY,	0; DCA MUYAC; TAD (-15; DCA MUYC
	TAD I PSDMUY; DCA MUYOP; ISZ PSDMUY
	CLL; JMP MUYST
MUYL,	SNL; JMP .+3
	CLL; TAD MUYOP; RAR; DCA MUYAC
MUYST,	TAD SUDOMQ; RAR; DCA SUDOMQ
	TAD MUYAC; ISZ MUYC; JMP MUYL; CLL; JMP I PSDMUY
MUYOP,	0
MUYAC,	0
MUYC,	0

*5000

ALIGN,	0
	TAD AC1H; SNA CLA; JMP I ALIGN	/ZERO OPERAND
	TAD HORD; SZA CLA; JMP NOTZ	/ZERO FLAC
RESOP,	CLA CLL; TAD EX1; DCA EXP
	TAD AC1H; DCA HORD
	TAD AC1L; DCA LORD; JMP I ALIGN	/ADDITION DONE
NOTZ,	CLA CLL CMA RAR; AND EXP; DCA EXP
	CLA CLL CMA RAR; AND EX1; CIA
	TAD EXP; SNA; JMP DONE
	SMA; JMP SHOP	/JMP IF FLAC LARGER
	TAD (27; SPA; JMP RESOP /TOO MUCH SHIFT OF FLAC
	TAD (-27; DCA SHFT
	CLA CLL CMA RAR; AND EX1; DCA EXP /TRANSFER EXPONENT
	TAD LORD; DCA SUDOMQ; TAD HORD; JMS DLSR
	DCA HORD; TAD SUDOMQ; DCA LORD
DONE,	ISZ ALIGN
RESAC,	CLA CLL; TAD EXP; TAD SIGN; DCA EXP; JMP I ALIGN
SHOP,	TAD (-27; SMA SZA; JMP RESAC /TOO MUCH OPERAND SHIFT
	TAD (26; CMA; DCA SHFT
	TAD AC1L; DCA SUDOMQ; TAD AC1H; JMS DLSR
	DCA AC1H; TAD SUDOMQ; DCA AC1L; JMP DONE
SHFT,	0

DLSR,	0; DCA DLSR1
	TAD SHFT; TAD (14; SPA SNA; JMP MTH11
	CLA; TAD DLSR1
SHRL,	CLL RAR; DCA DLSR1
	TAD SUDOMQ; RAR; DCA SUDOMQ; TAD DLSR1
SHTEST,	ISZ SHFT; JMP SHRL; CLL; JMP I DLSR
MTH11,	TAD (-1; DCA SHFT	/MABE NO EXTRA ONES NEEDED
	TAD DLSR1; DCA SUDOMQ; JMP SHTEST
DLSR1,	0

FNEG,	0; TAD EXP; SZA; TAD (4000; DCA EXP; JMP I FNEG

ERMES,	JMS MESS; 215; 212;"?; 0
	TAD ERR; JMS OCTOUT; JMP PLOOP3+4

*5200
OCTOUT,	0; RAL; DCA T1; TAD (-4; DCA T2
OCTO,	TAD T1; RAL; RTL; DCA T1
	TAD T1; AND (7; TAD (260; JMS TTO; CLA
	ISZ T2; JMP OCTO; JMP I OCTOUT

FMULT,	0; TAD HORD; SZA CLA; TAD AC1H; SZA CLA; JMP DOMUL
	DCA EXP; DCA HORD; DCA LORD; JMP I FMULT
DOMUL,	JMS XORSGN	/EXTRACT SIGN BITS
	TAD EXP; TAD EX1; TAD (-2000; SPA; JMS ERR0 /OVERFLOW
	TAD SIGN; DCA EXP	/ADD EXPONENTS
	TAD LORD; DCA MP1; TAD AC1H; DCA SUDOMQ; JMS PSDMUY
MP1,	0; DCA MP1	/2ND POSITION
	TAD AC1L; DCA M2; TAD HORD; JMS MQLAUY
M2,	0; TAD MP1	/ADD PREVIOUS 2ND POSITION BITS
	DCA SUDOMQ; RAL; DCA M2	/PUT THEM IN MQ, SAVE CARRY
	TAD HORD; DCA M3; TAD AC1H; JMS MQLAUY
M3,	0; TAD M2	/ADD CARRY FROM 2ND POSITION
	DCA HORD; TAD SUDOMQ; DCA LORD
	TAD HORD; SPA CLA; JMP I FMULT
	CLA CLL; TAD LORD; RAL; DCA LORD
	TAD HORD; RAL; DCA HORD
	CMA; TAD EXP; DCA EXP; JMP I FMULT
	/MINIMUM POSSIBLE PRODUCT IS 0.25

PSDDVI,	0
	DCA DVIAC; TAD I PSDDVI; ISZ PSDDVI
	DCA PLUSOP; TAD PLUSOP; CLL CIA; DCA DVIOP
	TAD (-15; DCA DVIC; JMP DIVST
DIVL,	TAD DVIAC; RAL; TAD DVIOP
	SNL; JMP NO
YES,	DCA DVIAC
DIVST,	TAD SUDOMQ; RAL; DCA SUDOMQ
	ISZ DVIC; JMP DIVL; TAD DVIAC; CLL; JMP I PSDDVI
NO,	TAD PLUSOP; CML; JMP YES
PLUSOP,	0
DVIAC,	0
DVIC,	0
DVIOP,	0


*5400
FINPUT,	0
	CLA CMA; DCA PERSW; CMA; DCA NEGMKR
	DCA DSWIT; DCA EXP; DCA HORD; DCA LORD
DPART,	DCA FRACD	/ZERO DIGITS AFTER POINT
NDIG,	JMS DIGIN; JMP NOTDIG; ISZ DSWIT; ISZ FRACD
	JMS FMUL; TEN; JMS FPUT; TEM; JMS FGET; DIG-1
	JMS NORM; JMS FADD; TEM; JMP NDIG	/RESULT*10+DIGIT
NOTDIG,	ISZ PERSW; JMP CONT1	/SECOND PERIOD?
	ISZ DIG; ISZ DIG; CLA SKP; JMP DPART	/NO, IF PERIOD READ ON
	DCA FRACD	/IF NOT ANY PERIOD NO FRACTIONAL DIGITS
CONT1,	ISZ NEGMKR; JMS FNEG
	CLA CMA; DCA NEGMKR	/SET UP FOR EXPONENT
	TAD CHAR; TAD (-"E; SNA CLA
NEXD,	JMS DIGIN; JMP ENDEXP
	TAD X; CLL RTL; TAD X; CLL RAL; TAD DIG; JMP NEXD /ACCUMULATE EXPONENT
ENDEXP,	TAD X; ISZ NEGMKR; CIA; CIA; TAD FRACD /-(DECIMAL EXPONENT)
	CLL CIA; SPA; CLL CML CIA; CMA; DCA FRACD /-(DEC EXP. + 1)
	RAL; TAD JMSI; DCA FLINS	/MAKE JMS FMUL OR JMS FDIV
MORE,	ISZ FRACD; JMP FLINS; JMP I FINPUT
FLINS,	0; TEN; JMP MORE	/*10 OR /10
JMSI,	JMS I .+1; FMUL; FDIV
	2014
DIG,	0; 0
TEN,	2004; 5000; 0
NEGMKR,	0
PERSW,	0
FRACD,	0
TEM,	0; 0; 0

DIGIN,	0
	DCA X; JMS FLIN; TAD CHAR; TAD (-"+; SNA; JMP NOTPL
	TAD ("+-"-; SZA CLA; JMP NOTPL+1; DCA NEGMKR
NOTPL,	JMS FLIN; TAD CHAR; TAD (-272; CLL
	TAD (12; DCA DIG; SZL; ISZ DIGIN; JMP I DIGIN /EXIT2 IF DIGIT

FLIN,	0; JMS INDEV; DCA CHAR; TAD CHAR; SNA; JMP FLIN+1
	TAD (-377; SNA CLA; JMP FINPUT+1; JMP I FLIN

$
