fix text rendering bugs (#841)

This commit is contained in:
water111 2021-09-08 22:04:30 -04:00 committed by GitHub
parent bb49790d3d
commit 18df68b1f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 193 additions and 156 deletions

View file

@ -24,6 +24,9 @@ void EmptyBucketRenderer::render(DmaFollower& dma, SharedRenderState* render_sta
// CALL
auto call_tag = dma.current_tag();
dma.read_and_advance();
if (!(call_tag.kind == DmaTag::Kind::CALL && call_tag.qwc == 0)) {
fmt::print("Bucket renderer {} ({}) was supposed to be empty, but wasn't\n", m_my_id, m_name);
}
assert(call_tag.kind == DmaTag::Kind::CALL && call_tag.qwc == 0);
// in the default reg buffer:

View file

@ -13,6 +13,7 @@ enum class BucketId {
BUCKET0 = 0,
BUCKET1 = 1,
// ...
SPRITE = 66,
DEBUG_DRAW_0 = 67,
DEBUG_DRAW_1 = 68,
MAX_BUCKETS = 69

View file

@ -55,6 +55,7 @@ void OpenGLRenderer::init_bucket_renderers() {
init_bucket_renderer<EmptyBucketRenderer>("bucket0", BucketId::BUCKET0);
// TODO what the heck is drawing to debug-draw-0 on init?
init_bucket_renderer<DirectRenderer>("sprite", BucketId::SPRITE, 102);
init_bucket_renderer<DirectRenderer>("debug-draw-0", BucketId::DEBUG_DRAW_0, 102);
init_bucket_renderer<DirectRenderer>("debug-draw-1", BucketId::DEBUG_DRAW_1, 102);

View file

@ -619,11 +619,11 @@
(r0 uint128) (v0-0 float) (a0-2 int) (font-table-12 (inline-array vector)) (a3-6 (inline-array vector))
(a3-8 (inline-array vector)) (t0-1 int) (q-hi-tmpl uint128) (color-array-prod int) (q-verts-2t uint128)
(q-verts-2 uint128) (q-verts-3t uint128) (q-verts-3 uint128) (t4-6 int) (fc-cr uint) (t4-16 int) (t4-17 int)
(t4-18 float) (t4-19 int) (t4-23 int) (t4-32 int) (t4-33 int) (t4-36 uint128) (t4-37 uint128) (q-verts-1t uint128)
(t4-18 int) (t4-19 int) (t4-23 int) (t4-32 int) (t4-33 int) (t4-36 uint128) (t4-37 uint128) (q-verts-1t uint128)
(q-verts-1 uint128) (not-sc-lit1 uint) (not-sc-~ uint) (t5-6 int) (t5-7 int) (t5-9 int) (t5-10 uint) (t5-11 uint)
(t5-13 int) (t5-14 int) (t5-17 int) (t5-18 int) (t5-19 float) (t5-20 int) (t5-23 uint128) (t5-24 uint) (t5-25 uint)
(t5-13 int) (t5-14 int) (t5-17 int) (t5-18 int) (t5-19 int) (t5-20 int) (t5-23 uint128) (t5-24 uint) (t5-25 uint)
(t5-27 int) (t5-28 int) (t5-32 uint128) (t5-33 uint128) (t5-35 uint128) (t5-36 uint128) (t5-39 int) (t5-40 int)
(t5-41 float) (t5-42 int) (t5-45 uint128) (q-verts-0t uint128) (q-verts-0 uint128) (t6-3 uint) (t6-4 uint) (t6-5 uint)
(t5-41 int) (t5-42 int) (t5-45 uint128) (q-verts-0t uint128) (q-verts-0 uint128) (t6-3 uint) (t6-4 uint) (t6-5 uint)
(t6-6 uint) (t6-7 uint) (t6-10 uint) (t6-11 uint) (t6-12 uint) (t6-13 uint) (t6-14 uint) (t6-16 uint) (t6-20 uint)
(t6-21 uint) (t6-22 uint) (t6-23 uint) (t6-24 uint) (t6-28 uint128) (t6-29 uint128) (t6-31 uint) (t7-0 uint)
(t7-2 uint) (t7-3 uint) (t7-4 uint) (t7-5 uint) (t7-6 uint) (t7-7 uint) (t7-8 uint) (t7-9 uint) (t7-10 uint)
@ -1621,14 +1621,13 @@
)
(defun get-string-length ((arg0 string) (arg1 font-context))
"Get the length of a string, in pixels"
(local-vars
(v0-0 float) (a2-1 (inline-array vector)) (a2-4 (inline-array vector)) (a3-2 int) (a3-9 uint)
(a3-10 int) (t0-0 uint) (t0-1 uint) (t0-3 int) (t0-4 int) (t0-5 int) (t1-1 uint) (t1-2 uint)
(t1-3 uint) (t1-4 uint) (t1-5 uint) (t2-0 uint) (t2-2 uint) (t2-3 uint) (t2-4 uint) (t2-5 uint)
(t2-6 uint) (t2-7 uint) (t2-8 uint) (t2-9 uint) (t2-10 uint) (t2-11 uint) (t2-12 uint) (t2-13 uint)
(t2-14 uint) (t2-15 uint) (t2-16 uint) (t2-17 uint) (t3-0 uint) (t3-1 int)
)
(v0-0 float) (a2-1 (inline-array vector)) (a2-4 (inline-array vector)) (a3-2 int) (a3-9 uint)
(a3-10 int) (t0-0 uint) (t0-1 uint) (t0-3 int) (t0-4 int) (t0-5 int) (t1-1 uint) (t1-2 uint)
(t1-3 uint) (t1-4 uint) (t1-5 uint) (t2-0 uint) (t2-2 uint) (t2-3 uint) (t2-4 uint) (t2-5 uint)
(t2-6 uint) (t2-7 uint) (t2-8 uint) (t2-9 uint) (t2-10 uint) (t2-11 uint) (t2-12 uint)
(t2-13 uint) (t2-14 uint) (t2-15 uint) (t2-16 uint) (t2-17 uint) (t3-0 uint) (t3-1 int)
)
(rlet ((vf0 :class vf)
(vf1 :class vf)
(vf13 :class vf)
@ -1639,148 +1638,168 @@
(vf25 :class vf)
(vf5 :class vf)
)
(init-vf0-vector)
(.lvf vf25 (&-> arg1 context-vec quad))
(.lvf vf23 (&-> arg1 origin quad))
(.lvf vf24 (&-> arg1 origin quad))
(let ((v1-0 (-> arg1 flags-signed)))
(let ((a1-2 *video-parms*))
(.lvf vf1 (+ (the-as int a1-2) 64))
)
(.mul.vf vf25 vf25 vf1 :mask #b11)
(.mul.vf vf23 vf23 vf1 :mask #b11)
(.mul.vf vf24 vf24 vf1 :mask #b11)
(let ((a1-4 *font-work*))
(set! (-> a1-4 str-ptr) (the-as uint arg0))
(set! (-> a1-4 flags) (the-as font-flags v1-0))
(.mov.vf vf1 vf0)
(let ((a2-0 (logand v1-0 32)))
(b! (nonzero? a2-0) cfg-2 :delay (set! a2-1 *font12-table*))
)
(let ((a2-2 a2-1))
(.lvf vf13 (&-> a1-4 size1-small quad))
(b! #t cfg-3 :delay (.lvf vf14 (&-> a1-4 size2-small quad)))
(label cfg-2)
(set! a2-2 *font24-table*)
(.lvf vf13 (&-> a1-4 size1-large quad))
(.lvf vf14 (&-> a1-4 size2-large quad))
(label cfg-3)
(let ((a3-0 (-> (the-as (pointer uint8) arg0) 4)))
(set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1)))
(b! (zero? a3-0) cfg-51 :delay (set! t0-0 (+ a3-0 -1)))
(b! (zero? t0-0) cfg-44 :delay (set! t0-1 (+ a3-0 -126)))
(b! (nonzero? t0-1) cfg-45)
(set! a3-0 (-> (the-as (pointer uint8) arg0) 4))
(set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1)))
0
(let ((t1-0 0))
(b! (zero? a3-0) cfg-51 :delay (set! t2-0 (+ a3-0 -43)))
(.movz t0-3 a3-0 t2-0 0) ;; TODO Wrong
(let ((t2-1 (+ a3-0 -45)))
(.movz t0-4 a3-0 t2-1 0 );; TODO wrong
)
(b! (nonzero? t0-4) cfg-14 :delay (set! t2-2 (+ a3-0 -121)))
(b! (zero? t2-2) cfg-42 :delay (set! t1-1 (+ a3-0 -89)))
(b! (zero? t1-1) cfg-42 :delay (set! t1-2 (+ a3-0 -122)))
(b! (zero? t1-2) cfg-43 :delay (set! t1-3 (+ a3-0 -90)))
(b! (zero? t1-3) cfg-43 :delay (set! t1-4 (+ a3-0 -48)))
(b! (< (the-as int t1-4) 0) cfg-45 :delay (set! t1-5 (+ a3-0 -57)))
(b!
(> (the-as int t1-5) 0)
cfg-45
:delay
(set! t1-0 (the-as int (+ a3-0 -48)))
)
(label cfg-14)
(set! a3-0 (-> (the-as (pointer uint8) arg0) 4))
(set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1)))
(b! (zero? a3-0) cfg-51 :delay (set! t2-3 (+ a3-0 -110)))
(b! (zero? t2-3) cfg-32 :delay (set! t2-4 (+ a3-0 -78)))
(b! (zero? t2-4) cfg-32 :delay (set! t2-5 (+ a3-0 -108)))
(b! (zero? t2-5) cfg-3 :delay (set! t2-6 (+ a3-0 -76)))
(b! (zero? t2-6) cfg-3 :delay (set! t2-7 (+ a3-0 -119)))
(b! (zero? t2-7) cfg-3 :delay (set! t2-8 (+ a3-0 -87)))
(b! (zero? t2-8) cfg-3 :delay (set! t2-9 (+ a3-0 -107)))
(b! (zero? t2-9) cfg-35 :delay (set! t2-10 (+ a3-0 -75)))
(b! (zero? t2-10) cfg-35 :delay (set! t2-11 (+ a3-0 -106)))
(b! (zero? t2-11) cfg-3 :delay (set! t2-12 (+ a3-0 -74)))
(b! (zero? t2-12) cfg-3 :delay (set! t2-13 (+ a3-0 -104)))
(b! (zero? t2-13) cfg-37 :delay (set! t2-14 (+ a3-0 -72)))
(b! (zero? t2-14) cfg-37 :delay (set! t2-15 (+ a3-0 -118)))
(b! (zero? t2-15) cfg-3 :delay (set! t2-16 (+ a3-0 -86)))
(b! (zero? t2-16) cfg-3 :delay (set! t2-17 (+ a3-0 -48)))
(b! (< (the-as int t2-17) 0) cfg-45 :delay (set! t3-0 (+ a3-0 -57)))
(b! (> (the-as int t3-0) 0) cfg-45 :delay (.sll t3-1 t1-0 2))
(let ((a3-1 (+ t1-0 t3-1)))
(.sll a3-2 a3-1 1)
)
(b! #t cfg-14 :delay (set! t1-0 (+ a3-2 t2-17)))
(label cfg-32)
(b! (nonzero? t1-0) cfg-34 :delay (set! a2-4 *font12-table*))
(set! a2-2 a2-4)
(let ((a3-3 -33))
(.lvf vf13 (&-> a1-4 size1-small quad))
(.lvf vf14 (&-> a1-4 size2-small quad))
(b! #t cfg-3 :delay (set! v1-0 (logand v1-0 a3-3)))
)
(label cfg-34)
(set! a2-2 *font24-table*)
(.lvf vf13 (&-> a1-4 size1-large quad))
(.lvf vf14 (&-> a1-4 size2-large quad))
(b! #t cfg-3 :delay (set! v1-0 (logior v1-0 32)))
(label cfg-35)
(let ((a3-4 -3))
(b! (zero? t1-0) cfg-3 :delay (set! v1-0 (logand v1-0 a3-4)))
)
(b! #t cfg-3 :delay (set! v1-0 (logior v1-0 2)))
(label cfg-37)
(.mov vf1 t1-0)
)
(let ((a3-5 (+ t0-4 -45)))
(b! (zero? t0-4) cfg-41 :delay (.itof.vf vf1 vf1))
(b! (zero? a3-5) cfg-40)
)
(b! #t cfg-3 :delay (.add.x.vf vf23 vf23 vf1 :mask #b1))
(label cfg-40)
(b! #t cfg-3 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b1))
(label cfg-41)
(b! #t cfg-3 :delay (.add.x.vf vf23 vf0 vf1 :mask #b1))
(label cfg-42)
(b! #t cfg-3 :delay (.svf (&-> a1-4 save quad) vf23))
(label cfg-43)
(b! #t cfg-3 :delay (.lvf vf23 (&-> a1-4 save quad)))
(label cfg-44)
(let ((a3-6 (-> (the-as (pointer uint8) arg0) 4)))
(set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1)))
(let ((a3-7 (logand a3-6 127)))
(let ((a3-8 (+ a3-7 255)))
(b! #t cfg-48 :delay (.sll t0-5 a3-8 4))
)
)
)
(label cfg-45)
(.sll t0-5 a3-0 4)
(b! (= a3-0 10) cfg-47 :delay (set! a3-9 (+ a3-0 -13)))
)
(b! (nonzero? a3-9) cfg-48)
(label cfg-47)
(b! #t cfg-3 :delay (.add.x.vf vf23 vf0 vf24 :mask #b1))
(label cfg-48)
(.addu a3-10 t0-5 a2-2)
)
)
(.lvf vf5 (+ a3-10 -256))
(.mul.vf vf19 vf5 vf13)
(b! (zero? (logand v1-0 2)) cfg-50)
)
(b! #t cfg-3 :delay (.add.w.vf vf23 vf23 vf19 :mask #b1))
(label cfg-50)
(b! #t cfg-3 :delay (.add.w.vf vf23 vf23 vf14 :mask #b1))
(label cfg-51)
(.sub.vf vf23 vf23 vf24)
(.mov v0-0 vf23)
v0-0
(init-vf0-vector)
(.lvf vf25 (&-> arg1 context-vec quad))
(.lvf vf23 (&-> arg1 origin quad))
(.lvf vf24 (&-> arg1 origin quad))
(let ((v1-0 (-> arg1 flags-signed)))
(let ((a1-2 *video-parms*))
(.lvf vf1 (+ (the int a1-2) 64))
)
(.mul.vf vf25 vf25 vf1 :mask #b11)
(.mul.vf vf23 vf23 vf1 :mask #b11)
(.mul.vf vf24 vf24 vf1 :mask #b11)
(let ((a1-4 *font-work*))
(set! (-> a1-4 str-ptr) (the-as uint arg0))
(set! (-> a1-4 flags) (the-as font-flags v1-0))
(.mov.vf vf1 vf0)
(let ((a2-0 (logand v1-0 32)))
(nop!)
(b! (nonzero? a2-0) cfg-2 :delay (set! a2-1 *font12-table*))
)
(let ((a2-2 a2-1))
(nop!)
(.lvf vf13 (&-> a1-4 size1-small quad))
(b! #t cfg-3 :delay (.lvf vf14 (&-> a1-4 size2-small quad)))
(label cfg-2)
(nop!)
(set! a2-2 *font24-table*)
(nop!)
(.lvf vf13 (&-> a1-4 size1-large quad))
(nop!)
(.lvf vf14 (&-> a1-4 size2-large quad))
(label cfg-3)
(let ((a3-0 (-> (the-as (pointer uint8) arg0) 4)))
(set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1)))
(b! (zero? a3-0) cfg-51 :delay (set! t0-0 (+ a3-0 -1)))
(b! (zero? t0-0) cfg-44 :delay (set! t0-1 (+ a3-0 -126)))
(b! (nonzero? t0-1) cfg-45 :delay (nop!))
(set! a3-0 (-> (the-as (pointer uint8) arg0) 4))
(set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1)))
(let ((t0-2 0)
(t1-0 0)
)
(b! (zero? a3-0) cfg-51 :delay (set! t2-0 (+ a3-0 -43)))
(.movz t0-3 a3-0 t2-0 t0-2)
(let ((t2-1 (+ a3-0 -45)))
(.movz t0-4 a3-0 t2-1 t0-3)
)
(nop!)
(b! (nonzero? t0-4) cfg-14 :delay (set! t2-2 (+ a3-0 -121)))
(b! (zero? t2-2) cfg-42 :delay (set! t1-1 (+ a3-0 -89)))
(b! (zero? t1-1) cfg-42 :delay (set! t1-2 (+ a3-0 -122)))
(b! (zero? t1-2) cfg-43 :delay (set! t1-3 (+ a3-0 -90)))
(b! (zero? t1-3) cfg-43 :delay (set! t1-4 (+ a3-0 -48)))
(b! (< (the-as int t1-4) 0) cfg-45 :delay (set! t1-5 (+ a3-0 -57)))
(b!
(> (the-as int t1-5) 0)
cfg-45
:delay
(set! t1-0 (the-as int (+ a3-0 -48)))
)
(label cfg-14)
(set! a3-0 (-> (the-as (pointer uint8) arg0) 4))
(set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1)))
(b! (zero? a3-0) cfg-51 :delay (set! t2-3 (+ a3-0 -110)))
(b! (zero? t2-3) cfg-32 :delay (set! t2-4 (+ a3-0 -78)))
(b! (zero? t2-4) cfg-32 :delay (set! t2-5 (+ a3-0 -108)))
(b! (zero? t2-5) cfg-3 :delay (set! t2-6 (+ a3-0 -76)))
(b! (zero? t2-6) cfg-3 :delay (set! t2-7 (+ a3-0 -119)))
(b! (zero? t2-7) cfg-3 :delay (set! t2-8 (+ a3-0 -87)))
(b! (zero? t2-8) cfg-3 :delay (set! t2-9 (+ a3-0 -107)))
(b! (zero? t2-9) cfg-35 :delay (set! t2-10 (+ a3-0 -75)))
(b! (zero? t2-10) cfg-35 :delay (set! t2-11 (+ a3-0 -106)))
(b! (zero? t2-11) cfg-3 :delay (set! t2-12 (+ a3-0 -74)))
(b! (zero? t2-12) cfg-3 :delay (set! t2-13 (+ a3-0 -104)))
(b! (zero? t2-13) cfg-37 :delay (set! t2-14 (+ a3-0 -72)))
(b! (zero? t2-14) cfg-37 :delay (set! t2-15 (+ a3-0 -118)))
(b! (zero? t2-15) cfg-3 :delay (set! t2-16 (+ a3-0 -86)))
(b! (zero? t2-16) cfg-3 :delay (set! t2-17 (+ a3-0 -48)))
(b! (< (the-as int t2-17) 0) cfg-45 :delay (set! t3-0 (+ a3-0 -57)))
(b! (> (the-as int t3-0) 0) cfg-45 :delay (.sll t3-1 t1-0 2))
(let ((a3-1 (+ t1-0 t3-1)))
(nop!)
(.sll a3-2 a3-1 1)
)
(nop!)
(b! #t cfg-14 :delay (set! t1-0 (+ a3-2 t2-17)))
(label cfg-32)
(b! (nonzero? t1-0) cfg-34 :delay (set! a2-4 *font12-table*))
(set! a2-2 a2-4)
(let ((a3-3 -33))
(.lvf vf13 (&-> a1-4 size1-small quad))
(nop!)
(.lvf vf14 (&-> a1-4 size2-small quad))
(b! #t cfg-3 :delay (set! v1-0 (logand v1-0 a3-3)))
)
(label cfg-34)
(nop!)
(set! a2-2 *font24-table*)
(nop!)
(.lvf vf13 (&-> a1-4 size1-large quad))
(nop!)
(.lvf vf14 (&-> a1-4 size2-large quad))
(b! #t cfg-3 :delay (set! v1-0 (logior v1-0 32)))
(label cfg-35)
(let ((a3-4 -3))
(nop!)
(b! (zero? t1-0) cfg-3 :delay (set! v1-0 (logand v1-0 a3-4)))
)
(b! #t cfg-3 :delay (set! v1-0 (logior v1-0 2)))
(label cfg-37)
(.mov vf1 t1-0)
)
(let ((a3-5 (+ t0-4 -45)))
(b! (zero? t0-4) cfg-41 :delay (.itof.vf vf1 vf1))
(b! (zero? a3-5) cfg-40 :delay (nop!))
)
(b! #t cfg-3 :delay (.add.x.vf vf23 vf23 vf1 :mask #b1))
(label cfg-40)
(b! #t cfg-3 :delay (.sub.x.vf vf23 vf23 vf1 :mask #b1))
(label cfg-41)
(b! #t cfg-3 :delay (.add.x.vf vf23 vf0 vf1 :mask #b1))
(label cfg-42)
(b! #t cfg-3 :delay (.svf (&-> a1-4 save quad) vf23))
(label cfg-43)
(b! #t cfg-3 :delay (.lvf vf23 (&-> a1-4 save quad)))
(label cfg-44)
(let ((a3-6 (-> (the-as (pointer uint8) arg0) 4)))
(set! arg0 (the-as string (&-> (the-as (pointer uint8) arg0) 1)))
(nop!)
(let ((a3-7 (logand a3-6 127)))
(nop!)
(let ((a3-8 (+ a3-7 255)))
(b! #t cfg-48 :delay (.sll t0-5 a3-8 4))
)
)
)
(label cfg-45)
(nop!)
(.sll t0-5 a3-0 4)
(nop!)
(b! (= a3-0 10) cfg-47 :delay (set! a3-9 (+ a3-0 -13)))
)
(b! (nonzero? a3-9) cfg-48 :delay (nop!))
(label cfg-47)
(b! #t cfg-3 :delay (.add.x.vf vf23 vf0 vf24 :mask #b1))
(label cfg-48)
(.addu a3-10 t0-5 a2-2)
)
)
(nop!)
(.lvf vf5 (+ a3-10 -256))
(nop!)
(.mul.vf vf19 vf5 vf13)
(b! (zero? (logand v1-0 2)) cfg-50 :delay (nop!))
)
(b! #t cfg-3 :delay (.add.w.vf vf23 vf23 vf19 :mask #b1))
(label cfg-50)
(b! #t cfg-3 :delay (.add.w.vf vf23 vf23 vf14 :mask #b1))
(label cfg-51)
(.sub.vf vf23 vf23 vf24)
(.mov v0-0 vf23)
v0-0
)
)
(defun draw-string-xy ((str string) (buf dma-buffer) (x int) (y int) (color font-color) (flags font-flags))

View file

@ -509,7 +509,7 @@
(if (logtest? (-> gp-0 flags) 4)
(+! (-> gp-0 origin x) (* 0.5 (-> font-ctxt width)))
)
(set! sv-176 (the-as int (-> sv-140 0)))
(set! sv-176 (the-as int (-> sv-140 0))) ;; char
(set! sv-184 0)
(set! sv-192 0)
(set! sv-200 0)
@ -517,8 +517,7 @@
(set! sv-212 (the-as symbol #f))
(set! (-> *game-text-line* data 0) (the-as uint 0))
(while
(or
(not (and (zero? sv-176) (zero? sv-184) (zero? sv-192)))
(or (not (and (zero? sv-176) (zero? sv-184) (zero? sv-192)))
(>= sv-156 (-> gp-0 origin y))
)
(cond

View file

@ -62,7 +62,7 @@
"This function draws the debug stuff. You can edit this, then reload this file to play with it."
;; val will increase from 0 to 1, then reset back to 0.
(let* ((frame (the float (mod (* 4 iter) 1600)))
(let* ((frame (the float (mod (* 4 iter) 3200)))
(val (/ frame 1600.0)))
(format *stdcon* "~0kval ~f~%" val)
@ -102,7 +102,7 @@
)
;; these also work
;; (draw-end-credits (the int frame))
(draw-end-credits (the int frame))
;; (draw-title-credits val)
)
@ -260,3 +260,17 @@
)
(set! *display-profile* #t)
(defun text-randomizer ()
(dotimes (i 10000)
(let ((idx1 (rand-vu-int-count (-> *common-text* length))))
(dotimes (j 20) (rand-vu))
(let ((idx2 (rand-vu-int-count (-> *common-text* length))))
(let ((temp (-> *common-text* data idx1 text)))
(set! (-> *common-text* data idx1 text) (-> *common-text* data idx2 text))
(set! (-> *common-text* data idx2 text) temp)
)
)
)
)
)