summaryrefslogtreecommitdiff
path: root/closures/compiler/gendef.pas
diff options
context:
space:
mode:
Diffstat (limited to 'closures/compiler/gendef.pas')
-rw-r--r--closures/compiler/gendef.pas163
1 files changed, 163 insertions, 0 deletions
diff --git a/closures/compiler/gendef.pas b/closures/compiler/gendef.pas
new file mode 100644
index 0000000000..65e64c353e
--- /dev/null
+++ b/closures/compiler/gendef.pas
@@ -0,0 +1,163 @@
+{
+ Copyright (c) 1998-2002 by Florian Klaempfl
+
+ Generation of a .def file for needed for Os2/Win32
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ 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. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ ****************************************************************************
+}
+unit gendef;
+
+{$i fpcdefs.inc}
+
+interface
+uses
+ cclasses;
+
+type
+ tdeffile=class
+ fname : string;
+ constructor create(const fn:string);
+ destructor destroy;override;
+ procedure addexport(const s:string);
+ procedure addimport(const s:string);
+ procedure writefile;
+ function empty : boolean;
+ private
+ is_empty : boolean;
+ WrittenOnDisk : boolean;
+ exportlist,
+ importlist : TCmdStrList;
+ end;
+
+var
+ deffile : tdeffile;
+
+
+implementation
+
+uses
+ SysUtils,
+ systems,cutils,globtype,globals;
+
+{******************************************************************************
+ TDefFile
+******************************************************************************}
+
+constructor tdeffile.create(const fn:string);
+begin
+ fname:=fn;
+ WrittenOnDisk:=false;
+ is_empty:=true;
+ importlist:=TCmdStrList.Create;
+ exportlist:=TCmdStrList.Create;
+end;
+
+
+destructor tdeffile.destroy;
+begin
+ if WrittenOnDisk and
+ not(cs_link_nolink in current_settings.globalswitches) then
+ DeleteFile(FName);
+ importlist.Free;
+ exportlist.Free;
+end;
+
+
+
+procedure tdeffile.addexport(const s:string);
+begin
+ exportlist.insert(s);
+ is_empty:=false;
+end;
+
+
+procedure tdeffile.addimport(const s:string);
+begin
+ importlist.insert(s);
+ is_empty:=false;
+end;
+
+
+function tdeffile.empty : boolean;
+begin
+ empty:=is_empty or DescriptionSetExplicity;
+end;
+
+
+procedure tdeffile.writefile;
+var
+ t : text;
+begin
+ If WrittenOnDisk then
+ Exit;
+{ open file }
+ assign(t,fname);
+ {$push}{$I-}
+ rewrite(t);
+ {$pop}
+ if ioresult<>0 then
+ exit;
+ case target_info.system of
+ system_i386_Os2, system_i386_emx:
+ begin
+ write(t,'NAME '+ChangeFileExt(inputfilename,''));
+ if usewindowapi then
+ write(t,' WINDOWAPI');
+ writeln(t,'');
+ writeln(t,'PROTMODE');
+ writeln(t,'DESCRIPTION '+''''+description+'''');
+ writeln(t,'DATA'#9'MULTIPLE');
+ writeln(t,'STACKSIZE'#9+tostr(stacksize));
+ writeln(t,'HEAPSIZE'#9+tostr(heapsize));
+ end;
+ system_i386_win32,
+ system_x86_64_win64,
+ system_ia64_win64,
+ system_arm_wince,
+ system_i386_wince,
+ system_i386_wdosx :
+ begin
+ if description<>'' then
+ writeln(t,'DESCRIPTION '+''''+description+'''');
+ if dllversion<>'' then
+ writeln(t,'VERSION '+dllversion);
+ end;
+ end;
+
+{write imports}
+ if not importlist.empty then
+ begin
+ writeln(t,'');
+ writeln(t,'IMPORTS');
+ while not importlist.empty do
+ writeln(t,#9+importlist.getfirst);
+ end;
+
+{write exports}
+ if not exportlist.empty then
+ begin
+ writeln(t,'');
+ writeln(t,'EXPORTS');
+ while not exportlist.empty do
+ writeln(t,#9+exportlist.getfirst);
+ end;
+
+ close(t);
+ WrittenOnDisk:=true;
+end;
+
+end.