diff options
Diffstat (limited to 'usr/src/common/ficl/callback.c')
| -rw-r--r-- | usr/src/common/ficl/callback.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/usr/src/common/ficl/callback.c b/usr/src/common/ficl/callback.c new file mode 100644 index 0000000000..fffcf729a8 --- /dev/null +++ b/usr/src/common/ficl/callback.c @@ -0,0 +1,67 @@ +#include "ficl.h" + +extern ficlSystem *ficlSystemGlobal; + +/* + * f i c l C a l l b a c k T e x t O u t + * Feeds text to the vm's output callback + */ +void +ficlCallbackTextOut(ficlCallback *callback, char *text) +{ + ficlOutputFunction textOut = NULL; + + if (callback != NULL) { + if (callback->textOut != NULL) + textOut = callback->textOut; + else if ((callback->system != NULL) && + (callback != &(callback->system->callback))) { + ficlCallbackTextOut(&(callback->system->callback), + text); + return; + } + } + + if ((textOut == NULL) && (ficlSystemGlobal != NULL)) { + callback = &(ficlSystemGlobal->callback); + textOut = callback->textOut; + } + + if (textOut == NULL) + textOut = ficlCallbackDefaultTextOut; + + (textOut)(callback, text); +} + +/* + * f i c l C a l l b a c k E r r o r O u t + * Feeds text to the vm's error output callback + */ +void +ficlCallbackErrorOut(ficlCallback *callback, char *text) +{ + ficlOutputFunction errorOut = NULL; + + if (callback != NULL) { + if (callback->errorOut != NULL) + errorOut = callback->errorOut; + else if ((callback->system != NULL) && + (callback != &(callback->system->callback))) { + ficlCallbackErrorOut(&(callback->system->callback), + text); + return; + } + } + + if ((errorOut == NULL) && (ficlSystemGlobal != NULL)) { + callback = &(ficlSystemGlobal->callback); + errorOut = callback->errorOut; + } + + if (errorOut == NULL) { + ficlCallbackTextOut(callback, text); + return; + } + + (errorOut)(callback, text); +} |
