James,
Okay, I've got it figured out, (I think).
The solution was, to not "free" (clear) the strings associated with the I/O buffer, but, to simply zero them out when they are no longer needed.
This required inventing another keyword, but, I see no other way of doing it.
Since the keywords FIELD and LSET/RSET directly pertain to the buffer and associated string names, I figured it was going to either be UNFIELD or UNSET.
So I decided on UNSET.
Here is an example of it's usage:
FIELD #1, 4 AS A$, 4 AS B$, 8 AS D$, 10 AS E$
LSET A$ = MKI$(dz)
LSET B$ = MKI$(cz%)
LSET D$ = MKD$(az#)
RSET E$ = w$
PUT 1, rec
CLOSE 1
UNSET A$, B$, D$, E$
CLEAR
UNSET must be used after CLOSE and prior to a CLEAR command.
Here is what that snippet of asm code looks like:
mov eax, 0
call closeafile
mov A, 0 ; release string from I/O buffer
mov B, 0 ; release string from I/O buffer
mov D, 0 ; release string from I/O buffer
mov E, 0 ; release string from I/O buffer
; --------------------------------------------------
call clear_allvars
I have attached the new sources and executable.
Thanks,
Steve