\ FORTH is identifed by a forth comment at first line
\
\ terminal control stuff
\
: TTY.CSI d# 27 EMIT ASCII [ EMIT ;
: TTY.HOME    TTY.CSI ASCII H EMIT ;
: TTY.CLR_EOS TTY.CSI ASCII J EMIT ;
: TTY.HOME_CLR TTY.HOME TTY.CLR_EOS ;
\
\ boot menu stuff
\
: my-max-boot-num 5 ;
: my-boot-default 1 ;
: my-boot-delay d# 300 ; \ unit = 100 ms
: my-print-menu ( -- )
  TTY.HOME_CLR
  ."  "                                    			cr
  ." Welcome to Debian GNU/Linux ${DEBIAN_VERSION}!"		cr
  ." "								cr
  ." This is a Debian installation ${MEDIA_TYPE},"		cr
  ." built on ${BUILD_DATE}."					cr
  ." "								cr
  ." The default option is (1) 'install'. For maximum"		cr
  ." control, you can use the (2) 'expert' option."		cr
  ." "								cr
  ." ************************************"			cr
  ." If in doubt, just choose (1) 'install'"			cr
  ." ************************************"			cr
  ."  "								cr
  ." 1: install"   						cr
  ." 2: expert"   						cr
  ." 3: rescue"   						cr
  ." 4: auto"   						cr
  ." 5: return to OF prompt"					cr
  ."  "								cr
;
: my-boot-case ( num -- )
  ."  " cr
  case
    1 of " cd install/powerpc/vmlinuz-chrp.initrd --" endof
    2 of " cd install/powerpc/vmlinuz-chrp.initrd priority=low --" endof
    3 of " cd install/powerpc/vmlinuz-chrp.initrd rescue/enable=true --" endof
    4 of " cd install/powerpc/vmlinuz-chrp.initrd auto=true priority=critical --" endof
    5 of " none" endof
  endcase
  $boot
;
: my-input-num ( wait-period max-boot-num default-num -- boot-num )
  1 \ loop-inc = 1
  3 pick 0 do
    0d emit
    ." press 1-"
    ( wait-period max-boot-num default-num loop-inc )
    2 pick ascii 0 + emit
    dup 1 = if
      ."  within "
      3 pick i - d# 10 / .d
      ."  seconds"
    then
    ."  (default: "
    over ascii 0 + emit
    ." ) :                   "
    d# 100 ms
    key? if
       key
       ( wait-period max-boot-num default-num loop-inc key )
       dup 0d = if \ return pressed
         drop leave
       then

       ascii 0 -
       ( wait-period max-boot-num default-num loop-inc num )
       dup 1 5 pick
       ( wait-period max-boot-num default-num loop-inc num num 1 max-boot-num )
       between if
         rot drop swap leave
       then

       ( wait-period max-boot-num default-num loop-inc num )
       2drop 0  \ loop-inc = 0
    then
  dup +loop
  drop
  ( wait-period max-boot-num boot-num )
  nip nip
;


my-print-menu
my-boot-delay my-max-boot-num my-boot-default my-input-num
my-boot-case
