Brief instructions for building flex 2.5.x for VMS:

   0) if you have either MMS (from Digital) or MMK (freeware) for use
as a `make' utility, follow the directions in steps #1 through #5 below.
If not, execute
      @BUILD.COM xxxC
where "xxxC" is either "VAXC" or "DECC" or "GNUC", and then skip to
step #5.

   1) set default to the source directory (not the [.MISC.VMS] subdirectory
where this file is located).

   2) COPY [.MISC.VMS]DESCRIP.MMS []*.*
(Recursive invocations of `make' for the `bigcheck' test assume that the
makefile will be found as descrip.mms in the current directory.)

To build with VAX C for VAX/VMS:
   3) MMS /MACRO=("VAXC=1") FLEX.EXE
(The /macro qualifier is optional in this case.)

To build with GNU C for VAX/VMS:
 2.5) possibly edit descrip.mms to uncomment `SET COMMAND' for GCCINIT,
      depending on local site configuration
   3) MMS /MACRO=("GNUC=1") FLEX.EXE

To build with DEC C for either VAX/VMS or Alpha/VMS:
   3) MMS /MACRO=("DECC=1") FLEX.EXE
(Expect one or two informational messages from the compiler about
implicitly declared functions.)

Minimal testing of the resulting program:
   4) MMS CHECK
(If `diff' reports no warnings, the test has succeeded.)

More thorough testing:
 4.5) MMS /MACRO=("xxxC=1") BIGCHECK    ! "xxxC=1" as in step #3 above
(If using an older version of MMK rather than MMS, this might fail when
`make' is invoked recursively due to excessive BYTLM usage by MMK.)

Installation (the VMS makefile does not support an `install' target;
you'll need to do this part manually):
   5) copy flex.exe, flex.doc, flex.skl, flexlib.olb, and FlexLexer.h to
location(s) appropriate for your site.  To use flex, define a "foreign"
command by making a DCL symbol whose value begins with a dollar sign
immediately followed by the filename for flex.exe, as in
      $ flex :== $local_tools:flex.exe
where `local_tools:' is the logical name pointing to flex.exe's location.
This symbol will ordinarily be a candidate for your login.com.  When
invoking flex, upper- or mixed-case command line options must be enclosed
in quotes.  For example,
      $ flex "-Pxyz" "-L" -t mylexer.l > mylexer.c
(use prefix "xyz" instead of "yy", suppress `#line' compiler directives
in the output, write the output to `stdout', process file mylexer.l,
and capture `stdout' in file mylexer.c).  As illustrated here, this VMS
version of flex supports emulation of command line I/O redirection used
by Unix shells.

 flex.exe    -- the executable image for the flex program;
 flex.doc    -- documentation, the "man page" describing flex (flex.1
                processed with `nroff -man' followed by `col -b');
 flex.skl    -- a text file containing flex's default skeleton;
                with this version of flex, it is for reference only;
                flex.exe does not need to know where to find it;
 flexlib.olb -- an object library containing some support routines;
                you might need to link your generated lexer against
                it, depending on how your program is designed;
                flex.exe does not access it; it corresponds to
                `libfl.a' under Unix;
 FlexLexer.h -- header file used for C++ class-based lexers; not
                needed for ordinary C lexers.

Notes:
      This VMS port of flex supports only the original Unix command line
interface, not the native DCL interface which was available for flex 2.3.

 build.com   -- DCL command procedure as alternative to descrip.mms;
 descrip.mms -- 2.5.x makefile for use with MMS or MMK (see step #1);
 mkskel.tpu  -- TPU program used to make skel.c from flex.skl for full
                build from scratch; performs same function as mkskel.sh;
 vms-conf.h  -- pre-configured `conf.in', copied to [-.-]config.h;
 vms-code.c  -- VMS-specific support code, copied to [-.-]vms-code.c;
 README.VMS  -- this file

