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