In Pascal, the pointer is implicit, since a bitMap structure is greater than 4 bytes in size and the Pascal compiler creates a pointer for any data structure greater than 4 bytes. This support, however, does not come without a cost. CopyBits needs a method to distinguish between the two parameters. As mentioned above, the top bit of rowBytes distinguishes between pixMaps and bitMaps . While this bit allows pixMaps to be passed in to CopyBits, the size of rowBytes is diminished.
All design choices have trade-offs.
In designing Color QuickDraw, certain rules were set up to provide compatibility with the new features. Unfortunately, portPixMap is a handle whereas portBits is a BitMap . Tricky type-casting, however, allows one to pass in a cGrafPort's portPixMap field, as the following examples show. You must coerce the cGrafPtr in to a grafPtr in order to use the portBits field. CopyBits is faced with a major headache if you think about it.