mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 18:49:27 +02:00
universal cross platform unit file generator
This commit is contained in:
parent
9c20c3c839
commit
13d8d513b0
1168
packages/opengl/build2/Makefile
Normal file
1168
packages/opengl/build2/Makefile
Normal file
File diff suppressed because it is too large
Load Diff
31
packages/opengl/build2/Makefile.fpc
Normal file
31
packages/opengl/build2/Makefile.fpc
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#
|
||||||
|
# Makefile.fpc for auto generation of OpenGL units
|
||||||
|
#
|
||||||
|
|
||||||
|
[targets]
|
||||||
|
units=buildgl
|
||||||
|
programs=c_gen
|
||||||
|
|
||||||
|
[require]
|
||||||
|
packages=fcl
|
||||||
|
|
||||||
|
[dirs]
|
||||||
|
fpcdir=../../..
|
||||||
|
|
||||||
|
[defaults]
|
||||||
|
defaultrule=all_units
|
||||||
|
|
||||||
|
[rules]
|
||||||
|
.PHONY: all_units linuxd w32d w32s
|
||||||
|
|
||||||
|
all_units: linuxd w32d w32s
|
||||||
|
|
||||||
|
linuxd: c_gen$(EXEEXT) ogl_lind.gen
|
||||||
|
c_gen ogl_lind.gen
|
||||||
|
|
||||||
|
w32d: c_gen$(EXEEXT) ogl_w32d.gen
|
||||||
|
c_gen ogl_w32d.gen
|
||||||
|
|
||||||
|
w32s: c_gen$(EXEEXT) ogl_w32s.gen
|
||||||
|
c_gen ogl_w32s.gen
|
||||||
|
|
77
packages/opengl/build2/buildgl.pp
Normal file
77
packages/opengl/build2/buildgl.pp
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
{
|
||||||
|
$Id$
|
||||||
|
|
||||||
|
GL unit creation tool helpers
|
||||||
|
(c) 1999 Sebastian Guenther, sg@freepascal.org
|
||||||
|
}
|
||||||
|
|
||||||
|
{$MODE objfpc}
|
||||||
|
{$H+}
|
||||||
|
|
||||||
|
unit buildgl;
|
||||||
|
|
||||||
|
interface
|
||||||
|
uses SysUtils, Classes;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
TDefReader = class
|
||||||
|
protected
|
||||||
|
FInterfaceBlock, FProcs: TStringList;
|
||||||
|
public
|
||||||
|
constructor Create(const Filename: String);
|
||||||
|
property InterfaceBlock: TStringList read FInterfaceBlock;
|
||||||
|
property Procs: TStringList read FProcs;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
|
||||||
|
constructor TDefReader.Create(const Filename: String);
|
||||||
|
type
|
||||||
|
TCurState = (stateNothing, stateCopyInterface, stateProcs);
|
||||||
|
var
|
||||||
|
f: Text;
|
||||||
|
s: String;
|
||||||
|
state: TCurState;
|
||||||
|
begin
|
||||||
|
state := stateNothing;
|
||||||
|
FInterfaceBlock := TStringList.Create;
|
||||||
|
FProcs := TStringList.Create;
|
||||||
|
|
||||||
|
Assign(f, Filename);
|
||||||
|
Reset(f);
|
||||||
|
while not EOF(f) do begin
|
||||||
|
ReadLn(f, s);
|
||||||
|
if Copy(s, 1, 1) = '#' then continue; // Skip comments
|
||||||
|
if s = '%COPY_INTERFACE' then
|
||||||
|
state := stateCopyInterface
|
||||||
|
else if s = '%PROCS' then
|
||||||
|
state := stateProcs
|
||||||
|
else if s = '%END' then
|
||||||
|
state := stateNothing
|
||||||
|
else
|
||||||
|
case state of
|
||||||
|
stateCopyInterface: InterfaceBlock.Add(s);
|
||||||
|
stateProcs: Procs.Add(s);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
Close(f);
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
$Log$
|
||||||
|
Revision 1.1 2000-05-26 09:22:39 alex
|
||||||
|
universal cross platform unit file generator
|
||||||
|
|
||||||
|
Revision 1.1 1999/12/23 13:51:50 peter
|
||||||
|
* reorganized, it now doesn't depend on fcl anymore by default
|
||||||
|
|
||||||
|
Revision 1.1 1999/11/28 17:55:22 sg
|
||||||
|
* Added new unit generation tools and auto-generated GL units for Linux
|
||||||
|
|
||||||
|
}
|
572
packages/opengl/build2/c_gen.pp
Normal file
572
packages/opengl/build2/c_gen.pp
Normal file
@ -0,0 +1,572 @@
|
|||||||
|
{
|
||||||
|
unit generation tool
|
||||||
|
(C) 2000 Alexander Stohr, alexs@freepage.de
|
||||||
|
based upon the linux dynamic tool from Sebastian Guenther
|
||||||
|
with latest version "1.1 1999/12/23 13:51:50 peter"
|
||||||
|
}
|
||||||
|
|
||||||
|
{$MODE objfpc}
|
||||||
|
{$H-} { use normal strings }
|
||||||
|
(* do not enable! fpc bug with H+ *)
|
||||||
|
|
||||||
|
program c_gen;
|
||||||
|
|
||||||
|
uses
|
||||||
|
SysUtils,
|
||||||
|
Classes,
|
||||||
|
buildgl;
|
||||||
|
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
|
type
|
||||||
|
ptDefFile = ^tDefFile;
|
||||||
|
tDefFile = record
|
||||||
|
Name : String;
|
||||||
|
DefFile : TDefReader;
|
||||||
|
pNext : ptDefFile;
|
||||||
|
end;
|
||||||
|
|
||||||
|
ptSectionKey = ^tSectionKey;
|
||||||
|
tSectionKey = record
|
||||||
|
Keyword : String;
|
||||||
|
Rule : DWord;
|
||||||
|
pDefFile : ptDefFile;
|
||||||
|
Option2 : String;
|
||||||
|
pNext : ptSectionKey;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
|
const
|
||||||
|
verbose = 0; // change this for debugging
|
||||||
|
|
||||||
|
const
|
||||||
|
ST_NONE = 0;
|
||||||
|
ST_COMMON = 1;
|
||||||
|
ST_FILE = 2;
|
||||||
|
|
||||||
|
RULE_IG = 0;
|
||||||
|
RULE_TX = 1;
|
||||||
|
RULE_IF = 2;
|
||||||
|
RULE_PD = 3;
|
||||||
|
RULE_PL = 4;
|
||||||
|
RULE_PS = 5;
|
||||||
|
|
||||||
|
// =====================================================================
|
||||||
|
// global vars
|
||||||
|
|
||||||
|
var
|
||||||
|
ReturnVal : Word;
|
||||||
|
|
||||||
|
pSectionKey : ptSectionKey;
|
||||||
|
pAllDefFile : ptDefFile;
|
||||||
|
|
||||||
|
ToolName : String;
|
||||||
|
TargetText : String;
|
||||||
|
TargetDir : String;
|
||||||
|
|
||||||
|
SectionType : DWord;
|
||||||
|
SectionName : String;
|
||||||
|
|
||||||
|
TemplateName : String;
|
||||||
|
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
|
procedure StripSpaces(var s : String);
|
||||||
|
var
|
||||||
|
L : Byte;
|
||||||
|
begin
|
||||||
|
// strip leading spaces
|
||||||
|
while (Pos(' ',s)=1) or (Pos(#8,s)=1) do
|
||||||
|
Delete(s,1,1);
|
||||||
|
|
||||||
|
// strip trailing spaces
|
||||||
|
L := Length(s);
|
||||||
|
while L<>0 do
|
||||||
|
begin
|
||||||
|
if (s[L]=' ') or (s[L]=#8) then
|
||||||
|
begin
|
||||||
|
Delete(s,L,1);
|
||||||
|
Dec(L);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
L := 0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetName(var s : String) : String;
|
||||||
|
var
|
||||||
|
Name : String;
|
||||||
|
P : Byte;
|
||||||
|
begin
|
||||||
|
Name := s;
|
||||||
|
P := Pos(',',s);
|
||||||
|
if p>0 then
|
||||||
|
begin
|
||||||
|
Delete(s,1,P);
|
||||||
|
Delete(Name,P,255);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
s := '';
|
||||||
|
|
||||||
|
StripSpaces(Name);
|
||||||
|
|
||||||
|
{ WriteLn('GetName, reminder = ',Name,',',s); }
|
||||||
|
|
||||||
|
GetName := Name;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function Name2Rule(Name : String) : DWord;
|
||||||
|
begin
|
||||||
|
if Name='IG'
|
||||||
|
then Name2Rule := RULE_IG
|
||||||
|
else
|
||||||
|
if Name='TX'
|
||||||
|
then Name2Rule := RULE_TX
|
||||||
|
else
|
||||||
|
if Name='IF'
|
||||||
|
then Name2Rule := RULE_IF
|
||||||
|
else
|
||||||
|
if Name='PD'
|
||||||
|
then Name2Rule := RULE_PD
|
||||||
|
else
|
||||||
|
if Name='PL'
|
||||||
|
then Name2Rule := RULE_PL
|
||||||
|
else
|
||||||
|
if Name='PS'
|
||||||
|
then Name2Rule := RULE_PS
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
Name2Rule := RULE_IG;
|
||||||
|
WriteLn('error - unknown rule: ',Name);
|
||||||
|
ReturnVal := 1;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function AddDefFile(Name : String) : ptDefFile;
|
||||||
|
var
|
||||||
|
pDefFile : ptDefFile;
|
||||||
|
pSearch : ptDefFile;
|
||||||
|
begin
|
||||||
|
pDefFile := NIL;
|
||||||
|
|
||||||
|
// search if file is already loaded
|
||||||
|
if pAllDefFile<>NIL then
|
||||||
|
begin
|
||||||
|
pSearch := pAllDefFile;
|
||||||
|
while pSearch<>NIL do
|
||||||
|
begin
|
||||||
|
if pSearch^.Name = Name then
|
||||||
|
begin
|
||||||
|
pDefFile := pSearch;
|
||||||
|
pSearch := NIL;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
pSearch := pSearch^.pNext;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// create new file if its not loaded
|
||||||
|
if pDefFile = NIL then
|
||||||
|
begin
|
||||||
|
New(pDefFile);
|
||||||
|
|
||||||
|
pDefFile^.Name := Name;
|
||||||
|
pDefFile^.DefFile := TDefReader.Create(Name);
|
||||||
|
pDefFile^.pNext := pAllDefFile; // chain in as first member
|
||||||
|
|
||||||
|
pAllDefFile := pDefFile;
|
||||||
|
end;
|
||||||
|
|
||||||
|
AddDefFile := pDefFile;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure AddSectionKey(s : string);
|
||||||
|
var
|
||||||
|
pKey : ptSectionKey;
|
||||||
|
t : string;
|
||||||
|
begin
|
||||||
|
New(pKey);
|
||||||
|
|
||||||
|
pKey^.Keyword := GetName(s);
|
||||||
|
pKey^.Rule := Name2Rule(GetName(s));
|
||||||
|
pKey^.pDefFile := AddDefFile(GetName(s));
|
||||||
|
t := GetName(s);
|
||||||
|
pKey^.Option2 := t;
|
||||||
|
pKey^.pNext := pSectionKey; // chain in as first member
|
||||||
|
|
||||||
|
pSectionKey := pKey;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetSectionKey(s : string) : ptSectionKey;
|
||||||
|
var
|
||||||
|
pSearch : ptSectionKey;
|
||||||
|
begin
|
||||||
|
GetSectionKey := NIL;
|
||||||
|
|
||||||
|
pSearch := pSectionKey;
|
||||||
|
while pSearch<>NIL do
|
||||||
|
begin
|
||||||
|
if pSearch^.Keyword = s then
|
||||||
|
begin
|
||||||
|
GetSectionKey := pSearch;
|
||||||
|
pSearch := NIL;
|
||||||
|
end
|
||||||
|
else pSearch := pSearch^.pNext;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure FreeSectionKeys;
|
||||||
|
var
|
||||||
|
pSearch, pNext : ptSectionKey;
|
||||||
|
begin
|
||||||
|
pSearch := pSectionKey;
|
||||||
|
while pSearch<>NIL do
|
||||||
|
begin
|
||||||
|
pNext := pSearch^.pNext;
|
||||||
|
Dispose(pSearch);
|
||||||
|
pSearch := pNext;
|
||||||
|
end;
|
||||||
|
pSectionKey := pSearch;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
|
procedure ResetCommonSecData;
|
||||||
|
begin
|
||||||
|
ToolName := 'BuildTool';
|
||||||
|
TargetText := 'unknown';
|
||||||
|
TargetDir := '.\';
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure ResetFileSecData;
|
||||||
|
begin
|
||||||
|
FreeSectionKeys;
|
||||||
|
TemplateName := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure InitGlobals;
|
||||||
|
begin
|
||||||
|
ReturnVal := 0;
|
||||||
|
|
||||||
|
SectionType := ST_NONE;
|
||||||
|
pSectionKey := NIL;
|
||||||
|
pAllDefFile := NIL;
|
||||||
|
|
||||||
|
ResetCommonSecData;
|
||||||
|
ResetFileSecData;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
|
procedure PrintInterface(var dest: Text; lines: TStringList);
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
for i := 0 to lines.Count - 1 do
|
||||||
|
WriteLn(dest, lines.Strings[i]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure PrintProcDecls(var dest: Text; procs: TStringList; const Modifier : String);
|
||||||
|
var
|
||||||
|
i, j: Integer;
|
||||||
|
s: String;
|
||||||
|
begin
|
||||||
|
for i := 0 to procs.Count - 1 do
|
||||||
|
begin
|
||||||
|
s := procs.Strings[i];
|
||||||
|
j := Pos('//', s);
|
||||||
|
if (Length(s) = 0) or ((j > 0) and (Trim(s)[1] = '/')) then
|
||||||
|
WriteLn(dest, s)
|
||||||
|
else if j = 0 then
|
||||||
|
WriteLn(dest, s, ' ',Modifier)
|
||||||
|
else
|
||||||
|
WriteLn(dest, TrimRight(Copy(s, 1, j-1)),
|
||||||
|
' ',Modifier,' ', Copy(s, j, Length(s)) );
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure PrintProcLoaders(var dest: Text; procs: TStringList; const libname: String);
|
||||||
|
var
|
||||||
|
i, j: Integer;
|
||||||
|
s: String;
|
||||||
|
begin
|
||||||
|
for i := 0 to procs.Count - 1 do
|
||||||
|
begin
|
||||||
|
s := Trim(procs.Strings[i]);
|
||||||
|
j := Pos(':', s);
|
||||||
|
s := Trim(Copy(s, 1, j - 1));
|
||||||
|
if (Length(s) = 0) or (Pos('//', s) > 0) then continue;
|
||||||
|
WriteLn(dest, ' ', s, ' := GetProc(', libname, ', ''', s, ''');');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure PrintProcStatic(var dest: Text; procs: TStringList; const Modifier: String);
|
||||||
|
var
|
||||||
|
i, j: Integer;
|
||||||
|
s: String;
|
||||||
|
t: String;
|
||||||
|
begin
|
||||||
|
for i := 0 to procs.Count - 1 do
|
||||||
|
begin
|
||||||
|
s := procs.Strings[i];
|
||||||
|
j := Pos('//', s);
|
||||||
|
if (Length(s) = 0) or ((j > 0) and (Trim(s)[1] = '/')) then
|
||||||
|
WriteLn(dest, s)
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
// swap order of leading symbols and remove ':'
|
||||||
|
t := Trim(procs.Strings[i]);
|
||||||
|
j := Pos(':', s);
|
||||||
|
t := Trim(Copy(t, 1, j - 1));
|
||||||
|
|
||||||
|
Delete(s,1,j);
|
||||||
|
s := Trim(s);
|
||||||
|
|
||||||
|
j := Pos('(', s);
|
||||||
|
Insert(t,s,j);
|
||||||
|
Insert(' ',s,j);
|
||||||
|
|
||||||
|
j := Pos('//', s);
|
||||||
|
if j = 0 then
|
||||||
|
WriteLn(dest, s, ' ',Modifier)
|
||||||
|
else
|
||||||
|
WriteLn(dest, TrimRight(Copy(s, 1, j-1)),
|
||||||
|
' ',Modifier,' ', Copy(s, j, Length(s)) );
|
||||||
|
end;
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure PrintCVSLogSection(var dest: Text);
|
||||||
|
begin
|
||||||
|
WriteLn(dest);
|
||||||
|
WriteLn(dest);
|
||||||
|
WriteLn(dest, '{');
|
||||||
|
WriteLn(dest, ' $', 'Log:$'); // needed because _this_ file might be in CVS, too
|
||||||
|
WriteLn(dest, '}');
|
||||||
|
end;
|
||||||
|
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
|
procedure ProcessFileSection;
|
||||||
|
var
|
||||||
|
f : Text;
|
||||||
|
tpl : Text;
|
||||||
|
s : String;
|
||||||
|
{ j : Integer; }
|
||||||
|
tmp : String;
|
||||||
|
pKey : ptSectionKey;
|
||||||
|
begin
|
||||||
|
WriteLn('Generating "',TargetDir+SectionName,'" ...');
|
||||||
|
|
||||||
|
Assign(f, TargetDir+SectionName);
|
||||||
|
Rewrite(f);
|
||||||
|
|
||||||
|
Assign(tpl, TemplateName);
|
||||||
|
Reset(tpl);
|
||||||
|
|
||||||
|
while not EOF(tpl) do
|
||||||
|
begin
|
||||||
|
ReadLn(tpl, s);
|
||||||
|
if Copy(s, 1, 1) = '%' then
|
||||||
|
begin
|
||||||
|
tmp := Copy(s,2,255);
|
||||||
|
StripSpaces(tmp);
|
||||||
|
|
||||||
|
pKey := GetSectionKey(tmp);
|
||||||
|
|
||||||
|
if pKey=NIL then
|
||||||
|
begin
|
||||||
|
WriteLn(f, '// ### ',ToolName,': Don''t know what to insert here!: ', s);
|
||||||
|
WriteLn('error - unknown keyword: ',tmp);
|
||||||
|
ReturnVal := 1;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
case pKey^.Rule of
|
||||||
|
RULE_IG : { ignore };
|
||||||
|
RULE_TX : { todo };
|
||||||
|
RULE_IF : PrintInterface(f, pKey^.pDefFile^.DefFile.InterfaceBlock);
|
||||||
|
RULE_PD : PrintProcDecls(f, pKey^.pDefFile^.DefFile.Procs,
|
||||||
|
pKey^.Option2);
|
||||||
|
RULE_PL : PrintProcLoaders(f, pKey^.pDefFile^.DefFile.Procs,
|
||||||
|
pKey^.Option2);
|
||||||
|
RULE_PS : PrintProcStatic(f, pKey^.pDefFile^.DefFile.Procs,
|
||||||
|
pKey^.Option2);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
if Copy(s, 1, 1) <> '#'
|
||||||
|
then WriteLn(f, s);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
PrintCVSLogSection(f);
|
||||||
|
Close(f);
|
||||||
|
|
||||||
|
(*
|
||||||
|
if Copy(s, 1, 1) <> '#' then
|
||||||
|
begin
|
||||||
|
j := Pos('#extdecl', s);
|
||||||
|
if j = 0 then
|
||||||
|
WriteLn(f, s)
|
||||||
|
else
|
||||||
|
WriteLn(f, Copy(s, 1, j - 1), 'cdecl', Copy(s, j + 8, Length(s)));
|
||||||
|
end;
|
||||||
|
*)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure ProcessCommonSection;
|
||||||
|
begin
|
||||||
|
if verbose>0 then
|
||||||
|
begin
|
||||||
|
WriteLn('common section:');
|
||||||
|
WriteLn(' ToolName = ',ToolName);
|
||||||
|
WriteLn(' TargetText = ',TargetText);
|
||||||
|
WriteLn(' TargetDir = ',TargetDir);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// =====================================================================
|
||||||
|
|
||||||
|
procedure SectionComplete;
|
||||||
|
begin
|
||||||
|
if ReturnVal=0 then { if we are error free }
|
||||||
|
case SectionType of
|
||||||
|
ST_NONE :
|
||||||
|
begin
|
||||||
|
// ignore
|
||||||
|
end;
|
||||||
|
ST_COMMON :
|
||||||
|
begin
|
||||||
|
ProcessCommonSection;
|
||||||
|
end;
|
||||||
|
ST_FILE :
|
||||||
|
begin
|
||||||
|
ProcessFileSection();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
hFGen : Text;
|
||||||
|
Line : String;
|
||||||
|
KeyName : String;
|
||||||
|
KeyValue : String;
|
||||||
|
|
||||||
|
begin
|
||||||
|
InitGlobals;
|
||||||
|
|
||||||
|
WriteLn('File Generator Tool for OpenGL related Units');
|
||||||
|
|
||||||
|
if ParamCount<>1 then
|
||||||
|
begin
|
||||||
|
WriteLn('specify a generator file as parameter 1');
|
||||||
|
Halt(1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
// Open Generation File
|
||||||
|
Assign(hFGen,ParamStr(1));
|
||||||
|
Reset(hFGen);
|
||||||
|
|
||||||
|
while Not(EOF(hFGen)) do
|
||||||
|
begin
|
||||||
|
ReadLn(hFGen,Line);
|
||||||
|
if Length(Line)>0 then
|
||||||
|
begin
|
||||||
|
if Line[1]='[' then
|
||||||
|
begin
|
||||||
|
// its a new section
|
||||||
|
SectionComplete; // close previous section
|
||||||
|
|
||||||
|
Delete(Line,Pos(']',Line),255);
|
||||||
|
SectionName := Copy(Line,2,255);
|
||||||
|
|
||||||
|
if verbose>0 then
|
||||||
|
WriteLn('SectionName = ',SectionName);
|
||||||
|
|
||||||
|
if SectionName='common' then
|
||||||
|
begin
|
||||||
|
SectionType := ST_COMMON;
|
||||||
|
ResetCommonSecData;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
SectionType := ST_FILE;
|
||||||
|
ResetFileSecData;
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if Pos(Line[1],'#*;''')<>0 then
|
||||||
|
begin
|
||||||
|
// just a comment - ignore
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
// its a key in the section
|
||||||
|
KeyName := Line;
|
||||||
|
KeyValue := Line;
|
||||||
|
|
||||||
|
Delete(KeyName,Pos('=',KeyName),255);
|
||||||
|
Delete(KeyValue,1,Pos('=',KeyValue));
|
||||||
|
|
||||||
|
StripSpaces(KeyName);
|
||||||
|
StripSpaces(KeyValue);
|
||||||
|
|
||||||
|
// WriteLn('KeyName = ',KeyName);
|
||||||
|
// WriteLn('KeyValue = ',KeyValue);
|
||||||
|
|
||||||
|
case SectionType of
|
||||||
|
ST_COMMON :
|
||||||
|
begin
|
||||||
|
if KeyName='TOOL_NAME'
|
||||||
|
then ToolName := KeyValue
|
||||||
|
else
|
||||||
|
if KeyName='TARGET_TEXT'
|
||||||
|
then TargetText := KeyValue
|
||||||
|
else
|
||||||
|
if KeyName='TARGET_DIR'
|
||||||
|
then TargetDir := KeyValue
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
WriteLn('error in script file - inside common section');
|
||||||
|
WriteLn('key line: ',Line);
|
||||||
|
ReturnVal := 1;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
ST_FILE :
|
||||||
|
begin
|
||||||
|
if KeyName='TEMPLATE'
|
||||||
|
then TemplateName := KeyValue
|
||||||
|
else
|
||||||
|
if KeyName='KEY'
|
||||||
|
then AddSectionKey(KeyValue)
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
WriteLn('error in script file - inside file section');
|
||||||
|
WriteLn('key line: ',Line);
|
||||||
|
ReturnVal := 1;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
ELSE
|
||||||
|
begin
|
||||||
|
WriteLn('error in script file - not in a section');
|
||||||
|
WriteLn('key line: ',Line);
|
||||||
|
ReturnVal := 1;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
SectionComplete; // close last section
|
||||||
|
|
||||||
|
Close(hFGen);
|
||||||
|
|
||||||
|
WriteLn('Done...');
|
||||||
|
|
||||||
|
Halt(ReturnVal);
|
||||||
|
end.
|
141
packages/opengl/build2/gl_linux.tem
Normal file
141
packages/opengl/build2/gl_linux.tem
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
{
|
||||||
|
$Id$
|
||||||
|
Translation of the Mesa GL, GLU and GLX headers for Free Pascal
|
||||||
|
Linux Version, Copyright (C) 1999 Sebastian Guenther
|
||||||
|
|
||||||
|
|
||||||
|
Mesa 3-D graphics library
|
||||||
|
Version: 3.0
|
||||||
|
Copyright (C) 1995-1998 Brian Paul
|
||||||
|
|
||||||
|
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
|
||||||
|
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
}
|
||||||
|
|
||||||
|
{$MODE delphi} // objfpc would not work because of direct proc var assignments
|
||||||
|
|
||||||
|
unit GL;
|
||||||
|
|
||||||
|
interface
|
||||||
|
uses X,XLib,XUtil;
|
||||||
|
|
||||||
|
// ===================================================================
|
||||||
|
// Unit specific extensions
|
||||||
|
// ===================================================================
|
||||||
|
|
||||||
|
function InitGLFromLibrary(libname: PChar): Boolean;
|
||||||
|
function InitGLUFromLibrary(libname: PChar): Boolean;
|
||||||
|
// Requires that the GL library has already been initialized:
|
||||||
|
function InitGLX: Boolean;
|
||||||
|
|
||||||
|
// determines automatically which libraries to use:
|
||||||
|
function InitGL: Boolean;
|
||||||
|
function InitGLU: Boolean;
|
||||||
|
|
||||||
|
|
||||||
|
var
|
||||||
|
GLInitialized, GLUInitialized, GLXInitialized: Boolean;
|
||||||
|
|
||||||
|
%GLDeclsIF
|
||||||
|
%GLProcsPD
|
||||||
|
|
||||||
|
%GLExtDeclsIF
|
||||||
|
%GLExtProcsPD
|
||||||
|
|
||||||
|
%GLUDeclsIF
|
||||||
|
%GLUProcsPD
|
||||||
|
|
||||||
|
%GLXDeclsIF
|
||||||
|
%GLXProcsPD
|
||||||
|
|
||||||
|
|
||||||
|
// ===================================================================
|
||||||
|
// ===================================================================
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$LINKLIB m}
|
||||||
|
|
||||||
|
function dlopen(AFile: PChar; mode: LongInt): Pointer; external 'dl';
|
||||||
|
function dlclose(handle: Pointer): LongInt; external 'dl';
|
||||||
|
function dlsym(handle: Pointer; name: PChar): Pointer; external 'dl';
|
||||||
|
|
||||||
|
function LoadLibrary(name: PChar): Pointer;
|
||||||
|
begin
|
||||||
|
Result := dlopen(name, $101 {RTLD_GLOBAL or RTLD_LAZY});
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetProc(handle: Pointer; name: PChar): Pointer;
|
||||||
|
begin
|
||||||
|
Result := dlsym(handle, name);
|
||||||
|
if Result = nil then WriteLn('Unresolved: ', name);
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
libGL, libGLU, libGLX: Pointer;
|
||||||
|
|
||||||
|
function InitGLFromLibrary(libname: PChar): Boolean;
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
libGL := LoadLibrary(libname);
|
||||||
|
if not Assigned(libGL) then exit;
|
||||||
|
|
||||||
|
%GLProcsPL
|
||||||
|
# // Extensions:
|
||||||
|
#%GLExtProcs2
|
||||||
|
|
||||||
|
GLInitialized := True;
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function InitGLUFromLibrary(libname: PChar): Boolean;
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
libGLU := LoadLibrary(libname);
|
||||||
|
if not Assigned(libGLU) then exit;
|
||||||
|
|
||||||
|
%GLUProcsPL
|
||||||
|
|
||||||
|
GLUInitialized := True;
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function InitGLX: Boolean;
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
if not Assigned(libGL) then exit;
|
||||||
|
|
||||||
|
%GLXProcsPL
|
||||||
|
|
||||||
|
GLXInitialized := True;
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function InitGL: Boolean;
|
||||||
|
begin
|
||||||
|
Result := InitGLFromLibrary('libGL.so.1') or InitGLFromLibrary('libMesaGL.so.1');
|
||||||
|
end;
|
||||||
|
|
||||||
|
function InitGLU: Boolean;
|
||||||
|
begin
|
||||||
|
Result := InitGLUFromLibrary('libGLU.so.1') or InitGLUFromLibrary('libMesaGLU.so.1');
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
finalization
|
||||||
|
if Assigned(libGL) then dlclose(libGL);
|
||||||
|
if Assigned(libGLU) then dlclose(libGLU);
|
||||||
|
if Assigned(libGLX) then dlclose(libGLX);
|
||||||
|
end.
|
1810
packages/opengl/build2/gl_w32d.tem
Normal file
1810
packages/opengl/build2/gl_w32d.tem
Normal file
File diff suppressed because it is too large
Load Diff
225
packages/opengl/build2/gl_w32s.tem
Normal file
225
packages/opengl/build2/gl_w32s.tem
Normal file
@ -0,0 +1,225 @@
|
|||||||
|
{
|
||||||
|
Translation of the Mesa GL headers for FreePascal
|
||||||
|
Copyright (C) 1999 Sebastian Guenther
|
||||||
|
Template for static linking in Win32 environment by Alexander Stohr.
|
||||||
|
|
||||||
|
Original copyright notice:
|
||||||
|
|
||||||
|
Mesa 3-D graphics library
|
||||||
|
Version: 3.0
|
||||||
|
Copyright (C) 1995-1998 Brian Paul
|
||||||
|
|
||||||
|
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
|
||||||
|
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
You have to enable Macros (compiler switch "-Sm") for compiling this unit!
|
||||||
|
This is necessary for supporting different platforms with different calling
|
||||||
|
conventions via a single unit.
|
||||||
|
}
|
||||||
|
|
||||||
|
unit GL;
|
||||||
|
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
{$DEFINE GL1_0}
|
||||||
|
{x$DEFINE GL1_1}
|
||||||
|
{x$DEFINE GL1_2}
|
||||||
|
{x$DEFINE MESA} {enable if you want to use some special mesa extensions}
|
||||||
|
{x$DEFINE EXTENSIONS} {enable if you need one/all of extensions}
|
||||||
|
{x$DEFINE SGI_EXTENSIONS} {enable if you need one/all of extensions}
|
||||||
|
|
||||||
|
{
|
||||||
|
*** Note: ***
|
||||||
|
There is currently one importants side effect when doing static linking.
|
||||||
|
|
||||||
|
If you include a function statically than its required to be present
|
||||||
|
in the supplied DLLs of your OS and Hardware.
|
||||||
|
This means if the DLL is not present your program will not run.
|
||||||
|
In Win95 it appears that you will be informined you about
|
||||||
|
the name of the first missing symbol while loading the executable.
|
||||||
|
}
|
||||||
|
|
||||||
|
{$IFDEF Win32}
|
||||||
|
{$DEFINE ogl_dll := external 'opengl32.dll'}
|
||||||
|
uses Windows;
|
||||||
|
{$ELSE}
|
||||||
|
{$MESSAGE Unsupported platform.}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
// Unit specific extensions
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
|
// none - no special init required
|
||||||
|
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
// GL consts, types and functions
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------
|
||||||
|
// GL types
|
||||||
|
// -------------------------------------------------------
|
||||||
|
|
||||||
|
type
|
||||||
|
PSingle = ^Single;
|
||||||
|
PDouble = ^Double;
|
||||||
|
|
||||||
|
GLvoid = Pointer;
|
||||||
|
GLboolean = Byte;
|
||||||
|
|
||||||
|
GLbyte = ShortInt; // 1-byte signed
|
||||||
|
GLshort = Integer; // 2-byte signed
|
||||||
|
GLint = LongInt; // 4-byte signed
|
||||||
|
|
||||||
|
GLubyte = Byte; // 1-byte unsigned
|
||||||
|
GLushort = Word; // 2-byte unsigned
|
||||||
|
GLuint = DWord; // 4-byte signed
|
||||||
|
|
||||||
|
GLsizei = LongInt; // 4-byte signed
|
||||||
|
|
||||||
|
GLfloat = Single; // single precision float
|
||||||
|
GLclampf = Single; // single precision float in [0,1]
|
||||||
|
GLdouble = Double; // double precision float
|
||||||
|
GLclampd = Double; // double precision float in [0,1]
|
||||||
|
|
||||||
|
GLenum = DWord;
|
||||||
|
|
||||||
|
type
|
||||||
|
GLbitfield = DWord; { was an enum - no corresponding thing in pascal }
|
||||||
|
const
|
||||||
|
GL_CURRENT_BIT = $00000001;
|
||||||
|
GL_POINT_BIT = $00000002;
|
||||||
|
GL_LINE_BIT = $00000004;
|
||||||
|
GL_POLYGON_BIT = $00000008;
|
||||||
|
GL_POLYGON_STIPPLE_BIT= $00000010;
|
||||||
|
GL_PIXEL_MODE_BIT = $00000020;
|
||||||
|
GL_LIGHTING_BIT = $00000040;
|
||||||
|
GL_FOG_BIT = $00000080;
|
||||||
|
GL_DEPTH_BUFFER_BIT = $00000100;
|
||||||
|
GL_ACCUM_BUFFER_BIT = $00000200;
|
||||||
|
GL_STENCIL_BUFFER_BIT = $00000400;
|
||||||
|
GL_VIEWPORT_BIT = $00000800;
|
||||||
|
GL_TRANSFORM_BIT = $00001000;
|
||||||
|
GL_ENABLE_BIT = $00002000;
|
||||||
|
GL_COLOR_BUFFER_BIT = $00004000;
|
||||||
|
GL_HINT_BIT = $00008000;
|
||||||
|
GL_EVAL_BIT = $00010000;
|
||||||
|
GL_LIST_BIT = $00020000;
|
||||||
|
GL_TEXTURE_BIT = $00040000;
|
||||||
|
GL_SCISSOR_BIT = $00080000;
|
||||||
|
GL_ALL_ATTRIB_BITS = $000fffff;
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------
|
||||||
|
// GL constants
|
||||||
|
// -------------------------------------------------------
|
||||||
|
|
||||||
|
{$IFDEF GL1_0}
|
||||||
|
%GLDeclsIF10
|
||||||
|
{$ENDIF GL1_0}
|
||||||
|
|
||||||
|
{$IFDEF GL1_1}
|
||||||
|
%GLDeclsIF11
|
||||||
|
{$ENDIF GL1_1}
|
||||||
|
|
||||||
|
{$IFDEF GL1_2}
|
||||||
|
%GLDeclsIF12
|
||||||
|
{$ENDIF GL1_2}
|
||||||
|
|
||||||
|
const
|
||||||
|
// Utility
|
||||||
|
GL_VENDOR = $1F00;
|
||||||
|
GL_RENDERER = $1F01;
|
||||||
|
GL_VERSION = $1F02;
|
||||||
|
GL_EXTENSIONS = $1F03;
|
||||||
|
|
||||||
|
// Errors
|
||||||
|
GL_INVALID_VALUE = $0501;
|
||||||
|
GL_INVALID_ENUM = $0500;
|
||||||
|
GL_INVALID_OPERATION = $0502;
|
||||||
|
GL_STACK_OVERFLOW = $0503;
|
||||||
|
GL_STACK_UNDERFLOW = $0504;
|
||||||
|
GL_OUT_OF_MEMORY = $0505;
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------
|
||||||
|
// GL extensions constants
|
||||||
|
// -------------------------------------------------------
|
||||||
|
|
||||||
|
{$IFDEF EXTENSIONS}
|
||||||
|
%GLDeclsIF10Ext
|
||||||
|
{$ENDIF EXTENSIONS}
|
||||||
|
|
||||||
|
{$IFDEF SGI_EXTENSIONS}
|
||||||
|
%GLDeclsIF10SGI
|
||||||
|
{$ENDIF SGI_EXTENSIONS}
|
||||||
|
|
||||||
|
{$IFDEF MESA}
|
||||||
|
%GLDeclsIF10Mesa
|
||||||
|
{$ENDIF MESA}
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------
|
||||||
|
// GL procedures and functions
|
||||||
|
// -------------------------------------------------------
|
||||||
|
|
||||||
|
{$IFDEF GL1_0}
|
||||||
|
%GLProcsPS10
|
||||||
|
{$ENDIF GL1_0}
|
||||||
|
|
||||||
|
{$IFDEF GL1_1}
|
||||||
|
%GLProcsPS11
|
||||||
|
{$ENDIF GL1_1}
|
||||||
|
|
||||||
|
// -------------------------------------------------------
|
||||||
|
// GL Extensions
|
||||||
|
// -------------------------------------------------------
|
||||||
|
|
||||||
|
{$IFDEF EXTENSIONS}
|
||||||
|
%GLProcsPS10Ext
|
||||||
|
{$ENDIF EXTENSIONS}
|
||||||
|
|
||||||
|
// library dependent extensions
|
||||||
|
|
||||||
|
{$IFDEF SGI_EXTENSIONS}
|
||||||
|
%GLProcsPS10SGI
|
||||||
|
{$ENDIF SGI_EXTENSIONS}
|
||||||
|
|
||||||
|
{$ifdef MESA}
|
||||||
|
%GLProcsPS10Mesa
|
||||||
|
{$endif MESA}
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------
|
||||||
|
// GL 1.2 Functions
|
||||||
|
// -------------------------------------------------------
|
||||||
|
|
||||||
|
{$IFDEF GL1_2}
|
||||||
|
%GLProcsPS12
|
||||||
|
{$ENDIF GL1_2}
|
||||||
|
|
||||||
|
|
||||||
|
// =======================================================
|
||||||
|
// =======================================================
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{BEGIN}{OF INIT}
|
||||||
|
END.
|
99
packages/opengl/build2/glut_linux.tem
Normal file
99
packages/opengl/build2/glut_linux.tem
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
{
|
||||||
|
$Id$
|
||||||
|
|
||||||
|
Translation of the Mesa GLUT headers for FreePascal
|
||||||
|
Linux Version, Copyright (C) 1999 Sebastian Guenther
|
||||||
|
|
||||||
|
|
||||||
|
Mesa 3-D graphics library
|
||||||
|
Version: 3.0
|
||||||
|
Copyright (C) 1995-1998 Brian Paul
|
||||||
|
|
||||||
|
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
|
||||||
|
Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
{$MODE delphi}
|
||||||
|
|
||||||
|
unit GLUT;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses GL;
|
||||||
|
|
||||||
|
function InitGLUTFromLibrary(libname: PChar): Boolean;
|
||||||
|
|
||||||
|
// determines automatically which library to use:
|
||||||
|
function InitGLUT: Boolean;
|
||||||
|
|
||||||
|
|
||||||
|
var
|
||||||
|
GLUTInitialized: Boolean;
|
||||||
|
|
||||||
|
|
||||||
|
%GLUTDeclsIF
|
||||||
|
%GLUTProcsPD
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$LINKLIB Xmu}
|
||||||
|
|
||||||
|
function dlopen(AFile: PChar; mode: LongInt): Pointer; external 'dl';
|
||||||
|
function dlclose(handle: Pointer): LongInt; external 'dl';
|
||||||
|
function dlsym(handle: Pointer; name: PChar): Pointer; external 'dl';
|
||||||
|
|
||||||
|
function LoadLibrary(name: PChar): Pointer;
|
||||||
|
begin
|
||||||
|
Result := dlopen(name, $101 {RTLD_GLOBAL or RTLD_LAZY});
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure FreeLibrary(handle: Pointer);
|
||||||
|
begin
|
||||||
|
dlclose(handle);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetProc(handle: Pointer; name: PChar): Pointer;
|
||||||
|
begin
|
||||||
|
Result := dlsym(handle, name);
|
||||||
|
// if Result = nil then WriteLn('Unresolved: ', name);
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
libGLUT: Pointer;
|
||||||
|
|
||||||
|
function InitGLUTFromLibrary(libname: PChar): Boolean;
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
libGLUT := LoadLibrary(libname);
|
||||||
|
if not Assigned(libGLUT) then exit;
|
||||||
|
|
||||||
|
%GLUTProcsPL
|
||||||
|
|
||||||
|
GLUTInitialized := True;
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function InitGLUT: Boolean;
|
||||||
|
begin
|
||||||
|
Result := InitGLUTFromLibrary('libglut.so.1');
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
finalization
|
||||||
|
if Assigned(libGLUT) then FreeLibrary(libGLUT);
|
||||||
|
end.
|
114
packages/opengl/build2/glut_w32d.tem
Normal file
114
packages/opengl/build2/glut_w32d.tem
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
{$MODE delphi}
|
||||||
|
|
||||||
|
unit GLUT;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses GL;
|
||||||
|
|
||||||
|
{$IFDEF Linux}
|
||||||
|
{$DEFINE gldecl := cdecl}
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF Win32}
|
||||||
|
{$DEFINE gldecl := stdcall}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
function InitGLUTFromLibrary(libname: PChar): Boolean;
|
||||||
|
|
||||||
|
// determines automatically which library to use:
|
||||||
|
function InitGLUT: Boolean;
|
||||||
|
|
||||||
|
|
||||||
|
var
|
||||||
|
GLUTInitialized: Boolean;
|
||||||
|
|
||||||
|
|
||||||
|
%GLUTDeclsIF
|
||||||
|
|
||||||
|
%GLUTProcsPD
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$IFDEF Linux}
|
||||||
|
{$LINKLIB Xmu}
|
||||||
|
type
|
||||||
|
HInstance = LongWord;
|
||||||
|
|
||||||
|
function dlopen(AFile: PChar; mode: LongInt): Pointer; external 'dl';
|
||||||
|
function dlclose(handle: Pointer): LongInt; external 'dl';
|
||||||
|
function dlsym(handle: Pointer; name: PChar): Pointer; external 'dl';
|
||||||
|
|
||||||
|
function LoadLibrary(name: PChar): HInstance;
|
||||||
|
begin
|
||||||
|
Result := LongWord(dlopen(name, $101 {RTLD_GLOBAL or RTLD_LAZY}));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure FreeLibrary(handle: HInstance);
|
||||||
|
begin
|
||||||
|
dlclose(Pointer(handle));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetProcAddress(handle: HInstance; name: PChar): Pointer;
|
||||||
|
begin
|
||||||
|
Result := dlsym(Pointer(handle), name);
|
||||||
|
if Result = nil then WriteLn('Unresolved: ', name);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
{$IFDEF Win32}
|
||||||
|
type
|
||||||
|
HInstance = LongWord;
|
||||||
|
|
||||||
|
function LoadLibrary(name: PChar): HInstance;
|
||||||
|
begin
|
||||||
|
Result := 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure FreeLibrary(handle: HInstance);
|
||||||
|
begin
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetProcAddress(handle: HInstance; name: PChar): Pointer;
|
||||||
|
begin
|
||||||
|
Result := NIL;
|
||||||
|
if Result = nil then WriteLn('Unresolved: ', name);
|
||||||
|
end;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
var
|
||||||
|
libGLUT: HInstance;
|
||||||
|
|
||||||
|
function InitGLUTFromLibrary(libname: PChar): Boolean;
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
libGLUT := LoadLibrary(libname);
|
||||||
|
if libGLUT = 0 then exit;
|
||||||
|
|
||||||
|
%GLUTProcsPL
|
||||||
|
|
||||||
|
GLUTInitialized := True;
|
||||||
|
Result := True;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function InitGLUT: Boolean;
|
||||||
|
begin
|
||||||
|
{$IFDEF Win32}
|
||||||
|
Result := InitGLUTFromLibrary('glut32.dll');
|
||||||
|
{$ELSE}
|
||||||
|
{$IFDEF Linux}
|
||||||
|
Result := InitGLUTFromLibrary('libglut.so');
|
||||||
|
{$ELSE}
|
||||||
|
{$ERROR Unsupported platform}
|
||||||
|
{$ENDIF}
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
finalization
|
||||||
|
if libGLUT <> 0 then FreeLibrary(libGLUT);
|
||||||
|
end.
|
50
packages/opengl/build2/glut_w32s.tem
Normal file
50
packages/opengl/build2/glut_w32s.tem
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
$Id$
|
||||||
|
|
||||||
|
Translation of the GLUT headers for FreePascal
|
||||||
|
Copyright (C) 1999 Sebastian Guenther
|
||||||
|
Version for static linking in Win32 environment by Alexander Stohr.
|
||||||
|
Latest change: 1999-11-13
|
||||||
|
|
||||||
|
Further information:
|
||||||
|
|
||||||
|
GLUT is a powerful toolkit for programming multiplatform OpenGL
|
||||||
|
applications. It was designed by Mark J. Kilgard while working for SGI,
|
||||||
|
he is now working for nVidia.
|
||||||
|
}
|
||||||
|
{ this translation of the c header files is done by Sebastian Guenther 1999 }
|
||||||
|
{ version for static linking for Win32 platforms done by Alexander Stohr 1999 }
|
||||||
|
|
||||||
|
{$MODE delphi}
|
||||||
|
|
||||||
|
{You have to enable Macros (compiler switch "-Sm") for compiling this unit!
|
||||||
|
This is necessary for supporting different platforms with different calling
|
||||||
|
conventions via a single unit.}
|
||||||
|
|
||||||
|
unit GLUT_SL; { version which does statically linking }
|
||||||
|
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses GL_SL;
|
||||||
|
|
||||||
|
{x$DEFINE GLUT_GAME} {enable if you need game mode sub api}
|
||||||
|
|
||||||
|
{$IFDEF Win32}
|
||||||
|
{$DEFINE glut_dll := external 'glut32.dll'}
|
||||||
|
{$DEFINE glut_callback := cdecl}
|
||||||
|
{$ELSE}
|
||||||
|
{$MESSAGE Unsupported platform.}
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
|
|
||||||
|
%GLUTDeclsIF
|
||||||
|
|
||||||
|
%GLUTProcsPS
|
||||||
|
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
|
||||||
|
{begin{of init}
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user