# emulate a C preprocessor (well, sort of) :TOP y/ / / s/ */ /g s%/\*.*\*/%% /\/\*/{ :COMMENT /\*\//!{ s/.*// N bCOMMENT } s%^.*\*/%% bTOP } /^ *# *ifdef/{ s/^ *# *ifdef // b } /^ *# *ifndef/{ s/^ *# *ifndef // b } /^ *# *if.*defined/{ s/^ *# *if // :IF /^defined/!{ :NUKE s/^.// /^defined/!bNUKE } h /^defined/s/^defined *( *\([A-Za-z0-9_]*\) *).*/\1/p g /^defined/s/^defined *( *\([[A-Za-z0-9_]*\) *)// /defined/!{ d b } bIF } d