aft.c: Fix com_add().
[paraslash.git] / README
diff --git a/README b/README
index 9b512c6..b311307 100644 (file)
--- a/README
+++ b/README
-Paraslash README
-================
+README
+======
+
+----
 Paraslash is an acronym for
 
 Paraslash is an acronym for
 
-       Play, archive, rate and stream large audio sets happily
+_Play, archive, rate and stream large audio sets happily_
 
 It contains the following programs:
 
 
 It contains the following programs:
 
-- para_server (obligatory):
-
-       This server listens on a tcp port and accepts commands such as
-       play, stop, pause, next from authenticated clients.
+-----------------------
+para_server (obligatory)
+-----------------------
 
 
-       For audio streaming, at least one of the three supported senders
-       of para_server  must be activated:
+para_server streams binary audio data (mp3/oggvorbis/m4a files)
+over local and/or remote networks. It listens on a tcp port and
+accepts commands such as play, stop, pause, next from authenticated
+clients. However, there are many more commands.
 
 
-       The http sender is recommended for public streams that can
-       be played by any player like mpg123, xmms, winamp...
+It supports three builtin network streaming methods (senders): http, dccp,
+or rtp.
 
 
-       The dccp sender is experimental and requires kernel support
-       for the rather new datagram congestion control protocol.
+       * The http sender is recommended for public streams that can be played
+         by any player like mpg123, xmms, itunes, winamp...
 
 
-       The ortp sender is recommended for LAN streaming and for
-       private streams that require authentication.
+       * The dccp sender is experimental and requires kernel support for the
+         rather new datagram congestion control protocol.
 
 
-       It is possible to activate more than one sender simultaneously.
-       All senders have the same set of commands that allow to
-       control the access permissions of the stream.
+       * The ortp sender is recommended for multicast LAN streaming
 
 
-       para_server needs an "audio file selector" to work, mainly
-       to determine which song to stream next. There are three
-       selectors available: random, playlist and mysql. The former
-       chooses audio files randomly and  playlist can handle, well,
-       playlists. Both are always supported.
+It is possible to activate more than one sender simultaneously.
 
 
-       The optional mysql selector connects to a mysql server which
-       holds information on your audio files. It has several unusual
-       features, see README.mysql for details.
+para_server needs an audio file selector to work, mainly to determine
+which audio file to stream next. The following three selectors are
+built in:
 
 
-- para_client (obligatory):
+       * The random selector chooses audio files out of a given directory
+         by random
 
 
-       The client program to connect to para_server.
+       * The playlist selector chooses files from a specified playlist
 
 
-- para_recv (optional)
+       * The (optional) mysql selector is more involved.  It connects
+         to a mysql server which holds information on your audio files
+         and maintains statistics on the available audio files. Audio
+         file selection works by sending a user-defined sql-query
+         to the mysql server. This allows rather sophisticated
+         configurations and is explained in detail in README.mysql.
 
 
-       A command line http/dccp/rtp stream grabber.
+It is possible to switch between all supported selectors at any time.
 
 
-- para_filter (optional)
+Despite of all these features, paraslash is lightweight. The
+stripped binary of para_server with all its features compiled in
+(mysql/random/playlist selector, mp3/ogg/aac support, http/dccp/ortp
+support) is about 120K on i386 under Linux. para_audiod (see below)
+is even smaller.
 
 
-       A filter program that converts from stdin and writes to
-       stdout. This one is independent from the rest of paraslash,
-       so it might be useful also for different purposes.
+------------------------
+para_client (obligatory)
+------------------------
 
 
-       para_filter combines an mp3 decoder an oggvorbis decoder
-       and a volume normalzer. New filters can be added easily due
-       to the modular design. If more than one filter is specified,
-       the given filters are 'piped' together in-memory, i.e. without
-       calling any of the read(2)/write(2)/select(2) etc. functions.
+The client program to connect to para_server.  paraslash commands
+are sent to para_server and the response is dumped to stdout. This
+can be used by any scripting language to produce user interfaces with
+little programming effort.
 
 
-- para_write (obligatory)
+All connections between para_server and para_client are encrypted by
+default.  For each user of paraslash you must create a public/secret
+key pair for authentication. The (authenticated) connection is crypted
+with a symmetric rc4 session key.
 
 
-       A modular audio stream writer. It supports a simple file
-       writer output plugin and an optional wav/raw player for alsa.
-       Debian package: libasound2-dev
+--------------------
+para_recv (optional)
+--------------------
 
 
-- para_audiod (optional, but recommended):
+A command line http/dccp/rtp stream grabber. The http mode of this tool
+can be used to receive date from any http streaming source.
 
 
-       The local daemon that collects information from para_server. It
-       starts an appropriate receiver, filter and player as soon
-       as para_server announces the availability (and the type) of
-       an audio stream. para_audiod listens on a local socket and
-       sends status information about para_server and para_audiod
-       to local clients on request.
+----------------------
+para_filter (optional)
+----------------------
 
 
-- para_audioc (optional, but recommended)
+A filter program that converts from stdin and writes to stdout. It
+is completely independent from the rest of paraslash, so it might be
+useful also for different purposes.
 
 
-       The client program which talks with para_audiod. Used to
-       control para_audiod, to receive status info, or to grab the
-       stream at any point in the filter chain.
+para_filter combines several decoders (mp3, oggvorbis, aac) and a
+volume normalzer. New filters can be added easily due to the modular
+design. If more than one filter is specified, the given filters
+are 'piped' together in-memory, i.e. without calling any of the
+read(2)/write(2)/select(2) etc. functions.
 
 
-       para_audioc (hence para_audiod) is needed by para_gui,
-       para_sdl_gui and para_krell, see below.
+-----------------------
+para_write (obligatory)
+-----------------------
 
 
-- para_gui (optional):
+A modular audio stream writer. It supports a simple file writer
+output plugin and optional wav/raw players for alsa (linux-only,
+Debian package: libasound2-dev) and Mac OS. para_write can also be
+used as a stand-alone wav or raw audio player.
 
 
-       Themable ncurses-based gui. It calls para_audioc and presents
-       the obtained information in an ncurses window. para_gui
-       provides key-bindings for the most common commands and new
-       key-bindings can be added easily.
+---------------------------------------
+para_audiod (optional, but recommended)
+---------------------------------------
 
 
-- para_sdl_gui (optional):
+The local daemon that collects information from para_server.
 
 
-       SDL-based gui. Similar to para_gui but presents its output
-       in an X window (fullscreen mode is also available) and can
-       display jpg images on a per song basis. para_sdl_gui provides
-       an input prompt to enter arbitrary commands. However, it
-       can also be used non-interactively (e.g. as a screen saver)
-       via the -i switch.
+It runs on the client side and connects to para_server. The audio stream is
+read from the network and sent through any of paraslash's filters (decoder,
+volume normalizer). The resulting stream is written to an output plugin
+(writer), e.g. the alsa writer on linux systems. It is possible to capture the
+stream at any position in the filter chain.
 
 
-- para_krell (optional, only useful in conjunction with the mysql selector):
+para_audiod starts an appropriate receiver, filter and player as soon as
+para_server announces the availability (and the type) of an audio stream.
+Moreover, it listens on a local socket and sends status information about
+para_server and para_audiod to local clients on request.
 
 
-       A plugin for gkrellm which shows small pictures of the
-       current song. It allows you to launch 27 different commands
-       by clicking in different areas of its picture (9 small squares
-       x 3 mouse buttons).
+--------------------------------------
+para_audioc (optional, but recommended)
+--------------------------------------
 
 
-- para_fade (optional):
+The client program which talks with para_audiod. Used to control
+para_audiod, to receive status info, or to grab the stream at any
+point in the filter chain.
 
 
-       A (Linux-only) alarm clock and volume-fader.
+para_audioc (hence para_audiod) is needed by para_gui, para_sdl_gui
+and para_krell, see below.
 
 
-- para_dbadm (optional, only useful in conjunction with the mysql selector):
+-------------------
+para_gui (optional)
+-------------------
 
 
-       Very simple curses-based frontend which uses libmenu. Useful
-       for quickly changing the attributes of the current song
-       (e.g. from para_gui as an external command).
+Themable ncurses-based gui. It calls para_audioc and presents
+the obtained information in an ncurses window. para_gui provides
+key-bindings for the most common commands and new key-bindings can
+be added easily.
+
+-----------------------
+para_sdl_gui (optional)
+-----------------------
+
+SDL-based gui. Similar to para_gui but presents its output in an X
+window (fullscreen mode is also available) and can display jpg images
+on a per song basis. para_sdl_gui provides an input prompt to enter
+arbitrary commands. However, it can also be used non-interactively
+(e.g. as a screen saver) via the -i switch.
 
 
-- para_slider (optional, only useful in conjunction with the mysql selector):
+-------------------------------------------------------------------------
+para_krell (optional, only useful in conjunction with the mysql selector)
+-------------------------------------------------------------------------
+
+A plugin for gkrellm which shows small pictures of the current song. It
+allows you to launch 27 different commands by clicking in different
+areas of its picture (9 small squares x 3 mouse buttons).
 
 
-       A small X application which shows a scrollbar for each
-       attribute defined in the mysql database. It creates a stream
-       definition from the values of the scrollbars. This allows
-       to smoothly change the mood of the given stream without any
-       file editing.
+--------------------
+para_fade (optional)
+--------------------
 
 
-- bash_completion (optional):
+A (Linux-only) alarm clock and volume-fader.
+
+-------------------------------------------------------------------------
+para_dbadm (optional, only useful in conjunction with the mysql selector)
+-------------------------------------------------------------------------
 
 
-       A small bash script for inclusion in ~/.bashrc. It gives you
-       command line completion for some paraslash commands.
+Very simple curses-based frontend which uses libmenu. Useful for
+quickly changing the attributes of the current song (e.g. from para_gui
+as an external command).
 
 
-REQUIREMENTS:
-~~~~~~~~~~~~~
-In any case you need
+--------------------------------------------------------------------------
+para_slider (optional, only useful in conjunction with the mysql selector)
+--------------------------------------------------------------------------
 
 
-       - gcc, the gnu compiler collection (shipped with distro): gcc-3
-       or newer is prefered, but gcc-2.95 is still supported. Note
-       that gcc-2.95 may spit out many warnings like unused function
-       parameters and missing initializers. These are all harmless
-       and may be ignored.
+A small X application which shows a scrollbar for each attribute
+defined in the mysql database. It creates a stream definition from
+the values of the scrollbars. This allows to smoothly change the mood
+of the given stream without any file editing.
+
+--------------------------
+bash_completion (optional)
+--------------------------
+
+A small bash script for inclusion in ~/.bashrc. It gives you command
+line completion for some paraslash commands.
 
 
-       - openssl (needed by server, client): usually shipped with
-       distro, but you might have to install the "development"
-       package as well
+------------
+Requirements
+------------
 
 
-               http://www.openssl.org/
+In any case you need
 
 
+       - gcc, the gnu compiler collection (shipped with distro): gcc-3.3
+         or newer is required.
+       - openssl (needed by server, client): usually shipped with
+         distro, but you might have to install the "development package"
+         (called libssl-dev on debian systems) as well:
+         http://www.openssl.org/
        - software mixing, e.g. ALSA and the direct mixing plugin (dmix)
 
 If you want to use the mysql-based audio file selector, you also need
        - software mixing, e.g. ALSA and the direct mixing plugin (dmix)
 
 If you want to use the mysql-based audio file selector, you also need
@@ -154,72 +206,45 @@ If you want to use the mysql-based audio file selector, you also need
 These are usually shipped with the distro but probably not installed
 by default.
 
 These are usually shipped with the distro but probably not installed
 by default.
 
-The mp3 decoder of para_filter is based on libmad:
-
-               http://www.underbit.com/products/mad/
-
-If you prefer to use the libmad package provided by your distributor,
-make sure to install the corresponding development package as well.
-
-If you want to stream ogg vorbis files you'll need:
-
-       - libogg, libvorbis, libvorbisfile, and a command line ogg vorbis
-               decoder, e.g. para_filter or ogg123.
-
-               http://www.xiph.org/downloads/
+The mp3 decoder of para_filter is based on libmad: If you prefer to
+use the libmad package provided by your distributor, make sure to
+install the corresponding development package as well.  Otherwise,
+just download libmad from http://www.underbit.com/products/mad/
 
 
-Debian packages: libogg-dev libvorbis-dev
+For ogg vorbis streams you'll need libogg, libvorbis, libvorbisfile,
+The corresponding Debian packages are called libogg-dev libvorbis-dev,
+other distributors chose similar names.  All of these are also
+available at http://www.xiph.org/downloads/
 
 
-Note that para_audiod still works even if neither mp3 nor ogg support
-was compiled in. You'll have to use the --no_default_filters option
-in this case (and e.g. "mpg123 -" as the stream write command).
-
-If you intend to use the optional ortp streamer:
-
-       - libortp
-
-               http://www.linphone.org/ortp/
+For aac files (m4a) you'll need libfaad. Get it at
+http://www.audiocoding.com/modules/wiki/?page=AAC
 
 
+If you intend to use the optional ortp streamer, you'll need libortp:
+http://www.linphone.org/ortp/
 
 For the optional SDL-based gui, the following packages must be installed:
 
 
 For the optional SDL-based gui, the following packages must be installed:
 
-       - X (usually shipped with distro)
-
-               http://www.x.org/
-
-       - libSDL (usually shipped with distro)
-
-               http://www.libsdl.org/index.php
+       - X (usually shipped with distro): http://www.x.org/
+       - libSDL (usually shipped with distro): http://www.libsdl.org/index.php
+       - SDL_image: http://www.libsdl.org/projects/SDL_image/
 
 
-       - SDL_image
-
-               http://www.libsdl.org/projects/SDL_image/
-
-For para_slider, the zero memory widget library is neccessary. Get it at
-
-               http://www710.univ-lyon1.fr/~exco/ZMW/
+For para_slider, the zero memory widget library is neccessary:
+http://www710.univ-lyon1.fr/~exco/ZMW/
 
 Finally, para_krell needs
 
 
 Finally, para_krell needs
 
-       - gtk2
-
-               http://www.gtk.org/
-
-       - gkrellm2
+       - gtk2: http://www.gtk.org/
+       - gkrellm2: http://members.dslextreme.com/users/billw/gkrellm/gkrellm.html
 
 
-               http://members.dslextreme.com/users/billw/gkrellm/gkrellm.html
+-------
+LICENSE
+-------
 
 
-LICENSE:
-~~~~~~~~
 Distribution of paraslash is covered by the GNU GPL. See file COPYING.
 
 Distribution of paraslash is covered by the GNU GPL. See file COPYING.
 
-LIMITATIONS:
-~~~~~~~~~~~~
-The mysql selector assumes that the basenames of your audio files are
-unique. If this is not the case, don't use this selector, rename your
-files, or create your own one.
+----------
+THE AUTHOR
+----------
 
 
-THE AUTHOR:
-~~~~~~~~~~~
-Author: Andre Noll <maan@systemlinux.org>
+Andre Noll <maan@systemlinux.org>
 Comments and bug reports are welcome.
 Comments and bug reports are welcome.