%N numbpg %F $MIR/src/subs/numbpg.for
%D Convert a number into a plottable character string
%P mjs
%: strings
%B
      SUBROUTINE NUMBPG (MM, PP, FORM, STRING, NC)
      INTEGER MM, PP, FORM
      CHARACTER*(*) STRING
      INTEGER NC

 This routine converts a number into a decimal character
 representation. To avoid problems of floating-point roundoff, the
 number must be provided as an integer (MM) multiplied by a power of 10
 (10**PP).  The output string retains only significant digits of MM,
 and will be in either integer format (123), decimal format (0.0123),
 or exponential format (1.23x10**5). Standard escape sequences u, d 
 raise the exponent and x is used for the multiplication sign.
 This routine is used by PGBOX to create numeric labels for a plot.

 Formatting rules:
   (a) Decimal notation (FORM=1):
       - Trailing zeros to the right of the decimal sign are
         omitted
       - The decimal sign is omitted if there are no digits
         to the right of it
       - When the decimal sign is placed before the first digit
         of the number, a zero is placed before the decimal sign
       - The decimal sign is a period (.)
       - No spaces are placed between digits (ie digits are not
         grouped in threes as they should be)
       - A leading minus (-) is added if the number is negative
   (b) Exponential notation (FORM=2):
       - The exponent is adjusted to put just one (non-zero)
         digit before the decimal sign
       - The mantissa is formatted as in (a), unless its value is
         1 in which case it and the multiplication sign are omitted
       - If the power of 10 is not zero and the mantissa is not
         zero, an exponent of the form x10u[-]nnn is appended,
         where x is a multiplication sign (cross), u is an escape
         sequence to raise the exponent, and as many digits nnn
         are used as needed
   (c) Automatic choice (FORM=0):
         Decimal notation is used if the absolute value of the
         number is less than 10000 or greater than or equal to
         0.01. Otherwise exponential notation is used.

 Arguments:
  MM     (input)
  PP     (input)  : the value to be formatted is MM*10**PP.
  FORM   (input)  : controls how the number is formatted:
                    FORM = 0 -- use either decimal or exponential
                    FORM = 1 -- use decimal notation
                    FORM = 2 -- use exponential notation
  STRING (output) : the formatted character string, left justified.
                    If the length of STRING is insufficient, a single
                    asterisk is returned, and NC=1.
  NC     (output) : the number of characters used in STRING:
                    the string to be printed is STRING(1:NC).
