Subversion Repositories Kolibri OS

Rev

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();