
SLIP uses a SLIP_END character to denote the packet boundaries. To that end 
this character must not occur in the data stream. Thus it must be escaped, 
by using an escape character which again must never occur in the data stream. 
Thus any SLIP_END in the data stream is encoded by the two byte sequence 
SLIP_ESC SLIP_DATEND, and any SLIP_ESC is encoded as SLIP_ESC SLIP_DATESC.
This is all there is about SLIP. Read the SLIP.RFC for more details (are 
there any ?).

For MidiNet a slightly modified version is required. A MidiNet address must 
be transmitted, and I suggest the use of a initial sync character MSLIP_START.
As all these control characters have codes above 128, I suggest to limit the 
MidiNet address to the range 0 ... 127, which gives a maximum of 128 machines
in the MidiNet ring. I guess more aren't sensible anyway as latency times will
exceed any tolerable time interval.

Thus the format of a MidiNet frame looks like the following sequence :

   MSLIP_START          (one byte)
   MidiNet address      (one byte)
   encoded IP datagram  (many bytes, none equaling MSLIP_START or MSLIP_END)
   MSLIP_END            (one byte)

The IP datagram is encoded like explained above : Any byte that equals 
MSLIP_START is encoded as MSLIP_ESC MSLIP_DATSTART, any byte that equals 
MSLIP_END is encoded as MSLIP_ESC MSLIP_DATEND, and any byte that equals 
MSLIP_ESC is encoded as MSLIP_ESC MSLIP_DATESC. This allows for very easy 
encoding / decoding code (see the sample code for real SLIP encoding).

For the actual values of the codes see the MIDI.H
