I'm sure there's a more efficient way for this, but as for arrays, here's the syntax:
ACTION_DEFINE_ASSOCIATIVE_ARRAY bytemap BEGIN
1 => ~001~
2 => ~002~
END
OUTER_SET x = 1
OUTER_SPRINT y $bytemap(~%x%~)
PRINT ~%y%~
Thank you. Although a bit unwieldy, I have found
ACTION_DEFINE_ARRAY array BEGIN " 0" " 1" " 2" " 3" " 4" " 5" " 6" " 7" " 8" " 9" " 10" " 11" " 12" " 13" " 14" " 15" " 16" " 17" " 18" " 19" " 20" " 21" " 22" " 23" " 24" " 25" " 26" " 27" " 28" " 29" " 30" " 31" " 32" " 33" " 34" " 35" " 36" " 37" " 38" " 39" " 40" " 41" " 42" " 43" " 44" " 45" " 46" " 47" " 48" " 49" " 50" " 51" " 52" " 53" " 54" " 55" " 56" " 57" " 58" " 59" " 60" " 61" " 62" " 63" " 64" " 65" " 66" " 67" " 68" " 69" " 70" " 71" " 72" " 73" " 74" " 75" " 76" " 77" " 78" " 79" " 80" " 81" " 82" " 83" " 84" " 85" " 86" " 87" " 88" " 89" " 90" " 91" " 92" " 93" " 94" " 95" " 96" " 97" " 98" " 99" "100" "101" "102" "103" "104" "105" "106" "107" "108" "109" "110" "111" "112" "113" "114" "115" "116" "117" "118" "119" "120" "121" "122" "123" "124" "125" "126" "127" "128" "129" "130" "131" "132" "133" "134" "135" "136" "137" "138" "139" "140" "141" "142" "143" "144" "145" "146" "147" "148" "149" "150" "151" "152" "153" "154" "155" "156" "157" "158" "159" "160" "161" "162" "163" "164" "165" "166" "167" "168" "169" "170" "171" "172" "173" "174" "175" "176" "177" "178" "179" "180" "181" "182" "183" "184" "185" "186" "187" "188" "189" "190" "191" "192" "193" "194" "195" "196" "197" "198" "199" "200" "201" "202" "203" "204" "205" "206" "207" "208" "209" "210" "211" "212" "213" "214" "215" "216" "217" "218" "219" "220" "221" "222" "223" "224" "225" "226" "227" "228" "229" "230" "231" "232" "233" "234" "235" "236" "237" "238" "239" "240" "241" "242" "243" "244" "245" "246" "247" "248" "249" "250" "251" "252" "253" "254" "255" END
works well enough and resolves quickly with minimal computations.
I'm sure there's a more efficient way for this
Agreed. My next bottleneck seems to be the large number of string concatenations. I'm thinking calculating the total amount of space needed, allocating that space via INSERT_BYTES, and then many WRITE_ASCIIs should be quicker. The question is whether having to be in an INNER_PATCH_SAVE requites enough overhead to negate the speed increase from not having to repeatedly increase the string buffer size. I'll have to test this.
@Argent77
Thanks for this example! I believe I understand how
$array(idx)
is used, but what is
array_%idx%
supposed to do and how/in what context would WeiDU know that this should be resolved into a value in an array?
Is
$EVAL
documented somewhere? Presumably this is EVALUATE_BUFFER, but it evaluates array syntax instead of (or in addition to?) variables surrounded with %s? When can it be used, and is it possible to have an array expression evaluated within a string (such as for PRINT) instead of going through OUTER_TEXT_SPRINT first?