Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
8320 leency 1
enum { TAG, OPTION_VALUE, TEXT, COMMENT, INLINE_COMMENT, CODE };
2
 
3
 
4
 
5
char* C_HL_keywords[] = {
6
    "switch", "if", "while", "for", "break", "continue", "return", "else",
7
    "union", "typedef", "static", "class", "case", "#include",
8
    "volatile", "register", "sizeof", "typedef", "union", "goto", "const", "auto",
9
    "#define", "#endif", "#error", "#ifdef", "#ifndef", "#undef", "#if", "#else",
10
    "inline",
11
 
12
    "int ", "dword ", "long ", "double ", "float ", "char ", "unsigned ", "signed ",
13
    "void ", "bool ", "enum ", "byte ", "word ", "struct ", "NULL", "loop", "stdcall ",
14
    ":void ", ":int ", ":bool ", ":dword ", NULL
15
};
16
 
17
dword ShowCodeSource(dword _bufpointer, _bufsize)
18
{
19
	dword new_buf, new_buf_start, i;
20
	int mode = CODE;
21
 
22
	char spstr[64];
23
	dword keylen;
24
	dword keyn;
25
	dword keycolor;
26
 
27
	new_buf = malloc(_bufsize*10);
28
	new_buf_start = new_buf;
29
	sprintf(new_buf,"%s
",#current_path);
30
	new_buf += strlen(new_buf);
31
	for (i=_bufpointer; i<_bufpointer+_bufsize; i++)
32
	{
33
		if ('<' == ESBYTE[i]) {
34
			strcpy(new_buf, "<");
35
			new_buf+=4;
36
			continue;
37
		}
38
		if ('>' == ESBYTE[i]) {
39
			strcpy(new_buf, ">");
40
			new_buf+=4;
41
			continue;
42
		}
43
		if (ESBYTE[i] >= '0') && (ESBYTE[i] <= '9') && (CODE == mode) {
44
			strcpy(new_buf, "?");
45
			ESBYTE[new_buf+20] = ESBYTE[i];
46
			new_buf+=28;
47
			if (ESBYTE[i+1] == 'x') {
48
				strcpy(new_buf, "x");
49
				new_buf+=28;
50
				i++;
51
			}
52
			continue;
53
		}
54
 
55
		if (CODE == mode) && ('\"' == ESBYTE[i]) {
56
			mode = TEXT;
57
			strcpy(new_buf, "\"");
58
			new_buf+=18;
59
			continue;
60
		}
61
		if (TEXT == mode) && ('\"' == ESBYTE[i]) {
62
			mode = CODE;
63
			strcpy(new_buf, "\"");
64
			new_buf+=8;
65
			continue;
66
		}
67
 
68
		if (! strncmp(i, "//", 2) ) && (mode == CODE) {
69
			mode = INLINE_COMMENT;
70
			strcpy(new_buf, "//");
71
			new_buf+=19;
72
			i++;
73
			continue;
74
		}
75
 
76
		if (INLINE_COMMENT == mode) {
77
			if (13 == ESBYTE[i]) {
78
				mode = CODE;
79
				strcpy(new_buf, "\13");
80
				new_buf+=8;
81
				continue;
82
			}
83
		}
84
 
85
		if (! strncmp(i, "/*", 2) ) {
86
			mode = COMMENT;
87
			strcpy(new_buf, "/*");
88
			new_buf+=19;
89
			i++;
90
			continue;
91
		}
92
		if (! strncmp(i, "*/", 2) ) {
93
			mode = CODE;
94
			strcpy(new_buf, "*/");
95
			new_buf+=9;
96
			i++;
97
			continue;
98
		}
99
 
100
		if (CODE == mode) for (keyn=0; C_HL_keywords[keyn]!=NULL; keyn++)
101
		{
102
			keylen = strlen(C_HL_keywords[keyn]);
103
			if (! strncmp(i, C_HL_keywords[keyn], keylen) ) {
104
 
105
				if (keyn<31) keycolor="#f00"; else keycolor="#00f";
106
				sprintf(#spstr, "%s", keycolor, C_HL_keywords[keyn]);
107
				strcpy(new_buf, #spstr);
108
 
109
				new_buf += keylen + 24;
110
				i += keylen-1;
111
				goto _CONTINUE;
112
			}
113
		}
114
		ESBYTE[new_buf] = ESBYTE[i];
115
		new_buf++;
116
		_CONTINUE:
117
	}
118
	ESBYTE[new_buf] = 0;
119
	LoadInternalPage(new_buf_start, new_buf - new_buf_start);
120
	free(new_buf_start);
121
}