|
|
researchv10 Dan Cross
#include "scsi.h"
static
myread(drive, block, o)
long block;
struct scsi_o *o;
{
struct scsi_i input;
input.bus_id = scsi_id;
input.cmd[0] = 0x28;
input.cmd[1] = drive<<5;
input.cmd[2] = block>>24;
input.cmd[3] = block>>16;
input.cmd[4] = block>>8;
input.cmd[5] = block;
input.cmd[6] = 0;
input.cmd[7] = 0;
input.cmd[8] = 1;
input.cmd[9] = 0;
if(scsiio(&input, 0, o, 1024, "readid") < 0)
return(1);
if(CHECK(*o))
return(1);
return(0);
}
/*
return label, UNLABELLED or "" (error)
*/
s_readid(drive, buf)
char *buf;
{
struct scsi_i input;
struct scsi_o output;
long b, lastb;
buf[0] = 0;
scsi_shush = 1;
if(myread(drive, 0L, &output) == 0)
goto done;
for(b = 1, lastb = -1;;){
if(myread(drive, b, &output))
break;
lastb = b;
b = ((long *)output.data)[9];
}
scsi_shush = 0;
if(lastb < 0){
s_sense(drive, 1);
strcpy(buf, UNLABELLED);
return;
}
myread(drive, lastb, &output);
done:
strncpy(buf, (char *)&output.data[42], 128);
buf[127] = 0;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.