# Icky intimate knowledge of MiG output.
-BEGIN { args=""; argsnext=0; echo=1; }
+BEGIN { print "/* This file is generated by shortcut.awk. */";
+ echo=1;
+ inproto=0; proto=""; arglist="";
+ }
+$1 == "LINTLIBRARY" { print "#include <mach.h>"; next }
+
+# Copy the first line of the definition, but
+# replace the function name (RPC) with CALL.
$NF == rpc \
{
for (i = 1; i < NF; ++i) printf "%s ", $i;
next;
}
-args == "" && $1 == "#else" { argsnext=1; print $0; next; }
-
-argsnext == 1 { args=$0; }
-
-{ argsnext=0; }
+# Collect the lines of the prototype in PROTO, and extract the parameter
+# names into ARGLIST.
+NF == 1 && $1 == ")" { inproto=0 }
+inproto { proto = proto $0;
+ arg = $NF;
+ gsub(/[^a-zA-Z0-9_,]/, "", arg);
+ arglist = arglist arg;
+ }
+NF == 1 && $1 == "(" { inproto=1 }
-/^{/ { echo=0; }
+/^{$/ { echo=0; }
echo == 1 { print $0; }
-/^}/ \
+/^}$/ \
{
print "{";
print " kern_return_t err;";
- print " err = " syscall args ";";
+ print " extern kern_return_t " syscall " (" proto ");";
+ print " err = " syscall " (" arglist ");";
print " if (err == MACH_SEND_INTERRUPTED)";
- print " err = " rpc args ";";
+ print " err = " rpc " (" arglist ");";
print " return err;"
print "}";
+ print "weak_alias (" call ", " alias ")"
echo = 1;
}