text: /* $Id$ */
  /* Copyright (c) 2012-2020 Pierre Pronchery <khorben@defora.org> */
  /* This file is part of DeforaOS Desktop Terminal */
  /* Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions are
   * met:
   *
   * 1. Redistributions of source code must retain the above copyright notice,
   *    this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright notice,
   *    this list of conditions and the following disclaimer in the documentation
   *    and/or other materials provided with the distribution.
   *
   * THIS SOFTWARE IS PROVIDED BY ITS AUTHORS AND CONTRIBUTORS "AS IS" AND ANY
   * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY
   * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
  
  
  
  #include <unistd.h>
  #include <stdio.h>
  #include <string.h>
  #include <locale.h>
  #include <libintl.h>
  #include <gtk/gtk.h>
  #include <System.h>
  #include "terminal.h"
  #include "../config.h"
  #define _(string) gettext(string)
  
  /* constants */
  #ifndef PROGNAME_TERMINAL
  # define PROGNAME_TERMINAL	"terminal"
  #endif
  #ifndef PREFIX
  # define PREFIX			"/usr/local"
  #endif
  #ifndef DATADIR
  # define DATADIR		PREFIX "/share"
  #endif
  #ifndef LOCALEDIR
  # define LOCALEDIR		DATADIR "/locale"
  #endif
  
  
  /* private */
  /* prototypes */
  static int _terminal(TerminalPrefs * prefs);
  
  static int _error(char const * message, int ret);
  static int _usage(void);
  
  
  /* functions */
  /* terminal */
  static int _terminal(TerminalPrefs * prefs)
  {
  	Terminal * terminal;
  
  	/* consistency check */
  	if(prefs != NULL)
  	{
  		if(prefs->shell != NULL)
  			prefs->login = 0;
  		else if(prefs->login != 0)
  			prefs->directory = NULL;
  	}
  	if((terminal = terminal_new(prefs)) == NULL)
  		return error_print(PROGNAME_TERMINAL);
  	gtk_main();
  	terminal_delete(terminal);
  	return 0;
  }
  
  
  /* error */
  static int _error(char const * message, int ret)
  {
  	fputs(PROGNAME_TERMINAL ": ", stderr);
  	perror(message);
  	return ret;
  }
  
  
  /* usage */
  static int _usage(void)
  {
  	fprintf(stderr, _("Usage: %s [-d directory][shell]\n"),
  			PROGNAME_TERMINAL);
  	return 1;
  }
  
  
  /* public */
  /* functions */
  /* main */
  int main(int argc, char * argv[])
  {
  	int o;
  	TerminalPrefs prefs;
  
  	if(setlocale(LC_ALL, "") == NULL)
  		_error("setlocale", 1);
  	bindtextdomain(PACKAGE, LOCALEDIR);
  	textdomain(PACKAGE);
  	memset(&prefs, 0, sizeof(prefs));
  	gtk_init(&argc, &argv);
  	while((o = getopt(argc, argv, "d:l")) != -1)
  		switch(o)
  		{
  			case 'd':
  				prefs.directory = optarg;
  				break;
  			case 'l':
  				prefs.login = 1;
  				break;
  			default:
  				return _usage();
  		}
  	if(argc - optind == 1)
  		prefs.shell = argv[optind];
  	else if(optind != argc)
  		return _usage();
  	return (_terminal(&prefs) == 0) ? 0 : 2;
  }
  