Blame tests/Performance/Text/textedit.c

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
}