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