Annotation of researchv10dc/cmd/worm/scsi/generic/sense.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: char *argv0;           /* not a good place, is it */
                      8: 
                      9: int
                     10: gen_sense(ClientData cd, Tcl_Interp *it, int argc, char **argv)
                     11: {
                     12:        struct scsi_cmd cmd;
                     13:        struct scsi_return ret;
                     14:        int i, unit;
                     15: 
                     16: #pragma ref it
                     17: 
                     18:        if(argc <= 1)
                     19:                argv[i = 0] = "0";
                     20:        else
                     21:                i = 1;
                     22:        for(; i < argc; i++){
                     23:                unit = atoi(argv[i]);
                     24:                set6(cmd, 0x03, unit<<5, 0, 0, 4, 0);
                     25:                if(s_io(0, &cmd, 0, &ret, 4, cd->err))
                     26:                        ERR_RETURN;
                     27:                printf("sense(%d,%d): ", s_id, unit);
                     28:                if((ret.data[0]&0x7F) == 0)
                     29:                        printf("no error\n");
                     30:                else {
                     31:                        printf("error class=0x%x, code=0x%x, sense=0x%x",
                     32:                                (ret.data[0]>>4)&7, ret.data[0]&0xF, ret.data[2]&0xF);
                     33:                        if(ret.data[0]&0x80)
                     34:                                printf(", addr=0x%x", ret.data[3]+256L*ret.data[2]+256L*256*ret.data[1]);
                     35:                        printf("\n");
                     36:                }
                     37:        }
                     38:        return(TCL_OK);
                     39: }
                     40: 
                     41: static char *exstab[16] =
                     42: {
                     43:        "no sense",
                     44:        "recovered error",
                     45:        "not ready",
                     46:        "medium error",
                     47:        "hardware error",
                     48:        "illegal request",
                     49:        "unit attention",
                     50:        "data protect",
                     51:        "blank check",
                     52:        "vendor specific (#9)",
                     53:        "copy aborted",
                     54:        "aborted command",
                     55:        "equal",
                     56:        "volume overflow",
                     57:        "miscompare",
                     58:        "reserved (#f)",
                     59: };
                     60: 
                     61: void
                     62: gen_extsense(uchar *data, char *dest, int ndata)
                     63: {
                     64:        int class;
                     65: 
                     66: #pragma ref ndata
                     67: 
                     68:        class = (data[0]>>4)&7;
                     69:        if(class == 7){
                     70:                if(data[0]&0x80)
                     71:                        sprintf(dest, "extended sense: %s info=#%2.2x#%2.2x#%2.2x#%2.2x", exstab[data[2]&0xF], data[3], data[4], data[5], data[6]);
                     72:                else
                     73:                        sprintf(dest, "extended sense: %s", exstab[data[2]&0xF]);
                     74:        } else {
                     75:                sprintf(dest, "sense: class=#%x, code=#%x", class, data[0]&0xF);
                     76:        }
                     77: }

unix.superglobalmegacorp.com

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