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