📄 oid.pl
字号:
#!/usr/bin/perl# Generates oid.h and oid.c out of oid.txt# Copyright (C) 2003-2004 Andreas Steffen, Zuercher Hochschule Winterthur## This program is free software; you can redistribute it and/or modify it# under the terms of the GNU General Public License as published by the# Free Software Foundation; either version 2 of the License, or (at your# option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.## This program is distributed in the hope that it will be useful, but# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License# for more details.#$copyright="Copyright (C) 2003-2004 Andreas Steffen, Zuercher Hochschule Winterthur";$automatic="This file has been automatically generated by the script oid.pl";$warning="Do not edit manually!";print "oid.pl generating oid.h and oid.c\n";# Generate oid.hopen(OID_H, ">oid.h") or die "could not open 'oid.h': $!";print OID_H "/* Object identifiers (OIDs) used by FreeS/WAN\n", " * ", $copyright, "\n", " * \n", " * ", $automatic, "\n", " * ", $warning, "\n", " */\n\n", "typedef struct {\n", " u_char octet;\n", " u_int next;\n", " u_int down;\n", " const u_char *name;\n", "} oid_t;\n", "\n", "extern const oid_t oid_names[];\n", "\n", "#define OID_UNKNOWN -1\n";# parse oid.txtopen(SRC, "<oid.txt") or die "could not open 'oid.txt': $!";$counter = 0;$max_name = 0;$max_order = 0;while ($line = <SRC>){ $line =~ m/( *?)(0x\w{2})\s+(".*?")[ \t]*?([\w_]*?)\Z/; @order[$counter] = length($1); @octet[$counter] = $2; @name[$counter] = $3; if (length($1) > $max_order) { $max_order = length($1); } if (length($3) > $max_name) { $max_name = length($3); } if (length($4) > 0) { printf OID_H "#define %s%s%d\n", $4, "\t" x ((39-length($4))/8), $counter; } $counter++;}close SRC;close OID_H;# Generate oid.copen(OID_C, ">oid.c") or die "could not open 'oid.c': $!";print OID_C "/* List of some useful object identifiers (OIDs)\n", " * ", $copyright, "\n", " * \n", " * ", $automatic, "\n", " * ", $warning, "\n", " */\n", "\n", "#include <stdlib.h>\n", "\n", "#include \"oid.h\"\n", "\n", "const oid_t oid_names[] = {\n";for ($c = 0; $c < $counter; $c++){ $next = 0; for ($d = $c+1; $d < $counter && @order[$d] >= @order[$c]; $d++) { if (@order[$d] == @order[$c]) { @next[$c] = $d; last; } } printf OID_C " {%s%s,%s%3d, %d, %s%s}%s /* %3d */\n" ,' ' x @order[$c] , @octet[$c] , ' ' x (1 + $max_order - @order[$c]) , @next[$c] , @order[$c+1] > @order[$c] , @name[$c] , ' ' x ($max_name - length(@name[$c])) , $c != $counter-1 ? "," : " " , $c;}print OID_C "};\n" ;close OID_C;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -