mu/shell/data.limg

158 lines
4.3 KiB
Plaintext
Raw Normal View History

2021-04-24 04:36:48 +00:00
(
(globals . (
2021-06-04 23:43:19 +00:00
(mac . [(define mac (litmac litfn () ((name . params) . body)
`(define ,name (litmac litfn () ,params ,@body))))])
2021-06-04 23:43:19 +00:00
(def . [(mac (def (name . params) . body)
2021-06-04 23:41:18 +00:00
`(define ,name (fn ,params ,@body)))])
2021-06-04 23:43:19 +00:00
(do . [(mac (do . body) `((fn () ,@body)))])
2021-06-06 23:39:07 +00:00
(let . [(mac (let var val . body)
`((fn (,var) ,@body) ,val))])
(when . [(mac (when cond . body)
`(if ,cond (do ,@body) ()))])
2021-06-06 23:40:35 +00:00
(list . [(def (list . args)
# we should probably make a copy here
args)])
(len . [(def (len l)
(if (no l)
0
(+ 1 (len (cdr l)))))])
(map1 . [(def (map1 f xs)
(if (no xs)
()
(cons (f (car xs))
(map1 f (cdr xs)))))])
2021-06-06 00:49:03 +00:00
(++ . [(mac (++ var) `(set ,var (+ ,var 1)))])
(+= . [(mac (+= var inc)
`(set ,var (+ ,var ,inc)))])
(for . [(mac (for var init test update . body)
`(let ,var ,init
(while ,test
,@body
,update)))])
2021-06-04 23:12:30 +00:00
(hline1 . [(def (hline1 screen y x xmax color)
2021-05-07 17:14:51 +00:00
(while (< x xmax)
(pixel screen x y color)
2021-06-06 00:49:03 +00:00
(++ x)))])
2021-06-04 23:12:30 +00:00
(vline1 . [(def (vline1 screen x y ymax color)
2021-05-07 17:14:51 +00:00
(while (< y ymax)
(pixel screen x y color)
2021-06-06 00:49:03 +00:00
(++ y)))])
2021-06-04 23:12:30 +00:00
(hline . [(def (hline screen y color)
(hline1 screen y 0 (width screen) color))])
(vline . [(def (vline screen x color)
(vline1 screen x 0 (height screen) color))])
(line . [(def (line 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)))
(pixel screen x y color)
2021-05-07 18:28:59 +00:00
(let e2 (* err 2)
(when (>= e2 dy)
2021-06-06 00:49:03 +00:00
(+= x sx))
2021-05-07 18:28:59 +00:00
(when (<= e2 dx)
2021-06-06 00:49:03 +00:00
(+= y sy))
(+= err
(+ (if (>= e2 dy)
dy
0)
(if (<= e2 dx)
dx
0))))))))))))])
2021-06-04 23:12:30 +00:00
(read_line . [(def (read_line keyboard)
2021-05-07 18:37:48 +00:00
(let str (stream)
(let c (key keyboard)
(while (not (or (= c 0) (= c 10)))
(write str c)
(set c (key keyboard))))
2021-06-04 23:12:30 +00:00
str))])
2021-06-06 17:54:50 +00:00
(wait . [(def (wait keyboard)
(while (= 0 (key keyboard))))])
(sq . [(def (sq n) (* n n))])
(cube . [(def (cube n) (* (* n n) n))])
2021-06-04 23:12:30 +00:00
(fill_rect . [(def (fill_rect screen x1 y1 x2 y2 color)
2021-06-06 01:04:05 +00:00
(for y y1 (< y y2) (++ y)
(hline1 screen y x1 x2 color)))])
2021-06-04 23:12:30 +00:00
(chessboard_row . [(def (chessboard_row screen px y x xmax)
2021-05-07 19:11:59 +00:00
(while (< x xmax)
(fill_rect screen
x y
(+ x px) (+ y px) 15)
2021-06-06 00:49:03 +00:00
(+= x (* px 2))))])
2021-06-04 23:12:30 +00:00
(chessboard . [(def (chessboard screen px)
(clear screen)
(let xmax (width screen)
(let ymax (height screen)
2021-06-06 01:04:05 +00:00
(for y 0 (< y ymax) (+= y px)
(chessboard_row screen px y 0 xmax)
2021-06-06 00:49:03 +00:00
(+= y px)
2021-06-06 01:04:05 +00:00
(chessboard_row screen px y px xmax)))))])
2021-06-04 23:12:30 +00:00
(circle . [(def (circle screen cx cy r clr)
2021-05-07 19:08:07 +00:00
(let x (- 0 r)
(let y 0
(let err (- 2 (* 2 r))
(let continue 1
(while continue
(pixel screen (- cx x) (+ cy y) clr)
(pixel screen (- cx y) (- cy x) clr)
(pixel screen (+ cx x) (- cy y) clr)
(pixel screen (+ cx y) (+ cy x) clr)
(set r err)
(when (<= r y)
2021-06-06 00:49:03 +00:00
(++ y)
(+= err
(+ 1 (* 2 y))))
2021-05-07 19:08:07 +00:00
(when (or (> r x) (> err y))
2021-06-06 00:49:03 +00:00
(++ x)
(+= err
(+ 1 (* 2 x))))
2021-06-04 23:12:30 +00:00
(set continue (< x 0))))))))])
2021-06-06 01:04:05 +00:00
(ring . [(def (ring screen cx cy r0 w clr)
(for r r0 (< r (+ r0 w)) (++ r)
(circle screen cx cy r clr)))])
2021-06-04 23:12:30 +00:00
(circle_rainbow . [(def (circle_rainbow scr cx cy r w)
(ring scr cx cy r w 37)
2021-06-06 00:49:03 +00:00
(+= r w)
(ring scr cx cy r w 33)
2021-06-06 00:49:03 +00:00
(+= r w)
(ring scr cx cy r w 55)
2021-06-06 00:49:03 +00:00
(+= r w)
(ring scr cx cy r w 52)
2021-06-06 00:49:03 +00:00
(+= r w)
(ring scr cx cy r w 47)
2021-06-06 00:49:03 +00:00
(+= r w)
(ring scr cx cy r w 45)
2021-06-06 00:49:03 +00:00
(+= r w)
(ring scr cx cy r w 44)
2021-06-06 00:49:03 +00:00
(+= r w)
(ring scr cx cy r w 42)
2021-06-06 00:49:03 +00:00
(+= r w)
(ring scr cx cy r w 41)
2021-06-06 00:49:03 +00:00
(+= r w)
2021-06-04 23:12:30 +00:00
(ring scr cx cy r w 40))])
2021-06-06 01:04:05 +00:00
(bowboard . [(def (bowboard screen r)
(let xmax (width screen)
(let ymax (height screen)
2021-06-06 01:04:05 +00:00
(let side (* 2 r)
(for y r (< y ymax) (+= y side)
(for x r (< x xmax) (+= x side)
(circle_rainbow screen x y (- r 100) 10)))))))])
2021-06-06 17:54:50 +00:00
(task . [(def (task screen keyboard)
2021-06-06 04:17:23 +00:00
(let xmax (width screen)
(let ymax (height screen)
2021-06-06 17:54:50 +00:00
(for y 0 (< y ymax) (+= y 4)
#(wait keyboard)
(for x 0 (< x xmax) (+= x 1)
2021-06-06 04:17:23 +00:00
(pixel screen x y
# color
2021-06-06 17:54:50 +00:00
(+ 16 (+ (/ x 4) (cube (/ y 4))))))))))])
2021-06-04 23:12:30 +00:00
(main . [(def (main screen keyboard)
2021-06-06 17:54:50 +00:00
(task screen keyboard))])
2021-04-24 04:36:48 +00:00
))
2021-06-06 17:54:50 +00:00
(sandbox . (task screen keyboard))
2021-04-24 04:36:48 +00:00
)