/ src / macro.s
macro.s
  1  ; CCGMS Terminal
  2  ;
  3  ; Copyright (c) 2016,2020, Craig Smith, alwyz. All rights reserved.
  4  ; This project is licensed under the BSD 3-Clause License.
  5  ;
  6  ; Macro editor
  7  ;
  8  
  9  prwcmc:
 10  	lda macro_tmp
 11  	and #$c0
 12  	asl a
 13  	rol a
 14  	rol a
 15  	asl a
 16  	clc
 17  	adc #'1'
 18  	sta txt_edit_index
 19  	rts
 20  
 21  ;----------------------------------------------------------------------
 22  SET_PETSCII
 23  txt_edit_which_macro:
 24  	.byte CLR,WHITE,CR,CR,"Edit which macro?",CR
 25  	.byte YELLOW,"(CTRL F1 / F3 or RETURN to abort.) ",WHITE,SETCSR,2,RVSON,0
 26  
 27  txt_edit:
 28  	.byte 19,CR,WHITE,"Edit F"
 29  txt_edit_index:
 30  	.byte '1'
 31  	.byte " Macro...<CTRL-X> to end:",CR,CR,CR,CR,0
 32  SET_ASCII
 33  
 34  ;----------------------------------------------------------------------
 35  wchmac:
 36  	.byte 0
 37  
 38  macfull:
 39  	.byte 0
 40  
 41  ;----------------------------------------------------------------------
 42  edtmac:
 43  	lda #<txt_edit_which_macro
 44  	ldy #>txt_edit_which_macro
 45  	jsr outstr
 46  	jsr invert_csr_char
 47  edtmlp	lda LSTX
 48  	cmp #1    ;return
 49  	bne edtmc2
 50  edtmab	rts
 51  edtmc2	cmp #4
 52  	bcc edtmlp
 53  	cmp #6
 54  	bcs edtmlp
 55  	pha
 56  	jsr restore_csr_char
 57  	pla
 58  	tax
 59  edtmc3
 60  	lda LSTX
 61  	cmp #7
 62  	bcc edtmc3
 63  	jsr decode_fkey_scancode
 64  	sta wchmac
 65  edtmen
 66  	lda #0
 67  	sta 198
 68  	lda #CLR
 69  	jsr chrout
 70  	lda #0
 71  	sta $d020
 72  	sta $d021
 73  edtstr
 74  	jsr prwcmc
 75  	lda #<txt_edit
 76  	ldy #>txt_edit
 77  	jsr outstr
 78  	lda #1
 79  	sta macro_dry_run_mode
 80  	sta cursor_flag
 81  	lda wchmac
 82  	sta macro_tmp
 83  	clc
 84  	adc #62
 85  	sta macfull
 86  	jsr restore_csr_char
 87  	lda #' '
 88  	jsr chrout
 89  	lda #CSR_LEFT
 90  	jsr chrout
 91  	jsr prtmc0
 92  edtinp	jsr cursor_show
 93  edtkey
 94  	jsr getin
 95  	beq edtkey
 96  	cmp #16   ;ctrl-p
 97  	beq edtmen
 98  	cmp #HOME	; no home or clr
 99  	beq edtkey
100  	cmp #CLR
101  	bne edtky1
102  	ldx macro_tmp
103  edtclr
104  	lda #0
105  	sta macmem,x
106  	cpx wchmac
107  	beq edtky0
108  	dex
109  	jmp edtclr
110  edtky0	ldx wchmac
111  	stx macro_tmp
112  	jmp edtmen
113  edtky1
114  	cmp #24   ;ctrl-x
115  	beq edtbye
116  	cmp #DEL
117  	bne edtky2
118  	lda macro_tmp
119  	cmp wchmac
120  	beq edtkey
121  	tax
122  	jsr edtdel
123  jcs	edtmen
124  	lda macro_tmp
125  	and #$3f
126  	cmp #$3f
127  	bne edtkey
128  	jmp edtmen
129  edtky2
130  	ldx LINE
131  	cpx #23
132  	bcs edtkey
133  	cpx #3
134  	bcc edtkey
135  edtky3
136  	ldx macro_tmp
137  	cpx macfull;64 bytes of memory per macro
138  	bcs edtkey
139  	sta macmem,x
140  	pha
141  	txa
142  	cmp wchmac
143  	beq edtky4
144  	and #$3f
145  	bne edtky4
146  	pla
147  	jsr bell
148  	jmp edtmen
149  edtky4
150  	inc macro_tmp
151  	jsr cursor_off
152  	pla
153  	jsr handle_control_codes
154  	bcc edtky5
155  	jmp edtinp
156  edtky5
157  	jsr chrout
158  	jsr quote_insert_off
159  	jmp edtinp
160  edtbye	ldx macro_tmp
161  	lda #0
162  	sta macmem,x
163  	rts
164  
165  macrvs:
166  	.byte RVSOFF
167  maccty:
168  	.byte 10
169  maccol:
170  	.byte 5
171  maccas:
172  	.byte LOCASE
173  macbkg:
174  	.byte 0
175  
176  edtdel
177  	lda #RVSOFF
178  	sta macrvs
179  	lda #10
180  	sta maccty
181  	lda #5
182  	sta maccol
183  	lda #LOCASE
184  	sta maccas
185  	lda #0
186  	sta macbkg
187  	lda macmem-1,x
188  	cmp #UNDERLINE
189  	beq edtde2
190  	and #$7f
191  	cmp #$20
192  	bcc edtde0
193  	jmp edtdle
194  edtde0
195  	cmp #CSR_DOWN
196  	beq edtde1
197  	cmp #CSR_RIGHT
198  	bne edtde3
199  edtde1	lda macmem-1,x
200  edtdeo	eor #$80
201  	jmp edtdln
202  edtde2
203  	lda #INST
204  	jsr edprrv
205  	lda #CSR_RIGHT
206  	jmp edtdln
207  edtde3	lda macmem-1,x
208  	cmp #INST
209  	bne edtde4
210  	lda #CSR_RIGHT
211  	jsr edprrv
212  	lda #INST
213  	bne edtdeo
214  edtde4	jsr edtcok
215  	bmi edtde7
216  	ldx macro_tmp
217  	lda macmem-2,x
218  	sta macbkg
219  edtde5	dex
220  	cpx wchmac
221  	beq edtde6
222  	lda macmem-1,x
223  	jsr edtcok
224  	bmi edtde5
225  	ldy macmem-2,x
226  	cpy macbkg
227  	beq edtdcl
228  	cpy #2
229  	beq edtde5
230  	ldy macbkg
231  	cpy #2
232  	beq edtde5
233  edtdcl
234  	sta maccol
235  edtde6
236  	lda macbkg
237  	cmp #2
238  	bne edtclh
239  	sta prev_char
240  	cpx wchmac
241  	beq edtclb
242  	lda maccol
243  	jsr edtcok
244  	bmi edtclb
245  	tya
246  	tax
247  edtclb
248  	stx $d020
249  	stx $d021
250  	jmp edtdla
251  edtclh
252  	lda #0
253  	sta prev_char
254  	lda maccol
255  	jmp edtdln
256  edtde7
257  	cmp #10
258  	beq edtde8
259  	cmp #11
260  	bne edtd12
261  edtde8	ldx macro_tmp
262  edtde9	dex
263  	cpx wchmac
264  	beq edtd11
265  	lda macmem-1,x
266  	cmp #10
267  	beq edtd10
268  	cmp #11
269  	bne edtde9
270  edtd10	sta maccty
271  edtd11	lda maccty
272  	jmp edtdln
273  edtd12	and #$7f
274  	cmp #18
275  	bne edtd15
276  	ldx macro_tmp
277  edtd13	dex
278  	cpx wchmac
279  	beq edtd14
280  	lda macmem-1,x
281  	and #$7f
282  	cmp #18
283  	bne edtd13
284  	lda macmem-1,x
285  	sta macrvs
286  edtd14	lda macrvs
287  	and #$80
288  	eor #$80
289  	sta 199
290  	lda macrvs
291  	jmp edtdln
292  edtd15
293  	cmp #12
294  	beq edtd16
295  	cmp #LOCASE
296  	beq edtd16
297  	cmp #21
298  	bne edtd19
299  edtd16	ldx macro_tmp
300  edtdlc	dex
301  	cpx wchmac
302  	beq edtd18
303  	lda macmem-1,x
304  	cmp #12
305  	beq edtd17
306  	cmp #LOCASE
307  	beq edtd17
308  	cmp #21
309  	bne edtdlc
310  edtd17	sta maccas
311  edtd18	lda maccas
312  	jmp edtdln
313  edtd19
314  	cmp #CR
315  	bne edtdla
316  	lda #0
317  	sta 199
318  	lda #RVSOFF
319  	jsr edprrv
320  	dec macro_tmp
321  	ldx macro_tmp
322  	lda #0
323  	sta macmem,x
324  	sec
325  	rts
326  edtdle
327  	lda #20
328  	jsr edprrv
329  	lda #INST
330  edtdln
331  	jsr edprrv
332  edtdla
333  	dec macro_tmp
334  	ldx macro_tmp
335  	lda #0
336  	sta macmem,x
337  	clc
338  	rts
339  edprrv
340  	sta tmp02
341  	lda 199
342  	pha
343  	lda #0
344  	sta 199
345  	jsr cursor_off
346  	lda tmp02
347  	jsr handle_control_codes
348  	bcs edprr2
349  	jsr chrout
350  	jsr quote_insert_off
351  edprr2	pla
352  	sta 199
353  	jmp cursor_show
354  edtcok
355  	ldy #15
356  edtco2	cmp COLTAB,y
357  	beq edtco3
358  	dey
359  	bpl edtco2
360  edtco3	rts