52 lines
		
	
	
	
		
			841 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			841 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/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
 | 
						|
 |