1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*
23 * Copyright 1997 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27/*	Copyright (c) 1988 AT&T	*/
28/*	  All Rights Reserved	*/
29
30/*
31 * University Copyright- Copyright (c) 1982, 1986, 1988
32 * The Regents of the University of California
33 * All Rights Reserved
34 *
35 * University Acknowledgment- Portions of this document are derived from
36 * software developed by the University of California, Berkeley, and its
37 * contributors.
38 */
39
40#ifndef	_COMPILER_H
41#define	_COMPILER_H
42
43#pragma ident	"%Z%%M%	%I%	%E% SMI"
44
45/*
46 *			COPYRIGHT NOTICE
47 *
48 *	This software is copyright(C) 1982 by Pavel Curtis
49 *
50 *	Permission is granted to reproduce and distribute
51 *	this file by any means so long as no fee is charged
52 *	above a nominal handling fee and so long as this
53 *	notice is always included in the copies.
54 *
55 *	Other rights are reserved except as explicitly granted
56 *	by written permission of the author.
57 *		Pavel Curtis
58 *		Computer Science Dept.
59 *		405 Upson Hall
60 *		Cornell University
61 *		Ithaca, NY 14853
62 *
63 *		Ph- (607) 256-4934
64 *
65 *		Pavel.Cornell@Udel-Relay(ARPAnet)
66 *		decvax!cornell!pavel		(UUCPnet)
67 */
68
69
70/*
71 *	compiler.h - Global variables and structures for the terminfo
72 *			compiler.
73 *
74 *  $Header:   RCS/compiler.v  Revision 2.1  82/10/25  14:46:04  pavel  Exp$
75 *
76 *  $Log:	RCS/compiler.v $
77 * Revision 2.1  82/10/25  14:46:04  pavel
78 * Added Copyright Notice
79 *
80 * Revision 2.0  82/10/24  15:17:20  pavel
81 * Beta-one Test Release
82 *
83 * Revision 1.3  82/08/23  22:30:09  pavel
84 * The REAL Alpha-one Release Version
85 *
86 * Revision 1.2  82/08/19  19:10:10  pavel
87 * Alpha Test Release One
88 *
89 * Revision 1.1  82/08/12  18:38:11  pavel
90 * Initial revision
91 *
92 */
93
94#include <stdio.h>
95#include <signal.h>   /* use this file to determine if this is SVR4.0 system */
96#include <time.h>
97
98#ifdef	__cplusplus
99extern "C" {
100#endif
101
102#ifndef TRUE
103#define	TRUE	1
104#define	FALSE	0
105#endif
106
107#ifndef EXTERN				/* for machines w/o multiple externs */
108#define	EXTERN extern
109#endif /* EXTERN */
110
111#define	SINGLE			/* only one terminal (actually none) */
112
113extern char	*destination;	/* destination directory for object files */
114
115EXTERN long	start_time;	/* time at start of compilation */
116
117EXTERN int	curr_line;	/* current line # in input */
118EXTERN long	curr_file_pos;	/* file offset of current line */
119
120EXTERN int	debug_level;	/* level of debugging output */
121
122#define	DEBUG(level, fmt, a1) \
123		if (debug_level >= level)\
124		    fprintf(stderr, fmt, a1);
125
126	/*
127	 *	These are the types of tokens returned by the scanner.
128	 *	The first three are also used in the hash table of capability
129	 *	names.  The scanner returns one of these values after loading
130	 *	the specifics into the global structure curr_token.
131	 *
132	 */
133
134#define	BOOLEAN 0	/* Boolean capability */
135#define	NUMBER 1	/* Numeric capability */
136#define	STRING 2	/* String-valued capability */
137#define	CANCEL 3	/* Capability to be cancelled in following tc's */
138#define	NAMES  4	/* The names for a terminal type */
139
140#define	MAXBOOLS 64	/* Maximum # of boolean caps we can handle */
141#define	MAXNUMS	64	/* Maximum # of numeric caps we can handle */
142#define	MAXSTRINGS 512	/* Maximum # of string caps we can handle */
143
144	/*
145	 *	The global structure in which the specific parts of a
146	 *	scanned token are returned.
147	 *
148	 */
149
150struct token
151{
152	char	*tk_name;		/* name of capability */
153	int	tk_valnumber;	/* value of capability (if a number) */
154	char	*tk_valstring;	/* value of capability (if a string) */
155};
156
157EXTERN struct token	curr_token;
158
159	/*
160	 *	The file comp_captab.c contains an array of these structures,
161	 *	one per possible capability.  These are then made into a hash
162	 *	table array of the same structures for use by the parser.
163	 *
164	 */
165
166struct name_table_entry
167{
168	struct name_table_entry *nte_link;
169	char	*nte_name;	/* name to hash on */
170	int	nte_type;	/* BOOLEAN, NUMBER or STRING */
171	short	nte_index;	/* index of associated variable in its array */
172};
173
174extern struct name_table_entry	cap_table[];
175extern struct name_table_entry	*cap_hash_table[];
176
177extern int	Captabsize;
178extern int	Hashtabsize;
179extern int	BoolCount;
180extern int	NumCount;
181extern int	StrCount;
182
183#define	NOTFOUND	((struct name_table_entry *)0)
184	/*
185	 *	Function types
186	 *
187	 */
188
189struct name_table_entry	*find_entry();	/* look up entry in hash table */
190
191int	next_char();
192int	trans_string();
193
194#ifdef SIGSTOP	/* SVR4.0 and beyond */
195#define	SRCDIR "/usr/share/lib/terminfo"
196#else
197#define	SRCDIR "/usr/lib/terminfo"
198#endif
199
200#ifdef	__cplusplus
201}
202#endif
203
204#endif	/* _COMPILER_H */
205