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

1.1       root        1: pgray = "\252\252\125\125\252\252\125\125\252\252\125\125\252\252\125\125" ||
                      2:        "\252\252\125\125\252\252\125\125\252\252\125\125\252\252\125\125"
                      3: pclear = "\000\000\000\000\000\000\370\037\010\020\010\020\010\020\010\020" ||
                      4:         "\010\020\010\020\010\020\010\020\370\037\000\000\000\000\000\000"
                      5: pset =  "\377\377\377\377\377\377\007\340\367\357\367\357\367\357\367\357" ||
                      6:        "\367\357\367\357\367\357\367\357\007\340\377\377\377\377\377\377"
                      7: pdoff = "\000\000\000\000\000\000\230\031\000\020\000\000\010\000\010\020" ||
                      8:        "\000\020\000\000\010\020\010\020\140\006\000\000\000\000\000\000"
                      9: pdon =  "\377\377\377\377\377\377\147\346\377\357\377\377\367\377\367\357" ||
                     10:        "\377\357\377\377\367\357\367\357\237\371\377\377\377\377\377\377"
                     11: pdot =  "\377\377\377\377\377\377\257\352\367\377\377\357\367\377\377\357" ||
                     12:        "\367\377\377\357\367\377\377\357\127\365\377\377\377\377\377\377"
                     13: 
                     14: qs = sequence[string]
                     15: 
                     16: digits = qs$[" 0", " 1", " 2", " 3", " 4", " 5", " 6", " 7",
                     17:             " 8", " 9", "10", "11", "12", "13", "14", "15"]
                     18: 
                     19: funcs = qs$[" 0", " &", "&~", " s", "~&", " d", " ^", " |",
                     20:            "n|", "~^", "~d", "|~", "~s", "~|", "n&", " 1"]
                     21: 
                     22: drawdemo = proc ()
                     23:     vcount = 500
                     24:     x_keymap$load("")
                     25:     bwidth: int := int$parse(xdemo_default("draw", "BorderWidth"))
                     26:        except when not_found, overflow, bad_format: bwidth := 2 end
                     27:     back: x_pixmap := x_display$white()
                     28:     fore: x_pixmap := x_display$black()
                     29:     bdr: x_pixmap := x_display$black()
                     30:     plane: int := 1
                     31:     backpix: int := WhitePixel
                     32:     drawpix: int := BlackPixel
                     33:     mousepix: int := BlackPixel
                     34:     if x_display$cells() > 2
                     35:        then begin
                     36:            r, g, b: int := x_parse_color(xdemo_default("draw", "Border"))
                     37:            bdr := x_pixmap$tile(x_display$alloc_color(r, g, b))
                     38:            end except when not_found: end
                     39:            cback: string := xdemo_default("draw", "Background")
                     40:               except when not_found: cback := "" end
                     41:            cfore: string := xdemo_default("draw", "Foreground")
                     42:               except when not_found: cfore := "" end
                     43:            if string$empty(cback)  cand  string$empty(cfore)
                     44:               then exit done end
                     45:            pixs: pixellist
                     46:            pixs, plane := x_display$alloc_cells(1, 1, false)
                     47:            drawpix := pixs[1]
                     48:            fore := x_pixmap$tile(drawpix)
                     49:            backpix := drawpix + plane
                     50:            back := x_pixmap$tile(backpix)
                     51:            r, g, b: int
                     52:            if string$empty(cback)
                     53:               then r, g, b := x_display$query_color(WhitePixel)
                     54:               else r, g, b := x_parse_color(cback)
                     55:               end
                     56:            x_display$store_color(backpix, r, g, b)
                     57:            if string$empty(cfore)
                     58:               then r, g, b := x_display$query_color(BlackPixel)
                     59:               else r, g, b := x_parse_color(cfore)
                     60:               end
                     61:            x_display$store_color(drawpix, r, g, b)
                     62:            begin
                     63:            r, g, b := x_parse_color(xdemo_default("draw", "Mouse"))
                     64:            mousepix := x_display$alloc_color(r, g, b)
                     65:            end except when not_found: end
                     66:        end except when done: end
                     67:     w: x_window, wid0, hgt0: int := x_cons("draw", back, bdr,
                     68:                                           xdemo_geometry(), "=400x400+1+1",
                     69:                                           40, 40, bwidth)
                     70:     w.name := "draw"
                     71:     x_window$map(w)
                     72:     sx, sy, wd, ht, bw, sm, wk: int, iw: x_window := x_window$query(w)
                     73:     w.cursor := x_cursor$scons(cross_width, cross_height, cross, cross_mask,
                     74:                               backpix, mousepix, cross_x, cross_y, GXcopy)
                     75:     white: x_pixmap := back
                     76:     black: x_pixmap := fore
                     77:     bm: x_bitmap := x_bitmap$screate(16, 16, pgray)
                     78:     gray: x_pixmap := x_pixmap$create(bm, backpix, drawpix)
                     79:     bm := x_bitmap$screate(16, 16, pclear)
                     80:     clear: x_pixmap := x_pixmap$create(bm, backpix, drawpix)
                     81:     bm := x_bitmap$screate(16, 16, pset)
                     82:     set: x_pixmap := x_pixmap$create(bm, backpix, drawpix)
                     83:     bm := x_bitmap$screate(16, 16, pdoff)
                     84:     doff: x_pixmap := x_pixmap$create(bm, backpix, drawpix)
                     85:     bm := x_bitmap$screate(16, 16, pdon)
                     86:     don: x_pixmap := x_pixmap$create(bm, backpix, drawpix)
                     87:     bm := x_bitmap$screate(16, 16, pdot)
                     88:     dot: x_pixmap := x_pixmap$create(bm, backpix, drawpix)
                     89:     wsel: x_window := x_window$create(0, 0, 16, 16, set, w, 0, white)
                     90:     wdot: x_window := x_window$create(42, 0, 16, 16, dot, w, 0, white)
                     91:     wclear: x_window := x_window$create(58, 0, 16, 16, clear, w, 0, white)
                     92:     wset: x_window := x_window$create(74, 0, 16, 16, set, w, 0, white)
                     93:     wdoff: x_window := x_window$create(90, 0, 16, 16, doff, w, 0, white)
                     94:     wdon: x_window := x_window$create(106, 0, 16, 16, don, w, 0, white)
                     95:     wblack: x_window := x_window$create(122, 0, 16, 16, black, w, 0, white)
                     96:     wwhite: x_window := x_window$create(138, 0, 16, 16, white, w, 0, white)
                     97:     wgray: x_window := x_window$create(154, 0, 16, 16, gray, w, 0, white)
                     98:     wheight: x_window := x_window$create(200, -1, 16, 16, white, w, 1, black)
                     99:     wwidth: x_window := x_window$create(232, -1, 16, 16, white, w, 1, black)
                    100:     wfunc: x_window := x_window$create(264, -1, 16, 16, white, w, 1, black)
                    101:     wdraw: x_window := x_window$create(-1, 16, wd, ht - 16, white, w,
                    102:                                       1, black)
                    103:     x_window$map_subwindows(w)
                    104:     fn: string := xdemo_default("draw", "BodyFont")
                    105:        except when not_found: fn := "timrom10i" end
                    106:     font: x_font := x_font$create(fn)
                    107:     tfont: x_font := x_font$create("6x10")
                    108:     none: x_window := x_window$none()
                    109:     nobit: x_bitmap := x_bitmap$none()
                    110:     pat: x_pixmap := set
                    111:     wclear.input := ButtonPressed
                    112:     wset.input := ButtonPressed
                    113:     wdoff.input := ButtonPressed
                    114:     wdon.input := ButtonPressed
                    115:     wdot.input := ButtonPressed
                    116:     wblack.input := ButtonPressed
                    117:     wwhite.input := ButtonPressed
                    118:     wgray.input := ButtonPressed
                    119:     wheight.input := KeyPressed
                    120:     wwidth.input := KeyPressed
                    121:     wfunc.input := KeyPressed
                    122:     wdraw.input := ButtonPressed + ExposeWindow + KeyPressed
                    123:     vlst: x_vlist := x_vlist$create(vcount + 1)
                    124:     e: event := x_input$empty_event()
                    125:     e.kind := ExposeWindow
                    126:     x_input$enq(e)
                    127:     width: int := 1
                    128:     height: int := 1
                    129:     func: int := GXcopy
                    130:     lastx: int := -1
                    131:     lasty: int := -1
                    132:     curx: int := -1
                    133:     while true do
                    134:        n: int := 0
                    135:        while n < vcount do
                    136:            x_input$deq(e)
                    137:            if e.kind = ExposeWindow
                    138:               then n := 0
                    139:                    nht, nwd: int
                    140:                    sx, sy, nwd, nht, bw, sm, wk, iw := x_window$query(w)
                    141:                    if nht ~= ht  cor  nwd ~= wd
                    142:                       then wd := nwd
                    143:                            ht := nht
                    144:                            if wd <= 40  cor  ht <= 40
                    145:                               then x_window$destroy(w)
                    146:                                    return
                    147:                               end
                    148:                            x_window$change(wdraw, wd, ht - 16)
                    149:                       end
                    150:                    x_window$text(wwidth, digits[width + 1], tfont,
                    151:                                  drawpix, backpix, 3, 2)
                    152:                    x_window$text(w, "x", tfont, drawpix, backpix,
                    153:                                  221, 2)
                    154:                    x_window$text(wheight, digits[height + 1], tfont,
                    155:                                  drawpix, backpix, 3, 2)
                    156:                    x_window$text(wfunc, funcs[func + 1], tfont,
                    157:                                  drawpix, backpix, 3, 2)
                    158:                    break
                    159:               end
                    160:            if e.kind = KeyPressed  cand
                    161:               (e.win = wwidth  cor  e.win = wheight  cor  e.win = wfunc)
                    162:               then c: char := x_keymap$getc(e.value, e.mask)
                    163:                       except when none, multi (*): continue end
                    164:                    i: int
                    165:                    if c >= '0'  cand  c <= '9'
                    166:                       then i := char$c2i(c) - char$c2i('0')
                    167:                     elseif c >= 'a'  cand  c <= 'f'
                    168:                       then i := char$c2i(c) - char$c2i('a') + 10
                    169:                     else continue end
                    170:                    if e.win = wwidth
                    171:                       then if i = 0
                    172:                               then continue end
                    173:                            width := i
                    174:                     elseif e.win = wheight
                    175:                       then if i = 0
                    176:                               then continue end
                    177:                            height := i
                    178:                     else func := i end
                    179:                    strs: qs := digits
                    180:                    if e.win = wfunc
                    181:                       then strs := funcs end
                    182:                    x_window$text(e.win, strs[i + 1], tfont,
                    183:                                  drawpix, backpix, 3, 2)
                    184:                    continue
                    185:               end
                    186:            if e.kind = KeyPressed
                    187:               then s: string := x_keymap$gets(e.value, e.mask)
                    188:                       except when none: continue end
                    189:                    if e.x ~= lastx  cor  e.y ~= lasty
                    190:                       then lastx := e.x
                    191:                            lasty := e.y
                    192:                            curx := lastx
                    193:                       end
                    194:                    pix: int := backpix
                    195:                    if pat = set  cor  pat = don  cor  pat = black
                    196:                       then pix := drawpix end
                    197:                    x_window$text_mask_pad(wdraw, s, font, pix, 0, 0,
                    198:                                           curx, lasty, func, plane)
                    199:                    curx := curx + x_font$width(font, s)
                    200:                    continue
                    201:               end
                    202:            if e.win ~= wdraw
                    203:               then if e.win = wset
                    204:                       then pat := set
                    205:                     elseif e.win = wclear
                    206:                       then pat := clear
                    207:                     elseif e.win = wdon
                    208:                       then pat := don
                    209:                     elseif e.win = wdoff
                    210:                       then pat := doff
                    211:                     elseif e.win = wdot
                    212:                       then pat := dot
                    213:                     elseif e.win = wblack
                    214:                       then pat := black
                    215:                     elseif e.win = wwhite
                    216:                       then pat := white
                    217:                     elseif e.win = wgray
                    218:                       then pat := gray
                    219:                     end
                    220:                    wsel.background := pat
                    221:                    x_window$clear(wsel)
                    222:                    continue
                    223:               end
                    224:            if e.kind = ButtonPressed  cand  e.value = MiddleButton
                    225:               then break end
                    226:            x_window$pix_fill(wdraw, 0, nobit, e.x, e.y, 2, 2, GXinvert, plane)
                    227:            n := n + 1
                    228:            if e.value = LeftButton
                    229:               then x_vlist$store(vlst, n, e.x, e.y, VertexCurved)
                    230:               else x_vlist$store(vlst, n, e.x, e.y, 0)
                    231:               end
                    232:            end
                    233:        for i: int in int$from_to(1, n) do
                    234:            x, y, f: int := x_vlist$fetch(vlst, i)
                    235:            x_window$pix_fill(wdraw, 0, nobit, x, y, 2, 2, GXinvert, plane)
                    236:            end
                    237:        if n > 2
                    238:           then x, y, f: int := x_vlist$fetch(vlst, 1)
                    239:                x_vlist$store(vlst, 1, x, y, f + VertexStartClosed)
                    240:                x_vlist$store(vlst, n + 1, x, y, f + VertexEndClosed)
                    241:                n := n + 1
                    242:         elseif n > 0
                    243:           then x, y, f: int := x_vlist$fetch(vlst, n)
                    244:                x_vlist$store(vlst, n, x, y, f + VertexDrawLastPoint)
                    245:         end
                    246:        if n = 0
                    247:           then x_window$clear(wdraw)
                    248:         elseif pat = set
                    249:           then x_window$draw(wdraw, vlst, n, drawpix, width, height,
                    250:                              func, plane)
                    251:         elseif pat = clear
                    252:           then x_window$draw(wdraw, vlst, n, backpix, width, height,
                    253:                              func, plane)
                    254:         elseif pat = don
                    255:           then x_window$draw_dashed(wdraw, vlst, n, drawpix, width, height,
                    256:                                     1, 2, 4, func, plane)
                    257:         elseif pat = doff
                    258:           then x_window$draw_dashed(wdraw, vlst, n, backpix, width, height,
                    259:                                     1, 2, 4, func, plane)
                    260:         elseif pat = dot
                    261:           then x_window$draw_patterned(wdraw, vlst, n, 1, drawpix,
                    262:                                        width, height, 1, 2, 2, func, plane)
                    263:         elseif pat = black  cand  n > 2
                    264:           then x_window$draw_filled(wdraw, vlst, n, drawpix, func, plane)
                    265:         elseif pat = white  cand  n > 2
                    266:           then x_window$draw_filled(wdraw, vlst, n, backpix, func, plane)
                    267:         elseif pat = gray  cand  n > 2
                    268:           then x_window$draw_tiled(wdraw, vlst, n, gray, func, plane)
                    269:         end
                    270:        end
                    271:     end drawdemo

unix.superglobalmegacorp.com

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