Annotation of 43BSD/contrib/X/xdemo/motion.clu, revision 1.1.1.1

1.1       root        1: motiondemo = proc ()
                      2:     vcount = 500
                      3:     bwidth: int := int$parse(xdemo_default("motion", "BorderWidth"))
                      4:        except when not_found, overflow, bad_format: bwidth := 2 end
                      5:     back: x_pixmap := x_display$white()
                      6:     bdr: x_pixmap := x_display$black()
                      7:     plane: int := 1
                      8:     backpix: int := WhitePixel
                      9:     linepix: int := BlackPixel
                     10:     mousepix: int := BlackPixel
                     11:     if x_display$cells() > 2
                     12:        then begin
                     13:            r, g, b: int := x_parse_color(xdemo_default("motion", "Border"))
                     14:            bdr := x_pixmap$tile(x_display$alloc_color(r, g, b))
                     15:            end except when not_found: end
                     16:            pixs: pixellist
                     17:            pixs, plane := x_display$alloc_cells(1, 1, false)
                     18:            backpix := pixs[1]
                     19:            back := x_pixmap$tile(backpix)
                     20:            linepix := backpix + plane
                     21:            r, g, b: int := x_parse_color(xdemo_default("motion", "Background"))
                     22:               except when not_found:
                     23:                           r, g, b := x_display$query_color(WhitePixel)
                     24:                      end
                     25:            x_display$store_color(backpix, r, g, b)
                     26:            random_color(linepix)
                     27:            begin
                     28:            r, g, b := x_parse_color(xdemo_default("motion", "Mouse"))
                     29:            mousepix := x_display$alloc_color(r, g, b)
                     30:            end except when not_found: end
                     31:        end
                     32:     w: x_window, wid0, hgt0: int := x_cons("motion", back, bdr,
                     33:                                           xdemo_geometry(), "=400x400+1+1",
                     34:                                           40, 40, bwidth)
                     35:     w.name := "motion"
                     36:     w.input := ButtonPressed + UnmapWindow
                     37:     x_window$map(w)
                     38:     cr: x_cursor := x_cursor$scons(cross_width, cross_height,
                     39:                                   cross, cross_mask,
                     40:                                   backpix, mousepix, cross_x, cross_y,
                     41:                                   GXcopy)
                     42:     w.cursor := cr
                     43:     w.input := ButtonPressed + ExposeWindow + UnmapWindow
                     44:     vlist: x_vlist := x_vlist$create(vcount + 1)
                     45:     ovlist: x_vlist := x_vlist$create(vcount + 1)
                     46:     sx, sy, width, height, bw, ms, wk: int, iw: x_window := x_window$query(w)
                     47:     height := height - 1
                     48:     width := width - 1
                     49:     ev: event := x_input$empty_event()
                     50:     nobit: x_bitmap := x_bitmap$none()
                     51:     while true do
                     52:        n: int := 0
                     53:        while n < vcount do
                     54:            x_input$deq(ev)
                     55:            if ev.kind = ExposeWindow
                     56:               then sx, sy, width, height, bw, ms, wk, iw := x_window$query(w)
                     57:                    if width <= 30  cor  height <= 30
                     58:                       then x_window$destroy(w)
                     59:                            return
                     60:                       end
                     61:                    height := height - 1
                     62:                    width := width - 1
                     63:                    x_window$clear(w)
                     64:                    for i: int in int$from_to(1, n) do
                     65:                        x, y, flags: int := x_vlist$fetch(vlist, i)
                     66:                        x_window$pix_fill(w, 0, nobit, x, y, 2, 2, GXinvert, 1)
                     67:                        end
                     68:                    continue
                     69:             elseif ev.kind = UnmapWindow
                     70:               then continue end
                     71:            if ev.value = MiddleButton
                     72:               then break end
                     73:            x_window$pix_fill(w, 0, nobit, ev.x, ev.y, 2, 2, GXinvert, 1)
                     74:            n := n + 1
                     75:            flags: int := 0
                     76:            if ev.value = LeftButton
                     77:               then flags := VertexCurved end
                     78:            x_vlist$store(vlist, n, ev.x, ev.y, flags)
                     79:            end
                     80:        x_window$clear(w)
                     81:        if n > 2
                     82:           then x, y, flags: int := x_vlist$fetch(vlist, 1)
                     83:                x_vlist$store(vlist, 1, x, y, flags + VertexStartClosed)
                     84:                n := n + 1
                     85:                x_vlist$store(vlist, n, x, y, flags + VertexEndClosed)
                     86:         elseif n < 2
                     87:           then continue end
                     88:        x_window$draw(w, vlist, n, 0, 1, 1, GXinvert, 1)
                     89:        xd: int := -1
                     90:        dx: int := 1
                     91:        yd: int := -1
                     92:        dy: int := 1
                     93:        count: int := 0
                     94:        while true do
                     95:            if xd < 0
                     96:               then xd := random$next(width)
                     97:                    dx := random$next(2)
                     98:               else xd := xd - 1
                     99:               end
                    100:            if yd < 0
                    101:               then yd := random$next(height)
                    102:                    dy := random$next(2)
                    103:               else yd := yd - 1
                    104:               end
                    105:            for i: int in int$from_to(1, n - 1) do
                    106:                xx, yy, flags: int := x_vlist$fetch(vlist, i)
                    107:                x_vlist$store(ovlist, i, xx, yy, flags)
                    108:                x: int := random$next(5)
                    109:                if dx = 0
                    110:                   then x := -x end
                    111:                x := x + xx
                    112:                if x < 0
                    113:                   then x := 0
                    114:                        xd := -1
                    115:                        if linepix ~= BlackPixel
                    116:                           then random_color(linepix) end
                    117:                 elseif x > width
                    118:                   then x := width
                    119:                        xd := -1
                    120:                        if linepix ~= BlackPixel
                    121:                           then random_color(linepix) end
                    122:                 end
                    123:                y: int := random$next(5)
                    124:                if dy = 0
                    125:                   then y := -y end
                    126:                y := y + yy
                    127:                if y < 0
                    128:                   then y := 0
                    129:                        yd := -1
                    130:                        if linepix ~= BlackPixel
                    131:                           then random_color(linepix) end
                    132:                 elseif y > height
                    133:                   then y := height
                    134:                        yd := -1
                    135:                        if linepix ~= BlackPixel
                    136:                           then random_color(linepix) end
                    137:                 end
                    138:                x_vlist$store(vlist, i, x, y, flags)
                    139:                end
                    140:            if n > 2
                    141:               then x, y, flags: int := x_vlist$fetch(vlist, n)
                    142:                    x_vlist$store(ovlist, n, x, y, flags)
                    143:                    x, y, flags := x_vlist$fetch(vlist, 1)
                    144:                    x_vlist$store(vlist, n, x, y,
                    145:                                  flags + (VertexEndClosed - VertexStartClosed))
                    146:               end
                    147:            x_window$draw(w, vlist, n, 0, 1, 1, GXinvert, 1)
                    148:            x_window$draw(w, ovlist, n, 0, 1, 1, GXinvert, 1)
                    149:            if count = 4
                    150:               then count := 0
                    151:               else count := count + 1
                    152:               end
                    153:            if count ~= 0  cor  ~x_input$pending()
                    154:               then continue end
                    155:            x_input$deq(ev)
                    156:            if ev.kind = UnmapWindow
                    157:               then x_input$deq(ev) end
                    158:            if ev.kind = ExposeWindow
                    159:               then sx, sy, width, height, bw, ms, wk, iw := x_window$query(w)
                    160:                    if width <= 30  cor  height <= 30
                    161:                       then x_window$destroy(w)
                    162:                            return
                    163:                       end
                    164:                    height := height - 1
                    165:                    width := width - 1
                    166:                    x_window$clear(w)
                    167:                    x_window$draw(w, vlist, n, 0, 1, 1, GXinvert, 1)
                    168:             elseif ev.value = MiddleButton
                    169:               then break end
                    170:            end
                    171:        end
                    172:     end motiondemo

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.