| #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); |
| } |