1217044Snwhitehorn# This script generates the PS3 hypervisor call header from a hypervisor
2217044Snwhitehorn# interface definition file. All lines that do not begin with HVCALL
3217044Snwhitehorn# or a bare # for comments are copied to the output header so that
4217044Snwhitehorn# enums, constant, C comments and the like can be passed through into the
5217044Snwhitehorn# header.
6217044Snwhitehorn#
7217044Snwhitehorn# Invoke like so: awk -f ps3-hv-header.awk < ps3-hvcall.master > ps3-hv.h
8217044Snwhitehorn#
9217044Snwhitehorn
10217044Snwhitehorn# $FreeBSD: releng/11.0/sys/powerpc/ps3/ps3-hv-header.awk 217044 2011-01-06 04:12:29Z nwhitehorn $
11217044Snwhitehorn
12217044Snwhitehorn!/HVCALL.*/ && (!/#.*/ || /#define.*/ || /#include.*/) {
13217044Snwhitehorn	print($0);
14217044Snwhitehorn}
15217044Snwhitehorn
16217044Snwhitehorn/HVCALL.*/ {
17217044Snwhitehorn	split($5, outs, ",")
18217044Snwhitehorn	if ($4 == "UNUSED")
19217044Snwhitehorn		split("", ins, ",")
20217044Snwhitehorn	else
21217044Snwhitehorn		split($4, ins, ",")
22217044Snwhitehorn
23217044Snwhitehorn	printf("int %s(",$3);
24217044Snwhitehorn	for (i = 1; i <= length(ins); i++) {
25217044Snwhitehorn		printf("uint64_t %s", ins[i]);
26217044Snwhitehorn		if (i < length(ins)) printf(", ");
27217044Snwhitehorn	}
28217044Snwhitehorn
29217044Snwhitehorn	if (length(outs) > 0 && length(ins) > 0)
30217044Snwhitehorn		printf(", ");
31217044Snwhitehorn
32217044Snwhitehorn	for (i = 1; i <= length(outs); i++) {
33217044Snwhitehorn		printf("uint64_t *%s", outs[i]);
34217044Snwhitehorn		if (i < length(outs)) printf(", ");
35217044Snwhitehorn	}
36217044Snwhitehorn
37217044Snwhitehorn	if (length(outs) == 0 && length(ins) == 0)
38217044Snwhitehorn		printf("void");
39217044Snwhitehorn
40217044Snwhitehorn	printf(");\n");
41217044Snwhitehorn}
42217044Snwhitehorn	
43