jcs's openbsd hax
openbsd
at jcs 97 lines 2.2 kB view raw
1/* $OpenBSD: bcode.h,v 1.8 2015/02/16 20:53:34 jca Exp $ */ 2 3/* 4 * Copyright (c) 2003, Otto Moerbeek <otto@drijf.net> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19#include <sys/types.h> 20#include <openssl/bn.h> 21 22 23struct number { 24 BIGNUM *number; 25 u_int scale; 26}; 27 28enum stacktype { 29 BCODE_NONE, 30 BCODE_NUMBER, 31 BCODE_STRING 32}; 33 34enum bcode_compare { 35 BCODE_EQUAL, 36 BCODE_NOT_EQUAL, 37 BCODE_LESS, 38 BCODE_NOT_LESS, 39 BCODE_GREATER, 40 BCODE_NOT_GREATER 41}; 42 43struct array; 44 45struct value { 46 union { 47 struct number *num; 48 char *string; 49 } u; 50 struct array *array; 51 enum stacktype type; 52}; 53 54struct array { 55 struct value *data; 56 size_t size; 57}; 58 59struct stack { 60 struct value *stack; 61 ssize_t sp; 62 size_t size; 63}; 64 65struct source; 66 67struct vtable { 68 int (*readchar)(struct source *); 69 void (*unreadchar)(struct source *); 70 char *(*readline)(struct source *); 71 void (*free)(struct source *); 72}; 73 74struct source { 75 struct vtable *vtable; 76 union { 77 FILE *stream; 78 struct { 79 u_char *buf; 80 size_t pos; 81 } string; 82 } u; 83 int lastchar; 84}; 85 86void init_bmachine(bool); 87void reset_bmachine(struct source *); 88u_int bmachine_scale(void); 89void scale_number(BIGNUM *, int); 90void normalize(struct number *, u_int); 91void eval(void); 92void pn(const char *, const struct number *); 93void pbn(const char *, const BIGNUM *); 94void negate(struct number *); 95void split_number(const struct number *, BIGNUM *, BIGNUM *); 96void bmul_number(struct number *, struct number *, 97 struct number *, u_int scale);