|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
#ifdef REV_INFO
|
|
Packit |
b099d7 |
#ifndef lint
|
|
Packit |
b099d7 |
static char rcsid[] = "$XConsortium: textedit.c /main/7 1995/07/13 17:26:33 drk $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* file: textedit.c
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Has a Multi line Text widget under Form. The XmNcolumns resource is being
|
|
Packit |
b099d7 |
* set to 80 at creation time, and XmNrows to 24. By default, wordWrap is on.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Standard C headers */
|
|
Packit |
b099d7 |
#include <math.h>
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* X headers */
|
|
Packit |
b099d7 |
#include <X11/Xlib.h>
|
|
Packit |
b099d7 |
#include <X11/StringDefs.h>
|
|
Packit |
b099d7 |
#include <X11/Xatom.h>
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <testlib.h>
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define TEXT1_TOPCHAR 1
|
|
Packit |
b099d7 |
#define NUM_COLUMNS 80
|
|
Packit |
b099d7 |
#define NUM_ROWS 24
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define MAX_NUM_LINES 200
|
|
Packit |
b099d7 |
#define MAX_BUF_SIZE 40000
|
|
Packit |
b099d7 |
#define MAX_LINE_SIZE 110
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define MAX_COMM_INDX 7
|
|
Packit |
b099d7 |
#define MAX_LINES 200
|
|
Packit |
b099d7 |
#define MIN_COLS 30
|
|
Packit |
b099d7 |
#define MAX_COLS 100
|
|
Packit |
b099d7 |
#define NUM_INDX 14
|
|
Packit |
b099d7 |
#define MAX_NUM_SPACE 6
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
char buffer[150];
|
|
Packit |
b099d7 |
#define TEXT1_X 10
|
|
Packit |
b099d7 |
#define TEXT1_Y 10
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void fill_text_buf();
|
|
Packit |
b099d7 |
static void quitCB();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Global Variables */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
char *common_buf[] = {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
"30 CHARS!!",
|
|
Packit |
b099d7 |
"40 CHARS XXXXXXXXX!!",
|
|
Packit |
b099d7 |
"50 CHARS XXXXXXXX 1XXXXXXXXX!!",
|
|
Packit |
b099d7 |
"60 CHARS XXXXXXXX 1XXXXXXXX 2XXXXXXXXX!!",
|
|
Packit |
b099d7 |
"70 CHARS XXXXXXXX 1XXXXXXXX 2XXXXXXXX 3XXXXXXXXX!!",
|
|
Packit |
b099d7 |
"80 CHARS XXXXXXXX 1XXXXXXXX 2XXXXXXXX 3XXXXXXXX 4XXXXXXXXX!!",
|
|
Packit |
b099d7 |
"90 CHARS XXXXXXXX 1XXXXXXXX 2XXXXXXXX 3XXXXXXXX 4XXXXXXXX 5XXXXXXXXX!!",
|
|
Packit |
b099d7 |
"100 CHARS XXXXXXXX 1XXXXXXXX 2XXXXXXXX 3XXXXXXXX 4XXXXXXXX 5XXXXXXXX 6XXXXXXXX!!"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
char *common1 = "This is Line #";
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
char text_string[MAX_BUF_SIZE + 1];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget Form1;
|
|
Packit |
b099d7 |
Widget Text1;
|
|
Packit |
b099d7 |
Arg args[20];
|
|
Packit |
b099d7 |
int n;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void myQuit()
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf("Begin exiting ... please standby ... \n");
|
|
Packit |
b099d7 |
XtDestroyWidget(Shell1);
|
|
Packit |
b099d7 |
fflush(stdout);
|
|
Packit |
b099d7 |
exit(0);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
main (argc, argv)
|
|
Packit |
b099d7 |
int argc;
|
|
Packit |
b099d7 |
char **argv;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget SWin;
|
|
Packit |
b099d7 |
Display *display;
|
|
Packit |
b099d7 |
XFontStruct *newfont;
|
|
Packit |
b099d7 |
XmFontList newfontlist;
|
|
Packit |
b099d7 |
Widget quit_button;
|
|
Packit |
b099d7 |
FILE *infp;
|
|
Packit |
b099d7 |
char tmpbuf[MAX_LINE_SIZE+1];
|
|
Packit |
b099d7 |
int num_lines, line_num, num_cols;
|
|
Packit |
b099d7 |
char c;
|
|
Packit |
b099d7 |
int word_wrap_val;
|
|
Packit |
b099d7 |
Bool word_wrap, force_wrap;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
text_string[0] = buffer[0] = '\0';
|
|
Packit |
b099d7 |
num_lines = MAX_NUM_LINES;
|
|
Packit |
b099d7 |
num_cols = MAX_COLS;
|
|
Packit |
b099d7 |
word_wrap_val = 0;
|
|
Packit |
b099d7 |
word_wrap = force_wrap = False;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (argc > 1)
|
|
Packit |
b099d7 |
while (--argc > 0) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
argv++;
|
|
Packit |
b099d7 |
c = **argv;
|
|
Packit |
b099d7 |
if (c != '-')
|
|
Packit |
b099d7 |
continue;
|
|
Packit |
b099d7 |
c = *(*argv + 1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
switch(c) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
case 'c':
|
|
Packit |
b099d7 |
num_cols = atoi(*++argv);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case 'r':
|
|
Packit |
b099d7 |
num_lines = atoi(*++argv);
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case 'w':
|
|
Packit |
b099d7 |
word_wrap_val = atoi(*++argv);
|
|
Packit |
b099d7 |
force_wrap = True;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case 'h':
|
|
Packit |
b099d7 |
print_usage();
|
|
Packit |
b099d7 |
exit(0);
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
argc--;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (num_lines <= 0 || num_lines > MAX_NUM_LINES)
|
|
Packit |
b099d7 |
num_lines = MAX_NUM_LINES;
|
|
Packit |
b099d7 |
if (num_cols <= 0 || num_cols > MAX_COLS)
|
|
Packit |
b099d7 |
num_cols = MAX_COLS;
|
|
Packit |
b099d7 |
if (force_wrap == True)
|
|
Packit |
b099d7 |
word_wrap = (word_wrap_val == 0) ? False : True;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
word_wrap = True;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
fill_text_buf(num_lines, num_cols);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* initialize toolkit */
|
|
Packit |
b099d7 |
CommonTestInit(argc, argv);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XtNwidth, 800); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XtNheight, 450); n++;
|
|
Packit |
b099d7 |
XtSetValues(Shell1, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* create main form */
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
Form1 = XmCreateForm (Shell1, "Form1", args, n);
|
|
Packit |
b099d7 |
XtManageChild (Form1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* create multi line text widget */
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNx, TEXT1_X); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNverifyBell, False); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNvalue, text_string); n++;
|
|
Packit |
b099d7 |
newfont = XLoadQueryFont(XtDisplay(Shell1),"9x15");
|
|
Packit |
b099d7 |
newfontlist = XmFontListCreate(newfont, XmSTRING_DEFAULT_CHARSET);
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNfontList, newfontlist); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNcolumns, NUM_COLUMNS); n++;
|
|
Packit |
b099d7 |
num_lines = (num_lines > NUM_ROWS) ? NUM_ROWS : num_lines;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNrows, num_lines); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNwordWrap, word_wrap); n++;
|
|
Packit |
b099d7 |
Text1 = XmCreateText(Form1, "Text1", args, n);
|
|
Packit |
b099d7 |
XtManageChild(Text1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmTextSetTopCharacter(Text1, (XmTextPosition)TEXT1_TOPCHAR);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNx, 10); n++;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNy, TEXT1_Y + 400); n++;
|
|
Packit |
b099d7 |
quit_button = XmCreatePushButtonGadget(Form1, "Quit", args, n);
|
|
Packit |
b099d7 |
XtManageChild(quit_button);
|
|
Packit |
b099d7 |
XtAddCallback(quit_button, XmNactivateCallback, quitCB, NULL);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtRealizeWidget(Shell1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAppMainLoop(app_context);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void quitCB(w, client_data, call_data)
|
|
Packit |
b099d7 |
Widget w;
|
|
Packit |
b099d7 |
XtPointer client_data;
|
|
Packit |
b099d7 |
XtPointer call_data;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf("Exiting...Please Standby...\n");
|
|
Packit |
b099d7 |
XtDestroyWidget(Shell1);
|
|
Packit |
b099d7 |
fflush(stdout);
|
|
Packit |
b099d7 |
exit(0);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void fill_text_buf(num_rows, num_cols)
|
|
Packit |
b099d7 |
int num_rows,
|
|
Packit |
b099d7 |
num_cols;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
int i, j;
|
|
Packit |
b099d7 |
char numbuf[6];
|
|
Packit |
b099d7 |
int first_time = 1;
|
|
Packit |
b099d7 |
int common_indx;
|
|
Packit |
b099d7 |
int init_len;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
common_indx = (num_cols - MIN_COLS) / 10;
|
|
Packit |
b099d7 |
if (common_indx < 0 || common_indx > MAX_COMM_INDX)
|
|
Packit |
b099d7 |
common_indx = MAX_COMM_INDX;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
strcpy(buffer, common1);
|
|
Packit |
b099d7 |
strcat(buffer, common_buf[common_indx]);
|
|
Packit |
b099d7 |
init_len = strlen(buffer);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0; i < num_rows; i++) {
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sprintf(numbuf, "%d", i+1);
|
|
Packit |
b099d7 |
insert_chars(numbuf, first_time);
|
|
Packit |
b099d7 |
strcat(text_string, buffer);
|
|
Packit |
b099d7 |
if (first_time)
|
|
Packit |
b099d7 |
first_time = 0;
|
|
Packit |
b099d7 |
for (j = 0; j < 5; j++)
|
|
Packit |
b099d7 |
numbuf[j] = '\0';
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
insert_chars(new, first)
|
|
Packit |
b099d7 |
char *new;
|
|
Packit |
b099d7 |
int first;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
int i, j, len;
|
|
Packit |
b099d7 |
char save[150];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
len = strlen(new);
|
|
Packit |
b099d7 |
if (first)
|
|
Packit |
b099d7 |
strcpy(save, &buffer[NUM_INDX]);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
strcpy(save, &buffer[NUM_INDX + MAX_NUM_SPACE]);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = NUM_INDX,j = 0; j < len ; i++, j++)
|
|
Packit |
b099d7 |
buffer[i] = new[j];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (len < MAX_NUM_SPACE)
|
|
Packit |
b099d7 |
for (j = 0; j < MAX_NUM_SPACE - len; j++)
|
|
Packit |
b099d7 |
buffer[i++] = ' ';
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (j = 0; save[j] != '\0'; j++, i++)
|
|
Packit |
b099d7 |
buffer[i] = save[j];
|
|
Packit |
b099d7 |
if (first)
|
|
Packit |
b099d7 |
buffer[i++] = '\n';
|
|
Packit |
b099d7 |
buffer[i] = '\0';
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
print_usage()
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
printf("Usage: textedit [-c ncols] [-r nrows] [-w wrap_value] [-h]\n");
|
|
Packit |
b099d7 |
printf("\tWhere - \n");
|
|
Packit |
b099d7 |
printf("\t\tncols - no. of columns(chars) displayed in the text widget\n");
|
|
Packit |
b099d7 |
printf("\t\tnrows - no. of rows of text displayed at a time\n");
|
|
Packit |
b099d7 |
printf("\t\twrap_value - 0=wordwrap is False; otherwise wordwrap is True\n");
|
|
Packit |
b099d7 |
printf("\t\t\"-h\" - will display this message\n");
|
|
Packit |
b099d7 |
}
|