12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#!/bin/sh 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Copyright (c) 1990, 1996 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# John Robert LoVerso. All rights reserved. 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# SMIv2 parsing copyright (c) 1999 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# William C. Fenner. 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Redistribution and use in source and binary forms, with or without 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# modification, are permitted provided that the following conditions 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# are met: 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 1. Redistributions of source code must retain the above copyright 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# notices, this list of conditions and the following disclaimer. 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 2. Redistributions in binary form must reproduce the above copyright 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# notices, this list of conditions and the following disclaimer in the 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# documentation and/or other materials provided with the distribution. 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 3053f17a9db278d33517d9888dd77848f554522a38JP Abgrall# @(#) $Id: makemib,v 1.3 2001-09-17 22:16:52 fenner Exp $ (jlv) 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# This script will read either ASN.1-style MIB files or the ".defs" files 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# created by the ISODE "mosy" program on such files. 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# The output of this script is the "mib.h" file used by tcpdumps' ASN.1/SNMP 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# decoding code. 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# This script needs to be run by "gawk" (GNU awk). "nawk" will work, but 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# dump will get a recursion error if you process LARGE mibs. While it would 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# by farily easy to rewrite this not to use recursion (and also easy to 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# eliminate use of gsub and functions to use classic "awk"), you have to 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# order the structure declarations in defined-first order for the compiler 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# not to barf; too bad tsort doesn't take arguments. 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectcat << EOF 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * This file was generated by tcpdump/makemib on `date` 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * You probably don't want to edit this by hand! 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * struct mib somename = { desc, oid-octet, type, child-pointer, next-pointer 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source ProjectEOF 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectawk ' 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source ProjectBEGIN { 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project debug=0; 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # for sanity, we prep the namespace with objects from RFC-1155 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # (we manually establish the root) 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oid["iso"]=1 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd("org", "iso", 3) 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd("dod", "org", 6) 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd("internet", "dod", 1) 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd("directory", "internet", 1) 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd("mgmt", "internet", 2) 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#XXX oidadd("mib", "mgmt", 1) 702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd("mib-2", "mgmt", 1) 712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd("experimental", "internet", 3) 722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd("private", "internet", 4) 732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd("enterprises", "private", 1) 742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd("ip", "mib-2", 4) 752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd("transmission", "mib-2", 10) 762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project holddesc="none" 782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Read mosy "*.defs" file. mosy does all the parsing work; we just read 822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# its simple and straightforward output. It would not be too hard to make 832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# tcpdump directly read mosy output, but... 842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Ignore these unless the current file is called something.defs; false 862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# positives are too common in DESCRIPTIONs. 872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source ProjectNF > 1 && index($2,".")>0 && FILENAME ~ /\.defs/ { 892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # currently ignore items of the form "{ iso.3.6.1 }" 902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (split($2, p, ".") == 2) { 912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd($1, p[1], p[2]) 922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project next 942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Must be a MIB file 982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# Make it easier to parse - used to be done by sed 992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ sub(/--\*.*\*--/, ""); sub(/--.*/, ""); gsub(/[{}]/, " & "); } 1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# this next section is simple and naive, but does the job ok 1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# foo OBJECT IDENTIFIER ::= { baz 17 } 1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# or 1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# foo OBJECT IDENTIFIER ::= 1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# { baz 17 } 1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project$2$3$4 == "OBJECTIDENTIFIER::=" { 1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project holddesc="none" 1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (NF == 8) 1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd($1, $6, $7) 1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (NF == 4) 1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project holddesc=$1 1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project next 1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project$1 == "{" && holddesc != "none" && NF == 4 { 1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd(holddesc, $2, $3) 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project holddesc="none" 1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# foo OBJECT IDENTIFIER 1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# ::= { bar 1 } 1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project$2$3 == "OBJECTIDENTIFIER" && $1 != "SYNTAX" && NF == 3 { 1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project holddesc=$1 1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# foo 1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# OBJECT IDENTIFIER ::= { bar 1 } 1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# a couple of heuristics to exclude single words in e.g. long 1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# DESCRIPTION clauses 1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source ProjectNF == 1 && $1 ~ "[a-z][a-z]*[A-Z]" && $1 !~ /[(){}.,]/ && holddesc == "none" { 1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project holddesc=$1 1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project$1$2$3 == "OBJECTIDENTIFIER::=" && holddesc != "none" { 1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd(holddesc, $5, $6) 1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project holddesc="none" 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# "normal" style 1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# foo OBJECT-TYPE ... 1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# ... 1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# ::= { baz 5 } 1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project$2 == "MODULE-IDENTITY" || $2 == "MODULE-COMPLIANCE" || 1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project $2 == "OBJECT-IDENTITY" || $2 == "OBJECT-TYPE" || 1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project $2 == "OBJECT-GROUP" || 1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project $2 == "NOTIFICATION-TYPE" || $2 == "NOTIFICATION-GROUP" { 1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project holddesc=$1 1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project$1 == "::=" && holddesc != "none" && NF == 5 { 1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd(holddesc, $3, $4) 1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project holddesc="none" 1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# foo ::= { baz 17 } 1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project$2$3 == "::={" { 1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oidadd($1,$4,$5) 1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project holddesc="none" 1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# End of the road - output the data. 1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source ProjectEND { 1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print "struct obj" 1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project dump("iso") 1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print "*mibroot = &_iso_obj;" 1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectfunction inn(file) { 1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (file == "" || file == "-") 1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return "" 1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return " in " file 1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# add a new object to the tree 1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# new OBJECT IDENTIFIER ::= { parent value } 1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectfunction oidadd(new, parent, value) { 1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # Ignore 0.0 1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (parent == "0" && value == 0) 1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (debug) 1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project print "/* oidadd" inn(FILENAME) ":", new, "in", parent, "as", value, "line", $0, "*/" 1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # use safe C identifiers 1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project gsub(/[-&\/]/,"",new) 1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project gsub(/[-&\/]/,"",parent) 1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # check if parent missing 1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (oid[parent] == "") { 1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf "/* parse problem%s: no parent for %s.%s(%d) */\n", \ 1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project inn(FILENAME), parent, new, value 1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # check if parent.value already exists 2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (oid[new] > 0 && oid[new] != value) { 2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf "/* parse problem%s: dup %s.%s(%d) != old (%d) */\n", \ 2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project inn(FILENAME), parent, new, value, oid[new] 2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project # check for new name for parent.value 2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (child[parent] != "") { 2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (sib = child[parent]; sib != ""; sib = sibling[sib]) 2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (oid[sib] == value) { 2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (new != sib) 2102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf "/* parse problem%s: new name" \ 2112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project " \"%s\"" \ 2122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project " for %s.%s(%d) ignored */\n", \ 2132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project inn(FILENAME), new, parent, \ 2142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sib, value 2152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return 2162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project oid[new]=value 2202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (child[parent] == "") { 2212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project child[parent] = new 2222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 2232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project sibling[new] = child[parent] 2242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project child[parent] = new 2252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 2272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 2292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# old(?) routine to recurse down the tree (in postfix order for convenience) 2302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# 2312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectfunction dump(item, c, s) { 2332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# newitem=sofar"."item"("oid[item]")" 2342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project# printf "/* %s c=%s s=%s */\n", newitem, child[item], sibling[item] 2352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project c="NULL" 2362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (child[item] != "") { 2372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project dump(child[item]) 2382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project c = "&_"child[item]"_obj" 2392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project s="NULL" 2412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (sibling[item] != "") { 2422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project dump(sibling[item]) 2432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project s = "&_"sibling[item]"_obj" 2442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf "_%s_obj = {\n\t\"%s\", %d, 0,\n\t%s, %s\n},\n", \ 2462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project item, item, oid[item], c, s 2472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 2482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project' $@ 2492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectexit 0 250