More unobfuscation.
diff --git a/libacc/acc.c b/libacc/acc.c
index 46961ca..9d4a237 100644
--- a/libacc/acc.c
+++ b/libacc/acc.c
@@ -23,124 +23,135 @@
 #include <stdlib.h>
 #include <string.h>
 
-static int d, z, C, h, K, q, G, W;
-static char* L;
+#define TOKEN_OPERATOR 1
+#define TOKEN_NUMBER 2
+#define TOKEN_DEFINE 536
+
+static int currentToken;
+static int currentTokenData;
+static int C;
+static int currentChar;
+static int K;
+static int q;
+static int G;
+static int savedChar;
+static char* pInProgressMacro;
 static char* P;
 static char* ac;
 static char* v;
-static char* D;
+static char* pSymbolTable;
 static char* M;
 static char* R;
-static FILE* Q;
+static FILE* pInput;
 
 static void ab (int j);
 static void w();
 
 static void addToSymbolTable(char e) {
-    *D++ = e;
+    *pSymbolTable++ = e;
 }
 
-static void next() {
-    if (L) {
-        h = *(char*) L++;
-        if (h == 2) {
-            L = 0;
-            h = W;
+static void nextChar() {
+    if (pInProgressMacro) {
+        currentChar = *(char*) pInProgressMacro++;
+        if (currentChar == 2) {
+            pInProgressMacro = NULL;
+            currentChar = savedChar;
         }
     } else
-        h = fgetc(Q);
+        currentChar = fgetc(pInput);
 }
 
-static int X() {
-    return isalnum(h) || h == '_';
+static int isSymbolChar() {
+    return isalnum(currentChar) || currentChar == '_';
 }
 
-static void Y() {
-    if (h == 92) {
-        next();
-        if (h == 110)
-            h = 10;
+static void unescapeCurrentChar() {
+    if (currentChar == '\\') {
+        nextChar();
+        if (currentChar == 'n')
+            currentChar = '\n';
     }
 }
 
-static void ad() {
+static void nextToken() {
     int j, m;
-    while (isspace(h) | h == 35) {
-        if (h == 35) {
-            next();
-            ad();
-            if (d == 536) {
-                ad();
-                addToSymbolTable(32);
-                *(int*) d = 1;
-                *(int*) (d + 4) = (int) D;
+    while (isspace(currentChar) || currentChar == '#') {
+        if (currentChar == '#') {
+            nextChar();
+            nextToken();
+            if (currentToken == TOKEN_DEFINE) {
+                nextToken();
+                addToSymbolTable(' ');
+                *(int*) currentToken = 1;
+                *(int*) (currentToken + 4) = (int) pSymbolTable;
             }
-            while (h != '\n') {
-                addToSymbolTable(h);
-                next();
+            while (currentChar != '\n') {
+                addToSymbolTable(currentChar);
+                nextChar();
             }
-            addToSymbolTable(h);
+            addToSymbolTable(currentChar);
             addToSymbolTable(2);
         }
-        next();
+        nextChar();
     }
     C = 0;
-    d = h;
-    if (X()) {
-        addToSymbolTable(32);
-        M = D;
-        while (X()) {
-            addToSymbolTable(h);
-            next();
+    currentToken = currentChar;
+    if (isSymbolChar()) {
+        addToSymbolTable(' ');
+        M = pSymbolTable;
+        while (isSymbolChar()) {
+            addToSymbolTable(currentChar);
+            nextChar();
         }
-        if (isdigit(d)) {
-            z = strtol(M, 0, 0);
-            d = 2;
+        if (isdigit(currentToken)) {
+            currentTokenData = strtol(M, 0, 0);
+            currentToken = TOKEN_NUMBER;
         } else {
-            *(char*) D = 32;
-            d = strstr(R, M - 1) - R;
-            *(char*) D = 0;
-            d = d * 8 + 256;
-            if (d > 536) {
-                d = ((int) P) + d;
-                if (*(int*) d == 1) {
-                    L = (char*) (*(int*) (d + 4));
-                    W = h;
-                    next();
-                    ad();
+            *(char*) pSymbolTable = ' ';
+            currentToken = strstr(R, M - 1) - R;
+            *(char*) pSymbolTable = 0;
+            currentToken = currentToken * 8 + 256;
+            if (currentToken > TOKEN_DEFINE) {
+                currentToken = ((int) P) + currentToken;
+                if (*(int*) currentToken == 1) {
+                    pInProgressMacro = (char*) (*(int*) (currentToken + 4));
+                    savedChar = currentChar;
+                    nextChar();
+                    nextToken();
                 }
             }
         }
     } else {
-        next();
-        if (d == 39) {
-            d = 2;
-            Y();
-            z = h;
-            next();
-            next();
-        } else if (d == 47 & h == 42) {
-            next();
-            while (h) {
-                while (h != 42)
-                    next();
-                next();
-                if (h == 47)
-                    h = 0;
+        nextChar();
+        if (currentToken == '\'') {
+            currentToken = TOKEN_NUMBER;
+            unescapeCurrentChar();
+            currentTokenData = currentChar;
+            nextChar();
+            nextChar();
+        } else if (currentToken == '/' & currentChar == '*') {
+            nextChar();
+            while (currentChar) {
+                while (currentChar != '*')
+                    nextChar();
+                nextChar();
+                if (currentChar == '/')
+                    currentChar = 0;
             }
-            next();
-            ad();
+            nextChar();
+            nextToken();
         } else {
             char* e = "++#m--%am*@R<^1c/@%[_[H3c%@%[_[H3c+@.B#d-@%:_^BKd<<Z/03e>>`/03e<=0f>=/f<@.f>@1f==&g!='g&&k||#l&@.BCh^@.BSi|@.B+j~@/%Yd!@&d*@b";
             while (j = *(char*) e++) {
                 m = *(char*) e++;
-                z = 0;
+                currentTokenData = 0;
                 while ((C = *(char*) e++ - 98) < 0)
-                    z = z * 64 + C + 64;
-                if (j == d & (m == h | m == 64)) {
-                    if (m == h) {
-                        next();
-                        d = 1;
+                    currentTokenData = currentTokenData * 64 + C + 64;
+                if (j == currentToken && (m == currentChar || m == 64)) {
+                    if (m == currentChar) {
+                        nextChar();
+                        currentToken = TOKEN_OPERATOR;
                     }
                     break;
                 }
@@ -150,7 +161,7 @@
 }
 
 static void ae( g) {
-    while( g&&g!=-1) {
+    while( g && g != -1) {
         *(char*) q++=g;
         g=g>>8;
     }
@@ -202,23 +213,23 @@
 static void T (j) {
     int g,e,m,aa;
     g=1;
-    if( d == 34) {
+    if( currentToken == 34) {
         H(v);
-        while( h!=34) {
-            Y ();
-            *(char*) v++=h;
-            next ();
+        while( currentChar!=34) {
+            unescapeCurrentChar ();
+            *(char*) v++=currentChar;
+            nextChar ();
         }
         *(char*) v=0;
         v= (char*) (((int)v) +4&-4);
-        next ();
-        ad();
+        nextChar ();
+        nextToken();
     }
     else {
         aa=C;
-        m= z;
-        e=d;
-        ad();
+        m= currentTokenData;
+        e=currentToken;
+        nextToken();
         if( e == 2) {
             H(m);
         }
@@ -230,24 +241,24 @@
         }
         else if( e == 40) {
             w ();
-            ad();
+            nextToken();
         }
         else if( e == 42) {
-            ad();
-            e=d;
-            ad();
-            ad();
-            if( d == 42) {
-                ad();
-                ad();
-                ad();
-                ad();
+            nextToken();
+            e=currentToken;
+            nextToken();
+            nextToken();
+            if( currentToken == 42) {
+                nextToken();
+                nextToken();
+                nextToken();
+                nextToken();
                 e=0;
             }
-            ad();
+            nextToken();
             T(0);
-            if( d == 61) {
-                ad();
+            if( currentToken == 61) {
+                nextToken();
                 ae( 80);
                 w ();
                 ae( 89);
@@ -260,40 +271,40 @@
             }
         }
         else if( e == 38) {
-            N(10,*(int*) d);
-            ad();
+            N(10,*(int*) currentToken);
+            nextToken();
         }
         else {
             g=*(int*) e;
             if(!g)g=dlsym(0,M);
-            if( d == 61&j) {
-                ad();
+            if( currentToken == 61&j) {
+                nextToken();
                 w ();
                 N(6,g);
             }
-            else if( d!= 40) {
+            else if( currentToken!= 40) {
                 N(8,g);
                 if( C == 11) {
                     N(0,g);
-                    ae( z);
-                    ad();
+                    ae( currentTokenData);
+                    nextToken();
                 }
             }
         }
     }
-    if( d == 40) {
+    if( currentToken == 40) {
         if( g == 1)ae( 80);
         m= s(60545,0);
-        ad();
+        nextToken();
         j=0;
-        while( d!= 41) {
+        while( currentToken!= 41) {
             w ();
             s(2393225,j);
-            if( d == 44)ad();
+            if( currentToken == 44)nextToken();
             j=j +4;
         }
         *(int*) m= j;
-        ad();
+        nextToken();
         if(!g) {
             e=e +4;
             *(int*) e=s(232,*(int*) e);
@@ -316,9 +327,9 @@
         O (j);
         m= 0;
         while( j == C) {
-            g=d;
-            e=z;
-            ad();
+            g=currentToken;
+            e=currentTokenData;
+            nextToken();
             if( j>8) {
                 m= S(e,m);
                 O (j);
@@ -357,14 +368,14 @@
 
 static void I (j) {
     int m,g,e;
-    if( d == 288) {
-        ad();
-        ad();
+    if( currentToken == 288) {
+        nextToken();
+        nextToken();
         m= U ();
-        ad();
+        nextToken();
         I (j);
-        if( d == 312) {
-            ad();
+        if( currentToken == 312) {
+            nextToken();
             g=B(0);
             A(m);
             I (j);
@@ -374,22 +385,22 @@
             A(m);
         }
     }
-    else if( d == 352|d == 504) {
-        e=d;
-        ad();
-        ad();
+    else if( currentToken == 352|currentToken == 504) {
+        e=currentToken;
+        nextToken();
+        nextToken();
         if( e == 352) {
             g=q;
             m= U ();
         }
         else {
-            if( d!= 59)w ();
-            ad();
+            if( currentToken!= 59)w ();
+            nextToken();
             g=q;
             m= 0;
-            if( d!= 59)m= U ();
-            ad();
-            if( d!= 41) {
+            if( currentToken!= 59)m= U ();
+            nextToken();
+            if( currentToken!= 41) {
                 e=B(0);
                 w ();
                 B(g-q-5);
@@ -397,64 +408,64 @@
                 g=e +4;
             }
         }
-        ad();
+        nextToken();
         I(&m);
         B(g-q-5);
         A(m);
     }
-    else if( d == 123) {
-        ad();
+    else if( currentToken == 123) {
+        nextToken();
         ab(1);
-        while( d!= 125)I (j);
-        ad();
+        while( currentToken!= 125)I (j);
+        nextToken();
     }
     else {
-        if( d == 448) {
-            ad();
-            if( d!= 59)w ();
+        if( currentToken == 448) {
+            nextToken();
+            if( currentToken!= 59)w ();
             K=B(K);
         }
-        else if( d == 400) {
-            ad();
+        else if( currentToken == 400) {
+            nextToken();
             *(int*) j=B(*(int*) j);
         }
-        else if( d!= 59)w ();
-        ad();
+        else if( currentToken!= 59)w ();
+        nextToken();
     }
 }
 
 static void ab (int j) {
     int m;
-    while( d == 256 | d != -1 & !j ) {
-        if( d == 256) {
-            ad();
-            while( d!= 59) {
+    while( currentToken == 256 | currentToken != -1 & !j ) {
+        if( currentToken == 256) {
+            nextToken();
+            while( currentToken!= 59) {
                 if( j ) {
                     G=G +4;
-                    *(int*) d=-G;
+                    *(int*) currentToken=-G;
                 }
                 else {
-                    *(char**) d = v;
+                    *(char**) currentToken = v;
                     v=v +4;
                 }
-                ad();
-                if( d == 44)ad();
+                nextToken();
+                if( currentToken == 44)nextToken();
             }
-            ad();
+            nextToken();
         }
         else {
-            A(*(int*)(d +4));
-            *(int*) d=q;
-            ad();
-            ad();
+            A(*(int*)(currentToken +4));
+            *(int*) currentToken=q;
+            nextToken();
+            nextToken();
             m= 8;
-            while( d!= 41) {
-                *(int*) d=m;
+            while( currentToken!= 41) {
+                *(int*) currentToken=m;
                 m= m +4;
-                ad();
-                if( d == 44)ad();
+                nextToken();
+                if( currentToken == 44)nextToken();
             }
-            ad();
+            nextToken();
             K=G=0;
             ae( 15042901);
             m= s(60545,0);
@@ -467,24 +478,24 @@
 }
 
 int main( int argc, char** argv) {
-    Q = stdin;
+    pInput = stdin;
     if (argc-- > 1) {
         char* file = argv[1];
         argv += 1;
-        Q = fopen(file, "r");
-        if (Q == NULL) {
+        pInput = fopen(file, "r");
+        if (pInput == NULL) {
             fprintf(stderr, "Could not open file \"%s\"\n", file);
             return -1;
         }
     }
-    D = strcpy(R = calloc(1, 99999),
+    pSymbolTable = strcpy(R = calloc(1, 99999),
             " int if else while break return for define main ") + 48;
     v = calloc(1, 99999);
     ac = calloc(1, 99999);
     q = (int) ac;
     P = calloc(1, 99999);
-    next();
-    ad();
+    nextChar();
+    nextToken();
     ab(0);
 #if 1
     fwrite(R, 1, 99999, stdout);