Annotation of 43BSD/contrib/X/CLUlib/vax/x_buf.asm, revision 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.