@@ -76,37 +76,32 @@ con(void) {
76
76
fcntl (conn , F_SETFL , O_NONBLOCK );
77
77
}
78
78
79
+ /* printf, using hanging indent and greedy algortihm for word wrapping */
79
80
static void
80
81
printw (const char * format , ...) {
81
82
82
- int s1 = 0 , s2 , len , i ;
83
83
va_list argptr ;
84
- char line [BUFF + 1 ];
84
+ char * tok , line [BUFF + 1 ];
85
+ int len , i , s ;
85
86
86
87
va_start (argptr , format );
87
88
vsnprintf (line , BUFF + 1 , format , argptr );
88
89
va_end (argptr );
90
+ /* need to pad first tok since strtok removes duplicate whitespace */
91
+ for (i = 0 ; isspace (line [i ]); i ++ ) printf ("%c" , line [i ]);
89
92
90
- len = strlen (line );
91
- if (len <= cmax + gutl ) printf ("%s" , & line [0 ]);
92
- else if (len > cmax + gutl ) {
93
+ s = cmax + gutl - (i - 1 );
94
+ //s = cmax - (i - 1);
93
95
94
- for (i = gutl ; i < cmax + gutl ; i ++ ) {
95
- if (isspace (line [i ])) s1 = i ;
96
- if (i == cmax + gutl - 1 ) printf ("%-*.*s\n" , s1 , s1 , & line [0 ]);
96
+ for (tok = strtok (& line [i ], " " ); tok != NULL ; tok = strtok (NULL , " " )) {
97
+ len = strlen (tok );
98
+ if ((len + 1 ) > s ) {
99
+ printf ("\n%*.s%s " , gutl + 2 , "" , tok );
100
+ s = cmax - (gutl + 2 + len );
97
101
}
98
-
99
- s2 = s1 ;
100
-
101
- for (i = s1 ; line [i ] != '\0' ; i ++ ) {
102
- if (isspace (line [i ])) s2 = i ;
103
- if ((i - s1 ) == (cmax - gutl )) {
104
- printf ("%*s %-*.*s\n" , gutl , "" , s2 - s1 , s2 - s1 , & line [s1 + 1 ]);
105
- s1 = s2 ;
106
- }
107
- else if (line [i + 1 ] == '\0' ) {
108
- printf ("%*s %-*.*s" , gutl , "" , i - s1 , i - s1 , & line [s1 + 1 ]);
109
- }
102
+ else {
103
+ printf ("%s " , tok );
104
+ s = s - (len + 1 );
110
105
}
111
106
}
112
107
}
@@ -137,7 +132,6 @@ pars(int sl, char *buf) {
137
132
sscanf (buf_c , ":%[^ ] %[^:]:%[^\r]" , pre , cmd , msg );
138
133
sscanf (pre , "%[^!]!%[^@]@%s" , nic , usr , hos );
139
134
sscanf (cmd , "%[^#& ]%s" , ltr , cha );
140
-
141
135
if (!strncmp (ltr , "001" , 3 )) raw ("JOIN #%s\r\n" , chan );
142
136
143
137
if (!strncmp (ltr , "QUIT" , 4 )) {
@@ -147,7 +141,9 @@ pars(int sl, char *buf) {
147
141
printw ("%*.*s \x1b[32;1m%s\x1b[0m\n" , gutl , gutl , "-->" , nic );
148
142
}
149
143
else {
150
- printw ("\x1b[33;1m%*.*s\x1b[0m %s\n" , gutl , gutl , nic , msg );
144
+ printw ("%*s\x1b[33;1m%-.*s\x1b[0m %s\n" , \
145
+ gutl - (strlen (nic ) <= gutl ? strlen (nic ) : gutl ), \
146
+ "" , gutl , nic , msg );
151
147
}
152
148
}
153
149
}
0 commit comments