... | ... |
@@ -4,9 +4,8 @@ |
4 | 4 |
TODO |
5 | 5 |
- Follow cursor when moving out of the screen |
6 | 6 |
- Save/Load |
7 |
- - Select blank lines |
|
8 | 7 |
- Real scrolling distance |
9 |
- - page up/down move with ctrl+arrow |
|
8 |
+ - Page up/down move with ctrl+arrow |
|
10 | 9 |
- Double-click select word |
11 | 10 |
- Right-click find next instance of selection |
12 | 11 |
- Mouse down selection |
... | ... |
@@ -14,6 +13,7 @@ |
14 | 13 |
- x scroll |
15 | 14 |
- Don't scroll past oef |
16 | 15 |
- Don't draw past eof |
16 |
+ - Draw tab characters |
|
17 | 17 |
) |
18 | 18 |
|
19 | 19 |
&Console { pad 8 stdio 1 } |
... | ... |
@@ -162,21 +162,21 @@ BRK |
162 | 162 |
|
163 | 163 |
( line number ) |
164 | 164 |
,no-click-line ~dev/mouse.x #0010 GTH2 JMP? POP2 |
165 |
- ~dev/mouse.y #0008 DIV2 ~scroll.y ADD2 =position.y #0001 =position.x ,select JSR |
|
166 |
- ,clamp-selection JSR ,redraw JSR ,click-end JMP |
|
165 |
+ ~dev/mouse.y #0008 DIV2 ~scroll.y ADD2 =position.y #0000 =position.x |
|
166 |
+ ,find-selection JSR DUP2 =selection.from #0001 ADD2 =selection.to |
|
167 |
+ ,redraw JSR ,click-end JMP |
|
167 | 168 |
@no-click-line |
168 | 169 |
|
169 | 170 |
( select body ) |
170 | 171 |
~dev/mouse.y #0008 DIV2 ~scroll.y ADD2 =position.y |
171 | 172 |
~dev/mouse.x ~textarea.x1 SUB2 #0007 ADD2 #0007 DIV2 =position.x |
172 | 173 |
|
173 |
- ,select JSR |
|
174 |
+ ,find-selection JSR DUP2 =selection.from #0001 ADD2 =selection.to |
|
174 | 175 |
,redraw JSR |
175 | 176 |
|
176 | 177 |
@click-end |
177 | 178 |
|
178 |
- ( decr ctrl lock ) |
|
179 |
- ,skip-unlock ~ctrl_lock #00 EQU JMP? POP2 ~ctrl_lock #01 SUB =ctrl_lock @skip-unlock |
|
179 |
+ ( unlock ) ,skip-unlock ~ctrl_lock #00 EQU JMP? POP2 ~ctrl_lock #01 SUB =ctrl_lock @skip-unlock |
|
180 | 180 |
|
181 | 181 |
,draw-cursor JSR |
182 | 182 |
|
... | ... |
@@ -201,14 +201,6 @@ RTS |
201 | 201 |
|
202 | 202 |
RTS |
203 | 203 |
|
204 |
-@scroll-up |
|
205 |
- |
|
206 |
- ( clamp ) ~scroll.y #0000 EQU2 RTS? |
|
207 |
- ( decr ) ~scroll.y #0001 SUB2 =scroll.y |
|
208 |
- ,redraw JSR |
|
209 |
- |
|
210 |
-RTS |
|
211 |
- |
|
212 | 204 |
@goto-linestart |
213 | 205 |
|
214 | 206 |
@goto-linestart-loop |
... | ... |
@@ -244,7 +236,8 @@ RTS |
244 | 236 |
,find-wordstart-end ~j LDR #0a EQU JMP? POP2 |
245 | 237 |
,find-wordstart-end ~j LDR #0d EQU JMP? POP2 |
246 | 238 |
,find-wordstart-loop ~j ,document.body GTH2 JMP? POP2 |
247 |
- @find-wordstart-end ~j #0001 SUB2 |
|
239 |
+ @find-wordstart-end |
|
240 |
+ ( return ) ~j #0001 SUB2 |
|
248 | 241 |
|
249 | 242 |
RTS |
250 | 243 |
|
... | ... |
@@ -257,28 +250,39 @@ RTS |
257 | 250 |
,find-wordend-end ~j LDR #0a EQU JMP? POP2 |
258 | 251 |
,find-wordend-end ~j LDR #0d EQU JMP? POP2 |
259 | 252 |
,find-wordend-loop ~j ,document.body GTH2 JMP? POP2 |
260 |
- @find-wordend-end ~j #0001 ADD2 |
|
253 |
+ @find-wordend-end |
|
254 |
+ ( return ) ~j #0001 ADD2 |
|
261 | 255 |
|
262 | 256 |
RTS |
263 | 257 |
|
264 |
-@get-position ( selection -> position ) |
|
258 |
+@find-line ( position -> addr ) |
|
265 | 259 |
|
266 |
- ,document.body =j #0000 =position.x #0000 =position.y |
|
260 |
+ ,document.body =j #0000 =pt.y |
|
261 |
+ @find-line-loop |
|
262 |
+ ,find-line-end ~pt.y ~position.y #0001 SUB2 GTH2 JMP? POP2 |
|
263 |
+ ,find-line-no-space ~j LDR #0a NEQ ~j LDR #0d NEQ #0101 EQU2 JMP? POP2 |
|
264 |
+ ( incr ) ~pt.y #0001 ADD2 =pt.y |
|
265 |
+ @find-line-no-space |
|
266 |
+ ( incr ) ~j #0001 ADD2 =j |
|
267 |
+ ,find-line-loop ~j LDR #00 NEQ JMP? POP2 |
|
268 |
+ @find-line-end |
|
269 |
+ ( return ) ~j |
|
267 | 270 |
|
268 |
- @get-position-loop |
|
271 |
+RTS |
|
269 | 272 |
|
270 |
- ,no-position-space ~j LDR #0a NEQ ~j LDR #0d NEQ #0101 EQU2 JMP? POP2 |
|
271 |
- ( incr ) ~position.y #0001 ADD2 =position.y |
|
272 |
- #0000 =position.x |
|
273 |
- @no-position-space |
|
273 |
+@find-selection ( position -> addr ) |
|
274 | 274 |
|
275 |
- ,no-position-reached ~j ~selection.from NEQ2 JMP? POP2 |
|
276 |
- RTS |
|
277 |
- @no-position-reached |
|
275 |
+ ,find-line JSR ( find line ) |
|
278 | 276 |
|
279 |
- ( incr ) ~position.x #0001 ADD2 =position.x |
|
280 |
- ( incr ) ~j #0001 ADD2 =j |
|
281 |
- ,get-position-loop ~j LDR #00 NEQ JMP? POP2 |
|
277 |
+ #0000 =pt.x |
|
278 |
+ |
|
279 |
+ @find-selection-loop |
|
280 |
+ ,find-selection-end ~j ~pt.x ADD2 LDR #0a EQU JMP? POP2 |
|
281 |
+ ,find-selection-end ~j ~pt.x ADD2 LDR #0d EQU JMP? POP2 |
|
282 |
+ ( incr ) ~pt.x #0001 ADD2 =pt.x |
|
283 |
+ ,find-selection-loop ~pt.x ~position.x #0001 SUB2 LTH2 JMP? POP2 |
|
284 |
+ @find-selection-end |
|
285 |
+ ( return ) ~pt.x ADD2 |
|
282 | 286 |
|
283 | 287 |
RTS |
284 | 288 |
|
... | ... |
@@ -304,10 +308,11 @@ RTS |
304 | 308 |
|
305 | 309 |
RTS |
306 | 310 |
|
311 |
+( drawing functions ) |
|
312 |
+ |
|
307 | 313 |
@redraw |
308 | 314 |
|
309 | 315 |
,draw-lines JSR |
310 |
- |
|
311 | 316 |
,draw-textarea JSR |
312 | 317 |
,draw-scrollbar JSR |
313 | 318 |
,draw-titlebar JSR |
... | ... |
@@ -329,22 +334,18 @@ RTS |
329 | 334 |
@draw-lines |
330 | 335 |
|
331 | 336 |
#0000 =j |
332 |
- #0000 =dev/sprite.x |
|
333 |
- #0000 =dev/sprite.y |
|
334 |
- |
|
337 |
+ #0000 =dev/sprite.x #0000 =dev/sprite.y |
|
335 | 338 |
@draw-lines-loop |
336 |
- |
|
337 |
- #0000 =dev/sprite.x |
|
338 |
- |
|
339 | 339 |
~scroll.y ~j ADD2 =addr |
340 |
+ #0000 =dev/sprite.x |
|
340 | 341 |
,font_hex #00 ,addr #0001 ADD2 LDR #f0 AND #04 ROR #08 MUL ADD2 =dev/sprite.addr |
341 |
- ( draw ) #02 ~addr ~position.y EQU2 ADD =dev/sprite.color |
|
342 |
- ~dev/sprite.x #0008 ADD2 =dev/sprite.x |
|
342 |
+ ( draw ) #02 ~addr ~position.y EQU2 #06 MUL ADD =dev/sprite.color |
|
343 |
+ #0008 =dev/sprite.x |
|
343 | 344 |
,font_hex #00 ,addr #0001 ADD2 LDR #0f AND #08 MUL ADD2 =dev/sprite.addr |
344 |
- ( draw ) #02 ~addr ~position.y EQU2 ADD =dev/sprite.color |
|
345 |
+ ( draw ) #02 ~addr ~position.y EQU2 #06 MUL ADD =dev/sprite.color |
|
345 | 346 |
( incr ) ~j #0001 ADD2 =j |
346 | 347 |
( incr ) ~dev/sprite.y #0008 ADD2 =dev/sprite.y |
347 |
- ,draw-lines-loop ~j ~dev/screen.height #0008 DIV2 NEQ2 JMP? POP2 |
|
348 |
+ ,draw-lines-loop ~j ~dev/screen.height #0008 SUB2 #0008 DIV2 NEQ2 JMP? POP2 |
|
348 | 349 |
|
349 | 350 |
RTS |
350 | 351 |
|
... | ... |
@@ -413,11 +414,23 @@ RTS |
413 | 414 |
|
414 | 415 |
@draw-textarea-loop |
415 | 416 |
|
417 |
+ ,draw-textarea-end ~dev/sprite.y ~dev/screen.height #0010 SUB2 GTH2 JMP? POP2 |
|
418 |
+ |
|
419 |
+ ( get character ) |
|
420 |
+ ,font #00 ~j LDR #20 SUB #0008 MUL2 ADD2 =dev/sprite.addr |
|
421 |
+ |
|
422 |
+ ( draw ) #01 |
|
423 |
+ ~j ~selection.from #0001 SUB2 GTH2 |
|
424 |
+ ~j ~selection.to LTH2 #0101 EQU2 |
|
425 |
+ #05 MUL ADD =dev/sprite.color |
|
426 |
+ |
|
416 | 427 |
,no-linebreak ~j LDR #0a NEQ ~j LDR #0d NEQ #0101 EQU2 JMP? POP2 |
417 | 428 |
( draw linebreak ) |
418 | 429 |
,linebreak_icn =dev/sprite.addr |
419 |
- #02 =dev/sprite.color |
|
420 |
- |
|
430 |
+ ( draw ) #03 |
|
431 |
+ ~j ~selection.from #0001 SUB2 GTH2 |
|
432 |
+ ~j ~selection.to LTH2 #0101 EQU2 |
|
433 |
+ #05 MUL ADD =dev/sprite.color |
|
421 | 434 |
( fill clear ) |
422 | 435 |
@fill-clear |
423 | 436 |
( incr ) ~dev/sprite.x #0008 ADD2 =dev/sprite.x |
... | ... |
@@ -428,16 +441,6 @@ RTS |
428 | 441 |
( incr ) ~dev/sprite.y #0008 ADD2 =dev/sprite.y |
429 | 442 |
@no-linebreak |
430 | 443 |
|
431 |
- ,draw-textarea-end ~dev/sprite.y ~dev/screen.height #0010 SUB2 GTH2 JMP? POP2 |
|
432 |
- |
|
433 |
- ( get character ) |
|
434 |
- ,font #00 ~j LDR #20 SUB #0008 MUL2 ADD2 =dev/sprite.addr |
|
435 |
- |
|
436 |
- ( draw ) #01 |
|
437 |
- ~j ~selection.from #0001 SUB2 GTH2 |
|
438 |
- ~j ~selection.to LTH2 #0101 EQU2 |
|
439 |
- #05 MUL ADD =dev/sprite.color |
|
440 |
- |
|
441 | 444 |
( incr ) ~j #0001 ADD2 =j |
442 | 445 |
( incr ) ~dev/sprite.x #0007 ADD2 =dev/sprite.x |
443 | 446 |
|
... | ... |
@@ -489,10 +492,6 @@ RTS |
489 | 492 |
( selection ) |
490 | 493 |
~selection.from ,document.body SUB2 ,draw-short JSR |
491 | 494 |
|
492 |
- ( length ) |
|
493 |
- ~dev/screen.width #0040 SUB2 =dev/sprite.x |
|
494 |
- ~document.eof ,document.body SUB2 ,draw-short JSR |
|
495 |
- |
|
496 | 495 |
RTS |
497 | 496 |
|
498 | 497 |
@font_hex ( 0-F TODO: should pull from @font instead.. ) |