|
|
1.1 root 1: #include <stdio.h>
2: #include "../scsi.h"
3: #include "../scsish.h"
4: #include "fns.h"
5:
6: static int
7: my_read(int lun, long blk, struct scsi_return *ret, char *err)
8: {
9: struct scsi_cmd cmd;
10: int n;
11:
12: cmd.bus_id = s_id;
13: set10(cmd, 0x28, lun<<5, blk>>24, blk>>16, blk>>8, blk, 0, 0, 1, 0);
14: n = ss_io(0, &cmd, 0, ret, 1024, err);
15: return(n);
16: }
17:
18: int
19: sony_readid(int niargs, int *iargs, int ncargs, char **cargs, char *err)
20: {
21: struct scsi_return ret;
22: char buf[128];
23: int drive = iargs[0];
24: long blk, lastb;
25: int pr = 0;
26:
27: #pragma ref ncargs
28: #pragma ref cargs
29:
30: buf[0] = 0;
31: if(niargs == 2){
32: if((blk = iargs[1]) < 0){
33: blk = -blk;
34: pr = 1;
35: }
36: } else {
37: if(my_read(drive, 0L, &ret, err) == 0)
38: goto done;
39: blk = 1;
40: }
41: for(lastb = -1;;){
42: if(pr){
43: printf("%d: ", blk);
44: }
45: if(my_read(drive, blk, &ret, err))
46: break;
47: lastb = blk;
48: blk = ((long *)ret.data)[9];
49: }
50: if(lastb < 0){
51: printf("read(blk=%d) failed\n", blk);
52: return(1);
53: }
54: if(my_read(drive, lastb, &ret, err) != 0)
55: return(1);
56: done:
57: strncpy(buf, (char *)&ret.data[42], 128);
58: buf[127] = 0;
59: printf("(%d,%d): '%s'\n", s_id, drive, buf);
60: return(0);
61: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.