From 996f96a6ff405a8aa466cfb0403a196ed44293ce Mon Sep 17 00:00:00 2001 From: Joshua Bell Date: Fri, 1 Sep 2017 08:15:05 -0700 Subject: [PATCH] text pos/bbox --- desk.acc/show.text.file/a2d.inc | 4 ++ desk.acc/show.text.file/stf.list | 112 ++++++++++++++++++------------- desk.acc/show.text.file/stf.o | Bin 21605 -> 21604 bytes desk.acc/show.text.file/stf.s | 92 ++++++++++++++----------- 4 files changed, 123 insertions(+), 85 deletions(-) diff --git a/desk.acc/show.text.file/a2d.inc b/desk.acc/show.text.file/a2d.inc index 58d48a4..ea1fe5e 100644 --- a/desk.acc/show.text.file/a2d.inc +++ b/desk.acc/show.text.file/a2d.inc @@ -6,6 +6,10 @@ A2D := $4000 UNKNOWN_CALL := $8E00 +A2D_SET_TEXT_POS:= $0E + ;; .word left + ;; .word base + A2D_DRAW_TEXT := $19 ;; .addr data ;; .byte length diff --git a/desk.acc/show.text.file/stf.list b/desk.acc/show.text.file/stf.list index 61002ea..04a859d 100644 --- a/desk.acc/show.text.file/stf.list +++ b/desk.acc/show.text.file/stf.list @@ -83,6 +83,10 @@ Current file: stf.s 000800 2 A2D := $4000 000800 2 UNKNOWN_CALL := $8E00 000800 2 +000800 2 A2D_SET_TEXT_POS:= $0E +000800 2 ;; .word left +000800 2 ;; .word base +000800 2 000800 2 A2D_DRAW_TEXT := $19 000800 2 ;; .addr data 000800 2 ;; .byte length @@ -104,16 +108,14 @@ Current file: stf.s 000800 2 A2D_GET_MOUSE := $40 000800 2 ;; .word x 000800 2 ;; .word y -000800 2 ;; .word element -000800 2 ;; 0 = ?? -000800 2 ;; 1 = ?? -000800 2 ;; 2 = client area/scroll bar +000800 2 ;; .byte element +000800 2 ;; 0 = desktop +000800 2 ;; 1 = menu +000800 2 ;; 2 = client area (including scroll bars/resize box) 000800 2 ;; 3 = title bar 000800 2 ;; 4 = ??? (but tested for?) 000800 2 ;; 5 = close box -000800 2 ;; .word window -000800 2 ;; $0 = outside window -000800 2 ;; $64 = in window +000800 2 ;; .byte id of window 000800 2 000800 2 A2D_BTN_CLICK := $43 000800 2 ;; .byte clicked (0 = cancelled, 1 = clicked) @@ -138,6 +140,8 @@ Current file: stf.s 000800 2 ;; .byte pos (new position 0...250) 000800 2 000800 2 ;;; Used in A2D_GET_MOUSE +000800 2 A2D_ELEM_DESKTOP:= 0 +000800 2 A2D_ELEM_MENU := 1 000800 2 A2D_ELEM_CLIENT := 2 000800 2 A2D_ELEM_TITLE := 3 000800 2 A2D_ELEM_TBD := 4 ; ??? @@ -396,10 +400,12 @@ Current file: stf.s 00095A 1 00 L095A: .byte $00 00095B 1 FA L095B: .byte $FA 00095C 1 01 L095C: .byte $01 -00095D 1 00 L095D: .byte $00 -00095E 1 00 L095E: .byte $00 -00095F 1 00 L095F: .byte $00 -000960 1 00 L0960: .byte $00 +00095D 1 +00095D 1 .proc line_pos +00095D 1 00 00 left: .word 0 +00095F 1 00 00 base: .word 0 +000961 1 .endproc +000961 1 000961 1 00 L0961: .byte $00 000962 1 00 L0962: .byte $00 000963 1 00 L0963: .byte $00 @@ -505,6 +511,8 @@ Current file: stf.s 0009C3 1 00 00 00 01 0009C7 1 01 00 7F 00 .byte $01,$00,$7F,$00,$88,$00,$00 0009CB 1 88 00 00 +0009CE 1 +0009CE 1 ;; these 16 bytes get copied over L09A8 after mode is drawn 0009CE 1 0A 00 1C 00 L09CE: .byte $0A,$00,$1C,$00,$00,$20,$80,$00 0009D2 1 00 20 80 00 0009D6 1 00 00 00 00 .byte $00,$00,$00,$00,$00,$02,$96,$00 @@ -1108,12 +1116,12 @@ Current file: stf.s 000E4B 1 8D 45 09 sta L0945 000E4E 1 8D 46 09 sta L0946 000E51 1 8D 47 09 sta L0947 -000E54 1 8D 60 09 sta L0960 +000E54 1 8D 60 09 sta line_pos::base+1 000E57 1 8D 6C 09 sta L096C 000E5A 1 8D 6D 09 sta L096D 000E5D 1 8D 48 09 sta L0948 000E60 1 A9 0A lda #$0A -000E62 1 8D 5F 09 sta L095F +000E62 1 8D 5F 09 sta line_pos::base 000E65 1 20 DB 0E jsr L0EDB 000E68 1 AD 6D 09 L0E68: lda L096D 000E6B 1 CD 6B 09 cmp L096B @@ -1123,14 +1131,14 @@ Current file: stf.s 000E76 1 D0 06 bne L0E7E 000E78 1 20 1D 0E jsr L0E1D 000E7B 1 EE 48 09 inc L0948 -000E7E 1 20 00 40 0E L0E7E: A2D_CALL $0E, L095D +000E7E 1 20 00 40 0E L0E7E: A2D_CALL A2D_SET_TEXT_POS, line_pos 000E82 1 5D 09 000E84 1 38 sec 000E85 1 A9 FA lda #$FA -000E87 1 ED 5D 09 sbc L095D +000E87 1 ED 5D 09 sbc line_pos::left 000E8A 1 8D 5B 09 sta L095B 000E8D 1 A9 01 lda #$01 -000E8F 1 ED 5E 09 sbc L095E +000E8F 1 ED 5E 09 sbc line_pos::left+1 000E92 1 8D 5C 09 sta L095C 000E95 1 20 F3 0E jsr L0EF3 000E98 1 B0 3D bcs L0ED7 @@ -1143,11 +1151,11 @@ Current file: stf.s 000EA6 1 AD 5A 09 L0EA6: lda L095A 000EA9 1 D0 BD bne L0E68 000EAB 1 18 clc -000EAC 1 AD 5F 09 lda L095F +000EAC 1 AD 5F 09 lda line_pos::base 000EAF 1 69 0A adc #$0A -000EB1 1 8D 5F 09 sta L095F +000EB1 1 8D 5F 09 sta line_pos::base 000EB4 1 90 03 bcc L0EB9 -000EB6 1 EE 60 09 inc L0960 +000EB6 1 EE 60 09 inc line_pos::base+1 000EB9 1 20 DB 0E L0EB9: jsr L0EDB 000EBC 1 AD 6C 09 lda L096C 000EBF 1 CD 68 09 cmp L0968 @@ -1170,9 +1178,9 @@ Current file: stf.s 000EE0 1 A9 01 lda #$01 000EE2 1 8D 5C 09 sta L095C 000EE5 1 A9 03 lda #$03 -000EE7 1 8D 5D 09 sta L095D +000EE7 1 8D 5D 09 sta line_pos::left 000EEA 1 A9 00 lda #$00 -000EEC 1 8D 5E 09 sta L095E +000EEC 1 8D 5E 09 sta line_pos::left+1 000EEF 1 8D 5A 09 sta L095A 000EF2 1 60 rts 000EF3 1 .endproc @@ -1259,17 +1267,17 @@ Current file: stf.s 000FA0 1 8D 5A 09 sta L095A 000FA3 1 18 clc 000FA4 1 AD 9C 0F lda L0F9C -000FA7 1 6D 5D 09 adc L095D -000FAA 1 8D 5D 09 sta L095D +000FA7 1 6D 5D 09 adc line_pos::left +000FAA 1 8D 5D 09 sta line_pos::left 000FAD 1 AD 9D 0F lda L0F9D -000FB0 1 6D 5E 09 adc L095E -000FB3 1 8D 5E 09 sta L095E +000FB0 1 6D 5E 09 adc line_pos::left+1 +000FB3 1 8D 5E 09 sta line_pos::left+1 000FB6 1 A2 00 ldx #0 000FB8 1 BD E9 0F loop: lda times70+1,x -000FBB 1 CD 5E 09 cmp L095E +000FBB 1 CD 5E 09 cmp line_pos::left+1 000FBE 1 D0 06 bne L0FC6 000FC0 1 BD E8 0F lda times70,x -000FC3 1 CD 5D 09 cmp L095D +000FC3 1 CD 5D 09 cmp line_pos::left 000FC6 1 B0 09 L0FC6: bcs L0FD1 000FC8 1 E8 inx 000FC9 1 E8 inx @@ -1277,9 +1285,9 @@ Current file: stf.s 000FCC 1 F0 12 beq done 000FCE 1 4C B8 0F jmp loop 000FD1 1 BD E8 0F L0FD1: lda times70,x -000FD4 1 8D 5D 09 sta L095D +000FD4 1 8D 5D 09 sta line_pos::left 000FD7 1 BD E9 0F lda times70+1,x -000FDA 1 8D 5E 09 sta L095E +000FDA 1 8D 5E 09 sta line_pos::left+1 000FDD 1 4C 86 0F jmp L0F86 000FE0 1 A9 00 done: lda #0 000FE2 1 8D 5A 09 sta L095A @@ -1466,10 +1474,10 @@ Current file: stf.s 00113A 1 ;;; toggle it and update. 00113A 1 .proc on_title_bar_click 00113A 1 AD 72 09 lda mouse_data::xcoord+1 ; mouse x high byte? -00113D 1 CD 85 11 cmp label_left+1 +00113D 1 CD 85 11 cmp mode_box_left+1 001140 1 D0 06 bne :+ 001142 1 AD 71 09 lda mouse_data::xcoord -001145 1 CD 84 11 cmp label_left +001145 1 CD 84 11 cmp mode_box_left 001148 1 90 19 : bcc ignore 00114A 1 AD 6F 09 lda fixed_mode_flag 00114D 1 F0 09 beq set_flag @@ -1495,19 +1503,28 @@ Current file: stf.s 001179 1 72 6F 70 6F 00117D 1 72 74 69 6F 001184 1 -001184 1 ;;; Scratch space for Fixed/Proportional drawing code -001184 1 00 00 label_left: .word 0 ; left edge of label -001186 1 00 00 00 20 L1186: .byte $00,$00,$00,$20,$80,$00,$00,$00 -00118A 1 80 00 00 00 -00118E 1 00 00 50 00 .byte $00,$00,$50,$00,$0A,$00 -001192 1 0A 00 -001194 1 00 00 0A 00 L1194: .byte $00,$00,$0A,$00 +001184 1 .proc mode_box ; bounding box for mode label +001184 1 00 00 left: .word 0 +001186 1 00 00 top: .word 0 +001188 1 00 20 80 00 .byte $00,$20,$80,$00,$00,$00 ; ??? +00118C 1 00 00 +00118E 1 00 00 .byte $00,$00 +001190 1 50 00 width: .word 80 +001192 1 0A 00 height: .word 10 +001194 1 .endproc +001194 1 mode_box_left := mode_box::left ; forward refs to mode_box::left don't work? +001194 1 +001194 1 .proc mode_pos +001194 1 00 00 left: .word 0 ; horizontal text offset +001196 1 0A 00 base: .word 10 ; vertical text offset (to baseline) +001198 1 .endproc +001198 1 001198 1 001198 1 .proc calc_and_draw_mode 001198 1 38 sec -001199 1 AD AA 09 lda L09AA -00119C 1 E9 0C sbc #$0C -00119E 1 8D 86 11 sta L1186 +001199 1 AD AA 09 lda L09AA ; maybe top of window ?? +00119C 1 E9 0C sbc #12 ; height of title bar ?? +00119E 1 8D 86 11 sta mode_box::top ; label top ?? 0011A1 1 18 clc 0011A2 1 AD A8 09 lda L09A8 0011A5 1 6D 61 09 adc L0961 @@ -1517,18 +1534,18 @@ Current file: stf.s 0011AF 1 AA tax 0011B0 1 38 sec 0011B1 1 68 pla -0011B2 1 E9 32 sbc #$32 -0011B4 1 8D 84 11 sta label_left +0011B2 1 E9 32 sbc #50 +0011B4 1 8D 84 11 sta mode_box::left 0011B7 1 8A txa -0011B8 1 E9 00 sbc #$00 -0011BA 1 8D 85 11 sta label_left+1 +0011B8 1 E9 00 sbc #0 +0011BA 1 8D 85 11 sta mode_box::left+1 0011BD 1 ;; fall through... 0011BD 1 .endproc 0011BD 1 0011BD 1 .proc draw_mode -0011BD 1 20 00 40 06 A2D_CALL $06, label_left ; guess: setting up draw location ??? +0011BD 1 20 00 40 06 A2D_CALL $06, mode_box ; guess: setting up draw location ??? 0011C1 1 84 11 -0011C3 1 20 00 40 0E A2D_CALL $0E, L1194 +0011C3 1 20 00 40 0E A2D_CALL A2D_SET_TEXT_POS, mode_pos 0011C7 1 94 11 0011C9 1 AD 6F 09 lda fixed_mode_flag 0011CC 1 F0 09 beq else ; is proportional? @@ -1537,6 +1554,7 @@ Current file: stf.s 0011D4 1 4C DD 11 jmp endif 0011D7 1 20 00 40 19 else: A2D_CALL A2D_DRAW_TEXT, prop_str 0011DB 1 75 11 +0011DD 1 0011DD 1 A2 0F endif: ldx #$0F 0011DF 1 BD CE 09 loop: lda L09CE,x 0011E2 1 9D A8 09 sta L09A8,x diff --git a/desk.acc/show.text.file/stf.o b/desk.acc/show.text.file/stf.o index 5876f29d8d97b9e2bbee7e9dd108181cd7cb8b9c..11096010dbf05fab3eeefc331265859c21082f0a 100644 GIT binary patch literal 21604 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 w?85bgvqw>dk^Y+JD`>egzf0ez@KIhzX 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 Gg8v2NT9q*X diff --git a/desk.acc/show.text.file/stf.s b/desk.acc/show.text.file/stf.s index c66693c..b8b622e 100644 --- a/desk.acc/show.text.file/stf.s +++ b/desk.acc/show.text.file/stf.s @@ -208,14 +208,17 @@ params_end: ;;; ---------------------------------------- .byte $00,$00,$00,$00 + L0952: .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF L095A: .byte $00 L095B: .byte $FA L095C: .byte $01 -L095D: .byte $00 -L095E: .byte $00 -L095F: .byte $00 -L0960: .byte $00 + +.proc line_pos +left: .word 0 +base: .word 0 +.endproc + L0961: .byte $00 L0962: .byte $00 L0963: .byte $00 @@ -316,6 +319,8 @@ L09B6: .byte $96 L09B7: .byte $00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$FF,$00,$00,$00,$00,$00,$01 .byte $01,$00,$7F,$00,$88,$00,$00 + + ;; these 16 bytes get copied over L09A8 after mode is drawn L09CE: .byte $0A,$00,$1C,$00,$00,$20,$80,$00 .byte $00,$00,$00,$00,$00,$02,$96,$00 @@ -899,12 +904,12 @@ L0E1D: A2D_CALL $08, L0952 sta L0945 sta L0946 sta L0947 - sta L0960 + sta line_pos::base+1 sta L096C sta L096D sta L0948 lda #$0A - sta L095F + sta line_pos::base jsr L0EDB L0E68: lda L096D cmp L096B @@ -914,13 +919,13 @@ L0E68: lda L096D bne L0E7E jsr L0E1D inc L0948 -L0E7E: A2D_CALL $0E, L095D +L0E7E: A2D_CALL A2D_SET_TEXT_POS, line_pos sec lda #$FA - sbc L095D + sbc line_pos::left sta L095B lda #$01 - sbc L095E + sbc line_pos::left+1 sta L095C jsr L0EF3 bcs L0ED7 @@ -933,11 +938,11 @@ L0E7E: A2D_CALL $0E, L095D L0EA6: lda L095A bne L0E68 clc - lda L095F + lda line_pos::base adc #$0A - sta L095F + sta line_pos::base bcc L0EB9 - inc L0960 + inc line_pos::base+1 L0EB9: jsr L0EDB lda L096C cmp L0968 @@ -960,9 +965,9 @@ L0ED7: jsr L1109 lda #$01 sta L095C lda #$03 - sta L095D + sta line_pos::left lda #$00 - sta L095E + sta line_pos::left+1 sta L095A rts .endproc @@ -1049,17 +1054,17 @@ L0F9D: .byte 0 sta L095A clc lda L0F9C - adc L095D - sta L095D + adc line_pos::left + sta line_pos::left lda L0F9D - adc L095E - sta L095E + adc line_pos::left+1 + sta line_pos::left+1 ldx #0 loop: lda times70+1,x - cmp L095E + cmp line_pos::left+1 bne L0FC6 lda times70,x - cmp L095D + cmp line_pos::left L0FC6: bcs L0FD1 inx inx @@ -1067,9 +1072,9 @@ L0FC6: bcs L0FD1 beq done jmp loop L0FD1: lda times70,x - sta L095D + sta line_pos::left lda times70+1,x - sta L095E + sta line_pos::left+1 jmp L0F86 done: lda #0 sta L095A @@ -1255,10 +1260,10 @@ end: rts ;;; toggle it and update. .proc on_title_bar_click lda mouse_data::xcoord+1 ; mouse x high byte? - cmp label_left+1 + cmp mode_box_left+1 bne :+ lda mouse_data::xcoord - cmp label_left + cmp mode_box_left : bcc ignore lda fixed_mode_flag beq set_flag @@ -1280,17 +1285,27 @@ ignore: clc ; Click ignored fixed_str: A2D_DEFSTRING "Fixed " prop_str: A2D_DEFSTRING "Proportional" -;;; Scratch space for Fixed/Proportional drawing code -label_left: .word 0 ; left edge of label -L1186: .byte $00,$00,$00,$20,$80,$00,$00,$00 - .byte $00,$00,$50,$00,$0A,$00 -L1194: .byte $00,$00,$0A,$00 +.proc mode_box ; bounding box for mode label +left: .word 0 +top: .word 0 + .byte $00,$20,$80,$00,$00,$00 ; ??? + .byte $00,$00 +width: .word 80 +height: .word 10 +.endproc +mode_box_left := mode_box::left ; forward refs to mode_box::left don't work? + +.proc mode_pos +left: .word 0 ; horizontal text offset +base: .word 10 ; vertical text offset (to baseline) +.endproc + .proc calc_and_draw_mode sec - lda L09AA - sbc #$0C - sta L1186 + lda L09AA ; maybe top of window ?? + sbc #12 ; height of title bar ?? + sta mode_box::top ; label top ?? clc lda L09A8 adc L0961 @@ -1300,22 +1315,23 @@ L1194: .byte $00,$00,$0A,$00 tax sec pla - sbc #$32 - sta label_left + sbc #50 + sta mode_box::left txa - sbc #$00 - sta label_left+1 + sbc #0 + sta mode_box::left+1 ;; fall through... .endproc .proc draw_mode - A2D_CALL $06, label_left ; guess: setting up draw location ??? - A2D_CALL $0E, L1194 + A2D_CALL $06, mode_box ; guess: setting up draw location ??? + A2D_CALL A2D_SET_TEXT_POS, mode_pos lda fixed_mode_flag beq else ; is proportional? A2D_CALL A2D_DRAW_TEXT, fixed_str jmp endif else: A2D_CALL A2D_DRAW_TEXT, prop_str + endif: ldx #$0F loop: lda L09CE,x sta L09A8,x