|
|
1.1 root 1: #include <stdio.h>
2: #include "../scsi.h"
3: #include "../scsish.h"
4: #include "../tcl.h"
5: #include "fns.h"
6:
7: static int
8: my_read(int lun, long blk, struct scsi_return *ret, char *err)
9: {
10: struct scsi_cmd cmd;
11: int n;
12:
13: cmd.bus_id = s_id;
14: set10(cmd, 0x28, lun<<5, blk>>24, blk>>16, blk>>8, blk, 0, 0, 1, 0);
15: n = ss_io(0, &cmd, 0, ret, 1024, err);
16: return(n);
17: }
18:
19: int
20: sony_readid(ClientData cd, Tcl_Interp *it, int argc, char **argv)
21: {
22: struct scsi_return ret;
23: char buf[128];
24: int drive;
25: long blk, lastb, zero;
26: int pr = 0;
27: int c;
28: extern int optind;
29: extern char *optarg;
30:
31: zero = 0;
32: while((c = getopt(argc, argv, "vz:")) != -1)
33: switch(c)
34: {
35: case 'v': pr = 1; break;
36: case 'z': zero = atol(optarg); break;
37: default: USAGE_RETURN
38: }
39: if(optind >= argc)
40: argv[--optind] = "0";
41: for(; optind < argc; optind++){
42: drive = atoi(argv[optind]);
43: buf[0] = 0;
44: blk = zero;
45: if(blk == 0){
46: if(my_read(drive, blk, &ret, cd->err) == 0)
47: goto done;
48: blk++;
49: }
50: for(lastb = -1;;){
51: if(pr){
52: printf("%d: ", blk);
53: fflush(stdout);
54: }
55: if(my_read(drive, blk, &ret, cd->err))
56: break;
57: lastb = blk;
58: blk = ((long *)ret.data)[9];
59: }
60: if(lastb < 0){
61: printf("read(blk=%d) failed\n", blk);
62: ERR_RETURN
63: }
64: if(my_read(drive, lastb, &ret, cd->err) != 0)
65: ERR_RETURN
66: done:
67: strncpy(buf, (char *)&ret.data[42], 128);
68: buf[127] = 0;
69: printf("(%d,%d): '%s'\n", s_id, drive, buf);
70: fflush(stdout);
71: }
72: return(TCL_OK);
73: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.