1BD1			  ; THE  "NEXT LINE"  ROUTINE.
1BD1			  ; ON ENTRY THE HL REGISTER PAIR POINTS TO THE LOCATION AFTER THE END OF THE
1BD1			  ;  'NEXT' LINE TO BE HANDLED AND THE DE REGISTER PAIR TO THE LOCATION BEFORE
1BD1			  ;  THE FIRST CHARACTER OF THE LINE. THIS APPLIES TO LINES IN THE PROGRAM
1BD1			  ;  AREA AND ALSO TO A LINE IN THE EDITING AREA- WHERE THE NEXT LINE WILL BE THE
1BD1			  ;  SAME LINE AGAIN WHILST THERE ARE STILL STATEMENTS TO BE INTERPRETED.
1BD1			  ;
1BD1 22555C		  NEXT_LINE:	LD    (NXTLIN),HL	      ; SET NXTLIN FOR USE ONCE THE CURRENT
1BD4					;			      ; LINE HAS BEEN COMPLETED.
1BD4 EB 				EX    DE,HL		      ; AS USUAL CH_ADD POINTS TO THE
1BD5 225D5C				LD    (CH_ADD),HL	      ; LOCATION BEFORE THE FIRST CHARACTER
1BD8					;			      ; TO BE CONSIDERED.
1BD8 57 				LD    D,A		      ; THE STATEMENT NUMBER IS FETCHED.
1BD9 1E00				LD    E,0		      ; E REGISTER IS CLEARED IN CASE
1BDB					;			      ; EACH_STMT IS USED.
1BDB FD360AFF				LD    (IY+NSPPC-YBASE),0FFH   ; SIGNAL 'NO JUMP'
1BDF 15 				DEC   D 		      ;  THE STATEMENT NUMBER MINUS ONE
1BE0 FD720D				LD    (IY+SUBPPC-YBASE),D     ;  GOES INTO SUBPPC.
1BE3 CA281B				JP    Z,STMT_LOOP	      ; A FIRST STATEMENT CAN NOW NOW BE
1BE6					;			      ; CONSIDERED.
1BE6 14 				INC   D 		      ; HOWEVER FOR LATER STATEMENTS
1BE7 CD8B19				CALL  EACH_STMT 	      ; THE FIRST ADDRESS HAS TO BE FOUND.
1BEA 2808				JR    Z,STMT_NEXT	      ; JUMP FORWARD UNLESS THE STATEMENT
1BEC					;			      ; DOES NOT EXIST.
1BEC			  ; REPORT  N- 'STATEMENT LOST'
1BEC CF 		  REPORT_N:	RST   ERROR_1		      ; CALL THE ERROR HANDLING ROUTINE.
1BED 16 				DEFB 016H		      ;
1BEE			  ;
1BEE			  ; THE "CHECK_END"  SUBROUTINE.
1BEE			  ; THIS IS AN IMPORTANT ROUTINE AND IS CALLED FROM MANY PLACES IN THE MONITOR
1BEE			  ;  PROGRAM WHEN THE SYNTAX OF THE EDIT LINE IS BEING CHECKED.THE PURPOSE OF THE ROUTINE
1BEE			  ;  IS TO GIVE AN ERROR REPORT IF THE END OF STATEMENT HAS NOT BEEN REACHED
1BEE			  ;  AND TO MOVE ON TO THE NEXT STATEMENT IF THE SYNTAX IS CORRECT.
1BEE			  ;
1BEE CD3025		  CHECK_END:	CALL  SYNTAX_Z		      ; DO NOT PROCEED UNLESS
1BF1 C0 				RET   NZ		      ; CHECKING SYNTAX.
1BF2 C1 				POP   BC		      ; DROP THE ADDRESSES OF SCAN_LOOP AND
1BF3 C1 				POP   BC		      ; STMT_RET BEFORE CONTINUING TO STMT_NEXT
1BF4			  ;
1BF4			  ; THE "STMT_NEXT"  ROUTINE.
1BF4			  ; IF THE PRESENT CHARACTER IS A "CARRIAGE RETURN" THEN THE 'NEXT STATEMENT'
1BF4			  ; IS ON TE 'NEXT LINE'; IF ':' IS ON THE SAME LINE , BUT IF ANY OTHER
1BF4			  ;  CHARACTER IS FOUND THEN THERE IS AN ERROR IN SYNTAX.
1BF4			  ;
1BF4 DF 		  STMT_NEXT:	RST   GET_BT		      ; FETCH THE PRESENT CHARAER .
1BF5 FE0D				CP    CR		      ; CONSIDER THE 'NEXT LINE' IF IT IS
1BF7 28BA				JR    Z,LINE_END	      ; A 'CARRIAGE RETURN'.
1BF9 FE3A				CP    ':'		      ; CONSIDER THE NEXT STATEMENT
1BFB CA281B				JP    Z,STMT_LOOP	      ; IF IT IS ':'.
1BFE C38A1C				JP    REPORT_C		      ; OTHERWISE IT IS SYNTAX ERROR.
1C01			  ;
1C01			  ; THE COMMAND CLASS	TABLE.
1C01			  ;
1C01 0F 		  D005: 	DEFB  CLASS_00-$	      ; CLASS-00
1C02 1D 				DEFB  CLASS_01-$	      ; CLASS-01
1C03 4B 				DEFB  CLASS_02-$	      ; CLASS-02
1C04 09 				DEFB  CLASS_03-$	      ; CLASS-03
1C05 67 				DEFB  CLASS_04-$	      ; CLASS-04
1C06 0B 				DEFB  CLASS_05-$	      ; CLASS-05
1C07 7B 				DEFB  EXPT_1NUM-$	      ; CLASS-06
1C08 8E 				DEFB  PERMS-$		      ; CLASS-07
1C09 71 				DEFB  EXPT_2NUM-$	      ; CLASS-08
1C0A B4 				DEFB  CLASS_09-$	      ; CLASS-09
1C0B 81 				DEFB  EXPT_EXP-$	      ; CLASS-0A
1C0C CF 				DEFB  CLASS_0B-$	      ; CLASS-0B
1C0D			  ;					 ;
1C0D			  ;  THE COMMAND CLASSES   -00,03,05.
1C0D			  ;  THE COMMANDS OF CLASS 03 MAY OR MAY NOT  BE FOLLOWED BY A NUMBER
1C0D			  ;  E.G.  'RUN' OR 'RUN 200'.
1C0D			  ;
1C0D CDDE1C		  CLASS_03:	CALL  FETCH_NUM 	      ; A NUMBER IS FETCHED, BUT ZERO IS USED
1C10					;			      ; IN CASES OF DEFAULT.
1C10			  ;  THE COMMANDS OF CLASS-00 MUST NOT HAVE ANY OPERANDS,E.G. COPY AND CONTINUE.
1C10 BF 		  CLASS_00:	CP    A 		      ; SET ZERO FLAG FOR LATER.
1C11			  ; THE COMMAND CLASS 05 MAY BE FOLLOWED BY A SET OF ITEMS, E.G. PRINT OR
1C11			  ;  PRINT "222".
1C11 C1 		  CLASS_05:	POP   BC		      ;  IN ALL CASE3 DROP THE ADDRESS
								; -SCAN-LOOP.
					CALL  Z,1BEE,CHECK-END   ; IF HANDLING COMMANDS OF CLASSES
								 ; 00 & 03 'AND' SYNTAX IS BEING
								 ; CHECKED MOVE ON NOW TO
								 ; TO CONSIDER THE NEXT STATEMENT.
1C15					;			      ; NOW TO CONSIDER THE NEXT STATEMENT.
1C15 EB 				EX    DE,HL		      ; SAVE THE LINE POINTER TO DE REGISTER.
1C16			  ;
1C16			  ; THE 'JUMP_C_R'  ROUTINE.
1C16			  ; AFTER THE COMMAND CLASS ENTRIES AND THE SEPARATOR ENTRIES IN THE PARAMETER
1C16			  ;  TABLE HAVE BEEN CONSIDERED THE JUMP TO APPROPRIATE COMMAND ROUTINE IS MADE.
1C16			  ;
1C16 2A745C		  JUMP_C_R:	LD    HL,(T_ADDR)	      ; FETCH THE POINTER TO THE ENTRIES
1C19 4E 				LD    C,(HL)		      ; IN THE PARAMETER TABLE AND FETCH
1C1A 23 				INC   HL		      ; THE ADDRESS OF THE REQUARED COMMAND
1C1B 46 				LD    B,(HL)		      ; ROUTINE. EXCHANGING THE POINTERS BACK
1C1C EB 				EX    DE,HL		      ; AND MAKE AN INDIRECT JUMP TO
1C1D C5 				PUSH  BC		      ;     THE COMMAND ROUTINE.
1C1E C9 				RET			      ;
1C1F			  ;
1C1F			  ; THE COMMAND CLASSES 01,02,04.
1C1F			  ;  NEXT THREE COMMAND CLASSES ARE USED  BY THE VARIABLE HANDLING COMMANDS-
1C1F			  ;  'LET', 'FOR', NEXT' AND INDIRECTLY BY 'READ', 'INPUT'.
1C1F			  ;  COMMAND CLASS 01 IS CONCERNED WITH  THE IDENTIFICATION OF THE
1C1F			  ;  VARIABLE  IN 'LET', 'READ', OR 'INPUT' STATEMENT.
1C1F			  ;
1C1F CDB228		  CLASS_01:	CALL  LOOK_VAR		      ; LOOK IN THE VARIABLES AREA TO
1C22					;			      ; DETERMINATE WHETHER OR NOT THE
1C22					;			      ; VARIABLE HAS BEEN USED ALREADY.
1C22			  ;
1C22			  ;  THE 'VARIABLE IN ASSIGNMENT'  SUBROUTINE.
1C22			  ; THIS SUBROUTINE DEVELOPES THE APPROPRIATE VALUES FOR THE SYSTEM VARIABLES
1C22			  ;  'DEST' AND 'STRLEN'
1C22			  ;
1C22 FD363700		  VAR_A_1:	LD    (IY+FLAGX-YBASE),0      ; INITIALIZE FLAGX TO 00
1C26 3008				JR    NC,VAR_A_2	      ; JUMP FORWARD IF THE VARIABLE HAS BEEN
1C28					;			      ; USED BEFORE.
1C28 FDCB37CE				SET  NEW_VAR,(IY+FLAGX-YBASE) ; SIGNAL ' NEW VARIABLE'
1C2C 2018				JR    NZ,VAR_A_3	      ; GIVE AN ERROR IF TRYING TO USE AN
1C2E					;			      ; UNDIMESIONED ARRAY.
1C2E			  ; 'VARIABLE NOT FOUND'
1C2E CF 		  REPORT_2:	RST   ERROR_1		      ; CALL ERROR HANDLIN ROUTINE
1C2F 01 				DEFB 001H		      ;
1C30			  ;
1C30			  ;  CONTINUE WITH THE HANDLING OF EXISTING  VARIABLES.
1C30			  ;
1C30 CC9629		  VAR_A_2:	CALL  Z,STK_VARS	      ; THE PARAMETERS OF SIMPLE STRING
1C33					;			      ; VARIABLES AND ALL ARRAY VARIABLES
1C33					;			      ; ARE PASSED TO THE CALCULATOR STACK.
1C33					;			      ; (STK_VARS WILL 'SLICE' A STRING IF
1C33					;			      ; REQUARED.
1C33 FDCB0176				BIT  NUM_VAR,(IY+FLAGS-YBASE) ; JUMP FORWARD IF HANDLING A NUMERIC
1C37 200D				JR    NZ,VAR_A_3	      ;  VARIABLE.
1C39 AF 				XOR   A 		      ;  CLEAR A REGISTER.
1C3A CD3025				CALL  SYNTAX_Z		      ;  THE PARAMETER OF THE STRING OR STRING
1C3D C4F12B				CALL  NZ,STK_FETCH	      ; ARRAY VARIABLE ARE FETCHED UNLESS
1C40					;			      ; SYNTAX IS BEING CHECKED.
1C40 21715C				LD    HL,FLAGX		      ;
1C43 B6 				OR    (HL)		      ; BIT 0 IS SET ONLY WHEN HANDLING COMLETE
1C44 77 				LD    (HL),A		      ; SIMPLE STINGS THEREBY SIGNALING 'OLD
1C45					;			      ; COPY TO BE DELETED'.
1C45 EB 				EX    DE,HL		      ; HL NOW POINTS TO THE STRING OR THE
1C46					;			      ; ELEMENT ARRAY.
1C46			  ;   THE PATHWAYS NOW COME TOGETHER TO SET 'STRLEN' AND 'DEST' AS REQUARED.
1C46			  ; FOR ALL NUMERIC VARIABLES AND  'NEW' STRING ARRAY VARIABLES 'STRLEN-LOW'
1C46			  ; HOLDS THE 'LETTER'	OF THE VARIABLE'S NAME. BUT FOR 'OLD' STRING AND
1C46			  ;  STRING ARRAY VARIABLES WHETHER S'SLICED' OR COMPLETE IT HOLDS THE
1C46			  ; 'LENGTH' IN 'ASSIGNMENT'.
1C46			  ;
1C46 ED43725C		  VAR_A_3:	LD    (STRLEN),BC	      ; SET STRLEN AS REQUARED.
1C4A			  ;
1C4A			  ; DEST HOLDS THE ADDRESS FOR THE 'DESTINATION OF AN 'OLD' VARIABLE BUT
1C4A			  ; IN EFFECT THE 'SOURCE' FOR A 'NEW' VARIABLE.
1C4A 224D5C				LD    (DEST),HL 	      ; SET DEST AS REQUARED AND RETURN.
1C4D C9 				RET			      ;
1C4E			  ;
1C4E			  ;   COMMAND CLASS-02 IS CONCERNED WITH THE ACTUAL CALCULATION OF THE VALUE TO BE
1C4E			  ;  ASSIGNED IN A 'LET' STATEMENT.
1C4E C1 		  CLASS_02:	POP   BC		      ; THE ADDRESS- SCAN_LOOP IS DROPPED.
1C4F CD561C				CALL  VAL_FET_1 	      ; THE ASSIGNMENT IS MADE.
1C52 CDEE1B				CALL  CHECK_END 	      ; MOVE ON TO THE NEXT STATEMENT
1C55					;			      ; EITHER VIA CHECK_END IF CHECKING
1C55 C9 				RET			      ; SYNTAX , OR STMT_RET IF 'RUN-TIME'.
1C56			  ;  THE 'FETCH A VALUE'  SUBROUTINE.
1C56			  ;  THIS SUBROUTINE IS USED BY LET , READ, OR INPUT  STATEMENT TO FIRST EVALUATE
1C56			  ;  AND THEN ASSIGN VALUES TO THE PREVIOUSLY DESIGNATING VARIABLE.
1C56			  ;  THE ENTRY POINT VAL_FET_1 IS USED BY LET AND READ AND CONSIDERS FLAGS
1C56			  ; WHEREAS THE ENTRY POINT VAL_FET_ IS USED BY INPUT AND CONSIDEREDS FLAGX.
1C56			  ;
1C56 3A3B5C		  VAL_FET_1:	LD    A,(FLAGS) 	      ; USE FLAGS
1C59 F5 		  VAL_FET_2:	PUSH  AF		      ; SAVE FLAGX OR FLAGS
1C5A CDFB24				CALL  SCANNING		      ; EVALUATE THE NEXT EXPRESSION.
1C5D F1 				POP   AF		      ; FETCH THE OLD FLAGS OR FLAGX.
1C5E FD5601				LD    D,(IY+FLAGS-YBASE)      ; FETCH THE NEW FLAGS.
1C61 AA 				XOR   D 		      ; THE NATURE- NUMERIC OR STRING OF THE
1C62 E640				AND   040H		      ; VARIABLE AND THE EXPRESSION MUST MATCH
1C64 2024				JR    NZ,REPORT_C	      ; GIVE REPORT C IF THEY DONT.
1C66 CB7A				BIT   7,D		      ; JUMP FORWARD TO MAKE THE ACTUAL
1C68 C2FF2A				JP    NZ,LET		      ; ASSIGNMENT UNLESS CHECKING SYNTAX WHEN
1C6B C9 				RET			      ; SIMPLY RETURN.
1C6C			  ;
1C6C			  ; THE COMMAND CLASS-04  ROUTINE.
1C6C			  ; THE COMMAND CLASS 04 ENTRY POINT IS USED BY 'FOR' AND 'NEXT' STATEMENT.
1C6C			  ;
1C6C CDB228		  CLASS_04:	CALL  LOOK_VAR		      ; LOOK IN THE VARIABLES AREA FOR THE
1C6F					;			      ; VARIABLE BEING USED.
1C6F F5 				PUSH  AF		      ; SAVE THE AF REGISTER PAIR WHILST
1C70 79 				LD    A,C		      ; THE DISCRIMINATOR BYTE IS TESTED
1C71 F69F				OR    09FH		      ; TO ENSURE THAT THE VARIABLE IS A
1C73 3C 				INC   A 		      ; 'FOR-NEXT' CONTROL VARIABLE.
1C74 2014				JR    NZ,REPORT_C	      ;
1C76 F1 				POP   AF		      ; RESTORE THE FLAGS REGISTER
1C77 18A9				JR    VAR_A_1		      ; AND JUMP BACK TO MAKE VARIABLE THAT
1C79					;			      ; HAS BEEN FOUND THE 'VARIABLE IN
1C79					;			      ; ASSIGNMENT'.
1C79			  ;
1C79			  ; THE 'EXPECT NUMERIC/STRING EXPRESSIONS'  SUBROUTINE.
1C79			  ; THERE IS A SERIES OF SHORT SUBROUTINES THAT ARE USED TO FETCH THE RESULT
1C79			  ;  OF EVALUATING THE NEXT EXPRESSION. THE RESULT FROM A SINGLE EXPRESSION IS
1C79			  ; RETURNED AS A LAST VALUE ON THE CALCULATOR STACK .
1C79			  ;  THE ENTRY POINT NEXT_2NUM IS USED WHEN CH_ADD NEEDS UPDATING TO ROINT
1C79			  ;  TO THE START OF THE FIRST EXPRESSION.
1C79			  ;
1C79 E7 		  NEXT_2NUM:	RST   GET_NBT		      ; ADVANCE CH_ADD
1C7A			  ;
1C7A			  ; THE ENTRY POINT EXPT_2NUM	(CLASS-08) ALLOWES TWO NUMERIC EXPRESSIONS,
1C7A			  ; SEPARATED BY COMMA, TO BE EVALUATED.
1C7A CD821C		  EXPT_2NUM:	CALL  EXPT_1NUM 	      ; EVALUATE EACH EXPRESSION IN TURN
1C7D					;			      ; - SO EVALUATE THE FIRST.
1C7D FE2C				CP    ','		      ; GIVE AN ERROR REPORT IF THE
1C7F 2009				JR    NZ,REPORT_C	      ; SEPARATOR IS NOT COMMA.
1C81 E7 				RST   GET_NBT		      ; ADVANCE CH_ADD.
1C82			  ;
1C82			  ; THE ENTRY POINT EXPT_1NUM (CLASS-06) ALLOWES FOR A SINGLE NUMERIC EXPRESSION
1C82			  ; TO BE EVALUATED.
1C82			  ;
1C82 CDFB24		  EXPT_1NUM:	CALL  SCANNING		      ; EVALUATE THE NEXT EXPRESSION
1C85 FDCB0176				BIT   NUM_VAR,(IY+FLAGS-YBASE) ; RETURN AS LONG AS THE RESULT WAS
1C89 C0 				RET   NZ		      ; NUMERIC ; OTHERWISE IT IS AN ERROR.
1C8A			  ; REPORT C- NONSENSE IN BASIC.
1C8A CF 		  REPORT_C:	RST   ERROR_1		      ; CALL THE ERROR HANDLING ROUTINE.
1C8B 0B 				DEFB  0BH		      ;
1C8C			  ;
1C8C			  ;  THE ENTRY POINT EXPT_EXP (CLASS-0A) ALLOWS FOR A SINGLE STRING EXPRESSION
1C8C			  ;  TO BE EVALUATED.
1C8C CDFB24		  EXPT_EXP:	CALL  SCANNING		      ; EVALUATE THE NEXT EXPRESSION.
1C8F FDCB0176				BIT   NUM_VAR,(IY+FLAGS-YBASE) ; THIS TIME RETURN IF THE RESULT
1C93 C8 				RET   Z 		      ; INDICATES A STRING; OTHERWISE
1C94 18F4				JR    REPORT_C		      ; GIVE AN ERROR REPORT.
1C96			  ;
1C96			  ; THE 'SET PERMANENT COLOURS'  SUBROUTINE. (CLASS-07)
1C96			  ; THIS SUBROUTINE ALLOWS FOR THE CURRENT TEMPORARY COLOURS TO BE MADE
1C96			  ; PERMANET. AS COMMAND CLASS 07 IT IS IN EFFECT THE COMMAND ROUTINE FOR THE SIX
1C96			  ; COLOURS ITEM COMMANDS.
1C96			  ;
1C96 FDCB017E		  PERMS:	BIT   LIN_EXEC,(IY+FLAGS-YBASE) ; THE SYNTAX/RUN FLAG IS READ.
1C9A FDCB0286				RES   SCRN_L,(IY+TV_FLAG-YBASE) ; SIGNAL 'MAIN SCREEN'
1C9E C44D0D				CALL  NZ,TEMPS		      ;  ONLY DURING A 'RUN' CALL TEMPS
1CA1					;			      ; TO ENSURE THE TEMPORARY COLOURS ARE
1CA1					;			      ; THE MAIN SCREEN COLOURS.
1CA1 F1 				POP   AF		      ; DROP THE RETURN ADDRESS - SCAN_LOOP
1CA2 3A745C				LD    A,(T_ADDR)	      ; FETCH THE LOW BYTE OF T_ADDR AND
1CA5 D613				SUB   013H		      ; SUBSTRACT 13 TO GIVE THE RANGE
1CA7					;			      ; D9...DE WHICH ARE THE TOKEN CODES
1CA7					;			      ; FOR INK AND OVER.
1CA7 CDFC21				CALL  CO_TEMP_4 	      ; JUMP FORWARD TO CHANGE THE TEMPORARY
1CAA			  ;					 ; COLOURS AS DIRECTED BY THE BASIC
1CAA					;			      ; STATEMENT.
1CAA CDEE1B				CALL  CHECK_END 	      ; MOVE ON TO THE NEXT STATEMENT
1CAD					;			      ; IF CHECKING SYNTAX.
1CAD 2A8F5C				LD    HL,(ATTR_T)	      ; NOW THE TEMPORARY COLOURS VALUES ARE
1CB0 228D5C				LD    (ATTR_P),HL	      ; MADE PERMANENT (BOTH ATTR_P & MASK_P)
1CB3 21915C				LD    HL,P_FLAG 	      ; P_FLAG HAS TO BE CONSIDERED
1CB6 7E 				LD    A,(HL)		      ;
1CB7			  ;
1CB7			  ; THE FOLLOWING INSTRUCTIONS CLEVERLY COPY THE EVEN BITS OF THE SUPPLIED BYTE
1CB7			  ;  TO THE ODD BITS. IN EFFECT MAKING THE PERMANENT BITS THE SAME AS THE
1CB7			  ; TEMPORARY  ONES.
1CB7 07 				RLCA			      ; MOVE THE MASK LEFTWARDS.
1CB8 AE 				XOR   (HL)		      ; IMPRESS ONTO THE MASK
1CB9 E6AA				AND   0AAH		      ;  ONLY IF THE EVEN BITS OF THE
1CBB AE 				XOR   (HL)		      ; OTHER BYTE
1CBC 77 				LD    (HL),A		      ; RESTTORE THE RESULT.
1CBD C9 				RET			      ;
1CBE			  ;
1CBE			  ;   COMMAND CLASS-09 ROUTINE.
1CBE			  ; THIS ROUTINE IS USED BY 'PLOT', 'DRAW', 'CIRCLE' STATEMENTS IN ORDER
1CBE			  ;  TO SPECIFY THE DEFAULT CONDITIONS OF 'FLASH 8; BRIGHT 8; PAPER 8', THAT
1CBE			  ; ARE SET UP BEFORE ANY EMBEDDED COLOUR ITEMS ARE CONSIDERED.
1CBE			  ;
1CBE CD3025		  CLASS_09:	CALL  SYNTAX_Z		      ; JUMP FORWARD IF CHECKING SYNTAX.
1CC1 2813				JR    Z,CL_09_1 	      ;
1CC3 FDCB0286				RES  SCRN_L,(IY+TV_FLAG-YBASE);;  SIGNAL 'MAIN SCREEN'
1CC7 CD4D0D				CALL  TEMPS		      ; SET THE TEMPORARY COLOURS FOR
1CCA					;			      ; THE MAIN SCREEN.
1CCA 21905C				LD    HL,MASK_T 	      ; THIS IS MASK_T.
1CCD 7E 				LD    A,(HL)		      ; FETCH ITS PRESENT VALUE BUT KEEP ONLY
1CCE F6F8				OR    0F8H		      ; ITS INK PART 'UNMASKED'
1CD0 77 				LD    (HL),A		      ; RESTORE THE VALUE WHICH NOW INDICATES
1CD1					;			      ; 'FLASH 8; BRIGHT 8; PAPER 8'
1CD1 FDCB57B6				RES  6,(IY+P_FLAG-YBASE)      ; ALSO ENSURE 'NOT PAPER 9'.
1CD5 DF 				RST   GET_BT		      ; FETCH THE PRESENT CHARACTER BEFORE
1CD6					;			      ; CONTINUING TO DEAL WITH EMBEDDED
1CD6					;			      ; COLOUR ITEMS.
1CD6 CDE221		  CL_09_1:	CALL  CO_TEMP_2 	      ; DEAL WITH THE LOCALLY DOMINANT
1CD9					;			      ; COLOUR ITEMS.
1CD9 189F				JR    EXPT_2NUM 	      ; NOW GET THE FIRST TWO OPERANDS FOR
1CDB					;			      ; 'PLOT', 'DRAW', 'CIRCLE'.
1CDB			  ;
1CDB			  ;  THE COMMAND CLASS 0B ROUTINE.
1CDB			  ; THE ROUTINE IS USED BY SAVE , LOAD, VERIFY AND MERGE STATEMENTS.
1CDB			  ;
1CDB C30506		  CLASS_0B:	JP    SAVE_ETC		      ; JUMP TO CASSETE HANDLING ROUTINE.
1CDE			  ;
1CDE			  ;  THE 'FETCH NUMBER'  SUBROUTINE.
1CDE			  ; THIS SUBROUTINE LEADS TO A FOLLOW NUMERIC EXPRESSION BEING EVALUATED BUT
1CDE			  ;  ZERO BEING USED INSTEAD IF THERE IS NO EXPRESSION.
1CDE			  ;
1CDE FE0D		  FETCH_NUM:	CP    CR		      ; JUMP FORWARD IF AT THE END OF LINE.
1CE0 2804				JR    Z,USE_ZERO	      +
1CE2 FE3A				CP    ':'		      ; BUT JUMP TO EXPT_1NUM UNLESS AT THE
1CE4 209C				JR    NZ,EXPT_1NUM	      ; END OF STATEMENT.
1CE6			  ;
1CE6			  ;  THE CALCULATOR IS NOW USED TO ADD THE VALUE ZERO  TO THE CALCULATOR STAK.
1CE6 CD3025		  USE_ZERO:	CALL  SYNTAX_Z		      ; DONT PERFORM OPERATION IF SYNTAX
1CE9 C8 				RET   Z 		      ; IS BEING CHECKED.
1CEA EF 				RST   28H		      ; USE THE CALCULATOR.
1CEB A0 				DEFB 0A0H		      ; STK_ZERO	   THE 'LAST VALUE' IS NOW ZERO.
1CEC 38 				DEFB 038H		      ; END_CALC
1CED C9 				RET			      ; RETURN WITH ZERO ADDED TO THE STACK
1CEE			  ;
1CEE			  ;  THE COMMAND ROUTINES.
1CEE			  ;  THE SECTION OF THE 16K MONITOR PROGRAM FROM 1CEE TO 23FA CONTAINS MOST OF THE
1CEE			  ; COMMAND ROUTINES OF BASIC INTERPRETER.
1CEE			  ;
1CEE			  ;  THE 'STOP' COMMAND ROUTINE.
1CEE			  ;
1CEE CF 		  STOP: 	RST   8 		      ; CALL ERROR HANDLING ROUTINE.
1CEF 08 				DEFB 008H		      ;
1CF0			  ;
1CF0			  ;  THE 'IF' COMMAND  ROUTINE.
1CF0			  ;  ON ENTRY THE VALUE OF THE EXPRESSION BETWEEN THE 'IF' AND 'THEN'
1CF0			  ; IS THE 'LAST VALUE'  ON THE CALCULATOR STACK. IF THIS IS LOGICALLY
1CF0			  ; TRUE THEN THE NEXT STATEMENT IS CONSIDERED; OTHERWISE THE LINE IS CONSIDERED
1CF0			  ; TO HAVE BEEN FINISHED.
1CF0			  ;
1CF0 C1 		  IF:		POP   BC		      ;  DROP RETURN ADDRESS - STMT_RET.
1CF1 CD3025				CALL  SYNTAX_Z		      ;  JUMP FORWARD IF CHECKING SYNTAX.
1CF4 280A				JR    Z,IF_1		      ;
1CF6			  ; NOW USE THE CALCULATOR TO 'DELETE'	THE LAST VALUE ON THE CALCULATOR
1CF6			  ;  STACK BUT LEAVE THE DE REGISTER PAIR ADDRESSING THE FIRST BYTE OF THE
1CF6			  ;  VALUE .
1CF6 EF 				RST   28H		      ; F_CALC
1CF7 02 				DEFB 002H		      ; DELETE		   THE PRESENT 'LAST VALUE'  IS DELETED.
1CF8 38 				DEFB 038H		      ; END_CALC
1CF9 EB 				EX    DE,HL		      ; MAKE HL POINT TO THE FIRST BYTE AND
1CFA CDE934				CALL  TEST_ZERO 	      ; CALL TEST_ZERO .
1CFD DAB31B				JP    C,LINE_END	      ; IF THE VALUE WAS FALSE JUMP TO
1D00					;			      ; THE NEXT LINE
1D00 C3291B		  IF_1: 	JP    STMT_L_1		      ; BUT IF TRUE JUMP TO THE NEXT STATEMENT
1D03					;			      ; (AFTER 'THEN')
1D03			  ;
1D03			  ; THE 'FOR'  COMMAND ROUTINE.
1D03			  ;  THIS COMMAND ROUTINE IS ENTERED WITH THE 'VALUE' AND THE 'LIMIT' OF THE
1D03			  ;  'FOR' STATEMENT ALREADY ON THE TOP OF THE CALCULATOR STACK.
1D03			  ;
1D03 FECD		  FOR:		CP    0CDH		      ; JUMP FORWARD UNLESS 'STEP' IS GIVEN.
1D05 2009				JR    NZ,F_USE_1	      ;
1D07 E7 				RST   GET_NBT		      ; ADVANCE CH_ADD AND FETCH THE VALUE
1D08 CD821C				CALL  EXPT_1NUM 	      ; OF THE 'STEP'.
1D0B CDEE1B				CALL  CHECK_END 	      ; MOVE ON TO THE NEXT STATEMENT
1D0E 1806				JR    F_REORDER 	      ; IF CHECKING SYNTAX; OTHERWISE JUMP
1D10					;			      ; FORWARD.
1D10			  ; THERE HAS NOT BEEN A 'STEP' SUPPLIED SO THE 'VALUE' 1 IS TO BE USED.
1D10 CDEE1B		  F_USE_1:	CALL  CHECK_END 	      ; MOVE ON TO THE NEXT STATEMENT IF
1D13					;			      ; CHECKING SYNTAX; OTHERWISE USE THE
1D13 EF 				RST   28H		      ; CALCULATOR TO PLACE 1 ON THE
1D14 A1 				DEFB 0A1H		      ; STK_ONE 	   CALCULATOR STACK.
1D15 38 				DEFB 038H		      ; END_CALC
1D16			  ;  THE THREE VALUES ON THE CALCULATOR STACK ATE: 'VALUE'-V,'LIMIT'-L,'STEP'-S.
1D16			  ;  THESE VALUES NOW HAVE TO BE MANIPULATED.
1D16 EF 		  F_REORDER:	RST   28H		      ; FP_CALC
1D17 C0 				DEFB 0C0H		      ; ST_MEM_0       V, L, S
1D18 02 				DEFB 002H		      ; DELETE	       V, L
1D19 01 				DEFB 001H		      ; EXCHANGE       L, V
1D1A E0 				DEFB 0E0H		      ; GET_MEM_0      L, V, S
1D1B 01 				DEFB 001H		      ; EXCHANGE       L, S, V
1D1C 38 				DEFB 038H		      ; END_CALC
1D1D			  ; A 'FOR' CONTROL VARIABLE IS NOW BE ESTABLISHED AND TREATED AS A TEMPORARY
1D1D			  ; CALCULATOR MEMORY AREA.
1D1D CDFF2A				CALL  LET		      ; THE VARIABLE IS FOUND, OR CREATED
1D20					;			      ; IF NEEDED ( V IS USED).
1D20 22685C				LD    (MEM),HL		      ; MAKE IT A 'MEMORY AREA'
1D23			  ; THE VARIABLE THAT HAS BEEN FOUND MAY BE A SIMPLE NUMERIC VARIABLE
1D23			  ; USING ONLY SIX DOCATIONS IN WHICH CASE IT WILL NEED EXTENDING.
1D23 2B 				DEC   HL		      ; FETCH THE VARIABLE'S SINGLE
1D24 7E 				LD    A,(HL)		      ; CHARACTER NAME
1D25 CBFE				SET  7,(HL)		      ; ENSURE BIT 7 OF THE NAME IS SET.
1D27 010600				LD    BC,6		      ; IT WILL HAVE SIX LOCATION AT LEAST.
1D2A 09 				ADD   HL,BC		      ; MAKE HL POINT AFTER THEM.
1D2B 07 				RLCA			      ; ROTATE THE NAME AND JUMP IF IT WAS
1D2C 3806				JR    C,F_L_S		      ; ALREADY 'FOR' VARIABLE.
1D2E 0E0D				LD    C,13		      ; OTHERWISE CREATE 13 LOCATIONS
1D30 CD5516				CALL  MAKE_ROOM 	      ;
1D33 23 				INC   HL		      ; AGAN MAKE HL POINT TO THE 'LIMIT'
1D34					;			      ; POSITION.
1D34			  ; THE INITIAL VALUES FOR 'LIMIT' AND 'STEP' ARE NOW ADDED.
1D34 E5 		  F_L_S:	PUSH  HL		      ; THE POINTER IS SAVED.
1D35 EF 				RST   28H		      ; FP_CALC     L, S
1D36 02 				DEFB 002H		      ; DELETE		   L
1D37 02 				DEFB 002H		      ; DELETE		   _
1D38 38 				DEFB 038H		      ; END_CALC	   DE STILL POINTS TO 'L'
1D39 E1 				POP   HL		      ; THE POINTER IS RESTORED AND
1D3A EB 				EX    DE,HL		      ; BOTH POINTERS EXCHANGED.
1D3B 0E0A				LD    C,10		      ; THE TEN BYTES OF 'LIMIT' AND 'STEP'
1D3D EDB0				LDIR			      ; ARE MOVED.
1D3F			  ; THE LOOPING LINE NUMBER AND STATEMENT NUMBER ARE NOW ENTERED.
1D3F 2A455C				LD    HL,(PPC)		      ; THE CURRENT LINE NUMBER
1D42 EB 				EX    DE,HL		      ; EXCHANGE THE REGISTERS BEFORE
1D43 73 				LD    (HL),E		      ; ADDING THE LINE NUMBER TO 'FOR'
1D44 23 				INC   HL		      ;  CONTROL VARIABLE.
1D45 72 				LD    (HL),D		      ;
1D46 FD560D				LD    D,(IY+SUBPPC-YBASE)     ; THE LOOPING STATEMENT IS ALWAYS THE
1D49 14 				INC   D 		      ; NEXT STATEMENT - WHETHER IT EXIST OR
1D4A 23 				INC   HL		      ; NOT
1D4B 72 				LD    (HL),D		      ;
1D4C			  ; THE 'NEXT-LOOP'  SUBROUTINE IS CALLED TO TEST THE POSSIBILITY OF A 'PASS'
1D4C			  ; AND RETURN IS MADE IF ONE IS POSSIBLE; OTHERWISE THE STATEMENT AFTER
1D4C			  ; FOR 'FOR-NEXT' LOOP HAS TO BE IDENTIFIED.
1D4C CDDA1D				CALL  NEXT_LOOP 	      ;  IS A 'PASS' POSSIBLE?
1D4F D0 				RET   NC		      ;  RETURN NOW IF IT IS.
1D50 FD4638				LD    B,(IY+STRLEN-YBASE)     ;  FETCH THE VARIABLE'S NAME.
1D53 2A455C				LD    HL,(PPC)		      ;  COPY THE PRESENT LINE NUMBER
1D56 22425C				LD    (NEWPPC),HL	      ;  TO NEWPPC.
1D59 3A475C				LD    A,(SUBPPC)	      ; FETCH THE CURRENT STATEMENT NUMBER
1D5C ED44				NEG			      ; AND TWO'S COMPLEMENT IT.
1D5E 57 				LD    D,A		      ; TRANSFER THE RESULT TO D REGISTER.
1D5F 2A5D5C				LD    HL,(CH_ADD)	      ; FETCH THE CURRENT VALUE OF CH_ADD.
1D62 1EF3				LD    E,0F3H		      ; THE SEARCH WILL BE FOR 'NEXT'.
1D64			  ; NOW SEARCH IS MADE IN THE PROGRAM AREA FROM THE PRESENT POINT ONWARDS ,
1D64			  ; FOR THE FIRST OCCURENCE OF 'NEXT' FOLLOWED BY  THE COORECT VARIABLE.
1D64 C5 		  F_LOOP:	PUSH  BC		      ; SAVE THE VARIABLE'S NAME
1D65 ED4B555C				LD    BC,(NXTLIN)	      ; FETCH THE CURRENT VALUE OF NXTLIN
1D69 CD861D				CALL  LOOK_PROG 	      ; THE PROGRAM AREA IS NOW SEARCHED
1D6C					;			      ; AND BC WILL CHANGE WITH EACH
1D6C					;			      ; NEW LINE EXAMINED.
1D6C ED43555C				LD    (NXTLIN),BC	      ; UPON RETURN SAVE THE POINTER.
1D70 C1 				POP   BC		      ; RESTORE THE VARIABLE'S NAME
1D71 3811				JR    C,REPORT_I	      ; IF THERE ARE NO FURTHER  'NEXT'S
1D73					;			      ; THEN GIVE AN ERROR.
1D73 E7 				RST   20H		      ; ADVANCE PAST THE 'NEXT'  THAT WAS
1D74					;			      ; FOUND.
1D74 F620				OR    020H		      ; ALLOW FOR UPPER AND LOW CASE LETTERS
1D76 B8 				CP    B 		      ; BEFORE THE NEW VARIABLE NAME IS TESTED.
1D77 2803				JR    Z,F_FOUND 	      ; JUMP FORWARD IF IT MATCHES.
1D79 E7 				RST   20H		      ; ADVANCE CH_ADD AGAIN AND JUMP
1D7A 18E8				JR    F_LOOP		      ; BACK IF NOT THE CORRECT VARIABLE.
1D7C			  ; NEWPPC HOLDS THE LINE NUMBER OF THE LINE IN WHICH THE CORRECT 'NEXT'
1D7C			  ; WAS FOUND. NOW THE STATEMENT NUMBER HAS TO BE FOUND AND STORED IN NSPPC.
1D7C E7 		  F_FOUND:	RST   20H		      ; ADVANCE CH_ADD.
1D7D 3E01				LD    A,1		      ; THE STATEMENT COUNTER IN D REGISTER
1D7F					;			      ; COUNTED STATEMENTS BACK FROM ZERO
1D7F 92 				SUB   D 		      ; SO IT HAS TO BE SUBSTRACTED FROM 1.
1D80 32445C				LD    (NSPPC),A 	      ; THE RESULT IS STORED.
1D83 C9 				RET			      ;  RETURN TO STMT_RET.
1D84			  ;
1D84			  ; REPORT - FOR WITHOUT NEXT.
1D84 CF 		  REPORT_I:	RST   8 		      ;  CALL ERROR HANDLING ROUTINE.
1D85 11 				DEFB 011H		      ;
1D86			  ;
1D86			  ; THE 'LOOK_PROG' SUBROUTINE.
1D86			  ;  THIS SUBROUTINE IS USED TO FIND OCCURENCE OF EITHER 'DATA', 'DEF FN', OR
1D86			  ; 'NEXT'. ON ENTRY THE APPROPRIATE TOKEN CODE IS IN THE E REGISTER  AND HL
1D86			  ;  REGISTER PAIR POINTS TO THE START OF THE SEARCH AREA.
1D86			  ;
1D86 7E 		  LOOK_PROG:	LD    A,(HL)		      ; FETCH THE PRESENT CHARACTER .
1D87 FE3A				CP    03AH		      ; JUMP FORWARD IF IT IS A ':'
1D89 2818				JR    Z,LOOK_P_2	      ; WHICH WILL INDICATE THERE ARE
1D8B					;			      ; MORE STATEMENTS IN THE PRESENT LINE.
1D8B			  ; NOW LOOP IS ENTERED TO EXAMINE EACH FURTHER LINE IN THE PROGRAM.
1D8B 23 		  LOOK_P_1:	INC   HL		      ; FETCH THE HIGH BYTE OF THE LINE
1D8C 7E 				LD    A,(HL)		      ; NUMBER AND RETURN WITH CARRY SET IF
1D8D E6C0				AND   0C0H		      ; THERE ARE NO FURTHER LINES IN PROGRAM.
1D8F 37 				SCF			      ;
1D90 C0 				RET   NZ		      ;
1D91 46 				LD    B,(HL)		      ; THE LINE NUMBER IS FETCHED AND PASSED
1D92 23 				INC   HL		      ; TO NEWPPC.
1D93 4E 				LD    C,(HL)		      ;
1D94 ED43425C				LD    (NEWPPC),BC	      ;
1D98 23 				INC   HL		      ; THEN THE LENGTH IS COLLECTED.
1D99 4E 				LD    C,(HL)		      ;
1D9A 23 				INC   HL		      ;
1D9B 46 				LD    B,(HL)		      ;
1D9C E5 				PUSH  HL		      ;  THE POINTER IS SAVED WHILST THE
1D9D 09 				ADD   HL,BC		      ; ADDRESS OF THE END OF THE LINE
1D9E 44 				LD    B,H		      ; IS FORMED IN BC REGISTER PAIR.
1D9F 4D 				LD    C,L		      ;
1DA0 E1 				POP   HL		      ; THE POINTER IS RESTORED.
1DA1 1600				LD    D,0		      ; SET THE STATEMENT COUNTER TO ZERO.
1DA3 C5 		  LOOK_P_2:	PUSH  BC		      ; THE 'END-OF-LINE' POINTER IS SAVED
1DA4 CD8B19				CALL  EACH_STMT 	      ; WHILST THE STATEMENTS ON THE LINE ARE
1DA7 C1 				POP   BC		      ; EXAMINED.
1DA8 D0 				RET   NC		      ; MAKE A RETURN IF THERE WAS AN
1DA9					;			      ; 'OCCURENCE'; OTHERWISE CONSIDER THE
1DA9 18E0				JR    LOOK_P_1		      ; THE NEXT LINE.
1DAB			  ;
1DAB			  ; THE 'NEXT' COMMAND ROUTINE.
1DAB			  ; THE 'VARIABLE IN ASSIGNMENT' HAS ALREADY BEEN DETERMINED (SEE CLASS-04); AND
1DAB			  ; IT REMAINS	TO CHANGE THE 'VALUE' AS REQUARED.
1DAB			  ;
1DAB FDCB374E		  NEXT: 	BIT  NEW_VAR,(IY+FLAGX-YBASE) ; JUMP TO GIVE THE ERROR REPORT
1DAF C22E1C				JP    NZ,REPORT_2	      ; IF THE VARIABLE WAS NOT FOUND.
1DB2 2A4D5C				LD    HL,(DEST) 	      ; THE ADDRESS OF A VARIABLE IS FETCHED
1DB5 CB7E				BIT  7,(HL)		      ; AND THE NAME
1DB7 281F				JR    Z,REPORT_1	      ; TESTED FURTHER.
1DB9			  ; NEXT THE  VARIABLE'S 'VPLUE' AND  'STEP' ARE MANIPULATED BY CALCULATOR.
1DB9 23 				INC   HL		      ; STEP PAST THE NAME.
1DBA 22685C				LD    (MEM),HL		      ;MAKE THE VARIABLE A TEMPORARY
1DBD					;			      ; 'MEMORY AREA'
1DBD EF 				RST   28H		      ;  FP_CALC.
1DBE E0 				DEFB 0E0H		      ; GET_MEM_0	 V
1DBF E2 				DEFB 0E2H		      ; GET_MEM_2	 V, S
1DC0 0F 				DEFB 00FH		      ; ADDITION	 V+S
1DC1 C0 				DEFB 0C0H		      ; ST_MEM_0	 V+S
1DC2 02 				DEFB 002H		      ; DELETE		 _
1DC3 38 				DEFB 038H		      ; END_CALC	 _
1DC4			  ; THE RESULT OF ADDING THE 'VALUE' AND THE 'STEP' IS NOW TESTED AGAINST
1DC4			  ; THE 'LIMIT' BY CALLING 'NEXT_LOOP'.
1DC4 CDDA1D				CALL NEXT_LOOP		      ; TEST THE NEW 'VALUE' AGAINST 'LIMIT'
1DC7 D8 				RET   C 		      ; RETURN NOW IF THE 'FOR-NEXT' LOOP
1DC8					;			      ; HAS BEEN COMPLETED.
1DC8			  ; OTHERWISE COLLECT THE 'LOOPING' LINE NUMBER AND STATEMENT.
1DC8 2A685C				LD    HL,(MEM)		      ;FIND THE ADDRESS OF THE LOW BYTE
1DCB 110F00				LD    DE,0000FH 	      ; OF THE LOOPING LINE NUMBER.
1DCE 19 				ADD   HL,DE		      ;
1DCF

					LD    E,(HL)		      ; NOW FETCH THIS LINE NUMBER
	 				INC   HL		      ; 
1DD3 66 				LD    H,(HL)		      ; FOLLOWED BY THE STATEMENT NUMBER.
1DD4 EB 				EX    DE,HL		      ; EXCHANGE THE NUMBERS BEFORE
1DD5 C3731E				JP    GO_TO_2		      ;  JUMPING FORWARD TO TREAT THEM
1DD8					;			      ; AS THE DESTINATION LINE OF A 'GOTO'
1DD8					;			      ; COMMAND.
1DD8			  ; REPORT - NEXT WITHOUT FOR.
1DD8 CF 		  REPORT_1:	RST   8 		      ;  CALL ERROR HANDLING ROUTINE.
1DD9 00 				DEFB 000H		      ;
1DDA			  ;
1DDA			  ; THE 'NEXT-LOOP' SUBROUTINE.
1DDA			  ; THIS SUBROUTINE IS USED TO DETERMINE WHETHE THE 'LIMIT' HAS BEEN EXCEEDED BY
1DDA			  ;  THE PRESENT VALUE. NOTO HAS TO BE TAKEN OF THE SIGN OF THE 'STEP'.
1DDA			  ; THE SUBROUTINE RETURNS THE CARRY FLAG SET IF THE 'LIMIT' IS EXCEEDED.
1DDA			  ;
1DDA EF 		  NEXT_LOOP:	RST   28H		      ; FP_CALC
1DDB E1 				DEFB 0E1H		      ; GET_MEM_1	   L
1DDC E0 				DEFB 0E0H		      ; GET_MEM_0	   L, V
1DDD E2 				DEFB 0E2H		      ; GET_MEM_2	   L, V, S
1DDE 36 				DEFB 036H		      ; LESS_0		   L, V, (1/0)
1DDF 00 				DEFB 0			      ; JUMP_TRUE	   L, V, (1/0)
1DE0 02 				DEFB NEXT_1-$		      ; L, V, (1/0)
1DE1 01 				DEFB 001H		      ; EXCHANGE	   V, L
1DE2 03 		  NEXT_1:	DEFB 003H		      ; SUBSTRACT	   V-L OR L-V
1DE3 37 				DEFB 037H		      ; GREATER_0	   (1/0)
1DE4 00 				DEFB 0			      ; JUMP_TRUE	    (1/0)
1DE5 04 				DEFB NEXT_2-$		      ;  _
1DE6 38 				DEFB 038H		      ; END_CALC	    _
1DE7 A7 				AND   A 		      ;  CLEAR CARRY FLAG AND RETURN-
1DE8 C9 				RET			      ;  LOOP IS POSSIBLE.
1DE9			  ; HOWEVER IF THE LOOP IS IMPOSSIBLE THE CARRY FLAG HAS TO BE SET.
1DE9 38 		  NEXT_2:	DEFB  38H		      ; END_CALC	   _
1DEA 37 				SCF			      ; SET CARRY FLAG AND
1DEB C9 				RET			      ; 	RETURN.
1DEC			  ;
1DEC			  ; THE 'READ' COMMAND ROUTINE.
1DEC			  ; THE READ COMMAND ALLOWS FOR THE READING OF A 'DATA' LIST AND HAS AN EFFECT
1DEC			  ; SIMILAR TO A SERIES OF 'LET' COMMANDS.
1DEC			  ;  EACH ASSIGNMENT WITHING A SINGLE 'READ' STATEMENT IS DEALT WITH IN TURN.
1DEC			  ;  THE SYSTEM VARIABLE X_PTR IS USED AS A STORAGE LOCATION FOR THE POINTER TO
1DEC			  ;  THE READ STATEMENT WHILST CH_ADD IS USED TO STEP ALONG THE 'DATA' LIST.
1DEC			  ;
1DEC E7 		  READ_3:	RST   GET_NBT		      ; COME HERE ON EACH PASS, AFTER THE
1DED					;			      ; FIRST TO MOVE ALONG THE READ
1DED					;			      ; STATEMENT.
1DED CD1F1C		  READ: 	CALL  CLASS_01		      ; CONSIDER WHETHER THE VARIABLE HAS
1DF0					;			      ; BEEN USED BEFORE; FIND THE EXISTING
1DF0					;			      ; ENTRY IF IT HAS.
1DF0 CD3025				CALL  SYNTAX_Z		      ; JUMP FORWARD IF CHECKING SYNTAX.
1DF3 2829				JR    Z,READ_2		      ;
1DF5 DF 				RST   GET_BT		      ; SAVE THE CURRENT POINTER
1DF6 225F5C				LD    (X_PTR),HL	      ; CH_ADD IN X_PTR.
1DF9 2A575C				LD    HL,(DATADD)	      ; FETCH THE CURRENT 'DATA' LIST
1DFC 7E 				LD    A,(HL)		      ; POINTER AND JUMP FORWARD UNLESS
1DFD FE2C				CP    ','		      ; A NEW 'DATA' STATEMENT
1DFF 2809				JR    Z,READ_1		      ; HAS TO BE FOUND.
1E01 1EE4				LD    E,0E4H		      ; THE SEARCH IS FOR 'DATA'
1E03 CD861D				CALL  LOOK_PROG 	      ; JUMP FORWARD IF THE SEARCH IS
1E06 3002				JR    NC,READ_1 	      ;  SUCCESSFULL.
1E08			  ; REPOR - OUT OF DATA.
1E08 CF 		  REPORT_E:	RST   ERROR_1		      ; CALL ERROR HANDLING ROUTINE.
1E09 0D 				DEFB 00DH		      ;
1E0A			  ; CONTINUE - PICKING UP A VALUE FROM 'DATA' LIST.
1E0A CD7700		  READ_1:	CALL  TEMP_PTR1 	      ; ADVANCE POINTER ALONG THE 'DATA' LIST
1E0D					;			      ; AND SET CH_ADD.
1E0D CD561C				CALL  VAL_FET_1 	      ; FETCH THE VALUE AND ASSIGN IT
1E10					;			      ; TO THE VARIABLE.
1E10 DF 				RST   GET_BT		      ; FETCH THE CURRENT VALUE OF CH_ADD
1E11 22575C				LD    (DATADD),HL	      ; AND STORE IT IN DATADD.
1E14 2A5F5C				LD    HL,(X_PTR)	      ; FETCH THE POINTER TO 'READ' STATEMENT
1E17 FD362600				LD    (IY+X_PTR+1-YBASE),0    ; AND CLEAR X_PTR.
1E1B CD7800				CALL  TEMP_PTR2 	      ; MAKE CH_ADD ONCE AGAIN POINTS TO THE
1E1E					;			      ; 'READ' STATEMENT.
1E1E DF 		  READ_2:	RST   GET_BT		      ; GET THE PRESENT CHARACTER AND SEE IF
1E1F FE2C				CP    ','		      ; IT IS ','.
1E21 28C9				JR    Z,READ_3		      ; IF IT IS THEN JUMP BACK AS THERE ARE
1E23					;			      ; FURTHER ITEMS.
1E23 CDEE1B				CALL  CHECK_END 	      ; OTHERWISE RETURN EITHER VIA CHECK_END
1E26 C9 				RET			      ; (IF CHECKING SYNTAX) OR RET (STMT_RET)
1E27			  ;
1E27			  ; THE 'DATA' COMMAND ROUTINE.
1E27			  ; DURING SYNTAX CHECKING A 'DATA' STATEMENT IS CHECKED TO ENSURE THAT
1E27			  ;  IT CONTAINS A SERIES OF VALID EXPRESSIONS, SEPARATED BY COMMAS.
1E27			  ;  BUT IN 'RUN-TIME' THE STATEMENT IS PASSED BY.
1E27			  ;
1E27 CD3025		  DATA: 	CALL  SYNTAX_Z		      ; JUMP FORWARD UNLESS CHECKING SYNTAX.
1E2A 200B				JR    NZ,DATA_2 	      ;
1E2C			  ; A LOOP IS NOW ENTERED TO DEAL WITH EACH EXPRESSION IN 'DATA' STATEMENT.
1E2C CDFB24		  DATA_1:	CALL  SCANNING		      ; SCAN THE NEXT EXPRESSION.
1E2F FE2C				CP    ','		      ; CHECK FOR THE CORRECT SEPARATOR ','
1E31 C4EE1B				CALL  NZ,CHECK_END	      ; BUT MOVE TO THE NEXT STATEMENT
1E34					;			      ; IF NOT MATCHED.
1E34 E7 				RST   20H		      ; WHILST THERE ARE STILL EXPRESSIONS
1E35 18F5				JR    DATA_1		      ; TO BE CHECKED GO AROUND THE LOOP.
1E37			  ; THE 'DATA' STATEMENT HAS TO BE PASSED-BY IN RUN-TIME.
1E37 3EE4		  DATA_2:	LD    A,0E4H		      ; IT IS A 'DATA' STATEMENT THAT MS TO
1E39					;			      ; BE PASSED-BY.
1E39			  ; THE PASS_BY SUBROUTINE.
1E39			  ; ON ENTRY THE A REGISTER WILL HOLD EITHER THE TOKED 'DATA' OR THE TOKEN
1E39			  ; 'DEF FN' DEPENDING ON THE TYPE OF STATEMENT THAT IS BEING 'PASSED-BY'.
1E39 47 		  PASS_BY:	LD    B,A		      ; MAKE THE BC REGISTER PAIR HOLD
1E3A					;			      ; A VERY HIGH NUMBER.
1E3A EDB9				CPDR			      ; LOOK BACK ALONG THE STATEMENT
1E3C					;			      ; FOR THE TOKEN.
1E3C 110002				LD    DE,200H		      ;  NOW LOOK ALONG THE LINE
1E3F C38B19				JP    EACH_STMT 	      ; FOR THE STATEMENT AFTER.(THE 'D-1'TH
1E42					;			      ; STATEMENT FROM THE CURRENT POSITION).
1E42			  ;
1E42			  ; THE 'RESTORE'  COMMPAND.
1E42			  ; THE OPERAND FOR A RESTORE COMMAND IS TAKEN AS A LINE NUMBER,
1E42			  ; ZERO BEING USED IF NO OPERANDS IS GIVEN.
1E42			  ; THE REST_RUN ENTRY POINT IS USED BY THE 'RUN' COMMAND  ROUTINE.
1E42			  ;
1E42 CD991E		  RESTORE:	CALL  FIND_INT2 	      ; COMPRESS THE OPERAND INTO   BC.
1E45 60 		  REST_RUN:	LD    H,B		      ; TRANSFER THE RESULT INTO  HL
1E46 69 				LD    L,C		      ;  REGISTER PAIR.
1E47 CD6E19				CALL  LINE_ADDR 	      ; NOW FIND THE ADDRESS OF THAT LINE
1E4A					;			      ; OR THE 'FIRST LINE  AFTER'
1E4A 2B 				DEC   HL		      ; MAKE DATADD POINT TO THE
1E4B 22575C				LD    (DATADD),HL	      ; LOCATION BEFORE.
1E4E C9 				RET			      ; RETURN ONCE IT IS DONE.
1E4F			  ;
1E4F			  ; THE 'RANDOMIZE'  COMMAND ROUTINE.
1E4F			  ; ONCE AGAIN	THE OPERAND IS COMPRESSED INTO BC REGISTER PAIR AND TRANSFERED
1E4F			  ; TO THE REQUARED SYSTEM VARIABLE. HOWEVER IF THE OPERAND IS ZERO THE VALUE
1E4F			  ; IN FRAMES1 AND FRAMES2 IS USED INSTEAD.
1E4F			  ;
1E4F CD991E		  RANDOMIZE:	CALL  FIND_INT2 	      ; FETCH THE OPERAND.
1E52 78 				LD    A,B		      ; JUMP FORWARD UNLESS THE VALUE OF
1E53 B1 				OR    C 		      ; THE OPERAND IS ZERO
1E54 2004				JR    NZ,RAND1		      ;
1E56 ED4B785C				LD    BC,(FRAMES)	      ; FETCH THE TWO LOW ORDER BYTES OF
1E5A					;			      ; FRAMES INSTEAD.
1E5A ED43765C		  RAND1:	LD    (SEED),BC 	      ; NOW ENTER THE RESULT INTO SYSTEM
1E5E C9 				RET			      ; VARIABLE SEED BEFORE RETURNING.
1E5F			  ;
1E5F			  ;  THE 'CONTINUE' COMMAND ROUTINE.
1E5F			  ; THE REQUARED LINE NUMBER AND STATEMENT NUMBER WITHIN THAT LINE ARE MADE
1E5F			  ; THE OBJECT OF A JUMP.
1E5F			  ;
1E5F 2A6E5C		  CONTINUE:	LD    HL,(OLDPPC)	      ; THE LINE NUMBER.
1E62 FD5636				LD    D,(IY+OSPPC-YBASE)      ; THE STATEMENT NUMBER.
1E65 180C				JR    GO_TO_2		      ; JUMP FORWARD.
1E67			  ;
1E67			  ; THE 'GO TO'  COMMAND ROUTINE.
1E67			  ; THE OPERAND OF A 'GO TO' OUGHT TO BE A LINE NUMBER IN A RANGE 1...9999
1E67			  ; BUT THE ACTUAL TEST IS SIGNAL AN UPPER VALUE OF 61439.
1E67			  ;
1E67 CD991E				GO_TO:	 CALL  FIND_INT2      ; FETCH THE OPERAND AND TRANSFER
1E6A 60 				LD    H,B		      ; IT INTO HL REGISTER PAIR.
1E6B 69 				LD    L,C		      ;
1E6C 1600				LD    D,0		      ; SET THE STATEMENT NUMBER TO ZERO.
1E6E 7C 				LD    A,H		      ; GIVE THE ERROR MESSAGE
1E6F FEF0				CP    0F0H		      ; INTEGER OUT OF RANGE
1E71 302C				JR    NC,REPORT_B	      ; WITH LINES OVER 61439.
1E73			  ; THE ENTRY POINT GO_TO_2IS USED TO DETERMINE THE LINE NUMBER OF THE NEXT
1E73			  ; LINE TO BE HANDLED IN SEVERAL INSTANCES.
1E73 22425C		  GO_TO_2:	LD    (NEWPPC),HL	      ; ENTER THE LINE NUMBER AND THEN
1E76 FD720A				LD    (IY+NSPPC-YBASE),D      ; THE STATEMENT NUMBER.
1E79 C9 				RET			      ; RETURN TO STMT_RET.
1E7A			  ;
1E7A			  ;  THE 'OUT'	COMMAND.
1E7A			  ;  THE TWO PARAMETERS FOR 'OUT' COMMAND ARE FETCHED FROM THE CALCULATOR STACK
1E7A			  ;  AND USED AS DIRECTED.
1E7A			  ;
1E7A CD851E		  OUT:		CALL   TWO_PARAM	      ;  THE OPERANDS ARE FETCHED.
1E7D ED79				OUT   (C),A		      ;  THE ACTUAL  'OUT' INSTRUCTION.
1E7F C9 				RET			      ;  RETURN TO STMT.
1E80			  ;
1E80			  ; THE 'POKE'	COMMAND.
1E80			  ;  IN A SIMILAR MANNER THE POKE  OPERATION IS PERFORMED.
1E80			  ;
1E80 CD851E		  POKE: 	CALL  TWO_PARAM 	      ; THE OPERANDS FETCHED.
1E83 02 				LD    (BC),A		      ; THE ACTUAL POKE  OPERATION.
1E84 C9 				RET			      ; RETURN TO STMT.
1E85			  ;
1E85			  ; THE   ' TWO_PARAM'	SUBROUTINE.
1E85			  ; THE TOPMOST PARAMETER ON THE CALCULATOR STACKMUST BE COMPRESSIBLE INTO A
1E85			  ; SINGLE REGISTER. IT IS TWO'S COMPLEMENTED IF IT IF NEGATIVE. THE SECOND
1E85			  ;   PARAMETER MUST BE COMPRESSIBLE INTO REGISTER PAIR.
1E85			  ;
1E85 CDD52D		  TWO_PARAM:	CALL  FP_TO_A		      ; THE PARAMETER IS FETCHED.
1E88 3815				JR    C,REPORT_B	      ; GIVE AN ERRORIF IT IS TOO HIGH
1E8A					;			      ; A NUMBER.
1E8A 2802				JR    Z,TWO_P_1 	      ; JUMP FORWARD WITH POSITIVE NUMBERS
1E8C ED44				NEG			      ; BUT TWO'S COMPLEMENT NEGATIVE NUMBERS
1E8E F5 		  TWO_P_1:	PUSH  AF		      ; SAVE THE FIRST PARAMETER
1E8F CD991E				CALL  FIND_INT2 	      ; WHILST THE SECOND IS FETCHED.
1E92 F1 				POP   AF		      ; THE FIRST PARAMETER IS RESTORED
1E93 C9 				RET			      ; BEFORE RETURNING.
1E94			  ;
1E94			  ; THE 'FIND INTEGERS'  SUBROUTINE.
1E94			  ;  THE 'LAST VALUE' ON THE  CALCULATOR STACK IS FETCHED AND COMPRESSED INTO
1E94			  ;  A SINGLE REGISTER OR A REGISTER PAIR BY ENTERING AT 'FIND_INT1' AND
1E94			  ;  'FIND_INT2' RESPECTIVELY.
1E94 CDD52D		  FIND_INT1:	CALL  FP_TO_A		      ; FETCH THE' LAST VALUE'.
1E97 1803				JR    FIND_I_1		      ; JUMP FORWARD.
1E99 CDA22D		  FIND_INT2:	CALL  FP_TO_BC		      ; FETCH THE 'LAST VALUE'.
1E9C 3801		  FIND_I_1:	JR    C,REPORT_B	      ; IN BOTH CASES OVERFLOW IS
1E9E					;			      ; INDICATED BY A SET CARRY FLAG
1E9E C8 				RET   Z 		      ; RETURN WITH ALL POSITIVE
1E9F					;			      ; NUMBERS THET ARE IN RANGE
1E9F			  ; REPORT_B - INTEGER OUT OF RANGE
1E9F CF 		  REPORT_B:	RST   ERROR_1		      ; CALL THE ERROR HANDLING
1EA0 0A 				DEFB 00AH		      ; ROUTINE
1EA1			  ; THE "RUN" COMMAND ROUTINE
1EA1			  ; THE PARAMETER OF THE RUN COMMAND IS PASSED TO NEWPPC BY CALLING THE GO_TO
1EA1			  ; COMMAND ROUTINE. THE OPERATIONS OF RESTORE 0 AND CLEAR 0 ARE THEN PERFORMED
1EA1			  ; BEFOR A RETURN IS MADE
1EA1 CD671E		  RUN:		CALL  GO_TO		      ; SET NEWPPC AS RECUIRED
1EA4 010000				LD    BC,0		      ; NOW PERFORM A RESTORE 0
1EA7 CD451E				CALL  REST_RUN
1EAA 1803				JR    CLEAR_RUN 	      ; EXIT WIA THE CLEAR COMMAND ROUTINE
1EAC			  ; THE "CLEAR" COMMAND ROUTINE
1EAC			  ; THE ROUTINE ALLOUS FOR THE VARIABLES AREA TO BE CLEEARED, THE DISPLAY AREA CLEARED AND
1EAC			  ; RAMTOP MOVED. IN COSECUENSE OF THE LAST OPERATION THE MASHINE STACK IS REBUILT
1EAC			  ;THEREBY HAVING THE AFFECT OF ALSO CLEARING THE GO_SUB STACK
1EAC CD991E		  CLEAR:	CALL  FIND_INV2 	      ; FETCH THE OPERAND - USING ZERO BY DEFAULT
1EAF 78 		  CLEAR_RUN:	LD    A,B		      ; JUMP FORWARD IF THE OPERAND IS
1EB0 B1 				OR    C 		      ; OTHER THEN ZERO. WHEN CALLED
1EB1 2004				JR    NZ,CLEAR_1	      ; FROM RUN THER IS NO JUMP.
1EB3 ED4BB25C				LD    BC,(RAMTOP)	      ; IF ZERO USE THE EXISTING VALUE IN RAMTOP
1EB7			  ;
1EB7 C5 		  CLEAR_1:	PUSH  BC		      ; SAVE THE VALUE.
1EB8 ED5B4B5C				LD    DE,(VARS) 	      ; NEXT RECLAIM ALL THE BYTES
1EBC 2A595C				LD    HL,(E_LINE)	      ; OF THE PRESENT VARIABLES
1EBF 2B 				DEC   HL		      ; AREA.
1EC0 CDE519				CALL  RECLAIM_1
1EC3 CD6B0D				CALL  CLS		      ; CLEAR THE DISPLAY AREA
1EC6			  ; THE VALUE IN THE BC REGISTER PAIR WHICH WILL BE USED AS RAMTOP IS TESTED TO
1EC6			  ; ENSURE IT IS NEITHER TO LOW NOR TO HIGH.
1EC6 2A655C				LD    HL,(STKEND)	      ; THE CURRENT VALUE OF STKEND
1EC9 113200				LD    DE,00032H 	      ; IS INCREASED BY "50" BEFORE
1ECC 19 				ADD   HL,DE		      ; BEING TESTED. THIS FORMS THE
1ECD D1 				POP   DE		      ; LOWER LIMIT.
1ECE ED52				SBC   HL,DE
1ED0 3008				JR    NC,REPORT_M	      ; RAMTOP WILL BE TO LOW
1ED2 2AB45C				LD    HL,(P_RAMT)	      ; FOR THE UPPER TEST THE VALUE
1ED5 A7 				AND   A 		      ; FOR RAMTOP IS TESTED AGANST
1ED6 ED52				SBC   HL,DE		      ; P_RAMT.
1ED8 3002				JR    NC,CLEAR_3	      ; JUMP FORWARD IF ACCEPTABLE.
1EDA			  ;
1EDA			  ; REPORT_M - RAMTOP NO GOOD
1EDA CF 		  REPORT_M:	RST   ERROR_1		      ; CALL THE ERROR HANDLING
1EDB 15 				DEFB 015H		      ; ROUTINE
1EDC			  ;
1EDC			  ; CONTINUE WITH THE CLEAR OPERATION
1EDC EB 		  CLEAR_3:	EX    DE,HL		      ; NOW THE VALUE CAN ACTUALLY BE
1EDD 22B25C				LD    (RAMTOP),HL	      ; PASSED TO RAMTOP.
1EE0 D1 				POP   DE		      ; FETCH THE ADDRESS - STMT_RET
1EE1 C1 				POP   BC		      ; FETCH THE "ERROR ADDRESS"
1EE2 363E				LD    (HL),03EH 	      ; ENTER A GO_SUB STACK END MARKER
1EE4 2B 				DEC   HL		      ; LEAVE ONE LOCATION
1EE5 F9 				LD    SP,HL		      ; MAKE THE STACK POINTER POINTS
1EE6 C5 				PUSH  BC		      ; TO AN AMPTY GO_SUB STACK.
1EE7 ED733D5C				LD    (ERR_SP),SP	      ; NEXT PASS THE "ERROR ADDRESS"
1EEB					;			      ; TO THE STACK AND SAVE ITS
1EEB					;			      ; ADDRESS IN ERR_SP
1EEB EB 				EX    DE,HL		      ; AN INDIRECT RETURN IS NOW
1EEC E9 				JP    (HL)		      ; MADE TO STMT_RET
1EED			  ;
1EED			  ; NOTE: WHEN THE ROUTINE IS CALLED FROM RUN THE VALUES OF NEWPPC&NSPPC WILL HAVE
1EED			  ; BEEN AFFECTED AND NO STATMENTS COMING AFTER RUN CAN EVER BE FOUND BEFORE JUMP
1EED			  ; IS TAKEN
1EED			  ;
1EED			  ; THE "GO_SUB" COMMAND ROUTINE
1EED			  ; THE PRESENT VALUE OF PPC AND THE INCREMENTED VALUE OF SUBPPC ARA STORED ON
1EED			  ; THE GO_SUB STACK
1EED D1 		  GO_SUB:	POP   DE		      ; SAVE THE ADDRESS - STMT_RET
1EEE FD660D				LD    H,(IY+SUBPPC-YBASE)     ; FETCH THE STATEMENT NUMBER
1EF1 24 				INC   H 		      ; AND INCREMENT IT
1EF2 E3 				EX    (SP),HL		      ; EXCHANGE THE "ERROR ADDRESS"
1EF3					;			      ; WITH THE STATEMENT NUMBER
1EF3 33 				INC   SP		      ; RECLAIM THE USE OF A LOCATION
1EF4 ED4B455C				LD    BC,(PPC)		      ; NEXT SAVE THE PRESENT LINE
1EF8 C5 				PUSH  BC		      ; NUMBER.
1EF9 E5 				PUSH  HL		      ; RETURN THE "ERROR ADDRESS"
1EFA ED733D5C				LD    (ERR_SP),SP	      ; TO THE MASHINE STACK AND
1EFE					;			      ; RESET ERR_SP TO POINT IT.
1EFE D5 				PUSH  DE		      ; RETURN THE ADDRESS - STMT_RET
1EFF CD671E				CALL  GO_TO		      ; NOW SET NEWPPC & NSPPC TO THE REQUIRED VALUES.
1F02 011400				LD    BC,00014H 	      ; BUT BEFORE MAKING THE JUMP MAKE TEST FOR ROOM
1F05			  ;
1F05			  ; THE "TEST_ROOM" SUBROUTINE
1F05			  ; A SERIES OF TESTS IS PERFORMED TO ENSURE THAT THERE IS SUFFICIENT FREE MEMORY
1F05			  ; AVAILABLE FOR THE TASK BEING UNDERTAKEN.
1F05 2A655C		  TEST_ROOM:	LD    HL,(STKEND)	      ; INCREASE THE VALUE TAKEN FROM
1F08 09 				ADD   HL,BC		      ; STKEND BY THE VALUE CARRIED
1F09					;			      ; INTO THE ROUTINE BY THE BC REGISTER PAIR
1F09 380A				JR    C,REPORT_4	      ; JUM FORWARD IF THE RESULT IS OVER FFFF
1F0B EB 				EX    DE,HL		      ; TRY IT AGAIN ALLOWING FOR A
1F0C 215000				LD    HL,50H		      ; FURTHER EIGHTY BYTES
1F0F 19 				ADD   HL,DE
1F10 3803				JR    C,REPORT_4
1F12 ED72				SBC   HL,SP		      ; FINALLY TEST THE VALUE AGAINST THE
1F14					;			      ; ADDRESS OF THE MASHINE STACK.
1F14 D8 				RET   C 		      ; RETURN IF SATISFACTORY
1F15			  ;
1F15			  ; REPORT_4 - OUT OF MEMORY
1F15 2E03		  REPORT_4:	LD    L,3		      ; THIS IS A "RUN_TIME" ERROR AND THE
1F17 C35500				JP    ERROR_3		      ; ERROR MARKER IS NOT TO BE USED
1F1A			  ;
1F1A			  ; THE "FREE_MEMORY" SUBROUTINE
1F1A			  ; THERE IS NO BASIC COMMAND "FREE" IN THE SPECTRUM BUT THERE IS A SUBROUTINE
1F1A			  ; FOR PERFORMING SUCH TASK.
1F1A			  ;   - AN ESTIMATE OF THE AMOUNT OF FREE SPACE CAN BE FOUND AT ANY TIME BY USING:
1F1A			  ;	  PRINT 65536-USR 7962
1F1A 010000				LD    BC,0		      ; DO NOT ALLOW ANY OVERHEAD.
1F1D CD051F				CALL  TEST_ROOM 	      ; MAKE THE TEST AND TEST THE PASS THE
1F20 44 				LD    B,H		      ; RESULT TO THE BC REGISTER
1F21 4D 				LD    C,L		      ; BEFORE RETURNING
1F22 C9 				RET
1F23			  ;
1F23			  ; THE "RETURN" COMMAND ROUTINE
1F23			  ; THE LINE NUMBER AND THE STATEMENT NUMBER THET ARE TO BE MADE THE OBJECT OF A
1F23			  ; RETURN ARE FETCED FROM THE GO_SUB STACK
1F23 C1 		  RETURN:	POP   BC		      ; FETCH THE ADDRESS STMT_RET
1F24 E1 				POP   HL		      ; FETCH THE "ERROR ADDRESS"
1F25 D1 				POP   DE		      ; FETCH THE LAST ENTRY ON THE GO_SUB STACK
1F26 7A 				LD    A,D		      ; THE ENTRY IS TESTED TO SEE
1F27 FE3E				CP    03EH		      ; IF IT IS THE GO_SUB STACK END
1F29 280B				JR    Z,REPORT_7	      ; MARKER: JUMP IF IT IS
1F2B 3B 				DEC   SP		      ; THE FULL ENTRY USES THREE LOCATIONS ONLY
1F2C E3 				EX    (SP),HL		      ; EXCHANGE THE STATEMENT NUMBER
1F2D					;			      ; WITH THE "ERROR ADDRESS"
1F2D EB 				EX    DE,HL		      ; MOVE THE STATEMENT NUMBER
1F2E ED733D5C				LD    (ERR_SP),SP	      ; RESET THE ERROR POINTER
1F32 C5 				PUSH  BC		      ; REPLASE THE ADDRESS - STMT_RET
1F33 C3731E				JP    GO_TO_2		      ; JUMP BACK TO CHANGE NEWPPC & NSPPC
1F36			  ;
1F36			  ; REPORT_7 - RETURN WITHOUT GO_SUB
1F36 D5 		  REPORT_7:	PUSH  DE		      ; REPLACE THE END MARKER AND
1F37 E5 				PUSH  HL		      ; THE "ERROR ADDRESS"
1F38 CF 				RST   ERROR_1		      ; CALL THE ERROR HANDLING
1F39 06 				DEFB  6 		      ; ROUTINE
1F3A			  ;
1F3A			  ; THE "PAUSE" COMMAND ROUTINE
1F3A			  ; THE PERIOD OF THE PAUSE IS DETERMENED BY COUNTING THE NUMBER OF MASKABLE
1F3A			  ; INTERRUPTS AS THE OCUR EVERY 1/50 TH. OF A SECOND.
1F3A			  ;    A PAUSE IS FINISHED EITHER AFTER THE APPROPRIATE NUMBER OF INTERRRUPTS
1F3A			  ; OR BY THE SYSTEM VARIABLE FLAGS INDICATING THET A KEY HAS BEEN PRESSED.
1F3A CD991E		  PAUSE:	CALL  FIND_INT2 	      ; FETCH THE OPERAND
1F3D 76 		  PAUSE_1:	HALT			      ; WAIT FOR A MASKABLE INTERRUPT
1F3E 0B 				DEC   BC		      ; DECREASE THE COUNTER
1F3F 78 				LD    A,B		      ; IF THE COUNTER IS THEREBY
1F40 B1 				OR    C 		      ; REDUCED TO ZERO THE PAUSE
1F41 280C				JR    Z,PAUSE_END	      ; HAS COME TO AN END
1F43 78 				LD    A,B		      ; IF THE OPERAND WAS ZERO BC
1F44 A1 				AND   C 		      ; WILL NOW HOLD FFFF AND THIS
1F45 3C 				INC   A 		      ; VALUE WILL BE RETURNED TO
1F46 2001				JR    NZ,PAUSE_2	      ; ZERO. JUMP WILL ALL OTHER
1F48 03 				INC   BC		      ; OPERAND VALUES.
1F49 FDCB016E		  PAUSE_2:	BIT   NO_KEY,(IY+FLAGS-YBASE) ; JUMP BACK UNLESS A KEY HAS
1F4D 28EE				JR    Z,PAUSE_1 	      ; BEEN PRESSED
1F4F			  ;
1F4F			  ; THE PERIOD OF THE PAUSE HAS NOW FINISHED.
1F4F FDCB01AE		  PAUSE_END:	RES   NO_KEY,(IY+FLAGS-YBASE) ; SIGNAL "NO KEY PRESSED"
1F53 C9 				RET			      ; NOW RETURN; - TO STMT_RET
1F54			  ;
1F54			  ; THE "BREAK_KEY" SUBROUTINE
1F54			  ; THIS SUBROUTINE IS CALLED IN SEVERAL INSTANCES TO READ THE BREAK KEY. THE
1F54			  ; CARRY FLAG IS RETURNED RESET ONLY IF THE SHIFT AND THE BREAK KEY ARE BOTH
1F54			  ; BEING PRESSED.
1F54 3E7F		  BREAK_KEY:	LD    A,07FH		      ; FORM THE PORT ADDRESS
1F56 DBFE				IN    A,(CSP2)		      ; 7FFE AND READ IN A BYTE
1F58 1F 				RRA			      ; EXAMINE ONLY BIT 0 BY SHIFTING
1F59					;			      ; IT INTO THE CARRY POSITION
1F59 D8 				RET   C 		      ; RETURN IF THE BREAK KEY IS
1F5A					;			      ; NOT BEING PRESSED
1F5A 3EFE				LD    A,0FEH		      ; FORM THE PORT ADDRESS
1F5C DBFE				IN    A,(CSP2)		      ; FEFE AND READ IN A BYTE
1F5E 1F 				RRA			      ; AGAIN EXAMINE BIT 0
1F5F C9 				RET			      ; RETURN WITH CARRY RESET IF
1F60					;			      ; BOTH KEYS ARE BEING PRESSED.
1F60			  ;
1F60			  ; THE "DEF_FN" COMMAND ROUTINE
1F60			  ; DURING SINTAX CHEKING A DEF_FN STATEMENT IS CHECKED TO ENSURE THAT IT HAS THE
1F60			  ; CORRECT FORM. SPACE IS ALSO MADE AVAILABLE FOR THE RESULT OF AVALUATING THE
1F60			  ; FUNCTION.
1F60			  ;   BUT IN "RUN_TIME" A DEF_FN STATEMENT IS PASSED BY.
1F60 CD3025		  DEF_FN:	CALL  SYNTAX_Z		      ; JUMP FORWARD IF CHECKING
1F63 2805				JR    Z,DEF_FN_1	      ; SYNTAX
1F65 3ECE				LD    A,0CEH		      ; OTHERWISE PASS_BY THE
1F67 C3391E				JP    PASS_BY		      ; DEF_FN STATEMENT
1F6A			  ; FIRST COSIDER THE VARIABLE OF THE FUNCTION
1F6A FDCB01F6		  DEF_FN_1:	SET   NUM_VAR,(IY+FLAGS-YBASE) ; SIGNAL "A NUMERIC VARIABLE"
1F6E CD8D2C				CALL  ALPHA		      ; CHECK THAT THE PRESENT CODE IS A LETTER
1F71 3016				JR    NC,DEF_FN_4	      ; JUMP FORWARD IF NOT
1F73 E7 				RST   GET_NBT		      ; FETCH THE NEXT CHARACTER
1F74 FE24				CP    '$'		      ; JUMP FORWARD UNLESS IT IS
1F76 2005				JR    NZ,DEF_FN_2	      ; A "$"
1F78 FDCB01B6				RES   NUM_VAR,(IY+FLAGS-YBASE) ; CHANGE BIT 6 AS IT IS A STRING VARIABLE
1F7C E7 				RST   GET_NBT		      ; FETCH THE NEXT CHARACTER
1F7D FE28		  DEF_FN_2:	CP    '('		      ; A "(" MUST FOLLOW THE
1F7F 203C				JR    NZ,DEF_FN_7	      ; VARIABLES NAME
1F81 E7 				RST   GET_NBT		      ; FETCH THE NEXT CHARACTER
1F82 FE29				CP    ')'		      ; JUMP FORWARD IF IT IS A ")" AS THERE ARE NO
1F84 2820				JR    Z,DEF_FN_6	      ; PARAMETERS OF THE FUNCTION
1F86			  ; A LOOP IS NOW ENTERED TO DEAL WITH EACH PARAMETER IN TURN.
1F86 CD8D2C		  DEF_FN_3:	CALL  ALPHA		      ; THE PRESENT CODE MUST BE
1F89 D28A1C		  DEF_FN_4:	JP    NC,REPORT_C	      ; A LETTER
1F8C EB 				EX    DE,HL		      ; SAVE THE POINTER IN DE
1F8D E7 				RST   GET_NBT		      ; FETCH THE NEXT CHARACTER
1F8E FE24				CP    '$'		      ; JUMP FORWARD UNLESS IT IS A
1F90 2002				JR    NZ,DEF_FN_5	      ; "$"
1F92 EB 				EX    DE,HL		      ; OTHERWISE SAVE THE NEW POINTER IN DE INSTEAD.
1F93 E7 				RST   GET_NBT		      ; FETCH THE NEXT CHARACTER
1F94 EB 		  DEF_FN_5:	EX    DE,HL		      ; MOVE THE POINTER TO THE LAST CHARACTER OF THE
1F95					;			      ; NAME TO THE HL REGISTER PAIR.
1F95 010600				LD    BC,6		      ; NOW MAKE SIX LOCATIONS AFTER
1F98 CD5516				CALL  MAKE_ROOM 	      ; THAT LAST CHARACTER AND
1F9B 23 				INC   HL		      ; ENTER A "NUMBER MARKER" INTO
1F9C 23 				INC   HL		      ; THE FIRST OF THE NEW
1F9D 360E				LD    (HL),0EH		      ; LOCATIONS
1F9F FE2C				CP    ','		      ; IF THE PRESENT CHARACTER IS
1FA1 2003				JR    NZ,DEF_FN_6	      ; A ","  THEN JUMP BACK AS
1FA3 E7 				RST   GET_NBT		      ; THERE SHOULD BE A FURTHER
1FA4 18E0				JR    DEF_FN_3		      ; PARAMETER; OTHERWISE JUMP OUT OF THE LOOP
1FA6			  ; NEXT THE DEFINITION OF THE FUNCTION IS CONSIDERED
1FA6 FE29		  DEF_FN_6:	CP    ')'		      ; CHECK THAT THE ")" DOES
1FA8 2013				JR    NZ,DEF_FN_7	      ; EXIST
1FAA E7 				RST   GET_NBT		      ; FETCH THE NEXT CHARACTER
1FAB FE3D				CP    '='		      ; IT MUST BE AN "=".
1FAD 200E				JR    NZ,DEF_FN_7
1FAF E7 				RST   GET_NBT		      ; FETCH THE NEXT CHARACTER
1FB0 3A3B5C				LD    A,(FLAGS) 	      ; SAVE THE NATURE - NUMERIC OR
1FB3 F5 				PUSH  AF		      ; STRING - OF THE VARIABLE
1FB4 CDFB24				CALL  SCANNING		      ; NOW CONSIDER THE DEFINITION
1FB7					;			      ; AS AN EXPRESION
1FB7 F1 				POP   AF		      ; FETCH THE NATURE OF THE
1FB8 FDAE01				XOR   (IY+FLAGS-YBASE)	      ; VARIABLE AND CHECK THAT IT
1FBB E640				AND   040H		      ; IS ON THE#SAME TYPE AS FOUND FOR THE
1FBD					;			      ; DEFINITION
1FBD C28A1C		  DEF_FN_7:	JP    NZ,REPORT_C	      ; GIVE AN ERROR REPORT IF IT IS REQUIRED
1FC0 CDEE1B				CALL  CHECK_END 	      ; EXIT VIA THE CHECK_END SUBROUTINE. (THEREBY
1FC3					;			      ; MOVING ON TO CONSIDER THE NEXT STATEMENT
1FC3					;			      ; IN THE LINE).
1FC3			  ;
1FC3			  ; THE "UNSTACK_Z" SUBROUTINE
1FC3			  ; THIS SUBROUTINE IS CALLED IN SEVERAL INSTACES IN ORDER TO "RETURN EARLY"
1FC3			  ; FROM A SUBROUTINE WHEN CHECKING SYNTAX. THE REASON FOR THIS IS TO AVOID
1FC3			  ; ACTUALY PRINTING CHARACTERS OR PASSING VALUES TO/FROM THE CALCULATOR STACK.
1FC3 CD3025		  UNSTACK_Z:	CALL  SYNTAX_Z		      ; IS SYNTAX BEING CHECKED ?
1FC6 E1 				POP   HL		      ; FETCH THE RETURN ADDRESS BUT
1FC7 C8 				RET   Z 		      ; IGNORE IT IN "SYNTAX TIME".
1FC8 E9 				JP    (HL)		      ; IN "RUN TIME" MAKE A SIMPLE RETURN
1FC9					;			      ; TO THE CALLING ROUTINE
1FC9			  ;
1FC9			  ; THE "LPRINT" & "PRINT" COMMAND ROUTINE
1FC9			  ; THE APPROPRIATE CHANNEL IS OPENED AS NECESSARY AND THE ITEMS TO BE PRINTED
1FC9			  ; ARE CONSIDERED IN TURN
1FC9 3E03		  LPRINT:	LD    A,3		      ; PREPARE TO OPEN CHANNEL "P"
1FCB 1802				JR    PRINT_1		      ; JUMP FORWARD
1FCD 3E02		  PRINT:	LD    A,2		      ; PREPARE TO OPEN CHANNEL "S"
1FCF CD3025		  PRINT_1:	CALL  SYNTAX_Z		      ; UNLESS SYNTAX IS BEING
1FD2 C40116				CALL  NZ,CHAN_OPEN	      ; CHECKED OPEN A CHANNEL
1FD5 CD4D0D				CALL  TEMPS		      ; SET THE TEMPORARY COLUOR SYSTEM VARIABLE
1FD8 CDDF1F				CALL  PRINT_2		      ; CALL THE PRINT CONTROLLING SUBROUTINE
1FDB CDEE1B				CALL  CHECK_END 	      ; MOVE ON TO CONSIDER THE NEXT STATEMENT VIA
1FDE C9 				RET			      ; CHECK_END IF CHECKING SYNTAX.
1FDF			  ; THE PRINT CONTROLLING SUBROUTINE IS CALLED BY THE PRINT, LPRINT, AND INPUT
1FDF			  ; COMMAND ROUTINES.
1FDF DF 		  PRINT_2:	RST   GET_BT		      ; GET THE FIRST CHARACTER
1FE0 CD4520				CALL  PR_END_Z		      ; JUMP FORWARD IF ALREADY AT THE
1FE3 280D				JR    Z,PRINT_4 	      ; END OF THE ITEM LIST
1FE5			  ; NOW ENTER A LOOP TO DEAL WITH THE "POSITION CONTROLLER" AND THE PRINT ITEM
1FE5 CD4E20		  PRINT_3:	CALL  PR_POSN_1 	      ; DEAL WITH ANY CONSECUTIVE
1FE8 28FB				JR    Z,PRINT_3 	      ; POSITION CONTROLLERS.
1FEA CDFC1F				CALL  PR_ITEM_1 	      ; DEAL WITH A SINGLE PRINT ITEM
1FED CD4E20				CALL  PR_POSN_1 	      ; CHECK FOR FURTHER POSITION CONTROLLERS AND
1FF0 28F3				JR    Z,PRINT_3 	      ; PRINT ITEMS UNTIL THERE ARE NONE LEFT
1FF2 FE29		  PRINT_4:	CP    ')'		      ; RETURN NOW IF THE PRESENT
1FF4 C8 				RET   Z 		      ; CHARACTER IS A ")"; OTHERWISE CONSIDER
1FF5					;			      ; PERFORMING A "CARRIAGE RETURN"
1FF5			  ;
1FF5			  ; THE "PRINT A CARRIAGE RETURN" SUBROUTINE
1FF5 CDC31F		  PRINT_CR:	CALL  UNSTACK_Z 	      ; RETURN IF CHECKING SYNTAX
1FF8 3E0D				LD    A,CR		      ; PRINT A CARRIAGE RETURN
1FFA D7 				RST   WR_SCRN		      ; CHARACTER AND THEN RETURN
1FFB C9 				RET
1FFC			  ;
1FFC			  ; THE "PRINT ITEMS" SUBROUTINE
1FFC			  ; THIS SUBROUTINE IS CALLED FROM THE PRINT, LPRINT AND INPUT COMMAND ROUTINES
1FFC			  ;   THE VARIOUS TYPES OF PRINT ITEM ARE IDENTIFIED AND PRINTED
1FFC DF 		  PR_ITEM_1:	RST   GET_BT		      ; THE FIRST CHARACTER IS FETCHED
1FFD FEAC				CP    0ACH		      ; JUMP FORWARD UNLESS IT IS
1FFF 200D				JR    NZ,PR_ITEM_2	      ; AN "AT"
2001			  ; NOW DEAL WITH "AT"
2001 CD791C				CALL  NEXT_2NUM 	      ; THE TWO PARAMETERS ARE TRANSFERED
2004					;			      ; TO THE CALCULATOR STACK
2004 CDC31F				CALL  UNSTACK_Z 	      ; RETURN NOW IF CHECKING SYNTAX
2007 CD0723				CALL  STK_TO_BC 	      ; THE PARAMETERS ARE COMPRESSED INTO THE
200A					;			      ; BC REGISTER PAIR
200A 3E16				LD    A,16H		      ; THE A REGISTER IS LOADED WITH THE "AT"
200C 1810				JR    PR_AT_TAB 	      ; CONTROL CHARACTER BEFORE THE JUMP IS TAKEN
200E			  ; NOW LOOK FOR A "TAB"
200E FEAD		  PR_ITEM_2:	CP    0ADH		      ; JUMP FORWARD UNLESS IT IS
2010 2012				JR    NZ,PR_ITEM_3	      ; A "TAB"
2012			  ; NOW DEAL WITH A "TAB"
2012 E7 				RST   GET_NBT		      ; FETCH THE NEXT CHARACTER
2013 CD821C				CALL  EXPT_1NUM 	      ; TRANSFER ONE PARAMETER TO THE CALCULATOR STACK
2016 CDC31F				CALL  UNSTACK_Z 	      ; RETURN NOW IF CHEKING SYNTAX
2019 CD991E				CALL  FIND_INT2 	      ; THE VALUE IS COMPRESSED INTO THE BC REGISTER
201C 3E17				LD    A,17H		      ; THE A REGISTER IS LOADED WITH THE
201E					;			      ; "TAB" CONTROL CHARACTER
201E			  ; THE "AT" AND THE "TAB" PRINT ITEMS ARE PRINTED BY MAKING THREE CALLS
201E			  ; TO PRINT_OUT.
201E D7 		  PR_AT_TAB:	RST   WR_SCRN		      ; PRINT THE CONTROL CHARACTER
201F 79 				LD    A,C		      ; FOLLOW IT WITH THE FIRST
2020 D7 				RST   WR_SCRN		      ; VALUE
2021 78 				LD    A,B		      ; FINALY PRINT THE SECOND
2022 D7 				RST   WR_SCRN		      ; VALUE
2023 C9 				RET			      ; THEN RETURN
2024			  ; NEXT CONSIDER EMBEDDED COLOUR ITEMS.
2024 CDF221		  PR_ITEM_3:	CALL  CO_TEMP_3 	      ; RETURN WITH CARRY RESET
2027					;			      ; IF A COLOUR ITEM WAS FOUND
2027 D0 				RET   NC		      ; CONTINUE IF NO WERE FOUND
2028 CD7020				CALL  STR_ALTER 	      ; NEXT CONSIDER IF THE STREAM IS TO BE CHANGED
202B D0 				RET   NC		      ; CONTINUE UNLESS IT WAS ALTERED
202C			  ; THE PRINT ITEM MUST NOW BE AN EXPRESSION, EITHER NUMERIC OR STRING
202C CDFB24				CALL  SCANNING		      ; EVALUATE THE EXPRESSION BUT
202F CDC31F				CALL  UNSTACK_Z 	      ; RETURN NOW IF CHECKING SYNTAX
2032 FDCB0176				BIT   NUM_VAR,(IY+FLAGS-YBASE) ; TEST FOR THE NATURE OF THE EXPRESSION
2036 CCF12B				CALL  Z,STK_FETCH	      ; IF IT IS A STRING THEN FETCH THE
2039					;			      ; NECESSARY PARAMETERS; BUT IF IT IS
2039 C2E32D				JP    NZ,PRINT_FP	      ; NUMERIC THEN EXIT VIA PRINT_FP
203C			  ; A LOOP IS NOW SET UP TO DEAL WITH CHARACTER IN  TURN OF THE STRING
203C 78 		  PR_STRING:	LD    A,B		      ; RETURN NOW IF THERE ARE
203D B1 				OR    C 		      ; NO CHARACTER  REMAINING
203E 0B 				DEC   BC		      ; IN THE STRING; OTHERWISE
203F C8 				RET   Z 		      ; DECREASE THE COUNTER.
2040 1A 				LD    A,(DE)		      ; FETCH THE CODE AND INCREMENT
2041 13 				INC   DE		      ; THE POINTER.
2042 D7 				RST   WR_SCRN		      ; THE CODE IS PRINTED AND A YUMP TAKEN TO
2043 18F7				JR    PR_STRING 	      ; CONSIDER ANY FURTHER CHARACTER
2045			  ;
2045			  ; THE "END OF PRINTING" SUBROUTINE
2045			  ; THE ZERO FLAG WILL BE SET IF NO FURTHER PRINTING IS TO BE DONE.
2045 FE29		  PR_END_Z:	CP    ')'		      ; RETURN NOW IF THE CHARACTER
2047 C8 				RET   Z 		      ; IS A ")"
2048 FE0D		  PR_ST_END:	CP    CR		      ; RETURN NOW IF THE CHARACTER IS
204A C8 				RET   Z 		      ; A "CARRIAGE RETURN"
204B FE3A				CP    ':'		      ; MAKE A FIND TEST AGAINST ":"
204D C9 				RET			      ; BEFORE RETURNING
204E			  ;
204E			  ; THE "PRINT POSITION" SUBROUTINE
204E			  ; THE VARIOUS POSITION CONTROLLING CHARACTERS ARE CONSIDERED BY THE SUBROUTINE.
204E DF 		  PR_POSN_1:	RST   GET_BT		      ; GET THE PRESENT CHARACTER
204F FE3B				CP    ';'		      ; JUMP FORWARD IF IT IS
2051 2814				JR    Z,PR_POSN_3	      ; A ";"
2053 FE2C				CP    ','		      ; ALSO JUMP FORWARD WITH A
2055 200A				JR    NZ,PR_POSN_2	      ; CHARACTER OTHER THEN A ","
2057 CD3025				CALL  SYNTAX_Z		      ; BUT DO NOT ACTULLA PRINT THE
205A 280B				JR    Z,PR_POSN_3	      ; CHARACTER IF CHECKING SYNTAX
205C 3E06				LD    A,6		      ; LOAD THE A REGISTER WITH
205E D7 				RST   WR_SCRN		      ; THE "COMMA" CONTROLL CODE
205F 1806				JR    PR_POSN_3 	      ; AND PRINT IT; THEN JUMP FORWARD
2061 FE27		  PR_POSN_2:	CP  027H		      ; IT IS A "'"?
2063 C0 				RET   NZ		      ; RETURN NOW IF NOT ANY OF THE
2064					;			      ; POSITION CONTROLLERS
2064 CDF51F				CALL  PRINT_CR		      ; PRINT "CARRIAGE RETURN" UNLESS CHECKING SYNTAX
2067 E7 		  PR_POSN_3:	RST   GET_NBT		      ; FETCH THE NEXT CHARACTER
2068 CD4520				CALL  PR_END_Z		      ; IF NOT AT THE END OF A PRINT
206B 2001				JR    NZ,PR_POSN_4	      ; STATEMENT THEN JUMP FORWARD;
206D C1 				POP   BC		      ; OTHERWISE RETURN TO THE
206E BF 		  PR_POSN_4:	CP    A 		      ; CALLING ROUTINE.
206F C9 				RET			      ; THE ZERO FLAG WILL BE RESET IF THE END OF THE
2070					;			      ; PRINT STATEMENT HAS NOT BEEN REACHED.
2070			  ;
2070			  ; THE "ALTER STREAM" SUBROUTINE
2070			  ; THE SUBROUTINE IS CALLED WHENEWER THERE IS THE NEED TO CONSIDER WHETHER THE
2070			  ; USER WISHES TO USE A DIFFERENT STREAM.
2070 FE23		  STR_ALTER:	CP    '#'		      ; UNLESS THE PRESENT CHARACTER
2072 37 				SCF			      ; IS A "#" RETURN WITH THE
2073 C0 				RET   NZ		      ; CARRY FLAG SET.
2074 E7 				RST   GET_NBT		      ; ADVANCE CH_ADD
2075 CD821C				CALL  EXPT_1NUM 	      ; PASS THE PARAMETER TO THE CALCULATOR STACK
2078 A7 				AND   A 		      ; CLEAR THE CARRY FLAG
2079 CDC31F				CALL  UNSTACK_Z 	      ; RETURN NOW IF CHECKING SYNTAX
207C CD941E				CALL  FIND_INT1 	      ; THE VALUE IS PASSED TO THE A REGISTER
207F FE10				CP    10H		      ; GIVE REPORT O IF THE VALUE IS
2081 D20E16				JP    NC,REPORT_O	      ; OVER FF.
2084 CD0116				CALL  CHAN_OPEN 	      ; USE THE CHANNEL FOR THE STREAM IN QUESTION.
2087 A7 				AND   A 		      ; CLEAR THE CARRY FLAG
2088 C9 				RET			      ; AND RETURN
2089			  ;
2089			  ; THE "INPUT" COMMAND ROUTINE
2089			  ; THIS ROUTINE ALLOWS FOR VALUES ENTERED FROM THE KEYBOARD TO BE ASSIGNED TO
2089			  ; VARIABLES. IT IS ALSO POSSIBLE TO HAVE PRINT ITEMS EMBEDDET IN THE INPUT
2089			  ; STATEMENT AND THESE ITEMS ARE PRINTED IN THE LOWER PART OF THE DISPLAY.
2089 CD3025		  INPUT:	CALL  SYNTAX_Z		      ; JUMP FORWARD IF SYNTAX IS
208C 2808				JR    Z,INPUT_1 	      ; BEING CHECKED
208E 3E01				LD    A,1		      ; OPEN CHANNEL "K"
2090 CD0116				CALL  CHAN_OPEN
2093 CD6E0D				CALL  CLS_LOWER 	      ; THE LOWER PART OF THE DISPLAY IS CLEARED
2096 FD360201		  INPUT_1:	LD    (IY+TV_FLAG-YBASE),1    ; SET LOWER PART TO BE ONLY 1 LINE IN SIZE
209A CDC120				CALL  IN_ITEM_1 	      ; CALL THE SUBROUTINE TO DEAL WITH THE
209D					;			      ; INPUT ITEM
209D CDEE1B				CALL  CHECK_END 	      ; MOVE ON TO THE NEXT STATEMENT IF
20A0					;			      ; CHECKING SYNTAX
20A0 ED4B885C				LD    BC,(S_POSN)	      ; FETCH THE CURRENT PRINT POSITION
20A4 3A6B5C				LD    A,(DF_SZ) 	      ; JUMP FORWARD IF THE CURRENT
20A7 B8 				CP    B 		      ; POSITION IS ABOVE THE LOWER
20A8 3803				JR    C,INPUT_2 	      ; SCREEN.
20AA 0E21				LD    C,21H		      ; OTHERWISE SET THE PRINT POSITION
20AC 47 				LD    B,A		      ; TO THE TOP OF THE LOWER SCREEN.
20AD ED43885C		  INPUT_2:	LD    (S_POSN),BC	      ; RESET S_POSN
20B1 3E19				LD    A,19H		      ; NOW SET THE SCROLL COUNTER
20B3 90 				SUB   B
20B4 328C5C				LD    (SCR_CT),A
20B7 FDCB0286				RES   SCRN_L,(IY+TV_FLAG-YBASE) ; SIGNAL "MAIN SCREEN"
20BB CDD90D				CALL  CL_SET		      ; SET THE SCREEN VARIABLES
20BE C36E0D				JP    CLS_LOWER 	      ; AND EXIT VIA CLS_LOWER
20C1			  ;
20C1			  ; THE INPUT ITEMS AND EMBEDDED PRINT IEMS ARE DEALT WITH IN TURN BY THE
20C1			  ; FOLLOWING LOOP.
20C1 CD4E20		  IN_ITEM_1:	CALL  PR_POSN_1 	      ; CONSIDER FIRST ANY POSITION
20C4 28FB				JR    Z,IN_ITEM_1	      ; CONTROL CHARACTER.
20C6 FE28				CP    '('		      ; JUMP FORWARD IF THE PRESENT
20C8 200E				JR    NZ,IN_ITEM_2	      ; CHARACTER IS NOT A "("
20CA E7 				RST   GET_NBT		      ; FETCH THE NEXT CHARACTER
20CB CDDF1F				CALL  PRINT_2		      ; NOW CALL THE PRINT COMMAND ROUTINE TO HANDLE
20CE					;			      ; THE ITEMS INSIDE THE BRACKETS.
20CE DF 				RST   GET_BT		      ; FETCH THE PRESENT CHARACTER
20CF FE29				CP    ')'		      ; GIVE REPORT C UNLESS THE
20D1 C28A1C				JP    NZ,REPORT_C	      ; CHARACTER IS A ")"
20D4 E7 				RST   GET_NBT		      ; FETCH THE NEXT CHARACTER AND
20D5 C3B221				JP    IN_NEXT_2 	      ; JUMP FORWARD TO SEE IF THERE ARE
20D8					;			      ; ANY FURTHERE INPUT ITEMS
20D8			  ; NOW CONSIDER WHETHER INPUT LINE IS BEING USED.
20D8 FECA		  IN_ITEM_2:	CP    0CAH		      ; JUMP FORWARD IF IT IS NOT
20DA 2011				JR    NZ,IN_ITEM_3	      ; "LINE"
20DC E7 				RST   GET_NBT		      ; ADVANCE CH_ADD
20DD CD1F1C				CALL  CLASS_01		      ; DETERMINATE THE DESTINATION ADDRESS
20E0					;			      + FOR THE VARIABLE
20E0 FDCB37FE				SET   INP_LINE,(IY+FLAGX-YBASE) ; SIGNAL "USING INPUT LINE"
20E4 FDCB0176				BIT   NUM_VAR,(IY+FLAGS-YBASE) ; GIVE REPORT C UNLESS USING
20E8 C28A1C				JP    NZ,REPORT_C	      ; A STRING VARIABLE
20EB 180D				JR    IN_PROMPT 	      ; JUMP FORWARD TO ISSUE THE PROMPT MESSAGE
20ED			  ; PROCEED TO HANDLE SIMPLE INPUT VARIABLES.
20ED CD8D2C		  IN_ITEM_3:	CALL  ALPHA		      ; JUMP TO CONSIDER GOING ROUND
20F0 D2AF21				JP    NC,IN_NEXT_1	      ; THE LOOP AGAIN IF PRESENT CHARACTER IS NOT
20F3					;			      ; A LETTER
20F3 CD1F1C				CALL  CLASS_01		      ; DETERMINE THE DESTINATION ADDRESS
20F6					;			      ; FOR THE VARIABLE
20F6 FDCB37BE				RES   INP_LINE,(IY+FLAGX-YBASE) ; SIGNAL "NOT INPUT LINE"
20FA			  ; THE PROMPT MESSAGE IS NOW BUILT UP IN THE WORK SPACE.
20FA CD3025		  IN_PROMPT:	CALL  SYNTAX_Z		      ; JUMP FORWARD IF ONLY CHECKING
20FD CAB221				JP    Z,IN_NEXT_2	      ; SYNTAX
2100 CDBF16				CALL  SET_WORK		      ; THE WORK SPACE IS SET TO NULL
2103 21715C				LD    HL,FLAGX
2106 CBB6				RES   6,(HL)		      ; SIGNAL "STRING RESULT"
2108 CBEE				SET   5,(HL)		      ; SIGNAL "INPUT MODE"
210A 010100				LD    BC,1		      ; ALLOW THE PROMPT MESSAGE ONLY A SINGLE LOCATION
210D CB7E				BIT   7,(HL)		      ; JUMP FORWARD IF USING "LINE"
210F 200B				JR    NZ,IN_PR_2
2111 3A3B5C				LD    A,(FLAGS) 	      ; JUMP FORWARD IF AWAITING
2114 E640				AND   040H		      ; A NUMERIC ENTRY.
2116 2002				JR    NZ,IN_PR_1
2118 0E03				LD    C,3		      ; A STRING ENTRY WILL NEED THREE LOCATIONS.
211A B6 		  IN_PR_1:	OR    (HL)		      ; BIT 6 OF FLAGX WILL BECOME
211B 77 				LD    (HL),A		      ; SET FOR A NUMERIC ENTRY
211C F7 		  IN_PR_2:	RST   BC_SPACES 	      ; THE REQUIRED NUMBER OF LOCATIONS
211D					;			      ; IS MADE AVAILABLE.
211D 360D				LD    (HL),00DH 	      ; A "CARRIAGE RETURN" GOES INTO THE LAST LOCATION
211F 79 				LD    A,C		      ; TEST BIT 6 OF THE C REGISTER
2120 0F 				RRCA			      ; AND JUMP FORWARD IF ONLY
2121 0F 				RRCA			      ; ONE LOCATION WAS REQUIRED
2122 3005				JR    NC,IN_PR_3
2124 3E22				LD    A,22H		      ; A "DOUBLE QUOTES" CHARACTER
2126 12 				LD    (DE),A		      ; GOES INTO THE FIRST AND
2127 2B 				DEC   HL		      ; SECOND LOCATIONS.
2128 77 				LD    (HL),A
2129 225B5C		  IN_PR_3:	LD    (K_CUR),HL	      ; THE POSITION OF THE CURSOR
212C					;			      ; CAN NOW BE SAVED
212C			  ; IN THE CASE OF INPUT LINE THE EDITOR CAN BE CALLED WITHOUT FURTHER
212C			  ; PREPARATION BUT FOR OTHER TYPES OF INPUT THE ERROR STACK HAS TO BE CHANGED
212C			  ; SO AS TO TRAP ERRORS.
212C FDCB377E				BIT   INP_LINE,(IY+FLAGX-YBASE) ; JUMP FORWARD WIT "INPUT LINE"
2130 202C				JR    NZ,IN_VAR_3
2132 2A5D5C				LD    HL,(CH_ADD)	      ; SAVE THE CURRENT VALUES OF
2135 E5 				PUSH  HL		      ; CH_ADD & ERR_SP ON THE
2136 2A3D5C				LD    HL,(ERR_SP)	      ; MACHINE STACK.
2139 E5 				PUSH  HL
213A 213A21		  IN_VAR_1:	LD    HL,$		      ; THIS WILL BE THE "RETURN POINT"
213D E5 				PUSH  HL		      ; IN CASE OF ERRORS
213E FDCB3066				BIT   CHNL_K,(IY+FLAGS2-YBASE) ; ONLY CHANGE THE ERROR
2142 2804				JR    Z,IN_VAR_2	      ; STACK POINTER IF USING CHANNEL "K"
2144 ED733D5C				LD    (ERR_SP),SP
2148 2A615C		  IN_VAR_2:	LD    HL,(WORKSP)	      ; SET HL TO THE START OF THE
214B CDA711				CALL  REMOVE_FP 	      ; INPUT LINE AND REMOVE ANY FLOATING-POINT FORMS.
214E					;			      ; (THERE WILL NOT BE ANY EXCEPT PERHAPS
214E					;			      ; AFTER AN ERROR).
214E FD3600FF				LD    (IY+ERR_NR-YBASE),-1    ; SIGNAL "NO ERROR YET"
2152 CD2C0F				CALL  EDITOR		      ; NOW GET THE INPUT AND WITH
2155 FDCB01BE				RES   LIN_EXEC,(IY+FLAGS-YBASE) ; THE SYNTAX/RUN FLAG INDICATING
2159 CDB921				CALL  IN_ASSING 	      ; SYNTAX, CHECK THE INPUT FOR ERRORS; JUMP IF IN
215C 1803				JR    IN_VAR_4		      ; ORDER; RETURN TO IN_VAR_1 IF NOT.
215E CD2C0F		  IN_VAR_3:	CALL  EDITOR		      ; GET A "LINE"
2161			  ; ALL THE SYSTEM VARIABLES HAVE TO BE RESET BEFORE THE ACTUAL ASSIGNMENT OF A
2161			  ; VALUE CAN BE MADE.
2161 FD362200		  IN_VAR_4:	LD    (IY+K_CUR+1-YBASE),0    ; THE CURSOR ADDRESS IS RESET
2165 CDD621				CALL  IN_CHAN_K 	      ; THE JUMP IS TAKEN IF USING
2168 200A				JR    NZ,IN_VAR_5	      ; OTHER THEN CHANNEL "K"
216A CD1D11				CALL  ED_COPY		      ; THE INPUT LINE IS COPIED TO
216D ED4B825C				LD    BC,(ECHO_E)	      ; THE DISPLAY AND THE POSITION
2171 CDD90D				CALL  CL_SET		      ; IN ECHO_E MADE THE CURRENT POSITION
2174					;			      ; IN THE LOWER SCREEN.
2174 21715C		  IN_VAR_5:	LD    HL,FLAGX
2177 CBAE				RES   5,(HL)		      ; SIGNAL "EDIT MODE"
2179 CB7E				BIT   7,(HL)		      ; JUMP FORWARD IF HANDLING AN
217B CBBE				RES   7,(HL)		      ; INPUT LINE
217D 201C				JR    NZ,IN_VAR_6
217F E1 				POP   HL		      ; DROP THE ADDRESS IN_VAR_1
2180 E1 				POP   HL		      ; RESET THE ERR_SP TO ITS
2181 223D5C				LD    (ERR_SP),HL	      ; ORIGINAL ADDRESS
2184 E1 				POP   HL		      ; SAVE THE ORIGINAL CH_ADD
2185 225F5C				LD    (X_PTR),HL	      ; ADDRESS IN X_PTR
2188 FDCB01FE				SET   LIN_EXEC,(IY+FLAGS-YBASE) ; NOW WITH THE SYNTAX/RUN FLAG
218C CDB921				CALL  IN_ASSING 	      ; INDICATING "RUN" MAKE THE ASSIGNEMENT.
218F 2A5F5C				LD    HL,(X_PTR)	      ; RESTORE THE ORIGINAL ADDRESS
2192 FD362600				LD    (IY+X_PTR+1-YBASE),0    ; TO CH_ADD AND CLEAR X_PTR.
2196 225D5C				LD    (CH_ADD),HL
2199 1817				JR    IN_NEXT_2 	      ; JUMP FORWARD TO SEE IF THERE ARE FURTHER
219B					;			      ; INPUT ITEMS.
219B 2A635C		  IN_VAR_6:	LD    HL,(STKBOT)	      ; THE LENGTH OF THE "LINE" IN
219E ED5B615C				LD    DE,(WORKSP)	      ; THE WORK SPACE IS FOUND.
21A2 37 				SCF
21A3 ED52				SBC   HL,DE
21A5 44 				LD    B,H		      ; DE POINTS TO THE START AND
21A6 4D 				LD    C,L		      ; BC HOLDS THE LENGTH.
21A7 CDB22A				CALL  STK_ST_S		      ; THESE PARAMETERS ARE STACKED
21AA CDFF2A				CALL  LET		      ; AND THE ACTUA ASSIGNMENT MADE.
21AD 1803				JR    IN_NEXT_2 	      ; ALSO JUMP FORWARD TO CONSIDER FURTHER ITEMS.
21AF			  ; FURTHER ITEMS IN THE INPUT STATEMENTARE CONSIDERED.
21AF CDFC1F		  IN_NEXT_1:	CALL  PR_ITEM_1 	      ; HANDLE ANY PRINT ITEM
21B2 CD4E20		  IN_NEXT_2:	CALL  PR_POSN_1 	      ; HANDLE ANY POSITION CONTROLLERS
21B5 CAC120				JP    Z,IN_ITEM_1	      ; GO AROUND THE LOOP AGAIN IF THERE ARE
21B8					;			      ; FURTHER ITEMS.
21B8 C9 				RET			      ; OTHERWISE RETURN
21B9			  ;
21B9			  ; THE "IN_ASSIGN" SUBROUTINE
21B9			  ; THIS SUBROUTINE IS CALLED TWICE FOR EACH INPUT VALUE. ONCE WITH THE
21B9			  ; SYNTAX/RUN FLAG RESET (SYNTAX) AND ONCE WITH IT SET (RUN).
21B9 2A615C		  IN_ASSING:	LD    HL,(WORKSP)	      ; SET CH_ADD TO POINT TO THE
21BC 225D5C				LD    (CH_ADD),HL	      ; FIRST LOCATION OF THE WORK
21BF DF 				RST   GET_BT		      ; SPACE AND FETCH THE CHARACTER
21C0 FEE2				CP    0E2H		      ; IS IT A "STOP" ?
21C2 280C				JR    Z,IN_STOP 	      ; JUMP IF IT IS.
21C4 3A715C				LD    A,(FLAGX) 	      ; OTHERWISE MAKE THE ASSIGNMENT
21C7 CD591C				CALL  VAL_FET_2 	      ; OF THE VALUE TO THE VARIABLE
21CA DF 				RST   GET_BT		      ; GET THE PRESENT CHARACTER
21CB FE0D				CP    CR		      ; AND CHECK IT IS A "CARRIAGE RETURN".
21CD C8 				RET   Z 		      ; RETURN IF IT IS
21CE CF 				RST   ERROR_1
21CF			  ;
21CF			  ; REPORT "C" - NONSENSE IN BASIC
21CF 0B 				DEFB 00BH		      ; NONSENSE IN BASIC	    NSENSE IN BASIC
21D0			  ; COME HERE IF THE INPUT LINE STARTS WITH "STOP".
21D0 CD3025		  IN_STOP:	CALL  SYNTAX_Z		      ; BUT DO NOT GIVE THE ERROR
21D3 C8 				RET   Z 		      ; REPORT ON THE SYNTAX PASS
21D4			  ; REPORT "H" - STOP IN INPUT
21D4 CF 				RST   ERROR_1		      ; CALL THE ERROR HANDLING
21D5 10 				DEFB 010H;		      ; 	    ; ROUTINE
21D6			  ; THE "IN_CHAN_K" SUBROUTINE
21D6			  ; THIS SUBROUTINE RETURNS WITH THE ZERO FLAG RESET ONLY IF CHANNEL "K"
21D6			  ; IS BEING USED.
21D6 2A515C		  IN_CHAN_K:	LD    HL,(CURCHL)	      ; THE BASE ADDRESS OF THE
21D9 23 				INC   HL		      ; CHANNEL INFORMATION FOR THE
21DA 23 				INC   HL		      ; CURRENT CHANNEL IS FETCHED
21DB 23 				INC   HL		      ; AND THE CHANNEL CONTROL CODE COMPARED
21DC 23 				INC   HL		      ; TO THE CHARACTER "K".
21DD 7E 				LD    A,(HL)
21DE FE4B				CP    04BH
21E0 C9 				RET			      ; RETURN AFTERWARDS

                                                                                                                                                                                                                         