Annotation of src/usr.bin/dc/bcode.h, Revision 1.2
1.2 ! otto 1: /* $OpenBSD$ */
! 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;
61: int sp;
62: int size;
63: };
64:
65: struct source;
66:
67: struct vtable {
68: int (*readchar)(struct source *);
69: int (*unreadchar)(struct source *);
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:
86: void init_bmachine(void);
87: void reset_bmachine(struct source *);
88: void scale_number(BIGNUM *, int);
89: void normalize(struct number *, u_int);
90: void eval(void);
91: void pn(const char *, const struct number *);
92: void pbn(const char *, const BIGNUM *);
93: void negate(struct number *);
94: void split_number(const struct number *, BIGNUM *, BIGNUM *);
95: void bmul_number(struct number *, struct number *,
96: struct number *);
97:
98: extern BIGNUM zero;