INTRODUCTION
------------

written in c
based on unix datagrams
intra and inter process communication is the same
asynchronous (interrrupt)
 
MLO - low level chapters 6 and 7
MHI - high level, not yet made?

the user must take care of different byte order etc on different
  machines (just use characters and you should be ok)

messages sent to/from mailboxes
may be many mailboxes on one process

MAC mailbox address code - which one on a process
IAC internat address code - client process
full address - MAC + IAC

different levels of sending
  no agnowledgement (unreliable delivery)
  agnowledgement when recieved (put in pending queue)
  agnowledgement when read
  wait for agnowledgement
  dont wait but request agnowledgement
  wait for certain ammount of time for agnowledgement
 
mwho - directory of mailboxes
mdb - debug of client process

include header files in your program
add -lmmps on compile command line 
files stored in mmps.a library - linked automatically

system mailbox - MAC of zero (can always find out this address)
                 one for each process

------------------------------------------------------------------------
MLO
---

construst - make address from MAC, port No and hoast name
          - make mailbox from address
destruct - get MAC, port No and hoast name from address
         - destroy mailbox from address

MLO_OK   1 - message sent
MLO_FAIL 0 - message queued for sending
MLO_BAN -1 - error

NO_ACK
SY_ACK - delivery ag
US_ACK - read ag

FR_DATA - auto free message space allocated by malloc
SYNCH - wait for ag
NO_NDS - no wait for ag
SY_NDS - wait, can specify delay routine(nds pointer)


------------------------------------------------------------------------
INFORMATION
-----------
~john/src/mmps/doc/mmps.dvi
   mmps manual

~john/src/mmps/ndoc/mmps.dvi
   updated introduction only to mmps

~john/src/mmps/mlo/mlo.c
~john/src/mmps/mlo/new/mlo.c
   describes what mlo functions do
   explains a bit about mmps

mlo_string_addr(address*,char*) /* convert string to address */
mlo_addr_string(char*,address*) /* convert address to string */

extern int  mlo_init();         /* Initialise low level data structures */
extern int  mlo_start();        /* Activate interrupt catching */
extern int  mlo_send();         /* Send a message (does not block) */
extern int  mlo_recv();         /* Receive a message (does not block) */
extern int  mlo_intr();         /* Interrupt driver for message receipt */
extern void mlo_wait();         /* Wait for something to happen */
extern int  mlo_selrcv();       /* Wait for messages to arrive on mailboxes */
extern void mlo_lock();         /* Lock out interrupts */
extern void mlo_unlock();       /* Unlock the driver (permit interrupts) */
extern int  mlo_user();         /* Obtain user information */
extern int  mlo_inet();         /* Obtain internet address information */
extern int  mlo_mbox();         /* Allocate and initialise a mailbo structure */
extern int  mlo_mclr();         /* Clear and free a mailbox structure */

~john/src/mmps/mlo/mlo.h
~john/src/mmps/mlo/new/mlo.h
   explains mlo error codes
   defines structure types
#define MLO_NOERR       0       /* No error occurred */
#define MLO_INUSE       2       /* Desired port number or MAC was in use */
#define MLO_SRCH        3       /* Suitable port number or MAC could not be found */
#define MLO_SEQTAB      4       /* Couldn't allocate sequences table */
#define MLO_MALLOC      5       /* Malloc returned zero during send processing */
#define MLO_SIGVEC      6       /* Could not set up signal catch */
#define MLO_PGRP        7       /* Could not set receiver socket process group */
#define MLO_FCNTL       8       /* Could not set the socket mode flags */
#define MLO_NOSYNC      9       /* Synchronous operation not allowed */
#define MLO_DETACH      10      /* Write on detached sequence structure */
#define MLO_NOMBOX      11      /* Attempt to convert MAC of non-existent mailbox */
#define MLO_SOCKET      12      /* Socket operation failed */
#define MLO_TIMEOUT     13      /* Message communication timeout occurred */
#define MLO_ALREADY     14      /* Operation already in progress */
#define MLO_REMOTE      15      /* Originate or receive using remote mbox */

~john/src/mmps/mlo/
   various test files for mlo

~john/src/isy/cars/src/common/comms.c
   example pf mmps in use

~john/src/isy/cars/src/utility
   very simple of rcve_pkt use

--------------------------------------------------------
 mlo_init(port);
 mlo_start();
 mlo_cx_address(&addr, mac, port, host);
 mlo_show_address(stdout, &addr);
