mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-09 01:18:00 +00:00
d155009ded
I'm planning to use this to replace some of the manually wrapped lines in console messages.
37 lines
1009 B
C
37 lines
1009 B
C
/*
|
|
* Function to wrap text to a fixed number of columns.
|
|
*
|
|
* Currently, assumes the text is in a single-byte character set,
|
|
* because it's only used to display host key prompt messages.
|
|
* Extending to Unicode and using wcwidth() could be an extension.
|
|
*/
|
|
|
|
#include "misc.h"
|
|
|
|
void wordwrap(BinarySink *bs, ptrlen input, size_t maxwid)
|
|
{
|
|
size_t col = 0;
|
|
while (true) {
|
|
ptrlen word = ptrlen_get_word(&input, " ");
|
|
if (!word.len)
|
|
break;
|
|
|
|
/* At the start of a line, any word is legal, even if it's
|
|
* overlong, because we have to display it _somehow_ and
|
|
* wrapping to the next line won't make it any better. */
|
|
if (col > 0) {
|
|
size_t newcol = col + 1 + word.len;
|
|
if (newcol <= maxwid) {
|
|
put_byte(bs, ' ');
|
|
col++;
|
|
} else {
|
|
put_byte(bs, '\n');
|
|
col = 0;
|
|
}
|
|
}
|
|
|
|
put_datapl(bs, word);
|
|
col += word.len;
|
|
}
|
|
}
|