![]() |
Routines |
Prev: 03828 | Up: Map |
The editor is called on two occasions:
First the 'error stack pointer' is saved and an alternative address provided.
|
||||||||
EDITOR | 03884 | LD HL,(23613) | The current value of ERR-SP is saved on the machine stack. | |||||
03887 | PUSH HL | |||||||
This entry point is used by the routine at ED_ERROR.
|
||||||||
ED_AGAIN | 03888 | LD HL,4223 | This is ED_ERROR. | |||||
03891 | PUSH HL | Any event that leads to the error handling routine (see ERR-SP) being used will come back to ED_ERROR. | ||||||
03892 | LD (23613),SP | |||||||
A loop is now entered to handle each keystroke.
|
||||||||
ED_LOOP | 03896 | CALL WAIT_KEY | Return once a key has been pressed. | |||||
03899 | PUSH AF | Save the code temporarily. | ||||||
03900 | LD D,0 | Fetch the duration of the keyboard click (PIP). | ||||||
03902 | LD E,(IY-1) | |||||||
03905 | LD HL,200 | And the pitch. | ||||||
03908 | CALL BEEPER | Now make the 'pip'. | ||||||
03911 | POP AF | Restore the code. | ||||||
03912 | LD HL,3896 | Pre-load the machine stack with the address of ED_LOOP. | ||||||
03915 | PUSH HL | |||||||
Now analyse the code obtained.
|
||||||||
03916 | CP 24 | Accept all character codes, graphic codes and tokens. | ||||||
03918 | JR NC,ADD_CHAR | |||||||
03920 | CP 7 | Also accept ','. | ||||||
03922 | JR C,ADD_CHAR | |||||||
03924 | CP 16 | Jump forward if the code represents an editing key. | ||||||
03926 | JR C,ED_KEYS | |||||||
The control keys - INK to TAB - are now considered.
|
||||||||
03928 | LD BC,2 | INK and PAPER will require two locations. | ||||||
03931 | LD D,A | Copy the code to D. | ||||||
03932 | CP 22 | Jump forward with INK and PAPER. | ||||||
03934 | JR C,ED_CONTR | |||||||
AT and TAB would be handled as follows:
|
||||||||
03936 | INC BC | Three locations required. | ||||||
03937 | BIT 7,(IY+55) | Jump forward unless dealing with 'INPUT LINE...' (bit 7 of FLAGX set). | ||||||
03941 | JP Z,ED_IGNORE | |||||||
03944 | CALL WAIT_KEY | Get the second code and put it in E. | ||||||
03947 | LD E,A | |||||||
The other bytes for the control characters are now fetched.
|
||||||||
ED_CONTR | 03948 | CALL WAIT_KEY | Get another code. | |||||
03951 | PUSH DE | Save the previous codes. | ||||||
03952 | LD HL,(23643) | Fetch K-CUR. | ||||||
03955 | RES 0,(IY+7) | Signal 'K mode' (reset bit 0 of MODE). | ||||||
03959 | CALL MAKE_ROOM | Make two or three spaces. | ||||||
03962 | POP BC | Restore the previous codes. | ||||||
03963 | INC HL | Point to the first location. | ||||||
03964 | LD (HL),B | Enter first code. | ||||||
03965 | INC HL | Then enter the second code which will be overwritten if there are only two codes - i.e. with INK and PAPER. | ||||||
03966 | LD (HL),C | |||||||
03967 | JR ADD_CH_1 | Jump forward. | ||||||
This entry point is used by the routine at ED_SYMBOL.
The address of this entry point is found in the initial channel information table.
The following subroutine actually adds a code to the current EDIT or INPUT line.
|
||||||||
ADD_CHAR | 03969 | RES 0,(IY+7) | Signal 'K mode' (reset bit 0 of MODE). | |||||
03973 | LD HL,(23643) | Fetch the cursor position (K-CUR). | ||||||
03976 | CALL ONE_SPACE | Make a single space. | ||||||
ADD_CH_1 | 03979 | LD (DE),A | Enter the code into the space and set K-CUR to signal that the cursor is to occur at the location after. Then return indirectly to ED_LOOP. | |||||
03980 | INC DE | |||||||
03981 | LD (23643),DE | |||||||
03985 | RET | |||||||
The editing keys are dealt with as follows:
|
||||||||
ED_KEYS | 03986 | LD E,A | The code is transferred to the DE register pair. | |||||
03987 | LD D,0 | |||||||
03989 | LD HL,3993 | The base address of the editing keys table. | ||||||
03992 | ADD HL,DE | The entry is addressed and then fetched into E. | ||||||
03993 | LD E,(HL) | |||||||
03994 | ADD HL,DE | The address of the handling routine is saved on the machine stack. | ||||||
03995 | PUSH HL | |||||||
03996 | LD HL,(23643) | The HL register pair is set to K-CUR and an indirect jump made to the required routine. | ||||||
03999 | RET |
Prev: 03828 | Up: Map |