home *** CD-ROM | disk | FTP | other *** search
-
- Technical Note : FAST SERIAL PORTS & 16550 UARTS
- Author : Michael Spalter
- Email : segcom@cix.compulink.co.uk
- Origin : United Kingdom, EC
- Last Modified : 6th June 1994
- Status : (c) 1994 Michael Spalter
-
- * PLEASE UPLOAD THIS FILE TO BULLETIN BOARD AND OTHER HOSTS *
- The filename should be FAST550.DOC or FAST550.ZIP etc.
-
- NOTE: This document may be distributed freely providing that all
- credits remain intact and that it is not modified in any way. This
- document is provided for information only and no support or warranty
- is offered by the author or publisher.
-
- NOTE : SEE THE END OF THIS DOCUMENT FOR 'UART' VENDOR DETAILS
-
-
- ---------------
- C O N T E N T S
- ---------------
-
- 0) INTRODUCTION
- 1) What is a UART ?
- 2) Why the sudden craze for high speed cards ?
- 3) Why aren't normal PC ports good enough ?
- a) Internal PC Card Modems
- 4) How would I know if I need a faster port ?
- 5) Okay, I want one ! What should I buy ?
- 6) Is there just one type of 16550 UART ?
- 7) Replacing a soldered 16450/8250 UART
- 8) Windows and buffered UARTS
- 9) Serial Port configuration
- 10) Notebook PCs
- 11) Supplier information
- 12) About 'Cix'
-
-
- INTRODUCTION
- ------------
-
- Fast serial cards have become very popular lately due to the
- proliferation of high speed (V32/V32bis) modems. Whilst the computer
- press have been keen to cover modems in general, little coverage has
- been given to serial cards (they're just not sexy enough for
- mainstream articles). This means that, whilst many people want or
- need fast serial cards, there is much confusion about them. This
- document attempts to answer the most common questions asked.
-
-
-
- 1) What is a UART ?
- ----------------
-
- Throughout this document, we will refer to something called a 'UART'
- (pronounced 'you-art'). As this is a very important component, it
- is important to understand what it is.
-
- A UART is an IC (chip!) which takes parallel data from the PC and
- outputs it to the serial port as a timed serial stream of data. It
- is the main component of the serial card; all other components are
- there to support the UART. Here is a simple functional diagram:
-
- PC's BUS Slot __________ Serial port
- 1 ------------> | |
- 1 ------------> | UART |
- 0 ------------> | |
- 1 ------------> | | ---------> 11010001
- 0 ------------> | |
- 0 ------------> | |
- 0 ------------> | |
- 1 ------------> |________|
-
- The diagram shows conversion of data from a parallel to a serial
- stream. Of course, serial ports can receive data as well as transmit
- it, so the UART also converts serial data back into parallel data.
-
-
- 2) Why the sudden craze for fast serial ports ?
- --------------------------------------------
-
- Now that high speed modems (V32, V32bis) have become very common,
- many PC serial ports are having problems running fast enough to keep
- up with the modems which can be driven at speeds of up to 57600 bps
- (bits per second). A standard '8250 UART' based serial port (or
- one using a multi i/o chip) cannot run at that speed due to the load
- placed on a typical working PC. The '16450' UART is slightly better.
-
-
- 3) Why aren't normal PC ports good enough ?
- ----------------------------------------
-
- Standard serial ports were designed to drive mice, plotters and
- modems. At the time, modems ran at speeds of up to 4800 bps, and we
- thought that was fast - anyone who has been using modems for more
- than 5 years will remember how lucky we thought we were !
-
- Problems with serial ports arise for two reasons:
-
- a) The 8250/16450 or equivalent UARTS are simply not fast enough to
- run at the high speeds required by fast modems. Whilst the
- BIOS/UART will allow you to select these speeds, they may not
- reliably work at these speeds. The chips are rated for high speed
- use, but that assumes a simple working enviroment (not a PC!).
-
- b) PC's are busy things, with lots of interrupts to service. If the
- port is running at high speed, the PC may miss interrupts
- generated by incoming data because it is 'busy doing other
- things' - this then means that the UART has nowhere to put the
- incoming byte and so it gets overwritten by the next byte
- received. This usually causes CRC errors. The faster you drive
- the port, the more CRC errors you will get. This is almost
- always a problem if you multitask with MS-Windows or Desqview, as
- the rapid task switching keeps the processor very busy. So, for
- instance, if you need to run your serial port at 38400 bps or
- higher under MS-Windows then it is very likely that you will need
- a buffered serial port.
-
- The '16550' UART gets around both of these problems:
-
- a) It is designed to run at high speed; a 16550 chip will run
- happily at 57600 bps or faster which is fast enough for even the
- fastest modems (for the moment anyway, but V.Fast modems, just
- around the corner could require speeds up to 115200 bps. A 16550
- is rated to run at this speed, but no-one has really done any
- experiments yet to prove this).
-
- b) The 16550 UART incorporates a 16 byte buffer; if the PC isn't
- ready to received the current byte then the UART can retain it in
- the buffer until the PC is ready for it. 16 bytes provides a
- comfortatble time margin to ensure that none of the received data
- is lost. Many communications packages will empty the FIFO buffer
- at every interrupt possible, rather than only taking one byte per
- interrupt. The buffer on the UART is a 'FIFO' buffer. This
- simply means that the first byte in will be the first byte out.
- The alternative to this would be a LIFO buffer, but that would be
- useless for a UART as all the data would become scrambled !
-
-
- Analogy
- -------
-
- Imagine a mail man in the US collecting mail in a street. Assume
- that each mail box can only hold ONE letter and that people raise
- their 'flag' on their mail box to indicate that they have a letter
- for collection - the flag is equivalent to a PC's 'interrupt'. The
- mail man sees the flag and runs along to collect the letter.
-
- If there is a certain level of mail being collected, then it all
- works well - the mailman has enough time to collect all mail
- (equivalent to servicing all interrupts).
-
- However, if someone puts a letter in their box and the mailman is
- too busy to collect it before that same person has another letter to
- mail, then there is a problem: As the mail box can only hold one
- letter, they would have to destroy the first letter.
-
- This is how a normal serial port works. A buffered serial port is
- simply a bigger mailbox, which can hold up to 16 'letters' at once,
- so that when the mailman comes, he can collect up to 16 letters at
- once.
-
-
- ( NOTE : The author of this document is in England, where we don't
- have mailmen who collect post from our houses - we have postmen who
- deliver post and red pillar boxes into which we deposit our post -
- the system referred to above is the one used in the US, because it
- wouldn't work with the UK system. Any non-US people unfamiliar with
- these 'flags' should refer to a 'Peanuts/Charlie Brown' cartoon
- where they seem to feature regularly.)
-
-
- 3a) Internal (PC Card) Modems
- -------------------------
-
- Some people have been confused about differences between internal
- (PC Card) and external (desktop) modems. An internal modem plugs
- into a normal expansion slot inside a PC. Instead of plugging into
- the PC's serial port, it has its own serial port on board and so
- takes its data directly from the PC BUS. BUT REMEMBER : An internal
- modem still has a UART which, just like with a normal port, can be
- an 8250, 16450 or 16550 (or circuitry which behaves like one).
-
- An interal card modem can either have a physical 40-pin UART or
- sometimes it is embedded within another controller so you may not be
- able to spot it by looking at the board. When buying a V32bis (or
- faster) internal card modem you should insist that it has either a
- true 16550 or 16550 'functionality'. You can test this using the
- '16550.EXE' program or if you have MS-Windows, the MSD program will
- tell you which type of UART the modem has. This can of course be
- used to check the UARTs of regular serial cards too.
-
- External modems do not need to have buffered UARTS within the actual
- modem - the buffered UART is only required within the PC (either on
- a serial card or a modem card) because the flow control system used
- across the PC BUS is inadequate for modems (the interrupt method) -
- once the data is in 'serial form' then flow control becomes much
- more reliable.
-
-
- 4) How would I know if I needed a faster serial card ?
- ---------------------------------------------------
-
- If you are multitasking using MS-Windows or Desqview, then you will
- almost certainly need a fast buffered serial card. Typical symptoms
- will be CRC errors or block retries reported when downloading files.
- As you will probably be using error correction, then these errors
- are unlikely to be caused by anything else.
-
- Another symptom of an inadequate serial port is that you're simply
- not getting the performance you'd expect from your modem. This could
- be caused by you not having your modem configured correctly, so in
- the first instance, check with your suppliers or colleagues/friends
- for any special setup strings particular to your modem (perhaps you
- have forgotten to enable RTS/CTS handshaking or data compression).
-
- If you have your modem set up correctly and your performance still
- isn't what it ought to be, then a faster serial card may be the
- solution. On a V32bis/V42bis modem, you should be able to achieve
- download speeds of up to 3000 cps on ASCII text, or 1500 cps on
- compressed (e.g. ZIP) files. Remember that poor phone lines can
- also affect modem performance.
-
- Even if you are not using Desqview or MS-Windows, you may still get
- the symptoms details above, especially if you are driving the modem
- at 38400 bps or faster, in which case you would be wise to invest in
- a faster serial card. Having said that, there are some people using
- high speed modems whose existing serial port may be adequate, in
- which case there is no point investing in a faster one !
-
- A fast serial card with a 16550 UART can be checked for using a
- number of commonly available utilities. If you have MS-WINDOWS 3.1
- installed, then from DOS, you can run the MSD program which you'll
- find in your C:\WINDOWS directory. Under the option labelled 'Serial
- Ports' you can view your existing ports and MSD will report the UART
- type fitted (8250, 16450 or 16550).
-
-
- 5) Okay, I want one, what should I buy ?
- -------------------------------------
-
- The important part about a fast serial card is its UART; this means
- that you may be able to simply swap the UART of your existing serial
- card, rather than having to fit a whole new card. You can only do
- this if your current serial card uses a 40 pin UART (8250, 16450 or
- equivalent). This needs to be socketed for easy removal, unless
- you're particularly experienced with a soldering iron and fancy
- desoldering the chip yourself - this is detailed in section (7).
-
- Unfortunately, most PC's nowadays seem to come with multi i/o cards
- with one multi-purpose chip which performs serial, parallel and disk
- operations; if you have a multi i/o card, it will normally be a PLCC
- package in the centre of the board ( a flat 'surface mounted' chip
- with pins on all four sides). This obviously cannot be replaced with
- a 16550. Some PC's have the i/o circuitry built into the
- motherboard; it is unlikely that you can replace the UARTs there.
-
- Thankfully, and more easily, you can simply buy a new card based
- around a 16550 UART. This can either replace or add to your existing
- serial ports and your supplier will advise you on the best type.
-
- NOTE : This document relates exclusively to buffered serial cards
- based around the 16550 and equivalent chips. There is another kind
- of high speed serial card which uses an on board processor; these
- are generally considerably more expensive and although there are
- some circumstances where they might be of use, for the vast majority
- of users, a 16550 based board should be adequate for speeds up to
- 57600 bps. A well known 'smart' serial board is the 'ESP' which is
- made by modem manufacturer 'Hayes'.
-
-
- 6) Is there just one type of 16550 UART ?
- --------------------------------------
-
- No! As with all semiconductors, many manufacturers have jumped on
- the 16550 bandwaggon. This is good inasmuch that there is a choice,
- but bad in that some manufacturers have got it wrong - some have
- FIFO buffers which don't work and some aren't recognised correctly
- by applications (this can sometimes be worked around but ideally get
- one which you know will work).
-
- The 16550 chip 'by which others are gauged' is made by National
- Semiconductor, and the original part no. was NS16550AFN. However,
- due to the increasing popularity of the chip, NS decided to change
- the name. The latest version is now the PC16550DN. There
- were earlier version of the original 16550 which didn't work
- correctly, but it is highly unlikely that any of these are still
- around (it was the NS16550N - i.e. not the 'AN' or 'AFN').
-
- Other manufacturers have now brought out their own 100% compatible
- versions of the NS UART, so you may find that your supplier stocks a
- different version, some of which work well, others don't. As long
- as he guarantees 100% compatibility it should work as well as the NS
- original. Many 'clones' are made in what's known as 'CMOS'
- versions. They are functionally identical (CMOS chips users less
- power) so they should work fine too. A CMOS UART will normally be
- called a '16C550' or similar. Being the original, the NS type is
- the most expensive 16550 UART, so you will probably save money by
- buying a clone, but take note of the above guidelines.
-
- The FIFO buffer on a 16550 chip can be enabled and disabled. By
- default it will be DISABLED. Many comms programs will automatically
- detect and enable the FIFO buffer, but if yours doesn't, there are
- several programs to enable them, which you can include in your
- AUTOEXEC.BAT file or another batch file. Ask your supplier. If you
- are running under MS-Windows then see section 8.
-
- There are several programs around to test 16550 chips, once they are
- installed so you'll soon know if your new chip/card is okay. If you
- can't get hold of one, ask around on BBS's or ask your supplier.
- MSD.EXE is supplied with Windows 3.1 and will detect/report 16550
- UARTS, but there are a couple of problems with MSD; see Section 8.
-
-
- 7) Replacing a soldered 8250 or 16450 UART
- ---------------------------------------
-
- If your existing UART is a soldered 16450 or 8250 type (40 pin DIP)
- and you are competant with a soldering iron, then you may want to
- remove the chip yourself and replace it with a 40 pin socket (into
- which you plug your new 16550). It is not too complicated - the
- most important thing is to work slowly and carefully. Here are some
- useful tips from Bob Kellock:
-
- >>>> ALWAYS OBSERVE STATIC PRECAUTIONS WHEN HANDLING CHIPS <<<<
-
- Get hold of a scrap double sided printed circuit board to practice
- on; it's no use practicing on a single sided board as they're easy !
-
- >>>>>> DO NOT ATTEMPT TO REMOVE THE CHIP WHOLE ! <<<<<<
-
- Get hold of some fine nosed wire cutters and chop off each of the
- legs of the UART as close to the body as possible (therefore leaving
- as much of the leg on the board as possible). Discard the main body.
-
- Then, remove each of the legs in turn using a soldering iron and
- tweezers. (Editors note: Bob says "real men use their fingers", but
- I'd still recommend tweezers). Don't 'wiggle' the iron about on the
- surface of the board as you will probably damage the tracks/pads by
- doing so. The time between applying the iron and pulling the leg is
- fairly critical - just keep practicing.
-
- Make sure you pull the leg out square from the board or you may
- damage the tracks/pads on the component side.
-
- You may find that it helps to tin the iron with new solder now and
- then, but don't use too much otherwise you may end up with a pubble
- of solder, which will be a read problem.
-
- Get hold of some solder wick or a solder sucker to remove the solder
- from the vias (holes in the board where the legs came from). As a
- last resort you can use stranded wire and Fluxite but it's very
- tedious. You may find that some holes just don't want to clean out
- - resolder them with fresh solder and try again.
-
- Check that the holes really are clean - they can be deceptive. Hold
- the board up to the light and check that you can see through each
- clearly. Clean off at least the component side of the board with
- PCB cleaner or meths; use it in a well ventilated room using a stiff
- brush - an old toothbrush is ideal.
-
- Carefully inspect the component side of the board - preferably with
- a magnifying glass. You can get minute traces of solder between
- pads which completely messed it up. Remove any odd bits with a
- scalpel. Check that there is plating through the holes - it is
- possible to pull it out with the leg but it's not too terrible.
-
- Insert the socket in the board with the notch in the right
- direction. This is when you may find out that one (or more!) of the
- holes isn't cleaned out properly. Do it again.
-
- Solder socket in position, clean, inspect and rectify as above. If
- you lost any of the through hole platings then solder those pins on
- the top side of the board too.
-
- The board is now ready to take your new 16550 chip. Remember to take
- static precautions (earth yourself and don't rub your slippers on
- the nylon carpet). Ensure that all pins on the 16550 are straight;
- if they are not, carefully press the chip on a table at a right
- angle to straighten them. Pins tend of break if they are bent too
- much, so be careful.
-
- Place one side of the chip just into the socket; do not push it in
- yet. Then, place the other side's pins just into the socket. Check
- that all pins are in the right holes and that they are all straight.
- Slowly press the chip into the socket using even pressure, making
- sure no pins snag on their way in. Once it's in. Give it a firm push
- against the table to make sure everything is home tightly. Check
- that the chip is inserted properly, the right way round and that
- none of the pins have curled up under the body instead of being in
- its correct hole.
-
-
- 8) MS-WINDOWS and high speed UARTS
- -------------------------------
-
- Microsoft Windows is a prime cause of lost interrupts. This is
- mostly due to the fact that MS-Windows is processor intensive; as
- such, with high speed modems, it is even more likely that data will
- come in quicker than the PC can service the interrupts. This is
- made worse by the fact the Windows Multi-tasks.
-
- A properly configured 16550 UART should solve these problems;
- MS-Windows is 16550 aware, though you may need to make a couple of
- modification to your SYSTEM.INI file to enable the 16550, otherwise
- it will run in '16450 compatible mode' and you'll get no benefit.
-
- Once you have installed your 16550 UART or 16550 equipped serial
- card, the Microsoft MSD program can be used to check it. MSD is a
- DOS program which you'll find in your WINDOWS directory; it must be
- run from the DOS prompt, not from within Windows itself. Remember
- that if you installed your serial card to use a non-standard IRQ,
- you set it up with the 'Ports' option within Windows Control Panel.
-
- If you look at your serial ports, it will show the type of UART each
- is fitted with. If you have selected non-standard IRQs or you have a
- COM4 but no COM3, MSD gets confused, so if it doesn't display the
- expected results, don't panic !
-
- Next, you'll need to edit your SYSTEM.INI file. You can do this from
- DOS using any suitable text editor or from within Windows Program
- Manager, select 'FILE' then 'RUN' and enter SYSTEM.INI as the
- filename. Windows' text editor will load your SYSTEM.INI file.
-
- Find the section within SYSTEM.INI labelled '[386Enhanced]' and
- check for a line which reads:
-
- COMxFIFO=1
-
- where 'n' will be the COM port with your 16550 fitted; chances are
- that line won't exist, in which case you should add it. If there are
- other lines beggining with COMx... then it makes sense to add the
- new line near them. For instance, if your 16550 UART was fitted to
- COM3, you would add the line:
-
- COM3FIFO=1
-
- There are no other options other than '1' here as it is a boolean
- setting (either False=0 or True=1).
-
-
- When using Windows, there is no need to enable the 16550 UART
- buffers manually with any programs such as 16550.EXE. In fact, with
- Windows 3.1, if you enable the
- UART's FIFO buffers (using a 16550.EXE or whatever) before running
- Windows, then it won't recognise the COM port any more.
-
- A company call CyberSoft, in Australia have produced a replacement
- comms driver for MS-Windows 3.1 which claims to improve Windows
- comms performance and make best use of the 16550. The driver may be
- used for free in non-commercial enviroments. Contact Cybersoft on
- email at : 100033.1723@compuserve.com. Also, Delrina, the company
- who make the 'Winfax' software have their own replacement comms
- driver called WFXDRV.DRV (or similar) which also claims to improved
- Windows comms performance. WFXDRV is available from many bulletin
- boards as well as Cix and Compuserve.
-
-
- DOS Applications Under Windows
- ------------------------------
-
- A slight bug with Windows 3.1 is that if you enable your 16550's
- FIFO buffers before running Windows, then the port will be
- unavailable, so make sure you don't enable the FIFOs before
- you run Windows ! Any DOS comms program should be able to take
- advantage of the 16550, but it depends on the program so results
- may vary widely from user to user.
-
- A company called Cherry Hill Software have produced a replacement
- comm driver for Windows 3.1 called CHCOMB.386 which will enable
- DOS programs running under windows to recognise 16550's properly.
- It may not be necessary, so try your comms with the regular
- Windows driver first. It is added to your WIN.INI file. It is
- almost freeware - the author expects either a US$10 donation or a
- tacky postcard for his collection. They can reached by email at
- 76050.2204@compuserve.com.
-
- The following lines should also be amended in SYSTEM.INI:
-
- device=*combuff (delete this line - its in your WIN.INI)
- device=chcomb.386
-
- [386Enh]
- COM3FIFO=1
- COM3Buffer=10000
- COMBoostTime=4 (normally 2)
- COMIrqSharing=true
-
- Experimentation may be required and doubtless there are people
- more experienced than me on Windows and 16550's so if you have
- something to add, please email me and I'll amend this document
- appropriately. Also, practical experience from other users may
- help your a lot, so always ask around to see if someone had (and
- has) solved your problem already.
-
-
- 9) Serial Port Configuration
- -------------------------
-
- This section is relevant to all serial cards, whether they are
- 16550 based or the normal 8250/16450 types.
-
- There are only two IRQ's officially allocated for serial ports,
- namely IRQs 3 and 4. In theory, this means that you can therefore
- only have a maximum of two serial ports. You can have more (i.e.
- COM3 and COM4) by sharing the interrupts (although different
- addresses), but this causes problems for modems as you cannot use
- the ports simultaneously when sharing interrupts.
-
- Some serial cards allow you to select non-standard IRQ's, typically
- any of 2,3,4,5,7 or 9. You can only use non-standard IRQs if your
- software allows you to and also if that IRQ setting doesn't clash
- with another i/o card already installed. IRQs 5 and 7 are allocated
- for the parallel ports, but often not used, so they may be
- available. Higher IRQ's are only available on 16-bit cards as the
- IRQ hardware lines are on the second part of the BUS.
-
- Typically, if you are adding a third serial port to your PC, and you
- can't use non-standard IRQs, set your new card as COM3/IRQ4 and
- don't use your existing COM1 as it shares interrupts - as long as
- there's nothing connected to a port, it shouldn't generate
- interrupts. If you need to use your existing COM1, you can put your
- new card in as COM4/IRQ3, but then you can't use your COM2 as it
- shares its interrupt with COM4. Always experiment though; an
- interrupt clash will at worst prevent your machine booting
- (temporarily!). If all else fails, disable your existing COM1/2
- (there should be some jumpers on the i/o card) and put your new card
- in as COM1/2.
-
- Windows Users : If you fit your third port as COM4, the MSD program
- will report it as COM3 due to the way DOS stores the addresses for
- COM ports. When MSD reports 'COM3' what it actually means is 'your
- third serial port'. Other programs may report similarly.
-
-
- 10) Notebook PCs
- ----------------
-
- Users of Notebook PCs often want to upgrade their serial ports to
- buffers types. The most common answer is that you can't; to save
- space, notebooks use multi-function chips, so the chip which does
- the serial i/o will have many other function too and so isn't
- replaceable.
-
- Worse still, notebooks can't take normal PC expansion cards so you
- can add additional ports, unless your notebook has a docking station
- option which can take cards. Also, many Notebook PCs have dedicated
- modems which fit into propritary slots; again the UARTs on these
- modems cannot be changed, though any sensible V32bis modem designer
- would have included 16550 functionalty in his modem design.
-
- The only solution to a notebook PC without buffered serial ports is
- to fit a PCMCIA modem if you have a PCMCIA slot. As well as being
- very neat and compact, many V32bis PCMCIA modems include 16550
- functionality - to check the Microsoft MSD utility or any other
- 16550 checker should confirm the presence of it.
-
-
- 11) Supplier information
- --------------------
-
- SEG Communications, based in London, England, stock a range of 16550
- UARTs and 16550 based serial cards at very competitive prices. SEG
- also sell a complete range of modems from all leading manufacturers
- at highly competive prices. SEG specialises in modems, so you can be
- assured of excellent service.
-
- For full details and pricing information contact:
-
- SEG Communications
- 137 Hale Lane
- Edgware
- Middlesex HA8 9QP
- England, U.K.
- Tel: (081) 959 3377
- Fax: (081) 959 2137
- Email: segcom@cix.compulink.co.uk
-
- From outside the UK, Fax : + 44 81 959 2137
-
-
- Popular Model : SC5500 Serial Card; Single port card.
- COM 1,2,3,4 Selectable IRQ 3,4,5,7,9
-
- Credit Card orders are welcome. Trade enquiries welcome.
-
-
- 12) About Cix
- -------------
-
- Why are we mentioning Cix here ? Because it is my 'Home' system (the
- one I use all day) and I am happy to recommend it to everyone; they
- are not paying for this mention, it's a genuine endorsement :-)
-
- Cix (pronounced 'Kicks') is a conferencing based host system based
- in London, England. It is similar is style to Compuserve although
- considerably less expensive than other similar services and as it's
- UK based it has a much more friendly 'local' feel than Compuserve.
-
- Services offered include Email, Internet access, local conferencing,
- Usenet conferencing, Fax sending, gigabytes of file downloads as
- well as the collective wealth of the 1000's of members in 1000's of
- conferences, each one dedicated to a particular subject.
-
- Details of Cix are available from them on (081) 390 8446 (voice) or
- their data number on (081) 399 5252. Data speeds from 300 to
- 28800bps are supported with MNP5/V42bis. You can also telnet into
- Cix at their address : Telnet cix.compuserve.co.uk
-
-
- ------------------ End of Document ----------------
-
-
- (c) 1993/4 Michael Spalter, SEG Communications
-
- This document may only be distributed un-modified. Reproduction as
- part of any commercial transaction or distribution via any
- non-electronic medium is prohibited in part of full without written
- permission from the author. This file may not be compiled or
- included within any other document or help system without prior
- written permission from the author.
-
- ----- end of file -----
-