client/scroll clicks

This commit is contained in:
Joshua Bell 2017-08-30 20:30:46 -07:00
parent 5e1027b8e5
commit 9a7cb2e7a5
4 changed files with 202 additions and 122 deletions

View File

@ -6,10 +6,38 @@
A2D := $4000
UNKNOWN_CALL := $8E00
A2D_TEXT := $19 ; { .addr data, .byte len }
A2D_GET_BUTTON := $2A ; { .byte state (0=up, 1=down?, 2=released?) }
A2D_GET_MOUSE := $40 ; { .word x, .word y, ????...}
A2D_BTN_CLICK := $43 ; { .byte clicked (0=cancelled, 1=clicked), .byte ??, byte ?? }
A2D_DRAW_TEXT := $19
;; .addr data
;; .byte length
A2D_GET_BUTTON := $2A
;; .byte state (0=up, 1=down?, 2=released?)
A2D_GET_MOUSE := $40
;; .word x
;; .word y
;; .word element
;; 0 = ??
;; 1 = ??
;; 2 = client area/scroll bar
;; 3 = title bar
;; 4 = ??? (but tested for?)
;; 5 = close box
;; .word window
;; $0 = outside window
;; $64 = in window
A2D_BTN_CLICK := $43
;; .byte clicked (0 = cancelled, 1 = clicked)
;; .byte ??
;; .byte ??
A2D_QUERY_CLIENT:= $48
;; .word xcoord of query
;; .word ycoord of query
;; .byte part (0 = client, 1 = vertical scroll bar, 2 = ???)
;; .byte scroll (1 = up, 2 = down, 3 = above, 4 = below, 5 = thumb)
;;; Macros
.macro A2D_CALL op, addr

View File

@ -76,10 +76,38 @@ Current file: stf.s
000800 2 A2D := $4000
000800 2 UNKNOWN_CALL := $8E00
000800 2
000800 2 A2D_TEXT := $19 ; { .addr data, .byte len }
000800 2 A2D_GET_BUTTON := $2A ; { .byte state (0=up, 1=down?, 2=released?) }
000800 2 A2D_GET_MOUSE := $40 ; { .word x, .word y, ????...}
000800 2 A2D_BTN_CLICK := $43 ; { .byte clicked (0=cancelled, 1=clicked), .byte ??, byte ?? }
000800 2 A2D_DRAW_TEXT := $19
000800 2 ;; .addr data
000800 2 ;; .byte length
000800 2
000800 2 A2D_GET_BUTTON := $2A
000800 2 ;; .byte state (0=up, 1=down?, 2=released?)
000800 2
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 ;; 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
000800 2 A2D_BTN_CLICK := $43
000800 2 ;; .byte clicked (0 = cancelled, 1 = clicked)
000800 2 ;; .byte ??
000800 2 ;; .byte ??
000800 2
000800 2 A2D_QUERY_CLIENT:= $48
000800 2 ;; .word xcoord of query
000800 2 ;; .word ycoord of query
000800 2 ;; .byte part (0 = client, 1 = vertical scroll bar, 2 = ???)
000800 2 ;; .byte scroll (1 = up, 2 = down, 3 = above, 4 = below, 5 = thumb)
000800 2
000800 2
000800 2 ;;; Macros
000800 2 .macro A2D_CALL op, addr
@ -331,25 +359,29 @@ Current file: stf.s
000970 1 00 .byte $00
000971 1
000971 1 .proc mouse_data
000971 1 00 00 xcoord: .word 0 ; lo/hi of mouse x position
000973 1 00 00 ycoord: .word 0 ; lo of mouse y position (hi = unused?) ?????
000975 1 00 elem: .byte $00 ; 3 = title, 4 = ???, 5 = close
000976 1 00 win: .byte $00 ; $64 = mouse in window
000971 1 00 00 xcoord: .word 0
000973 1 00 00 ycoord: .word 0
000975 1 00 elem: .byte $00
000976 1 00 win: .byte $00
000977 1 .endproc
000977 1
000977 1 64 L0977: .byte $64
000978 1 00 L0978: .byte $00
000979 1 00 L0979: .byte $00
00097A 1 00 00 00 L097A: .byte $00,$00,$00
000978 1 00 00 xcoord1:.word 0 ; ???
00097A 1 00 00 ycoord1:.word 0 ; ???
00097C 1 00 .byte 0 ; ???
00097D 1
00097D 1 close_btn_state:
00097D 1 00 00 00 .byte $00,$00,$00
00097D 1 .proc close_btn
00097D 1 00 state: .byte 0
00097E 1 00 00 .byte 0,0
000980 1 .endproc
000980 1
000980 1 00 L0980: .byte $00
000981 1 00 L0981: .byte $00
000982 1 00 00 L0982: .byte $00,$00
000984 1 00 L0984: .byte $00
000985 1 00 L0985: .byte $00
000980 1 .proc query_client_params
000980 1 00 00 xcoord: .word 0
000982 1 00 00 ycoord: .word 0
000984 1 00 part: .byte 0 ; 0 = client, 1 = scroll bar, 2 = ?????
000985 1 00 scroll: .byte 0 ; 1 = up, 2 = down, 3 = above, 4 = below, 5 = thumb
000986 1 .endproc
000986 1
000986 1 00 L0986: .byte $00
000987 1 00 L0987: .byte $00
000988 1 00 L0988: .byte $00
@ -522,35 +554,35 @@ Current file: stf.s
000ADE 1
000ADE 1 20 00 40 40 A2D_CALL A2D_GET_MOUSE, mouse_data
000AE2 1 71 09
000AE4 1 AD 76 09 lda mouse_data::win ; click target??
000AE7 1 C9 64 cmp #$64 ; is in window??
000AE4 1 AD 76 09 lda mouse_data::win ; click target??
000AE7 1 C9 64 cmp #$64 ; is in window??
000AE9 1 D0 E6 bne input_loop
000AEB 1 AD 75 09 lda mouse_data::elem ; which UI element?
000AEE 1 C9 05 cmp #$05 ; 5 = close btn
000AEB 1 AD 75 09 lda mouse_data::elem ; which UI element?
000AEE 1 C9 05 cmp #$05 ; 5 = close btn
000AF0 1 F0 2F beq on_close_btn_down
000AF2 1 AE 71 09 ldx mouse_data::xcoord ; stash mouse location
000AF5 1 8E 78 09 stx L0978
000AF8 1 8E 80 09 stx L0980
000AF2 1 AE 71 09 ldx mouse_data::xcoord ; stash mouse location
000AF5 1 8E 78 09 stx xcoord1
000AF8 1 8E 80 09 stx query_client_params::xcoord
000AFB 1 AE 72 09 ldx mouse_data::xcoord+1
000AFE 1 8E 79 09 stx L0979
000B01 1 8E 81 09 stx L0981
000AFE 1 8E 79 09 stx xcoord1+1
000B01 1 8E 81 09 stx query_client_params::xcoord+1
000B04 1 AE 73 09 ldx mouse_data::ycoord
000B07 1 8E 7A 09 stx L097A
000B0A 1 8E 82 09 stx L0982
000B0D 1 C9 03 cmp #$03 ; 3 = title bar
000B0F 1 F0 0A beq L0B1B
000B11 1 C9 04 cmp #$04 ; 4 = ??? scroll track maybe??
000B07 1 8E 7A 09 stx ycoord1
000B0A 1 8E 82 09 stx query_client_params::ycoord
000B0D 1 C9 03 cmp #$03 ; 3 = title bar
000B0F 1 F0 0A beq :+
000B11 1 C9 04 cmp #$04 ; 4 = ???
000B13 1 F0 BC beq input_loop
000B15 1 20 B4 0B jsr L0BB4
000B15 1 20 B4 0B jsr on_client_click
000B18 1 4C D1 0A jmp input_loop
000B1B 1
000B1B 1 20 3A 11 L0B1B: jsr on_title_bar_click
000B1B 1 20 3A 11 : jsr on_title_bar_click
000B1E 1 4C D1 0A jmp input_loop
000B21 1
000B21 1 .proc on_close_btn_down
000B21 1 20 00 40 43 A2D_CALL A2D_BTN_CLICK, close_btn_state ; wait to see if the click completes
000B21 1 20 00 40 43 A2D_CALL A2D_BTN_CLICK, close_btn ; wait to see if the click completes
000B25 1 7D 09
000B27 1 AD 7D 09 lda close_btn_state ; all the way?
000B27 1 AD 7D 09 lda close_btn::state ; did click complete?
000B2A 1 F0 A5 beq input_loop ; nope
000B2C 1 20 AF 08 jsr close_file
000B2F 1 20 00 40 39 A2D_CALL $39, L0994
@ -562,6 +594,8 @@ Current file: stf.s
000B3B 1 60 rts ; exits input loop
000B3C 1 .endproc
000B3C 1
000B3C 1 ;;; How would control get here???? Dead code???
000B3C 1 .proc maybe_dead_code
000B3C 1 20 00 40 45 A2D_CALL $45, L0977
000B40 1 77 09
000B42 1 20 FD 10 jsr L10FD
@ -610,35 +644,39 @@ Current file: stf.s
000BAC 1 86 09
000BAE 1 20 98 11 jsr calc_and_draw_mode
000BB1 1 4C F9 0D jmp L0DF9
000BB4 1 .endproc
000BB4 1
000BB4 1 20 00 40 48 L0BB4: A2D_CALL $48, L0980
000BB4 1 .proc on_client_click
000BB4 1 20 00 40 48 A2D_CALL A2D_QUERY_CLIENT, query_client_params
000BB8 1 80 09
000BBA 1 AD 84 09 lda L0984
000BBD 1 C9 01 cmp #$01
000BBF 1 F0 08 beq L0BC9
000BC1 1 C9 02 cmp #$02
000BC3 1 D0 03 bne L0BC8
000BBA 1 AD 84 09 lda query_client_params::part
000BBD 1 C9 01 cmp #1 ; 1 = vertical scroll bar
000BBF 1 F0 08 beq on_vertical_scroll_bar_click
000BC1 1 C9 02 cmp #2 ; 2 = ???
000BC3 1 D0 03 bne L0BC8 ; 0 = client area
000BC5 1 4C 95 0C jmp L0C95
000BC8 1
000BC8 1 .endproc
000BC8 1 60 L0BC8: rts
000BC9 1
000BC9 1 ;;; Handle scroll bar click
000BC9 1 .proc on_vertical_scroll_bar_click
000BC9 1 A9 01 L0BC9: lda #$01
000BCB 1 8D 8A 09 sta L098A
000BCE 1 8D 88 09 sta L0988
000BD1 1 AD 85 09 lda L0985
000BD4 1 C9 05 cmp #$05
000BD1 1 AD 85 09 lda query_client_params::scroll
000BD4 1 C9 05 cmp #5
000BD6 1 F0 14 beq L0BEC
000BD8 1 C9 04 cmp #$04
000BD8 1 C9 04 cmp #4
000BDA 1 F0 62 beq L0C3E
000BDC 1 C9 03 cmp #$03
000BDC 1 C9 03 cmp #3
000BDE 1 F0 31 beq L0C11
000BE0 1 C9 01 cmp #$01
000BE0 1 C9 01 cmp #1
000BE2 1 F0 49 beq L0C2D
000BE4 1 C9 02 cmp #$02
000BE6 1 D0 03 bne L0BEB
000BE4 1 C9 02 cmp #2
000BE6 1 D0 03 bne end
000BE8 1 4C 60 0C jmp L0C60
000BEB 1
000BEB 1 60 L0BEB: rts
000BEB 1 60 end: rts
000BEC 1 .endproc
000BEC 1
000BEC 1 20 39 0D L0BEC: jsr L0D39
000BEF 1 AD 90 09 lda L0990
@ -722,19 +760,21 @@ Current file: stf.s
000C91 1 8E 6E 09 stx L096E
000C94 1 60 rts
000C95 1
000C95 1 ;;; Haven't been able to trigger this yet - click on ???
000C95 1 ;;; Possibly horizontal scroll bar? (unused in this DA - generic code?)
000C95 1 A9 02 L0C95: lda #$02
000C97 1 8D 8A 09 sta L098A
000C9A 1 8D 88 09 sta L0988
000C9D 1 AD 85 09 lda L0985
000CA0 1 C9 05 cmp #$05
000C9D 1 AD 85 09 lda query_client_params::scroll
000CA0 1 C9 05 cmp #5
000CA2 1 F0 11 beq L0CB5
000CA4 1 C9 04 cmp #$04
000CA4 1 C9 04 cmp #4
000CA6 1 F0 3F beq L0CE7
000CA8 1 C9 03 cmp #$03
000CA8 1 C9 03 cmp #3
000CAA 1 F0 43 beq L0CEF
000CAC 1 C9 01 cmp #$01
000CAC 1 C9 01 cmp #1
000CAE 1 F0 4E beq L0CFE
000CB0 1 C9 02 cmp #$02
000CB0 1 C9 02 cmp #2
000CB2 1 F0 42 beq L0CF6
000CB4 1 60 rts
000CB5 1
@ -1106,7 +1146,7 @@ Current file: stf.s
000FF9 1 F0 10 beq L100B
000FFB 1 AD 93 09 lda text_string_len
000FFE 1 F0 0B beq L100B
001000 1 20 00 40 19 L1000: A2D_CALL A2D_TEXT, text_string
001000 1 20 00 40 19 L1000: A2D_CALL A2D_DRAW_TEXT, text_string
001004 1 91 09
001006 1 A9 01 lda #$01
001008 1 8D 49 09 sta L0949
@ -1328,10 +1368,10 @@ Current file: stf.s
0011C7 1 94 11
0011C9 1 AD 6F 09 lda fixed_mode_flag
0011CC 1 F0 09 beq else ; is proportional?
0011CE 1 20 00 40 19 A2D_CALL A2D_TEXT, fixed_str
0011CE 1 20 00 40 19 A2D_CALL A2D_DRAW_TEXT, fixed_str
0011D2 1 65 11
0011D4 1 4C DD 11 jmp endif
0011D7 1 20 00 40 19 else: A2D_CALL A2D_TEXT, prop_str
0011D7 1 20 00 40 19 else: A2D_CALL A2D_DRAW_TEXT, prop_str
0011DB 1 75 11
0011DD 1 endif:
0011DD 1 A2 0F ldx #$0F

Binary file not shown.

View File

@ -226,25 +226,29 @@ button_state:
.byte $00
.proc mouse_data
xcoord: .word 0 ; lo/hi of mouse x position
ycoord: .word 0 ; lo of mouse y position (hi = unused?) ?????
elem: .byte $00 ; 3 = title, 4 = ???, 5 = close
win: .byte $00 ; $64 = mouse in window
xcoord: .word 0
ycoord: .word 0
elem: .byte $00
win: .byte $00
.endproc
L0977: .byte $64
L0978: .byte $00
L0979: .byte $00
L097A: .byte $00,$00,$00
xcoord1:.word 0 ; ???
ycoord1:.word 0 ; ???
.byte 0 ; ???
close_btn_state:
.byte $00,$00,$00
.proc close_btn
state: .byte 0
.byte 0,0
.endproc
.proc query_client_params
xcoord: .word 0
ycoord: .word 0
part: .byte 0 ; 0 = client, 1 = scroll bar, 2 = ?????
scroll: .byte 0 ; 1 = up, 2 = down, 3 = above, 4 = below, 5 = thumb
.endproc
L0980: .byte $00
L0981: .byte $00
L0982: .byte $00,$00
L0984: .byte $00
L0985: .byte $00
L0986: .byte $00
L0987: .byte $00
L0988: .byte $00
@ -405,34 +409,34 @@ input_loop:
bne input_loop ; nope, keep waiting
A2D_CALL A2D_GET_MOUSE, mouse_data
lda mouse_data::win ; click target??
cmp #$64 ; is in window??
lda mouse_data::win ; click target??
cmp #$64 ; is in window??
bne input_loop
lda mouse_data::elem ; which UI element?
cmp #$05 ; 5 = close btn
lda mouse_data::elem ; which UI element?
cmp #$05 ; 5 = close btn
beq on_close_btn_down
ldx mouse_data::xcoord ; stash mouse location
stx L0978
stx L0980
ldx mouse_data::xcoord ; stash mouse location
stx xcoord1
stx query_client_params::xcoord
ldx mouse_data::xcoord+1
stx L0979
stx L0981
stx xcoord1+1
stx query_client_params::xcoord+1
ldx mouse_data::ycoord
stx L097A
stx L0982
cmp #$03 ; 3 = title bar
beq L0B1B
cmp #$04 ; 4 = ??? scroll track maybe??
stx ycoord1
stx query_client_params::ycoord
cmp #$03 ; 3 = title bar
beq :+
cmp #$04 ; 4 = ???
beq input_loop
jsr L0BB4
jsr on_client_click
jmp input_loop
L0B1B: jsr on_title_bar_click
: jsr on_title_bar_click
jmp input_loop
.proc on_close_btn_down
A2D_CALL A2D_BTN_CLICK, close_btn_state ; wait to see if the click completes
lda close_btn_state ; all the way?
A2D_CALL A2D_BTN_CLICK, close_btn ; wait to see if the click completes
lda close_btn::state ; did click complete?
beq input_loop ; nope
jsr close_file
A2D_CALL $39, L0994
@ -443,6 +447,8 @@ L0B1B: jsr on_title_bar_click
rts ; exits input loop
.endproc
;;; How would control get here???? Dead code???
.proc maybe_dead_code
A2D_CALL $45, L0977
jsr L10FD
jsr L1088
@ -489,34 +495,38 @@ L0B8B: sta L0998
A2D_CALL $49, L0986
jsr calc_and_draw_mode
jmp L0DF9
.endproc
L0BB4: A2D_CALL $48, L0980
lda L0984
cmp #$01
beq L0BC9
cmp #$02
bne L0BC8
.proc on_client_click
A2D_CALL A2D_QUERY_CLIENT, query_client_params
lda query_client_params::part
cmp #1 ; 1 = vertical scroll bar
beq on_vertical_scroll_bar_click
cmp #2 ; 2 = ???
bne L0BC8 ; 0 = client area
jmp L0C95
.endproc
L0BC8: rts
;;; Handle scroll bar click
.proc on_vertical_scroll_bar_click
L0BC9: lda #$01
sta L098A
sta L0988
lda L0985
cmp #$05
lda query_client_params::scroll
cmp #5
beq L0BEC
cmp #$04
cmp #4
beq L0C3E
cmp #$03
cmp #3
beq L0C11
cmp #$01
cmp #1
beq L0C2D
cmp #$02
bne L0BEB
cmp #2
bne end
jmp L0C60
L0BEB: rts
end: rts
.endproc
L0BEC: jsr L0D39
lda L0990
@ -600,19 +610,21 @@ L0C89: inx
stx L096E
rts
;;; Haven't been able to trigger this yet - click on ???
;;; Possibly horizontal scroll bar? (unused in this DA - generic code?)
L0C95: lda #$02
sta L098A
sta L0988
lda L0985
cmp #$05
lda query_client_params::scroll
cmp #5
beq L0CB5
cmp #$04
cmp #4
beq L0CE7
cmp #$03
cmp #3
beq L0CEF
cmp #$01
cmp #1
beq L0CFE
cmp #$02
cmp #2
beq L0CF6
rts
@ -973,7 +985,7 @@ L0FF6: lda L0948
beq L100B
lda text_string_len
beq L100B
L1000: A2D_CALL A2D_TEXT, text_string
L1000: A2D_CALL A2D_DRAW_TEXT, text_string
lda #$01
sta L0949
L100B: rts
@ -1186,9 +1198,9 @@ L1194: .byte $00,$00,$0A,$00
A2D_CALL $0E, L1194
lda fixed_mode_flag
beq else ; is proportional?
A2D_CALL A2D_TEXT, fixed_str
A2D_CALL A2D_DRAW_TEXT, fixed_str
jmp endif
else: A2D_CALL A2D_TEXT, prop_str
else: A2D_CALL A2D_DRAW_TEXT, prop_str
endif:
ldx #$0F
loop: lda L09CE,x