/** @file sample about directories and environment of an application
 *
 * Last CVS checkin:
 * $Date: $
 * $Author: scheff $
 */

/**************************************************************************/

// standard C/C++ header:
#include <iomanip>
#include <iostream>
#include <string>

// Gnome header:
#include <glibmm/init.h>
#include <glibmm/miscutils.h>

using namespace std;

/**************************************************************************/

/** waits for user confirm.
 *
 * @param action text with next action
 */
static void pause(const char *action)
{
  cout << "Press [ENTER] to " << action << ": " << flush;
  string str; getline(cin, str);
}

/** provides the main function of application.
 *
 * @param argc number of command line arguments
 * @param argv pointer to array of pointers to strings with command line
 *        arguments
 * @return 0 ... application exited regularly\n
 *         else ... execution of application aborted
 */
int main(int argc, char *argv[], char *env[])
{
  Glib::init();
  pause("start");
  cout << "argv[0]: '" << argv[0] << '\'' << endl;
  cout << "get_application_name(): '"
    << Glib::get_application_name() << '\'' << endl;
  cout << "get_prgname(): '"
    << Glib::get_prgname() << '\'' << endl;
  cout << "get_user_name(): '"
    << Glib::get_user_name() << '\'' << endl;
  cout << "get_real_name(): '"
    << Glib::get_real_name() << '\'' << endl;
  cout << "get_home_dir(): '"
    << Glib::get_home_dir() << '\'' << endl;
  cout << "get_tmp_dir(): '"
    << Glib::get_tmp_dir() << '\'' << endl;
  cout << "get_current_dir(): '"
    << Glib::get_current_dir() << '\'' << endl;
  cout << "get_user_data_dir(): '"
    << Glib::get_user_data_dir() << '\'' << endl;
  cout << "get_user_config_dir(): '"
    << Glib::get_user_config_dir() << '\'' << endl;
  cout << "get_user_cache_dir(): '"
    << Glib::get_user_cache_dir() << '\'' << endl;
  cout << "---" << endl;
#ifdef WIN32
  { gchar *dir = g_win32_get_package_installation_directory_of_module(0);
    cout << "g_win32_get_package_installation_directory_of_module(): '"
      << dir << '\'' << endl;
    g_free(dir);
  }
#endif // WIN32
  pause("continue");
  { gchar **envList = g_listenv(); int i;
    for (i = 0; envList[i]; ++i) {
      gchar *env = envList[i];
      cout << setw(2) << i << ": " << env
        << " = " << Glib::getenv(env) << endl;
    }
    g_strfreev(envList);
  }
  // done
  pause("finish");
  return 0;
}

