|
|
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.