2021-04-24 04:36:48 +00:00
|
|
|
(
|
|
|
|
(globals . (
|
2021-05-07 16:49:16 +00:00
|
|
|
(mac . [(def mac (litmac litfn () (name params . body)
|
|
|
|
`(def ,name (litmac litfn () ,params ,@body))))])
|
|
|
|
(when . [(mac when (cond body)
|
|
|
|
`(if ,cond ,body ()))])
|
2021-05-07 17:05:20 +00:00
|
|
|
(let . [(mac let (var val . body)
|
|
|
|
`((fn (,var) ,@body) ,val))])
|
2021-05-06 22:46:54 +00:00
|
|
|
(hline . [(def hline (fn (screen y color)
|
2021-05-07 17:14:51 +00:00
|
|
|
(hline1 screen y 0 (width screen) color)))])
|
|
|
|
(hline1 . [(def hline1 (fn (screen y x xmax color)
|
|
|
|
(while (< x xmax)
|
|
|
|
(pixel screen x y color)
|
|
|
|
(set x (+ x 1)))))])
|
2021-05-06 22:46:54 +00:00
|
|
|
(vline . [(def vline (fn (screen x color)
|
2021-05-07 17:14:51 +00:00
|
|
|
(vline1 screen x 0 (height screen) color)))])
|
|
|
|
(vline1 . [(def vline1 (fn (screen x y ymax color)
|
|
|
|
(while (< y ymax)
|
|
|
|
(pixel screen x y color)
|
|
|
|
(set y (+ y 1)))))])
|
2021-05-06 22:46:54 +00:00
|
|
|
(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)
|
2021-05-07 18:28:59 +00:00
|
|
|
(let (x y) `(,x0 ,y0)
|
|
|
|
(let dx (abs (- x1 x0))
|
|
|
|
(let dy (- 0 (abs (- y1 y0)))
|
|
|
|
(let sx (sgn (- x1 x0))
|
|
|
|
(let sy (sgn (- y1 y0))
|
|
|
|
(let err (+ dx dy)
|
|
|
|
(while (not (and (= x x1)
|
|
|
|
(= y y1)))
|
2021-05-06 22:46:54 +00:00
|
|
|
(pixel screen x y color)
|
2021-05-07 18:28:59 +00:00
|
|
|
(let e2 (* err 2)
|
|
|
|
(when (>= e2 dy)
|
|
|
|
(set x (+ x sx)))
|
|
|
|
(when (<= e2 dx)
|
|
|
|
(set y (+ y sy)))
|
|
|
|
(set err
|
|
|
|
(+ err
|
|
|
|
(+ (if (>= e2 dy)
|
|
|
|
dy
|
|
|
|
0)
|
|
|
|
(if (<= e2 dx)
|
|
|
|
dx
|
|
|
|
0))))))))))))))])
|
2021-05-06 22:46:54 +00:00
|
|
|
(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)))])
|
2021-04-24 04:36:48 +00:00
|
|
|
))
|
2021-05-07 18:28:59 +00:00
|
|
|
(sandbox . (brline screen 1 1 5 5 4))
|
2021-04-24 04:36:48 +00:00
|
|
|
)
|