about summary refs log tree commit diff stats
path: root/shell/recursive-definitions.limg
blob: cef17c49445b6b5c314781a4c16b9b6b63819776 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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))
)