Annotation of embedaddon/strongswan/src/libstrongswan/asn1/oid.pl, revision 1.1

1.1     ! misho       1: #!/usr/bin/perl
        !             2: # Generates oid.h and oid.c out of oid.txt
        !             3: #
        !             4: # Copyright (C) 2003-2008 Andreas Steffen
        !             5: # HSR Hochschule fuer Technik Rapperswil
        !             6: #
        !             7: # This program is free software; you can redistribute it and/or modify it
        !             8: # under the terms of the GNU General Public License as published by the
        !             9: # Free Software Foundation; either version 2 of the License, or (at your
        !            10: # option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
        !            11: #
        !            12: # This program is distributed in the hope that it will be useful, but
        !            13: # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
        !            14: # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
        !            15: # for more details.
        !            16: #
        !            17: 
        !            18: $copyright="Copyright (C) 2003-2008 Andreas Steffen, Hochschule fuer Technik Rapperswil";
        !            19: $automatic="This file has been automatically generated by the script oid.pl";
        !            20: $warning="Do not edit manually!";
        !            21: 
        !            22: # Generate oid.h
        !            23: 
        !            24: open(OID_H,  ">oid.h")
        !            25:     or die "could not open 'oid.h': $!";
        !            26: 
        !            27: print OID_H "/* Object identifiers (OIDs) used by strongSwan\n",
        !            28:            " * ", $copyright, "\n",
        !            29:            " * \n",
        !            30:            " * ", $automatic, "\n",
        !            31:            " * ", $warning, "\n",
        !            32:            " */\n\n",
        !            33:            "#include <utils/utils.h>\n\n",
        !            34:            "#ifndef OID_H_\n",
        !            35:            "#define OID_H_\n\n",
        !            36:            "typedef struct {\n",
        !            37:            "    u_char octet;\n",
        !            38:            "    u_int  next;\n",
        !            39:            "    u_int  down;\n",
        !            40:            "    u_int  level;\n",
        !            41:            "    const u_char *name;\n",
        !            42:            "} oid_t;\n",
        !            43:            "\n",
        !            44:             "extern const oid_t oid_names[];\n",
        !            45:            "\n",
        !            46:            "#define OID_UNKNOWN                                                        -1\n";
        !            47: 
        !            48: # parse oid.txt
        !            49: 
        !            50: open(SRC,  "<oid.txt")
        !            51:     or die "could not open 'oid.txt': $!";
        !            52: 
        !            53: $counter = 0;
        !            54: $max_name = 0;
        !            55: $max_order = 0;
        !            56: 
        !            57: while ($line = <SRC>)
        !            58: {
        !            59:     $line =~ m/( *?)(0x\w{2})\s+(".*?")[ \t]*?([\w_]*?)\Z/;
        !            60: 
        !            61:     @order[$counter] = length($1);
        !            62:     @octet[$counter] = $2;
        !            63:     @name[$counter] = $3;
        !            64: 
        !            65:     if (length($1) > $max_order)
        !            66:     {
        !            67:        $max_order = length($1);
        !            68:     }
        !            69:     if (length($3) > $max_name)
        !            70:     {
        !            71:        $max_name = length($3);
        !            72:     }
        !            73:     if (length($4) > 0)
        !            74:     {
        !            75:        printf OID_H "#define %s%s%d\n", $4, "\t" x ((39-length($4))/4), $counter;
        !            76:     }
        !            77:     $counter++;
        !            78: }
        !            79: 
        !            80: printf OID_H "\n#define OID_MAX%s%d\n", "\t" x 8, $counter;
        !            81: 
        !            82: print OID_H "\n#endif /* OID_H_ */\n";
        !            83: 
        !            84: close SRC;
        !            85: close OID_H;
        !            86: 
        !            87: # Generate oid.c
        !            88: 
        !            89: open(OID_C, ">oid.c")
        !            90:     or die "could not open 'oid.c': $!";
        !            91: 
        !            92: print OID_C "/* List of some useful object identifiers (OIDs)\n",
        !            93:             " * ", $copyright, "\n",
        !            94:            " * \n",
        !            95:            " * ", $automatic, "\n",
        !            96:            " * ", $warning, "\n",
        !            97:            " */\n",
        !            98:            "\n",
        !            99:            "#include <stdlib.h>\n",
        !           100:            "\n",
        !           101:            "#include \"oid.h\"\n",
        !           102:            "\n",
        !           103:             "const oid_t oid_names[] = {\n";
        !           104: 
        !           105: for ($c = 0; $c < $counter; $c++)
        !           106: {
        !           107:     $next = 0;
        !           108: 
        !           109:     for ($d = $c+1; $d < $counter && @order[$d] >= @order[$c]; $d++)
        !           110:     {
        !           111:        if (@order[$d] == @order[$c])
        !           112:        {
        !           113:            @next[$c] = $d;
        !           114:            last;
        !           115:        }
        !           116:     }
        !           117: 
        !           118:     printf OID_C " {%s%s,%s%3d, %d, %2d, %s%s}%s /* %3d */\n"
        !           119:        ,' '  x @order[$c]
        !           120:        , @octet[$c]
        !           121:        , ' ' x (1 + $max_order - @order[$c])
        !           122:        , @next[$c]
        !           123:        , @order[$c+1] > @order[$c]
        !           124:        , @order[$c] / 2
        !           125:        , @name[$c]
        !           126:        , ' ' x ($max_name - length(@name[$c]))
        !           127:        , $c != $counter-1 ? "," : " "
        !           128:        , $c;
        !           129: }
        !           130: 
        !           131: print OID_C "};\n" ;
        !           132: close OID_C;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>