--- mp3info-0.8.5a.orig/Makefile +++ mp3info-0.8.5a/Makefile @@ -28,9 +28,9 @@ # bindir = where binaries get installed (default = /usr/local/bin) # mandir = where the manual page gets installed (default = /usr/local/man/man1) -prefix=/usr/local +prefix=$(DESTDIR)/usr bindir=${prefix}/bin -mandir = $(prefix)/man/man1 +mandir = $(prefix)/share/man/man1 # No changes necessary below this line @@ -69,12 +69,10 @@ $(RM) -f mp3info.txt install-mp3info: mp3info - $(STRIP) mp3info $(INSTALL) mp3info $(bindir)/mp3info $(INSTALL) mp3info.1 $(mandir)/mp3info.1 install-gmp3info: gmp3info - $(STRIP) gmp3info $(INSTALL) gmp3info $(bindir)/gmp3info install: install-mp3info install-gmp3info --- mp3info-0.8.5a.orig/debian/dirs +++ mp3info-0.8.5a/debian/dirs @@ -0,0 +1,2 @@ +usr/bin +usr/share/man/man1 --- mp3info-0.8.5a.orig/debian/control +++ mp3info-0.8.5a/debian/control @@ -0,0 +1,31 @@ +Source: mp3info +Section: sound +Priority: extra +Maintainer: Paweł Więcek +Build-Depends: debhelper (>= 5), libncurses5-dev, libgtk2.0-dev, bsdmainutils, groff-base +Standards-Version: 3.7.3 +Vcs-Browser: http://hg.svartech.com/debian/mp3info +Vcs-Hg: http://hg.svartech.com/debian/mp3info +Homepage: http://www.ibiblio.org/mp3info/ + +Package: mp3info +Architecture: any +Depends: ${shlibs:Depends}, debconf | debconf-2.0 +Description: An MP3 technical info viewer and ID3 1.x tag editor + MP3Info has an interactive mode (using curses) and a command line mode. + MP3Info can display ID3 tag information as well as various technical aspects + of an MP3 file including playing time, bit-rate, sampling frequency and other + attributes in a pre-defined or user-specifiable output format. + . + If you prefer GUI you should use mp3info-gtk package. + +Package: mp3info-gtk +Architecture: any +Depends: ${shlibs:Depends} +Description: MP3 info viewer and ID3 1.x tag editor -- GTK+ version + MP3Info can display ID3 tag information as well as various technical aspects + of an MP3 file including playing time, bit-rate, sampling frequency and other + attributes in a pre-defined or user-specifiable output format. + . + This package installs GTK+ version of mp3info. If you prefer command line + or curses interface you should use mp3info package. --- mp3info-0.8.5a.orig/debian/mp3info-gtk.menu +++ mp3info-0.8.5a/debian/mp3info-gtk.menu @@ -0,0 +1,2 @@ +?package(mp3info-gtk):needs="X11" section="Applications/Sound" \ + title="MP3 info" command="/usr/bin/gmp3info" --- mp3info-0.8.5a.orig/debian/mp3info-gtk.dirs +++ mp3info-0.8.5a/debian/mp3info-gtk.dirs @@ -0,0 +1 @@ +usr/bin --- mp3info-0.8.5a.orig/debian/copyright +++ mp3info-0.8.5a/debian/copyright @@ -0,0 +1,29 @@ +This package was debianized by Paweł Więcek on +Fri, 1 Dec 2000 12:46:47 +0100. + +It was downloaded from +ftp://ftp.ibiblio.org/pub/linux/apps/sound/mp3-utils/mp3info + +Upstream Authors: Ricardo Cerqueira (original), + Cedric Tefft (current) + +Copyright: + + Copyright (C) 2000-2006 Cedric Tefft + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +License: + See /usr/share/common-licenses/GPL-2. --- mp3info-0.8.5a.orig/debian/rules +++ mp3info-0.8.5a/debian/rules @@ -0,0 +1,89 @@ +#!/usr/bin/make -f +# Sample debian/rules that uses debhelper. +# GNU copyright 1997 by Joey Hess. +# +# This version is for a hypothetical package that builds an +# architecture-dependant package, as well as an architecture-independent +# package. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# This has to be exported to make some magic below work. +export DH_OPTIONS + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + + + touch configure-stamp + +build: configure-stamp build-stamp +build-stamp: + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + + touch build-stamp + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + [ ! -f Makefile ] || $(MAKE) clean + + dh_clean + +install: DH_OPTIONS= +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/tmp. + $(MAKE) install DESTDIR=`pwd`/debian/mp3info + + dh_movefiles --sourcedir=debian/mp3info + +# Build architecture-dependent files here. +# Pass -a to all debhelper commands in this target to reduce clutter. +binary-arch: DH_OPTIONS=-a +binary-arch: build install + dh_testdir + dh_testroot + dh_installdebconf + dh_installdocs +# dh_installexamples + dh_installmenu +# dh_installemacsen +# dh_installpam +# dh_installinit +# dh_installcron +# dh_installmanpages -pmp3info -Nmp3info-gtk + dh_installman +# dh_installinfo + dh_installchangelogs ChangeLog + dh_strip + dh_link + dh_compress + dh_fixperms +# # You may want to make some executables suid here. +# dh_suidregister + dh_installdeb + dh_makeshlibs +# dh_perl + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary-indep: + +binary: binary-arch +.PHONY: build clean binary-arch binary install configure --- mp3info-0.8.5a.orig/debian/changelog +++ mp3info-0.8.5a/debian/changelog @@ -0,0 +1,172 @@ +mp3info (0.8.5a-1) unstable; urgency=low + + * New upstream version + * Drop debconf message about upgrade from an ancient version of package + (closes: #388935, #411793, #412665, #440196, #469382) + * No longer strip binaries during build (closes: #437582) + * General packaging cleanup including fixing some lintian warnings, updating + standards version, updating menu location, etc. + + -- Paweł Więcek Fri, 07 Mar 2008 22:10:47 +0100 + +mp3info (0.8.4-9.2) unstable; urgency=low + + * Non-maintainer upload to fix remaining l10n issues + * Debconf templates translations: + - Dutch added. Closes: #367385 + - Spanish updated. Closes: #384055 + + -- Christian Perrier Mon, 22 Jan 2007 23:53:06 +0100 + +mp3info (0.8.4-9.1) unstable; urgency=low + + * Applied patch from Alec Berryman (Closes: #368207) + * Added an empty binary-indep target in debian/rules, to fix Lintian + error message + + -- Carlos C Soto Sun, 13 Aug 2006 19:10:14 -0500 + +mp3info (0.8.4-9) unstable; urgency=low + + * Changed debconf dependency to include debconf-2.0 (closes: #332032) + * Added swedish translation of debconf templayes from Daniel Nylander + (closes: #331558) + * Added italian translation of debconf templayes from Luca Monducci + (closes: #335582) + + -- Pawel Wiecek Fri, 31 Mar 2006 21:53:52 +0200 + +mp3info (0.8.4-8) unstable; urgency=low + + * Applied patch from Gabor Gombas to fix out-of-bounds + indexing problems and get rid of warnings on AMD64 (closes: #318269) + * Updated standards-version (no changes needed) + * Added vietnamese translation of debconf templates from Clytie Siddall + (closes: #312970) + * Updated menus to current practice + + -- Pawel Wiecek Thu, 22 Sep 2005 21:38:50 +0200 + +mp3info (0.8.4-7) unstable; urgency=low + + * Return nonzero exit code when ID3 info should be displayed but is not + available (closes: #169028, #228393) + * Added japanese translation of debconf templates from Hideki Yamane + (closes: #262741) + * Added czech translation of debconf templates from Miroslav Kure + (closes: #298212) + + -- Pawel Wiecek Thu, 19 May 2005 23:15:08 +0200 + +mp3info (0.8.4-6) unstable; urgency=low + + * Converted to gettext-based debconf templates (closes: #201244) + * Updated standards version (no changes required) + + -- Pawel Wiecek Thu, 12 Feb 2004 14:57:37 +0100 + +mp3info (0.8.4-5) unstable; urgency=low + + * Got rid of multiline strings (closes: #196427) + * Fixed unit names in various places (closes: #169680) + * Updated standards version + + -- Pawel Wiecek Wed, 18 Jun 2003 14:12:38 +0200 + +mp3info (0.8.4-4) unstable; urgency=low + + * Added french translation of debconf templates (closes: #139919) + * Reorganized templates + + -- Pawel Wiecek Tue, 26 Mar 2002 12:03:34 +0100 + +mp3info (0.8.4-3) unstable; urgency=low + + * Fixed a typo in package description + + -- Pawel Wiecek Thu, 16 Aug 2001 12:15:11 +0200 + +mp3info (0.8.4-2) unstable; urgency=low + + * Fixed debconf properties (closes: #106341) + + -- Pawel Wiecek Tue, 24 Jul 2001 10:27:47 +0200 + +mp3info (0.8.4-1) unstable; urgency=low + + * New upstream version + * Fixed debian/config that failed on first installs (closes: #104475) + + -- Pawel Wiecek Wed, 18 Jul 2001 14:26:16 +0200 + +mp3info (0.8.3-9) unstable; urgency=low + + * Fixed build-depends (closes: #101985, #101990) + * Added spanish translation of debconf templates (closes: #102141) + + -- Pawel Wiecek Mon, 25 Jun 2001 09:35:33 +0200 + +mp3info (0.8.3-8) unstable; urgency=low + + * Fixed two typos in manpage + + -- Pawel Wiecek Fri, 22 Jun 2001 09:42:13 +0200 + +mp3info (0.8.3-7) unstable; urgency=low + + * Added danish translation of debconf templates (closes: #100333) + + -- Pawel Wiecek Tue, 12 Jun 2001 15:42:18 +0200 + +mp3info (0.8.3-6) unstable; urgency=low + + * Fixes to debian/config + * Updated standards-version + + -- Pawel Wiecek Fri, 8 Jun 2001 13:51:57 +0200 + +mp3info (0.8.3-5) unstable; urgency=low + + * Added german translation of debconf templates (closes: #99188) + + -- Pawel Wiecek Wed, 30 May 2001 13:11:41 +0200 + +mp3info (0.8.3-4) unstable; urgency=low + + * Documented change even more carefully + * Moved to debhelper 3 (which was really needed) + + -- Pawel Wiecek Tue, 22 May 2001 13:41:07 +0200 + +mp3info (0.8.3-3) unstable; urgency=low + + * Added support for MPEG 2.5 files (closes: #83989) + + -- Pawel Wiecek Tue, 15 May 2001 16:38:47 +0200 + +mp3info (0.8.3-2) unstable; urgency=low + + * Fixed dependency on libgtk (wrong library version was used) + (closes: #88841) + * Clearing fields is now possible (closes: #53202) + * Fixed a couple of lintian errors. + + -- Pawel Wiecek Thu, 8 Mar 2001 14:56:01 +0100 + +mp3info (0.8.3-1) unstable; urgency=low + + * New upstream version + * Documented implementation change more carefully (closes: #79068) + * Removed *.lsm and INSTALL files (closes: #81741) + * Added build-dependency on libncurses5-dev (closes: #84491) + + -- Pawel Wiecek Tue, 6 Mar 2001 10:25:45 +0100 + +mp3info (0.8.2-1) unstable; urgency=low + + * Initial Release. + * Replaced the old mp3info with another implementation (closes: #27969, + #37776, #47840, #47843, #48537, #53063, #67048, #67595, #70734, #76986). + + -- Pawel Wiecek Fri, 1 Dec 2000 12:46:47 +0100 + --- mp3info-0.8.5a.orig/debian/README.Debian +++ mp3info-0.8.5a/debian/README.Debian @@ -0,0 +1,31 @@ +mp3info for Debian +---------------------- + +Earlier releases of Debian included a different program with the name mp3info. +I have decided to replace it with this one, as the old mp3info was buggy and +no longer maintained upstream. + +The command line interface is mostly the same, altrough you might experience +some differences. Additionally there's curses interface available, as well as +GTK+ interface (separate package). + +The following switches have changed their meanings in the new mp3info: + -f (old mp3info: set print format, new mp3info: force mode) + -F (old mp3info: set predefined format, new mp3info: full scan) + -n (old mp3info: set title, new mp3info: set track number) + -G (old mp3info: set genre by name, new mp3info: display genres) + -p (old mp3info: list genres, new mp3info: set print format) + +The following switches were renamed: + -f (set print format) is now -p (format strings are changed, too) + -W (wipe tag) is now -d + -G (set genre by name) is incorporated into -g + -p (list genres) is now -G + +The following switches were removed: + -T, -s, -w, -N, -e, -P, -R + +The following switches were added: + -h, -i, -r, -x + + -- Paweł Więcek , Fri, 1 Dec 2000 12:46:47 +0100 --- mp3info-0.8.5a.orig/debian/watch +++ mp3info-0.8.5a/debian/watch @@ -0,0 +1,3 @@ +version=3 + +ftp://ftp.ibiblio.org/pub/linux/apps/sound/mp3-utils/mp3info/mp3info-(.*)\.tgz --- mp3info-0.8.5a.orig/debian/compat +++ mp3info-0.8.5a/debian/compat @@ -0,0 +1 @@ +5 --- mp3info-0.8.5a.orig/debian/mp3info-gtk.docs +++ mp3info-0.8.5a/debian/mp3info-gtk.docs @@ -0,0 +1 @@ +README --- mp3info-0.8.5a.orig/debian/docs +++ mp3info-0.8.5a/debian/docs @@ -0,0 +1 @@ +README --- mp3info-0.8.5a.orig/debian/mp3info-gtk.files +++ mp3info-0.8.5a/debian/mp3info-gtk.files @@ -0,0 +1 @@ +usr/bin/gmp3info --- mp3info-0.8.5a.orig/gmp3info.c +++ mp3info-0.8.5a/gmp3info.c @@ -1,498 +1,498 @@ -/* - GMP3Info - Displays and allows editing of MP3 ID3 tags and various - technical aspects of MP3 files (GTK interface) - - gmp3info.c - main part of GTK version of MP3Info - - Copyright (C) 2000-2006 Cedric Tefft - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - *************************************************************************** - - rmc, Feb/2001 - Added a file open dialog - Added the Tech Info Window - Added an about box - GMP3Info can now be launched without an argument -*/ - -#include -#include -#define __MAIN -#include "mp3info.h" -#undef __MAIN - -gchar *gtext_genre(unsigned char genre); -unsigned char gget_genre (char *genre); -int kill_if_esc(GtkWidget *widget, GdkEventKey *event, gpointer obj); -void create_techinfo_win(void); -void open_mp3_file(void); -int load_mp3(char *filename); -void read_new_mp3(GtkWidget *button, GtkWidget *file); -void quick_popup(char *title, char *message); -void about_mp3info(void); - -GtkWidget *id3win,*id3win_frame_global; -GtkWidget *id3win_frame_title,*id3win_frame_artist,*id3win_frame_album; -GtkWidget *id3win_frame_year,*id3win_frame_comment, *id3win_frame_albyear; -GtkWidget *id3win_frame_genre,*id3win_frame_track,*id3win_frame_comtrack; -GtkWidget *id3win_text_title,*id3win_text_artist,*id3win_text_album; -GtkWidget *id3win_text_year,*id3win_text_comment,*id3win_combo_genre; -GtkWidget *id3win_text_track; -GtkWidget *id3win_frame_buttons,*id3win_ok_button,*id3win_cancel_button; -GtkWidget *id3win_menu_bar, *id3win_menu_file, *id3win_menu_fcont; -GtkWidget *id3win_menu_info, *id3win_menu_open, *id3win_menu_help; -GtkWidget *id3win_menu_hcont, *id3win_menu_about; -GList *genrelist=NULL; -gchar track[4]="",fbuf[4]; - -unsigned char genre=255; -FILE *fp; -unsigned char sig[2]; -unsigned int track_num; -mp3info mp3; -int read_only=0; - -void exit_save( GtkWidget *widget, GtkWidget *data) { - char tmp[31]; - - if (mp3.file) { - if(!read_only) { - strcpy(mp3.id3.title,gtk_entry_get_text(GTK_ENTRY(id3win_text_title))); - strcpy(mp3.id3.artist,gtk_entry_get_text(GTK_ENTRY(id3win_text_artist))); - strcpy(mp3.id3.album,gtk_entry_get_text(GTK_ENTRY(id3win_text_album))); - strcpy(mp3.id3.year,gtk_entry_get_text(GTK_ENTRY(id3win_text_year))); - strcpy(mp3.id3.comment,gtk_entry_get_text(GTK_ENTRY(id3win_text_comment))); - strcpy(tmp,gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(id3win_combo_genre)->entry))); - mp3.id3.genre[0]=gget_genre(tmp); - strcpy(tmp,gtk_entry_get_text(GTK_ENTRY(id3win_text_track))); - mp3.id3.track[0]=atoi(tmp); -/* if (mp3.id3.track[0] > 255) - mp3.id3.track[0]=255; -*/ - write_tag(&mp3); - } - - fclose(mp3.file); - } - gtk_main_quit(); -} - -int main(int argc, char *argv[] ) { - - int i; - char track_text[4]; - - - gtk_init (&argc, &argv); - - - - id3win=gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(id3win),"MP3info - An ID3 tag editor"); - gtk_window_set_policy (GTK_WINDOW(id3win), FALSE,FALSE,FALSE); - gtk_widget_set_usize(id3win,450,360); - gtk_container_border_width(GTK_CONTAINER(id3win),5); - gtk_signal_connect(GTK_OBJECT(id3win), "delete_event", (GtkSignalFunc) gtk_exit, NULL); - id3win_frame_global=gtk_vbox_new(FALSE,5); - - /* rmcc was here */ - - id3win_menu_bar = gtk_menu_bar_new(); - gtk_widget_show(id3win_menu_bar); - gtk_box_pack_start(GTK_BOX(id3win_frame_global), id3win_menu_bar, FALSE, TRUE, 1); - - id3win_menu_file = gtk_menu_item_new_with_label("File"); - gtk_widget_show(id3win_menu_file); - gtk_container_add(GTK_CONTAINER(id3win_menu_bar), id3win_menu_file); - id3win_menu_fcont = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(id3win_menu_file), id3win_menu_fcont); - - id3win_menu_open = gtk_menu_item_new_with_label("Open New "); - gtk_widget_show(id3win_menu_open); - gtk_container_add(GTK_CONTAINER(id3win_menu_fcont), id3win_menu_open); - gtk_signal_connect(GTK_OBJECT(id3win_menu_open), "activate", - GTK_SIGNAL_FUNC(open_mp3_file), - NULL); - - id3win_menu_info = gtk_menu_item_new_with_label("Info "); - gtk_widget_show(id3win_menu_info); - gtk_container_add(GTK_CONTAINER(id3win_menu_fcont), id3win_menu_info); - gtk_signal_connect(GTK_OBJECT(id3win_menu_info), "activate", - GTK_SIGNAL_FUNC(create_techinfo_win), - NULL); - - id3win_menu_help = gtk_menu_item_new_with_label(" Help"); - gtk_widget_show(id3win_menu_help); - gtk_container_add(GTK_CONTAINER(id3win_menu_bar), id3win_menu_help); - gtk_menu_item_right_justify(GTK_MENU_ITEM(id3win_menu_help)); - id3win_menu_hcont = gtk_menu_new(); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(id3win_menu_help), id3win_menu_hcont); - - id3win_menu_about = gtk_menu_item_new_with_label("About "); - gtk_widget_show(id3win_menu_about); - gtk_container_add(GTK_CONTAINER(id3win_menu_hcont), id3win_menu_about); - gtk_signal_connect(GTK_OBJECT(id3win_menu_about), "activate", - GTK_SIGNAL_FUNC(about_mp3info), - NULL); - - - /* rmcc has left the building */ - - id3win_frame_title=gtk_frame_new("Title"); - gtk_container_border_width(GTK_CONTAINER(id3win_frame_title),5); - id3win_text_title=gtk_entry_new_with_max_length(30); - gtk_container_add(GTK_CONTAINER(id3win_frame_title),id3win_text_title); - gtk_box_pack_start(GTK_BOX(id3win_frame_global),id3win_frame_title,TRUE,TRUE,0); - - id3win_frame_artist=gtk_frame_new("Artist"); - gtk_container_border_width(GTK_CONTAINER(id3win_frame_artist),5); - id3win_text_artist=gtk_entry_new_with_max_length(30); - gtk_container_add(GTK_CONTAINER(id3win_frame_artist),id3win_text_artist); - gtk_box_pack_start(GTK_BOX(id3win_frame_global),id3win_frame_artist,TRUE,TRUE,0); - - id3win_frame_albyear=gtk_hbox_new(FALSE,30); - id3win_frame_album=gtk_frame_new("Album"); - gtk_container_border_width(GTK_CONTAINER(id3win_frame_album),5); - id3win_text_album=gtk_entry_new_with_max_length(30); - gtk_container_add(GTK_CONTAINER(id3win_frame_album),id3win_text_album); - gtk_box_pack_start(GTK_BOX(id3win_frame_albyear),id3win_frame_album,TRUE,TRUE,0); - - id3win_frame_year=gtk_frame_new("Year"); - gtk_widget_set_usize(id3win_frame_year,2,0); - gtk_container_border_width(GTK_CONTAINER(id3win_frame_year),5); - id3win_text_year=gtk_entry_new_with_max_length(4); - gtk_container_add(GTK_CONTAINER(id3win_frame_year),id3win_text_year); - gtk_box_pack_start(GTK_BOX(id3win_frame_albyear),id3win_frame_year,TRUE,TRUE,0); - gtk_box_pack_start(GTK_BOX(id3win_frame_global),id3win_frame_albyear,TRUE,TRUE,0); - - id3win_frame_comtrack=gtk_hbox_new(FALSE,30); - id3win_frame_comment=gtk_frame_new("Comment"); - gtk_container_border_width(GTK_CONTAINER(id3win_frame_comment),5); - id3win_text_comment=gtk_entry_new_with_max_length(30); - gtk_container_add(GTK_CONTAINER(id3win_frame_comment),id3win_text_comment); - gtk_box_pack_start(GTK_BOX(id3win_frame_comtrack),id3win_frame_comment,TRUE,TRUE,0); - - id3win_frame_track=gtk_frame_new("Track"); - gtk_widget_set_usize(id3win_frame_track,2,0); - gtk_container_border_width(GTK_CONTAINER(id3win_frame_track),5); - id3win_text_track=gtk_entry_new_with_max_length(3); - gtk_container_add(GTK_CONTAINER(id3win_frame_track),id3win_text_track); - gtk_box_pack_start(GTK_BOX(id3win_frame_comtrack),id3win_frame_track,TRUE,TRUE,0); - gtk_box_pack_start(GTK_BOX(id3win_frame_global),id3win_frame_comtrack,TRUE,TRUE,0); - - id3win_frame_genre=gtk_frame_new("Genre"); - gtk_container_border_width(GTK_CONTAINER(id3win_frame_genre),5); - id3win_combo_genre=gtk_combo_new(); - for(i=0;i 0) - sprintf(track_text,"%d",(int)mp3.id3.track[0]); - else - track_text[0]=0; - gtk_entry_set_text(GTK_ENTRY(id3win_text_track),track_text); - gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(id3win_combo_genre)->entry), gtext_genre(mp3.id3.genre[0])); - - } else { - open_mp3_file(); - } - - gtk_main(); - return(0); - -} - -gchar *gtext_genre(unsigned char genre) { - int genre_num = (int) genre; - - if(genre_num <= MAXGENRE) { - return((gchar *)typegenre[genre_num]); - } else { - return((gchar *)""); - } -} - -unsigned char gget_genre (char *genre) { - int num_genre=0; - - if(genre[0] == '\0') { return 255; } - - sscanf(genre,"%u",&num_genre); - if(num_genre == 0) { - if(genre[0] != '0') { - while(num_genre++ <= MAXGENRE) { - if(!strcasecmp(genre,typegenre[num_genre-1])) { - return num_genre-1; - } - } - num_genre=256; - } - } - - if(num_genre < 0 || num_genre > MAXGENRE) { - num_genre=255; - } - return (unsigned char) num_genre; -} - -/* rmcc was here */ - -void create_techinfo_win(void) { - GtkWidget *infowin_main, *infowin_main_frame; - GtkWidget *infowin_exit_button, *infowin_button_frame; - GtkWidget *infowin_text_media, *infowin_text_bitrate; - GtkWidget *infowin_text_emphasis, *infowin_text_crc; - GtkWidget *infowin_text_copyright, *infowin_text_original; - GtkWidget *infowin_text_padding, *infowin_text_length; - GtkWidget *infowin_text_frequency; - int ibuf,ibuf2; - char buf[1023]; - char *layer_text[] = { "I", "II", "III" }; - - - infowin_main = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_widget_set_usize(infowin_main, 230, 300); - gtk_container_border_width(GTK_CONTAINER(infowin_main), 15); - gtk_window_set_title(GTK_WINDOW(infowin_main), "MP3 Technical Info"); - gtk_window_set_policy(GTK_WINDOW(infowin_main), FALSE, FALSE, FALSE); - gtk_signal_connect_object(GTK_OBJECT(infowin_main), "key_press_event", - GTK_SIGNAL_FUNC(kill_if_esc), - (gpointer) infowin_main); - infowin_main_frame=gtk_vbox_new(FALSE,5); - - if (mp3.header_isvalid) { - - 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]); - infowin_text_media=gtk_label_new(buf); - gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_media,TRUE,TRUE,0); - - sprintf(buf,"Bitrate: %i KB/s",header_bitrate(&mp3.header)); - infowin_text_bitrate=gtk_label_new(buf); - gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_bitrate,TRUE,TRUE,0); - - sprintf(buf,"Frequency: %iKHz",header_frequency(&mp3.header)/1000); - infowin_text_frequency=gtk_label_new(buf); - gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_frequency,TRUE,TRUE,0); - - ibuf=mp3.seconds / 60; - ibuf2=mp3.seconds % 60; - sprintf(buf,"Length: %i:%02i",ibuf,ibuf2); - infowin_text_length=gtk_label_new(buf); - gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_length,TRUE,TRUE,0); - - sprintf(buf,"Emphasis: %s",header_emphasis(&mp3.header)); - infowin_text_emphasis=gtk_label_new(buf); - gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_emphasis,TRUE,TRUE,0); - - sprintf(buf,"CRC: %s",!mp3.header.crc ? "Yes" : "No"); - infowin_text_crc=gtk_label_new(buf); - gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_crc,TRUE,TRUE,0); - - sprintf(buf,"Copyright: %s",mp3.header.copyright ? "Yes" : "No"); - infowin_text_copyright=gtk_label_new(buf); - gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_copyright,TRUE,TRUE,0); - - sprintf(buf,"Original: %s",mp3.header.original ? "Yes" : "No"); - infowin_text_original=gtk_label_new(buf); - gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_original,TRUE,TRUE,0); - - sprintf(buf,"Padding: %s",mp3.header.padding ? "Yes" : "No"); - infowin_text_padding=gtk_label_new(buf); - gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_padding,TRUE,TRUE,0); - - } else { - - sprintf(buf,"This file's header\nis invalid.\n\nNo information\navailable"); - infowin_text_media=gtk_label_new(buf); - gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_media,TRUE,TRUE,0); - - } - - infowin_button_frame=gtk_hbox_new(TRUE,30); - gtk_widget_set_usize(infowin_button_frame,30,20); - gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_button_frame,TRUE,TRUE,0); - - - infowin_exit_button = gtk_button_new_with_label("Exit"); - gtk_widget_show(infowin_exit_button); - gtk_box_pack_end(GTK_BOX(infowin_button_frame), infowin_exit_button, FALSE, TRUE, 0); - gtk_signal_connect_object(GTK_OBJECT(infowin_exit_button), "pressed", - GTK_SIGNAL_FUNC(gtk_widget_destroy), - GTK_OBJECT(infowin_main)); - - gtk_container_add(GTK_CONTAINER(infowin_main),infowin_main_frame); - gtk_widget_show_all(infowin_main); - - - -} - -void open_mp3_file(void) { - GtkWidget *filewin_main; - - filewin_main=gtk_file_selection_new("Use another MP3 File"); - gtk_signal_connect_object(GTK_OBJECT(filewin_main), "key_press_event", - (GtkSignalFunc) kill_if_esc, (gpointer) filewin_main); - gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(filewin_main)->cancel_button), "pressed", - GTK_SIGNAL_FUNC(gtk_widget_destroy), - GTK_OBJECT(filewin_main)); - gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filewin_main)->ok_button), "clicked", - (GtkSignalFunc) read_new_mp3, - filewin_main); - gtk_widget_show(filewin_main); - - - -} - -void read_new_mp3(GtkWidget *button, GtkWidget *file) { - char *filename; - - filename = (char *)gtk_file_selection_get_filename(GTK_FILE_SELECTION(file)); - if (load_mp3(filename) == 1) { - gtk_widget_destroy(file); - gtk_entry_set_text(GTK_ENTRY(id3win_text_title),mp3.id3.title); - gtk_entry_set_text(GTK_ENTRY(id3win_text_artist),mp3.id3.artist); - gtk_entry_set_text(GTK_ENTRY(id3win_text_album),mp3.id3.album); - gtk_entry_set_text(GTK_ENTRY(id3win_text_year),mp3.id3.year); - gtk_entry_set_text(GTK_ENTRY(id3win_text_comment),mp3.id3.comment); - gtk_entry_set_text(GTK_ENTRY(id3win_text_track),(char *)mp3.id3.track); - gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(id3win_combo_genre)->entry), gtext_genre(mp3.id3.genre[0])); - } - -} - -int load_mp3(char *filename) { - - mp3info nmp3; - - memset(&nmp3,0,sizeof(mp3info)); - - if ( !( nmp3.file=fopen(filename,"rb+") ) ) { - if((nmp3.file=fopen(filename,"rb"))) - read_only=1; - else { - if (id3win) { - quick_popup("Error in file", "Error opening MP3 file."); - } else { - g_print("Error opening MP3 file."); - } - return 0; - } - } - - nmp3.filename=filename; - get_mp3_info(&nmp3,SCAN_QUICK,0); - if(!nmp3.header_isvalid && !nmp3.id3_isvalid) { - if (id3win) { - quick_popup("Error in file", "File is corrupt or is not a standard MP3 file!"); - } else { - g_print("File is corrupt or is not a standard MP3 file!\n"); - } - return 0; - } else { - mp3=nmp3; - return 1; - } - return 0; - -} - -int kill_if_esc(GtkWidget *widget, GdkEventKey *event, gpointer obj) { - - if(event && event->type == GDK_KEY_PRESS && event->keyval == GDK_Escape) { - gtk_widget_destroy(GTK_WIDGET(obj)); - gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_press_event"); - } - - return(TRUE); -} - -void quick_popup(char *title, char *message) { - GtkWidget *popupwin, *popupwin_main, *popupwin_msg, *popupwin_ok; - char *markup; - - popupwin = gtk_dialog_new(); - gtk_widget_realize(popupwin); - gtk_container_border_width(GTK_CONTAINER(popupwin), 12); - gtk_window_set_title(GTK_WINDOW(popupwin), title); - popupwin_main = GTK_DIALOG(popupwin)->vbox; - popupwin_msg=gtk_label_new(NULL); - markup = g_markup_printf_escaped("%s",message); - gtk_label_set_markup(GTK_LABEL(popupwin_msg),markup); - g_free (markup); - gtk_box_pack_start(GTK_BOX(popupwin_main),popupwin_msg,TRUE,TRUE,0); - popupwin_ok = gtk_button_new_with_label(" OK "); - gtk_signal_connect_object(GTK_OBJECT(popupwin_ok), "clicked", - GTK_SIGNAL_FUNC(gtk_widget_destroy), - GTK_OBJECT(popupwin)); - gtk_signal_connect_object(GTK_OBJECT(popupwin), "key_press_event", - (GtkSignalFunc) kill_if_esc, (gpointer) popupwin); - gtk_box_pack_end(GTK_BOX(popupwin_main), popupwin_ok, TRUE, FALSE, 0); - gtk_widget_show_all(popupwin); - -} - -void about_mp3info(void) { - quick_popup(VERSION,"MP3Info\n" - " An ID3 Tag Editor\n\n\n" - " Original author: Ricardo Cerqueira \n" - " Current maintainer: Cedric Tefft \n" - " (C) 1999-2006 Ricardo Cerqueira, Cedric Tefft\n\n"); -} - -/* rmcc has left the building */ +/* + GMP3Info - Displays and allows editing of MP3 ID3 tags and various + technical aspects of MP3 files (GTK interface) + + gmp3info.c - main part of GTK version of MP3Info + + Copyright (C) 2000-2006 Cedric Tefft + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + *************************************************************************** + + rmc, Feb/2001 - Added a file open dialog + Added the Tech Info Window + Added an about box + GMP3Info can now be launched without an argument +*/ + +#include +#include +#define __MAIN +#include "mp3info.h" +#undef __MAIN + +gchar *gtext_genre(unsigned char genre); +unsigned char gget_genre (char *genre); +int kill_if_esc(GtkWidget *widget, GdkEventKey *event, gpointer obj); +void create_techinfo_win(void); +void open_mp3_file(void); +int load_mp3(char *filename); +void read_new_mp3(GtkWidget *button, GtkWidget *file); +void quick_popup(char *title, char *message); +void about_mp3info(void); + +GtkWidget *id3win,*id3win_frame_global; +GtkWidget *id3win_frame_title,*id3win_frame_artist,*id3win_frame_album; +GtkWidget *id3win_frame_year,*id3win_frame_comment, *id3win_frame_albyear; +GtkWidget *id3win_frame_genre,*id3win_frame_track,*id3win_frame_comtrack; +GtkWidget *id3win_text_title,*id3win_text_artist,*id3win_text_album; +GtkWidget *id3win_text_year,*id3win_text_comment,*id3win_combo_genre; +GtkWidget *id3win_text_track; +GtkWidget *id3win_frame_buttons,*id3win_ok_button,*id3win_cancel_button; +GtkWidget *id3win_menu_bar, *id3win_menu_file, *id3win_menu_fcont; +GtkWidget *id3win_menu_info, *id3win_menu_open, *id3win_menu_help; +GtkWidget *id3win_menu_hcont, *id3win_menu_about; +GList *genrelist=NULL; +gchar track[4]="",fbuf[4]; + +unsigned char genre=255; +FILE *fp; +unsigned char sig[2]; +unsigned int track_num; +mp3info mp3; +int read_only=0; + +void exit_save( GtkWidget *widget, GtkWidget *data) { + char tmp[31]; + + if (mp3.file) { + if(!read_only) { + strcpy(mp3.id3.title,gtk_entry_get_text(GTK_ENTRY(id3win_text_title))); + strcpy(mp3.id3.artist,gtk_entry_get_text(GTK_ENTRY(id3win_text_artist))); + strcpy(mp3.id3.album,gtk_entry_get_text(GTK_ENTRY(id3win_text_album))); + strcpy(mp3.id3.year,gtk_entry_get_text(GTK_ENTRY(id3win_text_year))); + strcpy(mp3.id3.comment,gtk_entry_get_text(GTK_ENTRY(id3win_text_comment))); + strcpy(tmp,gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(id3win_combo_genre)->entry))); + mp3.id3.genre[0]=gget_genre(tmp); + strcpy(tmp,gtk_entry_get_text(GTK_ENTRY(id3win_text_track))); + mp3.id3.track[0]=atoi(tmp); +/* if (mp3.id3.track[0] > 255) + mp3.id3.track[0]=255; +*/ + write_tag(&mp3); + } + + fclose(mp3.file); + } + gtk_main_quit(); +} + +int main(int argc, char *argv[] ) { + + int i; + char track_text[4]; + + + gtk_init (&argc, &argv); + + + + id3win=gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(id3win),"MP3info - An ID3 tag editor"); + gtk_window_set_policy (GTK_WINDOW(id3win), FALSE,FALSE,FALSE); + gtk_widget_set_usize(id3win,450,360); + gtk_container_border_width(GTK_CONTAINER(id3win),5); + gtk_signal_connect(GTK_OBJECT(id3win), "delete_event", (GtkSignalFunc) gtk_exit, NULL); + id3win_frame_global=gtk_vbox_new(FALSE,5); + + /* rmcc was here */ + + id3win_menu_bar = gtk_menu_bar_new(); + gtk_widget_show(id3win_menu_bar); + gtk_box_pack_start(GTK_BOX(id3win_frame_global), id3win_menu_bar, FALSE, TRUE, 1); + + id3win_menu_file = gtk_menu_item_new_with_label("File"); + gtk_widget_show(id3win_menu_file); + gtk_container_add(GTK_CONTAINER(id3win_menu_bar), id3win_menu_file); + id3win_menu_fcont = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(id3win_menu_file), id3win_menu_fcont); + + id3win_menu_open = gtk_menu_item_new_with_label("Open New "); + gtk_widget_show(id3win_menu_open); + gtk_container_add(GTK_CONTAINER(id3win_menu_fcont), id3win_menu_open); + gtk_signal_connect(GTK_OBJECT(id3win_menu_open), "activate", + GTK_SIGNAL_FUNC(open_mp3_file), + NULL); + + id3win_menu_info = gtk_menu_item_new_with_label("Info "); + gtk_widget_show(id3win_menu_info); + gtk_container_add(GTK_CONTAINER(id3win_menu_fcont), id3win_menu_info); + gtk_signal_connect(GTK_OBJECT(id3win_menu_info), "activate", + GTK_SIGNAL_FUNC(create_techinfo_win), + NULL); + + id3win_menu_help = gtk_menu_item_new_with_label(" Help"); + gtk_widget_show(id3win_menu_help); + gtk_container_add(GTK_CONTAINER(id3win_menu_bar), id3win_menu_help); + gtk_menu_item_right_justify(GTK_MENU_ITEM(id3win_menu_help)); + id3win_menu_hcont = gtk_menu_new(); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(id3win_menu_help), id3win_menu_hcont); + + id3win_menu_about = gtk_menu_item_new_with_label("About "); + gtk_widget_show(id3win_menu_about); + gtk_container_add(GTK_CONTAINER(id3win_menu_hcont), id3win_menu_about); + gtk_signal_connect(GTK_OBJECT(id3win_menu_about), "activate", + GTK_SIGNAL_FUNC(about_mp3info), + NULL); + + + /* rmcc has left the building */ + + id3win_frame_title=gtk_frame_new("Title"); + gtk_container_border_width(GTK_CONTAINER(id3win_frame_title),5); + id3win_text_title=gtk_entry_new_with_max_length(30); + gtk_container_add(GTK_CONTAINER(id3win_frame_title),id3win_text_title); + gtk_box_pack_start(GTK_BOX(id3win_frame_global),id3win_frame_title,TRUE,TRUE,0); + + id3win_frame_artist=gtk_frame_new("Artist"); + gtk_container_border_width(GTK_CONTAINER(id3win_frame_artist),5); + id3win_text_artist=gtk_entry_new_with_max_length(30); + gtk_container_add(GTK_CONTAINER(id3win_frame_artist),id3win_text_artist); + gtk_box_pack_start(GTK_BOX(id3win_frame_global),id3win_frame_artist,TRUE,TRUE,0); + + id3win_frame_albyear=gtk_hbox_new(FALSE,30); + id3win_frame_album=gtk_frame_new("Album"); + gtk_container_border_width(GTK_CONTAINER(id3win_frame_album),5); + id3win_text_album=gtk_entry_new_with_max_length(30); + gtk_container_add(GTK_CONTAINER(id3win_frame_album),id3win_text_album); + gtk_box_pack_start(GTK_BOX(id3win_frame_albyear),id3win_frame_album,TRUE,TRUE,0); + + id3win_frame_year=gtk_frame_new("Year"); + gtk_widget_set_usize(id3win_frame_year,2,0); + gtk_container_border_width(GTK_CONTAINER(id3win_frame_year),5); + id3win_text_year=gtk_entry_new_with_max_length(4); + gtk_container_add(GTK_CONTAINER(id3win_frame_year),id3win_text_year); + gtk_box_pack_start(GTK_BOX(id3win_frame_albyear),id3win_frame_year,TRUE,TRUE,0); + gtk_box_pack_start(GTK_BOX(id3win_frame_global),id3win_frame_albyear,TRUE,TRUE,0); + + id3win_frame_comtrack=gtk_hbox_new(FALSE,30); + id3win_frame_comment=gtk_frame_new("Comment"); + gtk_container_border_width(GTK_CONTAINER(id3win_frame_comment),5); + id3win_text_comment=gtk_entry_new_with_max_length(30); + gtk_container_add(GTK_CONTAINER(id3win_frame_comment),id3win_text_comment); + gtk_box_pack_start(GTK_BOX(id3win_frame_comtrack),id3win_frame_comment,TRUE,TRUE,0); + + id3win_frame_track=gtk_frame_new("Track"); + gtk_widget_set_usize(id3win_frame_track,2,0); + gtk_container_border_width(GTK_CONTAINER(id3win_frame_track),5); + id3win_text_track=gtk_entry_new_with_max_length(3); + gtk_container_add(GTK_CONTAINER(id3win_frame_track),id3win_text_track); + gtk_box_pack_start(GTK_BOX(id3win_frame_comtrack),id3win_frame_track,TRUE,TRUE,0); + gtk_box_pack_start(GTK_BOX(id3win_frame_global),id3win_frame_comtrack,TRUE,TRUE,0); + + id3win_frame_genre=gtk_frame_new("Genre"); + gtk_container_border_width(GTK_CONTAINER(id3win_frame_genre),5); + id3win_combo_genre=gtk_combo_new(); + for(i=0;i 0) + sprintf(track_text,"%d",(int)mp3.id3.track[0]); + else + track_text[0]=0; + gtk_entry_set_text(GTK_ENTRY(id3win_text_track),track_text); + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(id3win_combo_genre)->entry), gtext_genre(mp3.id3.genre[0])); + + } else { + open_mp3_file(); + } + + gtk_main(); + return(0); + +} + +gchar *gtext_genre(unsigned char genre) { + int genre_num = (int) genre; + + if(genre_num <= MAXGENRE) { + return((gchar *)typegenre[genre_num]); + } else { + return((gchar *)""); + } +} + +unsigned char gget_genre (char *genre) { + int num_genre=0; + + if(genre[0] == '\0') { return 255; } + + sscanf(genre,"%u",&num_genre); + if(num_genre == 0) { + if(genre[0] != '0') { + while(num_genre++ <= MAXGENRE) { + if(!strcasecmp(genre,typegenre[num_genre-1])) { + return num_genre-1; + } + } + num_genre=256; + } + } + + if(num_genre < 0 || num_genre > MAXGENRE) { + num_genre=255; + } + return (unsigned char) num_genre; +} + +/* rmcc was here */ + +void create_techinfo_win(void) { + GtkWidget *infowin_main, *infowin_main_frame; + GtkWidget *infowin_exit_button, *infowin_button_frame; + GtkWidget *infowin_text_media, *infowin_text_bitrate; + GtkWidget *infowin_text_emphasis, *infowin_text_crc; + GtkWidget *infowin_text_copyright, *infowin_text_original; + GtkWidget *infowin_text_padding, *infowin_text_length; + GtkWidget *infowin_text_frequency; + int ibuf,ibuf2; + char buf[1023]; + char *layer_text[] = { "I", "II", "III" }; + + + infowin_main = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_widget_set_usize(infowin_main, 230, 300); + gtk_container_border_width(GTK_CONTAINER(infowin_main), 15); + gtk_window_set_title(GTK_WINDOW(infowin_main), "MP3 Technical Info"); + gtk_window_set_policy(GTK_WINDOW(infowin_main), FALSE, FALSE, FALSE); + gtk_signal_connect_object(GTK_OBJECT(infowin_main), "key_press_event", + GTK_SIGNAL_FUNC(kill_if_esc), + (gpointer) infowin_main); + infowin_main_frame=gtk_vbox_new(FALSE,5); + + if (mp3.header_isvalid) { + + 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]); + infowin_text_media=gtk_label_new(buf); + gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_media,TRUE,TRUE,0); + + sprintf(buf,"Bitrate: %i kbps",header_bitrate(&mp3.header)); + infowin_text_bitrate=gtk_label_new(buf); + gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_bitrate,TRUE,TRUE,0); + + sprintf(buf,"Frequency: %i kHz",header_frequency(&mp3.header)/1000); + infowin_text_frequency=gtk_label_new(buf); + gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_frequency,TRUE,TRUE,0); + + ibuf=mp3.seconds / 60; + ibuf2=mp3.seconds % 60; + sprintf(buf,"Length: %i:%02i",ibuf,ibuf2); + infowin_text_length=gtk_label_new(buf); + gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_length,TRUE,TRUE,0); + + sprintf(buf,"Emphasis: %s",header_emphasis(&mp3.header)); + infowin_text_emphasis=gtk_label_new(buf); + gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_emphasis,TRUE,TRUE,0); + + sprintf(buf,"CRC: %s",!mp3.header.crc ? "Yes" : "No"); + infowin_text_crc=gtk_label_new(buf); + gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_crc,TRUE,TRUE,0); + + sprintf(buf,"Copyright: %s",mp3.header.copyright ? "Yes" : "No"); + infowin_text_copyright=gtk_label_new(buf); + gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_copyright,TRUE,TRUE,0); + + sprintf(buf,"Original: %s",mp3.header.original ? "Yes" : "No"); + infowin_text_original=gtk_label_new(buf); + gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_original,TRUE,TRUE,0); + + sprintf(buf,"Padding: %s",mp3.header.padding ? "Yes" : "No"); + infowin_text_padding=gtk_label_new(buf); + gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_padding,TRUE,TRUE,0); + + } else { + + sprintf(buf,"This file's header\nis invalid.\n\nNo information\navailable"); + infowin_text_media=gtk_label_new(buf); + gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_text_media,TRUE,TRUE,0); + + } + + infowin_button_frame=gtk_hbox_new(TRUE,30); + gtk_widget_set_usize(infowin_button_frame,30,20); + gtk_box_pack_start(GTK_BOX(infowin_main_frame),infowin_button_frame,TRUE,TRUE,0); + + + infowin_exit_button = gtk_button_new_with_label("Exit"); + gtk_widget_show(infowin_exit_button); + gtk_box_pack_end(GTK_BOX(infowin_button_frame), infowin_exit_button, FALSE, TRUE, 0); + gtk_signal_connect_object(GTK_OBJECT(infowin_exit_button), "pressed", + GTK_SIGNAL_FUNC(gtk_widget_destroy), + GTK_OBJECT(infowin_main)); + + gtk_container_add(GTK_CONTAINER(infowin_main),infowin_main_frame); + gtk_widget_show_all(infowin_main); + + + +} + +void open_mp3_file(void) { + GtkWidget *filewin_main; + + filewin_main=gtk_file_selection_new("Use another MP3 File"); + gtk_signal_connect_object(GTK_OBJECT(filewin_main), "key_press_event", + (GtkSignalFunc) kill_if_esc, (gpointer) filewin_main); + gtk_signal_connect_object(GTK_OBJECT(GTK_FILE_SELECTION(filewin_main)->cancel_button), "pressed", + GTK_SIGNAL_FUNC(gtk_widget_destroy), + GTK_OBJECT(filewin_main)); + gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filewin_main)->ok_button), "clicked", + (GtkSignalFunc) read_new_mp3, + filewin_main); + gtk_widget_show(filewin_main); + + + +} + +void read_new_mp3(GtkWidget *button, GtkWidget *file) { + char *filename; + + filename = (char *)gtk_file_selection_get_filename(GTK_FILE_SELECTION(file)); + if (load_mp3(filename) == 1) { + gtk_widget_destroy(file); + gtk_entry_set_text(GTK_ENTRY(id3win_text_title),mp3.id3.title); + gtk_entry_set_text(GTK_ENTRY(id3win_text_artist),mp3.id3.artist); + gtk_entry_set_text(GTK_ENTRY(id3win_text_album),mp3.id3.album); + gtk_entry_set_text(GTK_ENTRY(id3win_text_year),mp3.id3.year); + gtk_entry_set_text(GTK_ENTRY(id3win_text_comment),mp3.id3.comment); + gtk_entry_set_text(GTK_ENTRY(id3win_text_track),(char *)mp3.id3.track); + gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(id3win_combo_genre)->entry), gtext_genre(mp3.id3.genre[0])); + } + +} + +int load_mp3(char *filename) { + + mp3info nmp3; + + memset(&nmp3,0,sizeof(mp3info)); + + if ( !( nmp3.file=fopen(filename,"rb+") ) ) { + if((nmp3.file=fopen(filename,"rb"))) + read_only=1; + else { + if (id3win) { + quick_popup("Error in file", "Error opening MP3 file."); + } else { + g_print("Error opening MP3 file."); + } + return 0; + } + } + + nmp3.filename=filename; + get_mp3_info(&nmp3,SCAN_QUICK,0); + if(!nmp3.header_isvalid && !nmp3.id3_isvalid) { + if (id3win) { + quick_popup("Error in file", "File is corrupt or is not a standard MP3 file!"); + } else { + g_print("File is corrupt or is not a standard MP3 file!\n"); + } + return 0; + } else { + mp3=nmp3; + return 1; + } + return 0; + +} + +int kill_if_esc(GtkWidget *widget, GdkEventKey *event, gpointer obj) { + + if(event && event->type == GDK_KEY_PRESS && event->keyval == GDK_Escape) { + gtk_widget_destroy(GTK_WIDGET(obj)); + gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_press_event"); + } + + return(TRUE); +} + +void quick_popup(char *title, char *message) { + GtkWidget *popupwin, *popupwin_main, *popupwin_msg, *popupwin_ok; + char *markup; + + popupwin = gtk_dialog_new(); + gtk_widget_realize(popupwin); + gtk_container_border_width(GTK_CONTAINER(popupwin), 12); + gtk_window_set_title(GTK_WINDOW(popupwin), title); + popupwin_main = GTK_DIALOG(popupwin)->vbox; + popupwin_msg=gtk_label_new(NULL); + markup = g_markup_printf_escaped("%s",message); + gtk_label_set_markup(GTK_LABEL(popupwin_msg),markup); + g_free (markup); + gtk_box_pack_start(GTK_BOX(popupwin_main),popupwin_msg,TRUE,TRUE,0); + popupwin_ok = gtk_button_new_with_label(" OK "); + gtk_signal_connect_object(GTK_OBJECT(popupwin_ok), "clicked", + GTK_SIGNAL_FUNC(gtk_widget_destroy), + GTK_OBJECT(popupwin)); + gtk_signal_connect_object(GTK_OBJECT(popupwin), "key_press_event", + (GtkSignalFunc) kill_if_esc, (gpointer) popupwin); + gtk_box_pack_end(GTK_BOX(popupwin_main), popupwin_ok, TRUE, FALSE, 0); + gtk_widget_show_all(popupwin); + +} + +void about_mp3info(void) { + quick_popup(VERSION,"MP3Info\n" + " An ID3 Tag Editor\n\n\n" + " Original author: Ricardo Cerqueira \n" + " Current maintainer: Cedric Tefft \n" + " (C) 1999-2006 Ricardo Cerqueira, Cedric Tefft\n\n"); +} + +/* rmcc has left the building */ --- mp3info-0.8.5a.orig/mp3info.c +++ mp3info-0.8.5a/mp3info.c @@ -34,7 +34,7 @@ char FILENAME_FORMAT_STRING[]="File: %F\n"; char ID3_FORMAT_STRING[]="Title: %-30t Track: %n\nArtist: %a\nAlbum: %-30l Year: %y\nComment: %-30c Genre: %g [%G]\n"; -char TECH_FORMAT_STRING[]="Media Type: MPEG %2.1v Layer %L\nAudio: %r KB/s, %qKHz (%o)\nEmphasis: %e\nCRC: %E\nCopyright: %C\nOriginal: %O\nPadding: %p\nLength: %m:%02s\n"; +char TECH_FORMAT_STRING[]="Media Type: MPEG %2.1v Layer %L\nAudio: %r kbps, %q kHz (%o)\nEmphasis: %e\nCRC: %E\nCopyright: %C\nOriginal: %O\nPadding: %p\nLength: %m:%02s\n"; int main(int argc, char *argv[]) { FILE *fp; @@ -183,7 +183,7 @@ file_open=0; if (view_only == 1) { if ( !( fp=fopen(argv[i],"rb") ) ) { - sprintf(error_msg,"Error opening MP3: %s",argv[i]); + snprintf(error_msg,sizeof(error_msg),"Error opening MP3: %s",argv[i]); perror(error_msg); retcode |= 1; } else { @@ -191,7 +191,7 @@ } } else { if ( !( fp=fopen(argv[i],"rb+") ) ) { - sprintf(error_msg,"Error opening MP3: %s",argv[i]); + snprintf(error_msg,sizeof(error_msg),"Error opening MP3: %s",argv[i]); perror(error_msg); retcode |= 1; } else { @@ -211,8 +211,10 @@ } if(view_only) { - if(want_id3 && !mp3.id3_isvalid) + if(want_id3 && !mp3.id3_isvalid) { fprintf(stderr,"%s does not have an ID3 1.x tag.\n",mp3.filename); + retcode |= 16; + } if(print_format) { format_output(print_format,&mp3,vbr_report); --- mp3info-0.8.5a.orig/textfunc.c +++ mp3info-0.8.5a/textfunc.c @@ -105,8 +105,8 @@ "\n\t\t%%u\tNumber of good audio frames (integer)\n"\ "\t\t%%b\tNumber of corrupt audio frames (integer)\n"\ "\t\t%%Q\tSampling frequency in Hz (integer)\n"\ - "\t\t%%q\tSampling frequency in KHz (integer)\n"\ - "\t\t%%r\tBit Rate in KB/s (see also '-r')\n"\ + "\t\t%%q\tSampling frequency in kHz (integer)\n"\ + "\t\t%%r\tBit Rate in kbps (see also '-r')\n"\ "\n\t\t%%m\tPlaying time: minutes only (integer)\n"\ "\t\t%%s\tPlaying time: seconds only (integer)\n"\ "\t\t%%S\tTotal playing time in seconds (integer)\n"\ --- mp3info-0.8.5a.orig/mp3info.1 +++ mp3info-0.8.5a/mp3info.1 @@ -170,10 +170,10 @@ Sampling frequency in Hz [integer] .B .IP %q -Sampling frequency in KHz [integer] +Sampling frequency in kHz [integer] .B .IP %r -Bit Rate in KB/s (type and meaning affected by \fB-r\fP option) +Bit Rate in kbps (type and meaning affected by \fB-r\fP option) .B .IP %m Playing time: minutes only [integer]