mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-06 23:48:05 +02:00
180 lines
4.0 KiB
ObjectPascal
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.
|
|
|