The use of a zero flag
Francois Gouget
fgouget at free.fr
Thu Jan 13 09:14:36 CST 2005
On Thu, 13 Jan 2005, Paul Vriens wrote:
[...]
> how do you cater for the following in your one-liner:
>
> include/accctrl.h:#define ACTRL_RESERVED 0x00000000
> include/accctrl.h:#define ACTRL_DS_OPEN ACTRL_RESERVED
>
> good luck :-)
The previous script doesn't. Handling this is a bit more tricky, mostly
because of sed's restrictions on regular expressions.
Fortunately perl is there to save the day!
There you go:
new=`perl -n -e 'chomp;if (s/^ *# *define *([a-zA-Z_][a-zA-Z0-9_]*) *0(x0+L?)? *\$/\$1/) {print;print " ";}' include/*.h`
while [ -n "$new" ]
do
new=`echo "$new" | sed -e 's/ $//' -e 's/ NULL / /' -e 's/ /|/g'`
if [ -z "$regexp" ]
then
regexp="$new"
else
regexp="$regexp|$new"
fi
new=`perl -n -e "chomp;if (s/^ *# *define *([a-zA-Z_][a-zA-Z0-9_]*) *($new) *\\$/\\$1/) {print;print ' ';}" include/*.h`
echo "Synonyms: $new"
done
find . -name "*.[chly]" -print0 | xargs -0 perl -n -e "if (eof) {close ARGV;};if (/& *($regexp)(?![a-zA-Z0-9_]| ==)/ or /($regexp) *&[^&]/) {print \"\$ARGV:\$.: \$_\";}"
Hopefully it won't be too line wrapped.
And here's the result, with no false positives this time, thanks to
perl's negative lookhead.
./dlls/comctl32/listview.c:6297: if (nColumn == 0 || lpColumn->fmt & LVCFMT_LEFT)
./dlls/comctl32/pager.c:844: if (!(dwStyle & PGS_HORZ) && !(dwStyle & PGS_VERT))
./dlls/commdlg/filedlgbrowser.c:320: (wFlags & SBSP_ABSOLUTE) ? "SBSP_ABSOLUTE" : "SBPS_????");
./dlls/dplayx/dplay.c:1164: if( ( dwFlags & DPSET_REMOTE ) &&
./dlls/dplayx/dplay.c:1180: if( dwFlags & DPSET_REMOTE )
./dlls/dplayx/dplay.c:1363: if( ( dwFlags & DPSET_REMOTE ) &&
./dlls/dplayx/dplay.c:1379: if( dwFlags & DPSET_REMOTE )
./dlls/dplayx/dplay.c:2430: if( dwFlags & DPSET_REMOTE )
./dlls/dplayx/dplay.c:2635: if( dwFlags & DPSET_REMOTE )
./dlls/dplayx/dplay.c:3061: if( dwFlags & DPSET_REMOTE )
./dlls/dplayx/dplay.c:3074: if( dwFlags & DPSET_REMOTE )
./dlls/dplayx/dplay.c:3159: if( dwFlags & DPSET_REMOTE )
./dlls/dplayx/dplay.c:3169: if( dwFlags & DPSET_REMOTE )
./dlls/winmm/mciseq/mcimidi.c:1359: if (lpParms->dwAudio & MCI_SET_AUDIO_ALL)
./dlls/winmm/mciwave/mciwave.c:1233: if (lpParms->dwAudio & MCI_SET_AUDIO_ALL)
> But seriously what would be the best way to fix up dplayx.c?
Not sure, maybe:
if (dwFlags == DPSET_REMOTE)
or
if (!dwFlags)
but I find the latter a bit less clear.
--
Francois Gouget fgouget at free.fr http://fgouget.free.fr/
I haven't lost my mind, it's backed up on tape around here somewhere...
More information about the wine-devel
mailing list