#!/usr/local/ls6/perl/bin/perl
#                              -*- Mode: Perl -*- 
# mh2xs -- 
# ITIID           : $ITI$ $Header $__Header$
# Author          : Ulrich Pfeifer
# Created On      : Wed Nov 22 13:05:02 1995
# Last Modified By: Ulrich Pfeifer
# Last Modified On: Wed Nov 22 16:42:15 1995
# Language        : Perl
# Update Count    : 34
# Status          : Unknown, Use with caution!
# 
# (C) Copyright 1995, Universitt Dortmund, all rights reserved.
# 
# $Locker: pfeifer $
# $Log: mh2xs,v $
# Revision 1.0.1.1  1995/11/23  08:20:55  pfeifer
# patch1:
#
# 

%known = qw (MLOpen 1);

while (<>) {
    if (/extern/ && !/;/) {
        chomp;
        $_ .= <>;
    }
  s:/\*.*\*/::;
    next unless /\sP\(\(/;
    ($ext,$return,$api, $func, $proto) = split(' ', $_, 5);
    $proto =~ s/\.\.\.//;
    next if $known{$func}++;
    next if $func =~ /[\(\)]/;
    @args = @names = ();
    ($mp) = ($proto =~ m:P\(\(\s*(.*)\s*\)\):);
    @args = split(/,/, $mp);
    $char = 'string1';
    $num  = 'number1';
    $int  = 'integer1';
    $lint = 'long1';
    $ptr  = 'ptr1';
    for (@args) {
        s/^\s+//;
        s/\s+$//;
        s/unsigned\s+(\w+)/unsigned\@$1/g;
        if (/(.*)\s+(\S\S+)/) {
            $_ = $1;
            $name = $2;
            $name =~ s/P\(\((.*)\)\)/$1/;
            if ($name =~ s/\[\]//) {
                $_ .= '*';
            }
            push @names, $name;
        } elsif (/char/) {
            push @names, $char++;
        } elsif (/double|float/) {
            push @names, $num++;
        } elsif (/int|short/) {
            push @names, $int++;
        } elsif (/long/) {
            push @names, $lint++;
        } elsif (/void/) {
            push @names, $ptr++;
        } else {
            ($name = $_) =~ s/(.*)/\L$1/;
            $name =~ s/\*//g;
            push @names, $name;
        }
    }
    print "$return\n$func(";
    print join ', ', @names;
    print ")\n";
    for (0 .. $#args) {
        $args[$_] =~ s/\@/ /g;
        printf "\t%s\t%s\n", $args[$_], $names[$_];
    }
    print "\n";
}
