Patrick Welche <prlw1@cam.ac.uk>
[netbsd-mini2440.git] / usr.bin / fgen / fgen.h
blobaed9793b68e8d283ef5f4fe9005dc77e2d3b613f
1 /* $NetBSD: fgen.h,v 1.7 2009/04/12 03:35:43 lukem Exp $ */
2 /*
3 * fgen.h -- stuff for the fcode tokenizer.
5 * Copyright (c) 1998 Eduardo Horvath.
6 * All rights reserved.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 /* Type of a Cell */
30 typedef int64_t Cell;
32 /* Token from the scanner. */
33 struct tok {
34 int type;
35 char *text;
38 #define TOKEN struct tok
39 #define YY_DECL TOKEN* yylex(void)
41 #define FCODE 0xF00DBABE
42 #define MACRO 0xFEEDBABE
44 /* Defined fcode and string. */
45 struct fcode {
46 const char *name;
47 long num;
48 int type;
49 struct fcode *l;
50 struct fcode *r;
53 /* macro instruction as separate words */
54 struct macro {
55 const char *name;
56 const char *equiv;
57 int type;
58 struct macro *l;
59 struct macro *r;
63 * FCode header -- assumes big-endian machine,
64 * otherwise the bits need twiddling.
66 struct fcode_header {
67 char header;
68 char format;
69 short checksum;
70 int length;
73 /* Tokenizer tokens */
74 enum toktypes {
75 TOK_OCTAL = 8,
76 TOK_DECIMAL = 10,
77 TOK_HEX = 16,
79 TOK_NUMBER,
80 TOK_STRING_LIT,
81 TOK_C_LIT,
82 TOK_PSTRING,
83 TOK_TOKENIZE,
84 TOK_COMMENT,
85 TOK_ENDCOMMENT,
86 TOK_COLON,
87 TOK_SEMICOLON,
88 TOK_TOSTRING,
90 /* These are special */
91 TOK_AGAIN,
92 TOK_ALIAS,
93 TOK_GETTOKEN,
94 TOK_ASCII,
95 TOK_BEGIN,
96 TOK_BUFFER,
97 TOK_CASE,
98 TOK_CONSTANT,
99 TOK_CONTROL,
100 TOK_CREATE,
101 TOK_DEFER,
102 TOK_DO,
103 TOK_ELSE,
104 TOK_ENDCASE,
105 TOK_ENDOF,
106 TOK_EXTERNAL,
107 TOK_FIELD,
108 TOK_HEADERLESS,
109 TOK_HEADERS,
110 TOK_IF,
111 TOK_LEAVE,
112 TOK_LOOP,
113 TOK_OF,
114 TOK_REPEAT,
115 TOK_THEN,
116 TOK_TO,
117 TOK_UNTIL,
118 TOK_VALUE,
119 TOK_VARIABLE,
120 TOK_WHILE,
121 TOK_OFFSET16,
123 /* Tokenizer directives */
124 TOK_BEGTOK,
125 TOK_EMIT_BYTE,
126 TOK_ENDTOK,
127 TOK_FLOAD,
129 TOK_OTHER