tcc 16 for in mystery, connected to setdos and/or else clause

Jan 16, 2011
12
0
Yeah, I know: another crazy user :-). Please bear with me.

This btm file ...

setlocal
:: setdos /c%=@

for %k in (%1) do (

iff "foo" == "foo" then
echo if says "%k"
else
echo else says "%k"
endiff
)
endlocal

... works as expected in TCC 16, producing this output:

TCC 16.03.55 x64 Windows 7 [Version 6.1.7601]
Copyright 2014 JP Software Inc. All Rights Reserved
Registered to David Habermehl - 1 System License

[C:\Command\TCMD16x64]foo.btm *.flac
setlocal
for %k in (%1) do ( iff "foo" == "foo" then & echo if says "%k" & else & echo else says "%k" & endiff )
if says "01.flac"
if says "02.flac"
if says "03.flac"
if says "04.flac"
if says "05.flac"
if says "06.flac"
if says "07.flac"
if says "08.flac"
if says "09.flac"
if says "10.flac"
if says "11.flac"
if says "12.flac"
if says "13.flac"
if says "14.flac"
if says "15.flac"
if says "16.flac"
if says "17.flac"
if says "18.flac"
if says "19.flac"
endlocal

[C:\Command\TCMD16x64]​

But when I uncomment the setdos line, the for loop terminates after just one iteration:

TCC 16.03.55 x64 Windows 7 [Version 6.1.7601]
Copyright 2014 JP Software Inc. All Rights Reserved
Registered to David Habermehl - 1 System License

[C:\Command\TCMD16x64]foo.btm *.flac
setlocal
setdos /c^@
for %k in (%1) do ( iff "foo" == "foo" then @ echo if says "%k" @ else @ echo else says "%k" @ endiff )
if says "01.flac"

[C:\Command\TCMD16x64]​

Question and possibly-useful data points:
  1. The first output shows that none of the filenames contain @, so why should the setdos command have an impact?
  2. The btm file with the uncommented setdos line behaves as expected with TCC 12.10.67 x64.
  3. The btm file with the uncommented setdos line behaves as expected with TCC 16.03.55 x64 if I remove the else clause!

TCC 16.03.55 x64 Windows 7 [Version 6.1.7601]
Copyright 2014 JP Software Inc. All Rights Reserved
Registered to David Habermehl - 1 System License

[C:\Command\TCMD16x64]foo.btm *.flac
setlocal
setdos /c^@
for %k in (%1) do ( iff "foo" == "foo" then @ echo if says "%k" )
if says "01.flac"
if says "02.flac"
if says "03.flac"
if says "04.flac"
if says "05.flac"
if says "06.flac"
if says "07.flac"
if says "08.flac"
if says "09.flac"
if says "10.flac"
if says "11.flac"
if says "12.flac"
if says "13.flac"
if says "14.flac"
if says "15.flac"
if says "16.flac"
if says "17.flac"
if says "18.flac"
if says "19.flac"
endlocal

[C:\Command\TCMD16x64]​

Any help will be very much appreciated.

Thanks,

David Habermehl
 

Attachments

May 20, 2008
10,634
81
Syracuse, NY, USA
It's OK here.
Code:
v:\> type dumb.btm
echo on
setlocal
setdos /c%=@

for %k in (%1) do (
iff "foo" == "foo" then
  echo if says "%k"
else
  echo else says "%k"
endiff
)
endlocal
v:\> dumb.btm *.btm
setlocal
setdos /c^@
for %k in (%1) do ( iff "foo" == "foo" then @ echo if says "%k" @ else @ echo else says "%k" @ endiff )
if says "args.btm"
if says "args.u.btm"
if says "avtemp.btm"
if says "avtempee.btm"
if says "dumb.btm"
if says "dumb2.btm"
if says "escape.btm"
if says "iconshow.btm"
if says "ifftest.btm"
if says "plink.btm"
if says "regextest.btm"
if says "test.btm"
if says "uc.btm"
if says "uni.btm"
if says "w32tmparams.btm"
if says "w32tmparams17.btm"
if says "w32tmparamsx.btm"
endlocal