```A handy calculator for IP addresses, subnet masks, et cetera.
Some examples:
dq 3com.com			## good for numericizing hostnames
192.136.32.249
dq 3com.com - 13		## arithmetic works; note spacing
192.136.32.236
dq www.m-w.com		## '-' is part of this name
63.240.197.83
dq 0-256			## error; looks like hostname; try '0 - 256'
dq www.xerox.com Hi 13	## high-order bits
204.64.0.0
dq www.xerox.com Lo 13	## operators must be capitalized
0.0.30.98
dq 'Hi 24 Xor Lo 15; Swap Last, Last+1' ## Last == result of previous step
255.255.128.255			## ';' separates results by newline
255.128.255.255 255.129.0.0	## ',' separates results by space
dq -32 / 8, -32 Rsh 3		## Div and Mul are signed; shifts are unsigned
255.255.255.252 31.255.255.252
echo Card 1.1.1.1 | dq	## read from stdin;  Card counts bits
4
dq Scalar 255.255.255.0	## Scalar and Card print integers,
dq 'Scalar 0 -256, Card 0 -256, Card(0 -256)' ## Scalar binds loosely;
-256 255.255.255.0 24		##   other unary operators bind tightly
dq Not 7, 1.1.1.1 Not 7	## unary Not, binary Not
255.255.255.248 1.1.1.0

Symbol:  ;  ,  ()  +   -   *   /   %   &   |   ^   ~   <<  >>
Word:                      Mul Div Mod And Or  Xor Not Lsh Rsh
Note:    !     !!  B   UB  B!  B   B   B!  B!  B   UB! B!  B!

Word:    Last Hi  Lo  Swap Card Scalar
Note:         UB  UB  U    U    U
where U ==> unary operator, B ==> binary infix operator.
! ==> symbol means something to the shell, so you have to quote it.
All Boolean operators are bitwise.
Written using bison/flex (yacc/lex) on Linux;  should run on any Unix machine