summaryrefslogtreecommitdiff
path: root/cosv/source/service/commandline.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cosv/source/service/commandline.cxx')
-rw-r--r--cosv/source/service/commandline.cxx345
1 files changed, 0 insertions, 345 deletions
diff --git a/cosv/source/service/commandline.cxx b/cosv/source/service/commandline.cxx
deleted file mode 100644
index c3983e6e..00000000
--- a/cosv/source/service/commandline.cxx
+++ /dev/null
@@ -1,345 +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 <precomp.h>
-#include <cosv/commandline.hxx>
-
-// NOT FULLY DECLARED SERVICES
-#include <cosv/file.hxx>
-
-
-namespace csv
-{
-
-namespace
-{
-
-const intt C_nNoOption = -1;
-
-const char * sIncludeOptionShort = "-A:";
-const char * sIncludeOptionLong = "--Arguments:";
-const uintt nIncludeOptionShort_Length = strlen(sIncludeOptionShort);
-const uintt nIncludeOptionLong_Length = strlen(sIncludeOptionLong);
-
-
-/** Analyses, if an option is the one to include a file with
- further command line arguments.
-*/
-bool IsIncludeOption(
- const String & i_option );
-
-/** Gets the file name from an include-arguments-option.
-*/
-String IncludeFile_fromIncludeOption(
- const String & i_option );
-
-
-bool
-IsIncludeOption(const String & i_option)
-{
- return strncmp(i_option, sIncludeOptionShort, nIncludeOptionShort_Length) == 0
- OR
- strncmp(i_option, sIncludeOptionLong, nIncludeOptionLong_Length) == 0;
-}
-
-String
-IncludeFile_fromIncludeOption(const String & i_option)
-{
- if ( strncmp(i_option, sIncludeOptionShort, nIncludeOptionShort_Length)
- == 0 )
- {
- return String(i_option, nIncludeOptionShort_Length, str::maxsize);
- }
- else
- if ( strncmp(i_option, sIncludeOptionLong, nIncludeOptionLong_Length)
- == 0 )
- {
- return String(i_option, nIncludeOptionLong_Length, str::maxsize);
- }
- return String::Null_();
-}
-
-
-} // end anonymous namespace
-
-
-
-
-/** Local helper class for searching a possible option name in a vector of
- ->OptionDescription.
-*/
-struct CommandLine::
-FindOptionByText
-{
- bool operator()(
- const CommandLine::OptionDescription &
- i_option )
- { return i_option.sText == sOption; }
-
- /// @param i_searchText [i_searchText != ""]
- FindOptionByText(
- const String & i_option )
- : sOption(i_option) { }
- private:
- const String sOption;
-};
-
-
-typedef std::vector<StringVector::const_iterator> StringCIteratorList;
-typedef std::vector<intt> OptionIdList;
-
-bool
-CommandLine::Interpret( int argc,
- char * argv[] )
-{
- Get_Arguments(argc,argv);
- csv_assert(aOptionPoints.size() == aOptionIds.size());
-
- StringVector::const_iterator
- itNext = aCommandLine.begin();
- ++itNext; // Move 1 forward from program name.
- StringVector::const_iterator
- itEnd = aCommandLine.end();
- StringCIteratorList::const_iterator
- itOptPtsEnd = aOptionPoints.end();
-
- OptionIdList::const_iterator
- itOptIds = aOptionIds.begin();
- for ( StringCIteratorList::const_iterator itOptPts = aOptionPoints.begin();
- itOptPts != itOptPtsEnd AND bIsOk;
- ++itOptPts, ++itOptIds )
- {
- // May be, there are arguments which do not belong to the last option:
- // itNext != *is
- Handle_FreeArguments(itNext, *itOptPts);
-
- itNext = do_HandleOption( *itOptIds,
- *itOptPts + 1,
- itOptPts+1 == itOptPtsEnd ? itEnd : *(itOptPts+1) );
- csv_assert(itNext <= itEnd);
- } // end for (is)
- Handle_FreeArguments(itNext, itEnd);
-
- return bIsOk;
-}
-
-CommandLine::CommandLine()
- : aOptions(),
- aCommandLine(),
- bIsOk(false)
-{
-}
-
-void
-CommandLine::Add_Option( intt i_id,
- String i_text )
-{
- aOptions.push_back(OptionDescription( i_id,
- i_text ));
-}
-
-void
-CommandLine::Get_Arguments( int argc,
- char * argv[] )
-{
- aCommandLine.erase(aCommandLine.begin(),aCommandLine.end());
- aCommandLine.reserve(argc);
-
- char ** pArgEnd = argv + argc;
- for ( char ** pArg = &argv[0];
- pArg != pArgEnd;
- ++pArg )
- {
- Store_Argument(*pArg);
- } // end for
- Find_OptionPoints();
- bIsOk = true;
-}
-
-intt
-CommandLine::Find_Option( const String & i_text ) const
-{
- if (i_text.empty())
- return C_nNoOption;
-
- FindOptionByText aSearch(i_text);
- OptionList::const_iterator
- itFound = std::find_if( aOptions.begin(),
- aOptions.end(),
- aSearch );
- if (itFound != aOptions.end())
- {
- return (*itFound).nId;
- }
- return C_nNoOption;
-}
-
-bool
-CommandLine::Store_Argument( const String & i_arg )
-{
- if ( NOT IsIncludeOption(i_arg) )
- {
- aCommandLine.push_back(i_arg);
- return true;
- }
-
- return Try2Include_Options(i_arg);
-}
-
-void
-CommandLine::Find_OptionPoints()
-{
- StringVector::const_iterator itEnd = aCommandLine.end();
- for ( StringVector::const_iterator it = aCommandLine.begin() + 1;
- it != itEnd;
- ++it )
- {
- intt nOption = Find_Option(*it);
- if (nOption != C_nNoOption)
- {
- aOptionPoints.push_back(it);
- aOptionIds.push_back(nOption);
- }
- } // end for (i)
-}
-
-void
-CommandLine::Handle_FreeArguments( StringVector::const_iterator i_begin,
- StringVector::const_iterator i_end )
-{
- for ( StringVector::const_iterator it = i_begin;
- it != i_end AND bIsOk;
- ++it )
- {
- do_HandleFreeArgument(*it);
- }
-}
-
-bool
-CommandLine::Try2Include_Options(const String & i_includeOption)
-{
- static StringVector
- aIncludedOptionFiles_;
-
- const String
- aOptionFile(IncludeFile_fromIncludeOption(i_includeOption));
-
- // Avoid recursion deadlock 1
- if ( std::find( aIncludedOptionFiles_.begin(),
- aIncludedOptionFiles_.end(),
- aOptionFile )
- != aIncludedOptionFiles_.end() )
- {
- Cerr() << "\nError: Self inclusion of option file "
- << aOptionFile
- << ".\n"
- << Endl();
- return false;
- }
-
- // Avoid recursion deadlock 2
- aIncludedOptionFiles_.push_back(aOptionFile);
-
- bool ok = Include_Options(aOptionFile);
-
- // Avoid recursion deadlock 3
- aIncludedOptionFiles_.pop_back();
-
- return ok;
-}
-
-bool
-CommandLine::Include_Options( const String & i_optionsFile )
-{
- StreamStr
- aIncludedText(500);
- bool ok = Load_Options(aIncludedText, i_optionsFile);
- if (NOT ok)
- return false;
-
- StringVector
- aIncludedOptions;
- Split(aIncludedOptions, aIncludedText.c_str());
-
- StringVector::const_iterator itEnd = aIncludedOptions.end();
- for ( StringVector::const_iterator it = aIncludedOptions.begin();
- it != itEnd;
- ++it )
- {
- Store_Argument(*it);
- } // end for
-
- return true;
-}
-
-bool
-CommandLine::Load_Options( StreamStr & o_text,
- const String & i_optionsFile )
-{
- if (i_optionsFile.empty())
- return false;
-
- File
- aOptionsFile(i_optionsFile, CFM_READ);
- OpenCloseGuard
- aOFGuard(aOptionsFile);
- if (NOT aOFGuard)
- {
- Cerr() << "\nError: Options file "
- << i_optionsFile
- << " not found.\n"
- << Endl();
- return false;
- }
-
- StreamStr
- aLoad(aOptionsFile);
- o_text.swap(aLoad);
- return true;
-}
-
-
-
-
-/****************** OptionDescription ***********************/
-
-
-CommandLine::
-OptionDescription::OptionDescription( intt i_id,
- String i_text )
- : nId(i_id),
- sText(i_text)
-{
-}
-
-
-
-
-} // namespace csv
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */