File: main.cc

package info (click to toggle)
gtkmathview 0.7.7-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 8,388 kB
  • ctags: 7,020
  • sloc: cpp: 51,304; xml: 12,643; sh: 8,996; makefile: 1,593; ansic: 1,149; perl: 88
file content (118 lines) | stat: -rw-r--r-- 3,085 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// Copyright (C) 2000, Luca Padovani <luca.padovani@cs.unibo.it>.
// 
// This file is part of GtkMathView, a Gtk widget for MathML.
// 
// GtkMathView is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
// 
// GtkMathView 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 General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with GtkMathView; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
// 
// For details, see the GtkMathView World-Wide-Web page,
// http://cs.unibo.it/~lpadovan/mml-widget, or send a mail to
// <luca.padovani@cs.unibo.it>

#include <config.h>

// needed for old versions of GCC, must come before String.hh!
#include "CharTraits.icc"

#include <cassert>
#include <stdlib.h>

#include <popt.h>

#include "defs.h"
#include "guiGTK.h"
#include "String.hh"
#include "MathMLTokenElement.hh"
#ifdef DEBUG
#include "Gtk_GraphicsContext.hh"
#endif // DEBUG
#ifdef ENABLE_PROFILE
#endif // ENABLE_PROFILE

enum CommandLineOptionId {
  OPTION_VERSION = 256,
  OPTION_VERBOSE
};

// global options
bool entityWarning = false;

static char appName[64];

extern void *parseMathMLFile(char *);

static void printVersion()
{
  printf("%s - written by Luca Padovani (C) 2000-2005.\n", appName);
  exit(0);
}

static gint logLevel = -1;
static struct poptOption optionsTable[] = {
  { "version", 'V', POPT_ARG_NONE, 0, OPTION_VERSION, "Output version information", 0 },
  { "verbose", 'v', POPT_ARG_INT, &logLevel, OPTION_VERBOSE, "Display messages", "[0-3]" },
  POPT_AUTOHELP
  { 0, 0, 0, 0, 0, 0, 0 }
};

static void
usage(poptContext optCon, int exitcode, const char* msg)
{
  poptPrintUsage(optCon, stderr, 0);
  if (msg) fprintf(stderr, "%s\n", msg);
  exit(exitcode);
}

int
main(int argc, const char *argv[])
{
  poptContext ctxt = poptGetContext(NULL, argc, argv, optionsTable, 0);
  sprintf(appName, "mathmlviewer v%s", VERSION);

  gint c;
  while ((c = poptGetNextOpt(ctxt)) >= 0)
    {
      switch (c) {
      case OPTION_VERSION:
	printVersion();
	break;
      case OPTION_VERBOSE:
	break;
      default:
	assert(false);
      }
    }

  if (c < -1)
    {
      /* an error occurred during option processing */
      fprintf(stderr, "%s: %s\n",
	      poptBadOption(ctxt, POPT_BADOPTION_NOALIAS),
	      poptStrerror(c));
      return 1;
    }

  const gchar* file = poptGetArg(ctxt);
  if (file == 0 || !(poptPeekArg(ctxt) == 0))
    usage(ctxt, 1, "fatal error: no input document");

  poptFreeContext(ctxt);

  GUI_init(&argc, &argv, appName, 500, 600, logLevel);
  if (GUI_load_document(file) < 0)
    printf("fatal error: cannot load document `%s'\n", file);
  GUI_run();
  GUI_uninit();
  exit(0);
}