Annotation of 43BSDTahoe/new/X/CLUlib/vax/x_buf.asm, revision 1.1.1.1

1.1       root        1: ; Copyright    Barbara Liskov    1985
                      2: 
                      3: x_buf = cluster is init,
                      4:                   get, send_data, send_array, flush, receive, receive_data,
                      5:                   events,
                      6:                   get_lp0, get_lp1, get_lp2, get_lp3,
                      7:                   get_sp0, get_sp1, get_sp2, get_sp3, get_sp4, get_sp5,
                      8:                   get_bp10, get_bp11
                      9: 
                     10: rep = null
                     11: 
                     12: bufsize = 2048
                     13: 
                     14: rsize = 24
                     15: 
                     16: x_err = -1
                     17: x_reply = 0
                     18: 
                     19: ExposeWindow   = #0080
                     20: ExposeRegion   = #0100
                     21: ExposeCopy     = #0200
                     22: UnmapWindow    = #2000
                     23: FocusChange    = #4000
                     24: 
                     25: rcode = 16
                     26: parms = 20
                     27: 
                     28: sock_stream = 1
                     29: %fionread = #4004,,#667f
                     30: 
                     31: wvec   ev {11}
                     32: wvec   wbuf {4}
                     33: wvec   pbuf {5}
                     34: wvec   obuf {513}
                     35: wvec   ibuf {10}
                     36: wvec   padbuf {1}
                     37: 
                     38: own    bufptr
                     39: own    bufmin
                     40: own    bufmax
                     41: own    reqcount
                     42: 
                     43: init = proc (addr: _wordvec) signals (error(string))
                     44:        movl    pbuf,pp
                     45:        movl    3,(pp)
                     46:        movzwl  4(rr),4(pp)
                     47:        movq    sock_stream,8(pp)
                     48:        chmk    %socket
                     49:        bcs     death
                     50:        movl    n0,r1
                     51:        movl    r1,4(pp)
                     52:        addl    4,rr,8(pp)
                     53:        movzwl  (rr),12(pp)
                     54:        ifcs    chmk    %connect
                     55:        then    movl    n0,n1
                     56:                movl    1,(pp)
                     57:                chmk    %close
                     58:                movl    n1,n0
                     59: death:         _erstr(n0)
                     60:                signal  error(rr)
                     61:        end
                     62:        movl    wbuf,n1
                     63:        movl    3,(n1)
                     64:        movl    r1,4(n1)
                     65:        movl    ibuf,n1
                     66:        movl    3,(n1)
                     67:        movl    r1,4(n1)
                     68:        addl    rcode,n1,8(n1)
                     69:        movl    rsize,12(n1)
                     70:        movl    pbuf,n1
                     71:        movl    3,(n1)
                     72:        movl    r1,4(n1)
                     73:        movl    %fionread,8(n1)
                     74:        addl    16,n1,12(n1)
                     75:        clrl    reqcount
                     76:        subl    4,obuf,bufmin
                     77:        movl    bufmin,bufptr
                     78:        addl    bufmin,bufsize,bufmax
                     79:        movl    10,@ev
                     80:        end init
                     81: 
                     82: get = qproc () returns (oreq, ereq)
                     83:        movl    bufptr,rr
                     84:        addl    rsize,bufptr
                     85:        ifgtr   cmpl    bufptr,bufmax
                     86:        then    movl    wbuf,pp
                     87:                movl    obuf,8(pp)
                     88:                subl    bufmin,rr,12(pp)
                     89:                qloop
                     90:                        chmk    %write
                     91:                        bcs     oops
                     92:                        addl    n0,8(pp)
                     93:                        subl    n0,12(pp)
                     94:                        bneq    this
                     95:                end
                     96:                movl    bufmin,rr
                     97:                addl    rsize,rr,bufptr
                     98:        end
                     99:        movl    (sp),pp
                    100:        addl    2,rr,(sp)
                    101:        incl    reqcount
                    102:        jmp     (pp)
                    103: oops:  pushl   ep
                    104:        movl    sp,ep
                    105:        _erstr(n0)
                    106:        movl    (sp)+,ep
                    107:        signal  failure(rr)
                    108:        end get
                    109: 
                    110: send_data = qproc (b: _bytevec, strt, z: int)
                    111:        movq    strt,r1
                    112:        movzwl  (r2),n1
                    113:        if      sobgeq  r1,next
                    114:        then
                    115: bnds:          signal  failure("unhandled exception: bounds")
                    116:        end
                    117:        iflss   cmpl    r1,n1
                    118:        then    tstl    rr
                    119:                bleq    check
                    120:                addl    r1,rr,n0
                    121:                cmpl    n0,n1
                    122:                bgtr    bnds
                    123:                addl    3,rr
                    124:                bicb    3,rr
                    125:                movl    bufptr,r3
                    126:                addl    rr,r3,r4
                    127:                ifleq   cmpl    r4,bufmax
                    128:                then    movc    rr,4(r2)[r1],4(r3)
                    129:                        movl    r4,bufptr
                    130:                        return
                    131:                end
                    132:                movl    wbuf,pp
                    133:                movl    obuf,8(pp)
                    134:                subl    bufmin,r3,12(pp)
                    135:                qloop
                    136:                        chmk    %write
                    137:                        bcs     oops
                    138:                        addl    n0,8(pp)
                    139:                        subl    n0,12(pp)
                    140:                        bneq    this
                    141:                end
                    142:                movl    bufmin,bufptr
                    143:                movab   4(r2)[r1],8(pp)
                    144:                movl    rr,12(pp)
                    145:                qloop
                    146:                        chmk    %write
                    147:                        bcs     oops
                    148:                        addl    n0,8(pp)
                    149:                        subl    n0,12(pp)
                    150:                        bneq    this
                    151:                end
                    152:                return
                    153:        end
                    154:        bgtr    bnds
                    155: check: tstl    rr
                    156:        bneq    bnds
                    157:        return
                    158: oops:  pushl   ep
                    159:        movl    sp,ep
                    160:        pushl   rr
                    161:        _erstr(n0)
                    162:        movl    (sp)+,rr
                    163:        movl    (sp)+,ep
                    164:        signal  failure(rr)
                    165:        end send_data
                    166: 
                    167: send_array = qproc (a: array[char], strt, z: int)
                    168:        ifleq   tstl    rr
                    169:        then    ifeql
                    170:                then    return
                    171:                end
                    172: bnds:          signal  failure("unhandled exception: bounds")
                    173:        end
                    174:        movq    strt,r1
                    175:        subl    dv%low(r2),r1
                    176:        cmpl    r1,dv%size(r2)
                    177:        bgtru   bnds
                    178:        addl    rr,r1,n3
                    179:        cmpl    n3,dv%size(r2)
                    180:        bgtr    bnds
                    181:        moval   @dv%rel(r2)[r1],n3
                    182:        addl    3,rr
                    183:        bicb    3,rr
                    184:        movl    bufptr,r3
                    185:        addl    rr,r3,r4
                    186:        ifgtr   cmpl    r4,bufmax
                    187:        then    movl    wbuf,pp
                    188:                movl    obuf,8(pp)
                    189:                subl    bufmin,r3,12(pp)
                    190:                qloop
                    191:                        chmk    %write
                    192:                        bcs     oops
                    193:                        addl    n0,8(pp)
                    194:                        subl    n0,12(pp)
                    195:                        bneq    this
                    196:                end
                    197:                movl    bufmin,r3
                    198:        end
                    199:        addl    4,r3
                    200:        qloop
                    201:                cvtlb   (n3)+,(r3)+
                    202:                sobgtr  rr,this
                    203:        end
                    204:        subl    4,r3,bufptr
                    205:        return
                    206: oops:  pushl   ep
                    207:        movl    sp,ep
                    208:        pushl   rr
                    209:        _erstr(n0)
                    210:        movl    (sp)+,rr
                    211:        movl    (sp)+,ep
                    212:        signal  failure(rr)
                    213:        end send_array
                    214: 
                    215: flush = qproc ()
                    216:        ifgtr   cmpl    bufptr,obuf
                    217:        then    movl    wbuf,pp
                    218:                movl    obuf,8(pp)
                    219:                subl    bufmin,bufptr,12(pp)
                    220:                qloop
                    221:                        chmk    %write
                    222:                        bcs     oops
                    223:                        addl    n0,8(pp)
                    224:                        subl    n0,12(pp)
                    225:                        bneq    this
                    226:                end
                    227:                movl    bufmin,bufptr
                    228:        end
                    229:        return
                    230: oops:  pushl   ep
                    231:        movl    sp,ep
                    232:        _erstr(n0)
                    233:        movl    (sp)+,ep
                    234:        signal  failure(rr)
                    235:        end flush
                    236: 
                    237: receive = proc () signals (error(string))
                    238:        ifgtr   cmpl    bufptr,obuf
                    239:        then    movl    wbuf,pp
                    240:                movl    obuf,8(pp)
                    241:                subl    bufmin,bufptr,12(pp)
                    242:                qloop
                    243:                        chmk    %write
                    244:                        bcs     oops
                    245:                        addl    n0,8(pp)
                    246:                        subl    n0,12(pp)
                    247:                        bneq    this
                    248:                end
                    249:                movl    bufmin,bufptr
                    250:        end
                    251:        loop
                    252:                movl    ibuf,pp
                    253:                chmk    %read
                    254:                bcs     oops
                    255:                cmpl    n0,rsize
                    256:                bneq    bad
                    257:                ifeql   tstl    rcode(pp)
                    258:                then    return
                    259:                end
                    260:                ifneq   cmpl    rcode(pp),x_err
                    261:                then    x_buf$%enq()
                    262:                        continue
                    263:                end
                    264:                cvtbl   parms+4(pp),-(sp)
                    265:                pushl   parms+0(pp)
                    266:                cvtbl   parms+5(pp),-(sp)
                    267:                cvtbl   parms+6(pp),-(sp)
                    268:                movl    parms+8(pp),rr
                    269:                ifeql   cmpl    parms+0(pp),reqcount
                    270:                then    x_erstr(*, *, *, *, *)
                    271:                        signal  error(rr)
                    272:                end
                    273:                x_erstr(*, *, *, *, *)
                    274:                x_error(rr)
                    275:        end
                    276: oops:  _erstr(n0)
                    277:        signal  failure(rr)
                    278: bad:   signal  failure("incomplete message received")
                    279:        end receive
                    280: 
                    281: receive_data = proc (b: _bytevec)
                    282:        movl    wbuf,pp
                    283:        addl    4,rr,8(pp)
                    284:        movzwl  (rr),12(pp)
                    285:        qloop
                    286:                chmk    %read
                    287:                bcs     oops
                    288:                addl    n0,8(pp)
                    289:                subl    n0,12(pp)
                    290:                bneq    this
                    291:        end
                    292:        ifneq   bicl    -4,(rr),n0
                    293:        then    subl    n0,4,12(pp)
                    294:                movl    padbuf,8(pp)
                    295:                qloop
                    296:                        chmk    %read
                    297:                        bcs     oops
                    298:                        addl    n0,8(pp)
                    299:                        subl    n0,12(pp)
                    300:                        bneq    this
                    301:                end
                    302:        end
                    303:        return
                    304: oops:  _erstr(n0)
                    305:        signal  failure(rr)
                    306:        end receive_data
                    307: 
                    308: events = proc (need: bool)
                    309:        var     cnt
                    310:        ifgtr   cmpl    bufptr,obuf
                    311:        then    movl    wbuf,pp
                    312:                movl    obuf,8(pp)
                    313:                subl    bufmin,bufptr,12(pp)
                    314:                qloop
                    315:                        chmk    %write
                    316:                        bcs     oops
                    317:                        addl    n0,8(pp)
                    318:                        subl    n0,12(pp)
                    319:                        bneq    this
                    320:                end
                    321:                movl    bufmin,bufptr
                    322:        end
                    323:        loop
                    324: again:         movl    pbuf,pp
                    325:                chmk    %ioctl
                    326:                bcs     oops
                    327:                ifeql   movl    16(pp),cnt
                    328:                then    movl    need,cnt
                    329:                        beql    next
                    330:                end
                    331:                clrl    need
                    332:                qloop
                    333:                        movl    ibuf,pp
                    334:                        chmk    %read
                    335:                        bcs     oops
                    336:                        ifneq   cmpl    n0,rsize
                    337:                        then    signal  failure("incomplete message received")
                    338:                        end
                    339:                        ifeql   tstl    rcode(pp)
                    340:                        then    signal  failure("protocol screwup")
                    341:                        end
                    342:                        ifeql   cmpl    rcode(pp),x_err
                    343:                        then    cvtbl   parms+4(pp),-(sp)
                    344:                                pushl   parms+0(pp)
                    345:                                cvtbl   parms+5(pp),-(sp)
                    346:                                cvtbl   parms+6(pp),-(sp)
                    347:                                movl    parms+8(pp),rr
                    348:                                x_erstr(*, *, *, *, *)
                    349:                                x_error(rr)
                    350:                                br      again
                    351:                        end
                    352:                        x_buf$%enq()
                    353:                        subl    rsize,cnt
                    354:                        bgtr    this
                    355:                end
                    356:        end
                    357:        return
                    358: oops:  _erstr(n0)
                    359:        signal  failure(rr)
                    360:        end events
                    361: 
                    362: %enq = proc ()
                    363:        movl    ibuf,pp
                    364:        movl    ev,rr
                    365:        movl    rcode(pp),4(rr)
                    366:        movl    parms+0(pp),24(rr)
                    367:        movl    parms+12(pp),12(rr)
                    368:        movzwl  parms+6(pp),20(rr)
                    369:        ifneq   bitw    ExposeWindow+ExposeRegion,rcode(pp)
                    370:        then    cvtwl   parms+8(pp),32(rr)
                    371:                cvtwl   parms+10(pp),40(rr)
                    372:                cvtwl   parms+16(pp),36(rr)
                    373:                cvtwl   parms+18(pp),28(rr)
                    374:        elfeql  bitw    UnmapWindow+FocusChange+ExposeCopy,rcode(pp)
                    375:        then    clrb    21(rr)
                    376:                movzwl  parms+4(pp),16(rr)
                    377:                movzwl  parms+6(pp),8(rr)
                    378:                clrb    8(rr)
                    379:                cvtwl   parms+8(pp),28(rr)
                    380:                cvtwl   parms+10(pp),36(rr)
                    381:                cvtwl   parms+16(pp),40(rr)
                    382:                cvtwl   parms+18(pp),32(rr)
                    383:        end
                    384:        x_input$enq(rr)
                    385:        end %enq
                    386: 
                    387: get_lp0 = qproc () returns (int)
                    388:        movl    ibuf,rr
                    389:        movl    parms+0(rr),rr
                    390:        return(rr)
                    391:        end get_lp0
                    392: 
                    393: get_lp1 = qproc () returns (int)
                    394:        movl    ibuf,rr
                    395:        movl    parms+4(rr),rr
                    396:        return(rr)
                    397:        end get_lp1
                    398: 
                    399: get_lp2 = qproc () returns (int)
                    400:        movl    ibuf,rr
                    401:        movl    parms+8(rr),rr
                    402:        return(rr)
                    403:        end get_lp2
                    404: 
                    405: get_lp3 = qproc () returns (int)
                    406:        movl    ibuf,rr
                    407:        movl    parms+12(rr),rr
                    408:        return(rr)
                    409:        end get_lp3
                    410: 
                    411: get_sp0 = qproc () returns (int)
                    412:        movl    ibuf,rr
                    413:        cvtwl   parms+0(rr),rr
                    414:        return(rr)
                    415:        end get_sp0
                    416: 
                    417: get_sp1 = qproc () returns (int)
                    418:        movl    ibuf,rr
                    419:        cvtwl   parms+2(rr),rr
                    420:        return(rr)
                    421:        end get_sp1
                    422: 
                    423: get_sp2 = qproc () returns (int)
                    424:        movl    ibuf,rr
                    425:        cvtwl   parms+4(rr),rr
                    426:        return(rr)
                    427:        end get_sp2
                    428: 
                    429: get_sp3 = qproc () returns (int)
                    430:        movl    ibuf,rr
                    431:        cvtwl   parms+6(rr),rr
                    432:        return(rr)
                    433:        end get_sp3
                    434: 
                    435: get_sp4 = qproc () returns (int)
                    436:        movl    ibuf,rr
                    437:        cvtwl   parms+8(rr),rr
                    438:        return(rr)
                    439:        end get_sp4
                    440: 
                    441: get_sp5 = qproc () returns (int)
                    442:        movl    ibuf,rr
                    443:        cvtwl   parms+10(rr),rr
                    444:        return(rr)
                    445:        end get_sp5
                    446: 
                    447: get_bp10 = qproc () returns (int)
                    448:        movl    ibuf,rr
                    449:        cvtbl   parms+10(rr),rr
                    450:        return(rr)
                    451:        end get_bp10
                    452: 
                    453: get_bp11 = qproc () returns (int)
                    454:        movl    ibuf,rr
                    455:        cvtbl   parms+11(rr),rr
                    456:        return(rr)
                    457:        end get_bp11
                    458: 
                    459: end x_buf

unix.superglobalmegacorp.com

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