diff options
Diffstat (limited to 'soltools')
71 files changed, 0 insertions, 15737 deletions
diff --git a/soltools/adjustvisibility/adjustvisibility.cxx b/soltools/adjustvisibility/adjustvisibility.cxx deleted file mode 100644 index 3e204cb55..000000000 --- a/soltools/adjustvisibility/adjustvisibility.cxx +++ /dev/null @@ -1,315 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_soltools.hxx" - -/* - * adjustvisibilty -- a tool to adjust the visibility of the so called - * 'fix and continue' globalized symbols generated by - * the Sun Studio 8 compiler from 'DEFAULT' to 'HIDDEN' - * - * References: "Linker and Libraries Guide", Solaris 9 documentation - * "Stabs Interface", SunStudio 8 documentation - */ - -#include <string> -#include <iostream> -#include <exception> -#include <stdexcept> -#include <cerrno> -#include <fcntl.h> -#include <unistd.h> -#include <libelf.h> -#include <gelf.h> -#include <utime.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <limits> -#include <stdio.h> - -// Note: There is no GELF_ST_VISIBILITY macro in gelf.h, we roll our own. -#define GELF_ST_VISIBILITY(o) ((o)&0x3) // See "Linker and Libraries Guide". - -// See "Linker and Libraries Guide", ELF object format description. -static const char* SymbolType[STT_NUM] = { - "NOTYPE", - "OBJECT", - "FUNC ", - "SECT ", - "FILE ", - "COMM ", - "TLS " -}; - -static const char* SymbolBinding[STB_NUM] = { - "LOCAL ", - "GLOBAL", - "WEAK " -}; - -static const char* SymbolVisibility[4] = { // Note: There is no STV_NUM macro - "DEFAULT ", - "INTERNAL ", - "HIDDEN ", - "PROTECTED" -}; - -class ElfError : public std::exception -{ - public: - ElfError(const std::string& rFile, const std::string& rMessage); - ~ElfError() throw() {}; - virtual const char* what() const throw() { return m_sMessage.c_str(); } - - private: - std::string m_sMessage; -}; - -ElfError::ElfError(const std::string& rFile, const std::string& rMessage) -{ - if ( rFile != "" ) { - m_sMessage = rFile; - m_sMessage += ": "; - } - m_sMessage += rMessage; - const char *pElfMsg = elf_errmsg(0); - if ( pElfMsg ) { - m_sMessage += ": "; - m_sMessage += pElfMsg; - } -} - -void initElfLib() -{ - if ( elf_version(EV_CURRENT) == EV_NONE) { - throw ElfError("", "elf_version() failed"); - } - return; -} - -bool isFixAndContinueSymbol(const std::string& rSymbol) -{ - // The globalized 'fix and continue' symbols have the following - // form, see "Stabs interface", page 164: - // {.$}X{ABC}uniquepattern[.function_name][EQUIVn][.variable_name] - char c0 = rSymbol[0]; - char c1 = rSymbol[1]; - char c2 = rSymbol[2]; - if ( c0 == '.' || c0 == '$' ) { - if ( c1 == 'X' ) { - if ( c2 == 'A' || c2 == 'B' || c2 == 'C' || c2 == 'D' ) { - return true; - } - } - } - return false; -} - -void adjustVisibility( const std::string& rFile, int fd, bool bVerbose) -{ - if ( bVerbose ) { - std::cout << "File: " << rFile << ": adjusting 'fix and continue' symbol visibility\n"; - } - - try { - Elf* pElf; - if ((pElf = elf_begin(fd, ELF_C_RDWR, 0)) == NULL) { - throw ElfError(rFile, "elf_begin() failed"); - } - // Check if file is ELF file. - if ( elf_kind(pElf) != ELF_K_ELF ) { - throw ElfError(rFile, "elf_kind() failed, file is not an ELF object file"); - } - - // Iterate over sections. - Elf_Scn* pScn = 0; - while ( (pScn = elf_nextscn(pElf, pScn)) != 0 ) { - GElf_Shdr aShdr; - if ( gelf_getshdr(pScn, &aShdr) == 0 ) { - throw ElfError(rFile, "gelf_getshdr() failed"); - } - if ( aShdr.sh_type != SHT_SYMTAB ) { - continue; - } - // Section is a symbol section. Get the assiociated data. - Elf_Data* pSymbolData; - if ( (pSymbolData = elf_getdata(pScn, 0)) == NULL ) { - throw ElfError(rFile, "elf_getdata() failed"); - } - // Iterate over symbol table. - GElf_Xword nSymbols = aShdr.sh_size / aShdr.sh_entsize; - if ( nSymbols > std::numeric_limits< int >::max() ) - { - throw ElfError(rFile, "too many symbols"); - } - for ( int nIndex = 0; nIndex < nSymbols; ++nIndex) { - // Get symbol. - GElf_Sym aSymbol; - if ( gelf_getsym(pSymbolData, nIndex, &aSymbol) == NULL ) - { - throw ElfError(rFile, "gelf_getsym() failed"); - } - std::string sSymbolName(elf_strptr(pElf, aShdr.sh_link, aSymbol.st_name)); - if ( isFixAndContinueSymbol(sSymbolName) ) { - // Get the symbol visibility. - unsigned int nSymbolVisibility = GELF_ST_VISIBILITY(aSymbol.st_other); - if ( bVerbose ) { - // Get the symbol type and binding. - unsigned int nSymbolType = GELF_ST_TYPE(aSymbol.st_info); - unsigned int nSymbolBind = GELF_ST_BIND(aSymbol.st_info); - std::cout << "Symbol: " << sSymbolName << ", " - << "Type: "; - if ( SymbolType[nSymbolType] ) { - std::cout << SymbolType[nSymbolType]; - } else { - std::cout << nSymbolType; - } - std::cout << ", Binding: "; - if ( SymbolBinding[nSymbolBind] ) { - std::cout << SymbolBinding[nSymbolBind]; - } else { - std::cout << nSymbolBind; - } - std::cout << ", Visibility: "; - if ( SymbolVisibility[nSymbolVisibility] ) { - std::cout << SymbolVisibility[nSymbolVisibility]; - } else { - std::cout << nSymbolVisibility; - } - std::cout << "-> " << SymbolVisibility[STV_HIDDEN] << "\n"; - } - // Toggle visibility to "hidden". - aSymbol.st_other = GELF_ST_VISIBILITY(STV_HIDDEN); - // Write back symbol data to underlying structure. - if ( gelf_update_sym(pSymbolData, nIndex, &aSymbol) == NULL ) - { - throw ElfError(rFile, "gelf_update_sym() failed"); - } - } - } - } - // Write changed object file to disk. - if ( elf_update(pElf, ELF_C_WRITE) == -1 ) { - throw ElfError(rFile, "elf_update() failed"); - } - elf_end(pElf); - - } catch (ElfError& e) { - close(fd); - throw; - } - return; -} - -void processObject(const std::string& rFile, bool bPreserve, bool bVerbose) -{ - int fd; - struct stat aStatBuf; - - if ((fd = open(rFile.c_str(), O_RDWR)) == -1) { - std::string sMessage("adjustVisibilty() failed: can't open file "); - sMessage += rFile; - sMessage += ": "; - sMessage += std::strerror(errno); - throw std::runtime_error(sMessage); - } - - if ( bPreserve ) { - if ( fstat(fd, &aStatBuf) == -1) { - close(fd); - std::string sMessage("adjustVisibilty() failed: can't stat file "); - sMessage += rFile; - sMessage += ": "; - sMessage += std::strerror(errno); - throw std::runtime_error(sMessage); - } - } - - adjustVisibility(rFile, fd, bVerbose); - - close(fd); - - if ( bPreserve ) { - struct utimbuf aUtimBuf = {aStatBuf.st_atime, aStatBuf.st_mtime}; - if ( utime(rFile.c_str(), &aUtimBuf) == -1 ) { - std::string sMessage("adjustVisibilty() failed: can't reset timestamp "); - sMessage += rFile; - sMessage += ": "; - sMessage += std::strerror(errno); - throw std::runtime_error(sMessage); - } - } - return; -} - -int main(int argc, char* argv[]) -{ - int c; - bool bPreserve = false; - bool bVerbose = false; - - while ( (c = getopt(argc, argv, "pv")) != -1 ) { - switch(c) { - case 'p': - bPreserve = true; - break; - case 'v': - bVerbose = true; - break; - case '?': - std::cerr << "Unrecognized option: -" << optopt << "\n"; - break; - default: - break; - } - } - - if ( optind == argc ) { - std::cout << "usage: " << argv[0] << " [-pv] <elf-object> ...\n"; - std::cout << " -p preserve time stamps\n"; - std::cout << " -v verbose\n"; - return 1; - } - - try { - initElfLib(); - - for ( ; optind < argc; optind++ ) { - processObject(std::string(argv[optind]), bPreserve, bVerbose); - } - - } catch (std::exception& e) { - std::cerr << argv[0] << ": " << e.what() << "\n"; - return 1; - } - - return 0; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/adjustvisibility/makefile.mk b/soltools/adjustvisibility/makefile.mk deleted file mode 100644 index ea0d09c2c..000000000 --- a/soltools/adjustvisibility/makefile.mk +++ /dev/null @@ -1,59 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=.. - -PRJNAME=soltools -TARGET=adjustvisibility -TARGETTYPE=CUI -ENABLE_EXCEPTIONS=TRUE -noadjust=TRUE - -# --- Settings ----------------------------------------------------- - -.INCLUDE : $(PRJ)$/util$/makefile.pmk -.INCLUDE : settings.mk - -# --- Files -------------------------------------------------------- - -# This tool is for Solaris only -.IF "$(OS)"=="SOLARIS" - -APP1TARGET = adjustvisibility -APP1OBJS = $(OBJ)$/adjustvisibility.obj -DEPOBJFILES = $(APP1OBJ) -APP1STDLIBS = -lelf -APP1RPATH = NONE - -#APP1STDLIBS+=-lstlport -APP1STDLIBS+=-lCstd - -.ENDIF "$(OS)"=="SOLARIS" - -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk diff --git a/soltools/checkdll/checkdll.c b/soltools/checkdll/checkdll.c deleted file mode 100644 index 8aaf05358..000000000 --- a/soltools/checkdll/checkdll.c +++ /dev/null @@ -1,98 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - - -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <unistd.h> -#include <dlfcn.h> - -/* - * NOTE: Since no one is really interested in correct unload behavior I've - * disabled the shared library unload check. If you want to reenable it comment - * the following line out - */ -#define NO_UNLOAD_CHECK - -static const char *pprog_name = "checkdll"; -static const char *psymbol = "GetVersionInfo"; - -void usage() -{ - fprintf(stderr, "usage: %s [-s] <dllname>\n", pprog_name); - return; -} - -int main(int argc, char *argv[]) -{ - int silent=0; - void *phandle; - char *(*pfun)(void); - - if ( argc < 2 || argc > 4) { - usage(); - return 1; - } - - if ( !strcmp(argv[1],"-s") ) { - silent = 1; - ++argv, --argc; - } - - if ( access( argv[1], R_OK ) == -1 ) { - fprintf(stderr, "%s: ERROR: %s: %s\n", - pprog_name, argv[1], strerror(errno)); - return 2; - } - - if (!silent) printf("Checking DLL %s ...", argv[1]); - fflush(stdout); - - if ( (phandle = dlopen(argv[1], RTLD_NOW)) != NULL ) { - if ( (pfun = (char *(*)(void))dlsym(phandle, psymbol)) != NULL ) { - if (!silent) printf(": ok\n"); - } - else - { - printf(": WARNING: %s\n", dlerror()); - } -#ifdef NO_UNLOAD_CHECK - _exit(0); -#else - dlclose(phandle); -#endif - return 0; - } - - printf(": ERROR: %s\n", dlerror()); - return 3; -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/checkdll/makefile.mk b/soltools/checkdll/makefile.mk deleted file mode 100644 index 2b7e71be9..000000000 --- a/soltools/checkdll/makefile.mk +++ /dev/null @@ -1,59 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=.. - -PRJNAME=soltools -TARGET=checkdll -TARGETTYPE=CUI -NO_DEFAULT_STL=TRUE - -# --- Settings ----------------------------------------------------- - -.INCLUDE : $(PRJ)$/util$/makefile.pmk -.INCLUDE : settings.mk - -# --- Files -------------------------------------------------------- - - -.IF "$(GUI)"=="UNX" && "$(CROSS_COMPILING)"!="YES" -LIBSALCPPRT=$(0) -APP1TARGET = checkdll -APP1OBJS = $(OBJ)$/checkdll.obj -DEPOBJFILES = $(APP1OBJS) -.IF "$(OS)"!="FREEBSD" && "$(OS)"!="MACOSX" && "$(OS)"!="NETBSD" \ - && "$(OS)"!="OPENBSD" && "$(OS)"!="DRAGONFLY" -STDLIB += -ldl -.ENDIF -.IF "$(OS)"=="NETBSD" -APP1STDLIBS += -Wl,--whole-archive -lgcc -Wl,--no-whole-archive -.ENDIF -.ENDIF # "$(GUI)"=="UNX" && "$(CROSS_COMPILING)"!="YES" - -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk diff --git a/soltools/cpp/Test.txt b/soltools/cpp/Test.txt deleted file mode 100644 index 62c1ae40f..000000000 --- a/soltools/cpp/Test.txt +++ /dev/null @@ -1,101 +0,0 @@ - -#define ABC \ - ggg - -ABC - -/* Standards --------------------------------------------------------------- */ - -#define NOTHING -NOTHING - -#define SYMBOL symbol -#undef SYMBOL -#define SYMBOL _symbol_ - -< SYMBOL > // < _symbol_ > -xSYMBOLx // xSYMBOLx -+SYMBOL- // +_symbol_- ->SYMBOL< // >_symbol_< -<SYMBOL> // <_symbol_> - -#define FALSE 0 -#define TRUE !FALSE -a = x > 0 ? TRUE : FALSE // a = x > 0 ? !0 : 0 - -#define A x -#define B y -#define MAC(a, b) \ - T() { a(); return b; } // T() { x(); return y; } -MAC(A,B); - -#ifdef MAC -MAC(X,Y) -#endif // MAC - -/* Recursions -------------------------------------------------------------- */ - -#define y x -#define x y -x // x - -#define Test(a) a -#define b Test(b) -a = b; // a = b; - -#define func abc(func) -a = func // a = abc(func) - -#define func1 func(abc) -a = func1 // a = abc(func)(abc) - -#define args(func, args) func args -args(t1, (args(t2, (x, y)))) // t1 (t2 (x, y)) - -#define ARGS(a) a -#define __ ARGS -int foo __((int x)); // int foo (int x); - -/* Concatinations ---------------------------------------------------------- */ - -#define tail _Test -// Txt_##tail // Txt_##_Test - -#define z(e,f) e##_##f -z ( abc, xyz ) // abc_xyz - - -#define CAT( var ) fix##.var -CAT( a ) // fix.a - -#define CAT3( class, ref ) class##ref::class##ref -CAT3( a, b ) // ab::ab - -#define CAT2( var ) fix##var::fix##var -CAT2( a ) // fixa::fixa - -/* Extrems ----------------------------------------------------------------- */ - -#define MAKE_X( name ) name##_Test -#define MAKE_Y( name ) MAKE_X( name##_Sym ) -MAKE_Y( Txt ); // Txt_Sym_Test; - - -/* Extensions -------------------------------------------------------------- */ - -/* -#ident "(c)# Test.txt" - -#if #machine(i386) -# error illegal machine -#endif -char machine[6]; -*/ - -/* Last bug ----------------------------------------------------------------- */ -#define Cfstrcpy Cstrcpy -#define Cstrcpy( s1, s2 ) strcpy( s1, s2 ) - -Cfstrcpy(Par1,Par2 ) // blub( Par1, Par2 ) - -/* ---------------------------------------------------------------------- */ diff --git a/soltools/cpp/_cpp.c b/soltools/cpp/_cpp.c deleted file mode 100644 index 64229f505..000000000 --- a/soltools/cpp/_cpp.c +++ /dev/null @@ -1,386 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <time.h> -#include <stdarg.h> -#include "cpp.h" - -#define OUTS 16384 -char outbuf[OUTS]; -char *outptr = outbuf; -Source *cursource; -int nerrs; -struct token nltoken = {NL, 0, 0, 1, (uchar *) "\n", 0}; -char *curtime; -int incdepth; -int ifdepth; -int ifsatisfied[NIF]; -int skipping; - -char rcsid[] = "$Version 1.2 $ $Revision: 1.5 $ $Date: 2006-06-20 05:05:46 $"; - -int -#ifdef _WIN32 -__cdecl -#endif // _WIN32 - main(int argc, char **argv) -{ - - Tokenrow tr; - time_t t; - char ebuf[BUFSIZ]; - - setbuf(stderr, ebuf); - t = time(NULL); - curtime = ctime(&t); - maketokenrow(3, &tr); - expandlex(); - setup(argc, argv); - fixlex(); - if (!Pflag) - genline(); - process(&tr); - flushout(); - fflush(stderr); - exit(nerrs > 0); -} - -void - process(Tokenrow * trp) -{ - int anymacros = 0; - - for (;;) - { - if (trp->tp >= trp->lp) - { - trp->tp = trp->lp = trp->bp; - outptr = outbuf; - anymacros |= gettokens(trp, 1); - trp->tp = trp->bp; - } - if (trp->tp->type == END) - { - if (--incdepth >= 0) - { - if (cursource->ifdepth) - error(ERROR, - "Unterminated conditional in #include"); - unsetsource(); - cursource->line += cursource->lineinc; - trp->tp = trp->lp; - if (!Pflag) - genline(); - continue; - } - if (ifdepth) - error(ERROR, "Unterminated #if/#ifdef/#ifndef"); - break; - } - if (trp->tp->type == SHARP) - { - trp->tp += 1; - control(trp); - } - else - if (!skipping && anymacros) - expandrow(trp, NULL); - if (skipping) - setempty(trp); - puttokens(trp); - anymacros = 0; - cursource->line += cursource->lineinc; - if (cursource->lineinc > 1) - { - if (!Pflag) - genline(); - } - } -} - -void - control(Tokenrow * trp) -{ - Nlist *np; - Token *tp; - - tp = trp->tp; - if (tp->type != NAME) - { - if (tp->type == NUMBER) - goto kline; - if (tp->type != NL) - error(ERROR, "Unidentifiable control line"); - return; /* else empty line */ - } - if ((np = lookup(tp, 0)) == NULL || ((np->flag & ISKW) == 0 && !skipping)) - { - error(WARNING, "Unknown preprocessor control %t", tp); - return; - } - if (skipping) - { - switch (np->val) - { - case KENDIF: - if (--ifdepth < skipping) - skipping = 0; - --cursource->ifdepth; - setempty(trp); - return; - - case KIFDEF: - case KIFNDEF: - case KIF: - if (++ifdepth >= NIF) - error(FATAL, "#if too deeply nested"); - ++cursource->ifdepth; - return; - - case KELIF: - case KELSE: - if (ifdepth <= skipping) - break; - return; - - default: - return; - } - } - switch (np->val) - { - case KDEFINE: - dodefine(trp); - break; - - case KUNDEF: - tp += 1; - if (tp->type != NAME || trp->lp - trp->bp != 4) - { - error(ERROR, "Syntax error in #undef"); - break; - } - if ((np = lookup(tp, 0)) != NULL) - { - np->flag &= ~ISDEFINED; - - if (Mflag) - { - if (np->ap) - error(INFO, "Macro deletion of %s(%r)", np->name, np->ap); - else - error(INFO, "Macro deletion of %s", np->name); - } - } - break; - - case KPRAGMA: - case KIDENT: - for (tp = trp->tp - 1; ((tp->type != NL) && (tp < trp->lp)); tp++) - tp->type = UNCLASS; - return; - - case KIFDEF: - case KIFNDEF: - case KIF: - if (++ifdepth >= NIF) - error(FATAL, "#if too deeply nested"); - ++cursource->ifdepth; - ifsatisfied[ifdepth] = 0; - if (eval(trp, np->val)) - ifsatisfied[ifdepth] = 1; - else - skipping = ifdepth; - break; - - case KELIF: - if (ifdepth == 0) - { - error(ERROR, "#elif with no #if"); - return; - } - if (ifsatisfied[ifdepth] == 2) - error(ERROR, "#elif after #else"); - if (eval(trp, np->val)) - { - if (ifsatisfied[ifdepth]) - skipping = ifdepth; - else - { - skipping = 0; - ifsatisfied[ifdepth] = 1; - } - } - else - skipping = ifdepth; - break; - - case KELSE: - if (ifdepth == 0 || cursource->ifdepth == 0) - { - error(ERROR, "#else with no #if"); - return; - } - if (ifsatisfied[ifdepth] == 2) - error(ERROR, "#else after #else"); - if (trp->lp - trp->bp != 3) - error(ERROR, "Syntax error in #else"); - skipping = ifsatisfied[ifdepth] ? ifdepth : 0; - ifsatisfied[ifdepth] = 2; - break; - - case KENDIF: - if (ifdepth == 0 || cursource->ifdepth == 0) - { - error(ERROR, "#endif with no #if"); - return; - } - --ifdepth; - --cursource->ifdepth; - if (trp->lp - trp->bp != 3) - error(WARNING, "Syntax error in #endif"); - break; - - case KERROR: - trp->tp = tp + 1; - error(WARNING, "#error directive: %r", trp); - break; - - case KLINE: - trp->tp = tp + 1; - expandrow(trp, "<line>"); - tp = trp->bp + 2; - kline: - if (tp + 1 >= trp->lp || tp->type != NUMBER || tp + 3 < trp->lp - || (tp + 3 == trp->lp - && ((tp + 1)->type != STRING || *(tp + 1)->t == 'L'))) - { - error(ERROR, "Syntax error in #line"); - return; - } - cursource->line = atol((char *) tp->t) - 1; - if (cursource->line < 0 || cursource->line >= 32768) - error(WARNING, "#line specifies number out of range"); - tp = tp + 1; - if (tp + 1 < trp->lp) - cursource->filename = (char *) newstring(tp->t + 1, tp->len - 2, 0); - return; - - case KDEFINED: - error(ERROR, "Bad syntax for control line"); - break; - - case KIMPORT: - doinclude(trp, -1, 1); - trp->lp = trp->bp; - return; - - case KINCLUDE: - doinclude(trp, -1, 0); - trp->lp = trp->bp; - return; - - case KINCLUDENEXT: - doinclude(trp, cursource->pathdepth, 0); - trp->lp = trp->bp; - return; - - case KEVAL: - eval(trp, np->val); - break; - - default: - error(ERROR, "Preprocessor control `%t' not yet implemented", tp); - break; - } - setempty(trp); - return; -} - -void * - domalloc(size_t size) -{ - void *p = malloc(size); - - if (p == NULL) - error(FATAL, "Out of memory from malloc"); - return p; -} - -void - dofree(void *p) -{ - free(p); -} - -void - error(enum errtype type, char *string,...) -{ - va_list ap; - char c, *cp, *ep; - Token *tp; - Tokenrow *trp; - Source *s; - int i; - - fprintf(stderr, "cpp: "); - for (s = cursource; s; s = s->next) - if (*s->filename) - fprintf(stderr, "%s:%d ", s->filename, s->line); - va_start(ap, string); - for (ep = string; *ep; ep++) - { - if (*ep == '%') - { - switch (*++ep) - { - - case 'c': - c = (char) va_arg(ap, int); - fprintf(stderr, "%c", c); - break; - - case 's': - cp = va_arg(ap, char *); - fprintf(stderr, "%s", cp); - break; - - case 'd': - i = va_arg(ap, int); - fprintf(stderr, "%d", i); - break; - - case 't': - tp = va_arg(ap, Token *); - fprintf(stderr, "%.*s", (int)tp->len, tp->t); - break; - - case 'r': - trp = va_arg(ap, Tokenrow *); - for (tp = trp->tp; tp < trp->lp && tp->type != NL; tp++) - { - if (tp > trp->tp && tp->wslen) - fputc(' ', stderr); - fprintf(stderr, "%.*s", (int)tp->len, tp->t); - } - break; - - default: - fputc(*ep, stderr); - break; - } - } - else - fputc(*ep, stderr); - } - va_end(ap); - fputc('\n', stderr); - if (type == FATAL) - exit(1); - if (type != WARNING) - nerrs = 1; - fflush(stderr); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/cpp/_eval.c b/soltools/cpp/_eval.c deleted file mode 100644 index c6b6d1ddf..000000000 --- a/soltools/cpp/_eval.c +++ /dev/null @@ -1,772 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ - -#include <stdlib.h> -#include <string.h> - -#include "cpp.h" - -#define NSTAK 32 -#define SGN 0 -#define UNS 1 -#define UND 2 - -#define UNSMARK 0x1000 - -struct value -{ - long val; - int type; -}; - -/* conversion types */ -#define RELAT 1 -#define ARITH 2 -#define LOGIC 3 -#define SPCL 4 -#define SHIFT 5 -#define UNARY 6 - -/* operator priority, arity, and conversion type, indexed by tokentype */ -struct pri -{ - char pri; - char arity; - char ctype; -} priority[] = - -{ - { - 0, 0, 0 - }, /* END */ - { - 0, 0, 0 - }, /* UNCLASS */ - { - 0, 0, 0 - }, /* NAME */ - { - 0, 0, 0 - }, /* NUMBER */ - { - 0, 0, 0 - }, /* STRING */ - { - 0, 0, 0 - }, /* CCON */ - { - 0, 0, 0 - }, /* NL */ - { - 0, 0, 0 - }, /* WS */ - { - 0, 0, 0 - }, /* DSHARP */ - { - 11, 2, RELAT - }, /* EQ */ - { - 11, 2, RELAT - }, /* NEQ */ - { - 12, 2, RELAT - }, /* LEQ */ - { - 12, 2, RELAT - }, /* GEQ */ - { - 13, 2, SHIFT - }, /* LSH */ - { - 13, 2, SHIFT - }, /* RSH */ - { - 7, 2, LOGIC - }, /* LAND */ - { - 6, 2, LOGIC - }, /* LOR */ - { - 0, 0, 0 - }, /* PPLUS */ - { - 0, 0, 0 - }, /* MMINUS */ - { - 0, 0, 0 - }, /* ARROW */ - { - 0, 0, 0 - }, /* SBRA */ - { - 0, 0, 0 - }, /* SKET */ - { - 3, 0, 0 - }, /* LP */ - { - 3, 0, 0 - }, /* RP */ - { - 0, 0, 0 - }, /* DOT */ - { - 10, 2, ARITH - }, /* AND */ - { - 15, 2, ARITH - }, /* STAR */ - { - 14, 2, ARITH - }, /* PLUS */ - { - 14, 2, ARITH - }, /* MINUS */ - { - 16, 1, UNARY - }, /* TILDE */ - { - 16, 1, UNARY - }, /* NOT */ - { - 15, 2, ARITH - }, /* SLASH */ - { - 15, 2, ARITH - }, /* PCT */ - { - 12, 2, RELAT - }, /* LT */ - { - 12, 2, RELAT - }, /* GT */ - { - 9, 2, ARITH - }, /* CIRC */ - { - 8, 2, ARITH - }, /* OR */ - { - 5, 2, SPCL - }, /* QUEST */ - { - 5, 2, SPCL - }, /* COLON */ - { - 0, 0, 0 - }, /* ASGN */ - { - 4, 2, 0 - }, /* COMMA */ - { - 0, 0, 0 - }, /* SHARP */ - { - 0, 0, 0 - }, /* SEMIC */ - { - 0, 0, 0 - }, /* CBRA */ - { - 0, 0, 0 - }, /* CKET */ - { - 0, 0, 0 - }, /* ASPLUS */ - { - 0, 0, 0 - }, /* ASMINUS */ - { - 0, 0, 0 - }, /* ASSTAR */ - { - 0, 0, 0 - }, /* ASSLASH */ - { - 0, 0, 0 - }, /* ASPCT */ - { - 0, 0, 0 - }, /* ASCIRC */ - { - 0, 0, 0 - }, /* ASLSH */ - { - 0, 0, 0 - }, /* ASRSH */ - { - 0, 0, 0 - }, /* ASOR */ - { - 0, 0, 0 - }, /* ASAND */ - { - 0, 0, 0 - }, /* ELLIPS */ - { - 0, 0, 0 - }, /* DSHARP1 */ - { - 0, 0, 0 - }, /* NAME1 */ - { - 0, 0, 0 - }, /* NAME2 */ - { - 16, 1, UNARY - }, /* DEFINED */ - { - 16, 0, UNARY - }, /* UMINUS */ - { - 16, 1, UNARY - }, /* ARCHITECTURE */ -}; - -int evalop(struct pri); -struct value tokval(Token *); -struct value vals[NSTAK], *vp; -enum toktype ops[NSTAK], *op; - -/* - * Evaluate an #if #elif #ifdef #ifndef line. trp->tp points to the keyword. - */ -long - eval(Tokenrow * trp, int kw) -{ - Token *tp; - Nlist *np; - size_t ntok; - int rnd; - - trp->tp++; - if (kw == KIFDEF || kw == KIFNDEF) - { - if (trp->lp - trp->bp != 4 || trp->tp->type != NAME) - { - error(ERROR, "Syntax error in #ifdef/#ifndef"); - return 0; - } - np = lookup(trp->tp, 0); - return (kw == KIFDEF) == (np && np->flag & (ISDEFINED | ISMAC)); - } - ntok = trp->tp - trp->bp; - kwdefined->val = KDEFINED; /* activate special meaning of - * defined */ - expandrow(trp, "<if>"); - kwdefined->val = NAME; - vp = vals; - op = ops; - *op++ = END; - for (rnd = 0, tp = trp->bp + ntok; tp < trp->lp; tp++) - { - switch (tp->type) - { - case WS: - case NL: - continue; - - /* nilary */ - case NAME: - case NAME1: - case NAME2: - case NUMBER: - case CCON: - case STRING: - if (rnd) - goto syntax; - *vp++ = tokval(tp); - rnd = 1; - continue; - - /* unary */ - case DEFINED: - case TILDE: - case NOT: - if (rnd) - goto syntax; - *op++ = tp->type; - continue; - - /* unary-binary */ - case PLUS: - case MINUS: - case STAR: - case AND: - if (rnd == 0) - { - if (tp->type == MINUS) - *op++ = UMINUS; - if (tp->type == STAR || tp->type == AND) - { - error(ERROR, "Illegal operator * or & in #if/#elsif"); - return 0; - } - continue; - } - /* flow through */ - - /* plain binary */ - case EQ: - case NEQ: - case LEQ: - case GEQ: - case LSH: - case RSH: - case LAND: - case LOR: - case SLASH: - case PCT: - case LT: - case GT: - case CIRC: - case OR: - case QUEST: - case COLON: - case COMMA: - if (rnd == 0) - goto syntax; - if (evalop(priority[tp->type]) != 0) - return 0; - *op++ = tp->type; - rnd = 0; - continue; - - case LP: - if (rnd) - goto syntax; - *op++ = LP; - continue; - - case RP: - if (!rnd) - goto syntax; - if (evalop(priority[RP]) != 0) - return 0; - if (op <= ops || op[-1] != LP) - { - goto syntax; - } - op--; - continue; - - case SHARP: - if ((tp + 1) < trp->lp) - { - np = lookup(tp + 1, 0); - if (np && (np->val == KMACHINE)) - { - tp++; - if (rnd) - goto syntax; - *op++ = ARCHITECTURE; - continue; - } - } - /* fall through */ - - default: - error(ERROR, "Bad operator (%t) in #if/#elsif", tp); - return 0; - } - } - if (rnd == 0) - goto syntax; - if (evalop(priority[END]) != 0) - return 0; - if (op != &ops[1] || vp != &vals[1]) - { - error(ERROR, "Botch in #if/#elsif"); - return 0; - } - if (vals[0].type == UND) - error(ERROR, "Undefined expression value"); - return vals[0].val; -syntax: - error(ERROR, "Syntax error in #if/#elsif"); - return 0; -} - -int - evalop(struct pri pri) -{ - struct value v1; - struct value v2 = { 0, UND }; - long rv1, rv2; - int rtype, oper; - - rv2 = 0; - rtype = 0; - while (pri.pri < priority[op[-1]].pri) - { - oper = *--op; - if (priority[oper].arity == 2) - { - v2 = *--vp; - rv2 = v2.val; - } - v1 = *--vp; - rv1 = v1.val; -/*lint -e574 -e644 */ - switch (priority[oper].ctype) - { - case 0: - default: - error(WARNING, "Syntax error in #if/#endif"); - return 1; - case ARITH: - case RELAT: - if (v1.type == UNS || v2.type == UNS) - rtype = UNS; - else - rtype = SGN; - if (v1.type == UND || v2.type == UND) - rtype = UND; - if (priority[oper].ctype == RELAT && rtype == UNS) - { - oper |= UNSMARK; - rtype = SGN; - } - break; - case SHIFT: - if (v1.type == UND || v2.type == UND) - rtype = UND; - else - rtype = v1.type; - if (rtype == UNS) - oper |= UNSMARK; - break; - case UNARY: - rtype = v1.type; - break; - case LOGIC: - case SPCL: - break; - } - switch (oper) - { - case EQ: - case EQ | UNSMARK: - rv1 = rv1 == rv2; - break; - case NEQ: - case NEQ | UNSMARK: - rv1 = rv1 != rv2; - break; - case LEQ: - rv1 = rv1 <= rv2; - break; - case GEQ: - rv1 = rv1 >= rv2; - break; - case LT: - rv1 = rv1 < rv2; - break; - case GT: - rv1 = rv1 > rv2; - break; - case LEQ | UNSMARK: - rv1 = (unsigned long)rv1 <= (unsigned long)rv2; - break; - case GEQ | UNSMARK: - rv1 = (unsigned long)rv1 >= (unsigned long)rv2; - break; - case LT | UNSMARK: - rv1 = (unsigned long)rv1 < (unsigned long)rv2; - break; - case GT | UNSMARK: - rv1 = (unsigned long)rv1 > (unsigned long)rv2; - break; - case LSH: - rv1 <<= rv2; - break; - case LSH | UNSMARK: - rv1 = (unsigned long) rv1 << rv2; - break; - case RSH: - rv1 >>= rv2; - break; - case RSH | UNSMARK: - rv1 = (unsigned long) rv1 >> rv2; - break; - case LAND: - rtype = UND; - if (v1.type == UND) - break; - if (rv1 != 0) - { - if (v2.type == UND) - break; - rv1 = rv2 != 0; - } - else - rv1 = 0; - rtype = SGN; - break; - case LOR: - rtype = UND; - if (v1.type == UND) - break; - if (rv1 == 0) - { - if (v2.type == UND) - break; - rv1 = rv2 != 0; - } - else - rv1 = 1; - rtype = SGN; - break; - case AND: - rv1 &= rv2; - break; - case STAR: - rv1 *= rv2; - break; - case PLUS: - rv1 += rv2; - break; - case MINUS: - rv1 -= rv2; - break; - case UMINUS: - if (v1.type == UND) - rtype = UND; - rv1 = -rv1; - break; - case OR: - rv1 |= rv2; - break; - case CIRC: - rv1 ^= rv2; - break; - case TILDE: - rv1 = ~rv1; - break; - case NOT: - rv1 = !rv1; - if (rtype != UND) - rtype = SGN; - break; - case SLASH: - if (rv2 == 0) - { - rtype = UND; - break; - } - if (rtype == UNS) - rv1 /= (unsigned long) rv2; - else - rv1 /= rv2; - break; - case PCT: - if (rv2 == 0) - { - rtype = UND; - break; - } - if (rtype == UNS) - rv1 %= (unsigned long) rv2; - else - rv1 %= rv2; - break; - case COLON: - if (op[-1] != QUEST) - error(ERROR, "Bad ?: in #if/endif"); - else - { - op--; - if ((--vp)->val == 0) - v1 = v2; - rtype = v1.type; - rv1 = v1.val; - } - break; - - case DEFINED: - case ARCHITECTURE: - break; - - default: - error(ERROR, "Eval botch (unknown operator)"); - return 1; - } -/*lint +e574 +e644 */ - v1.val = rv1; - v1.type = rtype; - *vp++ = v1; - } - return 0; -} - -struct value - tokval(Token * tp) -{ - struct value v; - Nlist *np; - int i, base; - unsigned long n; - uchar *p, c; - - v.type = SGN; - v.val = 0; - switch (tp->type) - { - - case NAME: - v.val = 0; - break; - - case NAME1: - if ((np = lookup(tp, 0)) != NULL && np->flag & (ISDEFINED | ISMAC)) - v.val = 1; - break; - - case NAME2: - if ((np = lookup(tp, 0)) != NULL && np->flag & (ISARCHITECTURE)) - v.val = 1; - break; - - case NUMBER: - n = 0; - base = 10; - p = tp->t; - c = p[tp->len]; - p[tp->len] = '\0'; - if (*p == '0') - { - base = 8; - if (p[1] == 'x' || p[1] == 'X') - { - base = 16; - p++; - } - p++; - } - for (;; p++) - { - if ((i = digit(*p)) < 0) - break; - if (i >= base) - error(WARNING, - "Bad digit in number %t", tp); - n *= base; - n += i; - } - if (n >= 0x80000000 && base != 10) - v.type = UNS; - for (; *p; p++) - { - if (*p == 'u' || *p == 'U') - v.type = UNS; - else - if (*p == 'l' || *p == 'L') - ; - else - { - error(ERROR, - "Bad number %t in #if/#elsif", tp); - break; - } - } - v.val = n; - tp->t[tp->len] = c; - break; - - case CCON: - n = 0; - p = tp->t; - if (*p == 'L') - { - p += 1; - error(WARNING, "Wide char constant value undefined"); - } - p += 1; - if (*p == '\\') - { - p += 1; - if ((i = digit(*p)) >= 0 && i <= 7) - { - n = i; - p += 1; - if ((i = digit(*p)) >= 0 && i <= 7) - { - p += 1; - n <<= 3; - n += i; - if ((i = digit(*p)) >= 0 && i <= 7) - { - p += 1; - n <<= 3; - n += i; - } - } - } - else - if (*p == 'x') - { - p += 1; - while ((i = digit(*p)) >= 0 && i <= 15) - { - p += 1; - n <<= 4; - n += i; - } - } - else - { - static char cvcon[] = "b\bf\fn\nr\rt\tv\v''\"\"??\\\\"; - static size_t cvlen = sizeof(cvcon) - 1; - - size_t j; - for (j = 0; j < cvlen; j += 2) - { - if (*p == cvcon[j]) - { - n = cvcon[j + 1]; - break; - } - } - p += 1; - if (j >= cvlen) - error(WARNING, - "Undefined escape in character constant"); - } - } - else - if (*p == '\'') - error(ERROR, "Empty character constant"); - else - n = *p++; - if (*p != '\'') - error(WARNING, "Multibyte character constant undefined"); - else - if (n > 127) - error(WARNING, "Character constant taken as not signed"); - v.val = n; - break; - - case STRING: - error(ERROR, "String in #if/#elsif"); - break; - } - return v; -} - -int - digit(int i) -{ - if ('0' <= i && i <= '9') - i -= '0'; - else - if ('a' <= i && i <= 'f') - i -= 'a' - 10; - else - if ('A' <= i && i <= 'F') - i -= 'A' - 10; - else - i = -1; - return i; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/cpp/_getopt.c b/soltools/cpp/_getopt.c deleted file mode 100644 index 458664067..000000000 --- a/soltools/cpp/_getopt.c +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#include <stdio.h> -#include <string.h> - -#define EPR fprintf(stderr, -#define ERR(str, chr) if(opterr) { EPR "%s%c\n", str, chr); } - -int opterr = 1; -int optind = 1; -int optopt; -char *optarg; - -int - stgetopt(int argc, char *const argv[], const char *opts) -{ - static int sp = 1; - register int c; - register char *cp; - - if (sp == 1) - { - if (optind >= argc || - argv[optind][0] != '-' || argv[optind][1] == '\0') - return -1; - else if (strcmp(argv[optind], "--") == 0) - { - optind++; - return -1; - } - else if (strcmp(argv[optind], "-isysroot") == 0) - { - // skip Mac OS X SDK selection flags - optind++; optind++; - } - } - optopt = c = argv[optind][sp]; - if (c == ':' || (cp = strchr(opts, c)) == 0) - { - ERR(": illegal option -- ", c); - if (argv[optind][++sp] == '\0') - { - optind++; - sp = 1; - } - return '?'; - } - if (*++cp == ':') - { - if (argv[optind][sp + 1] != '\0') - optarg = &argv[optind++][sp + 1]; - else - if (++optind >= argc) - { - ERR(": option requires an argument -- ", c); - sp = 1; - return '?'; - } - else - optarg = argv[optind++]; - sp = 1; - } - else - { - if (argv[optind][++sp] == '\0') - { - sp = 1; - optind++; - } - optarg = 0; - } - return c; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/cpp/_include.c b/soltools/cpp/_include.c deleted file mode 100644 index 786457c9d..000000000 --- a/soltools/cpp/_include.c +++ /dev/null @@ -1,233 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#if (defined(_WIN32) || defined(__IBMC__)) -# include <io.h> -#else -# include <unistd.h> -#endif - -#ifdef _MSC_VER -# define _POSIX_ -#endif -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <fcntl.h> - -#if defined(__IBMC__) || defined(__EMX__) -# include <fcntl.h> -# define PATH_MAX _MAX_PATH -#endif -#include <limits.h> - -#include "cpp.h" - -Includelist includelist[NINCLUDE]; -Wraplist wraplist[NINCLUDE]; - -void - doinclude(Tokenrow * trp, int depth, int import) -{ - char fname[PATH_MAX], iname[PATH_MAX]; - Includelist *ip; - int angled, fd, i; - size_t len; - - trp->tp += 1; - if (trp->tp >= trp->lp) - goto syntax; - if (trp->tp->type != STRING && trp->tp->type != LT) - { - len = trp->tp - trp->bp; - expandrow(trp, "<include>"); - trp->tp = trp->bp + len; - } - if (trp->tp->type == STRING) - { - len = trp->tp->len - 2; - if (len > sizeof(fname) - 1) - len = sizeof(fname) - 1; - strncpy(fname, (char *) trp->tp->t + 1, len); - angled = 0; - } - else - { - if (trp->tp->type == LT) - { - len = 0; - trp->tp++; - while (trp->tp->type != GT) - { - if (trp->tp > trp->lp || len + trp->tp->len + 2 >= sizeof(fname)) - goto syntax; - strncpy(fname + len, (char *) trp->tp->t, trp->tp->len); - len += trp->tp->len; - trp->tp++; - } - angled = 1; - } - else - goto syntax; - } - trp->tp += 2; - if (trp->tp < trp->lp || len == 0) - goto syntax; - fname[len] = '\0'; - if (fname[0] == '/') - { - fd = open(fname, O_RDONLY); - strcpy(iname, fname); - } - else - { - for (fd = -1, i = (depth < 0) ? (NINCLUDE - 1) : (depth - 1); i >= 0; i--) - { - ip = &includelist[i]; - if (ip->file == NULL || ip->deleted || (angled && ip->always == 0)) - continue; - if (strlen(fname) + strlen(ip->file) + 2 > sizeof(iname)) - continue; - strcpy(iname, ip->file); - strcat(iname, "/"); - strcat(iname, fname); - if ((fd = open(iname, O_RDONLY)) >= 0) - break; - } - } - - if (fd >= 0) - { - if (++incdepth > NINC ) - error(FATAL, "#%s too deeply nested", import ? "import" : "include"); - if (Xflag) - genimport(fname, angled, iname, import); - if (Iflag) - error(INFO, "Open %s file [%s]", import ? "import" : "include", iname ); - - for (i = NINCLUDE - 1; i >= 0; i--) - { - if ((wraplist[i].file != NULL) && - (strncmp(wraplist[i].file, iname, strlen(wraplist[i].file)) == 0)) - break; - } - - setsource((char *) newstring((uchar *) iname, strlen(iname), 0), i, fd, NULL, (i >= 0) ? 1 : 0); - - if (!Pflag) - genline(); - } - else - { - trp->tp = trp->bp + 2; - error(ERROR, "Could not find %s file %r", import ? "import" : "include", trp); - } - return; -syntax: - error(ERROR, "Syntax error in #%s", import ? "import" : "include"); - return; -} - -/* - * Generate a line directive for cursource - */ -void - genline(void) -{ - static Token ta = {UNCLASS, 0, 0, 0, NULL, 0}; - static Tokenrow tr = {&ta, &ta, &ta + 1, 1}; - uchar *p; - - ta.t = p = (uchar *) outptr; - strcpy((char *) p, "#line "); - p += sizeof("#line ") - 1; - p = (uchar *) outnum((char *) p, cursource->line); - *p++ = ' '; - *p++ = '"'; - if (cursource->filename[0] != '/' && wd[0]) - { - strcpy((char *) p, wd); - p += strlen(wd); - *p++ = '/'; - } - strcpy((char *) p, cursource->filename); - p += strlen((char *) p); - *p++ = '"'; - *p++ = '\n'; - ta.len = (char *) p - outptr; - outptr = (char *) p; - tr.tp = tr.bp; - puttokens(&tr); -} - -/* - * Generate a pragma import/include directive - */ -void - genimport(char *fname, int angled, char *iname, int import) -{ - static Token ta = {UNCLASS, 0, 0, 0, NULL, 0}; - static Tokenrow tr = {&ta, &ta, &ta + 1, 1}; - uchar *p; - - ta.t = p = (uchar *) outptr; - - if (import) - strcpy((char *) p, "#pragma import"); - else - strcpy((char *) p, "#pragma include"); - - p += strlen((char *) p); - - *p++ = '('; - - *p++ = angled ? '<' : '"'; - strcpy((char *) p, fname); - p += strlen(fname); - *p++ = angled ? '>' : '"'; - - *p++ = ','; - - *p++ = '"'; - strcpy((char *) p, iname); - p += strlen(iname); - *p++ = '"'; - - *p++ = ')'; - *p++ = '\n'; - - ta.len = (char *) p - outptr; - outptr = (char *) p; - tr.tp = tr.bp; - puttokens(&tr); -} - -/* - * Generate a extern C directive - */ -void - genwrap(int end) -{ - static Token ta = {UNCLASS, 0, 0, 0, NULL, 0}; - static Tokenrow tr = {&ta, &ta, &ta + 1, 1}; - uchar *p; - - if (Cplusplus) - { - ta.t = p = (uchar *) outptr; - - if (! end) - strcpy((char *) p, "extern \"C\" {"); - else - strcpy((char *) p, "}"); - - p += strlen((char *) p); - - *p++ = '\n'; - - ta.len = (char *) p - outptr; - outptr = (char *) p; - tr.tp = tr.bp; - puttokens(&tr); - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/cpp/_lex.c b/soltools/cpp/_lex.c deleted file mode 100644 index 405ae7075..000000000 --- a/soltools/cpp/_lex.c +++ /dev/null @@ -1,691 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#if (defined(_WIN32) || defined(__IBMC__)) -#include <io.h> -#else -#include <unistd.h> -#endif -#include "cpp.h" -/* - * lexical FSM encoding - * when in state state, and one of the characters - * in ch arrives, enter nextstate. - * States >= S_SELF are either final, or at least require special action. - * In 'fsm' there is a line for each state X charset X nextstate. - * List chars that overwrite previous entries later (e.g. C_ALPH - * can be overridden by '_' by a later entry; and C_XX is the - * the universal set, and should always be first. - * States above S_SELF are represented in the big table as negative values. - * S_SELF and S_SELFB encode the resulting token type in the upper bits. - * These actions differ in that S_SELF doesn't have a lookahead char, - * S_SELFB does. - * - * The encoding is blown out into a big table for time-efficiency. - * Entries have - * nextstate: 6 bits; ?\ marker: 1 bit; tokentype: 9 bits. - */ - -#define MAXSTATE 32 -#define ACT(tok,act) ((tok<<7)+act) -#define QBSBIT 0100 -#define GETACT(st) ((st>>7)&0x1ff) - -/* character classes */ -#define C_WS 1 -#define C_ALPH 2 -#define C_NUM 3 -#define C_EOF 4 -#define C_XX 5 - -enum state -{ - START = 0, NUM1, NUM2, NUM3, ID1, ST1, ST2, ST3, COM1, COM2, COM3, COM4, - CC1, CC2, WS1, PLUS1, MINUS1, STAR1, SLASH1, PCT1, SHARP1, - CIRC1, GT1, GT2, LT1, LT2, OR1, AND1, ASG1, NOT1, DOTS1, - S_SELF = MAXSTATE, S_SELFB, S_EOF, S_NL, S_EOFSTR, - S_STNL, S_COMNL, S_EOFCOM, S_COMMENT, S_EOB, S_WS, S_NAME -}; - -int tottok; -int tokkind[256]; -struct fsm -{ - int state; /* if in this state */ - uchar ch[4]; /* and see one of these characters */ - int nextstate; /* enter this state if +ve */ -}; - - /*const*/ struct fsm fsm[] = { - /* start state */ - {START, {C_XX}, ACT(UNCLASS, S_SELF)}, - {START, {' ', '\t', '\v'}, WS1}, - {START, {C_NUM}, NUM1}, - {START, {'.'}, NUM3}, - {START, {C_ALPH}, ID1}, - {START, {'L'}, ST1}, - {START, {'"'}, ST2}, - {START, {'\''}, CC1}, - {START, {'/'}, COM1}, - {START, {EOFC}, S_EOF}, - {START, {'\n'}, S_NL}, - {START, {'-'}, MINUS1}, - {START, {'+'}, PLUS1}, - {START, {'<'}, LT1}, - {START, {'>'}, GT1}, - {START, {'='}, ASG1}, - {START, {'!'}, NOT1}, - {START, {'&'}, AND1}, - {START, {'|'}, OR1}, - {START, {'#'}, SHARP1}, - {START, {'%'}, PCT1}, - {START, {'['}, ACT(SBRA, S_SELF)}, - {START, {']'}, ACT(SKET, S_SELF)}, - {START, {'('}, ACT(LP, S_SELF)}, - {START, {')'}, ACT(RP, S_SELF)}, - {START, {'*'}, STAR1}, - {START, {','}, ACT(COMMA, S_SELF)}, - {START, {'?'}, ACT(QUEST, S_SELF)}, - {START, {':'}, ACT(COLON, S_SELF)}, - {START, {';'}, ACT(SEMIC, S_SELF)}, - {START, {'{'}, ACT(CBRA, S_SELF)}, - {START, {'}'}, ACT(CKET, S_SELF)}, - {START, {'~'}, ACT(TILDE, S_SELF)}, - {START, {'^'}, CIRC1}, - - /* saw a digit */ - {NUM1, {C_XX}, ACT(NUMBER, S_SELFB)}, - {NUM1, {C_NUM, C_ALPH, '.'}, NUM1}, - {NUM1, {'E', 'e'}, NUM2}, - {NUM1, {'_'}, ACT(NUMBER, S_SELFB)}, - - /* saw possible start of exponent, digits-e */ - {NUM2, {C_XX}, ACT(NUMBER, S_SELFB)}, - {NUM2, {'+', '-'}, NUM1}, - {NUM2, {C_NUM, C_ALPH}, NUM1}, - {NUM2, {'_'}, ACT(NUMBER, S_SELFB)}, - - /* saw a '.', which could be a number or an operator */ - {NUM3, {C_XX}, ACT(DOT, S_SELFB)}, - {NUM3, {'.'}, DOTS1}, - {NUM3, {C_NUM}, NUM1}, - - {DOTS1, {C_XX}, ACT(UNCLASS, S_SELFB)}, - {DOTS1, {C_NUM}, NUM1}, - {DOTS1, {'.'}, ACT(ELLIPS, S_SELF)}, - - /* saw a letter or _ */ - {ID1, {C_XX}, ACT(NAME, S_NAME)}, - {ID1, {C_ALPH, C_NUM}, ID1}, - - /* saw L (start of wide string?) */ - {ST1, {C_XX}, ACT(NAME, S_NAME)}, - {ST1, {C_ALPH, C_NUM}, ID1}, - {ST1, {'"'}, ST2}, - {ST1, {'\''}, CC1}, - - /* saw " beginning string */ - {ST2, {C_XX}, ST2}, - {ST2, {'"'}, ACT(STRING, S_SELF)}, - {ST2, {'\\'}, ST3}, - {ST2, {'\n'}, S_STNL}, - {ST2, {EOFC}, S_EOFSTR}, - - /* saw \ in string */ - {ST3, {C_XX}, ST2}, - {ST3, {'\n'}, S_STNL}, - {ST3, {EOFC}, S_EOFSTR}, - - /* saw ' beginning character const */ - {CC1, {C_XX}, CC1}, - {CC1, {'\''}, ACT(CCON, S_SELF)}, - {CC1, {'\\'}, CC2}, - {CC1, {'\n'}, S_STNL}, - {CC1, {EOFC}, S_EOFSTR}, - - /* saw \ in ccon */ - {CC2, {C_XX}, CC1}, - {CC2, {'\n'}, S_STNL}, - {CC2, {EOFC}, S_EOFSTR}, - - /* saw /, perhaps start of comment */ - {COM1, {C_XX}, ACT(SLASH, S_SELFB)}, - {COM1, {'='}, ACT(ASSLASH, S_SELF)}, - {COM1, {'*'}, COM2}, - {COM1, {'/'}, COM4}, - - /* saw / followed by *, start of comment */ - {COM2, {C_XX}, COM2}, - {COM2, {'\n'}, S_COMNL}, - {COM2, {'*'}, COM3}, - {COM2, {EOFC}, S_EOFCOM}, - - /* saw the * possibly ending a comment */ - {COM3, {C_XX}, COM2}, - {COM3, {'\n'}, S_COMNL}, - {COM3, {'*'}, COM3}, - {COM3, {'/'}, S_COMMENT}, - - /* // comment */ - {COM4, {C_XX}, COM4}, - {COM4, {'\n'}, S_NL}, - {COM4, {EOFC}, S_EOFCOM}, - - /* saw white space, eat it up */ - {WS1, {C_XX}, S_WS}, - {WS1, {'\t', '\v', ' '}, WS1}, - - /* saw -, check --, -=, -> */ - {MINUS1, {C_XX}, ACT(MINUS, S_SELFB)}, - {MINUS1, {'-'}, ACT(MMINUS, S_SELF)}, - {MINUS1, {'='}, ACT(ASMINUS, S_SELF)}, - {MINUS1, {'>'}, ACT(ARROW, S_SELF)}, - - /* saw +, check ++, += */ - {PLUS1, {C_XX}, ACT(PLUS, S_SELFB)}, - {PLUS1, {'+'}, ACT(PPLUS, S_SELF)}, - {PLUS1, {'='}, ACT(ASPLUS, S_SELF)}, - - /* saw <, check <<, <<=, <= */ - {LT1, {C_XX}, ACT(LT, S_SELFB)}, - {LT1, {'<'}, LT2}, - {LT1, {'='}, ACT(LEQ, S_SELF)}, - {LT2, {C_XX}, ACT(LSH, S_SELFB)}, - {LT2, {'='}, ACT(ASLSH, S_SELF)}, - - /* saw >, check >>, >>=, >= */ - {GT1, {C_XX}, ACT(GT, S_SELFB)}, - {GT1, {'>'}, GT2}, - {GT1, {'='}, ACT(GEQ, S_SELF)}, - {GT2, {C_XX}, ACT(RSH, S_SELFB)}, - {GT2, {'='}, ACT(ASRSH, S_SELF)}, - - /* = */ - {ASG1, {C_XX}, ACT(ASGN, S_SELFB)}, - {ASG1, {'='}, ACT(EQ, S_SELF)}, - - /* ! */ - {NOT1, {C_XX}, ACT(NOT, S_SELFB)}, - {NOT1, {'='}, ACT(NEQ, S_SELF)}, - - /* & */ - {AND1, {C_XX}, ACT(AND, S_SELFB)}, - {AND1, {'&'}, ACT(LAND, S_SELF)}, - {AND1, {'='}, ACT(ASAND, S_SELF)}, - - /* | */ - {OR1, {C_XX}, ACT(OR, S_SELFB)}, - {OR1, {'|'}, ACT(LOR, S_SELF)}, - {OR1, {'='}, ACT(ASOR, S_SELF)}, - - /* # */ - {SHARP1, {C_XX}, ACT(SHARP, S_SELFB)}, - {SHARP1, {'#'}, ACT(DSHARP, S_SELF)}, - - /* % */ - {PCT1, {C_XX}, ACT(PCT, S_SELFB)}, - {PCT1, {'='}, ACT(ASPCT, S_SELF)}, - - /* * */ - {STAR1, {C_XX}, ACT(STAR, S_SELFB)}, - {STAR1, {'='}, ACT(ASSTAR, S_SELF)}, - - /* ^ */ - {CIRC1, {C_XX}, ACT(CIRC, S_SELFB)}, - {CIRC1, {'='}, ACT(ASCIRC, S_SELF)}, - - {-1, "", 0} -}; - -/* first index is char, second is state */ -/* increase #states to power of 2 to encourage use of shift */ -short bigfsm[256][MAXSTATE]; - -void - expandlex(void) -{ - /* const */ struct fsm *fp; - int i, j, nstate; - - for (fp = fsm; fp->state >= 0; fp++) - { - for (i = 0; fp->ch[i]; i++) - { - nstate = fp->nextstate; - if (nstate >= S_SELF) - nstate = ~nstate; - switch (fp->ch[i]) - { - - case C_XX: /* random characters */ - for (j = 0; j < 256; j++) - bigfsm[j][fp->state] = (short) nstate; - continue; - case C_ALPH: - for (j = 0; j < 256; j++) -#ifdef S390 - if( isalpha( j ) || (j == '_') ) -#else - if (('a' <= j && j <= 'z') || ('A' <= j && j <= 'Z') - || j == '_') -#endif - bigfsm[j][fp->state] = (short) nstate; - continue; - case C_NUM: - for (j = '0'; j <= '9'; j++) - bigfsm[j][fp->state] = (short) nstate; - continue; - default: - bigfsm[fp->ch[i]][fp->state] = (short) nstate; - } - } - } - - /* - * install special cases for ? (trigraphs), \ (splicing), runes, and - * EOB - */ - for (i = 0; i < MAXSTATE; i++) - { - for (j = 0; j < 0xFF; j++) - if (j == '?' || j == '\\' || j == '\n' || j == '\r') - { - if (bigfsm[j][i] > 0) - bigfsm[j][i] = ~bigfsm[j][i]; - bigfsm[j][i] &= ~QBSBIT; - } - bigfsm[EOB][i] = ~S_EOB; - if (bigfsm[EOFC][i] >= 0) - bigfsm[EOFC][i] = ~S_EOF; - } -} - -void - fixlex(void) -{ - /* do C++ comments? */ - if ((Cplusplus == 0) || (Cflag != 0)) - bigfsm['/'][COM1] = bigfsm['x'][COM1]; -} - -/* - * fill in a row of tokens from input, terminated by NL or END - * First token is put at trp->lp. - * Reset is non-zero when the input buffer can be "rewound." - * The value is a flag indicating that possible macros have - * been seen in the row. - */ -int - gettokens(Tokenrow * trp, int reset) -{ - register int c, state, oldstate; - register uchar *ip; - register Token *tp, *maxp; - int runelen; - Source *s = cursource; - int nmac = 0; - - tp = trp->lp; - ip = s->inp; - if (reset) - { - s->lineinc = 0; - if (ip >= s->inl) - { /* nothing in buffer */ - s->inl = s->inb; - fillbuf(s); - ip = s->inp = s->inb; - } - else - if (ip >= s->inb + (3 * INS / 4)) - { - memmove(s->inb, ip, 4 + s->inl - ip); - s->inl = s->inb + (s->inl - ip); - ip = s->inp = s->inb; - } - } - maxp = &trp->bp[trp->max]; - runelen = 1; - for (;;) - { -continue2: - if (tp >= maxp) - { - trp->lp = tp; - tp = growtokenrow(trp); - maxp = &trp->bp[trp->max]; - } - tp->type = UNCLASS; - tp->t = ip; - tp->wslen = 0; - tp->flag = 0; - state = START; - for (;;) - { - oldstate = state; - - c = *ip; - - if ((state = bigfsm[c][state]) >= 0) - { - ip += runelen; - runelen = 1; - continue; - } - state = ~state; - reswitch: - switch (state & 0177) - { - case S_SELF: - ip += runelen; - runelen = 1; - case S_SELFB: - tp->type = (unsigned char) GETACT(state); - tp->len = ip - tp->t; - tp++; - goto continue2; - - case S_NAME: /* like S_SELFB but with nmac check */ - tp->type = NAME; - tp->len = ip - tp->t; - nmac |= quicklook(tp->t[0], tp->len > 1 ? tp->t[1] : 0); - tp++; - goto continue2; - - case S_WS: - tp->wslen = ip - tp->t; - tp->t = ip; - state = START; - continue; - - default: - if ((state & QBSBIT) == 0) - { - ip += runelen; - runelen = 1; - continue; - } - state &= ~QBSBIT; - s->inp = ip; - - if (c == '\n') - { - while (s->inp + 1 >= s->inl && fillbuf(s) != EOF); - - if (s->inp[1] == '\r') - { - memmove(s->inp + 1, s->inp + 2, s->inl - s->inp + 2); - s->inl -= 1; - } - - goto reswitch; - } - - if (c == '\r') - { - while (s->inp + 1 >= s->inl && fillbuf(s) != EOF); - - if (s->inp[1] == '\n') - { - memmove(s->inp, s->inp + 1, s->inl - s->inp + 1); - s->inl -= 1; - } - else - *s->inp = '\n'; - - state = oldstate; - continue; - } - - if (c == '?') - { /* check trigraph */ - if (trigraph(s)) - { - state = oldstate; - continue; - } - goto reswitch; - } - if (c == '\\') - { /* line-folding */ - if (foldline(s)) - { - s->lineinc++; - state = oldstate; - continue; - } - goto reswitch; - } - error(WARNING, "Lexical botch in cpp"); - ip += runelen; - runelen = 1; - continue; - - case S_EOB: - s->inp = ip; - fillbuf(cursource); - state = oldstate; - continue; - - case S_EOF: - tp->type = END; - tp->len = 0; - s->inp = ip; - if (tp != trp->bp && (tp - 1)->type != NL && cursource->fd != -1) - error(WARNING, "No newline at end of file"); - trp->lp = tp + 1; - return nmac; - - case S_STNL: - error(ERROR, "Unterminated string or char const"); - case S_NL: - tp->t = ip; - tp->type = NL; - tp->len = 1; - tp->wslen = 0; - s->lineinc++; - s->inp = ip + 1; - trp->lp = tp + 1; - return nmac; - - case S_EOFSTR: - error(FATAL, "EOF in string or char constant"); - break; - - case S_COMNL: - s->lineinc++; - state = COM2; - ip += runelen; - runelen = 1; - continue; - - case S_EOFCOM: - error(WARNING, "EOF inside comment"); - --ip; - case S_COMMENT: - if (!Cflag) - { - tp->t = ++ip; - tp->t[-1] = ' '; - tp->wslen = 1; - state = START; - continue; - } - else - { - runelen = 1; - s->lineinc = 0;; - tp->type = COMMENT; - tp->flag |= XTWS; - } - } - break; - } - ip += runelen; - runelen = 1; - tp->len = ip - tp->t; - tp++; - } -} - -/* have seen ?; handle the trigraph it starts (if any) else 0 */ -int - trigraph(Source * s) -{ - uchar c; - - while (s->inp + 2 >= s->inl && fillbuf(s) != EOF); - ; - if (s->inp[1] != '?') - return 0; - c = 0; - switch (s->inp[2]) - { - case '=': - c = '#'; - break; - case '(': - c = '['; - break; - case '/': - c = '\\'; - break; - case ')': - c = ']'; - break; - case '\'': - c = '^'; - break; - case '<': - c = '{'; - break; - case '!': - c = '|'; - break; - case '>': - c = '}'; - break; - case '-': - c = '~'; - break; - } - if (c) - { - *s->inp = c; - memmove(s->inp + 1, s->inp + 3, s->inl - s->inp + 2); - s->inl -= 2; - } - return c; -} - -int - foldline(Source * s) -{ - int n = 1; - - /* skip pending wihite spaces */ - while ((s->inp[n] == ' ') || (s->inp[n] == '\t')) - { - n++; - if ((s->inp + n >= s->inl) && (fillbuf(s) == EOF)) - break; - } - - /* refill buffer */ - while (s->inp + (n + 1) >= s->inl && fillbuf(s) != EOF); - - /* skip DOS line ends */ - if (((s->inp[n] == '\r') && (s->inp[n+1] == '\n')) || - ((s->inp[n] == '\n') && (s->inp[n+1] == '\r'))) - n++; - - if ((s->inp[n] == '\n') || (s->inp[n] == '\r')) - { - memmove(s->inp, s->inp + n + 1, s->inl - s->inp + n + 2); - s->inl -= n + 1; - return 1; - } - return 0; -} - -int - fillbuf(Source * s) -{ - int n; - - if (s->fd < 0 || (n = read(s->fd, (char *) s->inl, INS / 8)) <= 0) - n = 0; - s->inl += n; - s->inl[0] = s->inl[1] = s->inl[2] = s->inl[3] = EOB; - if (n == 0) - { - s->inl[0] = s->inl[1] = s->inl[2] = s->inl[3] = EOFC; - return EOF; - } - return 0; -} - -/* - * Push down to new source of characters. - * If fd>0 and str==NULL, then from a file `name'; - * if fd==-1 and str, then from the string. - */ -Source * - setsource(char *name, int path, int fd, char *str, int wrap) -{ - Source *s = new(Source); - size_t len; - - s->line = 1; - s->lineinc = 0; - s->fd = fd; - s->filename = name; - s->next = cursource; - s->ifdepth = 0; - s->pathdepth = path; - s->wrap = wrap; - - cursource = s; - - if (s->wrap) - genwrap(0); - - /* slop at right for EOB */ - if (str) - { - len = strlen(str); - s->inb = domalloc(len + 4); - s->inp = s->inb; - strncpy((char *) s->inp, str, len); - } - else - { - s->inb = domalloc(INS + 4); - s->inp = s->inb; - len = 0; - } - s->inl = s->inp + len; - s->inl[0] = s->inl[1] = EOB; - - return s; -} - -void - unsetsource(void) -{ - Source *s = cursource; - - if (s->wrap) - genwrap(1); - - if (s->fd >= 0) - { - close(s->fd); - dofree(s->inb); - } - cursource = s->next; - dofree(s); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/cpp/_macro.c b/soltools/cpp/_macro.c deleted file mode 100644 index 8be4f3f11..000000000 --- a/soltools/cpp/_macro.c +++ /dev/null @@ -1,735 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#ifdef _MSC_VER -# define _POSIX_ -#endif -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#if defined(__IBMC__) || defined(__EMX__) -# define PATH_MAX _MAX_PATH -#endif -#include <limits.h> - -#include "cpp.h" - -#define NCONCAT 16384 - -/* - * do a macro definition. tp points to the name being defined in the line - */ -void - dodefine(Tokenrow * trp) -{ - Token *tp; - Nlist *np; - Source *s; - Tokenrow *def, *args; - static uchar location[(PATH_MAX + 8) * NINC], *cp; - - tp = trp->tp + 1; - if (tp >= trp->lp || tp->type != NAME) - { - error(ERROR, "#defined token is not a name"); - return; - } - np = lookup(tp, 1); - if (np->flag & ISUNCHANGE) - { - error(ERROR, "#defined token %t can't be redefined", tp); - return; - } - /* collect arguments */ - tp += 1; - args = NULL; - if (tp < trp->lp && tp->type == LP && tp->wslen == 0) - { - tp += 1; - args = new(Tokenrow); - maketokenrow(2, args); - if (tp->type != RP) - { - /* macro with args */ - size_t narg = 0; - int err = 0; - - for (;;) - { - Token *atp; - - if (tp->type != NAME) - { - err++; - break; - } - if (narg >= args->max) - growtokenrow(args); - for (atp = args->bp; atp < args->lp; atp++) - if (atp->len == tp->len - && strncmp((char *) atp->t, (char *) tp->t, tp->len) == 0) - error(ERROR, "Duplicate macro argument"); - *args->lp++ = *tp; - narg++; - tp += 1; - if (tp->type == RP) - break; - if (tp->type != COMMA) - { - err++; - break; - } - tp += 1; - } - if (err) - { - error(ERROR, "Syntax error in macro parameters"); - return; - } - } - tp += 1; - } - trp->tp = tp; - if (((trp->lp) - 1)->type == NL) - trp->lp -= 1; - def = normtokenrow(trp); - if (np->flag & ISDEFINED) - { - if (comparetokens(def, np->vp) - || (np->ap == NULL) != (args == NULL) - || (np->ap && comparetokens(args, np->ap))) - { - if ( np->loc ) - error(ERROR, - "Macro redefinition of %t (already defined at %s)", - trp->bp + 2, np->loc); - else - error(ERROR, - "Macro redefinition of %t (already defined at %s)", - trp->bp + 2, "commandline" ); - } - } - if (args) - { - Tokenrow *tap; - - tap = normtokenrow(args); - dofree(args->bp); - args = tap; - } - np->ap = args; - np->vp = def; - np->flag |= ISDEFINED; - - /* build location string of macro definition */ - for (cp = location, s = cursource; s; s = s->next) - if (*s->filename) - { - if (cp != location) - *cp++ = ' '; - sprintf((char *)cp, "%s:%d", s->filename, s->line); - cp += strlen((char *)cp); - } - - np->loc = newstring(location, strlen((char *)location), 0); - - if (Mflag) - { - if (np->ap) - error(INFO, "Macro definition of %s(%r) [%r]", np->name, np->ap, np->vp); - else - error(INFO, "Macro definition of %s [%r]", np->name, np->vp); - } -} - -/* - * Definition received via -D or -U - */ -void - doadefine(Tokenrow * trp, int type) -{ - Nlist *np; - static uchar onestr[2] = "1"; - static Token onetoken[1] = {{NUMBER, 0, 0, 1, onestr, 0}}; - static Tokenrow onetr = {onetoken, onetoken, onetoken + 1, 1}; - - trp->tp = trp->bp; - if (type == 'U') - { - if (trp->lp - trp->tp != 2 || trp->tp->type != NAME) - goto syntax; - if ((np = lookup(trp->tp, 0)) == NULL) - return; - np->flag &= ~ISDEFINED; - return; - } - - if (type == 'A') - { - if (trp->tp >= trp->lp || trp->tp->type != NAME) - goto syntax; - trp->tp->type = ARCHITECTURE; - np = lookup(trp->tp, 1); - np->flag |= ISARCHITECTURE; - trp->tp += 1; - if (trp->tp >= trp->lp || trp->tp->type == END) - { - np->vp = &onetr; - return; - } - else - error(FATAL, "Illegal -A argument %r", trp); - } - - if (trp->tp >= trp->lp || trp->tp->type != NAME) - goto syntax; - np = lookup(trp->tp, 1); - np->flag |= ISDEFINED; - trp->tp += 1; - if (trp->tp >= trp->lp || trp->tp->type == END) - { - np->vp = &onetr; - return; - } - if (trp->tp->type != ASGN) - goto syntax; - trp->tp += 1; - if ((trp->lp - 1)->type == END) - trp->lp -= 1; - np->vp = normtokenrow(trp); - return; -syntax: - error(FATAL, "Illegal -D or -U argument %r", trp); -} - - - -/* - * Do macro expansion in a row of tokens. - * Flag is NULL if more input can be gathered. - */ -void - expandrow(Tokenrow * trp, char *flag) -{ - Token * tp; - Nlist * np; - - MacroValidatorList validators; - mvl_init(&validators); - /* Sets all token-identifiers to 0 because tokens may not be initialised (never use C!) */ - tokenrow_zeroTokenIdentifiers(trp); - - if (flag) - setsource(flag, -1, -1, "", 0); - for (tp = trp->tp; tp < trp->lp;) - { - mvl_check(&validators, tp); - - if (tp->type != NAME - || quicklook(tp->t[0], tp->len > 1 ? tp->t[1] : 0) == 0 - || (np = lookup(tp, 0)) == NULL - || (np->flag & (ISDEFINED | ISMAC)) == 0 - || (np->flag & ISACTIVE) != 0) - { - tp++; - continue; - } - trp->tp = tp; - if (np->val == KDEFINED) - { - tp->type = DEFINED; - if ((tp + 1) < trp->lp && (tp + 1)->type == NAME) - (tp + 1)->type = NAME1; - else - if ((tp + 3) < trp->lp && (tp + 1)->type == LP - && (tp + 2)->type == NAME && (tp + 3)->type == RP) - (tp + 2)->type = NAME1; - else - error(ERROR, "Incorrect syntax for `defined'"); - tp++; - continue; - } - else - if (np->val == KMACHINE) - { - if (((tp - 1) >= trp->bp) && ((tp - 1)->type == SHARP)) - { - tp->type = ARCHITECTURE; - if ((tp + 1) < trp->lp && (tp + 1)->type == NAME) - (tp + 1)->type = NAME2; - else - if ((tp + 3) < trp->lp && (tp + 1)->type == LP - && (tp + 2)->type == NAME && (tp + 3)->type == RP) - (tp + 2)->type = NAME2; - else - error(ERROR, "Incorrect syntax for `#machine'"); - } - tp++; - continue; - } - - if (np->flag & ISMAC) - builtin(trp, np->val); - else - expand(trp, np, &validators); - tp = trp->tp; - } // end for - if (flag) - unsetsource(); - - mvl_destruct(&validators); -} - -/* - * Expand the macro whose name is np, at token trp->tp, in the tokenrow. - * Return trp->tp at the first token next to be expanded - * (ordinarily the beginning of the expansion) - * I.e.: the same position as before! - * Only one expansion is performed, then we return to the expandrow() - * loop and start at same position. - */ -void - expand(Tokenrow * trp, Nlist * np, MacroValidatorList * pValidators) -{ - Tokenrow ntr; - int ntokc, narg; - Tokenrow *atr[NARG + 1]; - - if (Mflag == 2) - { - if (np->ap) - error(INFO, "Macro expansion of %t with %s(%r)", trp->tp, np->name, np->ap); - else - error(INFO, "Macro expansion of %t with %s", trp->tp, np->name); - } - - copytokenrow(&ntr, np->vp); /* copy macro value */ - if (np->ap == NULL) /* parameterless */ - ntokc = 1; - else - { - int i; - - ntokc = gatherargs(trp, atr, &narg); - if (narg < 0) - { /* not actually a call (no '(') */ - trp->tp++; - return; - } - if (narg != rowlen(np->ap)) - { - error(ERROR, "Disagreement in number of macro arguments"); - trp->tp += ntokc; - return; - } - - /** If gatherargs passed a macro validating token, this token - must become valid here. - trp->tp+0 was checked in expandrow(), so we dont need to do it - again here: - */ - for (i = 1; i < ntokc; i++) - { - mvl_check(pValidators,trp->tp+i); - } - - substargs(np, &ntr, atr); /* put args into replacement */ - for (i = 0; i < narg; i++) - { - dofree(atr[i]->bp); - dofree(atr[i]); - } - } - - doconcat(&ntr); /* execute ## operators */ - ntr.tp = ntr.bp; - makespace(&ntr, trp->tp); - - tokenrow_zeroTokenIdentifiers(&ntr); - insertrow(trp, ntokc, &ntr); - - /* add validator for just invalidated macro: - */ - np->flag |= ISACTIVE; - if (trp->tp != trp->lp) - { /* tp is a valid pointer: */ - mvl_add(pValidators,np,trp->tp); - } - else - { /* tp is == lp, therefore does not point to valid memory: */ - mvl_add(pValidators,np,0); - } - /* reset trp->tp to original position: - */ - trp->tp -= ntr.lp - ntr.bp; /* so the result will be tested for macros from the same position again */ - - dofree(ntr.bp); - - return; -} - -/* - * Gather an arglist, starting in trp with tp pointing at the macro name. - * Return total number of tokens passed, stash number of args found. - * trp->tp is not changed relative to the tokenrow. - */ -int - gatherargs(Tokenrow * trp, Tokenrow ** atr, int *narg) -{ - int parens = 1; - int ntok = 0; - Token *bp, *lp; - Tokenrow ttr; - int ntokp; - int needspace; - - *narg = -1; /* means that there is no macro - * call */ - /* look for the ( */ - for (;;) - { - trp->tp++; - ntok++; - if (trp->tp >= trp->lp) - { - gettokens(trp, 0); - if ((trp->lp - 1)->type == END) - { - trp->lp -= 1; - trp->tp -= ntok; - return ntok; - } - } - if (trp->tp->type == LP) - break; - if (trp->tp->type != NL) - return ntok; - } - *narg = 0; - ntok++; - ntokp = ntok; - trp->tp++; - /* search for the terminating ), possibly extending the row */ - needspace = 0; - while (parens > 0) - { - if (trp->tp >= trp->lp) - gettokens(trp, 0); - if (needspace) - { - needspace = 0; - /* makespace(trp); [rh] */ - } - if (trp->tp->type == END) - { - trp->lp -= 1; - trp->tp -= ntok; - error(ERROR, "EOF in macro arglist"); - return ntok; - } - if (trp->tp->type == NL) - { - trp->tp += 1; - adjustrow(trp, -1); - trp->tp -= 1; - /* makespace(trp); [rh] */ - needspace = 1; - continue; - } - if (trp->tp->type == LP) - parens++; - else - if (trp->tp->type == RP) - parens--; - trp->tp++; - ntok++; - } - trp->tp -= ntok; - /* Now trp->tp won't move underneath us */ - lp = bp = trp->tp + ntokp; - for (; parens >= 0; lp++) - { - if (lp->type == LP) - { - parens++; - continue; - } - if (lp->type == RP) - parens--; - if (lp->type == DSHARP) - lp->type = DSHARP1; /* ## not special in arg */ - if ((lp->type == COMMA && parens == 0) || - ( parens < 0 && ((lp - 1)->type != LP))) - { - if (*narg >= NARG - 1) - error(FATAL, "Sorry, too many macro arguments"); - ttr.bp = ttr.tp = bp; - ttr.lp = lp; - atr[(*narg)++] = normtokenrow(&ttr); - bp = lp + 1; - } - } - return ntok; -} - -/* - * substitute the argument list into the replacement string - * This would be simple except for ## and # - */ -void - substargs(Nlist * np, Tokenrow * rtr, Tokenrow ** atr) -{ - Tokenrow tatr; - Token *tp; - int ntok, argno; - - for (rtr->tp = rtr->bp; rtr->tp < rtr->lp;) - { - if (rtr->tp->type == SHARP) - { /* string operator */ - tp = rtr->tp; - rtr->tp += 1; - if ((argno = lookuparg(np, rtr->tp)) < 0) - { - error(ERROR, "# not followed by macro parameter"); - continue; - } - ntok = 1 + (int)(rtr->tp - tp); - rtr->tp = tp; - insertrow(rtr, ntok, stringify(atr[argno])); - continue; - } - if (rtr->tp->type == NAME - && (argno = lookuparg(np, rtr->tp)) >= 0) - { - if (((rtr->tp + 1) < rtr->lp && (rtr->tp + 1)->type == DSHARP) - || (rtr->tp != rtr->bp && (rtr->tp - 1)->type == DSHARP)) - { - copytokenrow(&tatr, atr[argno]); - makespace(&tatr, rtr->tp); - insertrow(rtr, 1, &tatr); - dofree(tatr.bp); - } - else - { - copytokenrow(&tatr, atr[argno]); - makespace(&tatr, rtr->tp); - expandrow(&tatr, "<macro>"); - insertrow(rtr, 1, &tatr); - dofree(tatr.bp); - } - continue; - } - rtr->tp++; - } -} - -/* - * Evaluate the ## operators in a tokenrow - */ -void - doconcat(Tokenrow * trp) -{ - Token *ltp, *ntp; - Tokenrow ntr; - size_t len; - - for (trp->tp = trp->bp; trp->tp < trp->lp; trp->tp++) - { - if (trp->tp->type == DSHARP1) - trp->tp->type = DSHARP; - else - if (trp->tp->type == DSHARP) - { - int i; - char tt[NCONCAT]; - - ltp = trp->tp - 1; - ntp = trp->tp + 1; - - if (ltp < trp->bp || ntp >= trp->lp) - { - error(ERROR, "## occurs at border of replacement"); - continue; - } - - ntp = ltp; - i = 1; - len = 0; - - do - { - if (len + ntp->len + ntp->wslen > sizeof(tt)) - { - error(ERROR, "## string concatination buffer overrun"); - break; - } - - if (ntp != trp->tp + 1) - { - strncpy((char *) tt + len, (char *) ntp->t - ntp->wslen, - ntp->len + ntp->wslen); - len += ntp->len + ntp->wslen; - } - else // Leerzeichen um ## herum entfernen: - { - strncpy((char *) tt + len, (char *) ntp->t, ntp->len); - len += ntp->len; - } - - ntp = trp->tp + i; - i++; - } - while (ntp < trp->lp); - - tt[len] = '\0'; - setsource("<##>", -1, -1, tt, 0); - maketokenrow(3, &ntr); - gettokens(&ntr, 1); - unsetsource(); - if (ntr.bp->type == UNCLASS) - error(WARNING, "Bad token %r produced by ##", &ntr); - while ((ntr.lp-1)->len == 0 && ntr.lp != ntr.bp) - ntr.lp--; - - doconcat(&ntr); - trp->tp = ltp; - makespace(&ntr, ltp); - insertrow(trp, (int)(ntp - ltp), &ntr); - dofree(ntr.bp); - trp->tp--; - } - } -} - -/* - * tp is a potential parameter name of macro mac; - * look it up in mac's arglist, and if found, return the - * corresponding index in the argname array. Return -1 if not found. - */ -int - lookuparg(Nlist * mac, Token * tp) -{ - Token *ap; - - if (tp->type != NAME || mac->ap == NULL) - return -1; - for (ap = mac->ap->bp; ap < mac->ap->lp; ap++) - { - if (ap->len == tp->len && strncmp((char *) ap->t, (char *) tp->t, ap->len) == 0) - return (int)(ap - mac->ap->bp); - } - return -1; -} - -/* - * Return a quoted version of the tokenrow (from # arg) - */ -#define STRLEN 512 -Tokenrow * - stringify(Tokenrow * vp) -{ - static Token t = {STRING, 0, 0, 0, NULL, 0}; - static Tokenrow tr = {&t, &t, &t + 1, 1}; - Token *tp; - uchar s[STRLEN]; - uchar *sp = s, *cp; - int i, instring; - - *sp++ = '"'; - for (tp = vp->bp; tp < vp->lp; tp++) - { - instring = tp->type == STRING || tp->type == CCON; - if (sp + 2 * tp->len + tp->wslen >= &s[STRLEN - 10]) - { - error(ERROR, "Stringified macro arg is too long"); - break; - } - - // Change by np 31.10.2001, #93725 - begin - if ( tp->wslen > 0 ) - *sp++ = ' '; - // change end. - - for (i = 0, cp = tp->t; (unsigned int)i < tp->len; i++) - { - if (instring && (*cp == '"' || *cp == '\\')) - *sp++ = '\\'; - *sp++ = *cp++; - } - } - *sp++ = '"'; - *sp = '\0'; - sp = s; - t.len = strlen((char *) sp); - t.t = newstring(sp, t.len, 0); - return &tr; -} - -/* - * expand a builtin name - */ -void - builtin(Tokenrow * trp, int biname) -{ - char *op; - Token *tp; - Source *s; - - tp = trp->tp; - trp->tp++; - /* need to find the real source */ - s = cursource; - while (s && s->fd == -1) - s = s->next; - if (s == NULL) - s = cursource; - /* most are strings */ - tp->type = STRING; - if (tp->wslen) - { - *outptr++ = ' '; - tp->wslen = 1; - } - op = outptr; - *op++ = '"'; - switch (biname) - { - - case KLINENO: - tp->type = NUMBER; - op = outnum(op - 1, s->line); - break; - - case KFILE: - { - char *src = s->filename; - - while ((*op++ = *src++) != 0) - if (src[-1] == '\\') - *op++ = '\\'; - op--; - break; - } - - case KDATE: - strncpy(op, curtime + 4, 7); - strncpy(op + 7, curtime + 20, 4); - op += 11; - break; - - case KTIME: - strncpy(op, curtime + 11, 8); - op += 8; - break; - - default: - error(ERROR, "cpp botch: unknown internal macro"); - return; - } - if (tp->type == STRING) - *op++ = '"'; - tp->t = (uchar *) outptr; - tp->len = op - outptr; - outptr = op; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/cpp/_mcrvalid.c b/soltools/cpp/_mcrvalid.c deleted file mode 100644 index 6f5e1da23..000000000 --- a/soltools/cpp/_mcrvalid.c +++ /dev/null @@ -1,109 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "cpp.h" - -void -mvl_init(MacroValidatorList * out_pValidators) -{ - out_pValidators->pFirst = 0; - out_pValidators->nextFreeIdentifier = 1; -} - -void -mvl_destruct(MacroValidatorList * out_pValidators) -{ - MacroValidator * pV = out_pValidators->pFirst; - MacroValidator * pDel; - for ( pDel = out_pValidators->pFirst; - pDel != 0; - pDel = pV ) - { - pV = pV->pNext; - - pDel->pMacro->flag &= (~ISACTIVE); - dofree(pDel); - } -} - - -#define INVALID_TILL_ENDOFROW 32000 - -/* If in_pTokenWhereMacroBecomesValid == 0, the macro is at row end - and therefore there does not exist any token, where the macro becomes - valid again. It is revalidated, when the row was processed complete. -*/ -void -mvl_add( MacroValidatorList * inout_pValidators, - Nlist * in_pMacro, - Token * in_pTokenWhereMacroBecomesValid ) -{ - - MacroValidator * pNew = new(MacroValidator); - pNew->pMacro = in_pMacro; - - if (in_pTokenWhereMacroBecomesValid == 0) - { - pNew->nTokenWhereMacroBecomesValid = INVALID_TILL_ENDOFROW; - } - else if (in_pTokenWhereMacroBecomesValid->identifier > 0) - { - pNew->nTokenWhereMacroBecomesValid = in_pTokenWhereMacroBecomesValid->identifier; - } - else - { - pNew->nTokenWhereMacroBecomesValid = inout_pValidators->nextFreeIdentifier; - in_pTokenWhereMacroBecomesValid->identifier = inout_pValidators->nextFreeIdentifier; - inout_pValidators->nextFreeIdentifier++; - } - - pNew->pNext = inout_pValidators->pFirst; - inout_pValidators->pFirst = pNew; -} - -void -mvl_check( MacroValidatorList * inout_pValidators, - Token * inout_pTokenToCheck) -{ - MacroValidator * pV; /* Running pointer */ - MacroValidator * pCheckedOnes; /* Here new list is built. */ - pCheckedOnes = 0; - - for ( pV = inout_pValidators->pFirst; - pV != 0; - pV = inout_pValidators->pFirst ) - { - inout_pValidators->pFirst = pV->pNext; - - if (pV->nTokenWhereMacroBecomesValid == inout_pTokenToCheck->identifier) - { - pV->pMacro->flag &= (~ISACTIVE); - dofree(pV); - } - else - { - pV->pNext = pCheckedOnes; - pCheckedOnes = pV; - } - } /* end for */ - - /* Assign new built list (too old ones were removed) to - original list: - */ - inout_pValidators->pFirst = pCheckedOnes; -} - - -void -tokenrow_zeroTokenIdentifiers(Tokenrow* trp) -{ - Token * tp; - for (tp = trp->bp; tp < trp->lp; tp++) - { - tp->identifier = 0; - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/cpp/_nlist.c b/soltools/cpp/_nlist.c deleted file mode 100644 index fa29fb142..000000000 --- a/soltools/cpp/_nlist.c +++ /dev/null @@ -1,120 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include "cpp.h" - -extern int Cplusplus; -Nlist *kwdefined; -char wd[128]; - -/* - ER: Tabelle extra gross gemacht, da es anscheinend ein Problem mit der - der Verkettung gibt, irgendwann irgendwo wird mal ein nlist->next - ueberschrieben, was in eineme SIGSEGV resultiert. - Den GDB mit watchpoint hab ich aber nach 2 Tagen abgebrochen.. - so loeppt's jedenfalls erstmal.. - */ -#define NLSIZE 15000 - -static Nlist *nlist[NLSIZE]; - -struct kwtab -{ - char *kw; - int val; - int flag; -} kwtab[] = - -{ - {"if", KIF, ISKW}, - {"ifdef", KIFDEF, ISKW}, - {"ifndef", KIFNDEF, ISKW}, - {"elif", KELIF, ISKW}, - {"else", KELSE, ISKW}, - {"endif", KENDIF, ISKW}, - {"include", KINCLUDE, ISKW}, - {"include_next", KINCLUDENEXT, ISKW}, - {"import", KIMPORT, ISKW}, - {"define", KDEFINE, ISKW}, - {"undef", KUNDEF, ISKW}, - {"line", KLINE, ISKW}, - {"error", KERROR, ISKW}, - {"pragma", KPRAGMA, ISKW}, - {"ident", KIDENT, ISKW}, - {"eval", KEVAL, ISKW}, - {"defined", KDEFINED, ISDEFINED + ISUNCHANGE}, - {"machine", KMACHINE, ISDEFINED + ISUNCHANGE}, - {"__LINE__", KLINENO, ISMAC + ISUNCHANGE}, - {"__FILE__", KFILE, ISMAC + ISUNCHANGE}, - {"__DATE__", KDATE, ISMAC + ISUNCHANGE}, - {"__TIME__", KTIME, ISMAC + ISUNCHANGE}, - {"__STDC__", KSTDC, ISUNCHANGE}, - {NULL, 0, 0} -}; - -unsigned long namebit[077 + 1]; - -void - setup_kwtab(void) -{ - struct kwtab *kp; - Nlist *np; - Token t; - static Token deftoken[1] = {{NAME, 0, 0, 7, (uchar *) "defined", 0}}; - static Tokenrow deftr = {deftoken, deftoken, deftoken + 1, 1}; - - for (kp = kwtab; kp->kw; kp++) - { - t.t = (uchar *) kp->kw; - t.len = strlen(kp->kw); - np = lookup(&t, 1); - np->flag = (char) kp->flag; - np->val = (char) kp->val; - if (np->val == KDEFINED) - { - kwdefined = np; - np->val = NAME; - np->vp = &deftr; - np->ap = 0; - } - } -} - -Nlist * - lookup(Token * tp, int install) -{ - unsigned int h; - Nlist *np; - uchar *cp, *cpe; - - h = 0; - for (cp = tp->t, cpe = cp + tp->len; cp < cpe;) - h += *cp++; - h %= NLSIZE; - np = nlist[h]; - while (np) - { - if (*tp->t == *np->name && tp->len == (unsigned int)np->len - && strncmp((char *)tp->t, (char *)np->name, tp->len) == 0) - return np; - np = np->next; - } - if (install) - { - np = new(Nlist); - np->vp = NULL; - np->ap = NULL; - np->flag = 0; - np->val = 0; - np->len = tp->len; - np->name = newstring(tp->t, tp->len, 0); - np->next = nlist[h]; - nlist[h] = np; - quickset(tp->t[0], tp->len > 1 ? tp->t[1] : 0); - return np; - } - return NULL; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/cpp/_tokens.c b/soltools/cpp/_tokens.c deleted file mode 100644 index 9c5289b75..000000000 --- a/soltools/cpp/_tokens.c +++ /dev/null @@ -1,536 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#if (defined(_WIN32) || defined(__IBMC__)) -#include <io.h> -#else -#include <unistd.h> -#endif -#include "cpp.h" - - -static char wbuf[4 * OBS]; -static char *wbp = wbuf; -static int EBCDIC_ExternTokenDetected = 0; -static int EBCDIC_StartTokenDetected = 0; - -unsigned char toLatin1[256] = -{ - 0x00, 0x01, 0x02, 0x03, 0x9c, 0x09, 0x86, 0x7f, 0x97, 0x8d, - 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, - 0x9d, 0x0a, 0x08, 0x87, 0x18, 0x19, 0x92, 0x8f, 0x1c, 0x1d, - 0x1e, 0x1f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x17, 0x1b, - 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, 0x90, 0x91, - 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, 0x98, 0x99, 0x9a, 0x9b, - 0x14, 0x15, 0x9e, 0x1a, 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, - 0xe3, 0xe5, 0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, - 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, 0xec, 0xdf, - 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, 0x2d, 0x2f, 0xc2, 0xc4, - 0xc0, 0xc1, 0xc3, 0xc5, 0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, - 0x3e, 0x3f, 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, - 0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, - 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, - 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, 0xb0, 0x6a, 0x6b, 0x6c, - 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, - 0xc6, 0xa4, 0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, - 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0x5b, 0xde, 0xae, 0xac, 0xa3, - 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, 0xbd, 0xbe, 0xdd, 0xa8, - 0xaf, 0x5d, 0xb4, 0xd7, 0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, - 0x46, 0x47, 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, - 0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, - 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff, 0x5c, 0xf7, 0x53, 0x54, - 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, - 0xd3, 0xd5, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f -}; - -#define MASK "\\x%x" - -int - memcpy_EBCDIC( char * pwbuf, uchar *p, int len ) -{ - int currpos = 0; - int processedchars = 0; - - if( len == 0 ) - return 0; - - if( len == 1 ) - { - *pwbuf = *p; - return 1; - } - - /* copy spaces until " or ' */ - while( (p[ processedchars ] != '\"') && (p[ processedchars ] != '\'') ) - pwbuf[ currpos++ ] = p[ processedchars++ ]; - - /* copy first " or ' */ - pwbuf[ currpos++ ] = p[ processedchars++ ]; - - /* convert all characters until " or ' */ - while( processedchars < (len - 1) ) - { - if( p[ processedchars ] == '\\' ) - { - switch( p[ ++processedchars ] ) - { - case 'n': - currpos += sprintf( &pwbuf[ currpos ], MASK, toLatin1['\n'] ); - processedchars++; - break; - - case 't': - currpos += sprintf( &pwbuf[ currpos ], MASK, toLatin1['\t'] ); - processedchars++; - break; - - case 'v': - currpos += sprintf( &pwbuf[ currpos ], MASK, toLatin1['\v'] ); - processedchars++; - break; - - case 'b': - currpos += sprintf( &pwbuf[ currpos ], MASK, toLatin1['\b'] ); - processedchars++; - break; - - case 'r': - currpos += sprintf( &pwbuf[ currpos ], MASK, toLatin1['\r'] ); - processedchars++; - break; - - case 'f': - currpos += sprintf( &pwbuf[ currpos ], MASK, toLatin1['\f'] ); - processedchars++; - break; - - case 'a': - currpos += sprintf( &pwbuf[ currpos ], MASK, toLatin1['\a'] ); - processedchars++; - break; - - case '\\': - currpos += sprintf( &pwbuf[ currpos ], MASK, toLatin1['\\'] ); - processedchars++; - break; - - case '?': - currpos += sprintf( &pwbuf[ currpos ], MASK, toLatin1['\?'] ); - processedchars++; - break; - - case '\'': - currpos += sprintf( &pwbuf[ currpos ], MASK, toLatin1['\''] ); - processedchars++; - break; - - case '"': - currpos += sprintf( &pwbuf[ currpos ], MASK, toLatin1['\"'] ); - processedchars++; - break; - - /* octal coded character? -> copy */ - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - { - int startpos = currpos; - - pwbuf[ currpos++ ] = '\\'; - - while( p[ processedchars ] >= '0' && p[ processedchars ] <= '7' && (currpos < startpos + 4) ) - pwbuf[ currpos++ ] = (unsigned char)p[ processedchars++ ]; - break; - } - - /* hex coded character? -> copy */ - case 'x': - case 'X': - { - int startpos = currpos; - - pwbuf[ currpos++ ] = '\\'; - pwbuf[ currpos++ ] = 'x'; - processedchars++; - - while( isxdigit( p[ processedchars ] ) && (currpos < startpos + 4) ) - pwbuf[ currpos++ ] = (unsigned char)p[ processedchars++ ]; - break; - } - - } - } - else - currpos += sprintf( &pwbuf[ currpos ], MASK, toLatin1[p[ processedchars++ ]] ); - - } - - /* copy last " or ' */ - pwbuf[ currpos++ ] = p[ processedchars ]; - - return currpos; -} - -void - maketokenrow(int size, Tokenrow * trp) -{ - trp->max = size; - if (size > 0) - trp->bp = (Token *) domalloc(size * sizeof(Token)); - else - trp->bp = NULL; - trp->tp = trp->bp; - trp->lp = trp->bp; -} - -Token * - growtokenrow(Tokenrow * trp) -{ - size_t ncur = trp->tp - trp->bp; - size_t nlast = trp->lp - trp->bp; - - trp->max = 3 * trp->max / 2 + 1; - trp->bp = (Token *) realloc(trp->bp, trp->max * sizeof(Token)); - trp->lp = &trp->bp[nlast]; - trp->tp = &trp->bp[ncur]; - return trp->lp; -} - -/* - * Compare a row of tokens, ignoring the content of WS; return !=0 if different - */ -int - comparetokens(Tokenrow * tr1, Tokenrow * tr2) -{ - Token *tp1, *tp2; - - tp1 = tr1->tp; - tp2 = tr2->tp; - if (tr1->lp - tp1 != tr2->lp - tp2) - return 1; - for (; tp1 < tr1->lp; tp1++, tp2++) - { - if (tp1->type != tp2->type - || (tp1->wslen == 0) != (tp2->wslen == 0) - || tp1->len != tp2->len - || strncmp((char *) tp1->t, (char *) tp2->t, tp1->len) != 0) - return 1; - } - return 0; -} - -/* - * replace ntok tokens starting at dtr->tp with the contents of str. - * tp ends up pointing just beyond the replacement. - * Canonical whitespace is assured on each side. - */ -void - insertrow(Tokenrow * dtr, int ntok, Tokenrow * str) -{ - int nrtok = (int)rowlen(str); - - dtr->tp += ntok; - adjustrow(dtr, nrtok - ntok); - dtr->tp -= ntok; - movetokenrow(dtr, str); - dtr->tp += nrtok; -} - -/* - * make sure there is WS before trp->tp, if tokens might merge in the output - */ -void - makespace(Tokenrow * trp, Token * ntp) -{ - uchar *tt; - Token *tp = trp->tp; - - if (tp >= trp->lp) - return; - - if (ntp->wslen) - { - tt = newstring(tp->t, tp->len, ntp->wslen); - strncpy((char *)tt, (char *)ntp->t - ntp->wslen, ntp->wslen); - tp->t = tt + ntp->wslen; - tp->wslen = ntp->wslen; - tp->flag |= XPWS; - } -} - -/* - * Copy an entire tokenrow into another, at tp. - * It is assumed that there is enough space. - * Not strictly conforming. - */ -void - movetokenrow(Tokenrow * dtr, Tokenrow * str) -{ - size_t nby; - - nby = (char *) str->lp - (char *) str->bp; - memmove(dtr->tp, str->bp, nby); -} - -/* - * Move the tokens in a row, starting at tr->tp, rightward by nt tokens; - * nt may be negative (left move). - * The row may need to be grown. - * Non-strictly conforming because of the (char *), but easily fixed - */ -void - adjustrow(Tokenrow * trp, int nt) -{ - size_t nby, size; - - if (nt == 0) - return; - size = (trp->lp - trp->bp) + nt; - while (size > trp->max) - growtokenrow(trp); - nby = (char *) trp->lp - (char *) trp->tp; - if (nby) - memmove(trp->tp + nt, trp->tp, nby); - trp->lp += nt; -} - -/* - * Copy a row of tokens into the destination holder, allocating - * the space for the contents. Return the destination. - */ -Tokenrow * - copytokenrow(Tokenrow * dtr, Tokenrow * str) -{ - int len = (int)rowlen(str); - - maketokenrow(len, dtr); - movetokenrow(dtr, str); - dtr->lp += len; - return dtr; -} - -/* - * Produce a copy of a row of tokens. Start at trp->tp. - * The value strings are copied as well. The first token - * has WS available. - */ -Tokenrow * - normtokenrow(Tokenrow * trp) -{ - Token *tp; - Tokenrow *ntrp = new(Tokenrow); - int len; - - len = (int)(trp->lp - trp->tp); - if (len <= 0) - len = 1; - maketokenrow(len, ntrp); - for (tp = trp->tp; tp < trp->lp; tp++) - { - *ntrp->lp = *tp; - if (tp->len) - { - ntrp->lp->t = newstring(tp->t, tp->len, 1); - *ntrp->lp->t++ = ' '; - if (tp->wslen) - ntrp->lp->wslen = 1; - } - ntrp->lp++; - } - if (ntrp->lp > ntrp->bp) - ntrp->bp->wslen = 0; - return ntrp; -} - -/* - * Debugging - */ -void - peektokens(Tokenrow * trp, char *str) -{ - Token *tp; - - tp = trp->tp; - flushout(); - if (str) - fprintf(stderr, "%s ", str); - if (tp < trp->bp || tp > trp->lp) - fprintf(stderr, "(tp offset %ld) ", (long int) (tp - trp->bp)); - for (tp = trp->bp; tp < trp->lp && tp < trp->bp + 32; tp++) - { - if (tp->type != NL) - { - int c = tp->t[tp->len]; - - tp->t[tp->len] = 0; - fprintf(stderr, "%s", tp->t); - tp->t[tp->len] = (uchar) c; - } - fprintf(stderr, tp == trp->tp ? "{%x*} " : "{%x} ", tp->type); - } - fprintf(stderr, "\n"); - fflush(stderr); -} - -void - puttokens(Tokenrow * trp) -{ - Token *tp; - int len; - uchar *p; - - if (Vflag) - peektokens(trp, ""); - tp = trp->bp; - for (; tp < trp->lp; tp++) - { - if (tp->type != NL) - { - len = (int)(tp->len + tp->wslen); - p = tp->t - tp->wslen; - - /* add parameter check to delete operator? */ - if( Dflag ) - { - if( (tp->type == NAME) && (strncmp( (char*)p, "delete", len ) == 0) ) - { - Token* ntp = tp; - ntp++; - - if( ntp->type == NAME ) - { - uchar* np = ntp->t - ntp->wslen; - int nlen = (int)(ntp->len + ntp->wslen); - - memcpy(wbp, "if(", 3 ); - wbp += 4; - memcpy(wbp, np, nlen ); - wbp += nlen; - memcpy(wbp, ")", 1 ); - wbp++; - - memcpy(wbp, p, len); - } - } - } - - /* EBCDIC to ANSI conversion requested? */ - if( Aflag ) - { - /* keyword __ToLatin1__ found? -> do conversion! */ - if( EBCDIC_StartTokenDetected ) - { - /* previous token was 'extern'? -> don't convert current token! */ - if( EBCDIC_ExternTokenDetected ) - { - EBCDIC_ExternTokenDetected = 0; - memcpy(wbp, p, len); - } - else - { - /* current token is keyword 'extern'? -> don't convert following token! */ - if( (tp->wslen == 0) && (strncmp( (char*)p, "extern", len ) == 0) ) - { - EBCDIC_ExternTokenDetected = 1; - memcpy(wbp, p, len); - } - else - { - /* token is string or char? -> process EBCDIC to ANSI conversion */ - if ((tp->type == STRING) || (tp->type == CCON)) - len = memcpy_EBCDIC(wbp, p, len); - else - memcpy(wbp, p, len); - } - } - } - else - /* keyword __ToLatin1__ found? -> don't copy keyword and start conversion */ - if( (tp->type == NAME) && (strncmp( (char*)p, "__ToLatin1__", len) == 0) ) - { - EBCDIC_StartTokenDetected = 1; - len = 0; - } - else - memcpy(wbp, p, len); - } - else - memcpy(wbp, p, len); - - wbp += len; - } - else - *wbp++ = '\n'; - - if (wbp >= &wbuf[OBS]) - { - if ( write(1, wbuf, OBS) != -1 ) { - if (wbp > &wbuf[OBS]) - memcpy(wbuf, wbuf + OBS, wbp - &wbuf[OBS]); - wbp -= OBS; - } - else exit(1); - } - } - trp->tp = tp; - if (cursource->fd == 0) - flushout(); -} - -void - flushout(void) -{ - if (wbp > wbuf) - { - if ( write(1, wbuf, (int)(wbp - wbuf)) != -1) - wbp = wbuf; - else - exit(1); - } -} - -/* - * turn a row into just a newline - */ -void - setempty(Tokenrow * trp) -{ - trp->tp = trp->bp; - trp->lp = trp->bp + 1; - *trp->bp = nltoken; -} - -/* - * generate a number - */ -char * - outnum(char *p, int n) -{ - if (n >= 10) - p = outnum(p, n / 10); - *p++ = (char) (n % 10 + '0'); - return p; -} - -/* - * allocate and initialize a new string from s, of length l, at offset o - * Null terminated. - */ -uchar * - newstring(uchar * s, size_t l, size_t o) -{ - uchar *ns = (uchar *) domalloc(l + o + 1); - - ns[l + o] = '\0'; - return (uchar *) strncpy((char *) ns + o, (char *) s, l) - o; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/cpp/_unix.c b/soltools/cpp/_unix.c deleted file mode 100644 index d132fdbb3..000000000 --- a/soltools/cpp/_unix.c +++ /dev/null @@ -1,201 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#include <stdio.h> -#include <stddef.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include <fcntl.h> -#if (defined(_WIN32) || defined(__IBMC__)) -#include <io.h> -#else -#include <unistd.h> -#endif - -#include "cpp.h" - -#if defined MACOSX || defined AIX || !defined HAVE_GETOPT -extern int stgetopt(int, char *const *, const char *); -extern char *optarg; -extern int optind; -#else -#include <getopt.h> -#endif - -extern char rcsid[]; - -int Pflag = 0; /* print no line information */ -int Iflag = 0; /* print includes */ -int Mflag = 0; /* print macor expansion */ -int Aflag = 0; /* translate character sets */ -int Xflag = 0; /* print pragma for include/import */ -int Vflag = 0; /* verbose flag */ -int Cflag = 0; /* do not remove any comments */ -int Dflag = 0; /* add parameter check to delete op */ -int Cplusplus = 0; - -extern void setup_kwtab(void); - -void - setup(int argc, char **argv) -{ - int c, fd, i, n; - char *fp, *dp; - Tokenrow tr; - - setup_kwtab(); -#if defined MACOSX || defined(AIX) || !defined HAVE_GETOPT - while ((c = stgetopt(argc, argv, "NOPV:I:D:U:F:A:X:u:l:+")) != -1) -#else - while ((c = getopt(argc, argv, "NOPV:I:D:U:F:A:X:u:l:+")) != -1) -#endif - switch (c) - { - case 'N': - for (i = 0; i < NINCLUDE; i++) - if (includelist[i].always == 1) - includelist[i].deleted = 1; - break; - - case 'I': - for (i = NINCLUDE - 2; i >= 0; i--) - { - if (includelist[i].file == NULL) - { - includelist[i].always = 1; - includelist[i].file = optarg; - break; - } - } - if (i < 0) - error(FATAL, "Too many -I directives"); - break; - - case 'D': - case 'U': - case 'A': - setsource("<cmdarg>", -1, -1, optarg, 0); - maketokenrow(3, &tr); - gettokens(&tr, 1); - doadefine(&tr, c); - unsetsource(); - break; - - case 'P': /* Lineinfo */ - Pflag++; - break; - - case 'V': - for (n = 0; (c = optarg[n]) != '\0'; n++) - switch (c) - { - case 'i': - Iflag++; - break; - - case 'm': - Mflag = 1; - break; - - case 'x': - Mflag = 2; - break; - - case 't': - Vflag++; - break; - - case 'v': - fprintf(stderr, "%s %s\n", argv[0], rcsid); - break; - - default: - error(WARNING, "Unknown verbose option %c", c); - } - break; - - case 'X': - for (n = 0; (c = optarg[n]) != '\0'; n++) - switch (c) - { - case 'a': - Aflag++; - break; - - case 'i': - Xflag++; - break; - - case 'c': - Cflag++; - break; - - case 'd': - Dflag++; - break; - - case 'w': - dp = &optarg[n + 1]; - n += (int)strlen(dp); - while (isspace(*dp)) dp++; - - for (i = NINCLUDE - 1; i >= 0; i--) - { - if (wraplist[i].file == NULL) - { - wraplist[i].file = dp; - break; - } - } - if (i < 0) - error(WARNING, "Too many -Xw directives"); - break; - - default: - error(WARNING, "Unknown extension option %c", c); - } - break; - - case '+': - Cplusplus++; - break; - - case 'u': /* -undef fuer GCC (dummy) */ - case 'l': /* -lang-c++ fuer GCC (dummy) */ - break; - - default: - break; - } - dp = "."; - fp = "<stdin>"; - fd = 0; - if (optind < argc) - { - if ((fp = strrchr(argv[optind], '/')) != NULL) - { - int len = (int)(fp - argv[optind]); - - dp = (char *) newstring((uchar *) argv[optind], len + 1, 0); - dp[len] = '\0'; - } - fp = (char *) newstring((uchar *) argv[optind], strlen(argv[optind]), 0); - if ((fd = open(fp, O_RDONLY)) <= 0) - error(FATAL, "Can't open input file %s", fp); - } - - if (optind + 1 < argc) - { - int fdo = creat(argv[optind + 1], 0666); - - if (fdo < 0) - error(FATAL, "Can't open output file %s", argv[optind + 1]); - - dup2(fdo, 1); - } - includelist[NINCLUDE - 1].always = 0; - includelist[NINCLUDE - 1].file = dp; - setsource(fp, -1, fd, NULL, 0); -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/cpp/cpp.h b/soltools/cpp/cpp.h deleted file mode 100644 index 5e862740d..000000000 --- a/soltools/cpp/cpp.h +++ /dev/null @@ -1,232 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* $Id: cpp.h,v 1.4 2006-06-20 05:07:28 hr Exp $ */ - -#define INS 32768 /* input buffer */ -#define OBS 8092 /* outbut buffer */ -#define NARG 32 /* Max number arguments to a macro */ -#define NINCLUDE 48 /* Max number of include directories (-I) */ -#define NIF 64 /* depth of nesting of #if */ -#define NINC 32 /* depth of nesting of #include */ - -#ifndef EOF -#define EOF (-1) -#endif - -#ifndef NULL -#define NULL 0 -#endif - -typedef unsigned char uchar; - -enum toktype -{ - END, UNCLASS, NAME, NUMBER, STRING, CCON, NL, WS, DSHARP, - EQ, NEQ, LEQ, GEQ, LSH, RSH, LAND, LOR, PPLUS, MMINUS, - ARROW, SBRA, SKET, LP, RP, DOT, AND, STAR, PLUS, MINUS, - TILDE, NOT, SLASH, PCT, LT, GT, CIRC, OR, QUEST, - COLON, ASGN, COMMA, SHARP, SEMIC, CBRA, CKET, - ASPLUS, ASMINUS, ASSTAR, ASSLASH, ASPCT, ASCIRC, ASLSH, - ASRSH, ASOR, ASAND, ELLIPS, - DSHARP1, NAME1, NAME2, DEFINED, UMINUS, ARCHITECTURE, IDENT, - COMMENT -}; - -enum kwtype -{ - KIF, KIFDEF, KIFNDEF, KELIF, KELSE, KENDIF, KINCLUDE, KINCLUDENEXT, - KIMPORT, KDEFINE, KUNDEF, KLINE, KERROR, KPRAGMA, KIDENT, KDEFINED, - KMACHINE, KLINENO, KFILE, KDATE, KTIME, KSTDC, KEVAL -}; - -#define ISDEFINED 0x01 /* has #defined value */ -#define ISKW 0x02 /* is PP keyword */ -#define ISUNCHANGE 0x04 /* can't be #defined in PP */ -#define ISMAC 0x08 /* builtin macro, e.g. __LINE__ */ -#define ISARCHITECTURE 0x10 /* architecture */ -#define ISACTIVE 0x80 /* is macro currently expanded */ - -#define EOB 0xFE /* sentinel for end of input buffer */ -#define EOFC 0xFD /* sentinel for end of input file */ -#define XPWS 1 /* token flag: white space to assure token sep. */ -#define XTWS 2 - -typedef struct token -{ - unsigned char type; - unsigned char flag; - size_t wslen; - size_t len; - uchar *t; - unsigned int identifier; /* used from macro processor to identify where a macro becomes valid again. */ -} Token; - -typedef struct tokenrow -{ - Token *tp; /* current one to scan */ - Token *bp; /* base (allocated value) */ - Token *lp; /* last+1 token used */ - size_t max; /* number allocated */ -} Tokenrow; - -typedef struct source -{ - char *filename; /* name of file of the source */ - int line; /* current line number */ - int lineinc; /* adjustment for \\n lines */ - uchar *inb; /* input buffer */ - uchar *inp; /* input pointer */ - uchar *inl; /* end of input */ - int fd; /* input source */ - int ifdepth; /* conditional nesting in include */ - int pathdepth; - int wrap; - struct source *next; /* stack for #include */ -} Source; - -typedef struct nlist -{ - struct nlist *next; - uchar *name; - size_t len; - Tokenrow *vp; /* value as macro */ - Tokenrow *ap; /* list of argument names, if any */ - char val; /* value as preprocessor name */ - char flag; /* is defined, is pp name */ - uchar *loc; /* location of definition */ -} Nlist; - -typedef struct includelist -{ - char deleted; - char always; - char *file; -} Includelist; - -typedef struct wraplist -{ - char *file; -} Wraplist; - -#define new(t) (t *)domalloc(sizeof(t)) -#define quicklook(a,b) (namebit[(a)&077] & (1<<((b)&037))) -#define quickset(a,b) namebit[(a)&077] |= (1<<((b)&037)) -extern unsigned long namebit[077 + 1]; - -enum errtype -{ - INFO, WARNING, ERROR, FATAL -}; - - -typedef struct macroValidator -{ - Nlist * pMacro; - unsigned int nTokenWhereMacroBecomesValid; - struct macroValidator * - pNext; -} MacroValidator; -typedef struct mvl -{ - MacroValidator * pFirst; - unsigned int nextFreeIdentifier; -} MacroValidatorList; - -void mvl_init( - MacroValidatorList * - out_pValidators); -void mvl_destruct( - MacroValidatorList * - out_pValidators); -/* Adds MacroValidator to the list. -*/ -void mvl_add( - MacroValidatorList * - inout_pValidators, - Nlist * in_pMacro, - Token * in_pTokenWhereMacroBecomesValid); - -/* Checks if one of the validators within the list points to - the token in_pTokenToCheck. If so, the macro is set valid and - the validator is removed. -*/ -void mvl_check( - MacroValidatorList * - inout_pValidators, - Token * inout_pTokenToCheck); - -void tokenrow_zeroTokenIdentifiers(Tokenrow* trp); - -void expandlex(void); -void fixlex(void); -void setup(int, char **); -int gettokens(Tokenrow *, int); -int comparetokens(Tokenrow *, Tokenrow *); -Source *setsource(char *, int, int, char *, int); -void unsetsource(void); -void puttokens(Tokenrow *); -void process(Tokenrow *); -void *domalloc(size_t); -void dofree(void *); -void error(enum errtype, char *,...); -void flushout(void); -int fillbuf(Source *); -int trigraph(Source *); -int foldline(Source *); -Nlist *lookup(Token *, int); -void control(Tokenrow *); -void dodefine(Tokenrow *); -void doadefine(Tokenrow *, int); -void doinclude(Tokenrow *, int, int); -void doif(Tokenrow *, enum kwtype); -void expand(Tokenrow *, Nlist *, MacroValidatorList *); -void builtin(Tokenrow *, int); -int gatherargs(Tokenrow *, Tokenrow **, int *); -void substargs(Nlist *, Tokenrow *, Tokenrow **); -void expandrow(Tokenrow *, char *); -void maketokenrow(int, Tokenrow *); -Tokenrow *copytokenrow(Tokenrow *, Tokenrow *); -Token *growtokenrow(Tokenrow *); -Tokenrow *normtokenrow(Tokenrow *); -void adjustrow(Tokenrow *, int); -void movetokenrow(Tokenrow *, Tokenrow *); -void insertrow(Tokenrow *, int, Tokenrow *); -void peektokens(Tokenrow *, char *); -void doconcat(Tokenrow *); -Tokenrow *stringify(Tokenrow *); -int lookuparg(Nlist *, Token *); -long eval(Tokenrow *, int); -void genline(void); -void genimport(char *, int, char *, int); -void genwrap(int); -void setempty(Tokenrow *); -void makespace(Tokenrow *, Token *); -char *outnum(char *, int); -int digit(int); -uchar *newstring(uchar *, size_t, size_t); - -#define rowlen(tokrow) ((tokrow)->lp - (tokrow)->bp) - -extern char *outptr; -extern Token nltoken; -extern Source *cursource; -extern char *curtime; -extern int incdepth; -extern int ifdepth; -extern int ifsatisfied[NIF]; -extern int Mflag; -extern int Iflag; -extern int Pflag; -extern int Aflag; -extern int Lflag; -extern int Xflag; -extern int Vflag; -extern int Cflag; -extern int Dflag; -extern int Cplusplus; -extern int skipping; -extern Nlist *kwdefined; -extern Includelist includelist[NINCLUDE]; -extern Wraplist wraplist[NINCLUDE]; -extern char wd[]; - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/cpp/makefile.mk b/soltools/cpp/makefile.mk deleted file mode 100644 index 5cada33f9..000000000 --- a/soltools/cpp/makefile.mk +++ /dev/null @@ -1,79 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=.. - -PRJNAME=soltools -TARGET=cpp -TARGETTYPE=CUI -NO_DEFAULT_STL=TRUE - -# --- Settings ----------------------------------------------------- - -.INCLUDE : $(PRJ)$/util$/makefile.pmk -.INCLUDE : settings.mk - -.IF "$(CROSS_COMPILING)"=="YES" -all: - @echo Nothing done when cross-compiling -.ENDIF - -UWINAPILIB=$(0) -LIBSALCPPRT=$(0) - -# --- Files -------------------------------------------------------- - -OBJFILES= \ - $(OBJ)$/_cpp.obj \ - $(OBJ)$/_eval.obj \ - $(OBJ)$/_include.obj \ - $(OBJ)$/_lex.obj \ - $(OBJ)$/_macro.obj \ - $(OBJ)$/_mcrvalid.obj \ - $(OBJ)$/_nlist.obj \ - $(OBJ)$/_tokens.obj \ - $(OBJ)$/_unix.obj - -# nonstandard cpp options needed for Mac (-isysroot), -# needs the custom stgetopt defined here :/ -.IF "$(OS)" == "MACOSX" || "$(OS)" == "AIX" || "$(HAVE_GETOPT)" != "YES" -OBJFILES += $(OBJ)$/_getopt.obj -.ENDIF -.IF "$(HAVE_GETOPT)" == "YES" -CDEFS += -DHAVE_GETOPT -.ENDIF - -APP1TARGET = $(TARGET) -APP1STACK = 1000000 -APP1LIBS = $(LB)$/$(TARGET).lib -APP1DEPN = $(LB)$/$(TARGET).lib - -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk - - diff --git a/soltools/giparser/gen_info.cxx b/soltools/giparser/gen_info.cxx deleted file mode 100644 index 8cbd820e3..000000000 --- a/soltools/giparser/gen_info.cxx +++ /dev/null @@ -1,90 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_soltools.hxx" - -#include <gen_info.hxx> -#include <gi_list.hxx> - - -GenericInfo::GenericInfo( const Simstr & i_sKey, - const Simstr & i_sValue, - const Simstr & i_sComment ) - : sKey(i_sKey), - sValue(i_sValue), - sComment(i_sComment), - dpSubList(0) -{ -} - -GenericInfo::GenericInfo( const GenericInfo & i_rInfo ) - : sKey(i_rInfo.sKey), - sValue(i_rInfo.sValue), - sComment(i_rInfo.sComment), - dpSubList(0) -{ - if ( i_rInfo.HasSubList() ) - { - dpSubList = new List_GenericInfo(i_rInfo.SubList()); - } -} - -GenericInfo::~GenericInfo() -{ - if ( dpSubList != 0 ) - delete dpSubList; -} - -GenericInfo & -GenericInfo::operator=( const GenericInfo & i_rInfo ) -{ - sKey = i_rInfo.sKey; - sValue = i_rInfo.sValue; - sComment = i_rInfo.sComment; - - if ( dpSubList != 0 ) - delete dpSubList; - if ( i_rInfo.HasSubList() ) - { - dpSubList = new List_GenericInfo(i_rInfo.SubList()); - } - else - dpSubList = 0; - - return *this; -} - -List_GenericInfo & -GenericInfo::CreateMyList() const -{ - return * ( const_cast<GenericInfo&>(*this).dpSubList = new List_GenericInfo); - -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/giparser/gi_list.cxx b/soltools/giparser/gi_list.cxx deleted file mode 100644 index 1f6f70d24..000000000 --- a/soltools/giparser/gi_list.cxx +++ /dev/null @@ -1,236 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_soltools.hxx" - - -#include <gi_list.hxx> - - -#include <gen_info.hxx> - - - -const char C_cKeySeparator = '/'; - - -List_GenericInfo::List_GenericInfo() -{ -} - -List_GenericInfo::List_GenericInfo( const List_GenericInfo & i_rList ) - : aChildren(i_rList.aChildren) -{ -} - -List_GenericInfo::~List_GenericInfo() -{ -} - -List_GenericInfo & -List_GenericInfo::operator=( const List_GenericInfo & i_rList ) -{ - aChildren = i_rList.aChildren; - return *this; -} - -const GenericInfo * -List_GenericInfo::operator[]( KeyPath i_sKeyPath ) const -{ - return const_cast< List_GenericInfo& >(*this)[i_sKeyPath]; -} - -GenericInfo * -List_GenericInfo::operator[]( KeyPath i_sKeyPath ) -{ - bool bExists = false; - const char * sNextPathSegment = 0; - sub_iterator it = lower_bound(bExists, sNextPathSegment, i_sKeyPath); - - if ( bExists ) - { - if ( sNextPathSegment == 0 ) - return (*it); - else - return (*it)->SubList()[sNextPathSegment]; - } - else - { - return 0; - } -} - -bool -List_GenericInfo::InsertInfo( GenericInfo * let_dpInfo, - bool i_bOverwrite ) -{ - if ( let_dpInfo == 0 ) - return false; - - bool bExists = false; - const char * sNextPathSegment = 0; - sub_iterator it = lower_bound(bExists, sNextPathSegment, let_dpInfo->Key() ); - - if ( ! bExists ) - { - aChildren.insert( it, let_dpInfo ); - } - else if ( i_bOverwrite ) - { - delete (*it); - (*it) = let_dpInfo; - } - else - { - delete let_dpInfo; - return false; - } - - return true; -} - -bool -List_GenericInfo::InsertInfoByPath( GenericInfo * let_dpInfo, - KeyPath i_sKeyPath, - bool i_bCreatePath, - bool i_bOverwrite ) -{ - if ( let_dpInfo == 0 ) - return false; - - if ( i_sKeyPath == 0 ? true : *i_sKeyPath == 0 ) - return InsertInfo(let_dpInfo, i_bOverwrite); - - bool bExists = false; - const char * sNextPathSegment = 0; - sub_iterator it = lower_bound(bExists, sNextPathSegment, i_sKeyPath); - - if ( bExists ) - { - return (*it)->SubList().InsertInfoByPath( - let_dpInfo, - sNextPathSegment, - i_bCreatePath, - i_bOverwrite ); - } - else if ( i_bCreatePath ) - { - Simstr aKey( i_sKeyPath, - 0, - (int)(sNextPathSegment - - ( *sNextPathSegment == 0 ? 0 : 1) - - i_sKeyPath )); - - GenericInfo * pNew = new GenericInfo(aKey); - InsertInfo(pNew,false); - - return pNew->SubList().InsertInfoByPath( - let_dpInfo, - sNextPathSegment, - i_bCreatePath, - i_bOverwrite ); - } - else - { - delete let_dpInfo; - return false; - } -} - -GenericInfo * -List_GenericInfo::ReleaseInfo( KeyPath i_sKeyPath ) -{ - bool bExists = false; - const char * sNextPathSegment = 0; - sub_iterator it = lower_bound(bExists, sNextPathSegment, i_sKeyPath ); - - if ( bExists ) - { - if ( *sNextPathSegment == 0 ) - return (*it); - else - return (*it)->SubList().ReleaseInfo(sNextPathSegment); - } - else - { - return 0; - } -} - -void -List_GenericInfo::DeleteInfo( KeyPath i_sKeyPath ) -{ - bool bExists = false; - const char * sNextPathSegment = 0; - sub_iterator it = lower_bound(bExists, sNextPathSegment, i_sKeyPath ); - - if ( bExists ) - { - if ( *sNextPathSegment == 0 ) - { - aChildren.remove(it); - } - else - { - (*it)->SubList().DeleteInfo(sNextPathSegment); - } - } -} - -List_GenericInfo::sub_iterator -List_GenericInfo::lower_bound( bool & o_bExists, - const char * & o_sNextPathSegment, - KeyPath i_sKeyPath ) -{ - o_sNextPathSegment = strchr(i_sKeyPath, '/'); - Simstr sKey( i_sKeyPath, (int)(o_sNextPathSegment == 0 ? strlen(i_sKeyPath) : o_sNextPathSegment++ - i_sKeyPath) ); - GenericInfo aSearch(sKey); - - unsigned low = 0; - unsigned high = aChildren.size(); - - for ( unsigned cur = high / 2; high > low; cur = (low + high) / 2 ) - { - if ( *aChildren[cur] < aSearch ) - { - low = cur+1; - } - else - { - high = cur; - } - } // end for - - o_bExists = low < aChildren.size() - ? !(aSearch < *aChildren[low] ) - : false; - return &aChildren[low]; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/giparser/gi_parse.cxx b/soltools/giparser/gi_parse.cxx deleted file mode 100644 index a7958e006..000000000 --- a/soltools/giparser/gi_parse.cxx +++ /dev/null @@ -1,398 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_soltools.hxx" - -#include <gi_parse.hxx> - -#include <stdio.h> -#include <string.h> -#include <fstream> -#include <gilacces.hxx> - - -using namespace std; - - -const char * C_sLineEnd = "\r\n"; - - - -inline void -WriteStr( ostream & o_rOut, const Simstr & i_rStr ) -{ - o_rOut.write( i_rStr.str(), i_rStr.l() ); -} - -inline void -WriteStr( ostream & o_rOut, const char * i_rStr ) -{ - o_rOut.write( i_rStr, strlen(i_rStr) ); -} - -inline void -GenericInfo_Parser::SetError( E_Error i_eError ) -{ - eErrorCode = i_eError; - nErrorLine = nCurLine; -} - - -GenericInfo_Parser::GenericInfo_Parser() - : sCurParsePosition(""), - nCurLine(0), - nLevel(0), - bGoon(false), - eErrorCode(ok), - nErrorLine(0), - pResult(0), - pResource(0) -{ -} - -GenericInfo_Parser::~GenericInfo_Parser() -{ -} - -bool -GenericInfo_Parser::LoadList( GenericInfoList_Builder & o_rResult, - const Simstr & i_sSourceFileName ) -{ - ifstream aFile( i_sSourceFileName.str() ); - if ( aFile.fail() ) - { - SetError(cannot_open); - return false; - } - - aFile.seekg(0, ios::end); - UINT32 nTextSize = aFile.tellg(); - if ( nTextSize == 0 || nTextSize == UINT32(-1) ) - return true; - dpBuffer = new char[nTextSize+2]; - - aFile.seekg(0); - aFile.read( dpBuffer, nTextSize ); - aFile.close(); - - sFilePtr = dpBuffer; - char * sLastChar = dpBuffer + nTextSize - 1; - - while ( sFilePtr != sLastChar && *sFilePtr <= 32 ) - ++sCurParsePosition; - if ( sFilePtr == sLastChar ) - { - if ( *sFilePtr <= 32 ) - return true; - } - else while ( *sLastChar <= 32 ) - { - --sLastChar; - } - - *(sLastChar+1) = '\n'; - *(sLastChar+2) = '\0'; - - ResetState(o_rResult); - - for ( ReadLine(); bGoon; ReadLine() ) - { - bool bOk = InterpretLine(); - if ( !bOk) - { - SetError(syntax_error); - break; - } - } - - if ( nLevel > 0 && eErrorCode == ok) - { - SetError(unexpected_eof); - } - else if ( nLevel < 0 ) - { - SetError(unexpected_list_end); - } - - delete [] dpBuffer; - dpBuffer = 0; - sFilePtr = 0; - - return eErrorCode == ok; -} - -bool -GenericInfo_Parser::SaveList( const Simstr & i_rOutputFile, - GenericInfoList_Browser & io_rListBrowser ) -{ - ofstream aFile( i_rOutputFile.str() ); - if ( aFile.fail() ) - { - SetError(cannot_open); - return false; - } - - ResetState(io_rListBrowser); - - WriteList(aFile); - - aFile.close(); - return eErrorCode == ok; -} - -void -GenericInfo_Parser::ResetState( GenericInfoList_Builder & io_rResult ) -{ - sCurParsePosition = ""; - nCurLine = 0; - nLevel = 0; - bGoon = true; - sCurComment = ""; - eErrorCode = ok; - nErrorLine = 0; - pResult = &io_rResult; - pResource = 0; -} - -void -GenericInfo_Parser::ResetState( GenericInfoList_Browser & io_rSrc ) -{ - sCurParsePosition = ""; - nCurLine = 0; - nLevel = 0; - bGoon = false; - sCurComment = ""; - eErrorCode = ok; - nErrorLine = 0; - pResult = 0; - pResource = &io_rSrc; -} - - -void -GenericInfo_Parser::ReadLine() -{ - if ( *sFilePtr == '\0' ) // See initialising of dpBuffer and sLastChar in LoadList(). - { - bGoon = false; - return; - } - - sCurParsePosition = sFilePtr; - while ( *sFilePtr != '\n' ) - ++sFilePtr; - nCurLine++; - - // Remove leading and trailing whitespace from line: - while ( sCurParsePosition != sFilePtr && *sCurParsePosition <= 32 ) - ++sCurParsePosition; - - char * sEndOfLine = sFilePtr; - while ( sEndOfLine != sCurParsePosition && *sEndOfLine <= 32 ) - --sEndOfLine; - if ( sCurParsePosition != sEndOfLine || *sCurParsePosition > 32 ) - ++sEndOfLine; - *sEndOfLine = '\0'; - - ++sFilePtr; // Go beyond line end to first character of next line. -} - -bool -GenericInfo_Parser::InterpretLine() -{ - switch ( ClassifyLine() ) - { - case lt_key: ReadKey(); - break; - case lt_open_list: PushLevel_Read(); - break; - case lt_close_list: PopLevel_Read(); - break; - case lt_comment: AddCurLine2CurComment(); - break; - case lt_empty: AddCurLine2CurComment(); - break; - default: - return false; - } - return true; -} - -GenericInfo_Parser::E_LineType -GenericInfo_Parser::ClassifyLine() -{ - switch ( *sCurParsePosition ) - { - case '{': return lt_open_list; - case '}': return lt_close_list; - case '#': return lt_comment; - case '\0': return lt_empty; - } - - return lt_key; -} - -void -GenericInfo_Parser::ReadKey() -{ - const char * pSearch = sCurParsePosition; - - for ( ; *pSearch > 32; ++pSearch ) ; - UINT32 nKeyLength = pSearch - sCurParsePosition; - - for ( ; *pSearch <= 32 && *pSearch > '\0'; ++pSearch ) ; - - pResult->AddKey( sCurParsePosition, nKeyLength, - pSearch, strlen(pSearch), - sCurComment.str(), sCurComment.l() - ); - sCurComment = ""; -} - -void -GenericInfo_Parser::PushLevel_Read() -{ - nLevel++; - pResult->OpenList(); -} - -void -GenericInfo_Parser::PopLevel_Read() -{ - nLevel--; - pResult->CloseList(); -} - -void -GenericInfo_Parser::AddCurLine2CurComment() -{ - sCurComment += sCurParsePosition; - sCurComment += C_sLineEnd; -} - -void -GenericInfo_Parser::WriteList( ostream & o_rFile ) -{ - static char sBuffer[32000]; - - for ( bGoon = pResource->Start_CurList(); - bGoon; - bGoon = pResource->NextOf_CurList() ) - { - pResource->Get_CurComment(&sBuffer[0]); - WriteComment(o_rFile,sBuffer); - - pResource->Get_CurKey(&sBuffer[0]); - WriteKey(o_rFile,sBuffer); - - pResource->Get_CurValue(&sBuffer[0]); - WriteValue(o_rFile,sBuffer); - - if ( pResource->HasSubList_CurKey() ) - { - PushLevel_Write(); - - WriteList(o_rFile); - - PopLevel_Write(); - } - } // end for -} - -void -GenericInfo_Parser::PushLevel_Write() -{ - nLevel++; - pResource->Push_CurList(); -} - -void -GenericInfo_Parser::PopLevel_Write() -{ - nLevel--; - pResource->Pop_CurList(); -} - -void -GenericInfo_Parser::WriteComment( ostream & o_rFile, - const char * i_sStr ) -{ - WriteStr( o_rFile, i_sStr ); - if ( i_sStr[ strlen(i_sStr)-1 ] != '\n' ) - WriteStr( o_rFile, C_sLineEnd ); -} - -void -GenericInfo_Parser::WriteKey( ostream & o_rFile, - const char * i_sStr ) -{ - WriteIndentation(o_rFile); - WriteStr( o_rFile, i_sStr ); -} - -void -GenericInfo_Parser::WriteValue( ostream & o_rFile, - const char * i_sStr ) -{ - if ( i_sStr != 0 ? strlen(i_sStr) > 0 : false ) - { - WriteStr(o_rFile," "); - WriteStr(o_rFile,i_sStr); - } - - WriteStr(o_rFile,C_sLineEnd); -} - -void -GenericInfo_Parser::WriteIndentation( ostream & o_rFile ) -{ - const int nIndentBound = 60; - - static const char sIndentation[nIndentBound+1] = - "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t" - "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t" - "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"; - - if ( nLevel == 0 ) - return; - - if ( nLevel <= nIndentBound ) - o_rFile.write( sIndentation, nLevel ); - else - { - INT16 iLevel = nLevel; - for ( ; iLevel > nIndentBound; iLevel-=nIndentBound ) - o_rFile.write( sIndentation, nIndentBound ); - o_rFile.write( sIndentation, iLevel ); - } -} - - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/giparser/makefile.mk b/soltools/giparser/makefile.mk deleted file mode 100644 index d7f04dbe8..000000000 --- a/soltools/giparser/makefile.mk +++ /dev/null @@ -1,63 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=.. - -PRJNAME=soltools -TARGET=soltools_giparser -TARGETTYPE=CUI -ENABLE_EXCEPTIONS=TRUE - -# --- Settings ----------------------------------------------------- - -.INCLUDE : $(PRJ)$/util$/makefile.pmk -.INCLUDE : settings.mk - -.IF "$(CROSS_COMPILING)"=="YES" -all: - @echo Nothing done when cross-compiling -.ENDIF - -# --- Files -------------------------------------------------------- - -OBJFILES=\ - $(OBJ)$/gen_info.obj \ - $(OBJ)$/gi_list.obj \ - $(OBJ)$/gi_parse.obj \ - $(OBJ)$/st_gilrw.obj - -SLOFILES=\ - $(SLO)$/gen_info.obj \ - $(SLO)$/gi_list.obj \ - $(SLO)$/gi_parse.obj \ - $(SLO)$/st_gilrw.obj - -# --- Targets ------------------------------------------------------ - - -.INCLUDE : target.mk - diff --git a/soltools/giparser/st_gilrw.cxx b/soltools/giparser/st_gilrw.cxx deleted file mode 100644 index bd00bae3d..000000000 --- a/soltools/giparser/st_gilrw.cxx +++ /dev/null @@ -1,110 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_soltools.hxx" - - -#include <st_gilrw.hxx> - -#include <gen_info.hxx> -#include <gi_list.hxx> -#include <gi_parse.hxx> -#include <simstr.hxx> -#include <st_list.hxx> - - -using namespace std; - - -ST_InfoListReader::ST_InfoListReader() -{ - dpParser = new GenericInfo_Parser; -} - -ST_InfoListReader::~ST_InfoListReader() -{ - delete dpParser; -} - - -bool -ST_InfoListReader::LoadList( List_GenericInfo & o_rList, - const Simstr & i_sFileName ) -{ - aListStack.push_back(&o_rList); - return dpParser->LoadList(*this, i_sFileName); -} - -ST_InfoListReader::E_Error -ST_InfoListReader::GetLastError( UINT32 * o_pErrorLine ) const -{ - return dpParser->GetLastError(o_pErrorLine); -} - -void -ST_InfoListReader::AddKey( const char * i_sKey, - UINT32 i_nKeyLength, - const char * i_sValue, - UINT32 i_nValueLength, - const char * i_sComment, - UINT32 i_nCommentLength ) -{ - Simstr sKey(i_sKey, i_nKeyLength); - Simstr sValue(i_sValue, i_nValueLength); - Simstr sComment(i_sComment, i_nCommentLength); - - pCurKey = new GenericInfo(sKey, sValue, sComment); - aListStack.back()->InsertInfo( pCurKey ); -} - -void -ST_InfoListReader::OpenList() -{ - if ( pCurKey == 0 ) - { - cerr << "error: '{' without key found." << endl; - exit(1); - } - - aListStack.push_back( & pCurKey->SubList() ); -} - -void -ST_InfoListReader::CloseList() -{ - if ( aListStack.size() == 0 ) - { - cerr << "error: '}' without corresponding '}' found." << endl; - exit(1); - } - - aListStack.pop_back(); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/inc/gen_info.hxx b/soltools/inc/gen_info.hxx deleted file mode 100644 index 050edc8f5..000000000 --- a/soltools/inc/gen_info.hxx +++ /dev/null @@ -1,91 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef GEN_INFO_HXX -#define GEN_INFO_HXX - - -#include "simstr.hxx" -#include <string.h> - - - -class List_GenericInfo; - - -/** Holds generic informations in a simple hierarchical format. -*/ -class GenericInfo -{ - public: - // LIFECFYCLE - GenericInfo( - const Simstr & i_sKey, - const Simstr & i_sValue = Simstr::null_(), - const Simstr & i_sComment = Simstr::null_() ); - GenericInfo( - const GenericInfo & i_rInfo ); - ~GenericInfo(); - - // OPERATORS - GenericInfo & operator=( - const GenericInfo & i_rInfo ); - bool operator<( - const GenericInfo & i_rInfo ) const -#ifdef UNX - { return strcasecmp(sKey.str(),i_rInfo.sKey.str()) < 0; } -#else - { return stricmp(sKey.str(),i_rInfo.sKey.str()) < 0; } -#endif - // INFO - const Simstr & Key() const { return sKey; } - const Simstr & Value() const { return sValue; } - const Simstr & Comment() const { return sComment; } - bool HasSubList() const { return dpSubList != 0; } - - const List_GenericInfo & - SubList() const { return HasSubList() ? *dpSubList : CreateMyList(); } - // ACCESS - List_GenericInfo & - SubList() { return HasSubList() ? *dpSubList : CreateMyList(); } - - private: - /// @precond dpSubList == 0 . - List_GenericInfo & CreateMyList() const; - - // DATA - Simstr sKey; - Simstr sValue; - Simstr sComment; - List_GenericInfo * dpSubList; /// Owned by this object. -}; - - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/inc/gi_list.hxx b/soltools/inc/gi_list.hxx deleted file mode 100644 index be2b37412..000000000 --- a/soltools/inc/gi_list.hxx +++ /dev/null @@ -1,217 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef SOLTOOLS_GI_LIST_HXX -#define SOLTOOLS_GI_LIST_HXX - - -#include "st_list.hxx" - - -class GenericInfo; - -/** Holds set of generic informations in a sorted list. - - At different places, methods of this class have a parameter, - whose name includes "path". Those are paths like this: - - src370/drives/o: - - which are used to access GenericInfo keys in deep search through - the lists and their sublists. -*/ -class List_GenericInfo -{ - public: - // TYPES - class const_iterator - { - public: - const GenericInfo & operator*() const; - const_iterator & operator++(); - bool operator==( const const_iterator & ) const; - bool operator!=( const const_iterator & ) const; - - const_iterator(); - const_iterator( const DynamicList< GenericInfo >::const_iterator & ); - private: DynamicList< GenericInfo >::const_iterator it; - }; - class iterator - { public: - GenericInfo & operator*() const; - iterator & operator++(); - bool operator==( const iterator & ) const; - bool operator!=( const iterator & ) const; - - iterator(); - iterator( const DynamicList< GenericInfo >::iterator & ); - private: DynamicList< GenericInfo >::iterator it; - }; - - typedef const char * KeyPath; - - // LIFECYCLE - List_GenericInfo(); - List_GenericInfo( - const List_GenericInfo & - i_rList ); - ~List_GenericInfo(); - - // OPERATORS - List_GenericInfo & operator=( - const List_GenericInfo & - i_rList ); - const GenericInfo * operator[]( - KeyPath i_sKeyPath ) const; - GenericInfo * operator[]( - KeyPath i_sKeyPath ); - - // OPERATIONS - bool InsertInfo( - GenericInfo * let_dpInfo, /// Will be owned by this object. - bool i_bOverwrite = true ); - bool InsertInfoByPath( - GenericInfo * let_dpInfo, /// Will be owned by this object. - KeyPath i_sKeyPath, - bool i_bCreatePath, - bool i_bOverwrite = true ); - - GenericInfo * ReleaseInfo( /// Removes the GenericInfo from its parent. - KeyPath i_sKeyPath ); - - void DeleteInfo( - KeyPath i_sKeyPath ); - - // INFO - unsigned Size() const; - - const_iterator Begin() const; - const_iterator End() const; - - // ACCESS - iterator Begin(); - iterator End(); - - private: - typedef DynamicList< GenericInfo >::iterator sub_iterator; - - sub_iterator lower_bound( - bool & o_bExists, - const char * & o_sNextPathSegment, - KeyPath i_sKeyPath ); - - DynamicList< GenericInfo > - aChildren; -}; - - -// IMPLEMENTATION - - -inline const GenericInfo & -List_GenericInfo:: -const_iterator::operator*() const - { return *(*it); } - -inline List_GenericInfo::const_iterator & -List_GenericInfo:: -const_iterator::operator++() - { ++it; return *this; } - -inline bool -List_GenericInfo:: -const_iterator::operator==( const const_iterator & i_rIter ) const - { return it == i_rIter.it; } - -inline bool -List_GenericInfo:: -const_iterator::operator!=( const const_iterator & i_rIter ) const - { return it != i_rIter.it; } - -inline List_GenericInfo:: -const_iterator::const_iterator() - : it(0) { } - -inline List_GenericInfo:: -const_iterator::const_iterator( const DynamicList< GenericInfo >::const_iterator & i_rDynListIter ) - : it(i_rDynListIter) { } - - -inline GenericInfo & -List_GenericInfo:: -iterator::operator*() const - { return *(*it); } - -inline List_GenericInfo::iterator & -List_GenericInfo:: -iterator::operator++() - { ++it; return *this; } - -inline bool -List_GenericInfo:: -iterator::operator==( const iterator & i_rIter ) const - { return it == i_rIter.it; } - -inline bool -List_GenericInfo:: -iterator::operator!=( const iterator & i_rIter ) const - { return it != i_rIter.it; } - -inline List_GenericInfo:: -iterator::iterator() - : it(0) { } - -inline List_GenericInfo:: -iterator::iterator( const DynamicList< GenericInfo >::iterator & i_rDynListIter ) - : it(i_rDynListIter) { } - -inline unsigned -List_GenericInfo::Size() const - { return aChildren.size(); } - -inline List_GenericInfo::const_iterator -List_GenericInfo::Begin() const - { return aChildren.begin(); } - -inline List_GenericInfo::const_iterator -List_GenericInfo::End() const - { return aChildren.end(); } - -inline List_GenericInfo::iterator -List_GenericInfo::Begin() - { return aChildren.begin(); } - -inline List_GenericInfo::iterator -List_GenericInfo::End() - { return aChildren.end(); } - - - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/inc/gi_parse.hxx b/soltools/inc/gi_parse.hxx deleted file mode 100644 index 23b145333..000000000 --- a/soltools/inc/gi_parse.hxx +++ /dev/null @@ -1,167 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#ifndef SOLTOOLS_GI_PARSE_HXX -#define SOLTOOLS_GI_PARSE_HXX - -#include "simstr.hxx" -#include "gilacces.hxx" -#include <fstream> - -class GenericInfoList_Builder; -class GenericInfoList_Browser; - -/** Reads generic information files into a simple structure in memory. - -Information files used by this parser have the following format: - -key [value] -{ - key [value] - key [value] - { - key [value] - ... - ... - } -} -key [value] -... -... - -*/ - - -class GenericInfo_Parser : public GenericInfoParseTypes -{ - public: - typedef unsigned long UINT32; - typedef short INT16; - - GenericInfo_Parser(); - ~GenericInfo_Parser(); - - /** reads a information file and stores the data in a - List_GenericInfo - */ - bool LoadList( - GenericInfoList_Builder & - o_rResult, - const Simstr & i_sSourceFileName ); - - /** save the InformationList to rSourceFile - returns false on error - */ - bool SaveList( - const Simstr & i_rOutputFile, - GenericInfoList_Browser & - io_rListBrowser ); - - E_Error GetLastError( - UINT32 * o_pErrorLine = 0 ) const; - - private: - enum E_LineType - { - lt_empty = 0, - lt_key, - lt_open_list, - lt_close_list, - lt_comment - }; - - void SetError( - E_Error i_eError ); - void ResetState( - GenericInfoList_Builder & - io_rResult ); - void ResetState( - GenericInfoList_Browser & - io_rSrc ); - - void ReadLine(); - bool InterpretLine(); - E_LineType ClassifyLine(); - - void ReadKey(); - void PushLevel_Read(); /// When list is opened by '{': - void PopLevel_Read(); /// When list is closed by '}': - void AddCurLine2CurComment(); - - void WriteList( - std::ostream & o_rFile ); - - void PushLevel_Write(); /// When SubList is pushed in pResource - void PopLevel_Write(); /// When SubList is popped in pResource - - void WriteComment( - std::ostream & o_rFile, - const char * i_sStr ); - void WriteKey( - std::ostream & o_rFile, - const char * i_sStr ); - void WriteValue( - std::ostream & o_rFile, - const char * i_sStr ); - void WriteIndentation( - std::ostream & o_rFile ); - - // DATA - const char * sCurParsePosition; - - UINT32 nCurLine; - INT16 nLevel; - bool bGoon; - - Simstr sCurComment; - - E_Error eErrorCode; - UINT32 nErrorLine; - - GenericInfoList_Builder * - pResult; - GenericInfoList_Browser * - pResource; - - char * dpBuffer; - char * sFilePtr; -}; - - -inline GenericInfo_Parser::E_Error -GenericInfo_Parser::GetLastError( UINT32 * o_pErrorLine ) const -{ - if ( o_pErrorLine != 0 ) - *o_pErrorLine = nErrorLine; - return eErrorCode; -} - - -#endif - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/inc/gilacces.hxx b/soltools/inc/gilacces.hxx deleted file mode 100644 index 0b76ed7c1..000000000 --- a/soltools/inc/gilacces.hxx +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef SOLTOOLS_GILACCES_HXX -#define SOLTOOLS_GILACCES_HXX - - - -class GenericInfoParseTypes -{ - public: - enum E_Error - { - ok = 0, - cannot_open, - unexpected_eof, - syntax_error, - unexpected_list_end - }; -}; - - - -/** This class is an abstract interface for a service, which - builds a memory structure out of a generic information - structure, read from a file or other stream. - - There may be different implementations, which build different kinds - of memory structures. -*/ -class GenericInfoList_Builder -{ - public: - typedef unsigned long UINT32; - - virtual ~GenericInfoList_Builder() {} - - virtual void AddKey( - const char * i_sKey, - UINT32 i_nKeyLength, - const char * i_sValue, - UINT32 i_nValueLength, - const char * i_sComment, - UINT32 i_nCommentLength ) = 0; - - virtual void OpenList() = 0; - virtual void CloseList() = 0; -}; - - -/** This class is an abstract interface for a service, which - returns the values of a generic information tree out of - a memory structure. - - There may be different implementations, which browse different - kinds of memory structures. -*/ -class GenericInfoList_Browser -{ - public: - virtual ~GenericInfoList_Browser() {} - - virtual bool Start_CurList() = 0; - virtual bool NextOf_CurList() = 0; - - virtual void Get_CurKey( - char * o_rKey ) const = 0; - virtual void Get_CurValue( - char * o_rValue ) const = 0; - virtual void Get_CurComment( - char * o_rComment ) const = 0; - virtual bool HasSubList_CurKey() const = 0; - - virtual void Push_CurList() = 0; - virtual void Pop_CurList() = 0; -}; - - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/inc/pch/precompiled_soltools.cxx b/soltools/inc/pch/precompiled_soltools.cxx deleted file mode 100644 index 3512522b4..000000000 --- a/soltools/inc/pch/precompiled_soltools.cxx +++ /dev/null @@ -1,31 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#include "precompiled_soltools.hxx" - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/inc/pch/precompiled_soltools.hxx b/soltools/inc/pch/precompiled_soltools.hxx deleted file mode 100644 index e77fa163f..000000000 --- a/soltools/inc/pch/precompiled_soltools.hxx +++ /dev/null @@ -1,34 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): Generated on 2006-09-01 17:50:01.811113 - -#ifdef PRECOMPILED_HEADERS -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/inc/simstr.hxx b/soltools/inc/simstr.hxx deleted file mode 100644 index bc3636c0d..000000000 --- a/soltools/inc/simstr.hxx +++ /dev/null @@ -1,225 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef SOLTOOLS_SIMSTR_HXX -#define SOLTOOLS_SIMSTR_HXX - - -class Simstr /// Simple string class. -{ -// INTERFACE - public: - // LIFECYCLE - Simstr( - const char * str = 0); - Simstr( /** Creates Simstr out of a copy of the first - 'nrOfBytes' bytes of 'anyBytes'. - Adds a '\0' at the end. */ - const char * anybytes, - int nrOfBytes); - Simstr( /** Creates Simstr out of a copy of the described bytes within 'anyBytes'. - Adds a '\0' at the end. */ - const char * anybytes, - int firstBytesPos, - int nrOfBytes ); - Simstr( /// Creates Simstr of 'anzahl' times 'c'. - char c, - int anzahl); - Simstr( - const Simstr & S); - ~Simstr(); - - - // OPERATORS - operator const char*() const; - - Simstr & operator=( - const Simstr & S ); - - Simstr operator+( - const Simstr & S ) const; - Simstr & operator+=( - const Simstr & S ); - Simstr & operator+=( - const char * s ); - - bool operator==( - const Simstr & S ) const; - bool operator!=( - const Simstr & S ) const; - bool operator<( - const Simstr & S ) const; - bool operator>( - const Simstr & S ) const; - bool operator<=( - const Simstr & S ) const; - bool operator>=( - const Simstr & S ) const; - // INFO - static const Simstr & - null_(); - - const char * str() const; - int l() const; // Length of string without '\0' at end. - char * s(); // ATTENTION !!! // Only to be used, when a function needs a 'char*' but - // nevertheless THAT WILL BE NOT CHANGED! - // Typecasts to 'const char*' are performed automatically. - char get( - int n) const; - char get_front() const; - char get_back() const; - Simstr get( - int startPos, - int anzahl ) const; - Simstr get_front( - int anzahl ) const; - Simstr get_back( - int anzahl ) const; - - int pos_first( - char c ) const; - int pos_first_after( - char c, - int startSearchPos ) const; - int pos_last( - char c ) const; - int pos_first( - const Simstr & S ) const; - int pos_last( - const Simstr & S ) const; - int count( - char c ) const; - bool is_empty() const; // Only true if object == "". - bool is_no_text() const; // String may contain spaces or tabs. - - Simstr get_first_token( - char c ) const; - Simstr get_last_token( - char c ) const; - - // ACCESS - char & ch( /** Reference to sz[n]. Allows change of this char. - !!! No safety, if n is out of the allowed range! */ - int n ); - - // OPERATIONS - void insert( - int pos, - char c ); - void push_front( - char c ); - void push_back( - char c ); - void insert( - int pos, - const Simstr & S ); - void push_front( - const Simstr & S ); - void push_back( - const Simstr & S ); - - void remove( - int pos, - int anzahl = 1 ); - void remove_trailing_blanks(); - void pop_front( - int anzahl = 1 ); - void pop_back( - int anzahl = 1 ); - void rem_back_from( - int removeStartPos ); - void remove_all( - char c ); - void remove_all( // Starts search left. - const Simstr & S ); - void strip( - char c ); // Removes all characters == c from front and back. - // c == ' ' removes also TABs !!! - void empty(); // Changes object to the value "". - - void replace( - int pos, - char c ); - void replace( - int startPos, - int anzahl, - const Simstr & S ); - void replace_all( - char oldCh, - char newCh ); - void replace_all( - const Simstr & oldS, - const Simstr & newS ); - void to_lower(); - - Simstr take_first_token( /// Token is removed from the Simstr. - char c ); - Simstr take_last_token( /// Token is removed from the Simstr. - char c ); - private: - // DATA - char * sz; - int len; -}; - -// Simstr - char* / char - concatenations -Simstr operator+(const char * str, const Simstr & S); -Simstr operator+(const Simstr & S, const char * str); -Simstr operator+(char c, const Simstr & S); -Simstr operator+(const Simstr & S, char c); - -// Simstr - char* - comparison operators -bool operator==(const Simstr & S, const char * str); -bool operator!=(const Simstr & S, const char * str); -bool operator<(const Simstr & S, const char * str); -bool operator>(const Simstr & S, const char * str); -bool operator<=(const Simstr & S, const char * str); -bool operator>=(const Simstr & S, const char * str); -bool operator==(const char * str, const Simstr & S); -bool operator!=(const char * str, const Simstr & S); -bool operator<(const char * str, const Simstr & S); -bool operator>(const char * str, const Simstr & S); -bool operator<=(const char * str, const Simstr & S); -bool operator>=(const char * str, const Simstr & S); - - -inline const char * -Simstr::str() const { return sz; } -inline char * -Simstr::s() { return sz; } -inline int -Simstr::l() const { return len; } -inline -Simstr::operator const char*() const { return sz; } -inline bool -Simstr::is_empty() const { return len == 0; } - - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/inc/st_gilrw.hxx b/soltools/inc/st_gilrw.hxx deleted file mode 100644 index e533210ec..000000000 --- a/soltools/inc/st_gilrw.hxx +++ /dev/null @@ -1,127 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef SOLTOOLS_ST_GILRW_HXX -#define SOLTOOLS_ST_GILRW_HXX - - -#include "gilacces.hxx" -#include "st_list.hxx" - -class Simstr; -class List_GenericInfo; -class GenericInfo; -class GenericInfo_Parser; - -class ST_InfoListReader : public GenericInfoParseTypes, - private GenericInfoList_Builder -{ - public: - // LIFECYCLE - ST_InfoListReader(); - ~ST_InfoListReader(); - // OPERATIONS - bool LoadList( - List_GenericInfo & o_rList, - const Simstr & i_sFileName ); - // INFO - E_Error GetLastError( - UINT32 * o_pErrorLine = 0 ) const; - private: - // Interface GenericInfoList_Builder - virtual void AddKey( - const char * i_sKey, - UINT32 i_nKeyLength, - const char * i_sValue, - UINT32 i_nValueLength, - const char * i_sComment, - UINT32 i_nCommentLength ); - - virtual void OpenList(); - virtual void CloseList(); - - // Forbid copies: - ST_InfoListReader( const ST_InfoListReader & ); - ST_InfoListReader & operator=( const ST_InfoListReader & ); - - // DATA - GenericInfo_Parser * - dpParser; - - ST_List< List_GenericInfo * > - aListStack; - GenericInfo * pCurKey; -}; - -class ST_InfoListWriter : public GenericInfoParseTypes, - private GenericInfoList_Browser -{ - public: - // LIFECYCLE - ST_InfoListWriter(); - ~ST_InfoListWriter(); - // OPERATIONS - bool SaveList( - const Simstr & i_sFileName, - List_GenericInfo & io_rList ); - - // INFO - E_Error GetLastError() const; - - private: - // Interface GenericInfoList_Browser - virtual bool Start_CurList(); - virtual bool NextOf_CurList(); - - virtual void Get_CurKey( - char * o_rKey ) const; - virtual void Get_CurValue( - char * o_rValue ) const; - virtual void Get_CurComment( - char * o_rComment ) const; - virtual bool HasSubList_CurKey() const; - - virtual void Push_CurList(); - virtual void Pop_CurList(); - - // Forbid copies: - ST_InfoListWriter( const ST_InfoListWriter & ); - ST_InfoListWriter & operator=( const ST_InfoListWriter & ); - - // DATA - GenericInfo_Parser * - dpParser; - - ST_List< List_GenericInfo * > - aListStack; - GenericInfo * pCurKey; -}; - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/inc/st_list.hxx b/soltools/inc/st_list.hxx deleted file mode 100644 index 51f0a32fd..000000000 --- a/soltools/inc/st_list.hxx +++ /dev/null @@ -1,332 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef SOLTOOLS_ST_LIST_HXX -#define SOLTOOLS_ST_LIST_HXX - -#include <string.h> -#include <iostream> -#include <stdlib.h> - -template <class XX> -class ST_List /// Soltools-List. -{ - public : - typedef XX * iterator; - typedef const XX * const_iterator; - - // LIFECYCLE - ST_List(); - ST_List( - const ST_List<XX> & i_rList ); - virtual ~ST_List() { delete[] inhalt; } - - // OPERATORS - ST_List<XX> & operator=( - const ST_List<XX> & i_rList ); - - const XX & operator[]( - unsigned n) const - { return elem(n); } - XX & operator[]( - unsigned n) - { return elem(n); } - // OPERATIONS - void reserve( - unsigned i_nSize ) - { alloc(i_nSize,true); } - void insert( - iterator i_aPos, - const XX & elem_ ) - { Insert((unsigned)(i_aPos-begin()), elem_); } - virtual void Insert( - unsigned pos, - const XX & elem ); - void push_back( - const XX & elem_) - { Insert(size(),elem_); } - void remove( - iterator i_aPos ) - { Remove((int)(i_aPos-begin())); } - virtual void Remove( - unsigned pos ); - void pop_back() { Remove(size()-1); } - void erase_all() { while (size()) Remove(size()-1); } - - // INQUIRY - const_iterator begin() const { return &inhalt[0]; } - const_iterator end() const { return &inhalt[len]; } - - const XX & front() const { return elem(0); } - const XX & back() const { return elem(len-1); } - - unsigned size() const { return len; } - unsigned space() const { return allocated; } - bool is_valid_index( - unsigned n) const - { return n < len; } - // ACCESS - iterator begin() { return &inhalt[0]; } - iterator end() { return &inhalt[len]; } - - XX & front() { return elem(0); } - XX & back() { return elem(len-1); } - - protected: - void checkSize( - unsigned newLength); - void alloc( - unsigned newSpace, - bool re = false ); - - const XX & elem( - unsigned n ) const - { return inhalt[n]; } - XX & elem( - unsigned n ) - { return inhalt[n]; } - // DATA - XX * inhalt; - unsigned len; - unsigned allocated; -}; - - - -template <class XY> -class DynamicList : public ST_List< XY* > -{ - public: - DynamicList(); - DynamicList( - const DynamicList<XY> & - i_rList ); - virtual ~DynamicList(); /// Deletes all member pointers - - DynamicList<XY> & operator=( - const DynamicList<XY> & - i_rList ); - - virtual void Insert( - unsigned pos, - XY * const & elem ); - virtual void Remove( - unsigned pos ); -}; - - - -template <class XX> -ST_List<XX>::ST_List() - : inhalt(0), - len(0), - allocated(0) -{ - alloc(1); -} - -template <class XX> -ST_List<XX>::ST_List( const ST_List<XX> & i_rList ) - : inhalt(0), - len(0), - allocated(0) -{ - alloc(i_rList.size()); - - for ( const_iterator it = i_rList.begin(); - it != i_rList.end(); - ++it ) - { - push_back(*it); - } -} - -template <class XX> -ST_List<XX> & -ST_List<XX>::operator=( const ST_List<XX> & i_rList ) -{ - for ( const_iterator it = i_rList.begin(); - it != i_rList.end(); - ++it ) - { - push_back(*it); - } - return *this; -} - -template <class XX> -void -ST_List<XX>::Insert(unsigned pos, const XX & elem_) -{ - if ( pos > len ) - return; - - checkSize(len+2); - for ( unsigned p = len; p > pos; --p) - { - inhalt[p] = inhalt[p-1]; - } - inhalt[pos] = elem_; - len++; -} - - -template <class XX> -void -ST_List<XX>::Remove(unsigned pos) -{ - if ( pos >= len ) - return; - len--; - for ( unsigned p = pos; p < len; ++p) - { - inhalt[p] = inhalt[p+1]; - } -} - - -// Protected: -template <class XX> -void -ST_List<XX>::checkSize(unsigned newLength) -{ - // neuen Platzbedarf pruefen: - unsigned newSpace = space(); - if (newLength >= newSpace) - { - if (!newSpace) - newSpace = 1; - const unsigned nBorder = 2000000000; - while(newLength >= newSpace) - { - if (newSpace < nBorder) - newSpace <<= 1; - else - { - std::cerr << "List becomes too big" << std::endl; - exit(1); - } - } - } - - // Veraenderung ?: - if (newSpace != space()) - alloc(newSpace,true); -} - -template <class XX> -void -ST_List<XX>::alloc( unsigned newSpace, - bool re ) -{ - XX * pNew = new XX[newSpace]; - - if (inhalt != 0) - { - if (re) - { - for (unsigned i = 0; i < len; ++i) - { - pNew[i] = inhalt[i]; - } // end for - } - delete [] inhalt; - } - - inhalt = pNew; - allocated = newSpace; -} - - -template <class XY> -DynamicList<XY>::DynamicList() -{ -} - -template <class XY> -DynamicList<XY>::DynamicList( const DynamicList<XY> & i_rList ) - : ST_List< XY* >(i_rList) -{ - for ( typename DynamicList<XY>::iterator it = this->begin(); - it != DynamicList<XY>::end(); - ++it ) - { - // Copying the contents the pointers point at: - (*it) = new XY( *(*it) ); - } -} - -template <class XY> -DynamicList<XY>::~DynamicList() -{ - this->erase_all(); -} - -template <class XY> -DynamicList<XY> & -DynamicList<XY>::operator=( const DynamicList<XY> & i_rList ) -{ - for ( typename DynamicList<XY>::const_iterator it = i_rList.begin(); - it != i_rList.end(); - ++it ) - { - push_back( new XY(*(*it)) ); - } - return *this; -} - - -template <class XY> -void -DynamicList<XY>::Insert(unsigned pos, XY * const & elem_) -{ - if ( pos > this->len ) - return; - - checkSize(DynamicList<XY>::len+2); - memmove( DynamicList<XY>::inhalt+pos+1, DynamicList<XY>::inhalt+pos, (DynamicList<XY>::len-pos) * sizeof(XY*) ); - this->inhalt[pos] = elem_; - this->len++; -} - -template <class XY> -void -DynamicList<XY>::Remove( unsigned pos ) -{ - if (!this->is_valid_index(pos) ) - return; - this->len--; - delete DynamicList<XY>::inhalt[pos]; - memmove(DynamicList<XY>::inhalt+pos, DynamicList<XY>::inhalt+pos+1, (DynamicList<XY>::len-pos) * sizeof(XY*) ); -} - - - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/inc/st_types.hxx b/soltools/inc/st_types.hxx deleted file mode 100644 index 9320dfd61..000000000 --- a/soltools/inc/st_types.hxx +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef SOLTOOLS_ST_TYPES_HXX -#define SOLTOOLS_ST_TYPES_HXX - -typedef unsigned long UINT32; -typedef long INT32; -typedef unsigned short UINT16; -typedef short INT16; - - - - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/javadep/javadep.c b/soltools/javadep/javadep.c deleted file mode 100644 index 53b5cf51e..000000000 --- a/soltools/javadep/javadep.c +++ /dev/null @@ -1,915 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -/* All Java Virtual Machine Specs are from - * "The Java Virtual Machine Specification", T. Lindholm, F. Yellin - * (JVMS) - */ - -#include <stdlib.h> -#include <stdio.h> -#include <stdarg.h> -#include <string.h> -#include <errno.h> -#include <ctype.h> -#include <limits.h> - -#if defined(UNX) -#include <unistd.h> -#include <netinet/in.h> /* ntohl(), ntohs() */ -#elif defined(WNT) -#include <io.h> -#define access _access -#define vsnprintf _vsnprintf -#define CDECL _cdecl -#define F_OK 00 -#define PATH_MAX _MAX_PATH -#define ntohl(x) ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ - (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) - -#define ntohs(x) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) -#endif - -/* max. length of line in response file */ -#define RES_FILE_BUF 65536 - -struct file { - char *pname; - FILE *pfs; -}; - -struct growable { - int ncur; - int nmax; - char **parray; -}; - -typedef struct file file_t; -typedef unsigned char uint8; -typedef unsigned short uint16; -typedef unsigned int uint32; - -struct utf8 { - uint16 nlen; - void *pdata; -}; - -typedef struct utf8 utf8_t; - -/* The contents of the Constant_pool is described in JVMS p. 93 - */ -enum { - CONSTANT_Class = 7, - CONSTANT_Fieldref = 9, - CONSTANT_Methodref = 10, - CONSTANT_InterfaceMethodref = 11, - CONSTANT_String = 8, - CONSTANT_Integer = 3, - CONSTANT_Float = 4, - CONSTANT_Long = 5, - CONSTANT_Double = 6, - CONSTANT_NameAndType = 12, - CONSTANT_Utf8 = 1 -}; - -enum { NGROW_INIT = 10, NGROW = 2 }; - -static char *pprogname = "javadep"; -static char csep = ';'; -#if defined (UNX) -#define CDECL -static char cpathsep = '/'; -#elif defined (WNT) -static char cpathsep = '\\'; -#endif -static FILE *pfsout = NULL; -static char *pout_file = NULL; - - -/* prototypes */ -uint8 read_uint8(const file_t *pfile); -uint16 read_uint16(const file_t *pfile); -uint32 read_uint32(const file_t *pfile); -void skip_bytes(const file_t *pfile, const long nnum); -char *escape_slash(const char *pstr); -int is_inner(const char *pstr); -void print_dependencies(const struct growable *pdep, - const char* pclass_file); -void process_class_file(const char *pfilenamem, - const struct growable *pfilt); -char *utf8tolatin1(const utf8_t a_utf8); -void *xmalloc(size_t size); -void *xcalloc(size_t nmemb, size_t size); -void *xrealloc(void *ptr, size_t size); -void grow_if_needed (struct growable *pgrow); -int append_to_growable(struct growable *, char *); -struct growable *allocate_growable(void); -void free_growable(struct growable *pgrowvoid); -void create_filters(struct growable *pfilt, const struct growable *pinc); -void usage(void); -void err_quit(const char *, ...); -void silent_quit(void); - -#ifdef WNT -/* poor man's getopt() */ -int simple_getopt(char *pargv[], const char *poptstring); -char *optarg = NULL; -int optind = 1; -int optopt = 0; -int opterr = 0; -#endif - -uint8 -read_uint8(const file_t *pfile) -{ - /* read a byte from classfile */ - size_t nread; - uint8 ndata; - nread = fread(&ndata, sizeof(uint8), 1, pfile->pfs); - if ( !nread ) { - fclose(pfile->pfs); - err_quit("%s: truncated class file", pfile->pname); - } - return ndata; -} - -uint16 -read_uint16(const file_t *pfile) -{ - /* read a short from classfile and convert it to host format */ - size_t nread; - uint16 ndata; - nread = fread(&ndata, sizeof(uint16), 1, pfile->pfs); - if ( !nread ) { - fclose(pfile->pfs); - err_quit("%s: truncated class file", pfile->pname); - } - ndata = ntohs(ndata); - return ndata; -} - -uint32 -read_uint32(const file_t *pfile) -{ - /* read an int from classfile and convert it to host format */ - size_t nread; - uint32 ndata; - nread = fread(&ndata, sizeof(uint32), 1, pfile->pfs); - if ( !nread ) { - fclose(pfile->pfs); - err_quit("%s: truncated class file", pfile->pname); - } - ndata = ntohl(ndata); - return ndata; -} - -utf8_t -read_utf8(const file_t *pfile) -{ - /* Read a java utf-8-string with uint16 length prependend - * from class file. Returns utf8 struct - * with fresh allocated datablock, - * caller is responsible for freeing. - * Data is still in network byteorder - */ - - utf8_t a_utf8; - size_t nread; - - a_utf8.pdata = NULL; - - a_utf8.nlen = read_uint16(pfile); - if (a_utf8.nlen > 0) { - a_utf8.pdata = xmalloc(a_utf8.nlen*sizeof(char)); - nread = fread(a_utf8.pdata, a_utf8.nlen*sizeof(char), 1, pfile->pfs); - if ( !nread ) { - fclose(pfile->pfs); - err_quit("%s: truncated class file", pfile->pname); - } - } - - return a_utf8; -} - -char *utf8tolatin1(const utf8_t a_utf8) -{ - /* function returns fresh allocated zero terminated string, - * caller is responsible for freeing - */ - - /* JVMS p. 101: the null byte is encoded using a two byte format, - * Java Virtual Machine Utf8 strings differ in this respect from - * standard UTF-8 strings - */ - - /* Multibyte data is in network byte order */ - - char *p; - char *pp; - char *pstr; - - pstr = pp = xmalloc((a_utf8.nlen+1) * sizeof(char)); - - for ( p = (char*)a_utf8.pdata; - p < (char*)a_utf8.pdata+a_utf8.nlen; - p++ ) { - if ( *p & 0x80 ) { - err_quit("sorry, real UTF8 decoding not yet implemented\n"); - } else { - *pp++ = *p; - } - } - *pp = '\0'; - - return pstr; -} - - -void -skip_bytes(const file_t *pfile, const long nnumber) -{ - /* skip a nnumber of bytes in classfile */ - if ( fseek(pfile->pfs, nnumber, SEEK_CUR) == -1 ) - err_quit("%s: %s", pfile->pname, strerror(errno)); -} - -void -add_to_dependencies(struct growable *pdep, - const struct growable *pfilt, - char *pdepstr, - const char *pclass_file) -{ - /* create dependencies */ - int i; - size_t nlen_filt, nlen_str, nlen_pdepstr; - char *pstr, *ptrunc; - char path[PATH_MAX+1]; - char cnp_class_file[PATH_MAX+1]; - char cnp_str[PATH_MAX+1]; - - nlen_pdepstr = strlen(pdepstr); - pstr = xmalloc((nlen_pdepstr+6+1)*sizeof(char)); - memcpy(pstr, pdepstr, nlen_pdepstr+1); - strncat(pstr, ".class", 6); - - if ( pfilt->ncur == 0 ) { /* no filters */ - if ( access(pstr, F_OK) == 0 ) { - append_to_growable(pdep, strdup(pstr)); - } - } else { - nlen_str = strlen(pstr); - for ( i = 0; i < pfilt->ncur; i++ ) { - nlen_filt = strlen(pfilt->parray[i]); - if ( nlen_filt + 1 + nlen_str > PATH_MAX ) - err_quit("path to long"); - memcpy(path, pfilt->parray[i], nlen_filt); - path[nlen_filt] = '/'; - memcpy( path+nlen_filt+1, pstr, nlen_str+1); - - if ( access(path, F_OK) != 0 ) { - free(pstr); - pstr = NULL; - return; /* path doesn't represent a real file, don't bother */ - } - - /* get the canonical path */ -#if defined (UNX) - if ( !(realpath(pclass_file, cnp_class_file) - && realpath(path, cnp_str) ) ) { - err_quit("can't get the canonical path"); - } -#else - if ( !(_fullpath(cnp_class_file, pclass_file, sizeof(cnp_class_file)) - && _fullpath(cnp_str, path, sizeof(cnp_str)) ) ) { - err_quit("can't get the canonical path"); - } -#endif - - /* truncate so that only the package prefix remains */ - ptrunc = strrchr(cnp_str, cpathsep); - *ptrunc = '\0'; - ptrunc = strrchr(cnp_class_file, cpathsep); - *ptrunc = '\0'; - - if ( !strcmp(cnp_str, cnp_class_file) ) { - free(pstr); - pstr = NULL; - return; /* identical, don't bother with this one */ - } - - append_to_growable(pdep, strdup(path)); - } - } - free(pstr); - return; -} - -char * -escape_slash(const char *pstr) -{ - /* returns a fresh allocated string with all cpathsep escaped exchanged - * with "$/" - * - * caller is responsible for freeing - */ - - const char *pp = pstr; - char *p, *pnp; - char *pnew_str; - size_t nlen_pnp, nlen_pp; - int i = 0; - - while ( (p=strchr(pp, cpathsep)) != NULL ) { - ++i; - pp = ++p; - } - - nlen_pnp = strlen(pstr) + i; - pnp = pnew_str = xmalloc((nlen_pnp+1) * sizeof(char)); - - pp = pstr; - - if ( i > 0 ) { - while ( (p=strchr(pp, cpathsep)) != NULL ) { - memcpy(pnp, pp, p-pp); - pnp += p-pp; - *pnp++ = '$'; - *pnp++ = '/'; - pp = ++p; - } - } - nlen_pp = strlen(pp); - memcpy(pnp, pp, nlen_pp+1); - - return pnew_str; -} - - -void -print_dependencies(const struct growable *pdep, const char* pclass_file) -{ - char *pstr; - int i; - - pstr = escape_slash(pclass_file); - fprintf(pfsout, "%s:", pstr); - free(pstr); - - for( i=0; i<pdep->ncur; ++i) { - fprintf(pfsout, " \\\n"); - pstr=escape_slash(pdep->parray[i]); - fprintf(pfsout, "\t%s", pstr); - free(pstr); - } - - fprintf(pfsout,"\n\n"); - return; -} - -int -is_inner(const char *pstr) -{ - /* return true if character '$' is found in classname */ - - /* - * note that a '$' in a classname is not an exact indicator - * for an inner class. Java identifier may legally contain - * this chararcter, and so may classnames. In the context - * of javadep this doesn't matter since the makefile system - * can't cope with classfiles with '$'s in the filename - * anyway. - * - */ - - if ( strchr(pstr, '$') != NULL ) - return 1; - - return 0; -} - -void -process_class_file(const char *pfilename, const struct growable *pfilt) -{ - /* read class file and extract object information - * java class files are in bigendian data format - * (JVMS, p. 83) - */ - int i; - uint32 nmagic; - uint16 nminor, nmajor; - uint16 ncnt; - uint16 nclass_cnt; - utf8_t* pc_pool; - uint16* pc_class; - file_t file; - - struct growable *pdepen; - - file.pname = (char*)pfilename; - - file.pfs = fopen(file.pname,"rb"); - if ( !file.pfs ) - silent_quit(); - - nmagic = read_uint32(&file); - - if ( nmagic != 0xCAFEBABE ) { - fclose(file.pfs); - err_quit("%s: invalid magic", file.pname); - } - - nminor = read_uint16(&file); - nmajor = read_uint16(&file); - - /* get number of entries in constant pool */ - ncnt = read_uint16(&file); - -#ifdef DEBUG - printf("Magic: %x\n", nmagic); - printf("Major %d, Minor %d\n", nmajor, nminor); - printf("Const_pool_count %d\n", ncnt); -#else - (void)nmajor; - (void)nminor; -#endif - - /* There can be ncount entries in the constant_pool table - * so at most ncount-1 of them can be of type CONSTANT_Class - * (at leat one CONSTANT_Utf8 entry must exist). - * Usually way less CONSTANT_Class entries exists, of course - */ - - pc_pool = xcalloc(ncnt,sizeof(utf8_t)); - pc_class = xmalloc((ncnt-1)*sizeof(uint16)); - - /* pc_pool[0] is reserved to the java virtual machine and does - * not exist in the class file - */ - - nclass_cnt = 0; - - for (i = 1; i < ncnt; i++) { - uint8 ntag; - uint16 nindex; - utf8_t a_utf8; - - ntag = read_uint8(&file); - - /* we are only interested in CONSTANT_Class entries and - * Utf8 string entries, because they might belong to - * CONSTANT_Class entries - */ - switch(ntag) { - case CONSTANT_Class: - nindex = read_uint16(&file); - pc_class[nclass_cnt++] = nindex; - break; - case CONSTANT_Fieldref: - case CONSTANT_Methodref: - case CONSTANT_InterfaceMethodref: - skip_bytes(&file, 4L); - break; - case CONSTANT_String: - skip_bytes(&file, 2L); - break; - case CONSTANT_Integer: - case CONSTANT_Float: - skip_bytes(&file, 4L); - break; - case CONSTANT_Long: - case CONSTANT_Double: - skip_bytes(&file, 8L); - /* Long and Doubles take 2(!) - * entries in constant_pool_table - */ - i++; - break; - case CONSTANT_NameAndType: - skip_bytes(&file, 4L); - break; - case CONSTANT_Utf8: - a_utf8 = read_utf8(&file); - pc_pool[i] = a_utf8; - break; - default: - /* Unknown Constant_pool entry, this means we are - * in trouble - */ - err_quit("corrupted class file\n"); - break; - - } - } - - fclose(file.pfs); - - pdepen = allocate_growable(); - - for (i = 0; i < nclass_cnt; i++) { - char *pstr, *ptmpstr; - pstr = ptmpstr = utf8tolatin1(pc_pool[pc_class[i]]); - /* we are not interested in inner classes */ - if ( is_inner(pstr) ) { - free(pstr); - pstr = NULL; - continue; - } - /* strip off evt. array indicators */ - if ( *ptmpstr == '[' ) { - while ( *ptmpstr == '[' ) - ptmpstr++; - /* we only interested in obj. arrays, which are marked with 'L' */ - if ( *ptmpstr == 'L' ) { - char *p = pstr; - pstr = strdup(++ptmpstr); - /* remove final ';' from object array name */ - pstr[strlen(pstr)-1] = '\0'; - free(p); - } else { - free(pstr); - pstr = NULL; - } - } - - if (pstr) { - add_to_dependencies(pdepen, pfilt, pstr, file.pname); - free(pstr); - } - } - - print_dependencies(pdepen, file.pname); - free_growable(pdepen); - pdepen = NULL; - - for (i = 0; i < ncnt; i++) - free(pc_pool[i].pdata); - - free(pc_class); - free(pc_pool); -} - -void * -xmalloc(size_t size) -{ - void *ptr; - - ptr = malloc(size); - - if ( !ptr ) - err_quit("out of memory"); - - return ptr; -} - - -void * -xcalloc(size_t nmemb, size_t size) -{ - void *ptr; - - ptr = calloc(nmemb, size); - - if ( !ptr ) - err_quit("out of memory"); - - return ptr; -} - -void * -xrealloc(void *ptr, size_t size) -{ - void *newptr = realloc(ptr, size); - - if (newptr) - ptr = newptr; - else - err_quit("out of memory"); - - return ptr; -} - -void -err_quit(const char* fmt, ...) -{ - /* No dependency file must be generated for any error condition, - * just print message and exit. - */ - va_list args; - char buffer[PATH_MAX]; - - va_start(args, fmt); - - if ( pprogname ) - fprintf(stderr, "%s: ", pprogname); - vsnprintf(buffer, sizeof(buffer), fmt, args); - fputs(buffer, stderr); - fputc('\n', stderr); - - va_end(args); - - /* clean up */ - if ( pfsout && pfsout != stdout ) { - fclose(pfsout); - unlink(pout_file); - } - exit(1); -} - -void -silent_quit() -{ - /* In some cases we should just do a silent exit */ - - /* clean up */ - if ( pfsout && pfsout != stdout ) { - fclose(pfsout); - unlink(pout_file); - } - exit(0); -} - -int append_to_growable(struct growable *pgrow, char *pstr) -{ - /* append an element pstr to pgrow, - * return new number of elements - */ - grow_if_needed(pgrow); - pgrow->parray[pgrow->ncur++] = pstr; - return pgrow->ncur; -} - -void -grow_if_needed(struct growable *pgrow) -{ - /* grow growable arrays */ - - if ( pgrow->ncur >= pgrow->nmax ) { - pgrow->parray = xrealloc(pgrow->parray, - (NGROW*pgrow->nmax)*sizeof(char*)); - pgrow->nmax *= NGROW; - } - return; -} - -struct growable *allocate_growable(void) -{ - /* allocate an growable array, - * initialize with NGROW_INIT elements - */ - - struct growable *pgrow; - - pgrow = xmalloc(sizeof(struct growable)); - pgrow->parray = xmalloc(NGROW_INIT*sizeof(char *)); - pgrow->nmax = NGROW_INIT; - pgrow->ncur = 0; - return pgrow; -} - -void -free_growable(struct growable *pgrow) -{ - int i; - for( i = 0; i < pgrow->ncur; i++ ) - free(pgrow->parray[i]); - free(pgrow->parray); - free(pgrow); -} - -void -create_filters(struct growable *pfilt, const struct growable *pinc) -{ - char *p, *pp, *pstr; - int i; - size_t nlen, nlen_pstr; - /* break up includes into filter list */ - for ( i = 0; i < pinc->ncur; i++ ) { - pp = pinc->parray[i]; - - while ( (p = strchr(pp, csep)) != NULL) { - nlen = p - pp; - pstr = xmalloc((nlen+1)*sizeof(char*)); - memcpy(pstr, pp, nlen); - pstr[nlen] = '\0'; - append_to_growable(pfilt, pstr); - pp = p + 1; - } - nlen_pstr = strlen(pp); - pstr = xmalloc((nlen_pstr+1)*sizeof(char*)); - memcpy(pstr, pp, nlen_pstr+1); - append_to_growable(pfilt, pstr); - } - -} - -void -usage() -{ - fprintf(stderr, - "usage: %s [-i|-I includepath ... -s|-S seperator " - "-o|-O outpath -v|-V -h|-H] <file> ....\n", - pprogname); -} - -#ifdef WNT -/* my very simple minded implementation of getopt() - * it's to sad that getopt() is not available everywhere - * note: this is not a full POSIX conforming getopt() - */ -int simple_getopt(char *pargv[], const char *poptstring) -{ - char *parg = pargv[optind]; - - /* skip all response file arguments */ - if ( parg ) { - while ( *parg == '@' ) - parg = pargv[++optind]; - - if ( parg[0] == '-' && parg[1] != '\0' ) { - char *popt; - int c = parg[1]; - if ( (popt = strchr(poptstring, c)) == NULL ) { - optopt = c; - if ( opterr ) - fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt); - return '?'; - } - if ( *(++popt) == ':') { - if ( parg[2] != '\0' ) { - optarg = ++parg; - } else { - optarg = pargv[++optind]; - } - } else { - optarg = NULL; - } - ++optind; - return c; - } - } - return -1; -} -#endif - -int CDECL -main(int argc, char *argv[]) -{ - int bv_flag = 0; - struct growable *presp, *pincs, *pfilters; - int c, i, nall_argc; - char **pall_argv; - - presp = allocate_growable(); - - /* FIXME: cleanup the option parsing */ - /* search for response file, read it */ - for ( i = 1; i < argc; i++ ) { - char *parg = argv[i]; - char buffer[RES_FILE_BUF]; - - if ( *parg == '@' ) { - FILE *pfile = fopen(++parg, "r"); - if ( !pfile ) - err_quit("%s: %s", parg, strerror(errno)); - while ( !feof(pfile) ) { - char *p, *token; - - if ( fgets(buffer, RES_FILE_BUF, pfile) ) {; - p = buffer; - while ( (token = strtok(p, " \t\n")) != NULL ) { - p = NULL; - append_to_growable(presp, strdup(token)); - } - } - } - fclose(pfile); - } - } - - /* copy all arguments incl. response file in one array - * for parsing with getopt - */ - nall_argc = argc + presp->ncur; - pall_argv = xmalloc((nall_argc+1)*sizeof(char *)); - memcpy(pall_argv, argv, argc*sizeof(char *)); - memcpy(pall_argv+argc, presp->parray, presp->ncur*sizeof(char *)); - *(pall_argv+argc+presp->ncur) = '\0'; /* terminate */ - - opterr = 0; - pincs = allocate_growable(); - -#ifdef WNT - while( (c = simple_getopt(pall_argv, ":i:I:s:S:o:OhHvV")) != -1 ) { -#else - while( (c = getopt(nall_argc, pall_argv, ":i:I:s:S:o:OhHvV")) != -1 ) { -#endif - switch(c) { - case 'i': - case 'I': - append_to_growable(pincs, strdup(optarg)); - break; - case 's': - case 'S': - csep = optarg[0]; - break; - case 'o': - case 'O': - pout_file = optarg; - break; - case 'h': - case 'H': - usage(); - return 0; - break; - case 'v': - case 'V': - bv_flag = 1; - break; - case '?': - if (isprint (optopt)) - fprintf (stderr, - "Unknown option `-%c'.\n", optopt); - else - fprintf (stderr, - "Unknown option character `\\x%x'.\n", - optopt); - usage(); - return 1; - break; - case ':': - fprintf(stderr, "Missing parameter.\n"); - usage(); - return 1; - break; - default: - usage(); - return 1; - break; - } - } - - pfilters = allocate_growable(); - create_filters(pfilters, pincs); - free_growable(pincs); - pincs = NULL; - - if ( pout_file ) { - pfsout = fopen(pout_file, "w"); - if ( !pfsout ) - err_quit("%s: %s", pout_file, strerror(errno)); - } else { - pfsout = stdout; - } - - /* the remaining arguments are either class file - * names or response files, ignore response file - * since they have already been included - */ - for ( i = optind; i < nall_argc; i++ ) { - char *parg = pall_argv[i]; - if ( *parg != '@' ) { - process_class_file(parg, pfilters); - if ( pfsout != stdout ) { - if ( bv_flag ) - printf("Processed %s ...\n", parg); - } - } - } - - free_growable(pfilters); - pfilters = NULL; - free(pall_argv); - pall_argv = NULL; - free_growable(presp); - presp = NULL; - - fclose(pfsout); - exit(0); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/javadep/makefile.mk b/soltools/javadep/makefile.mk deleted file mode 100644 index e6dcf3235..000000000 --- a/soltools/javadep/makefile.mk +++ /dev/null @@ -1,55 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=.. - -PRJNAME=soltools -TARGET=javadep -TARGETTYPE=CUI -NO_DEFAULT_STL=TRUE - -# --- Settings ----------------------------------------------------- - -.INCLUDE : $(PRJ)$/util$/makefile.pmk -.INCLUDE : settings.mk - -.IF "$(CROSS_COMPILING)"=="YES" -all: - @echo Nothing done when cross-compiling -.ENDIF - -UWINAPILIB=$(0) -LIBSALCPPRT=$(0) - -# --- Files -------------------------------------------------------- - -APP1TARGET = javadep -APP1OBJS = $(OBJ)$/javadep.obj -DEPOBJFILES = $(APP1OBJS) -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk diff --git a/soltools/ldump/hashtbl.cxx b/soltools/ldump/hashtbl.cxx deleted file mode 100644 index bd8c098de..000000000 --- a/soltools/ldump/hashtbl.cxx +++ /dev/null @@ -1,448 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_soltools.hxx" - -#include "hashtbl.hxx" -#include <string.h> - -// ------------------------------------------------------------- -// class HashItem -// -class HashItem -{ - enum ETag { TAG_EMPTY, TAG_USED, TAG_DELETED }; - - void* m_pObject; - ETag m_Tag; - char* m_Key; - -public: - HashItem() { m_Tag = TAG_EMPTY; m_Key = NULL; m_pObject = NULL; } - ~HashItem() { delete [] m_Key; } - - bool IsDeleted() const - { return m_Tag == TAG_DELETED; } - - bool IsEmpty() const - { return m_Tag == TAG_DELETED || m_Tag == TAG_EMPTY; } - - bool IsFree() const - { return m_Tag == TAG_EMPTY; } - - bool IsUsed() const - { return m_Tag == TAG_USED; } - - void Delete() - { m_Tag = TAG_DELETED; delete [] m_Key; m_Key = new char[ 1 ]; m_Key[ 0 ] = 0; m_pObject = NULL; } - - const char *GetKey() const - { return m_Key; } - - void* GetObject() const - { return m_pObject; } - - void SetObject(const char * Key, void *pObject) - { m_Tag = TAG_USED; delete [] m_Key; m_Key = new char[ strlen( Key ) + 1 ]; strcpy( m_Key, Key ); m_pObject = pObject; } -}; - -#define MIN(a,b) (a)<(b)?(a):(b) -#define MAX(a,b) (a)>(b)?(a):(b) - -// ------------------------------------------------------------- -// class HashTable -// - -/*static*/ double HashTable::m_defMaxLoadFactor = 0.5; -/*static*/ double HashTable::m_defDefGrowFactor = 2.0; - -HashTable::HashTable(unsigned long lSize, bool bOwner, double dMaxLoadFactor, double dGrowFactor) -{ - m_lSize = lSize; - m_bOwner = bOwner; - m_lElem = 0; - m_dMaxLoadFactor = MAX(0.5,MIN(1.0,dMaxLoadFactor)); // 0.5 ... 1.0 - m_dGrowFactor = MAX(2.0,MIN(5.0,dGrowFactor)); // 1.3 ... 5.0 - m_pData = new HashItem [lSize]; -} - -HashTable::~HashTable() -{ - // Wenn die HashTable der Owner der Objecte ist, - // müssen die Destruktoren separat gerufen werden. - // Dies geschieht über die virtuelle Methode OnDeleteObject() - // - // Problem: Virtuelle Funktionen sind im Destructor nicht virtuell!! - // Der Code muß deshalb ins Macro - - // Speicher für HashItems freigeben - delete [] m_pData; -} - -void* HashTable::GetObjectAt(unsigned long lPos) const -// Gibt Objekt zurück, wenn es eines gibt, sonst NULL; -{ - HashItem *pItem = &m_pData[lPos]; - - return pItem->IsUsed() ? pItem->GetObject() : NULL; -} - -void HashTable::OnDeleteObject(void*) -{ -} - -unsigned long HashTable::Hash(const char *Key) const -{ - // Hashfunktion von P.J. Weinberger - // aus dem "Drachenbuch" von Aho/Sethi/Ullman - unsigned long i,n; - unsigned long h = 0; - unsigned long g = 0; - - for (i=0,n=strlen( Key ); i<n; i++) - { - h = (h<<4) + (unsigned long)(unsigned short)Key[i]; - g = h & 0xf0000000; - - if (g != 0) - { - h = h ^ (g >> 24); - h = h ^ g; - } - } - - return h % m_lSize; -} - -unsigned long HashTable::DHash(const char* Key, unsigned long lOldHash) const -{ - unsigned long lHash = lOldHash; - unsigned long i,n; - - for (i=0,n=strlen( Key ); i<n; i++) - { - lHash *= 256L; - lHash += (unsigned long)(unsigned short)Key[i]; - lHash %= m_lSize; - } - return lHash; -} - -unsigned long HashTable::Probe(unsigned long lPos) const -// gibt den Folgewert von lPos zurück -{ - lPos++; if (lPos==m_lSize) lPos=0; - return lPos; -} - -bool HashTable::IsFull() const -{ - return m_lElem>=m_lSize; -} - -bool HashTable::Insert(const char * Key, void* pObject) -// pre: Key ist nicht im Dictionary enthalten, sonst return FALSE -// Dictionary ist nicht voll, sonst return FALSE -// post: pObject ist unter Key im Dictionary; m_nElem wurde erhöht -{ - SmartGrow(); - - if (IsFull()) - { - return false; - } - - if (FindPos(Key) != NULL ) - return false; - - unsigned long lPos = Hash(Key); - HashItem *pItem = &m_pData[lPos]; - - // first hashing - // - if (pItem->IsEmpty()) - { - pItem->SetObject(Key, pObject); - m_lElem++; - - return true; - } - - // double hashing - // - lPos = DHash(Key,lPos); - pItem = &m_pData[lPos]; - - if (pItem->IsEmpty()) - { - pItem->SetObject(Key, pObject); - m_lElem++; - - return true; - } - - // linear probing - // - do - { - lPos = Probe(lPos); - pItem = &m_pData[lPos]; - } - while(!pItem->IsEmpty()); - - pItem->SetObject(Key, pObject); - m_lElem++; - return true; -} - -HashItem* HashTable::FindPos(const char * Key) const -// sucht den Key; gibt Refrenz auf den Eintrag (gefunden) -// oder NULL (nicht gefunden) zurück -// -// pre: - -// post: - -{ - // first hashing - // - unsigned long lPos = Hash(Key); - HashItem *pItem = &m_pData[lPos]; - - if (pItem->IsUsed() - && !(strcmp( pItem->GetKey(), Key ))) - { - return pItem; - } - - // double hashing - // - if (pItem->IsDeleted() || pItem->IsUsed()) - { - lPos = DHash(Key,lPos); - pItem = &m_pData[lPos]; - - if (pItem->IsUsed() - && (!strcmp( pItem->GetKey(), Key))) - { - return pItem; - } - - // linear probing - // - if (pItem->IsDeleted() || pItem->IsUsed()) - { - unsigned long n = 0; - bool bFound = false; - bool bEnd = false; - - do - { - n++; - lPos = Probe(lPos); - pItem = &m_pData[lPos]; - - bFound = pItem->IsUsed() - && !( strcmp( pItem->GetKey(), Key )); - - bEnd = !(n<m_lSize || pItem->IsFree()); - } - while(!bFound && !bEnd); - - return bFound ? pItem : NULL; - } - } - - // nicht gefunden - // - return NULL; -} - -void* HashTable::Find(const char *Key) const -// Gibt Verweis des Objektes zurück, das unter Key abgespeichert ist, -// oder NULL wenn nicht vorhanden. -// -// pre: - -// post: - -{ - HashItem *pItem = FindPos(Key); - - if (pItem != NULL - && ( !strcmp( pItem->GetKey(), Key ))) - return pItem->GetObject(); - else - return NULL; -} - -void* HashTable::Delete( const char * Key) -// Löscht Objekt, das unter Key abgespeichert ist und gibt Verweis -// darauf zurück. -// Gibt NULL zurück, wenn Key nicht vorhanden ist. -// -// pre: - -// post: Objekt ist nicht mehr enthalten; m_lElem dekrementiert -// Wenn die HashTable der Owner ist, wurde das Object gelöscht -{ - HashItem *pItem = FindPos(Key); - - if (pItem != NULL - && ( !strcmp( pItem->GetKey(), Key ))) - { - void* pObject = pItem->GetObject(); - - if (m_bOwner) - OnDeleteObject(pObject); - - pItem->Delete(); - m_lElem--; - return pObject; - } - else - { - return NULL; - } -} - -double HashTable::CalcLoadFactor() const -// prozentuale Belegung der Hashtabelle berechnen -{ - return double(m_lElem) / double(m_lSize); -} - -void HashTable::SmartGrow() -// Achtung: da die Objekte umkopiert werden, darf die OnDeleteObject-Methode -// nicht gerufen werden -{ - double dLoadFactor = CalcLoadFactor(); - - if (dLoadFactor <= m_dMaxLoadFactor) - return; // nothing to grow - - unsigned long lOldSize = m_lSize; // alte Daten sichern - HashItem* pOldData = m_pData; - - m_lSize = (unsigned long) (m_dGrowFactor * m_lSize); // neue Größe - m_pData = new HashItem[m_lSize]; // neue Daten holen - - // kein Speicher: - // Zustand "Tabelle voll" wird in Insert abgefangen - // - if (m_pData == NULL) - { - m_lSize = lOldSize; - m_pData = pOldData; - return; - } - - m_lElem = 0; // noch keine neuen Daten - - // Umkopieren der Daten - // - for (unsigned long i=0; i<lOldSize; i++) - { - HashItem *pItem = &pOldData[i]; - - if (pItem->IsUsed()) - Insert(pItem->GetKey(),pItem->GetObject()); - } - - delete [] pOldData; -} - -// Iterator --------------------------------------------------------- -// - -HashTableIterator::HashTableIterator(HashTable const& aTable) -: m_aTable(aTable) -{ - m_lAt = 0; -} - -void* HashTableIterator::GetFirst() -{ - m_lAt = 0; - return FindValidObject(true /* forward */); -} - -void* HashTableIterator::GetLast() -{ - m_lAt = m_aTable.GetSize() -1; - return FindValidObject(false /* backward */); -} - -void* HashTableIterator::GetNext() -{ - if (m_lAt+1 >= m_aTable.GetSize()) - return NULL; - - m_lAt++; - return FindValidObject(true /* forward */); -} - -void* HashTableIterator::GetPrev() -{ - if (m_lAt <= 0) - return NULL; - - m_lAt--; - return FindValidObject(false /* backward */); -} - -void* HashTableIterator::FindValidObject(bool bForward) -// Sucht nach einem vorhandenen Objekt ab der aktuellen -// Position. -// -// pre: ab inkl. m_lAt soll die Suche beginnen -// post: if not found then -// if bForward == TRUE then -// m_lAt == m_aTable.GetSize() -1 -// else -// m_lAt == 0 -// else -// m_lAt ist die gefundene Position -{ - void *pObject = m_aTable.GetObjectAt(m_lAt); - - if (pObject != NULL) - return pObject; - - while (pObject == NULL - && (bForward ? ((m_lAt+1) < m_aTable.GetSize()) - : m_lAt > 0)) - { - if (bForward) - m_lAt++; - else - m_lAt--; - - pObject = m_aTable.GetObjectAt(m_lAt); - } - - return pObject; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/ldump/hashtbl.hxx b/soltools/ldump/hashtbl.hxx deleted file mode 100644 index b65767147..000000000 --- a/soltools/ldump/hashtbl.hxx +++ /dev/null @@ -1,113 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _HASHTBL_HXX -#define _HASHTBL_HXX - -// ADT hash table -// -// Invariante: -// 1. m_lElem < m_lSize -// 2. die Elemente in m_Array wurden double-hashed erzeugt -// -class HashItem; - -class HashTable -{ - unsigned long m_lSize; - unsigned long m_lElem; - HashItem *m_pData; - double m_dMaxLoadFactor; - double m_dGrowFactor; - bool m_bOwner; - - unsigned long Hash(const char *cKey) const; - unsigned long DHash(const char *cKey , unsigned long lHash) const; - unsigned long Probe(unsigned long lPos) const; - - HashItem* FindPos(const char *cKey) const; - void SmartGrow(); - double CalcLoadFactor() const; - -protected: - friend class HashTableIterator; - - virtual void OnDeleteObject(void* pObject); - - void* GetObjectAt(unsigned long lPos) const; - -// Default-Werte -public: - static double m_defMaxLoadFactor; - static double m_defDefGrowFactor; - -public: - HashTable - ( - unsigned long lSize, - bool bOwner, - double dMaxLoadFactor = HashTable::m_defMaxLoadFactor /* 0.8 */, - double dGrowFactor = HashTable::m_defDefGrowFactor /* 2.0 */ - ); - - virtual ~HashTable(); - - bool IsFull() const; - unsigned long GetSize() const { return m_lSize; } - - void* Find (const char *cKey ) const; - bool Insert (const char *cKey , void* pObject); - void* Delete (const char *cKey); -}; - -// ADT hash table iterator -// -// Invariante: 0 <= m_lAt < m_aTable.GetCount() -// -class HashTableIterator -{ - unsigned long m_lAt; - HashTable const& m_aTable; - - void operator =(HashTableIterator &); // not defined - - void* FindValidObject(bool bForward); - -protected: - void* GetFirst(); // Interation _ohne_ Sortierung - void* GetNext(); - void* GetLast(); - void* GetPrev(); - -public: - HashTableIterator(HashTable const&); -}; - -#endif // _HASHTBL_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/ldump/ldump.cxx b/soltools/ldump/ldump.cxx deleted file mode 100644 index 24a6a7aef..000000000 --- a/soltools/ldump/ldump.cxx +++ /dev/null @@ -1,756 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_soltools.hxx" - -#include <string.h> -#include <direct.h> -#include <stdio.h> -#include <stdlib.h> - -#include "ldump.hxx" -#include "hashtbl.hxx" - -#define MAXSYM 65536 -#define MAXBASE 98304 -#define MAX_MAN 4096 - -int bFilter = 0; -int bLdump3 = 0; -int bUseDirectives = 0; -int bVerbose = 0; -int bExportByName = 0; - -class ExportSet : public HashTable -{ -public: - ExportSet - ( - unsigned long lSize, - double dMaxLoadFactor = HashTable::m_defMaxLoadFactor, - double dGrowFactor = HashTable::m_defDefGrowFactor - ) - : HashTable(lSize,false,dMaxLoadFactor,dGrowFactor) {} - - virtual ~ExportSet() {} - - LibExport * Find (char * const& Key) const - { return (LibExport *) HashTable::Find((char *) Key); } - - bool Insert (char * const& Key, LibExport * Object) - { return HashTable::Insert((char *) Key, (void*) Object); } - - LibExport * Delete (char * const&Key) - { return (LibExport *) HashTable::Delete ((char *) Key); } -}; - -LibDump::LibDump( char *cFileName, int bExportByName ) - : cBName( NULL ), - cAPrefix( NULL ), - cLibName( NULL ), - cFilterName( NULL ), - cModName( NULL ) -{ - fprintf( stderr, "LIB-NT File Dumper v4.00 (C) 2000 Sun Microsystems, Inc.\n\n" ); - fprintf( stderr, "%s ", cFileName ); - - bExportName = bExportByName; - - unsigned long nSlots = 0xfffff; - pBaseTab = new ExportSet( nSlots ); - pIndexTab = new ExportSet( nSlots ); - pFilterLines = new char * [MAXFILT]; - CheckLibrary(cFileName); - bBase = 0; - bAll = false; - nDefStart = 0; - nBaseLines = 0; - nFilterLines = 0; - bDef = true; - cAPrefix = new char[ 1 ]; - cAPrefix[ 0 ] = 0; - if (!bExportName) - CheckDataBase(); -} - -bool LibDump::Dump() -{ - FILE *pList; - char aBuf[MAX_MAN]; - int nLen; - char aName[MAX_MAN]; - - pList = fopen( cLibName, "rb"); - if (!pList) - DumpError(10); - - // forget about offset when working on linker directives - if ( !bUseDirectives ) - { - // calculating offset for name section - unsigned char TmpBuffer[4]; - fread( TmpBuffer, 1, 4, pList); - // anzahl bigendian mal laenge + ueberspringen der naechsten laengenangabe - unsigned long nOffSet = (unsigned long) ( TmpBuffer[2] * 256 + TmpBuffer[3] ) * 4 + 4; - fseek( pList, (long) nOffSet, 0); - } - - char aTmpBuf[4096]; - // reading file containing symbols - while( !feof( pList ) ) - { - int i = 0; - if ( !bUseDirectives ) - { - // symbol komplett einlesen - for (;;) - { - int c = fgetc( pList ); - if ( c == '\0' ) - { - break; - } - if ( ((c >= 33) && (c <= 126)) && ( c!=40 && c!=41) ) - aBuf[i] = static_cast< char >(c); - else - { - aBuf[0] = '\0'; - break; - } - i++; - } - // Namen found - aBuf[i] = '\0'; - } - else - { - fgets( aTmpBuf, 4096, pList ); - char * pEnd = 0; - char *pFound = 0; - aBuf[0] = '\0'; - pFound = strchr( aTmpBuf, 'E' ); - while ( pFound ) - { - if ( strncmp( "EXPORT:", pFound, 7) == 0 ) - { - pFound += 7; - pEnd = strchr( pFound, ','); - if ( pEnd ) - *pEnd = '\0'; - strncpy( aBuf, pFound, strlen( pFound)); - aBuf[ strlen( pFound) ] = '\0'; - break; - } - else - { - pFound++; - pFound = strchr( pFound, 'E' ); - } - } - } - - if (aBuf[0] =='?') - { - nLen = (int) strlen(aBuf); - memset( aName, 0, sizeof( aName ) ); - int nName = 0; - for( i = 0; i < nLen; i++ ) - { - if ( (aBuf[i] != '\n') && (aBuf[i] != '\r') ) - { - aName[nName] = aBuf[i]; - nName++; - } - } - // und raus damit - PrintSym( aName, bExportByName ); - } - else if ( bAll == true && - strncmp(aBuf, "__real@", 7) != 0 && - strncmp(aBuf, "__CT",4) != 0 && - strncmp(aBuf, "__TI3?", 6) != 0 ) - { - int nPreLen = (int) strlen( cAPrefix ); - - nLen = (int) strlen(aBuf); - memset( aName, 0, sizeof( aName ) ); - int nName = 0; - - for( i = 0; i < nLen; i++ ) - { - if ( (aBuf[i] != '\n') && (aBuf[i] != '\r') ) - { - aName[nName] = aBuf[i]; - nName++; - } - } - // den ersten _ raus - nLen = (int) strlen(aName); -#ifndef _WIN64 - if (aName[0] == '_') - strcpy( aBuf , &aName[1] ); -#endif - strncpy ( aTmpBuf, aBuf, (size_t) nPreLen ); - aTmpBuf[nPreLen] = '\0'; - if ( !strcmp( aTmpBuf, cAPrefix )) - { - if ( bLdump3 ) { - int nChar = '@'; - char *pNeu = strchr( aBuf, nChar ); - size_t nPos = pNeu - aBuf + 1; - if ( nPos > 0 ) - { - char aOldBuf[MAX_MAN]; - strcpy( aOldBuf, aBuf ); - char pChar[MAX_MAN]; - strncpy( pChar, aBuf, nPos - 1 ); - pChar[nPos-1] = '\0'; - strcpy( aBuf, pChar ); - strcat( aBuf, "=" ); - strcat( aBuf, aOldBuf ); - strcpy( pChar, "" ); - } - } - // und raus damit - PrintSym( aBuf, true ); - } - } - } - fclose(pList); - return true; -} - -bool LibDump::ReadFilter( char * cFilterName ) -{ - FILE* pfFilter = 0; - char aBuf[MAX_MAN]; - char* pStr; - int nLen; - - pfFilter = fopen( cFilterName, "r" ); - - if ( !pfFilter ) - { - ::bFilter = 0; - DumpError( 500 ); - } - - while( fgets( aBuf, MAX_MAN, pfFilter ) != 0 ) - { - nLen = (int) strlen(aBuf); - pStr = new char[(unsigned int) nLen]; - if ( !pStr ) - DumpError( 98 ); - memcpy( pStr, aBuf, (unsigned int) nLen ); - if ( *(pStr+nLen-1) == '\n' ) - *(pStr+nLen-1) = '\0'; - pFilterLines[nFilterLines] = pStr; - nFilterLines++; - if ( nFilterLines >= MAXFILT ) - DumpError( 510 ); - } - - fclose( pfFilter ); - return true; -} - -bool LibDump::PrintSym(char *pName, bool bName ) -{ - LibExport *pData; - - - // Filter auswerten - if ( Filter( pName ) ) - { - if ( strlen( pName ) > 3 ) - { - if ( bDef ) - { - if (!bBase) - if (bExportName) { - fprintf( stdout, "\t%s\n", pName ); - } else { - fprintf( stdout, "\t%s\t\t@%lu\n", pName, nDefStart ); - } - else - { - pData = pBaseTab->Find( pName ); - if ( pData ) - { - pData->bExport = true; - if ( bName ) - pData->bByName = true; - else - pData->bByName = false; - if ( bVerbose ) - fprintf(stderr,"."); - } - else - { - // neuen Export eintragen - pData = new LibExport; - pData->cExportName = new char[ strlen( pName ) + 1 ]; - strcpy( pData->cExportName, pName ); - pData->nOrdinal = nBaseLines++; - pData->bExport = true; - if ( bName ) - pData->bByName = true; - else - pData->bByName = false; - pBaseTab->Insert( pData->cExportName, pData ); - char *cBuffer = new char[ 30 ]; - sprintf( cBuffer, "%lu", pData->nOrdinal ); - pIndexTab->Insert( cBuffer, pData ); - delete [] cBuffer; - if ( bVerbose ) - fprintf(stderr,"n"); - } - } - } - else - printf( "%s\n", pName ); - nDefStart++; - } - } - return true; -} - -bool LibDump::IsFromAnonymousNamespace (char *pExportName) { - char* pattern1 = "@?A0x"; - - if (strstr(pExportName, pattern1)) { - return true; - }; - return false; -}; - -bool LibDump::Filter(char *pExportName) -{ - unsigned long i; - char pTest[256]; - - // filter out symbols from anonymous namespaces - if (IsFromAnonymousNamespace (pExportName)) - return false; - - // Kein Filter gesetzt - if ( ::bFilter == 0 ) - return true; - - for ( i=0; i<nFilterLines; i++ ) - { - //Zum vergleichen muá das Plus abgeschnitteb werden - if(pFilterLines[i][0] != '+') - { - if ( strstr( pExportName, pFilterLines[i])) - return false; - } - else - { - strcpy(pTest,&pFilterLines[i][1]); - if ( strstr( pExportName, pTest)) - return true; - } - } - return true; -} - -bool LibDump::SetFilter(char * cFilterName) -{ - ReadFilter( cFilterName ); - return true; -} - -bool LibDump::CheckLibrary(char * cName) -{ - delete [] cLibName; - cLibName = new char[ strlen( cName ) + 1 ]; - strcpy( cLibName, cName ); - return true; -} - -bool LibDump::ReadDataBase() -{ - FILE* pfBase = 0; - char aBuf[MAX_MAN]; - char* pStr; - char cBuffer[ 30 ]; - int nLen; - LibExport *pData; - - pfBase = fopen( cBName, "r" ); - - if ( !pfBase ) - { - bBase = 0; - DumpError( 600 ); - } - - bool bRet = true; - while( fgets( aBuf, MAX_MAN, pfBase ) != 0 ) - { - nLen = (int) strlen(aBuf); - pStr = new char[(unsigned int) nLen]; - if ( !pStr ) - DumpError( 98 ); - memcpy( pStr, aBuf, (size_t) nLen ); - if ( *(pStr+nLen-1) == '\n' ) - *(pStr+nLen-1) = '\0'; - pData = new LibExport; - pData->cExportName = pStr; - pData->nOrdinal = nBaseLines; - pData->bExport=false; - - if (pBaseTab->Insert(pData->cExportName, pData ) == NULL) - bRet = false; - ltoa( (long) pData->nOrdinal, cBuffer, 10 ); - if (pIndexTab->Insert( cBuffer, pData ) == NULL) - bRet = false; - nBaseLines++; - if ( nBaseLines >= MAXBASE ) - DumpError( 610 ); - } - fclose( pfBase ); - return bRet; -} - -class ExportSetIter : public HashTableIterator -{ -public: - ExportSetIter(HashTable const& aTable) - : HashTableIterator(aTable) {} - - LibExport * GetFirst() - { return (LibExport *)HashTableIterator::GetFirst(); } - LibExport * GetNext() - { return (LibExport *)HashTableIterator::GetNext(); } - LibExport * GetLast() - { return (LibExport *)HashTableIterator::GetLast(); } - LibExport * GetPrev() - { return (LibExport *)HashTableIterator::GetPrev(); } - -private: - void operator =(ExportSetIter &); // not defined -}; - -bool LibDump::PrintDataBase() -{ - if (bExportName) - return true; - FILE *pFp; - pFp = fopen (cBName,"w+"); - if (!pFp) - fprintf( stderr, "Error opening DataBase File\n" ); - - LibExport *pData; - for ( unsigned long i=0; i < nBaseLines+10; i++ ) - { - char * cBuffer = new char[ 30 ]; - sprintf( cBuffer, "%lu", i ); - pData = pIndexTab->Find( cBuffer ); - delete [] cBuffer; - if ( pData ) - fprintf(pFp,"%s\n",pData->cExportName); - } - fclose(pFp); - return true; -} - -bool LibDump::PrintDefFile() -{ -#ifdef FAST - ExportSetIter aIterator( *pBaseTab ); - for ( LibExport *pData = aIterator.GetFirst(); pData != NULL; - pData = aIterator.GetNext() ) - { - if ( pData->bExport ) - { - if ( pData->bByName ) - { - fprintf(stdout,"\t%s\n", - pData->sExportName.GetBuffer()); - } - else - { - fprintf(stdout,"\t%s\t\t@%d NONAME\n", - pData->sExportName.GetBuffer(), pData->nOrdinal+nBegin); - } - } - } -#else - // sortiert nach Ordinals; - LibExport *pData; - for ( unsigned long i=0; i<nBaseLines+1; i++) - { - char * cBuffer = new char[ 30 ]; - sprintf( cBuffer, "%lu", i ); - pData = pIndexTab->Find( cBuffer ); - delete [] cBuffer; - if ( pData ) - if ( pData->bExport ) - { - if ( pData->bByName ) - { - if ( strlen( pData->cExportName )) - fprintf(stdout,"\t%s\n", - pData->cExportName); - } - else - { - if ( strlen( pData->cExportName )) - fprintf(stdout,"\t%s\t\t@%d NONAME\n", - pData->cExportName, pData->nOrdinal+nBegin); - } - } - } -#endif - return true; -} - -bool LibDump::CheckDataBase() -{ - // existiert eine Datenbasis ? - if (!bBase) - { - cBName = new char[ 2048 ]; - char *pTmp = "defs\\"; - - FILE *fp; - _mkdir ("defs"); - strcpy(cBName,pTmp); - strcat(cBName,getenv ("COMP_ENV")); - - fp = fopen (cBName,"r"); - if (fp) - { - bBase = true; - } - else - { - fp = fopen (cBName,"w+"); - bBase = true; - } - fclose (fp); - } - // lese Datenbasis ! - if (bBase) - { - ReadDataBase(); - } - return true; -} - -LibDump::~LibDump() -{ - delete [] cBName; - delete [] cAPrefix; - delete [] cFilterName; - delete [] cModName; -} - -void LibDump::SetCExport( char* pName ) -{ - delete [] cAPrefix; - cAPrefix = new char[ strlen( pName ) + 1 ]; - strcpy( cAPrefix, pName );bAll = true; -} - -//****************************************************************** -//* Error() - Gibt Fehlermeldumg aus -//****************************************************************** - -void LibDump::DumpError( unsigned long n ) -{ - char *p; - - switch (n) - { - case 1: p = "Input error in library file"; break; - case 2: p = "Position error in library file (no THEADR set)"; break; - case 3: p = "Overflow of symbol table"; break; -#ifdef WNT - case 10: p = "EXP file not found"; break; - case 11: p = "No valid EXP file"; break; -#else - case 10: p = "Library file not found"; break; - case 11: p = "No valid library file"; break; -#endif - case 98: p = "Out of memory"; break; - case 99: p = "LDUMP [-LD3] [-D] [-N] [-A] [-E nn] [-F name] Filename[.LIB]\n" - "-LD3 : Supports feature set of ldump3 (default: ldump/ldump2)\n" - "-A : all symbols (default: only C++)\n" - "-E nn : gerenration of export table beginning with number nn\n" - "-F name: Filter file\n" - "-D : file contains \"dumpbin\" directives\n" - "-N : export by name\n" - "-V : be verbose\n"; break; - case 500: p = "Unable to open filter file\n"; break; - case 510: p = "Overflow of filter table\n"; break; - case 600: p = "Unable to open base database file\n"; break; - case 610: p = "Overflow in base database table\n"; break; - default: p = "Unspecified error"; - } - fprintf( stdout, "%s\n", p ); - exit (1); -} - -/********************************************************************* - Test Funktionen -*********************************************************************/ - - -void usage() -{ - LibDump::DumpError(99); -} - -#define STATE_NON 0x0000 -#define STATE_BEGIN 0x0001 -#define STATE_FILTER 0x0002 -#define STATE_CEXPORT 0x0003 - -int -#ifdef WNT -__cdecl -#endif -main( int argc, char **argv ) -{ - char *pLibName = NULL, *pFilterName = NULL, *pCExport= NULL; - unsigned short nBegin=1; - - unsigned short nState = STATE_NON; - - if ( argc == 1 ) { - usage(); - } - - for ( int i = 1; i < argc; i++ ) { - if (( !strcmp( argv[ i ], "-H" )) || - ( !strcmp( argv[ i ], "-h" )) || - ( !strcmp( argv[ i ], "-?" ))) - { - usage(); - } - else if (( !strcmp( argv[ i ], "-LD3" )) || - ( !strcmp( argv[ i ], "-Ld3" )) || - ( !strcmp( argv[ i ], "-ld3" )) || - ( !strcmp( argv[ i ], "-lD3" ))) - { - if ( nState != STATE_NON ) { - usage(); - } - bLdump3 = 1; - } - else if (( !strcmp( argv[ i ], "-E" )) || ( !strcmp( argv[ i ], "-e" ))) { - if ( nState != STATE_NON ) { - usage(); - } - nState = STATE_BEGIN; - } - else if (( !strcmp( argv[ i ], "-F" )) || ( !strcmp( argv[ i ], "-f" ))) { - if ( nState != STATE_NON ) { - usage(); - } - nState = STATE_FILTER; - } - else if (( !strcmp( argv[ i ], "-A" )) || ( !strcmp( argv[ i ], "-a" ))) { - if ( nState != STATE_NON ) { - usage(); - } - nState = STATE_CEXPORT; - pCExport = new char[ 1 ]; - pCExport[ 0 ] = 0; - } - else if (( !strcmp( argv[ i ], "-D" )) || ( !strcmp( argv[ i ], "-d" ))) { - if ( nState != STATE_NON ) { - usage(); - } - bUseDirectives = 1; - } - else if (( !strcmp( argv[ i ], "-N" )) || ( !strcmp( argv[ i ], "-n" ))) { - if ( nState != STATE_NON ) { - usage(); - } - bExportByName = 1; - } - else if (( !strcmp( argv[ i ], "-V" )) || ( !strcmp( argv[ i ], "-v" ))) { - if ( nState != STATE_NON ) { - usage(); - } - bVerbose = 1; - } - else { - switch ( nState ) { - case STATE_BEGIN: - nBegin = static_cast< unsigned short >(atoi( argv[ i ] )); - nState = STATE_NON; - break; - case STATE_FILTER: - pFilterName = new char[ strlen( argv[ i ] ) + 1 ]; - strcpy( pFilterName, argv[ i ] ); - bFilter = 1; - nState = STATE_NON; - break; - case STATE_CEXPORT: - delete [] pCExport; - pCExport = new char[ strlen( argv[ i ] ) + 1 ]; - strcpy( pCExport, argv[ i ] ); - nState = STATE_NON; - break; - default: - pLibName = new char[ strlen( argv[ i ] ) + 1 ]; - strcpy( pLibName, argv[ i ] ); - break; - } - } - } - - if ( !pLibName ) { - usage(); - } - - LibDump *pDump = new LibDump( pLibName, bExportByName ); - pDump->SetBeginExport(nBegin); - if ( bFilter != 0 ) - pDump->SetFilter( pFilterName ); - if ( pCExport ) - pDump->SetCExport( pCExport ); - else { - char *pEmpty = ""; - pDump->SetCExport( pEmpty ); - } - pDump->Dump(); - pDump->PrintDefFile(); - pDump->PrintDataBase(); - delete pDump; - delete [] pLibName; - return 0; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/ldump/ldump.hxx b/soltools/ldump/ldump.hxx deleted file mode 100644 index 7d66204bf..000000000 --- a/soltools/ldump/ldump.hxx +++ /dev/null @@ -1,80 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#include "hashtbl.hxx" - -#define MAXFILT 200 - -struct LibExport -{ - char *cExportName; // zu exportierende Fkt. - unsigned long nOrdinal; // Nummer der zu export. Fkt. - bool bByName; // NONAME anhaengen - bool bExport; // exportieren oder nicht ? -}; - -class ExportSet; -class LibDump -{ - ExportSet *pBaseTab; // Zugriff auf gemangelte Namen - ExportSet *pIndexTab; // Zugriff auf die Ordinals - char *cBName; // Name der Datenbasis - char *cAPrefix; // Prefix fuer C-Fkts. - char *cLibName; // Name der zu untersuchenden Lib - char *cFilterName; // Name der Filterdatei - char *cModName; // Modulname - unsigned short nBegin; // Nummer des ersten Exports - unsigned long nBaseLines; // Line in Datenbasis - unsigned long nFilterLines; // Line in FilterTabelle - char **pFilterLines; // Filtertabelle - unsigned long nDefStart; - bool bBase; // Existenz der DatenBasis; - bool bAll; // Alle Fkts exportieren - bool bDef; // DefFile schreiben ( bei -E ) - int bExportName; // 0 - export by ordinal; 1 - export by name - - bool CheckDataBase(); - bool CheckLibrary(char * cName); - bool ReadDataBase(); - bool ReadFilter(char *); - bool PrintSym(char *, bool bName = true ); -public: - LibDump( char *cFileName, int bExportByName ); - ~LibDump(); - bool Dump(); - bool SetFilter(char *cFilterName); - void SetBeginExport(unsigned short nVal){nBegin = nVal;} - void SetCExport( char* pName ); - bool Filter(char *pName); - bool IsFromAnonymousNamespace(char *pName); - bool PrintDefFile(); - bool PrintDataBase(); - static void DumpError(unsigned long nError); -}; - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/ldump/makefile.mk b/soltools/ldump/makefile.mk deleted file mode 100644 index 6d0eda3bf..000000000 --- a/soltools/ldump/makefile.mk +++ /dev/null @@ -1,59 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=.. - -PRJNAME=ldump -TARGET=ldump -TARGETTYPE=CUI - -# --- Settings ----------------------------------------------------- - -.INCLUDE : $(PRJ)$/util$/makefile.pmk -.INCLUDE : settings.mk - -UWINAPILIB=$(0) -LIBSALCPPRT=$(0) - -# --- Files -------------------------------------------------------- - -# ldump only supports windows environment -.IF "$(GUI)"=="WNT" -.IF "$(COM)"!="GCC" -#ldump4 reimplements feature set of ldump2 and ldump3 -APP1TARGET= ldump4 -.IF "$(GUI)"=="WNT" -APP1STACK= 16000 -.ENDIF -APP1OBJS= $(OBJ)$/ldump.obj $(OBJ)$/hashtbl.obj - -.ENDIF #"$(COM)"!="GCC" -.ENDIF #"$(GUI)"=="WNT" - -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk diff --git a/soltools/mkdepend/collectdircontent.cxx b/soltools/mkdepend/collectdircontent.cxx deleted file mode 100644 index 884456a38..000000000 --- a/soltools/mkdepend/collectdircontent.cxx +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#include "collectdircontent.hxx" - -PathFilePair IncludesCollection::split_path(const string& filePath) { - string sepU = "/"; - string sepW = "\\"; - string::size_type pos = filePath.rfind (sepU); - string::size_type posW = filePath.rfind (sepW); - if ((posW != string::npos) && ((posW > pos) || (pos == string::npos))) pos = posW; - if (pos != string::npos) { - string dirName = filePath.substr(0, pos); - return PathFilePair(dirName, filePath.substr(pos + 1, filePath.length())); - } else - return PathFilePair(".", filePath); -}; - -void IncludesCollection::add_to_collection(const string& dirPath) { - DirContent dirContent; -#if defined( WNT ) - WIN32_FIND_DATA FindFileData; - HANDLE hFind; - hFind = FindFirstFile((dirPath + "\\*").c_str(), &FindFileData); - if (hFind == INVALID_HANDLE_VALUE) { - // Invalid File Handle - no need to try it anymore - allIncludes.insert(EntriesPair(dirPath, DirContent())); - return; - }; - do { - string winFileName(FindFileData.cFileName); - transform(winFileName.begin(), winFileName.end(), winFileName.begin(), ::tolower); - dirContent.insert(winFileName); - } while (FindNextFile(hFind, &FindFileData)); -#else - DIR *pdir; - dirent *pent; - pdir = opendir(dirPath.c_str()); //"." refers to the current dir - if (!pdir) { - // Invalid File Handle - no need to try it anymore - allIncludes.insert(EntriesPair(dirPath, DirContent())); - return; - } - while ((pent = readdir(pdir))) { - dirContent.insert(pent->d_name); - }; - closedir(pdir); -#endif // defined( WNT ) - allIncludes.insert(EntriesPair(dirPath, dirContent)); -}; - -bool IncludesCollection::exists(string filePath) { -#if defined( WNT ) - transform(filePath.begin(), filePath.end(), filePath.begin(), ::tolower); -#endif // defined( WNT ) - PathFilePair dirFile = split_path(filePath); - string dirPath = dirFile.first; - string fileName = dirFile.second; - DirMap::iterator mapIter = allIncludes.find(dirPath); - if (mapIter == allIncludes.end()) { - add_to_collection(dirPath); - mapIter = allIncludes.find(dirPath); - }; - DirContent dirContent = (*mapIter).second; - DirContent::iterator dirIter = dirContent.find(fileName); - if (dirIter == dirContent.end()) { - return false; - } else { - return true; - }; -}; - -extern "C" { - - IncludesCollection * create_IncludesCollection() { - return new IncludesCollection; - } - - void delete_IncludesCollection(IncludesCollection *m) { - delete m; - } - - int call_IncludesCollection_exists(IncludesCollection* m, const char * filePath) { - return m->exists(filePath); - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/mkdepend/collectdircontent.hxx b/soltools/mkdepend/collectdircontent.hxx deleted file mode 100644 index 85428ee03..000000000 --- a/soltools/mkdepend/collectdircontent.hxx +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -#ifndef COLLECTDIRCONTENT_H -#define COLLECTDIRCONTENT_H - -#if defined __cplusplus - -#include <set> -#include <map> -#include <string> - -#if defined( WNT ) -#include <windows.h> -#include <algorithm> -#else -#include <dirent.h> -#endif // defined( WNT ) - -#include <iostream> - -using namespace std; - -typedef set<string> DirContent; -typedef map<string, DirContent> DirMap; -typedef DirMap::value_type EntriesPair; -typedef pair<string, string> PathFilePair; - - -struct IncludesCollection { - private: - DirMap allIncludes; - PathFilePair split_path(const string& filePath); - void add_to_collection(const string& dirPath); - - public: - bool exists(string filePath); -}; - -#else - -struct IncludesCollection; - -#endif - -#if defined __cplusplus -extern "C" { -#endif - -struct IncludesCollection * create_IncludesCollection(void); -void delete_IncludesCollection(struct IncludesCollection *); - -int call_IncludesCollection_exists(struct IncludesCollection* m, const char* filePath); - -#if defined __cplusplus -} -#endif - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/mkdepend/cppsetup.c b/soltools/mkdepend/cppsetup.c deleted file mode 100644 index 1ec025c5f..000000000 --- a/soltools/mkdepend/cppsetup.c +++ /dev/null @@ -1,236 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* $XConsortium: cppsetup.c,v 1.13 94/04/17 20:10:32 gildea Exp $ */ -/* - -Copyright (c) 1993, 1994 X Consortium - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. - -*/ - -#include "def.h" - -#ifdef CPP -/* - * This file is strictly for the sake of cpy.y and yylex.c (if - * you indeed have the source for cpp). - */ -#define IB 1 -#define SB 2 -#define NB 4 -#define CB 8 -#define QB 16 -#define WB 32 -#define SALT '#' -#if pdp11 | vax | ns16000 | mc68000 | ibm032 -#define COFF 128 -#else -#define COFF 0 -#endif -/* - * These variables used by cpy.y and yylex.c - */ -extern char *outp, *inp, *newp, *pend; -extern char *ptrtab; -extern char fastab[]; -extern char slotab[]; - -/* - * cppsetup - */ -struct filepointer *currentfile; -struct inclist *currentinc; - -cppsetup(line, filep, inc) - register char *line; - register struct filepointer *filep; - register struct inclist *inc; -{ - register char *p, savec; - static boolean setupdone = FALSE; - boolean value; - - if (!setupdone) { - cpp_varsetup(); - setupdone = TRUE; - } - - currentfile = filep; - currentinc = inc; - inp = newp = line; - for (p=newp; *p; p++) - ; - - /* - * put a newline back on the end, and set up pend, etc. - */ - *p++ = '\n'; - savec = *p; - *p = '\0'; - pend = p; - - ptrtab = slotab+COFF; - *--inp = SALT; - outp=inp; - value = yyparse(); - *p = savec; - return(value); -} - -pperror(tag, x0,x1,x2,x3,x4) - int tag,x0,x1,x2,x3,x4; -{ - warning("\"%s\", line %d: ", currentinc->i_file, currentfile->f_line); - warning(x0,x1,x2,x3,x4); -} - - -yyerror(s) - register char *s; -{ - fatalerr("Fatal error: %s\n", s); -} -#else /* not CPP */ - -#include "ifparser.h" -struct _parse_data { - struct filepointer *filep; - struct inclist *inc; - const char *line; -}; - -static const char * -_my_if_errors (ip, cp, expecting) - IfParser *ip; - const char *cp; - const char *expecting; -{ -#ifdef DEBUG_MKDEPEND - struct _parse_data *pd = (struct _parse_data *) ip->data; - int lineno = pd->filep->f_line; - char *filename = pd->inc->i_file; - char prefix[300]; - int prefixlen; - int i; - - sprintf (prefix, "\"%s\":%d", filename, lineno); - prefixlen = strlen(prefix); - fprintf (stderr, "%s: %s", prefix, pd->line); - i = cp - pd->line; - if (i > 0 && pd->line[i-1] != '\n') { - putc ('\n', stderr); - } - for (i += prefixlen + 3; i > 0; i--) { - putc (' ', stderr); - } - fprintf (stderr, "^--- expecting %s\n", expecting); -#endif /* DEBUG_MKDEPEND */ - (void)ip; - (void)cp; - (void)expecting; - return NULL; -} - - -#define MAXNAMELEN 256 - -char * -_lookup_variable (var, len) - const char *var; - int len; -{ - char tmpbuf[MAXNAMELEN + 1]; - - if (len > MAXNAMELEN) - return 0; - - strncpy (tmpbuf, var, len); - tmpbuf[len] = '\0'; - return isdefined(tmpbuf); -} - - -static int -_my_eval_defined (ip, var, len) - IfParser *ip; - const char *var; - int len; -{ - (void)ip; - if (_lookup_variable (var, len)) - return 1; - else - return 0; -} - -#define isvarfirstletter(ccc) (isalpha(ccc) || (ccc) == '_') - -static int -_my_eval_variable (ip, var, len) - IfParser *ip; - const char *var; - int len; -{ - char *s; - - (void)ip; - - s = _lookup_variable (var, len); - if (!s) - return 0; - do { - var = s; - if (!isvarfirstletter(*var)) - break; - s = _lookup_variable (var, strlen(var)); - } while (s); - - return atoi(var); -} - - -int cppsetup(line, filep, inc) - register char *line; - register struct filepointer *filep; - register struct inclist *inc; -{ - IfParser ip; - struct _parse_data pd; - int val = 0; - - pd.filep = filep; - pd.inc = inc; - pd.line = line; - ip.funcs.handle_error = _my_if_errors; - ip.funcs.eval_defined = _my_eval_defined; - ip.funcs.eval_variable = _my_eval_variable; - ip.data = (char *) &pd; - - (void) ParseIfExpression (&ip, line, &val); - if (val) - return IF; - else - return IFFALSE; -} -#endif /* CPP */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/mkdepend/def.h b/soltools/mkdepend/def.h deleted file mode 100644 index b8a6659cc..000000000 --- a/soltools/mkdepend/def.h +++ /dev/null @@ -1,193 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* $XConsortium: def.h,v 1.25 94/04/17 20:10:33 gildea Exp $ */ -/* - -Copyright (c) 1993, 1994 X Consortium - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. - -*/ - -#ifndef NO_X11 -#include <X11/Xosdefs.h> -#ifdef WIN32 -#include <X11/Xw32defs.h> -#endif -#ifndef SUNOS4 -#include <X11/Xfuncproto.h> -#endif /* SUNOS4 */ -#endif /* NO_X11 */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -#include <ctype.h> -#ifndef X_NOT_POSIX -#ifndef _POSIX_SOURCE -#define _POSIX_SOURCE -#endif -#endif -#include <sys/types.h> -#include <fcntl.h> -#include <sys/stat.h> - -#ifndef S_IFDIR -#define S_IFDIR 0040000 -#endif - -#ifndef S_IFREG -#define S_IFREG 0100000 -#endif - -#define MAXDEFINES 512 -#define MAXFILES 65536 - -#define MAXDIRS 64 -#define SYMHASHSEED 131 /* 131 1313 13131 ... */ -#define SYMHASHMEMBERS 64 /* must be 2^x to work right */ -#define TRUE 1 -#define FALSE 0 - -/* the following must match the directives table in main.c */ -#define IF 0 -#define IFDEF 1 -#define IFNDEF 2 -#define ELSE 3 -#define ENDIF 4 -#define DEFINE 5 -#define UNDEF 6 -#define INCLUDE 7 -#define LINE 8 -#define PRAGMA 9 -#define ERROR 10 -#define IDENT 11 -#define SCCS 12 -#define ELIF 13 -#define EJECT 14 -#define IFFALSE 15 /* pseudo value --- never matched */ -#define ELIFFALSE 16 /* pseudo value --- never matched */ -#define INCLUDEDOT 17 /* pseudo value --- never matched */ -#define IFGUESSFALSE 18 /* pseudo value --- never matched */ -#define ELIFGUESSFALSE 19 /* pseudo value --- never matched */ - -#ifdef DEBUG -extern int _debugmask; -/* - * debug levels are: - * - * 0 show ifn*(def)*,endif - * 1 trace defined/!defined - * 2 show #include - * 3 show #include SYMBOL - * 4-6 unused - */ -#define debug(level,arg) { if (_debugmask & (1 << level)) warning arg; } -#else -#define debug(level,arg) /**/ -#endif /* DEBUG */ - -// VG: a C++ class for information about directories -#include "collectdircontent.hxx" - -typedef unsigned char boolean; - -struct pair { - char *p_name; - char *p_value; - struct pair *p_next; -}; - -struct symhash { - struct pair *s_pairs[SYMHASHMEMBERS]; -}; - -struct inclist { - char *i_incstring; /* string from #include line */ - char *i_file; /* path name of the include file */ - struct inclist **i_list; /* list of files it itself includes */ - int i_listlen; /* length of i_list */ - boolean i_defchecked; /* whether defines have been checked */ - boolean i_notified; /* whether we have revealed includes */ - boolean i_marked; /* whether it's in the makefile */ - boolean i_searched; /* whether we have read this */ - boolean i_included_sym; /* whether #include SYMBOL was found */ - /* Can't use i_list if TRUE */ -}; - -struct filepointer { - char *f_p; - char *f_base; - char *f_end; - long f_len; - long f_line; -}; - -#ifndef X_NOT_STDC_ENV -#include <stdlib.h> -#if defined(macII) && !defined(__STDC__) /* stdlib.h fails to define these */ -char *malloc(), *realloc(); -#endif /* macII */ -#else -char *malloc(); -char *realloc(); -#endif - -char *copy(char *); -char *base_name(char *); -char *get_line(struct filepointer *); -char *isdefined(char *); -struct filepointer *getfile(char *); -struct inclist *newinclude(register char *newfile, - register char *incstring); -struct inclist *inc_path(char *, char *, boolean, - struct IncludesCollection *); - -void define( char *def, struct symhash **symbols ); -void hash_define(char *name, char * val, struct symhash **symbols); -struct symhash *hash_copy( struct symhash *symbols ); -void hash_free( struct symhash *symbols ); -void freefile( struct filepointer * fp ); -int find_includes(struct filepointer *filep, struct inclist *file, - struct inclist *file_red, int recursion, boolean failOK, - struct IncludesCollection* incCollection, struct symhash *symbols); -void included_by(register struct inclist *ip, - register struct inclist * newfile); -int cppsetup(register char *line, - register struct filepointer *filep, register struct inclist *inc); -void add_include(struct filepointer *filep, struct inclist *file, - struct inclist *file_red, char *include, boolean dot, boolean failOK, - struct IncludesCollection* incCollection, struct symhash *symbols); -int match(register char *str, register char **list); -void recursive_pr_include(register struct inclist *head, register char *file, - register char *base); -void inc_clean(); - -void fatalerr(char *, ...); -void warning(char *, ...); -void warning1(char *, ...); - -void convert_slashes(char *); -char *append_slash(char *); - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/mkdepend/ifparser.c b/soltools/mkdepend/ifparser.c deleted file mode 100644 index c9da34baf..000000000 --- a/soltools/mkdepend/ifparser.c +++ /dev/null @@ -1,465 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * $XConsortium: ifparser.c,v 1.8 95/06/03 00:01:41 gildea Exp $ - * - * Copyright 1992 Network Computing Devices, Inc. - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Network Computing Devices may not be - * used in advertising or publicity pertaining to distribution of the software - * without specific, written prior permission. Network Computing Devices makes - * no representations about the suitability of this software for any purpose. - * It is provided ``as is'' without express or implied warranty. - * - * NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS - * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, - * IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL, - * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE - * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - * - * Author: Jim Fulton - * Network Computing Devices, Inc. - * - * Simple if statement processor - * - * This module can be used to evaluate string representations of C language - * if constructs. It accepts the following grammar: - * - * EXPRESSION := VALUE - * | VALUE BINOP EXPRESSION - * - * VALUE := '(' EXPRESSION ')' - * | '!' VALUE - * | '-' VALUE - * | 'defined' '(' variable ')' - * | 'defined' variable - * | # variable '(' variable-list ')' - * | variable - * | number - * - * BINOP := '*' | '/' | '%' - * | '+' | '-' - * | '<<' | '>>' - * | '<' | '>' | '<=' | '>=' - * | '==' | '!=' - * | '&' | '|' - * | '&&' | '||' - * - * The normal C order of precidence is supported. - * - * - * External Entry Points: - * - * ParseIfExpression parse a string for #if - */ - -#include "ifparser.h" -#include <ctype.h> -#include <stdlib.h> -#include <string.h> - -/**************************************************************************** - Internal Macros and Utilities for Parser - ****************************************************************************/ - -#define DO(val) if (!(val)) return NULL -#define CALLFUNC(ggg,fff) (*((ggg)->funcs.fff)) -#define SKIPSPACE(ccc) while (isspace(*ccc)) ccc++ -#define isvarfirstletter(ccc) (isalpha(ccc) || (ccc) == '_') - - -static const char * -parse_variable (g, cp, varp) - IfParser *g; - const char *cp; - const char **varp; -{ - SKIPSPACE (cp); - - if (!isvarfirstletter (*cp)) - return CALLFUNC(g, handle_error) (g, cp, "variable name"); - - *varp = cp; - /* EMPTY */ - for (cp++; isalnum(*cp) || *cp == '_'; cp++) ; - return cp; -} - - -static const char * -parse_number (g, cp, valp) - IfParser *g; - const char *cp; - int *valp; -{ - SKIPSPACE (cp); - - if (!isdigit(*cp)) - return CALLFUNC(g, handle_error) (g, cp, "number"); - -#ifdef WIN32 - { - char *cp2; - *valp = strtol(cp, &cp2, 0); - } -#else - *valp = atoi (cp); - /* EMPTY */ - for (cp++; isdigit(*cp); cp++) ; -#endif - return cp; -} - - -static const char * -parse_value (g, cp, valp) - IfParser *g; - const char *cp; - int *valp; -{ - const char *var; - - *valp = 0; - - SKIPSPACE (cp); - if (!*cp) - return cp; - - switch (*cp) { - case '(': - DO (cp = ParseIfExpression (g, cp + 1, valp)); - SKIPSPACE (cp); - if (*cp != ')') - return CALLFUNC(g, handle_error) (g, cp, ")"); - - return cp + 1; /* skip the right paren */ - - case '!': - DO (cp = parse_value (g, cp + 1, valp)); - *valp = !(*valp); - return cp; - - case '-': - DO (cp = parse_value (g, cp + 1, valp)); - *valp = -(*valp); - return cp; - - case '#': - DO (cp = parse_variable (g, cp + 1, &var)); - SKIPSPACE (cp); - if (*cp != '(') - return CALLFUNC(g, handle_error) (g, cp, "("); - do { - DO (cp = parse_variable (g, cp + 1, &var)); - SKIPSPACE (cp); - } while (*cp && *cp != ')'); - if (*cp != ')') - return CALLFUNC(g, handle_error) (g, cp, ")"); - *valp = 1; /* XXX */ - return cp + 1; - - case 'd': - if (strncmp (cp, "defined", 7) == 0 && !isalnum(cp[7])) { - int paren = 0; - int len; - - cp += 7; - SKIPSPACE (cp); - if (*cp == '(') { - paren = 1; - cp++; - } - DO (cp = parse_variable (g, cp, &var)); - len = (int)(cp - var); - SKIPSPACE (cp); - if (paren && *cp != ')') - return CALLFUNC(g, handle_error) (g, cp, ")"); - *valp = (*(g->funcs.eval_defined)) (g, var, len); - return cp + paren; /* skip the right paren */ - } - /* fall out */ - } - - if (isdigit(*cp)) { - DO (cp = parse_number (g, cp, valp)); - } else if (!isvarfirstletter(*cp)) - return CALLFUNC(g, handle_error) (g, cp, "variable or number"); - else { - DO (cp = parse_variable (g, cp, &var)); - *valp = (*(g->funcs.eval_variable)) (g, var, cp - var); - } - - return cp; -} - - - -static const char * -parse_product (g, cp, valp) - IfParser *g; - const char *cp; - int *valp; -{ - int rightval; - - DO (cp = parse_value (g, cp, valp)); - SKIPSPACE (cp); - - switch (*cp) { - case '*': - DO (cp = parse_product (g, cp + 1, &rightval)); - *valp = (*valp * rightval); - break; - - case '/': - DO (cp = parse_product (g, cp + 1, &rightval)); - - /* Do nothing in the divide-by-zero case. */ - if (rightval) { - *valp = (*valp / rightval); - } - break; - - case '%': - DO (cp = parse_product (g, cp + 1, &rightval)); - *valp = (*valp % rightval); - break; - } - return cp; -} - - -static const char * -parse_sum (g, cp, valp) - IfParser *g; - const char *cp; - int *valp; -{ - int rightval; - - DO (cp = parse_product (g, cp, valp)); - SKIPSPACE (cp); - - switch (*cp) { - case '+': - DO (cp = parse_sum (g, cp + 1, &rightval)); - *valp = (*valp + rightval); - break; - - case '-': - DO (cp = parse_sum (g, cp + 1, &rightval)); - *valp = (*valp - rightval); - break; - } - return cp; -} - - -static const char * -parse_shift (g, cp, valp) - IfParser *g; - const char *cp; - int *valp; -{ - int rightval; - - DO (cp = parse_sum (g, cp, valp)); - SKIPSPACE (cp); - - switch (*cp) { - case '<': - if (cp[1] == '<') { - DO (cp = parse_shift (g, cp + 2, &rightval)); - *valp = (*valp << rightval); - } - break; - - case '>': - if (cp[1] == '>') { - DO (cp = parse_shift (g, cp + 2, &rightval)); - *valp = (*valp >> rightval); - } - break; - } - return cp; -} - - -static const char * -parse_inequality (g, cp, valp) - IfParser *g; - const char *cp; - int *valp; -{ - int rightval; - - DO (cp = parse_shift (g, cp, valp)); - SKIPSPACE (cp); - - switch (*cp) { - case '<': - if (cp[1] == '=') { - DO (cp = parse_inequality (g, cp + 2, &rightval)); - *valp = (*valp <= rightval); - } else { - DO (cp = parse_inequality (g, cp + 1, &rightval)); - *valp = (*valp < rightval); - } - break; - - case '>': - if (cp[1] == '=') { - DO (cp = parse_inequality (g, cp + 2, &rightval)); - *valp = (*valp >= rightval); - } else { - DO (cp = parse_inequality (g, cp + 1, &rightval)); - *valp = (*valp > rightval); - } - break; - } - return cp; -} - - -static const char * -parse_equality (g, cp, valp) - IfParser *g; - const char *cp; - int *valp; -{ - int rightval; - - DO (cp = parse_inequality (g, cp, valp)); - SKIPSPACE (cp); - - switch (*cp) { - case '=': - if (cp[1] == '=') - cp++; - DO (cp = parse_equality (g, cp + 1, &rightval)); - *valp = (*valp == rightval); - break; - - case '!': - if (cp[1] != '=') - break; - DO (cp = parse_equality (g, cp + 2, &rightval)); - *valp = (*valp != rightval); - break; - } - return cp; -} - - -static const char * -parse_band (g, cp, valp) - IfParser *g; - const char *cp; - int *valp; -{ - int rightval; - - DO (cp = parse_equality (g, cp, valp)); - SKIPSPACE (cp); - - switch (*cp) { - case '&': - if (cp[1] != '&') { - DO (cp = parse_band (g, cp + 1, &rightval)); - *valp = (*valp & rightval); - } - break; - } - return cp; -} - - -static const char * -parse_bor (g, cp, valp) - IfParser *g; - const char *cp; - int *valp; -{ - int rightval; - - DO (cp = parse_band (g, cp, valp)); - SKIPSPACE (cp); - - switch (*cp) { - case '|': - if (cp[1] != '|') { - DO (cp = parse_bor (g, cp + 1, &rightval)); - *valp = (*valp | rightval); - } - break; - } - return cp; -} - - -static const char * -parse_land (g, cp, valp) - IfParser *g; - const char *cp; - int *valp; -{ - int rightval; - - DO (cp = parse_bor (g, cp, valp)); - SKIPSPACE (cp); - - switch (*cp) { - case '&': - if (cp[1] != '&') - return CALLFUNC(g, handle_error) (g, cp, "&&"); - DO (cp = parse_land (g, cp + 2, &rightval)); - *valp = (*valp && rightval); - break; - } - return cp; -} - - -static const char * -parse_lor (g, cp, valp) - IfParser *g; - const char *cp; - int *valp; -{ - int rightval; - - DO (cp = parse_land (g, cp, valp)); - SKIPSPACE (cp); - - switch (*cp) { - case '|': - if (cp[1] != '|') - return CALLFUNC(g, handle_error) (g, cp, "||"); - DO (cp = parse_lor (g, cp + 2, &rightval)); - *valp = (*valp || rightval); - break; - } - return cp; -} - - -/**************************************************************************** - External Entry Points - ****************************************************************************/ - -const char * -ParseIfExpression (g, cp, valp) - IfParser *g; - const char *cp; - int *valp; -{ - return parse_lor (g, cp, valp); -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/mkdepend/ifparser.h b/soltools/mkdepend/ifparser.h deleted file mode 100644 index 936f0ba86..000000000 --- a/soltools/mkdepend/ifparser.h +++ /dev/null @@ -1,77 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * $XConsortium: ifparser.h,v 1.1 92/08/22 13:05:39 rws Exp $ - * - * Copyright 1992 Network Computing Devices, Inc. - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Network Computing Devices may not be - * used in advertising or publicity pertaining to distribution of the software - * without specific, written prior permission. Network Computing Devices makes - * no representations about the suitability of this software for any purpose. - * It is provided ``as is'' without express or implied warranty. - * - * NETWORK COMPUTING DEVICES DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS - * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, - * IN NO EVENT SHALL NETWORK COMPUTING DEVICES BE LIABLE FOR ANY SPECIAL, - * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM - * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE - * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - * - * Author: Jim Fulton - * Network Computing Devices, Inc. - * - * Simple if statement processor - * - * This module can be used to evaluate string representations of C language - * if constructs. It accepts the following grammar: - * - * EXPRESSION := VALUE - * | VALUE BINOP EXPRESSION - * - * VALUE := '(' EXPRESSION ')' - * | '!' VALUE - * | '-' VALUE - * | 'defined' '(' variable ')' - * | variable - * | number - * - * BINOP := '*' | '/' | '%' - * | '+' | '-' - * | '<<' | '>>' - * | '<' | '>' | '<=' | '>=' - * | '==' | '!=' - * | '&' | '|' - * | '&&' | '||' - * - * The normal C order of precidence is supported. - * - * - * External Entry Points: - * - * ParseIfExpression parse a string for #if - */ - -#include <stdio.h> - -typedef int Bool; -#define False 0 -#define True 1 - -typedef struct _if_parser { - struct { /* functions */ - const char *(*handle_error) (/* struct _if_parser *, const char *, - const char * */); - int (*eval_variable) (/* struct _if_parser *, const char *, int */); - int (*eval_defined) (/* struct _if_parser *, const char *, int */); - } funcs; - char *data; -} IfParser; - -const char *ParseIfExpression (IfParser *, const char *, int *); - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/mkdepend/imakemdep.h b/soltools/mkdepend/imakemdep.h deleted file mode 100644 index 15b185117..000000000 --- a/soltools/mkdepend/imakemdep.h +++ /dev/null @@ -1,702 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ - -/* $XConsortium: imakemdep.h,v 1.83 95/04/07 19:47:46 kaleb Exp $ */ -/* $XFree86: xc/config/imake/imakemdep.h,v 3.12 1995/07/08 10:22:17 dawes Exp $ */ -/* - -Copyright (c) 1993, 1994 X Consortium - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. - -*/ - - -/* - * This file contains machine-dependent constants for the imake utility. - * When porting imake, read each of the steps below and add in any necessary - * definitions. In general you should *not* edit ccimake.c or imake.c! - */ - -#ifdef CCIMAKE -/* - * Step 1: imake_ccflags - * Define any special flags that will be needed to get imake.c to compile. - * These will be passed to the compile along with the contents of the - * make variable BOOTSTRAPCFLAGS. - */ -#if defined(macII) || defined(_AUX_SOURCE) -#define imake_ccflags "-DmacII -DSYSV" -#endif - -#ifdef stellar -#define imake_ccflags "-DSYSV" -#endif - -#if defined(USL) || defined(Oki) || defined(NCR) -#define imake_ccflags "-Xc -DSVR4" -#endif - -#ifdef sony -#if defined(SYSTYPE_SYSV) || defined(_SYSTYPE_SYSV) -#define imake_ccflags "-DSVR4" -#else -#include <sys/param.h> -#if NEWSOS < 41 -#define imake_ccflags "-Dbsd43 -DNOSTDHDRS" -#else -#if NEWSOS < 42 -#define imake_ccflags "-Dbsd43" -#endif -#endif -#endif -#endif - -#ifdef _CRAY -#define imake_ccflags "-DSYSV -DUSG" -#endif - -#if defined(_IBMR2) || defined(aix) -#define imake_ccflags "-Daix -DSYSV" -#endif - -#ifdef Mips -# if defined(SYSTYPE_BSD) || defined(BSD) || defined(BSD43) -# define imake_ccflags "-DBSD43" -# else -# define imake_ccflags "-DSYSV" -# endif -#endif - -#ifdef is68k -#define imake_ccflags "-Dluna -Duniosb" -#endif - -#ifdef SYSV386 -# ifdef SVR4 -# define imake_ccflags "-Xc -DSVR4" -# else -# define imake_ccflags "-DSYSV" -# endif -#endif - -#ifdef SVR4 -# ifdef i386 -# define imake_ccflags "-Xc -DSVR4" -# endif -#endif - -#ifdef SYSV -# ifdef i386 -# define imake_ccflags "-DSYSV" -# endif -#endif - -#ifdef __convex__ -#define imake_ccflags "-fn -tm c1" -#endif - -#ifdef apollo -#define imake_ccflags "-DX_NOT_POSIX" -#endif - -#ifdef WIN32 -#define imake_ccflags "-nologo -batch -D__STDC__" -#endif - -#ifdef __uxp__ -#define imake_ccflags "-DSVR4 -DANSICPP" -#endif - -#ifdef __sxg__ -#define imake_ccflags "-DSYSV -DUSG -DNOSTDHDRS" -#endif - -#if defined(SX) || defined(PC_UX) -#define imake_ccflags "-DSYSV" -#endif - -#ifdef nec_ews_svr2 -#define imake_ccflags "-DUSG" -#endif - -#if defined(nec_ews_svr4) || defined(_nec_ews_svr4) || defined(_nec_up) || defined(_nec_ft) -#define imake_ccflags "-DSVR4" -#endif - -#ifdef MACH -#define imake_ccflags "-DNOSTDHDRS" -#endif - -/* this is for OS/2 under EMX. This won't work with DOS */ -#if defined(__EMX__) -#define imake_ccflags "-DBSD43" -#endif - -#else /* not CCIMAKE */ -#ifndef MAKEDEPEND -/* - * Step 2: dup2 - * If your OS doesn't have a dup2() system call to duplicate one file - * descriptor onto another, define such a mechanism here (if you don't - * already fall under the existing category(ies). - */ -#if defined(SYSV) && !defined(_CRAY) && !defined(Mips) -#define dup2(fd1,fd2) ((fd1 == fd2) ? fd1 : (close(fd2), \ - fcntl(fd1, F_DUPFD, fd2))) -#endif - - -/* - * Step 3: FIXUP_CPP_WHITESPACE - * If your cpp collapses tabs macro expansions into a single space and - * replaces escaped newlines with a space, define this symbol. This will - * cause imake to attempt to patch up the generated Makefile by looking - * for lines that have colons in them (this is why the rules file escapes - * all colons). One way to tell if you need this is to see whether or not - * your Makefiles have no tabs in them and lots of @@ strings. - */ -#if defined(sun) || defined(SYSV) || defined(SVR4) || defined(hcx) || defined(WIN32) || (defined(AMOEBA) && defined(CROSS_COMPILE)) -#define FIXUP_CPP_WHITESPACE -#endif -#ifdef WIN32 -#define REMOVE_CPP_LEADSPACE -#define INLINE_SYNTAX -#define MAGIC_MAKE_VARS -#endif -#ifdef __minix_vmd -#define FIXUP_CPP_WHITESPACE -#endif - -/* - * Step 4: USE_CC_E, DEFAULT_CC, DEFAULT_CPP - * If you want to use cc -E instead of cpp, define USE_CC_E. - * If use cc -E but want a different compiler, define DEFAULT_CC. - * If the cpp you need is not in /lib/cpp, define DEFAULT_CPP. - */ -#ifdef WIN32 -#define USE_CC_E -#define DEFAULT_CC "cl" -#endif -#ifdef apollo -#define DEFAULT_CPP "/usr/lib/cpp" -#endif -#if defined(_IBMR2) && !defined(DEFAULT_CPP) -#define DEFAULT_CPP "/usr/lpp/X11/Xamples/util/cpp/cpp" -#endif -#if defined(sun) && defined(SVR4) -#define DEFAULT_CPP "/usr/ccs/lib/cpp" -#endif -#ifdef __bsdi__ -#define DEFAULT_CPP "/usr/bin/cpp" -#endif -#ifdef __uxp__ -#define DEFAULT_CPP "/usr/ccs/lib/cpp" -#endif -#ifdef __sxg__ -#define DEFAULT_CPP "/usr/lib/cpp" -#endif -#ifdef _CRAY -#define DEFAULT_CPP "/lib/pcpp" -#endif -#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) -#define DEFAULT_CPP "/usr/libexec/cpp" -#endif -#ifdef MACH -#define USE_CC_E -#endif -#ifdef __minix_vmd -#define DEFAULT_CPP "/usr/lib/cpp" -#endif -#if defined(__EMX__) -/* expects cpp in PATH */ -#define DEFAULT_CPP "cpp" -#endif - -/* - * Step 5: cpp_argv - * The following table contains the flags that should be passed - * whenever a Makefile is being generated. If your preprocessor - * doesn't predefine any unique symbols, choose one and add it to the - * end of this table. Then, do the following: - * - * a. Use this symbol in Imake.tmpl when setting MacroFile. - * b. Put this symbol in the definition of BootstrapCFlags in your - * <platform>.cf file. - * c. When doing a make World, always add "BOOTSTRAPCFLAGS=-Dsymbol" - * to the end of the command line. - * - * Note that you may define more than one symbol (useful for platforms - * that support multiple operating systems). - */ - -#define ARGUMENTS 50 /* number of arguments in various arrays */ -char *cpp_argv[ARGUMENTS] = { - "cc", /* replaced by the actual program to exec */ - "-I.", /* add current directory to include path */ -#ifdef unix - "-Uunix", /* remove unix symbol so that filename unix.c okay */ -#endif -#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || \ - defined(MACH) || defined(DRAGONFLY) -/* FIXME: strange list of obsolete systems */ -# ifdef __i386__ - "-D__i386__", -# endif -# ifdef __GNUC__ - "-traditional", -# endif -#endif -#ifdef M4330 - "-DM4330", /* Tektronix */ -#endif -#ifdef M4310 - "-DM4310", /* Tektronix */ -#endif -#if defined(macII) || defined(_AUX_SOURCE) - "-DmacII", /* Apple A/UX */ -#endif -#ifdef USL - "-DUSL", /* USL */ -#endif -#ifdef sony - "-Dsony", /* Sony */ -#if !defined(SYSTYPE_SYSV) && !defined(_SYSTYPE_SYSV) && NEWSOS < 42 - "-Dbsd43", -#endif -#endif -#ifdef _IBMR2 - "-D_IBMR2", /* IBM RS-6000 (we ensured that aix is defined above */ -#ifndef aix -#define aix /* allow BOOTSTRAPCFLAGS="-D_IBMR2" */ -#endif -#endif /* _IBMR2 */ -#ifdef aix - "-Daix", /* AIX instead of AOS */ -#ifndef ibm -#define ibm /* allow BOOTSTRAPCFLAGS="-Daix" */ -#endif -#endif /* aix */ -#ifdef ibm - "-Dibm", /* IBM PS/2 and RT under both AOS and AIX */ -#endif -#ifdef luna - "-Dluna", /* OMRON luna 68K and 88K */ -#ifdef luna1 - "-Dluna1", -#endif -#ifdef luna88k /* need not on UniOS-Mach Vers. 1.13 */ - "-traditional", /* for some older version */ -#endif /* instead of "-DXCOMM=\\#" */ -#ifdef uniosb - "-Duniosb", -#endif -#ifdef uniosu - "-Duniosu", -#endif -#endif /* luna */ -#ifdef _CRAY /* Cray */ - "-Ucray", -#endif -#ifdef Mips - "-DMips", /* Define and use Mips for Mips Co. OS/mach. */ -# if defined(SYSTYPE_BSD) || defined(BSD) || defined(BSD43) - "-DBSD43", /* Mips RISCOS supports two environments */ -# else - "-DSYSV", /* System V environment is the default */ -# endif -#endif /* Mips */ -#ifdef MOTOROLA - "-DMOTOROLA", /* Motorola Delta Systems */ -# ifdef SYSV - "-DSYSV", -# endif -# ifdef SVR4 - "-DSVR4", -# endif -#endif /* MOTOROLA */ -#ifdef i386 - "-Di386", -# ifdef SVR4 - "-DSVR4", -# endif -# ifdef SYSV - "-DSYSV", -# ifdef ISC - "-DISC", -# ifdef ISC40 - "-DISC40", /* ISC 4.0 */ -# else -# ifdef ISC202 - "-DISC202", /* ISC 2.0.2 */ -# else -# ifdef ISC30 - "-DISC30", /* ISC 3.0 */ -# else - "-DISC22", /* ISC 2.2.1 */ -# endif -# endif -# endif -# endif -# ifdef SCO - "-DSCO", -# ifdef SCO324 - "-DSCO324", -# endif -# endif -# endif -# ifdef ESIX - "-DESIX", -# endif -# ifdef ATT - "-DATT", -# endif -# ifdef DELL - "-DDELL", -# endif -#endif -#ifdef SYSV386 /* System V/386 folks, obsolete */ - "-Di386", -# ifdef SVR4 - "-DSVR4", -# endif -# ifdef ISC - "-DISC", -# ifdef ISC40 - "-DISC40", /* ISC 4.0 */ -# else -# ifdef ISC202 - "-DISC202", /* ISC 2.0.2 */ -# else -# ifdef ISC30 - "-DISC30", /* ISC 3.0 */ -# else - "-DISC22", /* ISC 2.2.1 */ -# endif -# endif -# endif -# endif -# ifdef SCO - "-DSCO", -# ifdef SCO324 - "-DSCO324", -# endif -# endif -# ifdef ESIX - "-DESIX", -# endif -# ifdef ATT - "-DATT", -# endif -# ifdef DELL - "-DDELL", -# endif -#endif -#ifdef __osf__ - "-D__osf__", -# ifdef __mips__ - "-D__mips__", -# endif -# ifdef __alpha - "-D__alpha", -# endif -# ifdef __i386__ - "-D__i386__", -# endif -# ifdef __GNUC__ - "-traditional", -# endif -#endif -#ifdef Oki - "-DOki", -#endif -#ifdef sun -#ifdef SVR4 - "-DSVR4", -#endif -#endif -#ifdef WIN32 - "-DWIN32", - "-nologo", - "-batch", - "-D__STDC__", -#endif -#ifdef NCR - "-DNCR", /* NCR */ -#endif -#ifdef linux - "-traditional", - "-Dlinux", -#endif -#ifdef __uxp__ - "-D__uxp__", -#endif -#ifdef __sxg__ - "-D__sxg__", -#endif -#ifdef nec_ews_svr2 - "-Dnec_ews_svr2", -#endif -#ifdef AMOEBA - "-DAMOEBA", -# ifdef CROSS_COMPILE - "-DCROSS_COMPILE", -# ifdef CROSS_i80386 - "-Di80386", -# endif -# ifdef CROSS_sparc - "-Dsparc", -# endif -# ifdef CROSS_mc68000 - "-Dmc68000", -# endif -# else -# ifdef i80386 - "-Di80386", -# endif -# ifdef sparc - "-Dsparc", -# endif -# ifdef mc68000 - "-Dmc68000", -# endif -# endif -#endif -#ifdef __minix_vmd - "-Dminix", -#endif - -#if defined(__EMX__) - "-traditional", - "-Demxos2", -#endif - -}; -#else /* else MAKEDEPEND */ -/* - * Step 6: predefs - * If your compiler and/or preprocessor define any specific symbols, add - * them to the the following table. The definition of struct symtab is - * in util/makedepend/def.h. - */ - -/* FIXME: strange list of obsolete systems */ -struct pair predefs[] = { -#ifdef apollo - {"apollo", "1", NULL}, -#endif -#ifdef ibm032 - {"ibm032", "1", NULL}, -#endif -#ifdef ibm - {"ibm", "1", NULL}, -#endif -#ifdef aix - {"aix", "1", NULL}, -#endif -#ifdef sun - {"sun", "1", NULL}, -#endif -#ifdef sun2 - {"sun2", "1", NULL}, -#endif -#ifdef sun3 - {"sun3", "1", NULL}, -#endif -#ifdef sun4 - {"sun4", "1", NULL}, -#endif -#ifdef sparc - {"sparc", "1", NULL}, -#endif -#ifdef __sparc__ - {"__sparc__", "1", NULL}, -#endif -#ifdef vax - {"vax", "1", NULL}, -#endif -#ifdef VMS - {"VMS", "1", NULL}, -#endif -#ifdef cray - {"cray", "1", NULL}, -#endif -#ifdef CRAY - {"CRAY", "1", NULL}, -#endif -#ifdef _CRAY - {"_CRAY", "1", NULL}, -#endif -#ifdef att - {"att", "1", NULL}, -#endif -#ifdef mips - {"mips", "1", NULL}, -#endif -#ifdef __mips__ - {"__mips__", "1", NULL}, -#endif -#ifdef stellar - {"stellar", "1", NULL}, -#endif -#ifdef mc68000 - {"mc68000", "1", NULL}, -#endif -#ifdef mc68020 - {"mc68020", "1", NULL}, -#endif -#ifdef __GNUC__ - {"__GNUC__", "1", NULL}, -#endif -#if __STDC__ - {"__STDC__", "1", NULL}, -#endif -#ifdef __HIGHC__ - {"__HIGHC__", "1", NULL}, -#endif -#ifdef CMU - {"CMU", "1", NULL}, -#endif -#ifdef luna - {"luna", "1", NULL}, -#ifdef luna1 - {"luna1", "1", NULL}, -#endif -#ifdef luna2 - {"luna2", "1", NULL}, -#endif -#ifdef luna88k - {"luna88k", "1", NULL}, -#endif -#ifdef uniosb - {"uniosb", "1", NULL}, -#endif -#ifdef uniosu - {"uniosu", "1", NULL}, -#endif -#endif -#ifdef ieeep754 - {"ieeep754", "1", NULL}, -#endif -#ifdef is68k - {"is68k", "1", NULL}, -#endif -#ifdef m68k - {"m68k", "1", NULL}, -#endif -#ifdef m88k - {"m88k", "1", NULL}, -#endif -#ifdef __m88k__ - {"__m88k__", "1", NULL}, -#endif -#ifdef bsd43 - {"bsd43", "1", NULL}, -#endif -#ifdef hcx - {"hcx", "1", NULL}, -#endif -#ifdef sony - {"sony", "1", NULL}, -#ifdef SYSTYPE_SYSV - {"SYSTYPE_SYSV", "1", NULL}, -#endif -#ifdef _SYSTYPE_SYSV - {"_SYSTYPE_SYSV", "1", NULL}, -#endif -#endif -#ifdef __OSF__ - {"__OSF__", "1", NULL}, -#endif -#ifdef __osf__ - {"__osf__", "1", NULL}, -#endif -#ifdef __alpha - {"__alpha", "1", NULL}, -#endif -#ifdef __DECC - {"__DECC", "1", NULL}, -#endif -#ifdef __decc - {"__decc", "1", NULL}, -#endif -#ifdef __uxp__ - {"__uxp__", "1", NULL}, -#endif -#ifdef __sxg__ - {"__sxg__", "1", NULL}, -#endif -#ifdef __bsdi__ - {"__bsdi__", "1", NULL}, -#endif -#ifdef nec_ews_svr2 - {"nec_ews_svr2", "1", NULL}, -#endif -#ifdef nec_ews_svr4 - {"nec_ews_svr4", "1", NULL}, -#endif -#ifdef _nec_ews_svr4 - {"_nec_ews_svr4", "1", NULL}, -#endif -#ifdef _nec_up - {"_nec_up", "1", NULL}, -#endif -#ifdef SX - {"SX", "1", NULL}, -#endif -#ifdef nec - {"nec", "1", NULL}, -#endif -#ifdef _nec_ft - {"_nec_ft", "1", NULL}, -#endif -#ifdef PC_UX - {"PC_UX", "1", NULL}, -#endif -#ifdef sgi - {"sgi", "1", NULL}, -#endif -#ifdef __sgi - {"__sgi", "1", NULL}, -#endif -#ifdef __FreeBSD__ - {"__FreeBSD__", "1", NULL}, -#endif -#ifdef __NetBSD__ - {"__NetBSD__", "1", NULL}, -#endif -#ifdef __OpenBSD__ - {"__OpenBSD__", "1", NULL}, -#endif -#ifdef __DragonFly__ - {"__DragonFly__", "1", NULL}, -#endif -#ifdef __EMX__ - {"__EMX__", "1", NULL}, -#endif - /* add any additional symbols before this line */ - {NULL, NULL, NULL} -}; - -#endif /* MAKEDEPEND */ -#endif /* CCIMAKE */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/mkdepend/include.c b/soltools/mkdepend/include.c deleted file mode 100644 index 844c99b2f..000000000 --- a/soltools/mkdepend/include.c +++ /dev/null @@ -1,333 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* $XConsortium: include.c,v 1.17 94/12/05 19:33:08 gildea Exp $ */ -/* - -Copyright (c) 1993, 1994 X Consortium - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. - -*/ - - -#include "def.h" -#include <string.h> - -void remove_dotdot( char * ); -int isdot( char * ); -int isdotdot( char * ); -int issymbolic(char * dir, char * component); -int exists_path(struct IncludesCollection*, char*); - - -extern struct inclist inclist[ MAXFILES ], - *inclistp; -extern char *includedirs[ ]; -extern char *notdotdot[ ]; -extern boolean show_where_not; -extern boolean warn_multiple; - -struct inclist *inc_path(file, include, dot, incCollection) - register char *file, - *include; - boolean dot; - struct IncludesCollection* incCollection; -{ - static char path[ BUFSIZ ]; - register char **pp, *p; - register struct inclist *ip; - struct stat st; - boolean found = FALSE; - (void)dot; - - /* - * Check all previously found include files for a path that - * has already been expanded. - */ - for (ip = inclist; ip->i_file; ip++) - if ((strcmp(ip->i_incstring, include) == 0) && !ip->i_included_sym) - { - found = TRUE; - break; - } - - /* - * If the path was surrounded by "" or is an absolute path, - * then check the exact path provided. - */ -// FIXME: creates duplicates in the dependency files if absolute paths are -// given, which certainly is not the intended behavior. Also it slows down -// makedepend performance considerably. -// if (!found && (dot || *include == '/')) { -// -// if ((exists_path(incCollection, include)) && stat(include, &st) == 0 && !( st.st_mode & S_IFDIR)) { -// ip = newinclude(include, include); -// found = TRUE; -// } -// else if (show_where_not) -// warning1("\tnot in %s\n", include); -// } - - /* - * See if this include file is in the directory of the - * file being compiled. - */ - if (!found) { - for (p=file+strlen(file); p>file; p--) - if (*p == '/') - break; - if (p == file) - strcpy(path, include); - else { - strncpy(path, file, (p-file) + 1); - path[ (p-file) + 1 ] = '\0'; - strcpy(path + (p-file) + 1, include); - } - remove_dotdot(path); - if ((exists_path(incCollection, path)) && stat(path, &st) == 0 && !( st.st_mode & S_IFDIR)) { - ip = newinclude(path, include); - found = TRUE; - } - else if (show_where_not) - warning1("\tnot in %s\n", path); - } - - /* - * Check the include directories specified. (standard include dir - * should be at the end.) - */ - if (!found) - for (pp = includedirs; *pp; pp++) { - sprintf(path, "%s/%s", *pp, include); - remove_dotdot(path); - if ((exists_path(incCollection, path)) && stat(path, &st) == 0 && !(st.st_mode & S_IFDIR)) { - ip = newinclude(path, include); - found = TRUE; - break; - } - else if (show_where_not) - warning1("\tnot in %s\n", path); - } - - if (!found) - ip = NULL; - return(ip); -} - -int exists_path(incCollection, path) - struct IncludesCollection* incCollection; - char* path; -{ - convert_slashes(path); - return call_IncludesCollection_exists(incCollection, path); -} - -/* - * Occasionally, pathnames are created that look like .../x/../y - * Any of the 'x/..' sequences within the name can be eliminated. - * (but only if 'x' is not a symbolic link!!) - */ -void remove_dotdot(path) - char *path; -{ - register char *end, *from, *to, **cp; - char *components[ MAXFILES ], - newpath[ BUFSIZ ]; - boolean component_copied; - - /* - * slice path up into components. - */ - to = newpath; - if (*path == '/') - *to++ = '/'; - *to = '\0'; - cp = components; - for (from=end=path; *end; end++) - if (*end == '/') { - while (*end == '/') - *end++ = '\0'; - if (*from) - *cp++ = from; - from = end; - } - *cp++ = from; - *cp = NULL; - - /* - * Recursively remove all 'x/..' component pairs. - */ - cp = components; - while(*cp) { - if (!isdot(*cp) && !isdotdot(*cp) && isdotdot(*(cp+1)) - && !issymbolic(newpath, *cp)) - { - char **fp = cp + 2; - char **tp = cp; - - do - *tp++ = *fp; /* move all the pointers down */ - while (*fp++); - if (cp != components) - cp--; /* go back and check for nested ".." */ - } else { - cp++; - } - } - /* - * Concatenate the remaining path elements. - */ - cp = components; - component_copied = FALSE; - while(*cp) { - if (component_copied) - *to++ = '/'; - component_copied = TRUE; - for (from = *cp; *from; ) - *to++ = *from++; - *to = '\0'; - cp++; - } - *to++ = '\0'; - - /* - * copy the reconstituted path back to our pointer. - */ - strcpy(path, newpath); -} - -int isdot(p) - register char *p; -{ - if(p && p[0] == '.' && p[1] == '\0') - return(TRUE); - return(FALSE); -} - -int isdotdot(p) - register char *p; -{ - if(p && p[0] == '.' && p[1] == '.' && p[2] == '\0') - return(TRUE); - return(FALSE); -} - -int issymbolic(dir, component) - register char *dir, *component; -{ -#ifdef S_IFLNK - struct stat st; - char buf[ BUFSIZ ], **pp; - - sprintf(buf, "%s%s%s", dir, *dir ? "/" : "", component); - for (pp=notdotdot; *pp; pp++) - if (strcmp(*pp, buf) == 0) - return (TRUE); - if (lstat(buf, &st) == 0 - && (st.st_mode & S_IFMT) == S_IFLNK) { - *pp++ = copy(buf); - if (pp >= ¬dotdot[ MAXDIRS ]) - fatalerr("out of .. dirs, increase MAXDIRS\n"); - return(TRUE); - } -#endif - return(FALSE); -} - -/* - * Add an include file to the list of those included by 'file'. - */ -struct inclist *newinclude(newfile, incstring) - register char *newfile, *incstring; -{ - register struct inclist *ip; - - /* - * First, put this file on the global list of include files. - */ - ip = inclistp++; - if (inclistp == inclist + MAXFILES - 1) - fatalerr("out of space: increase MAXFILES\n"); - ip->i_file = copy(newfile); - ip->i_included_sym = FALSE; - if (incstring == NULL) - ip->i_incstring = ip->i_file; - else - ip->i_incstring = copy(incstring); - - return(ip); -} - -void included_by(ip, newfile) - register struct inclist *ip, *newfile; -{ - register int i; - - if (ip == NULL) - return; - /* - * Put this include file (newfile) on the list of files included - * by 'file'. If 'file' is NULL, then it is not an include - * file itself (i.e. was probably mentioned on the command line). - * If it is already on the list, don't stick it on again. - */ - if (ip->i_list == NULL) - ip->i_list = (struct inclist **) - malloc(sizeof(struct inclist *) * ++ip->i_listlen); - else { - for (i=0; i<ip->i_listlen; i++) - if (ip->i_list[ i ] == newfile) { - i = (int)strlen(newfile->i_file); - if (!ip->i_included_sym && - !(i > 2 && - newfile->i_file[i-1] == 'c' && - newfile->i_file[i-2] == '.')) - { - /* only complain if ip has */ - /* no #include SYMBOL lines */ - /* and is not a .c file */ - if (warn_multiple) - { - warning("%s includes %s more than once!\n", - ip->i_file, newfile->i_file); - warning1("Already have\n"); - for (i=0; i<ip->i_listlen; i++) - warning1("\t%s\n", ip->i_list[i]->i_file); - } - } - return; - } - ip->i_list = (struct inclist **) realloc(ip->i_list, - sizeof(struct inclist *) * ++ip->i_listlen); - } - ip->i_list[ ip->i_listlen-1 ] = newfile; -} - -void inc_clean () -{ - register struct inclist *ip; - - for (ip = inclist; ip < inclistp; ip++) { - ip->i_marked = FALSE; - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/mkdepend/main.c b/soltools/mkdepend/main.c deleted file mode 100644 index 4aac40019..000000000 --- a/soltools/mkdepend/main.c +++ /dev/null @@ -1,803 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* $XConsortium: main.c,v 1.84 94/11/30 16:10:44 kaleb Exp $ */ -/* $XFree86: xc/config/makedepend/main.c,v 3.4 1995/07/15 14:53:49 dawes Exp $ */ -/* - -Copyright (c) 1993, 1994 X Consortium - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. - -*/ - -#if defined(FREEBSD) || defined(MACOSX) -#include <sys/types.h> -#include <sys/stat.h> -#endif - -#ifdef _WIN32 -#include <io.h> -#endif - -#ifdef _MSC_VER /* Define ssize_t */ - -#if !defined(_W64) -#if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300 -#define _W64 __w64 -#else -#define _W64 -#endif -#endif - -#ifdef _WIN64 -typedef __int64 ssize_t; -#else -typedef _W64 int ssize_t; -#endif - -#endif - -#include "def.h" -#include <string.h> -#ifdef hpux -#define sigvec sigvector -#endif /* hpux */ - -#ifdef X_POSIX_C_SOURCE -#define _POSIX_C_SOURCE X_POSIX_C_SOURCE -#include <signal.h> -#undef _POSIX_C_SOURCE -#else -#if defined(X_NOT_POSIX) || defined(_POSIX_SOURCE) -#include <signal.h> -#else -#define _POSIX_SOURCE -#include <signal.h> -#undef _POSIX_SOURCE -#endif -#endif - -#include <stdarg.h> - -#ifdef MINIX -#define USE_CHMOD 1 -#endif - -#ifdef DEBUG -int _debugmask; -#endif - -char *ProgramName; - -#define OBJSUFFIX ".obj" -#define INCLUDEDIR "." - -char *directives[] = { - "if", - "ifdef", - "ifndef", - "else", - "endif", - "define", - "undef", - "include", - "line", - "pragma", - "error", - "ident", - "sccs", - "elif", - "eject", - NULL -}; - -#define MAKEDEPEND -#include "imakemdep.h" /* from config sources */ -#undef MAKEDEPEND - -/******* function declarations ********/ -/******* added by -Wall project *******/ -void redirect(char * line, char * makefile ); - -struct inclist inclist[ MAXFILES ], - *inclistp = inclist; - -struct symhash *maininclist = NULL; - -char *filelist[ MAXFILES ]; -char *includedirs[ MAXDIRS + 1 ]; -char *notdotdot[ MAXDIRS ]; -char *objprefix = ""; -char *objsuffix = OBJSUFFIX; -char *startat = "# DO NOT DELETE"; -int width = 78; -boolean append = FALSE; -boolean printed = FALSE; -boolean verbose = FALSE; -boolean show_where_not = FALSE; -boolean warn_multiple = FALSE; /* Warn on multiple includes of same file */ - -static -#ifdef SIGNALRETURNSINT -int -#else -void -#endif -catch (int sig) -{ - fflush (stdout); - fatalerr ("got signal %d\n", sig); -} - -#if (defined(i386) && defined(SYSV)) || defined(WIN32) -#define USGISH -#endif - -#ifndef USGISH -#ifndef _POSIX_SOURCE -#define sigaction sigvec -#define sa_handler sv_handler -#define sa_mask sv_mask -#define sa_flags sv_flags -#endif -struct sigaction sig_act; -#endif /* USGISH */ - -boolean native_win_slashes = FALSE; - -int main(argc, argv) - int argc; - char **argv; -{ - register char **fp = filelist; - register char **incp = includedirs; - register char *p; - register struct inclist *ip; - char *makefile = NULL; - struct filepointer *filecontent; - struct pair *psymp = predefs; - char *endmarker = NULL; - char *defincdir = NULL; - struct IncludesCollection* incCollection; - - ProgramName = argv[0]; - - while (psymp->p_name) - { - hash_define(psymp->p_name, psymp->p_value, &maininclist); - psymp++; - } - if (argc == 2 && argv[1][0] == '@') { - struct stat ast; - int afd; - char *args; - char **nargv; - int nargc; - char quotechar = '\0'; - - nargc = 1; - if ((afd = open(argv[1]+1, O_RDONLY)) < 0) - fatalerr("cannot open \"%s\"\n", argv[1]+1); - fstat(afd, &ast); - args = (char *)malloc(ast.st_size + 1); - if ((ast.st_size = read(afd, args, (size_t) ast.st_size)) < 0) - fatalerr("failed to read %s\n", argv[1]+1); - args[ast.st_size] = '\0'; - close(afd); - for (p = args; *p; p++) { - if (quotechar) { - if (quotechar == '\\' || - (*p == quotechar && p[-1] != '\\')) - quotechar = '\0'; - continue; - } - switch (*p) { - case '\\': - case '"': - case '\'': - quotechar = *p; - break; - case ' ': - case '\n': - *p = '\0'; - if (p > args && p[-1]) - nargc++; - break; - } - } - if (p[-1]) - nargc++; - nargv = (char **)malloc(nargc * sizeof(char *)); - nargv[0] = argv[0]; - argc = 1; - for (p = args; argc < nargc; p += strlen(p) + 1) - if (*p) nargv[argc++] = p; - argv = nargv; - } - for(argc--, argv++; argc; argc--, argv++) { - /* if looking for endmarker then check before parsing */ - if (endmarker && strcmp (endmarker, *argv) == 0) { - endmarker = NULL; - continue; - } - if (**argv != '-') { - /* treat +thing as an option for C++ */ - if (endmarker && **argv == '+') - continue; - *fp++ = argv[0]; - continue; - } - switch(argv[0][1]) { - case '-': - endmarker = &argv[0][2]; - if (endmarker[0] == '\0') endmarker = "--"; - break; - case 'D': - if (argv[0][2] == '\0') { - argv++; - argc--; - } - for (p=argv[0] + 2; *p ; p++) - if (*p == '=') { - *p = ' '; - break; - } - define(argv[0] + 2, &maininclist); - break; - case 'I': - if (incp >= includedirs + MAXDIRS) - fatalerr("Too many -I flags.\n"); - *incp++ = argv[0]+2; - if (**(incp-1) == '\0') { - *(incp-1) = *(++argv); - argc--; - } - break; - case 'Y': - defincdir = argv[0]+2; - break; - /* do not use if endmarker processing */ - case 'a': - if (endmarker) break; - append = TRUE; - break; - case 'w': - if (endmarker) break; - if (argv[0][2] == '\0') { - argv++; - argc--; - width = atoi(argv[0]); - } else - width = atoi(argv[0]+2); - break; - case 'n': - // Use "-n" switch to generate dependencies with windows-native slash style - native_win_slashes = TRUE; - break; - case 'o': - if (endmarker) break; - if (argv[0][2] == '\0') { - argv++; - argc--; - objsuffix = argv[0]; - } else - objsuffix = argv[0]+2; - break; - case 'p': - if (endmarker) break; - if (argv[0][2] == '\0') { - argv++; - argc--; - objprefix = argv[0]; - } else - objprefix = argv[0]+2; - break; - case 'v': - if (endmarker) break; - verbose = TRUE; -#ifdef DEBUG - if (argv[0][2]) - _debugmask = atoi(argv[0]+2); -#endif - break; - case 's': - if (endmarker) break; - startat = argv[0]+2; - if (*startat == '\0') { - startat = *(++argv); - argc--; - } - if (*startat != '#') - fatalerr("-s flag's value should start %s\n", - "with '#'."); - break; - case 'f': - if (endmarker) break; - makefile = argv[0]+2; - if (*makefile == '\0') { - makefile = *(++argv); - argc--; - } - break; - - case 'm': - warn_multiple = TRUE; - break; - - /* Ignore -O, -g so we can just pass ${CFLAGS} to - makedepend - */ - case 'O': - case 'g': - break; - default: - if (endmarker) break; - warning("ignoring option %s\n", argv[0]); - } - } - - convert_slashes(objprefix); - objprefix = append_slash(objprefix); - - if (!defincdir) { -#ifdef PREINCDIR - if (incp >= includedirs + MAXDIRS) - fatalerr("Too many -I flags.\n"); - *incp++ = PREINCDIR; -#endif - if (incp >= includedirs + MAXDIRS) - fatalerr("Too many -I flags.\n"); - *incp++ = INCLUDEDIR; -#ifdef POSTINCDIR - if (incp >= includedirs + MAXDIRS) - fatalerr("Too many -I flags.\n"); - *incp++ = POSTINCDIR; -#endif - } else if (*defincdir) { - if (incp >= includedirs + MAXDIRS) - fatalerr("Too many -I flags.\n"); - *incp++ = defincdir; - } - - redirect(startat, makefile); - - /* - * catch signals. - */ -#ifdef USGISH -/* should really reset SIGINT to SIG_IGN if it was. */ -#ifdef SIGHUP - signal (SIGHUP, catch); -#endif - signal (SIGINT, catch); -#ifdef SIGQUIT - signal (SIGQUIT, catch); -#endif - signal (SIGILL, catch); -#ifdef SIGBUS - signal (SIGBUS, catch); -#endif - signal (SIGSEGV, catch); -#ifdef SIGSYS - signal (SIGSYS, catch); -#endif - signal (SIGFPE, catch); -#else - sig_act.sa_handler = catch; -#ifdef _POSIX_SOURCE - sigemptyset(&sig_act.sa_mask); - sigaddset(&sig_act.sa_mask, SIGINT); - sigaddset(&sig_act.sa_mask, SIGQUIT); -#ifdef SIGBUS - sigaddset(&sig_act.sa_mask, SIGBUS); -#endif - sigaddset(&sig_act.sa_mask, SIGILL); - sigaddset(&sig_act.sa_mask, SIGSEGV); - sigaddset(&sig_act.sa_mask, SIGHUP); - sigaddset(&sig_act.sa_mask, SIGPIPE); -#ifdef SIGSYS - sigaddset(&sig_act.sa_mask, SIGSYS); -#endif -#else - sig_act.sa_mask = ((1<<(SIGINT -1)) - |(1<<(SIGQUIT-1)) -#ifdef SIGBUS - |(1<<(SIGBUS-1)) -#endif - |(1<<(SIGILL-1)) - |(1<<(SIGSEGV-1)) - |(1<<(SIGHUP-1)) - |(1<<(SIGPIPE-1)) -#ifdef SIGSYS - |(1<<(SIGSYS-1)) -#endif - ); -#endif /* _POSIX_SOURCE */ - sig_act.sa_flags = 0; - sigaction(SIGHUP, &sig_act, (struct sigaction *)0); - sigaction(SIGINT, &sig_act, (struct sigaction *)0); - sigaction(SIGQUIT, &sig_act, (struct sigaction *)0); - sigaction(SIGILL, &sig_act, (struct sigaction *)0); -#ifdef SIGBUS - sigaction(SIGBUS, &sig_act, (struct sigaction *)0); -#endif - sigaction(SIGSEGV, &sig_act, (struct sigaction *)0); -#ifdef SIGSYS - sigaction(SIGSYS, &sig_act, (struct sigaction *)0); -#endif -#endif /* USGISH */ - - /* - * now peruse through the list of files. - */ - incCollection = create_IncludesCollection(); - - for(fp=filelist; *fp; fp++) { - struct symhash *includes; - filecontent = getfile(*fp); - ip = newinclude(*fp, (char *)NULL); - - includes = hash_copy( maininclist ); - find_includes(filecontent, ip, ip, 0, FALSE, incCollection, includes); - hash_free( includes ); - - freefile(filecontent); - recursive_pr_include(ip, ip->i_file, base_name(*fp)); - inc_clean(); - } - if (printed) - printf("\n"); - - delete_IncludesCollection(incCollection); - - exit(0); -} - -struct filepointer *getfile(file) - char *file; -{ - register int fd; - struct filepointer *content; - struct stat st; - off_t size_backup; - ssize_t bytes_read; - size_t malloc_size; - - content = (struct filepointer *)malloc(sizeof(struct filepointer)); - if ((fd = open(file, O_RDONLY)) < 0) { - warning("makedepend: Cannot open file \"%s\"\n", file); - content->f_p = content->f_base = content->f_end = (char *)malloc(1); - *content->f_p = '\0'; - return(content); - } - fstat(fd, &st); - - size_backup = st.st_size; - malloc_size = size_backup; - /* Since off_t is larger than size_t, need to test for - * truncation. - */ - if ( (off_t)malloc_size != size_backup ) - { - close( fd ); - warning("makedepend: File \"%s\" size larger than can fit in size_t. Cannot allocate memory for contents.\n", file); - content->f_p = content->f_base = content->f_end = (char *)malloc(1); - *content->f_p = '\0'; - return(content); - } - - content->f_base = (char *)malloc(malloc_size+1); - if (content->f_base == NULL) - fatalerr("makedepend: Cannot allocate memory to process file \"%s\"\n", file); - if ((bytes_read = read(fd, content->f_base, malloc_size)) < 0) - if ( st.st_mode & S_IFREG ) - fatalerr("makedepend: Failed to read file \"%s\"\n", file); - - close(fd); - content->f_len = bytes_read+1; - content->f_p = content->f_base; - content->f_end = content->f_base + bytes_read; - *content->f_end = '\0'; - content->f_line = 0; - return(content); -} - -void freefile(fp) - struct filepointer *fp; -{ - free(fp->f_base); - free(fp); -} - -char *copy(str) - register char *str; -{ - register char *p = (char *)malloc(strlen(str) + 1); - - strcpy(p, str); - return(p); -} - -int match(str, list) - register char *str, **list; -{ - register int i; - - for (i=0; *list; i++, list++) - if (strcmp(str, *list) == 0) - return(i); - return(-1); -} - -/* - * Get the next line. We only return lines beginning with '#' since that - * is all this program is ever interested in. - */ -char *get_line(filep) - register struct filepointer *filep; -{ - register char *p, /* walking pointer */ - *eof, /* end of file pointer */ - *bol; /* beginning of line pointer */ - register int lineno; /* line number */ - - p = filep->f_p; - eof = filep->f_end; - if (p >= eof) - return((char *)NULL); - lineno = filep->f_line; - - for(bol = p--; ++p < eof; ) { - if (*p == '/' && *(p+1) == '*') { /* consume comments */ - *p++ = ' ', *p++ = ' '; - while (*p) { - if (*p == '*' && *(p+1) == '/') { - *p++ = ' ', *p = ' '; - break; - } - else if (*p == '\n') - lineno++; - *p++ = ' '; - } - continue; - } - else if (*p == '/' && *(p+1) == '/') { /* consume comments */ - *p++ = ' ', *p++ = ' '; - while (*p && *p != '\n') - *p++ = ' '; - if ( *p == '\n' ) - p--; - lineno++; - continue; - } - else if (*p == '\\') { - if (*(p+1) == '\n') { - *p = ' '; - *(p+1) = ' '; - lineno++; - } - } - else if (*p == '\n') { - lineno++; - if (*bol == '#') { - register char *cp; - - *p++ = '\0'; - /* punt lines with just # (yacc generated) */ - for (cp = bol+1; - *cp && (*cp == ' ' || *cp == '\t'); cp++); - if (*cp) goto done; - } - bol = p+1; - } - } - if (*bol != '#') - bol = NULL; -done: - filep->f_p = p; - filep->f_line = lineno; - return(bol); -} - -/* - * Strip the file name down to what we want to see in the Makefile. - * It will have objprefix and objsuffix around it. - */ -char *base_name(file) - register char *file; -{ - register char *p; - - file = copy(file); - for(p=file+strlen(file); p>file && *p != '.'; p--) ; - - if (*p == '.') - *p = '\0'; - - while (p > file) { - if ( *p == '/' || *p == '\\') { - file = p + 1; - break; - }; - p--; - }; - return(file); -} - -#if defined(USG) && !defined(CRAY) && !defined(SVR4) -int rename (from, to) - char *from, *to; -{ - (void) unlink (to); - if (link (from, to) == 0) { - unlink (from); - return 0; - } else { - return -1; - } -} -#endif /* USGISH */ - -void redirect(line, makefile) - char *line, - *makefile; -{ - struct stat st; - FILE *fdin, *fdout; - char backup[ BUFSIZ ], - buf[ BUFSIZ ]; - boolean found = FALSE; - int len; - - /* - * if makefile is "-" then let it pour onto stdout. - */ - if (makefile && *makefile == '-' && *(makefile+1) == '\0') - return; - - /* - * use a default makefile is not specified. - */ - if (!makefile) { - if (stat("Makefile", &st) == 0) - makefile = "Makefile"; - else if (stat("makefile", &st) == 0) - makefile = "makefile"; - else - fatalerr("[mM]akefile is not present\n"); - } - else - stat(makefile, &st); - if ((fdin = fopen(makefile, "r")) == NULL) - fatalerr("cannot open \"%s\"\n", makefile); - sprintf(backup, "%s.bak", makefile); - unlink(backup); -#if defined(WIN32) - fclose(fdin); -#endif - if (rename(makefile, backup) < 0) - fatalerr("cannot rename %s to %s\n", makefile, backup); -#if defined(WIN32) - if ((fdin = fopen(backup, "r")) == NULL) - fatalerr("cannot open \"%s\"\n", backup); -#endif - if ((fdout = freopen(makefile, "w", stdout)) == NULL) - fatalerr("cannot open \"%s\"\n", backup); - len = strlen(line); - while (!found && fgets(buf, BUFSIZ, fdin)) { - if (*buf == '#' && strncmp(line, buf, len) == 0) - found = TRUE; - fputs(buf, fdout); - } - if (!found) { - if (verbose) - warning("Adding new delimiting line \"%s\" and dependencies...\n", - line); - puts(line); /* same as fputs(fdout); but with newline */ - } else if (append) { - while (fgets(buf, BUFSIZ, fdin)) { - fputs(buf, fdout); - } - } - fflush(fdout); -#if defined(USGISH) || defined(USE_CHMOD) - chmod(makefile, st.st_mode); -#else - fchmod(fileno(fdout), st.st_mode); -#endif /* USGISH */ - fclose(fdin); -} - -void fatalerr(char *msg, ...) -{ - va_list args; - fprintf(stderr, "%s: error: ", ProgramName); - va_start(args, msg); - vfprintf(stderr, msg, args); - va_end(args); - exit (1); -} - -void warning(char *msg, ...) -{ -#ifdef DEBUG_MKDEPEND - va_list args; - fprintf(stderr, "%s: warning: ", ProgramName); - va_start(args, msg); - vfprintf(stderr, msg, args); - va_end(args); -#else - (void)msg; -#endif /* DEBUG_MKDEPEND */ -} - -void warning1(char *msg, ...) -{ -#ifdef DEBUG_MKDEPEND - va_list args; - va_start(args, msg); - vfprintf(stderr, msg, args); - va_end(args); -#else - (void)msg; -#endif /* DEBUG_MKDEPEND */ -} - -void convert_slashes(path) - char* path; -{ -#if defined (WNT) - /* - * Convert backslashes to slashes - */ - char *ptr; - if (native_win_slashes) { - for (ptr = (char*)path; *ptr; ++ptr) - if (*ptr == '/') - *ptr = '\\'; - } else { - for (ptr = (char*)path; *ptr; ++ptr) - if (*ptr == '\\') - *ptr = '/'; - }; -#else - (void)path; -#endif -} - -char* append_slash(path) - char* path; -{ - char *new_string; - if ((path[strlen(path) - 1] == '/') || (path[strlen(path) - 1] == '\\')) { - new_string = path; - } else { - new_string = (char*)malloc(sizeof(char) * (strlen(path) + 2)); - strcpy(new_string, path); - if (native_win_slashes) - strcat(new_string, "\\"); - else - strcat(new_string, "/"); - }; - return new_string; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/mkdepend/makefile.mk b/soltools/mkdepend/makefile.mk deleted file mode 100644 index 9c700ff67..000000000 --- a/soltools/mkdepend/makefile.mk +++ /dev/null @@ -1,90 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJNAME=soltools -TARGET=make_makedepend -PRJ=.. -TARGETTYPE=CUI -LIBTARGET=NO -# noadjust here to have dependencies over there -noadjust=TRUE -nodep=true -ENABLE_EXCEPTIONS=TRUE - -.INCLUDE : $(PRJ)$/util$/makefile.pmk -.INCLUDE : settings.mk - -.IF "$(CROSS_COMPILING)"=="YES" -all: - @echo Nothing done when cross-compiling -.ENDIF - -LIBSALCPPRT= -UWINAPILIB= - -CDEFS+=-DNO_X11 -DXP_PC -DHW_THREADS - -.IF "$(COM)" == "MSC" -# C4100: unreferenced formal parameter -# C4131: uses old-style declarator -# C4242: conversion from 'int' to 'char', possible loss of data -# C4706: assignment within conditional expression -CDEFS+=-wd4100 -wd4131 -wd4242 -wd4706 -.ENDIF - -OBJFILES= \ - $(OBJ)$/cppsetup.obj \ - $(OBJ)$/ifparser.obj \ - $(OBJ)$/include.obj \ - $(OBJ)$/main.obj \ - $(OBJ)$/parse.obj \ - $(OBJ)$/pr.obj \ - $(OBJ)$/collectdircontent.obj \ - $(NULL) - -APP1TARGET=makedepend -APP1OBJS=$(OBJFILES) -APP1RPATH=NONE - -.IF "$(COM)"=="MSC" -.IF "$(dbgutil)"=="" -APP1STDLIBS+=msvcprt.lib -.ELSE -APP1STDLIBS+=msvcprtd.lib -CDEFS+=-D_DEBUG -.ENDIF # "$(DBG_UTIL)"=="" -.ENDIF # "$(COM)"=="MSC" - -.IF "$(OS)"=="SOLARIS" -#APP1STDLIBS+=-lstlport -APP1STDLIBS+=-lCstd -.ENDIF - - -.INCLUDE : target.mk - - diff --git a/soltools/mkdepend/mkdepend.man b/soltools/mkdepend/mkdepend.man deleted file mode 100644 index 9c3cdccd9..000000000 --- a/soltools/mkdepend/mkdepend.man +++ /dev/null @@ -1,368 +0,0 @@ -.\" $XConsortium: mkdepend.man,v 1.15 94/04/17 20:10:37 gildea Exp $ -.\" Copyright (c) 1993, 1994 X Consortium -.\" -.\" Permission is hereby granted, free of charge, to any person obtaining a -.\" copy of this software and associated documentation files (the "Software"), -.\" to deal in the Software without restriction, including without limitation -.\" the rights to use, copy, modify, merge, publish, distribute, sublicense, -.\" and/or sell copies of the Software, and to permit persons to whom the -.\" Software furnished to do so, subject to the following conditions: -.\" -.\" The above copyright notice and this permission notice shall be included in -.\" all copies or substantial portions of the Software. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -.\" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -.\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -.\" THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -.\" WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -.\" OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -.\" SOFTWARE. -.\" -.\" Except as contained in this notice, the name of the X Consortium shall not -.\" be used in advertising or otherwise to promote the sale, use or other -.\" dealing in this Software without prior written authorization from the -.\" X Consortium. -.TH MAKEDEPEND 1 "Release 6" "X Version 11" -.UC 4 -.SH NAME -makedepend \- create dependencies in makefiles -.SH SYNOPSIS -.B makedepend -[ -.B \-Dname=def -] [ -.B \-Dname -] [ -.B \-Iincludedir -] [ -.B \-Yincludedir -] [ -.B \-a -] [ -.B \-fmakefile -] [ -.B \-oobjsuffix -] [ -.B \-pobjprefix -] [ -.B \-sstring -] [ -.B \-wwidth -] [ -.B \-v -] [ -.B \-m -] [ -\-\^\- -.B otheroptions -\-\^\- -] -sourcefile .\|.\|. -.br -.SH DESCRIPTION -.B Makedepend -reads each -.I sourcefile -in sequence and parses it like a C-preprocessor, -processing all -.I #include, -.I #define, -.I #undef, -.I #ifdef, -.I #ifndef, -.I #endif, -.I #if -and -.I #else -directives so that it can correctly tell which -.I #include, -directives would be used in a compilation. -Any -.I #include, -directives can reference files having other -.I #include -directives, and parsing will occur in these files as well. -.PP -Every file that a -.I sourcefile -includes, -directly or indirectly, -is what -.B makedepend -calls a "dependency". -These dependencies are then written to a -.I makefile -in such a way that -.B make(1) -will know which object files must be recompiled when a dependency has changed. -.PP -By default, -.B makedepend -places its output in the file named -.I makefile -if it exists, otherwise -.I Makefile. -An alternate makefile may be specified with the -.B \-f -option. -It first searches the makefile for -the line -.sp - # DO NOT DELETE THIS LINE \-\^\- make depend depends on it. -.sp -or one provided with the -.B \-s -option, -as a delimiter for the dependency output. -If it finds it, it will delete everything -following this to the end of the makefile -and put the output after this line. -If it doesn't find it, the program -will append the string to the end of the makefile -and place the output following that. -For each -.I sourcefile -appearing on the command line, -.B makedepend -puts lines in the makefile of the form -.sp - sourcefile.o:\0dfile .\|.\|. -.sp -Where "sourcefile.o" is the name from the command -line with its suffix replaced with ".o", -and "dfile" is a dependency discovered in a -.I #include -directive while parsing -.I sourcefile -or one of the files it included. -.SH EXAMPLE -Normally, -.B makedepend -will be used in a makefile target so that typing "make depend" will -bring the dependencies up to date for the makefile. -For example, -.nf - SRCS\0=\0file1.c\0file2.c\0.\|.\|. - CFLAGS\0=\0\-O\0\-DHACK\0\-I\^.\^.\^/foobar\0\-xyz - depend: - makedepend\0\-\^\-\0$(CFLAGS)\0\-\^\-\0$(SRCS) -.fi -.SH OPTIONS -.B Makedepend -will ignore any option that it does not understand so that you may use -the same arguments that you would for -.B cc(1). -.TP 5 -.B \-Dname=def or \-Dname -Define. -This places a definition for -.I name -in -.B makedepend's -symbol table. -Without -.I =def -the symbol becomes defined as "1". -.TP 5 -.B \-Iincludedir -Include directory. -This option tells -.B makedepend -to prepend -.I includedir -to its list of directories to search when it encounters -a -.I #include -directive. -By default, -.B makedepend -only searches the standard include directories (usually /usr/include -and possibly a compiler-dependent directory). -.TP 5 -.B \-Yincludedir -Replace all of the standard include directories with the single specified -include directory; you can omit the -.I includedir -to simply prevent searching the standard include directories. -.TP 5 -.B \-a -Append the dependencies to the end of the file instead of replacing them. -.TP 5 -.B \-fmakefile -Filename. -This allows you to specify an alternate makefile in which -.B makedepend -can place its output. -.TP 5 -.B \-oobjsuffix -Object file suffix. -Some systems may have object files whose suffix is something other -than ".o". -This option allows you to specify another suffix, such as -".b" with -.I -o.b -or ":obj" -with -.I -o:obj -and so forth. -.TP 5 -.B \-pobjprefix -Object file prefix. -The prefix is prepended to the name of the object file. This is -usually used to designate a different directory for the object file. -The default is the empty string. -.TP 5 -.B \-sstring -Starting string delimiter. -This option permits you to specify -a different string for -.B makedepend -to look for in the makefile. -.TP 5 -.B \-wwidth -Line width. -Normally, -.B makedepend -will ensure that every output line that it writes will be no wider than -78 characters for the sake of readability. -This option enables you to change this width. -.TP 5 -.B \-v -Verbose operation. -This option causes -.B makedepend -to emit the list of files included by each input file on standard output. -.TP 5 -.B \-m -Warn about multiple inclusion. -This option causes -.B makedepend -to produce a warning if any input file includes another file more than -once. In previous versions of -.B makedepend -this was the default behavior; the default has been changed to better -match the behavior of the C compiler, which does not consider multiple -inclusion to be an error. This option is provided for backward -compatibility, and to aid in debugging problems related to multiple -inclusion. -.TP 5 -.B "\-\^\- options \-\^\-" -If -.B makedepend -encounters a double hyphen (\-\^\-) in the argument list, -then any unrecognized argument following it -will be silently ignored; a second double hyphen terminates this -special treatment. -In this way, -.B makedepend -can be made to safely ignore esoteric compiler arguments that might -normally be found in a CFLAGS -.B make -macro (see the -.B EXAMPLE -section above). -All options that -.B makedepend -recognizes and appear between the pair of double hyphens -are processed normally. -.SH ALGORITHM -The approach used in this program enables it to run an order of magnitude -faster than any other "dependency generator" I have ever seen. -Central to this performance are two assumptions: -that all files compiled by a single -makefile will be compiled with roughly the same -.I -I -and -.I -D -options; -and that most files in a single directory will include largely the -same files. -.PP -Given these assumptions, -.B makedepend -expects to be called once for each makefile, with -all source files that are maintained by the -makefile appearing on the command line. -It parses each source and include -file exactly once, maintaining an internal symbol table -for each. -Thus, the first file on the command line will take an amount of time -proportional to the amount of time that a normal C preprocessor takes. -But on subsequent files, if it encounter's an include file -that it has already parsed, it does not parse it again. -.PP -For example, -imagine you are compiling two files, -.I file1.c -and -.I file2.c, -they each include the header file -.I header.h, -and the file -.I header.h -in turn includes the files -.I def1.h -and -.I def2.h. -When you run the command -.sp - makedepend\0file1.c\0file2.c -.sp -.B makedepend -will parse -.I file1.c -and consequently, -.I header.h -and then -.I def1.h -and -.I def2.h. -It then decides that the dependencies for this file are -.sp - file1.o:\0header.h\0def1.h\0def2.h -.sp -But when the program parses -.I file2.c -and discovers that it, too, includes -.I header.h, -it does not parse the file, -but simply adds -.I header.h, -.I def1.h -and -.I def2.h -to the list of dependencies for -.I file2.o. -.SH "SEE ALSO" -cc(1), make(1) -.SH BUGS -.B makedepend -parses, but does not currently evaluate, the SVR4 -#predicate(token-list) preprocessor expression; -such expressions are simply assumed to be true. -This may cause the wrong -.I #include -directives to be evaluated. -.PP -Imagine you are parsing two files, -say -.I file1.c -and -.I file2.c, -each includes the file -.I def.h. -The list of files that -.I def.h -includes might truly be different when -.I def.h -is included by -.I file1.c -than when it is included by -.I file2.c. -But once -.B makedepend -arrives at a list of dependencies for a file, -it is cast in concrete. -.SH AUTHOR -Todd Brunhoff, Tektronix, Inc. and MIT Project Athena diff --git a/soltools/mkdepend/parse.c b/soltools/mkdepend/parse.c deleted file mode 100644 index 9214750c6..000000000 --- a/soltools/mkdepend/parse.c +++ /dev/null @@ -1,615 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* $XConsortium: parse.c,v 1.30 94/04/17 20:10:38 gildea Exp $ */ -/* - -Copyright (c) 1993, 1994 X Consortium - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. - -*/ - -#include "def.h" -char *hash_lookup( char *symbol, struct symhash *symbols ); -void hash_undefine( char *symbol, struct symhash *symbols ); -int gobble( register struct filepointer *filep, struct inclist *file, - struct inclist *file_red, struct symhash *symbols ); -int deftype ( register char *line, register struct filepointer *filep, - register struct inclist *file_red, register struct inclist *file, - int parse_it, struct symhash *symbols); -int zero_value(register char *exp, register struct filepointer *filep, - register struct inclist *file_red, register struct symhash *symbols); - -extern char *directives[]; -extern struct symhash *maininclist; - -int find_includes(filep, file, file_red, recursion, failOK, incCollection, symbols) - struct filepointer *filep; - struct inclist *file, *file_red; - int recursion; - boolean failOK; - struct IncludesCollection* incCollection; - struct symhash *symbols; -{ - register char *line; - register int type; - boolean recfailOK; - - while ((line = get_line(filep))) { - switch(type = deftype(line, filep, file_red, file, TRUE, symbols)) { - case IF: - doif: - type = find_includes(filep, file, - file_red, recursion+1, failOK, incCollection, symbols); - while ((type == ELIF) || (type == ELIFFALSE) || - (type == ELIFGUESSFALSE)) - type = gobble(filep, file, file_red, symbols); - if (type == ELSE) - gobble(filep, file, file_red, symbols); - break; - case IFFALSE: - case IFGUESSFALSE: - doiffalse: - if (type == IFGUESSFALSE || type == ELIFGUESSFALSE) - recfailOK = TRUE; - else - recfailOK = failOK; - type = gobble(filep, file, file_red, symbols); - if (type == ELSE) - find_includes(filep, file, - file_red, recursion+1, recfailOK, incCollection, symbols); - else - if (type == ELIF) - goto doif; - else - if ((type == ELIFFALSE) || (type == ELIFGUESSFALSE)) - goto doiffalse; - break; - case IFDEF: - case IFNDEF: - if ((type == IFDEF && hash_lookup(line, symbols)) - || (type == IFNDEF && !hash_lookup(line, symbols))) { - debug(1,(type == IFNDEF ? - "line %d: %s !def'd in %s via %s%s\n" : "", - filep->f_line, line, - file->i_file, file_red->i_file, ": doit")); - type = find_includes(filep, file, - file_red, recursion+1, failOK, incCollection, symbols); - while (type == ELIF || type == ELIFFALSE || type == ELIFGUESSFALSE) - type = gobble(filep, file, file_red, symbols); - if (type == ELSE) - gobble(filep, file, file_red, symbols); - } - else { - debug(1,(type == IFDEF ? - "line %d: %s !def'd in %s via %s%s\n" : "", - filep->f_line, line, - file->i_file, file_red->i_file, ": gobble")); - type = gobble(filep, file, file_red, symbols); - if (type == ELSE) - find_includes(filep, file, - file_red, recursion + 1, failOK, incCollection, symbols); - else if (type == ELIF) - goto doif; - else if (type == ELIFFALSE || type == ELIFGUESSFALSE) - goto doiffalse; - } - break; - case ELSE: - case ELIFFALSE: - case ELIFGUESSFALSE: - case ELIF: - if (!recursion) - gobble(filep, file, file_red, symbols); - case ENDIF: - if (recursion) - return(type); - case DEFINE: - define(line, &symbols); - break; - case UNDEF: - if (!*line) { - warning("%s, line %d: incomplete undef == \"%s\"\n", - file_red->i_file, filep->f_line, line); - break; - } - hash_undefine(line, symbols); - break; - case INCLUDE: - add_include(filep, file, file_red, line, FALSE, failOK, incCollection, symbols); - break; - case INCLUDEDOT: - add_include(filep, file, file_red, line, TRUE, failOK, incCollection, symbols); - break; - case ERROR: - warning("%s: %d: %s\n", file_red->i_file, - filep->f_line, line); - break; - - case PRAGMA: - case IDENT: - case SCCS: - case EJECT: - break; - case -1: - warning("%s", file_red->i_file); - if (file_red != file) - warning1(" (reading %s)", file->i_file); - warning1(", line %d: unknown directive == \"%s\"\n", - filep->f_line, line); - break; - case -2: - warning("%s", file_red->i_file); - if (file_red != file) - warning1(" (reading %s)", file->i_file); - warning1(", line %d: incomplete include == \"%s\"\n", - filep->f_line, line); - break; - } - } - return(-1); -} - -int gobble(filep, file, file_red, symbols) - register struct filepointer *filep; - struct inclist *file, *file_red; - struct symhash *symbols; -{ - register char *line; - register int type; - - while ((line = get_line(filep))) { - switch(type = deftype(line, filep, file_red, file, FALSE, symbols)) { - case IF: - case IFFALSE: - case IFGUESSFALSE: - case IFDEF: - case IFNDEF: - type = gobble(filep, file, file_red, symbols); - while ((type == ELIF) || (type == ELIFFALSE) || - (type == ELIFGUESSFALSE)) - type = gobble(filep, file, file_red, symbols); - if (type == ELSE) - (void)gobble(filep, file, file_red, symbols); - break; - case ELSE: - case ENDIF: - debug(0,("%s, line %d: #%s\n", - file->i_file, filep->f_line, - directives[type])); - return(type); - case DEFINE: - case UNDEF: - case INCLUDE: - case INCLUDEDOT: - case PRAGMA: - case ERROR: - case IDENT: - case SCCS: - case EJECT: - break; - case ELIF: - case ELIFFALSE: - case ELIFGUESSFALSE: - return(type); - case -1: - warning("%s, line %d: unknown directive == \"%s\"\n", - file_red->i_file, filep->f_line, line); - break; - } - } - return(-1); -} - -/* - * Decide what type of # directive this line is. - */ -int deftype (line, filep, file_red, file, parse_it, symbols) - register char *line; - register struct filepointer *filep; - register struct inclist *file_red, *file; - int parse_it; - struct symhash *symbols; -{ - register char *p; - char *directive, savechar; - register int ret; - - /* - * Parse the directive... - */ - directive=line+1; - while (*directive == ' ' || *directive == '\t') - directive++; - - p = directive; - while (*p >= 'a' && *p <= 'z') - p++; - savechar = *p; - *p = '\0'; - ret = match(directive, directives); - *p = savechar; - - /* If we don't recognize this compiler directive or we happen to just - * be gobbling up text while waiting for an #endif or #elif or #else - * in the case of an #elif we must check the zero_value and return an - * ELIF or an ELIFFALSE. - */ - - if (ret == ELIF && !parse_it) - { - while (*p == ' ' || *p == '\t') - p++; - /* - * parse an expression. - */ - debug(0,("%s, line %d: #elif %s ", - file->i_file, filep->f_line, p)); - ret = zero_value(p, filep, file_red, symbols); - if (ret != IF) - { - debug(0,("false...\n")); - if (ret == IFFALSE) - return(ELIFFALSE); - else - return(ELIFGUESSFALSE); - } - else - { - debug(0,("true...\n")); - return(ELIF); - } - } - - if (ret < 0 || ! parse_it) - return(ret); - - /* - * now decide how to parse the directive, and do it. - */ - while (*p == ' ' || *p == '\t') - p++; - switch (ret) { - case IF: - /* - * parse an expression. - */ - ret = zero_value(p, filep, file_red, symbols); - debug(0,("%s, line %d: %s #if %s\n", - file->i_file, filep->f_line, ret?"false":"true", p)); - break; - case IFDEF: - case IFNDEF: - debug(0,("%s, line %d: #%s %s\n", - file->i_file, filep->f_line, directives[ret], p)); - case UNDEF: - /* - * separate the name of a single symbol. - */ - while (isalnum(*p) || *p == '_') - *line++ = *p++; - *line = '\0'; - break; - case INCLUDE: - debug(2,("%s, line %d: #include %s\n", - file->i_file, filep->f_line, p)); - - /* Support ANSI macro substitution */ - { - char *sym = hash_lookup(p, symbols); - while (sym) - { - p = sym; - debug(3,("%s : #includes SYMBOL %s\n", - file->i_incstring, - sym)); - /* mark file as having included a 'soft include' */ - file->i_included_sym = TRUE; - sym = hash_lookup(p, symbols); - } - } - - /* - * Separate the name of the include file. - */ - while (*p && *p != '"' && *p != '<') - p++; - if (! *p) - return(-2); - if (*p++ == '"') { - ret = INCLUDEDOT; - while (*p && *p != '"') - *line++ = *p++; - } else - while (*p && *p != '>') - *line++ = *p++; - *line = '\0'; - break; - case DEFINE: - /* - * copy the definition back to the beginning of the line. - */ - memmove (line, p, strlen(p)); - break; - case ELSE: - case ENDIF: - case ELIF: - case PRAGMA: - case ERROR: - case IDENT: - case SCCS: - case EJECT: - debug(0,("%s, line %d: #%s\n", - file->i_file, filep->f_line, directives[ret])); - /* - * nothing to do. - */ - break; - } - return(ret); -} - -/* - * HACK! - so that we do not have to introduce 'symbols' in each cppsetup.c - * function... It's safe, functions from cppsetup.c don't return here. - */ -struct symhash *global_symbols = NULL; - -char * isdefined( symbol ) - register char *symbol; -{ - return hash_lookup( symbol, global_symbols ); -} - -/* - * Return type based on if the #if expression evaluates to 0 - */ -int zero_value(exp, filep, file_red, symbols) - register char *exp; - register struct filepointer *filep; - register struct inclist *file_red; - register struct symhash *symbols; -{ - global_symbols = symbols; /* HACK! see above */ - if (cppsetup(exp, filep, file_red)) - return(IFFALSE); - else - return(IF); -} - -void define( def, symbols ) - char *def; - struct symhash **symbols; -{ - char *val; - - /* Separate symbol name and its value */ - val = def; - while (isalnum(*val) || *val == '_') - val++; - if (*val) - *val++ = '\0'; - while (*val == ' ' || *val == '\t') - val++; - - if (!*val) - val = "1"; - hash_define( def, val, symbols ); -} - -static int hash( str ) - register char *str; -{ - /* Hash (Kernighan and Ritchie) */ - register unsigned int hashval = 0; - - for ( ; *str; str++ ) - { - hashval = ( hashval * SYMHASHSEED ) + ( *str ); - } - - return hashval & ( SYMHASHMEMBERS - 1 ); -} - -struct symhash *hash_copy( symbols ) - struct symhash *symbols; -{ - int i; - struct symhash *newsym; - if ( !symbols ) - return NULL; - - newsym = (struct symhash *) malloc( sizeof( struct symhash ) ); - - for ( i = 0; i < SYMHASHMEMBERS; ++i ) - { - if ( !symbols->s_pairs[ i ] ) - newsym->s_pairs[ i ] = NULL; - else - { - struct pair *it = symbols->s_pairs[ i ]; - struct pair *nw = newsym->s_pairs[ i ] = (struct pair*) malloc( sizeof( struct pair ) ); - nw->p_name = it->p_name; - nw->p_value = it->p_value; - nw->p_next = NULL; - - while ( it->p_next ) - { - nw->p_next = (struct pair*) malloc( sizeof( struct pair ) ); - it = it->p_next; - nw = nw->p_next; - nw->p_name = it->p_name; - nw->p_value = it->p_value; - nw->p_next = NULL; - } - } - } - return newsym; -} - -void hash_free( symbols ) - struct symhash *symbols; -{ - int i; - - if ( !symbols ) - return; - - for ( i = 0; i < SYMHASHMEMBERS; ++i ) - { - struct pair *it = symbols->s_pairs[ i ]; - struct pair *next; - while ( it ) - { - next = it->p_next; - free( it ); - it = next; - } - } - free( symbols->s_pairs ); -} - -void hash_define( name, val, symbols ) - char *name, *val; - struct symhash **symbols; -{ - int hashval; - struct pair *it; - - if ( !symbols ) - return; - - /* Make space if it's needed */ - if ( *symbols == NULL ) - { - int i; - - *symbols = (struct symhash *) malloc( sizeof( struct symhash ) ); - if ( *symbols == NULL ) - fatalerr( "malloc()/realloc() failure in insert_defn()\n" ); - - for ( i = 0; i < SYMHASHMEMBERS; ++i ) - (*symbols)->s_pairs[i] = NULL; - } - - hashval = hash( name ); - it = (*symbols)->s_pairs[ hashval ]; - - /* Replace/insert the symbol */ - if ( it == NULL ) - { - it = (*symbols)->s_pairs[ hashval ] = (struct pair*) malloc( sizeof( struct pair ) ); - it->p_name = copy( name ); - it->p_value = copy( val ); - it->p_next = NULL; - } - else if ( strcmp( it->p_name, name ) == 0 ) - { - it->p_value = copy( val ); - } - else - { - while ( it->p_next && ( strcmp( it->p_next->p_name, name ) != 0 ) ) - { - it = it->p_next; - } - if ( it->p_next ) - it->p_next->p_name = copy( name ); - else - { - it->p_next = (struct pair*) malloc( sizeof( struct pair ) ); - it->p_next->p_name = copy( name ); - it->p_next->p_value = copy( val ); - it->p_next->p_next = NULL; - } - } -} - -char *hash_lookup( symbol, symbols ) - char *symbol; - struct symhash *symbols; -{ - struct pair *it; - - if ( !symbols ) - return NULL; - - it = symbols->s_pairs[ hash( symbol ) ]; - - while ( it && ( strcmp( it->p_name, symbol ) != 0 ) ) - { - it = it->p_next; - } - if ( it ) - return it->p_value; - - return NULL; -} - -void hash_undefine( symbol, symbols ) - char *symbol; - struct symhash *symbols; -{ - int hashval; - struct pair *it; - - if ( !symbols ) - return; - - hashval = hash( symbol ); - it = symbols->s_pairs[ hashval ]; - - /* Replace/insert the symbol */ - if ( it == NULL ) - return; - else if ( strcmp( it->p_name, symbol ) == 0 ) - { - if ( it->p_next ) - { - struct pair *tmp; - it->p_name = it->p_next->p_name; - it->p_value = it->p_next->p_value; - tmp = it->p_next->p_next; - free( it->p_next ); - it->p_next = tmp; - } - else - { - free( it ); - symbols->s_pairs[ hashval ] = NULL; - } - } - else - { - while ( it->p_next && ( strcmp( it->p_next->p_name, symbol ) != 0 ) ) - { - it = it->p_next; - } - if ( it->p_next ) - { - struct pair *tmp = it->p_next; - it->p_next = it->p_next->p_next; - free( tmp ); - } - } -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/mkdepend/pr.c b/soltools/mkdepend/pr.c deleted file mode 100644 index e0d5ff5cc..000000000 --- a/soltools/mkdepend/pr.c +++ /dev/null @@ -1,140 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* $XConsortium: pr.c,v 1.17 94/04/17 20:10:38 gildea Exp $ */ -/* - -Copyright (c) 1993, 1994 X Consortium - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of the X Consortium shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from the X Consortium. - -*/ - -#include "def.h" -#include <string.h> -void pr( struct inclist *ip, char *file,char *base); - -extern struct inclist inclist[ MAXFILES ], - *inclistp; -extern char *objprefix; -extern char *objsuffix; -extern int width; -extern boolean printed; -extern boolean verbose; -extern boolean show_where_not; - -void add_include(filep, file, file_red, include, dot, failOK, incCollection, symbols) - struct filepointer *filep; - struct inclist *file, *file_red; - char *include; - boolean dot; - boolean failOK; - struct IncludesCollection* incCollection; - struct symhash *symbols; -{ - register struct inclist *newfile; - register struct filepointer *content; - - /* - * First decide what the pathname of this include file really is. - */ - newfile = inc_path(file->i_file, include, dot, incCollection); - if (newfile == NULL) { - if (failOK) - return; - if (file != file_red) - warning("%s (reading %s, line %d): ", - file_red->i_file, file->i_file, filep->f_line); - else - warning("%s, line %d: ", file->i_file, filep->f_line); - warning1("cannot find include file \"%s\"\n", include); - show_where_not = TRUE; - newfile = inc_path(file->i_file, include, dot, incCollection); - show_where_not = FALSE; - } - - if (newfile) { - - /* Only add new dependency files if they don't have "/usr/include" in them. */ - if (!(newfile && newfile->i_file && strstr(newfile->i_file, "/usr/"))) { - included_by(file, newfile); - } - - if (!newfile->i_searched) { - newfile->i_searched = TRUE; - content = getfile(newfile->i_file); - find_includes(content, newfile, file_red, 0, failOK, incCollection, symbols); - freefile(content); - } - } -} - -void recursive_pr_include(head, file, base) - register struct inclist *head; - register char *file, *base; -{ - register int i; - - if (head->i_marked) - return; - head->i_marked = TRUE; - if (head->i_file != file) - pr(head, file, base); - for (i=0; i<head->i_listlen; i++) - recursive_pr_include(head->i_list[ i ], file, base); -} - -void pr(ip, file, base) - register struct inclist *ip; - char *file, *base; -{ - static char *lastfile; - static int current_len; - register int len, i; - char buf[ BUFSIZ ]; - - printed = TRUE; - len = (int)strlen(ip->i_file)+1; - if (current_len + len > width || file != lastfile) { - lastfile = file; - sprintf(buf, "\n%s%s%s: %s", objprefix, base, objsuffix, - ip->i_file); - len = current_len = (int)strlen(buf); - } - else { - buf[0] = ' '; - strcpy(buf+1, ip->i_file); - current_len += len; - } - fwrite(buf, len, 1, stdout); - - /* - * If verbose is set, then print out what this file includes. - */ - if (! verbose || ip->i_list == NULL || ip->i_notified) - return; - ip->i_notified = TRUE; - lastfile = NULL; - printf("\n# %s includes:", ip->i_file); - for (i=0; i<ip->i_listlen; i++) - printf("\n#\t%s", ip->i_list[ i ]->i_incstring); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/prj/build.lst b/soltools/prj/build.lst deleted file mode 100644 index 78eb3fc69..000000000 --- a/soltools/prj/build.lst +++ /dev/null @@ -1,13 +0,0 @@ -so soltools : solenv SUN:so_prereq NULL -so soltools usr1 - all so_usr1 NULL -so soltools\inc get - all so_inc NULL -so soltools\ldump nmake - w so_ldump so_mkdep NULL -so soltools\winunistd nmake - n so_wunistd NULL -so soltools\mkdepend nmake - all so_mkdep so_wunistd.n NULL -so soltools\checkdll nmake - u so_chkdl so_adjvis.u so_mkdep NULL -so soltools\cpp nmake - all so_cpp__ so_mkdep so_adjvis.u NULL -so soltools\javadep nmake - all so_jvdep so_mkdep so_adjvis.u NULL -so soltools\support nmake - all so_supp so_mkdep so_adjvis.u NULL -so soltools\giparser nmake - all so_gip so_supp so_adjvis.u NULL -so soltools\adjustvisibility nmake - u so_adjvis so_mkdep NULL -so soltools\testhxx nmake - all so_testhxx so_mkdep NULL diff --git a/soltools/prj/d.lst b/soltools/prj/d.lst deleted file mode 100644 index 409b94aa0..000000000 --- a/soltools/prj/d.lst +++ /dev/null @@ -1,11 +0,0 @@ -..\%__SRC%\bin\ldump4.exe %_DEST%\bin\ldump4.exe -..\%__SRC%\bin\makedepend.exe %_DEST%\bin\makedepend.exe -..\%__SRC%\bin\makedepend %_DEST%\bin\makedepend -..\%__SRC%\bin\adjustvisibility %_DEST%\bin\adjustvisibility -..\%__SRC%\bin\javadep.exe %_DEST%\bin\javadep.exe -..\%__SRC%\bin\javadep %_DEST%\bin\javadep -..\%__SRC%\bin\checkdll %_DEST%\bin\checkdll -..\%__SRC%\bin\cpp.exe %_DEST%\bin\cpplcc.exe -..\%__SRC%\bin\cpp %_DEST%\bin\cpp.lcc -..\%__SRC%\inc\unistd.h %_DEST%\inc\unistd.h -..\%__SRC%\bin\testhxx* %_DEST%\bin\testhxx* diff --git a/soltools/support/makefile.mk b/soltools/support/makefile.mk deleted file mode 100644 index 8628b5234..000000000 --- a/soltools/support/makefile.mk +++ /dev/null @@ -1,58 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=.. - -PRJNAME=soltools -TARGET=soltools_support -TARGETTYPE=CUI - -# --- Settings ----------------------------------------------------- - -.INCLUDE : $(PRJ)$/util$/makefile.pmk -.INCLUDE : settings.mk - -.IF "$(CROSS_COMPILING)"=="YES" -all: - @echo Nothing done when cross-compiling -.ENDIF - -# --- Files -------------------------------------------------------- - -OBJFILES= \ - $(OBJ)$/simstr.obj - -SLOFILES= \ - $(SLO)$/simstr.obj - - - -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk - - diff --git a/soltools/support/simstr.cxx b/soltools/support/simstr.cxx deleted file mode 100644 index 81212f691..000000000 --- a/soltools/support/simstr.cxx +++ /dev/null @@ -1,835 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_soltools.hxx" - - -#include <simstr.hxx> - -#include <string.h> // strlen(), memcpy(), memset() -#include <ctype.h> // tolower() -#include <limits.h> // INT_MAX - -const char NULCH = '\0'; -const int NO_POS = -1; - - -Simstr::Simstr(const char * s_) -{ - if (s_ == 0) - { - len = 0; - sz = new char[1]; - *sz = 0; - } - else - { - len = (int)strlen(s_); - sz = new char[len+1]; - memcpy(sz,s_,len+1); - } -} - -Simstr::Simstr(const char * anybytes, int nrOfBytes) -{ - if (anybytes == 0) - { - len = 0; - sz = new char[1]; - *sz = 0; - return; - } - - int slen = static_cast<int>( strlen(anybytes) ); - - len = slen < nrOfBytes - ? slen - : nrOfBytes; - sz = new char[len+1]; - memcpy( sz, anybytes, len ); - *( sz + len ) = 0; -} - -Simstr::Simstr(char c, int anzahl) -{ - if (anzahl < 1) - { - len = 0; - sz = new char[1]; - *sz = 0; - } - else - { - len = anzahl; - sz = new char[len+1]; - memset(sz,c,anzahl); - sz[len] = 0; - } -} - -Simstr::Simstr( const char * anybytes, - int firstBytesPos, - int nrOfBytes) -{ - unsigned slen = (unsigned)strlen(anybytes); - if (anybytes == 0 || slen <= unsigned(firstBytesPos)) - { - len = 0; - sz = new char[1]; - *sz = 0; - } - else - { - int maxLen = slen - unsigned(firstBytesPos); - len = maxLen < nrOfBytes - ? maxLen - : nrOfBytes; - sz = new char[len+1]; - memcpy(sz,anybytes+firstBytesPos,len); - *(sz+len) = 0; - } -} - - -Simstr::Simstr(const Simstr & S) -{ - len = S.len; - sz = new char[len+1]; - memcpy(sz,S.sz,len+1); -} - -Simstr & Simstr::operator=(const Simstr & S) -{ - if (sz == S.sz) - return *this; - - delete [] sz; - - len = S.len; - sz = new char[len+1]; - memcpy(sz,S.sz,len+1); - - return *this; -} - -Simstr::~Simstr() -{ - delete [] sz; -} - -char & -Simstr::ch(int n) -{ - static char nullCh = NULCH; - nullCh = NULCH; - if (n >= long(len) || n < 0) - return nullCh; - else - return sz[unsigned(n)]; -} - -const Simstr & -Simstr::null_() -{ - static Simstr aNull_; - return aNull_; -} - - -Simstr -Simstr::operator+(const Simstr & S) const -{ - Simstr ret = sz; - ret.push_back(S); - return ret; -} - -Simstr & -Simstr::operator+=(const Simstr & S) -{ - push_back(S); - return *this; -} - -Simstr & -Simstr::operator+=(const char * s_) -{ - Simstr a(s_); - push_back(a); - return *this; -} - - -// REL - -bool -Simstr::operator==(const Simstr & S) const -{ return !strcmp(sz,S.sz) ? true : false; } - -bool -Simstr::operator!=(const Simstr & S) const -{ return strcmp(sz,S.sz) ? true : false; } - -bool -Simstr::operator<(const Simstr & S) const -{ return (strcmp(sz,S.sz) < 0) ? true : false; } - -bool -Simstr::operator>(const Simstr & S) const -{ return (strcmp(sz,S.sz) > 0) ? true : false; } - -bool -Simstr::operator<=(const Simstr & S) const -{ return (strcmp(sz,S.sz) <= 0) ? true : false; } - -bool -Simstr::operator>=(const Simstr & S) const -{ return (strcmp(sz,S.sz) >= 0) ? true : false; } - - - - -// ************** LIST - Funktionen ***************** - - -// Einzelzugriff - -char -Simstr::get(int n) const { return (n >= len || n < 0) ? 0 : sz[n]; } - -char -Simstr::get_front() const { return sz[0]; } - -char -Simstr::get_back() const { return len ? sz[len-1] : 0; } - -Simstr -Simstr::get(int startPos, int anzahl) const -{ - if (startPos >= len || startPos < 0 || anzahl < 1) - return ""; - - int anz = len - startPos < anzahl ? len - startPos : anzahl; - - Simstr ret(' ',anz); - memcpy(ret.sz, sz+startPos, anz); - return ret; -} - -Simstr -Simstr::get_front(int anzahl) const -{ - int anz = len < anzahl ? len : anzahl; - if (anz < 1) - return ""; - - Simstr ret(' ',anz); - memcpy(ret.sz, sz, anz); - return ret; -} - -Simstr -Simstr::get_back(int anzahl) const -{ - int anz = len < anzahl ? len : anzahl; - if (anz < 1) - return ""; - int start = len-anz; - - Simstr ret(' ',anz); - memcpy(ret.sz, sz+start, anz); - return ret; -} - -Simstr -Simstr::get_first_token(char c) const -{ - int posc = pos_first(c); - if (posc != NO_POS) - return get_front(posc); - else - return sz; -} - -Simstr -Simstr::get_last_token(char c) const -{ - int posc = pos_last(c); - if (posc != NO_POS) - return get_back(len-posc-1); - else - return sz; -} - - - -// Insert - -void -Simstr::insert(int pos, char c) -{ - if (pos < 0 || pos > len) - return; - - char * result = new char[len+2]; - - memcpy(result,sz,pos); - result[pos] = c; - memcpy(result+pos+1,sz+pos,len-pos+1); - - delete [] sz; - sz = result; - len++; -} - -void -Simstr::push_front(char c) -{ - char * result = new char[len+2]; - - result[0] = c; - memcpy(result+1,sz,len+1); - - delete [] sz; - sz = result; - len++; -} - -void -Simstr::push_back(char c) -{ - char * result = new char[len+2]; - - memcpy(result,sz,len); - result[len] = c; - result[len+1] = 0; - - delete [] sz; - sz = result; - len++; -} - -void -Simstr::insert(int pos, const Simstr & S) -{ - if (pos < 0 || pos > len) - return; - - char * result = new char[len+1+S.len]; - - memcpy(result,sz,pos); - memcpy(result+pos,S.sz,S.len); - memcpy(result+pos+S.len,sz+pos,len-pos+1); - - delete [] sz; - sz = result; - len += S.len; -} - -void -Simstr::push_front(const Simstr & S) -{ - char * result = new char[len+1+S.len]; - - memcpy(result,S.sz,S.len); - memcpy(result+S.len,sz,len+1); - - delete [] sz; - sz = result; - len += S.len; -} - -void -Simstr::push_back(const Simstr & S) -{ - char * result = new char[len+1+S.len]; - - memcpy(result,sz,len); - memcpy(result+len,S.sz,S.len+1); - - delete [] sz; - sz = result; - len += S.len; -} - - -// Remove - -void -Simstr::remove(int pos, int anzahl) -{ - if (pos >= len || pos < 0 || anzahl < 1) - return; - - int anz = len - pos < anzahl ? len - pos : anzahl; - - char * result = new char[len-anz+1]; - - memcpy(result,sz,pos); - memcpy(result+pos,sz+pos+anz,len-pos-anz+1); - - delete [] sz; - sz = result; - len -= anz; -} - -void -Simstr::remove_trailing_blanks() -{ - int newlen = len-1; - for ( ; newlen > 1 && sz[newlen] <= 32; --newlen ) {} - - if (newlen < len-1) - remove ( newlen+1, len-newlen); -} - -void -Simstr::pop_front(int anzahl) -{ - if (anzahl < 1) - return; - int anz = len < anzahl ? len : anzahl; - - char * result = new char[len-anz+1]; - - memcpy(result,sz+anz,len-anz+1); - - delete [] sz; - sz = result; - len -= anz; -} - -void -Simstr::pop_back(int anzahl) -{ - if (anzahl < 1) - return; - - int anz = len < anzahl ? len : anzahl; - - char * result = new char[len-anz+1]; - - memcpy(result,sz,len-anz); - result[len-anz] = 0; - - delete [] sz; - sz = result; - len -= anz; -} - -void -Simstr::rem_back_from(int removeStartPos) -{ - if (removeStartPos != NO_POS) - pop_back(len-removeStartPos); -} - -void -Simstr::remove_all(char c) -{ - if (!len) - return; - char * result = new char[len]; - int i,j=0; - for (i = 0; i < len; i++) - if (sz[i] != c) - result[j++] = sz[i]; - - delete [] sz; - sz = new char[j+1]; - memcpy(sz,result,j); - sz[j] = 0; - len = j; - delete [] result; -} - -void -Simstr::remove_all(const Simstr & S) -{ - int pos; - while ( (pos=pos_first(S)) != NO_POS ) - remove(pos,S.len); -} - -void -Simstr::strip(char c) -{ - int start = 0; - if (c == ' ') - { // Sonderbehandlung: SPC entfernt auch TABs: - while ( start < len - ? sz[start] == ' ' - || sz[start] == '\t' - : false ) - start++; - } - else - { - while (start < len && sz[start] == c) - start++; - } - - int ende = len-1; - if (c == ' ') - { // Sonderbehandlung: SPC entfernt auch TABs: - while ( ende >= start - ? sz[ende] == ' ' - || sz[ende] == '\t' - : false ) - ende--; - } - else - { - while (ende >= start && sz[ende] == c) - ende--; - } - *this = get(start,ende-start+1); -} - -void -Simstr::empty() -{ - if (len > 0) - { - delete [] sz; - sz = new char[1]; - *sz = 0; - len = 0; - } -} - -Simstr -Simstr::take_first_token(char c) -{ - Simstr ret; - int pos = pos_first(c); - if (pos != NO_POS) - { - ret = get_front(pos); - pop_front(pos+1); - } - else - { - ret = sz; - delete [] sz; - sz = new char[1]; - *sz = NULCH; - len = 0; - } - - return ret; -} - -Simstr -Simstr::take_last_token(char c) -{ - Simstr ret; - int pos = pos_last(c); - if (pos != NO_POS) - { - ret = get_back(len-pos-1); - pop_back(len-pos); - } - else - { - ret = sz; - delete [] sz; - sz = new char[1]; - *sz = NULCH; - len = 0; - } - - return ret; -} - - - -// Find - -int -Simstr::pos_first(char c) const -{ - int i = 0; - for (i = 0; i < len ? sz[i] != c : false; i++) ; - if (i >= len) - return NO_POS; - else - return i; -} - -int -Simstr::pos_first_after( char c, - int startSearchPos) const -{ - int i = 0; - if (startSearchPos >= i) - i = startSearchPos+1; - for (; i < len ? sz[i] != c : false; i++) ; - if (i >= len) - return NO_POS; - else - return i; -} - - -int -Simstr::pos_last(char c) const -{ - int i = 0; - for (i = len-1; i >= 0 ? sz[i] != c : false; i--) ; - if (i < 0) - return NO_POS; - else - return i; -} - -int -Simstr::pos_first(const Simstr & S) const -{ - char * ptr = strstr(sz,S.sz); - if (ptr) - return int(ptr-sz); - else - return NO_POS; -} - -int -Simstr::pos_last(const Simstr & S) const -{ - Simstr vgl; - int i; - for (i = len-S.len; i >= 0 ; i--) - { - vgl = get(i,S.len); - if (vgl == S) - break; - } - if (i >= 0) - return i; - else - return NO_POS; -} - -int -Simstr::count(char c) const -{ - int ret = 0; - for (int i =0; i < len; i++) - if (sz[i] == c) - ret++; - return ret; -} - -bool -Simstr::is_no_text() const -{ - if (!len) - return true; - - int i; - for (i = 0; sz[i] <= 32 && i < len; i++) ; - if (i < len) - return false; - return true; -} - -// Change - -void -Simstr::replace(int pos, char c) -{ - if (pos < 0 || pos >= len) - return; - else - sz[unsigned(pos)] = c; -} - -void -Simstr::replace(int startPos, int anzahl, const Simstr & S) -{ - if (startPos >= len || startPos < 0 || anzahl < 1) - return; - - int anz = len - startPos < anzahl ? len - startPos : anzahl; - - char * result = new char[len-anz+S.len+1]; - - memcpy(result,sz,startPos); - memcpy(result+startPos, S.sz, S.len); - memcpy(result+startPos+S.len, sz+startPos+anz, len-startPos-anz+1); - - delete [] sz; - sz = result; - len = len-anz+S.len; -} - -void -Simstr::replace_all(char oldCh, char newCh) -{ - for (int i=0; i < len; i++) - if (sz[i] == oldCh) - sz[i] = newCh; -} - -void -Simstr::replace_all(const Simstr & oldS, const Simstr & newS) -{ - Simstr vgl; - int i = 0; - while (i <= len-oldS.len) - { - vgl = get(i,oldS.len); - if (strcmp(vgl.sz,oldS.sz) == 0) - { - replace(i,oldS.len,newS); - i += newS.len; - } - else - i++; - } -} - -void -Simstr::to_lower() -{ - for (int i = 0; i < len; i++) - sz[i] = (char) tolower(sz[i]); -} - - - -// Simstr addition -Simstr -operator+(const char * str, const Simstr & S) -{ - Simstr ret = S; - ret.push_front(str); - return ret; -} - -Simstr -operator+(const Simstr & S, const char * str) -{ - Simstr ret = S; - ret.push_back(str); - return ret; -} - -Simstr -operator+(char c, const Simstr & S) -{ - Simstr ret = S; - ret.push_front(c); - return ret; -} - -Simstr -operator+(const Simstr & S, char c) -{ - Simstr ret = S; - ret.push_back(c); - return ret; -} - - -// Simstr-Vergleiche mit char * -bool -operator==(const Simstr & S, const char * str) -{ - return strcmp(S,str) == 0; -} - -bool -operator!=(const Simstr & S, const char * str) -{ - return strcmp(S,str) != 0; -} - -bool -operator<(const Simstr & S, const char * str) -{ - return strcmp(S,str) < 0; -} - -bool -operator>(const Simstr & S, const char * str) -{ - return strcmp(S,str) > 0; -} - -bool -operator<=(const Simstr & S, const char * str) -{ - return strcmp(S,str) <= 0; -} - -bool -operator>=(const Simstr & S, const char * str) -{ - return strcmp(S,str) >= 0; -} - -bool -operator==(const char * str, const Simstr & S) -{ - return strcmp(str,S) == 0; -} - -bool -operator!=(const char * str, const Simstr & S) -{ - return strcmp(str,S) != 0; -} - -bool -operator<(const char * str, const Simstr & S) -{ - return strcmp(str,S) < 0; -} - -bool -operator>(const char * str, const Simstr & S) -{ - return strcmp(str,S) > 0; -} - -bool -operator<=(const char * str, const Simstr & S) -{ - return strcmp(str,S) <= 0; -} - -bool -operator>=(const char * str, const Simstr & S) -{ - return strcmp(str,S) >= 0; -} - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/testSHL/inc/tlog.hxx b/soltools/testSHL/inc/tlog.hxx deleted file mode 100644 index a00cacd15..000000000 --- a/soltools/testSHL/inc/tlog.hxx +++ /dev/null @@ -1,99 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#ifndef _SOLTOOLS_TESTSHL_TLOG_HXX__ -#define _SOLTOOLS_TESTSHL_TLOG_HXX__ - -#include <osl/file.hxx> -#include <rtl/tres.hxx> - -#include "tutil.hxx" - -#include <iostream> - -using namespace std; - -namespace tstutl { - -class tLog { - - // <private_members> - ::osl::File* m_logfile; // fileobject - ::rtl::OUString m_logname; // name of log - // </private_members> - - // <private_methods> - void initialize( const ::rtl::OString& name ); - // </private_methods> - -public: - - // <public_ctors> - tLog() : m_logfile( 0 ) { - } - - tLog( const sal_Char* name ) { - if( name ) { - initialize( name ); - } - else { - m_logfile = 0; - } - - } - // </public_ctors> - - // <dtor> - virtual ~tLog() { - if ( m_logfile ) { - m_logfile->close(); - delete( m_logfile ); - } - } // </dtor> - - // <public_methods> - inline ::rtl::OUString& getName() { return m_logname; } - inline ::osl::File* getFile() { return m_logfile; } - - // open logfile for overwrite (default) or append - ::osl::FileBase::RC open( sal_Bool append = sal_False ); - ::osl::FileBase::RC close(); - - ::osl::FileBase::RC writeRes( ::rtl::TestResult& oRes, sal_Bool v = sal_False , - sal_Bool xml = sal_False ); - - // write methods without (default) or with echo on display - ::osl::FileBase::RC write( const sal_Char* buf, sal_Bool v = sal_False ); - // </public_methods> - -}; // </class_tLog> - -} // </namespace_tstutl> - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/testSHL/inc/tstMgr.hxx b/soltools/testSHL/inc/tstMgr.hxx deleted file mode 100644 index d3c86873c..000000000 --- a/soltools/testSHL/inc/tstMgr.hxx +++ /dev/null @@ -1,75 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#ifndef _SOLTOOLS_TESTSHL_TSTMGR_HXX__ -#define _SOLTOOLS_TESTSHL_TSTMGR_HXX__ - -#include <sal/types.h> - -#include <vector> - -using namespace std; - -// <namespace_tstutl> -namespace tstutl { - -// <class_tstMgr> -class tstMgr { - - // <private_members> - struct tstMgr_Impl; - tstMgr_Impl* pImpl; - // </private_members> - - // <private_methods> - void cleanup(); - // </private_methods> - -public: - tstMgr() : pImpl(0) {} - // <dtor> - ~tstMgr(){ - cleanup(); - } // </dtor> - - - // <public_methods> - sal_Bool initialize( sal_Char* moduleName, sal_Bool boom = sal_False ); - sal_Bool test_Entry( sal_Char* entry, sal_Char* logName = 0 ); - sal_Bool test_Entries( vector< sal_Char* > entries, sal_Char* logName = 0 ); - sal_Bool test_EntriesFromFile( sal_Char* fName, sal_Char* logName = 0 ); - // </public_methods> - -}; // </class_tstMgr> - -} // </namespace_tstutl> - -#endif - - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/testSHL/inc/tutil.hxx b/soltools/testSHL/inc/tutil.hxx deleted file mode 100644 index 06d5b30cc..000000000 --- a/soltools/testSHL/inc/tutil.hxx +++ /dev/null @@ -1,52 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#ifndef _SOLTOOLS_TESTSHL_TUTIL_HXX_ -#define _SOLTOOLS_TESTSHL_TUTIL_HXX__ - -#include <osl/file.hxx> - -using namespace std; - -#include <vector> - -// <namespace_tstutl> -namespace tstutl { - -sal_uInt32 getEntriesFromFile( sal_Char* fName, vector< sal_Char* >& entries ); -::rtl::OUString cnvrtPth( ::rtl::OString sysPth ); - -// string copy, cat, len methods -sal_Char* cpy( sal_Char** dest, const sal_Char* src ); -sal_Char* cat( const sal_Char* str1, const sal_Char* str2 ); -sal_uInt32 ln( const sal_Char* str ); - -} // </namespace_tstutl> - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/testSHL/makefile.mk b/soltools/testSHL/makefile.mk deleted file mode 100644 index 0377137b2..000000000 --- a/soltools/testSHL/makefile.mk +++ /dev/null @@ -1,52 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* -PRJ=.. - -PRJNAME=soltools -TARGET=testshl -TARGETTYPE=CUI - -# --- Settings ----------------------------------------------------- - -.INCLUDE : $(PRJ)$/util$/makefile.pmk -.INCLUDE : settings.mk - -UWINAPILIB=$(0) -LIBSALCPPRT=$(0) - -# ------------------------------------------------------------------ - -APP1TARGET= $(TARGET) -APP1OBJS= $(OBJ)$/$(TARGET).obj -APP1STDLIBS=$(SALLIB)\ - $(SALHELPERLIB) -APP1DEPN= $(LB)$/tstutil.lib -APP1LIBS= $(LB)$/tstutil.lib - -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk diff --git a/soltools/testSHL/testshl.cxx b/soltools/testSHL/testshl.cxx deleted file mode 100644 index 120bddbab..000000000 --- a/soltools/testSHL/testshl.cxx +++ /dev/null @@ -1,96 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_soltools.hxx" - -#include <stdio.h> - -#include "inc/tlog.hxx" - -#include "inc/tstMgr.hxx" - -using namespace tstutl; - -void usage(); -void test_shl( vector< sal_Char* > cmdln, sal_Bool boom ); - -#if (defined UNX) -int main( int argc, char* argv[] ) -#else -int _cdecl main( int argc, char* argv[] ) -#endif -{ - if ( argc < 3 ) { - usage(); - } - sal_Bool boom = sal_False; - vector< sal_Char* > cmdln; - - sal_Int32 i; - for ( i = 1; i < argc; i++ ) { - sal_Char* ptr = argv[i]; - if ( ptr[0] == '-' ) { - boom = sal_True; - } - else { - cmdln.push_back( ptr ); - } - } - if ( cmdln.size() < 3 ) { - cmdln.push_back( 0 ); - } - if ( ! cmdln[0] || ! cmdln[1] ) { - usage(); - } - - test_shl( cmdln, boom ); - - return(0); -} - -void test_shl( vector< sal_Char*> cmdln, sal_Bool boom ) { - - tstMgr tst; - - if ( tst.initialize( cmdln[0], boom )) { - tst.test_EntriesFromFile( cmdln[1], cmdln[2] ); - } - else { - sal_Char* msg = "could not find module\n"; - fprintf( stdout, "%s\n", msg ); - } -} - -void usage(){ - fprintf( stdout, - "USAGE: testSHL shlname scename [logname] [-boom]\n" ); - exit(0); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/testSHL/util/makefile.mk b/soltools/testSHL/util/makefile.mk deleted file mode 100644 index a2582f9c1..000000000 --- a/soltools/testSHL/util/makefile.mk +++ /dev/null @@ -1,45 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* -PRJ=..$/.. - -PRJNAME=soltools -TARGET=tstutil - -# --- Settings ----------------------------------------------------- - -.INCLUDE : settings.mk - -# ------------------------------------------------------------------ - -OBJFILES =\ - $(OBJ)$/tlog.obj \ - $(OBJ)$/tutil.obj \ - $(OBJ)$/tstMgr.obj - -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk diff --git a/soltools/testSHL/util/tlog.cxx b/soltools/testSHL/util/tlog.cxx deleted file mode 100644 index 9f73fc56b..000000000 --- a/soltools/testSHL/util/tlog.cxx +++ /dev/null @@ -1,109 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_soltools.hxx" - -#include "tlog.hxx" - -using namespace std; - -// <namespace_tstutl> -namespace tstutl { - -// <method_initialize> -void tLog::initialize( const ::rtl::OString& name ) { - m_logname = cnvrtPth( name ); - m_logfile = new ::osl::File( m_logname ); -} // </method_initialize> - -// <method_open> -::osl::FileBase::RC tLog::open( sal_Bool append ) { - - if ( m_logfile ) { - ::osl::FileBase::RC ret; - - if ( ! append ) { - ret = ::osl::File::remove( m_logname ); - } - - if( m_logfile->open( osl_File_OpenFlag_Write ) == ::osl::FileBase::E_NOENT ) { - ret = m_logfile->open( osl_File_OpenFlag_Write | osl_File_OpenFlag_Create ); - } - else { - ret = m_logfile->setPos( osl_Pos_End, 0 ); - } - return ret; - } - return ( ::osl::FileBase::E_INVAL ); -} // </method_open> - -// <method_close> -::osl::FileBase::RC tLog::close() { - if ( m_logfile ) { - return m_logfile->close(); - } - return ( ::osl::FileBase::E_INVAL ); -} // </method_close> - -// <method_writeRes> -::osl::FileBase::RC tLog::writeRes( ::rtl::TestResult& oRes, sal_Bool v, sal_Bool xml ) { - ::osl::FileBase::RC ret; - - sal_Char* ptr = oRes.getName(); - ptr = cat( ptr, ";" ); - ptr = cat( ptr, oRes.getResult() ); - ret = write( cat( ptr, "\n" ), v ); - delete [] ptr; - - return( ret ); -} // </method_writeRes> - -// <method_write> -::osl::FileBase::RC tLog::write( const sal_Char* buf, sal_Bool v ) { - - if ( ! m_logfile ) { - fprintf( stderr, "%s", buf ); - return ( ::osl::FileBase::E_NOENT ); - } - sal_uInt64 uBytes=0; - sal_uInt32 len = ln( buf ); - - if ( v ) { - fprintf( stderr, "%s", buf ); - } - return m_logfile->write( buf, len , uBytes ); -} // </method_write> - -} // </namespace_tstutl> - - - - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/testSHL/util/tstMgr.cxx b/soltools/testSHL/util/tstMgr.cxx deleted file mode 100644 index aea1926f2..000000000 --- a/soltools/testSHL/util/tstMgr.cxx +++ /dev/null @@ -1,163 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_soltools.hxx" -#include "tstMgr.hxx" -#include <osl/module.hxx> -#include <rtl/tres.hxx> - -#include "tlog.hxx" - -#include "tutil.hxx" - -using namespace rtl; - -// <namespace_tstutl> -namespace tstutl { - -typedef void* ( tstFunc )( TestResult* ); -void test_Entry_Impl( ::osl::Module& oMod, TestResult* oRes ); - -// <private_members> -struct tstMgr::tstMgr_Impl { - ::osl::Module m_tstmodule; - sal_Bool m_boom; -}; -// </private_members> - -// <method_initialize> -sal_Bool tstMgr::initialize( sal_Char* modName, sal_Bool boom ) { - - ::rtl::OUString tstMod( ::rtl::OUString::createFromAscii( modName ) ); - pImpl = new tstMgr_Impl; - pImpl->m_boom = boom; - return ( pImpl->m_tstmodule.load( tstMod ) ); -} // <method_initialize> - -// <method_test_Entries> -sal_Bool tstMgr::test_Entries( vector< sal_Char* > entries, - sal_Char* logName ) { - - sal_Bool bOK = sal_False; - if ( ! entries.empty() ) { - - bOK = sal_True; - vector< sal_Char* >::iterator iter = entries.begin(); - - tLog log( logName ); - // open testLog - log.open(); - while ( iter != entries.end() ) { - if ( *iter[0] != '#' ) { - ::rtl::TestResult oRes( *iter, pImpl->m_boom ); - test_Entry_Impl( pImpl->m_tstmodule, &oRes ); - bOK &= oRes.getState(); - log.writeRes( oRes ); - } - ++iter; - } - log.close(); - } - return ( bOK ); -} // </method_test_Entries> - -// <method_test_Entry> -sal_Bool tstMgr::test_Entry( sal_Char* entry, sal_Char* logName ) { - - tLog log( logName ); - // open testLog - log.open(); - ::rtl::TestResult oRes( entry, pImpl->m_boom ); - test_Entry_Impl( pImpl->m_tstmodule, &oRes ); - log.writeRes( oRes, sal_True ); - log.close(); - return ( oRes.getState() ); -} // </method_test_Entry> - -// <method_test_EntriesFromFile> -sal_Bool tstMgr::test_EntriesFromFile( sal_Char* fName, sal_Char* logName ) { - - sal_Bool bOK = sal_False; - vector< sal_Char* > entries; - - if ( getEntriesFromFile( fName, entries ) ) { - sal_Bool bOK = test_Entries( entries, logName ); - - vector< sal_Char* >::iterator iter = entries.begin(); - while ( iter != entries.end() ) { - if ( *iter ) { - delete [] *iter; - } - ++iter; - } - } - else { - bOK = test_Entry( fName ); - } - return ( bOK ); - -} // </method_test_EntriesFromFile> - -// <method_cleanup> -void tstMgr::cleanup() { - if ( pImpl ) { - delete pImpl; - } -} // </method_cleanup> - - -// <function_test_Entry_Impl> -void test_Entry_Impl( ::osl::Module& oMod, ::rtl::TestResult* oRes ) { - - tstFunc* pFunc; // entry pointer - ::rtl::OString entryName( "test_" ); // entryname prefix - - // prefix entryname - entryName += oRes->getName(); - - // get entry pointer - pFunc = (tstFunc*) oMod.getSymbol( - ::rtl::OUString::createFromAscii( entryName.getStr() ) ); - - if ( pFunc ) { - // call entry - pFunc( oRes ); - oRes->end(); - } - else { - oRes->end("symbol not found"); - } - // return - return; - -} // </function_test_Entry_Impl> - -} // </namespace_tstutl> - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/testSHL/util/tutil.cxx b/soltools/testSHL/util/tutil.cxx deleted file mode 100644 index 0cf734f31..000000000 --- a/soltools/testSHL/util/tutil.cxx +++ /dev/null @@ -1,149 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_soltools.hxx" -#include "tutil.hxx" - -// <namespace_tstutl> -namespace tstutl { - -// getcwd hack is deprecated as soon as normalizePath works as intend -#ifdef WNT -#define _getcwd getcwd -#include <direct.h> // _getcwd -#else -#include <unistd.h> // getcwd -#endif - -// <function_cnvrtPth> -::rtl::OUString cnvrtPth( ::rtl::OString sysPth ) { - - using ::osl::FileBase; - using ::rtl::OUString; - using ::rtl::OString; - - ::rtl::OUString ret; - sysPth = sysPth.replace( '\\','/' ); - OUString pth( OUString::createFromAscii( sysPth.getStr() ) ); - - if ( sysPth.indexOf("..") != -1 ) { - - // <hack> for osl_normalizePath() can't handle relatives - char buffer[256]; - OString curPth(getcwd(buffer,256)); - // </hack> - OUString nrmCurPth; - FileBase::normalizePath( OUString::createFromAscii( curPth ) , - nrmCurPth ); - FileBase::getAbsolutePath( nrmCurPth, pth, ret ); - } - else { - FileBase::normalizePath( pth, ret ); - } - return ret; - -} // </function_cnvrtPth> - -// <function_getEntriesFromFile> -sal_uInt32 getEntriesFromFile( sal_Char* fName, - vector< sal_Char* >& entries ) { - - ::osl::File inFile( cnvrtPth( fName ) ); - if ( inFile.open( osl_File_OpenFlag_Read ) == ::osl::FileBase::E_None) { - ::rtl::ByteSequence byteSeq; - inFile.readLine( byteSeq ); - while ( byteSeq.getLength() ) { - sal_uInt32 len = byteSeq.getLength(); - sal_uInt32 i; - sal_Char* pEnt = new sal_Char[ len+1 ]; - sal_Char* bsPtr = (sal_Char*)byteSeq.getArray(); - for ( i=0; i<len; i++ ) { - pEnt[i] = bsPtr[i]; - } - pEnt[len] = '\0'; - entries.push_back( pEnt ); - - inFile.readLine( byteSeq ); - } - } - return ( entries.size() ); - -} // </function_getEntriesFromFile> - -// <function_cpy> -sal_Char* cpy( sal_Char** dest, const sal_Char* src ) { - - *dest = new sal_Char[ ln(src)+1 ]; - // set pointer - sal_Char* pdest = *dest; - const sal_Char* psrc = src; - - // copy string by char - while( *pdest++ = *psrc++ ); - - return ( *dest ); - -} // </function_cpy> - -// <function_cat> -sal_Char* cat( const sal_Char* str1, const sal_Char* str2 ) { - - // allocate memory for destination string - sal_Char* dest = new sal_Char[ ln(str1)+ln(str2)+1 ]; - - // set pointers - sal_Char* pdest = dest; - const sal_Char* psrc = str1; - - // copy string1 by char to dest - while( *pdest++ = *psrc++ ); - pdest--; - psrc = str2; - while( *pdest++ = *psrc++ ); - - return ( dest ); - -} // </function_cat> - -// <function_ln> -sal_uInt32 ln( const sal_Char* str ) { - - sal_uInt32 len = 0; - const sal_Char* ptr = str; - - if( ptr ) { - while( *ptr++ ) len++; - } - - return(len); -} // <function_ln> - -} // </namespace_tstutl> - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/testhxx/create.pl b/soltools/testhxx/create.pl deleted file mode 100644 index 4360f0d3e..000000000 --- a/soltools/testhxx/create.pl +++ /dev/null @@ -1,125 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -$solarversion = $ENV{SOLARVERSION}; -$solarversion =~ s![^0-9A-Za-z]!\\$&!g; -$in = <> || die 'no input'; -chomp $in; -if ($ENV{OS} eq 'LINUX') { - 1 while $in =~ s!\s+-I\s*[^/]\S*\s*! !g; # discard relative includes - $in =~ s!(\s+-I\s*)$solarversion(\S*)!$1\${SOLARVERSION}$2!og; - # macrofy includes to solver - $in =~ s!\s+-o\s*\S+! -o /dev/null! || die 'bad input: no -o'; - $in =~ s!\S+/testhxx.cxx!-x c++ /proc/self/fd/0! - || die 'bad input: no source file'; - print STDOUT '#!/bin/bash', "\n"; - print STDOUT $in, - ' <<<"#include \\"`echo $(if [ ${1%/*} != $1 ];then cd ${1%/*};fi;', - '/bin/pwd)/${1##*/}`\\""', "\n"; -} elsif ($ENV{OS} eq 'SOLARIS') { - 1 while $in =~ s!\s+-I\s*[^/]\S*\s*! !g; # discard relative includes - $in =~ s!(\s+-I\s*)$solarversion(\S*)!$1\${SOLARVERSION}$2!og; - # macrofy includes to solver - $in =~ s!\s+-o\s*\S+! -o /dev/null! || die 'bad input: no -o'; - $in =~ s!\S+/testhxx.cxx!\${my_tmp}! - || die 'bad input: no source file'; - print STDOUT '#!/bin/sh', "\n"; - print STDOUT - 'my_tmp=${TMPDIR:-/tmp}/`/usr/xpg4/bin/id -u`_$$_include.cc', "\n"; - print STDOUT 'my_pat=`dirname $1`', "\n"; - print STDOUT 'my_fil=`basename $1`', "\n"; - print STDOUT 'my_org=${PWD}', "\n"; - print STDOUT 'cd $my_pat || exit 1', "\n"; - print STDOUT 'my_pat=`pwd`', "\n"; - print STDOUT 'cd $my_org || exit 1', "\n"; - print STDOUT - 'echo "#include \\"${my_pat}/${my_fil}\\"" > ${my_tmp} || exit 1', "\n"; - print STDOUT $in, ' > ${my_tmp}.out 2>&1', "\n"; - print STDOUT 'my_ret=$?', "\n"; - print STDOUT - 'if [ ${my_ret} -ne 0 ] ; then echo $1 >&2 ; cat ${my_tmp}.out >&2 ;', - ' fi', "\n"; - print STDOUT 'unlink ${my_tmp} || exit 1', "\n"; - print STDOUT 'unlink ${my_tmp}.out || exit 1', "\n"; - print STDOUT 'exit ${my_ret}', "\n"; -} elsif ($ENV{OS} eq 'WNT') { - if ($ENV{COM} eq 'GCC') { - 1 while $in =~ s!\s+-I\s*\.\S*\s*! !g; # discard relative includes - $in =~ s!(\s+-I\s*)(?i:$solarversion)(\S*)!$1\${SOLARVERSION}$2!og; - # macrofy includes to solver - $in =~ s!\s+-o\s*\S+! -o /dev/null! || die 'bad input: no -o'; - $in =~ s!\S+/testhxx.cxx!\${my_tmp}! - || die 'bad input: no source file'; - print STDOUT '#!/bin/sh', "\n"; - print STDOUT - 'my_tmp=${TMPDIR:-/tmp}/`id -u`_$$_include.cc', "\n"; - print STDOUT 'my_pat=`dirname $1`', "\n"; - print STDOUT 'my_fil=`basename $1`', "\n"; - print STDOUT 'my_org=${PWD}', "\n"; - print STDOUT 'cd $my_pat || exit 1', "\n"; - print STDOUT 'my_pat=`cygpath -m \`pwd\``', "\n"; - print STDOUT 'cd $my_org || exit 1', "\n"; - print STDOUT - 'echo "#include \\"${my_pat}/${my_fil}\\"" > ${my_tmp} || exit 1', "\n"; - print STDOUT $in, ' > ${my_tmp}.out 2>&1', "\n"; - print STDOUT 'my_ret=$?', "\n"; - print STDOUT - 'if [ ${my_ret} -ne 0 ] ; then echo $1 >&2 ; cat ${my_tmp}.out >&2 ;', - ' fi', "\n"; - print STDOUT 'unlink ${my_tmp} || exit 1', "\n"; - print STDOUT 'unlink ${my_tmp}.out || exit 1', "\n"; - print STDOUT 'exit ${my_ret}', "\n"; - } else { - 1 while $in =~ s!\s+-I\s*\.\S*\s*! !g; # discard relative includes - $in =~ s!(\s+-I\s*)(?i:$solarversion)(\S*)!$1\${SOLARVERSION}$2!og; - # macrofy includes to solver - $in =~ s!\s+-Fo\s*\S+! -Fo$[my_tmp}obj! || die 'bad input: no -Fo'; - $in =~ s!\s+-Zi\s! !; - $in =~ s!\s+-Fd\s*\S+!!; - print STDOUT '#!/bin/sh', "\n"; - print STDOUT - 'my_tmp=${TMPDIR:-/tmp}/`id -u`_$$_include.cc', "\n"; - print STDOUT 'my_pat=`dirname $1`', "\n"; - print STDOUT 'my_fil=`basename $1`', "\n"; - print STDOUT 'my_org=${PWD}', "\n"; - print STDOUT 'cd $my_pat || exit 1', "\n"; - print STDOUT 'my_pat=`pwd`', "\n"; - print STDOUT 'cd $my_org || exit 1', "\n"; - print STDOUT - 'echo "#include \\"${my_pat}/${my_fil}\\"" > ${my_tmp} || exit 1', "\n"; - print STDOUT $in, ' > ${my_tmp}.out 2>&1', "\n"; - print STDOUT 'my_ret=$?', "\n"; - print STDOUT - 'if [ ${my_ret} -ne 0 ] ; then echo $1 >&2 ; cat ${my_tmp}.out >&2 ;', - ' fi', "\n"; - print STDOUT 'unlink ${my_tmp} || exit 1', "\n"; - print STDOUT 'unlink ${my_tmp}.out || exit 1', "\n"; - print STDOUT 'exit ${my_ret}', "\n"; - } -} else { - print STDOUT 'echo \'no testhxx on this platform\'', "\n"; -} diff --git a/soltools/testhxx/makefile.mk b/soltools/testhxx/makefile.mk deleted file mode 100644 index e71d8f116..000000000 --- a/soltools/testhxx/makefile.mk +++ /dev/null @@ -1,56 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* -PRJ := .. -PRJNAME := soltools -TARGET := testhxx -LIBTARGET := NO -ENABLE_EXCEPTIONS := TRUE - -CAPTURE_COMMAND = echo -CAPTURE_OUTPUT = > $(MISC)$/testhxx.output && $(TOUCH) $(SLO)$/testhxx.obj - -.INCLUDE: $(PRJ)$/util$/makefile.pmk -.INCLUDE: settings.mk - -.IF "$(CROSS_COMPILING)"=="YES" -all: - @echo Nothing done when cross-compiling -.ENDIF - -SLOFILES = $(SLO)$/testhxx.obj - -.INCLUDE: target.mk - -ALLTAR: $(BIN)$/$(TARGET) - -$(BIN)$/$(TARGET) .ERRREMOVE : $(MISC)$/testhxx.output create.pl - $(PERL) -w create.pl < $(MISC)$/testhxx.output > $@ - chmod +x $@ - -$(MISC)$/testhxx.output: $(SLO)$/testhxx.obj - $(TOUCH) $< - $(TOUCH) $@ diff --git a/soltools/testhxx/testhxx.cxx b/soltools/testhxx/testhxx.cxx deleted file mode 100644 index 2f6e06759..000000000 --- a/soltools/testhxx/testhxx.cxx +++ /dev/null @@ -1,35 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// NO PCH here - breaks the purpose of this file -// MARKER(update_precomp.py): autogen include statement, do not remove -//#include "precompiled_soltools.hxx" - -// This is just a dummy file; see the makefile.mk for the real work. - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/soltools/util/makefile.pmk b/soltools/util/makefile.pmk deleted file mode 100755 index f00c98c10..000000000 --- a/soltools/util/makefile.pmk +++ /dev/null @@ -1,44 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -# find 'makedepend' in own output tree -MAKEDEPEND=$(AUGMENT_LIBRARY_PATH) $(BIN)$/makedepend - -# find 'adjustvisibility' in own output tree -ADJUSTVISIBILITY=$(AUGMENT_LIBRARY_PATH) $(BIN)$/adjustvisibility - -.IF "$(OS)"=="SOLARIS" -# hack due to #i53089# -.IF "$(COMPATH:+"x")" != "$(COMPATH:+"x":s/binx//)" -HELP_COMPATH:=$(subst,/binx, $(COMPATH:+"x")) -.ELSE # "$(COMPATH:+"x")" == "$(COMPATH:s/binx//)/binx" -HELP_COMPATH:=$(COMPATH) -.ENDIF # "$(COMPATH:+"x")" == "$(COMPATH:s/binx//)/binx" -.IF "$(COM)"!="GCC" -SOLARINC+=-I$(HELP_COMPATH)/prod/include/CC/Cstd -.ENDIF -.ENDIF diff --git a/soltools/winunistd/makefile.mk b/soltools/winunistd/makefile.mk deleted file mode 100644 index 9fb4f512c..000000000 --- a/soltools/winunistd/makefile.mk +++ /dev/null @@ -1,52 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# OpenOffice.org - a multi-platform office productivity suite -# -# This file is part of OpenOffice.org. -# -# OpenOffice.org is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License version 3 -# only, as published by the Free Software Foundation. -# -# OpenOffice.org is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License version 3 for more details -# (a copy is included in the LICENSE file that accompanied this code). -# -# You should have received a copy of the GNU Lesser General Public License -# version 3 along with OpenOffice.org. If not, see -# <http://www.openoffice.org/license.html> -# for a copy of the LGPLv3 License. -# -#************************************************************************* - -PRJ=.. - -PRJNAME=soltools -TARGET=winunistd -TARGETTYPE=CUI - -# --- Settings ----------------------------------------------------- - -.INCLUDE : $(PRJ)$/util$/makefile.pmk -.INCLUDE : settings.mk - -# --- Files -------------------------------------------------------- - -.IF "$(GUI)"=="WNT" -.IF "$(COM)"!="GCC" -# provide dummy header for generated sources -$(INCCOM)$/unistd.h : unistd.h - @$(COPY) $< $@ - -.ENDIF # "$(COM)"!="GCC" -.ENDIF # "$(GUI)"=="WNT" - -# --- Targets ------------------------------------------------------ - -.INCLUDE : target.mk diff --git a/soltools/winunistd/unistd.h b/soltools/winunistd/unistd.h deleted file mode 100644 index c3343f5f5..000000000 --- a/soltools/winunistd/unistd.h +++ /dev/null @@ -1,6 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* Dummy unistd.h for the wntmsci3 environment. Required because flex - * generates a lexical scanner which includes <unistd.h> - */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |