Date DA: Read-only if system has clock. Fixes #39

This commit is contained in:
Joshua Bell 2018-12-08 18:35:28 -08:00
parent 0dfddfd629
commit 8fe7243e7d

View File

@ -44,6 +44,11 @@ write_buffer:
stx stash_stack stx stash_stack
sta ALTZPOFF sta ALTZPOFF
lda ROMIN2 lda ROMIN2
lda MACHID
and #%00000001 ; bit 0 = clock card
sta clock_flag
lda DATELO lda DATELO
sta datelo sta datelo
lda DATEHI lda DATEHI
@ -77,6 +82,9 @@ write_buffer:
lda write_buffer ; Dialog committed? lda write_buffer ; Dialog committed?
beq skip beq skip
;; If there is a system clock, don't write out the date.
ldx clock_flag
bne skip
ldy #OPEN ; open the file ldy #OPEN ; open the file
ldax #open_params ldax #open_params
@ -155,6 +163,9 @@ backcolor: .byte 0 ; black
selected_field: ; 1 = day, 2 = month, 3 = year, 0 = none (init) selected_field: ; 1 = day, 2 = month, 3 = year, 0 = none (init)
.byte 0 .byte 0
clock_flag:
.byte 0
datelo: .byte 0 datelo: .byte 0
datehi: .byte 0 datehi: .byte 0
@ -258,6 +269,11 @@ nextwinfo: .addr 0
init_window: init_window:
jsr save_zp jsr save_zp
;; If null date, just leave the baked in default
lda datelo
ora datehi
beq :+
;; Crack the date bytes. Format is: ;; Crack the date bytes. Format is:
;; | DATEHI | DATELO | ;; | DATEHI | DATELO |
;; |7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0| ;; |7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0|
@ -281,7 +297,7 @@ init_window:
lsr a lsr a
sta month sta month
MGTK_CALL MGTK::OpenWindow, winfo : MGTK_CALL MGTK::OpenWindow, winfo
lda #0 lda #0
sta selected_field sta selected_field
jsr draw_window jsr draw_window
@ -311,7 +327,11 @@ init_window:
bne :+ bne :+
jmp on_ok jmp on_ok
: cmp #CHAR_ESCAPE ;; If there is a system clock, only the first button is active
: ldx clock_flag
bne input_loop
cmp #CHAR_ESCAPE
bne :+ bne :+
jmp on_cancel jmp on_cancel
: cmp #CHAR_LEFT : cmp #CHAR_LEFT
@ -661,9 +681,17 @@ loop: txa
MGTK_CALL MGTK::InRect, $1000, test_addr MGTK_CALL MGTK::InRect, $1000, test_addr
bne done bne done
clc ;; If there is a system clock, only the first button is active
ldx clock_flag
beq next
pla
ldx #0
rts
next: clc
lda test_addr lda test_addr
adc #8 ; size of 4 words adc #.sizeof(MGTK::Rect)
sta test_addr sta test_addr
bcc :+ bcc :+
inc test_addr+1 inc test_addr+1
@ -717,17 +745,21 @@ penheight: .byte 1
;;; ============================================================ ;;; ============================================================
;;; Render the window contents ;;; Render the window contents
draw_window: .proc draw_window
MGTK_CALL MGTK::SetPort, winfo::port MGTK_CALL MGTK::SetPort, winfo::port
MGTK_CALL MGTK::FrameRect, border_rect MGTK_CALL MGTK::FrameRect, border_rect
MGTK_CALL MGTK::SetPenSize, setpensize_params MGTK_CALL MGTK::SetPenSize, setpensize_params
MGTK_CALL MGTK::FrameRect, date_rect MGTK_CALL MGTK::FrameRect, date_rect
MGTK_CALL MGTK::FrameRect, ok_button_rect
MGTK_CALL MGTK::FrameRect, cancel_button_rect
MGTK_CALL MGTK::FrameRect, ok_button_rect
MGTK_CALL MGTK::MoveTo, label_ok_pos MGTK_CALL MGTK::MoveTo, label_ok_pos
MGTK_CALL MGTK::DrawText, label_ok MGTK_CALL MGTK::DrawText, label_ok
;; If there is a system clock, only draw the OK button.
ldx clock_flag
bne :+
MGTK_CALL MGTK::FrameRect, cancel_button_rect
MGTK_CALL MGTK::MoveTo, label_cancel_pos MGTK_CALL MGTK::MoveTo, label_cancel_pos
MGTK_CALL MGTK::DrawText, label_cancel MGTK_CALL MGTK::DrawText, label_cancel
@ -739,17 +771,24 @@ draw_window:
MGTK_CALL MGTK::DrawText, label_downarrow MGTK_CALL MGTK::DrawText, label_downarrow
MGTK_CALL MGTK::FrameRect, down_arrow_rect MGTK_CALL MGTK::FrameRect, down_arrow_rect
jsr prepare_day_string : jsr prepare_day_string
jsr prepare_month_string jsr prepare_month_string
jsr prepare_year_string jsr prepare_year_string
jsr draw_day jsr draw_day
jsr draw_month jsr draw_month
jsr draw_year jsr draw_year
MGTK_CALL MGTK::SetPenMode, penmode_params
;; If there is a system clock, don't draw the highlight.
ldx clock_flag
beq :+
rts
: MGTK_CALL MGTK::SetPenMode, penmode_params
MGTK_CALL MGTK::SetPattern, white_pattern MGTK_CALL MGTK::SetPattern, white_pattern
lda #1 lda #1
jmp highlight_selected_field jmp highlight_selected_field
.endproc
.proc draw_selected_field .proc draw_selected_field
lda selected_field lda selected_field