1BEGIN {
2  inheader=0;
3#  use_ldap_define = 0;
4  current_file="";
5  if (headername=="") {
6    headername="_PROTO_H_";
7  }
8
9  print "#ifndef",headername
10  print "#define",headername
11  print ""
12  print "/* This file is automatically generated with \"make proto\". DO NOT EDIT */"
13  print ""
14}
15
16END {
17  print ""
18  print "#endif /* ",headername," */"
19}
20
21{
22  if (FILENAME!=current_file) {
23#    if (use_ldap_define)
24#    {
25#      print "#endif /* USE_LDAP */"
26#      use_ldap_define = 0;
27#    }
28    print ""
29    print "/* The following definitions come from",FILENAME," */"
30    print ""
31    current_file=FILENAME
32  }
33  if (inheader) {
34    if (match($0,"[)][ \t]*$")) {
35      inheader = 0;
36      printf "%s;\n",$0;
37    } else {
38      printf "%s\n",$0;
39    }
40    next;
41  }
42}
43
44# we handle the loadparm.c fns separately
45
46/^FN_LOCAL_BOOL/ {
47  split($0,a,"[,()]")
48  printf "BOOL %s(int );\n", a[2]
49}
50
51/^FN_LOCAL_PARM_BOOL/ {
52  split($0,a,"[,()]")
53  printf "BOOL %s(const struct share_params *p );\n", a[2]
54}
55
56/^FN_LOCAL_PARM_INTEGER/ {
57  split($0,a,"[,()]")
58  printf "int %s(const struct share_params *p );\n", a[2]
59}
60
61/^FN_LOCAL_LIST/ {
62  split($0,a,"[,()]")
63  printf "const char **%s(int );\n", a[2]
64}
65
66/^FN_LOCAL_STRING/ {
67  split($0,a,"[,()]")
68  printf "char *%s(int );\n", a[2]
69}
70
71/^FN_LOCAL_PARM_STRING/ {
72  split($0,a,"[,()]")
73  printf "char *%s(const struct share_params *p );\n", a[2]
74}
75
76/^FN_LOCAL_CONST_STRING/ {
77  split($0,a,"[,()]")
78  printf "const char *%s(int );\n", a[2]
79}
80
81/^FN_LOCAL_INT/ {
82  split($0,a,"[,()]")
83  printf "int %s(int );\n", a[2]
84}
85
86/^FN_LOCAL_CHAR/ {
87  split($0,a,"[,()]")
88  printf "char %s(const struct share_params *p );\n", a[2]
89}
90
91/^FN_GLOBAL_BOOL/ {
92  split($0,a,"[,()]")
93  printf "BOOL %s(void);\n", a[2]
94}
95
96/^FN_GLOBAL_LIST/ {
97  split($0,a,"[,()]")
98  printf "const char **%s(void);\n", a[2]
99}
100
101/^FN_GLOBAL_STRING/ {
102  split($0,a,"[,()]")
103  printf "char *%s(void);\n", a[2]
104}
105
106/^FN_GLOBAL_CONST_STRING/ {
107  split($0,a,"[,()]")
108  printf "const char *%s(void);\n", a[2]
109}
110
111/^FN_GLOBAL_INT/ {
112  split($0,a,"[,()]")
113  printf "int %s(void);\n", a[2]
114}
115
116/^static|^extern/ || !/^[a-zA-Z]/ || /[;]/ {
117  next;
118}
119
120#
121# We have to split up the start
122# matching as we now have so many start
123# types that it can cause some versions
124# of nawk/awk to choke and fail on
125# the full match. JRA.
126#
127
128{
129  gotstart = 0;
130  if( $0 ~ /^const|^connection_struct|^pipes_struct|^smb_np_struct|^file_fd_struct|^files_struct|^connection_struct|^uid_t|^gid_t|^unsigned|^mode_t|^DIR|^user|^int|^pid_t|^ino_t|^off_t|^double/ ) {
131    gotstart = 1;
132  }
133
134  if( $0 ~ /^vuser_key|^UNISTR2|^LOCAL_GRP|^DOMAIN_GRP|^SMB_STRUCT_DIRENT|^SEC_ACL|^SEC_DESC|^SEC_DESC_BUF|^DOM_SID|^RPC_HND_NODE|^BYTE/ ) {
135    gotstart = 1;
136  }
137
138  if( $0 ~ /^ADS_STRUCT|^ADS_STATUS|^DATA_BLOB|^ASN1_DATA|^TDB_CONTEXT|^TDB_DATA|^smb_ucs2_t|^TALLOC_CTX|^hash_element|^NT_DEVICEMODE|^enum.*\(|^NT_USER_TOKEN|^SAM_ACCOUNT|^NTTIME/ ) {
139    gotstart = 1;
140  }
141
142  if( $0 ~ /^smb_iconv_t|^long|^char|^uint|^NTSTATUS|^WERROR|^CLI_POLICY_HND|^struct|^BOOL|^void|^time|^smb_shm_offset_t|^shm_offset_t|^FILE|^XFILE|^SMB_OFF_T|^size_t|^ssize_t|^SMB_BIG_UINT|^SMB_BIG_INT/ ) {
143    gotstart = 1;
144  }
145
146  if( $0 ~ /^SAM_ACCT_INFO_NODE|^SMB_ACL_T|^ADS_MODLIST|^PyObject|^SORTED_TREE|^REGISTRY_HOOK|^REGISTRY_VALUE|^REGVAL_CTR|^DEVICEMODE|^PAC_DATA|^NET_USER_INFO_3|^smb_event_id_t/ ) {
147    gotstart = 1;
148  }
149
150  if( $0 ~ /^WINBINDD_PW|^WINBINDD_GR|^NT_PRINTER_INFO_LEVEL_2|^LOGIN_CACHE|^krb5_error_code|^LDAP|^u32|^LUID_ATTR|^NSS_STATUS/ ) {
151    gotstart = 1;
152  }
153
154  if( $0 ~ /^NODE_STATUS_STRUCT|SMB_STRUCT_DIR|ELOG_TDB|codepoint_t/ ) {
155    gotstart = 1;
156  }
157
158  if(!gotstart) {
159    next;
160  }
161}
162
163
164/[(].*[)][ \t]*$/ {
165    printf "%s;\n",$0;
166    next;
167}
168
169/[(]/ {
170  inheader=1;
171  printf "%s\n",$0;
172  next;
173}
174
175