mu/shell/data.limg

96 lines
2.8 KiB
Plaintext

(
(globals . (
(hline . [(def hline (fn (screen y color)
(hline1 screen y 0 (width screen) color)))])
(hline1 . [(def hline1 (fn (screen y lo hi color)
(while (< lo hi)
(pixel screen lo y color)
(set lo (+ lo 1)))))])
(vline . [(def vline (fn (screen x color)
(vline1 screen x 0 (height screen) color)))])
(vline1 . [(def vline1 (fn (screen x lo hi color)
(while (< lo hi)
(pixel screen x lo color)
(set lo (+ lo 1)))))])
(fill_rect . [(def fill_rect (fn (screen x1 y1 x2 y2 color)
(while (< y1 y2)
(hline1 screen y1 x1 x2 color)
(set y1 (+ y1 1)))))])
(brline . [(def 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 . [(def brline1 (fn (screen x y xlast ylast dx dy sx sy err color)
(while (not (and (= x xlast) (= y ylast)))
(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 . [(def 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 . [(def read_line (fn (keyboard)
(read_line_2 keyboard (stream))))])
(chessboard . [(def chessboard (fn (screen px)
(chessboard1 screen px 0 15)))])
(chessboard1 . [(def chessboard1 (fn (screen px y color)
(clear screen)
(while (< y (height screen))
(chessboard2 screen px y 0 color)
(set y (+ y px))
(chessboard2 screen px y px color)
(set y (+ y px)))))])
(chessboard2 . [(def 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 x (+ x px)))))])
(brcircle . [(def brcircle (fn (screen cx cy r color)
((fn (x y err continue)
(while continue
(pixel screen (- cx x) (+ cy y) color)
(pixel screen (- cx y) (- cy x) color)
(pixel screen (+ cx x) (- cy y) color)
(pixel screen (+ cx y) (+ cy x) color)
(set r err)
(if (<= r y)
(set err (+ err (+ 1 (* 2 (set y (+ y 1))))))
())
(if (or (> r x) (> err y))
(set err (+ err (+ 1 (* 2 (set x (+ x 1))))))
())
(set continue (< x 0))
))
(- 0 r)
0
(- 2 (* 2 r))
1
)))])
(main . [(def main (fn (screen keyboard)
(chessboard screen 16)))])
))
(sandbox . (fill_rect screen 0 0 8 8 2))
)