|
|
1.1 ! root 1: % from Symbolics? ! 2: ! 3: rec = record[x1, y1, x2, y2: int] ! 4: ar = array[rec] ! 5: ! 6: qixdemo = proc () ! 7: vsize = 100 * 2 ! 8: bwidth: int := int$parse(xdemo_default("qix", "BorderWidth")) ! 9: except when not_found, overflow, bad_format: bwidth := 2 end ! 10: back: x_pixmap := x_display$white() ! 11: bdr: x_pixmap := x_display$black() ! 12: plane: int := 1 ! 13: if x_display$cells() > 2 ! 14: then begin ! 15: r, g, b: int := x_parse_color(xdemo_default("qix", "Border")) ! 16: bdr := x_pixmap$tile(x_display$alloc_color(r, g, b)) ! 17: end except when not_found: end ! 18: cback: string := xdemo_default("qix", "Background") ! 19: except when not_found: cback := "" end ! 20: cfore: string := xdemo_default("qix", "Foreground") ! 21: except when not_found: cfore := "" end ! 22: if string$empty(cback) cand string$empty(cfore) ! 23: then exit done end ! 24: pixs: pixellist ! 25: pixs, plane := x_display$alloc_cells(1, 1, false) ! 26: back := x_pixmap$tile(pixs[1]) ! 27: r, g, b: int ! 28: if string$empty(cback) ! 29: then r, g, b := x_display$query_color(WhitePixel) ! 30: else r, g, b := x_parse_color(cback) ! 31: end ! 32: x_display$store_color(pixs[1], r, g, b) ! 33: if string$empty(cfore) ! 34: then r, g, b := x_display$query_color(BlackPixel) ! 35: else r, g, b := x_parse_color(cfore) ! 36: end ! 37: x_display$store_color(pixs[1] + plane, r, g, b) ! 38: end except when done: end ! 39: w: x_window, wid0, hgt0: int := x_cons("qix", back, bdr, ! 40: xdemo_geometry(), "=400x400+1+1", ! 41: 40, 40, bwidth) ! 42: w.name := "qix" ! 43: w.input := UnmapWindow ! 44: x_window$map(w) ! 45: w.input := ExposeWindow + UnmapWindow ! 46: vlist: x_vlist := x_vlist$create(vsize) ! 47: ev: event := x_input$empty_event() ! 48: while true do ! 49: x_window$clear(w) ! 50: sx, sy, width, height, bw, ms, wk: int, iw: x_window := x_window$query(w) ! 51: if width <= 30 cor height <= 30 ! 52: then x_window$destroy(w) ! 53: return ! 54: end ! 55: hsize: int := 100 + random$next(int$min(width, height) / 8) ! 56: h: ar := ar$fill_copy(0, hsize, rec${x1, y1, x2, y2: 0}) ! 57: i: int := 0 ! 58: idx: int := 1 ! 59: x1: int := 0 ! 60: y1: int := height - 1 ! 61: x2: int := 0 ! 62: y2: int := height - 1 ! 63: dx1: int := 5 ! 64: dy1: int := 12 ! 65: dx2: int := 12 ! 66: dy2: int := 5 ! 67: first: bool := true ! 68: while ~x_input$pending() do ! 69: r: rec := h[i] ! 70: if ~first ! 71: then x_vlist$store(vlist, idx, r.x1, r.y1, VertexDontDraw) ! 72: idx := idx + 1 ! 73: x_vlist$store(vlist, idx, r.x2, r.y2, VertexDrawLastPoint) ! 74: if idx = vsize ! 75: then x_window$draw(w, vlist, vsize, 0, 1, 1, ! 76: GXinvert, plane) ! 77: idx := 1 ! 78: else idx := idx + 1 ! 79: end ! 80: end ! 81: r.x1 := x1 ! 82: r.y1 := y1 ! 83: r.x2 := x2 ! 84: r.y2 := y2 ! 85: x_vlist$store(vlist, idx, x1, y1, VertexDontDraw) ! 86: idx := idx + 1 ! 87: x_vlist$store(vlist, idx, x2, y2, VertexDrawLastPoint) ! 88: if idx = vsize ! 89: then x_window$draw(w, vlist, vsize, 0, 1, 1, GXinvert, plane) ! 90: idx := 1 ! 91: else idx := idx + 1 ! 92: end ! 93: i := i + 1 ! 94: if i = hsize ! 95: then i := 0 ! 96: first := false ! 97: end ! 98: dx1 := int$max(-12, int$min(dx1 + random$next(3) - 1, 12)) ! 99: x1 := x1 + dx1 ! 100: if x1 >= width cor x1 < 0 ! 101: then x1 := x1 - 2 * dx1 ! 102: dx1 := -dx1 ! 103: end ! 104: dy1 := int$max(-12, int$min(dy1 + random$next(3) - 1, 12)) ! 105: y1 := y1 + dy1 ! 106: if y1 >= height cor y1 < 0 ! 107: then y1 := y1 - 2 * dy1 ! 108: dy1 := -dy1 ! 109: end ! 110: dx2 := int$max(-12, int$min(dx2 + random$next(3) - 1, 12)) ! 111: x2 := x2 + dx2 ! 112: if x2 >= width cor x2 < 0 ! 113: then x2 := x2 - 2 * dx2 ! 114: dx2 := -dx2 ! 115: end ! 116: dy2 := int$max(-12, int$min(dy2 + random$next(3) - 1, 12)) ! 117: y2 := y2 + dy2 ! 118: if y2 >= height cor y2 < 0 ! 119: then y2 := y2 - 2 * dy2 ! 120: dy2 := -dy2 ! 121: end ! 122: end ! 123: x_input$deq(ev) ! 124: if ev.kind = UnmapWindow ! 125: then x_input$deq(ev) end ! 126: end ! 127: end qixdemo
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.