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.c560
1 files changed, 280 insertions, 280 deletions
diff --git a/app/wlib/mswlib/mswtext.c b/app/wlib/mswlib/mswtext.c
index b43a5d4..93c97b8 100644
--- a/app/wlib/mswlib/mswtext.c
+++ b/app/wlib/mswlib/mswtext.c
@@ -17,12 +17,11 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <windows.h>
#include <string.h>
-#include <malloc.h>
#include <stdlib.h>
#include <commdlg.h>
#include <math.h>
@@ -38,38 +37,38 @@
*/
static LOGFONT fixedFont = {
- /* Initial default values */
- -18, 0, /* H, W */
- 0, /* A */
- 0,
- FW_REGULAR,
- 0, 0, 0,/* I, U, SO */
- ANSI_CHARSET,
- 0, /* OP */
- 0, /* CP */
- 0, /* Q */
- FIXED_PITCH|FF_MODERN, /* P&F */
- "Courier"
-};
+ /* Initial default values */
+ -18, 0, /* H, W */
+ 0, /* A */
+ 0,
+ FW_REGULAR,
+ 0, 0, 0,/* I, U, SO */
+ ANSI_CHARSET,
+ 0, /* OP */
+ 0, /* CP */
+ 0, /* Q */
+ FIXED_PITCH|FF_MODERN, /* P&F */
+ "Courier"
+ };
static HFONT fixedTextFont, prevTextFont;
struct wText_t {
- WOBJ_COMMON
- HANDLE hText;
+ WOBJ_COMMON
+ HANDLE hText;
};
void wTextClear(
- wText_p b)
+ wText_p b)
{
- LRESULT rc;
- rc = SendMessage(b->hWnd, EM_SETREADONLY, (WPARAM)0, (LPARAM)0);
- rc = SendMessage(b->hWnd, EM_SETSEL, (WPARAM)0, (LPARAM)-1);
- rc = SendMessage(b->hWnd, WM_CLEAR, (WPARAM)0, (LPARAM)0);
-
- if (b->option&BO_READONLY) {
- rc = SendMessage(b->hWnd, EM_SETREADONLY, (WPARAM)1, (LPARAM)0);
- }
+ LRESULT rc;
+ rc = SendMessage(b->hWnd, EM_SETREADONLY, (WPARAM)0, (LPARAM)0);
+ rc = SendMessage(b->hWnd, EM_SETSEL, (WPARAM)0, (LPARAM)-1);
+ rc = SendMessage(b->hWnd, WM_CLEAR, (WPARAM)0, (LPARAM)0);
+
+ if (b->option&BO_READONLY) {
+ rc = SendMessage(b->hWnd, EM_SETREADONLY, (WPARAM)1, (LPARAM)0);
+ }
}
/**
@@ -84,53 +83,53 @@ void wTextClear(
*/
void wTextAppend(
- wText_p b,
- const char * text)
+ wText_p b,
+ const char * text)
{
- char *cp;
- char *buffer;
- char *extText;
- int textSize;
- size_t len = strlen(text);
-
- if (!len) {
- return;
- }
-
- for (cp = (char *)text; *cp; cp++) {
- if (*cp == '\n') {
- len++;
- }
- }
-
- extText = malloc(len + 1 + 10);
-
- for (cp=extText; *text; cp++,text++) {
- if (*text == '\n') {
- *cp++ = '\r';
- *cp = '\n';
- } else {
- *cp = *text;
- }
- }
-
- *cp = '\0';
- textSize = GetWindowTextLength(b->hWnd);
- buffer = malloc((textSize + len + 1) * sizeof(char));
-
- if (buffer) {
- GetWindowText(b->hWnd, buffer, textSize + 1);
- strcat(buffer, extText);
- SetWindowText(b->hWnd, buffer);
- free(extText);
- free(buffer);
- } else {
- abort();
- }
-
- if (b->option&BO_READONLY) {
- SendMessage(b->hWnd, EM_SETREADONLY, (WPARAM)1, (LPARAM)0);
- }
+ char *cp;
+ char *buffer;
+ char *extText;
+ int textSize;
+ size_t len = strlen(text);
+
+ if (!len) {
+ return;
+ }
+
+ for (cp = (char *)text; *cp; cp++) {
+ if (*cp == '\n') {
+ len++;
+ }
+ }
+
+ extText = malloc(len + 1 + 10);
+
+ for (cp=extText; *text; cp++,text++) {
+ if (*text == '\n') {
+ *cp++ = '\r';
+ *cp = '\n';
+ } else {
+ *cp = *text;
+ }
+ }
+
+ *cp = '\0';
+ textSize = GetWindowTextLength(b->hWnd);
+ buffer = malloc((textSize + len + 1) * sizeof(char));
+
+ if (buffer) {
+ GetWindowText(b->hWnd, buffer, textSize + 1);
+ strcat(buffer, extText);
+ SetWindowText(b->hWnd, buffer);
+ free(extText);
+ free(buffer);
+ } else {
+ abort();
+ }
+
+ if (b->option&BO_READONLY) {
+ SendMessage(b->hWnd, EM_SETREADONLY, (WPARAM)1, (LPARAM)0);
+ }
// scroll to bottom of text box
SendMessage(b->hWnd, EM_LINESCROLL, (WPARAM)0, (LPARAM)10000);
@@ -138,146 +137,146 @@ void wTextAppend(
BOOL_T wTextSave(
- wText_p b,
- const char * fileName)
+ wText_p b,
+ const char * fileName)
{
- FILE * f;
- int lc, l, len;
- char line[255];
- f = wFileOpen(fileName, "w");
-
- if (f == NULL) {
- MessageBox(((wControl_p)(b->parent))->hWnd, "TextSave", "", MB_OK|MB_ICONHAND);
- return FALSE;
- }
-
- lc = (int)SendMessage(b->hWnd, EM_GETLINECOUNT, (WPARAM)0, (LPARAM)0);
-
- for (l=0; l<lc; l++) {
- *(WORD*)line = sizeof(line)-1;
- len = (int)SendMessage(b->hWnd, EM_GETLINE, (WPARAM)l, (LPARAM)line);
- line[len] = '\0';
- fprintf(f, "%s\n", line);
- }
-
- fclose(f);
- return TRUE;
+ FILE * f;
+ int lc, l, len;
+ char line[255];
+ f = wFileOpen(fileName, "w");
+
+ if (f == NULL) {
+ MessageBox(((wControl_p)(b->parent))->hWnd, "TextSave", "", MB_OK|MB_ICONHAND);
+ return FALSE;
+ }
+
+ lc = (int)SendMessage(b->hWnd, EM_GETLINECOUNT, (WPARAM)0, (LPARAM)0);
+
+ for (l=0; l<lc; l++) {
+ *(WORD*)line = sizeof(line)-1;
+ len = (int)SendMessage(b->hWnd, EM_GETLINE, (WPARAM)l, (LPARAM)line);
+ line[len] = '\0';
+ fprintf(f, "%s\n", line);
+ }
+
+ fclose(f);
+ return TRUE;
}
BOOL_T wTextPrint(
- wText_p b)
+ wText_p b)
{
- int lc, l, len;
- char line[255];
- HDC hDc;
- int lineSpace;
- int linesPerPage;
- int currentLine;
- int IOStatus;
- TEXTMETRIC textMetric;
- DOCINFO docInfo;
- hDc = mswGetPrinterDC();
+ int lc, l, len;
+ char line[255];
+ HDC hDc;
+ int lineSpace;
+ int linesPerPage;
+ int currentLine;
+ int IOStatus;
+ TEXTMETRIC textMetric;
+ DOCINFO docInfo;
+ hDc = mswGetPrinterDC();
HFONT hFont, hOldFont;
- if (hDc == (HDC)0) {
- MessageBox(((wControl_p)(b->parent))->hWnd, "Print", "Cannot print",
- MB_OK|MB_ICONHAND);
- return FALSE;
- }
+ if (hDc == (HDC)0) {
+ MessageBox(((wControl_p)(b->parent))->hWnd, "Print", "Cannot print",
+ MB_OK|MB_ICONHAND);
+ return FALSE;
+ }
- docInfo.cbSize = sizeof(DOCINFO);
- docInfo.lpszDocName = "XTrkcad Log";
- docInfo.lpszOutput = (LPSTR)NULL;
+ docInfo.cbSize = sizeof(DOCINFO);
+ docInfo.lpszDocName = "XTrkcad Log";
+ docInfo.lpszOutput = (LPSTR)NULL;
- // Retrieve a handle to the monospaced stock font.
+ // Retrieve a handle to the monospaced stock font.
hFont = (HFONT)GetStockObject(ANSI_FIXED_FONT);
hOldFont = (HFONT)SelectObject(hDc, hFont);
- if (StartDoc(hDc, &docInfo) < 0) {
- MessageBox(((wControl_p)(b->parent))->hWnd, "Unable to start print job", NULL,
- MB_OK|MB_ICONHAND);
- DeleteDC(hDc);
- return FALSE;
- }
-
- StartPage(hDc);
-
- GetTextMetrics(hDc, &textMetric);
- lineSpace = textMetric.tmHeight + textMetric.tmExternalLeading;
- linesPerPage = GetDeviceCaps(hDc, VERTRES) / lineSpace;
- currentLine = 1;
- lc = (int)SendMessage(b->hWnd, EM_GETLINECOUNT, (WPARAM)0, (LPARAM)0);
- IOStatus = 0;
-
- for (l=0; l<lc; l++) {
- *(WORD*)line = sizeof(line)-1;
- len = (int)SendMessage(b->hWnd, EM_GETLINE, (WPARAM)l, (LPARAM)line);
- TextOut(hDc, 0, currentLine*lineSpace, line, len);
-
- if (++currentLine > linesPerPage) {
- IOStatus = EndPage(hDc);
- if (IOStatus < 0 ) {
- break;
- }
- StartPage(hDc);
+ if (StartDoc(hDc, &docInfo) < 0) {
+ MessageBox(((wControl_p)(b->parent))->hWnd, "Unable to start print job", NULL,
+ MB_OK|MB_ICONHAND);
+ DeleteDC(hDc);
+ return FALSE;
+ }
+
+ StartPage(hDc);
+
+ GetTextMetrics(hDc, &textMetric);
+ lineSpace = textMetric.tmHeight + textMetric.tmExternalLeading;
+ linesPerPage = GetDeviceCaps(hDc, VERTRES) / lineSpace;
+ currentLine = 1;
+ lc = (int)SendMessage(b->hWnd, EM_GETLINECOUNT, (WPARAM)0, (LPARAM)0);
+ IOStatus = 0;
+
+ for (l=0; l<lc; l++) {
+ *(WORD*)line = sizeof(line)-1;
+ len = (int)SendMessage(b->hWnd, EM_GETLINE, (WPARAM)l, (LPARAM)line);
+ TextOut(hDc, 0, currentLine*lineSpace, line, len);
+
+ if (++currentLine > linesPerPage) {
+ IOStatus = EndPage(hDc);
+ if (IOStatus < 0 ) {
+ break;
+ }
+ StartPage(hDc);
currentLine = 1;
}
- }
+ }
- if (IOStatus >= 0 ) {
- EndPage(hDc);
- EndDoc(hDc);
- }
+ if (IOStatus >= 0 ) {
+ EndPage(hDc);
+ EndDoc(hDc);
+ }
SelectObject(hDc, hOldFont);
- DeleteDC(hDc);
- return TRUE;
+ DeleteDC(hDc);
+ return TRUE;
}
wBool_t wTextGetModified(
- wText_p b)
+ wText_p b)
{
- int rc;
- rc = (int)SendMessage(b->hWnd, EM_GETMODIFY, (WPARAM)0, (LPARAM)0);
- return (wBool_t)rc;
+ int rc;
+ rc = (int)SendMessage(b->hWnd, EM_GETMODIFY, (WPARAM)0, (LPARAM)0);
+ 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)
+ wText_p b)
{
int len;
len = GetWindowTextLength(b->hWnd);
- return len + 1;
+ 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.
+ * 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
+ * \param s IN size of buffer
*/
-
+
void wTextGetText(
- wText_p b,
- char * t,
- int s)
+ wText_p b,
+ char * t,
+ int s)
{
char *buffer = malloc(s);
char *ptr = buffer;
@@ -296,153 +295,154 @@ void wTextGetText(
void wTextSetReadonly(
- wText_p b,
- wBool_t ro)
+ wText_p b,
+ wBool_t ro)
{
- if (ro) {
- b->option |= BO_READONLY;
- } else {
- b->option &= ~BO_READONLY;
- }
+ if (ro) {
+ b->option |= BO_READONLY;
+ } else {
+ b->option &= ~BO_READONLY;
+ }
- SendMessage(b->hWnd, EM_SETREADONLY, (WPARAM)ro, (LPARAM)0);
+ SendMessage(b->hWnd, EM_SETREADONLY, (WPARAM)ro, (LPARAM)0);
}
void wTextSetSize(
- wText_p bt,
- wWinPix_t width,
- wWinPix_t height)
+ wText_p bt,
+ wWinPix_t width,
+ wWinPix_t height)
{
- bt->w = width;
- bt->h = height;
+ bt->w = width;
+ bt->h = height;
- if (!SetWindowPos(bt->hWnd, HWND_TOP, 0, 0,
- bt->w, bt->h, SWP_NOMOVE|SWP_NOZORDER)) {
- mswFail("wTextSetSize: SetWindowPos");
- }
+ if (!SetWindowPos(bt->hWnd, HWND_TOP, 0, 0,
+ bt->w, bt->h, SWP_NOMOVE|SWP_NOZORDER)) {
+ mswFail("wTextSetSize: SetWindowPos");
+ }
}
void wTextComputeSize(
- wText_p bt,
- wWinPix_t rows,
- wWinPix_t lines,
- wWinPix_t * w,
- wWinPix_t * h)
+ wText_p bt,
+ wWinPix_t rows,
+ wWinPix_t lines,
+ wWinPix_t * w,
+ wWinPix_t * h)
{
- static wWinPix_t scrollV_w = -1;
- static wWinPix_t scrollH_h = -1;
- HDC hDc;
- TEXTMETRIC metrics;
-
- if (scrollV_w < 0) {
- scrollV_w = GetSystemMetrics(SM_CXVSCROLL);
- }
-
- if (scrollH_h < 0) {
- scrollH_h = GetSystemMetrics(SM_CYHSCROLL);
- }
-
- hDc = GetDC(bt->hWnd);
- GetTextMetrics(hDc, &metrics);
- *w = rows * metrics.tmAveCharWidth + scrollV_w;
- *h = lines * (metrics.tmHeight + metrics.tmExternalLeading);
- ReleaseDC(bt->hWnd, hDc);
-
- if (bt->option&BT_HSCROLL) {
- *h += scrollH_h;
- }
+ static wWinPix_t scrollV_w = -1;
+ static wWinPix_t scrollH_h = -1;
+ HDC hDc;
+ TEXTMETRIC metrics;
+
+ if (scrollV_w < 0) {
+ scrollV_w = GetSystemMetrics(SM_CXVSCROLL);
+ }
+
+ if (scrollH_h < 0) {
+ scrollH_h = GetSystemMetrics(SM_CYHSCROLL);
+ }
+
+ hDc = GetDC(bt->hWnd);
+ GetTextMetrics(hDc, &metrics);
+ *w = rows * metrics.tmAveCharWidth + scrollV_w;
+ *h = lines * (metrics.tmHeight + metrics.tmExternalLeading);
+ ReleaseDC(bt->hWnd, hDc);
+
+ if (bt->option&BT_HSCROLL) {
+ *h += scrollH_h;
+ }
}
void wTextSetPosition(
- wText_p bt,
- int pos)
+ wText_p bt,
+ int pos)
{
- LRESULT rc;
- rc = SendMessage(bt->hWnd, EM_LINESCROLL, (WPARAM)0, (LPARAM)MAKELONG(-65535, 0));
+ LRESULT rc;
+ rc = SendMessage(bt->hWnd, EM_LINESCROLL, (WPARAM)0, (LPARAM)MAKELONG(-65535,
+ 0));
}
static void textDoneProc(wControl_p b)
{
- wText_p t = (wText_p)b;
- HDC hDc;
- hDc = GetDC(t->hWnd);
- SelectObject(hDc, mswOldTextFont);
- ReleaseDC(t->hWnd, hDc);
+ wText_p t = (wText_p)b;
+ HDC hDc;
+ hDc = GetDC(t->hWnd);
+ SelectObject(hDc, mswOldTextFont);
+ ReleaseDC(t->hWnd, hDc);
}
static callBacks_t textCallBacks = {
- mswRepaintLabel,
- textDoneProc,
- NULL
+ mswRepaintLabel,
+ textDoneProc,
+ NULL
};
wText_p wTextCreate(
- wWin_p parent,
- wWinPix_t x,
- wWinPix_t y,
- const char * helpStr,
- const char * labelStr,
- long option,
- wWinPix_t width,
- wWinPix_t height)
+ wWin_p parent,
+ wWinPix_t x,
+ wWinPix_t y,
+ const char * helpStr,
+ const char * labelStr,
+ long option,
+ wWinPix_t width,
+ wWinPix_t height)
{
- wText_p b;
- DWORD style;
- RECT rect;
- int index;
- b = mswAlloc(parent, B_TEXT, labelStr, sizeof *b, NULL, &index);
- mswComputePos((wControl_p)b, x, y);
- b->option = option;
- style = ES_MULTILINE | ES_LEFT | ES_AUTOVSCROLL | ES_WANTRETURN |
- WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL;
+ wText_p b;
+ DWORD style;
+ RECT rect;
+ int index;
+ b = mswAlloc(parent, B_TEXT, labelStr, sizeof *b, NULL, &index);
+ mswComputePos((wControl_p)b, x, y);
+ b->option = option;
+ style = ES_MULTILINE | ES_LEFT | ES_AUTOVSCROLL | ES_WANTRETURN |
+ WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL;
#ifdef BT_HSCROLL
- if (option & BT_HSCROLL) {
- style |= WS_HSCROLL | ES_AUTOHSCROLL;
- }
+ if (option & BT_HSCROLL) {
+ style |= WS_HSCROLL | ES_AUTOHSCROLL;
+ }
#endif
- /* if (option & BO_READONLY)
- style |= ES_READONLY;*/
- b->hWnd = CreateWindow("EDIT", NULL,
- style, b->x, b->y,
- width, height,
- ((wControl_p)parent)->hWnd, (HMENU)(UINT_PTR)index, mswHInst, NULL);
-
- if (b->hWnd == NULL) {
- mswFail("CreateWindow(TEXT)");
- return b;
- }
-
- if (option & BT_FIXEDFONT) {
- if (fixedTextFont == (HFONT)0) {
- fixedTextFont = CreateFontIndirect(&fixedFont);
- }
-
- SendMessage(b->hWnd, WM_SETFONT, (WPARAM)fixedTextFont, (LPARAM)MAKELONG(1, 0));
- } else if (!mswThickFont) {
- SendMessage(b->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, (LPARAM)0);
- }
-
- b->hText = (HANDLE)SendMessage(b->hWnd, EM_GETHANDLE, (WPARAM)0, (LPARAM)0);
-
- if (option & BT_CHARUNITS) {
- wWinPix_t w, h;
- wTextComputeSize(b, width, height, &w, &h);
-
- if (!SetWindowPos(b->hWnd, HWND_TOP, 0, 0,
- w, h, SWP_NOMOVE|SWP_NOZORDER)) {
- mswFail("wTextCreate: SetWindowPos");
- }
- }
-
- GetWindowRect(b->hWnd, &rect);
- b->w = rect.right - rect.left;
- b->h = rect.bottom - rect.top;
- mswAddButton((wControl_p)b, FALSE, helpStr);
- mswCallBacks[B_TEXT] = &textCallBacks;
- return b;
+ /* if (option & BO_READONLY)
+ style |= ES_READONLY;*/
+ b->hWnd = CreateWindow("EDIT", NULL,
+ style, b->x, b->y,
+ width, height,
+ ((wControl_p)parent)->hWnd, (HMENU)(UINT_PTR)index, mswHInst, NULL);
+
+ if (b->hWnd == NULL) {
+ mswFail("CreateWindow(TEXT)");
+ return b;
+ }
+
+ if (option & BT_FIXEDFONT) {
+ if (fixedTextFont == (HFONT)0) {
+ fixedTextFont = CreateFontIndirect(&fixedFont);
+ }
+
+ SendMessage(b->hWnd, WM_SETFONT, (WPARAM)fixedTextFont, (LPARAM)MAKELONG(1, 0));
+ } else {
+ SendMessage(b->hWnd, WM_SETFONT, (WPARAM)mswLabelFont, (LPARAM)0);
+ }
+
+ b->hText = (HANDLE)SendMessage(b->hWnd, EM_GETHANDLE, (WPARAM)0, (LPARAM)0);
+
+ if (option & BT_CHARUNITS) {
+ wWinPix_t w, h;
+ wTextComputeSize(b, width, height, &w, &h);
+
+ if (!SetWindowPos(b->hWnd, HWND_TOP, 0, 0,
+ w, h, SWP_NOMOVE|SWP_NOZORDER)) {
+ mswFail("wTextCreate: SetWindowPos");
+ }
+ }
+
+ GetWindowRect(b->hWnd, &rect);
+ b->w = rect.right - rect.left;
+ b->h = rect.bottom - rect.top;
+ mswAddButton((wControl_p)b, FALSE, helpStr);
+ mswCallBacks[B_TEXT] = &textCallBacks;
+ return b;
}