"Fossies" - the Fresh Open Source Software Archive

Member "mp3info-0.8.5a/gmp3info.c" (10 Nov 2006, 19838 Bytes) of package /linux/misc/old/mp3info-0.8.5a.tgz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "gmp3info.c" see the Fossies "Dox" file reference documentation.

    1 /*
    2     GMP3Info - Displays and allows editing of MP3 ID3 tags and various
    3                technical aspects of MP3 files (GTK interface)
    4 
    5     gmp3info.c - main part of GTK version of MP3Info
    6 
    7     Copyright (C) 2000-2006 Cedric Tefft <cedric@phreaker.net>
    8 
    9     This program is free software; you can redistribute it and/or modify
   10     it under the terms of the GNU General Public License as published by
   11     the Free Software Foundation; either version 2 of the License, or
   12     (at your option) any later version.
   13 
   14     This program is distributed in the hope that it will be useful,
   15     but WITHOUT ANY WARRANTY; without even the implied warranty of
   16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   17     GNU General Public License for more details.
   18 
   19     You should have received a copy of the GNU General Public License
   20     along with this program; if not, write to the Free Software
   21     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   22 
   23   ***************************************************************************
   24 
   25   rmc, Feb/2001 -   Added a file open dialog
   26             Added the Tech Info Window
   27             Added an about box
   28             GMP3Info can now be launched without an argument
   29 */
   30 
   31 #include <gtk/gtk.h>
   32 #include <gdk/gdkkeysyms.h>
   33 #define __MAIN
   34 #include "mp3info.h"
   35 #undef __MAIN
   36 
   37 gchar *gtext_genre(unsigned char genre);
   38 unsigned char gget_genre (char *genre);
   39 int kill_if_esc(GtkWidget *widget, GdkEventKey *event, gpointer obj);
   40 void create_techinfo_win(void);
   41 void open_mp3_file(void);
   42 int load_mp3(char *filename);
   43 void read_new_mp3(GtkWidget *button, GtkWidget *file);
   44 void quick_popup(char *title, char *message);
   45 void about_mp3info(void);
   46 
   47 GtkWidget   *id3win,*id3win_frame_global;
   48 GtkWidget   *id3win_frame_title,*id3win_frame_artist,*id3win_frame_album;
   49 GtkWidget   *id3win_frame_year,*id3win_frame_comment, *id3win_frame_albyear;
   50 GtkWidget   *id3win_frame_genre,*id3win_frame_track,*id3win_frame_comtrack;
   51 GtkWidget   *id3win_text_title,*id3win_text_artist,*id3win_text_album;
   52 GtkWidget   *id3win_text_year,*id3win_text_comment,*id3win_combo_genre;
   53 GtkWidget   *id3win_text_track;
   54 GtkWidget   *id3win_frame_buttons,*id3win_ok_button,*id3win_cancel_button;
   55 GtkWidget       *id3win_menu_bar, *id3win_menu_file, *id3win_menu_fcont;
   56 GtkWidget   *id3win_menu_info, *id3win_menu_open, *id3win_menu_help;
   57 GtkWidget   *id3win_menu_hcont, *id3win_menu_about;
   58 GList       *genrelist=NULL;
   59 gchar       track[4]="",fbuf[4];
   60 
   61 unsigned char genre=255;
   62 FILE  *fp;
   63 unsigned char sig[2];
   64 unsigned int track_num;
   65 mp3info mp3;
   66 int read_only=0;
   67 
   68 void exit_save( GtkWidget *widget, GtkWidget *data) {
   69     char tmp[31];
   70 
   71     if (mp3.file) {
   72        if(!read_only) {
   73         strcpy(mp3.id3.title,gtk_entry_get_text(GTK_ENTRY(id3win_text_title)));
   74         strcpy(mp3.id3.artist,gtk_entry_get_text(GTK_ENTRY(id3win_text_artist)));
   75         strcpy(mp3.id3.album,gtk_entry_get_text(GTK_ENTRY(id3win_text_album)));
   76         strcpy(mp3.id3.year,gtk_entry_get_text(GTK_ENTRY(id3win_text_year)));
   77         strcpy(mp3.id3.comment,gtk_entry_get_text(GTK_ENTRY(id3win_text_comment)));
   78             strcpy(tmp,gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(id3win_combo_genre)->entry)));
   79             mp3.id3.genre[0]=gget_genre(tmp);
   80         strcpy(tmp,gtk_entry_get_text(GTK_ENTRY(id3win_text_track)));
   81         mp3.id3.track[0]=atoi(tmp);
   82 /*      if (mp3.id3.track[0] > 255)
   83             mp3.id3.track[0]=255;
   84 */
   85             write_tag(&mp3);
   86        }
   87 
   88     fclose(mp3.file);
   89     }
   90     gtk_main_quit();
   91 }
   92 
   93 int main(int argc, char *argv[] ) {
   94     
   95     int i;
   96     char track_text[4];
   97 
   98 
   99         gtk_init (&argc, &argv);
  100 
  101 
  102         
  103         id3win=gtk_window_new(GTK_WINDOW_TOPLEVEL);
  104         gtk_window_set_title(GTK_WINDOW(id3win),"MP3info - An ID3 tag editor");
  105         gtk_window_set_policy (GTK_WINDOW(id3win), FALSE,FALSE,FALSE);
  106         gtk_widget_set_usize(id3win,450,360);
  107         gtk_container_border_width(GTK_CONTAINER(id3win),5);
  108         gtk_signal_connect(GTK_OBJECT(id3win), "delete_event", (GtkSignalFunc) gtk_exit, NULL);
  109         id3win_frame_global=gtk_vbox_new(FALSE,5);
  110 
  111     /* rmcc was here */
  112 
  113     id3win_menu_bar = gtk_menu_bar_new();
  114     gtk_widget_show(id3win_menu_bar);
  115     gtk_box_pack_start(GTK_BOX(id3win_frame_global), id3win_menu_bar, FALSE, TRUE, 1);
  116 
  117     id3win_menu_file = gtk_menu_item_new_with_label("File");
  118     gtk_widget_show(id3win_menu_file);
  119     gtk_container_add(GTK_CONTAINER(id3win_menu_bar), id3win_menu_file);
  120     id3win_menu_fcont = gtk_menu_new();
  121     gtk_menu_item_set_submenu(GTK_MENU_ITEM(id3win_menu_file), id3win_menu_fcont);
  122 
  123     id3win_menu_open = gtk_menu_item_new_with_label("Open New    ");
  124     gtk_widget_show(id3win_menu_open);
  125     gtk_container_add(GTK_CONTAINER(id3win_menu_fcont), id3win_menu_open);
  126     gtk_signal_connect(GTK_OBJECT(id3win_menu_open), "activate",
  127                        GTK_SIGNAL_FUNC(open_mp3_file),
  128                        NULL);
  129 
  130     id3win_menu_info = gtk_menu_item_new_with_label("Info        ");
  131     gtk_widget_show(id3win_menu_info);
  132     gtk_container_add(GTK_CONTAINER(id3win_menu_fcont), id3win_menu_info);
  133     gtk_signal_connect(GTK_OBJECT(id3win_menu_info), "activate",
  134                        GTK_SIGNAL_FUNC(create_techinfo_win),
  135                        NULL);
  136 
  137     id3win_menu_help = gtk_menu_item_new_with_label("      Help");
  138     gtk_widget_show(id3win_menu_help);
  139     gtk_container_add(GTK_CONTAINER(id3win_menu_bar), id3win_menu_help);
  140     gtk_menu_item_right_justify(GTK_MENU_ITEM(id3win_menu_help));
  141     id3win_menu_hcont = gtk_menu_new();
  142     gtk_menu_item_set_submenu(GTK_MENU_ITEM(id3win_menu_help), id3win_menu_hcont);
  143 
  144     id3win_menu_about = gtk_menu_item_new_with_label("About    ");
  145     gtk_widget_show(id3win_menu_about);
  146     gtk_container_add(GTK_CONTAINER(id3win_menu_hcont), id3win_menu_about);
  147     gtk_signal_connect(GTK_OBJECT(id3win_menu_about), "activate",
  148                        GTK_SIGNAL_FUNC(about_mp3info),
  149                        NULL);
  150 
  151 
  152     /* rmcc has left the building */
  153         
  154         id3win_frame_title=gtk_frame_new("Title");
  155         gtk_container_border_width(GTK_CONTAINER(id3win_frame_title),5);
  156         id3win_text_title=gtk_entry_new_with_max_length(30);
  157         gtk_container_add(GTK_CONTAINER(id3win_frame_title),id3win_text_title);
  158         gtk_box_pack_start(GTK_BOX(id3win_frame_global),id3win_frame_title,TRUE,TRUE,0);
  159         
  160         id3win_frame_artist=gtk_frame_new("Artist");
  161         gtk_container_border_width(GTK_CONTAINER(id3win_frame_artist),5);
  162         id3win_text_artist=gtk_entry_new_with_max_length(30);
  163         gtk_container_add(GTK_CONTAINER(id3win_frame_artist),id3win_text_artist);
  164         gtk_box_pack_start(GTK_BOX(id3win_frame_global),id3win_frame_artist,TRUE,TRUE,0);
  165         
  166         id3win_frame_albyear=gtk_hbox_new(FALSE,30);
  167         id3win_frame_album=gtk_frame_new("Album");
  168         gtk_container_border_width(GTK_CONTAINER(id3win_frame_album),5);
  169         id3win_text_album=gtk_entry_new_with_max_length(30);
  170         gtk_container_add(GTK_CONTAINER(id3win_frame_album),id3win_text_album);
  171         gtk_box_pack_start(GTK_BOX(id3win_frame_albyear),id3win_frame_album,TRUE,TRUE,0);
  172         
  173         id3win_frame_year=gtk_frame_new("Year");
  174         gtk_widget_set_usize(id3win_frame_year,2,0);
  175         gtk_container_border_width(GTK_CONTAINER(id3win_frame_year),5);
  176         id3win_text_year=gtk_entry_new_with_max_length(4);
  177         gtk_container_add(GTK_CONTAINER(id3win_frame_year),id3win_text_year);
  178         gtk_box_pack_start(GTK_BOX(id3win_frame_albyear),id3win_frame_year,TRUE,TRUE,0);
  179         gtk_box_pack_start(GTK_BOX(id3win_frame_global),id3win_frame_albyear,TRUE,TRUE,0);
  180         
  181         id3win_frame_comtrack=gtk_hbox_new(FALSE,30);
  182         id3win_frame_comment=gtk_frame_new("Comment");
  183         gtk_container_border_width(GTK_CONTAINER(id3win_frame_comment),5);
  184         id3win_text_comment=gtk_entry_new_with_max_length(30);
  185         gtk_container_add(GTK_CONTAINER(id3win_frame_comment),id3win_text_comment);
  186         gtk_box_pack_start(GTK_BOX(id3win_frame_comtrack),id3win_frame_comment,TRUE,TRUE,0);
  187         
  188         id3win_frame_track=gtk_frame_new("Track");
  189         gtk_widget_set_usize(id3win_frame_track,2,0);
  190         gtk_container_border_width(GTK_CONTAINER(id3win_frame_track),5);
  191         id3win_text_track=gtk_entry_new_with_max_length(3);
  192         gtk_container_add(GTK_CONTAINER(id3win_frame_track),id3win_text_track);
  193         gtk_box_pack_start(GTK_BOX(id3win_frame_comtrack),id3win_frame_track,TRUE,TRUE,0);
  194         gtk_box_pack_start(GTK_BOX(id3win_frame_global),id3win_frame_comtrack,TRUE,TRUE,0);
  195         
  196         id3win_frame_genre=gtk_frame_new("Genre");
  197         gtk_container_border_width(GTK_CONTAINER(id3win_frame_genre),5);
  198         id3win_combo_genre=gtk_combo_new();
  199         for(i=0;i<MAXGENRE+2;i++) {
  200             genrelist = g_list_append(genrelist, typegenre[galphagenreindex[i]]);
  201         }
  202         gtk_combo_set_popdown_strings(GTK_COMBO(id3win_combo_genre),genrelist);
  203         gtk_container_add(GTK_CONTAINER(id3win_frame_genre),id3win_combo_genre);
  204         gtk_box_pack_start(GTK_BOX(id3win_frame_global),id3win_frame_genre,TRUE,TRUE,0);
  205         
  206         id3win_frame_buttons=gtk_hbox_new(TRUE,30);
  207         id3win_ok_button=gtk_button_new_with_label("OK");
  208         gtk_box_pack_start(GTK_BOX(id3win_frame_buttons),id3win_ok_button,TRUE,TRUE,0);
  209     if(read_only) {
  210       gtk_widget_set_sensitive (id3win_text_title, FALSE);
  211       gtk_widget_set_sensitive (id3win_text_artist, FALSE);
  212       gtk_widget_set_sensitive (id3win_text_album, FALSE);
  213       gtk_widget_set_sensitive (id3win_text_year, FALSE);
  214       gtk_widget_set_sensitive (id3win_text_comment, FALSE);
  215       gtk_widget_set_sensitive (id3win_text_track, FALSE);
  216       gtk_widget_set_sensitive (id3win_combo_genre, FALSE); 
  217     } else {
  218             id3win_cancel_button=gtk_button_new_with_label("Cancel");
  219             gtk_box_pack_start(GTK_BOX(id3win_frame_buttons),id3win_cancel_button,TRUE,TRUE,0);
  220             gtk_signal_connect (GTK_OBJECT (id3win_cancel_button), "clicked", GTK_SIGNAL_FUNC (gtk_exit), NULL);
  221         }
  222 
  223         gtk_widget_set_usize(id3win_frame_buttons,30,20);
  224         gtk_box_pack_start(GTK_BOX(id3win_frame_global),id3win_frame_buttons,TRUE,TRUE,0);
  225         
  226         gtk_container_add(GTK_CONTAINER(id3win),id3win_frame_global);
  227         
  228         gtk_signal_connect (GTK_OBJECT (id3win_ok_button), "clicked", GTK_SIGNAL_FUNC (exit_save), NULL);
  229         
  230         gtk_widget_show_all(id3win);
  231         
  232     memset(&mp3,0,sizeof(mp3info));
  233 
  234     if(argc==2) { 
  235        if (! load_mp3(argv[1])) {
  236         exit(0);
  237        }
  238            gtk_entry_set_text(GTK_ENTRY(id3win_text_title),mp3.id3.title);
  239            gtk_entry_set_text(GTK_ENTRY(id3win_text_artist),mp3.id3.artist);
  240            gtk_entry_set_text(GTK_ENTRY(id3win_text_album),mp3.id3.album);
  241            gtk_entry_set_text(GTK_ENTRY(id3win_text_year),mp3.id3.year);
  242            gtk_entry_set_text(GTK_ENTRY(id3win_text_comment),mp3.id3.comment);
  243        if(mp3.id3.track[0] > 0)
  244         sprintf(track_text,"%d",(int)mp3.id3.track[0]);
  245        else
  246         track_text[0]=0;
  247        gtk_entry_set_text(GTK_ENTRY(id3win_text_track),track_text);
  248            gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(id3win_combo_genre)->entry), gtext_genre(mp3.id3.genre[0]));
  249     
  250     } else {
  251        open_mp3_file();
  252     }
  253 
  254         gtk_main();
  255     return(0);
  256             
  257 }
  258 
  259 gchar *gtext_genre(unsigned char genre) {
  260    int genre_num = (int) genre;
  261 
  262    if(genre_num <= MAXGENRE) {
  263     return((gchar *)typegenre[genre_num]);
  264    } else {
  265     return((gchar *)"");
  266    }
  267 }
  268 
  269 unsigned char gget_genre (char *genre) {
  270     int num_genre=0;
  271 
  272         if(genre[0] == '\0') { return 255; }
  273 
  274     sscanf(genre,"%u",&num_genre);
  275     if(num_genre == 0) {
  276         if(genre[0] != '0') {
  277             while(num_genre++ <= MAXGENRE) {
  278                 if(!strcasecmp(genre,typegenre[num_genre-1])) {
  279                     return num_genre-1;
  280                 }
  281             }
  282             num_genre=256;
  283         }       
  284     }
  285 
  286     if(num_genre < 0 || num_genre > MAXGENRE) {
  287         num_genre=255;
  288     }
  289     return (unsigned char) num_genre;
  290 }
  291 
  292 /* rmcc was here */
  293 
  294 void create_techinfo_win(void) {
  295     GtkWidget   *infowin_main, *infowin_main_frame;
  296     GtkWidget   *infowin_exit_button, *infowin_button_frame;
  297     GtkWidget   *infowin_text_media, *infowin_text_bitrate;
  298     GtkWidget   *infowin_text_emphasis, *infowin_text_crc;
  299     GtkWidget   *infowin_text_copyright, *infowin_text_original;
  300     GtkWidget   *infowin_text_padding, *infowin_text_length;
  301     GtkWidget   *infowin_text_frequency;
  302     int     ibuf,ibuf2;
  303     char        buf[1023];
  304     char        *layer_text[] = { "I", "II", "III" };
  305 
  306 
  307     infowin_main = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  308     gtk_widget_set_usize(infowin_main, 230, 300);
  309     gtk_container_border_width(GTK_CONTAINER(infowin_main), 15);
  310     gtk_window_set_title(GTK_WINDOW(infowin_main), "MP3 Technical Info");
  311     gtk_window_set_policy(GTK_WINDOW(infowin_main), FALSE, FALSE, FALSE);
  312     gtk_signal_connect_object(GTK_OBJECT(infowin_main), "key_press_event",
  313                                GTK_SIGNAL_FUNC(kill_if_esc),
  314                                (gpointer) infowin_main);
  315     infowin_main_frame=gtk_vbox_new(FALSE,5);
  316 
  317     if (mp3.header_isvalid) {
  318     
  319         sprintf(buf,"Media Type: MPEG %s Layer %s",mp3.header.version ? ((mp3.header.version==2) ? "2.5" : "1.0") : "2.0", layer_text[header_layer(&mp3.header)-1]);
  320         infowin_text_media=gtk_label_new(buf);
  321         gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_media,TRUE,TRUE,0);
  322     
  323         sprintf(buf,"Bitrate: %i KB/s",header_bitrate(&mp3.header));
  324         infowin_text_bitrate=gtk_label_new(buf);
  325         gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_bitrate,TRUE,TRUE,0);
  326     
  327         sprintf(buf,"Frequency: %iKHz",header_frequency(&mp3.header)/1000);
  328         infowin_text_frequency=gtk_label_new(buf);
  329         gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_frequency,TRUE,TRUE,0);
  330 
  331         ibuf=mp3.seconds / 60;
  332         ibuf2=mp3.seconds % 60;
  333         sprintf(buf,"Length: %i:%02i",ibuf,ibuf2);
  334         infowin_text_length=gtk_label_new(buf);
  335         gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_length,TRUE,TRUE,0);
  336     
  337         sprintf(buf,"Emphasis: %s",header_emphasis(&mp3.header));
  338         infowin_text_emphasis=gtk_label_new(buf);
  339         gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_emphasis,TRUE,TRUE,0);
  340         
  341         sprintf(buf,"CRC: %s",!mp3.header.crc ? "Yes" : "No");
  342         infowin_text_crc=gtk_label_new(buf);
  343         gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_crc,TRUE,TRUE,0);
  344         
  345         sprintf(buf,"Copyright: %s",mp3.header.copyright ? "Yes" : "No");
  346         infowin_text_copyright=gtk_label_new(buf);
  347         gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_copyright,TRUE,TRUE,0);
  348     
  349         sprintf(buf,"Original: %s",mp3.header.original ? "Yes" : "No");
  350         infowin_text_original=gtk_label_new(buf);
  351         gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_original,TRUE,TRUE,0);
  352     
  353         sprintf(buf,"Padding: %s",mp3.header.padding ? "Yes" : "No");
  354         infowin_text_padding=gtk_label_new(buf);
  355         gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_padding,TRUE,TRUE,0);
  356 
  357     } else {
  358         
  359         sprintf(buf,"This file's header\nis invalid.\n\nNo information\navailable");
  360         infowin_text_media=gtk_label_new(buf);
  361         gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_media,TRUE,TRUE,0);
  362 
  363     }
  364     
  365         infowin_button_frame=gtk_hbox_new(TRUE,30);
  366     gtk_widget_set_usize(infowin_button_frame,30,20);
  367     gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_button_frame,TRUE,TRUE,0);
  368 
  369 
  370     infowin_exit_button = gtk_button_new_with_label("Exit");
  371     gtk_widget_show(infowin_exit_button);
  372     gtk_box_pack_end(GTK_BOX(infowin_button_frame), infowin_exit_button, FALSE, TRUE, 0);
  373     gtk_signal_connect_object(GTK_OBJECT(infowin_exit_button), "pressed",
  374                               GTK_SIGNAL_FUNC(gtk_widget_destroy),
  375                               GTK_OBJECT(infowin_main));
  376 
  377     gtk_container_add(GTK_CONTAINER(infowin_main),infowin_main_frame);
  378     gtk_widget_show_all(infowin_main);
  379     
  380 
  381     
  382 }
  383 
  384 void open_mp3_file(void) {
  385     GtkWidget   *filewin_main;
  386 
  387     filewin_main=gtk_file_selection_new("Use another MP3 File");
  388     gtk_signal_connect_object(GTK_OBJECT(filewin_main), "key_press_event",
  389                 (GtkSignalFunc) kill_if_esc, (gpointer) filewin_main);
  390     gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(filewin_main)->cancel_button), "pressed",
  391                               GTK_SIGNAL_FUNC(gtk_widget_destroy),
  392                               GTK_OBJECT(filewin_main));
  393     gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filewin_main)->ok_button), "clicked",
  394                         (GtkSignalFunc) read_new_mp3,
  395                         filewin_main);
  396     gtk_widget_show(filewin_main);
  397 
  398 
  399 
  400 }
  401 
  402 void read_new_mp3(GtkWidget *button, GtkWidget *file) {
  403     char *filename;
  404 
  405     filename = (char *)gtk_file_selection_get_filename(GTK_FILE_SELECTION(file));
  406     if (load_mp3(filename) == 1) {
  407         gtk_widget_destroy(file);
  408         gtk_entry_set_text(GTK_ENTRY(id3win_text_title),mp3.id3.title);
  409             gtk_entry_set_text(GTK_ENTRY(id3win_text_artist),mp3.id3.artist);
  410             gtk_entry_set_text(GTK_ENTRY(id3win_text_album),mp3.id3.album);
  411             gtk_entry_set_text(GTK_ENTRY(id3win_text_year),mp3.id3.year);
  412             gtk_entry_set_text(GTK_ENTRY(id3win_text_comment),mp3.id3.comment);
  413             gtk_entry_set_text(GTK_ENTRY(id3win_text_track),(char *)mp3.id3.track);
  414             gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(id3win_combo_genre)->entry), gtext_genre(mp3.id3.genre[0]));
  415     }
  416 
  417 }
  418 
  419 int load_mp3(char *filename) {
  420 
  421     mp3info nmp3;
  422 
  423     memset(&nmp3,0,sizeof(mp3info));
  424     
  425     if ( !( nmp3.file=fopen(filename,"rb+") ) ) {
  426         if((nmp3.file=fopen(filename,"rb")))
  427         read_only=1;
  428         else {
  429         if (id3win) {
  430             quick_popup("Error in file", "Error opening MP3 file.");
  431         } else {
  432             g_print("Error opening MP3 file.");
  433         }
  434         return 0;
  435         }
  436     }
  437 
  438     nmp3.filename=filename;
  439     get_mp3_info(&nmp3,SCAN_QUICK,0);
  440     if(!nmp3.header_isvalid && !nmp3.id3_isvalid) {
  441         if (id3win) {
  442             quick_popup("Error in file", "File is corrupt or is not a standard MP3 file!");
  443         } else {
  444             g_print("File is corrupt or is not a standard MP3 file!\n");
  445         }
  446         return 0;
  447     } else {
  448         mp3=nmp3;
  449         return 1;
  450     }
  451     return 0;
  452 
  453 }
  454 
  455 int kill_if_esc(GtkWidget *widget, GdkEventKey *event, gpointer obj) {
  456 
  457     if(event && event->type == GDK_KEY_PRESS && event->keyval == GDK_Escape) {
  458          gtk_widget_destroy(GTK_WIDGET(obj));
  459          gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_press_event");
  460     }
  461 
  462     return(TRUE);
  463 }
  464 
  465 void quick_popup(char *title, char *message) {
  466     GtkWidget *popupwin, *popupwin_main, *popupwin_msg, *popupwin_ok;
  467     char *markup;
  468 
  469     popupwin = gtk_dialog_new();
  470     gtk_widget_realize(popupwin);
  471     gtk_container_border_width(GTK_CONTAINER(popupwin), 12);
  472     gtk_window_set_title(GTK_WINDOW(popupwin), title);
  473     popupwin_main = GTK_DIALOG(popupwin)->vbox;
  474     popupwin_msg=gtk_label_new(NULL);
  475     markup = g_markup_printf_escaped("<span foreground=\"blue\">%s</span>",message);
  476     gtk_label_set_markup(GTK_LABEL(popupwin_msg),markup);
  477     g_free (markup);
  478     gtk_box_pack_start(GTK_BOX(popupwin_main),popupwin_msg,TRUE,TRUE,0);
  479     popupwin_ok = gtk_button_new_with_label(" OK ");
  480     gtk_signal_connect_object(GTK_OBJECT(popupwin_ok), "clicked",
  481                     GTK_SIGNAL_FUNC(gtk_widget_destroy),
  482                     GTK_OBJECT(popupwin));
  483     gtk_signal_connect_object(GTK_OBJECT(popupwin), "key_press_event",
  484                 (GtkSignalFunc) kill_if_esc, (gpointer) popupwin);
  485     gtk_box_pack_end(GTK_BOX(popupwin_main), popupwin_ok, TRUE, FALSE, 0);
  486     gtk_widget_show_all(popupwin);
  487 
  488 }
  489 
  490 void about_mp3info(void) {
  491     quick_popup(VERSION,"MP3Info\n"
  492     "           An ID3 Tag Editor\n\n\n"
  493     "           Original author: Ricardo Cerqueira <rmc@plug.pt>\n"
  494     "           Current maintainer: Cedric Tefft <cedric@phreaker.net>\n"
  495     "           (C) 1999-2006 Ricardo Cerqueira, Cedric Tefft\n\n");
  496 }
  497 
  498 /* rmcc has left the building */