Save about 800 bytes of code space by aligning TK_ and OP_ constants so that
we do not have to translate between them. (CVS 1998)

FossilOrigin-Name: 4c817e3f293a9c1365e632f7dc13ae440263332a
diff --git a/mkopcodeh.awk b/mkopcodeh.awk
new file mode 100644
index 0000000..49e2498
--- /dev/null
+++ b/mkopcodeh.awk
@@ -0,0 +1,45 @@
+#!/usr/bin/awk -f
+#
+# This AWK script scans a concatenation of the parse.h output file from the
+# parser and the vdbe.c source file in order to generate the opcodes numbers
+# for all opcodes.  
+#
+# The lines of the vdbe.c that we are interested in are of the form:
+#
+#       case OP_aaaa:      /* same as TK_bbbbb */
+#
+# The TK_ comment is optional.  If it is present, then the value assigned to
+# the OP_ is the same as the TK_ value.  If missing, the OP_ value is assigned
+# a small integer that is different from every other OP_ value.
+#
+
+# Remember the TK_ values from the parse.h file
+/^#define TK_/ {
+  tk[$2] = $3
+}
+
+# Scan for "case OP_aaaa:" lines in the vdbe.c file
+/^case OP_/ {
+  name = $2
+  gsub(/:/,"",name)
+  op[name] = -1
+  for(i=3; i<NF-2; i++){
+    if($i=="same" && $(i+1)=="as"){
+      op[name] = tk[$(i+2)]
+      used[op[name]] = 1
+    }
+  }
+}
+
+# Assign numbers to all opcodes and output the result.
+END {
+  cnt = 0
+  for(name in op){
+    if( op[name]<0 ){
+      cnt++
+      while( used[cnt] ) cnt++
+      op[name] = cnt
+    }
+    printf "#define %-30s %d\n", name, op[name]
+  }
+}