public static FileDataTypeManager parseHeaderFiles(DataTypeManager[] openDTMgrs,
			String[] filenames, String[] includePaths, String[] args, String dataFileName,
			String languageId, String compileSpecId, TaskMonitor monitor)
			throws ghidra.app.util.cparser.C.ParseException,
			ghidra.app.util.cparser.CPP.ParseException, IOException {

		File file = new File(dataFileName);
		FileDataTypeManager dtMgr =
			FileDataTypeManager.createFileArchive(file, languageId, compileSpecId);
		boolean success = false;
		try {
			CParseResults results =
				parseHeaderFiles(openDTMgrs, filenames, includePaths, args, dtMgr, monitor);

			String messages = results.getFormattedParseMessage(null);
			Msg.info(CParserUtils.class, messages);

			dtMgr.save();

			success = true;
			return dtMgr;
		}
		finally {
			if (!success) {
				dtMgr.close();
			}
		}
	}
Parse a set of C Header files and associated parsing arguments, returning a new File Data TypeManager
with in the provided dataFileName.

When parsing is complete any parser messages will be logged.

Note: Using another open archive while parsing will cause:
- a dependence on the other archive
- any missing data types while parsing are supplied if present from an openDTMgr
- after parsing all data types parsed with an equivalent data type in any openDTMgr
    replaced by the data type from the openDTMgr
    
NOTE: This will only occur if the data type from the openDTMgr's is equivalent.

NOTE: Providing the correct languageId and compileSpecId is very important for header files that might use sizeof()

@param openDTMgrs array of datatypes managers to use for undefined data types

@param filenames names of files in order to parse, could include strings with
       "#" at start, which are ignored as comments
@param includePaths path to include files, could also be in args with {@code -I<includepath>}
@param args arguments for parsing, {@code -D<defn>=, -I<includepath>}

@param dataFileName name of data type archive file (include the .gdt extension)

@param languageId language identication to use for data type organization definitions (int, long, ptr size)
@param compileSpecId compiler specification to use for parsing

@param monitor  used to cancel or provide results

@return the FileDataTypeManager corresponding to the Ghidra .gdt archive file.
The caller is responsible for closing the instance.

@throws ghidra.app.util.cparser.C.ParseException for catastrophic errors in C parsing
@throws ghidra.app.util.cparser.CPP.ParseException for catastrophic errors in Preprocessor macro parsing
@throws IOException    if there io are errors saving the archive
Ghidra/Features/Base/src/main/java/ghidra/app/util/cparser/C/CParserUtils.java