Annotation of 43BSD/contrib/X/CLUlib/sun/x_display.clu, revision 1.1

1.1     ! root        1: % Copyright    Barbara Liskov    1985, 1986
        !             2: 
        !             3: x_display = cluster is init,
        !             4:                       root, width, height, device, protocol, planes, cells,
        !             5:                       grab, ungrab,
        !             6:                       alloc_color, alloc_cell, alloc_cells,
        !             7:                       free_color, free_colors,
        !             8:                       store_color, store_colors, query_color, lookup_color,
        !             9:                       black, white
        !            10: 
        !            11: rep = null
        !            12: 
        !            13: own base: x_window
        !            14: own rwidth: int
        !            15: own rheight: int
        !            16: own devid: int
        !            17: own numproto: int
        !            18: own numplanes: int
        !            19: own numcells: int
        !            20: own haveblack: bool
        !            21: own blackp: x_pixmap
        !            22: own havewhite: bool
        !            23: own whitep: x_pixmap
        !            24: own colbuf: _bytevec
        !            25: 
        !            26: init = proc (display: string) signals (error(string))
        !            27:     qw = sequence[_wordvec]
        !            28:     if string$empty(display)
        !            29:        then display := _environ("DISPLAY")
        !            30:               except when not_found: end
        !            31:        end
        !            32:     num: int := string$indexc(':', display)
        !            33:     if num ~= 0
        !            34:        then display, num := string$substr(display, 1, num - 1),
        !            35:                            int$parse(string$rest(display, num + 1))
        !            36:        end
        !            37:     addrs: qw := qw$new()
        !            38:     if string$empty(display)  cor  display = "unix"
        !            39:        then addrs := qw$addh(addrs,
        !            40:                             _cvt[string, _wordvec]("\000\001/tmp/X" ||
        !            41:                                                    int$unparse(num)))
        !            42:             addrs := qw$addh(addrs,
        !            43:                             _cvt[string, _wordvec]("\000\001/dev/X" ||
        !            44:                                                    int$unparse(num)))
        !            45:        end
        !            46:     if string$empty(display)  cor  display ~= "unix"
        !            47:        then if string$empty(display)
        !            48:               then display := _host_name() end
        !            49:            l, r: int := host_address(display)
        !            50:               except when not_found, bad_address: signal error("bad host") end
        !            51:            addr: _wordvec := _wordvec$create(4)
        !            52:            _wordvec$wstore(addr, 1, 2)
        !            53:            num := num + 5900
        !            54:            _wordvec$bstore(addr, 3, num / 2**8)
        !            55:            _wordvec$bstore(addr, 4, num)
        !            56:            _wordvec$bstore(addr, 5, r)
        !            57:            _wordvec$bstore(addr, 6, r / 2**8)
        !            58:            _wordvec$bstore(addr, 7, l)
        !            59:            _wordvec$bstore(addr, 8, l / 2**8)
        !            60:            addrs := qw$addh(addrs, addr)
        !            61:        end
        !            62:     err: string := ""
        !            63:     for addr: _wordvec in qw$elements(addrs) do
        !            64:        x_buf$init(addr)
        !            65:           except when error (why: string):
        !            66:                       err := why
        !            67:                       continue
        !            68:                  end
        !            69:        err := ""
        !            70:        break
        !            71:        end
        !            72:     if ~string$empty(err)
        !            73:        then signal error(err) end
        !            74:     x_buf$setup(x_setup, 0, 0, 0)
        !            75:     x_buf$receive()
        !            76:     base := _cvt[int, x_window](x_buf$get_lp0())
        !            77:     rwidth := 0
        !            78:     rheight := 0
        !            79:     numproto := x_buf$get_sp2()
        !            80:     devid := x_buf$get_sp3()
        !            81:     numplanes := x_buf$get_sp4()
        !            82:     numcells := x_buf$get_sp5() // 2**16
        !            83:     haveblack := false
        !            84:     havewhite := false
        !            85:     colbuf := _bytevec$create(8)
        !            86:     x_input$init()
        !            87:     end init
        !            88: 
        !            89: root = proc () returns (x_window)
        !            90:     return(base)
        !            91:     end root
        !            92: 
        !            93: width = proc () returns (int)
        !            94:     if rwidth = 0
        !            95:        then x, y, w, h, b, s, k: int, i: x_window := x_window$query(base)
        !            96:            rwidth := w
        !            97:            rheight := h
        !            98:        end
        !            99:     return(rwidth)
        !           100:     end width
        !           101: 
        !           102: height = proc () returns (int)
        !           103:     if rheight = 0
        !           104:        then x, y, w, h, b, s, k: int, i: x_window := x_window$query(base)
        !           105:            rwidth := w
        !           106:            rheight := h
        !           107:        end
        !           108:     return(rheight)
        !           109:     end height
        !           110: 
        !           111: device = proc () returns (int)
        !           112:     return(devid)
        !           113:     end device
        !           114: 
        !           115: protocol = proc () returns (int)
        !           116:     return(numproto)
        !           117:     end protocol
        !           118: 
        !           119: planes = proc () returns (int)
        !           120:     return(numplanes)
        !           121:     end planes
        !           122: 
        !           123: cells = proc () returns (int)
        !           124:     return(numcells)
        !           125:     end cells
        !           126: 
        !           127: grab = proc ()
        !           128:     x_buf$setup(x_grabserver, 0, 0, 0)
        !           129:     end grab
        !           130: 
        !           131: ungrab = proc ()
        !           132:     x_buf$setup(x_ungrabserver, 0, 0, 0)
        !           133:     end ungrab
        !           134: 
        !           135: alloc_color = proc (red, green, blue: int) returns (int)
        !           136:                                           signals (error(string))
        !           137:     x_buf$setup(x_getcolor, 0, 0, 0)
        !           138:     x_buf$set_s0123(red, green, blue, 0)
        !           139:     x_buf$receive()
        !           140:        resignal error
        !           141:     return(x_buf$get_sp0() // 2**16)
        !           142:     end alloc_color
        !           143: 
        !           144: alloc_cell = proc () returns (int) signals (error(string))
        !           145:     x_buf$setup(x_getcolorcells, 0, 0, 0)
        !           146:     x_buf$set_s01(1, 0)
        !           147:     x_buf$receive()
        !           148:        resignal error
        !           149:     b: _bytevec := _bytevec$create(2)
        !           150:     x_buf$receive_data(b)
        !           151:     return(_wordvec$wfetch(b2w(b), 1))
        !           152:     end alloc_cell
        !           153: 
        !           154: alloc_cells = proc (ncolors, nplanes: int, contig: bool)
        !           155:                               returns (pixellist, int) signals (error(string))
        !           156:     if contig
        !           157:        then x_buf$setup(x_getcolorcells, 1, 0, 0)
        !           158:        else x_buf$setup(x_getcolorcells, 0, 0, 0)
        !           159:        end
        !           160:     x_buf$set_s01(ncolors, nplanes)
        !           161:     x_buf$receive()
        !           162:        resignal error
        !           163:     mask: int := x_buf$get_sp0() // 2**16
        !           164:     pixels: pixellist := pixellist$fill(1, ncolors, 0)
        !           165:     if ncolors > 0
        !           166:        then b: _bytevec := _bytevec$create(ncolors * 2)
        !           167:            x_buf$receive_data(b)
        !           168:            for i: int in int$from_to_by(ncolors, 1, -1) do
        !           169:                pixels[i] := _wordvec$wfetch(b2w(b), i * 2 - 1)
        !           170:                end
        !           171:        end
        !           172:     return(pixels, mask)
        !           173:     end alloc_cells
        !           174: 
        !           175: free_color = proc (pixel: int)
        !           176:     x_buf$setup(x_freecolors, 0, 0, 0)
        !           177:     x_buf$set_s0(1)
        !           178:     b: _bytevec := _bytevec$create(2)
        !           179:     _wordvec$wstore(b2w(b), 1, pixel)
        !           180:     x_buf$send_data(b, 1, 2)
        !           181:     end free_color
        !           182: 
        !           183: free_colors = proc (pixels: pixellist, mask: int)
        !           184:     x_buf$setup(x_freecolors, 0, mask, 0)
        !           185:     x_buf$set_s0(pixellist$size(pixels))
        !           186:     b: _bytevec := _bytevec$create(pixellist$size(pixels) * 2)
        !           187:     i: int := 1
        !           188:     for pixel: int in pixellist$elements(pixels) do
        !           189:        _wordvec$wstore(b2w(b), i, pixel)
        !           190:        i := i + 2
        !           191:        end
        !           192:     x_buf$send_data(b, 1, _bytevec$size(b))
        !           193:     end free_colors
        !           194: 
        !           195: store_color = proc (pixel, red, green, blue: int)
        !           196:     x_buf$setup(x_storecolors, 0, 0, 0)
        !           197:     x_buf$set_s0(1)
        !           198:     _wordvec$wstore(b2w(colbuf), 1, pixel)
        !           199:     _wordvec$wstore(b2w(colbuf), 3, red)
        !           200:     _wordvec$wstore(b2w(colbuf), 5, green)
        !           201:     _wordvec$wstore(b2w(colbuf), 7, blue)
        !           202:     x_buf$send_data(colbuf, 1, 8)
        !           203:     end store_color
        !           204: 
        !           205: store_colors = proc (defs: colordeflist)
        !           206:     x_buf$setup(x_storecolors, 0, 0, 0)
        !           207:     x_buf$set_s0(colordeflist$size(defs))
        !           208:     z: int := colordeflist$size(defs) * 8
        !           209:     if _bytevec$size(colbuf) < z
        !           210:        then colbuf := _bytevec$create(z) end
        !           211:     i: int := 1
        !           212:     for def: colordef in colordeflist$elements(defs) do
        !           213:        _wordvec$wstore(b2w(colbuf), i, def.pixel)
        !           214:        _wordvec$wstore(b2w(colbuf), i + 2, def.red)
        !           215:        _wordvec$wstore(b2w(colbuf), i + 4, def.green)
        !           216:        _wordvec$wstore(b2w(colbuf), i + 6, def.blue)
        !           217:        i := i + 8
        !           218:        end
        !           219:     x_buf$send_data(colbuf, 1, z)
        !           220:     end store_colors
        !           221: 
        !           222: query_color = proc (pixel: int) returns (int, int, int) signals (error(string))
        !           223:     x_buf$setup(x_querycolor, 0, 0, 0)
        !           224:     x_buf$set_s0(pixel)
        !           225:     x_buf$receive()
        !           226:        resignal error
        !           227:     return(x_buf$get_sp0() // 2**16,
        !           228:           x_buf$get_sp1() // 2**16,
        !           229:           x_buf$get_sp2() // 2**16)
        !           230:     end query_color
        !           231: 
        !           232: lookup_color = proc (name: string) returns (int, int, int, int, int, int)
        !           233:                                   signals (error(string))
        !           234:     x_buf$setup(x_lookupcolor, 0, 0, 0)
        !           235:     x_buf$set_s0(string$size(name))
        !           236:     x_buf$send_data(s2b(name), 1, string$size(name))
        !           237:     x_buf$receive()
        !           238:        resignal error
        !           239:     return(x_buf$get_sp0() // 2**16,
        !           240:           x_buf$get_sp1() // 2**16,
        !           241:           x_buf$get_sp2() // 2**16,
        !           242:           x_buf$get_sp3() // 2**16,
        !           243:           x_buf$get_sp4() // 2**16,
        !           244:           x_buf$get_sp5() // 2**16)
        !           245:     end lookup_color
        !           246: 
        !           247: black = proc () returns (x_pixmap)
        !           248:     if ~haveblack
        !           249:        then blackp := x_pixmap$tile(BlackPixel)
        !           250:            haveblack := true
        !           251:        end
        !           252:     return(blackp)
        !           253:     end black
        !           254: 
        !           255: white = proc () returns (x_pixmap)
        !           256:     if ~havewhite
        !           257:        then whitep := x_pixmap$tile(WhitePixel)
        !           258:            havewhite := true
        !           259:        end
        !           260:     return(whitep)
        !           261:     end white
        !           262: 
        !           263: end x_display

unix.superglobalmegacorp.com

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