BeIDE .prof project file format - a reverse engineering attemptThis is based on Philippe Houdoin's previous work.Hierarchical tags format.Tag structure:```uint32 taguint32 tag data sizeuint8 data[tag_data_size](Values are big endian - always?)'MIDE' = Metrowerks IDE top taguint32 = sizeof of tag data'DPrf' = Data project file? Define Prefs?uint32 = size of tag data'PrEn' = Project/prefs encoding?uint32 = size of tag data (4)uint32 0xffffffff = ???'PrVr' = Project/pref Version?uint32 = size of tag data (4)uint32 0x00000003 = ???'Priv' = ???uint32 = size of tag data (8)uint32 0x00000007 = ???uint32 0x00000000 = ???'DAcc' = ???uint32 = size of tag data (16 = 0x10)uint32 0x00000006 = ???uint32 0x00000000 = ???uint32 0x00000005 = ???uint32 0x00000002 = ??? (flags fields)'SPth' = Search Paths tag (fixed tag size of 0x0108 = 264 bytes)uint32 = size of tag data (264 = 0x108)uint32 = Flags field ? (values seen so far: 0, 1 or 3)uint8 = boolean ??? (local or system? precompiled/cached?)uint8[259] = path string'PPth' = Project paths (reuse the same tag format above, see SPth tag)'Trgg' = Table of build "Trigger" ? Tag data is n x 140 bytesrecord of bellow format:uint32 = size of tag data (n x 140 bytes)uint16 = build stage ? (ranging from 0-never, 1-preproc,2-compile, 3-link, 4-resource, ?=always)uint16 = build flags (0 ou 1 ou 4 + 2 + 1 = ?)uint8[8] = file kind extensionuint8[64] = tool kind (gcc_link, gcc, rsrc ?)uint8[64] = file kind mime type'GPrf' = Global prefs ?uint32 = size of tag data'GenB' = Generic block ?uint32 = size of tag dataone single generic_blockgeneric_block has the following structure:uint32 = block group IDuint32 = value sizestring with zero ending = value nameuint32 = flags (1 = factory/default value?, 7 = custom ? To investigate)uint8[value size - 4] = valueList of generic blocks groups and names found so far:'MWPr' = Metrowerks prefs ?name = 'AppEditorPrefs', value = binary blob with colors, booleans, flags'cccg' = C compiler configname = 'gccCompilerOptions', value = gcc options stringname = 'gccLanguage', value = language number ?name = 'gccCommonWarning', value = array of uint8 booleans ?name = 'gccWarning', value = array of uint8 booleans ?name = 'gccCodeGeneration', value = array of uint8 booleans ?'dlcg' = dynamic linker configname = 'gccLinkerOptions', value = gcc linker options stringname = 'AdditionalGCCLinkerOptions', value = additions linker options string'GNOL' = ??? (Globally needs object linking ?)name = 'UpdateProject, value = uint32 (boolean?)'mwcx' = Metrowerks C++ ?name = 'ProjectPrefsx86', value = binary blob with:uint8[9] of flags & like...uint8[64] = output file mime type (for setmime) (usually'application/x-vnd.Be-elfexecutable'!)uint8[67 (!?)] = output file name-> To investigate deeper'RsDt' = Resource Data configname = 'ResData', value = array of uint8 booleans ?'mwcc' = Metrowerks C compilername = 'ProcessorPrefs', value = binary blob/array of booleansname = 'XLanguagePrefs', value = binary blob/array of booleansname = 'WarningsPrefs', value = binary blob/array of booleansname = 'DisassemblerPrefs', value = ???name = 'GlobalOpts', value = ???'mwld' = Metrowerks linkername = 'LinkerPrefs', value = few array of booleans + 3 xuint8[64), the symbol names of the__start, _term_routine and _init_routine routines.name = 'PEFPrefs', value = we don't care about PEF ;-)name = 'ProjectNamePrefs', value =uint8[64] = Default output name string ('Application')SUBTYPE in big endian ('????')TYPE 'BAPP' in big endianuint8[64] = output mime type string(application/x-be-executable)'ShDt' = Shell Dataname = 'ShellData', value = shell string options (usually '-noprofile')'msan' = NASM configname = 'NASMOptions', value = cryptic binary blob :-('Sect' = Section (Group section in project list)uint32 = size of tag data (always 0x50 bytes long)uint32 = nb items ('Link', 'PLnk', 'Fil1' or 'IgFl' tags) in this sectionuint32[2] = flags ?uint8 = ??? boolean ???uint8[*] = Name of the section'Link' = Link fileuint32 = size of tag datauint32[6] = ???One or more file (sub-)tag:List of file sub-tags found so far:'Mime' = value = MIME type of the file (one per parent tag)uint32 = sizeof tag datauint32 = size of value = size of tag data - sizeof(uint32)uint8[size of value] = MIME type of the file'MSFl' = Master/Main/Module? Source File (one per parent tag)(either a library file, or a source file)uint32 = sizeof tag datauint32[2] = flags (to investigate)'Name'uint32 = sizeof 'Name' taguint32 = sizeof 'Name' valueuint8[size of 'Name' value] = File name (no path)'SrFl' = Source File dependencies ([0..n] tags after the 'MSFl' tag) (mostly, headers - presents in Fil1 parent tag)uint32 = sizeof tag datauint32[2] = flags (to investigate)'Name'uint32 = sizeof 'Name' taguint32 = sizeof 'Name' valueuint8[size of 'Name' value] = File name (no path)'PLnk' = Post-Link file? (e.g. resource file)Same structure as 'Link''Fil1' = One build fileSame structure as 'Link''IgFl' = Ignored File, for file user has added to project list for easy access but is not build (e.g. local headers)Same structure as 'Link'. Note that the next 2 following uint32 (off 6) are then set to 0xFFFF each.'Brws' = Source browser infouint32 = size of taguint8[*]```More info can be found in proj2make source code at https://git.haiku-os.org/haiku/tree/3rdparty/proj2make.