status.i4.v = text_edit_window_c(title.i1a.r, top_row.i4.v,
					 left_column.i4.v, text.i1a.r,
					 num_rows.i4.v, num_columns.i4.v,
					 num_lines.i4.v, num_chars.i4.v,
					 reformat_text.s.r, allow_symbols.i4.v,
					 help_info.s.r [,user_key_func.f.v]
					 [,user_key_data.g.v] [,init_func.f.v])

	This routine will create a window for editing a block of text.
	It can be used to edit an existing block of text, or it can be
	initialized completely blank to create a new block of text.
	If existing text is to be edited, it can be reformatted by this
	routine to conform to the requested row and column format.

	title		window title (A value of NULL may be passed for
			this argument if no title is desired.)
	top_row		top row of window (use WMNGR_CENTER for centering
			or WINDOW_xxx_COORD macros in macro for special
	left_column	left column of window (use WMNGR_CENTER for centering
			or WINDOW_xxx_COORD macros in macro for special
	text		returned text
	num_rows	number of rows of text
	num_columns	number of characters per row
	num_lines	number of lines of input to be displayed at a
			time (If a value of zero is passed for this
			argument, the number of rows will be used.)
	num_chars	number of characters of input to be displayed at a
			time (This argument is presently ignored.)
	edit_existing	edit type flag
			(TRUE -> display the passed text and edit it,
			 FALSE -> start with an empty window)
	reformat_text	text reformatting information
			(structure of type WINDOW_TEXT_FORMAT)
			(If a value of NULL is passed, the text will
			 be left in its present format.  If the previous
			 format information is passed in this structure,
			 end of line spaces will be stripped before
			 reformatting the text to the present window.)
	allow_symbols	flag determining whether or not special graphics
			characters can be entered in the text
			(TRUE -> user may enter special graphics symbols,
			 FALSE -> no special graphics symbols may be entered)
	help_info	help callback information
			(structure of type HELP_CALLBACK_DATA)
			(default is NULL)
	[user_key_func]	function to be executed upon each key press
			(function called as follows:
			 done.i4.v = user_key_func(wid.i2.v, key_data.s.r,
			 ("key_data" is a structure of type TEXT_CURSOR_DATA)
			 ("edit_data" is a structure of type CNS_EDIT_DATA)
			 (Valid return values include: CNS_EDIT_CONTINUE,
			(default is NULL)
	[user_key_data]	data to be passed to "user_key_func" (default is NULL)
	[init_func]	function to be executed once immediately after
			cns_edit has initialized
			(function called as follows:
			 init_func(wid.i2.v, user_key_data.g.v))
			(default is NULL)

	This function returns status values as follows:

	TRUE			text was successfully modified
	FALSE			text was not changed
	CBS_INVARG		invalid number of rows or columns passed
	CBS_WINDOW_TOO_BIG	window won't fit on the screen
	CBS_MEMFAIL		dynamic memory allocation failure
	CBS_ABORT		user aborted input (no text changed)

	This function requires the following include files:

	cnsparam_h, cns_data_structs_h, cbslib_h, macro_h, acnet_errors_h

	Related functions:

	text_edit_dialog_c, cns_edit, window_edit_c, inptxt(_c),
	input_string_dialog_c, winput(_c), window_input_value(_c),
	dialog_setup_c, window_restore_hint_c

	C/C++ usage:

	static char	title[] = "Title";
	int	status;
	int	top_row = WMNGR_CENTER;
	int	left_column = WMNGR_CENTER;
	int	num_rows = NUM_ROWS;
	int	num_columns = NUM_COLUMNS;
	int	num_lines = NUM_ROWS;
	int	num_chars = NUM_COLUMNS;
	int	edit_existing = TRUE;
	int	allow_symbols = TRUE;
	int	user_key_func(short window_id, TEXT_CURSOR_DATA *key_data,
			      void *user_key_data);
	void	*user_key_data = (void *) NULL;
	void	init_func(short window_id, void *user_key_data);

	status = text_edit_window_c(title,top_row,left_column,text,