Subversion Repositories Kolibri OS

Rev

Rev 7592 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7592 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
 
7757 leency 17
dword ShowCodeSource(dword _bufpointer, _bufsize)
7592 leency 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
 
7757 leency 27
	new_buf = malloc(_bufsize*10);
7592 leency 28
	new_buf_start = new_buf;
7757 leency 29
	sprintf(new_buf,"%s
",#current_path);
7592 leency 30
	new_buf += strlen(new_buf);
7757 leency 31
	for (i=_bufpointer; i<_bufpointer+_bufsize; i++)
7592 leency 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;
7757 leency 119
	LoadInternalPage(new_buf_start, new_buf - new_buf_start);
120
	free(new_buf_start);
7592 leency 121
}