PRIVATE &password
; <- @keyword
;        ^ @variable.builtin
ENTRY &password
; <- @keyword
;        ^ @variable.parameter

ENTRY %LINE &salt
; <- @keyword
;      ^ @constant.builtin
;            ^ @variable.parameter

IF "&password"==""
; <- @keyword.conditional
;  ^ @string
;    ^ @variable.builtin
;             ^ @operator
(
    ECHO "Failed to provide password."
    ENDDO
;   ^ @keyword.return
)
ELSE
; <- @keyword.conditional
(
    PRIVATE &pass

    &pass=FALSE()
;          ^ @function.builtin
    WHILE !&pass
;         ^ @operator
    (
        GOSUB verify_password "&password"
;             ^ @function.call
        RETURNVALUES &pass
;                     ^ @variable.parameter
        WAIT 10.ms
;            ^ @number.float
    )

    IF !&pass
        GOTO fail
;            ^ @label
    ELSE IF &debug
;   ^ @keyword.conditional
;        ^ @keyword.conditional
    (
        GOSUB start_debug
;             ^ @function.call
    )
)

LOCAL &num
;      ^ @variable.builtin

&num = 2.
;      ^ @number

RePeaT &num PRINT "Password: &password"
;       ^ @variable.builtin
;                             ^ @variable.builtin

WinCLEAR
FramePOS ,,,,Maximized
;        ^ @punctuation.delimiter
;            ^ @constant.builtin
WinPOS 0% 50% 100% 35%
;      ^ @number.float
COVerage.ListFunc

ENDDO


fail:
; <- @label
    PRINT %ERROR "Password verification failed."
    END
;   ^ @keyword.return


verify_password:
; <- @function
(
    PARAMETERS &password
;               ^ @variable.parameter

    SYStem.Option.KEYCODE "&password"
    SYStem.JtagClock  1kHz
;                     ^ @number.float
    SYStem.Mode.Attach

    Data.Set N: EAXI:0x34000000 %Long 0x34000100 0x34000021 /verify
;            ^ @constant.builtin
;               ^ @constant.builtin
;                    ^ @number
;                                ^ @constant.builtin
;                                     ^ @number
;                                                            ^ @constant.builtin

    RETURN TRUE()
;   ^ @keyword.return
)


SUBROUTINE start_debug
; <- @keyword.function
;          ^ @function
(
    COVerage.ListModule %MULTI.OBC \sieve
;    ^ @keyword
;                        ^ @constant.builtin
;                                  ^ @string.special.symbol

    Var.DRAW flags[0..16] /Alternate 3
;    ^ @keyword
;             ^ @variable
;                          ^ @constant.builtin
;                                    ^ @number

    Go main
    RETURN
;   ^ @keyword.return
)

// vim: set ft=t32:
