1 // gui.c
2 
3 // includes
4 
5 #include <stdarg.h>
6 #include <signal.h>
7 
8 #include "gui.h"
9 #include "main.h"
10 
11 // variables
12 
13 gui_t GUI[1];
14 
15 // functions
16 
17 // sig_int()
18 
sig_int(int dummy)19 static void sig_int(int dummy){
20     my_log("POLYGLOT *** SIGINT Received ***\n");
21     quit();
22 }
23 
24 // sig_pipe()
25 
sig_pipe(int dummy)26 static void sig_pipe(int dummy){
27     my_log("POLYGLOT *** SIGPIPE Received ***\n");
28     quit();
29 }
30 
31 // sig_term()
32 
sig_term(int dummy)33 static void sig_term(int dummy){
34     my_log("POLYGLOT *** SIGTERM Received ***\n");
35     quit();
36 }
37 
38 
39 // gui_init()
40 
gui_init(gui_t * gui)41 void gui_init(gui_t *gui){
42 
43 // the following is nice if the "GUI" is a console!
44     signal(SIGINT,sig_int);
45 #ifdef SIGTERM
46     signal(SIGTERM,sig_term);
47 #endif
48 #ifdef SIGPIPE
49     signal(SIGPIPE,sig_pipe);
50 #endif
51     pipex_open(gui->pipex,"GUI",NULL,NULL);
52 }
53 
54 
55 // gui_get_non_blocking()
56 
gui_get_non_blocking(gui_t * gui,char * string)57 bool gui_get_non_blocking(gui_t * gui, char *string) {
58 
59    ASSERT(gui!=NULL);
60    ASSERT(string!=NULL);
61 
62    if(pipex_eof(gui->pipex)){
63         quit();
64         return TRUE; // we never get here
65    }
66    return pipex_readln_nb(gui->pipex,string);
67 }
68 
69 // gui_get()
70 
gui_get(gui_t * gui,char * string)71 void gui_get(gui_t * gui, char *string) {
72     if(pipex_eof(gui->pipex)){
73         quit();
74     }
75     pipex_readln(gui->pipex,string);
76 }
77 
78 
79 // gui_send()
80 
gui_send(gui_t * gui,const char format[],...)81 void gui_send(gui_t * gui, const char format[], ...) {
82 
83    char string[FormatBufferSize];
84 
85    ASSERT(gui!=NULL);
86    ASSERT(format!=NULL);
87 
88    // format
89 
90    CONSTRUCT_ARG_STRING(format,string);
91 
92    // send
93 
94    pipex_writeln(gui->pipex,string);
95 
96 }
97 
98