Preliminary: - All strings are pascal strings (first char is string length, no 0 terimination) - Non-standard datatypes used (which should be easy to duplicate in most languages) type tags=record tag:array of byte; tagsize,tagstart:longint; end; type stringaddfunc=function(s:string):Integer; Required functions: function MakiInfo(var numtags, numdatatags, version:Longint;var ident:string; var Filter:AnsiString;info:stringaddfunc;progresswnd:hwnd):string; expected return string: name of plugin or game fill numtags with the number of archive tags supported numdatatags: number of datafile tags version: 1000 = 1.0 ident: name of game/engine filter: extensions supported by the plugin info: pointer passed by Maki to the function that adds a line of text to the log-box prorgesswnd: a hWnd to the progress-bar space to implement your own progressbar function MakiTags(var tag:array of tags;tagtype:byte); Maki calls this function twice when trying to load the DLL. First with tagtype 1 for the archive tags, second time with tagtype 2 for the datafile tags. Fill the passed tag array of size numtags/numdatatags Optional stuff: Icon 'gameicon' Will be used for the tabs when a file this plugin supports is opened function MakiLoad(filename:string;var archlist:stringaddfunc;expandinfo:boolean):Boolean; Opens an archive Parameters: filename: archive file to open archlist: function that adds an item to the list. Basically, call this once for every file to add. Addition order will be indexes later. expandedinfo: true if the checkbox 'Show expanded information' is checked function MakiFileInfo(Index:Longint;toggle:boolean):boolean; Give information about a file in an archive Parameters: index: index of the file more information was requested for toggle: always false function MakiExtract(Index:Longint;toggle:boolean):boolean; Extracts a file from an archive Parameters: index: index of the file to extract toggle: true if 'Dump mode' is checked function MakiAdd(newfilename:string; ItemIndex:Longint):Boolean; Adds a file to the archive Parameters: newfilename: new file to add to the archive Itemindex: index of the currently selected file in the archive function MakiReplace(newfilename:string; ItemIndex:Longint):Boolean; Replaces a file in the archive Parameters: newfilename: new file to place in the archive Itemindex: index of the file in the archive to be replaced function MakiRemove(ItemIndex:Longint):Boolean; Removes a file from the archive Parameters: itemindex: index of the file to remove from the archive // same idea as above, but for datafiles function MakiDataLoad(filename:string;var datalist:stringaddfunc;expandinfo:boolean):Boolean; function MakiDatafileinfo(Index:Longint;toggle:boolean):boolean; function MakiDataExtract(Index:Longint;toggle:boolean):boolean; function MakiDataAdd(newfilename:string; ItemIndex:Longint):Boolean; function MakiDataReplace(newfilename:string; ItemIndex:Longint):Boolean; function MakiDataRemove(ItemIndex:Longint):Boolean;