Annotation of src/usr.bin/dc/bcode.h, Revision 1.7
1.7 ! otto 1: /* $OpenBSD: bcode.h,v 1.6 2012/11/06 16:00:05 otto Exp $ */
1.2 otto 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:
1.1 otto 19: #include <sys/types.h>
20: #include <ssl/bn.h>
21:
22:
23: struct number {
24: BIGNUM *number;
25: u_int scale;
26: };
27:
28: enum stacktype {
29: BCODE_NONE,
30: BCODE_NUMBER,
31: BCODE_STRING
32: };
33:
34: enum 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:
43: struct array;
44:
45: struct value {
46: union {
47: struct number *num;
48: char *string;
49: } u;
50: struct array *array;
51: enum stacktype type;
52: };
53:
54: struct array {
55: struct value *data;
56: size_t size;
57: };
58:
59: struct stack {
60: struct value *stack;
1.5 otto 61: ssize_t sp;
62: size_t size;
1.1 otto 63: };
64:
65: struct source;
66:
67: struct vtable {
68: int (*readchar)(struct source *);
1.4 otto 69: void (*unreadchar)(struct source *);
1.1 otto 70: char *(*readline)(struct source *);
71: void (*free)(struct source *);
72: };
73:
74: struct 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:
1.3 otto 86: void init_bmachine(bool);
1.1 otto 87: void reset_bmachine(struct source *);
1.7 ! otto 88: u_int bmachine_scale(void);
1.1 otto 89: void scale_number(BIGNUM *, int);
90: void normalize(struct number *, u_int);
91: void eval(void);
92: void pn(const char *, const struct number *);
93: void pbn(const char *, const BIGNUM *);
94: void negate(struct number *);
95: void split_number(const struct number *, BIGNUM *, BIGNUM *);
96: void bmul_number(struct number *, struct number *,
1.7 ! otto 97: struct number *, u_int scale);