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