Annotation of researchv10dc/cmd/worm/scsi/sony/status.c, revision 1.1.1.1

1.1       root        1: #include       <stdio.h>
                      2: #include       "../scsi.h"
                      3: #include       "../scsish.h"
                      4: #include       "../tcl.h"
                      5: #include       "fns.h"
                      6: 
                      7: static
                      8: shelf(int i)
                      9: {
                     10:        printf(": ");
                     11:        if(i&0x80){
                     12:                printf("%s,", (i&0x40)? "disk":"temporary");
                     13:                if(i&0x10) printf("wait loading,");
                     14:                if(i&0x08) printf("wait ejection,");
                     15:                if(i&0x20) printf("use shelf instead of drive for LUN %d", i&7);
                     16:        } else
                     17:                printf("no disk");
                     18:        printf("\n");
                     19: }
                     20: 
                     21: int
                     22: sony_istatus(struct scsi_return *ret, char *err)
                     23: {
                     24:        struct scsi_cmd cmd;
                     25:        int n;
                     26: 
                     27:        set6(cmd, 0x1D, 0, 0, 0, 10, 0);
                     28:        cmd.data[0] = 0xE2;     /* internal status */
                     29:        cmd.data[1] = 0;
                     30:        cmd.data[2] = 0;
                     31:        cmd.data[3] = 0;
                     32:        cmd.data[4] = 0;
                     33:        cmd.data[5] = 0;
                     34:        cmd.data[6] = 0;
                     35:        cmd.data[7] = 0;
                     36:        cmd.data[8] = 0;
                     37:        cmd.data[9] = 0;
                     38:        if(n = s_io(0, &cmd, 10, ret, 0, err))
                     39:                return(n);
                     40:        setdiag(cmd, 0, 128);
                     41:        if(n = s_io(0, &cmd, 0, ret, 128, err))
                     42:                return(n);
                     43:        return(0);
                     44: }
                     45: 
                     46: int
                     47: sony_status(ClientData cd, Tcl_Interp *it, int argc, char **argv)
                     48: {
                     49:        struct scsi_return ret;
                     50:        int i, start;
                     51:        uchar *d;
                     52: 
                     53: #pragma ref argc
                     54: #pragma ref argv
                     55: 
                     56:        if(sony_istatus(&ret, cd->err))
                     57:                ERR_RETURN
                     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(TCL_OK);
                    104: }

unix.superglobalmegacorp.com

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