// #LAYOUT# STD * #TAKE // #LAYOUT# * BASIC_0 #TAKE // #LAYOUT# * * #IGNORE // // Frees the string if it belongs to temporary string stack // // Input: // - DSCPNT+1/+2 - pointer to string (depending on the call addres, can fetch from FAC1/FAC2) // tmpstr_free_FAC1: lda __FAC1+1 sta DSCPNT+1 lda __FAC1+2 #if HAS_OPCODES_65C02 bra !+ #else jmp !+ #endif tmpstr_free_FAC2: lda __FAC2+1 sta DSCPNT+1 lda __FAC2+2 !: sta DSCPNT+2 // FALLTROUGH tmpstr_free: // First find the descriptor matching the given string ldx #$19 //FALLTROUGH tmpstr_free_loop: cpx TEMPPT bne !+ rts // quit if not found !: // First fetch the string size - if 0, do not even try to compare ldy $00, x beq tmpstr_free_next_3 // Check if current string inx lda $00, x cmp DSCPNT+1 bne tmpstr_free_next_2 inx lda $00, x cmp DSCPNT+2 bne tmpstr_free_next_1 // This is the string we need to free sty DSCPNT+0 phx_trash_a jsr varstr_free plx_trash_a // Mark empty string as free and quit dex dex lda #$00 sta $00, x rts tmpstr_free_next_3: inx // FALLTROUGH tmpstr_free_next_2: inx // FALLTROUGH tmpstr_free_next_1: inx bne tmpstr_free_loop