Implement def_warps_to in a simpler way

Instead of building a semicolon-separated "array" of warp_to coordinates in _WARP_TO_BUFFER, just declare a new EQUS for each one: _WARP_TO_NUM_1, _WARP_TO_NUM_2, etc. Then have def_warps_to output and PURGE each one of them.
This commit is contained in:
Rangi 2020-08-17 19:30:32 -04:00
parent 6fa8a553cb
commit 5e1865a7b1

View file

@ -42,10 +42,6 @@ def_warps: MACRO
_NUM_WARPS EQUS "_NUM_WARPS_\@" _NUM_WARPS EQUS "_NUM_WARPS_\@"
db _NUM_WARPS db _NUM_WARPS
_NUM_WARPS = 0 _NUM_WARPS = 0
IF DEF(_WARP_TO_BUFFER)
PURGE _WARP_TO_BUFFER
ENDC
_WARP_TO_BUFFER EQUS ""
ENDM ENDM
;\1 x position ;\1 x position
@ -55,10 +51,9 @@ ENDM
warp: MACRO warp: MACRO
db \2, \1, \3, \4 db \2, \1, \3, \4
_NUM_WARPS = _NUM_WARPS + 1 _NUM_WARPS = _NUM_WARPS + 1
_TMP EQUS "{_WARP_TO_BUFFER}\1,\2; " _WARP_TO_NAME EQUS "_WARP_TO_NUM_{d:{_NUM_WARPS}}"
PURGE _WARP_TO_BUFFER _WARP_TO_NAME EQUS "warp_to \1, \2, _WARP_TO_WIDTH"
_WARP_TO_BUFFER EQUS "{_TMP}" PURGE _WARP_TO_NAME
PURGE _TMP
ENDM ENDM
def_signs: MACRO def_signs: MACRO
@ -78,17 +73,18 @@ sign: MACRO
_NUM_SIGNS = _NUM_SIGNS + 1 _NUM_SIGNS = _NUM_SIGNS + 1
ENDM ENDM
;\1 source map
def_warps_to: MACRO def_warps_to: MACRO
_WARP_TO_WIDTH = \1_WIDTH _WARP_TO_WIDTH = \1_WIDTH
_WARP_TO_N = 1
REPT _NUM_WARPS REPT _NUM_WARPS
_SEP = STRIN("{_WARP_TO_BUFFER}", ";") _WARP_TO_NAME EQUS "_WARP_TO_NUM_{d:_WARP_TO_N}"
_WARP_TO_NTH EQUS STRCAT(STRCAT("warp_to ", STRSUB("{_WARP_TO_BUFFER}", 1, _SEP - 1)), ", _WARP_TO_WIDTH") _WARP_TO_NAME
_TMP EQUS STRSUB("{_WARP_TO_BUFFER}", _SEP + 1, STRLEN("{_WARP_TO_BUFFER}") - _SEP) _WARP_TO_N = _WARP_TO_N + 1
PURGE _WARP_TO_BUFFER _PURGE_WARP_TO_NUM EQUS "PURGE {_WARP_TO_NAME}"
_WARP_TO_BUFFER EQUS "{_TMP}" _PURGE_WARP_TO_NUM
PURGE _TMP PURGE _PURGE_WARP_TO_NUM
_WARP_TO_NTH PURGE _WARP_TO_NAME
PURGE _WARP_TO_NTH
ENDR ENDR
ENDM ENDM