#!/usr/local/bin/perl

$usage = <<"!";
Usage: $0 <dpa_all.c> <dpa_all.h>
!

while (@ARGV) {
        $file = shift(@ARGV);
        open(F, $file) || die "could not open $file";
        $temp = "tmp.$file";
        open(O, ">$temp") || die "could not open $temp";

        select(O);

        if ($file =~ /\.h/) {
                &processHeader;
        }
        if ($file =~ /\.c/) {
                &processC;
        }

        system "mv $file $file.bak";
        system "mv $temp $file";
}

sub dummy {
                if (! /"Boolean",/) {
                        s/\bBoolean\b/Boolean_ASN1/;
                }
}

sub processC {
        while (<F>) {
                s/ Boolean / Boolean_ASN1 /;
                s/"transfer-method", _v918,/"transfer-method", &_v918,/;
                s/"document-type", _v920,/"document-type", &_v920,/;
                s/enum PDModifyOperator _v917 = 0;/enum PDModifyOperator _v917 = PDreplace;/;
                s/enum PDModifyOperator _v924 = 0;/enum PDModifyOperator _v924 = PDreplace;/;
                s/enum PDListOperator _v927 = 0;/enum PDListOperator _v927 = PDget_attributes;/;
                print;
        }
}

sub processHeader {
        while (<F>) {
                s/\bBoolean\b/Boolean_ASN1/;

                if (/typedef struct PDInfrmtnFrmwrk_RDNSequence_ \{/) {
                        $save = 1;
                }
                if ($save) {
                        $move .= $_;
                }
                if (/\} \*PDInfrmtnFrmwrk_RDNSequence;/) {
                        $save = 0;
                        next;
                }
                if ($save) {
                        next;
                }

                print;

                if (m,/\* associated control file: dpa_all.c \*/,) {
                        print "#ifndef DPA_ALL_H\n";
                        print "#define DPA_ALL_H\n";
                        $fileType = 'header';
                }

                if (/^\} PDFilterItem;/) {
                        print "typedef struct PD_setof6_ *so6;\n";
                        print "typedef struct PD_setof7_ *so7;\n";
                }

                if (/^\} \*PDInfrmtnFrmwrk_RltvDstngshdNm;/) {
                        print "\n";
                        print $move;
                }
        }
        print "#endif\n";
}
