#!/bin/sh in=$1 header=$2 source=$3 awk -f - $in >$header << "EOF" BEGIN { print "enum ir_opcode {" } /^ *[^# ]+/ { print "\tIR_" $3 "," } END { print "\tIR__COUNT" print "};" } EOF awk -f - $in >$source << "EOF" BEGIN { print "#include \"ircodes.h\"" print "const struct ir_data ir_data[IR__COUNT] = {" } function char_to_flags(c) { if (c == "S") return "IRF_SIZED" return "0" } function char_to_type(c) { if (c ~ /[A-Za-z]/) return "'"c"'" if (c == "?") return "'?'" if (c == ".") return "0" } /^ *[^# ]+/ { printf("\t{ \"%s\", ", $3) printf("%s, ", char_to_flags(substr($1, 1, 1))) printf("%s, ", char_to_type(substr($2, 1, 1))) printf("%s, ", char_to_type(substr($2, 3, 1))) printf("%s, ", char_to_type(substr($2, 4, 1))) printf(" },\n") } END { print "};" } EOF