home *** CD-ROM | disk | FTP | other *** search
- /* Macros.h A collection of useful macros by Alexander M Kasprzyk and Aaron Davidson.
- If you encounter any problems with these macros, please send an eMail to:
- alex@kasprzyk.demon.co.uk
- */
-
- #ifndef _AppMacros_
- #define _AppMacros_
-
- #define _StrictFunctions_ 0 // 1 = Strict Functions; 0 = Macros
-
- #if _StrictFunctions_
- #define MGetWRefCon( win ) GetWRefCon( win )
- #define MSetWRefCon( win, data ) SetWRefCon( win, data )
- #define MGetGWorldPixMap( wld ) GetGWorldPixMap( wld )
- #else
- #define MGetWRefCon( win ) ((WindowPeek)(win))->refCon
- #define MSetWRefCon( win, data ) ((WindowPeek)(win))->refCon = data
- #define MGetGWorldPixMap( wld ) (wld)->portPixMap
- #endif
-
- #define MAbs( num ) ((num) < 0 ? -(num) : (num))
- #define MAddPt( adPt, dstPt ) (dstPt).h += (adPt).h; (dstPt).v += (adPt).v
- #define MBitAnd( v1, v2 ) ((v1) & (v2))
- #define MBitClear( val, bitNum ) (val) &= ~(0x1 << (bitNum))
- #define MBitNot( val ) ~(val)
- #define MBitOr( v1, v2 ) ((v1) | (v2))
- #define MBitSet( val, bitNum ) (val) |= 0x1 << (bitNum)
- #define MBitShift( val, count ) (count) < 0 ? (val) >> (-(count)) : (val) << (count)
- #define MBitTst( val, bitNum ) (((val) >> (bitNum)) & 0x1)
- #define MBitXor( v1, v2 ) (v1) ^ (v2)
- #define MCountDITL( dlog ) **((short **)((DialogPeek)dlog)->items) + 1
- #define MCTSeedSmash( wrld ) (*((*MGetGWorldPixMap((wrld)))->pmTable))->ctSeed = (*((*((*(GetGDevice()))->gdPMap))->pmTable))->ctSeed
- #define MEmptyRect( rct ) ((rct).bottom <= (rct).top || (rct).right <= (rct).left)
- #define MEqualRect( r1, r2 ) ((r1).left == (r2).left && (r1).right == (r2).right && (r1).top == (r2).top && (r1).bottom == (r2).bottom)
- #define MGetEntryColor( plt, entry, rgb ) rgb = (**(plt)).pmInfo[entry].ciRGB
- #define MGetEntryUsage( plt, entry, usg, tol ) usg = (**(plt)).pmInfo[entry].ciUsage; tol = (**(plt)).pmInfo[entry].ciTolerance
- #define MGetPt( pt, dh, dv ) dh = (pt).h; dv = (pt).v
- #define MGetRect( rct, t, l, b, r ) t = (rct).top; l = (rct).left; b = (rct).bottom; r = (rct).right
- #define MGetRectHeight( r ) ((r).bottom - (r).top)
- #define MGetRectWidth( r ) ((r).right - (r).left)
- #define MGetRowBytes( wrld ) (**MGetGWorldPixMap( (wrld) )).rowBytes & 0x3FFF
- #define MGetWKind( win ) ((WindowPeek)(win))->windowKind
- #define MGetWTitleHandle( win ) ((WindowPeek)(win))->titleHandle
- #define MHex2Perc( hx ) (hx) / 0x028F
- #define MHiWord( val ) (val) >> 16
- #define MHiWordChar( val ) (val) >> 4
- #define MHiWordShort( val ) (val) >> 8
- #define MInsetRect( rct, dh, dv) (rct).left += dh; (rct).top += dv; (rct).right -= dh; (rct).bottom -= dv
- #define MInvertBoolean( b ) (b) = !(b)
- #define MIsWVisible( win ) ((WindowPeek)(win))->visible
- #define MLoWord( val ) (val) & 0x0000FFFF
- #define MLoWordChar( val ) (val) & 0x0F
- #define MLoWordShort( val ) (val) & 0x00FF
- #define MMapPt( pt, srcRct, dstRct ) (pt).h = ((pt).h - (srcRct).left + 1) * (((dstRct).right - (dstRct).left + 1) / ((srcRct).right = (srcRct).left + 1)) + (dstRct).left + 1; (pt).v = ((pt).v - (srcRct).top + 1) * (((dstRct).bottom - (dstRct).top + 1) / ((srcRct).bottom = (srcRct).top + 1))
- #define MMaxNum( num1, num2 ) ((num1) < (num2) ? (num2) : (num1))
- #define MMidPoint( pt1, pt2, mid ) (mid).h = (pt1).h + ((pt2).h - (pt1).h)/2; (mid).v = (pt1).v + ((pt2).v - (pt1).v)/2
- #define MMinNum( num1, num2 ) ((num1) > (num2) ? (num2) : (num1))
- #define MOffsetRect( rct, dh, dv ) (rct).left += dh; (rct).right += dh; (rct).top += dv; (rct).bottom += dv
- #define MPerc2Hex( pct ) (unsigned short)((0xFFFF * (unsigned long)(pct)) / 0x64)
- #define MPercentage( value, total ) ((value) / (total)) * 100
- #define MPointInRect( x, y, rct ) ((x > (rct).left) && (x < (rct).right) && (y > (rct).top) && (y < (rct).bottom))
- #define MPtInRect( pt, r ) (((pt).h >= (r).left) && ((pt).h <= (r).right) && ((pt).v >= (r).top) && ((pt).v <= (r).bottom))
- #define MRandomRange( range ) MAbs( ((long)Random() * (range) ) / 32768) + 1
- #define MRandomPerc( pct ) (Random() <= MPerc2Hex( pct ))
- #define MScalePt( pt, srcRct, dstRct ) (pt).h *= (((dstRct).right - (dstRct).left) / ((srcRct).right - (srcRct).left)); (pt).v *= (((dstRct).bottom - (dstRct).top) / ((srcRct).bottom - (srcRct).top))
- #define MSetPt( pt, dh, dv ) (pt).h = dh; (pt).v = dv
- #define MSetRect( rct, l, t, r, b ) (rct).left = l; (rct).top = t; (rct).right = r; (rct).bottom = b
- #define MSetRGBColor( col, r, g, b ) (col).red = r; (col).green = g; (col).blue = b
- #define MStringCopy( src, dst ) BlockMove( src, (dst), src[0] + 1 )
- #define MStringToOSType( str, ty ) ty = (OSType)(str[1])
- #define MSubPt( sbPt, dstPt ) (dstPt).h -= (sbPt).h; (dstPt).v -= (sbPt).v
- #define MTESelectionLength( teHdl ) (**(teHdl)).selEnd - (**(teHdl)).selStart
-
- // the following are a set of macros to set an RGBColor to the same values as the standard eight QD colour constants
- #define MGetBlackColor( col ) (col).red = (col).green = (col).blue = 0
- #define MGetYellowColor( col ) (col).red = 0xFC00; (col).green = 0xF37D; (col).blue = 0x052F
- #define MGetMagentaColor( col ) (col).red = 0xF2D7; (col).green = 0x0856; (col).blue = 0x84EC
- #define MGetRedColor( col ) (col).red = 0xDD6B; (col).green = 0x08C2; (col).blue = 0x06A2
- #define MGetCyanColor( col ) (col).red = 0x0241; (col).green = 0xAB54; (col).blue = 0xEAFF
- #define MGetGreenColor( col ) (col).red = 0; (col).green = 0x64AF; (col).blue = 0x11B0
- #define MGetBlueColor( col ) (col).red = (col).green = 0; (col).blue = 0xD400
- #define MGetWhiteColor( col ) (col).red = (col).green = (col).blue = 0xFFFF
-
- #endif