Possible design of gpm2:

   gpm2-starter:
      - reads configuration
      - starts daemons
         * first gpm2-daemon
      - connects daemons
         * connects them through stdin and stdout?
            - perhaps a job of gpm2-daemon?
         * stderr is relayed to the log console
            - which can log to syslog

   gpm2-daemon:
      - main daemon
      - starts mice handlers
      - listens for ipc
      - relays input data abstracted to clients
      - does *NOT* draw a cursor or something like that
      - can be used by x.org (see below)
      - opens mice devices?
      - should be portable

   gpm2-io:
      - gets list of opened fds or of devices
      - uses poll() / select() on mice devices
      - retrieves data packets
      - forwards raw data packets to gpm2-daemon from devices
      - either
         - forwards raw data packets from gpm2-daemon to devices??
         - decodes mice packets: does protocol handling and
           forwards decoded packages to gpm2_daemon
      - has a mouse - fd_in - fd_out list
      - has *NO* root priviliges
   
   gpm2-decode:
      - forwards raw data packets from gpm2-daemon
      - forwards decoded packages to clients (like gpm2-cdisplay)

   gpm2-raw-relay:
      - reads data from gpm2-daemon
      - writes raw data to clients
      - a client needs to connect n times for n mice

   gpm2-cdisplay:
      - Console DISPLAYS: displays mouse cursor on console
      - reads input from gpm2-daemon
      - reads mouse information
      - perhaps os-specific versions

   gpm2-ccandp:
      - Console Copy AND Paste daemon
      - reads input from gpm2-daemon
      - copies selected text into own buffer
      - pastes buffer to console
      - perhaps os-specific versions

   gpm2-xorg:
      - interface between gpm2 and x.org
      - could make mouse support unecessary in x.org
      - should be portable

   gpm2-syslog:
      - connects to the gpm2-daemon logging port
      - reads messages
      - relays them to syslog
