Rev 7562 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7562 | Rev 7563 | ||
---|---|---|---|
Line 4... | Line 4... | ||
4 | 4 | ||
Line 5... | Line 5... | ||
5 | #define MEMSIZE 4096*10 |
5 | #define MEMSIZE 4096*10 |
6 | 6 | ||
- | 7 | #include "../lib/io.h" |
|
Line 7... | Line 8... | ||
7 | #include "../lib/io.h" |
8 | #include "../lib/obj/console.h" |
- | 9 | #include "../lib/array.h" |
|
- | 10 | ||
Line 8... | Line 11... | ||
8 | #include "../lib/obj/console.h" |
11 | byte initConsole = 0; |
Line 9... | Line 12... | ||
9 | 12 | Dictionary functions = {0}; |
|
10 | byte initConsole = 0; |
13 | Dictionary variables = {0}; |
Line 61... | Line 64... | ||
61 | code++; |
64 | code++; |
62 | break; |
65 | break; |
63 | } |
66 | } |
64 | if (!args) |
67 | if (!args) |
65 | { |
68 | { |
66 | if(s>='A') && (s<='z') // name function |
69 | if(s!=' ') && (s!=')') // name function |
67 | { |
70 | { |
68 | while (s>='A') && (s<='z') |
71 | while (s!=' ') && (s!=')') |
69 | { |
72 | { |
70 | DSBYTE[pos] = s; |
73 | DSBYTE[pos] = s; |
71 | code++; |
74 | code++; |
72 | s = DSBYTE[code]; |
75 | s = DSBYTE[code]; |
73 | pos++; |
76 | pos++; |
Line 99... | Line 102... | ||
99 | } |
102 | } |
100 | } |
103 | } |
101 | code++; |
104 | code++; |
102 | args++; |
105 | args++; |
103 | } |
106 | } |
104 | args -= 2; |
107 | args--; |
105 | ret = StdCall(args, name, dataArgs); |
108 | ret = StdCall(args, name, dataArgs); |
106 | free(name); |
109 | free(name); |
107 | free(dataArgs); |
110 | free(dataArgs); |
108 | return ret; |
111 | return ret; |
109 | } |
112 | } |
Line 110... | Line -... | ||
110 | - | ||
111 | 113 | ||
112 | void main() |
114 | void main() |
113 | { |
115 | { |
114 | dword brainFuckCode = 0; |
116 | dword brainFuckCode = 0; |
- | 117 | word maxLoop = 1000; |
|
Line 115... | Line 118... | ||
115 | word maxLoop = 1000; |
118 | dword txt = "(print (str 1) (str 2))"; |
116 | 119 | ||
117 | buffer = malloc(bufferSize); |
120 | buffer = malloc(bufferSize); |
Line -... | Line 121... | ||
- | 121 | memory = malloc(memoryBrainfuck); |
|
- | 122 | stack = malloc(stackBrainFuck); |
|
118 | memory = malloc(memoryBrainfuck); |
123 | |
119 | stack = malloc(stackBrainFuck); |
124 | Init(); |
120 | 125 | ||
121 | IF(DSBYTE[I_Param]) |
126 | IF(DSBYTE[I_Param]) |
122 | { |
127 | { |
123 | IF(io.read(I_Param)) |
128 | IF(io.read(I_Param)) |
124 | { |
129 | { |
- | 130 | code = EAX; |
|
125 | code = EAX; |
131 | loop() |
126 | loop() |
132 | { |
127 | { |
133 | while(DSBYTE[code] == ' ') code++; |
128 | if(DSBYTE[code]!='(') break; |
134 | if(DSBYTE[code]!='(') break; |
129 | else code++; |
135 | else code++; |
130 | evalLisp(); |
136 | evalLisp(); |
131 | if(DSBYTE[code]!=')') break; |
137 | if(DSBYTE[code]!=')') break; |
132 | code++; |
138 | code++; |
133 | } |
139 | } |
134 | } |
140 | } |
135 | } |
141 | } |
136 | ELSE |
142 | else |
137 | { |
143 | { |
138 | consoleInit(); |
144 | consoleInit(); |
139 | con_printf stdcall ("Lisp interpreter v1.0"); |
145 | con_printf stdcall ("Lisp interpreter v1.2"); |
140 | WHILE(maxLoop) |
146 | WHILE(maxLoop) |
141 | { |
147 | { |
- | 148 | con_printf stdcall ("\r\n\r\nEnter code: "); |
|
142 | con_printf stdcall ("\r\n\r\nEnter code: "); |
149 | con_gets stdcall(buffer, bufferSize); |
143 | con_gets stdcall(buffer, bufferSize); |
150 | code = EAX; |
- | 151 | code = txt; |
|
144 | code = EAX; |
152 | con_printf stdcall ("Output: "); |
145 | con_printf stdcall ("Output: "); |
153 | nextLispLine: |
146 | nextLispLine: |
154 | while(DSBYTE[code] == ' ') code++; |
147 | if(DSBYTE[code]!='(') continue; |
155 | if(DSBYTE[code]!='(') continue; |
148 | else code++; |
156 | else code++; |