Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  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()
  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,"<html><head><body><pre>",#URL);
  30.         new_buf += strlen(new_buf);
  31.         for (i=bufpointer; i<bufpointer+bufsize; i++)
  32.         {
  33.                 if ('<' == ESBYTE[i]) {
  34.                         strcpy(new_buf, "&lt;");
  35.                         new_buf+=4;
  36.                         continue;
  37.                 }
  38.                 if ('>' == ESBYTE[i]) {
  39.                         strcpy(new_buf, "&gt;");
  40.                         new_buf+=4;
  41.                         continue;
  42.                 }
  43.                 if (ESBYTE[i] >= '0') && (ESBYTE[i] <= '9') && (CODE == mode) {
  44.                         strcpy(new_buf, "<font color=#CF00FF>?</font>");
  45.                         ESBYTE[new_buf+20] = ESBYTE[i];
  46.                         new_buf+=28;
  47.                         if (ESBYTE[i+1] == 'x') {
  48.                                 strcpy(new_buf, "<font color=#CF00FF>x</font>");
  49.                                 new_buf+=28;
  50.                                 i++;
  51.                         }
  52.                         continue;
  53.                 }
  54.  
  55.                 if (CODE == mode) && ('\"' == ESBYTE[i]) {
  56.                         mode = TEXT;
  57.                         strcpy(new_buf, "<font color=#080>\"");
  58.                         new_buf+=18;
  59.                         continue;
  60.                 }
  61.                 if (TEXT == mode) && ('\"' == ESBYTE[i]) {
  62.                         mode = CODE;
  63.                         strcpy(new_buf, "\"</font>");
  64.                         new_buf+=8;
  65.                         continue;              
  66.                 }
  67.  
  68.                 if (! strncmp(i, "//", 2) ) && (mode == CODE) {
  69.                         mode = INLINE_COMMENT;
  70.                         strcpy(new_buf, "<font color=#999>//");
  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</font>");
  80.                                 new_buf+=8;
  81.                                 continue;                              
  82.                         }
  83.                 }
  84.  
  85.                 if (! strncmp(i, "/*", 2) ) {
  86.                         mode = COMMENT;
  87.                         strcpy(new_buf, "<font color=#999>/*");
  88.                         new_buf+=19;
  89.                         i++;
  90.                         continue;
  91.                 }
  92.                 if (! strncmp(i, "*/", 2) ) {
  93.                         mode = CODE;
  94.                         strcpy(new_buf, "*/</font>");
  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, "<font color=%s>%s</font>", 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.         bufsize = new_buf - new_buf_start;
  120.         free(bufpointer);
  121.         bufpointer = new_buf_start;
  122. }