gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r3679 - in Extractor: . src/main src/plugins


From: cyberix
Subject: [GNUnet-SVN] r3679 - in Extractor: . src/main src/plugins
Date: Fri, 10 Nov 2006 13:41:20 -0800 (PST)

Author: cyberix
Date: 2006-11-10 13:41:11 -0800 (Fri, 10 Nov 2006)
New Revision: 3679

Added:
   Extractor/src/plugins/nsfextractor.c
Modified:
   Extractor/AUTHORS
   Extractor/ChangeLog
   Extractor/NEWS
   Extractor/src/main/extractor.c
   Extractor/src/plugins/Makefile.am
Log:
Added nsf support.

Modified: Extractor/AUTHORS
===================================================================
--- Extractor/AUTHORS   2006-11-10 07:06:48 UTC (rev 3678)
+++ Extractor/AUTHORS   2006-11-10 21:41:11 UTC (rev 3679)
@@ -33,6 +33,7 @@
 exiv2         - Andreas Huggel <address@hidden>
 language      - Roberto Cappuccio <address@hidden> (from libkat)
 word          - Ariya Hidayat <address@hidden> and Sacha Fuentes 
<address@hidden>
+nsf           - Toni Ruottu <address@hidden>
 
 General contributors:
 Yuri N. Sedunov <address@hidden>

Modified: Extractor/ChangeLog
===================================================================
--- Extractor/ChangeLog 2006-11-10 07:06:48 UTC (rev 3678)
+++ Extractor/ChangeLog 2006-11-10 21:41:11 UTC (rev 3679)
@@ -1,3 +1,6 @@
+Sat Nov 11 00:04:34 EET 2006
+       Added a NSF ( NES Sound Format ) plugin
+
 Sat Sep 16 12:36:42 MDT 2006
        Added support for various additional tags to ID3v2 extractors.
        Now (again) trimming whitespace at the end of ID3v1 tags.

Modified: Extractor/NEWS
===================================================================
--- Extractor/NEWS      2006-11-10 07:06:48 UTC (rev 3678)
+++ Extractor/NEWS      2006-11-10 21:41:11 UTC (rev 3679)
@@ -1,3 +1,6 @@
+Sat Nov 11 00:04:34 EET 2006
+       Added a NSF ( NES Sound Format ) plugin
+
 Tue Apr 18 14:44:37 PDT 2006
        Added dictionaries for Finnish, French, Gaelic and Swedish
        (for printable extractors).

Modified: Extractor/src/main/extractor.c
===================================================================
--- Extractor/src/main/extractor.c      2006-11-10 07:06:48 UTC (rev 3678)
+++ Extractor/src/main/extractor.c      2006-11-10 21:41:11 UTC (rev 3679)
@@ -234,7 +234,8 @@
 libextractor_mpeg:\
 libextractor_elf:\
 libextractor_oo:\
-libextractor_asf"
+libextractor_asf:\
+libextractor_nsf"
 
 #define DEFAULT_LIBRARIES EXSO OLESO OGGSO QTSO DEFSO
 

Modified: Extractor/src/plugins/Makefile.am
===================================================================
--- Extractor/src/plugins/Makefile.am   2006-11-10 07:06:48 UTC (rev 3678)
+++ Extractor/src/plugins/Makefile.am   2006-11-10 21:41:11 UTC (rev 3679)
@@ -73,6 +73,7 @@
   libextractor_mime.la \
   libextractor_mp3.la \
   $(extrampeg) \
+  libextractor_nsf.la \
   $(extraogg) \
   libextractor_png.la \
   libextractor_ps.la \
@@ -291,6 +292,13 @@
   $(top_builddir)/src/main/libextractor.la \
   libconvert.la
 
+libextractor_nsf_la_SOURCES = \
+  nsfextractor.c 
+libextractor_nsf_la_LDFLAGS = \
+  $(PLUGINFLAGS)  $(retaincommand)
+libextractor_nsf_la_LIBADD = \
+  $(top_builddir)/src/main/libextractor.la
+
 libextractor_split_la_SOURCES = \
   splitextractor.c 
 libextractor_split_la_LDFLAGS = \

Added: Extractor/src/plugins/nsfextractor.c
===================================================================
--- Extractor/src/plugins/nsfextractor.c        2006-11-10 07:06:48 UTC (rev 
3678)
+++ Extractor/src/plugins/nsfextractor.c        2006-11-10 21:41:11 UTC (rev 
3679)
@@ -0,0 +1,160 @@
+/*
+     This file is part of libextractor.
+     (C) 2006 Toni Ruottu
+
+     libextractor 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, or (at your
+     option) any later version.
+
+     libextractor 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 libextractor; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+ */
+
+#include "platform.h"
+#include "extractor.h"
+#include "convert.h"
+
+
+static struct EXTRACTOR_Keywords *
+addkword(EXTRACTOR_KeywordList *oldhead,
+         const char * phrase,
+         EXTRACTOR_KeywordType type) {
+   EXTRACTOR_KeywordList * keyword;
+   
+   keyword = malloc(sizeof(EXTRACTOR_KeywordList));
+   keyword->next = oldhead;
+   keyword->keyword = strdup(phrase);
+   keyword->keywordType = type;
+   return keyword;
+}   
+
+
+/* "extract" keyword from a Nes Sound Format file
+ *
+ *  NSF specification version 1.61 was used,
+ *  while this piece of software was originally
+ *  written.
+ *
+ * */
+struct EXTRACTOR_Keywords *
+libextractor_nsf_extract(const char * filename,
+                             char * data,
+                             size_t size,
+                             struct EXTRACTOR_Keywords * prev) {
+  int i;
+  char name[32];
+  char artist[32];
+  char copyright[32];
+  char songs[32];
+  char startingsong[32];
+
+
+  /* Check header size and "magic" id bytes */
+
+  if
+  (
+     size < 0x80 ||
+     data[0] != 'N' ||
+     data[1] != 'E' ||
+     data[2] != 'S' ||
+     data[3] != 'M' ||
+     data[4] != 0x1a
+  )
+  {
+    return prev;
+  }
+
+
+  /* Mime-type */
+
+  prev = addkword(prev, "audio/x-nsf", EXTRACTOR_MIMETYPE);
+
+
+  /* Version of NSF format */
+
+  sprintf( startingsong, "NSF version: %d", data[5] );
+  prev = addkword(prev, startingsong, EXTRACTOR_UNKNOWN);
+
+
+  /* Get song count */
+
+  sprintf( songs, "total songs: %d", data[6] );
+  prev = addkword(prev, songs, EXTRACTOR_UNKNOWN);
+
+
+  /* Get number of the first song to be played */
+
+  sprintf( startingsong, "starting song: %d", data[7] );
+  prev = addkword(prev, startingsong, EXTRACTOR_UNKNOWN);
+
+
+  /* Parse name, artist, copyright fields */
+
+  for( i = 0; i < 32; i++ )
+  {
+    name[i] = data[ 0x0e + i ];
+    artist[i] = data[ 0x2e + i ];
+    copyright[i] = data[ 0x4e + i ];
+  }
+
+  prev = addkword(prev, name, EXTRACTOR_TITLE);
+  prev = addkword(prev, artist, EXTRACTOR_ARTIST);
+  prev = addkword(prev, copyright, EXTRACTOR_COPYRIGHT);
+
+
+  /* PAL or NTSC */
+
+  if( data[0x7a] & 2 )
+  {
+    prev = addkword(prev, "a dual PAL/NTSC tune", EXTRACTOR_UNKNOWN);
+  }
+  else
+  {
+    if( data[0x7a] & 1 )
+    {
+      prev = addkword(prev, "a PAL tune", EXTRACTOR_UNKNOWN);
+    }
+    else
+    {
+      prev = addkword(prev, "an NTSC tune", EXTRACTOR_UNKNOWN);
+    }
+  }
+
+
+  /* Detect Extra Sound Chips needed to play the files */
+
+  if( data[0x7b] & 1 )
+  {
+    prev = addkword(prev, "uses VRCVI", EXTRACTOR_UNKNOWN);
+  }
+  if( data[0x7b] & 2 )
+  {
+    prev = addkword(prev, "uses VRCVII", EXTRACTOR_UNKNOWN);
+  }
+  if( data[0x7b] & 4 )
+  {
+    prev = addkword(prev, "uses FDS Sound", EXTRACTOR_UNKNOWN);
+  }
+  if( data[0x7b] & 8 )
+  {
+    prev = addkword(prev, "uses MMC5 audio", EXTRACTOR_UNKNOWN);
+  }
+  if( data[0x7b] & 16 )
+  {
+    prev = addkword(prev, "uses Namco 106", EXTRACTOR_UNKNOWN);
+  }
+  if( data[0x7b] & 32 )
+  {
+    prev = addkword(prev, "uses Sunsoft FME-07", EXTRACTOR_UNKNOWN);
+  }
+
+  return prev;
+}





reply via email to

[Prev in Thread] Current Thread [Next in Thread]