            Fortran single/double converter, version 1.2
                    Copyright (c) 1990, Jim Meyering

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 1, or (at your option)
    any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

-------------------------------------------------------------------

Note that FLEX (the Free Software Foundation's Gnu replacement
for Lex) was used to generate the lexical scanners used in s2d
and d2s.  This is important because unlike some versions of Lex,
Flex has an option that causes it to generate case-insensitive
scanners -- the Flex source files, s2d.l and d2s.l, are much
more readable than equivalent ones written for Lex.

The point is: if you modify d2s.l or s2d.l and want to re-make
the corresponding C scanners, you will need a version of flex
that supports the <<EOF>> pattern;  early versions don't.

Changes for version 1.2:
    - added a man page
    - added configure script to ease installation
    - included the f-ai filter (see man page for more info)
    - fixed a couple serious bugs (see ChangeLog for most of the details)

Improvements over pre-1.0 version:

     - rather than perform a binary search for each potential
          subroutine/function name, a hash table (with chaining
          for collisions) is used.
     - single, separate main program, main.c, used for both s2d
          and d2s.  (all it does is parse command line options,
          initialize lookup tables, and call the scanner)
     - major overhaul of s2d.l and d2s.l
     - non-delimiting spaces in the configuration (.name) files
          are no longer significant
     - the case of names in configuration files is not significant
     - added -h and -v flags for help and version number.
     - added -s and -c flags to enable translation of comments and
          quote-delimited strings.  By default, neither is modified.
     - Added capability to perform many-to-one mappings.  So, now
          e.g. we can map (with d2s) both cdsqrt and zsqrt to csqrt.
          (see the files in ./config)


Bugs in s2d,d2s: See the manual page.

Things I'd like to change/add:

     - Make converters more useful from the "one executable/many user"
          standpoint;
          o Allow a user to (effectively) append his/her private config
               file(s) to standard ones.
          o Allow user to specify that *only* the private config file
               is to be used.

     - compare performance when using scanners built with various
          combinations of flex options.  Currently to keep the
          distribution size within bounds, we only use -i, and
          this minimizes table size at the expense of scanning
          speed (Using -F gave a ~140kbyte C-scanner.  With just
          the -i flag, the size of the scanner is about 30kB).

          A little info (when converting EISPACK on a SparcStation-1):
              - using "flex -i -F", better than 3200 lines/sec
              - using "flex -i", about 2500 lines/sec

     - Put together an extensive test suite.

     - Set up configuration files, etc. to convert f66-style intrinsics
          to f77 typeless intrinsics. (e.g. convert things like
          csqrt, dsin, dmax  to sqrt, sin, max respectively)

     - If performance analysis says the table manipulation routines
          use a large fraction of total time, consider replacing
          insertion/lookup stuff with (compile-time generated) perfect
          hash tables (a` la GNU/Schmidt's gperf).  This may conflict
          with the many-to-one-mapping goal.
          --- Alternatively, if the many calls to Insert() in init()
          are the problem (rather than lookup delays caused by long
          chains) , consider making a single call to a `multi-insert'
          with a static array of all the pairs.
          --- Alternatively, increase size of hash table or change
          hash function if there are too many collisions.
          --- But all of this is probably irrelevant since the process
          is certainly I/O-bound.  It's so fast already that it's not
          worth the effort -- it converts EISPACK at more than 2500
          lines/sec on a SparcStation1.

Authors

     The original versions of d2s.l, s2d.l, flbreak, and fljoin
         were written by people who wish to remain unnamed.
     The modifications described in this file were made by
         Jim Meyering (meyering@cs.utexas.edu).


Reporting Problems, Bugs, etc.:

     Please send suggestions, bug reports, fixes etc. to me at
     meyering@cs.utexas.edu.  If you report a bug, please include
     enough information so that I can reproduce it.
