/* Copyright 1989, 1990 by James Aspnes, David Applegate, and Bennet Yee */ /* See the file COPYING for distribution information */ #ifndef _BYTECODE_H #define _BYTECODE_H #include "config.h" /* unused printable tokens: _\:456789GHIOPRUVWYZ[bdehknopqrw */ #define RETURN_OP 0 #define MOVE_OP 'm' #define TELL_INIT_OP 't' #define ADD_BUF_OP 'B' #define ADD_NUM_BUF_OP '#' #define TELL_OP 'T' #define MATCHES_OP 'M' #define TEXT_OP '@' #define MTEXT_OP '&' #define EQ_OP '=' #define NEQ_OP 'x' #define NOT_OP '!' #define TRUE_OP '1' #define FALSE_OP '0' #define LOC_OP 'L' #define LOOKUP_OP '.' #define SET_OP 's' #define UNSET_OP 'z' #define ME_OP 'i' #define YOU_OP 'u' #define NEXT_OP 'N' #define JUMP_OP 'j' #define JUMP_BACK_OP 'J' #define JUMP_IF_OP '?' #define DO_SET_INIT_OP 'D' #define MATCHING_DO_SET_INIT_OP 'E' #define DO_NEXT_OP 'f' #define MATCHING_DO_NEXT_OP 'F' #define LITERAL_OP '^' #define DROP_OP 'v' #define DUP_OP '2' #define RANDOM_OP '$' #define PLUS_OP '+' #define MINUS_OP '-' #define NEGATE_OP '~' #define TIMES_OP '*' #define DIV_OP '/' #define MOD_OP '%' #define LT_OP '<' #define GT_OP '>' #define LEQ_OP 'l' #define GEQ_OP 'g' #define CREATE_OP 'K' #define DESTROY_OP 'X' #define SYSCALL_OP 'Q' #define SET_ACTION_OP 'a' #define UNSET_ACTION_OP 'A' #define LOOKUP_ACTION_OP ',' #define SET_STRING_OP 'S' #define CLEAR_SET_OP ';' #define ADD_SET_OP '(' #define DEL_SET_OP ')' #define CONTAINS_OP '[' #define COUNT_OP 'C' #define TIME_OP '\'' #define ADD_TIME_BUF_OP '\"' #define DELAY_OP 'y' #define EXIT_OP ']' #define CONCAT_OP '|' #define NUM_TO_STRING_OP '3' /* alignment sucks! */ /* set sizeof(byte) = alignment of datum */ typedef datum byte; #define ARG_WIDTH (sizeof(datum) / sizeof(byte)) #define ARG_VALUE(bp) (*((datum *) (bp))) #define ARG_STORE(bp, val) (ARG_VALUE(bp) = (val)) /* calculates the offset based on the number of bytes skipped over */ #define CALCULATE_OFFSET(skipped) ((skipped)+ARG_WIDTH) #define CALCULATE_REVERSE_OFFSET(skipped) ((skipped) + 1) #define STACKSIZE 2048 /* max stack depth */ extern byte *compile (const char *); extern int run_code (byte *); extern int run_action (datum action); extern char compile_error[]; #endif /* _BYTECODE_H */