summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2001-07-19 22:14:34 +0000
committerMarc Laukien <marc@zeroc.com>2001-07-19 22:14:34 +0000
commit032f424df7f4dec8ab18cc21f865bddad38c4f50 (patch)
tree2f6e777d7cd3ee28df8e02e8dc23118110fba70d /cpp/src
parenterror checking (diff)
downloadice-032f424df7f4dec8ab18cc21f865bddad38c4f50.tar.bz2
ice-032f424df7f4dec8ab18cc21f865bddad38c4f50.tar.xz
ice-032f424df7f4dec8ab18cc21f865bddad38c4f50.zip
started with slice2docbook; removed slice2html
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Slice/Parser.cpp51
-rw-r--r--cpp/src/slice2docbook/.depend0
-rw-r--r--cpp/src/slice2docbook/Gen.cpp332
-rw-r--r--cpp/src/slice2docbook/Gen.h53
-rw-r--r--cpp/src/slice2docbook/GenUtil.cpp77
-rw-r--r--cpp/src/slice2docbook/GenUtil.h25
-rw-r--r--cpp/src/slice2docbook/Main.cpp164
-rw-r--r--cpp/src/slice2docbook/Makefile31
-rw-r--r--cpp/src/slice2docbook/docbook.dsp118
9 files changed, 851 insertions, 0 deletions
diff --git a/cpp/src/Slice/Parser.cpp b/cpp/src/Slice/Parser.cpp
index 7d90baaf121..a45b517766e 100644
--- a/cpp/src/Slice/Parser.cpp
+++ b/cpp/src/Slice/Parser.cpp
@@ -890,6 +890,44 @@ Slice::ClassDef::createOperation(const string& name,
return 0;
}
+ {
+ TypeStringList allParams = inParams;
+ allParams.insert(allParams.end(), outParams.begin(), outParams.end());
+
+ TypeStringList::iterator p = allParams.begin();
+ while(p != allParams.end())
+ {
+ TypeStringList::iterator q = p;
+ ++q;
+ while(q != allParams.end())
+ {
+ if(p -> second == q -> second)
+ {
+ string msg = "duplicate parameter `";
+ msg += p -> second;
+ msg += "'";
+ yyerror(msg);
+ return 0;
+ }
+ ++q;
+ }
+ ++p;
+ }
+ }
+
+ if(name == this -> name())
+ {
+ string msg;
+ if(isInterface())
+ msg = "interface name `";
+ else
+ msg = "class name `";
+ msg += name;
+ msg += "' can not be used as operation";
+ yyerror(msg);
+ return 0;
+ }
+
Operation_ptr p = new Operation(this, name, returnType,
inParams, outParams, throws);
contents_.push_back(p);
@@ -924,6 +962,19 @@ Slice::ClassDef::createDataMember(const string& name, const Type_ptr& type)
return 0;
}
+ if(name == this -> name())
+ {
+ string msg;
+ if(isInterface())
+ msg = "interface name `";
+ else
+ msg = "class name `";
+ msg += name;
+ msg += "' can not be used as data member";
+ yyerror(msg);
+ return 0;
+ }
+
DataMember_ptr p = new DataMember(this, name, type);
contents_.push_back(p);
return p;
diff --git a/cpp/src/slice2docbook/.depend b/cpp/src/slice2docbook/.depend
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/cpp/src/slice2docbook/.depend
diff --git a/cpp/src/slice2docbook/Gen.cpp b/cpp/src/slice2docbook/Gen.cpp
new file mode 100644
index 00000000000..24f3e551de0
--- /dev/null
+++ b/cpp/src/slice2docbook/Gen.cpp
@@ -0,0 +1,332 @@
+// **********************************************************************
+//
+// Copyright (c) 2001
+// MutableRealms, Inc.
+// Huntsville, AL, USA
+//
+// All Rights Reserved
+//
+// **********************************************************************
+
+#include <Ice/Functional.h>
+#include <Gen.h>
+#include <GenUtil.h>
+
+using namespace std;
+using namespace Slice;
+
+Slice::Gen::Gen(const string& name)
+ : name_(name)
+{
+}
+
+Slice::Gen::~Gen()
+{
+}
+
+bool
+Slice::Gen::operator!() const
+{
+ return false;
+}
+
+void
+Slice::Gen::generate(const Unit_ptr& unit)
+{
+ unit -> mergeModules();
+ unit -> sort();
+ unit -> visit(this);
+}
+
+void
+Slice::Gen::printHeader(Output& out)
+{
+ static const char* header =
+ "Copyright (c) 2001\n"
+ "MutableRealms, Inc.\n"
+ "Huntsville, AL, USA\n"
+ "\n"
+ "All Rights Reserved\n"
+ "\n"
+ "Generated by the `slice2docbook' converter\n";
+
+ out << header;
+}
+
+void
+Slice::Gen::visitUnitStart(const Unit_ptr& p)
+{
+ string file = scopedToFile("toplevel");
+ outputStack_.push(new Output(file.c_str()));
+ Output& out = *outputStack_.top();
+ if(!out)
+ {
+ cerr << name_ << ": can't open `" << file << "' for writing: "
+ << strerror(errno) << endl;
+ return;
+ }
+ printHeader(out);
+}
+
+void
+Slice::Gen::visitUnitEnd(const Unit_ptr& p)
+{
+ Output& out = *outputStack_.top();
+ if(!out)
+ return;
+
+ out << '\n';
+
+ delete outputStack_.top();
+ outputStack_.pop();
+}
+
+void
+Slice::Gen::visitModuleStart(const Module_ptr& p)
+{
+ {
+ Output& out = *outputStack_.top();
+ if(!out)
+ return;
+
+ out << sp;
+ out << nl << "module " << p -> name() << ';';
+ }
+
+ {
+ string file = scopedToFile(p -> scoped());
+ outputStack_.push(new Output(file.c_str()));
+ Output& out = *outputStack_.top();
+ if(!out)
+ {
+ cerr << name_ << ": can't open `" << file << "' for writing: "
+ << strerror(errno) << endl;
+ return;
+ }
+ printHeader(out);
+
+ string comment = p -> comment();
+ if(comment.length())
+ {
+ out << sp;
+ out << nl << comment;
+ }
+
+ out << sp;
+ out << nl << "module " << p -> name();
+ out << sb;
+ out.dec();
+ }
+}
+
+void
+Slice::Gen::visitModuleEnd(const Module_ptr& p)
+{
+ Output& out = *outputStack_.top();
+ if(!out)
+ return;
+
+ out << sp;
+ out.inc();
+ out << eb << ';';
+
+ delete outputStack_.top();
+ outputStack_.pop();
+}
+
+void
+Slice::Gen::visitClassDefStart(const ClassDef_ptr& p)
+{
+ {
+ Output& out = *outputStack_.top();
+ if(!out)
+ return;
+
+ out << sp;
+ out << nl;
+ if(p -> isLocal())
+ out << "isLocal ";
+ out << "class " << p -> name() << ';';
+ }
+
+ {
+ string file = scopedToFile(p -> scoped());
+ outputStack_.push(new Output(file.c_str()));
+ Output& out = *outputStack_.top();
+ if(!out)
+ {
+ cerr << name_ << ": can't open `" << file << "' for writing: "
+ << strerror(errno) << endl;
+ return;
+ }
+ printHeader(out);
+
+ string comment = p -> comment();
+ if(comment.length())
+ {
+ out << sp;
+ out << nl << comment;
+ }
+
+ out << sp;
+ out << nl;
+ if(p -> isLocal())
+ out << "local ";
+ if(p -> isInterface())
+ out << "interface ";
+ else
+ out << "class ";
+ out << p -> name();
+ ClassList bases = p -> bases();
+ if(!bases.empty() && !bases.front() -> isInterface())
+ {
+ out << " extends " << bases.front() -> scoped().substr(2);
+ bases.pop_front();
+ }
+ if(!bases.empty())
+ {
+ if(p -> isInterface())
+ out << " extends ";
+ else
+ out << " implements ";
+ }
+ ClassList::iterator q = bases.begin();
+ while(q != bases.end())
+ {
+ out << (*q) -> scoped().substr(2);
+ if(++q != bases.end())
+ out << ", ";
+ }
+ out << sb;
+ }
+}
+
+void
+Slice::Gen::visitClassDefEnd(const ClassDef_ptr& p)
+{
+ Output& out = *outputStack_.top();
+ if(!out)
+ return;
+
+ out << eb << ';';
+
+ delete outputStack_.top();
+ outputStack_.pop();
+}
+
+void
+Slice::Gen::visitOperation(const Operation_ptr& p)
+{
+ Output& out = *outputStack_.top();
+ if(!out)
+ return;
+
+ Type_ptr returnType = p -> returnType();
+ TypeStringList inputParams = p -> inputParameters();
+ TypeStringList outputParams = p -> outputParameters();
+ TypeList throws = p -> throws();
+
+ string comment = p -> comment();
+ if(comment.length())
+ {
+ out << sp;
+ out << nl << comment;
+ }
+
+ out << sp;
+ out << nl << (returnType ? typeToString(returnType) : "void") << ' '
+ << p -> name() << '(';
+ out.useCurrentPosAsIndent();
+ TypeStringList::iterator q = inputParams.begin();
+ while(q != inputParams.end())
+ {
+ out << typeToString(q -> first) << ' ' << q -> second;
+ if(++q != inputParams.end())
+ out << ',' << nl;
+ }
+ if(!outputParams.empty())
+ {
+ out << ';' << nl;
+ q = outputParams.begin();
+ while(q != outputParams.end())
+ {
+ out << typeToString(q -> first) << ' ' << q -> second;
+ if(++q != outputParams.end())
+ out << ',' << nl;
+ }
+ }
+ out << ')';
+ out.restoreIndent();
+ if(!throws.empty())
+ {
+ out.inc();
+ out << nl << "throws ";
+ out.useCurrentPosAsIndent();
+ TypeList::iterator r = throws.begin();
+ while(r != throws.end())
+ {
+ out << typeToString(*r);
+ if(++r != throws.end())
+ out << ',' << nl;
+ }
+ out.restoreIndent();
+ out.dec();
+ }
+ out << ';';
+}
+
+void
+Slice::Gen::visitDataMember(const DataMember_ptr& p)
+{
+ Output& out = *outputStack_.top();
+ if(!out)
+ return;
+
+ string comment = p -> comment();
+ if(comment.length())
+ {
+ out << sp;
+ out << nl << comment;
+ }
+
+ out << sp;
+ out << nl << typeToString(p -> type()) << ' ' << p -> name() << ';';
+}
+
+void
+Slice::Gen::visitVector(const Vector_ptr& p)
+{
+ Output& out = *outputStack_.top();
+ if(!out)
+ return;
+
+ string comment = p -> comment();
+ if(comment.length())
+ {
+ out << sp;
+ out << nl << comment;
+ }
+
+ out << sp;
+ out << nl << "vector< " << typeToString(p -> type()) << " > "
+ << p -> name() << ';';
+}
+
+void
+Slice::Gen::visitNative(const Native_ptr& p)
+{
+ Output& out = *outputStack_.top();
+ if(!out)
+ return;
+
+ string comment = p -> comment();
+ if(comment.length())
+ {
+ out << sp;
+ out << nl << comment;
+ }
+
+ out << sp;
+ out << nl << "native " << p -> name() << ';';
+}
+
diff --git a/cpp/src/slice2docbook/Gen.h b/cpp/src/slice2docbook/Gen.h
new file mode 100644
index 00000000000..1bb2146f0f3
--- /dev/null
+++ b/cpp/src/slice2docbook/Gen.h
@@ -0,0 +1,53 @@
+// **********************************************************************
+//
+// Copyright (c) 2001
+// MutableRealms, Inc.
+// Huntsville, AL, USA
+//
+// All Rights Reserved
+//
+// **********************************************************************
+
+#ifndef GEN_H
+#define GEN_H
+
+#include <Parser.h>
+#include <OutputUtil.h>
+#include <stack>
+
+namespace Slice
+{
+
+class Gen : ::__Ice::noncopyable, public ParserVisitor
+{
+public:
+
+ Gen(const std::string&);
+ virtual ~Gen();
+
+ bool operator!() const; // Returns true if there was a constructor error
+
+ void generate(const Unit_ptr&);
+
+ virtual void visitUnitStart(const Unit_ptr&);
+ virtual void visitUnitEnd(const Unit_ptr&);
+ virtual void visitModuleStart(const Module_ptr&);
+ virtual void visitModuleEnd(const Module_ptr&);
+ virtual void visitClassDefStart(const ClassDef_ptr&);
+ virtual void visitClassDefEnd(const ClassDef_ptr&);
+ virtual void visitOperation(const Operation_ptr&);
+ virtual void visitDataMember(const DataMember_ptr&);
+ virtual void visitVector(const Vector_ptr&);
+ virtual void visitNative(const Native_ptr&);
+
+private:
+
+ void printHeader(Output&);
+
+ std::string name_;
+ std::stack<Output*> outputStack_;
+};
+
+}
+
+#endif
diff --git a/cpp/src/slice2docbook/GenUtil.cpp b/cpp/src/slice2docbook/GenUtil.cpp
new file mode 100644
index 00000000000..fa2f0de0045
--- /dev/null
+++ b/cpp/src/slice2docbook/GenUtil.cpp
@@ -0,0 +1,77 @@
+// **********************************************************************
+//
+// Copyright (c) 2001
+// MutableRealms, Inc.
+// Huntsville, AL, USA
+//
+// All Rights Reserved
+//
+// **********************************************************************
+
+#include <GenUtil.h>
+
+using namespace std;
+using namespace Slice;
+
+string
+Slice::typeToString(const Type_ptr& type)
+{
+ static const char* builtinTable[] =
+ {
+ "byte",
+ "bool",
+ "short",
+ "int",
+ "long",
+ "float",
+ "double",
+ "string",
+ "wstring",
+ "Object",
+ "Object*",
+ "LocalObject"
+ };
+
+ Builtin_ptr builtin = Builtin_ptr::dynamicCast(type);
+ if(builtin)
+ return builtinTable[builtin -> kind()];
+
+ ClassDecl_ptr cl = ClassDecl_ptr::dynamicCast(type);
+ if(cl)
+ return cl -> scoped().substr(2);
+
+ Proxy_ptr proxy = Proxy_ptr::dynamicCast(type);
+ if(proxy)
+ return proxy -> _class() -> scoped().substr(2) + "*";
+
+ Contained_ptr contained = Contained_ptr::dynamicCast(type);
+ if(contained)
+ return contained -> scoped().substr(2);
+
+ return "???";
+}
+
+
+struct ToFile
+{
+ char operator()(char c)
+ {
+ if(c == ':')
+ return '_';
+ else
+ return c;
+ }
+};
+
+string
+Slice::scopedToFile(const string& scoped)
+{
+ string result;
+ if(scoped[0] == ':')
+ result = scoped.substr(2);
+ else
+ result = scoped;
+ transform(result.begin(), result.end(), result.begin(), ToFile());
+ result += ".sgml";
+ return result;
+}
diff --git a/cpp/src/slice2docbook/GenUtil.h b/cpp/src/slice2docbook/GenUtil.h
new file mode 100644
index 00000000000..dda7183a4b1
--- /dev/null
+++ b/cpp/src/slice2docbook/GenUtil.h
@@ -0,0 +1,25 @@
+// **********************************************************************
+//
+// Copyright (c) 2001
+// MutableRealms, Inc.
+// Huntsville, AL, USA
+//
+// All Rights Reserved
+//
+// **********************************************************************
+
+#ifndef GEN_UTIL_H
+#define GEN_UTIL_H
+
+#include <Parser.h>
+#include <OutputUtil.h>
+
+namespace Slice
+{
+
+std::string typeToString(const Type_ptr&);
+std::string scopedToFile(const std::string&);
+
+}
+
+#endif
diff --git a/cpp/src/slice2docbook/Main.cpp b/cpp/src/slice2docbook/Main.cpp
new file mode 100644
index 00000000000..559e0d99bfb
--- /dev/null
+++ b/cpp/src/slice2docbook/Main.cpp
@@ -0,0 +1,164 @@
+// **********************************************************************
+//
+// Copyright (c) 2001
+// MutableRealms, Inc.
+// Huntsville, AL, USA
+//
+// All Rights Reserved
+//
+// **********************************************************************
+
+#include <Gen.h>
+#include <fstream>
+
+using namespace std;
+using namespace Slice;
+
+void
+usage(const char* n)
+{
+ cerr << "Usage: " << n << " [options] slice-files ...\n";
+ cerr <<
+"Options:\n"
+"-h, --help Show this message.\n"
+"-DNAME Define NAME as 1.\n"
+"-DNAME=DEF Define NAME as DEF.\n"
+"-UNAME Remove any definition for NAME.\n"
+"-IDIR Put DIR in the include file search path.\n"
+"-d, --debug Print debug messages.\n"
+ ;
+}
+
+int
+main(int argc, char* argv[])
+{
+ string cpp("cpp -C");
+ vector<string> includePaths;
+ bool debug = false;
+
+ int idx = 1;
+ while(idx < argc)
+ {
+ if(strncmp(argv[idx], "-I", 2) == 0)
+ {
+ cpp += ' ';
+ cpp += argv[idx];
+
+ string path = argv[idx] + 2;
+ if(path.length())
+ includePaths.push_back(path);
+
+ for(int i = idx ; i + 1 < argc ; ++i)
+ argv[i] = argv[i + 1];
+ --argc;
+ }
+ else if(strncmp(argv[idx], "-D", 2) == 0 ||
+ strncmp(argv[idx], "-U", 2) == 0)
+ {
+ cpp += ' ';
+ cpp += argv[idx];
+
+ for(int i = idx ; i + 1 < argc ; ++i)
+ argv[i] = argv[i + 1];
+ --argc;
+ }
+ else if(strcmp(argv[idx], "-h") == 0 ||
+ strcmp(argv[idx], "--help") == 0)
+ {
+ usage(argv[0]);
+ return EXIT_SUCCESS;
+ }
+ else if(strcmp(argv[idx], "-d") == 0 ||
+ strcmp(argv[idx], "--debug") == 0)
+ {
+ debug = true;
+ for(int i = idx ; i + 1 < argc ; ++i)
+ argv[i] = argv[i + 1];
+ --argc;
+ }
+ else if(argv[idx][0] == '-')
+ {
+ cerr << argv[0] << ": error: unknown option `" << argv[idx] << "'"
+ << endl;
+ usage(argv[0]);
+ return EXIT_FAILURE;
+ }
+ else
+ ++idx;
+ }
+
+ if(argc < 2)
+ {
+ cerr << argv[0] << ": error: no input file" << endl;
+ usage(argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ int status = EXIT_SUCCESS;
+
+ for(idx = 1 ; idx < argc ; ++idx)
+ {
+ string base(argv[idx]);
+ string suffix;
+ string::size_type pos = base.rfind('.');
+ if(pos != string::npos)
+ {
+ suffix = base.substr(pos);
+ transform(suffix.begin(), suffix.end(), suffix.begin(), tolower);
+ }
+ if(suffix != ".ice")
+ {
+ cerr << argv[0] << ": input files must end with `.ice'"
+ << endl;
+ return EXIT_FAILURE;
+ }
+ base.erase(pos);
+
+ ifstream test(argv[idx]);
+ if(!test)
+ {
+ cerr << argv[0] << ": can't open `" << argv[idx]
+ << "' for reading: " << strerror(errno) << endl;
+ return EXIT_FAILURE;
+ }
+ test.close();
+
+ string cmd = cpp + " " + argv[idx];
+#ifdef WIN32
+ FILE* cppHandle = _popen(cmd.c_str(), "r");
+#else
+ FILE* cppHandle = popen(cmd.c_str(), "r");
+#endif
+ if(cppHandle == NULL)
+ {
+ cerr << argv[0] << ": can't run C++ preprocessor: "
+ << strerror(errno) << endl;
+ return EXIT_FAILURE;
+ }
+
+ Unit_ptr unit = Unit::createUnit(true, true);
+ int parseStatus = unit -> parse(cppHandle, debug);
+
+#ifdef WIN32
+ _pclose(cppHandle);
+#else
+ pclose(cppHandle);
+#endif
+
+ if(parseStatus == EXIT_FAILURE)
+ {
+ status = EXIT_FAILURE;
+ }
+ else
+ {
+ Gen gen(argv[0]);
+ if(!gen)
+ return EXIT_FAILURE;
+ gen.generate(unit);
+ }
+
+ unit -> destroy();
+ }
+
+ return status;
+}
diff --git a/cpp/src/slice2docbook/Makefile b/cpp/src/slice2docbook/Makefile
new file mode 100644
index 00000000000..0eadcdb814d
--- /dev/null
+++ b/cpp/src/slice2docbook/Makefile
@@ -0,0 +1,31 @@
+# **********************************************************************
+#
+# Copyright (c) 2001
+# MutableRealms, Inc.
+# Huntsville, AL, USA
+#
+# All Rights Reserved
+#
+# **********************************************************************
+
+top_srcdir = ../../..
+
+NAME = $(top_srcdir)/bin/slice2docbook
+
+TARGETS = $(NAME)
+
+OBJS = Gen.o \
+ GenUtil.o \
+ Main.o
+
+SRCS = $(OBJS:.o=.cpp)
+
+include $(top_srcdir)/config/Make.rules
+
+CPPFLAGS := -I../parser $(CPPFLAGS)
+
+$(NAME): $(OBJS)
+ rm -f $@
+ $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $(OBJS) -lSlice $(BASELIBS)
+
+include .depend
diff --git a/cpp/src/slice2docbook/docbook.dsp b/cpp/src/slice2docbook/docbook.dsp
new file mode 100644
index 00000000000..96f2d02d71a
--- /dev/null
+++ b/cpp/src/slice2docbook/docbook.dsp
@@ -0,0 +1,118 @@
+# Microsoft Developer Studio Project File - Name="docbook" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=docbook - 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 "docbook.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 "docbook.mak" CFG="docbook - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "docbook - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "docbook - 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)" == "docbook - 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 "Release"
+# PROP Intermediate_Dir "Release"
+# 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 "." /I "../../../include" /I "../parser" /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 jtc.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 setargv.obj /nologo /subsystem:console /machine:I386 /out:"../../../bin/slice2docbook.exe" /libpath:"../../../lib"
+
+!ELSEIF "$(CFG)" == "docbook - 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 "Debug"
+# PROP Intermediate_Dir "Debug"
+# 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 "." /I "../../../include" /I "../parser" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /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 jtcd.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 setargv.obj /nologo /subsystem:console /debug /machine:I386 /out:"../../../bin/slice2docbook.exe" /pdbtype:sept /libpath:"../../../lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "docbook - Win32 Release"
+# Name "docbook - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Gen.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\GenUtil.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Main.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\Gen.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\GenUtil.h
+# End Source File
+# 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