14
14
#define BUFF 512 /* buffer size (see RFC 2812) */
15
15
16
16
static int conn ; /* socket connection */
17
- static char sbuf [BUFF ]; /* string buffer */
18
17
static int verb = 0 ; /* verbose output (e.g. raw stream) */
19
18
static int cmax = 80 ; /* max number of characters per line */
20
19
static int gutl = 10 ; /* max character width of left column */
@@ -47,19 +46,19 @@ kbhit(void) {
47
46
}
48
47
49
48
static void
50
- raw (char * fmt , ...) {
49
+ raw (char s [], char * fmt , ...) {
51
50
52
51
va_list ap ;
53
52
54
53
va_start (ap , fmt );
55
- vsnprintf (sbuf , BUFF , fmt , ap );
54
+ vsnprintf (s , BUFF , fmt , ap );
56
55
va_end (ap );
57
- if (verb ) printf ("<< %s" , sbuf );
58
- write (conn , sbuf , strlen (sbuf ));
56
+ if (verb ) printf ("<< %s" , s );
57
+ write (conn , s , strlen (s ));
59
58
}
60
59
61
60
static void
62
- con (void ) {
61
+ con (char s [] ) {
63
62
64
63
struct addrinfo * res , hints = {
65
64
.ai_family = AF_INET ,
@@ -70,11 +69,11 @@ con(void) {
70
69
conn = socket (res -> ai_family , res -> ai_socktype , res -> ai_protocol );
71
70
connect (conn , res -> ai_addr , res -> ai_addrlen );
72
71
73
- if (nick ) raw ("NICK %s\r\n" , nick );
74
- if (user && real ) raw ("USER %s - - :%s\r\n" , user , real );
75
- if (user && !real && nick ) raw ("USER %s - - :%s\r\n" , user , nick );
76
- if (!user && !real && nick ) raw ("USER %s - - :%s\r\n" , nick , nick );
77
- if (pass ) raw ("PASS %s\r\n" , pass );
72
+ if (nick ) raw (s , "NICK %s\r\n" , nick );
73
+ if (user && real ) raw (s , "USER %s - - :%s\r\n" , user , real );
74
+ if (user && !real && nick ) raw (s , "USER %s - - :%s\r\n" , user , nick );
75
+ if (!user && !real && nick ) raw (s , "USER %s - - :%s\r\n" , nick , nick );
76
+ if (pass ) raw (s , "PASS %s\r\n" , pass );
78
77
79
78
fcntl (conn , F_SETFL , O_NONBLOCK );
80
79
}
@@ -107,32 +106,32 @@ printw(const char *format, ...) {
107
106
}
108
107
109
108
static void
110
- pars (int sl , char * buf ) {
109
+ pars (int sl , char * s ) {
111
110
112
111
int len , i , o = -1 ;
113
112
char buf_c [BUFF + 1 ], ltr [200 ], cha [50 ], nic [200 ], hos [200 ], \
114
113
usr [200 ], cmd [200 ], msg [200 ], pre [200 ];
115
114
116
115
for (i = 0 ; i < sl ; i ++ ) {
117
116
o ++ ;
118
- buf_c [o ] = buf [i ];
117
+ buf_c [o ] = s [i ];
119
118
120
- if ((i > 0 && buf [i ] == '\n' && buf [i - 1 ] == '\r' ) || o == BUFF ) {
119
+ if ((i > 0 && s [i ] == '\n' && s [i - 1 ] == '\r' ) || o == BUFF ) {
121
120
buf_c [o + 1 ] = '\0' ;
122
121
o = -1 ;
123
122
124
123
if (verb ) printf (">> %s" , buf_c );
125
124
126
125
if (!strncmp (buf_c , "PING" , 4 )) {
127
126
buf_c [1 ] = 'O' ;
128
- raw (buf_c );
127
+ raw (s , buf_c );
129
128
}
130
129
131
130
else if (buf_c [0 ] == ':' ) {
132
131
sscanf (buf_c , ":%[^ ] %[^:]:%[^\r]" , pre , cmd , msg );
133
132
sscanf (pre , "%[^!]!%[^@]@%s" , nic , usr , hos );
134
133
sscanf (cmd , "%[^#& ]%s" , ltr , cha );
135
- if (!strncmp (ltr , "001" , 3 )) raw ("JOIN #%s\r\n" , chan );
134
+ if (!strncmp (ltr , "001" , 3 )) raw (s , "JOIN #%s\r\n" , chan );
136
135
137
136
if (!strncmp (ltr , "QUIT" , 4 )) {
138
137
printw ("%*.*s \x1b[34;1m%s\x1b[0m\n" , gutl , gutl , "<--" , nic );
@@ -187,14 +186,15 @@ main(int argc, char **argv) {
187
186
if (pid == 0 ) {
188
187
int sl , i ;
189
188
char u [BUFF ];
189
+ char s [BUFF ];
190
190
191
- con ();
191
+ con (s );
192
192
193
- while ((sl = read (conn , sbuf , BUFF ))) {
194
- pars (sl , sbuf );
193
+ while ((sl = read (conn , s , BUFF ))) {
194
+ pars (sl , s );
195
195
if (read (fd [0 ], u , BUFF ) > 0 ) {
196
196
for (i = 0 ; u [i ] != '\n' ; i ++ ) continue ;
197
- if (u [0 ] != ':' ) raw ("%-*.*s\r\n" , i , i , u );
197
+ if (u [0 ] != ':' ) raw (s , "%-*.*s\r\n" , i , i , u );
198
198
}
199
199
}
200
200
printf ("%*s<<press RETURN key to exit>>" , gutl + 2 , "" );
0 commit comments