Annotation of 40BSD/sys/newsys/dsort.c, revision 1.1

1.1     ! root        1: 
        !             2: #define        NULL    0
        !             3: #define        B_READ  1
        !             4: 
        !             5: struct buf {
        !             6:        struct  buf *b_actf, *b_actl;
        !             7:        int     b_cylin;
        !             8:        struct  buf *av_forw;
        !             9:        int     b_flags;
        !            10: } dtab;
        !            11: 
        !            12: main(argc, argv)
        !            13:        char **argv;
        !            14: {
        !            15:        int i; char *cp;
        !            16: 
        !            17:        argc--, argv++;
        !            18:        while (argc > 0) {
        !            19:                cp = *argv++;
        !            20:                i = *cp++ == 'r';
        !            21:                doit(atoi(cp), i);
        !            22:                printem();
        !            23:                --argc;
        !            24:        }
        !            25: }
        !            26: 
        !            27: struct buf fum[100];
        !            28: int    next;
        !            29: 
        !            30: doit(cyl, rw)
        !            31: {
        !            32:        struct buf *bp = &fum[next++];
        !            33: 
        !            34:        bp->b_cylin = cyl;
        !            35:        bp->b_flags = rw;
        !            36:        disksort(&dtab, bp);
        !            37: }
        !            38: 
        !            39: printem()
        !            40: {
        !            41:        register struct buf *bp = dtab.b_actf;
        !            42:        while (bp != &dtab && bp) {
        !            43:                printf("w\0r" + 2 * bp->b_flags);
        !            44:                printf("%d ", bp->b_cylin);
        !            45:                bp = bp->av_forw;
        !            46:        }
        !            47:        printf("\n");
        !            48: }
        !            49: 
        !            50: disksort(dp, bp)
        !            51: register struct buf *dp, *bp;
        !            52: {
        !            53:        register struct buf *ap;
        !            54:        struct buf *tp;
        !            55: 
        !            56:        ap = dp->b_actf;
        !            57:        if(ap == NULL) {
        !            58:                dp->b_actf = bp;
        !            59:                dp->b_actl = bp;
        !            60:                bp->av_forw = NULL;
        !            61:                return;
        !            62:        }
        !            63:        tp = NULL;
        !            64:        if (ap->b_cylin > bp->b_cylin) {
        !            65:                while (ap->av_forw && ap->av_forw->b_cylin > ap->b_cylin)
        !            66:                        ap = ap->av_forw;
        !            67:        }
        !            68:        while (ap->av_forw && ap->av_forw->b_cylin <= bp->b_cylin)
        !            69:                ap = ap->av_forw;
        !            70:        bp->av_forw = ap->av_forw;
        !            71:        ap->av_forw = bp;
        !            72:        if(ap == dp->b_actl)
        !            73:                dp->b_actl = bp;
        !            74: }

unix.superglobalmegacorp.com

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