\ pref

needs core-ext
needs struct
needs ids
needs 1802memory

struct
    \ struc version = 1
    1 cells field pref.ver 
    \ 0=ELF II, 1=Classic
    1 cells field pref.skin
    \ 0=256 bytes, 1=4K, 2=16K
    1 cells field pref.mem
    \ 0=hex, 1=ascii
    1 cells field pref.graffiti
    \ reserved cells for future use
    12 cells field pref.reserved
end-struct Pref:

Pref: pref
pref  sizeof Pref:  erase
0 pref pref.ver !      \ version = 1
0 pref pref.skin !     \ default to ELF II
0 pref pref.mem !   \ default to 256
0 pref pref.graffiti !  \ hex keypad

: graffiti-hexpad?  ( -- flag )
    pref pref.graffiti @   0= ;

: apply-skin-pref  ( -- )
    pref pref.skin @ 1 = if
        classic set-skin
    else
        elf2 set-skin
    then ; 

: apply-mem-pref  ( -- )
    pref pref.mem @ case
    1 of     set-mem-4k     endof
    2 of     set-mem-16k  endof
    ( otherwise )
    set-mem-256
    endcase ;

: apply-pref  ( -- )
    apply-skin-pref
    apply-mem-pref ;

: save-pref  ( -- )
    [ sizeof Pref: ] literal
    pref >abs
    1   [id] 1802
    PrefSetAppPreferencesV10
    apply-pref ;

: load-pref  ( -- loaded? )
    [ sizeof Pref: ] literal
    pref >abs
    1   [id] 1802
    PrefGetAppPreferencesV10
    (hex) 0FF and ;

\ Copy structure into current prefs,
\ save and apply them.
: pref!  ( &pref -- )
    pref   [ sizeof Pref: ] literal  move
    save-pref ;

\ Load and apply preferences, used
\ at app init. If preferences couldn't
\ be read, then save the default for
\ next time.
: init-pref  ( -- )
    load-pref if
        apply-pref
    else
        save-pref
    then ;

