]> spindle.queued.net Git - xodist/blob - inst.fth
2c6a2c73a35f70c0571ef5d02a6bc5b0285948f9
[xodist] / inst.fth
1 \ DebXO installer script
2
3 : choose-nand-item
4    menu-done
5    ." Nand" cr
6 ;
7
8 : choose-emmc-item
9    menu-done
10    ." EMMC" cr
11 ;
12
13 : choose-sd-item
14    menu-done
15    ." SD" cr
16 ;
17
18 : choose-usb-item
19    menu-done
20    ." USB" cr
21 ;
22
23 : choose-usb-item-0
24    menu-done
25    ." USB #1" cr
26 ;
27 : choose-usb-item-1
28    menu-done
29    ." USB #2" cr
30 ;
31 : choose-usb-item-2
32    menu-done
33    ." USB #3" cr
34 ;
35 : choose-usb-item-3
36    menu-done
37    ." USB #4" cr
38 ;
39
40 0 value nr-targets
41
42 : has-target?  ( devspec$ -- flag )
43    open-dev                                     ( ih )
44    ?dup 0<> if
45       close-dev
46       nr-targets 1+ to nr-targets
47       true
48    else
49       false
50    then
51 ;
52
53 : disk-size  ( devspec$ -- #MB )
54    open-dev ?dup 0<> if                         ( ih )
55       dup " #blocks" rot $call-method           ( ih #blocks )
56       ?dup 0<> if
57          \ we're assuming a block size of 512 bytes
58          d# 512 um*                             ( ih #bytes )
59          d# 1,000,000 um/mod                    ( ih rem #MB )
60          rot close-dev swap drop                ( #MB )
61       else
62          drop
63          0  \ TODO
64 \      dup " block-size" rot $call-method        ( ih  size x )
65   \    rot close-dev drop                        ( size.lo )
66    \   d# 20 >>                                  ( #MB )
67       then
68    else
69       0                                         ( #MB )
70    then
71 ;
72
73 \ : disk-size  ( devspec$ -- #MB )
74 \   open-dev ?dup 0<> if                         ( ih )
75 \      dup " size" rot $call-method              ( ih size.lo size.hi )
76 \      rot close-dev drop                        ( size.lo )
77 \      d# 20 >>                                  ( #MB )
78 \      \ fuck your signed 32bit division..    d# 100000 /                               ( #MB ).
79 \   else
80 \      0                                         ( #MB )
81 \   then
82 \ ;
83
84 : debxo-find-targets  ( -- help0$ 'func0 'icon0 ... helpk$ 'funck 'iconk )
85    0 to nr-targets
86
87    \ check for the existence of nandflash (XO-1)
88    " /nandflash" has-target? if
89       " Internal NAND"
90       ['] choose-nand-item spi.icon
91    else
92       \ check for internal EMMC (XO-1.5, XO-1.75)
93       " int:0" has-target? if
94          64 alloc-mem >r
95          " int:0" disk-size decimal             ( #MB )
96          <# "  MB)" hold$ u#s " Internal MMC (" hold$ u#>
97          r> pack count
98          \ " Internal MMC"
99          ['] choose-emmc-item spi.icon
100       then
101    then
102
103    " ext:0" has-target? if
104        64 alloc-mem >r
105        " ext:0" disk-size decimal               ( #MB )
106        <# "  MB)" hold$ u#s " SD Card (" hold$ u#>
107        r> pack count
108 \      " SD Card"
109       ['] choose-sd-item sdcard.icon
110    then
111
112    \ check for up to 4 USB drives
113    4 0  do
114       i <# " /disk" hold$ u# " /usb/scsi@" hold$ u#>  string2 pack
115       count has-target? if
116          \ create description
117          i 1+                                   ( i )
118          64 alloc-mem >r                        ( i )
119          <# u# " USB Disk #" hold$ u#>  r@ place
120          string2 count disk-size decimal        ( #MB )
121          <# "  MB)" hold$ u#s "  (" hold$ u#> r@ $cat
122
123          r> count                               ( desc$ )
124          i <# u# " ['] choose-usb-item-" hold$ u#> evaluate usb.icon
125       then
126    loop
127
128 \ TODO: multiple usb disks?
129 \ differentiate between installer disk & extra disk..
130 ;
131
132
133 : debxo-installer-menu  ( -- )
134    \ populate stack w/ icon/target list
135    debxo-find-targets      
136
137    \ last entry on the list
138    " Abort installation"
139    ['] quit-item quit.icon
140
141    \ generate the menu
142    d# 1 to rows
143    nr-targets 1+ to cols
144
145    clear-menu
146
147    0 nr-targets  do
148       0 i install-icon
149    -1 +loop
150 ;
151
152 : instmenu
153    ['] debxo-installer-menu to root-menu
154    (menu)
155 ;