utils/naf.c: Wrap up the state machine correctly.
[u/mdw/catacomb] / utils / naf.c
index 550a271..f6c5771 100644 (file)
@@ -18,13 +18,16 @@ int main(int argc, char *argv[])
 
   for (i = 0, mp_scan(&sc, x); mp_step(&sc); i++) {
     switch (st | mp_bit(&sc)) {
-      case  Z | 1: st = Z1; break;
-      case Z1 | 0: st =         Z; printf("+ %lu\n", i - 1); break;
-      case Z1 | 1: st =         X; printf("- %lu\n", i - 1); break;
-      case  X | 0: st = X0; break;
-      case X0 | 1: st =         X; printf("- %lu\n", i - 1); break;
-      case X0 | 0: st =         Z; printf("+ %lu\n", i - 1); break;
+      case  Z | 1: st = Z1; printf("\t-> Z1\n"); break;
+      case Z1 | 0: st =         Z; printf("+ %lu\t-> Z\n", i - 1); break;
+      case Z1 | 1: st =         X; printf("- %lu\t-> X\n", i - 1); break;
+      case  X | 0: st = X0; printf("\t-> X0\n"); break;
+      case X0 | 1: st =         X; printf("- %lu\t-> X\n", i - 1); break;
+      case X0 | 0: st =         Z; printf("+ %lu\t-> Z\n", i - 1); break;
     }
   }
-  if (st >= X) printf("+ %lu\n", i - 1);
+  switch (st) {
+    case Z1: case X0: printf("+ %lu\n", i - 1); break;
+    case X: printf("+ %lu\n", i); break;
+  }
 }