Vom Grundsatz musst du folgendes Bedenken:

char*
a) als Parameter: options(*string)
b) als Rückgabe: Zeichenkette, allerdings musst du per %scan(x'00':var) die Länge ermitteln, falls sie nicht der Returnwert ist

int immer 10I 0 value
int* immer 10I 0

usw.

Wird ein * angegeben, so handelt sich es um eine Adresse, fehlt der *, ist es immer value.

Es gibt allerdings manchaml C-Beschreibungen mit [ ], diese sind dann als Adresse auf ein Array zu verstehen.

Hilfreich ist auch manchmal die Deklaration als "* value", also als Adresse.
Dann kann ich den Funktionsaufruf mittels %addr(var) dynamisch versorgen und bin an die harten Prototypdeklaration nicht gebunden. Allerdings ist das mit Vorsicht anzuwenden.