libnw hacks
This page contains links to some of my libnw hacks. It is autogenerated from the comments (if any) at the head of each file.
- AUTHORS(updated Tue Oct  2 20:47:42 2012)
 
 
- COPYING(updated Wed Aug  8 11:50:46 2007)
 
 
- ChangeLog(updated Tue Oct  2 20:47:42 2012)
 
 
- FILE_FORMAT_v1.txt(updated Sun Jan 14 20:58:52 2007)
 
 
- FILE_FORMAT_v2.txt(updated Tue Oct  2 20:47:42 2012)
 
 
- INSTALL(updated Wed Aug  8 11:50:46 2007)
 
 
- Makefile.am(updated Wed Dec 12 23:38:11 2007)
 
 
- Makefile.in(updated Wed Dec 12 23:38:11 2007)
 
- # Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005  Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
 
- NEWS(updated Tue Oct  2 20:47:42 2012)
 
 
- README(updated Sun Jan 14 20:58:52 2007)
 
 
- README.ORIG(updated Sun Jan 14 20:58:52 2007)
 
 
- aclocal.m4(updated Wed Dec 12 23:38:11 2007)
 
- # generated automatically by aclocal 1.9.6 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005  Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
# serial 48 AC_PROG_LIBTOOL
# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
# -----------------------------------------------------------
# If this macro is not defined by Autoconf, define it here.
 
- common.c(updated Wed Dec 27 18:54:40 2006)
 
- /* this file originally came from the mpg123 plugin, although I've
   carved it up quite a bit. It's under GPL. */
#include <stdio.h>
#include <string.h>
#include <glib.h>
#include "mple.h"
#include "common.h"
#define MAX_SKIP_LENGTH (256 * 1024)
#define         MPG_MD_STEREO           0
#define         MPG_MD_JOINT_STEREO     1
#define         MPG_MD_DUAL_CHANNEL     2
#define         MPG_MD_MONO             3
#define ID3_GET_SIZE28(a, b, c, d)      \
 
- common.h(updated Tue Oct  2 20:47:42 2012)
 
- /* private header file to attach common.c to mple.c */
/*
 * MP3 file stuff
 * This is largely to work around the huge number of globals present
 * in the mpg123 code
 */
#define MAXFRAMESIZE 1792
 
- config.h.in(updated Wed Dec 12 23:38:11 2007)
 
- /* config.h.in.  Generated from configure.ac by autoheader.  */
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the `dbus-1' library (-ldbus-1). */
#undef HAVE_LIBDBUS_1
/* Define to 1 if you have the <malloc.h> header file. */
#undef HAVE_MALLOC_H
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the `memset' function. */
#undef HAVE_MEMSET
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the `strerror' function. */
#undef HAVE_STRERROR
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Name of package */
#undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Version number of package */
#undef VERSION
/* Define to `unsigned' if <sys/types.h> does not define. */
#undef size_t
 
- configure(updated Wed Dec 12 23:38:11 2007)
 
- # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.59 for libnw 0.1.
#
# Report bugs to <waider@waider.ie>.
#
# Copyright (C) 2003 Free Software Foundation, Inc.
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
## --------------------- ##
## M4sh Initialization.  ##
## --------------------- ##
# Be Bourne compatible
 
- configure.ac(updated Wed Dec 12 23:38:11 2007)
 
- #                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
 
- libnw-test.c(updated Sun Oct 14 21:25:36 2007)
 
- /* test rig for libNW functions */
/* caution: will delete the contents of whatever you tell it is the
   test device */
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
#include <glib.h>
#include <unistd.h>
#include <libnw.h>
/* need this for frobbing the test file */
#include <common.h>
#define TEST_DEVICE "/var/tmp/NW-S23"
#define TEST_FILE   "test.mp3"
/*
 * The original MP3 code pads out short reads with zeros, which is
 * fine and sensible for streaming but makes no sense, really, for
 * file reads. This switches it on and off and adjusts the expected
 * test results accordingly.
 */
#ifdef PAD_SHORT_READ
#define TEST_FILE_SIZE 703040
#define TEST_FILE_MS    43521
#define TEST_FILE_FRAMES 1682
#else
#define TEST_FILE_SIZE 702622
#define TEST_FILE_MS    43495
#define TEST_FILE_FRAMES 1681
#endif
 
- libnw.c(updated Wed Dec 12 23:38:11 2007)
 
- #include <libnw.h>
#include <libnw_internals.h>
#include <glib.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h> /* TEMP */
#include <id3tag.h>
#include "mple.h"
#include "mple_v2.h"
#include "common.h"
/*
 * scan for any available devices. currently only scans for v1. The
 * MAGIC parameter is a string that HAL identifies the device with,
 * e.g. "NETWORK  WALKMAN".
 */
 
- libnw.h(updated Sun Oct 14 21:25:36 2007)
 
- #ifndef LIBNW_H
#define LIBNW_H
#include <glib.h>
#include <sys/time.h>
#include <id3tag.h>
#include <stdio.h>
#include <sys/stat.h>
/* predeclare the structs */
 
- libnw_internals.h(updated Sun Oct 14 21:25:36 2007)
 
- #ifndef LIB_NW_INTERNALS_H
#define LIB_NW_INTERNALS_H
#include <libnw.h>
 
- mp3filemanager.c(updated Sun Oct 14 21:25:36 2007)
 
- /*
 * This is a Gtk2 replacement for the MP3FileManager program shipped
 * with the Sony NW-S23. It currently needs the following things
 * fixed (X marks the ones I've fixed):
 *
 * X dropping folders at specific positions doesn't work; they always
 *   get appended to the end of the folder list. You can move 'em
 *   around once they're on the device, though.
 * X changes are synced to the device far too often, and the syncing
 *   is a huge kludge that involves deleting the entire track/folder
 *   list, syncing that, then rebuilding the new list from
 *   scratch. Mostly this is because I need to add a few more hooks to
 *   mple.c
 * X doesn't delete mp*.dat files when tracks are deleted from the
 *   UI. The index entries *are* deleted, so the mpdat files won't
 *   play, though.
 * * Delete All button does nothing
 * * You can't select more than one thing at a time from the
 *   list. This is a serious pain if you're trying to make bulk
 *   changes, such as moving a half-dozen tracks. This can't be fixed
 *   without subclassing, see below.
 * * Delete All and Delete both have confirm dialogs in the Windows
 *   version.
 * * The file transfer stuff needs a little fixing - the main window
 *   should be disabled; this is done with - I think - an
 *   application-modal window on Windows. A better idea would be to
 *   thread the transfer process so you could keep adding files while
 *   the current transfer is in progress.
 * * You can't drop a deep directory structure on it and expect it to
 *   do something useful. Windows will collapse a Band/Album/Mp3.mp3
 *   filename into Folder "Band Album", Track Mp3.mp3
 * X Files should be listed by the mp3 filename, not the mp3 title.
 * * The windows version doesn't use a progress bar for
 *   transfers. While I like the progress bar, it does mean that the
 *   status bar is only half as wide as it should be.
 * * It would be nice if I could handle any URI that drag-and-drop
 *   throws me; at the very least, dragging a URL from firefox into
 *   the gadget would be cool.
 * * Context menu is broken
 * * Context menu should allow you to edit the metadata of a file
 * X The device path is hardcoded.
 * * Mount/Unmount device would be neat
 * * dropping is still not quite right
 *   - dropping a file at the end of the device
 *   - dropping a file onto a folder prepends instead of appends
 *
 * And internally;
 * * the code is full of memory leaks. I did a dry-run with valgrind,
 *   but there's so much noise from Gtk and X that I gave up.
 * * Globals. I hate globals. I hate hate hate hate them.
 * * Might be smart to isolate the unix-specific stuff if I'm going to
 *   try building this on Windows at some point. There are probably
 *   glib functions to help me.
 *
 * The code is, in general, pretty horrible, in part because I'm
 * trying to force the default GtkTree stuff to do things it's not
 * really meant to do. At some point I need to learn how to subclass
 * the GtkTreeStore so I can add on the bits I need, such as better
 * drag/drop, edit on button-click rather than button-press, etc.
 *
 * The other reason the code is horrible is that I've not done any
 * serious Gtk work before, and it's not exactly intuitive. I keep
 * finding useful glib functions after I've spent half an hour writing
 * equivalent code, too. Henry Spencer would be proud...
 */
/*
 
- mple.c(updated Sun Oct 14 21:25:36 2007)
 
- /*
 * Interfacing library for Sony's obfuscated MP3 file format as used
 * on their network walkman devices
 *
 * Waider, March 2005
 */
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <wchar.h>
#include <unistd.h>
#include <stdlib.h>
#include <assert.h>
#include <malloc.h>
#include <time.h>
#include <glib.h>
/* mp3 internals handling */
#include <id3tag.h>
/* hardware abstraction layer, for obtaining the serial off the device */
#ifdef HAL_VERSION
#include <libhal.h>
#if HAL_VERSION == 4
#define libhal_get_all_devices(x,y,z) hal_get_all_devices(x,y)
#define libhal_device_property_exists(w,x,y,z)  \
  hal_device_property_exists(w,x,y)
#define libhal_device_get_property_string(w,x,y,z)  \
  hal_device_get_property_string(w,x,y)
#define libhal_device_get_property_bool(w,x,y,z)    \
  hal_device_get_property_bool(w,x,y)
#define libhal_free_string(x) hal_free_string(x)
#define libhal_free_string_array(x) hal_free_string_array(x)
#endif
#endif
#include "libnw.h"
#include "mple.h"
#include "config.h"
#include "common.h"
#include "util.h"
/******************************************************************************
 * DEVICE MANIPULATION
 *****************************************************************************/
/* this is, obviously, undocumented */
 
- mple.h(updated Tue Oct  2 20:47:42 2012)
 
- #ifndef MPLE_H
#define MPLE_H
#include <glib.h>
/* I hate include files that aren't self-contained */
#include <time.h>
#include <id3tag.h>
#include <stdio.h>
#include <sys/stat.h>
#include <libnw.h>
#include <libnw_internals.h>
#define DEFAULT_PB_TEMPLATE "%s/esys/pblist%d.dat"
#define DEFAULT_MP_TEMPLATE "%s/esys/nw-mp3/mp%04x.dat"
#define DEFAULT_MASTER_PBLIST 1
#define MAX_TRACKS 40000 /* according to the manual */
/* On-disk data structures and magic */
#define PBLIST_MAGIC "\x00\x03\xce\xa0"
#define MPDAT_MAGIC  "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
/* This is used to find likely devices in HAL */
#define HAL_MAGIC "NETWORK  WALKMAN"
/* Header structure from pblist file [incomplete] */
 
- mple_v2.c(updated Sun Oct 14 21:25:36 2007)
 
- #include <glib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <ctype.h>
#include <id3tag.h>
#include <malloc.h>
#include <assert.h>
#include <sys/types.h>
#include "libnw.h"
#include "mple_v2.h"
#include "common.h"
#include "util.h"
/* functions for dealing with common file structures */
 
- mple_v2.h(updated Tue Oct  2 20:47:42 2012)
 
- #ifndef MPLE_V2_H
#define MPLE_V2_H
#include <glib.h>
#include <libnw.h>
#include <libnw_internals.h>
 
- nw-cp.c(updated Tue Oct  2 20:47:42 2012)
 
- #include <stdio.h>
#include <stdlib.h>
#include <glib.h>
#include <libnw.h>
#include <string.h>
#include <errno.h>
#include <iconv.h>
/*
 * convert a UTF16BE string to UTF8 and print it. Because iconv messes
 * with the i/o pointers, we need to keep two copies of each.
 */
 
- nw-dump.c(updated Tue Apr 10 22:46:27 2007)
 
- /*
 * Dump the contents of the player. Takes a single parameter: the
 * mount-point of the player.
 */
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <ctype.h>
#include <errno.h>
#include <glib.h>
#include <iconv.h>
#include <time.h>
#include <libnw.h>
 
- nw-load.c(updated Wed Dec 12 23:38:11 2007)
 
- /* load files onto the Network Walkman */
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
#include <glib.h>
#include <unistd.h>
#include "libnw.h"
 
- nw-rm.c(updated Thu Apr  5 21:38:00 2007)
 
- /* load files onto the Network Walkman */
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
#include <glib.h>
#include <libnw.h>
 
- util.c(updated Mon May  7 20:18:35 2007)
 
- /*
 * utility functions
 */
#include <id3tag.h>
#include "util.h"
#include "config.h"
/*
 * effectively mkdir -p
 * create directory PATH, including any required parent directories,
 * using MODE as the file mode for each newly created directory.
 */
 
- util.h(updated Sat Apr 14 14:20:31 2007)
 
- #ifndef UTIL_H
#define UTIL_H
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
#include <time.h>
#include <glib.h>
 
  
    | Waider | 
    Ugh. Did I write that? |