The C function return or took a C string as parameter, with is an array of char or pointer to unsigned char.
Another function return or took an array of C string as parameter, which is an 2D array of char or pointer to pointer to unsigned char.
Another function return or took an array of array of C string as parameter, which is an 3D array of
char or pointer to pointer to pointer to unsigned char.
It's too complex. C code tends to abuse pointer too much.
e.g:
void IupResetAttribute(Ihandle* ih, const char* name);
int IupGetAllAttributes(Ihandle* ih, char** names, int n);
int IupOpen (int *argc, char ***argv);