📄 read.c
字号:
#include <scsi/da.h>#include <scsi/all.h>#include <scsi/taxm.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include "cdda.h"struct { struct sc_mode_header6 h; struct sc_mode_block_descriptor b; struct sc_mode_taxm_speed s;} mode_bdesc = { { 0, 0, 0, 1 }, { 0x82, 0, 0, 0, 0, 0, 0x9, 0x30 },#if SC_BIGENDIAN { 0, SC_MODE_TAXM_SPEED, 1, SC_TAXM_QUAD, SC_TAXM_QUAD }#else { SC_MODE_TAXM_SPEED, 0, 1, SC_TAXM_QUAD, SC_TAXM_QUAD }#endif};intdo_read(enum mode mode, SCSI *fd, FILE *fout, u_long start, u_long end, int nblocks){ char s[80]; u_char *buf; u_long i, n; u_long len = sizeof(struct sc_mode_header6) + sizeof(struct sc_mode_block_descriptor) + 3; if ((buf=(u_char *)sc_alloc(2352*nblocks)) == NULL) { fprintf(stderr, "%s: malloc failure\n", prg); return -1; } switch (mode) { case m_hp: mode_bdesc.b.dcode = 0; len -= 3; /* FALLTHROUGH */ case m_toshiba: if (sc_mode_select6(fd, 1, 0, len, (u_char *)&mode_bdesc) < 0) { sc_fstatus(fd, stderr, prg, "mode-select6", 3); sc_free(buf); return -1; } break; case m_yamaha: break; default: fprintf(stderr, "%s: unknown mode selected: %d\n", prg, mode); sc_free(buf); return -1; } for (i=start; i<end; i+=n/2352) { if (mode != m_yamaha) { if ((n=sc_da_read10(fd, i, (u_short) ((i+nblocks < end) ? nblocks : end-i), 2352*nblocks, buf)) < 0) { sprintf(s, "read10(%0xlx)", i); sc_fstatus(fd, stderr, prg, s, 3); sc_free(buf); return -1; } } else { if ((n=sc_cdr102_read_cdda(fd, 0, i, (u_long) ((i+nblocks < end) ? nblocks : end-i), 2352*nblocks, buf)) < 0) { sprintf(s, "read-cdda(%0xlx)", i); sc_fstatus(fd, stderr, prg, s, 3); sc_free(buf); return -1; } } if (fwrite(buf, 1, n, fout) != n) { fprintf(stderr, "%s: write error: %s\n", prg, strerror(errno)); sc_free(buf); return -1; } } sc_free(buf); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -