-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinsert.asm
More file actions
381 lines (349 loc) · 5.57 KB
/
insert.asm
File metadata and controls
381 lines (349 loc) · 5.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
;
; VI65 (c) 2010-2013 Soci/Singular (soci@c64.rulez.org)
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
;
;n; <h4>A</h4>
;n; Append text at the end of the line.
kA .proc
jsr tolastchar
.cerror ka & 0
.pend
;n; <h4>a</h4>
;n; Append text after the cursor times. If the
;n; cursor is in the first column of an empty line Insert
;n; starts there.
ka .proc
lda #1
sta repeat
lsr oneless
jsr motion_l
jmp insertmode
.pend
;n; <h4>I</h4>
;n; Insert text before the first non-blank in the line
kI .proc
jsr motion_uparrow
.cerror insertmode & 0
.pend
insertmode .proc
dec tochar.mode+1
lda #statusmsg.insert
jsr setstatusmsg
ldx #marks.start
jsr setmark
;ldx #references.start
;jsr insertref2
;ldx #references.end
;jsr insertref
loop lsr display.now
ldx #1
stx repeat
dex
stx repeat+1
stx oneless
jsr waitkey
ldx #keylookup.insertkeys
jsr keylookup
jmp loop
exit pla
pla
ldx #<(notxt-4)
lda #>(notxt-4)
jsr setstatus
inc tochar.mode+1
;ldx #references.end
;jsr deleteref
;ldx #references.start
;jsr deleteref2
jmp motion_h
notxt .text 0
put tya
ldx #keylookup.motionkeys2
jsr keylookup
.if TARGET==ATARI800
cpy #$7d
bge baj
cpy #32
blt baj
.else
tya
asl
cmp #64
blt baj ;no control chars
.fi
put2
sty ichar
jsr normcolumn
sta column
#loadw fakeinsert, currenttext
jmp inserttext
baj rts
kreturn jsr split
bcs baj
lda #1
sta repeat
lsr
sta repeat+1
jsr motion_j
jmp motion_0
fakeinsert = *-4
.byte 1
ichar .byte 0
.pend
;i; CTRL-Y
;i;
;i; Insert the character which is above the cursor.
;i;
insert_ctrl_y .proc
ldy #2
.byte $2c
.cerror insert_ctrl_e & 0
.pend
;i; CTRL-E
;i;
;i; Insert the character which is below the cursor.
;i;
insert_ctrl_e .proc
ldy #0
lda (cursorline),y
sta currenttext
iny
lda (cursorline),y
sta currenttext+1
ldy #4
lda column
cmp (currenttext),y
bcc +
rts
+ adc #5
tay
lda (currenttext),y
tay
sec
gcs insertmode.put2
.pend
append_c .proc
pha
ldy #4
lda (cursorline),y
clc
adc #1
jsr modline
pla
bcs e
pha
ldy #4
lda (currentline),y
beq +
tax
- iny
lda (currentline),y
sta (cursorline),y
dex
bne -
+ iny
pla
sta (cursorline),y
e rts
.pend
inserttext .proc
ldy #4
lda (currenttext),y
sta il+1
clc
adc (cursorline),y
bcs baj
jsr linemod
bcc +
baj rts
+ ldy #4
lda (currentline),y
sec
sbc column
sta en+1
ldx column
beq +
- iny
lda (currentline),y
sta (allocline),y
dex
bne -
+
lda currenttext
sec
sbc column
sta currenttext
bcs +
dec currenttext+1
+
il ldx #0
beq +
txa
clc
adc column
sta column
lda currentline
sec
sbc il+1
sta currentline
bcs y
dec currentline+1
y
- iny
lda (currenttext),y
sta (allocline),y
dex
bne -
+
en ldx #0
beq +
- iny
lda (currentline),y
sta (allocline),y
dex
bne -
+ clc
rts
.pend
linemod .proc
jsr alloc
bcs err
ldy #0
lda (cursorline),y
sta (allocline),y
sta currentline
iny
lda (cursorline),y
sta (allocline),y
sta currentline+1
iny
lda allocline
sta (currentline),y
iny
lda allocline+1
sta (currentline),y
lda (cursorline),y
sta (allocline),y
sta currentline+1
lda #1
sta (cursorline),y
dey
lda (cursorline),y
sta (allocline),y
sta currentline
dey
lda allocline+1
sta (currentline),y
dey
lda allocline
sta (currentline),y
#movew cursorline, currentline
#movew allocline, cursorline
err rts
.pend
;
; cursor+ to X ref
;
insertref .proc
lda cursorline+1
sta references.prev+1,x
lda cursorline
sta references.prev,x
ldy #0
lda (cursorline),y
sta currentline
sta references.next,x
txa
clc
adc #<references
pha
sta (cursorline),y
iny
lda (cursorline),y
sta currentline+1
sta references.next+1,x
lda #0
adc #>references
sta (cursorline),y
ldy #3
gne insertref2.common
.pend
;
; cursor- to X ref
;
insertref2 .proc
lda cursorline+1
sta references.next+1,x
lda cursorline
sta references.next,x
ldy #2
lda (cursorline),y
sta currentline
sta references.prev,x
txa
clc
adc #<references
pha
sta (cursorline),y
iny
lda (cursorline),y
sta currentline+1
sta references.prev+1,x
lda #0
adc #>references
sta (cursorline),y
ldy #1
common sta (currentline),y
dey
pla
sta (currentline),y
lda #255
sta references.len,x
rts
.pend
deleteref .proc
tax
tay
.cerror borona & 0
.pend
borona .proc
lda references.prev,y
sta currentline
lda references.prev+1,y
sta currentline+1
ldy #0
lda references.next,x
sta allocline
sta (currentline),y
iny
lda references.next+1,x
sta allocline+1
sta (currentline),y
iny
lda currentline
sta (allocline),y
iny
lda currentline+1
sta (allocline),y
rts
.pend
reftocursor .proc
lda references,x
sta cursorline
lda references+1,x
sta cursorline+1
rts
.pend