array_edit_c

	changed.i4.v = array_edit_c(top_row.i4.v, left_column.i4.v,
				    max_prompt_len.i4.v, minimum.g.v,
				    maximum.g.v, values.g.v, num_values.i4.r,
				    max_values.i4.v, data_type.i4.v,
				    fill_value.g.v, title.i1a.r,
				    num_lines.i4.v, key_case.i4.v,
				    update_func.f.v, updatefunc_data.g.v,
				    prompt_func.f.v, help_info.s.r,
				    options.u4.v);

	This routine will prompt the user to edit an array of values
	of a given type.  This routine differs from input_array_values_c
	in that entries can be inserted into or deleted from the array.
	(Note: For the data types INP_CHAR and INP_CHAR_OVERSTRIKE,
	 the string length should be passed in a four byte integer
	 by address in the argument "maximum".)

	top_row		top row of window (use WMNGR_CENTER for centering
			or WINDOW_xxx_COORD macros in macro for special
			positioning)
	left_column	left column of window (use WMNGR_CENTER for centering
			or WINDOW_xxx_COORD macros in macro for special
			positioning)
	max_prompt_len	maximum number of characters in each prompt string
			(If a value of zero is passed for this argument,
			the routine will automatically determine the prompt
			text length.)
	minimum		minimum limit (If a value of NULL is passed for
			this argument, limit checking for numeric data types
			will be disabled.)
	maximum		maximum limit(s) (If a value of NULL is passed for
			this argument, limit checking for numeric data types
			will be disabled.) (The string length for data types
			INP_CHAR and INP_CHAR_OVERSTRIKE should be passed
			through this argument.)
	values		returned value(s)
	num_values	intial/returned number of values in the array
	max_values	maximum number of values in the array
			(If a value of zero is passed for this argument,
			 "num_values" will be used.)
	data_type	data type of input value(s)
			(INP_BYTE -> one byte decimal integer,
			 INP_SHORT -> two byte decimal integer,
			 INP_LONG -> four byte decimal integer,
			 INP_UBYTE -> one byte unsigned decimal integer,
			 INP_USHORT -> two byte unsigned decimal integer,
			 INP_ULONG -> four byte unsigned decimal integer,
			 INP_BYTE_HEX -> one byte hexadecimal integer,
			 INP_SHORT_HEX -> two byte hexadecimal integer,
			 INP_LONG_HEX -> four byte hexadecimal integer,
			 INP_FLOAT -> single precision floating point value,
			 INP_FLOAT_EXP -> single precision floating point value
					  in either normal or scientific
					  notation,
			 INP_DOUBLE -> double precision floating point value,
			 INP_DOUBLE_EXP -> double precision floating point
					   value in either normal or
					   scientific notation,
			 INP_CHAR -> simple character string (string will
				     not be null terminated) (The string
				     length should be passed in the
				     argument, "maxima".),
			 INP_CHAR_OVERSTRIKE -> simple character string entered
						in overstrike mode (string will
						not be null terminated)
						(The string length should be
						 passed in the argument,
						 "maxima".),
			 INP_LOGICAL -> four byte logical integer having
					values of TRUE or FALSE,
			 INP_BYTE_LOGICAL -> one byte logical integer having
					     values of FORTRAN_TRUE or FALSE,
			 INP_SHORT_LOGICAL -> two byte logical integer having
					      values of FORTRAN_TRUE or FALSE,
			 INP_CHECK_BOX -> four byte logical integer having
					  values of TRUE or FALSE
					  (check box interface),
			 INP_ENUMERATED -> four byte integer containing an
					   enumerated value,
			 >= INP_ENUMERATED_BASE -> four byte integer containing
						   an enumerated value
						   (ID returned by
						    set_enumerated_strings_c),
			 INP_BIT_MASK -> four byte integer containing a
					 bit mask value,
			 >= INP_BIT_MASK_BASE -> four byte integer containing
						 a bit mask value
						 (ID returned by
						  set_bit_mask_strings_c),
			 INP_DEVICE -> four byte integer containing an
				       ACNET device index,
			 INP_DEVICE_WILD -> four byte integer containing an
					    ACNET device index,
			 INP_DEVICE_FULL_NAME -> four byte integer containing an
						 ACNET device index,
			 INP_DEVICE_FULL_NAME_WILD -> four byte integer
						      containing an
						      ACNET device index,
			 INP_LONG_DEVICE -> ARRAY_DEVICE_DATA structure
					    containing an ACNET array device
					    specification,
			 INP_C_STYLE_LONG_DEVICE -> ARRAY_DEVICE_DATA structure
						    containing an array device
						    specification,
			 INP_C_STYLE_DEVICE_EXT -> ARRAY_DEVICE_DATA_EXT
						   structure containing an
						   extended array device
						   specification,
			 INP_DEVICE_NAME -> dio_get_terse_name_length
					    character string containing an
					    ACNET device name,
			 INP_FERMI_NAME -> four byte integer containing an ACNET
					   device index,
			 INP_DEVICE_CLASS -> four byte integer containing a
					     device class value,
			 INP_DEVICE_TYPE -> four byte integer containing a
					    device type value,
			 INP_DEVICE_ADDRESSING_MODE -> four byte integer
						       containing a device
						       addressing mode value,
			 INP_DEVICE_ADDRESSING_MODE_LONG -> four byte integer
							    containing a device
							    addressing mode
							    value (long text),
			 INP_DBPROP -> two byte integer containing a database
				       property value,
			 INP_DBPROP_ENGLISH -> two byte integer containing an
					       ACNET database property (English),
			 INP_READ_SET_DBPROP -> two byte integer containing an
						ACNET reading/setting
						database property,
			 INP_READABLE_DBPROP -> two byte integer containing an
						ACNET readable
						database property,
			 INP_SETTABLE_DBPROP -> two byte integer containing an
						ACNET settable
						database property,
			 INP_FTD -> data request FTD value (two byte integer),
			 INP_READING_FTD -> reading data request FTD value
					    (two byte integer),
			 INP_COLOR -> four byte integer containing color value,
			 INP_GRAPHIC_COLOR -> four byte integer containing
					      a graphic color value,
			 INP_PAGE -> index page string
				     (PAGE_NAME_LEN characters),
			 INP_WINDOW -> four byte console window value,
			 INP_TV_WINDOW -> four byte console TV window value,
			 INP_GRAPHIC_WINDOW -> four byte console graphic
					       window value,
			 INP_PA_GRAPHIC_WINDOW -> four byte PA graphic
						  window value,
			 INP_ERROR -> ACNET_ERR structure containing ACNET
				      error code,
			 INP_NODE -> two byte integer containing an ACNET
				     node value,
			 INP_NODE_MENU -> two byte integer containing an ACNET
					  node value (menu interface),
			 INP_NODE_OPERATIONAL -> two byte integer containing
						 an operationally significant
						 ACNET node value,
			 INP_NODE_CONSOLE -> two byte integer containing a
					     console node value,
			 INP_NODE_CONSOLE_MENU -> two byte integer containing a
						  console node value
						  (menu interface),
			 INP_NODE_FRONTEND_ALL -> two byte integer containing a
						  front end node value,
			 INP_NODE_FRONTEND -> two byte integer containing a
					      CAMAC front end node value,
			 INP_NODE_MOOC -> two byte integer containing
					  a MOOC node value,
			 INP_NODE_IRM -> two byte integer containing
					 an IRM node value,
			 INP_NODE_DAE_FE -> two byte integer containing
					    a DAE front end node value,
			 INP_NODE_LCS -> two byte integer containing
					 an LCS (Local Control System)
					 front end node value,
			 INP_NODE_GPIB -> two byte integer containing a
					  GPIB node value,
			 INP_NODE_BPM -> two byte integer containing a
					 BPM node value,
			 INP_NODE_FRIG -> two byte integer containing a
					  frig node value,
			 INP_NODE_MOTION_CONTROL -> two byte integer
						    containing a motion
						    controller node value,
			 INP_NODE_QPM -> two byte integer containing a
					 QPM node value,
			 INP_NODE_SWIC -> two byte integer containing a
					  SWIC node value,
			 INP_NODE_VACUUM -> two byte integer containing a
					    vacuum node value,
			 INP_NODE_MADC -> two byte integer containing an
					  MADC node value,
			 INP_NODE_MADC_SUPPORT -> two byte integer containing an
						  MADC support node value,
			 INP_NODE_PSEUDO -> two byte integer containing
					    a pseudo node value,
			 INP_NODE_CENTRALVAX -> two byte integer containing a
						central VAX node value,
			 INP_CLINKS -> four byte time in clinks,
			 INP_CLINKS_DATEONLY -> four byte time in clinks,
						(date only),
			 INP_CLINKS_TIMEONLY -> four byte time in clinks,
						(time only),
			 INP_HHMMSS -> four byte time in hh:mm:ss format,
			 INP_CTIME -> four byte time since January 1, 1970,
			 INP_CTIME_FMT_CLINKS -> four byte time since
						 January 1, 1970,
			 INP_GMT_TIME -> four byte GMT time in seconds since
					 January 1, 1970
					 (Www Mmm dd hh:mm:ss yyyy format),
			 INP_GMT_TIME_FMT_CLINKS -> four byte GMT time in
						    seconds since
						    January 1, 1970
						    (dd-mmm-yyyy hh:mm:ss format),
			 INP_RAD50 -> four byte radix 50 value (process name),
			 INP_USERNAME -> USER_NAME_LEN character user
					 name string,
			 INP_USER_EMAIL_ADDRESS -> USER_EMAIL_LEN character
						   user email string,
			 INP_SR_SYSTEM -> four byte integer containing a
					  Save/Restore system value,
			 INP_SR_FILE -> four byte integer containing a
					Save/Restore file number,
			 INP_SAVE_LIST -> four byte integer containing a
					  Save/Restore list value,
			 INP_CONSOLE_NUMBER -> four byte integer containing a
					       console number value,
			 INP_CONSOLE_SLOT -> four byte integer containing a
					     console slot value,
			 INP_CONSOLE_SLOT_WILD -> four byte integer containing a
						  wildcarded console slot value,
			 INP_CONSOLE_PA_SLOT -> four byte integer containing a
						console PA slot value,
			 INP_CONSOLE_SA_SLOT -> four byte integer containing a
						console SA slot value,
			 INP_SHARED_LOG_FILE -> LOG_NAMLEN character string
						containing a shared log file
						name,
			 INP_LEX_DRAW_FILE -> CNV_LEX_DRAW_FILE_LEN character
					      string containing a Lex Draw
					      file name,
			 INP_LEX_PROG_FILE -> CNV_LEX_PROG_FILE_LEN character
					      string containing a Lex Prog
					      file name,
			 INP_LEX_OBJECT -> LEXT_OBJECT_NAMLEN character
					   string containing a Lex Object name,
			 INP_LJ_NODE -> two byte integer containing a
					Lumberjack node value,
			 INP_LJ_NODE_ID -> four byte integer containing a
					   Lumberjack node ID value,
			 INP_SSDN -> LEN_SSDN byte SSDN value,
			 INP_EMC -> LEN_EMC byte EMC (Event Message Code) value,
			 INP_MACHINE -> four byte integer containing an
					accelerator machine value,
			 INP_MACHINE_LONG -> four byte integer containing an
					     accelerator machine value,
			 INP_CNV_TYPE -> four byte integer containing a
					 conversion type value,
			 INP_INP_TYPE -> four byte integer containing an
					 input type value,
			 INP_CLOCK_EVENT_TYPE -> four byte integer containing a
						 clock event type,
			 INP_CLOCK_EVENT_TYPE_LONG -> four byte integer
						      containing a
						      clock event type,
			 INP_SIMPLE_CLOCK_EVENT -> four byte integer containing
						   a clock event value,
			 INP_CLOCK_EVENT -> four byte integer containing a
					    clock event value,
			 INP_CLOCK_EVENT_LONG -> four byte integer containing a
						 clock event value,
			 INP_MIBS_EVENT -> four byte integer containing an
					   MIBS clock event value,
			 INP_MIBS_EVENT_LONG -> four byte integer containing an
						MIBS clock event value,
			 INP_RRBS_EVENT -> four byte integer containing an
					   RRBS clock event value,
			 INP_RRBS_EVENT_LONG -> four byte integer containing an
						RRBS clock event value,
			 INP_TVBS_EVENT -> four byte integer containing a
					   TVBS clock event value,
			 INP_SIMPLE_MDAT_FRAME -> four byte integer containing
						  an MDAT frame value,
			 INP_MDAT_FRAME -> four byte integer containing an
					   MDAT frame value,
			 INP_MDAT_FRAME_LONG -> four byte integer containing an
						MDAT frame value,
			 INP_NOTIFY_CATEGORY -> four byte integer containing
						a notify category value,
			 INP_NOTIFY_PRIORITY -> four byte integer containing
						a notify priority value,
			 INP_NOTIFY_DATA_TYPE -> four byte integer containing
						 a notify data type value,
			 INP_PRIMARY_TRANSFORM -> four byte integer containing
						  a primary transform value,
			 INP_PRIMARY_TRANSFORM_LONG -> four byte integer
						       containing a primary
						       transform value,
			 INP_COMMON_TRANSFORM -> four byte integer containing
						 a common transform value,
			 INP_COMMON_TRANSFORM_LONG -> four byte integer
						      containing a common
						      transform value,
			 INP_STATE_DEVICE -> four byte integer containing a
					     state device index,
			 INP_STATE_VALUE -> STATE_VALUE structure
					    containing a state value
					    specification,
			 INP_DATA_EVENT -> DATA_EVENT_DATA structure
					   containing a data event value
					   specification,
			 INP_STATE_EVENT -> DATA_EVENT_DATA structure containing
					    a state data event specification,
			 INP_TCLK_EVENT -> DATA_EVENT_DATA structure containing
					   a TCLK data event specification,
			 INP_DATA_SOURCE -> DATA_SOURCE_DATA structure
					    containing a data source
					    specification,
			 INP_SDA_DIR -> four byte integer containing an
					SDA directory value (obsolete),
			 INP_SDA_USAGE -> four byte integer containing an
					  SDA usage value,
			 INP_SDA_FILE -> SDA_FILE_VALUE structure
					 containing an SDA file value
					 specification,
			 INP_SDA_CASE -> four byte integer containing an
					 SDA case value (for Collider shot),
			 INP_EXT_SDA_CASE -> SDA_CASE_VALUE structure
					     containing an SDA case value
					     specification,
			 INP_EXT_SDA_SUBCASE -> SDA_CASE_VALUE structure
						containing an SDA subcase value
						specification,
			 INP_ALARM_LIST -> four byte integer containing an
					   alarm list value,
			 INP_ALARM_HANDLER_CODE -> four byte integer containing
						   an alarm handler code value,
			 INP_NODE_SYSTEM -> four byte integer containing a
					    node system type value,
			 INP_NODE_HARDWARE -> four byte integer containing a
					      node hardware type value,
			 INP_NODE_SOFTWARE -> four byte integer containing a
					      node software type value,
			 INP_NODE_STATUS -> four byte integer containing a
					    node status type value,
			 INP_NODE_AREA -> four byte integer containing a
					  node area type value,
			 INP_NODE_OPSYS -> four byte integer containing a
					   node operating system type value,
			 INP_STATE_FTD_INDEX -> four byte integer containing a
						state FTD index value,
			 INP_ERROR_CATEGORY -> four byte integer containing
					       an error category value,
			 INP_LJ_USER_DIRECTORY -> a Lumberjack user
						  directory string,
			 INP_LJ_USER_FILE -> a Lumberjack user file
					     name string,
			 INP_DEVICE_VALUE -> an ACNET device value
					     contained in an ACNET_DEVICE_VALUE
					     structure,
			 INP_SWITCH -> CNV_SWITCH_NAME_LEN character string
				       containing a network switch name,
			 INP_CONTROL_SYSTEM_TYPE -> four byte integer containing
						    a control system type value,
			 INP_FOREIGN_SYSTEM_TYPE -> four byte integer containing
						    a foreign control system
						    type value,
			 INP_FOREIGN_DATA_TYPE -> FOREIGN_DATA_TYPE_INFO
						  structure containing
						  a foreign data type value,
			 INP_EPICS_DATA_TYPE -> four byte integer containing
						an EPICS data type value,
			 INP_OPC_DATA_TYPE -> four byte integer containing
					      an OPC data type value,
			 INP_LABVIEW_DATA_TYPE -> four byte integer containing
						  a LabView data type value,
			 INP_APACS_DATA_TYPE -> four byte integer containing
						an APACS data type value,
			 INP_SNMP_DATA_TYPE -> four byte integer containing
					       an SNMP data type value,
			 INP_SIEMENS_S7_DATA_TYPE -> four byte integer
						     containing Siemens S7
						     data type value,
			 INP_HTTP_DATA_TYPE -> four byte integer containing
					       an HTTP data type value,
			 INP_LAB_DEPARTMENT -> four byte integer containing a
					       lab department value,
			 user data type ID -> user data type defined by an
					      earlier call to
					      create_user_data_type_c)
	fill_value	value to fill in the end of the array if an entry
			is deleted
	title		title of input window  (Note: A null pointer may be
			passed if no title is desired.)
	num_lines	number of lines of input to be displayed at a time
	key_case	controls case of typed characters
			(WMNGR_UPPER_CASE -> only upper case displayed,
			 WMNGR_MIXED_CASE -> allows lower case (can also
					     pass a value of CLIB_DEFAULT_ARG))
	update_func	function to be executed when a field is updated
			(If this is specified, the function corresponding to
			 a given entry is called when a successful data entry
			 is made in that field.)
			(called as follows:
			 update_func(window_id.i2.v, func_data.g.v,
				     field_number.i4.v, changed.i4.v,
				     field_data.s.r)
			 ("field_data" is a structure of type FIELD_EDIT_DATA)
			 (input field numbers start at 1))
			(A value of NULL can be passed for this argument
			 if it is not needed.)
	updatefunc_data	pointer to data to be passed to the update function
			(A value of NULL can be passed for this argument
			 if it is not needed.)
	prompt_func	user-supplied prompt string callback functions
			(If this is specified, the function is called to
			 update a prompt string when a field is updated.
			 It is also called at initialization if the passed
			 prompt length is zero.  In this case, it is called
			 with a field number of WMNGR_FIRST.  It should
			 return the desired prompt length.)
			(default is NULL)
			(called as follows:
			 status.i4.v = prompt_func(window_d.i2.v, NULL,
						   field_number.i4.v,
						   field_data.s.r,
						   prompt_text.i1a.r,
						   prompt_color.i4.r)
			 ("field_data" is a structure of type FIELD_EDIT_DATA)
			 (input field numbers start at 1))
			(A value of NULL can be passed for this argument
			 if it is not needed.)
	help_info	help callback information
			(structure of type HELP_CALLBACK_DATA)
			(A value of NULL can be passed for this argument
			 if it is not needed.)
	options		edit options (not used at this time)

	This function returns status values as follows:

	TRUE			value(s) have been changed
	FALSE			no values were changed
	CBS_INVARG		invalid data type or number of values
	CBS_WINDOW_TOO_BIG	window won't fit on screen
	CBS_MEMFAIL		dynamic memory allocation failure
	CBS_ABORT		user aborted input (no values were changed)

	This function requires the following include files:

	cnsparam_h, cns_data_structs_h, cbslib_h, macro_h, acnet_errors_h

	Related functions:

	input_array_values_c, winput(_c), wrdspi(_c), wrdspi4(_c), wrdspr(_c),
	wrdspr8(_c), inptxt(_c), input_string_dialog_c,
	set_enumerated_strings_c, modify_enumerated_strings_c,
	get_enumerated_strings, create_user_data_type_c, set_logical_strings,
	get_logical_strings, set_bit_mask_strings_c, get_bit_mask_strings_c,
	dialog_setup_c, numeric_to_ascii(_c), ascii_to_numeric(_c),
	window_restore_hint_c

	C/C++ usage:

	static const char	title[] = "Title";
	int	changed;
	int	top_row = WMNGR_CENTER;
	int	left_column = WMNGR_CENTER;
	int	max_prompt_len = 0;
	int	num_values = NUM_INPUT_VALUES;
	int	max_values = ARRAY_LENGTH];
	int	data_type = INP_FLOAT;
	int	key_case = WMNGR_MIXED_CASE;
	int	num_lines = NUM_INPUT_VALUES;
	unsigned int	options = 0;
	float	values[ARRAY_LENGTH];
	float	minimum = 0.0;
	float	maximum = 10.0;
	float	fill_value = 0.0;
	HELP_CALLBACK_DATA	*help_info = (HELP_CALLBACK_DATA *) NULL;
	void	*updatefunc_data = (void *) NULL;
	void	update_func(short window_id, void *callback_data,
			    int field_number, int changed,
			    FIELD_EDIT_DATA *field_data);
	int	prompt_func(short window_id, void *dummy,
			    int field_number, FIELD_EDIT_DATA *field_data,
			    char *prompt_text, int *prompt_color);

	changed = array_edit_c(top_row,left_column,max_prompt_len,
			       (void *) &minimum,(void *) &maximum,
			       (void *) values,num_values,max_values,
			       data_type,(void *) &fill_value,title,
			       num_lines,key_case,update_func,
			       updatefunc_data,prompt_func,help_info,
			       options);