0F2C			  ; THE EDITOR ROUTINES.
0F2C			  ; THE EDITOR IS CALLED ON TWO OCCASSIONS:
0F2C			  ; 1: FROM THE MAIN EXECUTION ROUTINE, SO THAT THE USER CAN ENTER A BASIC LINE
0F2C			  ; THE SYSTEM.
0F2C			  ; 2: FROM THE 'INPUT'  COMMAND ROUTINE.
0F2C			  ; FIRST THE 'ERROR STACK POINTER ' IS SAVED AND AN ALTERNATIVE ADDRESS
0F2C			  ; PROVIDED.
0F2C			  ;				      ;
0F2C 2A3D5C		  EDITOR:	LD    HL,(ERR_SP)	      ; THE CURRENT VALUE IS SAVED ON
0F2F E5 				PUSH  HL		      ; MACHINE STACK.
0F30 217F10		  ED_AGAIN:	LD    HL,ED_ERROR	      ; THIS IS ED_ERROR.
0F33 E5 				PUSH  HL		      ; ANY EVENT THAT LEADS TO THE
0F34 ED733D5C				LD    (ERR_SP),SP	      ; ERROR HANDLING ROUTINE BEING
0F38					;			      ; USED WILL COME BACK TO ED_ERROR.
0F38			  ; THE LOOP IS NOW ENTERED TO HANDLE EACH KEYSTROKE.
0F38 CDD415		  ED_LOOP:	CALL  WAIT_KEY		      ;RETURN ONCE A KEY HAS BEING PRESSED
0F3B F5 				PUSH  AF		      ; SAVE THE CODE TEMPORARILY.
0F3C 1600				LD    D,0		      ; FETCH THE DURATION OF THE
0F3E FD5EFF				LD    E,(IY+PIP-YBASE)	      ; KEYBOARD CLICK
0F41 21C800				LD    HL,0C8H		      ;AND THE PITCH
0F44 CDB503				CALL  BEEPER		      ; NOW MAKE THE PIP.
0F47 F1 				POP   AF		      ; RESTORE THE CODE.
0F48 21380F				LD    HL,0F38H		      ; PRE-LOAD THE MACHINE STACK
0F4B E5 				PUSH  HL		      ; WITH THE ADDRESS OF ED_LOOP.
0F4C			  ; NOW THE CODE OBTAINED.
0F4C FE18				CP    018H		      ;  ACCEPT ALL CHARACTER CODES .
0F4E 3031				JR    NC,ADD_CHAR	      ; GRAPHIC CODES AND TOKENS.
0F50 FE07				CP    7 		      ; ALSO ACCEPT ','
0F52 382D				JR    C,ADD_CHAR	      ;
0F54 FE10				CP    010H		      ; JUMP FORWARD IF THE CODE
0F56 383A				JR    C,ED_KEYS 	      ; REPRESANTS AN EDITING KEY.
0F58			  ; THE CONTROL KEYS- INK TO TAB ARE NOW CONSIDERED.
0F58 010200				LD    BC,2		      ; INK & PAPER REQUARED TWO LOCATIONS
0F5B 57 				LD    D,A		      ; COPY THE CODE TO D
0F5C FE16				CP    16H		      ; JUMP FORWARD WITH INK & PAPER.
0F5E 380C				JR    C,ED_CONTR	      ;
0F60			  ; AT	&   TAB WOULD BE HANDLED AS FOLLOW:
0F60 03 				INC   BC		      ;THREE LOCATIONS REQUARED.
0F61 FDCB377E				BIT   INP_LINE,(IY+FLAGX-YBASE) ; JUMP FORWARD UNLESS DEALING
0F65 CA1E10				JP    Z,ED_IGNORE	      ; WITH 'INPUT LINE...'
0F68 CDD415				CALL  WAIT_KEY		      ; GET THE SECOND CODE.
0F6B 5F 				LD    E,A		      ; AND PUI IT IN E.
0F6C			  ; THE OTHER BYTES FOR THE CONTROL CHARACTERS ARE NOW FETCHED.
0F6C CDD415		  ED_CONTR:	CALL  WAIT_KEY		      ; GET ANOTHER CODE.
0F6F D5 				PUSH  DE		      ; SAVE THE PREVIOUS CODES.
0F70 2A5B5C				LD    HL,(K_CUR)	      ; FETCH K_CUR.
0F73 FDCB0786				RES   0,(IY+MODE-YBASE)       ; SIGNAL 'K-MODE'
0F77 CD5516				CALL  MAKE_ROOM 	      ; MAKE 2 OR 3 SPACES.
0F7A C1 				POP   BC		      ; RESTORE THE PREVIOUS CODES.
0F7B 23 				INC   HL		      ; POINT TO THE FIRST LOCATION.
0F7C 70 				LD    (HL),B		      ; ENTER FIRST CODE.
0F7D 23 				INC   HL		      ; THEN ENTER THE SECOND CODE
0F7E 71 				LD    (HL),C		      ; WHICH WILL BE OVERWRITTEN IF
0F7F					;			      ; THERE ARE ONLY TWO CODES: I.E.
0F7F					;			      ; INK &  PAPER.
0F7F 180A				JR    ADD_CH_1		      ; JUMP FORWARD.
0F81			  ; THE ADD_CHAR'  SUBROUTINE.
0F81			  ; THIS SUBROUTINE ACTUALLY ADDS A CODE TO THE CURRENT EDIT OR INPUT LINE.
0F81 FDCB0786		  ADD_CHAR:	RES   0,(IY+MODE-YBASE)       ; SIGNAL 'K-MODE'
0F85 2A5B5C				LD    HL,(K_CUR)	      ; FETCH THE CURSOR POSITION
0F88 CD5216				CALL  ONE_SPACE 	      ;MAKE A SINGLE SPACE.
0F8B 12 		  ADD_CH_1:	LD    (DE),A		      ; ENTER THE CODE INTO SPACE
0F8C 13 				INC   DE		      ; AND SIGNAL THAT THE CURSOR IS TO
0F8D ED535B5C				LD    (K_CUR),DE	      ; OCCUR AT THE LOCATION AFTER. THEN
0F91 C9 				RET			      ; RETURN INDIRECTLY TO ED_LOOP.
0F92			  ;  THE EDITING KEYS ARE DEALT AS FOLLOW:
0F92 5F 		  ED_KEYS:	LD    E,A		      ; THE CODE IS TRANSFERED TO
0F93 1600				LD    D,0		      ; THE DE REGISTER PAIR.
0F95 21990F				LD    HL,P005-7 	      ; THE BASE ADDRESS OF THE EDITING KEY TABLE
0F98 19 				ADD   HL,DE		      ; THE ENTRY IS ADDRESSED
0F99 5E 				LD    E,(HL)		      ; AND THEN FETCHED INTO E.
0F9A 19 				ADD   HL,DE		      ; THE ADDRESS OF THE HANDLING
0F9B E5 				PUSH  HL		      ; ROUTINE IS SAVED RN THE MACHINE STACK.
0F9C 2A5B5C				LD    HL,(K_CUR)	      ; THE HL REGISTER PAIR IS SET AND
0F9F C9 				RET			      ; AN INDIRECT JUMP MADE  TO THE
0FA0					;			      ; REQUARED ROUTINE.
0FA0			  ; THE EDITING KEYS  TABLE.
0FA0 09 		  P005: 	DEFB  ED_EDIT-$ 	      ;  7   ED_EDIT
0FA1 66 				DEFB  ED_LEFT-$ 	      ;  8   CURSOR LEFT
0FA2 6A 				DEFB  ED_RIGHT-$	      ;  9   CURSOR RIGHT
0FA3 50 				DEFB  ED_DOWN-$ 	      ;  A   CURSOR DOWN
0FA4 B5 				DEFB  ED_UP-$		      ;  B   CURSOR UP
0FA5 70 				DEFB  ED_DELETE-$	      ;  C   DELETE
0FA6 7E 				DEFB  ED_ENTER-$	      ;  D   ENTER
0FA7 CF 				DEFB  ED_SYMBOL-$	      ;  E   SYMBOL SHIFT
0FA8 D4 				DEFB  ED_GRAFICS-$	      ;  F   GRAFICS
0FA9			  ;  THE 'EDIT KEYS' SUBROUTINE.
0FA9			  ; WHEN IN 'EDITING MODE' PRESSING THE EDIT KEY WILL BRING DOWN THE CURRENT
0FA9			  ; BASIC LINE. HOWEVER IN 'INPUT' MODE THE ACTION OF THE EDIT KEY IS TO CLEAR
0FA9			  ; THE CURRENT REPLY AND ALLOW A FRESH ONE.
0FA9 2A495C		  ED_EDIT:	LD    HL,(E_PPC)	      ; FETCH THE CURRENT LINE NUMBER.
0FAC FDCB376E				BIT   INPUT_M,(IY+FLAGX-YBASE) ; BUT JUMP FORWARD IF IN
0FB0 C29710				JP    NZ,CLEAR_SP	      ; 'INPUT MODE'
0FB3 CD6E19				CALL  LINE_ADDR 	      ;  FIND THE ADDRESS OF THE START OF
0FB6 CD9516				CALL  LINE_NO		      ;  CURRENT LINEAND HENCE ITS NUMBER.
0FB9 7A 				LD    A,D		      ; IF THE LINE NUMBER RETURNED  IS
0FBA B3 				OR    E 		      ;  ZERO THEN  SIMLY CLEAR THE EDITING AREA
0FBB CA9710				JP    Z,CLEAR_SP	      ;
0FBE E5 				PUSH  HL		      ; SAVE THE ADDRESS OF THE LINE.
0FBF 23 				INC   HL		      ; MOVE ON TO COLLECT THE
0FC0 4E 				LD    C,(HL)		      ; LENGTH OF THE LINE.
0FC1 23 				INC   HL		      ;
0FC2 46 				LD    B,(HL)		      ;
0FC3 210A00				LD    HL,0AH		      ; ADD 0A TO THE LENGTH AND TEST
0FC6 09 				ADD   HL,BC		      ; THAT THERE SUFFICIENT ROOM
0FC7 44 				LD    B,H		      ; FOR A COPY OF THE LINE
0FC8 4D 				LD    C,L		      ;
0FC9 CD051F				CALL  TEST_ROOM 	      ;
0FCC CD9710				CALL  CLEAR_SP		      ; NOW CLEAR THE EDITING AREA.
0FCF 2A515C				LD    HL,(CURCHL)	      ; FETCH THE CURRENT CHANNEL
0FD2 E3 				EX    (SP),HL		      ; AND EXCHANGE IT FOR THE ADDRESS OF
0FD3					;			      ;  THE LINE.
0FD3 E5 				PUSH  HL		      ;  SAVE IT TEMPORARILY.
0FD4 3EFF				LD    A,-1		      ; OPEN CHANNEL 'R' SO THAT THE
0FD6 CD0116				CALL  CHAN_OPEN 	      ; LINE WILL BE COPIED TO THE EDITING
0FD9					;			      ; AREA.
0FD9 E1 				POP   HL		      ; FETCH THE ADDRESS OF THE LINE.
0FDA 2B 				DEC   HL		      ; GO TO BEFORE THE LINE.
0FDB FD350F				DEC   (IY+E_PPC-YBASE)	      ; DECREMENT THE CURRENT LINE
0FDE					;			      ; NUMBER SO AS TO AVOID PRINTING THE CURSOR
0FDE CD5518				CALL  OUT_LINE		      ; PRINT THE BASIC LINE
0FE1 FD340F				INC   (IY+E_PPC-YBASE)	      ; INCREMENT THE CURRENT LINE NUMBER.
0FE4					;			      ; NOTE THE DECREMENTING OF THE LINE NUMBER
0FE4					;			      ; DOES NOT ALWAIS STOP THE CURSOR FROM
0FE4					;			      ; BEING PRINTED.
0FE4 2A595C				LD    HL,(E_LINE)	      ; FETCH THE START OF THE LINE IN
0FE7 23 				INC   HL		      ; THE EDITINNG AREA AND STOP PAST
0FE8 23 				INC   HL		      ; THE LINE NUMBER AND THE
0FE9 23 				INC   HL		      ; LENGTH TO FIND THE ADDRESS
0FEA 23 				INC   HL		      ; FOR K_CUR.
0FEB 225B5C				LD    (K_CUR),HL	      ;
0FEE E1 				POP   HL		      ;  FETCH THE FORMER CHANNEL
0FEF CD1516				CALL  CHAN_FLAG 	      ;  ADDRESS AND SET THE APPROPRIATE FLAGS
0FF2 C9 				RET			      ;  BEFORE RETURNING TO ED_LOOP.
0FF3			  ; THE 'CURSOR DOWN EDITING' SUBROUTINE.
0FF3			  ;				      ;
0FF3 FDCB376E		  ED_DOWN:	BIT   INPUT_M,(IY+FLAGX-YBASE) ;  JUMP FORWARD IF IN
0FF7 2008				JR    NZ,ED_STOP	      ;  'INPUT MODE'.
0FF9 21495C				LD    HL,E_PPC		      ;
0FFC CD0F19				CALL  LN_FETCH		      ; THE NEXT LINE NUMBER IF FOUND
0FFF 186D				JR    ED_LIST		      ; AND NEW AUTOMATIC LISTING PRODUCED.
1001 FD360010		  ED_STOP:	LD    (IY+ERR_NR-YBASE),10H   ; STOP IN INPUT  REPORT
1005 181D				JR    ED_ENTER		      ; JUMP FORWARD.
1007			  ; THE 'CURSOR LEFT EDITING' SUBROUTINE.
1007 CD3110		  ED_LEFT:	CALL  ED_EDGE		      ; THE CURSOR IS MOVED.
100A 1805				JR    ED_CUR		      ; JUMP FORWARD.
100C			  ;				      ;
100C			  ; THE 'CURSOR RIGHT EDITING' SUBROUTINE.
100C 7E 		  ED_RIGHT:	LD    A,(HL)		      ; THE CURRENT CHARACTER IS TESTED
100D FE0D				CP    CR		      ; AND IF IT IS 'CARRIAGE RETURN'
100F C8 				RET   Z 		      ; THE RETURN.
1010 23 				INC   HL		      ;  OTHERWISE MAKE THE CURSOR COME AFTER
1011					;			      ; THE CHARACTER.
1011 225B5C		  ED_CUR:	LD    (K_CUR),HL	      ; SET THE SYSTEM VARIABLE K_CUR.
1014 C9 				RET			      ;
1015			  ; THE 'DELETE EDITING'  SUBROUTINE.
1015			  ;				      ;
1015 CD3110		  ED_DELETE:	CALL  ED_EDGE		      ; MOVE THE CURSOR LEFTWARDS.
1018 010100				LD    BC,1		      ; RECLAIM THE CURRENT CHARACTER.
101B C3E819				JP    RECLAIM_2 	      ;
101E			  ;				      ;
101E CDD415		  ED_IGNORE:	CALL  WAIT_KEY		      ; THE NEXT TWO CODES FROM THE
1021 CDD415				CALL  WAIT_KEY		      ; KEY-_INPUT ROUTINE ORE IGNORED.
1024			  ; THE 'ENTER EDITING'  SUBROUTINE.  ;
1024 E1 		  ED_ENTER:	POP   HL		      ; THE ADDRESS OF ED_LOOP AND
1025 E1 				POP   HL		      ; ED_ERROR ARE DISCARDED.
1026 E1 		  ED_END:	POP   HL		      ; THE OLD VALUE OF ERR_SP
1027 223D5C				LD    (ERR_SP),HL	      ; IS RESTTORED.
102A FDCB007E				BIT   7,(IY+ERR_NR-YBASE)     ; NOW RETURN IF THERE WERE NO ERROR.
102E C0 				RET   NZ		      ;
102F F9 				LD    SP,HL		      ; OTHERWISE MAKE AN INDIRECT
1030 C9 				RET			      ; JUMP TO  THE ERROR ROUTINE.
1031			  ; THE 'ED_EDGE' SUBROUTINE.	      ;
1031			  ; THE ADDRESS OF THE CURSOR IS IN THE HL REGISTER PAIR AND WILL BE
1031			  ; DECREMENTED UNLESS THE CURSOR IS ALREADY AT THE START OF THE LINE.
1031			  ; CARE IS TAKEN NOT TO PUT THE CURSOR BETWEEN CONTROL CHARACTERS
1031			  ; AND THEIR PARAMETERS.
1031 37 		  ED_EDGE:	SCF			      ; DE WILL HOLD  EITHER E_LINE
1032 CD9511				CALL  SET_DE		      ; (FOR EDITING) OR WORKSP (FOR INPUTING)
1035 ED52				SBC   HL,DE		      ; THE CARRY FLAG WILL BECOME SET IF THE
1037					;			      ; CURSOR IS ALREADY TO BE AT THE START
1037 19 				ADD   HL,DE		      ; OF THE LINE.
1038 23 				INC   HL		      ; CORRECT FOR THE SUBSTRACTION.
1039 C1 				POP   BC		      ; DROP THE RETURN ADDRESS.
103A D8 				RET   C 		      ; RETURN VIA ED_LOOP IF  THE CARRY SET.
103B C5 				PUSH  BC		      ; RESTORE THE RETURN ADDRESS.
103C 44 				LD    B,H		      ; MOVE THE CURRENT ADDRESS OF THE
103D 4D 				LD    C,L		      ; CURSOR TO BC.
103E			  ; NOW ENTER A LOOP TO CHECK THAT CONTROL CHARACTERS ARE NOT
103E			  ; SPLIT FROM THEIR PARAMETERS.
103E 62 		  ED_EDGE_1:	LD    H,D		      ; HL WILL POINT TO THE CHARACTER
103F 6B 				LD    L,E		      ; IN THE LINE AFTER
1040 23 				INC   HL		      ; THAT ADDRESSED BY DE.
1041 1A 				LD    A,(DE)		      ; FETCH A CHARACTER CODE.
1042 E6F0				AND   0F0H		      ; JCMP FORWARD IF THE CODE
1044 FE10				CP    010H		      ;  DOES NOT REPRESENT
1046 2009				JR    NZ,ED_EDGE_2	      ;  INK OR TAB
1048 23 				INC   HL		      ;  ALLOW FOR ONE PARAMETER.
1049 1A 				LD    A,(DE)		      ;  FETCH THE CODE A NEW.
104A D617				SUB   017H		      ;  CARRY IS RESET FOR TAB.
104C CE00				ADC   A,0		      ;  NOTE: THIS SPLITS OFF AT & TAB
104E					;			      ;  BUT AT & TAB IN THIS FORM ARE
104E					;			      ;  NOT IMPLEMENTED ANYWAY SO IT MAKES
104E					;			      ; NO DIFFERENCE.
104E 2001				JR    NZ,ED_EDGE_2	      ; JUMP FORWARD UNLESS DEALING
1050 23 				INC   HL		      ; WITH AT & TAB WHICH WOULD
1051					;			      ; HAVE TWO PARAMETERS, IF USED.
1051 A7 		  ED_EDGE_2:	AND   A 		      ;  PREPARE FOR TRUE SUBSTRACTION.
1052 ED42				SBC   HL,BC		      ;  THE CARRY FLAG WILL BE RESET
1054 09 				ADD   HL,BC		      ; WHEN THE 'UPDATED POINTER' REACHES K_CUR
1055 EB 				EX    DE,HL		      ;  FOR THE NEXT LOOP USE THE
1056 38E6				JR    C,ED_EDGE_1	      ; 'UPDATED POINTER' BUT IF EXITING USE THE
1058 C9 				RET			      ; 'PRESEN POINTER' FOR K_CUR.
1059					;			      ; NOTE: IT IS THE CONTROL CHARACTER THAT IS DELETED
1059					;			      ; WHEN USING  DELETE.
1059			  ;  THE 'CURSOR  UP  EDITING'	SUBROUTINE.
1059			  ;				      ;
1059 FDCB376E		  ED_UP:	BIT   INPUT_M,(IY+FLAGX-YBASE) ; RETURN IF INPUT MODE.
105D C0 				RET   NZ		      ;
105E 2A495C				LD    HL,(E_PPC)	      ; FETCH THE CURRENT LINE NUMBER
1061 CD6E19				CALL  LINE_ADDR 	      ; AND ITS START ADDRESS.
1064 EB 				EX    DE,HL		      ; HL NOW POINTS TO THE PREVIOUS  LINE.
1065 CD9516				CALL  LINE_NO		      ; THIS LINE'S NUMBER IS FETCHED.
1068 214A5C				LD    HL,E_PPC+1	      ;  THIS IS PPC HIGH
106B CD1C19				CALL  LN_STORE		      ; THE LIN NUMBER IS STORED.
106E CD9517		  ED_LIST:	CALL  AUTO_LIST 	      ; A NEW AUTOMATIC LISTING IS
1071 3E00				LD    A,0		      ; NOW PRODUCED AND CHANNEL 'K' RE-OPENED
1073 C30116				JP    CHAN_OPEN 	      ; BEFORE RETURNING TO ED_LOOP.
1076			  ; THE ED_SYMBOL'  ROUTINE.
1076			  ; IF SYMBOL &  GRAPHICS  CODEC WERE USED THEY WOULD BE HANDLED AS FOLLOW:
1076 FDCB377E		  ED_SYMBOL:	BIT   INP_LINE,(IY+FLAGX-YBASE);; JUMP BACK UNLESS DEALING WITH
107A 28A8				JR    Z,ED_ENTER	      ; 'INPUT.. LINE'
107C C3810F		  ED_GRAFICS:	JP    ADD_CHAR		      ;  JUMP BACK
107F			  ; THE  'ED_ERROR' SUBROUTINE. 	 ;
107F			  ; COME HERE WHEN WHEN THERE HAS BEEN SOME KIND OF ERROR.
107F FDCB3066		  ED_ERROR:	BIT   CHNL_K,(IY+FLAGS2-YBASE); JUMP BACK IF USING OTHER THAN
1083 28A1				JR    Z,ED_END		      ; CHANEL 'K'.
1085 FD3600FF				LD    (IY+ERR_NR-YBASE),0FFH  ; CANSEL THE ERROR NUMBER AND
1089 1600				LD    D,0		      ;  GIVE A 'RASP' BEFORE GOING
108B FD5EFE				LD    E,(IY+RASP-YBASE)       ;  AROUND THE EDITING AGAIN.
108E 21901A				LD    HL,01A90H 	      ;
1091 CDB503				CALL  BEEPER		      ;
1094 C3300F				JP    ED_AGAIN		      ;
1097			  ; THE 'CLEAR_SP'  SUBROUTINE.
1097			  ; THE EDITING AREA  OR THE WORK SPACE IS CLEARED AS DIRECTED.
1097			  ;				      ;
1097 E5 		  CLEAR_SP:	PUSH  HL		      ; SAVE THE POINTER TO THE SPACE.
1098 CD9011				CALL  SET_HL		      ; DE WILL POINT TO THE FIRST
109B					;			      ; CHARACTER AND HL THE LAST.
109B 2B 				DEC   HL		      ; THE CORRECT AMOUNT IS NOW
109C CDE519				CALL  RECLAIM_1 	      ; RECLAIMED.
109F 225B5C				LD    (K_CUR),HL	      ; THE SYSTEM VARIABLE K_KUR
10A2 FD360700				LD    (IY+MODE-YBASE),0       ; AND MODE (K MODE) ARE
10A6 E1 				POP   HL		      ; ARE INSTALISED BEFORE FEICHING
10A7 C9 				RET			      ; THE POINTER AND RETURNING.
10A8			  ;
10A8			  ;  THE 'KEY INPUT' SUBROUTINE.
10A8			  ; THIS IMPORTANT SUBROUTINE RETURNS THE CODE OF THE LAST KEY TO HAVE BEEN
10A8			  ; PRESSED BUT NOTE THAT CAPS LOCK, THE CHANGING OF THE MODE AND COLOUR
10A8			  ; CONTROL PARAMETERS ARE HANDLED WITHING SUBROUTINES.
10A8			  ;
10A8 FDCB025E		  KEY_INPUT:	BIT   CHNG_MODE,(IY+TV_FLAG-YBASE) ;  COPY THE EDIT-LINE OR THE
10AC C41D11				CALL  NZ,ED_COPY	      ; INPUT-LINE TO THE SCREEN IF
10AF					;			      ; THE MODE HAS CHANGE.
10AF A7 				AND   A 		      ; RETURN WITH BOTH CARRY
10B0 FDCB016E				BIT   NO_KEY,(IY+FLAGS-YBASE) ; AND ZERO FLAGS RESET IF NO
10B4 C8 				RET   Z 		      ; NEW KEY HAS BEEN PRESSED.
10B5 3A085C				LD    A,(LAST_K)	      ; OTHERWISE FETCH THE CODE AND
10B8 FDCB01AE				RES   NO_KEY,(IY+FLAGS-YBASE) ; AND SIGNAL IT HAS BEEN TAKEN.
10BC F5 				PUSH  AF		      ; SAVE THE CODE TEMPORARILY.
10BD FDCB026E				BIT   CLR_REQ,(IY+TV_FLAG-YBASE) ; CLEAR THE LOWER PART OF THE
10C1 C46E0D				CALL  NZ,CLS_LOWER	      ; DISPLAY IF NECESSARY. (AFTER 'SCROLL?')
10C4 F1 				POP   AF		      ; FETCH THE CODE.
10C5 FE20				CP    ' '		      ; ACCEPT ALL CHARACTERS AND TOKEN
10C7 3052				JR    NC,KEY_DONE	      ; CODES.
10C9 FE10				CP    10H		      ; JUMP FORWARD WITH MOST OF THE CONTROL CHARACTER
10CB 302D				JR    NC,KEY_CONTR	      ; CODES.
10CD FE06				CP    6 		      ; JUMP FORWARD WITH THE 'MODE'
10CF 300A				JR    NC,KEY_M_CL	      ; CODES AND THE CAPS LOCK CODE.
10D1			  ;  NOW DEAL WITH THE FLASH , BRIGHT, & INVERSE CODES.
10D1 47 				LD    B,A		      ; SAVE THE CODE.
10D2 E601				AND   001H		      ; KEEP ONLY BIT 0.
10D4 4F 				LD    C,A		      ; C HOLDS 0 (OFF) OR C HOLDS 1 (ON).
10D5 78 				LD    A,B		      ; FETCH THE CODE.
10D6 1F 				RRA			      ; ROTATE IT ONCE (LOSING BIT 0).
10D7 C612				ADD   A,012H		      ; INCREASE IT BY 12 DIVING FOR
10D9 182A				JR    KEY_DATA		      ; FLASH.12, BRIGHT.13, AND INVERSE.14.
10DB			  ; THE CAPS LOCK CODE AND MODE CODES ARE DEALT WITH 'LOCALLY'.
10DB 2009		  KEY_M_CL:	JR    NZ,KEY_MODE	      ; JUMP FORWARD WITH 'MODE( CODES.
10DD 216A5C				LD    HL,FLAGS2 	      ;
10E0 3E08				LD    A,8		      ; FLIP BIT 3 IN FLAGS2  ( CAPS LOCK  FLAG)
10E2 AE 				XOR   (HL)		      ;
10E3 77 				LD    (HL),A		      ;
10E4 180E				JR    KEY_FLAG		      ; JUMP FORWARD.
10E6 FE0E		  KEY_MODE:	CP    0EH		      ; CHECK THE LOWER LIMIT.
10E8 D8 				RET   C 		      ;
10E9 D60D				SUB   0DH		      ; REDUCE THE RANGE.
10EB 21415C				LD    HL,MODE		      ; THIS IS MODE.
10EE BE 				CP    (HL)		      ; HAS IT BEEN CHANGE?.
10EF 77 				LD    (HL),A		      ; ENTER THE NEW MODE CODE.
10F0 2002				JR    NZ,KEY_FLAG	      ; JUMP IF IT HAS BEEN CHANGED.
10F2 3600				LD    (HL),0		      ; OTHERWISE MAKE IT 'L MODE.
10F4 FDCB02DE		  KEY_FLAG:	SET  CHNG_MODE,(IY+TV_FLAG-YBASE) ; SIGNAL 'THE MODE MIGHT HAVE CHANGED.
10F8 BF 				CP    A 		      ; RESET THE CARRY FLAG AND RETURN.
10F9 C9 				RET			      ;
10FA			  ; THE CONTROL KEY CODES (  APART FROM FLASH, BRIGHT, INVERSE) ARE MANIPULATED.
10FA 47 		  KEY_CONTR:	LD    B,A		      ; SAVE THE CODE.
10FB E607				AND   007H		      ; MAKE THE C REGISTER HOLD THE
10FD 4F 				LD    C,A		      ; PARAMETER ( 0 TO 7)
10FE 3E10				LD    A,010H		      ; A  NOW HOLDS THE INK CODE.
1100 CB58				BIT  3,B		      ; BUT IF THE CODE WAS AN
1102 2001				JR    NZ,KEY_DATA	      ; 'UNSHIFTED' CODE THEN MAKE A
1104 3C 				INC   A 		      ; HOLD THE PAPER CODE.
1105			  ; THE PARAMETER IS SAVED IN K_DATA AND THE CHANNEL ADDRESS CHANGED
1105			  ; FROM  KEY_INPUT TO KEY_NEXT.
1105 FD71D3		  KEY_DATA:	LD    (IY+K_DATA-YBASE),C     ; SAVE THE RARAMETER .
1108 110D11				LD    DE,KEY_NEXT	      ;
110B 1806				JR    KEY_CHAN		      ; JUMP FORWARD.
110D			  ; NOTE: ON THE FIRST PASS ENTERING AT KEY_INPUT THE A REGISTER IS
110D			  ; RETURNED HOLDING A 'CONTROL CODE' AND THEN ON THE NEXT PASS , ENTERING
110D			  ; AT 'KEY_NEXT' IT IS THE PARAMETER THAT IS RETURNED.
110D 3A0D5C		  KEY_NEXT:	LD    A,(K_DATA)	      ; FETCH THE PARAMETER .
1110 11A810				LD    DE,KEY_INPUT	      ;
1113			  ; NOW SET THE INPUT ADDRESS IN THE FIRST CHANNEL AREA.
1113 2A4F5C		  KEY_CHAN:	LD    HL,(CHANS)	      ; FETCH THE HCANNEL ADDRESS.
1116 23 				INC   HL		      ;
1117 23 				INC   HL		      ;
1118 73 				LD    (HL),E		      ; NOW SET THE INPUT ADDRESS.
1119 23 				INC   HL		      ;
111A 72 				LD    (HL),D		      ;
111B			  ; FINALLY EXIT WITH REQUARED CODE IN A REGISTER .
111B 37 		  KEY_DONE:	SCF			      ; SHOW A CODE HAS BEEN FOUND
111C C9 				RET			      ;  AND RETURN.
111D			  ;
111D			  ; 'THE 'LOWER SCREEN	COPING' SUBROUTINE.
111D			  ; THIS SUBROUTINE IS CALLED WHENEVER THE LINE IN THE EDITING AREA
111D			  ; OR THE INPUT AREA IS TO BE PRINTED IN THE LOWER PART OF THE SCREEN.
111D CD4D0D		  ED_COPY:	CALL  TEMPS		      ; USE THE PERMANENT COLOURS.
1120 FDCB029E				RES  CHNG_MODE,(IY+TV_FLAG-YBASE) ; SIGNAL: 'MODE IS TO BE CONSIDERED
1124					;			      ; UNCHANGED'  AND
1124 FDCB02AE				RES  CLR_REQ,(IY+TV_FLAG-YBASE) ;'THE LOWER SCREEN DOES NEED CLEARING'.
1128 2A8A5C				LD    HL,(SPOSNL)	      ; SAVE THE CURRENT VALUE OF S_POSNL.
112B E5 				PUSH  HL		      ;
112C 2A3D5C				LD    HL,(ERR_SP)	      ; KEEP THE CURRENT VALUE OF ERR_SP.
112F E5 				PUSH  HL		      ;
1130 216711				LD    HL,ED_FULL	      ; THIS IS ED_FULL.
1133 E5 				PUSH  HL		      ; PUSH THIS ADDRESS ON TO THE
1134 ED733D5C				LD    (ERR_SP),SP	      ; MACHINE STACK TO MAKE ED_FULL THE ENTRY
1138					;			      ; POINT FOLLOWING AN ERROR.
1138 2A825C				LD    HL,(ECHO_E)	      ; PUSH THE VALUE OF ECHO_E ON TO THE
113B E5 				PUSH  HL		      ; MACHINE STACK.
113C 37 				SCF			      ; MAKE HL POINT  TO THE START OF SPACE
113D CD9511				CALL  SET_DE		      ; AND DE IS END.
1140 EB 				EX    DE,HL		      ;
1141 CD7D18				CALL  OUT_LINE2 	      ; NOW PRINT THE LINE.
1144 EB 				EX    DE,HL		      ; EXCHANGE THE POINTERS AND PRINT
1145 CDE118				CALL  OUT_CURS		      ; CURSOR.
1148 2A8A5C				LD    HL,(SPOSNL)	      ; NEXT FETCH THE CURRENT VALUE
114B E3 				EX    (SP),HL		      ; OF S_POSNL AND EXCHANGE IT WITH ECHO_E.
114C EB 				EX    DE,HL		      ; PASS ECHO_E TO DE.
114D CD4D0D				CALL  TEMPS		      ;AGAIN FETCH THE PERMANENT COLOURS.
1150			  ; THE REMAINDER OF ANY LINE THAT HAS BEEN STARTED IS NOW COMPLETED
1150			  ; WITH SPACES PRINTED WITH PERMANENT	PAPER COLOUR.
1150 3A8B5C		  ED_BLANK:	LD    A,(SPOSNL+1)	      ; FETCH THE CURRENT LINE NUMBER
1153 92 				SUB   D 		      ; AND SUBSTRACT THE OLD LIN NUMBER.
1154 3826				JR    C,ED_C_DONE	      ; JUMP FORWRD IF NO  'BLANKING' OF LINE
1156					;			      ; REQUARED.
1156 2006				JR    NZ,ED_SPACES	      ; JUMP FORWARD IF NOT ON THE THE SAME LINE.
1158 7B 				LD    A,E		      ; FETCH THE OLD COLUMN NUMBER
1159 FD9650				SUB   (IY+SPOSNL-YBASE)       ; AND SUBSTRACT THE NEW COLUMN NUMBER.
115C 301E				JR    NC,ED_C_DONE	      ; JUMP IF NO SPACES REQUARED.
115E 3E20		  ED_SPACES:	LD    A,' '		      ; A 'SPACE'
1160 D5 				PUSH  DE		      ; SAVE THE OLD VALUES.
1161 CDF409				CALL  PRINT_OUT 	      ; PRINT IT.
1164 D1 				POP   DE		      ; FETCH THE OLD VALUES.
1165 18E9				JR    ED_BLANK		      ; BACK AGAIN.
1167			  ; NOW DEAL WITH ANY ERROR.
1167 1600		  ED_FULL:	LD    D,0		      ; GIVE OUT A 'RASP'
1169 FD5EFE				LD    E,(IY+RASP-YBASE)       ;
116C 21901A				LD    HL,1A90H		      ;
116F CDB503				CALL  BEEPER		      ;
1172 FD3600FF				LD    (IY+ERR_NR-YBASE),0FFH ; CANSEL THE ERROR NUMBER.
1176 ED5B8A5C				LD    DE,(SPOSNL)	      ; FETCH THE CURRENT VALUE OF
117A 1802				JR    ED_C_END		      ; S_POSNL AND JUMP FORWARD.
117C			  ; THE NORMAL EXIT UPON COMPLATION OF THE COPING OVER OF THE EDIT OR THE
117C			  ; INPUT LINE.
117C D1 		  ED_C_DONE:	POP   DE		      ; THE NEW POSITION VALUE.
117D E1 				POP   HL		      ; THE 'ERROR ADDRESS'.
117E			  ; BUT COME HERE AFTER AN ERRO.
117E E1 		  ED_C_END:	POP   HL		      ; THE OLD VALUE OF ERR_SP IS
117F 223D5C				LD    (ERR_SP),HL	      ; RESTORED.
1182 C1 				POP   BC		      ; FETCH THE OLD VALUE OF S_SPOSNL.
1183 D5 				PUSH  DE		      ; SAVE THE NEW POSITION VALUES.
1184 CDD90D				CALL  CL_SET		      ; SET THE SYSTEM VARIABLES.
1187 E1 				POP   HL		      ; THE OLD VALUE OF S_SPOSNL
1188 22825C				LD    (ECHO_E),HL	      ; GOES INTO ECHO_E.
118B FD362600				LD    (IY+X_PTR+1-YBASE),0    ; X_PTR IS CLEARED.
118F C9 				RET			      ;
1190			  ;
1190			  ; THE 'SET_DE'  AND  'SET_HL' SUBROUTINES.
1190			  ; THESE SUBROUTINES RETURN WITH HL POINTING TO THE FIRST LOCATION AND
1190			  ; DE THE LAST LOCATION OF EITHER THE EDITING OR THE WORK SPACE.
1190 2A615C		  SET_HL:	LD    HL,(WORKSP)	      ; POINT TO THE LAST LOCATION
1193 2B 				DEC   HL		      ; OF THE EDITING AREA.
1194 A7 				AND   A 		      ; CLEAR THE CARRY FLAG.
1195 ED5B595C		  SET_DE:	LD    DE,(E_LINE)	      ; POINT TO THE STARTOF THE
1199 FDCB376E				BIT  INPUT_M,(IY+FLAGX-YBASE) ; EDITING AREA AND RETURN IF
119D C8 				RET   Z 		      ; IN 'EDITING MODE'.
119E ED5B615C				LD    DE,(WORKSP)	      ; OTHERWISE CHANGE DE.
11A2 D8 				RET   C 		      ; RETURN IF NOW INTENDED.
11A3 2A635C				LD    HL,(STKBOT)	      ; FETCH STKBOT AND
11A6 C9 				RET			      ;   RETURN.
11A7			  ; THE 'REMOVE_FP' SUBROUTINE. .
11A7			  ; THIS SUBROUTINE REMOVES THE HIDEN FLOATING POINT FORMS IN A BASIC LINE.
11A7 7E 		  REMOVE_FP:	LD    A,(HL)		      ; EARCH CHARACTER IN TURN IS EXAMINED.
11A8 FE0E				CP    0EH		      ; IS IT A NUMBER MARKER?
11AA 010600				LD    BC,6		      ; IT WILL OCCUPY SIX LOCATIONS.
11AD CCE819				CALL  Z,RECLAIM_2	      ; RECLAIM THE F-P NUMBER.
11B0 7E 				LD    A,(HL)		      ; FETCH THE CODE AGAIN.
11B1 23 				INC   HL		      ; UPDATE THE POINTER.
11B2 FE0D				CP    0DH		      ; 'CARRIAGE RETURN'?
11B4 20F1				JR    NZ,REMOVE_FP	      ; BACK IF NOT. BUT MAKE A SIMPLE
11B6 C9 				RET			      ; RETURN IF IT IS.
11B7			  ;

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