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

📄 duplicate.c

📁 -一个LINUX下的使用方&#63845 的CD-ROM刻录软件,开放源码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*	duplicate.c	Duplicate CD functions	15.5.99 tn*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <strings.h>#include <gtk/gtk.h>#include <gdk/gdk.h>#include "xcdroast.h"#include "main.h"#include "xpms/minidata.xpm"#include "xpms/miniaudio.xpm"#include "xpms/mininodata.xpm"#include "xpms/mininoaudio.xpm"#include "xpms/minitoc.xpm"#include "xpms/disc_eject.xpm"#include "xpms/disc_load.xpm"GList *imagelist;extern GtkWidget *toplevel;extern GtkWidget *sidespace;extern GtkWidget *workspace;track_read_set_t trackreadset;extern setup_data_t setupdata;extern current_set_t curset;extern cd_info_t cdinfo;extern track_info_t **trackinfo;extern gint wav_in;extern GtkWidget *wav_quit_button;extern gint wavplay_quit;extern gint submenu;GtkWidget *actionspace;GtkCList *cdlist, *imglist, *play_clist;GtkWidget *cdlist_l1, *cdlist_l2, *cdlist_l3, *cdlist_l4;GtkWidget *vrylist_l1, *vrylist_l2, *vrylist_l3, *vrylist_l4;GtkWidget *imglist_l1, *imglist_l2, *imglist_l3;GtkWidget *write_toc_menu;GList *tocfiles;void fill_read_menu();void fill_verify_menu();void fill_write_menu();void fill_delete_menu();void set_image_prefix_callback(GtkWidget *widget, gpointer data);void tocwrite_selected(GtkWidget *item, gpointer val);/* some stuff for the select-functions of the sidebar buttons */guint side_handlers[7];GtkWidget *side_widgets[7];GtkWidget *locked_button;extern guint side_handlers2[8];extern GtkWidget *side_widgets2[8];extern void fill_read_tracks(gint dontupdatecd);extern void fill_verify_tracks(gint dontupdateimglist);extern void fill_write_tracks();extern void fill_master_write_menu();void reset_duplicate_buttons(GtkWidget *exclude);extern void reset_duplicate_buttons2(GtkWidget *exclude);/* lock complete sidebar when doing stuff that takes a while (e.g. reload) */void do_lock() {int i;	if (submenu == 1) {		/* lock all and save currently selected button */		for (i = 0; i < 7; i++) {			gtk_signal_handler_block(GTK_OBJECT(side_widgets[i]),				side_handlers[i]);			if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(				side_widgets[i])) == 1) {				locked_button = side_widgets[i];			}		}	}	if (submenu == 2) {		/* lock all and save currently selected button */		for (i = 0; i < 8; i++) {			gtk_signal_handler_block(GTK_OBJECT(side_widgets2[i]),				side_handlers2[i]);			if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(				side_widgets2[i])) == 1) {				locked_button = side_widgets2[i];			}		}	}}/* free the lock after we are done */void do_unlock() {int i;	if (submenu == 1) {		for (i = 0; i < 7; i++) {			gtk_signal_handler_unblock(GTK_OBJECT(side_widgets[i]),				side_handlers[i]);		}		reset_duplicate_buttons(locked_button);	}	if (submenu == 2) {		for (i = 0; i < 8; i++) {			gtk_signal_handler_unblock(GTK_OBJECT(side_widgets2[i]),				side_handlers2[i]);		}		reset_duplicate_buttons2(locked_button);	}}/* fill the cd-info-list with data */void fill_cdlist() {GtkStyle *style;gchar *data[2];GdkPixmap *pixmap1, *pixmap2;GdkBitmap *mask1, *mask2;gint i, lcount;gchar tmp[MAXLINE];gchar tmp2[MAXLINE];	/* clean up first */	gtk_clist_clear(cdlist);	/* cd loaded? */	if (cdinfo.nr_tracks == -1) {		gtk_entry_set_text(GTK_ENTRY(cdlist_l1), text(156));			gtk_entry_set_text(GTK_ENTRY(cdlist_l2),"");			gtk_entry_set_text(GTK_ENTRY(cdlist_l3),"");			return;	}	if (cdinfo.nr_tracks == -2) {		gtk_entry_set_text(GTK_ENTRY(cdlist_l1), text(196));			gtk_entry_set_text(GTK_ENTRY(cdlist_l2),"");			gtk_entry_set_text(GTK_ENTRY(cdlist_l3),"");			return;	}	style = gtk_style_copy(gtk_widget_get_style(GTK_WIDGET(cdlist)));	pixmap1 = gdk_pixmap_create_from_xpm_d(cdlist->clist_window,		&mask1, &style->bg[GTK_STATE_NORMAL],(gchar **)minidata_xpm);	pixmap2 = gdk_pixmap_create_from_xpm_d(cdlist->clist_window,		&mask2, &style->bg[GTK_STATE_NORMAL],(gchar **)miniaudio_xpm);	data[0] = NULL;	lcount = 0;	for (i = 0; i < cdinfo.nr_tracks; i++) {		if (trackinfo[i]->type == 0) {			convert_frames2mbstring(trackinfo[i]->size,tmp2);			g_snprintf(tmp,MAXLINE,"%2d. %s [%s]",				trackinfo[i]->track_nr,				text(109), tmp2);			data[1] = tmp;			gtk_clist_append(cdlist,data);			gtk_clist_set_pixmap(cdlist,lcount,0,pixmap1,mask1);			lcount++;		} else {			convert_frames2minstring(trackinfo[i]->size,tmp2);			g_snprintf(tmp,MAXLINE,"%2d. %s [%s]",				trackinfo[i]->track_nr,				text(110), tmp2);			data[1] = tmp;			gtk_clist_append(cdlist,data);			gtk_clist_set_pixmap(cdlist,lcount,0,pixmap2,mask2);			lcount++;		}		/* we have cd-text for this track? */		if (setupdata.option_displaycdtext) {			if (trackinfo[i]->title != NULL && 			    trackinfo[i]->title[0] != '\0' ) {				g_snprintf(tmp,MAXLINE,"  CD-Text: %s", 					trackinfo[i]->title);				data[1] = tmp;				gtk_clist_append(cdlist,data);				set_clist_row_font(cdlist,lcount, SLANTFONT);				lcount++;			}		}		/* have we a cddb-title for this track? */		if (trackinfo[i]->cddb_ttitle != NULL) {			g_snprintf(tmp,MAXLINE,"     CDDB: %s", 				trackinfo[i]->cddb_ttitle);			data[1] = tmp;			gtk_clist_append(cdlist,data);			set_clist_row_font(cdlist,lcount, SLANTFONT);			lcount++;			} else		if (trackinfo[i]->volname != NULL) {			g_snprintf(tmp,MAXLINE,"     ISO9660: %s", 				trackinfo[i]->volname);			data[1] = tmp;			gtk_clist_append(cdlist,data);			set_clist_row_font(cdlist,lcount, SLANTFONT);			lcount++;			} 	}	/* get cd-type */	determine_cd_type(tmp,0);	gtk_entry_set_text(GTK_ENTRY(cdlist_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(cdlist_l2), tmp);		gtk_entry_set_position(GTK_ENTRY(cdlist_l2),0);	} else 	if (cdinfo.cddb_dtitle != NULL) {		gtk_entry_set_text(GTK_ENTRY(cdlist_l2), cdinfo.cddb_dtitle);			gtk_entry_set_position(GTK_ENTRY(cdlist_l2),0);	} else {		gtk_entry_set_text(GTK_ENTRY(cdlist_l2),"");		}	/* cd-size */	convert_frames2mbminstring(cdinfo.total_size, tmp);	gtk_entry_set_text(GTK_ENTRY(cdlist_l3), tmp);		}/* fill the image-info-list with data */void fill_imglist() {GtkStyle *style;gchar *data[2];GdkPixmap *pixmap1, *pixmap2, *pixmap3, *pixmap4, *pixmap5;GdkBitmap *mask1, *mask2, *mask3, *mask4, *mask5;gchar tmp[MAXLINE];gchar tmp2[MAXLINE];gchar basename[MAXLINE], oldbase[MAXLINE], fname[MAXLINE], *p;GList *loop;image_files_t *entry;gint lcount, count;gint sizecount;	/* clean up first */	gtk_clist_clear(imglist);	style = gtk_style_copy(gtk_widget_get_style(GTK_WIDGET(imglist)));	pixmap1 = gdk_pixmap_create_from_xpm_d(imglist->clist_window,		&mask1, &style->bg[GTK_STATE_NORMAL],(gchar **)minidata_xpm);	pixmap2 = gdk_pixmap_create_from_xpm_d(imglist->clist_window,		&mask2, &style->bg[GTK_STATE_NORMAL],(gchar **)miniaudio_xpm);	pixmap3 = gdk_pixmap_create_from_xpm_d(imglist->clist_window,		&mask3, &style->bg[GTK_STATE_NORMAL],(gchar **)mininodata_xpm);	pixmap4 = gdk_pixmap_create_from_xpm_d(imglist->clist_window,		&mask4, &style->bg[GTK_STATE_NORMAL],(gchar **)mininoaudio_xpm);	pixmap5 = gdk_pixmap_create_from_xpm_d(imglist->clist_window,		&mask5, &style->bg[GTK_STATE_NORMAL],(gchar **)minitoc_xpm);	data[0] = NULL;	strcpy(oldbase,"");	lcount = 0;	count = 1;	sizecount = 0;	loop = g_list_first(imagelist);	while (loop) {		entry = loop->data;		/* get the base-dirname */		strncpy(basename,entry->path,MAXLINE);			p = rindex(basename,'/');		*p = '\0';		if (strcmp(basename,"") == 0) {			strcpy(basename,"/");		}		strcpy(fname,p+1);		/* new path found? */		if (strcmp(basename,oldbase) != 0) {			g_snprintf(tmp,MAXLINE,"%s: %s",text(41), basename);			data[1] = tmp;			gtk_clist_append(imglist,data);			set_clist_row_font(imglist,lcount, BOLDFONT);			lcount++;			strcpy(oldbase,basename);		}		/* iso9600-track/ unknown  */		if (entry->type == 0 || entry->type == 3) {			convert_frames2mbstring((entry->size)/DATASECTORSIZE,				tmp2);			g_snprintf(tmp,MAXLINE,"%2d. %s [%s]",				count, fname, tmp2);			data[1] = tmp;			gtk_clist_append(imglist,data);			if (entry->readable == 1 && entry->type == 0) {				gtk_clist_set_pixmap(imglist,lcount,0,pixmap1,mask1);				} else {				gtk_clist_set_pixmap(imglist,lcount,0,pixmap3,mask3);				}			lcount++;			sizecount+=(gint)((entry->size)/1024);			count++;		}		/* valid/invalid wav-file */		if (entry->type == 1 || entry->type == 2) {			convert_frames2minstring((entry->size)/CDDAFRAME, tmp2);			g_snprintf(tmp,MAXLINE,"%2d. %s [%s]",				count, fname, tmp2);			data[1] = tmp;			gtk_clist_append(imglist,data);			if (entry->readable == 1 && entry->type == 1) {				gtk_clist_set_pixmap(imglist,lcount,0,pixmap2,mask2);				} else {				gtk_clist_set_pixmap(imglist,lcount,0,pixmap4,mask4);				}			lcount++;			sizecount+=(gint)((entry->size)/1024);			count++;		}			/* toc-file */		if (entry->type == 4) {			g_snprintf(tmp,MAXLINE,"--. %s",fname);			data[1] = tmp;			gtk_clist_append(imglist,data);			gtk_clist_set_pixmap(imglist,lcount,0,pixmap5, mask5);			lcount++;		}		/* cd-text */		if (entry->title && entry->artist && 		    strcmp(entry->title,"") && strcmp(entry->artist,"")) {			g_snprintf(tmp,MAXLINE,"     (%s / %s)",				entry->title, entry->artist);			data[1] = tmp;			gtk_clist_append(imglist,data);			set_clist_row_font(imglist,lcount, SLANTFONT);			lcount++;			} else 		if (entry->title && strcmp(entry->title,"")) {			g_snprintf(tmp,MAXLINE,"     (%s)",				entry->title);			data[1] = tmp;			gtk_clist_append(imglist,data);			set_clist_row_font(imglist,lcount, SLANTFONT);			lcount++;			} else 		if (entry->cddb_ttitle && strcmp(entry->cddb_ttitle,"")) {			g_snprintf(tmp,MAXLINE,"     (%s)",				entry->cddb_ttitle);			data[1] = tmp;			gtk_clist_append(imglist,data);			set_clist_row_font(imglist,lcount, SLANTFONT);			lcount++;			} else 		if (entry->volname && strcmp(entry->volname,"")) {			g_snprintf(tmp,MAXLINE,"     (%s / ISO9660)",				entry->volname);			data[1] = tmp;			gtk_clist_append(imglist,data);			set_clist_row_font(imglist,lcount, SLANTFONT);			lcount++;			}		loop = loop->next;	}	/* total size of files */	convert_kbytes2mbminstring(sizecount, tmp);	gtk_entry_set_text(GTK_ENTRY(imglist_l1), tmp);	}/* callbacks for button in info-screen */void cddb_clicked(GtkWidget *widget, gpointer data) {	/* no cd loaded */	if (cdinfo.nr_tracks < 0) {		show_dialog(ICO_WARN,text(266),T_OK,NULL,NULL,0);		return;	}	if (show_cddb_query() == 0) {		/* new data received - update display */		fill_cdlist();	}}void update_clicked(GtkWidget *widget, gpointer data) {GdkWindowAttr *win_attr;GdkCursor *cursor,*normal_cursor;	do_lock();	/* change cursor to watch */	gdk_window_get_user_data(GTK_WIDGET(toplevel)->window,		(gpointer) &win_attr);	normal_cursor = win_attr->cursor;	cursor = gdk_cursor_new(GDK_WATCH);	gdk_window_set_cursor(GTK_WIDGET(toplevel)->window,cursor);	while (gtk_events_pending())		gtk_main_iteration();	if (curset.reader_devnr != -1) {		get_cd_toc_and_volid(curset.reader_devnr);		fill_cdlist();	}	scan_imagedirs();	fill_imglist();	/* reset cursor */	normal_cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW);	gdk_window_set_cursor(GTK_WIDGET(toplevel)->window,normal_cursor);	do_unlock();}void eject_clicked(GtkWidget *widget, gpointer load) {GdkWindowAttr *win_attr;GdkCursor *cursor,*normal_cursor;	do_lock();	/* change cursor to watch */	gdk_window_get_user_data(GTK_WIDGET(toplevel)->window,		(gpointer) &win_attr);	normal_cursor = win_attr->cursor;	cursor = gdk_cursor_new(GDK_WATCH);	gdk_window_set_cursor(GTK_WIDGET(toplevel)->window,cursor);	while (gtk_events_pending())		gtk_main_iteration();	if (curset.reader_devnr != -1) {		if (GPOINTER_TO_INT(load)) 			load_cd(curset.reader_devnr);		else			eject_cd(curset.reader_devnr);	}	/* reset cursor */	normal_cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW);	gdk_window_set_cursor(GTK_WIDGET(toplevel)->window,normal_cursor);	/* after we ejected or loaded automatically update screen */	/* in which menu are we right now? */	/* info menu? */	if (submenu == 1 && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(side_widgets[0])) == 1) {		update_clicked(widget,0);	}	if (submenu == 2 && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(side_widgets2[0])) == 1) {		update_clicked(widget,0);	}	do_unlock();}

⌨️ 快捷键说明

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