enum { TAG, OPTION_VALUE, TEXT, COMMENT }; //you are butifull, you are butifull dword ShowSource() { dword new_buf, new_buf_start, i; byte ww, mode; if (souce_mode) return; souce_mode = true; new_buf = malloc(bufsize*5); new_buf_start = new_buf; header[strrchr(#header, '-')-2]=0; new_buf += sprintf(new_buf,"<html><head><title>Source: %s</title><body><pre>",#header); for (i=bufpointer; i<bufpointer+bufsize; i++) { ww = ESBYTE[i]; switch (ww) { case '<': if (ESBYTE[i+1]=='!') && (ESBYTE[i+2]=='-') && (ESBYTE[i+3]=='-') { strcpy(new_buf, "<font color=#bbb><"); new_buf+=21; mode = COMMENT; } if (mode != COMMENT) { strcpy(new_buf, "<font color=#00f><"); new_buf+=21; mode = TAG; } break; case '>': if (mode == OPTION_VALUE) //fix non-closed quote in TAG { strcpy(new_buf, ""</font>"); new_buf+=13; mode = TAG; } if (mode == COMMENT) && (ESBYTE[i-1]=='-') && (ESBYTE[i-2]=='-') { strcpy(new_buf, "></font>"); new_buf+=11; mode = TEXT; } if (mode == TAG) { strcpy(new_buf, "></font>"); new_buf+=11; mode = TEXT; } break; case '\"': case '\'': if (mode == TAG) { strcpy(new_buf, "<font color=#f0f>'"); new_buf+=22; mode = OPTION_VALUE; break; } if (mode == OPTION_VALUE) { strcpy(new_buf, "'</font>"); new_buf+=12; mode = TAG; break; } default: ESBYTE[new_buf] = ww; new_buf++; } } ESBYTE[new_buf] = 0; bufsize = new_buf - new_buf_start; free(bufpointer); bufpointer = new_buf_start; }