.segment "CODE" ; ---------------------------------------------------------------------------- ; "DIM" STATEMENT ; ---------------------------------------------------------------------------- NXDIM: jsr CHKCOM DIM: tax jsr PTRGET2 jsr CHRGOT bne NXDIM rts ; ---------------------------------------------------------------------------- ; PTRGET -- GENERAL VARIABLE SCAN ; ; SCANS VARIABLE NAME AT TXTPTR, AND SEARCHES THE ; VARTAB AND ARYTAB FOR THE NAME. ; IF NOT FOUND, CREATE VARIABLE OF APPROPRIATE TYPE. ; RETURN WITH ADDRESS IN VARPNT AND Y,A ; ; ACTUAL ACTIVITY CONTROLLED SOMEWHAT BY TWO FLAGS: ; DIMFLG -- NONZERO IF CALLED FROM "DIM" ; ELSE = 0 ; ; SUBFLG -- = $00 ; = $40 IF CALLED FROM "GETARYPT" ; ---------------------------------------------------------------------------- PTRGET: ldx #$00 jsr CHRGOT PTRGET2: stx DIMFLG PTRGET3: sta VARNAM jsr CHRGOT jsr ISLETC bcs NAMOK SYNERR3: jmp SYNERR NAMOK: ldx #$00 stx VALTYP .ifndef CONFIG_SMALL stx VALTYP+1 .endif jsr CHRGET bcc L2ECD jsr ISLETC bcc L2ED8 L2ECD: tax L2ECE: jsr CHRGET bcc L2ECE jsr ISLETC bcs L2ECE L2ED8: cmp #$24 .ifdef CONFIG_SMALL bne L2EF9 .else bne L2EE2 .endif lda #$FF sta VALTYP .ifndef CONFIG_SMALL bne L2EF2 L2EE2: cmp #$25 bne L2EF9 lda SUBFLG bne SYNERR3 lda #$80 sta VALTYP+1 ora VARNAM sta VARNAM L2EF2: .endif txa ora #$80 tax jsr CHRGET L2EF9: stx VARNAM+1 sec ora SUBFLG sbc #$28 bne L2F05 jmp ARRAY L2F05: lda #$00 sta SUBFLG lda VARTAB ldx VARTAB+1 ldy #$00 L2F0F: stx LOWTR+1 L2F11: sta LOWTR cpx ARYTAB+1 bne L2F1B cmp ARYTAB beq NAMENOTFOUND L2F1B: lda VARNAM cmp (LOWTR),y bne L2F29 lda VARNAM+1 iny cmp (LOWTR),y beq SET_VARPNT_AND_YA dey L2F29: clc lda LOWTR adc #BYTES_PER_VARIABLE bcc L2F11 inx bne L2F0F ; ---------------------------------------------------------------------------- ; CHECK IF (A) IS ASCII LETTER A-Z ; ; RETURN CARRY = 1 IF A-Z ; = 0 IF NOT ; ---------------------------------------------------------------------------- ISLETC: cmp #$41 bcc L2F3C sbc #$5B sec sbc #$A5 L2F3C: rts ; ---------------------------------------------------------------------------- ; VARIABLE NOT FOUND, SO MAKE ONE ; ---------------------------------------------------------------------------- NAMENOTFOUND: pla pha cmp #FRM_VARIABLE_CALL bne MAKENEWVARIABLE .endif LD015: lda #C_ZERO rts ; ---------------------------------------------------------------------------- .ifndef CONFIG_2 C_ZERO: .byte $00,$00 .endif ; ---------------------------------------------------------------------------- ; MAKE A NEW SIMPLE VARIABLE ; ; MOVE ARRAYS UP 7 BYTES TO MAKE ROOM FOR NEW VARIABLE ; ENTER 7-BYTE VARIABLE DATA IN THE HOLE ; ---------------------------------------------------------------------------- MAKENEWVARIABLE: .ifdef CONFIG_CBM_ALL lda VARNAM ldy VARNAM+1 cmp #$54 bne LD02F cpy #$C9 beq LD015 cpy #$49 bne LD02F LD02C: jmp SYNERR LD02F: cmp #$53 bne LD037 cpy #$54 beq LD02C LD037: .endif lda ARYTAB ldy ARYTAB+1 sta LOWTR sty LOWTR+1 lda STREND ldy STREND+1 sta HIGHTR sty HIGHTR+1 clc adc #BYTES_PER_VARIABLE bcc L2F68 iny L2F68: sta HIGHDS sty HIGHDS+1 jsr BLTU lda HIGHDS ldy HIGHDS+1 iny sta ARYTAB sty ARYTAB+1 ldy #$00 lda VARNAM sta (LOWTR),y iny lda VARNAM+1 sta (LOWTR),y lda #$00 iny sta (LOWTR),y iny sta (LOWTR),y iny sta (LOWTR),y iny sta (LOWTR),y .ifndef CONFIG_SMALL iny sta (LOWTR),y .endif ; ---------------------------------------------------------------------------- ; PUT ADDRESS OF VALUE OF VARIABLE IN VARPNT AND Y,A ; ---------------------------------------------------------------------------- SET_VARPNT_AND_YA: lda LOWTR clc adc #$02 ldy LOWTR+1 bcc L2F9E iny L2F9E: sta VARPNT sty VARPNT+1 rts