⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 translate.c

📁 使用libscsi做的一系列cdrom操作工具程序。包含cdwrite,cdflush,cdda三个程序
💻 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 + -