Annotation of researchv10no/cmd/worm/oscsi/sony/status.c, revision 1.1

1.1     ! root        1: #include       <stdio.h>
        !             2: #include       "../scsi.h"
        !             3: #include       "../scsish.h"
        !             4: 
        !             5: static
        !             6: shelf(int i)
        !             7: {
        !             8:        printf(": ");
        !             9:        if(i&0x80){
        !            10:                printf("%s,", (i&0x40)? "disk":"temporary");
        !            11:                if(i&0x10) printf("wait loading,");
        !            12:                if(i&0x08) printf("wait ejection,");
        !            13:                if(i&0x20) printf("use shelf instead of drive for LUN %d", i&7);
        !            14:        } else
        !            15:                printf("no disk");
        !            16:        printf("\n");
        !            17: }
        !            18: 
        !            19: int
        !            20: sony_istatus(struct scsi_return *ret, char *err)
        !            21: {
        !            22:        struct scsi_cmd cmd;
        !            23:        int n;
        !            24: 
        !            25:        set6(cmd, 0x1D, 0, 0, 0, 10, 0);
        !            26:        cmd.data[0] = 0xE2;     /* internal status */
        !            27:        cmd.data[1] = 0;
        !            28:        cmd.data[2] = 0;
        !            29:        cmd.data[3] = 0;
        !            30:        cmd.data[4] = 0;
        !            31:        cmd.data[5] = 0;
        !            32:        cmd.data[6] = 0;
        !            33:        cmd.data[7] = 0;
        !            34:        cmd.data[8] = 0;
        !            35:        cmd.data[9] = 0;
        !            36:        if(n = s_io(0, &cmd, 10, ret, 0, err))
        !            37:                return(n);
        !            38:        setdiag(cmd, 0, 128);
        !            39:        if(n = s_io(0, &cmd, 0, ret, 128, err))
        !            40:                return(n);
        !            41:        return(0);
        !            42: }
        !            43: 
        !            44: int
        !            45: sony_status(int niargs, int *iargs, int ncargs, char **cargs, char *err)
        !            46: {
        !            47:        struct scsi_return ret;
        !            48:        int n, i, start;
        !            49:        uchar *d;
        !            50: 
        !            51: #pragma ref niargs
        !            52: #pragma ref iargs
        !            53: #pragma ref ncargs
        !            54: #pragma ref cargs
        !            55: 
        !            56:        if(n = sony_istatus(&ret, err))
        !            57:                return(n);
        !            58:        d = &ret.data[16];
        !            59:        for(i = 0; i < 8; i++, d += 4){
        !            60:                printf("drive %d: %sready,%sdisk in LUN,power %s,", i,
        !            61:                        (d[0]&1)?"":"not ", (d[0]&0x40)?"":"no ",
        !            62:                        (d[0]&0x80)?"off":"on");
        !            63:                if(d[0]&0x40){
        !            64:                        if(d[1]&0x80){
        !            65:                                printf("disk in drive %d", d[1]&0x7f);
        !            66:                                if(d[2]&0x80)
        !            67:                                        printf(", return shelf %d%c", (d[2]&0x7F)/2, "ab"[d[2]&1]);
        !            68:                        } else
        !            69:                                printf("disk in shelf %d%c (%d)", (d[1]&0x7f)/2, (d[1]&1)+'a', d[1]&0x7f);
        !            70:                }
        !            71:                printf("\n");
        !            72:        }
        !            73:        for(i = 0; i < 50;){
        !            74:                for(start = i; ++i < 50;)
        !            75:                        if(d[i] != d[start])
        !            76:                                break;
        !            77:                if(i == start+1)
        !            78:                        printf("%d", start);
        !            79:                else
        !            80:                        printf("%d-%d", start, i-1);
        !            81:                shelf(d[start]);
        !            82:        }
        !            83:        d += 50;
        !            84:        printf("I/O shelf");
        !            85:        shelf(*d);
        !            86:        d++;
        !            87:        printf("carrier: ");
        !            88:        i = *d&0x7F;
        !            89:        if(*d&0x80)
        !            90:                printf("disk shelf=%d%c (%d)\n", i/2, 'a'+(i&1), i);
        !            91:        else
        !            92:                printf("no disk\n");
        !            93:        d++;
        !            94:        if(*d&0x80)
        !            95:                printf("upper drive: disk, LUN=%d\n", *d&7);
        !            96:        else
        !            97:                printf("upper drive: no disk\n");
        !            98:        d++;
        !            99:        if(*d&0x80)
        !           100:                printf("lower drive: disk, LUN=%d\n", *d&7);
        !           101:        else
        !           102:                printf("lower drive: no disk\n");
        !           103:        return(0);
        !           104: }

unix.superglobalmegacorp.com

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