summaryrefslogtreecommitdiff
path: root/app/wlib/mswlib/mswtext.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/wlib/mswlib/mswtext.c')
-rw-r--r--app/wlib/mswlib/mswtext.c63
1 files changed, 39 insertions, 24 deletions
diff --git a/app/wlib/mswlib/mswtext.c b/app/wlib/mswlib/mswtext.c
index 293e2b4..0a0ce88 100644
--- a/app/wlib/mswlib/mswtext.c
+++ b/app/wlib/mswlib/mswtext.c
@@ -137,6 +137,9 @@ void wTextAppend(
if (b->option&BO_READONLY) {
SendMessage(b->hWnd, EM_SETREADONLY, 1, 0L);
}
+
+ // scroll to bottom of text box
+ SendMessage(b->hWnd, EM_LINESCROLL, 0, 10000L);
}
@@ -247,42 +250,54 @@ wBool_t wTextGetModified(
return (wBool_t)rc;
}
+/**
+ * Get the size of the text in the text control including terminating '\0'. Note that
+ * the text actually might be shorter if the text includes CRs.
+ *
+ * \param b IN text control
+ * \return required buffer size
+ */
int wTextGetSize(
wText_p b)
{
- int lc, l, len=0;
- lc = (int)SendMessage(b->hWnd, EM_GETLINECOUNT, 0, 0L);
+ int len;
- for (l=0; l<lc ; l++) {
- int charIndex = (int)SendMessage(b->hWnd, EM_LINEINDEX, l, 0L);
- len += (int)SendMessage(b->hWnd, EM_LINELENGTH, charIndex, 0L) + 1;
- }
-
- if (len == 1) {
- len = 0;
- }
+ len = GetWindowTextLength(b->hWnd);
- return len;
+ return len + 1;
}
+/**
+ * Get the text from a textentry. The buffer must be large enough for the text and
+ * the terminating \0.
+ * In case the string contains carriage returns these are removed. The returned string
+ * will be shortened accordingly.
+ * To get the complete contents the buffer size must be equal or greater then the return
+ * value of wTextGetSize()
+ *
+ * \param b IN text entry
+ * \param t IN/OUT buffer for text
+ * \param s IN size of buffer
+ */
+
void wTextGetText(
wText_p b,
char * t,
int s)
{
- int lc, l, len;
- s--;
- lc = (int)SendMessage(b->hWnd, EM_GETLINECOUNT, 0, 0L);
-
- for (l=0; l<lc && s>=0; l++) {
- *(WORD*)t = s;
- len = (int)SendMessage(b->hWnd, EM_GETLINE, l, (LPARAM)t);
- t += len;
- *t++ = '\n';
- s -= len+1;
- }
-
- *(t - 1) = '\0'; // overwrite the last \n added
+ char *buffer = malloc(s);
+ char *ptr = buffer;
+ GetWindowText(b->hWnd, buffer, s);
+
+ // remove carriage returns
+ while (*ptr) {
+ if (*ptr != '\r') {
+ *t = *ptr;
+ t++;
+ }
+ ptr++;
+ }
+ free(buffer);
}