Interesting things about POSER for UNIX

Requirements
------------

POSER for UNIX is being developed and (very lightly) tested on
x86-Linux, running RedHat Linux 6.0, kernel 2.2.5, glibc-devel 2.1.1-6
using XFree86 3.3.3.1-49 running a 16 bit display.

We use pthreads, so you need GNU glibc2 (aka Linux libc6) C library and
a 2.x kernel on a Linux system.  Other operating systems need to support
true threads.

IMPORTANT!!!

The source makes heavy use of C++ templates, and some exceptions.  On
Linux, you must have egcs-1.1.1 or better to compile it.  egcs-1.1 or any
gcc WILL NOT WORK.  RedHat Linux 6.0 comes with egcs 1.1.2, so you
should be OK there.  If you are running RedHat Linux 5.2, you will need
to download the latest from <http://egcs.cygnus.com> and build it.  For
other OS'es, either use egcs, or be sure your compiler supports these
C++ features.

	(Note that egcs needs to be built with the HANDLE_SYSV_PRAGMA option
	 turned on in order to have the support to pack structures correctly.
	 The Linux version of egcs has this turned on, but other variants --
	 such as the compiler that comes with FreeBSD -- may not.)

STOP NOW AND RE-READ THE LAST TWO PARAGRAPHS.

We use the FLTK X toolkit.  I'm not going to get into an X GUI Toolkit
religious war, so don't ask why not some other toolkit.  You are
encouraged to add support for other toolkits, like Qt or GTK+ or even
Xt.  I have tried to keep all of the FLTK code in the fltk_*.cpp files.
If you add support for another toolkit, please follow that pattern.
Don't pollute the UNIX-generic code with toolkit specific code.  FLTK is
available from <http://www.fltk.org>, is a quick download, and is easy
to build on a variety of OS'es.  We've tested with the binary install
RPMs for 1.0.3 and 1.0.4.


Porting
-------

In theory, POSER should be quite portable to other OS'es and OS versions
-- we just haven't done it yet.  There are a few things to look out for:

o OmniThreads (the C++ thread abstraction layer we use) needs several
  defines set properly for your host OS.  See Makefile.am for these
  switches.  Eventually, this stuff should be migrated into the GNU
  autoconf system

o Various UNIXisms: for example, POSER uses the stat() system call,
  which can vary slightly from OS to OS.  Again, this should eventually
  migrate to autoconf control.  For now, just try building it.

o Most other stuff should be fine -- in particular, I don't anticipate 
  any byte ordering problems -- certainly not from the SrcShared part
  of the code, as that is absolutely stock code from the Mac and
  Windows ports.

o If you want to port POSER to other flavors of UNIX, please please
  try hard to limit your tweaking to the SrcUnix and BuildUnix
  directories.  You shouldn't have to change anything in SrcShared.


Status
------

What works:

o Core emulation of all current Palm devices & ROMs (in theory --
  we've spot checked about 5 or so combinations )
o Gremlins
o Loading PRC's / PDB's, etc
o Preferences
o Loading / Saving RAM images
o Skins (!)

To be added:

o Serial support
o Debugging interface
o Easy screenshots
o Actual use of the autoconf system
o ROM Transfer
o Progress indicator window (when loading PRCs, etc.)
o Gremlin control window
o Auto startup sequence (restarting or reloading from where you last
  left off)
o Support for Autoload, et al., directories

To be fixed:

o Screen drawing is too slow
o Some crashes on save/load RAM
o Profiling should work, but hasn't been tested
o There are lots of embedded English strings which should be moved to
  some sort of resource file (like the ResStrings.cpp)
o NetLib redirection has only been very lightly tested.
o Power button doesn't work (backlight is OK, but on/off is broken)
o Not all menu items are enabled/disabled correctly.


How You Can Help
----------------

We're most interested in getting help in these areas:

o Testing, of course.  If you can fix a bug and submit a patch, that's
  great.  Otherwise, please characterize the bug as best you can and
  let us know.

o Porting and GNU autoconf usage.  Autoconf is not really used right
  now.  If someone is already familiar with this system, support would
  be great.  If you want to port POSER to another UNIX flavor, please
  try to use the autoconf system.  See
  <http://www.fsf.org/manual/manual.html>

o Serial support - perhaps back-ported from XCopilot

o Better screen drawing code -- if you're an X-expert, please feel
  free to improve the code that puts the bits on the screen.

o Skins - draw skins for other devices... See SrcUnix/skins/* for
  examples.


External Credits
----------------

The OmniThread C++ thread library is from the omniORB2 program.  It is
Copyright (C) 1994,1995,1996,1997 Olivetti & Oracle Research Laboratory,
and is published under the GNU Library GPL (LGPL).  See
<http://www.uk.research.att.com/omniORB/omniORB.html> for information on
the OmniThreads library and its license.

Also, see the "About" box.  If others need to be credited, please let us
know.
