168651Skris#!/usr/local/bin/perl
268651Skris
368651Skrisopen (NUMIN,"$ARGV[1]") || die "Can't open number file $ARGV[1]";
468651Skris$max_nid=0;
568651Skris$o=0;
668651Skriswhile(<NUMIN>)
768651Skris	{
868651Skris	chop;
968651Skris	$o++;
1068651Skris	s/#.*$//;
1168651Skris	next if /^\s*$/;
12109998Smarkm	$_ = 'X'.$_;
1368651Skris	($Cname,$mynum) = split;
14109998Smarkm	$Cname =~ s/^X//;
1568651Skris	if (defined($nidn{$mynum}))
1668651Skris		{ die "$ARGV[1]:$o:There's already an object with NID ",$mynum," on line ",$order{$mynum},"\n"; }
17238405Sjkim	if (defined($nid{$Cname}))
18238405Sjkim		{ die "$ARGV[1]:$o:There's already an object with name ",$Cname," on line ",$order{$nid{$Cname}},"\n"; }
1968651Skris	$nid{$Cname} = $mynum;
2068651Skris	$nidn{$mynum} = $Cname;
2168651Skris	$order{$mynum} = $o;
2268651Skris	$max_nid = $mynum if $mynum > $max_nid;
2368651Skris	}
2468651Skrisclose NUMIN;
2568651Skris
2668651Skrisopen (IN,"$ARGV[0]") || die "Can't open input file $ARGV[0]";
2768651Skris$Cname="";
2868651Skris$o=0;
2968651Skriswhile (<IN>)
3068651Skris	{
3168651Skris	chop;
3268651Skris	$o++;
3368651Skris        if (/^!module\s+(.*)$/)
3468651Skris		{
3568651Skris		$module = $1."-";
3668651Skris		$module =~ s/\./_/g;
3768651Skris		$module =~ s/-/_/g;
3868651Skris		}
3968651Skris        if (/^!global$/)
4068651Skris		{ $module = ""; }
4168651Skris	if (/^!Cname\s+(.*)$/)
4268651Skris		{ $Cname = $1; }
4368651Skris	if (/^!Alias\s+(.+?)\s+(.*)$/)
4468651Skris		{
4568651Skris		$Cname = $module.$1;
4668651Skris		$myoid = $2;
4768651Skris		$myoid = &process_oid($myoid);
4868651Skris		$Cname =~ s/-/_/g;
4968651Skris		$ordern{$o} = $Cname;
5068651Skris		$order{$Cname} = $o;
5168651Skris		$obj{$Cname} = $myoid;
5268651Skris		$_ = "";
5368651Skris		$Cname = "";
5468651Skris		}
5568651Skris	s/!.*$//;
5668651Skris	s/#.*$//;
5768651Skris	next if /^\s*$/;
5868651Skris	($myoid,$mysn,$myln) = split ':';
5968651Skris	$mysn =~ s/^\s*//;
6068651Skris	$mysn =~ s/\s*$//;
6168651Skris	$myln =~ s/^\s*//;
6268651Skris	$myln =~ s/\s*$//;
6368651Skris	$myoid =~ s/^\s*//;
6468651Skris	$myoid =~ s/\s*$//;
6568651Skris	if ($myoid ne "")
6668651Skris		{
6768651Skris		$myoid = &process_oid($myoid);
6868651Skris		}
6968651Skris
7068651Skris	if ($Cname eq "" && !($myln =~ / /))
7168651Skris		{
7268651Skris		$Cname = $myln;
7368651Skris		$Cname =~ s/\./_/g;
7468651Skris		$Cname =~ s/-/_/g;
7568651Skris		if ($Cname ne "" && defined($ln{$module.$Cname}))
7668651Skris			{ die "objects.txt:$o:There's already an object with long name ",$ln{$module.$Cname}," on line ",$order{$module.$Cname},"\n"; }
7768651Skris		}
7868651Skris	if ($Cname eq "")
7968651Skris		{
8068651Skris		$Cname = $mysn;
8168651Skris		$Cname =~ s/-/_/g;
8268651Skris		if ($Cname ne "" && defined($sn{$module.$Cname}))
8368651Skris			{ die "objects.txt:$o:There's already an object with short name ",$sn{$module.$Cname}," on line ",$order{$module.$Cname},"\n"; }
8468651Skris		}
8568651Skris	if ($Cname eq "")
8668651Skris		{
8768651Skris		$Cname = $myln;
8868651Skris		$Cname =~ s/-/_/g;
8968651Skris		$Cname =~ s/\./_/g;
9068651Skris		$Cname =~ s/ /_/g;
9168651Skris		if ($Cname ne "" && defined($ln{$module.$Cname}))
9268651Skris			{ die "objects.txt:$o:There's already an object with long name ",$ln{$module.$Cname}," on line ",$order{$module.$Cname},"\n"; }
9368651Skris		}
9468651Skris	$Cname =~ s/\./_/g;
9568651Skris	$Cname =~ s/-/_/g;
9668651Skris	$Cname = $module.$Cname;
9768651Skris	$ordern{$o} = $Cname;
9868651Skris	$order{$Cname} = $o;
9968651Skris	$sn{$Cname} = $mysn;
10068651Skris	$ln{$Cname} = $myln;
10168651Skris	$obj{$Cname} = $myoid;
10268651Skris	if (!defined($nid{$Cname}))
10368651Skris		{
10468651Skris		$max_nid++;
10568651Skris		$nid{$Cname} = $max_nid;
10668651Skris		$nidn{$max_nid} = $Cname;
107238405Sjkimprint STDERR "Added OID $Cname\n";
10868651Skris		}
10968651Skris	$Cname="";
11068651Skris	}
11168651Skrisclose IN;
11268651Skris
11368651Skrisopen (NUMOUT,">$ARGV[1]") || die "Can't open output file $ARGV[1]";
11468651Skrisforeach (sort { $a <=> $b } keys %nidn)
11568651Skris	{
11668651Skris	print NUMOUT $nidn{$_},"\t\t",$_,"\n";
11768651Skris	}
11868651Skrisclose NUMOUT;
11968651Skris
12068651Skrisopen (OUT,">$ARGV[2]") || die "Can't open output file $ARGV[2]";
12168651Skrisprint OUT <<'EOF';
12289837Skris/* crypto/objects/obj_mac.h */
12389837Skris
12489837Skris/* THIS FILE IS GENERATED FROM objects.txt by objects.pl via the
12589837Skris * following command:
12689837Skris * perl objects.pl objects.txt obj_mac.num obj_mac.h
12789837Skris */
12889837Skris
12968651Skris/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
13068651Skris * All rights reserved.
13168651Skris *
13268651Skris * This package is an SSL implementation written
13368651Skris * by Eric Young (eay@cryptsoft.com).
13468651Skris * The implementation was written so as to conform with Netscapes SSL.
13568651Skris *
13668651Skris * This library is free for commercial and non-commercial use as long as
13768651Skris * the following conditions are aheared to.  The following conditions
13868651Skris * apply to all code found in this distribution, be it the RC4, RSA,
13968651Skris * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
14068651Skris * included with this distribution is covered by the same copyright terms
14168651Skris * except that the holder is Tim Hudson (tjh@cryptsoft.com).
14268651Skris *
14368651Skris * Copyright remains Eric Young's, and as such any Copyright notices in
14468651Skris * the code are not to be removed.
14568651Skris * If this package is used in a product, Eric Young should be given attribution
14668651Skris * as the author of the parts of the library used.
14768651Skris * This can be in the form of a textual message at program startup or
14868651Skris * in documentation (online or textual) provided with the package.
14968651Skris *
15068651Skris * Redistribution and use in source and binary forms, with or without
15168651Skris * modification, are permitted provided that the following conditions
15268651Skris * are met:
15368651Skris * 1. Redistributions of source code must retain the copyright
15468651Skris *    notice, this list of conditions and the following disclaimer.
15568651Skris * 2. Redistributions in binary form must reproduce the above copyright
15668651Skris *    notice, this list of conditions and the following disclaimer in the
15768651Skris *    documentation and/or other materials provided with the distribution.
15868651Skris * 3. All advertising materials mentioning features or use of this software
15968651Skris *    must display the following acknowledgement:
16068651Skris *    "This product includes cryptographic software written by
16168651Skris *     Eric Young (eay@cryptsoft.com)"
16268651Skris *    The word 'cryptographic' can be left out if the rouines from the library
16368651Skris *    being used are not cryptographic related :-).
16468651Skris * 4. If you include any Windows specific code (or a derivative thereof) from
16568651Skris *    the apps directory (application code) you must include an acknowledgement:
16668651Skris *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
16768651Skris *
16868651Skris * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
16968651Skris * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17068651Skris * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17168651Skris * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17268651Skris * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17368651Skris * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
17468651Skris * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
17568651Skris * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
17668651Skris * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
17768651Skris * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
17868651Skris * SUCH DAMAGE.
17968651Skris *
18068651Skris * The licence and distribution terms for any publically available version or
18168651Skris * derivative of this code cannot be changed.  i.e. this code cannot simply be
18268651Skris * copied and put under another distribution licence
18368651Skris * [including the GNU Public Licence.]
18468651Skris */
18568651Skris
18668651Skris#define SN_undef			"UNDEF"
18768651Skris#define LN_undef			"undefined"
18868651Skris#define NID_undef			0
18968651Skris#define OBJ_undef			0L
19068651Skris
19168651SkrisEOF
19268651Skris
19368651Skrisforeach (sort { $a <=> $b } keys %ordern)
19468651Skris	{
19568651Skris	$Cname=$ordern{$_};
19668651Skris	print OUT "#define SN_",$Cname,"\t\t\"",$sn{$Cname},"\"\n" if $sn{$Cname} ne "";
19768651Skris	print OUT "#define LN_",$Cname,"\t\t\"",$ln{$Cname},"\"\n" if $ln{$Cname} ne "";
19868651Skris	print OUT "#define NID_",$Cname,"\t\t",$nid{$Cname},"\n" if $nid{$Cname} ne "";
19968651Skris	print OUT "#define OBJ_",$Cname,"\t\t",$obj{$Cname},"\n" if $obj{$Cname} ne "";
20068651Skris	print OUT "\n";
20168651Skris	}
20268651Skris
20368651Skrisclose OUT;
20468651Skris
20568651Skrissub process_oid
20668651Skris	{
20768651Skris	local($oid)=@_;
20868651Skris	local(@a,$oid_pref);
20968651Skris
21068651Skris	@a = split(/\s+/,$myoid);
21168651Skris	$pref_oid = "";
21268651Skris	$pref_sep = "";
21368651Skris	if (!($a[0] =~ /^[0-9]+$/))
21468651Skris		{
21568651Skris		$a[0] =~ s/-/_/g;
216100928Snectar		if (!defined($obj{$a[0]}))
217100928Snectar			{ die "$ARGV[0]:$o:Undefined identifier ",$a[0],"\n"; }
21868651Skris		$pref_oid = "OBJ_" . $a[0];
21968651Skris		$pref_sep = ",";
22068651Skris		shift @a;
22168651Skris		}
22268651Skris	$oids = join('L,',@a) . "L";
22368651Skris	if ($oids ne "L")
22468651Skris		{
22568651Skris		$oids = $pref_oid . $pref_sep . $oids;
22668651Skris		}
22768651Skris	else
22868651Skris		{
22968651Skris		$oids = $pref_oid;
23068651Skris		}
23168651Skris	return($oids);
23268651Skris	}
233