root/trunk/thune/mkboot.t

Revision 540, 5.0 kB (checked in by krobillard, 5 months ago)

Thune

  • Implemented date!. Added ur_arrayExpand(), save.

ThuneGL

  • Added line-edit widget, blit, move-glyphs.
  • Can now make font from texture & binary.
  • Optimized renderGlyphXY() a bit.
  • twidget close event handler works again.
  • Updated thune-gl.spec for renamed glv RPM.
Line 
1#!./thune
2
3{
4context! [
5  logic! 1 make :true
6  logic! 0 make :false
7
8  opcode!  0 'nop     make :nop
9  opcode!  3 'drop    make :drop
10  opcode!  4 'dup     make :dup
11  opcode!  5 'dup2    make :dup2
12  opcode!  6 'over    make :over
13  opcode!  7 'swap    make :swap
14  opcode!  8 'nip     make :nip
15  opcode!  9 'tuck    make :tuck
16  opcode! 10 'rot     make :rot
17  opcode! 11 'rot.r   make :rot.r
18  opcode! 12 'do      make :do
19  opcode! 13 'proc    make :proc
20  opcode! 14 'iter    make :iter
21  opcode! 15 'each    make :each
22  opcode! 16 'recurse make :recurse
23  opcode! 17 'return  make :return
24  opcode! 18 'throw   make :throw
25  opcode! 19 'try     make :try
26  opcode! 20 'ift     make :ift
27  opcode! 21 'if-some make :if-some
28  opcode! 22 'iff     make :iff
29  opcode! 23 'or-else make :or-else
30  opcode! 24 'if      make :if
31  opcode! 25 'halt    make :halt
32  opcode! 26 'quit    make :quit
33  opcode! 27 'inc     make :inc
34  opcode! 28 'dec     make :dec
35  opcode! 29 '++      make :++
36  opcode! 30 '--      make :--
37  opcode! 31 'verify  make :verify
38  opcode! 32 'forever make :forever
39  opcode! 33 'loop    make :loop
40
41  int!/decimal! :number!
42  word!/set-word!/get-word!/lit-word! :any-word!
43  binary!/string!/block!/paren! :series!
44] make :kernel-ops
45}
46:boot-script
47
48{
49logic! 1 make dup :yes :on
50logic! 0 make dup :no :off
51char!  9 make :tab
52char! 10 make :eol
533.14159265358979323846 :pi
54tail?: :empty?
55[quit] proc :q
56[block!  swap make] proc :to-block
57[string! to] proc :to-string
58[context! swap make] proc :context
59
60[
61  read
62  dup \"#!\" match ift (eol find)
63  to-block kernel-ops infuse
64] proc :load    ;(filename -- block)
65
66[open swap string! to write close] proc :save    ;(value filename -- )
67
68[select if-some do] proc :case
69
70['break throw] proc :break
71
72[
73  [dup do iff break over do] forever
74  drop drop
75]
76'loop proc :while  ;(block cond -- )
77
78[body  n number!  limit number!] [
79  n
80  [[dup limit lt? iff break  dup body do  inc]
81   [dup limit gt? iff break  dup body do  dec]]
82  over limit lt? pick
83  forever drop
84] 'loop func :loop.to
85
86[ser words block! body block!]
87[
88  ser [words set body do] words length? iter
89]
90'loop func :each.set    ;(ser words body -- )
91
92[ser comb] [
93  ser [dup first comb do 1 poke drop] iter
94] 'loop func :map       ;(ser comb -- )
95
96[[do if-some return] each false] proc :any    ; (blk -- logic)
97
98[[do dup iff return drop] each true] proc :all    ; (blk -- logic)
99
100[ser old new | len] [
101  old length? :len
102  ser old find if-some (new len change :ser recurse)
103  ser
104] func :replace.all     ;(ser old new -- ser)
105
106
107[reduce to-text console.out] proc :prin  ;(val -- )
108[reduce [first to-text console.out] iter] proc :prin.pack  ;(val -- )
109[reduce to-text console.out eol console.out] proc :print   ;(val -- )
110
111[error! swap make throw] proc :error
112[swap context bind proc] proc :proc.env      ;(env body -- proc)
113[rot  context bind func] proc :func.env      ;(env sig body -- func)
114[
115  [some none] copy swap 2 poke
116  parse
117  dup tail? iff (
118    \"parse.some failed at -^^/\" copy
119      swap string! as 80 copy.part
120      append
121    error
122  ) drop
123]
124proc :parse.some  ;(data rules -- )
125
126[
127  0,0,5 :version
128  none :os
129  [] :devices
130]
131context :script-env
132
133[swap copy swap append head] proc :join   ; (base addition -- new)
134
135[val block!]
136[
137  val dup empty? ift return
138  reduce
139  dup first
140    dup series! is-type? [copy] [to-text] either :val
141  next [
142    first val swap append drop
143  ] iter
144  val
145] func :rejoin  ; (block -- string)
146
147[ser pat rep]
148[
149  ser [dup first pat if/eq (rep 1 poke) drop] iter
150  ser
151]
152func :replace   ; (ser pat rep -- ser)
153
154[bind [dup second swap first set] iter/2] proc :set-key-values ; (blk ctx -- )
155
156[now swap do now swap sub] proc :time-blk
157
158[
159  dup [
160    \".\"   [drop \"./\"  none]
161    \"..\"  [drop \"../\"  none]
162    [
163      dup last '/' eq? ift (none return)
164      dup '/' find.last dup iff (swap return)
165      ; fullpath file
166      next
167      dup2 slice
168      rot.r nip
169    ]
170  ] case
171] proc :split-path    ; (fullpath -- path file)
172
173[
174  dup last dup '/' if/eq (drop return)
175    '\\' if/eq return
176  '/' append head
177] proc :dirize    ; (path -- path)
178
179[0 swap add] proc :to-dec
180[rot minimum maximum] proc :limit   ; (n min max -- n)
181
182[blk | ctx num word]
183[
184  [] context :ctx
185  blk [num word][
186    opcode! num word make word ctx set
187  ] each.set
188  ctx
189] func :make-opcodes    ; (block -- ctx)
190}
191:env-script
192
193/*
194  [devices select next copy] proc :make-port  ; (name -- port)
195
196  [name spec] [
197    devices name append spec context append drop
198  ] func :add-port-device
199
200  'file [none :fd none :filename] add-port-device
201
202  quit: :q                  ; Can't get opcode!
203  none!  0 make :none
204  logic! 1 make [true yes on] set
205  logic! 0 make [false no off] set
206*/
207
208
209[
210    dup first eol eq? ift next
211    [
212        :tok to eol tok: skip
213            (tok tail? iff ({  "} prin tok prin {\n"} print))
214    ]
215    parse.some
216]
217proc :print-c   ; (string -- )
218
219
220{/* Generated by mkboot.t */
221
222static char _bootScript[] =} print
223    boot-script print-c
224{;
225
226static char _envScript[] =} print
227    env-script print-c
228';' print
229
230
231;eof
Note: See TracBrowser for help on using the browser.