enum { TAG, OPTION_VALUE, TEXT, COMMENT, SCRIPT}; dword ShowSource() { dword new_buf, new_buf_start, i, j; int opened_font=0; int mode = TEXT; if (souce_mode) return; souce_mode = true; new_buf = malloc(bufsize*5); new_buf_start = new_buf; header[strrchr(#header, '-')-2]=0; sprintf(new_buf,"Source: %s
",#header);
	new_buf += strlen(new_buf);
	for (i=bufpointer; i<script"); opened_font++;
					new_buf+=54;
					i+=6;
					break;
				}
				if (mode == COMMENT) || (mode == SCRIPT) && (!strncmp(i+1,"/script>", 8)) {
					mode = TEXT;
					while (opened_font) {
						strcpy(new_buf, ""); opened_font--;
						new_buf+=7;						
					}
					strcpy(new_buf, "</script>"); 
					new_buf+=39;
					i+=8;
					break;
				}
				if (ESBYTE[i+1]=='!') && (ESBYTE[i+2]=='-') && (ESBYTE[i+3]=='-') {
					mode = COMMENT;
					strcpy(new_buf, "<"); opened_font++;
					new_buf+=21;
					break;
				}
				if (mode == TEXT) {
					mode = TAG;
					strcpy(new_buf, "<"); opened_font++;
					new_buf+=21;
					break;
				}
				if (mode == COMMENT) || (mode == SCRIPT) {
					strcpy(new_buf, "<");
					new_buf+=4;
					break;
				}
				break;
			case '>':
				if (mode == OPTION_VALUE) { //fix non-closed quote in TAG
					mode = TEXT;
					while (opened_font) {
						strcpy(new_buf, """); opened_font--;
						new_buf+=13;						
					}
					break;
				}
				if (mode == COMMENT) && (ESBYTE[i-1]=='-') && (ESBYTE[i-2]=='-') {
					mode = TEXT;
					strcpy(new_buf, ">"); opened_font--;
					new_buf+=11;
					break;
				}
				if (mode == COMMENT) || (mode == SCRIPT) {
					strcpy(new_buf, ">");
					new_buf+=4;
					break;					
				}
				if (mode == TAG) {
					mode = TEXT;
					strcpy(new_buf, ">"); opened_font--;
					new_buf+=11;
					break;
				}
				break;
			case '\"':
			case '\'':
				if (mode == TAG) {
					mode = OPTION_VALUE;
					strcpy(new_buf, "'"); opened_font++;
					new_buf+=25;
					break;
				}
				if (mode == OPTION_VALUE) {
					mode = TAG;
					strcpy(new_buf, "'"); opened_font--;
					new_buf+=12;
					break;
				}
			default:
				ESBYTE[new_buf] = ESBYTE[i];
				new_buf++;
		}
	}
	ESBYTE[new_buf] = 0;
	bufsize = new_buf - new_buf_start;
	free(bufpointer);
	bufpointer = new_buf_start;
}

/*

enum { TAG, OPTION_VALUE, TEXT, COMMENT, INLINE_COMMENT, CODE };

char* C_HL_keywords[] = {
    "switch", "if", "while", "for", "break", "continue", "return", "else",
    "union", "typedef", "static", "class", "case", "#include",
    "volatile", "register", "sizeof", "typedef", "union", "goto", "const", "auto",
    "#define", "#endif", "#error", "#ifdef", "#ifndef", "#undef", "#if", "#else", 
    "inline", 

    "int ", "dword ", "long ", "double ", "float ", "char ", "unsigned ", "signed ",
    "void ", "bool ", "enum ", "byte ", "word ", "struct ", "NULL", "loop", "stdcall ",
    ":void ", ":int ", ":bool ", ":dword ", NULL
};

dword ShowCodeSource()
{
	dword new_buf, new_buf_start, i;
	int mode = CODE;

	char spstr[64];
	dword keylen;
	dword keyn;
	dword keycolor;

	new_buf = malloc(bufsize*10);
	new_buf_start = new_buf;
	sprintf(new_buf,"C/C++/C-- source: %s
",#URL);
	new_buf += strlen(new_buf);
	for (i=bufpointer; i' == ESBYTE[i]) {
			strcpy(new_buf, ">");
			new_buf+=4;
			continue;
		}
		if (ESBYTE[i] >= '0') && (ESBYTE[i] <= '9') && (CODE == mode) {
			strcpy(new_buf, "?");
			ESBYTE[new_buf+20] = ESBYTE[i];
			new_buf+=28;
			if (ESBYTE[i+1] == 'x') {
				strcpy(new_buf, "x");
				new_buf+=28;
				i++;
			}
			continue;
		}

		if (CODE == mode) && ('\"' == ESBYTE[i]) {
			mode = TEXT;
			strcpy(new_buf, "\"");
			new_buf+=18;
			continue;
		}
		if (TEXT == mode) && ('\"' == ESBYTE[i]) {
			mode = CODE;
			strcpy(new_buf, "\"");
			new_buf+=8;
			continue;		
		}

		if (! strncmp(i, "//", 2) ) && (mode == CODE) {
			mode = INLINE_COMMENT;
			strcpy(new_buf, "//");
			new_buf+=19;
			i++;
			continue;
		}

		if (INLINE_COMMENT == mode) {
			if (13 == ESBYTE[i]) {
				mode = CODE;
				strcpy(new_buf, "\13");
				new_buf+=8;
				continue;				
			}
		}

		if (! strncmp(i, "/*", 2) ) {
			mode = COMMENT;
			strcpy(new_buf, "/*");
			new_buf+=19;
			i++;
			continue;
		}
		if (! strncmp(i, "*/", 2) ) {
			mode = CODE;
			strcpy(new_buf, "*/");
			new_buf+=9;
			i++;
			continue;
		}

		if (CODE == mode) for (keyn=0; C_HL_keywords[keyn]!=NULL; keyn++) 
		{
			keylen = strlen(C_HL_keywords[keyn]);
			if (! strncmp(i, C_HL_keywords[keyn], keylen) ) {

				if (keyn<31) keycolor="#f00"; else keycolor="#00f";
				sprintf(#spstr, "%s", keycolor, C_HL_keywords[keyn]);
				strcpy(new_buf, #spstr);

				new_buf += keylen + 24;
				i += keylen-1;
				goto _CONTINUE;
			}
		}
		ESBYTE[new_buf] = ESBYTE[i];
		new_buf++;
		_CONTINUE:		
	}
	ESBYTE[new_buf] = 0;
	bufsize = new_buf - new_buf_start;
	free(bufpointer);
	bufpointer = new_buf_start;
}
*/