/
befunge.i
67 lines (53 loc) · 1.45 KB
/
befunge.i
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/* befunge.i ... by hmaon */
%module hbef
%{
#include "befunge.h"
%}
typedef struct {
int x, y;
} coord;
typedef struct {
int *stack;
int stacksize;
int sp;
} stackt;
typedef struct{
int *befungespace;
int **mem;
coord size;
coord ip;
coord delta;
stackt *stack;
stackt *call;
stackt *CTX;
int mode; /* bitfield */
int prevstrchar; /* previoius character in string, for \ escaping */
int teleport;
%addmethods {
bef_interp(int stack, int w, int h) { return bef_allocinterp(stack, w, h); }
~bef_interp() { bef_free(self); }
void push(int n) { push(self, n); }
int pop() { return pop(self); }
void do(char c) { bef_do(self, c); }
}
} bef_interp;
extern int tick, stringtick, noptick, btrace;
extern void strepl (stackt *, int);
extern void stpush (stackt *, int);
extern int stpeek (stackt *);
extern int stpop (stackt *);
extern int stdig (stackt *, int depth);
extern void breplace (bef_interp *, int);
extern void push (bef_interp *, int);
extern int bpeek (bef_interp *);
extern int pop (bef_interp *);
%new extern bef_interp *bef_allocinterp (int stack, int w, int h);
extern void bef_free (bef_interp *);
extern void bef_reset (bef_interp *);
extern void bef_do (bef_interp *, char);
extern int bef_step (bef_interp *);
extern int bef_run (bef_interp *);
extern int strtoicpy (int *, char *);
extern int bef_loadcode (bef_interp *, FILE *);
extern int bef_load93 (bef_interp *, char *name);
%new extern bef_interp *bef_loadh (char *name);