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

📄 cdrecord.c

📁 另一种方法编辑刻录程序的代码!要的与偶联系呀
💻 C
📖 第 1 页 / 共 4 页
字号:
		usage(EX_BAD);	}	if (*flagsp & (F_LOAD|F_MSINFO|F_TOC|F_FIX|F_VERSION|F_CHECKDRIVE|F_PRCAP|F_INQUIRY|F_SCANBUS|F_RESET)) {		if (tracks != 0) {			errmsgno(EX_BAD, "No tracks allowed with this option\n");			usage(EX_BAD);		}		return;	}	if (tracks == 0 && (*flagsp & (F_LOAD|F_EJECT|F_BLANK)) == 0) {		errmsgno(EX_BAD, "No tracks specified. Need at least one.\n");		usage(EX_BAD);	}	*tracksp = tracks;}LOCAL voidset_trsizes(dp, tracks, trackp)	cdr_t	*dp;	int	tracks;	track_t	*trackp;{	int	i;	/*	 * We are using SCSI Group 0 write	 * and cannot write more than 255 secs at once.	 */	data_secs_per_tr = bufsize/DATA_SEC_SIZE;	audio_secs_per_tr = bufsize/AUDIO_SEC_SIZE;	data_secs_per_tr = min(255, data_secs_per_tr);	audio_secs_per_tr = min(255, audio_secs_per_tr);	trackp[1].flags		|= TI_FIRST;	trackp[tracks].flags	|= TI_LAST;		for (i = 1; i <= tracks; i++) {		trackp[i].secspt =			is_audio(&trackp[i]) ?				audio_secs_per_tr :				data_secs_per_tr;		if (is_packet(&trackp[i]) && trackp[i].pktsize > 0) {			if (trackp[i].secspt >= trackp[i].pktsize) {				trackp[i].secspt = trackp[i].pktsize;			} else {				comerrno(EX_BAD,					"Track %d packet size %d exceeds buffer limit of %d sectors",					i, trackp[i].pktsize, trackp[i].secspt);			}		}		if ((dp->cdr_flags & CDR_SWABAUDIO) != 0 &&					is_audio(&trackp[i])) {			trackp[i].flags ^= TI_SWAB;		}	}}EXPORT voidload_media(dp)	cdr_t	*dp;{	int	code;	int	key;	/*	 * Do some preparation before...	 */	silent++;			/* Be quiet if this fails	*/	test_unit_ready();		/* First eat up unit attention	*/	(*dp->cdr_load)();		/* now try to load media and	*/	scsi_start_stop_unit(1, 0);	/* start unit in silent mode	*/	silent--;	if (!wait_unit_ready(60)) {		code = scsi_sense_code();		key = scsi_sense_key();		scsi_prevent_removal(0);/* In case someone locked it	*/		if (key == SC_NOT_READY && (code == 0x3A || code == 0x30))			comerrno(EX_BAD, "No disk / Wrong disk!\n");		comerrno(EX_BAD, "CD/DVD-Recorder not ready.\n");	}	scsi_prevent_removal(1);	scsi_start_stop_unit(1, 0);	wait_unit_ready(120);	silent++;	rezero_unit();	/* Is this needed? Not supported by some drvives */	silent--;	test_unit_ready();	scsi_start_stop_unit(1, 0);	wait_unit_ready(120);}EXPORT voidunload_media(dp, flags)	cdr_t	*dp;	int	flags;{	scsi_prevent_removal(0);	if ((flags & F_EJECT) != 0)		(*dp->cdr_unload)();}LOCAL voidcheck_recovery(dp, flags)	cdr_t	*dp;	int	flags;{	if ((*dp->cdr_check_recovery)()) {		errmsgno(EX_BAD, "Recovery needed.\n");		unload_media(dp, flags);		exit(EX_BAD);	}}#define	DEBUGvoid audioread(dp, flags)	cdr_t	*dp;	int	flags;{#ifdef	DEBUG	int speed = 1;	int dummy = 0;extern	struct	scsi_capacity	cap;	if ((*dp->cdr_set_speed_dummy)(speed, dummy) < 0)		exit(-1);	if ((*dp->cdr_set_secsize)(2352) < 0)		exit(-1);	cap.c_bsize = 2352;	read_scsi(buf, 1000, 1);	printf("XXX:\n");	write(1, buf, 512);	unload_media(dp, flags);	exit(0);#endif}LOCAL voidprint_msinfo(dp)	cdr_t	*dp;{	long	off;	long	fa;	if ((*dp->cdr_session_offset)(&off) < 0) {		errmsgno(EX_BAD, "Cannot read session offset\n");		return;	}	if (lverbose)		printf("session offset: %ld\n", off);	if (dp->cdr_next_wr_address(0, (track_t *)0, &fa) < 0) {		errmsgno(EX_BAD, "Cannot read first writable address\n");		return;	}	printf("%ld,%ld\n", off, fa);}LOCAL voidprint_toc(dp)	cdr_t	*dp;{	int	first;	int	last;	long	lba;	long	xlba;	struct msf msf;	int	adr;	int	control;	int	mode;	int	i;	silent++;	if (read_capacity() < 0) {		silent--;		errmsgno(EX_BAD, "Cannot read capacity\n");		return;	}	silent--;	if (read_tochdr(dp, &first, &last) < 0) {		errmsgno(EX_BAD, "Cannot read TOC/PMA\n");		return;	}	printf("first: %d last %d\n", first, last);	for (i = first; i <= last; i++) {		read_trackinfo(i, &lba, &msf, &adr, &control, &mode);		xlba = -150 + \			msf.msf_frame + (75*msf.msf_sec) + (75*60*msf.msf_min);		if (xlba == lba/4)			lba = xlba;		print_track(i, lba, &msf, adr, control, mode);	}	i = 0xAA;	read_trackinfo(i, &lba, &msf, &adr, &control, &mode);	xlba = -150 + \		msf.msf_frame + (75*msf.msf_sec) + (75*60*msf.msf_min);	if (xlba == lba/4)		lba = xlba;	print_track(i, lba, &msf, adr, control, mode);}LOCAL voidprint_track(track, lba, msp, adr, control, mode)	int	track;	long	lba;	struct msf *msp;	int	adr;	int	control;	int	mode;{	long	lba_512 = lba*4;	if (track == 0xAA)		printf("track:lout ");	else		printf("track: %3d ", track);	printf("lba: %9ld (%9ld) %02d:%02d:%02d adr: %X control: %X mode: %d\n",			lba, lba_512,			msp->msf_min,			msp->msf_sec,			msp->msf_frame,			adr, control, mode);}LOCAL voidprtimediff(fmt, start, stop)	const	char	*fmt;	struct timeval	*start;	struct timeval	*stop;{	struct timeval tv;	tv.tv_sec = stop->tv_sec - start->tv_sec;	tv.tv_usec = stop->tv_usec - start->tv_usec;	while (tv.tv_usec > 1000000) {		tv.tv_usec -= 1000000;		tv.tv_sec += 1;	}	while (tv.tv_usec < 0) {		tv.tv_usec += 1000000;		tv.tv_sec -= 1;	}	/*	 * We need to cast timeval->* to long because	 * of the broken sys/time.h in Linux.	 */	printf("%s%4ld.%03lds\n", fmt, (long)tv.tv_sec, (long)tv.tv_usec/1000);}#ifdef	HAVE_SYS_PRIOCNTL_H#include <sys/priocntl.h>#include <sys/rtpriocntl.h>EXPORT	voidraisepri(pri)	int pri;{	int		pid;	int		classes;	int		ret;	pcinfo_t	info;	pcparms_t	param;	rtinfo_t	rtinfo;	rtparms_t	rtparam;	pid = getpid();	/* get info */	strcpy(info.pc_clname, "RT");	classes = priocntl(P_PID, pid, PC_GETCID, (void *)&info);	if (classes == -1)		comerr("Cannot get priority class id priocntl(PC_GETCID)\n");	movebytes(info.pc_clinfo, &rtinfo, sizeof(rtinfo_t)); 	/* set priority to max */	rtparam.rt_pri = rtinfo.rt_maxpri - pri;	rtparam.rt_tqsecs = 0;	rtparam.rt_tqnsecs = RT_TQDEF;	param.pc_cid = info.pc_cid;	movebytes(&rtparam, param.pc_clparms, sizeof(rtparms_t));	ret = priocntl(P_PID, pid, PC_SETPARMS, (void *)&param);	if (ret == -1)		comerr("Cannot set priority class parameters priocntl(PC_SETPARMS)\n");}#else	/* HAVE_SYS_PRIOCNTL_H */#if defined(_POSIX_PRIORITY_SCHEDULING)#include <sched.h>LOCAL	intrt_raisepri(pri)	int pri;{	struct sched_param scp;	/*	 * Verify that scheduling is available	 */#ifdef	_SC_PRIORITY_SCHEDULING	if (sysconf(_SC_PRIORITY_SCHEDULING) == -1) {		errmsg("WARNING: RR-scheduler not available, disabling.\n");		return(-1);	}#endif	fillbytes(&scp, sizeof(scp), '\0');	scp.sched_priority = sched_get_priority_max(SCHED_RR) - pri;	if (sched_setscheduler(0, SCHED_RR, &scp) < 0) {		errmsg("WARNING: Cannot set RR-scheduler\n");		return (-1);	}	return (0);}#elseLOCAL	intrt_raisepri(pri)	int pri;{	return (-1);}#endifEXPORT	voidraisepri(pri)	int pri;{	if (rt_raisepri(pri) >= 0)		return;#ifdef	PRIO_PROCESS	if (setpriority(PRIO_PROCESS, getpid(), -20 + pri) < 0)		comerr("Cannot set priority.\n");#else	errmsgno(EX_BAD, "Cannot set priority on this OS.\n");#endif}#endif	/* HAVE_SYS_PRIOCNTL_H */LOCAL voidcheckgui(){	struct stat st;	if (fstat(STDERR_FILENO, &st) >= 0 && !S_ISCHR(st.st_mode)) {		isgui = TRUE;		if (lverbose > 1)			printf("Using remote (pipe) mode for interactive i/o.\n");	}}LOCAL char *astoll(s, ll)	register const char *s;        Llong *ll;{	char	*p;	long	l = 0;	p = astol(s, &l);	*ll = (Llong)l;	return (p);}LOCAL Llongnumber(arg, retp)	register char	*arg;		int	*retp;{	Llong	val	= 0;	if (*retp != 1)		return (val);	if (*arg == '\0') {		*retp = -1;	} else if (*(arg = astoll(arg, &val))) {		if (*arg == 'p' || *arg == 'P') {			val *= (1024*1024);			val *= (1024*1024*1024);			arg++;		}		if (*arg == 't' || *arg == 'T') {			val *= (1024*1024);			val *= (1024*1024);			arg++;		}		if (*arg == 'g' || *arg == 'G') {			val *= (1024*1024*1024);			arg++;		}		if (*arg == 'm' || *arg == 'M') {			val *= (1024*1024);			arg++;		}		else if (*arg == 'f' || *arg == 'F') {			val *= 2352;			arg++;		}		else if (*arg == 's' || *arg == 'S') {			val *= 2048;			arg++;		}		else if (*arg == 'k' || *arg == 'K') {			val *= 1024;			arg++;		}		else if (*arg == 'b' || *arg == 'B') {			val *= 512;			arg++;		}		else if (*arg == 'w' || *arg == 'W') {			val *= 2;			arg++;		}		if (*arg == '*' || *arg == 'x')			val *= number(++arg, retp);		else if (*arg != '\0')			*retp = -1;	}	return (val);}EXPORT intgetnum(arg, valp)	char	*arg;	long	*valp;{	int	ret = 1;	*valp = (long)number(arg, &ret);	return (ret);}EXPORT intgetllnum(arg, lvalp)	char	*arg;	Llong	*lvalp;{	int	ret = 1;	*lvalp = number(arg, &ret);	return (ret);}LOCAL intgetbltype(optstr, typep)	char	*optstr;	long	*typep;{	if (streql(optstr, "all")) {		*typep = BLANK_DISC;	} else if (streql(optstr, "disc")) {		*typep = BLANK_DISC;	} else if (streql(optstr, "disk")) {		*typep = BLANK_DISC;	} else if (streql(optstr, "fast")) {		*typep = BLANK_MINIMAL;	} else if (streql(optstr, "minimal")) {		*typep = BLANK_MINIMAL;	} else if (streql(optstr, "track")) {		*typep = BLANK_TRACK;	} else if (streql(optstr, "unreserve")) {		*typep = BLANK_UNRESERVE;	} else if (streql(optstr, "trtail")) {		*typep = BLANK_TAIL;	} else if (streql(optstr, "unclose")) {		*typep = BLANK_UNCLOSE;	} else if (streql(optstr, "session")) {		*typep = BLANK_SESSION;	} else if (streql(optstr, "help")) {		blusage(0);	} else {		error("Illegal blanking type '%s'.\n", optstr);		blusage(EX_BAD);		return (-1);	}	return (TRUE);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -