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

📄 duplicate.c

📁 -一个LINUX下的使用方&#63845 的CD-ROM刻录软件,开放源码
💻 C
📖 第 1 页 / 共 5 页
字号:
void draw_read_menu() {GtkWidget *hbox, *vbox;GtkWidget *f1,*f2, *f3;GtkWidget *b1;GtkWidget *e1;GtkWidget *l1;GtkWidget *tbl, *check;	/* prepare draw area */	clear_actionspace();	f1 = gtk_frame_new(text(107));	set_font_and_color(f1,BOLDFONT,NULL);	gtk_box_pack_start(GTK_BOX(actionspace),f1,FALSE,FALSE,0);	gtk_widget_show(f1);	tbl = gtk_table_new(2,16,TRUE);		gtk_table_set_col_spacing(GTK_TABLE(tbl),3,10);	gtk_table_set_col_spacing(GTK_TABLE(tbl),14,5);	gtk_container_set_border_width(GTK_CONTAINER (tbl),5);	gtk_container_add(GTK_CONTAINER(f1),tbl);	gtk_widget_show(tbl);	devices_setup_read(0, tbl, 1);	devices_setup_image(1, tbl);	/* devices_setup_write(2, tbl); */	/* left and right info-frames */	tbl = gtk_table_new(1,2,TRUE);	gtk_table_set_col_spacings(GTK_TABLE(tbl),10);	gtk_box_pack_start(GTK_BOX(actionspace),tbl,TRUE,TRUE,10);	gtk_widget_show(tbl);	vbox = gtk_vbox_new(FALSE,10);	gtk_table_attach_defaults(GTK_TABLE(tbl),vbox,0,1,0,1);	f1 = gtk_frame_new(text(96));	set_font_and_color(f1,BOLDFONT,NULL);	gtk_box_pack_start(GTK_BOX(vbox),f1,TRUE,TRUE,0);	gtk_widget_show(f1);	f3 = gtk_frame_new(text(296));	set_font_and_color(f3,BOLDFONT,NULL);	gtk_box_pack_start(GTK_BOX(vbox),f3,FALSE,FALSE,0);	gtk_widget_show(f3);	f2 = gtk_frame_new(text(97));	set_font_and_color(f2,BOLDFONT,NULL);	gtk_table_attach_defaults(GTK_TABLE(tbl),f2,1,2,0,1);	gtk_widget_show(f2);	gtk_widget_show(vbox);	/* button bar at the bottom */	hbox = gtk_hbox_new(TRUE,10);	gtk_box_pack_start(GTK_BOX(actionspace),hbox,FALSE,TRUE,10);	gtk_widget_show(hbox);	b1 = gtk_button_new_with_label(text(148));	gtk_box_pack_start(GTK_BOX(hbox),b1,TRUE,TRUE,10);	gtk_widget_show(b1);	gtk_signal_connect(GTK_OBJECT(b1), "clicked",		GTK_SIGNAL_FUNC(readalltracks_clicked), NULL);	define_tooltip(b1, help(50));	/*	b1 = gtk_button_new_with_label(text(149));	gtk_box_pack_start(GTK_BOX(hbox),b1,TRUE,TRUE,10);	gtk_widget_show(b1);	gtk_signal_connect(GTK_OBJECT(b1), "clicked",		GTK_SIGNAL_FUNC(eject_clicked), NULL);	*/	/* left info frame */	vbox = gtk_vbox_new(FALSE,0);	gtk_container_add(GTK_CONTAINER(f1),vbox);	gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);	gtk_widget_show(vbox);	tbl = gtk_table_new(4,8,TRUE);	gtk_table_set_row_spacings(GTK_TABLE(tbl),10);	gtk_table_set_col_spacings(GTK_TABLE(tbl),10);	gtk_box_pack_start(GTK_BOX(vbox),tbl,FALSE,FALSE,10);	gtk_widget_show(tbl);		l1 = rightjust_gtk_label_new(text(103));	gtk_table_attach_defaults(GTK_TABLE(tbl),l1,0,2,0,1);	gtk_widget_show(l1);	e1 = gtk_entry_new();	cdlist_l1 = e1;	gtk_entry_set_editable(GTK_ENTRY(e1),FALSE);	gtk_table_attach_defaults(GTK_TABLE(tbl),e1,2,8,0,1);	gtk_widget_show(e1);	l1 = rightjust_gtk_label_new(text(104));	gtk_table_attach_defaults(GTK_TABLE(tbl),l1,0,2,1,2);	gtk_widget_show(l1);	e1 = gtk_entry_new();	cdlist_l2 = e1;	gtk_entry_set_editable(GTK_ENTRY(e1),FALSE);	gtk_table_attach_defaults(GTK_TABLE(tbl),e1,2,8,1,2);	gtk_widget_show(e1);	l1 = rightjust_gtk_label_new(text(105));	gtk_table_attach_defaults(GTK_TABLE(tbl),l1,0,2,2,3);	gtk_widget_show(l1);	e1 = gtk_entry_new();	cdlist_l3 = e1;	gtk_entry_set_editable(GTK_ENTRY(e1),FALSE);	gtk_table_attach_defaults(GTK_TABLE(tbl),e1,2,8,2,3);	gtk_widget_show(e1);	l1 = rightjust_gtk_label_new(text(145));	gtk_table_attach_defaults(GTK_TABLE(tbl),l1,0,2,3,4);	gtk_widget_show(l1);	e1 = gtk_entry_new();	cdlist_l4 = e1;	gtk_entry_set_editable(GTK_ENTRY(e1),FALSE);	gtk_table_attach_defaults(GTK_TABLE(tbl),e1,2,8,3,4);	gtk_widget_show(e1);	/* options frame */	vbox = gtk_vbox_new(FALSE,0);	gtk_container_add(GTK_CONTAINER(f3),vbox);	gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);	gtk_widget_show(vbox);	tbl = gtk_table_new(1,8,TRUE);	gtk_table_set_col_spacings(GTK_TABLE(tbl),10);	gtk_box_pack_start(GTK_BOX(vbox),tbl,FALSE,FALSE,10);	gtk_widget_show(tbl);	check = gtk_check_button_new_with_label(text(297));	gtk_signal_connect(GTK_OBJECT(check),"clicked",		GTK_SIGNAL_FUNC(readoptions_selected),GINT_TO_POINTER(0));	gtk_table_attach_defaults(GTK_TABLE(tbl),check,1,8,0,1);	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check),                curset.indexscan);	define_tooltip(check, help(80));	gtk_widget_show(check);	/* right info frame */	vbox = gtk_vbox_new(FALSE,0);	gtk_container_add(GTK_CONTAINER(f2),vbox);	gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);	gtk_widget_show(vbox);	tbl = gtk_table_new(4,8,TRUE);	gtk_table_set_row_spacings(GTK_TABLE(tbl),10);	gtk_table_set_col_spacings(GTK_TABLE(tbl),10);	gtk_box_pack_start(GTK_BOX(vbox),tbl,FALSE,FALSE,10);	gtk_widget_show(tbl);		l1 = rightjust_gtk_label_new(text(146));	gtk_table_attach_defaults(GTK_TABLE(tbl),l1,0,3,0,1);	gtk_widget_show(l1);	e1 = gtk_entry_new();	imglist_l1 = e1;	gtk_signal_connect(GTK_OBJECT(e1), "activate",		GTK_SIGNAL_FUNC(set_image_prefix_callback),NULL);	gtk_table_attach_defaults(GTK_TABLE(tbl),e1,3,8,0,1);	gtk_widget_show(e1);	define_tooltip(e1, help(51));	l1 = rightjust_gtk_label_new(text(147));	gtk_table_attach_defaults(GTK_TABLE(tbl),l1,0,3,1,2);	gtk_widget_show(l1);	e1 = gtk_entry_new();	imglist_l2 = e1;	gtk_entry_set_editable(GTK_ENTRY(e1),FALSE);	gtk_table_attach_defaults(GTK_TABLE(tbl),e1,3,8,1,2);	gtk_widget_show(e1);	l1 = leftjust_gtk_label_new(text(272));	gtk_table_attach_defaults(GTK_TABLE(tbl),l1,1,8,2,3);	gtk_widget_show(l1);	e1 = gtk_entry_new();	imglist_l3 = e1;	gtk_entry_set_editable(GTK_ENTRY(e1),FALSE);	gtk_table_attach_defaults(GTK_TABLE(tbl),e1,3,8,3,4);	gtk_widget_show(e1);	gtk_widget_show(actionspace);	/* fill entries */	fill_read_menu();}/* fill the entries in the verify_cd_menu */void fill_verify_menu() {gchar tmp[MAXLINE];GList *loop;GtkWidget *menu;GtkWidget *menu_item, *menuselitem;gint menuidx, menuhistory;gint i,len;	/* get list of toc-files (save in tocfiles var) */	scan_for_toc_files();	/* clear out the old menu first (if any) */	gtk_option_menu_remove_menu(GTK_OPTION_MENU (write_toc_menu));	menu = gtk_menu_new();	menuselitem = NULL;	menuidx = 0; menuhistory = 0;	i = 0;	loop = g_list_first(tocfiles);		while (loop) {		/* a bug in gtk wont allow longer option-menus...		   well, then strip the strings down (not nice, but 		   so far the only way I can think of */		len = strlen((gchar *)loop->data);		if (len > 24) {			strcpy(tmp, ".. ");			strcat(tmp, (gchar *)loop->data + len - 24);		} else {			strcpy(tmp, (gchar *)loop->data);		}		menu_item = gtk_menu_item_new_with_label(tmp);		if (menuselitem == NULL) {			/* default first element */			menuselitem = menu_item;		} 		gtk_signal_connect(GTK_OBJECT(menu_item),			"activate", GTK_SIGNAL_FUNC(tocwrite_selected),			GINT_TO_POINTER(i));		if (strcmp(curset.tocfile, (gchar *)loop->data) == 0) {			menuhistory = menuidx;			menuselitem = menu_item;		}		gtk_menu_append (GTK_MENU (menu), menu_item);		gtk_widget_show (menu_item);		loop = loop->next;		menuidx++;		i++;	}	/* no toc file found? */	if (i == 0) {			menu_item = gtk_menu_item_new_with_label(text(235));		gtk_signal_connect(GTK_OBJECT(menu_item),			"activate", GTK_SIGNAL_FUNC(tocwrite_selected),			GINT_TO_POINTER(-2));		if (strcmp(curset.tocfile, "-") == 0) {			menuhistory = menuidx;			menuselitem = menu_item;		}		gtk_menu_append (GTK_MENU (menu), menu_item);		gtk_widget_show (menu_item);	}	gtk_option_menu_set_menu (GTK_OPTION_MENU (write_toc_menu), menu);	gtk_option_menu_set_history(GTK_OPTION_MENU (write_toc_menu),menuhistory);	/* toggle currently active menu */ 	if (menuselitem != NULL) {		gtk_menu_item_activate(GTK_MENU_ITEM (menuselitem));	} else {		/* if no active menu, activate the last set */		/* (one the fly in this case) */		gtk_menu_item_activate(GTK_MENU_ITEM (menu_item));	}		/* ---------------- */	/* cd loaded? */	if (cdinfo.nr_tracks == -1) {		gtk_entry_set_text(GTK_ENTRY(vrylist_l1), text(156));    		gtk_entry_set_text(GTK_ENTRY(vrylist_l2),"");			gtk_entry_set_text(GTK_ENTRY(vrylist_l3),"");			gtk_entry_set_text(GTK_ENTRY(vrylist_l4),"");			return;        }	if (cdinfo.nr_tracks == -2) {		gtk_entry_set_text(GTK_ENTRY(vrylist_l1), text(196));    		gtk_entry_set_text(GTK_ENTRY(vrylist_l2),"");			gtk_entry_set_text(GTK_ENTRY(vrylist_l3),"");			gtk_entry_set_text(GTK_ENTRY(vrylist_l4),"");			return;        }	/* cd-type */	determine_cd_type(tmp,0);	gtk_entry_set_text(GTK_ENTRY(vrylist_l1), tmp); 	/* cd-label */	if (cdinfo.title && cdinfo.artist && 		cdinfo.title[0] != '\0' && setupdata.option_displaycdtext) {		g_snprintf(tmp,MAXLINE,"%s / %s", cdinfo.title, cdinfo.artist);		gtk_entry_set_text(GTK_ENTRY(vrylist_l2), tmp);		gtk_entry_set_position(GTK_ENTRY(vrylist_l2),0);	} else 	if (cdinfo.cddb_dtitle != NULL) {		gtk_entry_set_text(GTK_ENTRY(vrylist_l2), cdinfo.cddb_dtitle);		gtk_entry_set_position(GTK_ENTRY(vrylist_l2),0);	} else {		gtk_entry_set_text(GTK_ENTRY(vrylist_l2),"");    	}	/* cd-size */	convert_frames2mbminstring(cdinfo.total_size, tmp);	gtk_entry_set_text(GTK_ENTRY(vrylist_l3), tmp);	/* nr tracks */		g_snprintf(tmp,MAXLINE,"%d",cdinfo.nr_tracks);	gtk_entry_set_text(GTK_ENTRY(vrylist_l4), tmp);}/* callbacks for verify-screen */void verify_clicked(GtkWidget *widget, gpointer data) {gint stat;gint ret;track_read_param_t *trackparam;GList *loop;gint i;gint datat,audio;gint datasize;	/* no cd-reader defined */	if (curset.reader_devnr == -1) {		show_dialog(ICO_ERROR,text(203), T_OK, NULL, NULL, 0);		return;	}        /* now check if our cd-information is still valid */        get_cd_toc_and_volid(curset.reader_devnr);	/* cd loaded? */	if (cdinfo.nr_tracks < 0) {		fill_verify_menu();		show_dialog(ICO_WARN,text(266),T_OK,NULL,NULL,0);		return;	}	/* no tocfile selected */	if (strcmp(curset.tocfile,"-") == 0) {		show_dialog(ICO_WARN,text(237),T_OK,NULL,NULL,0);		return;	}		/* first check if all tracks we need are available on hd */	stat = check_write_files(0);	switch(stat) {	/* files with wrong size */	case 1:		ret = show_dialog(ICO_QUEST,text(198),T_ANYWAY,T_CANCEL, 			NULL, 1);		if (ret == 1) {			/* aborted */			return;		}			break;	/* files missing */	case 2:		show_dialog(ICO_ERROR,text(200),T_OK,NULL,NULL,0);		return;	/* no permission/invalid */	case 3:		show_dialog(ICO_ERROR,text(201),T_OK,NULL,NULL,0);		return;	}	/* now check if we have the correct cd to verify in the drive */	if (trackreadset.nrtracks != cdinfo.nr_tracks ||	    trackreadset.cdsize != cdinfo.total_size) {		show_dialog(ICO_WARN,text(238),T_OK,NULL,NULL,0);		return;	}	datat = 0;	audio = 0;	datasize = 0;	/* fill some additional data in the trackreadset-structure */	loop = g_list_first(trackreadset.trackparams);	for(i=0; i<cdinfo.nr_tracks; i++) {		if (loop == NULL) {			/* should never happen */			show_dialog(ICO_WARN,text(238),T_OK,NULL,NULL,0);			return;		}		trackparam = loop->data;				trackparam->trackinfo_index = i;		/* does the tracktypes match? */		if (trackparam->tracktype != trackinfo[i]->type) {			show_dialog(ICO_WARN,text(238),T_OK,NULL,NULL,0);			return;		}		if (trackparam->tracktype == 0) {			/* data track */			trackparam->kbyte = trackinfo[i]->size *				(DATASECTORSIZE/1024);			trackparam->startoffset = trackinfo[i]->start_sec;			if (i == cdinfo.nr_tracks-1) {				/* last track - leadout is track-end */				trackparam->endoffset = cdinfo.leadout - 2;			} else {				/* sub 150 (2 sec leadout),				   sub 2 (2 run out sectors) */				trackparam->endoffset =					trackinfo[i+1]->start_sec -150-2;			}			datat++;			datasize += trackparam->frames;		} else {			/* audio */			trackparam->kbyte = trackinfo[i]->size *				CDDAFRAME/1024;			audio++;		}			loop = loop->next;	}	/* OK...now we know we have the correct CD in the drive and a fully 	   functional set of image-files on the HD. All set for verifying */	/* check if are allowed to verify audio */	if (curset.noaudioverify == 1 && datat == 0 && audio > 0) {		show_dialog(ICO_WARN,text(248), T_OK, NULL, NULL, 0);		return;	}	/* do we have to recalc the percentages because we dont want	   to verify audio? */	if (curset.noaudioverify == 1 && audio > 0 && datat > 0) {		loop = g_list_first(trackreadset.trackparams);		while(loop) {			trackparam = loop->data;			/* only take data-tracks in account */			trackparam->percent = 				(gfloat)trackparam->frames / datasize;			loop = loop->next; 		}	}	show_and_do_verify_tracks(curset.reader_devnr);}void verifyoptions_selected(GtkWidget *item, gpointer nr) {gint sel;	sel = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(item));	switch(GPOINTER_TO_INT(nr)) {		case 0:			curset.noaudioverify = sel;

⌨️ 快捷键说明

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