mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 02:40:26 +00:00 
			
		
		
		
	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.
 | 
						|
===============================================================================
 |