dleslie     00/06/05 11:11:12

  Added:       c/samples/ThreadSafe birds.xml birds.xsl ThreadSafe.cpp
                        ThreadSafe.dsp
  Log:
  Sample based on Paul's Thread Safety test. Runs multiple threads
  with same StylesheetRoot and XSLTInputSource objects.
  
  Revision  Changes    Path
  1.1                  xml-xalan/c/samples/ThreadSafe/birds.xml
  
  Index: birds.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <Class>
  <Order Name="TINAMIFORMES">
          <Family Name="TINAMIDAE">
              <Species Scientific_Name="Tinamus major">  Great 
Tinamou.</Species>
              <Species Scientific_Name="Nothocercus">Highland Tinamou.</Species>
              <Species Scientific_Name="Crypturellus soui">Little 
Tinamou.</Species>
              <Species Scientific_Name="Crypturellus cinnamomeus">Thicket 
Tinamou.</Species>
              <Species Scientific_Name="Crypturellus boucardi">Slaty-breasted 
Tinamou.</Species>
              <Species Scientific_Name="Crypturellus kerriae">Choco 
Tinamou.</Species>
          </Family>
      </Order>
  <Order Name="GAVIIFORMES">
          <Family Name="GAVIIDAE">
              <Species Scientific_Name="Gavia stellata">Red-throated 
Loon.</Species>
              <Species Scientific_Name="Gavia arctica">Arctic Loon.</Species>
              <Species Scientific_Name="Gavia pacifica">Pacific Loon.</Species>
              <Species Scientific_Name="Gavia immer">Common Loon.</Species>
              <Species Scientific_Name="Gavia adamsii">Yellow-billed 
Loon.</Species>
          </Family>
      </Order>
  
  
  <Order Name="PODICIPEDIFORMES">
          <Family Name="PODICIPEDIDAE">
              <Species Scientific_Name="Tachybaptus dominicus">Least 
Grebe.</Species>
              <Species Scientific_Name="Podilymbus podiceps">Pied-billed 
Grebe.</Species>
              <Species Scientific_Name="">Atitlan Grebe.</Species>
              <Species Scientific_Name="">Horned Grebe.</Species>
              <Species Scientific_Name="">Red-necked Grebe.</Species>
              <Species Scientific_Name="">Eared Grebe.</Species>
              <Species Scientific_Name="">Western Grebe.</Species>
              <Species Scientific_Name="">Clark's Grebe.</Species>
              <Species Scientific_Name=""/>
          </Family>
      </Order>
  
  
  <Order Name="PROCELLARIIFORMES">
          <Family Name="DIOMEDEIDAE">
              <Species Scientific_Name="Thalassarche 
chlororhynchos">Yellow-nosed Albatross. (A)</Species>
              <Species Scientific_Name="Thalassarche cauta">Shy Albatross. 
(A)</Species>
              <Species Scientific_Name="Thalassarche melanophris">Black-browed 
Albatross. (A)</Species>
              <Species Scientific_Name="Phoebetria palpebrata">Light-mantled 
Albatross. (A)</Species>
              <Species Scientific_Name="Diomedea exulans">Wandering Albatross. 
(A)</Species>
              <Species Scientific_Name="Phoebastria immutabilis">Laysan 
Albatross.</Species>
              <Species Scientific_Name="Phoebastria nigripes">Black-footed 
Albatross.</Species>
              <Species Scientific_Name="Phoebastria albatrus">Short-tailed 
Albatross. (N)</Species>
          </Family>
          <Family Name="PROCELLARIIDAE">
              <Species Scientific_Name="Fulmarus glacialis">Northern 
Fulmar.</Species>
              <Species Scientific_Name="Pterodroma neglecta">Kermadec Petrel. 
(A)</Species>
              <Species Scientific_Name="Pterodroma arminjoniana">Herald Petrel. 
(A)</Species>
              <Species Scientific_Name="Pterodroma ultima">Murphy's Petrel. 
(N)</Species>
              <Species Scientific_Name="Pterodroma inexpectata">Mottled Petrel. 
(A)</Species>
              <Species Scientific_Name="Pterodroma cahow">Bermuda 
Petrel.</Species>
              <Species Scientific_Name="Pterodroma hasitata">Black-capped 
Petrel.</Species>
              <Species Scientific_Name="Pterodroma externa">Juan Fernandez 
Petrel. (N)</Species>
              <Species Scientific_Name="Pterodroma phaeopygia">Dark-rumped 
Petrel.</Species>
              <Species Scientific_Name="Pterodroma cervicalis">White-necked 
Petrel. (H)</Species>
              <Species Scientific_Name="Pterodroma hypoleuca">Bonin Petrel. 
(H)</Species>
              <Species Scientific_Name="Pterodroma nigripennis">Black-winged 
Petrel. (H, A)</Species>
              <Species Scientific_Name="Pterodroma cookii">Cook's Petrel. 
(N)</Species>
              <Species Scientific_Name="Pterodroma longirostris">Stejneger's 
Petrel. (A)</Species>
              <Species Scientific_Name="Bulweria bulwerii">Bulwer's Petrel. 
(H)</Species>
              <Species Scientific_Name="Bulweria fallax">Jouanin's Petrel. (H, 
A)</Species>
              <Species Scientific_Name="Procellaria parkinsoni">Parkinson's 
Petrel. (N)</Species>
              <Species Scientific_Name="Calonectris leucomelas">Streaked 
Shearwater. (A)</Species>
              <Species Scientific_Name="Calonectris diomedea">Cory's 
Shearwater. (N)</Species>
              <Species Scientific_Name="Puffinus creatopus">Pink-footed 
Shearwater. (N)</Species>
              <Species Scientific_Name="Puffinus carneipes">Flesh-footed 
Shearwater. (N)</Species>
              <Species Scientific_Name="Puffinus gravis">Greater Shearwater. 
(N)</Species>
              <Species Scientific_Name="Puffinus pacificus">Wedge-tailed 
Shearwater.</Species>
              <Species Scientific_Name="Puffinus bulleri">Buller's Shearwater. 
(N)</Species>
              <Species Scientific_Name="Puffinus griseus">Sooty Shearwater. 
(N)</Species>
              <Species Scientific_Name="Puffinus tenuirostris">Short-tailed 
Shearwater. (N)</Species>
              <Species Scientific_Name="Puffinus nativitatis">Christmas 
Shearwater. (H)</Species>
              <Species Scientific_Name="Puffinus puffinus">Manx 
Shearwater.</Species>
              <Species Scientific_Name="Puffinus auricularis">Townsend's 
Shearwater.</Species>
              <Species Scientific_Name="Puffinus opisthomelas">Black-vented 
Shearwater.</Species>
              <Species Scientific_Name="Puffinus lherminieri">Audubon's 
Shearwater.</Species>
              <Species Scientific_Name="Puffinus assimilis">Little Shearwater. 
(A)</Species>
          </Family>
          <Family Name="HYDROBATIDAE">
              <Species Scientific_Name="Oceanites oceanicus">Wilson's 
Storm-Petrel. (N)</Species>
              <Species Scientific_Name="Pelagodroma marina">White-faced 
Storm-Petrel. (A)</Species>
              <Species Scientific_Name="Hydrobates pelagicus">European 
Storm-Petrel. (A)</Species>
              <Species Scientific_Name="Oceanodroma furcata">Fork-tailed 
Storm-Petrel.</Species>
              <Species Scientific_Name="Oceanodroma leucorhoa">Leach's 
Storm-Petrel.</Species>
              <Species Scientific_Name="Oceanodroma homochroa">Ashy 
Storm-Petrel.</Species>
              <Species Scientific_Name="Oceanodroma castro">Band-rumped 
Storm-Petrel. (N)</Species>
              <Species Scientific_Name="Oceanodroma tethys">Wedge-rumped 
Storm-Petrel. (N)</Species>
              <Species Scientific_Name="Oceanodroma melania">Black 
Storm-Petrel.</Species>
              <Species Scientific_Name="Oceanodroma macrodactyla">Guadalupe 
Storm-Petrel.</Species>
              <Species Scientific_Name="Oceanodroma markhami">Markham's 
Storm-Petrel. (A)</Species>
              <Species Scientific_Name="Oceanodroma tristrami">Tristram's 
Storm-Petrel. (H)</Species>
              <Species Scientific_Name="Oceanodroma microsoma">Least 
Storm-Petrel.</Species>
          </Family>
      </Order>
  
  <Order Name="PELECANIFORMES">
          <Family Name="PHAETHONTIDAE">
              <Species Scientific_Name="Phaethon lepturus">White-tailed 
Tropicbird.</Species>
              <Species Scientific_Name="Phaethon aethereus">Red-billed 
Tropicbird.</Species>
              <Species Scientific_Name="Phaethon rubricauda">Red-tailed 
Tropicbird.</Species>
          </Family>
          <Family Name="SULIDAE">
              <Species Scientific_Name="Sula dactylatra">Masked Booby.</Species>
              <Species Scientific_Name="Sula nebouxii">Blue-footed 
Booby.</Species>
              <Species Scientific_Name="Sula variegata">Peruvian Booby. 
(A)</Species>
              <Species Scientific_Name="Sula leucogaster">Brown Booby.</Species>
              <Species Scientific_Name="Sula sula">Red-footed Booby.</Species>
              <Species Scientific_Name="Morus bassanus">Northern 
Gannet.</Species>
          </Family>
          <Family Name="PELECANIDAE">
              <Species Scientific_Name="Pelecanus erythrorhynchos">American 
White Pelican.</Species>
              <Species Scientific_Name="Pelecanus occidentalis">Brown 
Pelican.</Species>
          </Family>
          <Family Name="PHALACROCORACIDAE">
              <Species Scientific_Name="Phalacrocorax penicillatus">Brandt's 
Cormorant.</Species>
              <Species Scientific_Name="Phalacrocorax brasilianus">Neotropic 
Cormorant.</Species>
              <Species Scientific_Name="Phalacrocorax auritus">Double-crested 
Cormorant.</Species>
              <Species Scientific_Name="Phalacrocorax carbo">Great 
Cormorant.</Species>
              <Species Scientific_Name="Phalacrocorax urile">Red-faced 
Cormorant.</Species>
              <Species Scientific_Name="Phalacrocorax pelagicus">Pelagic 
Cormorant.</Species>
          </Family>
          <Family Name="ANHINGIDAE">
              <Species Scientific_Name="Anhinga anhinga">Anhinga.</Species>
          </Family>
          <Family Name="FREGATIDAE">
              <Species Scientific_Name="Fregata magnificens">Magnificent 
Frigatebird.</Species>
              <Species Scientific_Name="Fregata minor">Great 
Frigatebird.</Species>
              <Species Scientific_Name="Fregata ariel">Lesser Frigatebird. 
(A)</Species>
          </Family>
      </Order>
  </Class>
  
  
  
  1.1                  xml-xalan/c/samples/ThreadSafe/birds.xsl
  
  Index: birds.xsl
  ===================================================================
  <?xml version="1.0"?> 
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
version="1.0">
    <xsl:output method="xml" indent="yes"/>
  
  <xsl:template match="Class">
  <BirdInfo>
        <xsl:apply-templates select="Order"/>
  </BirdInfo>
  </xsl:template>
  
  <xsl:template match="Order">
  Order is:  <xsl:value-of select="@Name"/>
        <xsl:apply-templates select="Family"/><xsl:text>
  </xsl:text>
  </xsl:template>
  
  <xsl:template match="Family">
        Family is:  <xsl:value-of select="@Name"/>
        <xsl:apply-templates select="Species | SubFamily | text()"/>
  </xsl:template>
  
  <xsl:template match="SubFamily">
                SubFamily is <xsl:value-of select="@Name"/>
      <xsl:apply-templates select="Species | text()"/>
  </xsl:template>
  
  <xsl:template match="Species">
        <xsl:choose>
          <xsl:when test="name(..)='SubFamily'">
                <xsl:text>      </xsl:text><xsl:value-of select="."/><xsl:text> 
</xsl:text><xsl:value-of select="@Scientific_Name"/>
          </xsl:when>
          <xsl:otherwise>
                <xsl:value-of select="."/><xsl:text> </xsl:text><xsl:value-of 
select="@Scientific_Name"/>
          </xsl:otherwise>
        </xsl:choose>
  </xsl:template>
  
  </xsl:stylesheet>
  
  
  
  1.1                  xml-xalan/c/samples/ThreadSafe/ThreadSafe.cpp
  
  Index: ThreadSafe.cpp
  ===================================================================
  #include <cassert>
  #include <fstream>
  #include <iostream>
  #include <strstream>
  
  #include <util/PlatformUtils.hpp>
  
  #include <PlatformSupport/DOMStringHelper.hpp>
  #include <DOMSupport/DOMSupportDefault.hpp>
  
  #include <XPath/XObjectFactoryDefault.hpp>
  #include <XPath/XPathSupportDefault.hpp>
  #include <XPath/XPathFactoryDefault.hpp>
  
  #include <XSLT/StylesheetConstructionContextDefault.hpp>
  #include <XSLT/StylesheetExecutionContextDefault.hpp>
  #include <XSLT/StylesheetRoot.hpp>
  #include <XSLT/XSLTEngineImpl.hpp>
  #include <XSLT/XSLTInputSource.hpp>
  #include <XSLT/XSLTProcessorEnvSupportDefault.hpp>
  #include <XSLT/XSLTResultTarget.hpp>
  
  #include <XercesParserLiaison/XercesParserLiaison.hpp>
  
  #include <XercesPlatformSupport/TextFileOutputStream.hpp>
  #include <XercesPlatformSupport/XercesDOMPrintWriter.hpp>
  
  //This is here for the Windows threads.
  #define WIN32_LEAN_AND_MEAN
  #include <windows.h>
  #include <winbase.h>
  #define THREADFUNCTIONRETURN DWORD WINAPI
  
  #if !defined(XALAN_NO_NAMESPACES)
        using std::cerr;
        using std::cout;
        using std::endl;
        using std::ifstream;
        using std::ios_base;
        using std::ostrstream;
        using std::string;
  #endif
  
  // Used to hold compiled stylesheet, and XML source document.
  StylesheetRoot* glbStylesheetRoot;
  XSLTInputSource* glbSourceDoc;
  
  // Print messages tracking the progress of each thread, and the
  // beginning and end of the entire operation.
  void outputMessage(DWORD id, char msg[])
  {
                ostrstream threadMsg;
        
                threadMsg << "\n" << msg << " Thread: " << id << '\0';
                cout << threadMsg.str();
                threadMsg.freeze(false);
  }
  
  
  THREADFUNCTIONRETURN theThread(LPVOID param)
  {
  // This routine uses a compiled stylesheet (glbStylesheetRoot), 
  // and a binary input source (glbSourceDoc) to perform the 
  // transformation.
     
        const int       number = reinterpret_cast<int>(param);
        const DWORD             theThreadID = GetCurrentThreadId();
  
        // Create the support objects that are necessary for running the 
processor...
        DOMSupportDefault                               theDOMSupport;
        XercesParserLiaison                             
theParserLiaison(theDOMSupport);
        XPathSupportDefault                             
theXPathSupport(theDOMSupport);
        XSLTProcessorEnvSupportDefault  theXSLTProcessorEnvSupport;
        XObjectFactoryDefault                   
theXObjectFactory(theXSLTProcessorEnvSupport,
                                                                                
                          theXPathSupport);
        XPathFactoryDefault                             theXPathFactory;
  
        // Create a processor...and output start message.
        XSLTEngineImpl  theProcessor(
                                        theParserLiaison,
                                        theXPathSupport,
                                        theXSLTProcessorEnvSupport,
                                        theXObjectFactory,
                                        theXPathFactory);
        outputMessage(theThreadID,"Starting ");
  
        // Connect the processor to the support object...
        theXSLTProcessorEnvSupport.setProcessor(&theProcessor);
  
        // The execution context uses the same factory support objects as
        // the processor, since those objects have the same lifetime as
        // other objects created as a result of the execution.
        StylesheetExecutionContextDefault       ssExecutionContext(
                                                theProcessor,
                                                theXSLTProcessorEnvSupport,
                                                theXPathSupport,
                                                theXObjectFactory);
  
        // Generate the output file name for this thread.
      ostrstream theFormatterOut;
      theFormatterOut << "birds" << number << ".out" << '\0';
  
        //Generate the XML output object.
        XSLTResultTarget        theResultTarget(theFormatterOut.str());
  
        // Unfreeze the ostrstream, so memory is returned...
        theFormatterOut.freeze(false);
  
        // Set the processor to use the compiled stylesheet. Then do the 
transform
    // with the process() method that uses the compiled stylesheet.
        // Report both the start of the transformation and the termination of 
the thread.
        theProcessor.setStylesheetRoot(glbStylesheetRoot);
        outputMessage(theThreadID,"Transforming");
    theProcessor.process(*glbSourceDoc,theResultTarget,ssExecutionContext);
        outputMessage(theThreadID,"Finishing");
        return (0);
  }
  
  // Create and run the threads...
  // Print messages tracking the progress of each thread...
  void doThreads(int x)
  {
        DWORD dwStackSize = 4096;               // initial thread stack size
        LPTHREAD_START_ROUTINE lpStartAddress = 
(LPTHREAD_START_ROUTINE)theThread;
        DWORD dwCreationFlags = 0;              // creation flags
        int nThreads = x;
  
        std::vector<HANDLE> hThreads;
        hThreads.reserve(nThreads);
        int i=0;
        
        try
        {
                cout << endl << "Clock before starting threads: " << clock() << 
endl;
  
                for (i=0; i< nThreads; i++)
                        {
                                HANDLE hThread;
                                DWORD  threadID;
  
                                hThread = CreateThread(
                                        0, dwStackSize,
                                        lpStartAddress,                         
              // pointer to thread function
                                        reinterpret_cast<LPVOID>(i),    // 
argument for new thread
                                        dwCreationFlags,                        
              // creation flags
                                        &threadID);
                                assert(hThread != 0);
                                hThreads.push_back(hThread);
                        }
                WaitForMultipleObjects(hThreads.size(), &hThreads[0], TRUE, 
INFINITE);
  
                cout << endl << "Clock after threads: " << clock() << endl;
  
                for (i=0; i< nThreads; i++)
                        CloseHandle(hThreads[i]);
        }
        catch(...)
        {
                cerr << "Exception caught!!!"
                         << endl
                        << endl;
        }
  }
  
  
  int main(int argc, const char*        /* argv */[])
  {
  
        if (argc != 1)
        {
                cerr << "Usage: ThreadTest"
                         << endl
                         << endl;
        }
        else
        {
                try
                {
                        // Call the static initializers...
                        XMLPlatformUtils::Initialize();
                        XSLTEngineImpl::Initialize();
  
                        // Create the support objects required to run the 
processor...
                        DOMSupportDefault                                       
ssDOMSupport;
                        XercesParserLiaison                                   
ssParserLiaison(ssDOMSupport);
                        XPathSupportDefault                                   
ssXPathSupport(ssDOMSupport);
                        XSLTProcessorEnvSupportDefault  
ssXSLTProcessorEnvSupport;
                        XObjectFactoryDefault                         
ssXObjectFactory(ssXSLTProcessorEnvSupport,
                                                                                
                                                                 
ssXPathSupport);
                        XPathFactoryDefault                                   
ssXPathFactory;
  
                        // Create a processor...
        // This processor is used to compile the stylesheet. 
        // Each thread uses its own processor to perform a transformation.
  
                        XSLTEngineImpl  ssProcessor(
                                                  ssParserLiaison,
                                ssXPathSupport,
                                        ssXSLTProcessorEnvSupport,
                                          ssXObjectFactory,
                                          ssXPathFactory);
  
                        // Create separate factory support objects so the 
stylesheet's
                        // factory-created XObject and XPath instances are 
independent 
                        // from the processor's.
                        XObjectFactoryDefault   ssStylesheetXObjectFactory(
                                                                        
ssXSLTProcessorEnvSupport,
                                                                        
ssXPathSupport);
                        XPathFactoryDefault             
ssStylesheetXPathFactory;
  
                        // Create a stylesheet construction context, using the
                        // stylesheet's factory support objects.
                        StylesheetConstructionContextDefault    
ssConstructionContext(
                                                                                
                        ssProcessor,
                                                                                
                        ssXSLTProcessorEnvSupport,
                                                                                
                        ssStylesheetXObjectFactory,
                                                                                
                        ssStylesheetXPathFactory);
  
                        const XalanDOMString  theXSLFileName("birds.xsl");
                        const XalanDOMString  theXMLFileName("birds.xml");
  
                        // Our stylesheet input source...
                        XSLTInputSource         
ssStylesheetSourceXSL(c_wstr(theXSLFileName));
  
                        // Use the processor to create a StylesheetRoot for the 
specified
                        // input XSL.  This is the compiled stylesheet.  We 
don't have to
                        // delete it, since it is owned by the 
StylesheetConstructionContext
                        // instance.
                        glbStylesheetRoot = 
ssProcessor.processStylesheet(ssStylesheetSourceXSL,
                                                                                
                           ssConstructionContext);
                        assert(glbStylesheetRoot != 0);
                        
                        // Compile the XML source document as well. All threads 
will use
        // this binary representation of the source tree.
                        glbSourceDoc = new 
XSLTInputSource(c_wstr(theXMLFileName));
        assert(glbSourceDoc != 0);
  
  
        // Create and run the threads...
        // Every thread uses the same XML input object
        // XSL stylesheet object to perform a transformation.
                        doThreads(10);
                }
                catch(...)
                {
                        cerr << "Exception caught!!!"
                                 << endl
                                 << endl;
                }
        }
  
        return 0;
  }
  
  
  
  1.1                  xml-xalan/c/samples/ThreadSafe/ThreadSafe.dsp
  
  Index: ThreadSafe.dsp
  ===================================================================
  # Microsoft Developer Studio Project File - Name="ThreadSafe" - Package 
Owner=<4>
  # Microsoft Developer Studio Generated Build File, Format Version 6.00
  # ** DO NOT EDIT **
  
  # TARGTYPE "Win32 (x86) Console Application" 0x0103
  
  CFG=ThreadSafe - Win32 Debug
  !MESSAGE This is not a valid makefile. To build this project using NMAKE,
  !MESSAGE use the Export Makefile command and run
  !MESSAGE 
  !MESSAGE NMAKE /f "ThreadSafe.mak".
  !MESSAGE 
  !MESSAGE You can specify a configuration when running NMAKE
  !MESSAGE by defining the macro CFG on the command line. For example:
  !MESSAGE 
  !MESSAGE NMAKE /f "ThreadSafe.mak" CFG="ThreadSafe - Win32 Debug"
  !MESSAGE 
  !MESSAGE Possible choices for configuration are:
  !MESSAGE 
  !MESSAGE "ThreadSafe - Win32 Release" (based on "Win32 (x86) Console 
Application")
  !MESSAGE "ThreadSafe - Win32 Debug" (based on "Win32 (x86) Console 
Application")
  !MESSAGE 
  
  # Begin Project
  # PROP AllowPerConfigDependencies 0
  # PROP Scc_ProjName ""
  # PROP Scc_LocalPath ""
  CPP=cl.exe
  RSC=rc.exe
  
  !IF  "$(CFG)" == "ThreadSafe - Win32 Release"
  
  # PROP BASE Use_MFC 0
  # PROP BASE Use_Debug_Libraries 0
  # PROP BASE Output_Dir "Release"
  # PROP BASE Intermediate_Dir "Release"
  # PROP BASE Target_Dir ""
  # PROP Use_MFC 0
  # PROP Use_Debug_Libraries 0
  # PROP Output_Dir "..\..\Build\Win32\VC6\Release"
  # PROP Intermediate_Dir "..\..\Build\Win32\VC6\Release\ThreadSafe"
  # PROP Ignore_Export_Lib 0
  # PROP Target_Dir ""
  # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D 
"_MBCS" /YX /FD /c
  # ADD CPP /nologo /MD /W3 /GR /GX /O2 /I "..\..\..\..\xml-xerces\c\src" /I 
"..\..\src" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
  # ADD BASE RSC /l 0x409 /d "NDEBUG"
  # ADD RSC /l 0x409 /d "NDEBUG"
  BSC32=bscmake.exe
  # ADD BASE BSC32 /nologo
  # ADD BSC32 /nologo
  LINK32=link.exe
  # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib /nologo /subsystem:console /machine:I386
  # ADD LINK32 ..\..\..\..\xml-xerces\c\Build\Win32\VC6\Release\*.lib 
..\..\Build\Win32\VC6\Release\*.lib kernel32.lib user32.lib gdi32.lib 
winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib 
uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
  
  !ELSEIF  "$(CFG)" == "ThreadSafe - Win32 Debug"
  
  # PROP BASE Use_MFC 0
  # PROP BASE Use_Debug_Libraries 1
  # PROP BASE Output_Dir "Debug"
  # PROP BASE Intermediate_Dir "Debug"
  # PROP BASE Target_Dir ""
  # PROP Use_MFC 0
  # PROP Use_Debug_Libraries 1
  # PROP Output_Dir "..\..\Build\Win32\VC6\Debug"
  # PROP Intermediate_Dir "..\..\Build\Win32\VC6\Debug\ThreadSafe"
  # PROP Ignore_Export_Lib 0
  # PROP Target_Dir ""
  # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D 
"_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
  # ADD CPP /nologo /MDd /W3 /Gm /GR /GX /ZI /Od /I 
"..\..\..\..\xml-xerces\c\src" /I "..\..\src" /D "WIN32" /D "_DEBUG" /D 
"_CONSOLE" /D "_MBCS" /D "XML_DEBUG" /YX /FD /GZ /c
  # ADD BASE RSC /l 0x409 /d "_DEBUG"
  # ADD RSC /l 0x409 /d "_DEBUG"
  BSC32=bscmake.exe
  # ADD BASE BSC32 /nologo
  # ADD BSC32 /nologo
  LINK32=link.exe
  # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib 
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib 
odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
  # ADD LINK32 ..\..\..\..\xml-xerces\c\Build\Win32\VC6\Debug\*.lib 
..\..\Build\Win32\VC6\Debug\*.lib kernel32.lib user32.lib gdi32.lib 
winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib 
uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib 
comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 
odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 
/pdbtype:sept
  
  !ENDIF 
  
  # Begin Target
  
  # Name "ThreadSafe - Win32 Release"
  # Name "ThreadSafe - Win32 Debug"
  # Begin Group "Source Files"
  
  # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
  # Begin Source File
  
  SOURCE=.\ThreadSafe.cpp
  # End Source File
  # End Group
  # Begin Group "Header Files"
  
  # PROP Default_Filter "h;hpp;hxx;hm;inl"
  # End Group
  # Begin Group "Resource Files"
  
  # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
  # End Group
  # End Target
  # End Project
  
  
  

Reply via email to