diff options
Diffstat (limited to 'src/plugins/gui.c')
-rw-r--r-- | src/plugins/gui.c | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/plugins/gui.c b/src/plugins/gui.c new file mode 100644 index 000000000..6c9a8d85c --- /dev/null +++ b/src/plugins/gui.c @@ -0,0 +1,101 @@ +
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "../common/plugin.h"
+//Needed for strcmpi
+#include "../common/mmo.h"
+
+// "I'm Alive" and "Flush stdout" Originally by Mugendai
+// Ported to plugin by Celest
+
+PLUGIN_INFO = {
+ "AthenaGUI",
+ PLUGIN_CORE,
+ "1.0",
+ PLUGIN_VERSION,
+ "Core plugin for Athena GUI functions"
+};
+
+PLUGIN_EVENTS_TABLE = {
+ { "gui_init", "Plugin_Init" },
+ { NULL, NULL }
+};
+
+unsigned int (*gettick)();
+int (*add_timer_func_list)(int (*)(int,unsigned int,int,int),char*);
+int (*add_timer_interval)(unsigned int,int (*)(int,unsigned int,int,int),int,int,int);
+
+//-----------------------------------------------------
+//I'm Alive Alert
+//Used to output 'I'm Alive' every few seconds
+//Intended to let frontends know if the app froze
+//-----------------------------------------------------
+int imalive_timer(int tid, unsigned int tick, int id, int data){
+ printf("I'm Alive\n");
+ return 0;
+}
+
+//-----------------------------------------------------
+//Flush stdout
+//stdout buffer needs flushed to be seen in GUI
+//-----------------------------------------------------
+int flush_timer(int tid, unsigned int tick, int id, int data){
+ fflush(stdout);
+ return 0;
+}
+
+void gui_init ()
+{
+ char line[1024], w1[1024], w2[1024];
+ int flush_on = 0;
+ int flush_time = 100;
+ int imalive_on = 0;
+ int imalive_time = 30;
+ char **argv;
+ int *argc;
+ FILE *fp;
+ int i;
+
+ IMPORT_SYMBOL(argc, 2);
+ IMPORT_SYMBOL(argv, 3);
+ IMPORT_SYMBOL(gettick, 5);
+ IMPORT_SYMBOL(add_timer_interval, 8);
+ IMPORT_SYMBOL(add_timer_func_list, 9);
+
+ do {
+ fp = fopen("plugins/gui.conf","r");
+ if (fp == NULL)
+ break;
+
+ while(fgets(line, sizeof(line) -1, fp)) {
+ if (line[0] == '/' && line[1] == '/')
+ continue;
+ if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) == 2) {
+ if(strcmpi(w1,"imalive_on")==0){
+ imalive_on = atoi(w2);
+ } else if(strcmpi(w1,"imalive_time")==0){
+ imalive_time = atoi(w2);
+ } else if(strcmpi(w1,"flush_on")==0){
+ flush_on = atoi(w2);
+ } else if(strcmpi(w1,"flush_time")==0){
+ flush_time = atoi(w2);
+ }
+ }
+ }
+ fclose(fp);
+ } while (0);
+
+ for (i = 1; i < *argc ; i++)
+ if (strcmp(argv[i], "--gui") == 0)
+ flush_on = imalive_on = 1;
+
+ if (flush_on) {
+ add_timer_func_list(flush_timer, "flush_timer");
+ add_timer_interval(gettick()+1000,flush_timer,0,0,flush_time);
+ }
+ if (imalive_on) {
+ add_timer_func_list(imalive_timer, "imalive_timer");
+ add_timer_interval(gettick()+10, imalive_timer,0,0,imalive_time*1000);
+ }
+}
|