mirror of
https://github.com/mi57730/a2d.git
synced 2024-06-09 05:29:28 +00:00
2415869008
* Desktop pattern * Double-click speed * Joystick calibration * Insertion point blink speed Settings live in LCBANK1 at $FF80 and are persisted directly to DESKTOP2 when the DA closes. DeskTop itself is modified to pull values from there. IP blink routines are improved to not slow down when the mouse pointer is over the window. Fixes #2, #31, #72
3049 lines
71 KiB
ArmAsm
3049 lines
71 KiB
ArmAsm
;;; ============================================================
|
|
;;; Overlay for Common Routines (Selector, File Copy/Delete)
|
|
;;; ============================================================
|
|
|
|
.proc common_overlay
|
|
.org $5000
|
|
|
|
;;; ============================================================
|
|
|
|
L5000: jmp L50B1
|
|
|
|
DEFINE_ON_LINE_PARAMS on_line_params,, on_line_buffer
|
|
DEFINE_OPEN_PARAMS open_params, path_buf, $1000
|
|
DEFINE_READ_PARAMS read_params, $1400, $200
|
|
DEFINE_CLOSE_PARAMS close_params
|
|
|
|
on_line_buffer: .res 16, 0
|
|
device_num: .byte $00 ; next device number to try
|
|
path_buf: .res 128, 0
|
|
L50A8: .byte $00
|
|
L50A9: .byte $00
|
|
|
|
;;; ============================================================
|
|
|
|
stash_stack: .byte 0
|
|
routine_table: .addr $7000, $7000, $7000
|
|
|
|
.proc L50B1
|
|
sty stash_y
|
|
stx stash_x
|
|
tsx
|
|
stx stash_stack
|
|
pha
|
|
lda #0
|
|
sta device_num
|
|
sta L50A8
|
|
sta prompt_ip_flag
|
|
sta LD8EC
|
|
sta LD8F0
|
|
sta LD8F1
|
|
sta LD8F2
|
|
sta cursor_ip_flag
|
|
sta L5104
|
|
sta L5103
|
|
sta L5105
|
|
lda DeskTop::Settings::ip_blink_speed
|
|
sta prompt_ip_counter
|
|
lda #$FF
|
|
sta LD920
|
|
pla
|
|
asl a
|
|
tax
|
|
copy16 routine_table,x, @jump
|
|
ldy stash_y
|
|
ldx stash_x
|
|
|
|
@jump := *+1
|
|
jmp dummy1234
|
|
|
|
stash_x: .byte 0
|
|
stash_y: .byte 0
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
;;; Flags set by invoker to alter behavior
|
|
|
|
L5103: .byte 0 ; ??? something before jt_handle_click invoked
|
|
L5104: .byte 0 ; ??? something about inputs
|
|
L5105: .byte 0 ; ??? something about the picker
|
|
|
|
;;; ============================================================
|
|
|
|
L5106: bit LD8EC
|
|
bpl :+
|
|
|
|
dec prompt_ip_counter
|
|
bne :+
|
|
jsr jt_blink_ip
|
|
copy DeskTop::Settings::ip_blink_speed, prompt_ip_counter
|
|
|
|
: MGTK_RELAY_CALL MGTK::GetEvent, event_params
|
|
lda event_kind
|
|
cmp #MGTK::EventKind::button_down
|
|
bne :+
|
|
jsr L51AF
|
|
jmp L5106
|
|
|
|
: cmp #MGTK::EventKind::key_down
|
|
bne :+
|
|
jsr L59B9
|
|
jmp L5106
|
|
|
|
: jsr desktop_main::check_mouse_moved
|
|
bcc L5106
|
|
MGTK_RELAY_CALL MGTK::FindWindow, findwindow_params
|
|
lda findwindow_which_area
|
|
bne :+
|
|
jmp L5106
|
|
: lda findwindow_window_id
|
|
cmp winfo_entrydlg
|
|
beq L5151
|
|
jmp L5106
|
|
|
|
L5151: lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
lda winfo_entrydlg
|
|
sta screentowindow_window_id
|
|
MGTK_RELAY_CALL MGTK::ScreenToWindow, screentowindow_params
|
|
MGTK_RELAY_CALL MGTK::MoveTo, screentowindow_windowx
|
|
bit L51AE
|
|
bmi L5183
|
|
MGTK_RELAY_CALL MGTK::InRect, common_input1_rect
|
|
cmp #MGTK::inrect_inside
|
|
bne L5196
|
|
beq L5190
|
|
L5183: MGTK_RELAY_CALL MGTK::InRect, common_input2_rect
|
|
cmp #MGTK::inrect_inside
|
|
bne L5196
|
|
L5190: jsr set_cursor_insertion
|
|
jmp L5199
|
|
|
|
L5196: jsr set_cursor_pointer
|
|
L5199: MGTK_RELAY_CALL MGTK::InitPort, grafport3
|
|
MGTK_RELAY_CALL MGTK::SetPort, grafport3
|
|
jmp L5106
|
|
|
|
L51AE: .byte 0
|
|
|
|
;;; ============================================================
|
|
|
|
L51AF: MGTK_RELAY_CALL MGTK::FindWindow, findwindow_params
|
|
lda findwindow_which_area
|
|
bne :+
|
|
rts
|
|
: cmp #MGTK::Area::content
|
|
bne :+
|
|
jmp L51C7
|
|
rts ; ???
|
|
: rts
|
|
|
|
L51C7: lda findwindow_window_id
|
|
cmp winfo_entrydlg
|
|
beq L51D2
|
|
jmp L531F
|
|
|
|
L51D2: lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
lda winfo_entrydlg
|
|
sta screentowindow_window_id
|
|
MGTK_RELAY_CALL MGTK::ScreenToWindow, screentowindow_params
|
|
MGTK_RELAY_CALL MGTK::MoveTo, screentowindow_windowx
|
|
|
|
;; In open button?
|
|
.proc check_open_button
|
|
MGTK_RELAY_CALL MGTK::InRect, common_open_button_rect
|
|
cmp #MGTK::inrect_inside
|
|
beq clicked
|
|
jmp check_change_drive_button
|
|
|
|
clicked:
|
|
bit L5105
|
|
bmi L520A
|
|
lda LD920
|
|
bpl L520D
|
|
L520A: jmp set_up_ports
|
|
|
|
L520D: tax
|
|
lda $1780,x
|
|
bmi L5216
|
|
L5213: jmp set_up_ports
|
|
|
|
L5216: lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_open_button_rect
|
|
jsr track_open_button_click
|
|
bmi L5213
|
|
jsr L5607
|
|
jmp set_up_ports
|
|
.endproc
|
|
|
|
.proc check_change_drive_button
|
|
MGTK_RELAY_CALL MGTK::InRect, common_change_drive_button_rect
|
|
cmp #MGTK::inrect_inside
|
|
beq :+
|
|
jmp check_close_button
|
|
: bit L5105
|
|
bmi L5268
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_change_drive_button_rect
|
|
jsr track_change_drive_button_click
|
|
bmi L5268
|
|
jsr L565C
|
|
L5268: jmp set_up_ports
|
|
.endproc
|
|
|
|
.proc check_close_button
|
|
MGTK_RELAY_CALL MGTK::InRect, common_close_button_rect
|
|
cmp #MGTK::inrect_inside
|
|
beq :+
|
|
jmp check_ok_button
|
|
: bit L5105
|
|
bmi L529A
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_close_button_rect
|
|
jsr track_close_button_click
|
|
bmi L529A
|
|
jsr L567F
|
|
L529A: jmp set_up_ports
|
|
.endproc
|
|
|
|
.proc check_ok_button
|
|
MGTK_RELAY_CALL MGTK::InRect, common_ok_button_rect
|
|
cmp #MGTK::inrect_inside
|
|
beq :+
|
|
jmp check_cancel_button
|
|
: MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_ok_button_rect
|
|
jsr track_ok_button_click
|
|
bmi L52CA
|
|
jsr jt_handle_meta_right_key
|
|
jsr jt_handle_ok
|
|
L52CA: jmp set_up_ports
|
|
.endproc
|
|
|
|
.proc check_cancel_button
|
|
MGTK_RELAY_CALL MGTK::InRect, common_cancel_button_rect
|
|
cmp #MGTK::inrect_inside
|
|
beq :+
|
|
jmp check_other_click
|
|
: MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_cancel_button_rect
|
|
jsr track_cancel_button_click
|
|
bmi L52F7
|
|
jsr jt_handle_cancel
|
|
L52F7: jmp set_up_ports
|
|
.endproc
|
|
|
|
.proc check_other_click
|
|
bit L5103
|
|
bpl :+
|
|
jsr L531B
|
|
bmi set_up_ports
|
|
: jsr jt_handle_click
|
|
rts
|
|
.endproc
|
|
|
|
set_up_ports:
|
|
MGTK_RELAY_CALL MGTK::InitPort, grafport3
|
|
MGTK_RELAY_CALL MGTK::SetPort, grafport2
|
|
rts
|
|
|
|
L531B: jsr noop
|
|
rts
|
|
|
|
L531F: bit L5105
|
|
bmi L5340
|
|
MGTK_RELAY_CALL MGTK::FindControl, findcontrol_params
|
|
lda findcontrol_which_ctl
|
|
beq L5341
|
|
cmp #MGTK::Ctl::vertical_scroll_bar
|
|
bne L5340
|
|
lda winfo_entrydlg_file_picker::vscroll
|
|
and #$01
|
|
beq L5340
|
|
jmp L5469
|
|
|
|
L5340: rts
|
|
|
|
L5341: lda winfo_entrydlg_file_picker
|
|
sta screentowindow_window_id
|
|
MGTK_RELAY_CALL MGTK::ScreenToWindow, screentowindow_params
|
|
add16 screentowindow_windowy, winfo_entrydlg_file_picker::cliprect+2, screentowindow_windowy
|
|
lsr16 screentowindow_windowy
|
|
lsr16 screentowindow_windowy
|
|
lsr16 screentowindow_windowy
|
|
lda LD920
|
|
cmp screentowindow_windowy
|
|
beq L5380
|
|
jmp L542F
|
|
|
|
L5380: jsr desktop_main::detect_double_click
|
|
beq L5386
|
|
rts
|
|
|
|
L5386: ldx LD920
|
|
lda $1780,x
|
|
bmi L53B5
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_ok_button_rect
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_ok_button_rect
|
|
jsr jt_handle_ok
|
|
jmp L5340
|
|
|
|
L53B5: and #$7F
|
|
pha
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_open_button_rect
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_open_button_rect
|
|
lda #$00
|
|
sta L542E
|
|
copy16 #$1800, $08
|
|
pla
|
|
asl a
|
|
rol L542E
|
|
asl a
|
|
rol L542E
|
|
asl a
|
|
rol L542E
|
|
asl a
|
|
rol L542E
|
|
clc
|
|
adc $08
|
|
sta $08
|
|
lda L542E
|
|
adc $09
|
|
sta $09
|
|
ldx $09
|
|
lda $08
|
|
jsr L5F0D
|
|
jsr L5F5B
|
|
jsr L6161
|
|
lda #$00
|
|
jsr L6227
|
|
jsr L61B1
|
|
jsr L606D
|
|
MGTK_RELAY_CALL MGTK::InitPort, grafport3
|
|
MGTK_RELAY_CALL MGTK::SetPort, grafport2
|
|
rts
|
|
|
|
L542E: .byte 0
|
|
|
|
L542F: lda screentowindow_windowy
|
|
cmp $177F
|
|
bcc L5438
|
|
rts
|
|
|
|
L5438: lda LD920
|
|
bmi L5446
|
|
jsr jt_strip_path_segment
|
|
lda LD920
|
|
jsr L6274
|
|
L5446: lda screentowindow_windowy
|
|
sta LD920
|
|
bit LD8F0
|
|
bpl L5457
|
|
jsr jt_prep_path
|
|
jsr jt_redraw_input
|
|
L5457: lda LD920
|
|
jsr L6274
|
|
jsr jt_05
|
|
jsr desktop_main::detect_double_click
|
|
bmi L5468
|
|
jmp L5386
|
|
|
|
L5468: rts
|
|
|
|
L5469: lda findcontrol_which_part
|
|
cmp #MGTK::Part::up_arrow
|
|
bne L5473
|
|
jmp L550A
|
|
|
|
L5473: cmp #MGTK::Part::down_arrow
|
|
bne L547A
|
|
jmp L5533
|
|
|
|
L547A: cmp #MGTK::Part::page_up
|
|
bne L5481
|
|
jmp L54BA
|
|
|
|
L5481: cmp #MGTK::Part::page_down
|
|
bne L5488
|
|
jmp L54DF
|
|
|
|
L5488: lda #MGTK::Ctl::vertical_scroll_bar
|
|
sta trackthumb_params
|
|
MGTK_RELAY_CALL MGTK::TrackThumb, trackthumb_params
|
|
lda trackthumb_thumbmoved
|
|
bne :+
|
|
rts
|
|
: lda trackthumb_thumbpos
|
|
sta updatethumb_thumbpos
|
|
lda #MGTK::Ctl::vertical_scroll_bar
|
|
sta updatethumb_which_ctl
|
|
MGTK_RELAY_CALL MGTK::UpdateThumb, updatethumb_params
|
|
lda updatethumb_stash
|
|
jsr L6227
|
|
jsr L606D
|
|
rts
|
|
|
|
L54BA: lda winfo_entrydlg_file_picker::vthumbpos
|
|
sec
|
|
sbc #$09
|
|
bpl L54C4
|
|
lda #$00
|
|
L54C4: sta updatethumb_thumbpos
|
|
lda #MGTK::Ctl::vertical_scroll_bar
|
|
sta updatethumb_which_ctl
|
|
MGTK_RELAY_CALL MGTK::UpdateThumb, updatethumb_params
|
|
lda updatethumb_thumbpos
|
|
jsr L6227
|
|
jsr L606D
|
|
rts
|
|
|
|
L54DF: lda winfo_entrydlg_file_picker::vthumbpos
|
|
clc
|
|
adc #$09
|
|
cmp $177F
|
|
beq L54EF
|
|
bcc L54EF
|
|
lda $177F
|
|
L54EF: sta updatethumb_thumbpos
|
|
lda #MGTK::Ctl::vertical_scroll_bar
|
|
sta updatethumb_which_ctl
|
|
MGTK_RELAY_CALL MGTK::UpdateThumb, updatethumb_params
|
|
lda updatethumb_thumbpos
|
|
jsr L6227
|
|
jsr L606D
|
|
rts
|
|
|
|
L550A: lda winfo_entrydlg_file_picker::vthumbpos
|
|
bne L5510
|
|
rts
|
|
|
|
L5510: sec
|
|
sbc #$01
|
|
sta updatethumb_thumbpos
|
|
lda #MGTK::Ctl::vertical_scroll_bar
|
|
sta updatethumb_which_ctl
|
|
MGTK_RELAY_CALL MGTK::UpdateThumb, updatethumb_params
|
|
lda updatethumb_thumbpos
|
|
jsr L6227
|
|
jsr L606D
|
|
jsr L555F
|
|
jmp L550A
|
|
|
|
L5533: lda winfo_entrydlg_file_picker::vthumbpos
|
|
cmp winfo_entrydlg_file_picker::vthumbmax
|
|
bne L553C
|
|
rts
|
|
|
|
L553C: clc
|
|
adc #$01
|
|
sta updatethumb_thumbpos
|
|
lda #MGTK::Ctl::vertical_scroll_bar
|
|
sta updatethumb_which_ctl
|
|
MGTK_RELAY_CALL MGTK::UpdateThumb, updatethumb_params
|
|
lda updatethumb_thumbpos
|
|
jsr L6227
|
|
jsr L606D
|
|
jsr L555F
|
|
jmp L5533
|
|
|
|
L555F: MGTK_RELAY_CALL MGTK::PeekEvent, event_params
|
|
lda event_kind
|
|
cmp #MGTK::EventKind::button_down
|
|
beq L5576
|
|
cmp #MGTK::EventKind::drag
|
|
beq L5576
|
|
pla
|
|
pla
|
|
rts
|
|
|
|
L5576: MGTK_RELAY_CALL MGTK::GetEvent, event_params
|
|
MGTK_RELAY_CALL MGTK::FindWindow, findwindow_params
|
|
lda findwindow_window_id
|
|
cmp winfo_entrydlg_file_picker
|
|
beq :+
|
|
pla
|
|
pla
|
|
rts
|
|
|
|
: lda findwindow_which_area
|
|
cmp #MGTK::Area::content
|
|
beq :+
|
|
pla
|
|
pla
|
|
rts
|
|
|
|
: MGTK_RELAY_CALL MGTK::FindControl, findcontrol_params
|
|
lda findcontrol_which_ctl
|
|
cmp #MGTK::Ctl::vertical_scroll_bar
|
|
beq :+
|
|
pla
|
|
pla
|
|
rts
|
|
|
|
: lda findcontrol_which_part
|
|
cmp #MGTK::Part::page_up
|
|
bcc L55B9
|
|
pla
|
|
pla
|
|
L55B9: rts
|
|
|
|
;;; ============================================================
|
|
|
|
.proc set_cursor_pointer
|
|
bit cursor_ip_flag
|
|
bpl done
|
|
MGTK_RELAY_CALL MGTK::HideCursor
|
|
MGTK_RELAY_CALL MGTK::SetCursor, pointer_cursor
|
|
MGTK_RELAY_CALL MGTK::ShowCursor
|
|
lda #$00
|
|
sta cursor_ip_flag
|
|
done: rts
|
|
.endproc
|
|
|
|
.proc set_cursor_insertion
|
|
bit cursor_ip_flag
|
|
bmi done
|
|
MGTK_RELAY_CALL MGTK::HideCursor
|
|
MGTK_RELAY_CALL MGTK::SetCursor, insertion_point_cursor
|
|
MGTK_RELAY_CALL MGTK::ShowCursor
|
|
lda #$80
|
|
sta cursor_ip_flag
|
|
done: rts
|
|
.endproc
|
|
|
|
cursor_ip_flag: ; high bit set when cursor is IP
|
|
.byte 0
|
|
|
|
;;; ============================================================
|
|
|
|
L5607: ldx LD920
|
|
lda $1780,x
|
|
and #$7F
|
|
pha
|
|
bit LD8F0
|
|
bpl L5618
|
|
jsr jt_prep_path
|
|
L5618: lda #$00
|
|
sta L565B
|
|
copy16 #$1800, $08
|
|
pla
|
|
asl a
|
|
rol L565B
|
|
asl a
|
|
rol L565B
|
|
asl a
|
|
rol L565B
|
|
asl a
|
|
rol L565B
|
|
clc
|
|
adc $08
|
|
sta $08
|
|
lda L565B
|
|
adc $09
|
|
sta $09
|
|
ldx $09
|
|
lda $08
|
|
jsr L5F0D
|
|
jsr L5F5B
|
|
jsr L6161
|
|
lda #$00
|
|
jsr L6227
|
|
jsr L61B1
|
|
jsr L606D
|
|
rts
|
|
|
|
L565B: .byte 0
|
|
|
|
L565C: lda #$FF
|
|
sta LD920
|
|
jsr inc_device_num
|
|
jsr device_on_line
|
|
jsr L5F5B
|
|
jsr L6161
|
|
lda #$00
|
|
jsr L6227
|
|
jsr L61B1
|
|
jsr L606D
|
|
jsr jt_prep_path
|
|
jsr jt_redraw_input
|
|
rts
|
|
|
|
L567F: lda #$00
|
|
sta L56E2
|
|
ldx path_buf
|
|
bne L568C
|
|
jmp L56E1
|
|
|
|
L568C: lda path_buf,x
|
|
and #CHAR_MASK
|
|
cmp #'/'
|
|
beq L569B
|
|
dex
|
|
bpl L568C
|
|
jmp L56E1
|
|
|
|
L569B: cpx #$01
|
|
bne L56A2
|
|
jmp L56E1
|
|
|
|
L56A2: jsr L5F49
|
|
lda LD920
|
|
pha
|
|
lda #$FF
|
|
sta LD920
|
|
jsr L5F5B
|
|
jsr L6161
|
|
lda #$00
|
|
jsr L6227
|
|
jsr L61B1
|
|
jsr L606D
|
|
pla
|
|
sta LD920
|
|
bit L56E2
|
|
bmi L56D6
|
|
jsr jt_strip_path_segment
|
|
lda LD920
|
|
bmi L56DC
|
|
jsr jt_strip_path_segment
|
|
jmp L56DC
|
|
|
|
L56D6: jsr jt_prep_path
|
|
jsr jt_redraw_input
|
|
L56DC: lda #$FF
|
|
sta LD920
|
|
L56E1: rts
|
|
|
|
L56E2: .byte 0
|
|
|
|
L56E3: MGTK_RELAY_CALL MGTK::InitPort, grafport3
|
|
MGTK_RELAY_CALL MGTK::SetPort, grafport3
|
|
rts
|
|
|
|
;;; ============================================================
|
|
|
|
.proc track_ok_button_click
|
|
lda #$00
|
|
sta L577B
|
|
L56FB: MGTK_RELAY_CALL MGTK::GetEvent, event_params
|
|
lda event_kind
|
|
cmp #MGTK::EventKind::button_up
|
|
beq L575E
|
|
lda winfo_entrydlg
|
|
sta screentowindow_window_id
|
|
MGTK_RELAY_CALL MGTK::ScreenToWindow, screentowindow_params
|
|
MGTK_RELAY_CALL MGTK::MoveTo, screentowindow_windowx
|
|
MGTK_RELAY_CALL MGTK::InRect, common_ok_button_rect
|
|
cmp #MGTK::inrect_inside
|
|
beq L5738
|
|
lda L577B
|
|
beq L5740
|
|
jmp L56FB
|
|
|
|
L5738: lda L577B
|
|
bne L5740
|
|
jmp L56FB
|
|
|
|
L5740: MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_ok_button_rect
|
|
lda L577B
|
|
clc
|
|
adc #$80
|
|
sta L577B
|
|
jmp L56FB
|
|
|
|
L575E: lda L577B
|
|
beq L5766
|
|
return #$FF
|
|
|
|
L5766: MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_ok_button_rect
|
|
return #$00
|
|
|
|
L577B: .byte 0
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc track_close_button_click
|
|
lda #$00
|
|
sta L5801
|
|
L5781: MGTK_RELAY_CALL MGTK::GetEvent, event_params
|
|
lda event_kind
|
|
cmp #MGTK::EventKind::button_up
|
|
beq L57E4
|
|
lda winfo_entrydlg
|
|
sta screentowindow_window_id
|
|
MGTK_RELAY_CALL MGTK::ScreenToWindow, screentowindow_params
|
|
MGTK_RELAY_CALL MGTK::MoveTo, screentowindow_windowx
|
|
MGTK_RELAY_CALL MGTK::InRect, common_close_button_rect
|
|
cmp #MGTK::inrect_inside
|
|
beq L57BE
|
|
lda L5801
|
|
beq L57C6
|
|
jmp L5781
|
|
|
|
L57BE: lda L5801
|
|
bne L57C6
|
|
jmp L5781
|
|
|
|
L57C6: MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_close_button_rect
|
|
lda L5801
|
|
clc
|
|
adc #$80
|
|
sta L5801
|
|
jmp L5781
|
|
|
|
L57E4: lda L5801
|
|
beq L57EC
|
|
return #$FF
|
|
|
|
L57EC: MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_close_button_rect
|
|
return #$00
|
|
|
|
L5801: .byte 0
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc track_cancel_button_click
|
|
lda #$00
|
|
sta L5887
|
|
L5807: MGTK_RELAY_CALL MGTK::GetEvent, event_params
|
|
lda event_kind
|
|
cmp #MGTK::EventKind::button_up
|
|
beq L586A
|
|
lda winfo_entrydlg
|
|
sta screentowindow_window_id
|
|
MGTK_RELAY_CALL MGTK::ScreenToWindow, screentowindow_params
|
|
MGTK_RELAY_CALL MGTK::MoveTo, screentowindow_windowx
|
|
MGTK_RELAY_CALL MGTK::InRect, common_cancel_button_rect
|
|
cmp #MGTK::inrect_inside
|
|
beq L5844
|
|
lda L5887
|
|
beq L584C
|
|
jmp L5807
|
|
|
|
L5844: lda L5887
|
|
bne L584C
|
|
jmp L5807
|
|
|
|
L584C: MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_cancel_button_rect
|
|
lda L5887
|
|
clc
|
|
adc #$80
|
|
sta L5887
|
|
jmp L5807
|
|
|
|
L586A: lda L5887
|
|
beq L5872
|
|
return #$FF
|
|
|
|
L5872: MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_cancel_button_rect
|
|
return #$01
|
|
|
|
L5887: .byte 0
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc track_open_button_click
|
|
lda #$00
|
|
sta L590D
|
|
L588D: MGTK_RELAY_CALL MGTK::GetEvent, event_params
|
|
lda event_kind
|
|
cmp #MGTK::EventKind::button_up
|
|
beq L58F0
|
|
lda winfo_entrydlg
|
|
sta screentowindow_window_id
|
|
MGTK_RELAY_CALL MGTK::ScreenToWindow, screentowindow_params
|
|
MGTK_RELAY_CALL MGTK::MoveTo, screentowindow_windowx
|
|
MGTK_RELAY_CALL MGTK::InRect, common_open_button_rect
|
|
cmp #MGTK::inrect_inside
|
|
beq L58CA
|
|
lda L590D
|
|
beq L58D2
|
|
jmp L588D
|
|
|
|
L58CA: lda L590D
|
|
bne L58D2
|
|
jmp L588D
|
|
|
|
L58D2: MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_open_button_rect
|
|
lda L590D
|
|
clc
|
|
adc #$80
|
|
sta L590D
|
|
jmp L588D
|
|
|
|
L58F0: lda L590D
|
|
beq L58F8
|
|
return #$FF
|
|
|
|
L58F8: MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_open_button_rect
|
|
return #$00
|
|
|
|
L590D: .byte 0
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc track_change_drive_button_click
|
|
lda #$00
|
|
sta L5993
|
|
L5913: MGTK_RELAY_CALL MGTK::GetEvent, event_params
|
|
lda event_kind
|
|
cmp #MGTK::EventKind::button_up
|
|
beq L5976
|
|
lda winfo_entrydlg
|
|
sta screentowindow_window_id
|
|
MGTK_RELAY_CALL MGTK::ScreenToWindow, screentowindow_params
|
|
MGTK_RELAY_CALL MGTK::MoveTo, screentowindow_windowx
|
|
MGTK_RELAY_CALL MGTK::InRect, common_change_drive_button_rect
|
|
cmp #MGTK::inrect_inside
|
|
beq L5950
|
|
lda L5993
|
|
beq L5958
|
|
jmp L5913
|
|
|
|
L5950: lda L5993
|
|
bne L5958
|
|
jmp L5913
|
|
|
|
L5958: MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_change_drive_button_rect
|
|
lda L5993
|
|
clc
|
|
adc #$80
|
|
sta L5993
|
|
jmp L5913
|
|
|
|
L5976: lda L5993
|
|
beq L597E
|
|
return #$FF
|
|
|
|
L597E: MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_change_drive_button_rect
|
|
return #$01
|
|
|
|
L5993: .byte 0
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc MLI_RELAY
|
|
sty call
|
|
stax params
|
|
sta ALTZPOFF
|
|
lda ROMIN2
|
|
jsr MLI
|
|
call: .byte 0
|
|
params: .addr 0
|
|
sta ALTZPON
|
|
tax
|
|
lda LCBANK1
|
|
lda LCBANK1
|
|
txa
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc noop
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
;;; Key handler
|
|
|
|
.proc L59B9
|
|
lda event_modifiers
|
|
beq L59F7
|
|
|
|
;; With modifiers
|
|
lda event_key
|
|
and #CHAR_MASK
|
|
|
|
cmp #CHAR_LEFT
|
|
bne :+
|
|
jmp jt_handle_meta_left_key ; start of line
|
|
|
|
: cmp #CHAR_RIGHT
|
|
bne :+
|
|
jmp jt_handle_meta_right_key ; end of line
|
|
|
|
: bit L5105
|
|
bmi L59E4
|
|
cmp #CHAR_DOWN
|
|
bne :+
|
|
jmp scroll_list_bottom ; end of list
|
|
|
|
: cmp #CHAR_UP
|
|
bne L59E4
|
|
jmp scroll_list_top ; start of list
|
|
|
|
L59E4: cmp #'0'
|
|
bcc :+
|
|
cmp #'9'+1
|
|
bcs :+
|
|
jmp key_meta_digit
|
|
|
|
: bit L5105
|
|
bmi L5A4F
|
|
jmp L5B70
|
|
|
|
;;; ============================================================
|
|
;;; Key - without modifiers
|
|
|
|
L59F7: lda event_key
|
|
and #CHAR_MASK
|
|
|
|
cmp #CHAR_LEFT
|
|
bne :+
|
|
jmp jt_handle_left_key
|
|
|
|
: cmp #CHAR_RIGHT
|
|
bne :+
|
|
jmp jt_handle_right_key
|
|
|
|
: cmp #CHAR_RETURN
|
|
bne :+
|
|
jmp key_return
|
|
|
|
: cmp #CHAR_ESCAPE
|
|
bne :+
|
|
jmp key_escape
|
|
|
|
: cmp #CHAR_DELETE
|
|
bne :+
|
|
jmp key_delete
|
|
|
|
: bit L5105
|
|
bpl L5A27
|
|
jmp L5AC4
|
|
|
|
L5A27: cmp #CHAR_TAB
|
|
bne L5A52
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_change_drive_button_rect
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_change_drive_button_rect
|
|
jsr L565C
|
|
L5A4F: jmp L5AC8
|
|
|
|
L5A52: cmp #CHAR_CTRL_O ; Open
|
|
bne L5A8B
|
|
lda LD920
|
|
bmi L5AC8
|
|
tax
|
|
lda $1780,x
|
|
bmi :+
|
|
jmp L5AC8
|
|
: lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_open_button_rect
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_open_button_rect
|
|
jsr L5607
|
|
jmp L5AC8
|
|
|
|
L5A8B: cmp #CHAR_CTRL_C ; Close
|
|
bne :+
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_close_button_rect
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_close_button_rect
|
|
jsr L567F
|
|
jmp L5AC8
|
|
|
|
: cmp #CHAR_DOWN
|
|
bne :+
|
|
jmp key_down
|
|
|
|
: cmp #CHAR_UP
|
|
bne L5AC4
|
|
jmp key_up
|
|
|
|
L5AC4: jsr jt_handle_other_key
|
|
rts
|
|
|
|
L5AC8: jsr L56E3
|
|
rts
|
|
|
|
key_return:
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR ; flash the button
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_ok_button_rect
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_ok_button_rect
|
|
jsr jt_handle_meta_right_key
|
|
jsr jt_handle_ok
|
|
jsr L56E3
|
|
rts
|
|
|
|
key_escape:
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR ; flash the button
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_cancel_button_rect
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_cancel_button_rect
|
|
jsr jt_handle_cancel
|
|
jsr L56E3
|
|
rts
|
|
|
|
key_delete:
|
|
jsr jt_handle_delete_key
|
|
rts
|
|
|
|
key_meta_digit:
|
|
jmp noop
|
|
|
|
.proc key_down
|
|
lda $177F
|
|
beq L5B37
|
|
lda LD920
|
|
bmi L5B47
|
|
tax
|
|
inx
|
|
cpx $177F
|
|
bcc L5B38
|
|
L5B37: rts
|
|
|
|
L5B38: jsr L6274
|
|
jsr jt_strip_path_segment
|
|
inc LD920
|
|
lda LD920
|
|
jmp update_list_selection
|
|
|
|
L5B47: lda #0
|
|
jmp update_list_selection
|
|
.endproc
|
|
|
|
.proc key_up
|
|
lda $177F
|
|
beq L5B58
|
|
lda LD920
|
|
bmi L5B68
|
|
bne L5B59
|
|
L5B58: rts
|
|
|
|
L5B59: jsr L6274
|
|
jsr jt_strip_path_segment
|
|
dec LD920
|
|
lda LD920
|
|
jmp update_list_selection
|
|
|
|
L5B68: ldx $177F
|
|
dex
|
|
txa
|
|
jmp update_list_selection
|
|
.endproc
|
|
|
|
L5B70: cmp #'A' ; upper alpha?
|
|
bcs :+
|
|
done: rts
|
|
: cmp #'Z'+1
|
|
bcc L5B83
|
|
cmp #'a' ; Lower alpha?
|
|
bcc done
|
|
cmp #'z'+1
|
|
bcs done
|
|
and #$5F ; convert lowercase to uppercase
|
|
|
|
L5B83: jsr L5B9D
|
|
bmi done
|
|
cmp LD920
|
|
beq done
|
|
pha
|
|
lda LD920
|
|
bmi L5B99
|
|
jsr L6274
|
|
jsr jt_strip_path_segment
|
|
L5B99: pla
|
|
jmp update_list_selection
|
|
|
|
L5B9D: sta L5BF5
|
|
lda #0
|
|
sta L5BF3
|
|
L5BA5: lda L5BF3
|
|
cmp $177F
|
|
beq L5BC4
|
|
jsr L5BCB
|
|
ldy #1
|
|
lda ($06),y
|
|
cmp L5BF5
|
|
bcc L5BBE
|
|
beq L5BC7
|
|
jmp L5BC4
|
|
|
|
L5BBE: inc L5BF3
|
|
jmp L5BA5
|
|
|
|
L5BC4: return #$FF
|
|
|
|
L5BC7: return L5BF3
|
|
|
|
L5BCB: tax
|
|
lda $1780,x
|
|
and #$7F
|
|
ldx #$00
|
|
stx L5BF4
|
|
asl a
|
|
rol L5BF4
|
|
asl a
|
|
rol L5BF4
|
|
asl a
|
|
rol L5BF4
|
|
asl a
|
|
rol L5BF4
|
|
clc
|
|
adc #$00
|
|
sta $06
|
|
lda L5BF4
|
|
adc #$18
|
|
sta $07
|
|
rts
|
|
|
|
L5BF3: .byte 0
|
|
L5BF4: .byte 0
|
|
L5BF5: .byte 0
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc scroll_list_top
|
|
lda $177F
|
|
beq L5C02
|
|
lda LD920
|
|
bmi L5C09
|
|
bne L5C03
|
|
L5C02: rts
|
|
|
|
L5C03: jsr L6274
|
|
jsr jt_strip_path_segment
|
|
L5C09: lda #$00
|
|
jmp update_list_selection
|
|
.endproc
|
|
|
|
.proc scroll_list_bottom
|
|
lda $177F
|
|
beq L5C1E
|
|
ldx LD920
|
|
bmi L5C27
|
|
inx
|
|
cpx $177F
|
|
bne L5C1F
|
|
L5C1E: rts
|
|
|
|
L5C1F: dex
|
|
txa
|
|
jsr L6274
|
|
jsr jt_strip_path_segment
|
|
L5C27: ldx $177F
|
|
dex
|
|
txa
|
|
jmp update_list_selection
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc update_list_selection
|
|
sta LD920
|
|
jsr jt_05
|
|
lda LD920
|
|
jsr L6586
|
|
jsr L6163
|
|
jsr L606D
|
|
|
|
copy #1, path_buf2
|
|
copy #' ', path_buf2+1
|
|
|
|
jsr jt_redraw_input
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
PAD_TO $5CF7 ; Maintain previous addresses
|
|
|
|
;;; ============================================================
|
|
|
|
.proc create_common_dialog
|
|
MGTK_RELAY_CALL MGTK::OpenWindow, winfo_entrydlg
|
|
MGTK_RELAY_CALL MGTK::OpenWindow, winfo_entrydlg_file_picker
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::FrameRect, common_dialog_frame_rect
|
|
MGTK_RELAY_CALL MGTK::FrameRect, common_ok_button_rect
|
|
MGTK_RELAY_CALL MGTK::FrameRect, common_open_button_rect
|
|
MGTK_RELAY_CALL MGTK::FrameRect, common_close_button_rect
|
|
MGTK_RELAY_CALL MGTK::FrameRect, common_cancel_button_rect
|
|
MGTK_RELAY_CALL MGTK::FrameRect, common_change_drive_button_rect
|
|
jsr draw_ok_button_label
|
|
jsr draw_open_button_label
|
|
jsr draw_close_button_label
|
|
jsr draw_cancel_button_label
|
|
jsr draw_change_drive_button_label
|
|
MGTK_RELAY_CALL MGTK::MoveTo, common_dialog_sep_start
|
|
MGTK_RELAY_CALL MGTK::LineTo, common_dialog_sep_end
|
|
MGTK_RELAY_CALL MGTK::InitPort, grafport3
|
|
MGTK_RELAY_CALL MGTK::SetPort, grafport3
|
|
rts
|
|
.endproc
|
|
|
|
draw_ok_button_label:
|
|
MGTK_RELAY_CALL MGTK::MoveTo, ok_button_pos
|
|
addr_call draw_string, ok_button_label
|
|
rts
|
|
|
|
draw_open_button_label:
|
|
MGTK_RELAY_CALL MGTK::MoveTo, open_button_pos
|
|
addr_call draw_string, open_button_label
|
|
rts
|
|
|
|
draw_close_button_label:
|
|
MGTK_RELAY_CALL MGTK::MoveTo, close_button_pos
|
|
addr_call draw_string, close_button_label
|
|
rts
|
|
|
|
draw_cancel_button_label:
|
|
MGTK_RELAY_CALL MGTK::MoveTo, cancel_button_pos
|
|
addr_call draw_string, cancel_button_label
|
|
rts
|
|
|
|
draw_change_drive_button_label:
|
|
MGTK_RELAY_CALL MGTK::MoveTo, change_drive_button_pos
|
|
addr_call draw_string, change_drive_button_label
|
|
rts
|
|
|
|
;;; ============================================================
|
|
|
|
.proc copy_string_to_lcbuf
|
|
ptr := $06
|
|
|
|
stax ptr
|
|
ldy #0
|
|
lda (ptr),y
|
|
tay
|
|
: lda (ptr),y
|
|
sta temp_string_buf,y
|
|
dey
|
|
bpl :-
|
|
ldax #temp_string_buf
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc draw_string
|
|
jsr copy_string_to_lcbuf
|
|
stax $06
|
|
ldy #$00
|
|
lda ($06),y
|
|
sta $08
|
|
inc16 $06
|
|
MGTK_RELAY_CALL MGTK::DrawText, $06
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc L5E0A
|
|
jsr copy_string_to_lcbuf
|
|
stax $06
|
|
ldy #$00
|
|
lda ($06),y
|
|
sta $08
|
|
inc16 $06
|
|
MGTK_RELAY_CALL MGTK::TextWidth, $06
|
|
lsr16 $09
|
|
lda #$01
|
|
sta L5E56
|
|
lda #$F4
|
|
lsr L5E56
|
|
ror a
|
|
sec
|
|
sbc $09
|
|
sta pos_D90B
|
|
lda L5E56
|
|
sbc $0A
|
|
sta pos_D90B+1
|
|
MGTK_RELAY_CALL MGTK::MoveTo, pos_D90B
|
|
MGTK_RELAY_CALL MGTK::DrawText, $06
|
|
rts
|
|
|
|
L5E56: .byte 0
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
L5E57: jsr copy_string_to_lcbuf
|
|
stax $06
|
|
MGTK_RELAY_CALL MGTK::MoveTo, common_input1_label_pos
|
|
ldax $06
|
|
jsr draw_string
|
|
rts
|
|
|
|
;;; ============================================================
|
|
|
|
L5E6F: jsr copy_string_to_lcbuf
|
|
stax $06
|
|
MGTK_RELAY_CALL MGTK::MoveTo, common_input2_label_pos
|
|
ldax $06
|
|
jsr draw_string
|
|
rts
|
|
|
|
;;; ============================================================
|
|
|
|
.proc device_on_line
|
|
: ldx device_num
|
|
lda DEVLST,x
|
|
and #$F0
|
|
sta on_line_params::unit_num
|
|
yax_call MLI_RELAY, ON_LINE, on_line_params
|
|
lda on_line_buffer
|
|
and #NAME_LENGTH_MASK
|
|
sta on_line_buffer
|
|
bne found
|
|
jsr inc_device_num
|
|
jmp :-
|
|
|
|
found: addr_call desktop_main::adjust_volname_case, on_line_buffer
|
|
lda #0
|
|
sta path_buf
|
|
addr_call L5F0D, on_line_buffer
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc inc_device_num
|
|
inc device_num
|
|
lda device_num
|
|
cmp DEVCNT
|
|
beq :+
|
|
bcc :+
|
|
lda #0
|
|
sta device_num
|
|
: rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
|
|
L5ECB: lda #$00
|
|
sta L5F0C
|
|
L5ED0: yax_call MLI_RELAY, OPEN, open_params
|
|
beq L5EE9
|
|
jsr device_on_line
|
|
lda #$FF
|
|
sta LD920
|
|
sta L5F0C
|
|
jmp L5ED0
|
|
|
|
L5EE9: lda open_params::ref_num
|
|
sta read_params::ref_num
|
|
sta close_params::ref_num
|
|
yax_call MLI_RELAY, READ, read_params
|
|
beq L5F0B
|
|
jsr device_on_line
|
|
lda #$FF
|
|
sta LD920
|
|
sta L5F0C
|
|
jmp L5ED0
|
|
|
|
L5F0B: rts
|
|
|
|
L5F0C: .byte 0
|
|
L5F0D: jsr copy_string_to_lcbuf
|
|
stax $06
|
|
ldx path_buf
|
|
lda #'/'
|
|
sta path_buf+1,x
|
|
inc path_buf
|
|
ldy #0
|
|
lda ($06),y
|
|
tay
|
|
clc
|
|
adc path_buf
|
|
cmp #'A'
|
|
bcc L5F2F
|
|
return #$FF
|
|
|
|
L5F2F: pha
|
|
tax
|
|
L5F31: lda ($06),y
|
|
sta path_buf,x
|
|
dey
|
|
dex
|
|
cpx path_buf
|
|
bne L5F31
|
|
pla
|
|
sta path_buf
|
|
lda #$FF
|
|
sta LD920
|
|
return #$00
|
|
|
|
;;; ============================================================
|
|
|
|
L5F49: ldx path_buf
|
|
cpx #$00
|
|
beq L5F5A
|
|
dec path_buf
|
|
lda path_buf,x
|
|
cmp #'/'
|
|
bne L5F49
|
|
L5F5A: rts
|
|
|
|
;;; ============================================================
|
|
|
|
L5F5B: jsr L5ECB
|
|
lda #$00
|
|
sta L6067
|
|
sta L6068
|
|
sta L50A9
|
|
lda #$01
|
|
sta L6069
|
|
copy16 $1423, L606A
|
|
lda $1425
|
|
and #$7F
|
|
sta $177F
|
|
bne L5F87
|
|
jmp L6012
|
|
|
|
L5F87: copy16 #$142B, $06
|
|
L5F8F: addr_call_indirect desktop_main::adjust_fileentry_case, $06
|
|
|
|
ldy #$00
|
|
lda ($06),y
|
|
and #NAME_LENGTH_MASK
|
|
bne L5F9A
|
|
jmp L6007
|
|
|
|
L5F9A: ldx L6067
|
|
txa
|
|
sta $1780,x
|
|
ldy #$00
|
|
lda ($06),y
|
|
and #STORAGE_TYPE_MASK
|
|
cmp #ST_LINKED_DIRECTORY << 4
|
|
beq L5FB6
|
|
bit L50A8
|
|
bpl L5FC1
|
|
inc L6068
|
|
jmp L6007
|
|
|
|
L5FB6: lda $1780,x
|
|
ora #$80
|
|
sta $1780,x
|
|
inc L50A9
|
|
L5FC1: ldy #$00
|
|
lda ($06),y
|
|
and #$0F
|
|
sta ($06),y
|
|
copy16 #$1800, $08
|
|
lda #$00
|
|
sta L606C
|
|
lda L6067
|
|
asl a
|
|
rol L606C
|
|
asl a
|
|
rol L606C
|
|
asl a
|
|
rol L606C
|
|
asl a
|
|
rol L606C
|
|
clc
|
|
adc $08
|
|
sta $08
|
|
lda L606C
|
|
adc $09
|
|
sta $09
|
|
ldy #$00
|
|
lda ($06),y
|
|
tay
|
|
L5FFA: lda ($06),y
|
|
sta ($08),y
|
|
dey
|
|
bpl L5FFA
|
|
inc L6067
|
|
inc L6068
|
|
L6007: inc L6069
|
|
lda L6068
|
|
cmp $177F
|
|
bne L6035
|
|
L6012: yax_call MLI_RELAY, CLOSE, close_params
|
|
bit L50A8
|
|
bpl L6026
|
|
lda L50A9
|
|
sta $177F
|
|
L6026: jsr L62DE
|
|
jsr L64E2
|
|
lda L5F0C
|
|
bpl L6033
|
|
sec
|
|
rts
|
|
|
|
L6033: clc
|
|
rts
|
|
|
|
L6035: lda L6069
|
|
cmp L606B
|
|
beq L604E
|
|
add16_8 $06, L606A, $06
|
|
jmp L5F8F
|
|
|
|
L604E: yax_call MLI_RELAY, READ, read_params
|
|
copy16 #$1404, $06
|
|
lda #$00
|
|
sta L6069
|
|
jmp L5F8F
|
|
|
|
L6067: .byte 0
|
|
L6068: .byte 0
|
|
L6069: .byte 0
|
|
L606A: .byte 0
|
|
L606B: .byte 0
|
|
L606C: .byte 0
|
|
|
|
;;; ============================================================
|
|
|
|
L606D: lda winfo_entrydlg_file_picker
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::PaintRect, winfo_entrydlg_file_picker::cliprect
|
|
lda #$10
|
|
sta picker_entry_pos
|
|
lda #$08
|
|
sta picker_entry_pos+2
|
|
lda #$00
|
|
sta picker_entry_pos+3
|
|
sta L6128
|
|
L608E: lda L6128
|
|
cmp $177F
|
|
bne L60A9
|
|
MGTK_RELAY_CALL MGTK::InitPort, grafport3
|
|
MGTK_RELAY_CALL MGTK::SetPort, grafport3
|
|
rts
|
|
|
|
L60A9: MGTK_RELAY_CALL MGTK::MoveTo, picker_entry_pos
|
|
ldx L6128
|
|
lda $1780,x
|
|
and #$7F
|
|
ldx #$00
|
|
stx L6127
|
|
asl a
|
|
rol L6127
|
|
asl a
|
|
rol L6127
|
|
asl a
|
|
rol L6127
|
|
asl a
|
|
rol L6127
|
|
clc
|
|
adc #$00
|
|
tay
|
|
lda L6127
|
|
adc #$18
|
|
tax
|
|
tya
|
|
jsr draw_string
|
|
ldx L6128
|
|
lda $1780,x
|
|
bpl L60FF
|
|
lda #$01
|
|
sta picker_entry_pos
|
|
MGTK_RELAY_CALL MGTK::MoveTo, picker_entry_pos
|
|
addr_call draw_string, str_folder
|
|
lda #$10
|
|
sta picker_entry_pos
|
|
L60FF: lda L6128
|
|
cmp LD920
|
|
bne L6110
|
|
jsr L6274
|
|
lda winfo_entrydlg_file_picker
|
|
jsr set_port_for_window
|
|
L6110: inc L6128
|
|
add16 picker_entry_pos+2, #8, picker_entry_pos+2
|
|
jmp L608E
|
|
|
|
L6127: .byte 0
|
|
L6128: .byte 0
|
|
|
|
PAD_TO $6161 ; Maintain previous addresses
|
|
|
|
;;; ============================================================
|
|
|
|
L6161: lda #$00
|
|
L6163: sta L61B0
|
|
lda $177F
|
|
cmp #$0A
|
|
bcs L6181
|
|
lda #MGTK::Ctl::vertical_scroll_bar
|
|
sta activatectl_which_ctl
|
|
lda #MGTK::activatectl_deactivate
|
|
sta activatectl_activate
|
|
MGTK_RELAY_CALL MGTK::ActivateCtl, activatectl_params
|
|
rts
|
|
|
|
L6181: lda $177F
|
|
sta winfo_entrydlg_file_picker::vthumbmax
|
|
.assert MGTK::Ctl::vertical_scroll_bar = MGTK::activatectl_activate, error, "need to match"
|
|
lda #MGTK::Ctl::vertical_scroll_bar
|
|
sta activatectl_which_ctl
|
|
sta activatectl_activate
|
|
MGTK_RELAY_CALL MGTK::ActivateCtl, activatectl_params
|
|
lda L61B0
|
|
sta updatethumb_thumbpos
|
|
jsr L6227
|
|
lda #MGTK::Ctl::vertical_scroll_bar
|
|
sta updatethumb_which_ctl
|
|
MGTK_RELAY_CALL MGTK::UpdateThumb, updatethumb_params
|
|
rts
|
|
|
|
L61B0: .byte 0
|
|
|
|
;;; ============================================================
|
|
|
|
L61B1: lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::PaintRect, rect_D9C8
|
|
copy16 #path_buf, $06
|
|
ldy #$00
|
|
lda ($06),y
|
|
sta L6226
|
|
iny
|
|
L61D0: iny
|
|
lda ($06),y
|
|
cmp #'/'
|
|
beq L61DE
|
|
cpy L6226
|
|
bne L61D0
|
|
beq L61E2
|
|
L61DE: dey
|
|
sty L6226
|
|
L61E2: ldy #$00
|
|
ldx #$00
|
|
L61E6: inx
|
|
iny
|
|
lda ($06),y
|
|
sta $0220,x
|
|
cpy L6226
|
|
bne L61E6
|
|
stx $0220
|
|
MGTK_RELAY_CALL MGTK::MoveTo, disk_label_pos
|
|
addr_call draw_string, disk_label
|
|
addr_call draw_string, $0220
|
|
MGTK_RELAY_CALL MGTK::InitPort, grafport3
|
|
MGTK_RELAY_CALL MGTK::SetPort, grafport3
|
|
rts
|
|
|
|
L6226: .byte 0
|
|
|
|
;;; ============================================================
|
|
|
|
L6227: sta L6273
|
|
clc
|
|
adc #$09
|
|
cmp $177F
|
|
beq L6234
|
|
bcs L623A
|
|
L6234: lda L6273
|
|
jmp L624A
|
|
|
|
L623A: lda $177F
|
|
cmp #$0A
|
|
bcs L6247
|
|
lda L6273
|
|
jmp L624A
|
|
|
|
L6247: sec
|
|
sbc #$09
|
|
L624A: ldx #$00
|
|
stx L6273
|
|
asl a
|
|
rol L6273
|
|
asl a
|
|
rol L6273
|
|
asl a
|
|
rol L6273
|
|
sta winfo_entrydlg_file_picker::cliprect+2
|
|
ldx L6273
|
|
stx winfo_entrydlg_file_picker::cliprect+3
|
|
clc
|
|
adc #70
|
|
sta winfo_entrydlg_file_picker::cliprect+6
|
|
lda L6273
|
|
adc #0
|
|
sta winfo_entrydlg_file_picker::cliprect+7
|
|
rts
|
|
|
|
L6273: .byte 0
|
|
|
|
|
|
L6274: ldx #0
|
|
stx L62C7
|
|
asl a
|
|
rol L62C7
|
|
asl a
|
|
rol L62C7
|
|
asl a
|
|
rol L62C7
|
|
sta rect_D90F+2
|
|
ldx L62C7
|
|
stx rect_D90F+3
|
|
clc
|
|
adc #7
|
|
sta rect_D90F+6
|
|
lda L62C7
|
|
adc #0
|
|
sta rect_D90F+7
|
|
lda winfo_entrydlg_file_picker
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::PaintRect, rect_D90F
|
|
MGTK_RELAY_CALL MGTK::InitPort, grafport3
|
|
MGTK_RELAY_CALL MGTK::SetPort, grafport3
|
|
rts
|
|
|
|
L62C7: .byte 0
|
|
|
|
;;; ============================================================
|
|
|
|
.proc set_port_for_window
|
|
sta getwinport_params2::window_id
|
|
MGTK_RELAY_CALL MGTK::GetWinPort, getwinport_params2
|
|
MGTK_RELAY_CALL MGTK::SetPort, grafport2
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
L62DE: lda #'Z'
|
|
ldx #15
|
|
: sta L63C2,x
|
|
dex
|
|
bpl :-
|
|
|
|
lda #$00
|
|
sta L63BF
|
|
sta L63BE
|
|
L62F0: lda L63BF
|
|
cmp $177F
|
|
bne L62FB
|
|
jmp L6377
|
|
|
|
L62FB: lda L63BE
|
|
jsr L6451
|
|
ldy #$00
|
|
lda ($06),y
|
|
bmi L633D
|
|
and #$0F
|
|
sta L63C1
|
|
ldy #$01
|
|
L630E: lda ($06),y
|
|
cmp L63C1,y
|
|
beq L631A
|
|
bcs L633D
|
|
jmp L6322
|
|
|
|
L631A: iny
|
|
cpy #$10
|
|
bne L630E
|
|
jmp L633D
|
|
|
|
L6322: lda L63BE
|
|
sta L63C0
|
|
ldx #$0F
|
|
lda #' '
|
|
L632C: sta L63C2,x
|
|
dex
|
|
bpl L632C
|
|
ldy L63C1
|
|
L6335: lda ($06),y
|
|
sta L63C1,y
|
|
dey
|
|
bne L6335
|
|
L633D: inc L63BE
|
|
lda L63BE
|
|
cmp $177F
|
|
beq L634B
|
|
jmp L62FB
|
|
|
|
L634B: lda L63C0
|
|
jsr L6451
|
|
ldy #$00
|
|
lda ($06),y
|
|
ora #$80
|
|
sta ($06),y
|
|
|
|
lda #'Z'
|
|
ldx #15
|
|
: sta L63C2,x
|
|
dex
|
|
bpl :-
|
|
|
|
ldx L63BF
|
|
lda L63C0
|
|
sta L63D2,x
|
|
lda #$00
|
|
sta L63BE
|
|
inc L63BF
|
|
jmp L62F0
|
|
|
|
L6377: ldx $177F
|
|
dex
|
|
stx L63BF
|
|
L637E: lda L63BF
|
|
bpl L63AD
|
|
ldx $177F
|
|
beq L63AC
|
|
dex
|
|
L6389: lda L63D2,x
|
|
tay
|
|
lda $1780,y
|
|
bpl L639A
|
|
lda L63D2,x
|
|
ora #$80
|
|
sta L63D2,x
|
|
L639A: dex
|
|
bpl L6389
|
|
ldx $177F
|
|
beq L63AC
|
|
dex
|
|
L63A3: lda L63D2,x
|
|
sta $1780,x
|
|
dex
|
|
bpl L63A3
|
|
L63AC: rts
|
|
|
|
L63AD: jsr L6451
|
|
ldy #$00
|
|
lda ($06),y
|
|
and #$7F
|
|
sta ($06),y
|
|
dec L63BF
|
|
jmp L637E
|
|
|
|
L63BE: .byte 0
|
|
L63BF: .byte 0
|
|
L63C0: .byte 0
|
|
L63C1: .byte 0
|
|
L63C2: .res 16, 0
|
|
L63D2: .res 127, 0
|
|
L6451: ldx #$00
|
|
stx $06
|
|
ldx #$18
|
|
stx $07
|
|
ldx #$00
|
|
stx L647B
|
|
asl a
|
|
rol L647B
|
|
asl a
|
|
rol L647B
|
|
asl a
|
|
rol L647B
|
|
asl a
|
|
rol L647B
|
|
clc
|
|
adc $06
|
|
sta $06
|
|
lda L647B
|
|
adc $07
|
|
sta $07
|
|
rts
|
|
|
|
L647B: .byte 0
|
|
|
|
;;; ============================================================
|
|
|
|
L647C: stax $06
|
|
ldy #$01
|
|
lda ($06),y
|
|
cmp #'/'
|
|
bne L64DE
|
|
dey
|
|
lda ($06),y
|
|
cmp #$02
|
|
bcc L64DE
|
|
tay
|
|
lda ($06),y
|
|
cmp #'/'
|
|
beq L64DE
|
|
ldx #$00
|
|
stx L64E1
|
|
L649B: lda ($06),y
|
|
cmp #'/'
|
|
beq L64AB
|
|
inx
|
|
cpx #$10
|
|
beq L64DE
|
|
dey
|
|
bne L649B
|
|
beq L64B3
|
|
L64AB: inc L64E1
|
|
ldx #$00
|
|
dey
|
|
bne L649B
|
|
L64B3: ldy #$00
|
|
lda ($06),y
|
|
tay
|
|
L64B8: lda ($06),y
|
|
and #CHAR_MASK
|
|
cmp #'.'
|
|
beq L64D8
|
|
cmp #'/'
|
|
bcc L64DE
|
|
cmp #'9'+1
|
|
bcc L64D8
|
|
cmp #'A'
|
|
bcc L64DE
|
|
cmp #'Z'+1
|
|
bcc L64D8
|
|
cmp #'a'
|
|
bcc L64DE
|
|
cmp #'z'+1
|
|
bcs L64DE
|
|
L64D8: dey
|
|
bne L64B8
|
|
return #$00
|
|
|
|
L64DE: return #$FF
|
|
|
|
L64E1: .byte 0
|
|
L64E2: lda $177F
|
|
bne L64E8
|
|
L64E7: rts
|
|
|
|
L64E8: lda #$00
|
|
sta L6515
|
|
copy16 #$1800, $06
|
|
L64F5: lda L6515
|
|
cmp $177F
|
|
beq L64E7
|
|
inc L6515
|
|
lda $06
|
|
clc
|
|
adc #$10
|
|
sta $06
|
|
bcc L64F5
|
|
inc $07
|
|
jmp L64F5
|
|
|
|
L6515: .byte 0
|
|
|
|
;;; ============================================================
|
|
|
|
L6516: stax $06
|
|
ldy #$00
|
|
lda ($06),y
|
|
tay
|
|
L651F: lda ($06),y
|
|
sta L6576,y
|
|
dey
|
|
bpl L651F
|
|
lda #$00
|
|
sta L6575
|
|
copy16 #$1800, $06
|
|
L6534: lda L6575
|
|
cmp $177F
|
|
beq L6564
|
|
ldy #$00
|
|
lda ($06),y
|
|
cmp L6576
|
|
bne L6553
|
|
tay
|
|
L6546: lda ($06),y
|
|
cmp L6576,y
|
|
bne L6553
|
|
dey
|
|
bne L6546
|
|
jmp L6567
|
|
|
|
L6553: inc L6575
|
|
lda $06
|
|
clc
|
|
adc #$10
|
|
sta $06
|
|
bcc L6534
|
|
inc $07
|
|
jmp L6534
|
|
|
|
L6564: return #$FF
|
|
|
|
L6567: ldx $177F
|
|
lda L6575
|
|
L656D: dex
|
|
cmp $1780,x
|
|
bne L656D
|
|
txa
|
|
rts
|
|
|
|
L6575: .byte 0
|
|
L6576: .res 16, 0
|
|
|
|
;;; ============================================================
|
|
|
|
L6586: bpl L658B
|
|
L6588: return #$00
|
|
|
|
L658B: cmp #$09
|
|
bcc L6588
|
|
sec
|
|
sbc #$08
|
|
rts
|
|
|
|
;;; ============================================================
|
|
|
|
.proc blink_f1_ip
|
|
ptr := $06
|
|
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
jsr calc_path_buf0_input1_endpos
|
|
stax $06
|
|
copy16 common_input1_textpos+2, $08
|
|
MGTK_RELAY_CALL MGTK::MoveTo, ptr
|
|
bit prompt_ip_flag
|
|
bpl bg2
|
|
|
|
MGTK_RELAY_CALL MGTK::SetTextBG, textbg1
|
|
copy #$00, prompt_ip_flag
|
|
beq :+
|
|
|
|
bg2: MGTK_RELAY_CALL MGTK::SetTextBG, textbg2
|
|
copy #$FF, prompt_ip_flag
|
|
|
|
: copy16 #str_insertion_point+1, ptr
|
|
lda str_insertion_point
|
|
sta $08
|
|
MGTK_RELAY_CALL MGTK::DrawText, ptr
|
|
jsr L56E3
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc blink_f2_ip
|
|
ptr := $06
|
|
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
jsr calc_path_buf1_input2_endpos
|
|
stax $06
|
|
copy16 common_input2_textpos+2, $08
|
|
MGTK_RELAY_CALL MGTK::MoveTo, ptr
|
|
bit prompt_ip_flag
|
|
bpl bg2
|
|
|
|
MGTK_RELAY_CALL MGTK::SetTextBG, textbg1
|
|
copy #$00, prompt_ip_flag
|
|
jmp :+
|
|
|
|
bg2: MGTK_RELAY_CALL MGTK::SetTextBG, textbg2
|
|
copy #$FF, prompt_ip_flag
|
|
|
|
: copy16 #str_insertion_point+1, ptr
|
|
lda str_insertion_point
|
|
sta $08
|
|
MGTK_RELAY_CALL MGTK::DrawText, ptr
|
|
jsr L56E3
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc redraw_f1
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_input1_rect
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::FrameRect, common_input1_rect
|
|
MGTK_RELAY_CALL MGTK::MoveTo, common_input1_textpos
|
|
lda path_buf0
|
|
beq :+
|
|
addr_call draw_string, path_buf0
|
|
: addr_call draw_string, path_buf2
|
|
addr_call draw_string, str_2_spaces
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc redraw_f2
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::PaintRect, common_input2_rect
|
|
MGTK_RELAY_CALL MGTK::SetPenMode, penXOR
|
|
MGTK_RELAY_CALL MGTK::FrameRect, common_input2_rect
|
|
MGTK_RELAY_CALL MGTK::MoveTo, common_input2_textpos
|
|
lda path_buf1
|
|
beq :+
|
|
addr_call draw_string, path_buf1
|
|
: addr_call draw_string, path_buf2
|
|
addr_call draw_string, str_2_spaces
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc handle_f1_click
|
|
lda winfo_entrydlg
|
|
sta screentowindow_window_id
|
|
MGTK_RELAY_CALL MGTK::ScreenToWindow, screentowindow_params
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::MoveTo, screentowindow_windowx
|
|
MGTK_RELAY_CALL MGTK::InRect, common_input1_rect
|
|
cmp #MGTK::inrect_inside
|
|
beq L6719
|
|
bit L5104
|
|
bpl L6718
|
|
MGTK_RELAY_CALL MGTK::InRect, common_input2_rect
|
|
cmp #MGTK::inrect_inside
|
|
bne L6718
|
|
jmp jt_handle_ok
|
|
|
|
L6718: rts
|
|
|
|
L6719: jsr calc_path_buf0_input1_endpos
|
|
stax $06
|
|
cmp16 screentowindow_windowx, $06
|
|
bcs L672F
|
|
jmp L67C4
|
|
|
|
L672F: jsr calc_path_buf0_input1_endpos
|
|
stax L684D
|
|
ldx path_buf2
|
|
inx
|
|
lda #' '
|
|
sta path_buf2,x
|
|
inc path_buf2
|
|
copy16 #path_buf2, $06
|
|
lda path_buf2
|
|
sta $08
|
|
L6751: MGTK_RELAY_CALL MGTK::TextWidth, $06
|
|
add16 $09, L684D, $09
|
|
cmp16 $09, screentowindow_windowx
|
|
bcc L6783
|
|
dec $08
|
|
lda $08
|
|
cmp #$01
|
|
bne L6751
|
|
dec path_buf2
|
|
jmp L6846
|
|
|
|
L6783: lda $08
|
|
cmp path_buf2
|
|
bcc L6790
|
|
dec path_buf2
|
|
jmp handle_f1_meta_right_key
|
|
|
|
L6790: ldx #$02
|
|
ldy path_buf0
|
|
iny
|
|
L6796: lda path_buf2,x
|
|
sta path_buf0,y
|
|
cpx $08
|
|
beq L67A5
|
|
iny
|
|
inx
|
|
jmp L6796
|
|
|
|
L67A5: sty path_buf0
|
|
ldy #$02
|
|
ldx $08
|
|
inx
|
|
L67AD: lda path_buf2,x
|
|
sta path_buf2,y
|
|
cpx path_buf2
|
|
beq L67BD
|
|
iny
|
|
inx
|
|
jmp L67AD
|
|
|
|
L67BD: dey
|
|
sty path_buf2
|
|
jmp L6846
|
|
|
|
L67C4: copy16 #path_buf0, $06
|
|
lda path_buf0
|
|
sta $08
|
|
L67D1: MGTK_RELAY_CALL MGTK::TextWidth, $06
|
|
add16 $09, common_input1_textpos, $09
|
|
cmp16 $09, screentowindow_windowx
|
|
bcc L6800
|
|
dec $08
|
|
lda $08
|
|
cmp #$01
|
|
bcs L67D1
|
|
jmp handle_f1_meta_left_key
|
|
|
|
L6800: inc $08
|
|
ldy #$00
|
|
ldx $08
|
|
L6806: cpx path_buf0
|
|
beq L6816
|
|
inx
|
|
iny
|
|
lda path_buf0,x
|
|
sta split_buf+1,y
|
|
jmp L6806
|
|
|
|
L6816: iny
|
|
sty split_buf
|
|
ldx #$01
|
|
ldy split_buf
|
|
L681F: cpx path_buf2
|
|
beq L682F
|
|
inx
|
|
iny
|
|
lda path_buf2,x
|
|
sta split_buf,y
|
|
jmp L681F
|
|
|
|
L682F: sty split_buf
|
|
lda str_insertion_point+1
|
|
sta split_buf+1
|
|
L6838: lda split_buf,y
|
|
sta path_buf2,y
|
|
dey
|
|
bpl L6838
|
|
lda $08
|
|
sta path_buf0
|
|
L6846: jsr jt_redraw_input
|
|
jsr L6EA3
|
|
rts
|
|
|
|
L684D: .word 0
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc handle_f2_click
|
|
lda winfo_entrydlg
|
|
sta screentowindow_window_id
|
|
MGTK_RELAY_CALL MGTK::ScreenToWindow, screentowindow_params
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::MoveTo, screentowindow_windowx
|
|
MGTK_RELAY_CALL MGTK::InRect, common_input2_rect
|
|
cmp #MGTK::inrect_inside
|
|
beq L6890
|
|
bit L5104
|
|
bpl L688F
|
|
MGTK_RELAY_CALL MGTK::InRect, common_input1_rect
|
|
cmp #MGTK::inrect_inside
|
|
bne L688F
|
|
jmp jt_handle_cancel
|
|
|
|
L688F: rts
|
|
|
|
L6890: jsr calc_path_buf1_input2_endpos
|
|
stax $06
|
|
cmp16 screentowindow_windowx, $06
|
|
bcs L68A6
|
|
jmp L693B
|
|
|
|
L68A6: jsr calc_path_buf1_input2_endpos
|
|
stax L69C4
|
|
ldx path_buf2
|
|
inx
|
|
lda #' '
|
|
sta path_buf2,x
|
|
inc path_buf2
|
|
copy16 #path_buf2, $06
|
|
lda path_buf2
|
|
sta $08
|
|
L68C8: MGTK_RELAY_CALL MGTK::TextWidth, $06
|
|
add16 $09, L69C4, $09
|
|
cmp16 $09, screentowindow_windowx
|
|
bcc L68FA
|
|
dec $08
|
|
lda $08
|
|
cmp #$01
|
|
bne L68C8
|
|
dec path_buf2
|
|
jmp L69BD
|
|
|
|
L68FA: lda $08
|
|
cmp path_buf2
|
|
bcc L6907
|
|
dec path_buf2
|
|
jmp handle_f2_meta_right_key
|
|
|
|
L6907: ldx #$02
|
|
ldy path_buf1
|
|
iny
|
|
L690D: lda path_buf2,x
|
|
sta path_buf1,y
|
|
cpx $08
|
|
beq L691C
|
|
iny
|
|
inx
|
|
jmp L690D
|
|
|
|
L691C: sty path_buf1
|
|
ldy #$02
|
|
ldx $08
|
|
inx
|
|
L6924: lda path_buf2,x
|
|
sta path_buf2,y
|
|
cpx path_buf2
|
|
beq L6934
|
|
iny
|
|
inx
|
|
jmp L6924
|
|
|
|
L6934: dey
|
|
sty path_buf2
|
|
jmp L69BD
|
|
|
|
L693B: copy16 #path_buf1, $06
|
|
lda path_buf1
|
|
sta $08
|
|
L6948: MGTK_RELAY_CALL MGTK::TextWidth, $06
|
|
add16 $09, common_input2_textpos, $09
|
|
cmp16 $09, screentowindow_windowx
|
|
bcc L6977
|
|
dec $08
|
|
lda $08
|
|
cmp #$01
|
|
bcs L6948
|
|
jmp handle_f2_meta_left_key
|
|
|
|
L6977: inc $08
|
|
ldy #$00
|
|
ldx $08
|
|
L697D: cpx path_buf1
|
|
beq L698D
|
|
inx
|
|
iny
|
|
lda path_buf1,x
|
|
sta split_buf+1,y
|
|
jmp L697D
|
|
|
|
L698D: iny
|
|
sty split_buf
|
|
ldx #$01
|
|
ldy split_buf
|
|
L6996: cpx path_buf2
|
|
beq L69A6
|
|
inx
|
|
iny
|
|
lda path_buf2,x
|
|
sta split_buf,y
|
|
jmp L6996
|
|
|
|
L69A6: sty split_buf
|
|
lda str_insertion_point+1
|
|
sta split_buf+1
|
|
L69AF: lda split_buf,y
|
|
sta path_buf2,y
|
|
dey
|
|
bpl L69AF
|
|
lda $08
|
|
sta path_buf1
|
|
L69BD: jsr jt_redraw_input
|
|
jsr L6E9F
|
|
rts
|
|
|
|
L69C4: .word 0
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc handle_f1_other_key
|
|
sta L6A17
|
|
lda path_buf0
|
|
clc
|
|
adc path_buf2
|
|
cmp #$3F
|
|
bcc L69D5
|
|
rts
|
|
|
|
L69D5: lda L6A17
|
|
ldx path_buf0
|
|
inx
|
|
sta path_buf0,x
|
|
sta str_1_char+1
|
|
jsr calc_path_buf0_input1_endpos
|
|
inc path_buf0
|
|
stax $06
|
|
copy16 common_input1_textpos+2, $08
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::MoveTo, $06
|
|
addr_call draw_string, str_1_char
|
|
addr_call draw_string, path_buf2
|
|
jsr L6EA3
|
|
rts
|
|
|
|
L6A17: .byte 0
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc handle_f1_delete_key
|
|
lda path_buf0
|
|
bne L6A1E
|
|
rts
|
|
|
|
L6A1E: dec path_buf0
|
|
jsr calc_path_buf0_input1_endpos
|
|
stax $06
|
|
copy16 common_input1_textpos+2, $08
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::MoveTo, $06
|
|
addr_call draw_string, path_buf2
|
|
addr_call draw_string, str_2_spaces
|
|
jsr L6EA3
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc handle_f1_left_key
|
|
lda path_buf0
|
|
bne L6A59
|
|
rts
|
|
|
|
L6A59: ldx path_buf2
|
|
cpx #$01
|
|
beq L6A6B
|
|
L6A60: lda path_buf2,x
|
|
sta path_buf2+1,x
|
|
dex
|
|
cpx #$01
|
|
bne L6A60
|
|
L6A6B: ldx path_buf0
|
|
lda path_buf0,x
|
|
sta path_buf2+2
|
|
dec path_buf0
|
|
inc path_buf2
|
|
jsr calc_path_buf0_input1_endpos
|
|
stax $06
|
|
copy16 common_input1_textpos+2, $08
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::MoveTo, $06
|
|
addr_call draw_string, path_buf2
|
|
addr_call draw_string, str_2_spaces
|
|
jsr L6EA3
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc handle_f1_right_key
|
|
lda path_buf2
|
|
cmp #$02
|
|
bcs L6AB4
|
|
rts
|
|
|
|
L6AB4: ldx path_buf0
|
|
inx
|
|
lda path_buf2+2
|
|
sta path_buf0,x
|
|
inc path_buf0
|
|
ldx path_buf2
|
|
cpx #$03
|
|
bcc L6AD6
|
|
ldx #$02
|
|
L6ACA: lda path_buf2+1,x
|
|
sta path_buf2,x
|
|
inx
|
|
cpx path_buf2
|
|
bne L6ACA
|
|
L6AD6: dec path_buf2
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::MoveTo, common_input1_textpos
|
|
addr_call draw_string, path_buf0
|
|
addr_call draw_string, path_buf2
|
|
addr_call draw_string, str_2_spaces
|
|
jsr L6EA3
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc handle_f1_meta_left_key
|
|
lda path_buf0
|
|
bne L6B07
|
|
rts
|
|
|
|
L6B07: ldy path_buf0
|
|
lda path_buf2
|
|
cmp #$02
|
|
bcc L6B20
|
|
ldx #$01
|
|
L6B13: iny
|
|
inx
|
|
lda path_buf2,x
|
|
sta path_buf0,y
|
|
cpx path_buf2
|
|
bne L6B13
|
|
L6B20: sty path_buf0
|
|
L6B23: lda path_buf0,y
|
|
sta path_buf2+1,y
|
|
dey
|
|
bne L6B23
|
|
ldx path_buf0
|
|
inx
|
|
stx path_buf2
|
|
lda #GLYPH_INSPT
|
|
sta path_buf2+1
|
|
lda #$00
|
|
sta path_buf0
|
|
jsr jt_redraw_input
|
|
jsr L6EA3
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc handle_f1_meta_right_key
|
|
lda path_buf2
|
|
cmp #$02
|
|
bcs L6B4C
|
|
rts
|
|
|
|
L6B4C: ldx #$01
|
|
ldy path_buf0
|
|
L6B51: inx
|
|
iny
|
|
lda path_buf2,x
|
|
sta path_buf0,y
|
|
cpx path_buf2
|
|
bne L6B51
|
|
sty path_buf0
|
|
copy #1, path_buf2
|
|
copy #GLYPH_INSPT, path_buf2+1
|
|
jsr jt_redraw_input
|
|
jsr L6EA3
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc handle_f2_other_key
|
|
sta L6BC3
|
|
lda path_buf1
|
|
clc
|
|
adc path_buf2
|
|
cmp #$3F
|
|
bcc L6B81
|
|
rts
|
|
|
|
L6B81: lda L6BC3
|
|
ldx path_buf1
|
|
inx
|
|
sta path_buf1,x
|
|
sta str_1_char+1
|
|
jsr calc_path_buf1_input2_endpos
|
|
inc path_buf1
|
|
stax $06
|
|
copy16 common_input2_textpos+2, $08
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::MoveTo, $06
|
|
addr_call draw_string, str_1_char
|
|
addr_call draw_string, path_buf2
|
|
jsr L6E9F
|
|
rts
|
|
|
|
L6BC3: .byte 0
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc handle_f2_delete_key
|
|
lda path_buf1
|
|
bne L6BCA
|
|
rts
|
|
|
|
L6BCA: dec path_buf1
|
|
jsr calc_path_buf1_input2_endpos
|
|
stax $06
|
|
copy16 common_input2_textpos+2, $08
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::MoveTo, $06
|
|
addr_call draw_string, path_buf2
|
|
addr_call draw_string, str_2_spaces
|
|
jsr L6E9F
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc handle_f2_left_key
|
|
lda path_buf1
|
|
bne L6C05
|
|
rts
|
|
|
|
L6C05: ldx path_buf2
|
|
cpx #$01
|
|
beq L6C17
|
|
L6C0C: lda path_buf2,x
|
|
sta path_buf2+1,x
|
|
dex
|
|
cpx #$01
|
|
bne L6C0C
|
|
L6C17: ldx path_buf1
|
|
lda path_buf1,x
|
|
sta path_buf2+2
|
|
dec path_buf1
|
|
inc path_buf2
|
|
jsr calc_path_buf1_input2_endpos
|
|
stax $06
|
|
copy16 common_input2_textpos+2, $08
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::MoveTo, $06
|
|
addr_call draw_string, path_buf2
|
|
addr_call draw_string, str_2_spaces
|
|
jsr L6E9F
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc handle_f2_right_key
|
|
lda path_buf2
|
|
cmp #$02
|
|
bcs L6C60
|
|
rts
|
|
|
|
L6C60: ldx path_buf1
|
|
inx
|
|
lda path_buf2+2
|
|
sta path_buf1,x
|
|
inc path_buf1
|
|
ldx path_buf2
|
|
cpx #$03
|
|
bcc L6C82
|
|
ldx #$02
|
|
L6C76: lda path_buf2+1,x
|
|
sta path_buf2,x
|
|
inx
|
|
cpx path_buf2
|
|
bne L6C76
|
|
L6C82: dec path_buf2
|
|
lda winfo_entrydlg
|
|
jsr set_port_for_window
|
|
MGTK_RELAY_CALL MGTK::MoveTo, common_input2_textpos
|
|
addr_call draw_string, path_buf1
|
|
addr_call draw_string, path_buf2
|
|
addr_call draw_string, str_2_spaces
|
|
jsr L6E9F
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc handle_f2_meta_left_key
|
|
lda path_buf1
|
|
bne L6CB3
|
|
rts
|
|
|
|
L6CB3: ldy path_buf1
|
|
lda path_buf2
|
|
cmp #$02
|
|
bcc L6CCC
|
|
ldx #$01
|
|
L6CBF: iny
|
|
inx
|
|
lda path_buf2,x
|
|
sta path_buf1,y
|
|
cpx path_buf2
|
|
bne L6CBF
|
|
L6CCC: sty path_buf1
|
|
L6CCF: lda path_buf1,y
|
|
sta path_buf2+1,y
|
|
dey
|
|
bne L6CCF
|
|
ldx path_buf1
|
|
inx
|
|
stx path_buf2
|
|
lda #GLYPH_INSPT
|
|
sta path_buf2+1
|
|
lda #$00
|
|
sta path_buf1
|
|
jsr jt_redraw_input
|
|
jsr L6E9F
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc handle_f2_meta_right_key
|
|
lda path_buf2
|
|
cmp #$02
|
|
bcs L6CF8
|
|
rts
|
|
|
|
L6CF8: ldx #$01
|
|
ldy path_buf1
|
|
L6CFD: inx
|
|
iny
|
|
lda path_buf2,x
|
|
sta path_buf1,y
|
|
cpx path_buf2
|
|
bne L6CFD
|
|
sty path_buf1
|
|
copy #1, path_buf2
|
|
copy #GLYPH_INSPT, path_buf2+1
|
|
jsr jt_redraw_input
|
|
jsr L6E9F
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
;;; Dynamically altered table of handlers for focused
|
|
;;; input field (e.g. source/destination filename, etc)
|
|
jump_table:
|
|
jt_handle_ok: jmp 0
|
|
jt_handle_cancel: jmp 0
|
|
jt_blink_ip: jmp 0
|
|
jt_redraw_input: jmp 0
|
|
jt_strip_path_segment: jmp 0
|
|
jt_05: jmp 0
|
|
jt_prep_path: jmp 0
|
|
jt_handle_other_key: jmp 0
|
|
jt_handle_delete_key: jmp 0
|
|
jt_handle_left_key: jmp 0
|
|
jt_handle_right_key: jmp 0
|
|
jt_handle_meta_left_key: jmp 0
|
|
jt_handle_meta_right_key: jmp 0
|
|
jt_handle_click: jmp 0
|
|
|
|
;;; ============================================================
|
|
|
|
.proc append_to_path_buf0
|
|
ptr := $06
|
|
|
|
stax ptr
|
|
|
|
ldx path_buf0
|
|
lda #'/'
|
|
sta path_buf0+1,x
|
|
inc path_buf0
|
|
|
|
ldy #0
|
|
lda (ptr),y
|
|
tay
|
|
clc
|
|
adc path_buf0
|
|
pha
|
|
tax
|
|
|
|
: lda (ptr),y
|
|
sta path_buf0,x
|
|
dey
|
|
dex
|
|
cpx path_buf0
|
|
bne :-
|
|
|
|
pla
|
|
sta path_buf0
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc append_to_path_buf1
|
|
ptr := $06
|
|
|
|
stax ptr
|
|
|
|
ldx path_buf1
|
|
lda #'/'
|
|
sta path_buf1+1,x
|
|
inc path_buf1
|
|
|
|
ldy #$00
|
|
lda (ptr),y
|
|
tay
|
|
clc
|
|
adc path_buf1
|
|
pha
|
|
tax
|
|
|
|
: lda (ptr),y
|
|
sta path_buf1,x
|
|
dey
|
|
dex
|
|
cpx path_buf1
|
|
bne :-
|
|
|
|
pla
|
|
sta path_buf1
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc strip_path_buf0_segment
|
|
: ldx path_buf0
|
|
cpx #0
|
|
beq :+
|
|
dec path_buf0
|
|
lda path_buf0,x
|
|
cmp #'/'
|
|
bne :-
|
|
: rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc strip_path_buf1_segment
|
|
: ldx path_buf1
|
|
cpx #0
|
|
beq :+
|
|
dec path_buf1
|
|
lda path_buf1,x
|
|
cmp #'/'
|
|
bne :-
|
|
: rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc strip_f1_path_segment
|
|
jsr strip_path_buf0_segment
|
|
jsr jt_redraw_input
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc strip_f2_path_segment
|
|
jsr strip_path_buf1_segment
|
|
jsr jt_redraw_input
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
jt_handle_f1_tbd05:
|
|
lda #$00
|
|
beq L6DD6
|
|
|
|
jt_handle_f2_tbd05:
|
|
lda #$80
|
|
|
|
.proc L6DD6
|
|
ptr := $06
|
|
|
|
sta flag
|
|
copy16 #$1800, ptr
|
|
ldx LD920
|
|
lda $1780,x
|
|
and #$7F
|
|
|
|
ldx #0
|
|
stx hi
|
|
asl a ; * 16
|
|
rol hi
|
|
asl a
|
|
rol hi
|
|
asl a
|
|
rol hi
|
|
asl a
|
|
rol hi
|
|
clc
|
|
adc ptr
|
|
tay
|
|
lda hi
|
|
adc ptr+1
|
|
tax
|
|
tya
|
|
|
|
bit flag
|
|
bpl f1
|
|
jsr append_to_path_buf1
|
|
jmp :+
|
|
|
|
f1: jsr append_to_path_buf0
|
|
|
|
: jsr jt_redraw_input
|
|
rts
|
|
|
|
hi: .byte 0 ; high byte
|
|
flag: .byte 0
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc prep_path_buf0
|
|
COPY_STRING path_buf, path_buf0
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc prep_path_buf1
|
|
COPY_STRING path_buf, path_buf1
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc calc_path_buf0_input1_endpos
|
|
str := $6
|
|
str_data := $6
|
|
str_len := $8
|
|
str_width := $9
|
|
|
|
lda #0
|
|
sta str_width
|
|
sta str_width+1
|
|
lda path_buf0
|
|
beq :+
|
|
|
|
sta str_len
|
|
copy16 #path_buf0+1, str_data
|
|
MGTK_RELAY_CALL MGTK::TextWidth, str
|
|
|
|
: lda str_width
|
|
clc
|
|
adc common_input1_textpos
|
|
tay
|
|
lda str_width+1
|
|
adc common_input1_textpos+1
|
|
tax
|
|
tya
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
.proc calc_path_buf1_input2_endpos
|
|
str := $6
|
|
str_data := $6
|
|
str_len := $8
|
|
str_width := $9
|
|
|
|
lda #0
|
|
sta str_width
|
|
sta str_width+1
|
|
lda path_buf1
|
|
beq :+
|
|
|
|
sta str_len
|
|
copy16 #path_buf1+1, str_data
|
|
MGTK_RELAY_CALL MGTK::TextWidth, str
|
|
|
|
: lda str_width
|
|
clc
|
|
adc common_input2_textpos
|
|
tay
|
|
lda str_width+1
|
|
adc common_input2_textpos+1
|
|
tax
|
|
tya
|
|
rts
|
|
.endproc
|
|
|
|
;;; ============================================================
|
|
|
|
L6E9F: lda #$FF
|
|
bmi L6EA5
|
|
L6EA3: lda #$00
|
|
L6EA5: bmi L6EB6
|
|
ldx path_buf0
|
|
L6EAA: lda path_buf0,x
|
|
sta split_buf,x
|
|
dex
|
|
bpl L6EAA
|
|
jmp L6EC2
|
|
|
|
L6EB6: ldx path_buf1
|
|
L6EB9: lda path_buf1,x
|
|
sta split_buf,x
|
|
dex
|
|
bpl L6EB9
|
|
L6EC2: lda LD920
|
|
sta L6F3D
|
|
bmi L6EFB
|
|
ldx #$00
|
|
stx $06
|
|
ldx #$18
|
|
stx $07
|
|
ldx #$00
|
|
stx L6F3C
|
|
tax
|
|
lda $1780,x
|
|
and #$7F
|
|
asl a
|
|
rol L6F3C
|
|
asl a
|
|
rol L6F3C
|
|
asl a
|
|
rol L6F3C
|
|
asl a
|
|
rol L6F3C
|
|
clc
|
|
adc $06
|
|
tay
|
|
lda L6F3C
|
|
adc $07
|
|
tax
|
|
tya
|
|
jsr L5F0D
|
|
L6EFB: lda split_buf
|
|
cmp path_buf
|
|
bne L6F26
|
|
tax
|
|
L6F12: lda split_buf,x
|
|
cmp path_buf,x
|
|
bne L6F26
|
|
dex
|
|
bne L6F12
|
|
lda #$00
|
|
sta LD8F0
|
|
jsr L6F2F
|
|
rts
|
|
|
|
L6F26: lda #$FF
|
|
sta LD8F0
|
|
jsr L6F2F
|
|
rts
|
|
|
|
L6F2F: lda L6F3D
|
|
sta LD920
|
|
bpl L6F38
|
|
rts
|
|
|
|
L6F38: jsr L5F49
|
|
rts
|
|
|
|
L6F3C: .byte 0
|
|
L6F3D: .byte 0
|
|
|
|
;;; ============================================================
|
|
|
|
PAD_TO $7000
|
|
|
|
.endproc ; common_overlay
|