; ======================================================================
; XANDRIAN LABS  /  CS617 CHAPTER 02
; ======================================================================
; Program    : Chapter 02 Sorting
; Source     : app/reports.inc
; Revision   : x0.31a-dev / comment-harmonization pass
; Target     : Casio PB-2000C / HD61700
; Role       : Show immediate sort results and failure messages.
; Interface  : SHOW_*REPORT, SHOW_*FAIL, WAIT_SORT_EXIT.
; Maintainer : Xandrian Labs
; ----------------------------------------------------------------------
; The four-row result is separate from the VT report document.
; ======================================================================

; PURPOSE : Format a 32-bit counter as ten decimal digits.
; INPUT   : IX=counter address (four bytes).
; OUTPUT  : WS_DEC10 contains ten ASCII decimal digits.
FMT_COUNT:
        LDM     $20,(IX+$SX),4
        PRE     IX,WS_DEC10

        LDW     $24,&HCA00
        LDW     $26,&H3B9A
        CAL     FMT_DIG

        LDW     $24,&HE100
        LDW     $26,&H05F5
        CAL     FMT_DIG

        LDW     $24,&H9680
        LDW     $26,&H0098
        CAL     FMT_DIG

        LDW     $24,&H4240
        LDW     $26,&H000F
        CAL     FMT_DIG

        LDW     $24,&H86A0
        LDW     $26,&H0001
        CAL     FMT_DIG

        LDW     $24,&H2710
        LDW     $26,&H0000
        CAL     FMT_DIG

        LDW     $24,&H03E8
        LDW     $26,&H0000
        CAL     FMT_DIG

        LDW     $24,&H0064
        LDW     $26,&H0000
        CAL     FMT_DIG

        LDW     $24,&H000A
        LDW     $26,&H0000
        CAL     FMT_DIG

        LDW     $24,&H0001
        LDW     $26,&H0000
        CAL     FMT_DIG
        RTN

FMT_DIG:
        LD      $28,0

FD_LOOP:
        SBCW    $22,$26
        JR      C,FD_OUT
        JR      NZ,FD_SUB

        SBCW    $20,$24
        JR      C,FD_OUT

FD_SUB:
        SBW     $20,$24
        JR      NC,FD_HI
        SBW     $22,$SY
FD_HI:
        SBW     $22,$26
        AD      $28,$SY
        JR      FD_LOOP

FD_OUT:
        LD      $16,$28
        AD      $16,&H30
        STI     $16,(IX+$SX)
        RTN

SHOW_BREPORT:
        CAL     CLEAR_ALL
        LD      $6,$SX
        PRE     IZ,TXT_BUBBLE
        CAL     PRINTZ
        JP      SHOW_REPORT

SHOW_SREPORT:
        CAL     CLEAR_ALL
        LD      $6,$SX
        PRE     IZ,TXT_SHELL
        CAL     PRINTZ
        JP      SHOW_REPORT

SHOW_XREPORT:
        CAL     CLEAR_ALL
        LD      $6,$SX
        PRE     IZ,TXT_SELECT
        CAL     PRINTZ

; PURPOSE : Display immediate four-row sort results.
; EFFECTS : Keeps result visible until MENU or EXE.
SHOW_REPORT:
        PRE     IZ,TXT_RN
        CAL     PRINTZ
        PRE     IX,WS_NLEN
        LD      $13,(IX+$SX)
        PRE     IX,WS_NBUF
        CAL     PRINT_RAM

        PRE     IZ,TXT_RM
        CAL     PRINTZ
        PRE     IX,WS_MLEN
        LD      $13,(IX+$SX)
        PRE     IX,WS_MBUF
        CAL     PRINT_RAM

        PRE     IZ,TXT_RSP
        CAL     PRINTZ
        CAL     PRINT_PAT
        PRE     IZ,TXT_RPASS
        CAL     PRINTZ

        LD      $6,&H20
        PRE     IZ,TXT_RKEY
        CAL     PRINTZ
        PRE     IX,WS_KCMP
        CAL     FMT_COUNT
        PRE     IX,WS_DEC10
        LD      $13,10
        CAL     PRINT_RAM

        LD      $6,&H40
        PRE     IZ,TXT_RINST
        CAL     PRINTZ
        PRE     IX,WS_ICMP
        CAL     FMT_COUNT
        PRE     IX,WS_DEC10
        LD      $13,10
        CAL     PRINT_RAM

        LD      $6,&H60
        PRE     IZ,TXT_RWR
        CAL     PRINTZ
        PRE     IX,WS_DWR
        CAL     FMT_COUNT
        PRE     IX,WS_DEC10
        LD      $13,10
        CAL     PRINT_RAM

        CAL     WAIT_SORT_EXIT
        RTN

; Keep a completed result on screen until MENU (native return) or EXE.
; MENU is the primary route; EXE is an unadvertised compatibility key.

; PURPOSE : Dismiss a completed sort screen deliberately.
; OUTPUT  : Returns after MENU or compatibility EXE.
; EFFECTS : Other keys do not dismiss the screen.
WAIT_SORT_EXIT:
WSE_WAIT:
        CAL     INKEY
        AN      $17,$17
        JR      Z,WSE_WAIT
        LD      $12,$0
        SBC     $12,KEYMENU
        JR      Z,WSE_DONE
        SBC     $12,KEYEXE
        JR      Z,WSE_DONE
        CAL     WAIT_RELEASE
        JR      WSE_WAIT
WSE_DONE:
        CAL     WAIT_RELEASE
        RTN

SHOW_BFAIL:
        CAL     CLEAR_ALL
        LD      $6,$SX
        PRE     IZ,TXT_BUBBLE
        CAL     PRINTZ
        LD      $6,&H20
        PRE     IZ,TXT_ORDERFAIL
        CAL     PRINTZ
        CAL     WAIT_SORT_EXIT
        JP      SHOW_MENU

SHOW_SFAIL:
        CAL     CLEAR_ALL
        LD      $6,$SX
        PRE     IZ,TXT_SHELL
        CAL     PRINTZ
        LD      $6,&H20
        PRE     IZ,TXT_ORDERFAIL
        CAL     PRINTZ
        CAL     WAIT_SORT_EXIT
        JP      SHOW_MENU

SHOW_XFAIL:
        CAL     CLEAR_ALL
        LD      $6,$SX
        PRE     IZ,TXT_SELECT
        CAL     PRINTZ
        LD      $6,&H20
        PRE     IZ,TXT_ORDERFAIL
        CAL     PRINTZ
        CAL     WAIT_SORT_EXIT
        JP      SHOW_MENU

; end of include
