| 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. | |
| =============================================================================== |