Clipper Support Bulletin #11
//INFO runtime configuration setting

Copyright (c) 1992 Nantucket Corporation.  All rights reserved.


Version:  Clipper 5.0, version 5.01
Date:     23rd April, 1992
Revised:  22nd May, 1992
Status:   Active

================================================================================

This Support Bulletin covers the following topics:

   1. Overview of //INFO
   2. The DS Address Indicator
   3. The DS Available Indicator
   4. The OS Available Indicator
   5. The EMM Available Indicator
   6. The Fixed Heap Available Indicator

===============================================================================
1. Overview of //INFO
   
   Clipper 5.0, version 5.01 supports a runtime configuration setting
   that gives information about the state of an application program
   when you load it.  This configuration setting is //INFO.  You can
   specify this setting in the CLIPPER environment variable or on the
   application command line.
   
   When you invoke the application with the //INFO runtime
   configuration setting specified, the following information
   displays on the screen before your application code begins
   execution:
   
   Clipper (R) 5.01 Rev. 1.29 ASCII
   DS=829E:0000  DS avail=37KB  OS avail=53KB  EMM avail=1024KB
   
   This is a typical //INFO line (actually, it is displayed when
   invoking DBU).  The first line describes the general product
   version, revision, and international version.  For example,
   "ASCII" means you created the program using the US version of
   Clipper 5.0 and therefore all nation-dependent operations such as
   sorting are oriented around ASCII definition or characters.
   
   The second line contains information about the memory environment
   the application program will be operating under.  Some of this
   information is useful, some is not.  The descriptions below define
   the meaning and usefulness of each indicator.
   
================================================================================
2. The DS Address Indicator
   
   The DS address indicator has the following form:
   
   DS=<offset>:0000
   
   This is address of the program's data segment or DGROUP. This
   value is essentially useless to anyone outside of Nantucket.
   
================================================================================
3. The DS Available Indicator
   
   The DS available indicator has the following form:
   
   DS avail=<memory>KB
   
   This indicator shows the amount of DGROUP available for the
   current program's usage when the program starts.  Clipper 5.0
   makes very heavy use of the default DGROUP.  The internal
   evaluation stack, along with all local and static variables, is
   allocated in this area.  In addition, the processor stack is also
   allocated there, as with all Microsoft C programs.
   
   If your system defines large amounts of static near data, you may
   be substantially reducing the amount of memory available for local
   and static variables at the Clipper level, and also reducing the
   amount of recursion that the Clipper program can perform.
   
   To determine how much DGROUP your program uses:
   
   1.Invoke the program using //INFO
      
   2.Note the DS avail value
      
   To determine how much DGROUP a particular library uses:
   
   1.Link the application without the third-party library (ignoring
      all of the linker warnings about unresolved externals)
      
   2.Invoke the program, and note the DS avail number (the machine
      may hang at this point due to the missing functions).
      
   3.Link the program again with the library
      
   4.Invoke the program again and note the new DS avail value.  The
      difference between the first and second values shows how much
      DGROUP the library is using.
      
   If you are having problems with "Eval stack fault," unrecoverable
   errors, and linking multiple third-party libraries, you should
   perform this analysis with each library individually to find the
   DGROUP hog. You should then contact the vendor to informing them
   of the problem.
   
================================================================================
4. The OS Available Indicator
   
   The OS available indicator has the following form:
   
   OS avail=<memory>KB
   
   This indicator shows the amount of conventional memory available
   for VMM swap space.  If the reported OS avail value is too low,
   there is strong possibility the program will terminate with a
   "Conventional Memory Exhausted" unrecoverable error.  Because of
   the dynamic nature of the Clipper 5.0 memory system, the precise
   amount of memory needed to effectively run an application is not
   known.  However, the minimum effective value should exceed 100KB.
   (For more information on Clipper's virtual memory management,
   please see Clipper Support Bulletin #3, located in library 16 of
   NANFORUM on CompuServe.)
   
================================================================================
5. The EMM Available Indicator
   
   The EMM available indicator has the following form:
   
   EMM avail=<EMM memory>KB
   
   This indicator shows the amount of EMM (expanded memory) allocated
   to the current application.  This value reflects the lesser of the
   total EMM available and the //E configuration setting.
   
   A "(P)" following the EMM avail value appears when the application
   has been loaded with the //BADCACHE configuration setting.
   //BADCACHE causes the VMM to preserve and restore the state of the
   EMM page frame before and after every EMM access (the EMM page
   frame is an area in real address space through which EMM data is
   accessed).  This setting can be used to correct problems when
   there are conflicts with other programs that use EMM.
   
================================================================================
6. The Fixed Heap Available Indicator
   
   The fixed heap available indicator has the following form:
   
   Fixed heap=<fixed heap>KB/<number of fixed segments>
   
   This indicator appears when the application terminates.  It shows
   the size of the fixed heap in kilobyte increments in addition to
   the number of fixed segments.  These numbers are not very useful.
   They indicate trouble if the values are too high.  Importantly,
   they increase if the fixed heap becomes fragmented through use of
   _xalloc()/_xfree().
   

                              *  *  *
