void func_intptr(int*)
void func_intptr_ret(+int*)
void func_string(string[10])
int func_strlen(+string[retval])
int func_arg0(+string[arg0])
void func_strfixed(string[4])
void func_ppp(int * **)
void func_stringp(string*)
void func_enum(enum (RED=0,GREEN=1,BLUE=2,CHARTREUSE=3,PETUNIA=4))
void func_short(short,short)
void func_ushort(ushort, ushort)
float func_float(float,float)
double func_double(double,double)
typedef color = enum (RED=0,GREEN=1,BLUE=2,CHARTREUSE=3,PETUNIA=4)
void func_typedef(color)
void func_arrayi(array(int,arg2)*,int)
void func_arrayf(array(float,arg2)*,int)
void func_struct(struct(int,int,int,array(struct(int,int),elt2)*,array(struct(int,int),3),string[elt3])*)
void func_work(+string);
void func_call(+string, string);
struct(float,char,char) func_struct_2(int, struct(string(array(char, 6)),float), double);
struct(long,long,long,long) func_struct_large(struct(long,long,long,long), struct(long,long,long,long));
struct(char,char,long,long) func_struct_large2(struct(char,char,long,long), struct(char,char,long,long));
struct(long,long,char,char) func_struct_large3(struct(long,long,char,char), struct(long,long,char,char));
void func_many_args(int, int, long, double, char, int, float, char, int, double, int, double, char, int, short, int, char, float, float, double, long, float, float, float, float);
void func_printf(format);
void func_sprintf(+string,format);
void func_lens(octal, octal(long), hex(short), hex(long));
bool(int) func_bool(int, bool(int));
void func_hide(hide(int), int, hide(int), hide(int), int, hide(int), int, hide(int));
void func_hide_struct(struct(hide(int), int, hide(int), hide(int), int, hide(int), int, hide(int)));
array(enum[long](A,B), 4) *func_short_enums(array(enum[short](A,B), 4)*);
enum[long](A=-1) func_negative_enum(enum[short](A=-1), enum[ushort](A=-1), enum[int](A=-1), enum[uint](A=-1), enum[long](A=-1), enum[ulong](A=-1));
void func_charp_string(string(char *));
struct() func_struct_empty(struct());
struct(char) func_struct_size1(struct(char));
struct(short) func_struct_size2(struct(short));
struct(int) func_struct_size4(struct(int));
struct(int,int) func_struct_size8(struct(int,int));
