Annotation of researchv10dc/cmd/oworm/scsi/write.c, revision 1.1.1.1

1.1       root        1: #include       "scsi.h"
                      2: 
                      3: static
                      4: swrite(drive, block, nblock, input)
                      5:        struct scsi_i *input;
                      6: {
                      7:        struct scsi_o output;
                      8: 
                      9:        input->bus_id = scsi_id;
                     10:        input->cmd[0] = 0x2A;
                     11:        input->cmd[1] = drive<<5;
                     12:        input->cmd[2] = block>>24;
                     13:        input->cmd[3] = block>>16;
                     14:        input->cmd[4] = block>>8;
                     15:        input->cmd[5] = block;
                     16:        input->cmd[6] = 0;
                     17:        input->cmd[7] = nblock>>8;
                     18:        input->cmd[8] = nblock;
                     19:        input->cmd[9] = 0;
                     20:        if(scsiio(input, nblock*1024, &output, 0, "write") < 0)
                     21:                return(1);
                     22:        if(CHECK(output)){
                     23:                prcheck(1, &output);
                     24:                return(1);
                     25:        }
                     26:        return(0);
                     27: }
                     28: 
                     29: s_write(drive, block, nblock)
                     30: {
                     31:        struct scsi_o output;
                     32:        struct scsi_i input;
                     33:        register long *j, i;
                     34:        int nb = 3;
                     35: 
                     36:        if((drive < 0) || (drive > 7)){
                     37:                fprint(2, "bad drive number %d\n", drive);
                     38:                return(1);
                     39:        }
                     40:        fprint(1, "writing %d blocks [%d-%d] on drive %d: ", nblock, block, block+nblock-1, drive);
                     41:        while(nblock > 0){
                     42:                if(nblock < nb)
                     43:                        nb = nblock;
                     44:                for(j = (long *)input.data, i = nb*256-1; i >= 0; i--)
                     45:                        *j++ = block;
                     46:                if(swrite(drive, block, nb, &input))
                     47:                        return(1);
                     48:                nblock -= nb;
                     49:                block += nb;
                     50:        }
                     51:        fprint(1, "done\n");
                     52:        return(0);
                     53: }

unix.superglobalmegacorp.com

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