str_extract_device_names_c

	device_names.i1p.r = str_extract_device_names_c(source_string.i1a.r,
							source_length.i4.v,
							num_names.i4.r
							[,name_options.u4.v]
							[,options.u4.v])

	This routine extracts device names referenced in a string.
	This routine allocates the memory for the array of returned
	device names, and it must be freed by the caller, preferably
	by a call to str_free_array_of_strings_c.

	source_string	string to search
	source_length	length of string to search  (If this argument
			has a value of zero, the routine will determine
			the length of the string.)
	num_names	returned number of device names
	[name_options]	name parsing options
			(STR_DEVNAME_OPT_NONE -> no options selected)
			 STR_DEVNAME_OPT_ALLOW_OBSOLETE -> allow obsolete
							   device names,
			 STR_DEVNAME_OPT_FULL_NAME -> parse for full
						      device names,
			 STR_DEVNAME_OPT_ALL_PROPERTIES -> allow all properties,
			 STR_DEVNAME_OPT_INCLUDE_ARRAYS -> include array
							   indices)
	[options]	string options
			(STR_OPT_NONE -> no options selected)

	This function returns values as follows:

	NULL			memory allocation failed
	otherwise		array of pointers to device names

	This function requires the following include files:

	cbslib_h, acnet_errors_h

	Related functions:

	str_free_array_of_strings_c, dio_device_index(_c), dio_dev_name(_c),
	str_split_by_char_set_c, str_split_by_char_set_nonstatic_c, str_split_c,
	str_find_string_c, str_find_last_string_c, strstr, strstr_nocase,
	str_compare_n_nocase_c, str_compare_nocase, strncmp, strcmp,
	strncmx, str_concatenate_c

	C/C++ usage:

	static const char	source_string[] = "M:OUTTMP and G:SCTIME";
	char	**device_names;
	int	source_length = 0;
	int	num_names;
	unsigned int	name_options = STR_DEVNAME_OPT_NONE;
	unsigned int	options = STR_OPT_NONE;

	device_names = str_extract_device_names_c(source_string,source_length,
						  &num_names,name_options,
						  options);
			.
			.
			.
	str_free_array_of_strings_c(device_names,num_names);