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

1.1       root        1: % from Steve Ward
                      2: 
                      3: webdemo = proc ()
                      4:     ai = array[int]
                      5:     minord = 7
                      6:     maxord = 16
                      7:     minweb = 10
                      8:     maxweb = 45
                      9:     bwidth: int := int$parse(xdemo_default("web", "BorderWidth"))
                     10:        except when not_found, overflow, bad_format: bwidth := 2 end
                     11:     back: x_pixmap := x_display$white()
                     12:     bdr: x_pixmap := x_display$black()
                     13:     linepix: int := BlackPixel
                     14:     if x_display$cells() > 2
                     15:        then begin
                     16:            r, g, b: int := x_parse_color(xdemo_default("web", "Background"))
                     17:            back := x_pixmap$tile(x_display$alloc_color(r, g, b))
                     18:            end except when not_found: end
                     19:            begin
                     20:            r, g, b: int := x_parse_color(xdemo_default("web", "Border"))
                     21:            bdr := x_pixmap$tile(x_display$alloc_color(r, g, b))
                     22:            end except when not_found: end
                     23:            linepix := x_display$alloc_cell()
                     24:        end
                     25:     w: x_window, wid0, hgt0: int := x_cons("web", back, bdr,
                     26:                                           xdemo_geometry(), "=400x400+1+1",
                     27:                                           40, 40, bwidth)
                     28:     w.name := "web"
                     29:     w.input := UnmapWindow
                     30:     x_window$map(w)
                     31:     w.input := ExposeWindow + UnmapWindow
                     32:     ev: event := x_input$empty_event()
                     33:     while true do
                     34:        sx, sy, width, height, bw, ms, wk: int, iw: x_window := x_window$query(w)
                     35:        if width <= 30  cor  height <= 30
                     36:           then x_window$destroy(w)
                     37:                return
                     38:           end
                     39:        height := height - 1
                     40:        width := width - 1
                     41:        pvec: ai := ai$fill(0, maxord * 2, 0)
                     42:        x: ai := ai$fill(0, maxord, 0)
                     43:        y: ai := ai$fill(0, maxord, 0)
                     44:        dx: ai := ai$fill(0, maxord, 0)
                     45:        dy: ai := ai$fill(0, maxord, 0)
                     46:        vlist: x_vlist := x_vlist$create(maxord * 2 * 2)
                     47:        while ~x_input$pending() do
                     48:            x_window$clear(w)
                     49:            if linepix ~= BlackPixel
                     50:               then random_color(linepix) end
                     51:            order: int := minord + random$next(maxord - minord + 1)
                     52:            sweb: int := minweb + (random$next(maxweb) * 2**random$next(4)) / 8
                     53:            for i: int in int$from_to_by(0, 2 * order - 2, 2) do
                     54:                pvec[i] := random$next(width)
                     55:                pvec[i + 1] := random$next(height)
                     56:                end
                     57:            for i: int in int$from_to(0, order - 1) do
                     58:                x[i] := 32 * pvec[2 * i]
                     59:                y[i] := 32 * pvec[2 * i + 1]
                     60:                if i ~= 0
                     61:                   then dx[i - 1] := ((x[i] - x[i - 1]) * 32) / (sweb * 32)
                     62:                        dy[i - 1] := ((y[i] - y[i - 1]) * 32) / (sweb * 32)
                     63:                   end
                     64:                end
                     65:            order := order - 1
                     66:            for j: int in int$from_to_by(0, sweb, 2) do
                     67:                xx: int := int$max(0, int$min(x[0] / 32, width))
                     68:                yy: int := int$max(0, int$min(y[0] / 32, height))
                     69:                x[0] := x[0] + dx[0]
                     70:                y[0] := y[0] + dy[0]
                     71:                idx: int := 1
                     72:                for i: int in int$from_to(1, order - 1) do
                     73:                    nx: int := int$max(0, int$min(x[i] / 32, width))
                     74:                    ny: int := int$max(0, int$min(y[i] / 32, height))
                     75:                    x_vlist$store(vlist, idx, xx, yy, VertexDontDraw)
                     76:                    x_vlist$store(vlist, idx + 1, nx, ny, VertexDrawLastPoint)
                     77:                    idx := idx + 2
                     78:                    xx := nx
                     79:                    yy := ny
                     80:                    x[i] := x[i] + dx[i]
                     81:                    y[i] := y[i] + dy[i]
                     82:                    end
                     83:                j := j + 1
                     84:                if j > sweb
                     85:                   then x_window$draw(w, vlist, idx - 1, linepix, 1, 1,
                     86:                                      GXcopy, -1)
                     87:                        break
                     88:                   end
                     89:                i: int := order - 1
                     90:                xx := int$max(0, int$min(x[i] / 32, width))
                     91:                yy := int$max(0, int$min(y[i] / 32, height))
                     92:                x[i] := x[i] + dx[i]
                     93:                y[i] := y[i] + dy[i]
                     94:                for i in int$from_to_by(i - 1, 0, -1) do
                     95:                    nx: int := int$max(0, int$min(x[i] / 32, width))
                     96:                    ny: int := int$max(0, int$min(y[i] / 32, height))
                     97:                    x_vlist$store(vlist, idx, xx, yy, VertexDontDraw)
                     98:                    x_vlist$store(vlist, idx + 1, nx, ny, VertexDrawLastPoint)
                     99:                    idx := idx + 2
                    100:                    xx := nx
                    101:                    yy := ny
                    102:                    x[i] := x[i] + dx[i]
                    103:                    y[i] := y[i] + dy[i]
                    104:                    end
                    105:                x_window$draw(w, vlist, idx - 1, linepix, 1, 1, GXcopy, -1)
                    106:                end
                    107:            x_flush()
                    108:            sleep(2)
                    109:            end
                    110:        x_input$deq(ev)
                    111:        if ev.kind = UnmapWindow
                    112:           then x_input$deq(ev) end
                    113:        end
                    114:     end webdemo

unix.superglobalmegacorp.com

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