FINDING YOUR WAY AROUND THE UNISON SOURCES
------------------------------------------

Although parts of it are somewhat intricate, Unison is not a very large
program.  If you want to get familiar with the code, the best place to
start is probably with the textual user interface module, uitext.ml.  The
'start' function at the bottom is a simple driver for all the rest of the
major modules in the program.

After that, check out main.ml to see how things get set up.  Again,
the bottom is the most interesting part.

Next, look at the interface files in this order:
      globals.mli      common low-level datatype definitions
      common.mli       common high-level datatype definitions
      update.mli       update detection
      recon.mli        reconciliation of updates (i.e. deciding what to do)
      transport.mli    propagation of changes (also files.mi)
      
From here, you probably know your way around enough to decide where to
look next.  Here's a summary of the most interesting modules:
     pred          implements "predicates" (e.g. ignore) based on regexps
     prefs         command-line and preference file parsing
     main          the top-level program
     os            low-level filesystem operations
     trace         tracing messages
     uicommon      stuff common to the two UIs
     uitext        the textual UI
     uigtk         the graphical UI (Gtk version)

The files linktext.ml and linkgtk.ml contain linking commands for
assembling unision with either a textual or a graphical user interface.
(The Main module, which takes the UI as a paramter, is the only part of
the program that is functorized.)

The module Remote handles RPC communication between clients and remote
servers.  It's pretty tricky, but the rest of the system doesn't need
to know much about how it works.

