Annotation of 43BSD/contrib/X/CLUlib/vax/x_misc.clu, revision 1.1.1.1

1.1       root        1: % Copyright    Barbara Liskov    1985
                      2: 
                      3: x_flush = proc ()
                      4:     x_buf$flush()
                      5:     end x_flush
                      6: 
                      7: x_feep = proc (volume: int)
                      8:     or: oreq, er: ereq := x_buf$get()
                      9:     er.code := x_feep_
                     10:     er.s0 := volume
                     11:     end x_feep
                     12: 
                     13: x_store_cut = proc (buf: int, s: string)
                     14:     or: oreq, er: ereq := x_buf$get()
                     15:     er.code := x_storebytes + (buf * 2**8)
                     16:     er.s0 := string$size(s)
                     17:     x_buf$send_data(s2b(s), 1, string$size(s))
                     18:     end x_store_cut
                     19: 
                     20: x_fetch_cut = proc (buf: int) returns (string) signals (error(string))
                     21:     or: oreq, er: ereq := x_buf$get()
                     22:     er.code := x_fetchbytes + (buf * 2**8)
                     23:     x_buf$receive()
                     24:        resignal error
                     25:     b: _bytevec := _bytevec$create(x_buf$get_sp0())
                     26:     x_buf$receive_data(b)
                     27:     return(b2s(b))
                     28:     end x_fetch_cut
                     29: 
                     30: x_rotate_cuts = proc (buf: int)
                     31:     or: oreq, er: ereq := x_buf$get()
                     32:     er.code := x_rotatecuts + (buf * 2**8)
                     33:     end x_rotate_cuts
                     34: 
                     35: x_mouse_control = proc (accel, thresh: int)
                     36:     or: oreq, er: ereq := x_buf$get()
                     37:     er.code := x_mousecontrol
                     38:     er.s0 := accel
                     39:     or.s1 := thresh
                     40:     end x_mouse_control
                     41: 
                     42: x_feep_control = proc (volume: int)
                     43:     or: oreq, er: ereq := x_buf$get()
                     44:     er.code := x_feepcontrol
                     45:     er.s0 := volume
                     46:     end x_feep_control
                     47: 
                     48: x_shift_lock = proc (toggle: bool)
                     49:     or: oreq, er: ereq := x_buf$get()
                     50:     if toggle
                     51:        then er.code := x_shiftlock + (LockToggleMode * 2**8)
                     52:        else er.code := x_shiftlock + (LockUpDownMode * 2**8)
                     53:        end
                     54:     end x_shift_lock
                     55: 
                     56: x_key_click = proc (volume: int)
                     57:     or: oreq, er: ereq := x_buf$get()
                     58:     er.code := x_keyclick + (volume * 2**8)
                     59:     end x_key_click
                     60: 
                     61: x_auto_repeat = proc (on: bool)
                     62:     or: oreq, er: ereq := x_buf$get()
                     63:     if on
                     64:        then er.code := x_autorepeat + 2**8
                     65:        else er.code := x_autorepeat
                     66:        end
                     67:     end x_auto_repeat
                     68: 
                     69: x_screen_saver = proc (video: bool, timeout, shift: int)
                     70:     or: oreq, er: ereq := x_buf$get()
                     71:     if video
                     72:        then er.code := x_screensaver + 2**8
                     73:        else er.code := x_screensaver
                     74:        end
                     75:     er.s0 := timeout
                     76:     or.s1 := shift
                     77:     end x_screen_saver
                     78: 
                     79: x_default = proc (prog, option: string) returns (string) signals (not_found)
                     80:     as = array[string]
                     81:     own init: bool := false
                     82:     own lines: as
                     83:     if ~init
                     84:        then lines := as$new()
                     85:            buf: _bytevec := _bytevec$create(128)
                     86:            init := true
                     87:            c: _chan := _chan$open(file_name$parse("~/.Xdefaults"), "read", 0)
                     88:            s: string
                     89:            l: int := 1
                     90:            h: int := 0
                     91:            while true do
                     92:                s, l, h := _chan$get(c, buf, l, h, "\n", false)
                     93:                if l <= h
                     94:                   then l := l + 1 end
                     95:                if ~string$empty(s)  cand  s[1] ~= '#'
                     96:                   then as$addl(lines, s) end
                     97:                end except when end_of_file, not_possible (*): end
                     98:            _chan$close(c)
                     99:        end except when not_possible (*): end
                    100:     match1: int := string$size(prog) + 1
                    101:     for s: string in as$elements(lines) do
                    102:        i: int := 1
                    103:        if s[1] ~= '.'
                    104:           then if string$size(s) <= match1  cor
                    105:                   string$indexs(prog, s) ~= 1  cor  s[match1] ~= '.'
                    106:                   then continue end
                    107:                i := match1
                    108:           end
                    109:        i := i + 1
                    110:        j: int := _bytevec$indexc(':', s2b(s), i)
                    111:        if j = 0  cor  j - i ~= string$size(option)  cor
                    112:           _bytevec$nc_indexv(s2b(option), s2b(s), i) ~= i
                    113:           then continue end
                    114:        k: int := j + 1
                    115:        while s[k] = ' '  cor  s[k] = '\t' do
                    116:            k := k + 1
                    117:            end except when bounds: continue end
                    118:        return(string$rest(s, k))
                    119:        end
                    120:     signal not_found
                    121:     end x_default
                    122: 
                    123: x_parse_color = proc (spec: string) returns (int, int, int)
                    124:                  signals (bad_format, undefined)
                    125:     zero = char$c2i('0')
                    126:     upper = char$c2i('A') - 10
                    127:     lower = char$c2i('a') - 10
                    128:     if string$empty(spec)
                    129:        then signal bad_format
                    130:      elseif spec[1] ~= '#'
                    131:        then r, g, b, dr, dg, db: int := x_display$lookup_color(spec)
                    132:               except when error (*): signal undefined end
                    133:            return(r, g, b)
                    134:      elseif ~(string$size(spec) = 4  cor  string$size(spec) = 7  cor
                    135:              string$size(spec) = 10  cor  string$size(spec) = 13)
                    136:        then signal bad_format end
                    137:     n: int := string$size(spec) / 3
                    138:     r: int := 0
                    139:     g: int := 0
                    140:     b: int := 0
                    141:     for i: int in int$from_to_by(2, string$size(spec), n) do
                    142:        r := g
                    143:        g := b
                    144:        b := 0
                    145:        for j: int in int$from_to(i, i + n - 1) do
                    146:            c: char := spec[j]
                    147:            if c >= '0'  cand  c <= '9'
                    148:               then b := b * 16 + (char$c2i(c) - zero)
                    149:             elseif c >= 'A'  cand  c <= 'F'
                    150:               then b := b * 16 + (char$c2i(c) - upper)
                    151:             elseif c >= 'a'  cand  c <= 'f'
                    152:               then b := b * 16 + (char$c2i(c) - lower)
                    153:             else signal bad_format end
                    154:            end
                    155:        end
                    156:     n := 2 ** (16 - 4 * n)
                    157:     return(r * n, g * n, b * n)
                    158:     end x_parse_color

unix.superglobalmegacorp.com

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