NOTE: it will be immediately obvious to anyone who read this that I was
   first a C++ programmer.  Sorry about that.


Updated: 18 February 2009 @ 6pm

vitunes is a collection of the following "modules" represented hierarchically
(by dependency) in the following graph:

The interaction between the modules is STRICT.  That is, each module below
uses/references functions/constants from the modules it depends on (which
appear lower than it in the graph).

                          +-----------------+
                          |     vitunes     |
                          |  input_handler  |
                          |      viui       |
                          +--------+--------+
                                   |
             +---------------------+--------------------+
             |                     |                    |
       media_library          media_player          uinterface
             |
             +--------+
             |        |
             |     playlist
             |        |
             +--------+
             |
        meta_info_db
             |
             |
         meta_info


A brief description of each modules follows.
The first 6 are simple, small abstraction layers (or at least they are
supposed to be) for handling the underlying details of what vitunes does.
The interaction 

   1) meta_info      Files: meta_info.h, meta_info.c

      This layer provides functionality for representing and extracting
      the meta information from media files.  The key structure defined
      here is the "meta_info" struct, which stores all of the meta data
      that vitunes is interested in, which is the following:
            *  Filename    - The file the work is stored in
            *  Artist      - Who composed/created the work
            *  Album       - The album the work was originally released on
            *  Title       - The title of the work
            *  Track       - If the work appears on a disk, which number it is
            *  Year        - When the work was composed
            *  Genre       - Simple category description of content
            *  PlayTime    - How long (in microseconds) the file will play for

      The key function defined is "meta_info_extract(filename)", which
      extracts any of the above meta information from the file and returns
      a pointer to a meta_info struct filled as necessary.

   2) meta_info_db   Files: meta_info_db.h, meta_info_db.c
   3) playlist       Files: playlist.h, playlist.c
   4) media_library  Files: media_library.h, media_library.c
   5) media_player   Files: media_player.h, media_player.c
   6) panals         Files: panals.h, panals.c

   7) vitunes_ui
   8) vitunes_settings
   9) vitunes_commands




media_player

   Functions to support
      play
         IF currently playing a file 

      pause/unpause
         IF currently playing a file AND not paused
         THEN
            pause it
         ELSE IF currently playing a file AND paused
            un pause it
         ELSE
            do nothing

      seek
         IF currently playing a file AND not paused
         THEN
            seek +/- 10 seconds
         ELSE
            do nothing

      stop
         IF currently playing a file
         THEN
            stop it
         ELSE
            do nothing

