// Copyright (c) Athena Dev Teams - Licensed under GNU GPL // For more information, see LICENCE in the main folder #include #include #include #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), 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); } }