#! /usr/bin/awk -f # $OpenBSD: busop.awk,v 1.1 2003/02/17 01:29:20 henric Exp $ # # Copyright (c) 2003 Henric Jungheim # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # function generate_code(text, lines, key2, value2) { for(r in row) { print "/*" print " * Implementing", value[r,""] print " */" print for(i = 1; i <= lines; ++i) { out = text[i]; for(k in key) gsub(key[k], value[r,key[k]], out); for(k in key2) gsub(key2[k], value2[key2[k]], out); print out; } } } BEGIN { lines = 1; raw_lines = 1; split(" ", key); n = split( \ "1,u_int8_t,%2.2x,lduba,stba;" \ "2,u_int16_t,%4.4x,lduha,stha;" \ "4,u_int32_t,%8.8x,lduwa,stwa;" \ "8,u_int64_t,%16.16llx,ldxa,stxa", row, ";"); for(r in row) { if(split(row[r], tmp, ",") != length(key)) { print "bad column at ", r; print "row =", row[r]; exit; } for(k in key) value[r,key[k]] = tmp[k]; delete tmp; } print "/*" print " * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT." print " */" print } match($0, "^ECHO:") { print substr($0, RLENGTH + 1); next; } match($0, "^NRAW:") { text[lines] = substr($0, RLENGTH + 1); lines++; next; } match($0, "^RAW:") { raw_text[raw_lines] = substr($0, RLENGTH + 1); raw_lines++; next; } { text[lines] = $0; lines++; raw_text[raw_lines] = $0; raw_lines++; } END { k2[1] = ""; k2[2] = ""; v2[k2[1]] = ""; v2[k2[2]] = "asi"; generate_code(text, lines, k2, v2); v2[k2[1]] = "raw_"; v2[k2[2]] = "sasi"; generate_code(raw_text, raw_lines, k2, v2); }