1# 2# Copyright (c) 2001-2003 3# Fraunhofer Institute for Open Communication Systems (FhG Fokus). 4# All rights reserved. 5# 6# Redistribution and use in source and binary forms, with or without 7# modification, are permitted provided that the following conditions 8# are met: 9# 1. Redistributions of source code must retain the above copyright 10# notice, this list of conditions and the following disclaimer. 11# 2. Redistributions in binary form must reproduce the above copyright 12# notice, this list of conditions and the following disclaimer in the 13# documentation and/or other materials provided with the distribution. 14# 15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25# SUCH DAMAGE. 26# 27# Author: Hartmut Brandt <harti@freebsd.org> 28# 29# $Begemot: libunimsg/netnatm/msg/geniec.awk,v 1.4 2003/10/10 14:50:05 hbb Exp $ 30# 31# Generate table for IE parsing. 32# 33# This function is called before the first line 34# 35function begin() { 36 for(i = 0; i < 256; i++) { 37 for(j = 0; j < 4; j++) { 38 decl[i,j] = "" 39 } 40 } 41} 42 43# 44# This function is called after the last line. 45# 46function end() { 47 print "" 48 print "const struct iedecl *uni_ietable[256][4] = {" 49 for(i = 0; i < 256; i++) { 50 printf "\t{" 51 for(j = 0; j < 4; j++) { 52 if(decl[i,j] == "") { 53 printf " NULL," 54 } else { 55 printf " &%s,", decl[i,j] 56 } 57 } 58 printf " }, /* 0x%02x */\n", i 59 } 60 print "};" 61} 62 63# 64# This function is called just when the first information element was found 65# 66function first_element() { 67 print "/* This file was created automatically" 68 print " * Source file: " id 69 print " */" 70 print "" 71} 72 73# 74# This is called, when the information element is defaulted (there is 75# only the name and the coding scheme 76# 77function element_default() { 78 print "" 79 print "static const struct iedecl decl_" coding "_" ie " = {" 80 print "\tUNIFL_DEFAULT," 81 print "\t0," 82 print "\t(uni_print_f)NULL," 83 print "\t(uni_check_f)NULL," 84 print "\t(uni_encode_f)NULL," 85 print "\t(uni_decode_f)NULL" 86 print "};" 87 decl[number,ncoding] = "decl_" coding "_" ie 88} 89 90# 91# This is found for a real, non-default IE 92# 93function element() { 94 print "" 95 print "static void uni_ie_print_" coding "_" ie "(struct uni_ie_" ie " *, struct unicx *);" 96 print "static int uni_ie_check_" coding "_" ie "(struct uni_ie_" ie " *, struct unicx *);" 97 print "static int uni_ie_encode_" coding "_" ie "(struct uni_msg *, struct uni_ie_" ie " *, struct unicx *);" 98 print "static int uni_ie_decode_" coding "_" ie "(struct uni_ie_" ie " *, struct uni_msg *, u_int, struct unicx *);" 99 print "" 100 print "static struct iedecl decl_" coding "_" ie " = {" 101 if(access) print "\tUNIFL_ACCESS," 102 else print "\t0," 103 print "\t" len "," 104 print "\t(uni_print_f)uni_ie_print_" coding "_" ie "," 105 print "\t(uni_check_f)uni_ie_check_" coding "_" ie "," 106 print "\t(uni_encode_f)uni_ie_encode_" coding "_" ie "," 107 print "\t(uni_decode_f)uni_ie_decode_" coding "_" ie "" 108 print "};" 109 decl[number,ncoding] = "decl_" coding "_" ie 110} 111