diff --git a/desktop/desktop_aux.s b/desktop/desktop_aux.s index fe24f97..0559bd1 100644 --- a/desktop/desktop_aux.s +++ b/desktop/desktop_aux.s @@ -1571,8 +1571,7 @@ L9F98: lda #0 sta L9F92 beq L9FA4 -L9F9F: lda #$80 - sta L9F92 +L9F9F: copy #$80, L9F92 .proc L9FA4 ldy #IconEntry::win_type @@ -2079,8 +2078,7 @@ window_id: .byte 0 beq volume ;; File (i.e. icon in window) - lda #$80 - sta LA3B7 + copy #$80, LA3B7 MGTK_CALL MGTK::SetPattern, white_pattern MGTK_CALL MGTK::FrontWindow, frontwindow_params lda frontwindow_params::window_id @@ -2189,9 +2187,8 @@ LA4C5: pla LA4CB: .byte 0 -LA4CC: lda #$80 - sta LA4CB - bmi LA4E2 +LA4CC: copy #$80, LA4CB + bmi LA4E2 ; always LA4D3: pha lda #$40 sta LA4CB @@ -2458,8 +2455,7 @@ LA77D: lda LA6B3,x bne LA7C3 sta LA6B2 beq LA7C8 -LA7C3: lda #$80 - sta LA6B2 +LA7C3: copy #$80, LA6B2 LA7C8: ldy #4 lda ($06),y and #$80 diff --git a/desktop/desktop_main.s b/desktop/desktop_main.s index 0fddb94..1d79059 100644 --- a/desktop/desktop_main.s +++ b/desktop/desktop_main.s @@ -10,9 +10,6 @@ .proc desktop_main -L0020 := $0020 -L0800 := $0800 - .scope format_erase_overlay L0CB8 := $0CB8 L0CD7 := $0CD7 @@ -162,7 +159,7 @@ loop_counter: ;;; -------------------------------------------------- L40E0: tsx - stx LE256 + stx saved_stack sta menu_click_params::item_num jsr L59A0 copy #0, menu_click_params::item_num @@ -208,7 +205,7 @@ L4151: rts ;;; ============================================================ -L4152: .byte 0 +draw_window_header_flag: .byte 0 .proc update_window @@ -220,7 +217,7 @@ L4152: .byte 0 L415B: sta active_window_id sta cached_window_id jsr DESKTOP_COPY_TO_BUF - copy #$80, L4152 + copy #$80, draw_window_header_flag copy cached_window_id, getwinport_params2::window_id jsr get_port2 jsr draw_window_header @@ -255,7 +252,7 @@ L41CB: ldx cached_window_id lda win_view_by_table,x bpl L41E2 jsr L6C19 - copy #0, L4152 + copy #0, draw_window_header_flag lda active_window_id jmp assign_window_portbits @@ -277,7 +274,7 @@ L41FE: lda L4241 : inc L4241 jmp L41FE -L4227: copy #$00, L4152 +L4227: copy #$00, draw_window_header_flag copy cached_window_id, getwinport_params2::window_id jsr get_set_port2 jsr cached_icons_screen_to_window @@ -503,7 +500,7 @@ menu_dispatch2: call_proc: tsx - stx LE256 + stx saved_stack proc_addr := *+1 jmp dummy1234 ; self-modified .endproc @@ -517,7 +514,7 @@ call_proc: .proc handle_click tsx - stx LE256 + stx saved_stack MGTK_RELAY_CALL MGTK::FindWindow, event_coords lda findwindow_which_area bne not_desktop @@ -1303,7 +1300,7 @@ slash_index: lda ($06),y tay : lda ($06),y - sta L0800,y + sta $800,y dey bpl :- pla @@ -1331,7 +1328,7 @@ slash_index: bne :- : dey - sty L0800 + sty $800 ;; Strip segment off path at $840 ldy $840 @@ -1359,15 +1356,15 @@ slash_index: ;; Copy window path to $800 ldy buf_win_path : lda buf_win_path,y - sta L0800,y + sta $800,y dey bpl :- addr_call copy_ramcard_prefix, $840 ;; Find last '/' in path... - ldy L0800 -: lda L0800,y + ldy $800 +: lda $800,y cmp #'/' beq :+ dey @@ -1375,7 +1372,7 @@ slash_index: ;; And back up one more path segment... : dey -: lda L0800,y +: lda $800,y cmp #'/' beq :+ dey @@ -1385,9 +1382,9 @@ slash_index: ldx $840 : iny inx - lda L0800,y + lda $800,y sta $840,x - cpy L0800 + cpy $800 bne :- rts .endproc @@ -1581,8 +1578,7 @@ nope: dex sta close_ref_num jsr read jsr close - lda #$80 - sta running_da_flag + copy #$80, running_da_flag ;; Invoke it jsr set_pointer_cursor @@ -1863,7 +1859,7 @@ maybe_open_file: pla lda active_window_id - jsr window_address_lookup + jsr window_path_lookup stax $06 ldy #0 @@ -1948,8 +1944,7 @@ L4EB7: sta cached_window_icon_list,x L4EC3: sta cached_window_icon_count jsr DESKTOP_COPY_FROM_BUF - lda #$00 - sta cached_window_id + copy #0, cached_window_id jsr DESKTOP_COPY_TO_BUF MGTK_RELAY_CALL MGTK::CloseWindow, active_window_id ldx active_window_id @@ -1967,18 +1962,15 @@ L4EC3: sta cached_window_icon_count jsr zero_grafport5_coords DESKTOP_RELAY_CALL DT_HIGHLIGHT_ICON, icon_param jsr reset_grafport3 - lda #$01 - sta selected_icon_count - lda icon_param - sta selected_icon_list + copy #1, selected_icon_count + copy icon_param, selected_icon_list ldx active_window_id dex lda LEC26,x jsr L7345 ldx active_window_id dex - lda #$00 - sta LEC26,x + copy #0, LEC26,x MGTK_RELAY_CALL MGTK::FrontWindow, active_window_id lda active_window_id bne L4F3C @@ -2033,7 +2025,7 @@ start: copy active_window_id, new_folder_dialog_params::phase L4FC6: lda active_window_id beq L4FD4 - jsr window_address_lookup + jsr window_path_lookup stax new_folder_dialog_params::L4F68 L4FD4: copy #$80, new_folder_dialog_params::phase yax_call invoke_dialog_proc, index_new_folder_dialog, new_folder_dialog_params @@ -2098,7 +2090,7 @@ L5056: lda selected_icon_count lda selected_icon_list cmp trash_icon_num beq L5055 -L5067: lda #$00 +L5067: lda #0 tax tay L506B: lda selected_icon_list,y @@ -2114,7 +2106,7 @@ L5077: iny jsr jt_eject L5084: ldx L5098 lda $1800,x - sta L533F + sta unit_number_to_refresh jsr L59A8 dec L5098 bpl L5084 @@ -2192,7 +2184,7 @@ entry: jmp :- : sta cached_window_icon_count - lda #$00 + lda #0 ldx active_window_id dex sta win_view_by_table,x @@ -2231,8 +2223,7 @@ L516D: lda L51EB,x sta getwinport_params2::window_id jsr get_set_port2 jsr cached_icons_window_to_screen - lda #$00 - sta L51EF + copy #0, L51EF L518D: lda L51EF cmp cached_window_icon_count beq L51A7 @@ -2263,8 +2254,7 @@ L51C0: ldx L51EF jsr icon_screen_to_window dec L51EF bne L51C0 -L51E3: lda #$00 - sta cached_window_id +L51E3: copy #0, cached_window_id jmp DESKTOP_COPY_TO_BUF L51EB: .word 0 @@ -2312,13 +2302,11 @@ L5246: lda L5263,x dex bpl L5246 - lda #$80 - sta L4152 + copy #$80, draw_window_header_flag jsr reset_grafport3 jsr L6C19 jsr update_scrollbars - lda #$00 - sta L4152 + copy #0, draw_window_header_flag rts L5263: .word 0 @@ -2444,20 +2432,20 @@ loop: cpx cached_window_icon_count beq done lda cached_window_icon_list,x jsr DESKTOP_FREE_ICON - lda #$00 - sta cached_window_icon_list,x + copy #0, cached_window_icon_list,x inx jmp loop done: jsr DESKTOP_COPY_FROM_BUF - lda #$00 - sta cached_window_id + copy #0, cached_window_id jmp DESKTOP_COPY_TO_BUF .endproc ;;; ============================================================ -L533F: .byte 0 + ;; Set after format, erase, failed open, etc. +unit_number_to_refresh: + .byte 0 ;;; ============================================================ @@ -2469,7 +2457,7 @@ L533F: .byte 0 lda #$04 jsr dynamic_routine_800 bne :+ - stx L533F + stx unit_number_to_refresh jsr redraw_windows_and_desktop jsr L59A4 : jmp redraw_windows_and_desktop @@ -2488,7 +2476,7 @@ fail: rts jsr dynamic_routine_800 bne done - stx L533F + stx unit_number_to_refresh jsr redraw_windows_and_desktop jsr L59A4 done: jmp redraw_windows_and_desktop @@ -2545,8 +2533,7 @@ L53AC: inx cpx selected_icon_list bne L53A1 sty L5427 -L53B5: lda #$FF - sta L5426 +L53B5: copy #$FF, L5426 L53BA: inc L5426 lda L5426 cmp selected_icon_count @@ -2560,7 +2547,7 @@ L53D0: tax lda selected_icon_list,x jsr L5431 bmi L53BA - jsr window_address_lookup + jsr window_path_lookup stax $06 ldy #$00 lda ($06),y @@ -2583,7 +2570,7 @@ L5403: jsr close_window L540E: ldx L5427 L5411: lda L5428,x - sta L533F + sta unit_number_to_refresh jsr L59A8 ldx L5427 dec L5427 @@ -2624,8 +2611,7 @@ L544A: .byte 0 .byte 0 L544D: - lda #$00 - sta $1800 + copy #0, $1800 lda active_window_id bne L545A jmp L54C5 @@ -2674,8 +2660,7 @@ L54B7: pla inx jmp L5485 -L54BD: lda #$00 - sta cached_window_id +L54BD: copy #0, cached_window_id jsr DESKTOP_COPY_TO_BUF L54C5: ldx $1800 ldy #$00 @@ -2689,8 +2674,7 @@ L54CA: lda cached_window_icon_list,y clc adc cached_window_icon_count sta $1800 - lda #$00 - sta L544A + copy #0, L544A ldax #$03FF L54EA: sta L5444,x dex @@ -2755,8 +2739,7 @@ L5565: sta L5444,x beq L5579 jmp L54F0 -L5579: lda #$00 - sta L544A +L5579: copy #0, L544A jsr clear_selection L5581: jsr L55F0 L5584: jsr get_event @@ -2899,8 +2882,7 @@ L56E3: dec L56F8 lda selected_window_index beq L56F0 jsr reset_grafport3 -L56F0: lda #$00 - sta cached_window_id +L56F0: copy #0, cached_window_id jmp DESKTOP_COPY_TO_BUF L56F8: .byte 0 @@ -2922,7 +2904,7 @@ L56F8: .byte 0 bne L5708 rts -L5708: sta L0800 +L5708: sta $800 ldy #$01 ldx #$00 L570F: lda LEC26,x @@ -2932,7 +2914,7 @@ L570F: lda LEC26,x beq L5721 txa dex - sta L0800,y + sta $800,y iny L5720: inx L5721: cpx #$08 @@ -2942,8 +2924,7 @@ L5721: cpx #$08 bne L572D rts -L572D: lda #$00 - sta L578C +L572D: copy #0, L578C L5732: jsr get_event lda event_kind cmp #MGTK::EventKind::key_down @@ -2968,7 +2949,7 @@ L5743: lda event_key bne L5763 ldx #$00 L5763: stx L578C - lda L0800,x + lda $800,x sta findwindow_window_id jsr handle_inactive_window_click jmp L5732 @@ -2979,7 +2960,7 @@ L5772: ldx L578C ldx L578D dex L577C: stx L578C - lda L0800,x + lda $800,x sta findwindow_window_id jsr handle_inactive_window_click jmp L5732 @@ -3024,8 +3005,7 @@ loop: jsr get_event cmp #CHAR_ESCAPE bne :+ -done: lda #$00 - sta cached_window_id +done: copy #0, cached_window_id jsr DESKTOP_COPY_TO_BUF rts @@ -3070,7 +3050,7 @@ vertical: ldx active_window_id dex lda win_view_by_table,x - sta L5B1B + sta active_window_view_by jsr L58C3 stax L585F sty horiz_scroll_flag @@ -3227,8 +3207,7 @@ L5916: lda cached_window_icon_list,x pha lda cached_window_icon_list,x sta icon_param - lda #$00 - sta cached_window_icon_list,x + copy #0, cached_window_icon_list,x DESKTOP_RELAY_CALL DT_REMOVE_ICON, icon_param lda icon_param jsr DESKTOP_FREE_ICON @@ -3300,24 +3279,25 @@ L59A8: lda #$C0 .proc L59AA sta L5AD0 - lda #$00 - sta cached_window_id + copy #0, cached_window_id jsr DESKTOP_COPY_TO_BUF bit L5AD0 bpl L59EA bvc L59D2 - lda L533F - ldy #$0F -L59C1: cmp device_to_icon_map,y - beq L59C9 + + lda unit_number_to_refresh + ldy #15 +: cmp device_to_icon_map,y + beq :+ dey - bpl L59C1 -L59C9: sty L5AC6 + bpl :- + +: sty L5AC6 sty menu_click_params::item_num jmp L59F3 L59D2: ldy DEVCNT - lda L533F + lda unit_number_to_refresh L59D8: cmp DEVLST,y beq L59E1 dey @@ -3367,8 +3347,7 @@ L5A43: jsr close_window L5A4C: jsr redraw_windows_and_desktop jsr clear_selection - lda #$00 - sta cached_window_id + copy #0, cached_window_id jsr DESKTOP_COPY_TO_BUF lda menu_click_params::item_num tay @@ -3468,7 +3447,8 @@ L5AD0: .byte 0 ;;; ============================================================ -L5B1B: .byte 0 +active_window_view_by: + .byte 0 .proc handle_client_click lda active_window_id @@ -3477,7 +3457,7 @@ L5B1B: .byte 0 ldx active_window_id dex lda win_view_by_table,x - sta L5B1B + sta active_window_view_by ;; Restore event coords (following detect_double_click) COPY_STRUCT MGTK::Point, saved_event_coords, event_coords @@ -3589,8 +3569,7 @@ pgrt: jsr L64B0 done_client_click: jsr DESKTOP_COPY_FROM_BUF - lda #$00 - sta cached_window_id + copy #0, cached_window_id jmp DESKTOP_COPY_TO_BUF .endproc @@ -3605,8 +3584,7 @@ done_client_click: rts : jsr L5C54 jsr DESKTOP_COPY_FROM_BUF - lda #$00 - sta cached_window_id + copy #0, cached_window_id jmp DESKTOP_COPY_TO_BUF .endproc @@ -3618,7 +3596,7 @@ done_client_click: MGTK_RELAY_CALL MGTK::UpdateThumb, updatethumb_params jsr L6523 jsr L84D1 - bit L5B1B + bit active_window_view_by bmi :+ jsr cached_icons_screen_to_window : lda active_window_id @@ -3656,7 +3634,7 @@ ctl: .byte 0 ;;; ============================================================ .proc handle_content_click - bit L5B1B + bit active_window_view_by bpl :+ jmp clear_selection @@ -3687,9 +3665,9 @@ L5CE6: cmp selected_icon_list,x bmi L5CFB L5CF0: bit double_click_flag bmi L5CF8 - jmp L5DFC + jmp handle_double_click -L5CF8: jmp L5D55 +L5CF8: jmp start_icon_drag L5CFB: bit BUTN0 bpl L5D08 @@ -3718,11 +3696,11 @@ L5D0B: ldx selected_icon_count jsr icon_screen_to_window jsr reset_grafport3 bit double_click_flag - bmi L5D55 - jmp L5DFC + bmi start_icon_drag + jmp handle_double_click - ;; Near start of file drag -L5D55: lda icon_num +start_icon_drag: + lda icon_num sta drag_drop_param DESKTOP_RELAY_CALL DT_DRAG_HIGHLIGHTED, drag_drop_param tax @@ -3756,10 +3734,10 @@ L5D99: and #$7F jmp redraw_windows_and_desktop L5DA6: cpx #$02 - bne L5DAD + bne :+ jmp L5DEC -L5DAD: cpx #$FF +: cpx #$FF beq L5DF7 lda active_window_id sta getwinport_params2::window_id @@ -3784,15 +3762,15 @@ L5DC4: txa jsr cached_icons_screen_to_window jsr reset_grafport3 L5DEC: jsr DESKTOP_COPY_FROM_BUF - lda #$00 - sta cached_window_id + copy #0, cached_window_id jmp DESKTOP_COPY_TO_BUF -L5DF7: ldx LE256 +L5DF7: ldx saved_stack txs rts -L5DFC: lda icon_num ; after a double-click (on file or folder) +handle_double_click: + lda icon_num ; after a double-click (on file or folder) jsr icon_entry_lookup stax $06 ldy #IconEntry::win_type @@ -3805,18 +3783,17 @@ L5DFC: lda icon_num ; after a double-click (on file or folder) cmp #icon_entry_type_bas beq L5E28 cmp #icon_entry_type_dir - bne L5E27 + bne :+ lda icon_num ; handle directory jsr open_folder_or_volume_icon - bmi L5E27 + bmi :+ jmp L5DEC - -L5E27: rts +: rts L5E28: sta L5E77 lda active_window_id - jsr window_address_lookup + jsr window_path_lookup stax $06 ldy #$00 lda ($06),y @@ -3886,7 +3863,7 @@ L5E77: .byte 0 bmi :+ jsr close_active_window : lda active_window_id - jsr window_address_lookup + jsr window_path_lookup ptr := $06 @@ -4028,13 +4005,11 @@ L601F: MGTK_RELAY_CALL MGTK::FrameRect, rect_E230 bit L60D3 bpl L6068 L6054: copy16 event_xcoord, rect_E230::x1 - lda #$80 - sta L60D3 + copy #$80, L60D3 jmp L6079 L6068: copy16 event_xcoord, rect_E230::x2 - lda #$00 - sta L60D3 + copy #0, L60D3 L6079: cmp16 event_ycoord, rect_E230::y2 bpl L60AE cmp16 event_ycoord, rect_E230::y1 @@ -4042,13 +4017,11 @@ L6079: cmp16 event_ycoord, rect_E230::y2 bit L60D4 bpl L60AE L609A: copy16 event_ycoord, rect_E230::y1 - lda #$80 - sta L60D4 + copy #$80, L60D4 jmp L60BF L60AE: copy16 event_ycoord, rect_E230::y2 - lda #$00 - sta L60D4 + copy #0, L60D4 L60BF: MGTK_RELAY_CALL MGTK::FrameRect, rect_E230 jmp L5F6B @@ -4105,8 +4078,7 @@ L6143: lda active_window_id L614E: cpx cached_window_icon_count bne L6161 jsr DESKTOP_COPY_FROM_BUF - lda #$00 - sta cached_window_id + copy #0, cached_window_id jsr DESKTOP_COPY_TO_BUF jmp L6196 @@ -4144,8 +4116,7 @@ L6199: .word 0 jsr cached_icons_window_to_screen jsr update_scrollbars jsr cached_icons_screen_to_window - lda #$00 - sta cached_window_id + copy #0, cached_window_id jsr DESKTOP_COPY_TO_BUF jmp reset_grafport3 .endproc @@ -4212,10 +4183,8 @@ L6227: sta cached_window_icon_count jsr zero_grafport5_coords DESKTOP_RELAY_CALL DT_HIGHLIGHT_ICON, icon_param jsr reset_grafport3 - lda #$01 - sta selected_icon_count - lda icon_param - sta selected_icon_list + copy #1, selected_icon_count + copy icon_param, selected_icon_list L6276: ldx active_window_id dex lda LEC26,x @@ -4231,8 +4200,7 @@ L6276: ldx active_window_id sta LEC26,x sta win_view_by_table,x MGTK_RELAY_CALL MGTK::FrontWindow, active_window_id - lda #$00 - sta cached_window_id + copy #0, cached_window_id jsr DESKTOP_COPY_TO_BUF lda #MGTK::checkitem_uncheck sta checkitem_params::check @@ -4424,7 +4392,7 @@ L650D: .word 0 .endproc .proc L650F - bit L5B1B + bit active_window_view_by bmi :+ jsr cached_icons_window_to_screen : jsr L6523 @@ -4462,7 +4430,7 @@ L650D: .word 0 .endproc .proc L6556 - bit L5B1B + bit active_window_view_by bmi :+ jsr cached_icons_screen_to_window : MGTK_RELAY_CALL MGTK::PaintRect, grafport2::cliprect @@ -4695,8 +4663,7 @@ enable: jsr configure_menu_item lda #4 ; > Run jsr configure_menu_item - lda #$80 - sta LD344 + copy #$80, LD344 rts configure_menu_item: @@ -4897,13 +4864,11 @@ L6989: MGTK_RELAY_CALL MGTK::FrameRect, rect_E230 bit L6A3D bpl L69D2 L69BE: copy16 event_xcoord, rect_E230::x1 - lda #$80 - sta L6A3D + copy #$80, L6A3D jmp L69E3 L69D2: copy16 event_xcoord, rect_E230::x2 - lda #$00 - sta L6A3D + copy #0, L6A3D L69E3: cmp16 event_ycoord, rect_E230::y2 bpl L6A18 cmp16 event_ycoord, rect_E230::y1 @@ -4911,13 +4876,11 @@ L69E3: cmp16 event_ycoord, rect_E230::y2 bit L6A3E bpl L6A18 L6A04: copy16 event_ycoord, rect_E230::y1 - lda #$80 - sta L6A3E + copy #$80, L6A3E jmp L6A29 L6A18: copy16 event_ycoord, rect_E230::y2 - lda #$00 - sta L6A3E + copy #0, L6A3E L6A29: MGTK_RELAY_CALL MGTK::FrameRect, rect_E230 jmp L68E4 @@ -5027,8 +4990,7 @@ L6B01: MGTK_RELAY_CALL MGTK::SelectWindow, cached_window_id sta active_window_id jsr L6C19 jsr redraw_windows - lda #$00 - sta cached_window_id + copy #0, cached_window_id jmp DESKTOP_COPY_TO_BUF L6B1E: lda LEC2E @@ -5036,7 +4998,7 @@ L6B1E: lda LEC2E bcc L6B2F lda #warning_msg_too_many_windows jsr warning_dialog_proc_num - ldx LE256 + ldx saved_stack txs rts @@ -5054,16 +5016,14 @@ L6B3A: lda icon_params2 inc LEC2E ldx cached_window_id dex - lda #$00 - sta win_view_by_table,x + copy #0, win_view_by_table,x lda LEC2E cmp #$02 bcs L6B60 jsr enable_various_file_menu_items jmp L6B68 -L6B60: lda #$00 - sta checkitem_params::check +L6B60: copy #0, checkitem_params::check jsr check_item L6B68: lda #$01 sta checkitem_params::menu_item @@ -5094,17 +5054,18 @@ L6BA1: DESKTOP_RELAY_CALL DT_REDRAW_ICON, icon_params2 jsr icon_screen_to_window jsr reset_grafport3 L6BB8: jsr L744B + lda cached_window_id jsr window_lookup - ldy #$38 + ldy #MGTK::OpenWindow jsr MGTK_RELAY + lda active_window_id sta getwinport_params2::window_id jsr get_set_port2 jsr draw_window_header jsr cached_icons_window_to_screen - lda #$00 - sta L6C0E + copy #0, L6C0E L6BDA: lda L6C0E cmp cached_window_icon_count beq L6BF4 @@ -5121,8 +5082,7 @@ L6BF4: lda cached_window_id jsr update_scrollbars jsr cached_icons_screen_to_window jsr DESKTOP_COPY_FROM_BUF - lda #$00 - sta cached_window_id + copy #0, cached_window_id jsr DESKTOP_COPY_TO_BUF jmp reset_grafport3 @@ -5149,16 +5109,16 @@ L6C25: jsr push_pointers lda cached_window_id sta getwinport_params2::window_id jsr get_set_port2 - bit L4152 - bmi L6C39 + bit draw_window_header_flag + bmi :+ jsr draw_window_header -L6C39: lda cached_window_id +: lda cached_window_id sta getwinport_params2::window_id jsr get_port2 - bit L4152 - bmi L6C4A + bit draw_window_header_flag + bmi :+ jsr offset_grafport2_and_set -L6C4A: ldx cached_window_id +: ldx cached_window_id dex lda LEC26,x ldx #$00 @@ -5225,10 +5185,10 @@ rows_done: L6CCD: lda cached_window_id sta getwinport_params2::window_id jsr get_set_port2 - bit L4152 - bmi L6CDE + bit draw_window_header_flag + bmi :+ jsr draw_window_header -L6CDE: jsr cached_icons_window_to_screen +: jsr cached_icons_window_to_screen jsr offset_grafport2_and_set COPY_BLOCK grafport2::cliprect, rect_E230 @@ -5266,16 +5226,13 @@ L6D25: pla bne L6D31 rts -L6D31: lda #$00 - sta L6DB0 - lda selected_window_index - sta rect_E230 +L6D31: copy #0, L6DB0 + copy selected_window_index, rect_E230 ; ??? beq L6D7D cmp active_window_id beq L6D4D jsr zero_grafport5_coords - lda #$00 - sta rect_E230 + copy #0, rect_E230 beq L6D56 L6D4D: sta getwinport_params2::window_id jsr get_set_port2 @@ -5470,8 +5427,7 @@ flag: .byte 0 sta disableitem_params::menu_item MGTK_RELAY_CALL MGTK::DisableItem, disableitem_params - lda #$80 - sta menu_dispatch_flag + copy #$80, menu_dispatch_flag rts .endproc @@ -5480,7 +5436,7 @@ flag: .byte 0 .proc L6F0D ptr := $6 - jsr window_address_lookup + jsr window_path_lookup sta ptr sta pathptr stx ptr+1 @@ -5614,7 +5570,7 @@ start: sta flag loop: inc L7049 lda L7049 - cmp #$09 + cmp #9 ; windows are 1-8 bcc L6FF6 bit flag bpl L6FF5 @@ -5623,17 +5579,19 @@ L6FF5: rts L6FF6: jsr window_lookup stax ptr - ldy #10 + ldy #MGTK::Winfo::status lda (ptr),y beq loop + lda L7049 - jsr window_address_lookup + jsr window_path_lookup stax ptr ldy #0 lda (ptr),y tay cmp path_buffer - beq L7027 + beq :+ + bit flag bmi loop ldy path_buffer @@ -5642,11 +5600,13 @@ L6FF6: jsr window_lookup cmp #'/' bne loop dey -L7027: lda (ptr),y + +: lda (ptr),y cmp path_buffer,y bne loop dey - bne L7027 + bne :- + bit flag bmi done ldx L704B @@ -5758,7 +5718,7 @@ L7147: lda LEC2E bne L7161 L715F: lda #warning_msg_window_must_be_closed2 L7161: jsr warning_dialog_proc_num - ldx LE256 + ldx saved_stack txs rts @@ -5785,10 +5745,8 @@ L7169: copy16 L485F, record_ptr lda LCBANK1 lda LCBANK1 - lda #$FF - sta L70C4 - lda #$00 - sta L70C3 + copy #$FF, L70C4 + copy #$00, L70C3 entry_ptr := $08 @@ -5818,8 +5776,7 @@ L71CB: inc L70C3 add16_8 entry_ptr, entry_length, entry_ptr jmp L71F7 -L71E7: lda #$00 - sta L70C3 +L71E7: copy #$00, L70C3 copy16 #$0C04, entry_ptr jsr do_read @@ -5932,9 +5889,9 @@ L72A8: .word 0 lda selected_window_index bne :+ lda icon_params2 - sta L533F + sta unit_number_to_refresh jsr L59A8 -: ldx LE256 +: ldx saved_stack txs done: rts .endproc @@ -6106,7 +6063,7 @@ L7471: lda ($06),y bne L74D3 jsr push_pointers lda cached_window_id - jsr window_address_lookup + jsr window_path_lookup stax $08 lda $06 clc @@ -6139,12 +6096,11 @@ L74C8: lda ($08),y jmp L7569 L74D3: tay - lda #$00 - sta L7620 + copy #$00, L7620 jsr push_pointers tya pha - jsr window_address_lookup + jsr window_path_lookup stax $06 pla asl a @@ -6160,11 +6116,11 @@ L74D3: tay jsr DESKTOP_SHOW_ALERT0 jsr L8B1F dec LEC2E - ldx LE256 + ldx saved_stack txs rts -L750D: ldy #$00 +L750D: ldy #0 lda ($06),y tay L7512: lda ($06),y @@ -6195,7 +6151,7 @@ L7548: iny cpx LE1B0 bne L7548 lda cached_window_id - jsr window_address_lookup + jsr window_path_lookup stax $08 ldy LE1B0 L7561: lda LE1B0,y @@ -6808,8 +6764,7 @@ break: lda digit not_pad: ora #'0' pha - lda #$80 - sta nonzero_flag + copy #$80, nonzero_flag pla ;; Place the character, move to next @@ -6858,10 +6813,10 @@ L7B69: .word 0 bpl :- sta L7D5B - lda #$FF + lda #<$7FFF sta L7B5F sta L7B61 - lda #$7F + lda #>$7FFF sta L7B5F+1 sta L7B61+1 ldx cached_window_id @@ -7249,7 +7204,7 @@ check_date: lda LCBANK2 lda LCBANK2 - lda #$00 + lda #0 sta date sta date+1 sta index @@ -7302,7 +7257,7 @@ next: inc index ora #$80 sta (ptr),y - lda #$00 + lda #0 sta date sta date+1 @@ -7312,8 +7267,7 @@ next: inc index iny jsr L812B - lda #$00 - sta record_num + copy #0, record_num jmp loop .endscope @@ -7404,7 +7358,7 @@ next: inc index copy16 #84, pos_col_name::xcoord copy16 #203, pos_col_type::xcoord - lda #$00 + lda #0 sta pos_col_size::xcoord sta pos_col_size::xcoord+1 copy16 #231, pos_col_date::xcoord @@ -7445,8 +7399,7 @@ check_type: lda #0 sta index sta record_num - lda #$FF - sta $0806 + copy #$FF, $0806 loop: lda index cmp num_records @@ -7504,10 +7457,8 @@ L809E: inc index iny jsr L812B - lda #$00 - sta record_num - lda #$FF - sta $0806 + copy #0, record_num + copy #$FF, $0806 jmp loop .endscope @@ -7589,8 +7540,7 @@ day_b: .byte 0 .proc finish_view_change ptr := $06 - lda #$00 - sta record_num + copy #0, record_num loop: lda record_num cmp num_records @@ -7676,8 +7626,7 @@ L8171: lda ($06),y L8183: sta text_buffer2::data-1,x dex bpl L8183 - lda #$00 - sta text_buffer2::length + copy #0, text_buffer2::length lda pos_col_type::ycoord clc adc L813E @@ -7770,8 +7719,7 @@ loop: lda LEC43,x ;; Leading space ldx #1 stx text_buffer2::length - lda #' ' - sta text_buffer2::data + copy #' ', text_buffer2::data ;; Append number ldy #0 @@ -7989,7 +7937,7 @@ date: .word 0 .proc L84D1 jsr push_pointers - bit L5B1B + bit active_window_view_by bmi L84DC jsr cached_icons_window_to_screen L84DC: sub16 grafport2::cliprect::x2, grafport2::cliprect::x1, L85F8 @@ -8157,7 +8105,7 @@ tmp: .byte 0 ;;; ============================================================ ;;; Look up window address. Index in A, address in A,X. -.proc window_address_lookup +.proc window_path_lookup asl a tax lda window_path_addr_table,x @@ -8817,7 +8765,7 @@ skip: lda icon_params2 .proc animate_window ptr := $06 - rect_table := $0800 + rect_table := $800 close: ldy #$80 bne :+ @@ -8891,8 +8839,7 @@ L8BC1: lda grafport2,x sub16 $085A, $0802, L8D52 bit L8D51 bpl L8C6A - lda #$80 - sta L8D4E + copy #$80, L8D4E lda L8D50 eor #$FF sta L8D50 @@ -8902,8 +8849,7 @@ L8BC1: lda grafport2,x inc16 L8D50 L8C6A: bit L8D53 bpl L8C8C - lda #$80 - sta L8D4F + copy #$80, L8D4F lda L8D52 eor #$FF sta L8D52 @@ -9160,14 +9106,12 @@ restore_flag: ;; Called with routine # in A load: pha ; entry point with bit clear - lda #$00 - sta restore_flag - beq :+ + copy #0, restore_flag + beq :+ ; always restore: pha - lda #$80 ; entry point with bit set - sta restore_flag + copy #$80, restore_flag ; entry point with bit set : pla asl a ; y = A * 2 (to index into word table) @@ -9282,8 +9226,8 @@ done: rts ;;; ============================================================ jt_drop: jmp do_drop - jmp rts2 ; rts - jmp rts2 ; rts + jmp do_nothing ; rts + jmp do_nothing ; rts jt_get_info: jmp do_get_info ; cmd_get_info jt_lock: jmp do_lock ; cmd_lock jt_unlock: jmp do_unlock ; cmd_unlock @@ -9291,8 +9235,8 @@ jt_rename_icon: jmp do_rename_icon ; cmd_rename_icon jt_eject: jmp do_eject ; cmd_eject ??? jt_copy_file: jmp do_copy_file ; cmd_copy_file jt_delete_file: jmp do_delete_file ; cmd_delete_file - jmp rts2 ; rts - jmp rts2 ; rts + jmp do_nothing ; rts + jmp do_nothing ; rts jt_run: jmp do_run ; cmd_selector_action / Run jt_get_size: jmp do_get_size ; cmd_get_size @@ -9317,14 +9261,15 @@ do_copy_file: copy #0, operation_flags ; copy/delete tsx stx stack_stash - jsr prep_op_jt_overlay4_clear_system_bitmap + jsr prep_callbacks_for_count_clear_system_bitmap jsr do_copy_dialog_phase jsr LA271 - jsr prep_op_jt_overlay1 + jsr prep_callbacks_for_copy -L8F3F: copy #$FF, LE05B +do_run2: + copy #$FF, LE05B copy #0, LE05C - jsr copy_file_with_flag + jsr copy_file_for_run jsr done_dialog_phase1 L8F4F: jsr redraw_desktop_and_windows @@ -9338,12 +9283,12 @@ do_delete_file: copy #0, operation_flags ; copy/delete tsx stx stack_stash - jsr prep_op_jt_overlay4_clear_system_bitmap + jsr prep_callbacks_for_count_clear_system_bitmap lda #DeleteDialogLifecycle::open jsr do_delete_dialog_phase jsr LA271 jsr done_dialog_phase2 - jsr prep_op_jt_overlay2 + jsr prep_callbacks_for_delete jsr delete_file jsr done_dialog_phase1 jmp L8F4F @@ -9353,11 +9298,11 @@ do_run: copy #%11000000, operation_flags ; get size tsx stx stack_stash - jsr prep_op_jt_overlay4_clear_system_bitmap + jsr prep_callbacks_for_count_clear_system_bitmap jsr L9984 jsr LA271 jsr L99BC - jmp L8F3F + jmp do_run2 ;;; -------------------------------------------------- ;;; Lock @@ -9508,7 +9453,7 @@ L9076: ldy #$FF .proc begin_operation copy #0, L97E4 - jsr prep_op_jt_overlay4_clear_system_bitmap + jsr prep_callbacks_for_count_clear_system_bitmap bit operation_flags bvs @size bmi @lock @@ -9535,13 +9480,13 @@ L90BA: bit operation_flags bmi @lock bit delete_flag bmi @trash - jsr prep_op_jt_overlay1 + jsr prep_callbacks_for_copy jmp iterate_selection -@trash: jsr prep_op_jt_overlay2 +@trash: jsr prep_callbacks_for_delete jmp iterate_selection -@lock: jsr prep_op_jt_overlay3 +@lock: jsr prep_callbacks_for_lock jmp iterate_selection @size: jsr get_size_rts2 ; no-op ??? @@ -9664,7 +9609,7 @@ stack_stash: .byte 0 ;; $80 = lock/unlock - ;; $C0 = get size (easily probed with oVerflow flag) + ;; $C0 = get size/run (easily probed with oVerflow flag) ;; $00 = copy/delete operation_flags: .byte 0 @@ -9678,10 +9623,12 @@ unlock_flag: .byte 0 ;; high bit set = from Selector > Run command (download???) + ;; high bit clear = Get Size run_flag: .byte 0 -all_flag: .byte 0 +all_flag: + .byte 0 ;;; ============================================================ ;;; For icon index in A, put pointer to name in $6 @@ -9777,7 +9724,7 @@ nullptr: bne :+ rts : ldx selected_icon_count - stx L0800 + stx $800 dex : lda selected_icon_list,x sta $0801,x @@ -9794,7 +9741,7 @@ loop: ldx index jsr smartport_eject : inc index ldx index - cpx L0800 + cpx $800 bne loop rts @@ -9873,7 +9820,7 @@ unit_number: DEFINE_GET_FILE_INFO_PARAMS get_file_info_params5, $220 - DEFINE_READ_BLOCK_PARAMS block_params, $0800, $A + DEFINE_READ_BLOCK_PARAMS block_params, $800, $A .proc get_info_dialog_params L92E3: .byte 0 @@ -9952,8 +9899,7 @@ exit: rts bne :+ rts -: lda #$00 - sta get_info_dialog_params::L92E6 +: copy #0, get_info_dialog_params::L92E6 jsr prep_grafport3 L92F5: ldx get_info_dialog_params::L92E6 cpx selected_icon_count @@ -10000,8 +9946,7 @@ L9356: yax_call JT_MLI_RELAY, GET_FILE_INFO, get_file_info_params5 beq L9356 L9366: lda selected_window_index beq L9387 - lda #$80 - sta get_info_dialog_params::L92E3 + copy #$80, get_info_dialog_params::L92E3 lda get_info_dialog_params::L92E6 clc adc #$01 @@ -10012,8 +9957,7 @@ L9366: lda selected_window_index L9381: jsr run_get_info_dialog_proc jmp L93DB -L9387: lda #$81 - sta get_info_dialog_params::L92E3 +L9387: copy #$81, get_info_dialog_params::L92E3 lda get_info_dialog_params::L92E6 clc adc #$01 @@ -10022,8 +9966,7 @@ L9387: lda #$81 inc get_info_dialog_params::L92E3 inc get_info_dialog_params::L92E3 L939D: jsr run_get_info_dialog_proc - lda #$00 - sta L942E + copy #0, L942E ldx get_info_dialog_params::L92E6 lda selected_icon_list,x ldy #$0F @@ -10040,13 +9983,11 @@ L93B8: lda DEVLST,y yax_call JT_MLI_RELAY, WRITE_BLOCK, block_params cmp #ERR_WRITE_PROTECTED bne L93DB - lda #$80 - sta L942E + copy #$80, L942E L93DB: ldx get_info_dialog_params::L92E6 lda selected_icon_list,x jsr icon_entry_name_lookup - lda #$01 - sta get_info_dialog_params::L92E3 + copy #1, get_info_dialog_params::L92E3 copy16 $06, get_info_dialog_params::L92E4 jsr run_get_info_dialog_proc copy #2, get_info_dialog_params::L92E3 @@ -10054,28 +9995,23 @@ L93DB: ldx get_info_dialog_params::L92E6 bne L9413 bit L942E bmi L940C - lda #$00 - sta get_info_dialog_params::L92E4 - beq L9428 -L940C: lda #$01 - sta get_info_dialog_params::L92E4 - bne L9428 + copy #0, get_info_dialog_params::L92E4 + beq L9428 ; always +L940C: copy #1, get_info_dialog_params::L92E4 + bne L9428 ; always L9413: lda get_file_info_params5::access and #$C3 cmp #$C3 beq L9423 - lda #$01 - sta get_info_dialog_params::L92E4 - bne L9428 -L9423: lda #$00 - sta get_info_dialog_params::L92E4 + copy #1, get_info_dialog_params::L92E4 + bne L9428 ; always +L9423: copy #0, get_info_dialog_params::L92E4 L9428: jsr run_get_info_dialog_proc jmp L942F L942E: .byte 0 -L942F: lda #$03 - sta get_info_dialog_params::L92E3 +L942F: copy #3, get_info_dialog_params::L92E3 ;; Compose " 12345 Blocks" or " 12345 / 67890 Blocks" string buf := $220 @@ -10180,8 +10116,7 @@ L951F: copy16 #str_file_type, get_info_dialog_params::L92E4 L952E: inc get_info_dialog_params::L92E6 jmp L92F5 -L9534: lda #$00 - sta path_buf4 +L9534: copy #0, path_buf4 rts str_vol: @@ -10211,8 +10146,7 @@ rename_dialog_params: .addr $1F00 start: - lda #$00 - sta L9706 + copy #0, L9706 L9576: lda L9706 cmp selected_icon_count bne L9581 @@ -10396,23 +10330,25 @@ skip5_buf: .res 5, 0 .res 4, 0 ; unused??? + buf_size = $AC0 + DEFINE_CLOSE_PARAMS close_src_params DEFINE_CLOSE_PARAMS close_dst_params DEFINE_DESTROY_PARAMS destroy_params, src_path_buf DEFINE_OPEN_PARAMS open_src_params, src_path_buf, $0D00 DEFINE_OPEN_PARAMS open_dst_params, dst_path_buf, $1100 - DEFINE_READ_PARAMS read_src_params, $1500, $AC0 - DEFINE_WRITE_PARAMS write_dst_params, $1500, $AC0 + DEFINE_READ_PARAMS read_src_params, $1500, buf_size + DEFINE_WRITE_PARAMS write_dst_params, $1500, buf_size DEFINE_CREATE_PARAMS create_params3, dst_path_buf, ACCESS_DEFAULT DEFINE_CREATE_PARAMS create_params2, dst_path_buf .byte 0,0 - DEFINE_GET_FILE_INFO_PARAMS file_info_params2, src_path_buf + DEFINE_GET_FILE_INFO_PARAMS src_file_info_params, src_path_buf .byte 0 - DEFINE_GET_FILE_INFO_PARAMS file_info_params3, dst_path_buf + DEFINE_GET_FILE_INFO_PARAMS dst_file_info_params, dst_path_buf .byte 0 @@ -10432,9 +10368,9 @@ file_entry_buf: .res 48, 0 op_jt_addrs: op_jt_addr1: .addr op_jt1_copy ; defaults are for copy op_jt_addr2: .addr op_jt2_copy -op_jt_addr3: .addr rts2 +op_jt_addr3: .addr do_nothing -rts2: rts +do_nothing: rts L97E4: .byte $00 @@ -10626,10 +10562,10 @@ saved_type_and_length: ; written but not read ??? ;;; ============================================================ ;;; Overlays for copy operation -op_jt_overlay1: +callbacks_for_copy: .addr op_jt1_copy ; Overlay for op_jt_addrs .addr op_jt2_copy - .addr rts2 + .addr do_nothing .enum CopyDialogLifecycle open = 0 @@ -10660,9 +10596,9 @@ count: .addr 0 jmp run_copy_dialog_proc .endproc -.proc prep_op_jt_overlay1 +.proc prep_callbacks_for_copy ldy #op_jt_addrs_size-1 -: copy op_jt_overlay1,y, op_jt_addrs,y +: copy callbacks_for_copy,y, op_jt_addrs,y dey bpl :- @@ -10694,11 +10630,10 @@ L9984: copy #CopyDialogLifecycle::open, copy_dialog_params::phase .endproc .proc L99BC - lda #$80 - sta all_flag + copy #$80, all_flag ldy #op_jt_addrs_size-1 -: copy op_jt_overlay1,y, op_jt_addrs,y +: copy callbacks_for_copy,y, op_jt_addrs,y dey bpl :- @@ -10728,78 +10663,82 @@ cancel: jmp close_files_cancel_dialog ;; copy logic (for drag/drop only) ??? .proc copy_file copy #$80, LE05B - lda #0 - sta LE05C - beq L9A0F ; always + copy #0, LE05C + beq :+ ; always -with_flag: +for_run: lda #$FF -L9A0F: sta flag +: sta is_run_flag copy #CopyDialogLifecycle::show, copy_dialog_params::phase jsr copy_paths_to_src_and_dst_paths bit operation_flags - bvc @not_size - jsr L9BC9 -@not_size: + bvc @not_run + jsr check_vol_blocks_free ; dst is a volume path (RAM Card) +@not_run: bit LE05B - bpl L9A70 + bpl get_src_info ; never taken ??? bvs L9A50 - lda flag - bne L9A36 - lda selected_window_index - bne L9A36 + lda is_run_flag + bne :+ + lda selected_window_index ; dragging from window? + bne :+ jmp L9B28 -L9A36: ldx dst_path_buf +: ldx dst_path_buf ldy src_path_slash_index dey -L9A3D: iny +: iny inx lda src_path_buf,y sta dst_path_buf,x cpy src_path_buf - bne L9A3D - stx dst_path_buf - jmp L9A70 + bne :- + stx dst_path_buf + jmp get_src_info + + ;; Append filename to dst_path_buf L9A50: ldx dst_path_buf lda #'/' sta dst_path_buf+1,x inc dst_path_buf - ldy #$00 + ldy #0 ldx dst_path_buf -L9A60: iny +: iny inx lda filename_buf,y sta dst_path_buf,x cpy filename_buf - bne L9A60 + bne :- stx dst_path_buf -L9A70: yax_call JT_MLI_RELAY, GET_FILE_INFO, file_info_params2 - beq L9A81 - jsr show_error_alert - jmp L9A70 -L9A81: lda file_info_params2::storage_type +get_src_info: +: yax_call JT_MLI_RELAY, GET_FILE_INFO, src_file_info_params + beq :+ + jsr show_error_alert + jmp :- ; retry + +: lda src_file_info_params::storage_type cmp #ST_VOLUME_DIRECTORY - beq L9A90 + beq is_dir cmp #ST_LINKED_DIRECTORY - beq L9A90 + beq is_dir lda #$00 - beq L9A95 -L9A90: jsr decrement_op_file_count + beq store +is_dir: jsr decrement_op_file_count lda #$FF -L9A95: sta L9B30 +store: sta L9B30 jsr dec_file_count_and_run_copy_dialog_proc lda op_file_count+1 - bne L9AA8 + bne :+ lda op_file_count - bne L9AA8 + bne :+ jmp close_files_cancel_dialog -L9AA8: ldy #7 -: lda file_info_params2,y + ;; Copy access, file_type, aux_type, storage_type +: ldy #7 +: lda src_file_info_params,y sta create_params2,y dey cpy #2 @@ -10807,28 +10746,33 @@ L9AA8: ldy #7 copy #ACCESS_DEFAULT, create_params2::access lda LE05B - beq L9B23 - jsr L9C01 + beq create_ok ; never taken ??? + jsr check_space_and_show_prompt bcs done + ;; Copy create_time/create_date ldy #17 ldx #11 -: lda file_info_params2,y +: lda src_file_info_params,y sta create_params2,x dex dey cpy #13 bne :- + ;; If a volume, need to create a subdir instead lda create_params2::storage_type cmp #ST_VOLUME_DIRECTORY - bne L9AE0 + bne do_create lda #ST_LINKED_DIRECTORY sta create_params2::storage_type -L9AE0: yax_call JT_MLI_RELAY, CREATE, create_params2 - beq L9B23 + +do_create: + yax_call JT_MLI_RELAY, CREATE, create_params2 + beq create_ok + cmp #ERR_DUPLICATE_FILENAME - bne L9B1D + bne err bit all_flag bmi do_it copy #CopyDialogLifecycle::exists, copy_dialog_params::phase @@ -10842,30 +10786,32 @@ L9AE0: yax_call JT_MLI_RELAY, CREATE, create_params2 beq done cmp #PromptResult::all bne cancel - lda #$80 - sta all_flag -do_it: jsr LA426 - jmp L9B23 + copy #$80, all_flag +do_it: jsr apply_file_info_and_size + jmp create_ok ;; PromptResult::cancel cancel: jmp close_files_cancel_dialog -L9B1D: jsr show_error_alert - jmp L9AE0 +err: jsr show_error_alert + jmp do_create ; retry -L9B23: lda L9B30 +create_ok: + lda L9B30 beq L9B2D L9B28: jmp process_dir .byte 0 ; ??? done: rts -L9B2D: jmp L9CDA +L9B2D: jmp do_file_copy L9B30: .byte 0 -flag: .byte 0 ; ??? + +is_run_flag: + .byte 0 .endproc - copy_file_with_flag := copy_file::with_flag + copy_file_for_run := copy_file::for_run src_path_slash_index: .byte 0 @@ -10889,7 +10835,7 @@ op_jt2_copy: ;; Directory jsr append_to_src_path -: yax_call JT_MLI_RELAY, GET_FILE_INFO, file_info_params2 +: yax_call JT_MLI_RELAY, GET_FILE_INFO, src_file_info_params beq :+ jsr show_error_alert jmp :- @@ -10903,39 +10849,38 @@ op_jt2_copy: bne :+ jmp close_files_cancel_dialog -: jsr L9E19 +: jsr try_create_dst bcs :+ jsr remove_src_path_segment - jmp L9BBE + jmp done : jsr remove_dst_path_segment jsr remove_src_path_segment - lda #$FF - sta cancel_descent_flag - jmp L9BBE + copy #$FF, cancel_descent_flag + jmp done ;; File regular_file: jsr append_to_dst_path jsr append_to_src_path jsr dec_file_count_and_run_copy_dialog_proc -L9B91: yax_call JT_MLI_RELAY, GET_FILE_INFO, file_info_params2 - beq L9BA2 +: yax_call JT_MLI_RELAY, GET_FILE_INFO, src_file_info_params + beq :+ jsr show_error_alert - jmp L9B91 + jmp :- ; retry -L9BA2: jsr L9C01 - bcc L9BAA +: jsr check_space_and_show_prompt + bcc :+ jmp close_files_cancel_dialog -L9BAA: jsr remove_src_path_segment - jsr L9E19 - bcs L9BBB +: jsr remove_src_path_segment + jsr try_create_dst + bcs :+ jsr append_to_src_path - jsr L9CDA + jsr do_file_copy jsr remove_src_path_segment -L9BBB: jsr remove_dst_path_segment -L9BBE: rts +: jsr remove_dst_path_segment +done: rts .endproc ;;; ============================================================ @@ -10947,25 +10892,26 @@ L9BBE: rts ;;; ============================================================ -.proc L9BC9 - yax_call JT_MLI_RELAY, GET_FILE_INFO, file_info_params3 - beq L9BDA +.proc check_vol_blocks_free +: yax_call JT_MLI_RELAY, GET_FILE_INFO, dst_file_info_params + beq :+ jsr show_error_alert_dst - jmp L9BC9 + jmp :- -L9BDA: sub16 file_info_params3::aux_type, file_info_params3::blocks_used, L9BFF - cmp16 L9BFF, op_block_count - bcs L9BFE +: sub16 dst_file_info_params::aux_type, dst_file_info_params::blocks_used, blocks_free + cmp16 blocks_free, op_block_count + bcs :+ jmp done_dialog_phase3 -L9BFE: rts +: rts -L9BFF: .word 0 +blocks_free: + .word 0 .endproc ;;; ============================================================ -.proc L9C01 +.proc check_space_and_show_prompt jsr check_space bcc done copy #CopyDialogLifecycle::too_large, copy_dialog_params::phase @@ -10978,7 +10924,7 @@ done: rts .proc check_space ;; Size of source -: yax_call JT_MLI_RELAY, GET_FILE_INFO, file_info_params2 +: yax_call JT_MLI_RELAY, GET_FILE_INFO, src_file_info_params beq :+ jsr show_error_alert jmp :- @@ -10989,7 +10935,7 @@ done: rts sta existing_size+1 ;; Does destination exist? -: yax_call JT_MLI_RELAY, GET_FILE_INFO, file_info_params3 +: yax_call JT_MLI_RELAY, GET_FILE_INFO, dst_file_info_params beq got_exist_size cmp #ERR_FILE_NOT_FOUND beq :+ @@ -10997,7 +10943,7 @@ done: rts jmp :- got_exist_size: - copy16 file_info_params3::blocks_used, existing_size + copy16 dst_file_info_params::blocks_used, existing_size ;; Compute destination volume path : lda dst_path_buf @@ -11014,7 +10960,7 @@ got_exist_size: sta vol_path_length ;; Total blocks/used blocks on destination volume -: yax_call JT_MLI_RELAY, GET_FILE_INFO, file_info_params3 +: yax_call JT_MLI_RELAY, GET_FILE_INFO, dst_file_info_params beq got_info pha ; on failure, restore path lda saved_length ; in case copy is aborted @@ -11032,9 +10978,9 @@ got_exist_size: got_info: ;; aux = total blocks - sub16 file_info_params3::aux_type, file_info_params3::blocks_used, blocks_free + sub16 dst_file_info_params::aux_type, dst_file_info_params::blocks_used, blocks_free add16 blocks_free, existing_size, blocks_free - cmp16 blocks_free, file_info_params2::blocks_used + cmp16 blocks_free, src_file_info_params::blocks_used bcs has_room ;; not enough room @@ -11059,11 +11005,12 @@ existing_size: .endproc ;;; ============================================================ +;;; Actual byte-for-byte file copy routine -.proc L9CDA +.proc do_file_copy jsr decrement_op_file_count - lda #$00 - sta dst_ok_flag + lda #0 + sta src_dst_exclusive_flag sta src_eof_flag sta mark_src_params::position sta mark_src_params::position+1 @@ -11071,56 +11018,65 @@ existing_size: sta mark_dst_params::position sta mark_dst_params::position+1 sta mark_dst_params::position+2 + jsr open_src jsr copy_src_ref_num jsr open_dst - beq L9D09 - lda #$FF - sta dst_ok_flag - bne L9D0C -L9D09: jsr copy_dst_ref_num -L9D0C: jsr L9DA9 - bit dst_ok_flag - bpl L9D28 - jsr close_src -L9D17: jsr open_dst - bne L9D17 + beq :+ + + ;; Destination not available; note it, can prompt later + copy #$FF, src_dst_exclusive_flag + bne read ; always +: jsr copy_dst_ref_num + + ;; Read +read: jsr read_src + bit src_dst_exclusive_flag + bpl write + jsr close_src ; swap if necessary +: jsr open_dst + bne :- jsr copy_dst_ref_num yax_call JT_MLI_RELAY, SET_MARK, mark_dst_params -L9D28: bit src_eof_flag - bmi L9D51 + + ;; Write +write: bit src_eof_flag + bmi eof jsr write_dst - bit dst_ok_flag - bpl L9D0C - jsr close_dst + bit src_dst_exclusive_flag + bpl read + jsr close_dst ; swap if necessary jsr open_src jsr copy_src_ref_num + yax_call JT_MLI_RELAY, SET_MARK, mark_src_params - beq L9D0C - lda #$FF - sta src_eof_flag - jmp L9D0C + beq read + copy #$FF, src_eof_flag + jmp read -L9D51: jsr close_dst - bit dst_ok_flag - bmi L9D5C + ;; EOF +eof: jsr close_dst + bit src_dst_exclusive_flag + bmi :+ jsr close_src -L9D5C: jsr LA46D - jmp LA479 +: jsr copy_file_info + jmp set_dst_file_info -open_src: +.proc open_src : yax_call JT_MLI_RELAY, OPEN, open_src_params beq :+ jsr show_error_alert jmp :- : rts +.endproc -copy_src_ref_num: +.proc copy_src_ref_num lda open_src_params::ref_num sta read_src_params::ref_num sta close_src_params::ref_num sta mark_src_params::ref_num rts +.endproc .proc open_dst : yax_call JT_MLI_RELAY, OPEN, open_dst_params @@ -11137,15 +11093,16 @@ not_found: done: rts .endproc -copy_dst_ref_num: +.proc copy_dst_ref_num lda open_dst_params::ref_num sta write_dst_params::ref_num sta close_dst_params::ref_num sta mark_dst_params::ref_num rts +.endproc -.proc L9DA9 - copy16 #$0AC0, read_src_params::request_count +.proc read_src + copy16 #buf_size, read_src_params::request_count : yax_call JT_MLI_RELAY, READ, read_src_params beq :+ cmp #ERR_END_OF_FILE @@ -11156,8 +11113,7 @@ copy_dst_ref_num: : copy16 read_src_params::trans_count, write_dst_params::request_count ora read_src_params::trans_count bne :+ -eof: lda #$FF - sta src_eof_flag +eof: copy #$FF, src_eof_flag : yax_call JT_MLI_RELAY, GET_MARK, mark_src_params rts .endproc @@ -11181,7 +11137,8 @@ eof: lda #$FF rts .endproc -dst_ok_flag: + ;; Set if src/dst can't be open simultaneously. +src_dst_exclusive_flag: .byte 0 src_eof_flag: @@ -11189,45 +11146,48 @@ src_eof_flag: .endproc +;;; ============================================================ -.proc L9E19 +.proc try_create_dst ldx #7 -: lda file_info_params2,x +: lda src_file_info_params,x sta create_params3,x dex cpx #3 bne :- -L9E26: yax_call JT_MLI_RELAY, CREATE, create_params3 - beq L9E6F +create: yax_call JT_MLI_RELAY, CREATE, create_params3 + beq success cmp #ERR_DUPLICATE_FILENAME - bne L9E69 + bne err bit all_flag - bmi L9E60 + bmi yes copy #CopyDialogLifecycle::exists, copy_dialog_params::phase yax_call invoke_dialog_proc, index_copy_dialog, copy_dialog_params pha copy #CopyDialogLifecycle::show, copy_dialog_params::phase pla - cmp #2 - beq L9E60 - cmp #3 - beq L9E71 - cmp #4 - bne L9E66 + cmp #PromptResult::yes + beq yes + cmp #PromptResult::no + beq failure + cmp #PromptResult::all + bne cancel copy #$80, all_flag -L9E60: jsr LA426 - jmp L9E6F +yes: jsr apply_file_info_and_size + jmp success -L9E66: jmp close_files_cancel_dialog +cancel: jmp close_files_cancel_dialog -L9E69: jsr show_error_alert_dst - jmp L9E26 +err: jsr show_error_alert_dst + jmp create -L9E6F: clc +success: + clc rts -L9E71: sec +failure: + sec rts .endproc @@ -11236,9 +11196,9 @@ L9E71: sec ;;; ============================================================ ;;; Overlays for delete operation -op_jt_overlay2: - .addr op_jt_1_delete ; Overlay for op_jt_addrs - .addr rts2 +callbacks_for_delete: + .addr op_jt1_delete ; Overlay for op_jt_addrs + .addr do_nothing .addr destroy_with_retry .proc delete_dialog_params @@ -11273,9 +11233,9 @@ count: .word 0 ;;; ============================================================ -.proc prep_op_jt_overlay2 +.proc prep_callbacks_for_delete ldy #op_jt_addrs_size-1 -: copy op_jt_overlay2,y, op_jt_addrs,y +: copy callbacks_for_delete,y, op_jt_addrs,y dey bpl :- @@ -11295,12 +11255,12 @@ count: .word 0 .proc delete_file copy #DeleteDialogLifecycle::show, delete_dialog_params::phase jsr copy_paths_to_src_and_dst_paths -L9EE3: yax_call JT_MLI_RELAY, GET_FILE_INFO, file_info_params2 +L9EE3: yax_call JT_MLI_RELAY, GET_FILE_INFO, src_file_info_params beq L9EF4 jsr show_error_alert jmp L9EE3 -L9EF4: lda file_info_params2::storage_type +L9EF4: lda src_file_info_params::storage_type sta L9F1D cmp #ST_LINKED_DIRECTORY beq L9F02 @@ -11347,17 +11307,15 @@ L9F29: yax_call JT_MLI_RELAY, DESTROY, destroy_params L9F5F: jmp close_files_cancel_dialog -do_it: yax_call JT_MLI_RELAY, GET_FILE_INFO, file_info_params2 - lda file_info_params2::access +do_it: yax_call JT_MLI_RELAY, GET_FILE_INFO, src_file_info_params + lda src_file_info_params::access and #$80 bne done lda #ACCESS_DEFAULT - sta file_info_params2::access - lda #7 ; param count for SET_FILE_INFO - sta file_info_params2 - yax_call JT_MLI_RELAY, SET_FILE_INFO, file_info_params2 - lda #$A ; param count for GET_FILE_INFO - sta file_info_params2 + sta src_file_info_params::access + copy #7, src_file_info_params ; param count for SET_FILE_INFO + yax_call JT_MLI_RELAY, SET_FILE_INFO, src_file_info_params + copy #$A, src_file_info_params ; param count for GET_FILE_INFO jmp L9F29 done: rts @@ -11368,27 +11326,28 @@ L9F8E: jsr show_error_alert ;;; ============================================================ -.proc op_jt_1_delete +.proc op_jt1_delete jsr check_escape_key_down beq :+ jmp close_files_cancel_dialog + : jsr append_to_src_path bit LE05C - bmi L9FA7 + bmi :+ jsr dec_file_count_and_run_delete_dialog_proc -L9FA7: jsr decrement_op_file_count -L9FAA: yax_call JT_MLI_RELAY, GET_FILE_INFO, file_info_params2 +: jsr decrement_op_file_count +: yax_call JT_MLI_RELAY, GET_FILE_INFO, src_file_info_params beq :+ jsr show_error_alert - jmp L9FAA + jmp :- -: lda file_info_params2::storage_type +: lda src_file_info_params::storage_type cmp #ST_LINKED_DIRECTORY beq next_file loop: yax_call JT_MLI_RELAY, DESTROY, destroy_params beq next_file cmp #ERR_ACCESS_ERROR - bne LA01C + bne err bit all_flag bmi unlock copy #DeleteDialogLifecycle::locked, delete_dialog_params::phase @@ -11402,19 +11361,18 @@ loop: yax_call JT_MLI_RELAY, DESTROY, destroy_params beq unlock cmp #PromptResult::all bne :+ - lda #$80 - sta all_flag + copy #$80, all_flag bne unlock ; always ;; PromptResult::cancel : jmp close_files_cancel_dialog -unlock: copy #ACCESS_DEFAULT, file_info_params2::access - copy #7, file_info_params2 ; param count for SET_FILE_INFO - yax_call JT_MLI_RELAY, SET_FILE_INFO, file_info_params2 - copy #$A,file_info_params2 ; param count for GET_FILE_INFO +unlock: copy #ACCESS_DEFAULT, src_file_info_params::access + copy #7, src_file_info_params ; param count for SET_FILE_INFO + yax_call JT_MLI_RELAY, SET_FILE_INFO, src_file_info_params + copy #$A,src_file_info_params ; param count for GET_FILE_INFO jmp loop -LA01C: jsr show_error_alert +err: jsr show_error_alert jmp loop next_file: @@ -11446,10 +11404,10 @@ done: rts ;;; ============================================================ ;;; Overlays for lock/unlock operation -op_jt_overlay3: - .addr op_jt_1_lock ; overlay for op_jt_addrs - .addr rts2 - .addr rts2 +callbacks_for_lock: + .addr op_jt1_lock ; overlay for op_jt_addrs + .addr do_nothing + .addr do_nothing .enum LockDialogLifecycle open = 0 ; opening window, initial label @@ -11515,11 +11473,11 @@ files_remaining_count: : rts .endproc -.proc prep_op_jt_overlay3 +.proc prep_callbacks_for_lock copy #0, LA425 ldy #op_jt_addrs_size-1 -: copy op_jt_overlay3,y, op_jt_addrs,y +: copy callbacks_for_lock,y, op_jt_addrs,y dey bpl :- @@ -11557,12 +11515,12 @@ LA123: iny cpy src_path_buf bne LA123 stx dst_path_buf -LA133: yax_call JT_MLI_RELAY, GET_FILE_INFO, file_info_params2 +LA133: yax_call JT_MLI_RELAY, GET_FILE_INFO, src_file_info_params beq LA144 jsr show_error_alert jmp LA133 -LA144: lda file_info_params2::storage_type +LA144: lda src_file_info_params::storage_type sta LA169 cmp #ST_VOLUME_DIRECTORY beq LA156 @@ -11586,7 +11544,7 @@ LA16A: jsr LA173 jmp append_to_src_path .endproc -op_jt_1_lock: +op_jt1_lock: jsr append_to_src_path ;; fall through @@ -11594,11 +11552,11 @@ op_jt_1_lock: jsr update_dialog jsr decrement_op_file_count -: yax_call JT_MLI_RELAY, GET_FILE_INFO, file_info_params2 +: yax_call JT_MLI_RELAY, GET_FILE_INFO, src_file_info_params beq :+ jsr show_error_alert jmp :- -: lda file_info_params2::storage_type +: lda src_file_info_params::storage_type cmp #ST_VOLUME_DIRECTORY beq ok cmp #ST_LINKED_DIRECTORY @@ -11608,12 +11566,12 @@ op_jt_1_lock: lda #ACCESS_DEFAULT bne set : lda #ACCESS_LOCKED -set: sta file_info_params2::access +set: sta src_file_info_params::access -: copy #7, file_info_params2 ; param count for SET_FILE_INFO - yax_call JT_MLI_RELAY, SET_FILE_INFO, file_info_params2 +: copy #7, src_file_info_params ; param count for SET_FILE_INFO + yax_call JT_MLI_RELAY, SET_FILE_INFO, src_file_info_params pha - copy #$A, file_info_params2 ; param count for GET_FILE_INFO + copy #$A, src_file_info_params ; param count for GET_FILE_INFO pla beq ok jsr show_error_alert @@ -11669,19 +11627,20 @@ get_size_rts1: get_size_rts2: rts -op_jt_overlay4: - .addr op_jt_1_size ; overlay for op_jt_addrs - .addr rts2 - .addr rts2 - ;;; ============================================================ -;;; ??? +;;; Most operations start by doing a traversal to just count +;;; the files. -.proc prep_op_jt_overlay4_clear_system_bitmap +callbacks_for_count: + .addr op_jt1_size ; overlay for op_jt_addrs + .addr do_nothing + .addr do_nothing + +.proc prep_callbacks_for_count_clear_system_bitmap copy #0, LA425 ldy #op_jt_addrs_size-1 -: copy op_jt_overlay4,y, op_jt_addrs,y +: copy callbacks_for_count,y, op_jt_addrs,y dey bpl :- @@ -11704,12 +11663,12 @@ op_jt_overlay4: .proc LA271 jsr copy_paths_to_src_and_dst_paths -: yax_call JT_MLI_RELAY, GET_FILE_INFO, file_info_params2 +: yax_call JT_MLI_RELAY, GET_FILE_INFO, src_file_info_params beq :+ jsr show_error_alert jmp :- -: copy file_info_params2::storage_type, storage_type +: copy src_file_info_params::storage_type, storage_type cmp #ST_VOLUME_DIRECTORY beq is_dir cmp #ST_LINKED_DIRECTORY @@ -11733,24 +11692,24 @@ is_dir_flag: storage_type: .byte 0 + +do_sum_file_size: + jmp op_jt1_size .endproc ;;; ============================================================ -do_sum_file_size: - jmp op_jt_1_size - ;; First pass - visit/count all files ??? -op_jt_1_size: +op_jt1_size: bit operation_flags bvc :+ ; not size ;; If operation is "get size", add the block count to the sum jsr append_to_src_path - yax_call JT_MLI_RELAY, GET_FILE_INFO, file_info_params2 + yax_call JT_MLI_RELAY, GET_FILE_INFO, src_file_info_params bne :+ - add16 op_block_count, file_info_params2::blocks_used, op_block_count + add16 op_block_count, src_file_info_params::blocks_used, op_block_count : inc16 op_file_count @@ -11957,44 +11916,46 @@ LA425: .byte 0 ; ??? only written to (with 0) ;;; ============================================================ -.proc LA426 - jsr LA46D - copy #ACCESS_DEFAULT, file_info_params3::access - jsr LA479 - lda file_info_params2::file_type - cmp #$0F - beq LA46C - yax_call JT_MLI_RELAY, OPEN, open_dst_params - beq LA449 - jsr show_error_alert_dst - jmp LA426 +.proc apply_file_info_and_size +: jsr copy_file_info + copy #ACCESS_DEFAULT, dst_file_info_params::access + jsr set_dst_file_info + lda src_file_info_params::file_type + cmp #FT_DIRECTORY + beq done -LA449: lda open_dst_params::ref_num + ;; If a regular file, open/set eof/close + yax_call JT_MLI_RELAY, OPEN, open_dst_params + beq :+ + jsr show_error_alert_dst + jmp :- ; retry + +: lda open_dst_params::ref_num sta set_eof_params::ref_num sta close_dst_params::ref_num -LA452: yax_call JT_MLI_RELAY, SET_EOF, set_eof_params - beq LA463 +: yax_call JT_MLI_RELAY, SET_EOF, set_eof_params + beq close jsr show_error_alert_dst - jmp LA452 + jmp :- ; retry -LA463: yax_call JT_MLI_RELAY, CLOSE, close_dst_params -LA46C: rts +close: yax_call JT_MLI_RELAY, CLOSE, close_dst_params +done: rts .endproc -.proc LA46D - COPY_BYTES 11, file_info_params2::access, file_info_params3::access +.proc copy_file_info + COPY_BYTES 11, src_file_info_params::access, dst_file_info_params::access rts .endproc -.proc LA479 - copy #7, file_info_params3 ; SET_FILE_INFO param_count - yax_call JT_MLI_RELAY, SET_FILE_INFO, file_info_params3 +.proc set_dst_file_info +: copy #7, dst_file_info_params ; SET_FILE_INFO param_count + yax_call JT_MLI_RELAY, SET_FILE_INFO, dst_file_info_params pha - copy #$A, file_info_params3 ; GET_FILE_INFO param_count + copy #$A, dst_file_info_params ; GET_FILE_INFO param_count pla beq done jsr show_error_alert_dst - jmp LA479 + jmp :- done: rts .endproc @@ -15663,8 +15624,7 @@ cloop: inx ;; Does it point at anything? If so, set flag. MLI_RELAY_CALL GET_FILE_INFO, get_file_info_params2 bne config_toolkit - lda #$80 - sta desktop_main::sys_start_flag + copy #$80, desktop_main::sys_start_flag ;; Final MGTK configuration config_toolkit: diff --git a/desktop/desktop_res.s b/desktop/desktop_res.s index 330aa7a..f9977bb 100644 --- a/desktop/desktop_res.s +++ b/desktop/desktop_res.s @@ -950,7 +950,9 @@ path_buf3: filename_buf: .res 16, 0 + ;; Set to $80 for Copy, $FF for Run LE05B: .byte 0 + LE05C: .byte 0 ; flag - always set to 0 ??? process_depth: @@ -1026,8 +1028,10 @@ rect_E230: DEFINE_RECT 0,0,0,0, rect_E230 .byte $00,$00,$00,$00,$00,$00,$00,$00 .byte $00,$00,$00,$00 -LE256: - .byte $00,$00,$00,$00 +saved_stack: + .byte 0 + + .byte $00,$00,$00 .assert * = last_menu_click_params, error, "Entry point mismatch"