rem: start_lineno, start_colpos,      DB_FLDSEP_CHR,
add: high_start_lineno, high_start_colpos,           DB_FLDSEP_CHR,
context: put_symbol(int     sym_type,char    *scope_name,char    *symbol_name,char    *file_name,int     start_lineno,int     start_colpos,int     end_lineno,int     end_colpos,unsigned long   attr,char    *ret,char    *arg_types,char    *args,char    *comment,int     high_start_lineno,int     high_start_colpos,int     high_end_lineno,int     high_end_colpos){	char	*sym_str_type = SN_GetSymbolType(sym_type);	if (!file_name)	{		fprintf(stderr,"Error: put_symbol argument file_name must not be NULL\n");		fflush(stderr);		return -1;	}	for (; isspace(*file_name); file_name++);	if (!sym_str_type)	{		fprintf(stderr,"Error: put_symbol unknown type: %d file: %s\n",			sym_type,file_name);		fflush(stderr);		return -1;	}	if (!symbol_name || !*symbol_name)	{		fprintf(stderr,			"Error: put_symbol argument #3 must not be empty, type: (%s), line: %d file: %s\n",			sym_str_type,start_lineno,file_name);		fflush(stderr);		return -1;	}	for (; isspace(*symbol_name); symbol_name++);	/* If args is just a string we take a special name. */	if (args && *args == '"')	{		args = "%STRING%";	}	if (comment_database && comment && *comment)	{		register char *p;		for (p = comment; *p; p++)		{			switch (*p)			{			case    '\n':				*p = (char )0xff;				break;			case    '{':			case    '}':				*p = DB_FLDSEP_CHR;				break;			}		}	}	else		comment = "";	/* Make sure no '\n' appears in the symbol name */	{		register char *p;		for (p = symbol_name; *p; p++)		{			if (*p == '\n') {			    *p = (char )0xff;			}		}	}	switch (sym_type)	{	case	PAF_TYPE_DEF:	case	PAF_CLASS_DEF:	case	PAF_ENUM_DEF:	case	PAF_CONS_DEF:	case	PAF_MACRO_DEF:	case	PAF_FUNC_DEF:	case	PAF_GLOB_VAR_DEF:	case	PAF_FUNC_DCL:	case	PAF_UNION_DEF:	case	PAF_ENUM_CONST_DEF:		scope_name = NULL;		break;	}	/* Skip leading blanks */	for (;scope_name && isspace(*scope_name); scope_name++);	if (!scope_name || *scope_name == '\0')	{		scope_name = NULL;		switch (sym_type)		{		case PAF_MBR_FUNC_DEF:		case PAF_MBR_VAR_DEF:		case PAF_COMMON_MBR_VAR_DEF:		case PAF_CLASS_INHERIT:		case PAF_MBR_FUNC_DCL:/*		case PAF_ENUM_CONST_DEF: */			fprintf(stderr,				"Error: put_symbol argument #2 must not be empty, type: (%s), line: %d file: %s\n",				sym_str_type,start_lineno,file_name);			fflush(stderr);			return -1;			break;		}	}	if (high_start_lineno == 0)	/* Take the symbol definition. */	{		high_start_lineno = start_lineno;		high_start_colpos = start_colpos;		high_end_lineno = start_lineno;		high_end_colpos = start_colpos + strlen(symbol_name);	}	if (pipe_handle == INVALID_HANDLE_VALUE)	{		panic("put_symbol called when pipe is not open");	}	Paf_Pipe_Write("%d%c%s%s%s%c%06d.%03d%c%s%c%d.%d%c0x%x%c{%s}%c{%s}%c{%s}%c{%s}\n",		sym_type,                        KEY_DATA_SEP_CHR,		scope_name ? scope_name : "",		scope_name ? DB_FLDSEP_STR : "",		symbol_name,                     DB_FLDSEP_CHR,		start_lineno, start_colpos,      DB_FLDSEP_CHR,		file_name,                       KEY_DATA_SEP_CHR,		end_lineno, end_colpos,          DB_FLDSEP_CHR,		attr,                            DB_FLDSEP_CHR,		ret ? ret : "",                  DB_FLDSEP_CHR,		arg_types ? arg_types : "",      DB_FLDSEP_CHR,		args ? args : "",                DB_FLDSEP_CHR,		comment		);	Paf_Pipe_Write("%d%c%s%c%06d.%03d%c%s%c%s%c%s%c%d.%d%c%d.%d%c%d.%d%c{%s}\n",		PAF_FILE_SYMBOLS,                     KEY_DATA_SEP_CHR,		file_name,                            DB_FLDSEP_CHR,		start_lineno, start_colpos,           DB_FLDSEP_CHR,		scope_name ? scope_name : "#",        DB_FLDSEP_CHR,		symbol_name,                          DB_FLDSEP_CHR,		sym_str_type,                         KEY_DATA_SEP_CHR,		end_lineno,        end_colpos,        DB_FLDSEP_CHR,		high_start_lineno, high_start_colpos, DB_FLDSEP_CHR,		high_end_lineno,   high_end_colpos,   DB_FLDSEP_CHR,		arg_types ? arg_types : ""		);	return 0;}