{INCLUDE _HDR.HTM}

Low Level Implementation Information
Windows NT Hosted Systems

Numerous MultuValue systems are hosted on Windows NT.  Some of these hosts also run on Windows 95/98, although not all.  PicLan-IP is currently shipping with the following Win32 MultiValue platforms:
  • D3
  • mvBase
  • Unidata
  • Universe
Both D3 and mvBase will operate in a Windows 95/98 environment, although there are some limitations.  Unidata and Universe are both Windows NT only platforms and do not operate in a Windows 95/98 environment.

With hosted systems, PicLan-IP does not implement the low-level TCP/IP protocol stack itself.  Instead, PicLan-IP uses the existing Win32 TCP/IP interface, Winsock.  This is accomplished with a low-level 32-bit interface engine written in 'C' and implemented as a Windows DLL.  This interface engine is responsible for low-level network functions such as managing connection sockets, dynamically buffering network connections, queueing events, handling timed functions, etc.  All of these functions are low-level and are not specific to any high-level protocol.  High-level functions like implementing HTTP are handled in BASIC routines that call the low-level engine for data.

The low-level engine is called from BASIC through a generic "proceedure call" interface.  There are actually two variants of this interface depending on the architechure of the underlying MultiValue implementation.  D3 and mvBase are implemented where the entire Pick environment is running within a single Win32 process.  Because there is only one proces involved, the PicLan-IP support DLL can actually be loaded into the same Win32 process workspace.  This allows BASIC applications to directly cal the support DLL "in-process" and not have to copy data to transfer areas or use other RPC mechanisms.

With Unidata and Universe, each MultiValue ports is actually implemented as a seperate Win32 process.  This means that PicLan-IP cannot use a single shared DLL within a single process space.  In this case, the PicLan-IP support DLL is actually loaded by a helper or daemon process and BASIC applications call the routine through a heavily tuned RPC (Remote Proceedure Call) mechanism.  This RPC is implemented directly on top of Win32 inter-process-communication primitives and uses shared memory blocks to transfer data and Win32 events to synchronize processes.  While not quite as clean as running the support DLL in the same process space, this technique is still incredibly fast.  Whats more, the main PicLan-IP support library binary is actually shared amongst all PicLan-IP Win32 releases.

The internals of the support DLL are such that a total of 4096 TCP/IP sockets can be in use simultaniously.  Network connections are agressively and dynamically buffered allowing for multi-megabyte transfers to and from the support library without waiting for network traffic.  Because the underlying TCP/IP stacks are used for actual communications there are no real limits to the numbers of IP address or virtual hosts that can be setup concurrently.

High-level PicLan-IP functions are really no different on Win32 hosts than on any other PicLan-IP host and actually share 100% of their BASIC source code.  To be fair, the source code is conditionally compiled and massively macro expanded, but this shared environment is very important to Modular Software's ability to maintain PicLan-IP across such as broad array of MultiValue platforms.  It is in this high-level Pick/BASIC code where all of the TCP/IP services are implemented.  Win32 hosts support all of the PicLan-IP services including HTTP, SMTP, POP3, and client APIs.  Because the underlying MultiValue system already supports inbound TELNET, PicLan-IP does not implement these function on Win32.

The result is an extremely efficient, compact, and elegent set of TCP/IP services that are directly implemented within and controlled from the MultiValue environment.  The low-level communications engine allows the environment to execute with extremely good performance while still implementing all high-level protocol functions in standard BASIC for flexibility and ease of interfacing with user application code.