summaryrefslogtreecommitdiff
path: root/compiler/rabase.pas
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rabase.pas')
-rw-r--r--compiler/rabase.pas105
1 files changed, 105 insertions, 0 deletions
diff --git a/compiler/rabase.pas b/compiler/rabase.pas
new file mode 100644
index 0000000000..4cca4b3660
--- /dev/null
+++ b/compiler/rabase.pas
@@ -0,0 +1,105 @@
+{
+ Copyright (c) 1998-2003 by Peter Vreman, Florian Klaempfl and Carl Eric Codere
+
+ Basic stuff for assembler readers
+
+ 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 rabase;
+
+{$i fpcdefs.inc}
+
+ interface
+
+ uses
+ cclasses,
+ systems;
+
+ type
+ tbaseasmreader = class
+ constructor create;virtual;
+ { the real return type is taasmoutput, but this would introduce too much unit circles }
+ function Assemble: tlinkedlist;virtual;abstract;
+ end;
+ tcbaseasmreader = class of tbaseasmreader;
+
+ pasmmodeinfo = ^tasmmodeinfo;
+ tasmmodeinfo = record
+ id : tasmmode;
+ idtxt : string[12];
+ casmreader : tcbaseasmreader;
+ end;
+
+ var
+ asmmodeinfos : array[tasmmode] of pasmmodeinfo;
+
+ function SetAsmReadMode(const s:string;var t:tasmmode):boolean;
+ procedure RegisterAsmMode(const r:tasmmodeinfo);
+
+ implementation
+
+ uses
+ cutils;
+
+
+ procedure RegisterAsmmode(const r:tasmmodeinfo);
+ var
+ t : tasmmode;
+ begin
+ t:=r.id;
+ if assigned(asmmodeinfos[t]) then
+ writeln('Warning: Asmmode is already registered!')
+ else
+ Getmem(asmmodeinfos[t],sizeof(tasmmodeinfo));
+ asmmodeinfos[t]^:=r;
+ end;
+
+
+ function SetAsmReadMode(const s:string;var t:tasmmode):boolean;
+ var
+ hs : string;
+ ht : tasmmode;
+ begin
+ result:=false;
+ { this should be case insensitive !! PM }
+ hs:=upper(s);
+ for ht:=low(tasmmode) to high(tasmmode) do
+ if assigned(asmmodeinfos[ht]) and
+ (asmmodeinfos[ht]^.idtxt=hs) then
+ begin
+ t:=asmmodeinfos[ht]^.id;
+ result:=true;
+ end;
+ end;
+
+
+ constructor tbaseasmreader.create;
+ begin
+ inherited create;
+ end;
+
+var
+ asmmode : tasmmode;
+
+finalization
+ for asmmode:=low(tasmmode) to high(tasmmode) do
+ if assigned(asmmodeinfos[asmmode]) then
+ begin
+ freemem(asmmodeinfos[asmmode],sizeof(tasmmodeinfo));
+ asmmodeinfos[asmmode]:=nil;
+ end;
+end.