xref: /openbsd-src/usr.bin/fgen/fgen.h (revision 64522d2e0b5d653494125a650d539b1ef15c6afb)
1*64522d2eSotto /*	$OpenBSD: fgen.h,v 1.3 2020/03/24 07:00:40 otto Exp $	*/
2*64522d2eSotto /*	$NetBSD: fgen.h,v 1.9 2010/02/08 20:14:55 eeh Exp $	*/
396ea29a1Sjason /*
496ea29a1Sjason  * fgen.h -- stuff for the fcode tokenizer.
596ea29a1Sjason  *
696ea29a1Sjason  * Copyright (c) 1998 Eduardo Horvath.
796ea29a1Sjason  * All rights reserved.
896ea29a1Sjason  *
996ea29a1Sjason  * Redistribution and use in source and binary forms, with or without
1096ea29a1Sjason  * modification, are permitted provided that the following conditions
1196ea29a1Sjason  * are met:
1296ea29a1Sjason  * 1. Redistributions of source code must retain the above copyright
1396ea29a1Sjason  *    notice, this list of conditions and the following disclaimer.
1496ea29a1Sjason  * 2. Redistributions in binary form must reproduce the above copyright
1596ea29a1Sjason  *    notice, this list of conditions and the following disclaimer in the
1696ea29a1Sjason  *    documentation and/or other materials provided with the distribution.
1796ea29a1Sjason  *
1896ea29a1Sjason  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1996ea29a1Sjason  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2096ea29a1Sjason  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2196ea29a1Sjason  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2296ea29a1Sjason  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2396ea29a1Sjason  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2496ea29a1Sjason  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2596ea29a1Sjason  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2696ea29a1Sjason  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2796ea29a1Sjason  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2896ea29a1Sjason  */
2996ea29a1Sjason 
3096ea29a1Sjason /* Type of a Cell */
31*64522d2eSotto typedef int64_t Cell;
3296ea29a1Sjason 
3396ea29a1Sjason /* Token from the scanner. */
3496ea29a1Sjason struct tok {
3596ea29a1Sjason 	int type;
3696ea29a1Sjason 	char *text;
3796ea29a1Sjason };
3896ea29a1Sjason 
3996ea29a1Sjason #define TOKEN struct tok
40c72b5b24Smillert #define YY_DECL TOKEN* yylex(void)
4196ea29a1Sjason 
42*64522d2eSotto #define FCODE	0x000FC0DE
43*64522d2eSotto #define MACRO	0x0000F00D
4496ea29a1Sjason 
4596ea29a1Sjason /* Defined fcode and string. */
4696ea29a1Sjason struct fcode {
47*64522d2eSotto 	const char *name;
4896ea29a1Sjason 	long num;
4996ea29a1Sjason 	int type;
5096ea29a1Sjason 	struct fcode *l;
5196ea29a1Sjason 	struct fcode *r;
5296ea29a1Sjason };
5396ea29a1Sjason 
5496ea29a1Sjason /* macro instruction as separate words */
5596ea29a1Sjason struct macro {
56*64522d2eSotto 	const char *name;
57*64522d2eSotto 	const char *equiv;
5896ea29a1Sjason 	int type;
5996ea29a1Sjason 	struct macro *l;
6096ea29a1Sjason 	struct macro *r;
6196ea29a1Sjason };
6296ea29a1Sjason 
6396ea29a1Sjason /*
6496ea29a1Sjason  * FCode header -- assumes big-endian machine,
6596ea29a1Sjason  *	otherwise the bits need twiddling.
6696ea29a1Sjason  */
6796ea29a1Sjason struct fcode_header {
6896ea29a1Sjason 	char	header;
6996ea29a1Sjason 	char	format;
7096ea29a1Sjason 	short	checksum;
7196ea29a1Sjason 	int	length;
7296ea29a1Sjason };
7396ea29a1Sjason 
7496ea29a1Sjason /* Tokenizer tokens */
7596ea29a1Sjason enum toktypes {
7696ea29a1Sjason 	TOK_OCTAL = 8,
7796ea29a1Sjason 	TOK_DECIMAL = 10,
7896ea29a1Sjason 	TOK_HEX = 16,
7996ea29a1Sjason 
8096ea29a1Sjason 	TOK_NUMBER,
8196ea29a1Sjason 	TOK_STRING_LIT,
8296ea29a1Sjason 	TOK_C_LIT,
8396ea29a1Sjason 	TOK_PSTRING,
8496ea29a1Sjason 	TOK_TOKENIZE,
8596ea29a1Sjason 	TOK_COMMENT,
8696ea29a1Sjason 	TOK_COLON,
8796ea29a1Sjason 	TOK_SEMICOLON,
8896ea29a1Sjason 	TOK_TOSTRING,
8996ea29a1Sjason 
9096ea29a1Sjason 	/* These are special */
91*64522d2eSotto 	TOK_ABORT_S,
9296ea29a1Sjason 	TOK_AGAIN,
9396ea29a1Sjason 	TOK_ALIAS,
9496ea29a1Sjason 	TOK_GETTOKEN,
9596ea29a1Sjason 	TOK_ASCII,
9696ea29a1Sjason 	TOK_BEGIN,
9796ea29a1Sjason 	TOK_BUFFER,
9896ea29a1Sjason 	TOK_CASE,
9996ea29a1Sjason 	TOK_CONSTANT,
10096ea29a1Sjason 	TOK_CONTROL,
10196ea29a1Sjason 	TOK_CREATE,
10296ea29a1Sjason 	TOK_DEFER,
10396ea29a1Sjason 	TOK_DO,
10496ea29a1Sjason 	TOK_ELSE,
105*64522d2eSotto 	TOK_END0,
10696ea29a1Sjason 	TOK_ENDCASE,
10796ea29a1Sjason 	TOK_ENDOF,
10896ea29a1Sjason 	TOK_EXTERNAL,
109*64522d2eSotto 	TOK_FCODE_VERSION2,
110*64522d2eSotto 	TOK_FCODE_END,
11196ea29a1Sjason 	TOK_FIELD,
11296ea29a1Sjason 	TOK_HEADERLESS,
11396ea29a1Sjason 	TOK_HEADERS,
11496ea29a1Sjason 	TOK_IF,
11596ea29a1Sjason 	TOK_LEAVE,
11696ea29a1Sjason 	TOK_LOOP,
11796ea29a1Sjason 	TOK_OF,
118*64522d2eSotto 	TOK_OFFSET16,
11996ea29a1Sjason 	TOK_REPEAT,
120*64522d2eSotto 	TOK_STARTX,
12196ea29a1Sjason 	TOK_THEN,
12296ea29a1Sjason 	TOK_TO,
12396ea29a1Sjason 	TOK_UNTIL,
12496ea29a1Sjason 	TOK_VALUE,
12596ea29a1Sjason 	TOK_VARIABLE,
126*64522d2eSotto 	TOK_VERSION1,
12796ea29a1Sjason 	TOK_WHILE,
12896ea29a1Sjason 
12996ea29a1Sjason 	/* Tokenizer directives */
13096ea29a1Sjason 	TOK_BEGTOK,
13196ea29a1Sjason 	TOK_EMIT_BYTE,
13296ea29a1Sjason 	TOK_ENDTOK,
13396ea29a1Sjason 	TOK_FLOAD,
13496ea29a1Sjason 
13596ea29a1Sjason 	TOK_OTHER
13696ea29a1Sjason };
137