Rev 3357 | Rev 4274 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3357 | Rev 3669 | ||
---|---|---|---|
1 | diff16 'tp-key.asm',0,$ |
1 | diff16 'tp-key.asm',0,$ |
2 | 2 | ||
3 | key: |
3 | key: |
4 | mov ecx,1 |
4 | mov ecx,1 |
5 | mcall 66,3 |
5 | mcall 66,3 ; Get status of the control keys |
6 | mov [shi],eax |
6 | mov [shi],eax |
7 | xor ebx,ebx |
7 | xor ebx,ebx |
8 | test al,0x03 |
8 | test al,0x03 ; Left or right shift |
9 | jz @f |
9 | jz @f |
10 | or ebx,KM_SHIFT |
10 | or ebx,KM_SHIFT |
11 | @@: test al,0x0C |
11 | @@: test al,0x0C ; Left or right control |
12 | jz @f |
12 | jz @f |
13 | or ebx,KM_CTRL |
13 | or ebx,KM_CTRL |
14 | @@: test al,0x30 |
14 | @@: test al,0x10 ; Left alt |
15 | jz @f |
15 | jz @f |
16 | or ebx,KM_ALT |
16 | or ebx,KM_ALT |
17 | @@: mov edx,ebx |
17 | @@: mov edx,ebx |
18 | test al,0x03 |
18 | test al,0x03 |
19 | jz @f |
19 | jz @f |
20 | inc cl |
20 | inc cl |
21 | @@: |
21 | @@: |
22 | mcall 2 |
22 | mcall 2 |
23 | cmp al,0 |
23 | cmp al,0 |
24 | jne still.skip_write |
24 | jne still.skip_write |
25 | shr eax,8 |
25 | shr eax,8 |
26 | ;-------------------------------------- |
26 | ;-------------------------------------- |
27 | ; this code for Win-keys, works with |
27 | ; this code for Win-keys, works with |
28 | ; kernel SVN r.3356 or later |
28 | ; kernel SVN r.3356 or later |
29 | test [shi],0x200 ; LWin |
29 | test [shi],0x200 ; LWin |
30 | jnz still.skip_write |
30 | jnz still.skip_write |
31 | test [shi],0x400 ; RWin |
31 | test [shi],0x400 ; RWin |
32 | jnz still.skip_write |
32 | jnz still.skip_write |
33 | ;-------------------------------------- |
33 | ;-------------------------------------- |
34 | cmp al,224 |
34 | cmp al,224 |
35 | jne @f |
35 | jne @f |
36 | mov [ext],0x01 |
36 | mov [ext],0x01 |
37 | jmp still.skip_write |
37 | jmp still.skip_write |
38 | @@: cmp al,225 |
38 | @@: cmp al,225 |
39 | jne @f |
39 | jne @f |
40 | mov [ext],0x02 |
40 | mov [ext],0x02 |
41 | jmp still.skip_write |
41 | jmp still.skip_write |
42 | @@: |
42 | @@: |
43 | mov ah,[ext] |
43 | mov ah,[ext] |
44 | mov [ext],0 |
44 | mov [ext],0 |
45 | 45 | ||
46 | mov esi,numpad_table_off |
46 | mov esi,numpad_table_off |
47 | test [shi], 0x00000080 ; NumLock is on? |
47 | test [shi], 0x00000080 ; NumLock is on? |
48 | jz .num |
48 | jz .num |
49 | mov esi,numpad_table_on |
49 | mov esi,numpad_table_on |
50 | .num: cmp eax,[esi] |
50 | .num: cmp eax,[esi] |
51 | jne @f |
51 | jne @f |
52 | mov eax,[esi+4] |
52 | mov eax,[esi+4] |
53 | mov ebx,eax |
53 | mov ebx,eax |
54 | or eax,edx |
54 | or eax,edx |
55 | shr ebx,8 |
55 | shr ebx,8 |
56 | or ebx,0x0000FFFF |
56 | or ebx,0x0000FFFF |
57 | and eax,ebx |
57 | and eax,ebx |
58 | mov ecx,eax |
58 | mov ecx,eax |
59 | shr ecx,16 |
59 | shr ecx,16 |
60 | and cl,1 |
60 | and cl,1 |
61 | inc cl |
61 | inc cl |
62 | jmp .lp0 |
62 | jmp .lp0 |
63 | @@: add esi,8 |
63 | @@: add esi,8 |
64 | cmp dword[esi],0 |
64 | cmp dword[esi],0 |
65 | jne .num |
65 | jne .num |
66 | 66 | ||
67 | or eax,edx |
67 | or eax,edx |
68 | 68 | ||
69 | .lp0: test al,0x80 |
69 | .lp0: test al,0x80 |
70 | jnz still.skip_write |
70 | jnz still.skip_write |
71 | ;-------------------------------------- |
71 | ;-------------------------------------- |
72 | ; it is CAPS LOCK correct processing for chars |
72 | ; it is CAPS LOCK correct processing for chars |
73 | test [shi], 0x00000040 ; CAPS LOCK is on? |
73 | test [shi], 0x00000040 ; CAPS LOCK is on? |
74 | jz .no_caps_lock |
74 | jz .no_caps_lock |
75 | cmp ecx,1 |
75 | cmp ecx,1 |
76 | jnz @f |
76 | jnz @f |
77 | inc ecx |
77 | inc ecx |
78 | jmp .no_caps_lock |
78 | jmp .no_caps_lock |
79 | @@: |
79 | @@: |
80 | cmp ecx,2 |
80 | cmp ecx,2 |
81 | jnz .no_caps_lock |
81 | jnz .no_caps_lock |
82 | dec ecx |
82 | dec ecx |
83 | .no_caps_lock: |
83 | .no_caps_lock: |
84 | ;-------------------------------------- |
84 | ;-------------------------------------- |
- | 85 | ; alt gr pressed? |
|
- | 86 | test [shi], 0x00000020 |
|
- | 87 | jz .no_alt_gr |
|
- | 88 | mov ecx, 3 |
|
- | 89 | .no_alt_gr: |
|
- | 90 | ;-------------------------------------- |
|
85 | push eax |
91 | push eax |
86 | mcall 26,2,,key1 |
92 | mcall 26,2,,key1 |
87 | pop eax |
93 | pop eax |
88 | 94 | ||
89 | mov [chr],eax |
95 | mov [chr],eax |
90 | 96 | ||
91 | cmp [bot_mode],0 |
97 | cmp [bot_mode],0 |
92 | je @f |
98 | je @f |
93 | mov ebx,eax |
99 | mov ebx,eax |
94 | mov al,2 |
100 | mov al,2 |
95 | call [bot_dlg_handler] |
101 | call [bot_dlg_handler] |
96 | jmp still.skip_write |
102 | jmp still.skip_write |
97 | @@: |
103 | @@: |
98 | 104 | ||
99 | mov esi,accel_table_main |
105 | mov esi,accel_table_main |
100 | .acc: cmp eax,[esi] |
106 | .acc: cmp eax,[esi] |
101 | jne @f |
107 | jne @f |
102 | test [secure_sel],1 |
108 | test [secure_sel],1 |
103 | jz .lp1 |
109 | jz .lp1 |
104 | m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
110 | m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
105 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
111 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
106 | .lp1: mov [s_status],0 |
112 | .lp1: mov [s_status],0 |
107 | call dword[esi+4] |
113 | call dword[esi+4] |
108 | call editor_check_for_changes |
114 | call editor_check_for_changes |
109 | jmp still |
115 | jmp still |
110 | @@: add esi,8 |
116 | @@: add esi,8 |
111 | cmp dword[esi],0 |
117 | cmp dword[esi],0 |
112 | jne .acc |
118 | jne .acc |
113 | 119 | ||
114 | test [chr],KM_CTRLALT |
120 | test [chr],KM_CTRLALT |
115 | jnz still.skip_write |
121 | jnz still.skip_write |
116 | 122 | ||
117 | mov [s_status],0 |
123 | mov [s_status],0 |
118 | 124 | ||
119 | movzx eax,byte[chr] |
125 | movzx eax,byte[chr] |
120 | movzx eax,[eax+key0] |
126 | movzx eax,[eax+key0] |
121 | or al,al |
127 | or al,al |
122 | jz still.skip_write |
128 | jz still.skip_write |
123 | movzx eax,[eax+key1] |
129 | movzx eax,[eax+key1] |
124 | push eax |
130 | push eax |
125 | 131 | ||
126 | test [secure_sel],1 |
132 | test [secure_sel],1 |
127 | jz .lp2 |
133 | jz .lp2 |
128 | m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
134 | m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
129 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
135 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
130 | jmp .put |
136 | jmp .put |
131 | .lp2: call delete_selection |
137 | .lp2: call delete_selection |
132 | 138 | ||
133 | test [auto_braces],1 |
139 | test [auto_braces],1 |
134 | jz .put |
140 | jz .put |
135 | cmp al,'[' |
141 | cmp al,'[' |
136 | jne @f |
142 | jne @f |
137 | mov al,']' |
143 | mov al,']' |
138 | call .lp3 |
144 | call .lp3 |
139 | dec [cur_editor.Caret.X] |
145 | dec [cur_editor.Caret.X] |
140 | jmp .put |
146 | jmp .put |
141 | @@: cmp al,'(' |
147 | @@: cmp al,'(' |
142 | jne @f |
148 | jne @f |
143 | mov al,')' |
149 | mov al,')' |
144 | call .lp3 |
150 | call .lp3 |
145 | dec [cur_editor.Caret.X] |
151 | dec [cur_editor.Caret.X] |
146 | jmp .put |
152 | jmp .put |
147 | @@: cmp al,'{' |
153 | @@: cmp al,'{' |
148 | jne .put |
154 | jne .put |
149 | mov al,'}' |
155 | mov al,'}' |
150 | call .lp3 |
156 | call .lp3 |
151 | dec [cur_editor.Caret.X] |
157 | dec [cur_editor.Caret.X] |
152 | 158 | ||
153 | .put: pop eax |
159 | .put: pop eax |
154 | push still editor_check_for_changes |
160 | push still editor_check_for_changes |
155 | inc [cur_editor.SelStart.X] |
161 | inc [cur_editor.SelStart.X] |
156 | .lp3: push [cur_editor.Caret.X] eax |
162 | .lp3: push [cur_editor.Caret.X] eax |
157 | inc dword[esp+4] |
163 | inc dword[esp+4] |
158 | mov eax,1 |
164 | mov eax,1 |
159 | jmp key.tab.direct |
165 | jmp key.tab.direct |
160 | 166 | ||
161 | ;----------------------------------------------------------------------------- |
167 | ;----------------------------------------------------------------------------- |
162 | proc key.ctrl_a ;///// SELECT ALL DOCUMENT /////////////////////////////////// |
168 | proc key.ctrl_a ;///// SELECT ALL DOCUMENT /////////////////////////////////// |
163 | ;----------------------------------------------------------------------------- |
169 | ;----------------------------------------------------------------------------- |
164 | xor eax,eax |
170 | xor eax,eax |
165 | mov [cur_editor.SelStart.X],eax |
171 | mov [cur_editor.SelStart.X],eax |
166 | mov [cur_editor.SelStart.Y],eax |
172 | mov [cur_editor.SelStart.Y],eax |
167 | mov ecx,[cur_editor.Lines.Count] |
173 | mov ecx,[cur_editor.Lines.Count] |
168 | dec ecx |
174 | dec ecx |
169 | mov [cur_editor.Caret.Y],ecx |
175 | mov [cur_editor.Caret.Y],ecx |
170 | call get_line_offset |
176 | call get_line_offset |
171 | call get_real_length |
177 | call get_real_length |
172 | mov [cur_editor.Caret.X],eax |
178 | mov [cur_editor.Caret.X],eax |
173 | call draw_editor |
179 | call draw_editor |
174 | ret |
180 | ret |
175 | endp |
181 | endp |
176 | 182 | ||
177 | ;----------------------------------------------------------------------------- |
183 | ;----------------------------------------------------------------------------- |
178 | proc key.ctrl_o ;///// ENTER OPEN FILENAME /////////////////////////////////// |
184 | proc key.ctrl_o ;///// ENTER OPEN FILENAME /////////////////////////////////// |
179 | ;----------------------------------------------------------------------------- |
185 | ;----------------------------------------------------------------------------- |
180 | mov [bot_mode2],0 |
186 | mov [bot_mode2],0 |
181 | 187 | ||
182 | .direct: |
188 | .direct: |
183 | cmp [bot_mode2], 2 |
189 | cmp [bot_mode2], 2 |
184 | je .ask |
190 | je .ask |
185 | mov [s_status],s_enter_filename |
191 | mov [s_status],s_enter_filename |
186 | jmp .ask1 |
192 | jmp .ask1 |
187 | 193 | ||
188 | .ask: |
194 | .ask: |
189 | mov [s_status],s_ask_save |
195 | mov [s_status],s_ask_save |
190 | .ask1: |
196 | .ask1: |
191 | mov [bot_mode],1 |
197 | mov [bot_mode],1 |
192 | mov [bot_dlg_height],16*2+4*2-1 |
198 | mov [bot_dlg_height],16*2+4*2-1 |
193 | mov [bot_dlg_handler],osdlg_handler |
199 | mov [bot_dlg_handler],osdlg_handler |
194 | mov [focused_tb],tb_opensave |
200 | mov [focused_tb],tb_opensave |
195 | 201 | ||
196 | @@: mov al,[tb_opensave.length] |
202 | @@: mov al,[tb_opensave.length] |
197 | mov [tb_opensave.pos.x],al |
203 | mov [tb_opensave.pos.x],al |
198 | mov [tb_opensave.sel.x],0 |
204 | mov [tb_opensave.sel.x],0 |
199 | mov [tb_casesen],0;1 |
205 | mov [tb_casesen],0;1 |
200 | call drawwindow |
206 | call drawwindow |
201 | ret |
207 | ret |
202 | endp |
208 | endp |
203 | 209 | ||
204 | ;----------------------------------------------------------------------------- |
210 | ;----------------------------------------------------------------------------- |
205 | proc key.ctrl_s ;///// ENTER SAVE FILENAME /////////////////////////////////// |
211 | proc key.ctrl_s ;///// ENTER SAVE FILENAME /////////////////////////////////// |
206 | ;----------------------------------------------------------------------------- |
212 | ;----------------------------------------------------------------------------- |
207 | cmp [cur_editor.FilePath], 0 |
213 | cmp [cur_editor.FilePath], 0 |
208 | je key.shift_ctrl_s |
214 | je key.shift_ctrl_s |
209 | cmp [cur_editor.Modified],0 |
215 | cmp [cur_editor.Modified],0 |
210 | je .exit |
216 | je .exit |
211 | call save_file |
217 | call save_file |
212 | call drawwindow |
218 | call drawwindow |
213 | .exit: |
219 | .exit: |
214 | ret |
220 | ret |
215 | 221 | ||
216 | key.shift_ctrl_s: |
222 | key.shift_ctrl_s: |
217 | mov [bot_mode2],1 |
223 | mov [bot_mode2],1 |
218 | jmp key.ctrl_o.direct |
224 | jmp key.ctrl_o.direct |
219 | endp |
225 | endp |
220 | 226 | ||
221 | ;----------------------------------------------------------------------------- |
227 | ;----------------------------------------------------------------------------- |
222 | proc key.ctrl_n ;///// CREATE NEW FILE (TAB) ///////////////////////////////// |
228 | proc key.ctrl_n ;///// CREATE NEW FILE (TAB) ///////////////////////////////// |
223 | ;----------------------------------------------------------------------------- |
229 | ;----------------------------------------------------------------------------- |
224 | call create_tab |
230 | call create_tab |
225 | ret |
231 | ret |
226 | endp |
232 | endp |
227 | 233 | ||
228 | ;----------------------------------------------------------------------------- |
234 | ;----------------------------------------------------------------------------- |
229 | proc key.ctrl_f ;///// ENTER KEYWORD TO FIND ///////////////////////////////// |
235 | proc key.ctrl_f ;///// ENTER KEYWORD TO FIND ///////////////////////////////// |
230 | ;----------------------------------------------------------------------------- |
236 | ;----------------------------------------------------------------------------- |
231 | mov [bot_mode2],0 |
237 | mov [bot_mode2],0 |
232 | mov [bot_dlg_height],16*2+4*2-1 |
238 | mov [bot_dlg_height],16*2+4*2-1 |
233 | 239 | ||
234 | mov [s_status],s_enter_text_to_find |
240 | mov [s_status],s_enter_text_to_find |
235 | 241 | ||
236 | .direct: |
242 | .direct: |
237 | mov [bot_mode],1 |
243 | mov [bot_mode],1 |
238 | mov [bot_dlg_handler],finddlg_handler |
244 | mov [bot_dlg_handler],finddlg_handler |
239 | mov [focused_tb],tb_find |
245 | mov [focused_tb],tb_find |
240 | 246 | ||
241 | mov ecx,[s_search.size] |
247 | mov ecx,[s_search.size] |
242 | mov [tb_find.length],cl |
248 | mov [tb_find.length],cl |
243 | jecxz @f |
249 | jecxz @f |
244 | mov esi,s_search |
250 | mov esi,s_search |
245 | mov edi,tb_find.text |
251 | mov edi,tb_find.text |
246 | cld |
252 | cld |
247 | rep movsb |
253 | rep movsb |
248 | 254 | ||
249 | @@: mov al,[tb_find.length] |
255 | @@: mov al,[tb_find.length] |
250 | mov [tb_find.pos.x],al |
256 | mov [tb_find.pos.x],al |
251 | mov [tb_find.sel.x],0 |
257 | mov [tb_find.sel.x],0 |
252 | mov [tb_casesen],0 |
258 | mov [tb_casesen],0 |
253 | call drawwindow |
259 | call drawwindow |
254 | ret |
260 | ret |
255 | endp |
261 | endp |
256 | 262 | ||
257 | proc key.ctrl_h |
263 | proc key.ctrl_h |
258 | mov [bot_mode2],1 |
264 | mov [bot_mode2],1 |
259 | mov [bot_dlg_height],16*3+4*2+1 |
265 | mov [bot_dlg_height],16*3+4*2+1 |
260 | 266 | ||
261 | mov [s_status],s_enter_text_to_replace |
267 | mov [s_status],s_enter_text_to_replace |
262 | 268 | ||
263 | jmp key.ctrl_f.direct |
269 | jmp key.ctrl_f.direct |
264 | endp |
270 | endp |
265 | 271 | ||
266 | proc key.ctrl_g |
272 | proc key.ctrl_g |
267 | ret |
273 | ret |
268 | @^ |
274 | @^ |
269 | mov [bot_mode2],0 |
275 | mov [bot_mode2],0 |
270 | mov [bot_dlg_height],16*2+4*2-1 |
276 | mov [bot_dlg_height],16*2+4*2-1 |
271 | 277 | ||
272 | mov [bot_mode],1 |
278 | mov [bot_mode],1 |
273 | mov [bot_dlg_handler],gotodlg_handler |
279 | mov [bot_dlg_handler],gotodlg_handler |
274 | mov [focused_tb],tb_gotorow |
280 | mov [focused_tb],tb_gotorow |
275 | 281 | ||
276 | mov al,[tb_gotorow.length] |
282 | mov al,[tb_gotorow.length] |
277 | mov [tb_gotorow.pos.x],al |
283 | mov [tb_gotorow.pos.x],al |
278 | mov [tb_gotorow.sel.x],0 |
284 | mov [tb_gotorow.sel.x],0 |
279 | mov [tb_casesen],0 |
285 | mov [tb_casesen],0 |
280 | call drawwindow |
286 | call drawwindow |
281 | ret |
287 | ret |
282 | ^@ |
288 | ^@ |
283 | endp |
289 | endp |
284 | 290 | ||
285 | ;----------------------------------------------------------------------------- |
291 | ;----------------------------------------------------------------------------- |
286 | proc key.ctrl_left ;///// GO TO PREVIOUS WORD //////////////////////////////// |
292 | proc key.ctrl_left ;///// GO TO PREVIOUS WORD //////////////////////////////// |
287 | ;----------------------------------------------------------------------------- |
293 | ;----------------------------------------------------------------------------- |
288 | call clear_selection |
294 | call clear_selection |
289 | 295 | ||
290 | ;----------------------------------------------------------------------------- |
296 | ;----------------------------------------------------------------------------- |
291 | key.shift_ctrl_left: ;///// GO TO PREVIOUS WORD, WITH SELECTION ///////// |
297 | key.shift_ctrl_left: ;///// GO TO PREVIOUS WORD, WITH SELECTION ///////// |
292 | ;----------------------------------------------------------------------------- |
298 | ;----------------------------------------------------------------------------- |
293 | mov ebx,[cur_editor.Caret.Y] |
299 | mov ebx,[cur_editor.Caret.Y] |
294 | mov edx,[cur_editor.Caret.X] |
300 | mov edx,[cur_editor.Caret.X] |
295 | cld |
301 | cld |
296 | mov ecx,ebx |
302 | mov ecx,ebx |
297 | call get_line_offset |
303 | call get_line_offset |
298 | .lp1: cmp edx,[esi+EDITOR_LINE_DATA.Size] |
304 | .lp1: cmp edx,[esi+EDITOR_LINE_DATA.Size] |
299 | jle @f |
305 | jle @f |
300 | mov edx,[esi+EDITOR_LINE_DATA.Size] |
306 | mov edx,[esi+EDITOR_LINE_DATA.Size] |
301 | @@: dec edx |
307 | @@: dec edx |
302 | jl .nx1 |
308 | jl .nx1 |
303 | add esi,sizeof.EDITOR_LINE_DATA |
309 | add esi,sizeof.EDITOR_LINE_DATA |
304 | add esi,edx |
310 | add esi,edx |
305 | mov ecx,edx |
311 | mov ecx,edx |
306 | @@: push ecx |
312 | @@: push ecx |
307 | mov edi,symbols_ex |
313 | mov edi,symbols_ex |
308 | mov ecx,symbols_ex.size+symbols.size |
314 | mov ecx,symbols_ex.size+symbols.size |
309 | mov al,[esi] |
315 | mov al,[esi] |
310 | dec esi |
316 | dec esi |
311 | repne scasb |
317 | repne scasb |
312 | pop ecx |
318 | pop ecx |
313 | jne @f |
319 | jne @f |
314 | dec edx |
320 | dec edx |
315 | dec ecx |
321 | dec ecx |
316 | jnz @b |
322 | jnz @b |
317 | .nx1: dec ebx |
323 | .nx1: dec ebx |
318 | js .exit.2 |
324 | js .exit.2 |
319 | mov ecx,ebx |
325 | mov ecx,ebx |
320 | call get_line_offset |
326 | call get_line_offset |
321 | mov edx,[esi+EDITOR_LINE_DATA.Size] |
327 | mov edx,[esi+EDITOR_LINE_DATA.Size] |
322 | dec edx |
328 | dec edx |
323 | jmp .lp1 |
329 | jmp .lp1 |
324 | @@: |
330 | @@: |
325 | mov ecx,ebx |
331 | mov ecx,ebx |
326 | call get_line_offset |
332 | call get_line_offset |
327 | .lp2: cmp edx,[esi+EDITOR_LINE_DATA.Size] |
333 | .lp2: cmp edx,[esi+EDITOR_LINE_DATA.Size] |
328 | jle @f |
334 | jle @f |
329 | mov edx,[esi+EDITOR_LINE_DATA.Size] |
335 | mov edx,[esi+EDITOR_LINE_DATA.Size] |
330 | @@: or edx,edx |
336 | @@: or edx,edx |
331 | jl .nx2 |
337 | jl .nx2 |
332 | add esi,sizeof.EDITOR_LINE_DATA |
338 | add esi,sizeof.EDITOR_LINE_DATA |
333 | add esi,edx |
339 | add esi,edx |
334 | @@: mov edi,symbols_ex |
340 | @@: mov edi,symbols_ex |
335 | mov ecx,symbols_ex.size+symbols.size |
341 | mov ecx,symbols_ex.size+symbols.size |
336 | mov al,[esi] |
342 | mov al,[esi] |
337 | dec esi |
343 | dec esi |
338 | repne scasb |
344 | repne scasb |
339 | je @f |
345 | je @f |
340 | dec edx |
346 | dec edx |
341 | jns @b |
347 | jns @b |
342 | jmp @f |
348 | jmp @f |
343 | .nx2: dec ebx |
349 | .nx2: dec ebx |
344 | js .exit.2 |
350 | js .exit.2 |
345 | mov ecx,ebx |
351 | mov ecx,ebx |
346 | call get_line_offset |
352 | call get_line_offset |
347 | mov edx,[esi+EDITOR_LINE_DATA.Size] |
353 | mov edx,[esi+EDITOR_LINE_DATA.Size] |
348 | dec edx |
354 | dec edx |
349 | jmp .lp2 |
355 | jmp .lp2 |
350 | @@: |
356 | @@: |
351 | inc edx |
357 | inc edx |
352 | mov [cur_editor.Caret.Y],ebx |
358 | mov [cur_editor.Caret.Y],ebx |
353 | mov [cur_editor.Caret.X],edx |
359 | mov [cur_editor.Caret.X],edx |
354 | test [chr],KM_SHIFT |
360 | test [chr],KM_SHIFT |
355 | jnz @f |
361 | jnz @f |
356 | mov [cur_editor.SelStart.Y],ebx |
362 | mov [cur_editor.SelStart.Y],ebx |
357 | mov [cur_editor.SelStart.X],edx |
363 | mov [cur_editor.SelStart.X],edx |
358 | @@: sub ebx,[cur_editor.TopLeft.Y] |
364 | @@: sub ebx,[cur_editor.TopLeft.Y] |
359 | jge @f |
365 | jge @f |
360 | add [cur_editor.TopLeft.Y],ebx |
366 | add [cur_editor.TopLeft.Y],ebx |
361 | @@: mov eax,edx |
367 | @@: mov eax,edx |
362 | sub eax,[cur_editor.TopLeft.X] |
368 | sub eax,[cur_editor.TopLeft.X] |
363 | cmp eax,[columns.scr] |
369 | cmp eax,[columns.scr] |
364 | jl @f |
370 | jl @f |
365 | sub eax,[columns.scr] |
371 | sub eax,[columns.scr] |
366 | inc eax |
372 | inc eax |
367 | add [cur_editor.TopLeft.X],eax |
373 | add [cur_editor.TopLeft.X],eax |
368 | jmp .exit |
374 | jmp .exit |
369 | @@: cmp edx,[cur_editor.TopLeft.X] |
375 | @@: cmp edx,[cur_editor.TopLeft.X] |
370 | jge .exit |
376 | jge .exit |
371 | mov [cur_editor.TopLeft.X],edx |
377 | mov [cur_editor.TopLeft.X],edx |
372 | .exit: |
378 | .exit: |
373 | call editor_check_for_changes |
379 | call editor_check_for_changes |
374 | .exit.2: |
380 | .exit.2: |
375 | ret |
381 | ret |
376 | endp |
382 | endp |
377 | 383 | ||
378 | ;----------------------------------------------------------------------------- |
384 | ;----------------------------------------------------------------------------- |
379 | proc key.ctrl_right ;///// GO TO NEXT WORD /////////////////////////////////// |
385 | proc key.ctrl_right ;///// GO TO NEXT WORD /////////////////////////////////// |
380 | ;----------------------------------------------------------------------------- |
386 | ;----------------------------------------------------------------------------- |
381 | call clear_selection |
387 | call clear_selection |
382 | 388 | ||
383 | ;----------------------------------------------------------------------------- |
389 | ;----------------------------------------------------------------------------- |
384 | key.shift_ctrl_right: ;///// GO TO NEXT WORD, WITH SELECTION //////////// |
390 | key.shift_ctrl_right: ;///// GO TO NEXT WORD, WITH SELECTION //////////// |
385 | ;----------------------------------------------------------------------------- |
391 | ;----------------------------------------------------------------------------- |
386 | mov ebx,[cur_editor.Caret.Y] |
392 | mov ebx,[cur_editor.Caret.Y] |
387 | mov edx,[cur_editor.Caret.X] |
393 | mov edx,[cur_editor.Caret.X] |
388 | cld |
394 | cld |
389 | .lp1: mov ecx,ebx |
395 | .lp1: mov ecx,ebx |
390 | call get_line_offset |
396 | call get_line_offset |
391 | mov ecx,[esi+EDITOR_LINE_DATA.Size] |
397 | mov ecx,[esi+EDITOR_LINE_DATA.Size] |
392 | cmp edx,ecx |
398 | cmp edx,ecx |
393 | jge .nx1 |
399 | jge .nx1 |
394 | add esi,sizeof.EDITOR_LINE_DATA |
400 | add esi,sizeof.EDITOR_LINE_DATA |
395 | add esi,edx |
401 | add esi,edx |
396 | sub ecx,edx |
402 | sub ecx,edx |
397 | @@: push ecx |
403 | @@: push ecx |
398 | mov edi,symbols_ex |
404 | mov edi,symbols_ex |
399 | mov ecx,symbols_ex.size+symbols.size |
405 | mov ecx,symbols_ex.size+symbols.size |
400 | lodsb |
406 | lodsb |
401 | repne scasb |
407 | repne scasb |
402 | pop ecx |
408 | pop ecx |
403 | je @f |
409 | je @f |
404 | inc edx |
410 | inc edx |
405 | dec ecx |
411 | dec ecx |
406 | jnz @b |
412 | jnz @b |
407 | .nx1: inc ebx |
413 | .nx1: inc ebx |
408 | cmp ebx,[cur_editor.Lines.Count] |
414 | cmp ebx,[cur_editor.Lines.Count] |
409 | jge .exit.2 |
415 | jge .exit.2 |
410 | xor edx,edx |
416 | xor edx,edx |
411 | jmp .lp1 |
417 | jmp .lp1 |
412 | @@: |
418 | @@: |
413 | 419 | ||
414 | .lp2: mov ecx,ebx |
420 | .lp2: mov ecx,ebx |
415 | call get_line_offset |
421 | call get_line_offset |
416 | mov ecx,[esi+EDITOR_LINE_DATA.Size] |
422 | mov ecx,[esi+EDITOR_LINE_DATA.Size] |
417 | cmp edx,ecx |
423 | cmp edx,ecx |
418 | jge .nx2 |
424 | jge .nx2 |
419 | add esi,sizeof.EDITOR_LINE_DATA |
425 | add esi,sizeof.EDITOR_LINE_DATA |
420 | add esi,edx |
426 | add esi,edx |
421 | sub ecx,edx |
427 | sub ecx,edx |
422 | @@: push ecx |
428 | @@: push ecx |
423 | mov edi,symbols_ex |
429 | mov edi,symbols_ex |
424 | mov ecx,symbols_ex.size+symbols.size |
430 | mov ecx,symbols_ex.size+symbols.size |
425 | lodsb |
431 | lodsb |
426 | repne scasb |
432 | repne scasb |
427 | pop ecx |
433 | pop ecx |
428 | jne @f |
434 | jne @f |
429 | inc edx |
435 | inc edx |
430 | dec ecx |
436 | dec ecx |
431 | jnz @b |
437 | jnz @b |
432 | .nx2: inc ebx |
438 | .nx2: inc ebx |
433 | cmp ebx,[cur_editor.Lines.Count] |
439 | cmp ebx,[cur_editor.Lines.Count] |
434 | jge .exit.2 |
440 | jge .exit.2 |
435 | xor edx,edx |
441 | xor edx,edx |
436 | jmp .lp2 |
442 | jmp .lp2 |
437 | @@: |
443 | @@: |
438 | mov [cur_editor.Caret.Y],ebx |
444 | mov [cur_editor.Caret.Y],ebx |
439 | mov [cur_editor.Caret.X],edx |
445 | mov [cur_editor.Caret.X],edx |
440 | test [chr],KM_SHIFT |
446 | test [chr],KM_SHIFT |
441 | jnz @f |
447 | jnz @f |
442 | mov [cur_editor.SelStart.Y],ebx |
448 | mov [cur_editor.SelStart.Y],ebx |
443 | mov [cur_editor.SelStart.X],edx |
449 | mov [cur_editor.SelStart.X],edx |
444 | @@: sub ebx,[cur_editor.TopLeft.Y] |
450 | @@: sub ebx,[cur_editor.TopLeft.Y] |
445 | cmp ebx,[lines.scr] |
451 | cmp ebx,[lines.scr] |
446 | jl @f |
452 | jl @f |
447 | sub ebx,[lines.scr] |
453 | sub ebx,[lines.scr] |
448 | inc ebx |
454 | inc ebx |
449 | add [cur_editor.TopLeft.Y],ebx |
455 | add [cur_editor.TopLeft.Y],ebx |
450 | @@: mov eax,edx |
456 | @@: mov eax,edx |
451 | sub eax,[cur_editor.TopLeft.X] |
457 | sub eax,[cur_editor.TopLeft.X] |
452 | cmp eax,[columns.scr] |
458 | cmp eax,[columns.scr] |
453 | jl @f |
459 | jl @f |
454 | sub eax,[columns.scr] |
460 | sub eax,[columns.scr] |
455 | inc eax |
461 | inc eax |
456 | add [cur_editor.TopLeft.X],eax |
462 | add [cur_editor.TopLeft.X],eax |
457 | jmp .exit |
463 | jmp .exit |
458 | @@: cmp edx,[cur_editor.TopLeft.X] |
464 | @@: cmp edx,[cur_editor.TopLeft.X] |
459 | jge .exit |
465 | jge .exit |
460 | mov [cur_editor.TopLeft.X],edx |
466 | mov [cur_editor.TopLeft.X],edx |
461 | .exit: |
467 | .exit: |
462 | call editor_check_for_changes |
468 | call editor_check_for_changes |
463 | .exit.2: |
469 | .exit.2: |
464 | ret |
470 | ret |
465 | endp |
471 | endp |
466 | 472 | ||
467 | ;----------------------------------------------------------------------------- |
473 | ;----------------------------------------------------------------------------- |
468 | proc key.ctrl_x |
474 | proc key.ctrl_x |
469 | cmp [sel.selected],0 |
475 | cmp [sel.selected],0 |
470 | je @f |
476 | je @f |
471 | call key.ctrl_c |
477 | call key.ctrl_c |
472 | call key.del |
478 | call key.del |
473 | mov [cur_editor.Modified],1 |
479 | mov [cur_editor.Modified],1 |
474 | @@: ret |
480 | @@: ret |
475 | endp |
481 | endp |
476 | 482 | ||
477 | ;----------------------------------------------------------------------------- |
483 | ;----------------------------------------------------------------------------- |
478 | proc key.ctrl_c |
484 | proc key.ctrl_c |
479 | mov [copy_size],0 |
485 | mov [copy_size],0 |
480 | cmp [sel.selected],0 |
486 | cmp [sel.selected],0 |
481 | je .exit |
487 | je .exit |
482 | 488 | ||
483 | call get_selection_size |
489 | call get_selection_size |
484 | stdcall mem.ReAlloc,[copy_buf],eax |
490 | stdcall mem.ReAlloc,[copy_buf],eax |
485 | mov [copy_buf],eax |
491 | mov [copy_buf],eax |
486 | 492 | ||
487 | cld |
493 | cld |
488 | mov eax,[sel.begin.y] |
494 | mov eax,[sel.begin.y] |
489 | cmp eax,[sel.end.y] |
495 | cmp eax,[sel.end.y] |
490 | je .single_line |
496 | je .single_line |
491 | mov ecx,[sel.begin.y] |
497 | mov ecx,[sel.begin.y] |
492 | call get_line_offset |
498 | call get_line_offset |
493 | inc ecx |
499 | inc ecx |
494 | push ecx |
500 | push ecx |
495 | mov edi,[copy_buf] |
501 | mov edi,[copy_buf] |
496 | call get_real_length |
502 | call get_real_length |
497 | sub eax,[sel.begin.x] |
503 | sub eax,[sel.begin.x] |
498 | jge @f |
504 | jge @f |
499 | xor eax,eax |
505 | xor eax,eax |
500 | @@: add esi,[sel.begin.x] |
506 | @@: add esi,[sel.begin.x] |
501 | add esi,sizeof.EDITOR_LINE_DATA |
507 | add esi,sizeof.EDITOR_LINE_DATA |
502 | mov [edi+EDITOR_LINE_DATA.Size],eax |
508 | mov [edi+EDITOR_LINE_DATA.Size],eax |
503 | add edi,sizeof.EDITOR_LINE_DATA |
509 | add edi,sizeof.EDITOR_LINE_DATA |
504 | mov ecx,eax |
510 | mov ecx,eax |
505 | jecxz @f |
511 | jecxz @f |
506 | rep movsb |
512 | rep movsb |
507 | @@: mov ecx,[sel.end.y] |
513 | @@: mov ecx,[sel.end.y] |
508 | call get_line_offset |
514 | call get_line_offset |
509 | pop ecx |
515 | pop ecx |
510 | cmp ecx,[sel.end.y] |
516 | cmp ecx,[sel.end.y] |
511 | je @f |
517 | je @f |
512 | mov eax,esi |
518 | mov eax,esi |
513 | call get_line_offset |
519 | call get_line_offset |
514 | sub eax,esi |
520 | sub eax,esi |
515 | mov ecx,eax |
521 | mov ecx,eax |
516 | rep movsb |
522 | rep movsb |
517 | mov ecx,[sel.end.y] |
523 | mov ecx,[sel.end.y] |
518 | @@: call get_line_offset |
524 | @@: call get_line_offset |
519 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
525 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
520 | add esi,sizeof.EDITOR_LINE_DATA |
526 | add esi,sizeof.EDITOR_LINE_DATA |
521 | cmp eax,[sel.end.x] |
527 | cmp eax,[sel.end.x] |
522 | jle @f |
528 | jle @f |
523 | mov eax,[sel.end.x] |
529 | mov eax,[sel.end.x] |
524 | @@: mov ebx,edi |
530 | @@: mov ebx,edi |
525 | mov [edi+EDITOR_LINE_DATA.Size],eax |
531 | mov [edi+EDITOR_LINE_DATA.Size],eax |
526 | add edi,sizeof.EDITOR_LINE_DATA |
532 | add edi,sizeof.EDITOR_LINE_DATA |
527 | mov ecx,eax |
533 | mov ecx,eax |
528 | jecxz @f |
534 | jecxz @f |
529 | rep movsb |
535 | rep movsb |
530 | sub eax,[sel.end.x] |
536 | sub eax,[sel.end.x] |
531 | jz @f |
537 | jz @f |
532 | neg eax |
538 | neg eax |
533 | mov ecx,eax |
539 | mov ecx,eax |
534 | add [ebx],eax |
540 | add [ebx],eax |
535 | mov al,' ' |
541 | mov al,' ' |
536 | rep stosb |
542 | rep stosb |
537 | @@: sub edi,[copy_buf] |
543 | @@: sub edi,[copy_buf] |
538 | mov [copy_size],edi |
544 | mov [copy_size],edi |
539 | mov eax,[sel.end.y] |
545 | mov eax,[sel.end.y] |
540 | sub eax,[sel.begin.y] |
546 | sub eax,[sel.begin.y] |
541 | inc eax |
547 | inc eax |
542 | mov [copy_count],eax |
548 | mov [copy_count],eax |
543 | .exit: |
549 | .exit: |
544 | ret |
550 | ret |
545 | 551 | ||
546 | .single_line: |
552 | .single_line: |
547 | mov eax,[sel.end.x] |
553 | mov eax,[sel.end.x] |
548 | sub eax,[sel.begin.x] |
554 | sub eax,[sel.begin.x] |
549 | mov edi,[copy_buf] |
555 | mov edi,[copy_buf] |
550 | mov [edi+EDITOR_LINE_DATA.Size],eax |
556 | mov [edi+EDITOR_LINE_DATA.Size],eax |
551 | add edi,sizeof.EDITOR_LINE_DATA |
557 | add edi,sizeof.EDITOR_LINE_DATA |
552 | mov ecx,[sel.begin.y] |
558 | mov ecx,[sel.begin.y] |
553 | call get_line_offset |
559 | call get_line_offset |
554 | mov ebx,[sel.begin.x] |
560 | mov ebx,[sel.begin.x] |
555 | mov ecx,[sel.end.x] |
561 | mov ecx,[sel.end.x] |
556 | cmp ebx,[esi+EDITOR_LINE_DATA.Size] |
562 | cmp ebx,[esi+EDITOR_LINE_DATA.Size] |
557 | jge .add_spaces |
563 | jge .add_spaces |
558 | cmp ecx,[esi+EDITOR_LINE_DATA.Size] |
564 | cmp ecx,[esi+EDITOR_LINE_DATA.Size] |
559 | jle .lp1 |
565 | jle .lp1 |
560 | mov ecx,[esi+EDITOR_LINE_DATA.Size] |
566 | mov ecx,[esi+EDITOR_LINE_DATA.Size] |
561 | .lp1: sub ecx,[sel.begin.x] |
567 | .lp1: sub ecx,[sel.begin.x] |
562 | sub eax,ecx |
568 | sub eax,ecx |
563 | lea esi,[esi+ebx+sizeof.EDITOR_LINE_DATA] |
569 | lea esi,[esi+ebx+sizeof.EDITOR_LINE_DATA] |
564 | rep movsb |
570 | rep movsb |
565 | 571 | ||
566 | .add_spaces: |
572 | .add_spaces: |
567 | mov ecx,eax |
573 | mov ecx,eax |
568 | mov al,' ' |
574 | mov al,' ' |
569 | jecxz @b |
575 | jecxz @b |
570 | rep stosb |
576 | rep stosb |
571 | jmp @b |
577 | jmp @b |
572 | endp |
578 | endp |
573 | 579 | ||
574 | ;----------------------------------------------------------------------------- |
580 | ;----------------------------------------------------------------------------- |
575 | proc key.ctrl_v |
581 | proc key.ctrl_v |
576 | cmp [copy_size],0 |
582 | cmp [copy_size],0 |
577 | je .exit |
583 | je .exit |
578 | 584 | ||
579 | call delete_selection |
585 | call delete_selection |
580 | 586 | ||
581 | mov eax,[copy_size] |
587 | mov eax,[copy_size] |
582 | call editor_realloc_lines |
588 | call editor_realloc_lines |
583 | 589 | ||
584 | mov ebx,[cur_editor.Lines.Size] |
590 | mov ebx,[cur_editor.Lines.Size] |
585 | add ebx,[copy_size] |
591 | add ebx,[copy_size] |
586 | mov [cur_editor.Lines.Size],ebx |
592 | mov [cur_editor.Lines.Size],ebx |
587 | stdcall mem.ReAlloc,[cur_editor.Lines],ebx |
593 | stdcall mem.ReAlloc,[cur_editor.Lines],ebx |
588 | mov [cur_editor.Lines],eax |
594 | mov [cur_editor.Lines],eax |
589 | 595 | ||
590 | mov ecx,[cur_editor.Caret.Y] |
596 | mov ecx,[cur_editor.Caret.Y] |
591 | call get_line_offset |
597 | call get_line_offset |
592 | pushd [esi+EDITOR_LINE_DATA.Size] esi |
598 | pushd [esi+EDITOR_LINE_DATA.Size] esi |
593 | mov ecx,[cur_editor.Caret.X] |
599 | mov ecx,[cur_editor.Caret.X] |
594 | call line_add_spaces |
600 | call line_add_spaces |
595 | add [esp],eax |
601 | add [esp],eax |
596 | add esi,eax |
602 | add esi,eax |
597 | mov ecx,[copy_size] |
603 | mov ecx,[copy_size] |
598 | sub ecx,sizeof.EDITOR_LINE_DATA |
604 | sub ecx,sizeof.EDITOR_LINE_DATA |
599 | mov edi,[cur_editor.Lines] |
605 | mov edi,[cur_editor.Lines] |
600 | add edi,[cur_editor.Lines.Size] ;*** add edi,[edi-4] |
606 | add edi,[cur_editor.Lines.Size] ;*** add edi,[edi-4] |
601 | dec edi |
607 | dec edi |
602 | mov eax,esi |
608 | mov eax,esi |
603 | mov esi,edi |
609 | mov esi,edi |
604 | sub esi,ecx |
610 | sub esi,ecx |
605 | lea ecx,[eax+sizeof.EDITOR_LINE_DATA] |
611 | lea ecx,[eax+sizeof.EDITOR_LINE_DATA] |
606 | add ecx,[cur_editor.Caret.X] |
612 | add ecx,[cur_editor.Caret.X] |
607 | neg ecx |
613 | neg ecx |
608 | lea ecx,[esi+ecx+1] |
614 | lea ecx,[esi+ecx+1] |
609 | std |
615 | std |
610 | rep movsb |
616 | rep movsb |
611 | 617 | ||
612 | mov ecx,[copy_count] |
618 | mov ecx,[copy_count] |
613 | dec ecx |
619 | dec ecx |
614 | jz .single_line |
620 | jz .single_line |
615 | 621 | ||
616 | cld |
622 | cld |
617 | pop edi |
623 | pop edi |
618 | add edi,sizeof.EDITOR_LINE_DATA |
624 | add edi,sizeof.EDITOR_LINE_DATA |
619 | mov esi,[copy_buf] |
625 | mov esi,[copy_buf] |
620 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
626 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
621 | add esi,sizeof.EDITOR_LINE_DATA |
627 | add esi,sizeof.EDITOR_LINE_DATA |
622 | 628 | ||
623 | mov ebx,[cur_editor.Caret.X] |
629 | mov ebx,[cur_editor.Caret.X] |
624 | add eax,ebx |
630 | add eax,ebx |
625 | mov [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],eax |
631 | mov [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],eax |
626 | mov [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
632 | mov [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
627 | sub eax,ebx |
633 | sub eax,ebx |
628 | call .check_columns |
634 | call .check_columns |
629 | add edi,ebx |
635 | add edi,ebx |
630 | @@: push ecx |
636 | @@: push ecx |
631 | mov ecx,eax |
637 | mov ecx,eax |
632 | rep movsb |
638 | rep movsb |
633 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
639 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
634 | add esi,sizeof.EDITOR_LINE_DATA |
640 | add esi,sizeof.EDITOR_LINE_DATA |
635 | mov [edi+EDITOR_LINE_DATA.Size],eax |
641 | mov [edi+EDITOR_LINE_DATA.Size],eax |
636 | mov [edi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
642 | mov [edi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
637 | add edi,sizeof.EDITOR_LINE_DATA |
643 | add edi,sizeof.EDITOR_LINE_DATA |
638 | pop ecx |
644 | pop ecx |
639 | loop @b |
645 | loop @b |
640 | 646 | ||
641 | pop ecx |
647 | pop ecx |
642 | sub ecx,ebx |
648 | sub ecx,ebx |
643 | add [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],ecx |
649 | add [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],ecx |
644 | call .check_columns |
650 | call .check_columns |
645 | mov ecx,eax |
651 | mov ecx,eax |
646 | rep movsb |
652 | rep movsb |
647 | 653 | ||
648 | mov [cur_editor.Caret.X],eax |
654 | mov [cur_editor.Caret.X],eax |
649 | mov [cur_editor.SelStart.X],eax |
655 | mov [cur_editor.SelStart.X],eax |
650 | mov eax,[copy_count] |
656 | mov eax,[copy_count] |
651 | dec eax |
657 | dec eax |
652 | add [cur_editor.Caret.Y],eax |
658 | add [cur_editor.Caret.Y],eax |
653 | add [cur_editor.SelStart.Y],eax |
659 | add [cur_editor.SelStart.Y],eax |
654 | add [cur_editor.Lines.Count],eax |
660 | add [cur_editor.Lines.Count],eax |
655 | 661 | ||
656 | mov [cur_editor.Modified],1 |
662 | mov [cur_editor.Modified],1 |
657 | jmp .exit |
663 | jmp .exit |
658 | 664 | ||
659 | .single_line: |
665 | .single_line: |
660 | cld |
666 | cld |
661 | pop edi |
667 | pop edi |
662 | add edi,sizeof.EDITOR_LINE_DATA |
668 | add edi,sizeof.EDITOR_LINE_DATA |
663 | mov esi,[copy_buf] |
669 | mov esi,[copy_buf] |
664 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
670 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
665 | add esi,sizeof.EDITOR_LINE_DATA |
671 | add esi,sizeof.EDITOR_LINE_DATA |
666 | add [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],eax |
672 | add [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size],eax |
667 | and [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED |
673 | and [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED |
668 | or [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
674 | or [edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
669 | call .check_columns |
675 | call .check_columns |
670 | add edi,[cur_editor.Caret.X] |
676 | add edi,[cur_editor.Caret.X] |
671 | add esp,4 |
677 | add esp,4 |
672 | mov ecx,eax |
678 | mov ecx,eax |
673 | rep movsb |
679 | rep movsb |
674 | 680 | ||
675 | add [cur_editor.Caret.X],eax |
681 | add [cur_editor.Caret.X],eax |
676 | add [cur_editor.SelStart.X],eax |
682 | add [cur_editor.SelStart.X],eax |
677 | 683 | ||
678 | mov [cur_editor.Modified],1 |
684 | mov [cur_editor.Modified],1 |
679 | 685 | ||
680 | .exit: |
686 | .exit: |
681 | ret |
687 | ret |
682 | 688 | ||
683 | .check_columns: |
689 | .check_columns: |
684 | push eax |
690 | push eax |
685 | mov eax,[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size] |
691 | mov eax,[edi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size] |
686 | cmp eax,[cur_editor.Columns.Count] |
692 | cmp eax,[cur_editor.Columns.Count] |
687 | jbe @f |
693 | jbe @f |
688 | mov [cur_editor.Columns.Count],eax |
694 | mov [cur_editor.Columns.Count],eax |
689 | @@: pop eax |
695 | @@: pop eax |
690 | ret |
696 | ret |
691 | endp |
697 | endp |
692 | 698 | ||
693 | ;----------------------------------------------------------------------------- |
699 | ;----------------------------------------------------------------------------- |
694 | proc key.ctrl_d ;///// INSERT SEPARATOR ////////////////////////////////////// |
700 | proc key.ctrl_d ;///// INSERT SEPARATOR ////////////////////////////////////// |
695 | ;----------------------------------------------------------------------------- |
701 | ;----------------------------------------------------------------------------- |
696 | mov eax,90+sizeof.EDITOR_LINE_DATA |
702 | mov eax,90+sizeof.EDITOR_LINE_DATA |
697 | call editor_realloc_lines |
703 | call editor_realloc_lines |
698 | 704 | ||
699 | mov ecx,[cur_editor.Caret.Y] |
705 | mov ecx,[cur_editor.Caret.Y] |
700 | call get_line_offset |
706 | call get_line_offset |
701 | mov ebx,esi |
707 | mov ebx,esi |
702 | 708 | ||
703 | mov ecx,[cur_editor.Lines.Count] |
709 | mov ecx,[cur_editor.Lines.Count] |
704 | call get_line_offset |
710 | call get_line_offset |
705 | lea edi,[esi+90+sizeof.EDITOR_LINE_DATA] |
711 | lea edi,[esi+90+sizeof.EDITOR_LINE_DATA] |
706 | lea ecx,[esi+sizeof.EDITOR_LINE_DATA] |
712 | lea ecx,[esi+sizeof.EDITOR_LINE_DATA] |
707 | sub ecx,ebx |
713 | sub ecx,ebx |
708 | std |
714 | std |
709 | rep movsb |
715 | rep movsb |
710 | 716 | ||
711 | lea edi,[ebx+sizeof.EDITOR_LINE_DATA+1] |
717 | lea edi,[ebx+sizeof.EDITOR_LINE_DATA+1] |
712 | mov [ebx+EDITOR_LINE_DATA.Size],90 |
718 | mov [ebx+EDITOR_LINE_DATA.Size],90 |
713 | mov al,ASEPC |
719 | mov al,ASEPC |
714 | mov ecx,79 |
720 | mov ecx,79 |
715 | cld |
721 | cld |
716 | rep stosb |
722 | rep stosb |
717 | mov al,' ' |
723 | mov al,' ' |
718 | mov ecx,10 |
724 | mov ecx,10 |
719 | rep stosb |
725 | rep stosb |
720 | mov byte[ebx+sizeof.EDITOR_LINE_DATA],';' |
726 | mov byte[ebx+sizeof.EDITOR_LINE_DATA],';' |
721 | 727 | ||
722 | inc [cur_editor.Lines.Count] |
728 | inc [cur_editor.Lines.Count] |
723 | inc [cur_editor.Caret.Y] |
729 | inc [cur_editor.Caret.Y] |
724 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
730 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
725 | 731 | ||
726 | mov [cur_editor.Modified],1 |
732 | mov [cur_editor.Modified],1 |
727 | 733 | ||
728 | .exit: |
734 | .exit: |
729 | ret |
735 | ret |
730 | endp |
736 | endp |
731 | 737 | ||
732 | ;----------------------------------------------------------------------------- |
738 | ;----------------------------------------------------------------------------- |
733 | proc key.ctrl_y ;///// DELETE CURRENT LINE /////////////////////////////////// |
739 | proc key.ctrl_y ;///// DELETE CURRENT LINE /////////////////////////////////// |
734 | ;----------------------------------------------------------------------------- |
740 | ;----------------------------------------------------------------------------- |
735 | mov eax,[cur_editor.Caret.Y] |
741 | mov eax,[cur_editor.Caret.Y] |
736 | inc eax |
742 | inc eax |
737 | cmp eax,[cur_editor.Lines.Count] |
743 | cmp eax,[cur_editor.Lines.Count] |
738 | jge .exit |
744 | jge .exit |
739 | 745 | ||
740 | mov ecx,[cur_editor.Caret.Y] |
746 | mov ecx,[cur_editor.Caret.Y] |
741 | call get_line_offset |
747 | call get_line_offset |
742 | mov edi,esi |
748 | mov edi,esi |
743 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
749 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
744 | lea esi,[esi+eax+sizeof.EDITOR_LINE_DATA] |
750 | lea esi,[esi+eax+sizeof.EDITOR_LINE_DATA] |
745 | push eax |
751 | push eax |
746 | 752 | ||
747 | dec [cur_editor.Lines.Count] |
753 | dec [cur_editor.Lines.Count] |
748 | mov ecx,[cur_editor.Lines] |
754 | mov ecx,[cur_editor.Lines] |
749 | add ecx,[cur_editor.Lines.Size] ;*** add ecx,[ecx-4] |
755 | add ecx,[cur_editor.Lines.Size] ;*** add ecx,[ecx-4] |
750 | sub ecx,esi |
756 | sub ecx,esi |
751 | shr ecx,2 |
757 | shr ecx,2 |
752 | cld |
758 | cld |
753 | rep movsd |
759 | rep movsd |
754 | 760 | ||
755 | pop eax |
761 | pop eax |
756 | add eax,sizeof.EDITOR_LINE_DATA |
762 | add eax,sizeof.EDITOR_LINE_DATA |
757 | neg eax |
763 | neg eax |
758 | call editor_realloc_lines |
764 | call editor_realloc_lines |
759 | 765 | ||
760 | m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
766 | m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
761 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
767 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
762 | 768 | ||
763 | mov [cur_editor.Modified],1 |
769 | mov [cur_editor.Modified],1 |
764 | 770 | ||
765 | .exit: |
771 | .exit: |
766 | ret |
772 | ret |
767 | endp |
773 | endp |
768 | 774 | ||
769 | ;----------------------------------------------------------------------------- |
775 | ;----------------------------------------------------------------------------- |
770 | proc key.up ;///// GO TO PREVIOUS LINE /////////////////////////////////////// |
776 | proc key.up ;///// GO TO PREVIOUS LINE /////////////////////////////////////// |
771 | ;----------------------------------------------------------------------------- |
777 | ;----------------------------------------------------------------------------- |
772 | call clear_selection |
778 | call clear_selection |
773 | 779 | ||
774 | ;----------------------------------------------------------------------------- |
780 | ;----------------------------------------------------------------------------- |
775 | key.shift_up: ;///// GO TO PREVIOUS LINE, WITH SELECTION //////////////// |
781 | key.shift_up: ;///// GO TO PREVIOUS LINE, WITH SELECTION //////////////// |
776 | ;----------------------------------------------------------------------------- |
782 | ;----------------------------------------------------------------------------- |
777 | mov eax,[cur_editor.Caret.Y] |
783 | mov eax,[cur_editor.Caret.Y] |
778 | dec eax |
784 | dec eax |
779 | jns @f |
785 | jns @f |
780 | xor eax,eax |
786 | xor eax,eax |
781 | @@: mov ecx,[cur_editor.TopLeft.Y] |
787 | @@: mov ecx,[cur_editor.TopLeft.Y] |
782 | cmp eax,ecx |
788 | cmp eax,ecx |
783 | jae @f |
789 | jae @f |
784 | dec ecx |
790 | dec ecx |
785 | jns @f |
791 | jns @f |
786 | xor ecx,ecx |
792 | xor ecx,ecx |
787 | @@: test [chr],KM_SHIFT |
793 | @@: test [chr],KM_SHIFT |
788 | jnz @f |
794 | jnz @f |
789 | mov [cur_editor.SelStart.Y],eax |
795 | mov [cur_editor.SelStart.Y],eax |
790 | @@: mov [cur_editor.Caret.Y],eax |
796 | @@: mov [cur_editor.Caret.Y],eax |
791 | mov [cur_editor.TopLeft.Y],ecx |
797 | mov [cur_editor.TopLeft.Y],ecx |
792 | 798 | ||
793 | .exit: |
799 | .exit: |
794 | ret |
800 | ret |
795 | endp |
801 | endp |
796 | 802 | ||
797 | ;----------------------------------------------------------------------------- |
803 | ;----------------------------------------------------------------------------- |
798 | proc key.down ;///// GO TO NEXT LINE ///////////////////////////////////////// |
804 | proc key.down ;///// GO TO NEXT LINE ///////////////////////////////////////// |
799 | ;----------------------------------------------------------------------------- |
805 | ;----------------------------------------------------------------------------- |
800 | call clear_selection |
806 | call clear_selection |
801 | 807 | ||
802 | ;----------------------------------------------------------------------------- |
808 | ;----------------------------------------------------------------------------- |
803 | key.shift_down: ;///// GO TO NEXT LINE, WITH SELECTION ////////////////// |
809 | key.shift_down: ;///// GO TO NEXT LINE, WITH SELECTION ////////////////// |
804 | ;----------------------------------------------------------------------------- |
810 | ;----------------------------------------------------------------------------- |
805 | 811 | ||
806 | mov eax,[cur_editor.Caret.Y] |
812 | mov eax,[cur_editor.Caret.Y] |
807 | inc eax |
813 | inc eax |
808 | cmp eax,[cur_editor.Lines.Count] |
814 | cmp eax,[cur_editor.Lines.Count] |
809 | jb @f |
815 | jb @f |
810 | dec eax |
816 | dec eax |
811 | @@: mov ecx,[cur_editor.TopLeft.Y] |
817 | @@: mov ecx,[cur_editor.TopLeft.Y] |
812 | mov edx,eax |
818 | mov edx,eax |
813 | sub edx,ecx |
819 | sub edx,ecx |
814 | cmp edx,[lines.scr] |
820 | cmp edx,[lines.scr] |
815 | jb @f |
821 | jb @f |
816 | inc ecx |
822 | inc ecx |
817 | @@: test [chr],KM_SHIFT |
823 | @@: test [chr],KM_SHIFT |
818 | jnz @f |
824 | jnz @f |
819 | mov [cur_editor.SelStart.Y],eax |
825 | mov [cur_editor.SelStart.Y],eax |
820 | @@: mov [cur_editor.Caret.Y],eax |
826 | @@: mov [cur_editor.Caret.Y],eax |
821 | mov [cur_editor.TopLeft.Y],ecx |
827 | mov [cur_editor.TopLeft.Y],ecx |
822 | 828 | ||
823 | .exit: |
829 | .exit: |
824 | ret |
830 | ret |
825 | endp |
831 | endp |
826 | 832 | ||
827 | ;----------------------------------------------------------------------------- |
833 | ;----------------------------------------------------------------------------- |
828 | proc key.left ;///// GO TO PREVIOUS CHAR ///////////////////////////////////// |
834 | proc key.left ;///// GO TO PREVIOUS CHAR ///////////////////////////////////// |
829 | ;----------------------------------------------------------------------------- |
835 | ;----------------------------------------------------------------------------- |
830 | call clear_selection |
836 | call clear_selection |
831 | 837 | ||
832 | ;----------------------------------------------------------------------------- |
838 | ;----------------------------------------------------------------------------- |
833 | key.shift_left: ;///// GO TO PREVIOUS CHAR, WITH SELECTION ////////////// |
839 | key.shift_left: ;///// GO TO PREVIOUS CHAR, WITH SELECTION ////////////// |
834 | ;----------------------------------------------------------------------------- |
840 | ;----------------------------------------------------------------------------- |
835 | mov eax,[cur_editor.Caret.X] |
841 | mov eax,[cur_editor.Caret.X] |
836 | dec eax |
842 | dec eax |
837 | jns @f |
843 | jns @f |
838 | inc eax |
844 | inc eax |
839 | @@: test [chr],KM_SHIFT |
845 | @@: test [chr],KM_SHIFT |
840 | jnz @f |
846 | jnz @f |
841 | mov [cur_editor.SelStart.X],eax |
847 | mov [cur_editor.SelStart.X],eax |
842 | @@: mov [cur_editor.Caret.X],eax |
848 | @@: mov [cur_editor.Caret.X],eax |
843 | 849 | ||
844 | .exit: |
850 | .exit: |
845 | ret |
851 | ret |
846 | endp |
852 | endp |
847 | 853 | ||
848 | ;----------------------------------------------------------------------------- |
854 | ;----------------------------------------------------------------------------- |
849 | proc key.right ;///// GO TO NEXT CHAR //////////////////////////////////////// |
855 | proc key.right ;///// GO TO NEXT CHAR //////////////////////////////////////// |
850 | ;----------------------------------------------------------------------------- |
856 | ;----------------------------------------------------------------------------- |
851 | call clear_selection |
857 | call clear_selection |
852 | 858 | ||
853 | ;----------------------------------------------------------------------------- |
859 | ;----------------------------------------------------------------------------- |
854 | key.shift_right: ;///// GO TO NEXT CHAR, WITH SELECTION ///////////////// |
860 | key.shift_right: ;///// GO TO NEXT CHAR, WITH SELECTION ///////////////// |
855 | ;----------------------------------------------------------------------------- |
861 | ;----------------------------------------------------------------------------- |
856 | mov eax,[cur_editor.Caret.X] |
862 | mov eax,[cur_editor.Caret.X] |
857 | inc eax |
863 | inc eax |
858 | cmp eax,[cur_editor.Columns.Count] |
864 | cmp eax,[cur_editor.Columns.Count] |
859 | jbe @f |
865 | jbe @f |
860 | dec eax |
866 | dec eax |
861 | @@: test [chr],KM_SHIFT |
867 | @@: test [chr],KM_SHIFT |
862 | jnz @f |
868 | jnz @f |
863 | mov [cur_editor.SelStart.X],eax |
869 | mov [cur_editor.SelStart.X],eax |
864 | @@: mov [cur_editor.Caret.X],eax |
870 | @@: mov [cur_editor.Caret.X],eax |
865 | 871 | ||
866 | .exit: |
872 | .exit: |
867 | ret |
873 | ret |
868 | endp |
874 | endp |
869 | 875 | ||
870 | ;----------------------------------------------------------------------------- |
876 | ;----------------------------------------------------------------------------- |
871 | proc key.pgup ;///// GO TO PREVIOUS PAGE ///////////////////////////////////// |
877 | proc key.pgup ;///// GO TO PREVIOUS PAGE ///////////////////////////////////// |
872 | ;----------------------------------------------------------------------------- |
878 | ;----------------------------------------------------------------------------- |
873 | call clear_selection |
879 | call clear_selection |
874 | 880 | ||
875 | ;----------------------------------------------------------------------------- |
881 | ;----------------------------------------------------------------------------- |
876 | key.shift_pgup: ;///// GO TO PREVIOUS PAGE, WITH SELECTION ////////////// |
882 | key.shift_pgup: ;///// GO TO PREVIOUS PAGE, WITH SELECTION ////////////// |
877 | ;----------------------------------------------------------------------------- |
883 | ;----------------------------------------------------------------------------- |
878 | mov edx,[lines.scr] |
884 | mov edx,[lines.scr] |
879 | dec edx |
885 | dec edx |
880 | mov eax,[cur_editor.Caret.Y] |
886 | mov eax,[cur_editor.Caret.Y] |
881 | mov ecx,[cur_editor.TopLeft.Y] |
887 | mov ecx,[cur_editor.TopLeft.Y] |
882 | sub eax,edx |
888 | sub eax,edx |
883 | jns @f |
889 | jns @f |
884 | xor eax,eax |
890 | xor eax,eax |
885 | @@: sub ecx,edx |
891 | @@: sub ecx,edx |
886 | jns @f |
892 | jns @f |
887 | xor ecx,ecx |
893 | xor ecx,ecx |
888 | @@: test [chr],KM_SHIFT |
894 | @@: test [chr],KM_SHIFT |
889 | jnz @f |
895 | jnz @f |
890 | mov [cur_editor.SelStart.Y],eax |
896 | mov [cur_editor.SelStart.Y],eax |
891 | @@: mov [cur_editor.Caret.Y],eax |
897 | @@: mov [cur_editor.Caret.Y],eax |
892 | mov [cur_editor.TopLeft.Y],ecx |
898 | mov [cur_editor.TopLeft.Y],ecx |
893 | 899 | ||
894 | .exit: |
900 | .exit: |
895 | ret |
901 | ret |
896 | endp |
902 | endp |
897 | 903 | ||
898 | ;----------------------------------------------------------------------------- |
904 | ;----------------------------------------------------------------------------- |
899 | proc key.pgdn ;///// GO TO NEXT PAGE ///////////////////////////////////////// |
905 | proc key.pgdn ;///// GO TO NEXT PAGE ///////////////////////////////////////// |
900 | ;----------------------------------------------------------------------------- |
906 | ;----------------------------------------------------------------------------- |
901 | call clear_selection |
907 | call clear_selection |
902 | 908 | ||
903 | ;----------------------------------------------------------------------------- |
909 | ;----------------------------------------------------------------------------- |
904 | key.shift_pgdn: ;///// GO TO NEXT PAGE, WITH SELECTION ////////////////// |
910 | key.shift_pgdn: ;///// GO TO NEXT PAGE, WITH SELECTION ////////////////// |
905 | ;----------------------------------------------------------------------------- |
911 | ;----------------------------------------------------------------------------- |
906 | mov edx,[lines.scr] |
912 | mov edx,[lines.scr] |
907 | dec edx |
913 | dec edx |
908 | mov eax,[cur_editor.Caret.Y] |
914 | mov eax,[cur_editor.Caret.Y] |
909 | mov ecx,[cur_editor.TopLeft.Y] |
915 | mov ecx,[cur_editor.TopLeft.Y] |
910 | add eax,edx |
916 | add eax,edx |
911 | add ecx,edx |
917 | add ecx,edx |
912 | cmp eax,[cur_editor.Lines.Count] |
918 | cmp eax,[cur_editor.Lines.Count] |
913 | jb @f |
919 | jb @f |
914 | mov eax,[cur_editor.Lines.Count] |
920 | mov eax,[cur_editor.Lines.Count] |
915 | dec eax |
921 | dec eax |
916 | @@: test [chr],KM_SHIFT |
922 | @@: test [chr],KM_SHIFT |
917 | jnz @f |
923 | jnz @f |
918 | mov [cur_editor.SelStart.Y],eax |
924 | mov [cur_editor.SelStart.Y],eax |
919 | @@: mov [cur_editor.Caret.Y],eax |
925 | @@: mov [cur_editor.Caret.Y],eax |
920 | mov [cur_editor.TopLeft.Y],ecx |
926 | mov [cur_editor.TopLeft.Y],ecx |
921 | 927 | ||
922 | .exit: |
928 | .exit: |
923 | ret |
929 | ret |
924 | endp |
930 | endp |
925 | 931 | ||
926 | ;----------------------------------------------------------------------------- |
932 | ;----------------------------------------------------------------------------- |
927 | proc key.home ;///// GO TO LINE START //////////////////////////////////////// |
933 | proc key.home ;///// GO TO LINE START //////////////////////////////////////// |
928 | ;----------------------------------------------------------------------------- |
934 | ;----------------------------------------------------------------------------- |
929 | call clear_selection |
935 | call clear_selection |
930 | 936 | ||
931 | ;----------------------------------------------------------------------------- |
937 | ;----------------------------------------------------------------------------- |
932 | key.shift_home: ;///// GO TO LINE START, WITH SELECTION ///////////////// |
938 | key.shift_home: ;///// GO TO LINE START, WITH SELECTION ///////////////// |
933 | ;----------------------------------------------------------------------------- |
939 | ;----------------------------------------------------------------------------- |
934 | mov [cur_editor.Caret.X],0 |
940 | mov [cur_editor.Caret.X],0 |
935 | test [chr],KM_SHIFT |
941 | test [chr],KM_SHIFT |
936 | jnz @f |
942 | jnz @f |
937 | mov [cur_editor.SelStart.X],0 |
943 | mov [cur_editor.SelStart.X],0 |
938 | @@: |
944 | @@: |
939 | 945 | ||
940 | .exit: |
946 | .exit: |
941 | ret |
947 | ret |
942 | endp |
948 | endp |
943 | 949 | ||
944 | ;----------------------------------------------------------------------------- |
950 | ;----------------------------------------------------------------------------- |
945 | proc key.end ;///// GO TO LINE END /////////////////////////////////////////// |
951 | proc key.end ;///// GO TO LINE END /////////////////////////////////////////// |
946 | ;----------------------------------------------------------------------------- |
952 | ;----------------------------------------------------------------------------- |
947 | call clear_selection |
953 | call clear_selection |
948 | 954 | ||
949 | ;----------------------------------------------------------------------------- |
955 | ;----------------------------------------------------------------------------- |
950 | key.shift_end: ;///// GO TO LINE END, WITH SELECTION //////////////////// |
956 | key.shift_end: ;///// GO TO LINE END, WITH SELECTION //////////////////// |
951 | ;----------------------------------------------------------------------------- |
957 | ;----------------------------------------------------------------------------- |
952 | mov ecx,[cur_editor.Caret.Y] |
958 | mov ecx,[cur_editor.Caret.Y] |
953 | call get_line_offset |
959 | call get_line_offset |
954 | call get_real_length |
960 | call get_real_length |
955 | mov [cur_editor.Caret.X],eax |
961 | mov [cur_editor.Caret.X],eax |
956 | test [chr],KM_SHIFT |
962 | test [chr],KM_SHIFT |
957 | jnz @f |
963 | jnz @f |
958 | mov [cur_editor.SelStart.X],eax |
964 | mov [cur_editor.SelStart.X],eax |
959 | @@: |
965 | @@: |
960 | 966 | ||
961 | .exit: |
967 | .exit: |
962 | ret |
968 | ret |
963 | endp |
969 | endp |
964 | 970 | ||
965 | ;----------------------------------------------------------------------------- |
971 | ;----------------------------------------------------------------------------- |
966 | proc key.ctrl_home ;///// GO TO PAGE START /////////////////////////////////// |
972 | proc key.ctrl_home ;///// GO TO PAGE START /////////////////////////////////// |
967 | ;----------------------------------------------------------------------------- |
973 | ;----------------------------------------------------------------------------- |
968 | call clear_selection |
974 | call clear_selection |
969 | 975 | ||
970 | ;----------------------------------------------------------------------------- |
976 | ;----------------------------------------------------------------------------- |
971 | key.shift_ctrl_home: ;///// GO TO PAGE START, WITH SELECTION //////////// |
977 | key.shift_ctrl_home: ;///// GO TO PAGE START, WITH SELECTION //////////// |
972 | ;----------------------------------------------------------------------------- |
978 | ;----------------------------------------------------------------------------- |
973 | mov eax,[cur_editor.TopLeft.Y] |
979 | mov eax,[cur_editor.TopLeft.Y] |
974 | mov ecx,eax |
980 | mov ecx,eax |
975 | test [chr],KM_SHIFT |
981 | test [chr],KM_SHIFT |
976 | jnz @f |
982 | jnz @f |
977 | mov [cur_editor.SelStart.Y],eax |
983 | mov [cur_editor.SelStart.Y],eax |
978 | @@: mov [cur_editor.Caret.Y],eax |
984 | @@: mov [cur_editor.Caret.Y],eax |
979 | mov [cur_editor.TopLeft.Y],ecx |
985 | mov [cur_editor.TopLeft.Y],ecx |
980 | 986 | ||
981 | .exit: |
987 | .exit: |
982 | ret |
988 | ret |
983 | endp |
989 | endp |
984 | 990 | ||
985 | ;----------------------------------------------------------------------------- |
991 | ;----------------------------------------------------------------------------- |
986 | proc key.ctrl_end ;///// GO TO PAGE END ////////////////////////////////////// |
992 | proc key.ctrl_end ;///// GO TO PAGE END ////////////////////////////////////// |
987 | ;----------------------------------------------------------------------------- |
993 | ;----------------------------------------------------------------------------- |
988 | call clear_selection |
994 | call clear_selection |
989 | 995 | ||
990 | ;----------------------------------------------------------------------------- |
996 | ;----------------------------------------------------------------------------- |
991 | key.shift_ctrl_end: ;///// GO TO PAGE END, WITH SELECTION /////////////// |
997 | key.shift_ctrl_end: ;///// GO TO PAGE END, WITH SELECTION /////////////// |
992 | ;----------------------------------------------------------------------------- |
998 | ;----------------------------------------------------------------------------- |
993 | mov ecx,[cur_editor.TopLeft.Y] |
999 | mov ecx,[cur_editor.TopLeft.Y] |
994 | mov eax,[lines.scr] |
1000 | mov eax,[lines.scr] |
995 | cmp eax,[cur_editor.Lines.Count] |
1001 | cmp eax,[cur_editor.Lines.Count] |
996 | jle @f |
1002 | jle @f |
997 | mov eax,[cur_editor.Lines.Count] |
1003 | mov eax,[cur_editor.Lines.Count] |
998 | @@: add eax,ecx |
1004 | @@: add eax,ecx |
999 | dec eax |
1005 | dec eax |
1000 | test [chr],KM_SHIFT |
1006 | test [chr],KM_SHIFT |
1001 | jnz @f |
1007 | jnz @f |
1002 | mov [cur_editor.SelStart.Y],eax |
1008 | mov [cur_editor.SelStart.Y],eax |
1003 | @@: mov [cur_editor.Caret.Y],eax |
1009 | @@: mov [cur_editor.Caret.Y],eax |
1004 | mov [cur_editor.TopLeft.Y],ecx |
1010 | mov [cur_editor.TopLeft.Y],ecx |
1005 | 1011 | ||
1006 | .exit: |
1012 | .exit: |
1007 | ret |
1013 | ret |
1008 | endp |
1014 | endp |
1009 | 1015 | ||
1010 | ;----------------------------------------------------------------------------- |
1016 | ;----------------------------------------------------------------------------- |
1011 | proc key.ctrl_pgup ;///// GO TO DOCUMENT START /////////////////////////////// |
1017 | proc key.ctrl_pgup ;///// GO TO DOCUMENT START /////////////////////////////// |
1012 | ;----------------------------------------------------------------------------- |
1018 | ;----------------------------------------------------------------------------- |
1013 | call clear_selection |
1019 | call clear_selection |
1014 | 1020 | ||
1015 | ;----------------------------------------------------------------------------- |
1021 | ;----------------------------------------------------------------------------- |
1016 | key.shift_ctrl_pgup: ;///// GO TO DOCUMENT START, WITH SELECTION //////// |
1022 | key.shift_ctrl_pgup: ;///// GO TO DOCUMENT START, WITH SELECTION //////// |
1017 | ;----------------------------------------------------------------------------- |
1023 | ;----------------------------------------------------------------------------- |
1018 | xor eax,eax |
1024 | xor eax,eax |
1019 | mov [cur_editor.TopLeft.Y],eax |
1025 | mov [cur_editor.TopLeft.Y],eax |
1020 | mov [cur_editor.Caret.Y],eax |
1026 | mov [cur_editor.Caret.Y],eax |
1021 | test [chr],KM_SHIFT |
1027 | test [chr],KM_SHIFT |
1022 | jnz @f |
1028 | jnz @f |
1023 | mov [cur_editor.SelStart.Y],eax |
1029 | mov [cur_editor.SelStart.Y],eax |
1024 | @@: |
1030 | @@: |
1025 | 1031 | ||
1026 | .exit: |
1032 | .exit: |
1027 | ret |
1033 | ret |
1028 | endp |
1034 | endp |
1029 | 1035 | ||
1030 | ;----------------------------------------------------------------------------- |
1036 | ;----------------------------------------------------------------------------- |
1031 | proc key.ctrl_pgdn ;///// GO TO DOCUMENT END ///////////////////////////////// |
1037 | proc key.ctrl_pgdn ;///// GO TO DOCUMENT END ///////////////////////////////// |
1032 | ;----------------------------------------------------------------------------- |
1038 | ;----------------------------------------------------------------------------- |
1033 | call clear_selection |
1039 | call clear_selection |
1034 | 1040 | ||
1035 | ;----------------------------------------------------------------------------- |
1041 | ;----------------------------------------------------------------------------- |
1036 | key.shift_ctrl_pgdn: ;///// GO TO DOCUMENT END, WITH SELECTION ////////// |
1042 | key.shift_ctrl_pgdn: ;///// GO TO DOCUMENT END, WITH SELECTION ////////// |
1037 | ;----------------------------------------------------------------------------- |
1043 | ;----------------------------------------------------------------------------- |
1038 | mov eax,[cur_editor.Lines.Count] |
1044 | mov eax,[cur_editor.Lines.Count] |
1039 | mov [cur_editor.Caret.Y],eax |
1045 | mov [cur_editor.Caret.Y],eax |
1040 | sub eax,[lines.scr] |
1046 | sub eax,[lines.scr] |
1041 | jns @f |
1047 | jns @f |
1042 | xor eax,eax |
1048 | xor eax,eax |
1043 | @@: mov [cur_editor.TopLeft.Y],eax |
1049 | @@: mov [cur_editor.TopLeft.Y],eax |
1044 | dec [cur_editor.Caret.Y] |
1050 | dec [cur_editor.Caret.Y] |
1045 | test [chr],KM_SHIFT |
1051 | test [chr],KM_SHIFT |
1046 | jnz @f |
1052 | jnz @f |
1047 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
1053 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
1048 | @@: |
1054 | @@: |
1049 | 1055 | ||
1050 | .exit: |
1056 | .exit: |
1051 | ret |
1057 | ret |
1052 | endp |
1058 | endp |
1053 | 1059 | ||
1054 | ;----------------------------------------------------------------------------- |
1060 | ;----------------------------------------------------------------------------- |
1055 | proc key.del ;///// DELETE NEXT CHAR OR SELECTION //////////////////////////// |
1061 | proc key.del ;///// DELETE NEXT CHAR OR SELECTION //////////////////////////// |
1056 | ;----------------------------------------------------------------------------- |
1062 | ;----------------------------------------------------------------------------- |
1057 | call delete_selection |
1063 | call delete_selection |
1058 | jnc .exit |
1064 | jnc .exit |
1059 | 1065 | ||
1060 | mov ecx,[cur_editor.Caret.Y] |
1066 | mov ecx,[cur_editor.Caret.Y] |
1061 | call get_line_offset |
1067 | call get_line_offset |
1062 | and [esi+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED |
1068 | and [esi+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED |
1063 | or [esi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
1069 | or [esi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
1064 | lea ebx,[esi+sizeof.EDITOR_LINE_DATA] |
1070 | lea ebx,[esi+sizeof.EDITOR_LINE_DATA] |
1065 | mov ebp,esi |
1071 | mov ebp,esi |
1066 | 1072 | ||
1067 | call get_real_length |
1073 | call get_real_length |
1068 | or eax,eax |
1074 | or eax,eax |
1069 | je .line_up |
1075 | je .line_up |
1070 | 1076 | ||
1071 | mov ecx,[cur_editor.Caret.X] |
1077 | mov ecx,[cur_editor.Caret.X] |
1072 | cmp ecx,eax |
1078 | cmp ecx,eax |
1073 | jae .line_up |
1079 | jae .line_up |
1074 | lea edi,[ebx+ecx] |
1080 | lea edi,[ebx+ecx] |
1075 | neg ecx |
1081 | neg ecx |
1076 | mov eax,[ebp+EDITOR_LINE_DATA.Size] |
1082 | mov eax,[ebp+EDITOR_LINE_DATA.Size] |
1077 | add ecx,eax;[ebp] |
1083 | add ecx,eax;[ebp] |
1078 | repe scasb |
1084 | repe scasb |
1079 | je .line_up |
1085 | je .line_up |
1080 | 1086 | ||
1081 | mov edi,ebx |
1087 | mov edi,ebx |
1082 | mov ecx,[cur_editor.Caret.X] |
1088 | mov ecx,[cur_editor.Caret.X] |
1083 | add edi,ecx |
1089 | add edi,ecx |
1084 | lea esi,[edi+1] |
1090 | lea esi,[edi+1] |
1085 | neg ecx |
1091 | neg ecx |
1086 | mov eax,[ebp+EDITOR_LINE_DATA.Size] |
1092 | mov eax,[ebp+EDITOR_LINE_DATA.Size] |
1087 | add ecx,eax;[ebp] |
1093 | add ecx,eax;[ebp] |
1088 | dec ecx |
1094 | dec ecx |
1089 | rep movsb |
1095 | rep movsb |
1090 | mov byte[edi],' ' |
1096 | mov byte[edi],' ' |
1091 | 1097 | ||
1092 | m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
1098 | m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
1093 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
1099 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
1094 | mov [cur_editor.Modified],1 |
1100 | mov [cur_editor.Modified],1 |
1095 | ret |
1101 | ret |
1096 | 1102 | ||
1097 | .line_up: |
1103 | .line_up: |
1098 | mov eax,[cur_editor.Lines.Count] |
1104 | mov eax,[cur_editor.Lines.Count] |
1099 | dec eax |
1105 | dec eax |
1100 | cmp eax,[cur_editor.Caret.Y] |
1106 | cmp eax,[cur_editor.Caret.Y] |
1101 | je .exit |
1107 | je .exit |
1102 | mov edi,[temp_buf] |
1108 | mov edi,[temp_buf] |
1103 | add edi,sizeof.EDITOR_LINE_DATA |
1109 | add edi,sizeof.EDITOR_LINE_DATA |
1104 | mov esi,ebx |
1110 | mov esi,ebx |
1105 | mov ecx,[cur_editor.Caret.X] |
1111 | mov ecx,[cur_editor.Caret.X] |
1106 | rep movsb |
1112 | rep movsb |
1107 | mov ecx,[cur_editor.Caret.X] |
1113 | mov ecx,[cur_editor.Caret.X] |
1108 | mov eax,[temp_buf] |
1114 | mov eax,[temp_buf] |
1109 | mov [eax+EDITOR_LINE_DATA.Size],ecx |
1115 | mov [eax+EDITOR_LINE_DATA.Size],ecx |
1110 | cmp ecx,[ebp+EDITOR_LINE_DATA.Size] |
1116 | cmp ecx,[ebp+EDITOR_LINE_DATA.Size] |
1111 | jbe @f |
1117 | jbe @f |
1112 | mov eax,[ebp+EDITOR_LINE_DATA.Size] |
1118 | mov eax,[ebp+EDITOR_LINE_DATA.Size] |
1113 | sub ecx,eax |
1119 | sub ecx,eax |
1114 | sub edi,ecx |
1120 | sub edi,ecx |
1115 | mov al,' ' |
1121 | mov al,' ' |
1116 | rep stosb |
1122 | rep stosb |
1117 | @@: lea esi,[ebx+sizeof.EDITOR_LINE_DATA] |
1123 | @@: lea esi,[ebx+sizeof.EDITOR_LINE_DATA] |
1118 | mov eax,[ebp+EDITOR_LINE_DATA.Size] |
1124 | mov eax,[ebp+EDITOR_LINE_DATA.Size] |
1119 | add esi,eax |
1125 | add esi,eax |
1120 | mov ecx,[esi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size] |
1126 | mov ecx,[esi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size] |
1121 | mov eax,[temp_buf] |
1127 | mov eax,[temp_buf] |
1122 | add [eax+EDITOR_LINE_DATA.Size],ecx |
1128 | add [eax+EDITOR_LINE_DATA.Size],ecx |
1123 | or [eax+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
1129 | or [eax+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
1124 | rep movsb |
1130 | rep movsb |
1125 | 1131 | ||
1126 | mov ecx,edi |
1132 | mov ecx,edi |
1127 | sub ecx,[temp_buf] |
1133 | sub ecx,[temp_buf] |
1128 | 1134 | ||
1129 | mov esi,[temp_buf] |
1135 | mov esi,[temp_buf] |
1130 | call get_real_length |
1136 | call get_real_length |
1131 | cmp eax,[cur_editor.Columns.Count] |
1137 | cmp eax,[cur_editor.Columns.Count] |
1132 | jbe @f |
1138 | jbe @f |
1133 | mov [cur_editor.Columns.Count],eax |
1139 | mov [cur_editor.Columns.Count],eax |
1134 | @@: |
1140 | @@: |
1135 | push ecx |
1141 | push ecx |
1136 | mov edi,[cur_editor.Lines] |
1142 | mov edi,[cur_editor.Lines] |
1137 | add edi,[cur_editor.Lines.Size] ;*** add edi,[edi-4] |
1143 | add edi,[cur_editor.Lines.Size] ;*** add edi,[edi-4] |
1138 | dec edi |
1144 | dec edi |
1139 | lea esi,[edi+sizeof.EDITOR_LINE_DATA*2] ; !!! CHECK THIS !!! |
1145 | lea esi,[edi+sizeof.EDITOR_LINE_DATA*2] ; !!! CHECK THIS !!! |
1140 | sub esi,ecx |
1146 | sub esi,ecx |
1141 | mov eax,[ebp+EDITOR_LINE_DATA.Size] |
1147 | mov eax,[ebp+EDITOR_LINE_DATA.Size] |
1142 | add esi,eax |
1148 | add esi,eax |
1143 | mov eax,[ebp+eax+sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size] |
1149 | mov eax,[ebp+eax+sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size] |
1144 | add esi,eax |
1150 | add esi,eax |
1145 | lea ecx,[esi-sizeof.EDITOR_LINE_DATA] |
1151 | lea ecx,[esi-sizeof.EDITOR_LINE_DATA] |
1146 | sub ecx,ebp |
1152 | sub ecx,ebp |
1147 | std |
1153 | std |
1148 | cmp esi,edi |
1154 | cmp esi,edi |
1149 | jb @f |
1155 | jb @f |
1150 | jz .lp1 |
1156 | jz .lp1 |
1151 | mov edi,ebp |
1157 | mov edi,ebp |
1152 | add edi,[esp] |
1158 | add edi,[esp] |
1153 | lea esi,[ebp+sizeof.EDITOR_LINE_DATA*2] ; !!! CHECK THIS !!! |
1159 | lea esi,[ebp+sizeof.EDITOR_LINE_DATA*2] ; !!! CHECK THIS !!! |
1154 | mov eax,[esi-sizeof.EDITOR_LINE_DATA*2+EDITOR_LINE_DATA.Size] ; !!! CHECK THIS !!! |
1160 | mov eax,[esi-sizeof.EDITOR_LINE_DATA*2+EDITOR_LINE_DATA.Size] ; !!! CHECK THIS !!! |
1155 | add esi,eax |
1161 | add esi,eax |
1156 | mov eax,[esi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size] ; !!! CHECK THIS !!! |
1162 | mov eax,[esi-sizeof.EDITOR_LINE_DATA+EDITOR_LINE_DATA.Size] ; !!! CHECK THIS !!! |
1157 | add esi,eax |
1163 | add esi,eax |
1158 | mov ecx,[cur_editor.Lines] |
1164 | mov ecx,[cur_editor.Lines] |
1159 | add ecx,[cur_editor.Lines.Size] ;*** add ecx,[ecx-4] |
1165 | add ecx,[cur_editor.Lines.Size] ;*** add ecx,[ecx-4] |
1160 | sub ecx,esi |
1166 | sub ecx,esi |
1161 | cld |
1167 | cld |
1162 | @@: rep movsb |
1168 | @@: rep movsb |
1163 | .lp1: pop ecx |
1169 | .lp1: pop ecx |
1164 | mov esi,[temp_buf] |
1170 | mov esi,[temp_buf] |
1165 | mov edi,ebp |
1171 | mov edi,ebp |
1166 | cld |
1172 | cld |
1167 | rep movsb |
1173 | rep movsb |
1168 | 1174 | ||
1169 | .ok.dec.lines: |
1175 | .ok.dec.lines: |
1170 | dec [cur_editor.Lines.Count] |
1176 | dec [cur_editor.Lines.Count] |
1171 | mov eax,[cur_editor.Lines.Count] |
1177 | mov eax,[cur_editor.Lines.Count] |
1172 | cmp [cur_editor.Caret.Y],eax |
1178 | cmp [cur_editor.Caret.Y],eax |
1173 | jb @f |
1179 | jb @f |
1174 | dec eax |
1180 | dec eax |
1175 | mov [cur_editor.Caret.Y],eax |
1181 | mov [cur_editor.Caret.Y],eax |
1176 | @@: m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
1182 | @@: m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
1177 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
1183 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
1178 | 1184 | ||
1179 | mov ecx,[cur_editor.Lines.Count] |
1185 | mov ecx,[cur_editor.Lines.Count] |
1180 | call get_line_offset |
1186 | call get_line_offset |
1181 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
1187 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
1182 | lea esi,[esi+eax+sizeof.EDITOR_LINE_DATA] |
1188 | lea esi,[esi+eax+sizeof.EDITOR_LINE_DATA] |
1183 | mov eax,[cur_editor.Lines] |
1189 | mov eax,[cur_editor.Lines] |
1184 | add eax,[cur_editor.Lines.Size] ;*** add eax,[eax-4] |
1190 | add eax,[cur_editor.Lines.Size] ;*** add eax,[eax-4] |
1185 | sub esi,eax |
1191 | sub esi,eax |
1186 | lea eax,[esi+4096] |
1192 | lea eax,[esi+4096] |
1187 | call editor_realloc_lines |
1193 | call editor_realloc_lines |
1188 | 1194 | ||
1189 | mov [cur_editor.Modified],1 |
1195 | mov [cur_editor.Modified],1 |
1190 | 1196 | ||
1191 | .exit: |
1197 | .exit: |
1192 | ret |
1198 | ret |
1193 | endp |
1199 | endp |
1194 | 1200 | ||
1195 | ;----------------------------------------------------------------------------- |
1201 | ;----------------------------------------------------------------------------- |
1196 | proc key.ins ;///// TOGGLE INSERT/OVERWRITE MODE ///////////////////////////// |
1202 | proc key.ins ;///// TOGGLE INSERT/OVERWRITE MODE ///////////////////////////// |
1197 | ;----------------------------------------------------------------------------- |
1203 | ;----------------------------------------------------------------------------- |
1198 | xor [ins_mode],1 |
1204 | xor [ins_mode],1 |
1199 | mov eax,[cur_editor.Caret.Y] |
1205 | mov eax,[cur_editor.Caret.Y] |
1200 | mov ebx,eax |
1206 | mov ebx,eax |
1201 | call draw_editor_text.part |
1207 | call draw_editor_text.part |
1202 | call draw_editor_caret |
1208 | call draw_editor_caret |
1203 | ret |
1209 | ret |
1204 | endp |
1210 | endp |
1205 | 1211 | ||
1206 | ;----------------------------------------------------------------------------- |
1212 | ;----------------------------------------------------------------------------- |
1207 | proc key.bkspace ;///// DELETE PREVIOUS CHAR OR SELECTION //////////////////// |
1213 | proc key.bkspace ;///// DELETE PREVIOUS CHAR OR SELECTION //////////////////// |
1208 | ;----------------------------------------------------------------------------- |
1214 | ;----------------------------------------------------------------------------- |
1209 | call delete_selection |
1215 | call delete_selection |
1210 | jnc key.del.exit |
1216 | jnc key.del.exit |
1211 | 1217 | ||
1212 | mov eax,[cur_editor.Caret.X] |
1218 | mov eax,[cur_editor.Caret.X] |
1213 | dec eax |
1219 | dec eax |
1214 | js .line_up |
1220 | js .line_up |
1215 | 1221 | ||
1216 | dec [cur_editor.Caret.X] |
1222 | dec [cur_editor.Caret.X] |
1217 | mov ecx,[cur_editor.Caret.Y] |
1223 | mov ecx,[cur_editor.Caret.Y] |
1218 | call get_line_offset |
1224 | call get_line_offset |
1219 | and [esi+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED |
1225 | and [esi+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED |
1220 | or [esi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
1226 | or [esi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
1221 | 1227 | ||
1222 | mov ebx,eax |
1228 | mov ebx,eax |
1223 | call get_real_length |
1229 | call get_real_length |
1224 | cmp eax,[cur_editor.Caret.X] |
1230 | cmp eax,[cur_editor.Caret.X] |
1225 | jae @f |
1231 | jae @f |
1226 | m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
1232 | m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
1227 | mov [cur_editor.Modified],1 |
1233 | mov [cur_editor.Modified],1 |
1228 | ret |
1234 | ret |
1229 | 1235 | ||
1230 | @@: lea edi,[esi+sizeof.EDITOR_LINE_DATA+ebx] |
1236 | @@: lea edi,[esi+sizeof.EDITOR_LINE_DATA+ebx] |
1231 | mov ecx,ebx |
1237 | mov ecx,ebx |
1232 | neg ecx |
1238 | neg ecx |
1233 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
1239 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
1234 | add ecx,eax |
1240 | add ecx,eax |
1235 | dec ecx |
1241 | dec ecx |
1236 | lea esi,[edi+1] |
1242 | lea esi,[edi+1] |
1237 | cld |
1243 | cld |
1238 | rep movsb |
1244 | rep movsb |
1239 | mov byte[edi],' ' |
1245 | mov byte[edi],' ' |
1240 | 1246 | ||
1241 | m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
1247 | m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
1242 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
1248 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
1243 | mov [cur_editor.Modified],1 |
1249 | mov [cur_editor.Modified],1 |
1244 | ret |
1250 | ret |
1245 | 1251 | ||
1246 | .line_up: |
1252 | .line_up: |
1247 | cmp [cur_editor.Caret.Y],0 |
1253 | cmp [cur_editor.Caret.Y],0 |
1248 | jne @f |
1254 | jne @f |
1249 | ret |
1255 | ret |
1250 | @@: mov ecx,[cur_editor.Caret.Y] |
1256 | @@: mov ecx,[cur_editor.Caret.Y] |
1251 | dec ecx |
1257 | dec ecx |
1252 | call get_line_offset |
1258 | call get_line_offset |
1253 | and [esi+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED |
1259 | and [esi+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED |
1254 | or [esi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
1260 | or [esi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
1255 | 1261 | ||
1256 | mov ebp,esi |
1262 | mov ebp,esi |
1257 | lea ebx,[esi+sizeof.EDITOR_LINE_DATA] |
1263 | lea ebx,[esi+sizeof.EDITOR_LINE_DATA] |
1258 | mov ecx,[ebp+EDITOR_LINE_DATA.Size] |
1264 | mov ecx,[ebp+EDITOR_LINE_DATA.Size] |
1259 | @@: cmp byte[ebx+ecx-1],' ' |
1265 | @@: cmp byte[ebx+ecx-1],' ' |
1260 | jne @f |
1266 | jne @f |
1261 | dec ecx |
1267 | dec ecx |
1262 | jg @b |
1268 | jg @b |
1263 | @@: mov [cur_editor.Caret.X],ecx |
1269 | @@: mov [cur_editor.Caret.X],ecx |
1264 | dec [cur_editor.Caret.Y] |
1270 | dec [cur_editor.Caret.Y] |
1265 | cld |
1271 | cld |
1266 | jmp key.del.line_up |
1272 | jmp key.del.line_up |
1267 | endp |
1273 | endp |
1268 | 1274 | ||
1269 | ;----------------------------------------------------------------------------- |
1275 | ;----------------------------------------------------------------------------- |
1270 | proc key.tab ;///// TABULATE ///////////////////////////////////////////////// |
1276 | proc key.tab ;///// TABULATE ///////////////////////////////////////////////// |
1271 | ;----------------------------------------------------------------------------- |
1277 | ;----------------------------------------------------------------------------- |
1272 | call delete_selection |
1278 | call delete_selection |
1273 | mov eax,[cur_editor.Caret.X] |
1279 | mov eax,[cur_editor.Caret.X] |
1274 | 1280 | ||
1275 | mov ecx,eax |
1281 | mov ecx,eax |
1276 | add eax,ATABW |
1282 | add eax,ATABW |
1277 | and eax,not(ATABW-1) |
1283 | and eax,not(ATABW-1) |
1278 | push eax ' ' |
1284 | push eax ' ' |
1279 | sub eax,ecx |
1285 | sub eax,ecx |
1280 | .direct: |
1286 | .direct: |
1281 | push eax |
1287 | push eax |
1282 | call editor_realloc_lines |
1288 | call editor_realloc_lines |
1283 | pop eax |
1289 | pop eax |
1284 | mov ecx,[cur_editor.Caret.Y] |
1290 | mov ecx,[cur_editor.Caret.Y] |
1285 | call get_line_offset |
1291 | call get_line_offset |
1286 | and [esi+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED |
1292 | and [esi+EDITOR_LINE_DATA.Flags],not EDITOR_LINE_FLAG_SAVED |
1287 | or [esi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
1293 | or [esi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
1288 | 1294 | ||
1289 | xchg eax,ecx |
1295 | xchg eax,ecx |
1290 | 1296 | ||
1291 | call get_real_length |
1297 | call get_real_length |
1292 | cmp eax,[cur_editor.Caret.X] |
1298 | cmp eax,[cur_editor.Caret.X] |
1293 | jae @f |
1299 | jae @f |
1294 | mov eax,[cur_editor.Caret.X] |
1300 | mov eax,[cur_editor.Caret.X] |
1295 | @@: mov edx,[esi+EDITOR_LINE_DATA.Size] |
1301 | @@: mov edx,[esi+EDITOR_LINE_DATA.Size] |
1296 | sub edx,eax |
1302 | sub edx,eax |
1297 | cmp ecx,edx |
1303 | cmp ecx,edx |
1298 | jl @f |
1304 | jl @f |
1299 | push eax |
1305 | push eax |
1300 | mov eax,10 |
1306 | mov eax,10 |
1301 | call editor_realloc_lines |
1307 | call editor_realloc_lines |
1302 | add esi,eax |
1308 | add esi,eax |
1303 | pop eax |
1309 | pop eax |
1304 | pushad |
1310 | pushad |
1305 | mov ecx,[cur_editor.Lines] |
1311 | mov ecx,[cur_editor.Lines] |
1306 | add ecx,[cur_editor.Lines.Size] ;*** add ecx,[ecx-4] |
1312 | add ecx,[cur_editor.Lines.Size] ;*** add ecx,[ecx-4] |
1307 | dec ecx |
1313 | dec ecx |
1308 | mov edi,ecx |
1314 | mov edi,ecx |
1309 | add ecx,-10+1 |
1315 | add ecx,-10+1 |
1310 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
1316 | mov eax,[esi+EDITOR_LINE_DATA.Size] |
1311 | lea eax,[esi+eax+sizeof.EDITOR_LINE_DATA] |
1317 | lea eax,[esi+eax+sizeof.EDITOR_LINE_DATA] |
1312 | sub ecx,eax |
1318 | sub ecx,eax |
1313 | lea esi,[edi-10] |
1319 | lea esi,[edi-10] |
1314 | std |
1320 | std |
1315 | rep movsb |
1321 | rep movsb |
1316 | mov ecx,10 |
1322 | mov ecx,10 |
1317 | mov al,' ' |
1323 | mov al,' ' |
1318 | rep stosb |
1324 | rep stosb |
1319 | popad |
1325 | popad |
1320 | add [esi+EDITOR_LINE_DATA.Size],10 |
1326 | add [esi+EDITOR_LINE_DATA.Size],10 |
1321 | jmp @b |
1327 | jmp @b |
1322 | @@: lea ebx,[esi+sizeof.EDITOR_LINE_DATA] |
1328 | @@: lea ebx,[esi+sizeof.EDITOR_LINE_DATA] |
1323 | push ecx |
1329 | push ecx |
1324 | mov edi,[esi+EDITOR_LINE_DATA.Size] |
1330 | mov edi,[esi+EDITOR_LINE_DATA.Size] |
1325 | lea edi,[ebx+edi-1] |
1331 | lea edi,[ebx+edi-1] |
1326 | mov esi,edi |
1332 | mov esi,edi |
1327 | sub esi,ecx |
1333 | sub esi,ecx |
1328 | lea ecx,[esi+1] |
1334 | lea ecx,[esi+1] |
1329 | sub ecx,ebx |
1335 | sub ecx,ebx |
1330 | sub ecx,[cur_editor.Caret.X] |
1336 | sub ecx,[cur_editor.Caret.X] |
1331 | std |
1337 | std |
1332 | rep movsb |
1338 | rep movsb |
1333 | .ok: pop ecx |
1339 | .ok: pop ecx |
1334 | pop eax |
1340 | pop eax |
1335 | rep stosb |
1341 | rep stosb |
1336 | cld |
1342 | cld |
1337 | pop [cur_editor.Caret.X] |
1343 | pop [cur_editor.Caret.X] |
1338 | lea esi,[ebx-sizeof.EDITOR_LINE_DATA] |
1344 | lea esi,[ebx-sizeof.EDITOR_LINE_DATA] |
1339 | call get_real_length |
1345 | call get_real_length |
1340 | cmp eax,[cur_editor.Caret.X] |
1346 | cmp eax,[cur_editor.Caret.X] |
1341 | jae @f |
1347 | jae @f |
1342 | mov eax,[cur_editor.Caret.X] |
1348 | mov eax,[cur_editor.Caret.X] |
1343 | @@: cmp eax,[cur_editor.Columns.Count] |
1349 | @@: cmp eax,[cur_editor.Columns.Count] |
1344 | jbe @f |
1350 | jbe @f |
1345 | mov [cur_editor.Columns.Count],eax |
1351 | mov [cur_editor.Columns.Count],eax |
1346 | @@: m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
1352 | @@: m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
1347 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
1353 | m2m [cur_editor.SelStart.Y],[cur_editor.Caret.Y] |
1348 | mov [cur_editor.Modified],1 |
1354 | mov [cur_editor.Modified],1 |
1349 | 1355 | ||
1350 | .exit: |
1356 | .exit: |
1351 | ret |
1357 | ret |
1352 | endp |
1358 | endp |
1353 | 1359 | ||
1354 | ;----------------------------------------------------------------------------- |
1360 | ;----------------------------------------------------------------------------- |
1355 | proc key.return ;///// CARRIAGE RETURN /////////////////////////////////////// |
1361 | proc key.return ;///// CARRIAGE RETURN /////////////////////////////////////// |
1356 | ;----------------------------------------------------------------------------- |
1362 | ;----------------------------------------------------------------------------- |
1357 | call delete_selection |
1363 | call delete_selection |
1358 | 1364 | ||
1359 | mov eax,14 |
1365 | mov eax,14 |
1360 | call editor_realloc_lines |
1366 | call editor_realloc_lines |
1361 | 1367 | ||
1362 | mov ecx,[cur_editor.Caret.Y] |
1368 | mov ecx,[cur_editor.Caret.Y] |
1363 | call get_line_offset |
1369 | call get_line_offset |
1364 | 1370 | ||
1365 | mov ebx,[cur_editor.Caret.X] |
1371 | mov ebx,[cur_editor.Caret.X] |
1366 | cmp ebx,[esi+EDITOR_LINE_DATA.Size] |
1372 | cmp ebx,[esi+EDITOR_LINE_DATA.Size] |
1367 | jb @f |
1373 | jb @f |
1368 | mov ebx,[esi+EDITOR_LINE_DATA.Size] |
1374 | mov ebx,[esi+EDITOR_LINE_DATA.Size] |
1369 | dec ebx |
1375 | dec ebx |
1370 | jns @f |
1376 | jns @f |
1371 | xor ebx,ebx |
1377 | xor ebx,ebx |
1372 | @@: |
1378 | @@: |
1373 | cld |
1379 | cld |
1374 | 1380 | ||
1375 | mov edi,[temp_buf] |
1381 | mov edi,[temp_buf] |
1376 | mov ebp,esi |
1382 | mov ebp,esi |
1377 | lea ecx,[ebx+1] |
1383 | lea ecx,[ebx+1] |
1378 | @@: dec ecx |
1384 | @@: dec ecx |
1379 | jz @f |
1385 | jz @f |
1380 | cmp byte[esi+ecx+sizeof.EDITOR_LINE_DATA-1],' ' |
1386 | cmp byte[esi+ecx+sizeof.EDITOR_LINE_DATA-1],' ' |
1381 | je @b |
1387 | je @b |
1382 | @@: lea eax,[ecx+10] |
1388 | @@: lea eax,[ecx+10] |
1383 | mov [edi+EDITOR_LINE_DATA.Size],eax |
1389 | mov [edi+EDITOR_LINE_DATA.Size],eax |
1384 | mov [edi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
1390 | mov [edi+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
1385 | add edi,sizeof.EDITOR_LINE_DATA |
1391 | add edi,sizeof.EDITOR_LINE_DATA |
1386 | jecxz @f |
1392 | jecxz @f |
1387 | push esi |
1393 | push esi |
1388 | add esi,sizeof.EDITOR_LINE_DATA |
1394 | add esi,sizeof.EDITOR_LINE_DATA |
1389 | rep movsb |
1395 | rep movsb |
1390 | pop esi |
1396 | pop esi |
1391 | @@: mov al,' ' |
1397 | @@: mov al,' ' |
1392 | mov ecx,10 |
1398 | mov ecx,10 |
1393 | rep stosb |
1399 | rep stosb |
1394 | 1400 | ||
1395 | mov ecx,[esi+EDITOR_LINE_DATA.Size] |
1401 | mov ecx,[esi+EDITOR_LINE_DATA.Size] |
1396 | sub ecx,ebx |
1402 | sub ecx,ebx |
1397 | add esi,ebx |
1403 | add esi,ebx |
1398 | add esi,sizeof.EDITOR_LINE_DATA |
1404 | add esi,sizeof.EDITOR_LINE_DATA |
1399 | inc ecx |
1405 | inc ecx |
1400 | @@: dec ecx |
1406 | @@: dec ecx |
1401 | jz @f |
1407 | jz @f |
1402 | cmp byte[esi+ecx-1],' ' |
1408 | cmp byte[esi+ecx-1],' ' |
1403 | je @b |
1409 | je @b |
1404 | @@: jz .lp1 |
1410 | @@: jz .lp1 |
1405 | @@: cmp byte[esi],' ' |
1411 | @@: cmp byte[esi],' ' |
1406 | jne .lp1 |
1412 | jne .lp1 |
1407 | inc esi |
1413 | inc esi |
1408 | loop @b |
1414 | loop @b |
1409 | .lp1: test [auto_indent],1 |
1415 | .lp1: test [auto_indent],1 |
1410 | jz .lp2 |
1416 | jz .lp2 |
1411 | push edi ecx |
1417 | push edi ecx |
1412 | mov ecx,[ebp+EDITOR_LINE_DATA.Size] |
1418 | mov ecx,[ebp+EDITOR_LINE_DATA.Size] |
1413 | lea edi,[ebp+sizeof.EDITOR_LINE_DATA] |
1419 | lea edi,[ebp+sizeof.EDITOR_LINE_DATA] |
1414 | mov al,' ' |
1420 | mov al,' ' |
1415 | repe scasb |
1421 | repe scasb |
1416 | mov eax,ecx |
1422 | mov eax,ecx |
1417 | pop ecx edi |
1423 | pop ecx edi |
1418 | je .lp2 |
1424 | je .lp2 |
1419 | neg eax |
1425 | neg eax |
1420 | mov edx,[ebp+EDITOR_LINE_DATA.Size] |
1426 | mov edx,[ebp+EDITOR_LINE_DATA.Size] |
1421 | add eax,edx;[ebp] |
1427 | add eax,edx;[ebp] |
1422 | dec eax |
1428 | dec eax |
1423 | jmp @f |
1429 | jmp @f |
1424 | .lp2: xor eax,eax |
1430 | .lp2: xor eax,eax |
1425 | @@: mov edx,edi |
1431 | @@: mov edx,edi |
1426 | add edi,sizeof.EDITOR_LINE_DATA |
1432 | add edi,sizeof.EDITOR_LINE_DATA |
1427 | mov [cur_editor.Caret.X],eax |
1433 | mov [cur_editor.Caret.X],eax |
1428 | jecxz @f |
1434 | jecxz @f |
1429 | push ecx |
1435 | push ecx |
1430 | mov ecx,eax |
1436 | mov ecx,eax |
1431 | mov al,' ' |
1437 | mov al,' ' |
1432 | rep stosb |
1438 | rep stosb |
1433 | pop ecx |
1439 | pop ecx |
1434 | @@: jecxz @f |
1440 | @@: jecxz @f |
1435 | rep movsb |
1441 | rep movsb |
1436 | @@: mov ecx,10 |
1442 | @@: mov ecx,10 |
1437 | mov al,' ' |
1443 | mov al,' ' |
1438 | rep stosb |
1444 | rep stosb |
1439 | 1445 | ||
1440 | lea eax,[edi-sizeof.EDITOR_LINE_DATA] |
1446 | lea eax,[edi-sizeof.EDITOR_LINE_DATA] |
1441 | sub eax,edx |
1447 | sub eax,edx |
1442 | mov [edx+EDITOR_LINE_DATA.Size],eax |
1448 | mov [edx+EDITOR_LINE_DATA.Size],eax |
1443 | mov [edx+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
1449 | mov [edx+EDITOR_LINE_DATA.Flags],EDITOR_LINE_FLAG_MOFIFIED |
1444 | 1450 | ||
1445 | mov ecx,edi |
1451 | mov ecx,edi |
1446 | sub ecx,[temp_buf] |
1452 | sub ecx,[temp_buf] |
1447 | 1453 | ||
1448 | push ecx |
1454 | push ecx |
1449 | mov edi,[cur_editor.Lines] |
1455 | mov edi,[cur_editor.Lines] |
1450 | add edi,[cur_editor.Lines.Size] ;*** add edi,[edi-4] |
1456 | add edi,[cur_editor.Lines.Size] ;*** add edi,[edi-4] |
1451 | dec edi |
1457 | dec edi |
1452 | lea esi,[edi+sizeof.EDITOR_LINE_DATA] |
1458 | lea esi,[edi+sizeof.EDITOR_LINE_DATA] |
1453 | sub esi,ecx |
1459 | sub esi,ecx |
1454 | mov ecx,[ebp+EDITOR_LINE_DATA.Size] |
1460 | mov ecx,[ebp+EDITOR_LINE_DATA.Size] |
1455 | add esi,ecx |
1461 | add esi,ecx |
1456 | lea ecx,[esi-sizeof.EDITOR_LINE_DATA] |
1462 | lea ecx,[esi-sizeof.EDITOR_LINE_DATA] |
1457 | sub ecx,ebp |
1463 | sub ecx,ebp |
1458 | std |
1464 | std |
1459 | cmp esi,edi |
1465 | cmp esi,edi |
1460 | jb @f |
1466 | jb @f |
1461 | je .lp3 |
1467 | je .lp3 |
1462 | lea esi,[ebp+sizeof.EDITOR_LINE_DATA] |
1468 | lea esi,[ebp+sizeof.EDITOR_LINE_DATA] |
1463 | mov eax,[esp] |
1469 | mov eax,[esp] |
1464 | lea edi,[esi+eax-sizeof.EDITOR_LINE_DATA] |
1470 | lea edi,[esi+eax-sizeof.EDITOR_LINE_DATA] |
1465 | mov ecx,[ebp+EDITOR_LINE_DATA.Size] |
1471 | mov ecx,[ebp+EDITOR_LINE_DATA.Size] |
1466 | add esi,ecx |
1472 | add esi,ecx |
1467 | mov ecx,[cur_editor.Lines] |
1473 | mov ecx,[cur_editor.Lines] |
1468 | add ecx,[cur_editor.Lines.Size] ;*** add ecx,[ecx-4] |
1474 | add ecx,[cur_editor.Lines.Size] ;*** add ecx,[ecx-4] |
1469 | sub ecx,esi |
1475 | sub ecx,esi |
1470 | cld |
1476 | cld |
1471 | @@: rep movsb |
1477 | @@: rep movsb |
1472 | .lp3: pop ecx |
1478 | .lp3: pop ecx |
1473 | mov esi,[temp_buf] |
1479 | mov esi,[temp_buf] |
1474 | mov edi,ebp |
1480 | mov edi,ebp |
1475 | cld |
1481 | cld |
1476 | rep movsb |
1482 | rep movsb |
1477 | 1483 | ||
1478 | inc [cur_editor.Caret.Y] |
1484 | inc [cur_editor.Caret.Y] |
1479 | inc [cur_editor.SelStart.Y] |
1485 | inc [cur_editor.SelStart.Y] |
1480 | inc [cur_editor.Lines.Count] |
1486 | inc [cur_editor.Lines.Count] |
1481 | 1487 | ||
1482 | m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
1488 | m2m [cur_editor.SelStart.X],[cur_editor.Caret.X] |
1483 | 1489 | ||
1484 | mov [cur_editor.Modified],1 |
1490 | mov [cur_editor.Modified],1 |
1485 | 1491 | ||
1486 | .exit: |
1492 | .exit: |
1487 | ret |
1493 | ret |
1488 | endp |
1494 | endp |
1489 | 1495 | ||
1490 | ;----------------------------------------------------------------------------- |
1496 | ;----------------------------------------------------------------------------- |
1491 | proc key.ctrl_tab ;///// SWITCH TO NEXT TAB ////////////////////////////////// |
1497 | proc key.ctrl_tab ;///// SWITCH TO NEXT TAB ////////////////////////////////// |
1492 | ;----------------------------------------------------------------------------- |
1498 | ;----------------------------------------------------------------------------- |
1493 | cmp [tab_bar.Items.Count],1 |
1499 | cmp [tab_bar.Items.Count],1 |
1494 | je .exit |
1500 | je .exit |
1495 | xor eax,eax |
1501 | xor eax,eax |
1496 | mov ebp,[tab_bar.Items] |
1502 | mov ebp,[tab_bar.Items] |
1497 | @@: cmp ebp,[tab_bar.Current.Ptr] |
1503 | @@: cmp ebp,[tab_bar.Current.Ptr] |
1498 | je @f |
1504 | je @f |
1499 | inc eax |
1505 | inc eax |
1500 | add ebp,sizeof.TABITEM |
1506 | add ebp,sizeof.TABITEM |
1501 | jmp @b |
1507 | jmp @b |
1502 | @@: add ebp,sizeof.TABITEM |
1508 | @@: add ebp,sizeof.TABITEM |
1503 | inc eax |
1509 | inc eax |
1504 | cmp eax,[tab_bar.Items.Count] |
1510 | cmp eax,[tab_bar.Items.Count] |
1505 | jb @f |
1511 | jb @f |
1506 | mov ebp,[tab_bar.Items] |
1512 | mov ebp,[tab_bar.Items] |
1507 | @@: call set_cur_tab |
1513 | @@: call set_cur_tab |
1508 | call make_tab_visible |
1514 | call make_tab_visible |
1509 | call align_editor_in_tab |
1515 | call align_editor_in_tab |
1510 | call draw_editor |
1516 | call draw_editor |
1511 | call draw_tabctl |
1517 | call draw_tabctl |
1512 | call update_caption |
1518 | call update_caption |
1513 | .exit: |
1519 | .exit: |
1514 | ret |
1520 | ret |
1515 | endp |
1521 | endp |
1516 | 1522 | ||
1517 | ;----------------------------------------------------------------------------- |
1523 | ;----------------------------------------------------------------------------- |
1518 | proc key.shift_ctrl_tab ;///// SWITCH TO PREVIOUS TAB //////////////////////// |
1524 | proc key.shift_ctrl_tab ;///// SWITCH TO PREVIOUS TAB //////////////////////// |
1519 | ;----------------------------------------------------------------------------- |
1525 | ;----------------------------------------------------------------------------- |
1520 | cmp [tab_bar.Items.Count],1 |
1526 | cmp [tab_bar.Items.Count],1 |
1521 | je .exit |
1527 | je .exit |
1522 | xor eax,eax |
1528 | xor eax,eax |
1523 | mov ebp,[tab_bar.Items] |
1529 | mov ebp,[tab_bar.Items] |
1524 | @@: cmp ebp,[tab_bar.Current.Ptr] |
1530 | @@: cmp ebp,[tab_bar.Current.Ptr] |
1525 | je @f |
1531 | je @f |
1526 | inc eax |
1532 | inc eax |
1527 | add ebp,sizeof.TABITEM |
1533 | add ebp,sizeof.TABITEM |
1528 | jmp @b |
1534 | jmp @b |
1529 | @@: add ebp,-sizeof.TABITEM |
1535 | @@: add ebp,-sizeof.TABITEM |
1530 | dec eax |
1536 | dec eax |
1531 | jge @f |
1537 | jge @f |
1532 | imul eax,[tab_bar.Items.Count],sizeof.TABITEM |
1538 | imul eax,[tab_bar.Items.Count],sizeof.TABITEM |
1533 | add eax,[tab_bar.Items] |
1539 | add eax,[tab_bar.Items] |
1534 | lea ebp,[eax-sizeof.TABITEM] |
1540 | lea ebp,[eax-sizeof.TABITEM] |
1535 | @@: call set_cur_tab |
1541 | @@: call set_cur_tab |
1536 | call make_tab_visible |
1542 | call make_tab_visible |
1537 | call align_editor_in_tab |
1543 | call align_editor_in_tab |
1538 | call draw_editor |
1544 | call draw_editor |
1539 | call draw_tabctl |
1545 | call draw_tabctl |
1540 | call update_caption |
1546 | call update_caption |
1541 | .exit: |
1547 | .exit: |
1542 | ret |
1548 | ret |
1543 | endp |
1549 | endp |
1544 | 1550 | ||
1545 | ;----------------------------------------------------------------------------- |
1551 | ;----------------------------------------------------------------------------- |
1546 | proc key.ctrl_f4 ;///// CLOSE CURRENT TAB //////////////////////////////////// |
1552 | proc key.ctrl_f4 ;///// CLOSE CURRENT TAB //////////////////////////////////// |
1547 | ;----------------------------------------------------------------------------- |
1553 | ;----------------------------------------------------------------------------- |
1548 | cmp [cur_editor.Modified],0 |
1554 | cmp [cur_editor.Modified],0 |
1549 | je .close |
1555 | je .close |
1550 | mov [bot_mode2],2 |
1556 | mov [bot_mode2],2 |
1551 | jmp key.ctrl_o.direct |
1557 | jmp key.ctrl_o.direct |
1552 | .close: |
1558 | .close: |
1553 | mov [do_not_draw],1 |
1559 | mov [do_not_draw],1 |
1554 | push [tab_bar.Current.Ptr] |
1560 | push [tab_bar.Current.Ptr] |
1555 | cmp [tab_bar.Items.Count],1 |
1561 | cmp [tab_bar.Items.Count],1 |
1556 | jne @f |
1562 | jne @f |
1557 | ;call create_tab |
1563 | ;call create_tab |
1558 | jmp key.alt_x.close ; close program |
1564 | jmp key.alt_x.close ; close program |
1559 | @@: pop ebp |
1565 | @@: pop ebp |
1560 | call delete_tab |
1566 | call delete_tab |
1561 | dec [do_not_draw] |
1567 | dec [do_not_draw] |
1562 | call align_editor_in_tab |
1568 | call align_editor_in_tab |
1563 | call draw_editor |
1569 | call draw_editor |
1564 | call draw_tabctl |
1570 | call draw_tabctl |
1565 | call draw_statusbar |
1571 | call draw_statusbar |
1566 | ret |
1572 | ret |
1567 | endp |
1573 | endp |
1568 | 1574 | ||
1569 | ;----------------------------------------------------------------------------- |
1575 | ;----------------------------------------------------------------------------- |
1570 | proc key.shift_f9 ;///// SET DEFAULT TAB ///////////////////////////////////// |
1576 | proc key.shift_f9 ;///// SET DEFAULT TAB ///////////////////////////////////// |
1571 | ;----------------------------------------------------------------------------- |
1577 | ;----------------------------------------------------------------------------- |
1572 | mov eax,[tab_bar.Current.Ptr] |
1578 | mov eax,[tab_bar.Current.Ptr] |
1573 | cmp eax,[tab_bar.Default.Ptr] |
1579 | cmp eax,[tab_bar.Default.Ptr] |
1574 | jne @f |
1580 | jne @f |
1575 | xor eax,eax |
1581 | xor eax,eax |
1576 | @@: mov [tab_bar.Default.Ptr],eax |
1582 | @@: mov [tab_bar.Default.Ptr],eax |
1577 | mov ebp,[tab_bar.Current.Ptr] |
1583 | mov ebp,[tab_bar.Current.Ptr] |
1578 | call make_tab_visible |
1584 | call make_tab_visible |
1579 | cmp [tab_bar.Style],2 |
1585 | cmp [tab_bar.Style],2 |
1580 | jbe @f |
1586 | jbe @f |
1581 | call align_editor_in_tab |
1587 | call align_editor_in_tab |
1582 | call draw_editor |
1588 | call draw_editor |
1583 | @@: call draw_tabctl |
1589 | @@: call draw_tabctl |
1584 | ret |
1590 | ret |
1585 | endp |
1591 | endp |
1586 | 1592 | ||
1587 | ;----------------------------------------------------------------------------- |
1593 | ;----------------------------------------------------------------------------- |
1588 | proc key.f3 ;///// FIND NEXT MATCH /////////////////////////////////////////// |
1594 | proc key.f3 ;///// FIND NEXT MATCH /////////////////////////////////////////// |
1589 | ;----------------------------------------------------------------------------- |
1595 | ;----------------------------------------------------------------------------- |
1590 | call search |
1596 | call search |
1591 | jc @f |
1597 | jc @f |
1592 | @@: ret |
1598 | @@: ret |
1593 | endp |
1599 | endp |
1594 | 1600 | ||
1595 | ;----------------------------------------------------------------------------- |
1601 | ;----------------------------------------------------------------------------- |
1596 | proc key.f9 ;///// COMPILE AND RUN /////////////////////////////////////////// |
1602 | proc key.f9 ;///// COMPILE AND RUN /////////////////////////////////////////// |
1597 | ;----------------------------------------------------------------------------- |
1603 | ;----------------------------------------------------------------------------- |
1598 | mov bl,1 |
1604 | mov bl,1 |
1599 | call start_fasm |
1605 | call start_fasm |
1600 | ret |
1606 | ret |
1601 | endp |
1607 | endp |
1602 | 1608 | ||
1603 | ;----------------------------------------------------------------------------- |
1609 | ;----------------------------------------------------------------------------- |
1604 | proc key.ctrl_f9 ;///// COMPILE ////////////////////////////////////////////// |
1610 | proc key.ctrl_f9 ;///// COMPILE ////////////////////////////////////////////// |
1605 | ;----------------------------------------------------------------------------- |
1611 | ;----------------------------------------------------------------------------- |
1606 | mov bl,0 |
1612 | mov bl,0 |
1607 | call start_fasm |
1613 | call start_fasm |
1608 | ret |
1614 | ret |
1609 | endp |
1615 | endp |
1610 | 1616 | ||
1611 | ;----------------------------------------------------------------------------- |
1617 | ;----------------------------------------------------------------------------- |
1612 | proc key.alt_x ;///// EXIT PROGRAM /////////////////////////////////////////// |
1618 | proc key.alt_x ;///// EXIT PROGRAM /////////////////////////////////////////// |
1613 | ;----------------------------------------------------------------------------- |
1619 | ;----------------------------------------------------------------------------- |
1614 | mov [main_closing],1 |
1620 | mov [main_closing],1 |
1615 | mov eax,[tab_bar.Items] |
1621 | mov eax,[tab_bar.Items] |
1616 | mov [exit_tab_item],eax |
1622 | mov [exit_tab_item],eax |
1617 | mov eax,[tab_bar.Items.Count] |
1623 | mov eax,[tab_bar.Items.Count] |
1618 | mov [exit_tab_num],eax |
1624 | mov [exit_tab_num],eax |
1619 | .direct: |
1625 | .direct: |
1620 | call try_to_close_tabs |
1626 | call try_to_close_tabs |
1621 | or eax,eax |
1627 | or eax,eax |
1622 | jz @f |
1628 | jz @f |
1623 | mov [bot_mode2],2 |
1629 | mov [bot_mode2],2 |
1624 | jmp key.ctrl_o.direct |
1630 | jmp key.ctrl_o.direct |
1625 | 1631 | ||
1626 | @@: stdcall save_settings |
1632 | @@: stdcall save_settings |
1627 | 1633 | ||
1628 | .close: |
1634 | .close: |
1629 | mov [main_closed],1 |
1635 | mov [main_closed],1 |
1630 | mcall -1 |
1636 | mcall -1 |
1631 | endp |
1637 | endp |
1632 | 1638 | ||
1633 | ;----------------------------------------------------------------------------- |
1639 | ;----------------------------------------------------------------------------- |
1634 | proc try_to_close_tabs ;///// FIND TABS TO BE SAVED BEFORE CLOSE ///////////// |
1640 | proc try_to_close_tabs ;///// FIND TABS TO BE SAVED BEFORE CLOSE ///////////// |
1635 | ;----------------------------------------------------------------------------- |
1641 | ;----------------------------------------------------------------------------- |
1636 | push ecx ebp |
1642 | push ecx ebp |
1637 | call flush_cur_tab |
1643 | call flush_cur_tab |
1638 | mov ebp,[exit_tab_item] ; [tab_bar.Items] |
1644 | mov ebp,[exit_tab_item] ; [tab_bar.Items] |
1639 | add ebp,-sizeof.TABITEM |
1645 | add ebp,-sizeof.TABITEM |
1640 | @@: dec [exit_tab_num] |
1646 | @@: dec [exit_tab_num] |
1641 | js .ok |
1647 | js .ok |
1642 | add ebp,sizeof.TABITEM |
1648 | add ebp,sizeof.TABITEM |
1643 | mov al,[ebp+TABITEM.Editor.Modified] |
1649 | mov al,[ebp+TABITEM.Editor.Modified] |
1644 | cmp [ebp+TABITEM.Editor.Modified],0 |
1650 | cmp [ebp+TABITEM.Editor.Modified],0 |
1645 | je @b |
1651 | je @b |
1646 | mov [exit_tab_item],ebp |
1652 | mov [exit_tab_item],ebp |
1647 | call set_cur_tab |
1653 | call set_cur_tab |
1648 | call make_tab_visible |
1654 | call make_tab_visible |
1649 | xor eax,eax |
1655 | xor eax,eax |
1650 | inc eax |
1656 | inc eax |
1651 | @@: pop ebp ecx |
1657 | @@: pop ebp ecx |
1652 | ret |
1658 | ret |
1653 | .ok: xor eax,eax |
1659 | .ok: xor eax,eax |
1654 | jmp @b |
1660 | jmp @b |
1655 | endp |
1661 | endp |