6 $funcname = pop(@fields);
17 last unless /^[IO]+\s/;
19 push(@modes, shift(@fields));
20 push(@names, pop(@fields));
21 push(@types, "@fields");
32 $namelist = '$' . join(', $', @names);
33 $namelist = '' if $namelist eq '$';
37 fatal("Usage: &$funcname($namelist)");
40 if ($rettype eq 'void') {
50 foreach $i (1..@names) {
54 if ($type =~ /^[A-Z]+\*$/) {
60 $what = ($type =~ /^(struct\s+\w+|char|[A-Z]+)\s*\*$/ ? "get" : "gnum");
61 $type .= "\t" if length($type) < 4;
62 $cast .= "\t" if length($cast) < 8;
63 $x = "\t" x (length($name) < 6);
65 if ($what eq 'gnum') {
66 push(@outies, "\t str_numset(st[$i], (double) $name);\n");
67 push(@callnames, "&$name");
70 push(@outies, "\t str_set(st[$i], (char*) $name);\n");
71 push(@callnames, "$name");
75 push(@callnames, $name);
79 $type $name =$x $cast str_$what(st[$i]);
82 elsif ($type =~ /char/) {
93 $callnames = join(', ', @callnames);
94 $outies = join("\n",@outies);
95 if ($rettype eq 'void') {
97 $pre (void)$funcname($callnames);
102 $pre retval = $funcname($callnames);
105 if ($rettype =~ /^(struct\s+\w+|char)\s*\*$/) {
107 str_set(st[0], (char*) retval);
110 elsif ($rettype =~ /^[A-Z]+\s*\*$/) {
112 str_nset(st[0], (char*) &retval, sizeof retval);
117 str_numset(st[0], (double) retval);
120 print $outies if $outies;
121 print $post if $post;
123 print "\t}\n\treturn sp;\n";
130 print "\t}\n\treturn sp;\n";