Rev 7556 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7556 | Rev 7557 | ||
---|---|---|---|
Line 14... | Line 14... | ||
14 | 14 | ||
15 | dword buffer = 0; |
15 | dword buffer = 0; |
16 | word bufferSymbol = 0; |
16 | word bufferSymbol = 0; |
17 | dword memory = 0; |
17 | dword memory = 0; |
- | 18 | byte initConsole = 0; |
|
Line 18... | Line 19... | ||
18 | byte initConsole = 0; |
19 | dword stack = 0; |
19 | 20 | ||
20 | void consoleInit() |
21 | void consoleInit() |
21 | { |
22 | { |
- | 23 | IF(!initConsole) |
|
22 | IF(!initConsole) |
24 | { |
23 | { |
25 | load_dll(libConsole, #con_init, 0); |
24 | con_init stdcall (-1, -1, -1, -1, "BrainF*ck interpreter"); |
26 | con_init stdcall (-1, -1, -1, -1, "BrainF*ck interpreter"); |
25 | initConsole = 0xFF; |
27 | initConsole = 0xFF; |
Line 42... | Line 44... | ||
42 | offsetMemory++; |
44 | offsetMemory++; |
43 | } |
45 | } |
44 | //-------- |
46 | //-------- |
Line 45... | Line 47... | ||
45 | 47 | ||
- | 48 | offsetMemory = memory + countOffset; |
|
Line 46... | Line 49... | ||
46 | offsetMemory = memory + countOffset; |
49 | countStack = stack; |
47 | 50 | ||
48 | WHILE(1) |
51 | WHILE(1) |
49 | { |
52 | { |
Line 54... | Line 57... | ||
54 | break; |
57 | break; |
55 | case '-': |
58 | case '-': |
56 | DSBYTE[offsetMemory]--; |
59 | DSBYTE[offsetMemory]--; |
57 | break; |
60 | break; |
58 | case '[': |
61 | case '[': |
- | 62 | DSDWORD[countStack] = code; |
|
59 | $push code; |
63 | countStack += 4; |
60 | break; |
64 | break; |
61 | case ']': |
65 | case ']': |
62 | IF (DSBYTE[offsetMemory]) code = DSDWORD[ESP]; |
66 | IF (DSBYTE[offsetMemory]) code = DSDWORD[countStack - 4]; |
63 | ELSE $pop EAX; |
67 | ELSE countStack -= 4; |
64 | break; |
68 | break; |
65 | case ',': |
69 | case ',': |
66 | consoleInit(); |
70 | consoleInit(); |
67 | con_getch stdcall(); |
71 | con_getch stdcall(); |
68 | DSBYTE[offsetMemory] = AL; |
72 | DSBYTE[offsetMemory] = AL; |
Line 91... | Line 95... | ||
91 | { |
95 | { |
92 | dword brainFuckCode = 0; |
96 | dword brainFuckCode = 0; |
Line 93... | Line 97... | ||
93 | 97 | ||
94 | buffer = malloc(bufferSize); |
98 | buffer = malloc(bufferSize); |
95 | memory = malloc(memoryBrainfuck); |
- | |
96 | 99 | memory = malloc(memoryBrainfuck); |
|
Line 97... | Line 100... | ||
97 | load_dll(libConsole, #con_init, 0); |
100 | stack = malloc(stackBrainFuck); |
98 | 101 | ||
99 | IF(DSBYTE[I_Param]) |
102 | IF(DSBYTE[I_Param]) |
100 | { |
103 | { |
101 | IF(io.read(I_Param)) evalBrainFuckCode(EAX); |
104 | IF(io.read(I_Param)) evalBrainFuckCode(EAX); |
102 | } |
105 | } |
103 | ELSE |
106 | ELSE |
104 | { |
107 | { |
105 | consoleInit(); |
108 | consoleInit(); |
106 | con_printf stdcall ("BrainF*ck interpreter v1.1\r\n"); |
109 | con_printf stdcall ("BrainF*ck interpreter v1.01\r\n"); |
107 | loop() |
110 | loop() |
108 | { |
- | |
109 | con_printf stdcall ("\r\nEnter BrainF*ck code:\r\n"); |
111 | { |
110 | con_printf stdcall ("Output BrainF*ck:\r\n"); |
112 | con_printf stdcall ("\r\nEnter BrainF*ck code:\r\n"); |
111 | con_gets stdcall(buffer, bufferSize); |
113 | con_gets stdcall(buffer, bufferSize); |
112 | evalBrainFuckCode(EAX); |
114 | evalBrainFuckCode(EAX); |
113 | con_printf stdcall ("\r\n"); |
115 | con_printf stdcall ("\r\nOutput BrainF*ck:\r\n"); |
114 | } |
- | |
115 | } |
116 | } |
- | 117 | } |
|
116 | IF(initConsole) con_exit stdcall (0); |
118 | ExitProcess(); |