deberias usar recursividad algo asi
Código Delphi
[-]
procedure Parse_token(tok : string; destino : TStringList);
var
nombre_archivo : string;
begin
if Pos('INCLUDE',tok) <> 0 then
begin
nombre_archivo := .... leer_archivo(nombre_archivo,destino);
end
else
destino.Add(tok);
end;
function leer_archivo(s : string; destino : TStringList) : boolean;
var
st : TStringList;
i, r : longint;
tok : string;
begin
st := TStringList.Create;
st.LoadFromFile(s);
...
r := st.Count;
for i := 0 to r - 1 do
begin
tok := st[i];
parse_token(tok,destino);
end;
st.Free;
end;
procedure Iniciar;
var
dest : TStringList;
begin
dest := TStringList.Create;
if OpenDialog1.Execute then
begin
Leer_archivo(OpenDialog1.FileName,dest);
if SaveDialog1.Execute then
dest.SaveToFile(SaveDialog1.Filename);
end;
dest.Free;
end;