Annotation of researchv10no/cmd/worm/scsi/wren/driver.c, revision 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.