fpc/utils/pas2js/libstub.pp

180 lines
4.0 KiB
ObjectPascal

{
libstub - pas2js stub generator, library version
Copyright (C) 2017 - 2020 by Michael Van Canneyt michael@freepascal.org
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program 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.
}
library stub;
{$mode objfpc}{$H+}
uses
SysUtils, Classes, stubcreator;
Type
PStubCreator = Pointer;
Function GetStubCreator : PStubCreator; stdcall;
begin
Result:=TStubCreator.Create(Nil);
end;
Procedure FreeStubCreator(P : PStubCreator); stdcall;
begin
TStubCreator(P).Free;
end;
Function MaybeStr(P : PAnsiChar) : String;
begin
If Assigned(P) then
Result:=P
else
Result:='';
end;
Procedure SetStubCreatorInputFileName(P : PStubCreator; AFileName : PAnsiChar); stdcall;
begin
if Assigned(P) then
With TStubCreator(P) do
InputFileName:=AFileName;
end;
Procedure SetStubCreatorConfigFileName(P : PStubCreator; AFileName : PAnsiChar); stdcall;
begin
if Assigned(P) then
With TStubCreator(P) do
ConfigFileName:=MaybeStr(AFileName);
end;
Procedure SetStubCreatorOutputFileName(P : PStubCreator; AFileName : PAnsiChar); stdcall;
begin
if Assigned(P) then
With TStubCreator(P) do
OutputFileName:=MaybeStr(AFileName);
end;
Procedure SetStubCreatorHeaderFileName(P : PStubCreator; AFileName : PAnsiChar); stdcall;
begin
if Assigned(P) then
With TStubCreator(P) do
HeaderFileName:=MaybeStr(AFileName);
end;
Procedure AddStubCreatorDefine(P : PStubCreator; ADefine : PAnsiChar); stdcall;
begin
if Assigned(P) then
With TStubCreator(P) do
TStubCreator(P).Defines.Add(MaybeStr(ADefine));
end;
Procedure AddStubCreatorForwardClass(P : PStubCreator; AForwardClass : PAnsiChar); stdcall;
Var
S : String;
begin
if Assigned(P) then
With TStubCreator(P) do
begin
S:=MaybeStr(AForwardClass);
if (S<>'') then
begin
if TStubCreator(P).ForwardClasses<>'' then
S:=','+S;
TStubCreator(P).ForwardClasses:=TStubCreator(P).ForwardClasses+S;
end;
end;
end;
Procedure SetStubCreatorHeaderContent(P : PStubCreator; AContent : PAnsiChar); stdcall;
begin
if Assigned(P) then
With TStubCreator(P) do
HeaderStream:=TStringStream.Create(MaybeStr(AContent));
end;
Procedure SetStubCreatorOuputCallBack(P : PStubCreator; AData : Pointer; ACallBack : TWriteCallBack); stdcall;
begin
if Assigned(P) then
With TStubCreator(P) do
begin
CallbackData:=AData;
OnWriteCallBack:=ACallBack;
end;
end;
Function ExecuteStubCreator(P : PStubCreator) : Boolean; stdcall;
begin
Result:=TStubCreator(P).Execute;
end;
Procedure GetStubCreatorLastError(P : PStubCreator; AError : PAnsiChar;
Var AErrorLength : Longint; AErrorClass : PAnsiChar; Var AErrorClassLength : Longint); stdcall;
Var
L : Integer;
E,C : String;
begin
TStubCreator(P).GetLastError(E,C);
L:=Length(E);
if (L>AErrorLength) then
L:=AErrorLength;
if (L>0) then
Move(E[1],AError^,L);
L:=Length(C);
if L>AErrorClassLength then
L:=AErrorClassLength;
if (L>0) then
Move(C[1],AErrorClass^,L);
end;
Procedure SetStubCreatorUnitAliasCallBack(P : PStubCreator; ACallBack : TUnitAliasCallBack; CallBackData : Pointer); stdcall;
begin
TStubCreator(P).OnUnitAlias:=ACallBack;
TStubCreator(P).OnUnitAliasData:=CallBackData;
end;
Procedure AddStubCreatorExtraUnit(P : PStubCreator; AUnitName : PAnsiChar); stdcall;
begin
TStubCreator(P).ExtraUnits:=AUnitName;
end;
exports
// Stub creator
GetStubCreator,
FreeStubCreator,
SetStubCreatorInputFileName,
SetStubCreatorOutputFileName,
SetStubCreatorHeaderFileName,
SetStubCreatorConfigFileName,
SetStubCreatorHeaderContent,
SetStubCreatorOuputCallBack,
GetStubCreatorLastError,
AddStubCreatorDefine,
AddStubCreatorForwardClass,
AddStubCreatorExtraUnit,
ExecuteStubCreator,
SetStubCreatorUnitAliasCallBack;
end.