Annotation of researchv10dc/cmd/worm/scsi/wren/driver.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: #include       "wren.h"
                      7: 
                      8: static Wren *types[] =
                      9: {
                     10:        &wr_elite,
                     11:        &wr_wren5,
                     12:        0
                     13: };
                     14: 
                     15: static Wren *curtype = 0;
                     16: 
                     17: static int
                     18: setwren(char *err)
                     19: {
                     20:        int n;
                     21:        char product[17];
                     22:        int found;
                     23:        struct scsi_cmd cmd;
                     24:        struct scsi_return ret;
                     25: 
                     26:        /* find drive type */
                     27:        set6(cmd, 0x12, 0, 0, 0, 32, 0);
                     28:        if(s_io(0, &cmd, 0, &ret, 32, err))
                     29:                return(-1);
                     30:        fixedstr(&ret.data[16], 16, product);
                     31:        for(n = 0, found = 0; types[n]; n++)
                     32:                if(strcmp(product, types[n]->ident) == 0){
                     33:                        found = 1;
                     34:                        break;
                     35:                }
                     36:        if(found){
                     37:                if(types[n] != curtype){
                     38:                        curtype = types[n];
                     39:                        printf("drive is a %s (%s)\n",
                     40:                                curtype->desc, curtype->ident);
                     41:                }
                     42:        } else {
                     43:                curtype = types[0];
                     44:                printf("drive is '%s'; pretending it's a %s\n",
                     45:                        product, curtype->desc);
                     46:        }
                     47:        return(0);
                     48: }
                     49: 
                     50: int wr_modesense(ClientData cd, Tcl_Interp *it, int argc, char **argv)
                     51: {
                     52:        if(setwren(cd->err))
                     53:                ERR_RETURN
                     54:        if(curtype->msense == 0){
                     55:                strcpy(cd->err, "modesense not implemented");
                     56:                ERR_RETURN
                     57:        }
                     58:        if((*curtype->msense)(cd, argc, argv))
                     59:                ERR_RETURN
                     60:        return(TCL_OK);
                     61: }
                     62: 
                     63: int wr_modeselect(ClientData cd, Tcl_Interp *it, int argc, char **argv)
                     64: {
                     65:        if(setwren(cd->err))
                     66:                ERR_RETURN
                     67:        if(curtype->mselect == 0){
                     68:                strcpy(cd->err, "modeselect not implemented");
                     69:                ERR_RETURN
                     70:        }
                     71:        if((*curtype->mselect)(cd, argc, argv))
                     72:                ERR_RETURN
                     73:        return(TCL_OK);
                     74: }
                     75: 
                     76: int wr_diag(ClientData cd, Tcl_Interp *it, int argc, char **argv)
                     77: {
                     78:        if(setwren(cd->err))
                     79:                ERR_RETURN
                     80:        if(curtype->diag == 0){
                     81:                strcpy(cd->err, "diagnostics not implemented");
                     82:                ERR_RETURN
                     83:        }
                     84:        if((*curtype->diag)(cd, argc, argv))
                     85:                ERR_RETURN
                     86:        return(TCL_OK);
                     87: }
                     88: 
                     89: int wr_logsense(ClientData cd, Tcl_Interp *it, int argc, char **argv)
                     90: {
                     91:        if(setwren(cd->err))
                     92:                ERR_RETURN
                     93:        if(curtype->lsense == 0){
                     94:                strcpy(cd->err, "logging not implemented");
                     95:                ERR_RETURN
                     96:        }
                     97:        if((*curtype->lsense)(cd, argc, argv))
                     98:                ERR_RETURN
                     99:        return(TCL_OK);
                    100: }
                    101: 
                    102: int wr_logselect(ClientData cd, Tcl_Interp *it, int argc, char **argv)
                    103: {
                    104:        if(setwren(cd->err))
                    105:                ERR_RETURN
                    106:        if(curtype->lselect == 0){
                    107:                strcpy(cd->err, "logging not implemented");
                    108:                ERR_RETURN
                    109:        }
                    110:        if((*curtype->lselect)(cd, argc, argv))
                    111:                ERR_RETURN
                    112:        return(TCL_OK);
                    113: }

unix.superglobalmegacorp.com

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