

                 C o d e R u n n e R  (R)


		   Omega Point, Inc.
		     25 Birch Road
		  Framingham, MA 01701

 		 TEL:  (508) 877 - 1819
		 FAX:  (508) 877 - 0915



CodeRunneR is a library and startup code for C programmers
optimized for creating highly efficient and reliable TSRs
(Terminate and Stay Resident programs). After four years as a
commercial product and its use by thousands of professional
developers, CodeRunneR has become de facto TSR standard and
a synonym for small, fast and rock solid TSRs.

Here is what the experts say about CodeRunneR:


      "the size of any program you develop with
       CodeRunneR will astound you"

      "CodeRunneR will make your C TSRs smaller than
       you could imagine"

                               Mark Davidson, Computer Language


 "the cream of the crop"
                                             Tom Swan, PC-World


      "CodeRunneR not only solves problems, it inspires
       new possibilities. It is destined for the Programmer's
       Hall of Fame."

		Joe Campbell, Author of "C Programmer's Guide to 
					 Serial Communications"


      "CodeRunneR and its associated Professional
       Developer's Kits are highly useful set of utilities that
       open the difficult world of TSR programming to anyone
       who can grasp the C language."

      "The video routines make saving and displaying
       screen information a breeze"

                          R. Bradley Andrews, Dr. Dobbs Journal


      "professional development tool that'll let you create
       compact, fast TSRs"

                              Gary Entsminger, Micro Cornucopia


      "Using the TSR template provided with CodeRunneR,
       you can get your first TSR application up and
       running in days instead of weeks."

      "one of the best BBS support lines I have seen yet.
       The response time to the questions I posted on the
       BBS was excellent."

      "The CodeRunneR product excels in its TSR
       capabilities, coexistence with other DOS applications
       and technical support."

                         Victor R. Volkman, The C Users Journal





                     TIME SAVING FEATURES



In addition to the top quality and unique capabilities of the code
and the wide scope of the library, CodeRunneR package includes
the following time and effort saving features:

      Quick Start templates and our PopFEATURE collection
       (fully operational, useful TSRs with C source) will help
       you create professional quality TSRs the first day. A
       dozen useful TSRs with full source include expression
       parsing calculators, calendar, text browser, ASCII chart,
       keyboard decoder, stopwatch, terminal TSR with file
       transfers, ...etc.

      On-Line Context-sensitive Hypertext Help (a TSR using
       1.3K with LIM or 30K without LIM) has all CR functions
       and variables cross-referenced and linked to related topics
       as well as miscellaneous useful PC/AT technical facts.
       The TSR allows cut & paste of code into a foreground
       application.
  
      The printed documentation consists of a 300 page
       Reference manual and a 60 page Quick Start manual. The
       main reference includes a chapter on efficient C
       programming covering 36 techniques for optimizing size
       and speed of C programs. The Quick Start manual guides
       you quickly through the how-to phase in a pragmatic
       manner. It includes a chapter of the most often asked
       questions with answers.

      The package also contains a large collection of tips and
       discussions from the CodeRunneR Technical Support BBS
       (spanning 3 years; over 800K of text). The collection is a
       treasure of real life, practical problems and solutions, a
       gold mine of ideas and strategies from hundreds of
       programmers.

      Our In-Depth Technical support is unmatched in the
       industry. You can discuss with our TSR experts topics
       from strategies and algorithms for implementing your TSR
       to tracking down difficult bugs and optimizing your TSR.

      You can call, FAX or leave technical questions/code on the
       Tech Support BBS at any time (including weekends) and
       they'll be addressed and resolved usually within hours from
       the request. Registered users can download fixes and
       updates from the BBS as soon as they are available (we
       don't use phrase "known bug").

      CodeRunneR works with all major C compilers (TC, BC,
       MSC, Watcom, Zortec).

      No royalties are required for the programs linked with
       CodeRunneR and its associated add-on kits.

In addition to the main package, there are 3 Professional
Developer's Kits (add-on) for specialized needs: PDK-1,2 and 3.
For example PDK-1 has a background communications library,
LIM access and ability to move TSRs to LIM, copy protection,
print spooler,...etc.

Finally, there is an Advanced Developer's Kit ADK-1, a library
for creating multi-application swappers. It includes PopSWAP, a
fully functional software carousel-like TSR for fast swapping of up
to 10 applications (easily extensible to any number).




                     TECHNICAL HIGHLIGHTS



      CodeRunneR has over 300 functions hand crafted in pure
       assembler for size and speed. The library is fully granular
       so that only the used facilities are linked in.
  
      Our unique memory manager discards initialization code
       and data before switching to resident mode. This means
       that any signon/help screens, command line/file parsers,
       set-up menus, ...etc. will not take any memory in TSR
       mode. Similarly disposed are any library facilities used
       only at load time such as startup code,
       hardware/environment identification routines, non-
       applicable video, keyboard, COM handlers ...etc.

      TSRs can use DOS/Networks safely. A set of efficient file
       i/o and directory functions provides full DOS directory/file
       access.

      The CodeRunneR task switcher supports execution of
       multiple threads in resident or non-resident mode. Context
       switching, stack allocation and thread entry control/locking
       is handled automatically (with facilities to override the
       defaults).

      TSR can define up to 256 simultaneous dynamic hotkeys,
       which may include multikey combinations such as Ctrl-
       Shift-Home. On extended keyboards the distinction can be
       made between Left and Right Ctl (or Alt) keys as well as
       between dedicated and non-dedicated cursor keys. The
       hotkeys can be added, removed or redefined at any time
       during TSR operation. The standard CodeRunneR header
       allows external programs to examine and modify hotkeys
       of a resident program.

      There are three different hotkey handlers: Hardware
       level, BIOS level (for triggering TSR by other applications
       via simulated hotkeys) and Timer-Hotkeys (for triggering
       TSR with applications which take over the keyboard
       exclusively). Any of the three handlers (or combination)
       triggers TSR by calling user specified C function with a
       hotkey value as a function argument.

      Two event schedulers are available: Tiny and Master
       scheduler. The Tiny scheduler is small and highly 
       efficient, useful for single event scheduling. The Master
       scheduler allows any number of events to be scheduled and
       pending simultaneously. When some event becomes due,
       the TSR is triggered via a call to a specified C function
       with the pointer to the event structure as an argument.
 
      Interrupt traps trigger user's C function when specified
       software or hardware interrupts occur. The traps can be
       added and removed in TSR mode. The hooked interrupts
       are automatically restored when TSR unloads. The C
       service function can examine and modify caller's CPU
       registers (via structures) and in each trigger instance
       specify whether to return to the caller (IRET) or pass
       control to the original interrupt handler. An alternate
       assembly language interrupt handler can be enabled if
       necessary. A template for custom interrupt service in
       assembler with an interface to CodeRunneR task switcher
       is included.
  
      Very compact and accurate BCD floating point library
       supports from 12 to 248 digits of precision and exponents
       up to 16383. It is ideal for business/financial
       computations since it eliminates the fraction rounding
       errors which are common with regular binary floating
       point.

      Ultra compact video functions perform lightning fast
       screen output. They automatically handle variable screen
       sizes and different video adapters. Another rich set of
       functions automates save and restore operation of screen
       windows, cursor position and type, fonts, palette, RGB
       colors, ...etc.

      Memory management functions support mixed far and
       near allocation and allow full control of the amount of
       memory which should remain resident. The compaction is
       done before going resident to eliminate gaps between near
       heap and stack as well as between the far heap and
       compacted near heap.
 
      Stack diagnostic functions provide information about
       resident stack use by different threads. This is helpful in
       minimizing the stack use in the final stages of
       development.
 
      Large number of functions cover all aspects of PC/AT
       hardware, BIOS and DOS control, such as printers, COM
       ports, sound, time, delays, old/new keyboards, key
       stuffing, video, interrupt controllers, ...etc.
 
Please inquire about any features of interest which you didn't see
listed in this brief overview.




                        PDK-1  Features


                     Serial Communications

The main part of PDK-1 is the interrupt driven serial
communications library. Due to its compactness it is ideally suited
for TSRs. Its speed makes it perfect for background, low
overhead, communications.

      Support for multiple channels limited only by available
       hardware. It can service cases from the single channel
       single interrupt (IRQ) to the multichannel configurations
       with separate or shared IRQs (with one or two interrupt
       controllers). Also supported are two types of commercial
       multiport boards (Digiboard type with base-2 ID and
       Stargate type with bit-mask ID).

      Standard PC/AT UART 8250 and the high performance
       FIFO 16550 are supported.

      Automatic or manual flow control (RTS/CTS, DTR/DSR,
       XON/XOFF) is changeable at any time during operation.

      User's C function can be triggered in real time by any
       conditions of the COM channel (modem status lines
       change, ring, loss of carrier, errors, break, receive buffer
       above critical mark, output buffer below critical mark,
       ...etc).
 
      Buffered serial I/O provides several types of buffers, from
       simple flat and circular buffers to chained buffers. With
       chained buffers, the library interrupt handlers automatically
       switch from one buffer to the next. This is very helpful
       with packet protocols where the chained buffers perform
       automatic separation of the packet envelope from its
       content, greatly speeding up and simplifying the packet
       merge/split functions.
 
      Several types of polled I/O, from the ultra fast streamlined
       version to variations with built in timeouts.
  
      ANSI Terminal Emulator via a single functions
       ansi_chr(). The TERM.C sample utilizes this function to
       implement a tiny ANSI terminal emulator.
 
      Facilities to reduce system overhead (from other interrupt
       sources) in time critical situations include quick handlers
       for timer and keyboard interrupts and ability to increase
       priority of COM interrupts at hardware level.
 
      Multitasking functions sleep() and awake() simplify
       conversions of a straight non-background C code into a
       multitasking code for background operation. The sleep()
       suspends execution, freezing the state of the thread.
       Subsequent awake() (which can be triggered by a
       full/empty buffer, timeout or any other event source)
       resumes original thread as if sleep() has just returned.

      Very fast and small checksum and CRC functions
       (compatible with X/YMODEM protocols).

      Powerful HyperCOM program (C source included)
       demonstrates many library features. It supports
       XMODEM, YMODEM/BAT multifile background
       transfers, logon scripts, dial directory, ANSI Terminal
       emulator.

                          LIM Support

      LIM (EMS) detection and LIM API support.

      Mixed model functions convenient for operating on LIM
       pages.

      TSR can move to LIM using a single call move_to_lim().
       Code, Data or both can be moved. In all cases the move is
       transparent to the C code. The library will retain in low
       memory only the minimum interrupt handlers (such as
       timer for schedulers, keyboard for hotkeys, DOS idle,...).
       This leaves around 1K in low memory, the rest is in
       LIM. When a trigger condition is detected by the low
       memory handlers (event due, hotkey pressed, DOS became
       idle), the LIM state is saved, the TSRs image is remapped
       into the CPU address space and the control is passed to the
       original interrupt handlers. Upon thread return the LIM
       state is restored, so that the foreground applications can
       safely use LIM. Any number of TSRs can be moved to
       LIM, each leaving a small footprint in conventional
       memory (or in high memory with QEMM, 386Max or
       DOS 5 UMBs with 0K low memory overhead).

                        Print Spooling

      The printer trap buffers printer data and triggers a C
       service function when buffer reaches a specified critical
       level. 

      Special technique is used to allow DOS access (for buffer
       flushing to a file) even when printing is done through DOS
       (i.e. when DOS is "officially" busy).
 
      Data can be captured with or without passing them to the
       printer. The LPT status returned to the foreground
       application is fully customizable. All or just selected
       printers can be monitored.

                Registration & Copy Protection

PDK-1 includes registration facility designed for copy protection.
The protection method works as follows: 

You make available to potential customers an unregistered version
of your program as a demo copy with some features disabled.
With the demo you include a User Register program UREG (C
source included in PDK-1). If the user decides to buy your
program s/he can call in and request an Unlock Code (asked by
UREG). A sales person at your site runs Internal Register program
IREG, fills in user name and company. The end user does same
with  UREG. Based on this information the IREG will produce a
unique number, the Unlock Code which the sales person tells the
customer who enters it into the UREG's Unlock Code field. If the
Unlock Code is valid UREG unlocks the primary application and
simultaneously stores the encrypted user's name and company into
some file from  your package. The application can check and
display at convenient time this information which should
discourage software pirating. 

Besides the functions for generating, checking and locating the
valid Unlock Code, several functions are supplied for defeating
debugging or patching by would-be pirates.




                        PDK-2 Features



PDK-2 covers wider area of applications than PDK-1 or PDK-3,
containing the facilities developers have often asked for.

                      EXE Merge Facility

      Multiple EXE files are merged into a single EXE file. Each
       member EXE file can switch over to another one with a
       single call. The calling member EXE is discarded from the
       memory and the new member EXE is spawned. This
       facility is useful when there are several variations of a
       program or when there is a setup program plus one or
       more main executables. The EXE Merge packages all
       programs into a single EXE file which greatly simplifies
       consistent updates and installation by end users.

                          Spawn Over

This facility allows programs to spawn another application by
swapping themselves to XMS, EMS or disk. Only a 1.4K
footprint is left from the parent process. Upon exit of the child
program, the parent program is restored.

      To gain speed only the minimum necessary swapping is
       done. Depending on the size of child program
       spawn_over() will first try to utilize any free memory. If
       that isn't sufficient it compacts the parent program (free
       heap/stack space) and only if that isn't enough it swaps out
       the minimum necessary parts of the parent program.

      Parent program can designate section of memory as shared
       with the child program. This memory is not swapped out
       and it can be accessed by the spawned program for fast
       two-way information exchange.

                          XMS Support

      XMS API allows access to extended memory. The
       functions are similar to LIM support in PDK-1.

      XMS functions will also enhance the swappers in PDK-3
       and ADK-1 for swapping graphics state and foreground
       applications to XMS. Except for the initial XMS presence
       check and xms_alloc() call, the rest is transparent to the
       C code (handled internally by the swappers).

      Official XMS specifications are included in the PDK-2
       manual.

                Keyboard Stuffing & Monitoring

      TSRs can feed scan codes directly to hardware so they
       are indistinguishable from the real keys, even by
       applications which read hardware directly. This feature is
       available only on PS/2 and better AT clones (such as
       Compaq). A software emulation is provided for machines
       lacking this capability (detection included).

      High speed key feeding (at BIOS level) with a mechanism
       to handle applications which flush keyboard between keys
       received.

      Embedded command codes automate setting of keyboard
       flags (Shift, Ctl,..) without requiring special attention from
       C code.

      C service function can be awakened when the output string
       has been passed to the foreground application.

      A C function can watch all keystrokes and decide on
       action: pass, remove or substitute the keys typed.

                    Time Slicing Functions

      Function wait(N) suspends current thread for N timer ticks.
       The control returns either when N ticks have expired or
       when another thread calls wait_done().

      Function waitfor() is similar to wait() except that it also
       supplies a pattern and the address (such as video memory).
       The thread is awakened when either time expires or the
       pattern appears at specified location. This is useful for
       programs which control other applications (such as
       automated testers, screen data grabbers) where the TSR
       stays idle until some prompt occurs on the screen.

                      Far Call Interface

This facility is similar to software traps except that it allows
external programs to call into TSR (without using interrupts) and
to activate a TSR.

                         Traps to LIM

The TSRs which use move_to_lim() facilities cannot set interrupt
vectors to point into LIM since the TSR image in LIM can get
swapped out by other applications. The PDK-2 ltrap facility allows
interrupt trapping by setting up an indirect handler in low
memory which handles LIM state saving/restoring and TSR
triggering.

                  Utilizing System Idle Time

Functions idle_on() and idle_off() allow TSRs which need to do
time consuming processing in the background (e.g. printing) to
utilize system idle time. Whenever system is idle the specified C
service function is called with high frequency.

                      Dual Monitor Access

This set of functions allow CodeRunneR video functions to operate
on a selected monitor on systems with two monitors. The selection
can be changed at any time.

      Automatic screen overflow handler can redirect data
       scrolled off at the top of the primary monitor to the bottom
       of the secondary monitor.

      A useful sample program DMON demonstrates dual
       monitor functions. It can clone parts of the screen from the
       primary to the secondary monitor.




                        PDK-3 Features



With PDK-3 you can, in less than an hour, turn any application
(graphics & floating point, too) into a TSR taking only 1.5K of
RAM without any modifications to the application. You can also
use PDK-3 for non-TSR applications which are too large to fit in
640K: a tiny TSR (1.5K) loads temporarily before your main
application and serves as a swapper between several large
components of the main application.

PDK-3 performs its magic via the in-depth support for spawning
applications from the TSR, swapping TSR or foreground
application and swapping graphics. The TSR can spawn another
application in several ways: by swapping foreground application to
disk, LIM or XMS, by swapping itself, by remapping LIM pages,
by using unused space from COMMAND.COM when at DOS
prompt.

      Graphics swapping allows pop-up over graphics
       application. All major video adapters are supported
       (Hercules, CGA, MCGA, EGA, S/VGA). The graphics
       image can be swapped to disk, LIM or XMS.

      Mouse API is supported including interrupt driven
       triggers on mouse events (movement, button clicks or
       Shift, Alt, Ctl + button clicks).

      Mouse, graphics, math coprocessor, ... can be used by
       spawned programs without interfering with their use by
       foreground applications.

      Three fully operational spawn templates are supplied.
       They allow building your custom spawner by few simple
       changes in the header files (to set-up application name,
       memory size, graphics use and swap medium).

The swapping to LIM (XMS) requires PDK-1 (PDK-2)
respectively. The swap functions handle different swap media
transparently to C code.




                        ADK-1 Features



The Advanced Developers Kit ADK-1 contains very powerful
multi-application swapping capabilities. Multiple (graphics)
applications can be suspended, saved  (to disk, EMS or XMS) then
restored and resumed at any time from within the TSR. Any
CodeRunneR trigger mechanisms can be used to initiate the
switch (hotkeys, timer, interrupts from applications, phone ring,
...etc).

      The ADK-1 C interface is very simple, just few powerful
       functions: app_start(), app_suspend(), app_resume(). Yet
       it allows full dynamic customization via APP_CTL and
       SWAP_CTL structures.

      For speed, only the minimum necessary swapping is
       done. The use of available swap media (disk, EMS, XMS)
       can be dynamically adapted and mixed within the same
       swap operation for optimum performance. The resulting
       swapping is 2-3 times faster than with the DOS 5 swapper
       DOSSHELL. Yet the ADK-1 sample swapper PopSWAP
       is three times smaller than DOSSHELL (or 30 times if
       LIM is available).

      Generic I/O functions allow uniform access to files, EMS
       or XMS, with each media presented as a linear read/write
       space addressable via single 32-bit pointer. Read/Write
       blocks can be any size (the 32-bit read/write count is
       used).

      Full source for all ADK-1 library functions (ASM) is
       included.




                        PRICE & ORDERING



The prices for CodeRunneR and the add-on kits are:

       CodeRunneR                  $ 195
       PDK-1, 2 or 3               $  99
       CodeRunneR + 3 PDKs         $ 429
       ADK-1                       $ 995

For US orders add $5 for regular shipping, $10 for 2nd day or $15
for next day delivery. For Canada add $10 for Air Mail or $50 for
FEDEX. For other countries add $25 for Air Mail. Alternatively
provide your FEDEX number to be used for shipping. On
international orders we accept VISA, MasterCard, AMEX (please
include card number & exp. date) or a bank check in US funds
(prepaid).


		Omega Point, Inc.
		  25 Birch Road
	       Framingham, MA 01701

	      TEL:  (508) 877 - 1819
	      FAX:  (508) 877 - 0915




