public static void processFields(DBDRecordData rd, StreamTokenizer tokenizer, String fileName) throws Exception {
public static void processFields(DBDRecordData rd, StreamTokenizer tokenizer, String fileName, PathSpecification paths) throws Exception {
public static void processFields(DBDRecordData rd, StreamTokenizer tokenizer, String fileName) throws Exception {	DBDFieldData fd;	String include_filename;	StreamTokenizer inctokenizer = null;		if (rd!=null)	/********************** fields area *************************/						while (tokenizer.nextToken() != tokenizer.TT_EOF) 		if (tokenizer.ttype == tokenizer.TT_WORD) 			if (tokenizer.sval.equals(ENDSTR))	break;			else if (tokenizer.sval.equalsIgnoreCase(FIELD)) {				fd = new DBDFieldData();				// read field_name				tokenizer.nextToken();				if ((tokenizer.ttype == tokenizer.TT_WORD) ||					(tokenizer.ttype == DBDConstants.quoteChar)) fd.setName(tokenizer.sval);				else throw (new DBDParseException("Invalid field_name...", tokenizer, fileName));									// read field_type				tokenizer.nextToken();				if ((tokenizer.ttype == tokenizer.TT_WORD) ||					(tokenizer.ttype == DBDConstants.quoteChar)) fd.setField_type(getFieldType(tokenizer.sval));				else throw (new DBDParseException("Invalid field_type...", tokenizer, fileName));				if (fd.field_type == DBDConstants.NOT_DEFINED) throw (new DBDParseException("Invalid field_type...", tokenizer, fileName));				/****************** field def. ********************/											    while (tokenizer.nextToken() != tokenizer.TT_EOF)					if (tokenizer.ttype == tokenizer.TT_WORD) 						if (tokenizer.sval.equals(ENDSTR))	break;												else if (tokenizer.sval.equalsIgnoreCase(INITIAL)) {							tokenizer.nextToken();							if (tokenizer.ttype == DBDConstants.quoteChar) fd.setInit_value(tokenizer.sval);							else throw (new DBDParseException("Invalid init_value...", tokenizer, fileName));						}												else if (tokenizer.sval.equalsIgnoreCase(BASE)) {							tokenizer.nextToken();							if (tokenizer.ttype == tokenizer.TT_WORD) fd.setBase_type(getBaseType(tokenizer.sval));							else throw (new DBDParseException("Invalid base_type...", tokenizer, fileName));						}												else if (tokenizer.sval.equalsIgnoreCase(SIZE)) {							tokenizer.nextToken();							/*if (tokenizer.ttype == DBDConstants.quoteChar) fd.setSize_value(Integer.parseInt(tokenizer.sval));							else*/ if (tokenizer.ttype == tokenizer.TT_NUMBER) fd.setSize_value((int)tokenizer.nval);							else throw (new DBDParseException("Invalid size_value...", tokenizer, fileName));						}												else if (tokenizer.sval.equalsIgnoreCase(MENU)) {							tokenizer.nextToken();							if ((tokenizer.ttype == DBDConstants.quoteChar) ||								(tokenizer.ttype == tokenizer.TT_WORD)) fd.setMenu_name(tokenizer.sval);							else throw (new DBDParseException("Invalid menu_name...", tokenizer, fileName));						}												else if (tokenizer.sval.equalsIgnoreCase(PROMPT)) {							tokenizer.nextToken();							if (tokenizer.ttype == DBDConstants.quoteChar) fd.setPrompt_value(tokenizer.sval);							else throw (new DBDParseException("Invalid prompt_value...", tokenizer, fileName));						}						else if (tokenizer.sval.equalsIgnoreCase(PROMPTGROUP)) {							tokenizer.nextToken();							if (tokenizer.ttype == tokenizer.TT_WORD) fd.setGUI_type(getGUIType(tokenizer.sval));							else throw (new DBDParseException("Invalid gui_gruop...", tokenizer, fileName));						}						else tokenizer.nextToken();			// "read"/skip data													/**************************************************/					rd.addField(fd);			}			else if (tokenizer.sval.equalsIgnoreCase(INCLUDE)) {				// read incude_filename				tokenizer.nextToken();				if (tokenizer.ttype == DBDConstants.quoteChar) include_filename=tokenizer.sval;				else throw (new DBDParseException("Invalid include_filename...", tokenizer, fileName));				// if not absulute fileName, do not use relative path				if (!(include_filename.charAt(0)=='/' || include_filename.charAt(0)=='\\' || (include_filename.length()>1 && include_filename.charAt(1)==':')))					include_filename = com.cosylab.vdct.util.StringUtils.replaceFileName(fileName, include_filename);				inctokenizer = getStreamTokenizer(include_filename);				if (inctokenizer!=null) processFields(rd, inctokenizer, include_filename);			}								/***********************************************************/}