File: ucmain.cc

package info (click to toggle)
exult 0.98rc1-2
  • links: PTS
  • area: contrib
  • in suites: woody
  • size: 6,924 kB
  • ctags: 8,928
  • sloc: cpp: 83,768; sh: 7,643; ansic: 4,328; makefile: 890; yacc: 618; lex: 255; xml: 19
file content (112 lines) | stat: -rw-r--r-- 2,313 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
/**
 **	Ucmain.cc - Usecode Compiler
 **
 **	Written: 12/30/2000 - JSF
 **/

/*
Copyright (C) 2000 The Exult Team

This program 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.

This program 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 this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#include <fstream.h>
#include <stdio.h>
#include <string>
#include <vector>
#include "ucloc.h"
#include "ucfun.h"

#ifndef ALPHA_LINUX_CXX
#  include <iosfwd>
#endif

using std::strcpy;
using std::strrchr;
using std::strlen;
using std::ios;

extern std::vector<Uc_function *> functions;	// THIS is what the parser produces.


/*
 *	MAIN.
 */

int main
	(
	int argc,
	char **argv
	)
	{
	extern int yyparse();
	extern FILE *yyin;
	char *src;
	char outname[150];
	if (argc > 1)
		{
		src = argv[1];
		yyin = fopen(argv[1], "r");
		strcpy(outname, src);	// Set up output name.
		char *dot = strrchr(outname, '.');
		if (!dot)
			dot = outname + strlen(outname);
		strcpy(dot, ".uco");
		}
	else
		{
		src = "<stdin>";
		yyin = stdin;
		strcpy(outname, "a.ucout");
		}
	Uc_location::set_cur(src, 0);
					// For now, use black gate.
	Uc_function::set_intrinsics(Uc_function::bg);
#if 0
//++++TESTING
	int tok;
	extern int yylex();
	while ((tok = yylex()) != EOF)
		printf("%d\n", tok);
#endif
	yyparse();
	int errs = Uc_location::get_num_errors();
	if (errs > 0)			// Check for errors.
		return errs;
					// Open output.
	ofstream out(outname, ios::binary|ios::out);
	for (std::vector<Uc_function *>::iterator it = functions.begin();
					it != functions.end(); it++)
		{
		Uc_function *fun = *it;
		fun->gen(out);		// Generate function.
		}
	return Uc_location::get_num_errors();
	}

/*
 *	Report error.
 */
void yyerror
	(
	char *s
	)
	{
	Uc_location::yyerror(s);
	}