Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mRemoteNG/PuTTYNG.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'utils/wordwrap.c')
-rw-r--r--utils/wordwrap.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/utils/wordwrap.c b/utils/wordwrap.c
new file mode 100644
index 00000000..330b6a03
--- /dev/null
+++ b/utils/wordwrap.c
@@ -0,0 +1,36 @@
+/*
+ * 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;
+ }
+}