out.println("File: "+file.getName());
out.println("File: "+file.getAbsolutePath());
	static void preprocess(File file,						   Writer writer,						   Map<String,String> macros,						   Manifest manifest,						   String commentStart,						   String commentContinue,						   String commentEnd)	throws IOException {		PrintWriter out = new PrintWriter(writer);		out.println(commentStart);		out.print(commentContinue);		out.println("File: "+file.getName());		out.println(commentEnd);		out.println();		BufferedReader in = new BufferedReader(new FileReader(file));		Stack<Boolean> ignore = new Stack<Boolean>();		ignore.push(false);		String line;		while ((line = in.readLine()) != null) {			Matcher ifdef = RE_IFDEF.matcher(line);			if (ifdef.matches()) {				out.print(commentStart);				out.print("Info: "+line);				out.println(commentEnd);				String macroName = ifdef.group(1);				ignore.push(macros.get(macroName) == null);				continue;			}			Matcher ifndef = RE_IFNDEF.matcher(line);			if (ifndef.matches()) {				out.print(commentStart);				out.print("Info: "+line);				out.println(commentEnd);				String macroName = ifndef.group(1);				ignore.push(macros.get(macroName) != null);				continue;			}			Matcher endif = RE_ENDIF.matcher(line);			if (endif.matches()) {				out.print(commentStart);				out.print("Info: "+line);				out.println(commentEnd);				ignore.pop();				continue;			}			if (ignore.peek()) {				continue;			}			if (manifest != null) {				line = manifest.replace(line);			}			out.println(line);		}		in.close();	}