1176771Sraj/*	$NetBSD: fgen.h,v 1.4 2001/06/13 10:46:05 wiz Exp $	*/
2192532Sraj/*
3176771Sraj * fgen.h -- stuff for the fcode tokenizer.
4176771Sraj *
5176771Sraj * Copyright (c) 1998 Eduardo Horvath.
6176771Sraj * All rights reserved.
7176771Sraj *
8176771Sraj * Redistribution and use in source and binary forms, with or without
9176771Sraj * modification, are permitted provided that the following conditions
10176771Sraj * are met:
11176771Sraj * 1. Redistributions of source code must retain the above copyright
12176771Sraj *    notice, this list of conditions and the following disclaimer.
13176771Sraj * 2. Redistributions in binary form must reproduce the above copyright
14176771Sraj *    notice, this list of conditions and the following disclaimer in the
15176771Sraj *    documentation and/or other materials provided with the distribution.
16176771Sraj *
17176771Sraj * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18176771Sraj * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19176771Sraj * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20176771Sraj * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21176771Sraj * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22176771Sraj * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23176771Sraj * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24176771Sraj * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25176771Sraj * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26176771Sraj * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27176771Sraj */
28176771Sraj
29176771Sraj/* Type of a Cell */
30176771Srajtypedef int64_t Cell;
31186229Sraj
32191375Sraj/* Token from the scanner. */
33176771Srajstruct tok {
34176771Sraj	int type;
35176771Sraj	char *text;
36176771Sraj};
37176771Sraj
38176771Sraj#define TOKEN struct tok
39176771Sraj#define YY_DECL TOKEN* yylex(void)
40182198Sraj
41182198Sraj#define FCODE	0x000FC0DE
42184319Smarcel#define MACRO	0x0000F00D
43184319Smarcel
44184319Smarcel/* Defined fcode and string. */
45184319Smarcelstruct fcode {
46176771Sraj	const char *name;
47176771Sraj	long num;
48176771Sraj	int type;
49176771Sraj	struct fcode *l;
50176771Sraj	struct fcode *r;
51176771Sraj};
52176771Sraj
53176771Sraj/* macro instruction as separate words */
54176771Srajstruct macro {
55176771Sraj	const char *name;
56176771Sraj	const char *equiv;
57176771Sraj	int type;
58176771Sraj	struct macro *l;
59176771Sraj	struct macro *r;
60176771Sraj};
61186229Sraj
62176771Sraj/*
63176771Sraj * FCode header -- assumes big-endian machine,
64176771Sraj *	otherwise the bits need twiddling.
65186229Sraj */
66176771Srajstruct fcode_header {
67186229Sraj	char	header;
68176771Sraj	char	format;
69186229Sraj	short	checksum;
70176771Sraj	int	length;
71176771Sraj};
72176771Sraj
73176771Sraj/* Tokenizer tokens */
74186229Srajenum toktypes {
75176771Sraj	TOK_OCTAL = 8,
76186229Sraj	TOK_DECIMAL = 10,
77176771Sraj	TOK_HEX = 16,
78186229Sraj
79176771Sraj	TOK_NUMBER,
80186229Sraj	TOK_STRING_LIT,
81176771Sraj	TOK_C_LIT,
82176771Sraj	TOK_PSTRING,
83186229Sraj	TOK_TOKENIZE,
84176771Sraj	TOK_COMMENT,
85186229Sraj	TOK_COLON,
86224611Smarcel	TOK_SEMICOLON,
87222400Smarcel	TOK_TOSTRING,
88222400Smarcel
89222400Smarcel	/* These are special */
90176771Sraj	TOK_ABORT_S,
91176771Sraj	TOK_AGAIN,
92176771Sraj	TOK_ALIAS,
93222400Smarcel	TOK_GETTOKEN,
94176771Sraj	TOK_ASCII,
95222400Smarcel	TOK_BEGIN,
96222400Smarcel	TOK_BUFFER,
97176771Sraj	TOK_CASE,
98176771Sraj	TOK_CONSTANT,
99176771Sraj	TOK_CONTROL,
100176771Sraj	TOK_CREATE,
101186229Sraj	TOK_DEFER,
102186229Sraj	TOK_DO,
103176771Sraj	TOK_ELSE,
104176771Sraj	TOK_END0,
105191375Sraj	TOK_ENDCASE,
106191375Sraj	TOK_ENDOF,
107191375Sraj	TOK_EXTERNAL,
108191375Sraj	TOK_FCODE_VERSION2,
109191375Sraj	TOK_FCODE_END,
110191375Sraj	TOK_FIELD,
111191375Sraj	TOK_HEADERLESS,
112191375Sraj	TOK_HEADERS,
113191375Sraj	TOK_IF,
114186229Sraj	TOK_LEAVE,
115186229Sraj	TOK_LOOP,
116186229Sraj	TOK_OF,
117176771Sraj	TOK_OFFSET16,
118224611Smarcel	TOK_REPEAT,
119224611Smarcel	TOK_STARTX,
120224611Smarcel	TOK_THEN,
121176771Sraj	TOK_TO,
122186229Sraj	TOK_UNTIL,
123176771Sraj	TOK_VALUE,
124186229Sraj	TOK_VARIABLE,
125186229Sraj	TOK_VERSION1,
126222400Smarcel	TOK_WHILE,
127176771Sraj
128186229Sraj	/* Tokenizer directives */
129242526Smarcel	TOK_BEGTOK,
130176771Sraj	TOK_EMIT_BYTE,
131186229Sraj	TOK_ENDTOK,
132176771Sraj	TOK_FLOAD,
133242526Smarcel
134186229Sraj	TOK_OTHER
135176771Sraj};
136186229Sraj