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.