int this_is_a_function_proto(int a,
                             char * b);

int
this_is_a_function_def(int a,
                       char * b)
{
	this_is_a_function_call(a,
		b);

	a = another_function_call(a,
		b);

}

typedef const char * pu8_t;

typedef short (*hello1)(char coolParam,
                        ushort *,
                        unsigned int anotherone);

typedef const unsigned char * (getfcn_t)(
   int idx, ulong op);

short (*hello2)(char coolParam,
                ulong *,
                uchar,
                unsigned int anotherone);

const unsigned char * (*getstr) (
   int idx,
   ulong op);

short hello3 (char coolParam,
              ushort *,
              unsigned int anotherone);
