diff --git a/bepascal/bepascal/headertoxml/README b/bepascal/bepascal/headertoxml/README
new file mode 100644
index 0000000..45503ef
--- /dev/null
+++ b/bepascal/bepascal/headertoxml/README
@@ -0,0 +1,4 @@
+This tool use libstubgen.so to parse C++ headers and generate
+the corresponding XML description.
+
+This tool is part of the BeFPC poject.
\ No newline at end of file
diff --git a/bepascal/bepascal/headertoxml/headertoxml.pp b/bepascal/bepascal/headertoxml/headertoxml.pp
new file mode 100644
index 0000000..7932a75
--- /dev/null
+++ b/bepascal/bepascal/headertoxml/headertoxml.pp
@@ -0,0 +1,205 @@
+{ headertoxml - A tool from the befpc project
+ Copyright (C) 2002 Olivier Coursiere
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+}
+program headertoxml;
+
+{
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+uses
+ Classes, SysUtils, stubgen;
+
+const
+ Eol = #10;
+
+type
+ TXMLWriter = class(TObject)
+ private
+ FFileName : string;
+ FLevel : integer;
+ FList : TStringList;
+ procedure StartTag(TagName : string);
+ procedure EndTags;
+ public
+ constructor Create(FileName : string);
+ destructor Destroy; override;
+ procedure StartClasses;
+ procedure EndClasses;
+ procedure StartClasse(Elem : PSyntaxelem);
+ procedure EndClasse;
+ procedure StartFunction(Elem : PSyntaxelem);
+ procedure EndFunction;
+ procedure StartParams;
+ procedure EndParams;
+ procedure StartParam(Elem : PArgument);
+ procedure StartResult(aType : PChar);
+ end;
+
+constructor TXMLWriter.Create(FileName : string);
+begin
+ inherited Create;
+ FLevel := 0;
+ FList := TStringList.Create;
+ FFileName := ChangeFileExt(FileName, '.xml');
+end;
+
+destructor TXMLWriter.Destroy;
+begin
+ FList.SaveToFile(FFileName);
+ FList.Free;
+ inherited;
+end;
+
+procedure TXMLWriter.StartTag(TagName : string);
+begin
+ Inc(FLevel);
+end;
+
+procedure TXMLWriter.EndTags;
+var
+ i : integer;
+begin
+ for i := 0 to FLevel - 1 do
+ begin
+// Write
+ end;
+end;
+
+procedure TXMLWriter.StartClasses;
+begin
+ FList.Add('');
+end;
+
+procedure TXMLWriter.EndClasses;
+begin
+ FList.Add('');
+end;
+
+procedure TXMLWriter.StartClasse(Elem : PSyntaxelem);
+begin
+ FList.Add(Format('', [Elem^.aName]));
+end;
+
+procedure TXMLWriter.EndClasse;
+begin
+ FList.Add('');
+end;
+
+procedure TXMLWriter.StartFunction(Elem : PSyntaxelem);
+begin
+ FList.Add(Format('', [Elem^.aName]));
+end;
+
+procedure TXMLWriter.EndFunction;
+begin
+ FList.Add('');
+end;
+
+procedure TXMLWriter.StartParams;
+begin
+ FList.Add('');
+end;
+
+procedure TXMLWriter.EndParams;
+begin
+ FList.Add('');
+end;
+
+procedure TXMLWriter.StartParam(Elem : PArgument);
+begin
+ FList.Add(Format('', [Elem^.aName, Elem^.aType]));
+end;
+
+procedure TXMLWriter.StartResult(aType : PChar);
+begin
+ if aType <> nil then
+ FList.Add(Format('', [aType]));
+end;
+
+var
+ Elem : PSyntaxelem;
+ fic : PChar;
+ s : string;
+ XMLWriter : TXMLWriter;
+ Current : PSyntaxelem;
+ CurrentArg : PArgument;
+begin
+ WriteLn('Bonjour !');
+ if ParamCount > 0 then
+ begin
+ WriteLn(Paramstr(1));
+ init_tables;
+ s := Paramstr(1);
+ fic := @s[1];
+ Elem := scan(fic);
+ XMLWriter := TXMLWriter.Create(s);
+ try
+ XMLWriter.StartClasses;
+ XMLWriter.StartClasse(Elem);
+ XMLWriter.StartFunction(Elem^.children);
+ CurrentArg := Elem^.args;
+ if CurrentArg <> nil then
+ begin
+ WriteLn('Arguments');
+ XMLWriter.StartParam(CurrentArg);
+ while CurrentArg^.Next <> nil do
+ begin
+ CurrentArg := CurrentArg^.Next;
+ XMLWriter.StartParam(CurrentArg);
+ end;
+ end;
+ XMLWriter.StartResult(Elem^.ret_type);
+ XMLWriter.EndFunction;
+ Current := Elem^.children;
+ while Current^.next <> nil do
+ begin
+ Current := Current^.next;
+ XMLWriter.StartFunction(Current);
+ CurrentArg := Current^.args;
+ if CurrentArg <> nil then
+ begin
+ XMLWriter.StartParam(CurrentArg);
+ while CurrentArg^.next <> nil do
+ begin
+ CurrentArg := CurrentArg^.next;
+ XMLWriter.StartParam(CurrentArg);
+ end;
+ end;
+ XMLWriter.StartResult(Current^.ret_type);
+ XMLWriter.EndFunction;
+ end;
+ XMLWriter.EndFunction;
+ XMLWriter.EndClasse;
+ XMLWriter.EndClasses;
+ finally
+ XMLWriter.Free;
+ end;
+ free_tables;
+ end;
+end.
\ No newline at end of file