about summary refs log tree commit diff stats
path: root/shell/iterative-definitions.limg
blob: 315f12b09cad7641c474418763f4302c2056e1b7 (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
(
  (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))
)