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