Add option to allow Polyglot to accept draw offers
[polyglot.git] / gui.c
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
19 static void sig_int(int dummy){
20     my_log("POLYGLOT *** SIGINT Received ***\n");
21     quit();
22 }
23
24 // sig_pipe()
25
26 static void sig_pipe(int dummy){
27     my_log("POLYGLOT *** SIGPIPE Received ***\n");
28     quit();
29 }
30
31 // sig_term()
32
33 static void sig_term(int dummy){
34     my_log("POLYGLOT *** SIGTERM Received ***\n");
35     quit();
36 }
37
38
39 // gui_init()
40
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
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
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
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