Annotation of 43BSDTahoe/new/X/xted/input.clu, revision 1.1

1.1     ! root        1: input = cluster is peek,               % peek a char
        !             2:                   getc,                % read a char
        !             3:                   pending,             % any input ready ?
        !             4:                   pending_wait,        % wait a while for input
        !             5:                   copy_wait,           % wait for raster_copy done
        !             6:                   push,                % push back on input
        !             7:                   in_macro,            % test if in macro
        !             8:                   still_macro,         % test if still macro chars
        !             9:                   push_macro,          % push macro back on input
        !            10:                   flush_macro,         % flush any macro input
        !            11:                   bpos,                % button position
        !            12:                   set_highlight,       % control highlight
        !            13:                   chan,                % input chan
        !            14:                   reset
        !            15: 
        !            16:     rep = null          % own data is what is important
        !            17: 
        !            18:     inputs = KeyPressed + ButtonPressed + ButtonReleased
        !            19:     exposures = ExposeRegion + ExposeWindow + ExposeCopy
        !            20: 
        !            21:     downs = sequence[string]$["\362\361\363\366\360\365\370\370",
        !            22:                              "\355\351\352\356\350\353\357\357",
        !            23:                              "\354\342\344\346\341\345\347\347"]
        !            24:     ups = sequence[string]$["\322\321\323\326\320\325\330\330",
        !            25:                            "\315\311\312\316\310\313\317\317",
        !            26:                            "\314\302\304\306\301\305\307\307"]
        !            27: 
        !            28:     own peeks: act
        !            29:     own rstart: int
        !            30:     own copies: int
        !            31:     own dones: int
        !            32:     own xpos: int
        !            33:     own ypos: int
        !            34:     own highlight: bool
        !            35:     own ev: event
        !            36: 
        !            37:     peek = proc () returns (char)
        !            38:        return(act$top(peeks))
        !            39:           except when bounds: end
        !            40:        c: char := getchar()
        !            41:        act$addh(peeks, c)
        !            42:        return(c)
        !            43:        end peek
        !            44: 
        !            45:     getc = proc () returns (char)
        !            46:        if act$empty(peeks)
        !            47:           then return(getchar())
        !            48:           else return(act$remh(peeks))
        !            49:           end
        !            50:        end getc
        !            51: 
        !            52:     pending = proc () returns (bool)
        !            53:        return(~act$empty(peeks)  cor  cpending())
        !            54:        end pending
        !            55: 
        !            56:     pending_wait = proc () returns (bool)
        !            57:        if ~act$empty(peeks)
        !            58:           then return(true)
        !            59:           else for i: int in int$from_to_by(1000, 1, -1) do
        !            60:                    if cpending()
        !            61:                       then return(true) end
        !            62:                    end
        !            63:                return(false)
        !            64:           end
        !            65:        end pending_wait
        !            66: 
        !            67:     copy_wait = proc ()
        !            68:        copies := copies + 1
        !            69:        while copies > dones do
        !            70:            x_input$mdeq(exposures, ev)
        !            71:            if ev.kind = ExposeCopy
        !            72:               then dones := dones + 1
        !            73:               else screen$redisplay(ev.win, ev.x, ev.y, ev.x0, ev.y0)
        !            74:               end
        !            75:            end
        !            76:        end copy_wait
        !            77: 
        !            78:     cpending = proc () returns (bool)
        !            79:        while x_input$pending() do
        !            80:            x_input$deq(ev)
        !            81:            if ev.kind = KeyPressed
        !            82:               then act$addh(peeks, x_keymap$getc(ev.value, ev.mask))
        !            83:                       except when none: continue
        !            84:                              when multi (s: string):
        !            85:                                   for i: int in int$from_to_by(string$size(s), 1, -1) do
        !            86:                                       act$addh(peeks, s[i])
        !            87:                                       end
        !            88:                              end
        !            89:                    return(true)
        !            90:               end
        !            91:            if ev.kind = ButtonPressed
        !            92:               then act$addh(peeks, downs[ev.value + 1][ev.mask / 2**12 + 1])
        !            93:                    xpos, ypos := screen$position(ev.x, ev.y)
        !            94:                    act$addh(peeks, esc)
        !            95:                    return(true)
        !            96:               end
        !            97:            if ev.kind = ButtonReleased
        !            98:               then act$addh(peeks, ups[ev.value + 1][ev.mask / 2**12 + 1])
        !            99:                    xpos, ypos := screen$position(ev.x, ev.y)
        !           100:                    act$addh(peeks, esc)
        !           101:                    return(true)
        !           102:               end
        !           103:            if ev.kind = ExposeCopy
        !           104:               then dones := dones + 1
        !           105:             elseif ev.kind = UnmapWindow
        !           106:               then copies := copies - 1
        !           107:                    copy_wait()
        !           108:                    screen$unmapped(ev.win)
        !           109:             elseif ev.kind ~= MouseMoved
        !           110:               then screen$redisplay(ev.win, ev.x, ev.y, ev.x0, ev.y0) end
        !           111:            end
        !           112:        return(false)
        !           113:        end cpending
        !           114: 
        !           115:     getchar = proc () returns (char)
        !           116:        rstart := -1
        !           117:        high: bool := false
        !           118:        while true do
        !           119:            if highlight  cand  ~high  cand  ~x_input$pending()
        !           120:               then high := true
        !           121:                    screen$highlight(true)
        !           122:               end
        !           123:            x_input$deq(ev)
        !           124:            if ev.kind = MouseMoved
        !           125:               then if highlight
        !           126:                       then high := true
        !           127:                            screen$highlight(true)
        !           128:                       end
        !           129:                    continue
        !           130:               end
        !           131:            if high
        !           132:               then high := false
        !           133:                    screen$highlight(false)
        !           134:               end
        !           135:            if ev.kind = KeyPressed
        !           136:               then return(x_keymap$getc(ev.value, ev.mask))
        !           137:                       except when none: continue
        !           138:                              when multi (s: string):
        !           139:                                   for i: int in int$from_to_by(string$size(s), 2, -1) do
        !           140:                                       act$addh(peeks, s[i])
        !           141:                                       end
        !           142:                                   return(s[1])
        !           143:                              end
        !           144:               end
        !           145:            if ev.kind = ButtonPressed
        !           146:               then act$addh(peeks, downs[ev.value + 1][ev.mask / 2**12 + 1])
        !           147:                    xpos, ypos := screen$position(ev.x, ev.y)
        !           148:                    return(esc)
        !           149:               end
        !           150:            if ev.kind = ButtonReleased
        !           151:               then act$addh(peeks, ups[ev.value + 1][ev.mask / 2**12 + 1])
        !           152:                    xpos, ypos := screen$position(ev.x, ev.y)
        !           153:                    return(esc)
        !           154:               end
        !           155:            if ev.kind = ExposeCopy
        !           156:               then dones := dones + 1
        !           157:             elseif ev.kind = UnmapWindow
        !           158:               then copies := copies - 1
        !           159:                    copy_wait()
        !           160:                    screen$unmapped(ev.win)
        !           161:             else screen$redisplay(ev.win, ev.x, ev.y, ev.x0, ev.y0) end
        !           162:            end
        !           163:        end getchar
        !           164: 
        !           165:     push = proc (c: char)
        !           166:        if rstart > act$size(peeks)
        !           167:           then rstart := -1 end
        !           168:        act$addh(peeks, c)
        !           169:        end push
        !           170: 
        !           171:     in_macro = proc () returns (bool)
        !           172:        return(rstart >= 0 cand rstart <= act$size(peeks))
        !           173:        end in_macro
        !           174: 
        !           175:     still_macro = proc () returns (bool)
        !           176:        return(rstart >= 0 cand rstart < act$size(peeks))
        !           177:        end still_macro
        !           178: 
        !           179:     push_macro = proc (s: string)
        !           180:        if ~string$empty(s)
        !           181:           then z: int := act$size(peeks)
        !           182:                if rstart < 0 cor rstart > z then rstart := z end
        !           183:                for i: int in int$from_to_by(string$size(s), 1, -1) do
        !           184:                    act$addh(peeks, s[i])
        !           185:                    end
        !           186:           end
        !           187:        end push_macro
        !           188: 
        !           189:     flush_macro = proc () returns (string)
        !           190:        s: string
        !           191:        if rstart >= 0 cand rstart < act$size(peeks)
        !           192:           then s := _cvt[_bytevec, string](
        !           193:                                _bytevec$create(act$size(peeks) - rstart))
        !           194:                for i: int in int$from_to(1, string$size(s)) do
        !           195:                    _cvt[string, _bytevec](s)[i] := act$remh(peeks)
        !           196:                    end
        !           197:           else s := ""
        !           198:           end
        !           199:        rstart := -1
        !           200:        return(s)
        !           201:        end flush_macro
        !           202: 
        !           203:     bpos = proc () returns (int, int)
        !           204:        return(xpos, ypos)
        !           205:        end bpos
        !           206: 
        !           207:     set_highlight = proc (flag: bool)
        !           208:        highlight := flag
        !           209:        end set_highlight
        !           210: 
        !           211:     chan = proc () returns (_chan)
        !           212:        return(_chan$nul())
        !           213:        end chan
        !           214: 
        !           215:     reset = proc ()
        !           216:        x_keymap$load("")
        !           217:        peeks := act$new()
        !           218:        rstart := -1
        !           219:        copies := -1
        !           220:        dones := 0
        !           221:        xpos := 0
        !           222:        ypos := 0
        !           223:        highlight := false
        !           224:        ev := x_input$empty_event()
        !           225:        end reset
        !           226: 
        !           227:     end input

unix.superglobalmegacorp.com

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