text: // Copyright (c) 2009-2010 Satoshi Nakamoto
  // Copyright (c) 2018-2019 The DeimOS Core developers
  // Distributed under the MIT software license, see the accompanying
  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
  
  #ifndef DEIMOS_INIT_H
  #define DEIMOS_INIT_H
  
  #include <memory>
  #include <string>
  #include <util.h>
  
  class CScheduler;
  class CWallet;
  
  class WalletInitInterface;
  extern const WalletInitInterface& g_wallet_init_interface;
  
  namespace boost
  {
  class thread_group;
  } // namespace boost
  
  /** Interrupt threads */
  void Interrupt();
  void Shutdown();
  //!Initialize the logging infrastructure
  void InitLogging();
  //!Parameter interaction: change current parameters depending on various rules
  void InitParameterInteraction();
  
  /** Initialize deimos core: Basic context setup.
   *  @note This can be done before daemonization. Do not call Shutdown() if this function fails.
   *  @pre Parameters should be parsed and config file should be read.
   */
  bool AppInitBasicSetup();
  /**
   * Initialization: parameter interaction.
   * @note This can be done before daemonization. Do not call Shutdown() if this function fails.
   * @pre Parameters should be parsed and config file should be read, AppInitBasicSetup should have been called.
   */
  bool AppInitParameterInteraction();
  /**
   * Initialization sanity checks: ecc init, sanity checks, dir lock.
   * @note This can be done before daemonization. Do not call Shutdown() if this function fails.
   * @pre Parameters should be parsed and config file should be read, AppInitParameterInteraction should have been called.
   */
  bool AppInitSanityChecks();
  /**
   * Lock deimos core data directory.
   * @note This should only be done after daemonization. Do not call Shutdown() if this function fails.
   * @pre Parameters should be parsed and config file should be read, AppInitSanityChecks should have been called.
   */
  bool AppInitLockDataDirectory();
  /**
   * DeimOS core main initialization.
   * @note This should only be done after daemonization. Call Shutdown() if this function fails.
   * @pre Parameters should be parsed and config file should be read, AppInitLockDataDirectory should have been called.
   */
  bool AppInitMain();
  
  /**
   * Setup the arguments for gArgs
   */
  void SetupServerArgs();
  
  /** Returns licensing information (for -version) */
  std::string LicenseInfo();
  
  #endif // DEIMOS_INIT_H
  