/[pearpc]/src/io/prom/forth.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /src/io/prom/forth.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations)
Wed Sep 5 17:11:21 2007 UTC (16 years, 6 months ago) by dpavlin
File MIME type: text/plain
File size: 4590 byte(s)
import upstream CVS
1 /*
2 * PearPC
3 * forth.h
4 *
5 * Copyright (C) 2003 Sebastian Biallas (sb@biallas.net)
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 */
20
21 #ifndef __IO_FORTH_H__
22 #define __IO_FORTH_H__
23
24 #include "system/types.h"
25 #include "tools/data.h"
26 #include "tools/stream.h"
27 #include "tools/except.h"
28
29 enum ForthPosMode {
30 fpmOffset,
31 fpmLinePos,
32 };
33
34 class ForthPos: public Object {
35 uint32 mOffset;
36 int mLine, mPos;
37 ForthPosMode mFpm;
38 public:
39 ForthPos();
40 virtual int toString(char *buf, int buflen) const;
41 void copy(ForthPos &p);
42 void setMode(ForthPosMode fpm);
43 void setLinePos(int line, int pos);
44 void clearPos();
45 void setOffset(uint32 offset);
46 void inc();
47 void inc(int n);
48 void incLine();
49 };
50
51 class ForthException: public MsgException {
52 public:
53 ForthException();
54 };
55
56 class ForthInterpreterException: public ForthException {
57 public:
58 ForthInterpreterException(ForthPos &pos, const char *err, ...);
59 };
60
61 class ForthRunException: public ForthException {
62 public:
63 ForthRunException(ForthPos &pos, const char *err, ...);
64 };
65
66 enum ForthVMMode {
67 fmInterprete,
68 fmCompile,
69 };
70
71 class ForthVM;
72
73 typedef void (*FCodeFunction)(ForthVM &vm);
74
75 class ForthVM: public Object {
76 private:
77 Stack *datastack;
78 Stack *codestack;
79 Container *mGlobalVocalbulary;
80 public:
81 char currentChar;
82 char mCurToken[50];
83 ForthPos mPos;
84 ForthPos mErrorPos;
85 Stream *input, *output;
86
87 ForthVMMode mMode;
88
89 int mStringBufferIdx;
90 char *mStringBuffer[2];
91 uint32 mStringBufferEA[2];
92
93 int mFCodeBufferIdx;
94 String *mFCodeBuffer;
95
96 FCodeFunction mFCodes[0xfff];
97
98 ForthVM();
99 ~ForthVM();
100
101 void interprete(Stream &input, Stream &output);
102
103 // compile
104 void emitFCode(uint32 fcode);
105 void emitFCodeByte(byte b);
106 byte getFCodeByte();
107 uint32 getFCode();
108
109 // data stack
110 void dataPush(uint32 value);
111 uint32 dataPop();
112 bool dataEmpty();
113 uint32 dataGet(uint n=0);
114 void dataClear();
115 uint32 dataDepth();
116 void * dataStr(uint32 u, bool exc);
117
118 // code stack
119 void codePush(uint32 value);
120 uint32 codePop();
121 bool codeEmpty();
122 uint32 codeGet(uint n=0);
123 void codeClear();
124 uint32 codeDepth();
125
126 // io
127 int outf(const char *m, ...);
128 bool getChar();
129 bool consumeSpace(bool except);
130 String &getToken(const String &delimiters);
131 bool skipWhite();
132 bool skipWhiteCR();
133
134 // memory
135 void promMalloc(uint32 size, uint32 &ea, void **p);
136 };
137
138 class ForthWord: public Object {
139 char *mName;
140 public:
141 ForthWord(const char *name);
142 ~ForthWord();
143
144 virtual int compareTo(const Object *obj) const;
145 virtual void compile(ForthVM &vm);
146 virtual uint32 getExecToken(ForthVM &vm);
147 virtual void interprete(ForthVM &vm);
148 virtual int toString(char *buf, int buflen) const;
149 };
150
151 class ForthVar: public ForthWord {
152 public:
153 ForthVar(const char *name, uint32 address);
154 virtual void compile(ForthVM &vm);
155 virtual uint32 getExecToken(ForthVM &vm);
156 virtual void interprete(ForthVM &vm);
157 };
158
159 class ForthValue: public ForthWord {
160 public:
161 ForthValue(const char *name, uint32 address);
162 virtual void compile(ForthVM &vm);
163 virtual uint32 getExecToken(ForthVM &vm);
164 virtual void interprete(ForthVM &vm);
165 };
166
167 class ForthWordBuildIn: public ForthWord {
168 uint32 mFCode;
169 FCodeFunction mFunc;
170 public:
171 ForthWordBuildIn(const char *name, uint32 fcode, FCodeFunction func);
172 virtual void compile(ForthVM &vm);
173 virtual uint32 getExecToken(ForthVM &vm);
174 virtual void interprete(ForthVM &vm);
175 };
176
177 class ForthWordAlias: public ForthWord {
178 int mNumFCodes;
179 uint16 *mFCodes;
180 public:
181 ForthWordAlias(const char *name, int n, ...);
182 virtual void compile(ForthVM &vm);
183 virtual void interprete(ForthVM &vm);
184 };
185
186 enum ForthWordStringType {
187 fwstString,
188 fwstStringWithHex,
189 fwstStringPrint,
190 fwstStringPrintBracket,
191 };
192
193 class ForthWordString: public ForthWord {
194 ForthWordStringType mFwst;
195 public:
196 ForthWordString(const char *name, ForthWordStringType fwst);
197 virtual void compile(ForthVM &vm);
198 String &get(ForthVM &vm, String &s);
199 virtual void interprete(ForthVM &vm);
200 };
201
202 #endif
203

  ViewVC Help
Powered by ViewVC 1.1.26