summaryrefslogtreecommitdiff
path: root/usr/src/common/ficl/callback.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/common/ficl/callback.c')
-rw-r--r--usr/src/common/ficl/callback.c67
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);
+}