www.pudn.com > flex_bingle.rar > THINK_C_notes


Notes on the THINK C version of Flex 2.4.6 
Scott Hofmann 23-JUL-94 
Internet: scotth@visix.com 
 
The only changes needed to compile Flex 2.4.6 under Symantec C++ 6.0 was 
to #include  in main.c and call ccommand() just before flexinit() 
in main(). The notes below are mostly of historical significance only; most 
of the workarounds below were to get around restrictions/problems in earlier 
versions of THINK C. The only section which still applies is Russell Finn's  
description of how to make Flex generate output of type 'KAHL'. Also, 4-byte 
ints must be used by any project which uses Flex output. 
 
If you want to recreate the project, you'll need to add the files  
alloca.c and xmalloc.c in this directory. Both files are copylefted; see 
the GNU General Public License for details. You will also need to recompile 
both the ANSI and unix libraries to use 4 byte ints, and if you want the 
files that flex creates to have 'KAHL' as the creator you'll need to apply 
Russell Finn's patch. 
 
Notes on the THINK C version of Flex 2.3.7 
Jonas Barklund, 25-JAN-92 
Internet: jonas@csd.uu.se 
 
I have merged the sources for Flex version 2.3.7 with the older version 
which was hacked for THINK C version 4. I have conditionalized the code 
so that I think it should work with both THINK C version 4 and 5 (for 
those of you who don't know: the THINK_C symbol is defined as 1 in version 
4 and as 5 in version 5). I have put in some missing prototypes, so it 
compiles also with "require prototypes" on. 
 
Most of the notes below still apply, in particular that about the MakeRes 
program. 
 
 
Notes on the THINK C version of Flex 
Russell S. Finn, 19-FEB-90 
Internet: rsfinn@athena.mit.edu, rsfinn@neutron.lcs.mit.edu 
CompuServe: 76377,1107 
GEnie: RSFINN 
 
Flex appears to be covered by a copyright notice from the University of 
California, similar to the one covering Berkeley Unix; the Free Software 
Foundation is not part of the picture here.  So here is a version 
created with THINK C 4.0, along with the source code; as with the 
Bison distribution, I am including *all* of the source code I received 
with the package. 
 
The current version (modification date January 25, 1990) has only the 
bare-bones interface provided by the THINK C library routine "ccommand", 
which allows the user to type a command line and to redirect the output. 
Perhaps someday I may try to implement a "real" user interface; perhaps 
not. 
 
The only modifications made to the source file are surrounded by "#ifdef 
THINK_C"..."#endif"; in theory, then, these sources could be recompiled 
on another system if necessary.  These are the actual files modified: 
alloca.c, dfa.c, flexdef.h, main.c, misc.c, scan.c, sym.c.  Most of these 
changes were minor, and many of them would have been unnecessary if the 
original Flex source code had been written for an ANSI-compliant C compiler. 
In addition, the file "macutils.c" is completely new; see the discussion 
of "MakeRes" below. 
 
THINK C users may find it convenient to have the output text files written 
by Flex be THINK C documents.  To do this, create a copy of the "ANSI" 
project called "ANSI-KAHL", and a copy of the file "fopen.c" called 
"fopen-KAHL.c".  In the copy, find the routine "setfiletype", and replace 
the lines: 
	if (!(oflag & F_BINARY)) 
		pb.ioFlFndrInfo.fdType = 'TEXT'; 
with the lines: 
	if (!(oflag & F_BINARY)) { 
		pb.ioFlFndrInfo.fdType = 'TEXT'; 
		pb.ioFlFndrInfo.fdCreator = 'KAHL'; 
		} 
Replace "fopen.c" with the new "fopen-KAHL.c", rebuild the new project 
"ANSI-KAHL", and use this project in the project file "Flex.¹" 
instead of the "ANSI" project. 
 
** The "MakeRes" program 
 
The output files created by Flex contain large amounts of preinitialized 
static data; the file "scan.c" contained in the Flex.¹ project is one 
such file.  However, the Macintosh architecture limits normal applications 
to 32K of global data.  In many cases (including Flex), this limit can 
be surpassed by the static data generated by Flex. 
 
The solution I have implemented for the THINK C version of Flex is to 
extract the data tables from the Flex output file, and paste them into 
the file "MakeRes.c".  Then, by recompiling and running the program in 
the "MakeRes.¹" project (it is not necessary to create an application), 
a resource file called "Flex.¹.rsrc" is created in the current directory. 
The Flex output file "scan.c" has been modified to load the static data 
from the resource fork of the Flex application.  This is done by calling 
the "load_table" function, which is defined in the file "macutils.c". 
 
In the application for which I needed Flex, the data tables were small 
enough that I didn't need to do this.  However, if your application 
requires you to do this, simply follow the model of "scan.c"; the MakeRes 
project and source code has been included for your use.