Messages defgb 3.8c  17 Jun 02
  [Approximate.  I probably didn't keep this strictly up to date.  Sorry]
Many messages print diagnostic on one line and diagnosed text on next
Existence & destination of messages controlled via diagnostics optional file
  &/or compilation switches

	Unprintable character info
There is an attempt to diagnose the diagnostics themselves for unprintable
characters.  The unprintable characters are replaced with an "inoffensive"
printable character and a message tells what happened
	1) printable characters are x20<->x7E, plus tab and newline
	2) only the first unprintable character is dumped in hex
	3) unprintable characters are not necessarily the cause of a problem
	4) An unprintable character in an optional file can cause an error
	   when matched with a legal string.  For example, if a transvar
	   file contains "var1\r = newvar", and the data files contain
	   "var1", there may be problems with var1 because it hasn't been
	   translated as expected
    In the messages below, ? may be one of several characters.  The messages
may be split over several lines.
" *** 1 strange character (XX hex) replaced with ? above\n"
" *** n strange characters (first of which is XX hex) replaced with ?s above\n"
" *** The first ? in the message above replaces a strange character (XX hex)\n"
" *** The second ? in the message above replaces a strange character (XX hex)\n"
" *** n of m ?s above replace strange characters.  The first ? replaces a
	XX hex.\n"
" *** n of m ?s above replace strange characters.  The first ? represents
	itself.  The first strange character is XX hex.  We cannot further
	identify which ?s represent strange characters\n"
"    Strange characters may or may not cause problems\n"
"*** ?(s) above replace strange characters\n";

	Whitespace character info
There is an attempt to diagnose the diagnostics themselves for leading,
trailing and embedded whitespace characters.  The maximal string without
leading and trailing whitespace is identified by its lead and trail non-
whitespace characters.  A message then describes the "whitespace status"
of that string.
	1) KEY PROBLEM: Analysis can only be done on the whole diagnostic
	   message - not just the string that supposedly caused the problem
	   Because the diagnostics contain text describing the problem string,
	   and because that text contains whitespace, the wrong string may
	   be "analyzed" for embedded whitespace, and the correct string may
	   not be looked at.  The error messages created should be "the truth
	   and nothing but the truth", but not the whole truth, and may be
	   irrelevant
	2) Leading and trailing whitespace characters are blank, tab and
	   newline.  A single trailing newline is not diagnosed
	3) Embedded whitespace characters are tab and newline
" *** Note: the string causing difficulty may consist entirely of white space"
" *** Note: the string beginning with '%s' and ending with '%s' is preceded
	and trailed by whitespace, and contains embedded non-blank whitespace"


        ID info
" No data files open"
" Lowest level file open is level %d\n   Name = %s\n",i,datafiles[i].source
" Lowest level file open is level %d  File is output of command\n   
	Command & params = %s\n",i,datafiles.source[i]
" Last record read was # %d\n",datafiles[i].nrecs
"(Count includes comments, blanks, etc; excludes addl diag info, if any)\n"
" REMOTE_HOST = %s",getenv("REMOTE_HOST")	/* if non-empty */
" REMOTE_ADDR = %s",getenv("REMOTE_ADDR")	/* if no REMOTE_HOST & non-empty */
" No remote ID info"				/* if both above empty */
" REMOTE_USER = %s",getenv("REMOTE_USER")	/* if non-empty */
" This message issued %s",ctime(&timbuf);
" This msg from method %s.  Source: %s %s\n",METHOD,INNER_SOURCE,INNER_VERSION);
		Extra ID info (if requested)
" Data file open at level %d\n   Name = %s\n",i,datafiles[i].source
" Data file open at level %d  File is output of command\n   
	Command & params = %s\n",i,datafiles.source[i]
" Indirect file %s open\n",indirect_file.source
" %s optional file open\n   Name = %s\n",files[j].descrip,files[j].sink
" No optional files open"
" %s output sink open\n   Name = %s\n",output_opts.file[j].descrip,
	output_opts.file[j].sink
" No output sinks open\n"


	Error info from script
  /* If a problem occurred and the highest level data file open has its */
  /* data coming from a script, defgb attempts to copy more lines from  */
  /* the script in case they contain error information.  The first line	*/
  /* below is printed, followed by up to 5 more lines from the script.  */
  /* If there is a 6th, the "Too many diags" message occurs		*/
  /* The "5" can be controlled at compile time and/or run time.  See	*/
  /* switch and opt file documentation					*/
" More diagnostic info from command(?) follows:\n"
" *** Too many diags\n"

===========

  Accessing data sources
	Data file processing/input pipe processing
"Error opening data file ",file->source," : \n	", strerror(errno)
"Failure to close level.  errno msg is ",strerror(errno)
"Failure to close child's stdin-datafile.  errno msg is ",strerror(errno)

	input pipe processing
"Method not compiled with command-reading capability, 
					needed to read data from script ",source
"May not do piping or i/o redirection in command\n   Command was ",
							*poss_comm_string);
		Will copy up to 5 lines from script to stdout after error
		(# lines is configurable)
"More diagnostic info(?) from script follows:\n"
" *** Too many diags\n"		/* ... if script supplies > 5 lines	*/
		From startchild - * id's error (happens before or during
		attempted execvp that gets child going for real)
"&x startchild * error in child process"

	JGOFS object processing
"Method not compiled with object-reading capability, 
					needed to read data from object ",source
"Failure to access JGOFS data object ",file->source /* Got negative	*/
	/* return code from jdbopen-see its code.  May be preceded by	*/
	/* message from that routine; may crash method printing that	*/
	/* message if in html environment (should be no crash w/JGOFS 1.5) */
"Error reading JGOFS object ",file->source  /* Got -999 from jdbread	*/
	/* &x record that caused trouble should already be on stdout	*/
"Too many data levels in JGOFS object.  Allowed maximum = ",MAXLEVELS
  /*  Next error: Not sure <= 0 is possible.  For too many, listvar	*/
  /*  object & compare with NVAR compiled into method.  NB: overflow	*/
  /*  has already occurred in jdbopen, so method may crash before	*/
  /*  printing this out							*/
"0, negative, or too many variables in JGOFS object ",file->source 
"Could not get memory for tmp objnamelist"
	  /* Something wrong with format of existing PATH_INFO or	*/
	  /*  the string jgof as a protocol, or the value of reqlevel	*/
	  /*  Try to get value of existing PATH_INFO, then check rules	*/
"Cannot make PATH_INFO value from jgof & ",reqlevel
"putenv failure for PATH_INFO: ",strerror(i)
"putenv failure restoring PATH_INFO: ",strerror(i)

===========

    collection from object of objects stuff
"putenv failure for flag_for_coll: ",strerror(i)
"putenv failure clearing flag_for_coll: ",strerror(i)

===========

    Finding master variable list
  /*  User must either spec varlist option, or have varlist in level 0	*/
  /*  data source.  Following error probably means varlists_end option	*/
  /*  specified as -1 & varlist not spec'd				*/
"varlist option not spec'ed and no varlist in level 0 file"

===========

	Comment line processing 
"Comment buffer overflow attempting to add comment ",tmp
"Comment line containing html tag too long\n   Comment = ",comment
 ...	/* at end of comment indicates that comment was truncated to fit */
		Following error probably represents comments added by
		program rather than comments in data file
"Comment contains embedded newline char\n   Bad comment = ",comment
		I/O errs from fopen system call
"Error opening comment sink ",commout->sink," : \n	",strerror(errno)
		I/O errs from fgets system call
"EOF/error at or before variable list"

	Fixed format data processing 
"Non-numeric input width for variable ",tabnames[ncnt]
		Format/data mismatches
"More than one datum in single fixed field\n   Field = ",tmp+impstarts[i]
"Bad record structure near end of data record ",tmp

	Free format data processing
"Too few variables in data record\n   Record = ",tmp
"Too many variables in data record\n   Extra var = ",tok

	Data file name/indirect file processing
		Inserted comment line
"Indirect file: ",indirect_name," {",methodname,"}"
		Errors
"Inner got no args from outer.  # args = ",*nparams
"Unknown file descriptor in indirect file\n   Descriptor = ",prefix
"Illegal file descriptor prefix in indirect file\n    Prefix precedes 
	descriptor ",descrip
"Cannot supply prefix for descriptor ",descrip
"0 length indirect file entry for file descriptor ",descrip /*  Get variant*/
	/* of this message if descriptor determined by location in indir file */
"2nd entry for optional file\n   Attempted entry = ",source
"Null input specifier for ", descrip," file."
"Extra parameter in input specifier for ", descrip," file.  Specifier = ",tok
opt_name," required option missing"
opt_name," option provided and it must not be"
  /*  Next error: I think the only illegal type is {object} as of 3.2 */
"Illegal source type for", opt_name," data\n   Bad source = ",source
"Level 0 input specifier not found in indirect file ", s[0]+1
"Embedded blank or tab in file name.  Name = ",lev0name
		Trying to get source from .objects file
  /*  For next 4 errors, the reported "Bad param" is from the indirect	*/
  /*  file.  For the 2nd & 3rd errors, compare the bad number against,	*/
  /*  respectively, the number of parameters in the .objects file entry	*/
  /*  and .objects file entry # "badparam", which, if the message is	*/
  /*  accurate, should also look like ".objects_parameter_N"		*/
  /*  For the 4th error, look for 2 .objects_parameter_N strings that	*/
  /*  are identical							*/
"Requested .objects param must be positive\n   Bad param = ",param_num
"Requested .objects param beyond end of param list\n   Bad param = ",i
".objects param may not request another .objects param\n   Bad param = ",i
"Requested .objects param already processed\n   Bad param = ",i

	Variable name/attribute processing
"Non-numeric display width for variable ",ptr /* Look in dispwidths opt file */
"0 length or non-numeric width attribute for variable ",ptr
"Attribute too long\n   Attribute = ",attr
"Duplicate variable name (after translation, if any)\n   Name = ",tok
"Too many data levels.  Allowed maximum = ",MAXLEVELS
"Zero length variable name in record ",tmp
"Variable name too long\n   Name = ",tok
"Translated variable name too long\n   Name (pre-trans) = ",tok
"transvar list overflow adding translation to ",new
"No variables found after scan of level 0 list"
"Too many variables found after scan of level 0 list.  Max = ",NVAR
"Adding varname_for_lev1s to level 0 list exceeds max # vars.  Max = ",NVAR
"Level continuation includes extraneous characters\nRecord = ",fptr->buf
"Token found after level continuation\nRecord = ",fptr->buf
"Internal consistency problem in scanheader0\nBad varlist terminating token ",
      tok
		I/O errs from fgets system call
"EOF/error trying to read a variable list record"

===========
	Optional file processing. * will be the description of an opt file
		Comments
"* file: ",source
"* data: comes from script ",source
"* data: contained in indirect input file"
"{*}" /* Postfixes comments from opt file in general comment stream */
		Errors
"* data: comes from script ",source,
			"but method not compiled with script-reading capability"
	/* Next error detected in init_file_structs			*/
"Compile-time entry separator appears in compile-time item separator list"
	/* Next few errors will include additional lines ID'ing the 	*/
	/* opt file type and data record that includes the bad entry	*/
"Entry appears twice in list\n   Entry = ",tok
"Third item in entry ",tok
"List overflow attempting to add item ",this_var or tok
	/* Next error: Opt file entry must be a=b, not a or a=b=c	*/
	/* Check the b string for embedded separators, too		*/
	/* (a=b=c no longer tested for as of 2.7)			*/
"Incomplete entry\n   Variable/keyword = ",tok
"Table separator appears in item ",tok	/* WJSTBL_SEPARATOR may not  */
					/*   be in opt file data     */
			I/O err from fopen system call
"Error opening ",opt_name," file ",source,"Problem: ",strerror(errno)
			I/O err from fgets system call
"EOF/error before opt file data records"
			I/O err from fclose system call
"Failure to close opt file.  errno msg is ",strerror(errno)
"Failure to close child's stdin-optfile.  errno msg is ",strerror(errno)

		varlist options
			Errors
  /*  Next error occurs if non-numeric is in field or wjstbl format violated */
"Badly formatted varlists_end field (or defgb err).  Field = ",keyval
"Illegal varlists_end value.  Field = ",keyval	/* Minimum is -2 as of 3.3   */
"Too many variables trying to add varname_for_level1_specs.  Max = ",NVAR
"Cannot find object spec after remote host spec in string ",ptr

		data field options
			Errors
  /*  Next error comes from init_file_structs				*/
"Compile-time ALT_SEPARATOR string 0 len or too long.  String = ",ALT_SEPARATORS  
"alt_separators string too long.  String = ",ptr
	/* Next error: check REQUIRED_SEPARATORS constant.  Usually	*/
	/* tab & newline						*/
"Separator string missing one or more required separators\nCharacters
	not printed here since they may be unprintable-sorry"
	/* Next error: "separator character" is datafieldopts separators */
	/* input (if present), SEPARATOR [sic] compilation switch (if	*/
	/* not); or command-input or object-input delimiter		*/
"Alt_separators character may not be separator character\nCharacters 
	not printed here since they may be unprintable-sorry"
  /*  Next error comes from ioopen_ since problem could be the defaults	*/
  /*  from defgb.h instead of the values gotten from datafieldopts	*/
  /*  "Attribute separator" is ATTRIB_SEP constant (usually ;)		*/
  /*  "data separator" same as "separator character", above		*/
"Attribute separator character cannot be data separator character"
"Illegal escaped string ->",string,"<-"	/* illegal \ sequence (no char 	   */
					/* after \ or illegal char after \) */
"\0 mixed into escaped string ->", string,"<-"	/* \0 must be alone	*/

		variable removals
			Errors
"removals file may not be command\n   Command = ",source
"Removed all variables"
				I/O err from fopen system call
"Error opening removals file ",files[REMOVALS].source
				I/O err from fgets system call
"EOF/error before removals file data records"
				I/O err from fclose system call
"Failure to close removals file.  errno msg is ",strerror(errno)

		Diagnostics control
			Errors
   /* Next line is an ioopen array declaration problem */
"Cannot make time string for unique- file name.  Buffer too short"
"Bad internal table format"	/* Problem parsing a wjstbl ??	*/
"Invalid prefix in diag opt file keyword ",keyword
"Diag sink specified more than once.  Sink = ",keyword
"> 1 sinks to one file, but different modes spec'd\n   File = ",errout->sink
"Non-numeric input for value corresponding to keyword ",keyword
"Integer value too big or too small for keyword ",keyword
"Cannot trace diagnostic lines from diagnostics file" /* no print_diagnostic_lines */
  /*  Next 2 messages appear after complete(?) error/ID text.  They refer  */
  /*  to the result of trying to send the complete error/ID text somewhere */
" (Preceding message truncated when written to previous sink)"
" (Preceding message is truncated due to memory allocation failure)"
" (Could not write preceding message to error sink)"
" (Could not write preceding message to error sink)\n  Error sink = %s"
				I/O err from fopen system call
"Error opening diagnostic sink ",diagout->sink," : \n	",strerror(errno)
				I/O err from fclose system call
"Failure to close compile-time err sink.  errno msg is ",strerror(errno)

		Messages common to several kinds of opt files
			Message will id the opt file involved
"Unprocessed * parameters.  Number skipped = ",n  /* Check spelling of keywords in opt file  */
"Illegal logical value ",keyword_identifier /* Not TRUE, FALSE or valid synonym */

============

	Calculations
  /*  In next section, * will be an opt file name pertaining to the type */
  /*  of calculation.							 */
"Required * param missing.  Param = ",name
"Translated variable in * calculation too long\n  Truncated, post-trans 
	variable = ",varname
"Variable provided for * calculations not in dataset\n  Variable = ",var
    /*  Next message probably due to internal error		*/
"Parameter provided for * calculation too long\n  Param = ",param

	Lat/lon conversions
    /* * in next message is latitude or longitude  */
"* work requested but * input variable name not supplied"
"Lat/lon format string too long.  String = ",ptr
"Illegal lat/lon format.  Format = ",ptr
"No code to do X to Y latlon conversion /* X & Y are legal formats, but we */
				/* forgot to write the code to do the work */
    /* * in next 2 messages is input or output  */
"* latitude convention not N or S.  Convention = ",ptr
"* longitude convention not E or W.  Convention = ",ptr
"Output lat/lon not big enough to accept input lat/lon degrees\n   Input 
    lat/lon = ",instr

	Time/date conversions
"Could not get memory for casebuf"
  /*  Next message means we got time_ instead of timeN_			*/
"Timedate keyword does not include sequence number.  Keyword is ",ptr
"Too many output times requested.  Max=",k
    /* * in next message is input or output  */
"* time convention not UTC, GMT, or local.  Convention = ",ptr
"No format for output julian date variable ",varname
"Julian output format # not one of gGPKjJvV for output time variable ",varname
"Julian output format longer than 1 char for output time variable ",varname
"No template for time/date input variable ",varname
"Duplicate time/date input fields, types ",this_type," and ",
  previously_found_type
"Single variable named for 2 different time outputs. Var = ",varname
"Unrecognized template specifier ",ptr," for input time/date variable",varname
"Unrecognized single-field template specifier ",*template,
				" for input time/date variable",varname
"Unrecognized decimal part of single-field template ",*template,
				" for input time/date variable",varname
"Single-field template specifier must be of form X, X., X.X, or X.Y\n
    Template = ",*template," for input time/date variable",varname
  /*  * in next messages can be year, Julian day, hour, minute, or second */
"Mismatch between integer and decimal parts of single-field template
  specifier for *\n  Template = ",*template," for input time/date variable",
  varname
"defgb internal error: do_outtime_frags changed fmt_type"
"defgb internal error: multiple copies of input field can only come 
	from single input field"
keyword," time/date keyword did not specify any input fields"
"Bad time/date skipfield character.  Char is ",template_type  /* This is */
		/* caused by a compilation error (in v 2.5, anyway)	 */
  /* Next 2 errors mean that for some instance of the input variable	*/
  /* specified by opt file keyword "invarNname", the format of the	*/
  /* datum did not match the template provided by opt file keyword	*/
  /* "invarNtemplate".  Floating point case means decimal portion	*/
  /* was non-zero when template said datum was supposed to be integral;	*/
  /* ie, template was X rather than X., X.Y, etc (sorry no ID)		*/
"Time/date format/data mismatch.\n  Datum = ",buffer,
    "\n   Variable is pointed to by time/date invar",N
"Time/date format/floating data mismatch.\n  Datum = ",fragbuf
"Illegal floating input.  Datum = ",fragbuf
  /* * in next error will be year, month, day, hour, min, sec or Julian.    */
"Illegal * value ",ptr2
"Illegal AM/PM flag ",ptr2	/* Must be a, A, p, P w/opt trailing m or M */
"Illegal month abbreviation ",ptr2 /* b format must be exactly 3 char long? */
"Illegal month name ",ptr2	   /* B format must be full length name?    */
"Illegal UTC displacement ",in_ptr
"Illegal DST flag or displacement ",in_ptr
  /* Following fragment type error indicates coding errors in ioroutines */
  /* (should be "unrecognized template specifier" errors)		*/
"Illegal * fragment type",out_timedate[*_FRAG].source_field_type
"No input time/date variables provide info for output ",out_td[i].var_type
"No AM/PM input variable for 12 hour clock input time"
  /* For next error, problem is what input and output levels are.	*/
  /* Inputs must be as close to level 0 as output.			*/
"Output time/date ",out->var_type,
			" variable occurs before its input variable invar",n
  /* Next 2 errors could be level problems as well as missing input problems */
"Time/date Julian day/fractional year [in/out]put requires year information"
"Time zone conversion requires time displacement input"
"If time information is available, it must occur at a level before
					Julian day/fractional year output"
  /* Limit in next error is a compilation constant			*/
"Excessive output time precision ignored.  Max digits = ",n
"Time zone abbrev not on defgb's list.  Zone = ",in_ptr	/* See doc for list */
"Cannot spec DST input if time zone abbrev spec's DST\n   Zone = ",in_ptr

	Memory allocation errors
	  All these errors occurred when a malloc failed.  Since it's
	unlikely that the system ran out of space for the sizes we are
	allocating, problem is most likely not directly related to some
	size we actually need.  Messages are to try to indicate where
	failure occurred

	  Messages below actually come from buildstring or lengthen_str.
"Failed to get nnn (0xXXXXXXX) bytes of memory.\n   Purpose = ",reason
Reasons:			   Function:
" marking end of comments"	/* ioopen_ */
" saving directory string"	/* ioopen_ */
" saving level 0 source info"	/* ioopen_ */
" open diagsink"		/* ioopen_ */
" open diagsink msg 2"		/* ioopen_ */
" open primarydiagsink"		/* ioopen_ */
" open primarydiagsink msg 2"	/* ioopen_ */
" copying FLAG_FOR_COLL"	/* ioopen_ */
" clearing putenv string for coll_from_objobj"  /* ioopen_ */
" building COLL_FROM_OBJOBJ spec" /* propagate_flag_for_coll_objobj */
" building putenv string for coll_from_objobj"	/* " */
" errmsg getrec"		/* getrec_proccomment */
" saving sublevel source info"  /* scanheader */
" emulated buffer for process_varname0"  /* scanheader0 */
" saving attribute from obj"	/* scanheader0_obj */
" saving attribute"		/* process_varname0 */
" saving xxx source info"	/* objects_param_for_source */
	   `-> /* where xxx is an opt file type */
" building oversize comment"	/* add_to_comment_string */
" open commentsink msg"		/* add_to_comment_string */
" building opt file item separator list"  /* init_file_structs */
" building opt file entry separator list" /* init_file_structs */
" copying removals separator list"	/* init_file_structs */
" copying item separator list"	/* init_file_structs */
" copying entry separator list"	/* init_file_structs */
" building postfix"		/* init_file_structs */
" init of next data source"	/* ioreadrec */
" indirect file msg"		/* get_files */
" saving .ind file's directory string"	/* get_files */
" bracketing method name"	/* have_opt_input or get_files */
" have_opt_ msg"		/* have_opt_input */
" get_var_from_keyword"		/* that subr handles opt files w/keywords */
" building trace msg"		      /* open_datafile */
" building open_datafile err string"  /* open_datafile */
" building object selection string N" /* open_datafile */
" open datafile msg"		      /* open_datafile */
" open_datafile-script msg"	      /* open_datafile */
"No memory for varname_for_lev1_specs"	/* get_varlist_options */
"No memory for coll_from_objobj_obj" 	/* get_varlist_options */
" putting filespec together"	/* analy_source */
" analy_source err msg1"	/* analy_source */
" analy_source err msg2"	/* analy_source */
" analy_source temp buffer"	/* analy_source */
" building time/date error string"  /* affects_frag */
" building reformat_latlon msg"	    /* reformat_latlon */
" saving output sink name"	    /* configure_output */
" building unique sink name"	    /* configure_output */
" creating null output sink name"   /* configure_output */
" building input line diag keyword" /* configure_output */
" bad_single_template_fmt"	    /* widthless_template */
" bad_single_template_spec"	    /* widthless_template */
" bad_dec_single_template_spec"	    /* widthless_template */
" single-field template1"	    /* err_single_field_template_mismatch */
" single-field template2"	    /* err_single_field_template_mismatch */
" bad_template_spec"		    /* do_outtime_frags */
" building time/date keyword"	    /* get_timedateparams */
" time_date_err"		    /* get_timedateparams */
" building get_timedate_frag err msg" /* get_timedate_frag */
" building calc_timedate err msg"   /* calc_timedate */
" creating opt_file_id string"	/* create_wjs_tbl */
" creating rec_id string"	/* create_wjs_tbl */
" creating err msg N"		/* create_wjs_tbl */
" making protocol string"	/* get_protocol */
" copying errbuf"		/* build_err */
""  /* No message provided.  Probably a call to attempt to build an error msg */

	Miscellany
  /*  Next 2 messages probably indicate some kind of internal error	*/
"Fixed-field/free-field status not determined for level ",lev
"Too many string lengthenings in progress.  Max is ",ntbl
"Mixed fixed/free format input variable ",tabnames[j] /* NG within a level */
"Token too long. Bad token = ",tok
	/* Next 2 messages probably mean inp record had no newline char	*/
	/* within # chars read						*/
"Input record exceeds buffer size\n   Inp record = ",file->source  
"Input record exceeds buffer size\n   Rec begins with ",buf
  /*  Next message is due to some kind of internal logic problem  */
  /*  Source types are defined in defgb_nonconfigurable.h	  */
"Attempt to open illegal file type as data file\n   File type = ",file->descrip,
  "File source type = ",file->source_type
"File read error",file->source	/* Non-zero ferror after fread system call */
"Closing delimiter not last character of field.  Field = ",ptr
"Unclosed delimited field.  Field = ",rtn
"May not have tabs or returns in delimited field.  Field = ",rtn
"May not have tabs or returns in fixed field.  Field = ",rtn

  /*  Next messages due to bad spec of compilation constants.		*/
    /* See param1 doc for list of special strings			*/
" Special strings may not begin with comment character"
"System TRUE/FALSE value conflicts w/something we assume is neither"
    /* Old METHOD_PROTOTYPE=DEFGB_NOHEADER is same as defining PROCESS_	*/
    /* VARLIST is the same as new VARLISTS_END = 0.  Must agree...	*/
"Conflicting DEFGB_NOHEADER prototype and VARLISTS_END switch"
"Conflicting PROCESS_VARLIST and VARLISTS_END switches"  /*  Will also	*/
	/*  get this message if METHOD_PROTOTYPE != DEFGB_NOHEADER &	*/
	/*  ! PROCESS_VARLIST w/o VARLISTS_END				*/

	From defw
"New variable name in file. Name = ",tok  /* Slightly modified */
"Bad file structure"
"Bad header file name ",s[0]
