Bladeren bron

Trying to get ansi-to-src working right.

Having problems compiling the output from
this program.  repr isn't working correctly
for all characters.   Needs work/deep thought.
bugz 4 jaren geleden
bovenliggende
commit
79b2ef0256
1 gewijzigde bestanden met toevoegingen van 39 en 27 verwijderingen
  1. 39 27
      ansi-to-src.cpp

+ 39 - 27
ansi-to-src.cpp

@@ -19,13 +19,13 @@ char *repr(const char *data) {
   while (*cp != 0) {
     char c = *cp;
 
-    if (isspace(c)) {
-      if (c == ' ') {
-        cp++;
-        continue;
-      };
-      /* Ok, it's form-feed ('\f'), newline ('\n'), carriage return ('\r'),
-       * horizontal tab ('\t'), and vertical tab ('\v') */
+    if (c == ' ') {
+      cp++;
+      continue;
+    };
+    /* Ok, it's form-feed ('\f'), newline ('\n'), carriage return ('\r'),
+     * horizontal tab ('\t'), and vertical tab ('\v') */
+    if (strchr("\f\n\r\t\v\?", c) != NULL) {
       memmove(cp + 1, cp, strlen(cp) + 1);
       *cp = '\\';
       cp++;
@@ -58,30 +58,44 @@ char *repr(const char *data) {
       continue;
     }
 
-    if (isprint(c)) {
+    if (c == '\\') {
+      memmove(cp, cp + 1, strlen(cp) + 1);
+      *cp = '\\';
+      cp += 2;
+      continue;
+    }
+    if (c == '"') {
+      memmove(cp, cp + 1, strlen(cp) + 1);
+      *cp = '\\';
+      cp += 2;
+      continue;
+    }
+    if (strchr("[()]{}:;,.<>?!@#$%^&*", c) != NULL) {
       cp++;
       continue;
-    };
+    }
+    if (strchr("0123456789", c) != NULL) {
+      cp++;
+      continue;
+    }
+    if (strchr("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", c) !=
+        NULL) {
+      cp++;
+      continue;
+    }
 
     // Ok, default to \xHH output.
     memmove(cp + 3, cp, strlen(cp) + 1);
-    *cp = '\\';
-    cp++;
-    *cp = 'x';
-    cp++;
-    char buffer[3];
-    sprintf(buffer, "%02x", (int)c & 0xff);
-    *cp = buffer[0];
-    cp++;
-    *cp = buffer[1];
-    cp++;
+    char buffer[10];
+    sprintf(buffer, "\\x%02x", (int)c & 0xff);
+    strncpy(cp, buffer, 4);
+    cp += 4;
     continue;
   }
 
   return buffer;
 }
 
-
 int read_file(const char *filename) {
   FILE *fp;
   char buffer[10240];
@@ -101,13 +115,12 @@ int read_file(const char *filename) {
   }
   cp = buffer;
   while (*cp != 0) {
-    if (! isalpha(*cp)) 
-      memmove(cp, cp+1, strlen(cp));
+    if (!isalpha(*cp))
+      memmove(cp, cp + 1, strlen(cp));
     cp++;
   }
-  printf( "const char * %s[] = {\n", buffer);
+  printf("const char * %s[] = {\n", buffer);
 
-  
   if ((read = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
     char *nl;
 
@@ -124,11 +137,10 @@ int read_file(const char *filename) {
       cp = nl + 4;
     }
     if (strlen(cp) > 0)
-      printf(  ",\n  \"%s\"\n", cp);
+      printf(",\n  \"%s\"\n", cp);
     else
       printf("\n");
-    printf("}\n");
-
+    printf("};\n");
   };
   fclose(fp);
   return 1;