mirror of
https://github.com/mi57730/a2d.git
synced 2024-11-29 07:49:20 +00:00
disasm: drag and drop
This commit is contained in:
parent
7dda998e65
commit
afba9454a8
10
APIs.md
10
APIs.md
@ -195,6 +195,16 @@ Parameters: { word mousex, word mousey, (out) byte result }
|
|||||||
|
|
||||||
Find the icon number at the given coordinates.
|
Find the icon number at the given coordinates.
|
||||||
|
|
||||||
|
### `DT_DRAG_HIGHLIGHTED` ($0A)
|
||||||
|
|
||||||
|
Parameters: { byte param }
|
||||||
|
|
||||||
|
Initiates a drag of the highlighted icon(s). On entry, set param to
|
||||||
|
the specific icon being dragged. On return, the param has 0 if the
|
||||||
|
drop was on the desktop, high bit clear if the drop target was an icon
|
||||||
|
(and the low bits are the icon number), high bit set if the drop
|
||||||
|
target was a window (and the low bits are the window number).
|
||||||
|
|
||||||
### `DT_UNHIGHLIGHT_ICON` ($0B)
|
### `DT_UNHIGHLIGHT_ICON` ($0B)
|
||||||
|
|
||||||
Parameters: { addr iconentry }
|
Parameters: { addr iconentry }
|
||||||
|
@ -77,7 +77,11 @@ DT_UNHIGHLIGHT_ALL := $06
|
|||||||
DT_CLOSE_WINDOW := $07 ; { .byte window_id }
|
DT_CLOSE_WINDOW := $07 ; { .byte window_id }
|
||||||
DT_GET_HIGHLIGHTED := $08 ; { .res 20 }
|
DT_GET_HIGHLIGHTED := $08 ; { .res 20 }
|
||||||
DT_FIND_ICON := $09 ; { .word mousex, .word mousey, .byte result }
|
DT_FIND_ICON := $09 ; { .word mousex, .word mousey, .byte result }
|
||||||
;; $0A ???
|
DT_DRAG_HIGHLIGHTED := $0A ; { .byte param }
|
||||||
|
; Input: specific icon being dragged
|
||||||
|
; Output: 0 = on desktop (no-op)
|
||||||
|
; hi bit clear: low bits are target icon
|
||||||
|
; hi bit set: low bits are target window
|
||||||
DT_UNHIGHLIGHT_ICON := $0B ; { .addr iconentry }
|
DT_UNHIGHLIGHT_ICON := $0B ; { .addr iconentry }
|
||||||
DT_REDRAW_ICONS := $0C ; Repaints desktop icons *
|
DT_REDRAW_ICONS := $0C ; Repaints desktop icons *
|
||||||
DT_ICON_IN_RECT := $0D ; { .byte icon, rect bounds }
|
DT_ICON_IN_RECT := $0D ; { .byte icon, rect bounds }
|
||||||
|
@ -245,7 +245,7 @@ desktop_jump_table:
|
|||||||
.addr CLOSE_WINDOW_IMPL
|
.addr CLOSE_WINDOW_IMPL
|
||||||
.addr GET_HIGHLIGHTED_IMPL
|
.addr GET_HIGHLIGHTED_IMPL
|
||||||
.addr FIND_ICON_IMPL
|
.addr FIND_ICON_IMPL
|
||||||
.addr L97F7 ; $0A
|
.addr DRAG_HIGHLIGHTED
|
||||||
.addr UNHIGHLIGHT_ICON_IMPL
|
.addr UNHIGHLIGHT_ICON_IMPL
|
||||||
.addr REDRAW_ICONS_IMPL
|
.addr REDRAW_ICONS_IMPL
|
||||||
.addr ICON_IN_RECT_IMPL
|
.addr ICON_IN_RECT_IMPL
|
||||||
@ -859,11 +859,9 @@ L97F6: .byte 0
|
|||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
;;; DESKTOP $0A IMPL
|
;;; DESKTOP DRAG_HIGHLIGHTED IMPL
|
||||||
|
|
||||||
|
.proc DRAG_HIGHLIGHTED
|
||||||
;; Desktop icon selection
|
|
||||||
.proc L97F7
|
|
||||||
ldy #IconEntry::id
|
ldy #IconEntry::id
|
||||||
lda ($06),y
|
lda ($06),y
|
||||||
sta icon_id
|
sta icon_id
|
||||||
|
@ -537,7 +537,7 @@ call_proc:
|
|||||||
DESKTOP_RELAY_CALL DT_FIND_ICON, event_coords
|
DESKTOP_RELAY_CALL DT_FIND_ICON, event_coords
|
||||||
lda findicon_which_icon
|
lda findicon_which_icon
|
||||||
beq :+
|
beq :+
|
||||||
jmp handle_icon_click
|
jmp handle_volume_icon_click
|
||||||
|
|
||||||
: jmp L68AA
|
: jmp L68AA
|
||||||
|
|
||||||
@ -3733,19 +3733,20 @@ L5D0B: ldx selected_icon_count
|
|||||||
bmi L5D55
|
bmi L5D55
|
||||||
jmp L5DFC
|
jmp L5DFC
|
||||||
|
|
||||||
|
;; Near start of file drag
|
||||||
L5D55: lda L5CD9
|
L5D55: lda L5CD9
|
||||||
sta LEBFC
|
sta drag_drop_param
|
||||||
DESKTOP_RELAY_CALL $0A, LEBFC
|
DESKTOP_RELAY_CALL DT_DRAG_HIGHLIGHTED, drag_drop_param
|
||||||
tax
|
tax
|
||||||
lda LEBFC
|
lda drag_drop_param
|
||||||
beq L5DA6
|
beq L5DA6
|
||||||
jsr L8F00
|
jsr jt_drop
|
||||||
cmp #$FF
|
cmp #$FF
|
||||||
bne L5D77
|
bne L5D77
|
||||||
jsr L5DEC
|
jsr L5DEC
|
||||||
jmp redraw_windows_and_desktop
|
jmp redraw_windows_and_desktop
|
||||||
|
|
||||||
L5D77: lda LEBFC
|
L5D77: lda drag_drop_param
|
||||||
cmp trash_icon_num
|
cmp trash_icon_num
|
||||||
bne L5D8E
|
bne L5D8E
|
||||||
lda active_window_id
|
lda active_window_id
|
||||||
@ -3754,7 +3755,7 @@ L5D77: lda LEBFC
|
|||||||
jsr select_and_refresh_window
|
jsr select_and_refresh_window
|
||||||
jmp redraw_windows_and_desktop
|
jmp redraw_windows_and_desktop
|
||||||
|
|
||||||
L5D8E: lda LEBFC
|
L5D8E: lda drag_drop_param
|
||||||
bmi L5D99
|
bmi L5D99
|
||||||
jsr L6A3F
|
jsr L6A3F
|
||||||
jmp redraw_windows_and_desktop
|
jmp redraw_windows_and_desktop
|
||||||
@ -4720,7 +4721,7 @@ disable_selector_menu_items := toggle_selector_menu_items::disable
|
|||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
.proc handle_icon_click
|
.proc handle_volume_icon_click
|
||||||
lda selected_icon_count
|
lda selected_icon_count
|
||||||
bne L67DF
|
bne L67DF
|
||||||
jmp set_selection
|
jmp set_selection
|
||||||
@ -4767,23 +4768,25 @@ set_selection:
|
|||||||
|
|
||||||
L6834: bit double_click_flag
|
L6834: bit double_click_flag
|
||||||
bpl L6880
|
bpl L6880
|
||||||
|
|
||||||
|
;; Drag of volume icon
|
||||||
lda findicon_which_icon
|
lda findicon_which_icon
|
||||||
sta LEBFC
|
sta drag_drop_param
|
||||||
DESKTOP_RELAY_CALL $0A, LEBFC
|
DESKTOP_RELAY_CALL DT_DRAG_HIGHLIGHTED, drag_drop_param
|
||||||
tax
|
tax
|
||||||
lda LEBFC
|
lda drag_drop_param
|
||||||
beq L6878
|
beq L6878
|
||||||
jsr L8F00
|
jsr jt_drop
|
||||||
cmp #$FF
|
cmp #$FF
|
||||||
bne L6858
|
bne L6858
|
||||||
jmp redraw_windows_and_desktop
|
jmp redraw_windows_and_desktop
|
||||||
|
|
||||||
L6858: lda LEBFC
|
L6858: lda drag_drop_param
|
||||||
cmp trash_icon_num
|
cmp trash_icon_num
|
||||||
bne L6863
|
bne L6863
|
||||||
jmp redraw_windows_and_desktop
|
jmp redraw_windows_and_desktop
|
||||||
|
|
||||||
L6863: lda LEBFC
|
L6863: lda drag_drop_param
|
||||||
bpl L6872
|
bpl L6872
|
||||||
and #$7F
|
and #$7F
|
||||||
pha
|
pha
|
||||||
@ -4799,6 +4802,7 @@ L6878: txa
|
|||||||
bne L688F
|
bne L688F
|
||||||
jmp redraw_windows_and_desktop
|
jmp redraw_windows_and_desktop
|
||||||
|
|
||||||
|
;; Double-click on volume icon
|
||||||
L6880: lda findicon_which_icon
|
L6880: lda findicon_which_icon
|
||||||
cmp trash_icon_num
|
cmp trash_icon_num
|
||||||
beq L688E
|
beq L688E
|
||||||
@ -9330,7 +9334,7 @@ open: MLI_RELAY_CALL OPEN, open_params
|
|||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
L8F00: jmp L8FC5
|
jt_drop: jmp do_drop
|
||||||
jmp rts2 ; rts
|
jmp rts2 ; rts
|
||||||
jmp rts2 ; rts
|
jmp rts2 ; rts
|
||||||
jt_get_info: jmp do_get_info ; cmd_get_info
|
jt_get_info: jmp do_get_info ; cmd_get_info
|
||||||
@ -9398,10 +9402,12 @@ L8F7E: lda #$80
|
|||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
;;; Lock
|
;;; Lock
|
||||||
|
|
||||||
do_lock: jsr L8FDD
|
do_lock:
|
||||||
|
jsr L8FDD
|
||||||
jmp L8F4F
|
jmp L8F4F
|
||||||
|
|
||||||
do_unlock: jsr L8FE1
|
do_unlock:
|
||||||
|
jsr L8FE1
|
||||||
jmp L8F4F
|
jmp L8F4F
|
||||||
|
|
||||||
L8FA7: asl a
|
L8FA7: asl a
|
||||||
@ -9411,22 +9417,27 @@ L8FA7: asl a
|
|||||||
lda ($06),y
|
lda ($06),y
|
||||||
rts
|
rts
|
||||||
|
|
||||||
do_get_size: lda #$00
|
;;; ============================================================
|
||||||
|
|
||||||
|
do_get_size:
|
||||||
|
lda #$00
|
||||||
sta L918C
|
sta L918C
|
||||||
lda #$C0
|
lda #$C0
|
||||||
sta L9189
|
sta L9189
|
||||||
jmp L8FEB
|
jmp L8FEB
|
||||||
|
|
||||||
L8FC5: lda LEBFC
|
.proc do_drop
|
||||||
cmp #$01
|
lda drag_drop_param
|
||||||
bne L8FD0
|
cmp #1 ; Trash (BUG: Should use trash_icon_num)
|
||||||
|
bne :+
|
||||||
lda #$80
|
lda #$80
|
||||||
bne L8FD2
|
bne set ; always
|
||||||
L8FD0: lda #$00
|
: lda #$00
|
||||||
L8FD2: sta L918A
|
set: sta drop_on_trash_flag
|
||||||
lda #0
|
lda #0
|
||||||
sta L9189
|
sta L9189
|
||||||
jmp L8FEB
|
jmp L8FEB
|
||||||
|
.endproc
|
||||||
|
|
||||||
L8FDD: lda #$00
|
L8FDD: lda #$00
|
||||||
beq L8FE3
|
beq L8FE3
|
||||||
@ -9434,16 +9445,17 @@ L8FE1: lda #$80
|
|||||||
L8FE3: sta unlock_flag
|
L8FE3: sta unlock_flag
|
||||||
lda #$80
|
lda #$80
|
||||||
sta L9189
|
sta L9189
|
||||||
|
|
||||||
L8FEB: tsx
|
L8FEB: tsx
|
||||||
stx stack_stash
|
stx stack_stash
|
||||||
lda #$00
|
lda #0
|
||||||
sta LE05C
|
sta LE05C
|
||||||
jsr L91D5
|
jsr L91D5
|
||||||
lda L9189
|
lda L9189
|
||||||
beq :+
|
beq :+
|
||||||
jmp L908C
|
jmp L908C
|
||||||
|
|
||||||
: bit L918A
|
: bit drop_on_trash_flag
|
||||||
bpl L9011
|
bpl L9011
|
||||||
lda selected_window_index
|
lda selected_window_index
|
||||||
beq :+
|
beq :+
|
||||||
@ -9453,7 +9465,7 @@ L8FEB: tsx
|
|||||||
pla
|
pla
|
||||||
jmp JT_EJECT
|
jmp JT_EJECT
|
||||||
|
|
||||||
L9011: lda LEBFC
|
L9011: lda drag_drop_param
|
||||||
bpl L9032
|
bpl L9032
|
||||||
and #$7F
|
and #$7F
|
||||||
asl a
|
asl a
|
||||||
@ -9469,12 +9481,12 @@ L9032: jsr L8FA7
|
|||||||
asl a
|
asl a
|
||||||
tax
|
tax
|
||||||
copy16 window_address_table,x, $08
|
copy16 window_address_table,x, $08
|
||||||
lda LEBFC
|
lda drag_drop_param
|
||||||
jsr icon_entry_name_lookup
|
jsr icon_entry_name_lookup
|
||||||
jsr join_paths
|
jsr join_paths
|
||||||
jmp L9076
|
jmp L9076
|
||||||
|
|
||||||
L9051: lda LEBFC
|
L9051: lda drag_drop_param
|
||||||
jsr icon_entry_name_lookup
|
jsr icon_entry_name_lookup
|
||||||
ldy #$01
|
ldy #$01
|
||||||
lda #'/'
|
lda #'/'
|
||||||
@ -9507,7 +9519,7 @@ L908C: lda #$00
|
|||||||
bit L9189
|
bit L9189
|
||||||
bvs L90B4
|
bvs L90B4
|
||||||
bmi L90AE
|
bmi L90AE
|
||||||
bit L918A
|
bit drop_on_trash_flag
|
||||||
bmi L90A6
|
bmi L90A6
|
||||||
jsr L993E
|
jsr L993E
|
||||||
jmp L90DE
|
jmp L90DE
|
||||||
@ -9525,7 +9537,7 @@ L90B4: jsr LA1E4
|
|||||||
L90BA: bit L9189
|
L90BA: bit L9189
|
||||||
bvs L90D8
|
bvs L90D8
|
||||||
bmi L90D2
|
bmi L90D2
|
||||||
bit L918A
|
bit drop_on_trash_flag
|
||||||
bmi L90CC
|
bmi L90CC
|
||||||
jsr L9968
|
jsr L9968
|
||||||
jmp L90DE
|
jmp L90DE
|
||||||
@ -9542,70 +9554,83 @@ L90D8: jsr LA241
|
|||||||
L90DE: jsr L91F5
|
L90DE: jsr L91F5
|
||||||
lda selected_icon_count
|
lda selected_icon_count
|
||||||
bne L90E9
|
bne L90E9
|
||||||
jmp L9168
|
jmp finish
|
||||||
|
|
||||||
L90E9: ldx #$00
|
L90E9: ldx #0
|
||||||
stx L917A
|
stx icon_count
|
||||||
L90EE: jsr L91F5
|
|
||||||
ldx L917A
|
loop: jsr L91F5
|
||||||
|
ldx icon_count
|
||||||
lda selected_icon_list,x
|
lda selected_icon_list,x
|
||||||
cmp #$01
|
cmp #1 ; icon #1 is always Trash (BUG: should use trash_icon_num)
|
||||||
beq L9140
|
beq next_icon
|
||||||
jsr icon_entry_name_lookup
|
jsr icon_entry_name_lookup
|
||||||
jsr join_paths
|
jsr join_paths
|
||||||
copy16 #path_buf3, $06
|
copy16 #path_buf3, $06
|
||||||
ldy #$00
|
|
||||||
|
;; Shrink name to remove trailing ' '
|
||||||
|
ldy #0
|
||||||
lda ($06),y
|
lda ($06),y
|
||||||
beq L9114
|
beq L9114
|
||||||
sec
|
sec
|
||||||
sbc #$01
|
sbc #$01
|
||||||
sta ($06),y
|
sta ($06),y
|
||||||
|
|
||||||
L9114: lda L97E4
|
L9114: lda L97E4
|
||||||
beq L913D
|
beq L913D
|
||||||
bit L9189
|
bit L9189
|
||||||
bmi L912F
|
bmi L912F
|
||||||
bit L918A
|
bit drop_on_trash_flag
|
||||||
bmi L9129
|
bmi L9129
|
||||||
jsr L9A01
|
jsr L9A01
|
||||||
jmp L9140
|
jmp next_icon
|
||||||
|
|
||||||
L9129: jsr L9EDB
|
L9129: jsr L9EDB
|
||||||
jmp L9140
|
jmp next_icon
|
||||||
|
|
||||||
L912F: bvs L9137
|
L912F: bvs L9137
|
||||||
jsr LA114
|
jsr LA114
|
||||||
jmp L9140
|
jmp next_icon
|
||||||
|
|
||||||
L9137: jsr LA271
|
L9137: jsr LA271
|
||||||
jmp L9140
|
jmp next_icon
|
||||||
|
|
||||||
L913D: jsr LA271
|
L913D: jsr LA271
|
||||||
L9140: inc L917A
|
|
||||||
ldx L917A
|
next_icon:
|
||||||
|
inc icon_count
|
||||||
|
ldx icon_count
|
||||||
cpx selected_icon_count
|
cpx selected_icon_count
|
||||||
bne L90EE
|
bne loop
|
||||||
|
|
||||||
lda L97E4
|
lda L97E4
|
||||||
bne L9168
|
bne finish
|
||||||
inc L97E4
|
inc L97E4
|
||||||
bit L9189
|
bit L9189
|
||||||
bmi L915D
|
bmi L915D
|
||||||
bit L918A
|
bit drop_on_trash_flag
|
||||||
bpl L9165
|
bpl L9165
|
||||||
L915D: jsr done_dialog_phase2
|
L915D: jsr done_dialog_phase2
|
||||||
bit L9189
|
bit L9189
|
||||||
bvs L9168
|
bvs finish
|
||||||
L9165: jmp L90BA
|
L9165: jmp L90BA
|
||||||
|
|
||||||
L9168: jsr done_dialog_phase1
|
finish: jsr done_dialog_phase1
|
||||||
lda LEBFC
|
|
||||||
|
;; Restore space to start of icon name
|
||||||
|
lda drag_drop_param
|
||||||
jsr icon_entry_name_lookup
|
jsr icon_entry_name_lookup
|
||||||
ldy #$01
|
ldy #1
|
||||||
lda #' '
|
lda #' '
|
||||||
sta ($06),y
|
sta ($06),y
|
||||||
|
|
||||||
return #0
|
return #0
|
||||||
|
|
||||||
L917A: .byte 0
|
icon_count:
|
||||||
|
.byte 0
|
||||||
|
|
||||||
L917B: .byte 0
|
L917B: .byte 0
|
||||||
|
|
||||||
.endproc
|
.endproc
|
||||||
do_delete_file := cmds::do_delete_file
|
do_delete_file := cmds::do_delete_file
|
||||||
L8F7E := cmds::L8F7E
|
L8F7E := cmds::L8F7E
|
||||||
@ -9613,7 +9638,7 @@ L917B: .byte 0
|
|||||||
do_lock := cmds::do_lock
|
do_lock := cmds::do_lock
|
||||||
do_unlock := cmds::do_unlock
|
do_unlock := cmds::do_unlock
|
||||||
do_get_size := cmds::do_get_size
|
do_get_size := cmds::do_get_size
|
||||||
L8FC5 := cmds::L8FC5
|
do_drop := cmds::do_drop
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
@ -9636,8 +9661,11 @@ done_dialog_phase3:
|
|||||||
stack_stash:
|
stack_stash:
|
||||||
.byte 0
|
.byte 0
|
||||||
|
|
||||||
L9189: .byte 0
|
L9189: .byte 0 ; flags (bit 7 = ???, bit 6 = ???)
|
||||||
L918A: .byte 0
|
|
||||||
|
;; high bit set = drop on trash, clear = otherwise
|
||||||
|
drop_on_trash_flag:
|
||||||
|
.byte 0
|
||||||
|
|
||||||
;; high bit set = unlock, clear = lock
|
;; high bit set = unlock, clear = lock
|
||||||
unlock_flag:
|
unlock_flag:
|
||||||
@ -10585,6 +10613,7 @@ L99FE: jmp close_files_cancel_dialog
|
|||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
|
;; copy logic (for drag/drop only) ???
|
||||||
.proc L9A01
|
.proc L9A01
|
||||||
copy16 #$0080, LE05B
|
copy16 #$0080, LE05B
|
||||||
beq L9A0F
|
beq L9A0F
|
||||||
|
@ -1315,7 +1315,9 @@ width_right_labels: .word 0
|
|||||||
;;; Assigned during startup
|
;;; Assigned during startup
|
||||||
trash_icon_num: .byte 0
|
trash_icon_num: .byte 0
|
||||||
|
|
||||||
LEBFC: .byte 0 ; flag of some sort ???
|
;;; Selection drag/drop param/result
|
||||||
|
drag_drop_param:
|
||||||
|
.byte 0
|
||||||
|
|
||||||
saved_event_coords: DEFINE_POINT 0, 0
|
saved_event_coords: DEFINE_POINT 0, 0
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user