summaryrefslogtreecommitdiff
path: root/systemunit.pas
diff options
context:
space:
mode:
Diffstat (limited to 'systemunit.pas')
-rw-r--r--systemunit.pas25
1 files changed, 18 insertions, 7 deletions
diff --git a/systemunit.pas b/systemunit.pas
index 408fc19..461a118 100644
--- a/systemunit.pas
+++ b/systemunit.pas
@@ -194,14 +194,24 @@ end;
procedure shellExpand(var sa: tMyStringList);
var
- start,ende,s: string;
+ start,ende,s,original,praefix: string;
i,j,ebene,iStart,iStopp,insOff: longint;
begin
i:=0;
- while i<sa.count do
- if pos('{',sa[i])>0 then begin
- s:=sa[i];
- start:=erstesArgument(s,'{',false);
+ while i<sa.count do begin
+ original:=sa[i];
+ s:=original;
+ praefix:='';
+ while pos('{',s+'{') > pos('''',s+'''') do begin
+ j:=pos('''',s+'''');
+ praefix:=praefix + leftStr(s,j);
+ delete(s,1,j);
+ j:=pos('''',s+'''');
+ praefix:=praefix + leftStr(s,j);
+ delete(s,1,j);
+ end;
+ if pos('{',s)>0 then begin
+ start:=praefix+erstesArgument(s,'{',false);
j:=1;
ebene:=0;
while (j<=length(s)) and ((s[j]<>'}') or (ebene>0)) do begin
@@ -212,7 +222,7 @@ begin
inc(j);
end;
if (ebene<>0) or (j>length(s)) then
- fehler('Geschweifte Klammern sind in '''+sa[i]+''' nicht ausgewogen!');
+ fehler('Geschweifte Klammern sind in '''+original+''' nicht ausgewogen!');
ende:=rightStr(s,length(s)-j);
s:=leftStr(s,j-1)+',';
@@ -230,7 +240,7 @@ begin
'.':
if (ebene=0) and (copy(s,j,2)='..') then begin
if iStart<>low(longint) then
- fehler('''..'' darf nicht mehrmals hintereinander auftauchen - in '''+sa[i]+''' ist das aber der Fall!');
+ fehler('''..'' darf nicht mehrmals hintereinander auftauchen - in '''+original+''' ist das aber der Fall!');
iStart:=strToInt(trim(leftStr(s,j-1)));
delete(s,1,j+1);
j:=1;
@@ -262,6 +272,7 @@ begin
end
else
inc(i);
+ end;
for i:=0 to sa.count-1 do begin
if leftStr(sa[i],1)<>'~' then
continue;