📄 translate.c
字号:
#include <string.h>#include <stdio.h>#include <scsi/cd.h>#include "cdda.h"u_longtranslate(SCSI *fd, char *time){ static struct sc_cd_toc *toc = NULL; static int track; int len, i; u_long lba = 0; char *t, *sl, *msf, *tok; if (toc == NULL) { len = sizeof(struct sc_cd_toc) + 99*sizeof(struct sc_cd_toc_track); if ((toc=(struct sc_cd_toc *)malloc(len)) == NULL) { fprintf(stderr, "%s: malloc failure\n"); return -1; } if (sc_cd_read_toc(fd, 0, 0, len, toc) < 0) { sc_fstatus(fd, stderr, prg, "cd-read-toc", 3); return -1; } track = toc->first; } if (time) { if ((t=strdup(time)) == NULL) { fprintf(stderr, "%s: malloc failure\n"); return -1; } msf = NULL; if (sl=strchr(t, '/')) { *sl = '\0'; track = atoi(t); if (strchr(sl+1, ':')) { msf = sl+1; } else { fprintf(stderr, "%s: track/index time spec not implemented\n", prg); return -1; } } else if (strchr(t, ':')) { msf = t; } else track = atoi(t); if (msf) { tok = strtok(msf, ":"); lba = atoi(tok) * 60; tok = strtok(NULL, ":"); lba = (lba+atoi(tok)) * 75; if (tok=strtok(NULL, ":")) { lba += atoi(tok); } } free(t); } else { lba = 0; track++; } for (i=0; i<toc->notr; i++) { if (toc->track[i].number == track || (i>0 && toc->track[i-1].number == track-1)) return toc->track[i].addr + lba; } fprintf(stderr, "%s: illegal track: %d\n", prg, track); return -1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -