{****************************************************************************
Copyright (c) 1993,96 by Florian Klämpfl
****************************************************************************}
unit asmbl;
interface
uses
globals,scanner,asmgen,hcodegen,symtable,tree;
function assemble : ptree;
implementation
function assemble : ptree;
var
s,hs : string;
c : char;
ende : boolean;
sym : psym;
code : pasmlist;
begin
ende:=false;
s:='';
c:=asmgetchar;
code:=new(pasmlist,init);
while not(ende) do
begin
case c of
'A'..'Z','a'..'z','_' : begin
hs:='';
while ((ord(c)>=ord('A')) and (ord(c)<=ord('Z')))
or ((ord(c)>=ord('a')) and (ord(c)<=ord('z')))
or ((ord(c)>=ord('0')) and (ord(c)<=ord('9')))
or (c='_') do
begin
inc(byte(hs[0]));
hs[length(hs)]:=c;
{
hs:=hs+c;
}
c:=asmgetchar;
end;
if upper(hs)='END' then ende:=true
else s:=s+hs;
end;
#10 : begin
code^.concat(gennasmrec(DIRECT,S_NO,s));
s:='';
c:=asmgetchar;
write_line;
end;
{'~' : begin
hs:='';
c:=asmgetchar;
while c<>'~' do
begin
hs:=hs+c;
c:=asmgetchar;
end;
c:=asmgetchar;
end; }
#13 : c:=asmgetchar;
#26 : fatalerror(endoffile);
else
begin
inc(byte(s[0]));
s[length(s)]:=c;
c:=asmgetchar;
end;
end;
end;
code^.insert(gennasmrec(DIRECT,S_NO,s));
assemble:=genasmnode(code);
end;
end.