git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8964 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			190 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
|                         Microsoft Visual C Stuff
 | |
| 
 | |
| 
 | |
| [Tom Moog 2-Oct-98
 | |
| 
 | |
|     Users of Microsoft Visual C++ should download a separate
 | |
|     ready-to-run zip file from my web site.  It contains 
 | |
|     binaries, static library, and a sample project.
 | |
| ]
 | |
| 
 | |
| [
 | |
|   Two notes added by Tom Moog 23-Sep-97.  I believe the *.dsp and
 | |
|   *.mak files that were once at the end of this file are now obsolete.
 | |
|   
 | |
|   The following MSVC .dsp and .mak files for pccts and sorcerer
 | |
|   were contributed by Stanislaw Bochnak (S.Bochnak@microtool.com.pl)
 | |
|   and Jeff Vincent (jvincent@novell.com)
 | |
| 
 | |
|         PCCTS Distribution Kit
 | |
|         ----------------------
 | |
|         pccts/antlr/AntlrMSVC50.dsp
 | |
|         pccts/antlr/AntlrMSVC50.mak
 | |
| 
 | |
|         pccts/dlg/DlgMSVC50.dsp
 | |
|         pccts/dlg/DlgMSVC50.mak
 | |
| 
 | |
|         pccts/support/genmk/watgenmk.mak
 | |
|         pccts/support/msvc.dsp
 | |
| 
 | |
|         Sorcerer Distribution Kit
 | |
|         -------------------------
 | |
|         pccts/sorcerer/SorcererMSVC50.dsp
 | |
|         pccts/sorcerer/SorcererMSVC50.mak
 | |
| 
 | |
|         pccts/sorcerer/lib/msvc.dsp
 | |
| 
 | |
|   I do not have an MS based computer.  If you discover problems
 | |
|   please report them so as to save trouble for others in the future.
 | |
| ]
 | |
| 
 | |
| [
 | |
|  Modified by Terence Parr (September 1995) to change .C to .cpp
 | |
| ]
 | |
| 
 | |
| [
 | |
|  This file contains notes on MSVC for Windows NT console execs by Dave
 | |
|  Seidel and an explanation of flags etc.. by John Hall; good luck,
 | |
|  Terence
 | |
| ]
 | |
| 
 | |
| ===============================================================================
 | |
| Date: Sat, 31 Dec 1994 11:40:36 -0500 (EST)
 | |
| From: David Seidel <75342.2034@compuserve.com>
 | |
| 
 | |
| I've succesfully build 1.31b3 with djgpp for DOS and MSVC 2.0 for Windows 
 | |
| NT.  The only (minor) problem I had was that GNU make (version 3.71, in the 
 | |
| djgpp port) complained about "multiple targets" in both the antlr and dlg 
 | |
| makefiles.  I got around the error by, in each makefile, commenting out the 
 | |
| $(SRC) dependency, for example:
 | |
| 
 | |
|    antlr: $(OBJ) #$(SRC)
 | |
| 
 | |
| I don't know why this is happenning, since you haven't changed that part of 
 | |
| the makefile at all, and I think this used to work ok...
 | |
| 
 | |
| Here are the makefiles I built from within the MSVC 2.0 environment for antlr 
 | |
| and dlg and Windows NT console executables.  Please feel free to pass them 
 | |
| on.  Of course, as soon as 1.31 "goes gold", I will send you nice new 
 | |
| binaries.  I'm not going to bother to keep doing both Borland and djgpp for 
 | |
| DOS however.  Instead, I'll just keep the djgpp version up to date and also 
 | |
| provide WinNT binaries.
 | |
| 
 | |
| Dave
 | |
| ===============================================================================
 | |
| 
 | |
|          How to port PCCTS 1.10 (and 1.32 hopefully) to Visual C++
 | |
| 
 | |
|                                    By
 | |
| 
 | |
|                        John Hall <jhall@ivy.wpi.edu>
 | |
| 
 | |
| Here is how to compile an ANTLR grammar in Visual C++.  These steps
 | |
| describe how to have your ANTLR grammar parse the input file the user
 | |
| selects when they choose File Open in your Windows application.  (Even
 | |
| if you aren't using Visual C++, the steps should be portable enough to
 | |
| other compilers.)
 | |
| 
 | |
|  * Make sure that ANTLR and DLG generate ANSI code (use the -ga
 | |
|    switch).
 | |
| 
 | |
|  * Set the following compiler flags in Visual C++ (these are in the
 | |
|    Memory Model category of the compiler options in the Project
 | |
|    Options menu):
 | |
| 
 | |
|    FLAG MEANING
 | |
|    ==== ==============================================================
 | |
|    /AL  Large memory model (multiple data segments; data items must be
 | |
|     smaller than 64K).
 | |
| 
 | |
|    /Gtn Allocates all items whose size is greater than or equal to n
 | |
|     in a new data segment.  (I let n be 256: /Gt256.)
 | |
| 
 | |
|    /Gx- All references to data items are done with far addressing in
 | |
|     case they are placed in a far segment.
 | |
| 
 | |
|  * Add the following member variable to the attributes section of your
 | |
|    derived CDocument class (you will need to make sure you also
 | |
|    include stdio.h):
 | |
| 
 | |
|    FILE *fp;
 | |
| 
 | |
|  * Add the following method to your derived CDocument class:
 | |
| 
 | |
|    BOOL CAppDoc::OnOpenDocument(const char* pszPathName)
 | |
|    {
 | |
|        // Call CDocument's OnOpenDocument to do housekeeping for us
 | |
|        // DON'T add anything to the loading section of Serialize
 | |
|        if (!CDocument::OnOpenDocument(pszPathName))
 | |
|            return FALSE;
 | |
|    
 | |
|        // Open input file
 | |
|        if ((fp = fopen(pszPathName, "r")) == NULL)
 | |
|            return FALSE;
 | |
|    
 | |
|        // Parse input file
 | |
|        ANTLR(start(), fp);
 | |
|    
 | |
|        // Close input file
 | |
|        fclose(fp);
 | |
|        return TRUE;
 | |
|    }
 | |
| 
 | |
|    (Note: additional code may be necessary, depending on your parser.
 | |
|    For example, if your parser uses PCCTS's symbol table library, you
 | |
|    will need to insert calls to zzs_init and zzs_done.)
 | |
| 
 | |
|  * Compile the generated C files as C++ files.  (I renamed the files
 | |
|    to have a .CPP extension to fool Visual C++ into thinking they were
 | |
|    C++ files.  One might also use the /Tp switch, but that switch
 | |
|    requires you separately include the filename.)  [I used this step
 | |
|    as an easy out for all the external linking errors I was getting
 | |
|    that I couldn't fix by declaring things extern "C".]
 | |
| 
 | |
|  * Make sure the __STDC__ portion of the generated files gets
 | |
|    compiled.  (Either define __STDC__ yourself or else change all
 | |
|    occurrences of __STDC__ to __cplusplus in the generated files.  You
 | |
|    can define __STDC__ in the Preprocessor category of the compiler
 | |
|    options.)
 | |
| 
 | |
|         ================================================================
 | |
|         = Note 23-Sep-97: This is probably not necessary any more.     =
 | |
|         = With 1.33MRxxx the use of __STDC__ was replaced with the     =
 | |
|         = macro __USE_PROTOS to control the compilation of prototypes. =
 | |
|         ================================================================
 | |
|                         
 | |
| That last step is important for Visual C++, but may not apply to other
 | |
| compilers.  For C++ compilers, whether __STDC__ is defined is
 | |
| implementation dependent (ARM, page 379).  Apparently, Visual C++ does
 | |
| not to define it; it also does not support "old style" C function
 | |
| definitions (which is okay, according to page 404 of the ARM).  Those
 | |
| two things together caused problems when trying to port the code.
 | |
| When it saw this:
 | |
| 
 | |
| #ifdef __STDC__
 | |
| void
 | |
| globals(AST **_root)
 | |
| #else
 | |
| globals(_root)
 | |
| AST **_root;
 | |
| #endif
 | |
| 
 | |
| it skipped the __STDC__ section and tried to process the "old style"
 | |
| function definition, where it choked.
 | |
| 
 | |
| When you finally get your parser to compile and link without error,
 | |
| you may get General Protection Fault errors at run time.  The problem
 | |
| I had was that a NULL was passed to a variable argument function
 | |
| without an explicit cast.  The function grabbed a pointer (32-bits)
 | |
| off the stack using va_arg, but the NULL was passed silently as the
 | |
| integer 0 (16 bits), making the resulting pointer was invalid.  (This
 | |
| was in PCCTS's sample C parser.)
 | |
| 
 | |
| There is one other thing I might suggest to help you avoid a run-time
 | |
| error.  Make sure you redefine the default error reporting function,
 | |
| zzsyn.  To do this, put "#define USER_ZZSYN" in your #header section
 | |
| and put your own zzsyn somewhere.  You can then pop up a MessageBox or
 | |
| print the error to some output window.
 | |
| ===============================================================================
 |