1
+ /* See LICENSE file for license details. */
1
2
#define _POSIX_C_SOURCE 200809L
2
3
#include <ctype.h>
3
4
#include <stdarg.h>
11
12
#include <sys/wait.h>
12
13
#include <termios.h>
13
14
14
- #define BUFF 512 /* buffer size (see RFC 2812) */
15
-
16
- static int conn ; /* socket connection */
17
- static int verb = 0 ; /* verbose output (e.g. raw stream) */
18
- static int cmax = 80 ; /* max number of characters per line */
19
- static int gutl = 10 ; /* max character width of left column */
20
- static char * host = "irc.freenode.org" ; /* irc host address */
21
- static char * chan = "kisslinux" ; /* channel */
22
- static char * port = "6667" ; /* port */
23
- static char * nick = NULL ; /* nickname */
24
- static char * pass = NULL ; /* server password */
25
- static char * user = NULL ; /* server username */
26
- static char * real = NULL ; /* real name */
27
-
15
+ #define BUFF 512 /* buffer size (see RFC 2812) */
16
+
17
+ static int conn ; /* socket connection */
18
+ static int verb = 0 ; /* verbose output (e.g. raw stream) */
19
+ static int cmax = 80 ; /* max number of chars per line */
20
+ static int gutl = 10 ; /* max char width of left column */
21
+ static char * host = "irc.freenode.org" ; /* irc host address */
22
+ static char * chan = "kisslinux" ; /* channel */
23
+ static char * port = "6667" ; /* server port */
24
+ static char * nick = NULL ; /* nickname */
25
+ static char * pass = NULL ; /* server password */
26
+ static char * user = NULL ; /* server user name */
27
+ static char * real = NULL ; /* server user real name */
28
+
29
+ /* wait for keyboard press to interrupt stream */
28
30
static int
29
31
kbhit (void ) {
30
32
@@ -45,6 +47,24 @@ kbhit(void) {
45
47
return byteswaiting > 0 ;
46
48
}
47
49
50
+ /* handle keyboard strokes for command input */
51
+ static char *
52
+ input_handler (size_t size ) {
53
+
54
+ char * usrin = malloc (sizeof (char ) * (size + 1 ));
55
+ struct termios tp , save ;
56
+
57
+ tcgetattr (STDIN_FILENO , & tp );
58
+ save = tp ;
59
+ tp .c_cc [VERASE ] = 127 ;
60
+ tcsetattr (STDIN_FILENO , TCSANOW , & tp );
61
+ fgets (usrin , size , stdin );
62
+ tcsetattr (STDIN_FILENO , TCSANOW , & save );
63
+
64
+ return usrin ;
65
+ }
66
+
67
+ /* send command to irc server */
48
68
static void
49
69
raw (char * s , char * fmt , ...) {
50
70
@@ -57,8 +77,9 @@ raw(char *s, char *fmt, ...) {
57
77
write (conn , s , strlen (s ));
58
78
}
59
79
80
+ /* initial irc server connection */
60
81
static void
61
- con (char * s ) {
82
+ irc_init (char * s ) {
62
83
63
84
struct addrinfo * res , hints = {
64
85
.ai_family = AF_INET ,
@@ -78,6 +99,7 @@ con(char *s) {
78
99
fcntl (conn , F_SETFL , O_NONBLOCK );
79
100
}
80
101
102
+ /* print formatted irc stream with word wrap and hanging indent */
81
103
static void
82
104
printw (const char * format , ...) {
83
105
@@ -105,8 +127,9 @@ printw(const char *format, ...) {
105
127
}
106
128
}
107
129
130
+ /* parse irc stream */
108
131
static void
109
- pars (int sl , char * s ) {
132
+ parser (int sl , char * s ) {
110
133
111
134
int len , i , o = -1 ;
112
135
char buf_c [BUFF + 1 ], ltr [200 ], cha [50 ], nic [200 ], hos [200 ], \
@@ -149,21 +172,6 @@ pars(int sl, char *s) {
149
172
}
150
173
}
151
174
152
- static char *
153
- input_handler (size_t size ) {
154
-
155
- char * usrin = malloc (sizeof (char ) * (size + 1 ));
156
- struct termios tp , save ;
157
-
158
- tcgetattr (STDIN_FILENO , & tp );
159
- save = tp ;
160
- tp .c_cc [VERASE ] = 127 ;
161
- tcsetattr (STDIN_FILENO , TCSANOW , & tp );
162
- fgets (usrin , size , stdin );
163
- tcsetattr (STDIN_FILENO , TCSANOW , & save );
164
- return usrin ;
165
- }
166
-
167
175
int
168
176
main (int argc , char * * argv ) {
169
177
@@ -202,10 +210,10 @@ main(int argc, char **argv) {
202
210
int sl , i ;
203
211
char u [BUFF ], s [BUFF ];
204
212
205
- con (s );
213
+ irc_init (s );
206
214
207
215
while ((sl = read (conn , s , BUFF ))) {
208
- pars (sl , s );
216
+ parser (sl , s );
209
217
if (read (fd [0 ], u , BUFF ) > 0 ) {
210
218
for (i = 0 ; u [i ] != '\n' ; i ++ ) continue ;
211
219
if (u [0 ] != ':' ) raw (s , "%-*.*s\r\n" , i , i , u );
0 commit comments