shell: some example definitions
This commit is contained in:
parent
5915104926
commit
fa8d337d90
|
@ -26,6 +26,12 @@ Load an s-expression into it:
|
|||
$ echo '(+ 1 1)' |dd of=data.img conv=notrunc
|
||||
```
|
||||
|
||||
You can also try one of the files of definitions in this directory (`*.limg`).
|
||||
|
||||
```sh
|
||||
$ cat iter.limg |dd of=data.img conv=notrunc
|
||||
```
|
||||
|
||||
Now run with both code and data disks:
|
||||
```sh
|
||||
$ qemu-system-i386 -enable-kvm -hda code.img -hdb data.img
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
(
|
||||
(globals . (
|
||||
(hline1 . (fn () (screen y lo hi color)
|
||||
(while (< lo hi)
|
||||
(pixel screen lo y color)
|
||||
(set lo (+ lo 1)))))
|
||||
(vline1 . (fn () (screen x lo hi color)
|
||||
(while (< lo hi)
|
||||
(pixel screen x lo color)
|
||||
(set lo (+ lo 1)))))
|
||||
(hline . (fn () (screen y color)
|
||||
(hline1 screen y 0 (width screen) color)))
|
||||
(vline . (fn () (screen y color)
|
||||
(vline1 screen y 0 (height screen) color)))
|
||||
(andf . (fn () (a b)
|
||||
(if a
|
||||
(if b
|
||||
1
|
||||
())
|
||||
())))
|
||||
(orf . (fn () (a b)
|
||||
(if a
|
||||
a
|
||||
b)))
|
||||
(brline . (fn () (screen x0 y0 x1 y1 color)
|
||||
((fn (dx dy sx sy)
|
||||
((fn (err)
|
||||
(brline1 screen x0 y0 x1 y1 dx dy sx sy err color))
|
||||
(+ dx dy)))
|
||||
(abs (- x1 x0))
|
||||
(- 0 (abs (- y1 y0)))
|
||||
(sgn (- x1 x0))
|
||||
(sgn (- y1 y0)))))
|
||||
(brline1 . (fn () (screen x y xmax ymax dx dy sx sy err color)
|
||||
(while (orf (< x xmax) (< y ymax))
|
||||
(pixel screen x y color)
|
||||
((fn (e2)
|
||||
(if (>= e2 dy)
|
||||
(set x (+ x sx))
|
||||
())
|
||||
(if (<= e2 dx)
|
||||
(set y (+ y sy)))
|
||||
(set err (+ err
|
||||
(+
|
||||
(if (>= e2 dy)
|
||||
dy
|
||||
0)
|
||||
(if (<= e2 dx)
|
||||
dx
|
||||
0)))))
|
||||
(* err 2)))))
|
||||
(read_line_2 . (fn () (keyboard stream)
|
||||
((fn (c)
|
||||
(if (= c 10)
|
||||
stream
|
||||
(if (= c 0)
|
||||
stream
|
||||
(read_line_2 keyboard (write stream c)))))
|
||||
(key keyboard))))
|
||||
(read_line . (fn () (keyboard)
|
||||
(read_line_2 keyboard (stream))))
|
||||
(fill_rect . (fn () (screen x1 y1 x2 y2 fill_color)
|
||||
(while (< y1 y2)
|
||||
(hline1 screen y1 x1 x2 fill_color)
|
||||
(set y1 (+ y1 1)))))
|
||||
(chessboard . (fn () (screen px)
|
||||
(chessboard1 screen px 0 15)))
|
||||
(chessboard1 . (fn () (screen px y color)
|
||||
(while (< y (height screen))
|
||||
(chessboard2 screen px y 0 color)
|
||||
(set y (+ y px))
|
||||
(set color (- 15 color)))))
|
||||
(chessboard2 . (fn () (screen px y x color)
|
||||
(while (< x (width screen))
|
||||
(fill_rect screen x y (+ x px) (+ y px) color)
|
||||
(set x (+ x px))
|
||||
(set color (- 15 color)))))
|
||||
))
|
||||
(sandbox . (+ 1 2))
|
||||
)
|
|
@ -0,0 +1,94 @@
|
|||
(
|
||||
(globals . (
|
||||
(hline1 . (fn () (screen y lo hi color)
|
||||
(if (>= lo hi)
|
||||
()
|
||||
((fn ()
|
||||
(pixel screen lo y color)
|
||||
(hline1 screen y (+ lo 1) hi color))))))
|
||||
(vline1 . (fn () (screen x lo hi color)
|
||||
(if (>= lo hi)
|
||||
()
|
||||
((fn ()
|
||||
(pixel screen x lo color)
|
||||
(vline1 screen x (+ lo 1) hi color))))))
|
||||
(hline . (fn () (screen y color)
|
||||
(hline1 screen y 0 (width screen) color)))
|
||||
(vline . (fn () (screen y color)
|
||||
(vline1 screen y 0 (height screen) color)))
|
||||
(andf . (fn () (a b)
|
||||
(if a
|
||||
(if b
|
||||
1
|
||||
())
|
||||
())))
|
||||
(brline . (fn () (screen x0 y0 x1 y1 color)
|
||||
((fn (dx dy sx sy)
|
||||
((fn (err)
|
||||
(brline1 screen x0 y0 x1 y1 dx dy sx sy err color))
|
||||
(+ dx dy)))
|
||||
(abs (- x1 x0))
|
||||
(- 0 (abs (- y1 y0)))
|
||||
(sgn (- x1 x0))
|
||||
(sgn (- y1 y0)))))
|
||||
(brline1 . (fn () (screen x y xmax ymax dx dy sx sy err color)
|
||||
(pixel screen x y color)
|
||||
(if (andf (= x xmax) (= y ymax))
|
||||
()
|
||||
((fn (e2)
|
||||
(brline1 screen
|
||||
(if (>= e2 dy)
|
||||
(+ x sx)
|
||||
x)
|
||||
(if (<= e2 dx)
|
||||
(+ y sy)
|
||||
y)
|
||||
xmax
|
||||
ymax
|
||||
dx
|
||||
dy
|
||||
sx
|
||||
sy
|
||||
(+ err
|
||||
(+
|
||||
(if (>= e2 dy)
|
||||
dy
|
||||
0)
|
||||
(if (<= e2 dx)
|
||||
dx
|
||||
0)))
|
||||
color))
|
||||
(* err 2)))))
|
||||
(read_line_2 . (fn () (keyboard stream)
|
||||
((fn (c)
|
||||
(if (= c 10)
|
||||
stream
|
||||
(if (= c 0)
|
||||
stream
|
||||
(read_line_2 keyboard (write stream c)))))
|
||||
(key keyboard))))
|
||||
(read_line . (fn () (keyboard)
|
||||
(read_line_2 keyboard (stream))))
|
||||
(fill_rect . (fn () (screen x1 y1 x2 y2 fill_color)
|
||||
(if (>= y1 y2)
|
||||
()
|
||||
((fn ()
|
||||
(hline1 screen y1 x1 x2 fill_color)
|
||||
(fill_rect screen x1 (+ y1 1) x2 y2 fill_color))))))
|
||||
(chessboard . (fn () (screen px)
|
||||
(chessboard1 screen px 0 15)))
|
||||
(chessboard1 . (fn () (screen px y color)
|
||||
(if (>= y (height screen))
|
||||
()
|
||||
((fn ()
|
||||
(chessboard2 screen px y 0 color)
|
||||
(chessboard1 screen px (+ y px) (- 15 color)))))))
|
||||
(chessboard2 . (fn () (screen px y x color)
|
||||
(if (>= x (width screen))
|
||||
()
|
||||
((fn ()
|
||||
(fill_rect screen x y (+ x px) (+ y px) color)
|
||||
(chessboard2 screen px y (+ x px) (- 15 color)))))))
|
||||
))
|
||||
(sandbox . (+ 1 2))
|
||||
)
|
Loading…
Reference in New Issue