TABLE OF CONTENTS graphics.library/AddAnimOb graphics.library/AddBob graphics.library/AddFont graphics.library/AddVSprite graphics.library/AllocBitMap graphics.library/AllocDBufInfo graphics.library/AllocRaster graphics.library/AllocSpriteDataA graphics.library/AndRectRegion graphics.library/AndRegionRegion graphics.library/Animate graphics.library/AreaCircle graphics.library/AreaDraw graphics.library/AreaEllipse graphics.library/AreaEnd graphics.library/AreaMove graphics.library/AskFont graphics.library/AskSoftStyle graphics.library/AttachPalExtra graphics.library/AttemptLockLayerRom graphics.library/BestModeIDA graphics.library/BitMapScale graphics.library/BltBitMap graphics.library/BltBitMapRastPort graphics.library/BltClear graphics.library/BltMaskBitMapRastPort graphics.library/BltPattern graphics.library/BltTemplate graphics.library/CalcIVG graphics.library/CBump graphics.library/CEND graphics.library/ChangeExtSpriteA graphics.library/ChangeSprite graphics.library/ChangeVPBitMap graphics.library/CINIT graphics.library/ClearEOL graphics.library/ClearRectRegion graphics.library/ClearRegion graphics.library/ClearScreen graphics.library/ClipBlit graphics.library/CloseFont graphics.library/CloseMonitor graphics.library/CMOVE graphics.library/CoerceMode graphics.library/CopySBitMap graphics.library/CWAIT graphics.library/DisownBlitter graphics.library/DisposeRegion graphics.library/DoCollision graphics.library/Draw graphics.library/DrawEllipse graphics.library/DrawGList graphics.library/EraseRect graphics.library/ExtendFont graphics.library/FindColor graphics.library/FindDisplayInfo graphics.library/Flood graphics.library/FontExtent graphics.library/FreeBitMap graphics.library/FreeColorMap graphics.library/FreeCopList graphics.library/FreeCprList graphics.library/FreeDBufInfo graphics.library/FreeGBuffers graphics.library/FreeRaster graphics.library/FreeSprite graphics.library/FreeSpriteData graphics.library/FreeVPortCopLists graphics.library/GetAPen graphics.library/GetBitMapAttr graphics.library/GetBPen graphics.library/GetColorMap graphics.library/GetDisplayInfoData graphics.library/GetDrMd graphics.library/GetExtSpriteA graphics.library/GetGBuffers graphics.library/GetOPen graphics.library/GetRGB32 graphics.library/GetRGB4 graphics.library/GetRPAttrA graphics.library/GetSprite graphics.library/GetVPModeID graphics.library/GfxAssociate graphics.library/GfxFree graphics.library/GfxLookUP graphics.library/GfxNew graphics.library/InitArea graphics.library/InitBitMap graphics.library/InitGels graphics.library/InitGMasks graphics.library/InitMasks graphics.library/InitRastPort graphics.library/InitTmpRas graphics.library/InitView graphics.library/InitVPort graphics.library/LoadRGB32 graphics.library/LoadRGB4 graphics.library/LoadView graphics.library/LockLayerRom graphics.library/MakeVPort graphics.library/ModeNotAvailable graphics.library/Move graphics.library/MoveSprite graphics.library/MrgCop graphics.library/NewRegion graphics.library/NextDisplayInfo graphics.library/ObtainBestPenA graphics.library/ObtainPen graphics.library/OpenFont graphics.library/OpenMonitor graphics.library/OrRectRegion graphics.library/OrRegionRegion graphics.library/OwnBlitter graphics.library/PolyDraw graphics.library/QBlit graphics.library/QBSBlit graphics.library/ReadPixel graphics.library/ReadPixelArray8 graphics.library/ReadPixelLine8 graphics.library/RectFill graphics.library/ReleasePen graphics.library/RemBob graphics.library/RemFont graphics.library/RemIBob graphics.library/RemVSprite graphics.library/ScalerDiv graphics.library/ScrollRaster graphics.library/ScrollRasterBF graphics.library/ScrollVPort graphics.library/SetABPenDrMd graphics.library/SetAPen graphics.library/SetBPen graphics.library/SetChipRev graphics.library/SetCollision graphics.library/SetDrMd graphics.library/SetFont graphics.library/SetMaxPen graphics.library/SetOPen graphics.library/SetOutlinePen graphics.library/SetRast graphics.library/SetRGB32 graphics.library/SetRGB32CM graphics.library/SetRGB4 graphics.library/SetRGB4CM graphics.library/SetRPAttrA graphics.library/SetSoftStyle graphics.library/SetWriteMask graphics.library/SortGList graphics.library/StripFont graphics.library/SyncSBitMap graphics.library/Text graphics.library/TextExtent graphics.library/TextFit graphics.library/TextLength graphics.library/UnlockLayerRom graphics.library/VBeamPos graphics.library/VideoControl graphics.library/WaitBlit graphics.library/WaitBOVP graphics.library/WaitTOF graphics.library/WriteChunkyPixels graphics.library/WritePixel graphics.library/WritePixelArray8 graphics.library/WritePixelLine8 graphics.library/XorRectRegion graphics.library/XorRegionRegion graphics.library/AddAnimOb graphics.library/AddAnimOb NAME AddAnimOb -- Add an AnimOb to the linked list of AnimObs. SYNOPSIS AddAnimOb(anOb, anKey, rp) A0 A1 A2 void AddAnimOb(struct AnimOb *,struct AnimOb **, struct RastPort *); FUNCTION Links this AnimOb into the current list pointed to by animKey. Initializes all the Timers of the AnimOb's components. Calls AddBob with each component's Bob. rp->GelsInfo must point to an initialized GelsInfo structure. INPUTS anOb = pointer to the AnimOb structure to be added to the list anKey = address of a pointer to the first AnimOb in the list (anKey = NULL if there are no AnimObs in the list so far) rp = pointer to a valid RastPort RESULT BUGS SEE ALSO Animate() graphics/rastport.h graphics/gels.h graphics.library/AddBob graphics.library/AddBob NAME AddBob -- Adds a Bob to current gel list. SYNOPSIS AddBob(Bob, rp) A0 A1 void AddBob(struct Bob *, struct RastPort *); FUNCTION Sets up the system Bob flags, then links this gel into the list via AddVSprite. INPUTS Bob = pointer to the Bob structure to be added to the gel list rp = pointer to a RastPort structure RESULT BUGS SEE ALSO InitGels() AddVSprite() graphics/gels.h graphics/rastport.h graphics.library/AddFont graphics.library/AddFont NAME AddFont -- add a font to the system list SYNOPSIS AddFont(textFont) A1 void AddFont(struct TextFont *); FUNCTION This function adds the text font to the system, making it available for use by any application. The font added must be in public memory, and remain until successfully removed. INPUTS textFont - a TextFont structure in public ram. RESULT NOTES This function will set the tf_Accessors to 0. BUGS SEE ALSO SetFont() RemFont() graphics/text.h graphics.library/AddVSprite graphics.library/AddVSprite NAME AddVSprite -- Add a VSprite to the current gel list. SYNOPSIS AddVSprite(vs, rp) A0 A1 void AddVSprite(struct VSprite *, struct RastPort *); FUNCTION Sets up the system VSprite flags Links this VSprite into the current gel list using its Y,X INPUTS vs = pointer to the VSprite structure to be added to the gel list rp = pointer to a RastPort structure RESULT BUGS SEE ALSO InitGels() graphics/rastport.h graphics/gels.h graphics.library/AllocBitMap graphics.library/AllocBitMap NAME AllocBitMap -- Allocate a bitmap and attach bitplanes to it. (V39) SYNOPSIS bitmap=AllocBitMap(sizex,sizey,depth, flags, friend_bitmap) d0 d1 d2 d3 a0 struct BitMap *AllocBitMap(ULONG,ULONG,ULONG,ULONG, struct BitMap *); FUNCTION Allocates and initializes a bitmap structure. Allocates and initializes bitplane data, and sets the bitmap's planes to point to it. INPUTS sizex = the width (in pixels) desired for the bitmap data. sizey = the height (in pixels) desired. depth = the number of bitplanes deep for the allocation. Pixels with AT LEAST this many bits will be allocated. flags = BMF_CLEAR to specify that the allocated raster should be filled with color 0. BMF_DISPLAYABLE to specify that this bitmap data should be allocated in such a manner that it can be displayed. Displayable data has more severe alignment restrictions than non-displayable data in some systems. BMF_INTERLEAVED tells graphics that you would like your bitmap to be allocated with one large chunk of display memory for all bitplanes. This minimizes color flashing on deep displays. If there is not enough contiguous RAM for an interleaved bitmap, graphics.library will fall back to a non-interleaved one. BMF_MINPLANES causes graphics to only allocate enough space in the bitmap structure for "depth" plane pointers. This is for system use and should not be used by applications use as it is inefficient, and may waste memory. friend_bitmap = pointer to another bitmap, or NULL. If this pointer is passed, then the bitmap data will be allocated in the most efficient form for blitting to friend_bitmap. BUGS NOTES When allocating using a friend bitmap, it is not safe to assume anything about the structure of the bitmap data if that friend BitMap might not be a standard amiga bitmap (for instance, if the workbench is running on a non-amiga display device, its Screen->RastPort->BitMap won't be in standard amiga format. The only safe operations to perform on a non-standard BitMap are: - blitting it to another bitmap, which must be either a standard Amiga bitmap, or a friend of this bitmap. - blitting from this bitmap to a friend bitmap or to a standard Amiga bitmap. - attaching it to a rastport and making rendering calls. Good arguments to pass for the friend_bitmap are your window's RPort->BitMap, and your screen's RastPort->BitMap. Do NOT pass &(screenptr->BitMap)! BitMaps not allocated with BMF_DISPLAYABLE may not be used as Intuition Custom BitMaps or as RasInfo->BitMaps. They may be blitted to a BMF_DISPLAYABLE BitMap, using one of the BltBitMap() family of functions. SEE ALSO FreeBitMap() graphics.library/AllocDBufInfo graphics.library/AllocDBufInfo NAME AllocDBufInfo -- Allocate structure for multi-buffered animation (V39) SYNOPSIS AllocDBufInfo(vp) a0 struct DBufInfo * AllocDBufInfo(struct ViewPort *) FUNCTION Allocates a structure which is used by the ChangeVPBitMap() routine. INPUTS vp = A pointer to a ViewPort structure. BUGS NOTES Returns 0 if there is no memory available or if the display mode of the viewport does not support double-buffering. The only fields of the DBufInfo structure which can be used by application programs are the dbi_SafeMessage, dbi_DispMessage, dbi_UserData1 and dbi_UserData2 fields. dbi_SafeMessage and dbi_DispMessage are standard exec message structures which may be used for synchronizing your animation with the screen update. dbi_SafeMessage is a message which is replied to when it is safe to write to the old BitMap (the one which was installed when you called ChangeVPBitMap). dbi_DispMessage is replied to when it is safe to call ChangeVPBitMap again and be certain that the new frame has been seen at least once. The dbi_UserData1 and dbi_UserData2 fields, which are stored after each message, are for your application to stuff any data into that it may need to examine when looking at the reply coming into the ReplyPort for either of the embedded Message structures. DBufInfo structures MUST be allocated with this function. The size of the structure will grow in future releases. The following fragment shows proper double buffering synchronization: int SafeToChange=TRUE, SafeToWrite=TRUE, CurBuffer=1; struct MsgPort *ports[2]; /* reply ports for DispMessage and SafeMessage */ struct BitMap *BmPtrs[2]; struct DBufInfo *myDBI; ... allocate bitmap pointers, DBufInfo, set up viewports, etc. myDBI->dbi_SafeMessage.mn_ReplyPort=ports[0]; myDBI->dbi_DispMessage.mn_ReplyPort=ports[1]; while (! done) { if (! SafeToWrite) while(! GetMsg(ports[0])) Wait(1l<<(ports[0]->mp_SigBit)); SafeToWrite=TRUE; ... render to bitmap # CurBuffer. if (! SafeToChange) while(! GetMsg(ports[1])) Wait(1l<<(ports[1]->mp_SigBit)); SafeToChange=TRUE; WaitBlit(); /* be sure rendering has finished */ ChangeVPBitMap(vp,BmPtrs[CurBuffer],myDBI); SafeToChange=FALSE; SafeToWrite=FALSE; CurBuffer ^=1; /* toggle current buffer */ } if (! SafeToChange) /* cleanup pending messages */ while(! GetMsg(ports[1])) Wait(1l<<(ports[1]->mp_SigBit)); if (! SafeToWrite) /* cleanup */ while(! GetMsg(ports[0])) Wait(1l<<(ports[0]->mp_SigBit)); SEE ALSO FreeDBufInfo() ChangeVPBitMap() graphics.library/AllocRaster graphics.library/AllocRaster NAME AllocRaster -- Allocate space for a bitplane. SYNOPSIS planeptr = AllocRaster( width, height ) d0 d0 d1 PLANEPTR AllocRaster(ULONG,ULONG); FUNCTION This function calls the memory allocation routines to allocate memory space for a bitplane "width" bits wide and "height" bits high. INPUTS width - number of columns in bitplane height - number of rows in bitplane RESULT planeptr - pointer to first word in bitplane, or NULL if it was not possible to allocate the desired amount of memory. NOTES In order to assure proper alignment of display memory, the AllocBitMap() function should be used instead of AllocRaster when you wish to allocate display memory (rasters which are attached to a ViewPort or Screen). BUGS SEE ALSO FreeRaster() graphics/gfx.h graphics.library/AllocSpriteDataA graphics.library/AllocSpriteDataA NAME AllocSpriteDataA -- allocate sprite data and convert from a bitmap. (V39) AllocSpriteData -- varargs stub for AllocSpriteData(). (V39) SYNOPSIS SpritePtr | 0 = AllocSpriteDataA(bitmap,taglist) d0 a2 a1 struct ExtSprite *AllocSpriteDataA( struct BitMap *, struct TagItem * ); extsprite=AllocSpriteData(bitmap,tags,...TAG_END) FUNCTION Allocate memory to hold a sprite image, and convert the passed-in bitmap data to the appropriate format. The tags allow specification of width, scaling, and other options. INPUTS bitmap - ptr to a bitmap. This bitmap provides the source data for the sprite image. tags - SPRITEA_Width specifies how many pixels wide you desire the sprite to be. Specifying a width wider than the hardware can handle will cause the function to return failure. If the bitmap passed in is narrower than the width asked for, then it will be padded on the right with transparent pixels. Defaults to 16. SPRITEA_XReplication controls the horizontal pixel replication factor used when converting the bitmap data. Valid values are: 0 - perform a 1 to 1 conversion 1 - each pixel from the source is replicated twice in the output. 2 - each pixel is replicated 4 times. -1 - skip every other pixel in the source bitmap -2 - only include every fourth pixel from the source. This tag is useful for converting data from one resolution to another. For instance, hi-res bitmap data can be correctly converted for a lo-res sprite by using an x replication factor of -1. Defaults to 0. SPRITEA_YReplication controls the vertical pixel replication factor in the same manner as SPRITEA_XReplication controls the horizontal. SPRITEA_OutputHeight specifies how tall the resulting sprite should be. Defaults to the bitmap height. The bitmap MUST be at least as tall as the output height. SPRITEA_Attached tells the function that you wish to convert the data for the second sprite in an attached sprite pair. This will cause AllocSpriteData() to take its data from the 3rd and 4th bitplanes of the passed in bitmap. Bitplane data is not required to be in chip ram for this function. RESULTS SpritePtr = a pointer to a ExtSprite structure, or 0 if there is a failure. You should pass this pointer to FreeSpriteData() when finished with the sprite. BUGS Under V39, the appropriate attach bits would not be set in the sprite data. The work-around is to set the bits manually. Bit 7 of the second word should be set. On a 32 bit sprite, bit 7 of the 3rd word should also be set. For a 64 bit sprite, bit 7 of the 5th word should also be set. This should NOT be done under V40, as the bug is fixed. SEE ALSO FreeSpriteData() FreeSprite() ChangeSprite() MoveSprite() GetExtSpriteA() AllocBitMap() graphics/sprite.h graphics.library/AndRectRegion graphics.library/AndRectRegion NAME AndRectRegion -- Perform 2d AND operation of rectangle with region, leaving result in region. SYNOPSIS AndRectRegion(region,rectangle) a0 a1 void AndRectRegion( struct Region *, struct Rectangle * ); FUNCTION Clip away any portion of the region that exists outside of the rectangle. Leave the result in region. INPUTS region - pointer to Region structure rectangle - pointer to Rectangle structure NOTES Unlike the other rect-region primitives, AndRectRegion() cannot fail. BUGS SEE ALSO AndRegionRegion() OrRectRegion() graphics/regions.h graphics.library/AndRegionRegion graphics.library/AndRegionRegion NAME AndRegionRegion -- Perform 2d AND operation of one region with second region, leaving result in second region. SYNOPSIS status = AndRegionRegion(region1,region2) d0 a0 a1 BOOL AndregionRegion(struct Region *, struct Region * ); FUNCTION Remove any portion of region2 that is not in region1. INPUTS region1 - pointer to Region structure region2 - pointer to Region structure to use and for result RESULTS status - return TRUE if successful operation return FALSE if ran out of memory BUGS SEE ALSO OrRegionRegion() AndRectRegion() graphics/regions.h graphics.library/Animate graphics.library/Animate NAME Animate -- Processes every AnimOb in the current animation list. SYNOPSIS Animate(anKey, rp) A0 A1 void Animate(struct AnimOb **, struct RastPort *); FUNCTION For every AnimOb in the list - update its location and velocities - call the AnimOb's special routine if one is supplied - for each component of the AnimOb - if this sequence times out, switch to the new one - call this component's special routine if one is supplied - set the sequence's VSprite's y,x coordinates based on whatever these routines cause INPUTS ankey = address of the variable that points to the head AnimOb rp = pointer to the RastPort structure RESULT BUGS SEE ALSO AddAnimOb() graphics/gels.h graphics/rastport.h graphics.library/AreaCircle graphics.library/AreaCircle NAME AreaCircle -- add a circle to areainfo list for areafill. SYNOPSIS error = (int) AreaCircle( rp, cx, cy, radius) D0 A1 D0 D1 D2 ULONG AreaCircle(struct RastPort *, WORD, WORD, UWORD); FUNCTION Add circle to the vector buffer. It will be drawn to the rastport when AreaEnd is executed. INPUTS rp - pointer to a RastPort structure cx, cy - the coordinates of the center of the desired circle. radius - is the radius of the circle to draw around the centerpoint. RESULTS 0 if no error -1 if no space left in vector list NOTES This function is actually a macro which calls AreaEllipse(rp,cx,cy,radius,radius). SEE ALSO AreaMove() AreaDraw() AreaCircle() InitArea() AreaEnd() graphics/rastport.h graphics/gfxmacros.h graphics.library/AreaDraw graphics.library/AreaDraw NAME AreaDraw -- Add a point to a list of end points for areafill. SYNOPSIS error = AreaDraw( rp, x, y) d0 A1 D0:16 D1:16 ULONG AreaDraw( struct RastPort *, SHORT, SHORT); FUNCTION Add point to the vector buffer. INPUTS rp - points to a RastPort structure. x,y - are coordinates of a point in the raster. RESULT error - zero for success, else -1 if no there was no space left in the vector list. BUGS SEE ALSO AreaMove() InitArea() AreaEnd() graphics/rastport.h graphics.library/AreaEllipse graphics.library/AreaEllipse NAME AreaEllipse -- add a ellipse to areainfo list for areafill. SYNOPSIS error = AreaEllipse( rp, cx, cy, a, b ) d0 a1 d0:16 d1:16 d2:16 d3:16 LONG AreaEllipse( struct RastPort *, SHORT, SHORT, SHORT, SHORT) FUNCTION Add an ellipse to the vector buffer. It will be draw when AreaEnd() is called. INPUTS rp - pointer to a RastPort structure cx - x coordinate of the centerpoint relative to the rastport. cy - y coordinate of the centerpoint relative to the rastport. a - the horizontal radius of the ellipse (note: a must be > 0) b - the vertical radius of the ellipse (note: b must be > 0) RESULT error - zero for success, or -1 if there is no space left in the vector list SEE ALSO AreaMove() AreaDraw() AreaCircle() InitArea() AreaEnd() graphics/rastport.h graphics.library/AreaEnd graphics.library/AreaEnd NAME AreaEnd -- Process table of vectors and ellipses and produce areafill. SYNOPSIS error = AreaEnd(rp) d0 A1 LONG AreaEnd( struct RastPort * ); FUNCTION Trigger the filling operation. Process the vector buffer and generate required fill into the raster planes. After the fill is complete, reinitialize for the next AreaMove or AreaEllipse. Use the raster set up by InitTmpRas when generating an areafill mask. RESULT error - zero for success, or -1 if an error occurred anywhere. INPUTS rp - pointer to a RastPort structure which specifies where the filled regions will be rendered to. BUGS SEE ALSO InitArea() AreaMove() AreaDraw() AreaEllipse() InitTmpRas() graphics/rastport.h graphics.library/AreaMove graphics.library/AreaMove NAME AreaMove -- Define a new starting point for a new shape in the vector list. SYNOPSIS error = AreaMove( rp, x, y) d0 a1 d0:16 d1:16 LONG AreaMove( struct RastPort *, SHORT, SHORT ); FUNCTION Close the last polygon and start another polygon at (x,y). Add the necessary points to vector buffer. Closing a polygon may result in the generation of another AreaDraw() to close previous polygon. Remember to have an initialized AreaInfo structure attached to the RastPort. INPUTS rp - points to a RastPort structure x,y - positions in the raster RETURNS error - zero for success, or -1 if there is no space left in the vector list BUGS SEE ALSO InitArea() AreaDraw() AreaEllipse() AreaEnd() graphics/rastport.h graphics.library/AskFont graphics.library/AskFont NAME AskFont -- get the text attributes of the current font SYNOPSIS AskFont(rp, textAttr) A1 A0 void AskFont(struct RastPort *, struct TextAttr *); FUNCTION This function fills the text attributes structure with the attributes of the current font in the RastPort. INPUTS rp - the RastPort from which the text attributes are extracted textAttr - the TextAttr structure to be filled. Note that there is no support for a TTextAttr. RESULT The textAttr structure is filled with the RastPort's text attributes. BUGS SEE ALSO graphics/text.h graphics.library/AskSoftStyle graphics.library/AskSoftStyle NAME AskSoftStyle -- Get the soft style bits of the current font. SYNOPSIS enable = AskSoftStyle(rp) D0 A1 ULONG AskSoftStyle(struct RastPort *); FUNCTION This function returns those style bits of the current font that are not intrinsic in the font itself, but algorithmically generated. These are the bits that are valid to set in the enable mask for SetSoftStyle(). INPUTS rp - the RastPort from which the font and style are extracted. RESULTS enable - those bits in the style algorithmically generated. Style bits that are not defined are also set. BUGS SEE ALSO SetSoftStyle() graphics/text.h graphics.library/AttachPalExtra graphics.library/AttachPalExtra NAME AttachPalExtra -- Allocate and attach a palette sharing structure to a colormap. (V39) SYNOPSIS status=AttachPalExtra( cm, vp) a0 a1 LONG AttachPalExtra( Struct ColorMap *, struct ViewPort *); FUNCTION Allocates and attaches a PalExtra structure to a ColorMap. This is necessary for color palette sharing to work. The PalExtra structure will be freed by FreeColorMap(). The set of available colors will be determined by the mode and depth of the viewport. INPUTS cm = A pointer to a color map created by GetColorMap(). vp = A pointer to the viewport structure associated with the ColorMap. RESULTS status - 0 if sucessful, else an error number. The only currently defined error number is out of memory (1). BUGS NOTES This function is for use with custom ViewPorts and custom ColorMaps, as Intuition attaches a PalExtra to all of its Screens. If there is already a PalExtra associated with the ColorMap, then this function will do nothing. SEE ALSO GetColorMap() FreeColorMap() ObtainPen() ObtainBestPenA() graphics.library/AttemptLockLayerRom graphics.library/AttemptLockLayerRom * NAME AttemptLockLayerRom -- Attempt to Lock Layer structure by ROM(gfx lib) code SYNOPSIS gotit = AttemptLockLayerRom( layer ) d0 a5 BOOL AttempLockLayerRom( struct Layer * ); FUNCTION Query the current state of the lock on this Layer. If it is already locked then return FALSE, could not lock. If the Layer was not locked then lock it and return TRUE. This call does not destroy any registers. This call nests so that callers in this chain will not lock themselves out. INPUTS layer - pointer to Layer structure RESULT gotit - TRUE or FALSE depending on whether the Layer was successfully locked by the caller. SEE ALSO LockLayerRom() UnlockLayerRom() graphics.library/BestModeIDA graphics.library/BestModeIDA NAME BestModeIDA -- calculate the best ModeID with given parameters (V39) BestModeID -- varargs stub for BestModeIDA() SYNOPSIS ID = BestModeIDA(TagItems) d0 a0 ULONG BestModeIDA(struct TagItem *); ID = BestModeID(Tag1, ...) ULONG BestModeID(ULONG, ...); FUNCTION To determine the best ModeID to fit the parameters set in the TagList. INPUTS TagItems - A pointer to an array of TagItems. TAGS BIDTAG_DIPFMustHave (ULONG) - Mask of DIPF_ flags (from DisplayInfo->PropertyFlags) that the returned ModeID must have. Default - NULL BIDTAG_DIPFMustNotHave (ULONG) - Mask of DIPF_ flags that the returned ModeID must not have. Default - SPECIAL_FLAGS BIDTAG_ViewPort (struct ViewPort *) - ViewPort for which a best-fit ModeID is sought. Default - NULL BIDTAG_NominalWidth (UWORD), BIDTAG_NominalHeight (UWORD) - together make the aspect ratio. These values override the vp->DWidth and vp->DHeight values in the given ViewPort. Default - SourceID NominalDimensionInfo if BIDTAG_SourceID is passed, or vp->DWidth and vp->DHeight if BIDTAG_ViewPort is passed, or 640 x 200. BIDTAG_DesiredWidth (UWORD), BIDTAG_DesiredHeight (UWORD) - Used to distinguish between two mode IDs with identical aspect ratios. Default - same values as NominalWidth and NominalHeight. BIDTAG_Depth (UBYTE) - minimum the returned ModeID must support. Default - vp->RasInfo->BitMap->Depth if BIDTAG_ViewPort is passed, else 1. BIDTAG_MonitorID (ULONG) - returned ModeID must use this monitor. Default - will not restrict the search to any particular monitor BIDTAG_SourceID (ULONG) - Use this ModeID instead of a ViewPort. If specified, the DIPFMustHave mask is made up of the ((DisplayInfo->PropertyFlags of this ID & SPECIAL_FLAGS) | DIPFMustHave flags). Default - VPModeID(vp) if BIDTAG_ViewPort was passed, else the DIPFMustHave and DIPFMustNotHave masks are left unchanged. BIDTAG_RedBits (UBYTE), BIDTAG_BlueBits (UBYTE), BIDTAG_Greenits (UBYTE) - Minimum bits per gun the resultant ModeID must support. Default - 4 bits per gun. RESULTS ID - ID of the best mode to use, or INVALID_ID if a match could not be found. NOTES This function takes into account the Compatability of the Monitor being matched to, and the source ViewPort or ModeID. Incompatibilitys will cause a result of INVALID_ID. BIDTAG_NominalWidth, BIDTAG_NominalHeight, BIDTAG_DesiredWidth, BIDTAG_DesiredHeight, must all be non-0. The comparisons are made against the DimensionInfo->Nominal values. ie, this will not return a best fit against overscan dimensions. EXAMPLE IFF Display Program with a HAM image, to be displayed in the same monitor type as the Workbench ViewPort. ID = BestModeID(BIDTAG_NominalWidth, IFFImage->Width, BIDTAG_NominalHeight, IFFImage->Height, BIDTAG_Depth, IFFImage->Depth, BIDTAG_DIPFMustHave, DIPF_IS_HAM, BIDTAG_MonitorID, (GetVPModeID(WbVP) & MONITOR_ID_MASK), TAG_END); To make an interlace version of a ViewPort: ID = BestModeID(BIDTAG_ViewPort, ThisViewPort, BIDTAG_MustHave, DIFP_IS_LACE, TAG_END); SEE ALSO graphics.library/BitMapScale graphics.library/BitMapScale NAME BitMapScale -- Perform raster scaling on a bit map. (V36) SYNOPSIS BitMapScale(bitScaleArgs) A0 void BitMapScale(struct BitScaleArgs *); FUNCTION Scale a source bit map to a non-overlapping destination bit map. INPUTS bitScaleArgs - structure of parameters describing scale: bsa_SrcX, bsa_SrcY - origin of the source bits. bsa_SrcWidth, bsa_SrcHeight - number of bits to scale from in x and y. bsa_DestX, bsa_DestY - origin of the destination. bsa_DestWidth, bsa_DestHeight - resulting number of bits in x and y. NOTE: these values are set by this function. bsa_XSrcFactor:bsa_XDestFactor - equivalent to the ratio srcWidth:destWidth, but not necessarily the same numbers. Each must be in the range 1..16383. bsa_YSrcFactor:bsa_YDestFactor - equivalent to the ratio srcHeight:destHeight, but not necessarily the same numbers. Each must be in the range 1..16383. bsa_SrcBitMap - source of the bits to scale. bsa_DestBitMap - destination for the bits to scale. This had better be big enough! bsa_Flags - future scaling options. Set it to zero! bsa_XDDA, bsa_YDDA - for future use. Need not be set by user. bsa_Reserved1, bsa_Reserved2 - for future use. Need not be set. RESULT The destWidth, destHeight fields are set by this function as described above. NOTES o This function may use the blitter. o Overlapping source and destination bit maps are not supported. o No check is made to ensure destBitMap is big enough: use ScalerDiv to calculate a destination dimension. BUGS o This function does not use the HighRes Agnus 'Big Blit' facility. You should not use XSrcFactor == XDestFactor, where SrcWidth or DestWidth > 1024. o Also, the blitter is used when expanding in the Y direction. You should not expand in the Y direction if ((DestX & 0xf) + DestWidth) >= 1024 pixels. (Up to 1008 pixels is always safe). SEE ALSO ScalerDiv() graphics/scale.h graphics.library/BltBitMap graphics.library/BltBitMap NAME BltBitMap -- Move a rectangular region of bits in a BitMap. SYNOPSIS planecnt = BltBitMap(SrcBitMap, SrcX, SrcY, DstBitMap, D0 A0 D0:16 D1:16 A1 DstX, DstY, SizeX, SizeY, Minterm, Mask [, TempA]) D2:16 D3:16 D4:16 D5:16 D6:8 D7:8 [A2] ULONG BltBitMap(struct BitMap *, WORD, WORD, struct BitMap *, WORD, WORD, WORD, WORD, UBYTE, UBYTE, UWORD *); FUNCTION Perform non-destructive blits to move a rectangle from one area in a BitMap to another area, which can be on a different BitMap. This blit is assumed to be friendly: no error conditions (e.g. a rectangle outside the BitMap bounds) are tested or reported. INPUTS SrcBitMap, DstBitMap - the BitMap(s) containing the rectangles - the planes copied from the source to the destination are only those whose plane numbers are identical and less than the minimum Depth of either BitMap and whose Mask bit for that plane is non-zero. - as a special case, if a plane pointer in the SrcBitMap is zero, it acts as a pointer to a plane of all zeros, and if the plane pointer is 0xffffffff, it acts as a pointer to a plane of all ones. (Note: new for V36) - SrcBitMap and DstBitMap can be identical if they point to actual planes. SrcX, SrcY - the x and y coordinates of the upper left corner of the source rectangle. Valid range is positive signed integer such that the raster word's offset 0..(32767-Size) DstX, DstY - the x and y coordinates of the upper left corner of the destination for the rectangle. Valid range is as for Src. SizeX, SizeY - the size of the rectangle to be moved. Valid range is (X: 1..976; Y: 1..1023 such that final raster word's offset is 0..32767) Minterm - the logic function to apply to the rectangle when A is non-zero (i.e. within the rectangle). B is the source rectangle and C, D is the destination for the rectangle. - $0C0 is a vanilla copy - $030 inverts the source before the copy - $050 ignores the source and inverts the destination - see the hardware reference manual for other combinations Mask - the write mask to apply to this operation. Bits set indicate the corresponding planes (if not greater than the minimum plane count) are to participate in the operation. Typically this is set to 0xff. TempA - If the copy overlaps exactly to the left or right (i.e. the scan line addresses overlap), and TempA is non-zero, it points to enough chip accessible memory to hold a line of A source for the blit (ie CHIP RAM). BltBitMap will allocate (and free) the needed TempA if none is provided and one is needed. Blit overlap is determined from the relation of the first non-masked planes in the source and destination bit maps. RESULTS planecnt - the number of planes actually involved in the blit. NOTES o This function may use the blitter. SEE ALSO ClipBlit() graphics/gfx.h hardware/blit.h graphics.library/BltBitMapRastPort graphics.library/BltBitMapRastPort NAME BltBitMapRastPort -- Blit from source bitmap to destination rastport. SYNOPSIS error = BltBitMapRastPort (srcbm, srcx, srcy, destrp, destX, destY, sizeX, sizeY, minterm) D0 A0 D0 D1 A1 D2 D3 D4 D5 D6 BOOL BltBitMapRastPort (struct BitMap *, WORD, WORD, struct RastPort *, WORD, WORD, WORD, WORD, UBYTE); FUNCTION Blits from source bitmap to position specified in destination rastport using minterm. INPUTS srcbm - a pointer to the source bitmap srcx - x offset into source bitmap srcy - y offset into source bitmap destrp - a pointer to the destination rastport destX - x offset into dest rastport destY - y offset into dest rastport sizeX - width of blit in pixels sizeY - height of blit in rows minterm - minterm to use for this blit RESULT TRUE BUGS SEE ALSO BltMaskBitMapRastPort() graphics/gfx.h graphics/rastport.h graphics.library/BltClear graphics.library/BltClear NAME BltClear - Clear a block of memory words to zero. SYNOPSIS BltClear( memBlock, bytecount, flags ) a1 d0 d1 void BltClear( void *, ULONG, ULONG ); FUNCTION For memory that is local and blitter accessible, the most efficient way to clear a range of memory locations is to use the system's most efficient data mover, the blitter. This command accepts the starting location and count and clears that block to zeros. INPUTS memBloc - pointer to local memory to be cleared memBlock is assumed to be even. flags - set bit 0 to force function to wait until the blit is done. set bit 1 to use row/bytesperrow. bytecount - if (flags & 2) == 0 then even number of bytes to clear. else low 16 bits is taken as number of bytes per row and upper 16 bits taken as number of rows. This function is somewhat hardware dependent. In the rows/bytesperrow mode (with the pre-ECS blitter) rows must be <- 1024. In bytecount mode multiple runs of the blitter may be used to clear all the memory. Set bit 2 to use the upper 16 bits of the Flags as the data to fill memory with instead of 0 (V36). RESULT The block of memory is initialized. BUGS SEE ALSO graphics.library/BltMaskBitMapRastPort graphics.library/BltMaskBitMapRastPort NAME BltMaskBitMapRastPort -- blit from source bitmap to destination rastport with masking of source image. SYNOPSIS BltMaskBitMapRastPort (srcbm, srcx, srcy, destrp, destX, destY, sizeX, sizeY, A0 D0 D1 A1 D2 D3 D4 D5 minterm, bltmask) D6 A2 void BltMaskBitMapRastPort (struct BitMap *, WORD, WORD, struct RastPort *, WORD, WORD, WORD, WORD, UBYTE, APTR); FUNCTION Blits from source bitmap to position specified in destination rastport using bltmask to determine where source overlays destination, and minterm to determine whether to copy the source image "as is" or to "invert" the sense of the source image when copying. In either case, blit only occurs where the mask is non-zero. INPUTS srcbm - a pointer to the source bitmap srcx - x offset into source bitmap srcy - y offset into source bitmap destrp - a pointer to the destination rastport destX - x offset into dest rastport destY - y offset into dest rastport sizeX - width of blit in pixels sizeY - height of blit in rows minterm - either (ABC|ABNC|ANBC) if copy source and blit thru mask or (ANBC) if invert source and blit thru mask bltmask - pointer to the single bit-plane mask, which must be the same size and dimensions as the planes of the source bitmap. RESULT BUGS SEE ALSO BltBitMapRastPort() graphics/gfx.h graphics/rastport.h graphics.library/BltPattern graphics.library/BltPattern NAME BltPattern -- Using standard drawing rules for areafill, blit through a mask. SYNOPSIS BltPattern(rp, mask, xl, yl, maxx, maxy, bytecnt) a1, a0 d0 d1 d2 d3 d4 void BltPattern (struct RastPort *, void *, SHORT, SHORT, SHORT, SHORT, SHORT); FUNCTION Blit using drawmode,areafill pattern, and mask at position rectangle (xl,yl) (maxx,maxy). INPUTS rp - points to the destination RastPort for the blit. mask - points to 2 dimensional mask if needed if mask == NULL then use a rectangle. xl,yl - coordinates of upper left of rectangular region in RastPort maxx,maxy - points to lower right of rectangular region in RastPort bytecnt - BytesPerRow for mask RESULT SEE ALSO AreaEnd() graphics.library/BltTemplate graphics.library/BltTemplate NAME BltTemplate -- Cookie cut a shape in a rectangle to the RastPort. SYNOPSIS BltTemplate(SrcTemplate, SrcX, SrcMod, rp, A0 D0:16 D1:16 A1 DstX, DstY, SizeX, SizeY) D2:16 D3:16 D4:16 D5:16 void BltTemplate(UWORD *, WORD, WORD, struct RastPort *, WORD, WORD, WORD, WORD); FUNCTION This function draws the image in the template into the RastPort in the current color and drawing mode at the specified position. The template is assumed not to overlap the destination. If the template falls outside the RastPort boundary, it is truncated to that boundary. Note: the SrcTemplate pointer should point to the "nearest" word (rounded down) of the template mask. Fine alignment of the mask is achieved by setting the SrcX bit offseet within the range of 0 to 15 decimal. INPUTS SrcTemplate - pointer to the first (nearest) word of the template mask. SrcX - x bit offset into the template mask (range 0..15). SrcMod - number of bytes per row in template mask. rp - pointer to destination RastPort. DstX, DstY - x and y coordinates of the upper left corner of the destination for the blit. SizeX, SizeY - size of the rectangle to be used as the template. NOTES o This function may use the blitter. SEE ALSO BltBitMap() graphics/rastport.h graphics.library/CalcIVG graphics.library/CalcIVG NAME CalcIVG -- Calculate the number of blank lines above a ViewPort (V39) SYNOPSIS count = CalcIVG(View, ViewPort) d0.w a0 a1 UWORD CalcIVG(struct View *, struct ViewPort *); FUNCTION To calculate the maximum number of blank lines above a viewport needed to load all the copper instructions, after accounting for the viewport bandwidth and size. INPUTS View - pointer to the View ViewPort - pointer to the ViewPort you are interested in. RESULT count - the number of ViewPort resolution scan lines needed to execute all the copper instructions for ViewPort, or 0 if any error. NOTES The number of copper instructions comes from the vp->vp_DspIns list. Although there may be other copper instructions in the final list (from UCopIns, SprIns and ClrIns) they are currently ignored for this function. This also means that if the ViewPort has never been made (for example, the ViewPort of an intuition screen was opened behind) then vp->vp_DspIns is NULL. Although CalcIVG() returns the true number of lines needed by the copper, intuition still maintains an inter-screen gap of 3 non-laced lines (6 interlaced). Therefore, for intuition screens use: MAX(CalcIVG(v, vp), (islaced ? 6 : 3)) SEE ALSO GfxNew() VideoControl() graphics/view.h graphics.library/CBump graphics.library/CBump NAME CBump - increment user copper list pointer (bump to next position in list). SYNOPSIS CBump( c ) a1 void CBump( struct UCopList * ); FUNCTION Increment pointer to space for next instruction in user copper list. INPUTS c - pointer to UCopList structure RESULTS User copper list pointer is incremented to next position. Pointer is repositioned to next user copperlist instruction block if the current block is full. Note: CBump is usually invoked for the programmer as part of the macro definitions CWAIT or CMOVE. BUGS SEE ALSO CINIT() CWAIT() CMOVE() CEND() graphics/copper.h graphics.library/CEND graphics.library/CEND NAME CEND -- Terminate user copper list. SYNOPSIS CEND( c ) struct UCopList *c; FUNCTION Add instruction to terminate user copper list. INPUTS c - pointer to UCopList structure RESULTS This is actually a macro that calls the macro CWAIT(c,10000,255) 10000 is a magical number that the graphics.library uses. I hope display technology doesn't catch up too fast! BUGS SEE ALSO CINIT() CWAIT() CMOVE() graphics/copper.h graphics.library/ChangeExtSpriteA graphics.library/ChangeExtSpriteA NAME ChangeExtSpriteA -- Change the sprite image pointer. (V39) SYNOPSIS ChangeExtSpriteA( vp, oldsprite, newsprite, tags) a0 a1 a2 a3 success=ChangeExtSpriteA(struct ViewPort *, struct ExtSprite *, struct ExtSprite *, struct TagList *); success=ChangeExtSprite(vp,old_sp,new_sp,tag,....); FUNCTION Attempt to change which sprite is displayed for a given sprite engine. INPUTS vp - pointer to ViewPort structure that this sprite is relative to, or 0 if relative only top of View oldsprite - pointer the old ExtSprite structure newsprite - pointer to the new ExtSprite structure. RESULTS success - 0 if there was an error. BUGS SEE ALSO FreeSprite() ChangeSprite() MoveSprite() AllocSpriteDataA() graphics/sprite.h graphics.library/ChangeSprite graphics.library/ChangeSprite NAME ChangeSprite -- Change the sprite image pointer. SYNOPSIS ChangeSprite( vp, s, newdata) a0 a1 a2 void ChangeSprite(struct ViewPort *, struct SimpleSprite *, void * ) FUNCTION The sprite image is changed to use the data starting at newdata INPUTS vp - pointer to ViewPort structure that this sprite is relative to, or 0 if relative only top of View s - pointer to SimpleSprite structure newdata - pointer to data structure of the following form. struct spriteimage { UWORD posctl[2]; /* used by simple sprite machine*/ UWORD data[height][2]; /* actual sprite image */ UWORD reserved[2]; /* initialized to */ /* 0x0,0x0 */ }; The programmer must initialize reserved[2]. Spriteimage must be in CHIP memory. The height subfield of the SimpleSprite structure must be set to reflect the height of the new spriteimage BEFORE calling ChangeSprite(). The programmer may allocate two sprites to handle a single attached sprite. After GetSprite(), ChangeSprite(), the programmer can set the SPRITE_ATTACHED bit in posctl[1] of the odd numbered sprite. If you need more than 8 sprites, look up VSprites in the graphics documentation. RESULTS BUGS SEE ALSO FreeSprite() ChangeSprite() MoveSprite() AddVSprite() graphics/sprite.h graphics.library/ChangeVPBitMap graphics.library/ChangeVPBitMap NAME ChangeVPBitMap -- change display memory address for multi-buffered animation (V39) SYNOPSIS ChangeVPBitMap(vp,bm,db) a0 a1 a2 void ChangeVPBitMap(struct ViewPort *, struct BitMap *, struct DBufInfo *); FUNCTION Changes the area of display memory which will be displayed in a viewport. This can be used to implement double (or triple) buffering, a method of achieving smooth animation. INPUTS vp = a pointer to a viewport bm = a pointer to a BitMap structure. This BitMap structure must be of the same layout as the one attached to the viewport (same depth, alignment, and BytesPerRow). db = A pointer to a DBufInfo. BUGS NOTES This will set the vp->RasInfo->BitMap field to the bm pointer which is passed. When using the synchronization features, you MUST carefully insure that all messages have been replied to before calling FreeDBufInfo or calling ChangeVPBitMap with the same DBufInfo. SEE ALSO AllocDBufInfo() AllocBitMap() graphics.library/CINIT graphics.library/CINIT NAME CINIT -- Initialize user copperlist to accept intermediate user copper instructions. SYNOPSIS cl = CINIT( ucl , n ) cl = UCopperListInit( ucl , n ) a0 d0 struct CopList *UCopperListInit( struct UCopList *, UWORD ); FUNCTION Allocates and/or initialize copperlist structures/buffers internal to a UCopList structure. This is a macro that calls UCopListInit. You must pass a (non-initialized) UCopList to CINIT (CINIT will NOT allocate a new UCopList if ucl==0 ). If (ucl != 0) it will initialize the intermediate data buffers internal to a UCopList. The maximum number of intermediate copper list instructions that these internal CopList data buffers contain is specified as the parameter n. INPUTS ucl - pointer to UCopList structure n - number of instructions buffer must be able to hold RESULTS cl- a pointer to a buffer which will accept n intermediate copper instructions. NOTE: this is NOT a UCopList pointer, rather a pointer to the UCopList's->FirstCopList sub-structure. BUGS CINIT will not actually allocate a new UCopList if ucl==0. Instead you must allocate a block MEMF_PUBLIC|MEMF_CLEAR, the sizeof(struct UCopList) and pass it to this function. The system's FreeVPortCopLists function will take care of deallocating it if they are called. Prior to release V36 the CINIT macro had { } braces surrounding the definition, preventing the proper return of the result value. These braces have been removed for the V36 include definitions. SEE ALSO CINIT() CMOVE() CEND() graphics/copper.h graphics.library/ClearEOL graphics.library/ClearEOL NAME ClearEOL -- Clear from current position to end of line. SYNOPSIS ClearEOL(rp) A1 void ClearEOL(struct RastPort *); FUNCTION Clear a rectangular swath from the current position to the right edge of the rastPort. The height of the swath is taken from that of the current text font, and the vertical positioning of the swath is adjusted by the text baseline, such that text output at this position would lie wholly on this newly cleared area. Clearing consists of setting the color of the swath to zero, or, if the DrawMode is 2, to the BgPen. INPUTS rp - pointer to RastPort structure RESULT NOTES o This function may use the blitter. SEE ALSO Text() ClearScreen() SetRast() graphics/text.h graphics/rastport.h graphics.library/ClearRectRegion graphics.library/ClearRectRegion NAME ClearRectRegion -- Perform 2d CLEAR operation of rectangle with region, leaving result in region. SYNOPSIS status = ClearRectRegion(region,rectangle) d0 a0 a1 BOOL ClearRectRegion(struct Region *, struct Rectangle * ); FUNCTION Clip away any portion of the region that exists inside of the rectangle. Leave the result in region. INPUTS region - pointer to Region structure rectangle - pointer to Rectangle structure RESULTS status - return TRUE if successful operation return FALSE if ran out of memory BUGS SEE ALSO AndRectRegion() graphics/regions.h graphics.library/ClearRegion graphics.library/ClearRegion NAME ClearRegion -- Remove all rectangles from region. SYNOPSIS ClearRegion(region) a0 viod ClearRegion( struct Region * ); FUNCTION Clip away all rectangles in the region leaving nothing. INPUTS region - pointer to Region structure BUGS SEE ALSO NewRegion() graphics/regions.h graphics.library/ClearScreen graphics.library/ClearScreen NAME ClearScreen -- Clear from current position to end of RastPort. SYNOPSIS ClearScreen(rp) A1 void ClearScreen(struct RastPort *); FUNCTION Clear a rectangular swath from the current position to the right edge of the rastPort with ClearEOL, then clear the rest of the screen from just beneath the swath to the bottom of the rastPort. Clearing consists of setting the color of the swath to zero, or, if the DrawMode is 2, to the BgPen. INPUTS rp - pointer to RastPort structure NOTES o This function may use the blitter. SEE ALSO ClearEOL() Text() SetRast() graphics/text.h graphics/rastport.h graphics.library/ClipBlit graphics.library/ClipBlit NAME ClipBlit -- Calls BltBitMap() after accounting for windows SYNOPSIS ClipBlit(Src, SrcX, SrcY, Dest, DestX, DestY, XSize, YSize, Minterm) A0 D0 D1 A1 D2 D3 D4 D5 D6 void ClipBlit (struct RastPort *, WORD, WORD, struct RastPort *, WORD, WORD, WORD, WORD, UBYTE); FUNCTION Performs the same function as BltBitMap(), except that it takes into account the Layers and ClipRects of the layer library, all of which are (and should be) transparent to you. So, whereas BltBitMap() requires pointers to BitMaps, ClipBlit requires pointers to the RastPorts that contain the Bitmaps, Layers, etcetera. If you are going to blit blocks of data around via the RastPort of your Intuition Window, you must call this routine (rather than BltBitMap()). Either the Src RastPort, the Dest RastPort, both, or neither, can have Layers. This routine takes care of all cases. See BltBitMap() for a thorough explanation. INPUTS Src = pointer to the RastPort of the source for your blit SrcX, SrcY = the topleft offset into Src for your data Dest = pointer to the RastPort to receive the blitted data DestX, DestY = the topleft offset into the destination RastPort XSize = the width of the blit (must be ta least 1) YSize = the height of the blit (must be at least 1) Minterm = the boolean blitter function, where SRCB is associated with the Src RastPort and SRCC goes to the Dest RastPort RESULT BUGS SEE ALSO BltBitMap() graphics.library/CloseFont graphics.library/CloseFont NAME CloseFont -- Release a pointer to a system font. SYNOPSIS CloseFont(font) A1 void CloseFont(struct TextFont *); FUNCTION This function indicates that the font specified is no longer in use. It is used to close a font opened by OpenFont, so that fonts that are no longer in use do not consume system resources. INPUTS font - a font pointer as returned by OpenFont() or OpenDiskFont() RESULT BUGS SEE ALSO OpenFont() diskfont.library/OpenDiskFont graphics/text.h graphics.library/CloseMonitor graphics.library/CloseMonitor NAME CloseMonitor -- close a MonitorSpec (V36) SYNOPSIS error = CloseMonitor( monitor_spec ) d0 a0 LONG CloseMonitor( struct MonitorSpec * ); FUNCTION Relinquish access to a MonitorSpec. INPUTS monitor_spec - a pointer to a MonitorSpec opened via OpenMonitor(), or NULL. RESULTS error - FALSE if MonitorSpec closed uneventfully. TRUE if MonitorSpec could not be closed. BUGS SEE ALSO OpenMonitor() graphics.library/CMOVE graphics.library/CMOVE NAME CMOVE -- append copper move instruction to user copper list. SYNOPSIS CMOVE( c , a , v ) CMove( c , a , v ) a1 d0 d1 CBump( c ) a1 void CMove( struct UCopList *, void *, WORD ); FUNCTION Add instruction to move value v to hardware register a. INPUTS c - pointer to UCopList structure a - hardware register v - 16 bit value to be written RESULTS This is actually a macro that calls CMove(c,&a,v) and then calls CBump(c) to bump the local pointer to the next instruction. Watch out for macro side affects. BUGS SEE ALSO CINIT() CWAIT() CEND() graphics/copper.h graphics.library/CoerceMode graphics.library/CoerceMode NAME CoerceMode -- calculate ViewPort mode coercion (V39) SYNOPSIS ID = CoerceMode(RealViewPort, MonitorID, Flags); d0 a0 d0 d1 ULONG CoerceMode(struct ViewPort *, ULONG, ULONG); FUNCTION To determine the best mode in the MonitorID to coerce RealViewPort to, given the restrictions set in Flags. INPUTS RealViewPort - ViewPort to coerce MonitorID - Montor number to coerce to (ie a mode masked with MONITOR_ID_MASK). Flags - PRESERVE_COLORS - keep the number of bitplanes in the ViewPort. AVOID_FLICKER - do not coerce to an interlace mode RESULTS ID - ID of the best mode to coerce to, or INVALID_ID if could not coerce (see NOTES). NOTES This function takes into account the compatibility of the Monitor being coerced to, and the ViewPort that is being coerced. Incompatibilities will cause a result of INVALID_ID. EXAMPLE newmode = CoerceMode(vp, VGA_MONITOR_ID, PRESERVE_COLORS); SEE ALSO graphics.library/CopySBitMap graphics.library/CopySBitMap NAME CopySBitMap -- Syncronize Layer window with contents of Super BitMap SYNOPSIS CopySBitMap( layer ) a0 void CopySBitMap(struct Layer *); FUNCTION This is the inverse of SyncSBitMap. Copy all bits from SuperBitMap to Layer bounds. This is used for those functions that do not want to deal with the ClipRect structures but do want to be able to work with a SuperBitMap Layer. INPUTS layer - pointer to a SuperBitMap Layer The Layer must already be locked by the caller. BUGS SEE ALSO LockLayerRom() SyncSBitMap() graphics.library/CWAIT graphics.library/CWAIT NAME CWAIT -- Append copper wait instruction to user copper list. SYNOPSIS CWAIT( c , v , h ) CWait( c , v , h ) a1 d0 d1 CBump( c ) a1 void CWait( struct UCopList *, WORD, WORD) FUNCTION Add instruction to wait for vertical beam position v and horizontal position h to this intermediate copper list. INPUTS c - pointer to UCopList structure v - vertical beam position (relative to top of viewport) h - horizontal beam position RESULTS this is actually a macro that calls CWait(c,v,h) and then calls CBump(c) to bump the local pointer to the next instruction. BUGS User waiting for horizontal values of greater than 222 decimal is illegal. SEE ALSO CINIT() CMOVE() CEND() graphics/copper.h graphics.library/DisownBlitter graphics.library/DisownBlitter NAME DisownBlitter -- return blitter to free state. SYNOPSIS DisownBlitter() void DisownBlitter( void ); FUNCTION Free blitter up for use by other blitter users. INPUTS RETURNS SEE ALSO OwnBlitter() graphics.library/DisposeRegion graphics.library/DisposeRegion NAME DisposeRegion -- Return all space for this region to free memory pool. SYNOPSIS DisposeRegion(region) a0 void DisposeRegion( struct Region * ); FUNCTION Free all RegionRectangles for this Region then free the Region itself. INPUTS region - pointer to Region structure BUGS SEE ALSO NewRegion() graphics/regions.h graphics.library/DoCollision graphics.library/DoCollision NAME DoCollision -- Test every gel in gel list for collisions. SYNOPSIS DoCollision(rp) A1 void DoCollision(struct RastPort *); FUNCTION Tests each gel in gel list for boundary and gel-to-gel collisions. On detecting one of these collisions, the appropriate collision- handling routine is called. See the documentation for a thorough description of which collision routine is called. This routine expects to find the gel list correctly sorted in Y,X order. The system routine SortGList performs this function for the user. INPUTS rp = pointer to a RastPort RESULT BUGS SEE ALSO InitGels() SortGList() graphics/gels.h graphics/gels.h graphics.library/Draw graphics.library/Draw NAME Draw -- Draw a line between the current pen position and the new x,y position. SYNOPSIS Draw( rp, x, y) a1 d0:16 d1:16 void Draw( struct RastPort *, SHORT, SHORT); FUNCTION Draw a line from the current pen position to (x,y). INPUTS rp - pointer to the destination RastPort x,y - coordinates of where in the RastPort to end the line. BUGS SEE ALSO Move() graphics/rastport.h graphics.library/DrawEllipse graphics.library/DrawEllipse NAME DrawEllipse -- Draw an ellipse centered at cx,cy with vertical and horizontal radii of a,b respectively. SYNOPSIS DrawEllipse( rp, cx, cy, a, b ) a1 d0 d1 d2 d3 void DrawEllipse( struct RastPort *, SHORT, SHORT, SHORT, SHORT); FUNCTION Creates an elliptical outline within the rectangular region specified by the parameters, using the current foreground pen color. INPUTS rp - pointer to the RastPort into which the ellipse will be drawn. cx - x coordinate of the centerpoint relative to the rastport. cy - y coordinate of the centerpoint relative to the rastport. a - the horizontal radius of the ellipse (note: a must be > 0) b - the vertical radius of the ellipse (note: b must be > 0) BUGS NOTES this routine does not clip the ellipse to a non-layered rastport. SEE ALSO DrawCircle(), graphics/rastport.h graphics.library/DrawGList graphics.library/DrawGList NAME DrawGList -- Process the gel list, queueing VSprites, drawing Bobs. SYNOPSIS DrawGList(rp, vp) A1 A0 void DrawGList(struct RastPort *, struct ViewPort *); FUNCTION Performs one pass of the current gel list. - If nextLine and lastColor are defined, these are initialized for each gel. - If it's a VSprite, build it into the copper list. - If it's a Bob, draw it into the current raster. - Copy the save values into the "old" variables, double-buffering if required. INPUTS rp = pointer to the RastPort where Bobs will be drawn vp = pointer to the ViewPort for which VSprites will be created RESULT BUGS MUSTDRAW isn't implemented yet. SEE ALSO InitGels() graphics/gels.h graphics/rastport.h graphics/view.h graphics.library/EraseRect graphics.library/EraseRect NAME EraseRect -- Fill a defined rectangular area using the current BackFill hook. (V36) SYNOPSIS EraseRect( rp, xmin, ymin, xmax, ymax) a1 d0:16 d1:16 d2:16 d3:16 void EraseRect(struct RastPort *, SHORT, SHORT, SHORT, SHORT); FUNCTION Fill the rectangular region specified by the parameters with the BackFill hook. If non-layered, the rectangular region specified by the parameters is cleared. If layered the Layer->BackFill Hook is used. INPUTS rp - pointer to a RastPort structure xmin - x coordinate of the upper left corner of the region to fill. ymin - y coordinate of the upper left corner of the region to fill. xmax - x coordinate of the lower right corner of the region to fill. ymax - y coordinate of the lower right corner of the region to fill. BUGS NOTES The following relation MUST be true: (xmax >= xmin) and (ymax >= ymin) SEE ALSO graphics/rastport.h graphics/clip.h graphics.library/ExtendFont graphics.library/ExtendFont NAME ExtendFont -- ensure tf_Extension has been built for a font (V36) SYNOPSIS success = ExtendFont(font, fontTags) D0 A0 A1 ULONG ExtendFont(struct TextFont *, struct TagItem *); success = ExtendFontTags(font, Tag1, ...) (V39) ULONG ExtendFontTags(struct TextFont *, ULONG, ...); FUNCTION To extend a TextFont structure. INPUTS font - The font to extend. fontTags - An optional taglist. If NULL, then a default is used. Currently, the only tag defined is TA_DeviceDPI. RESULT success - 1 if the TextFont was properly extended, else 0. NOTES The varargs stub was missing from amiga.lib until V39. SEE ALSO graphics/text.h graphics.library/FindColor graphics.library/FindColor NAME FindColor -- Find the closest matching color in a colormap. (V39) SYNOPSIS color = FindColor( cm, R, G, B , maxpen) a3 d1 d2 d3 d4 ULONG FindColor( struct ColorMap *, ULONG, ULONG, ULONG,LONG); INPUTS cm = colormap R = red level (32 bit left justified fraction) G = green level (32 bit left justified fraction) B = blue level (32 bit left justified fraction) MaxPen = the maximum entry in the color table to search. A value of -1 will limt the search to only those pens which could be rendered in (for instance, it will not examine the sprite colors on a 4 color screen). RESULT The system will attempt to find the color in the passed colormap which most closely matches the RGB values passed. No new pens will be allocated, and you should not ReleasePen() the returned pen. This function is not sensitive to palette sharing issues. Its intended use is for: (a) programs which pop up on public screens when those screens are not using palette sharing. You might use this function as a fallback when ObtainBestPenA() says that there are no sharable pens. (b) Internal color matching by an application which is either running on a non-public screen, or which wants to match colors to an internal color table which may not be associated with any displayed screen. BUGS NOTES In order to use the MaxPen=-1 feature, you must have initialized palette sharing via AttachPalExtra() (all intuition screens do this). Otherwise, MaxPen=-1 will search all colors in the colormap. SEE ALSO ObtainBestPenA() GetColorMap() ObtainPen() ReleasePen() graphics.library/FindDisplayInfo graphics.library/FindDisplayInfo NAME FindDisplayInfo -- search for a record identified by a specific key (V36) SYNOPSIS handle = FindDisplayInfo(ID) D0 D0 DisplayInfoHandle FindDisplayInfo(ULONG); FUNCTION Given a 32-bit Mode Key, return a handle to a valid DisplayInfoRecord found in the graphics database. Using this handle, you can obtain information about this Mode, including its default dimensions, properties, and whether it is currently available for use. INPUTS ID - unsigned long identifier RESULT handle - handle to a displayinfo Record with that key or NULL if no match. BUGS SEE ALSO graphics/displayinfo.h graphics.library/Flood graphics.library/Flood NAME Flood -- Flood rastport like areafill. SYNOPSIS error = Flood( rp, mode, x, y) d0 a1 d2 d0 d1 BOOL Flood(struct RastPort *, ULONG, SHORT, SHORT); FUNCTION Search the BitMap starting at (x,y). Fill all adjacent pixels if they are: Mode 0: not the same color as AOLPen Mode 1: the same color as the pixel at (x,y) When actually doing the fill use the modes that apply to standard areafill routine such as drawmodes and patterns. INPUTS rp - pointer to RastPort (x,y) - coordinate in BitMap to start the flood fill at. mode - 0 fill all adjacent pixels searching for border. 1 fill all adjacent pixels that have same pen number as the one at (x,y). NOTES In order to use Flood, the destination RastPort must have a valid TmpRas raster whose size is as large as that of the RastPort. SEE ALSO AreaEnd() InitTmpRas() graphics/rastport.h graphics.library/FontExtent graphics.library/FontExtent NAME FontExtent -- get the font attributes of the current font (V36) SYNOPSIS FontExtent(font, fontExtent) A0 A1 void FontExtent(struct TextFont *, struct TextExtent *); FUNCTION This function fills the text extent structure with a bounding (i.e. maximum) extent for the characters in the specified font. INPUTS font - the TextFont from which the font metrics are extracted. fontExtent - the TextExtent structure to be filled. RESULT fontExtent is filled. NOTES The TextFont, not the RastPort, is specified -- unlike TextExtent(), effect of algorithmic enhancements is not included, nor does te_Width include any effect of rp_TxSpacing. The returned te_Width will be negative only when FPF_REVPATH is set in the tf_Flags of the font -- the effect of left-moving characters is ignored for the width of a normal font, and the effect of right-moving characters is ignored if a REVPATH font. These characters will, however, be reflected in the bounding extent. SEE ALSO TextExtent() graphics/text.h graphics.library/FreeBitMap graphics.library/FreeBitMap NAME FreeBitMap -- free a bitmap created by AllocBitMap (V39) SYNOPSIS FreeBitMap(bm) a0 VOID FreeBitMap(struct BitMap *) FUNCTION Frees bitmap and all associated bitplanes INPUTS bm = A pointer to a BitMap structure. Passing a NULL-pointer (meaning "do nothing") is OK. BUGS NOTES Be careful to insure that any rendering done to the bitmap has completed (by calling WaitBlit()) before you call this function. SEE ALSO AllocBitMap() graphics.library/FreeColorMap graphics.library/FreeColorMap NAME FreeColorMap -- Free the ColorMap structure and return memory to free memory pool. SYNOPSIS FreeColorMap( colormap ) a0 void FreeColorMap(struct ColorMap *); FUNCTION Return the memory to the free memory pool that was allocated with GetColorMap. INPUTS colormap - pointer to ColorMap allocated with GetColorMap. Passing a NULL pointer (meaning "do nothing") is acceptable (V39). RESULT The space is made available for others to use. BUGS SEE ALSO SetRGB4() GetColorMap() graphics/view.h graphics.library/FreeCopList graphics.library/FreeCopList NAME FreeCopList -- deallocate intermediate copper list SYNOPSIS FreeCopList(coplist) a0 void FreeCopList( struct CopList *); FUNCTION Deallocate all memory associated with this copper list. INPUTS coplist - pointer to structure CopList RESULTS memory returned to memory manager BUGS SEE ALSO graphics/copper.h graphics.library/FreeCprList graphics.library/FreeCprList NAME FreeCprList -- deallocate hardware copper list SYNOPSIS FreeCprList(cprlist) a0 void FreeCprList(struct cprlist *); FUNCTION return cprlist to free memory pool INPUTS cprlist - pointer to cprlist structure RESULTS memory returned and made available to other tasks BUGS SEE ALSO graphics/copper.h graphics.library/FreeDBufInfo graphics.library/FreeDBufInfo NAME FreeDBufInfo -- free information for multi-buffered animation (V39) SYNOPSIS FreeDBufInfo(db) a1 void FreeDBufInfo(struct DBufInfo *) FUNCTION Frees a structure obtained from AllocDBufInfo INPUTS db = A pointer to a DBufInfo. BUGS NOTES FreeDBufInfo(NULL) is a no-op. SEE ALSO AllocDBufInfo() ChangeVPBitMap() graphics.library/FreeGBuffers graphics.library/FreeGBuffers NAME FreeGBuffers -- Deallocate memory obtained by GetGBufers. SYNOPSIS FreeGBuffers(anOb, rp, db) A0 A1 D0 void FreeGBuffers(struct AnimOb *, struct RastPort *, BOOL); FUNCTION For each sequence of each component of the AnimOb, deallocate memory for: SaveBuffer BorderLine CollMask and ImageShadow (point to same buffer) if db is set (user had used double-buffering) deallocate: DBufPacket BufBuffer INPUTS anOb = pointer to the AnimOb structure rp = pointer to the current RastPort db = double-buffer indicator (set TRUE for double-buffering) RESULT BUGS SEE ALSO GetGBuffers() graphics/gels.h graphics/rastport.h graphics.library/FreeRaster graphics.library/FreeRaster NAME FreeRaster -- Release an allocated area to the system free memory pool .. SYNOPSIS FreeRaster( p, width, height) a0 d0:16 d1:16 void FreeRaster( PLANEPTR, USHORT, USHORT); FUNCTION Return the memory associated with this PLANEPTR of size width and height to the MEMF_CHIP memory pool. INPUTS p = a pointer to a memory space returned as a result of a call to AllocRaster. width - the width in bits of the bitplane. height - number of rows in bitplane. BUGS NOTES Width and height should be the same values with which you called AllocRaster in the first place. SEE ALSO AllocRaster() graphics/gfx.h graphics.library/FreeSprite graphics.library/FreeSprite NAME FreeSprite -- Return sprite for use by others and virtual sprite machine. SYNOPSIS FreeSprite( pick ) d0 void FreeSprite( WORD ); FUNCTION Mark sprite as available for others to use. These sprite routines are provided to ease sharing of sprite hardware and to handle simple cases of sprite usage and movement. It is assumed the programs that use these routines do want to be good citizens in their hearts. ie: they will not FreeSprite unless they actually own the sprite. The Virtual Sprite machine may ignore the simple sprite machine. INPUTS pick - number in range of 0-7 RESULTS sprite made available for subsequent callers of GetSprite as well as use by Virtual Sprite Machine. BUGS SEE ALSO GetSprite() ChangeSprite() MoveSprite() graphics/sprite.h graphics.library/FreeSpriteData graphics.library/FreeSpriteData NAME FreeSpriteData -- free sprite data allocated by AllocSpriteData() (V39) SYNOPSIS FreeSpriteData(extsp) a2 void FreeSpriteData(struct ExtSprite *); FUNCTION INPUTS extsp - The extended sprite structure to be freed. Passing NULL is a NO-OP. SEE ALSO FreeSpriteData() FreeSprite() ChangeSprite() MoveSprite() GetExtSprite() AllocBitMap() graphics/sprite.h graphics.library/FreeVPortCopLists graphics.library/FreeVPortCopLists NAME FreeVPortCopLists -- deallocate all intermediate copper lists and their headers from a viewport SYNOPSIS FreeVPortCopLists(vp) a0 void FreeVPortCopLists(struct ViewPort *); FUNCTION Search display, color, sprite, and user copper lists and call FreeMem() to deallocate them from memory INPUTS vp - pointer to ViewPort structure RESULTS The memory allocated to the various copper lists will be returned to the system's free memory pool, and the following fields in the viewport structure will be set to NULL: DspIns, Sprins, ClrIns, UCopIns BUGS none known SEE ALSO graphics/view.h graphics.library/GetAPen graphics.library/GetAPen NAME GetAPen -- Get the A Pen value for a RastPort (V39). SYNOPSIS pen = GetAPen ( rp ) d0 a0 ULONG GetAPen(struct RastPort *) FUNCTION Return the current value of the A pen for the rastport. This function should be used instead of peeking the structure directly, because future graphics devices may store it differently, for instance, using more bits. INPUTS rp = a pointer to a valid RastPort structure. BUGS NOTES SEE ALSO SetAPen() graphics/gfx.h graphics.library/GetBitMapAttr graphics.library/GetBitMapAttr NAME GetBitMapAttr -- Returns information about a bitmap (V39) SYNOPSIS value=GetBitMapAttr(bitmap,attribute_number); d0 a0 d1 ULONG GetBitMapAttr(struct BitMap *,ULONG); FUNCTION Determines information about a bitmap. This function should be used instead of reading the bitmap structure fields directly. This will provide future compatibility. INPUTS bm = A pointer to a BitMap structure. attribute_number = A number telling graphics which attribute of the bitmap should be returned: BMA_HEIGHT returns the height in pixels BMA_WIDTH returns the width in pixels. BMA_DEPTH returns the depth. This is the number of bits which are required to store the information for one pixel in the bitmap. BMA_FLAGS returns a longword bitfield describing various attributes which the bitmap may have. Currently defined flags are BMF_DISPLAYABLE, BMF_INTERLEAVED (see AllocBitMap()). The flag BMF_STANDARD returns will be set if the bitmap is represented as planar data in Amiga Chip RAM. BUGS NOTES Unknown attributes are reserved for future use, and return zero. BMF_DISPLAYABLE will only be set if the source bitmap meets all of the required alignment restrictions. A bitmap which does not meet these restrictions may still be displayable at some loss of efficiency. Size values returned by this function may not exactly match the values which were passed to AllocBitMap(), due to alignment restrictions. SEE ALSO AllocBitMap() graphics.library/GetBPen graphics.library/GetBPen NAME GetBPen -- Get the B Pen value for a RastPort (V39). SYNOPSIS pen = GetBPen ( rp ) d0 a0 ULONG GetBPen(struct RastPort *) FUNCTION Return the current value of the B pen for the rastport. This function should be used instead of peeking the structure directly, because future graphics devices may store it differently, using more bits. INPUTS rp = a pointer to a valid RastPort structure. BUGS NOTES SEE ALSO SetBPen() graphics/gfx.h graphics.library/GetColorMap graphics.library/GetColorMap NAME GetColorMap -- allocate and initialize Colormap SYNOPSIS cm = GetColorMap( entries ) d0 d0 struct ColorMap *GetColorMap( ULONG); FUNCTION Allocates, initializes and returns a pointer to a ColorMap data structure, later enabling calls to SetRGB4 and LoadRGB4 to load colors for a view port. The ColorTable pointer in the ColorMap structure points to a hardware specific colormap data structure. You should not count on it being anything you can understand. Use GetRGB4() to query it or SetRGB4CM to set it directly. INPUTS entries - number of entries for this colormap RESULT The pointer value returned by this routine, if nonzero, may be stored into the ViewPort.ColorMap pointer. If a value of 0 is returned, the system was unable to allocate enough memory space for the required data structures. BUGS SEE ALSO SetRGB4() FreeColorMap() graphics.library/GetDisplayInfoData graphics.library/GetDisplayInfoData NAME GetDisplayInfoData -- query DisplayInfo Record parameters (V36) SYNOPSIS result = GetDisplayInfoData(handle, buf, size, tagID, [ID]) D0 A0 A1 D0 D1 [D2] ULONG GetDisplayInfoData(DisplayInfoHandle, UBYTE *, ULONG, ULONG, ULONG); FUNCTION GetDisplayInfoData() fills a buffer with data meaningful to the DisplayInfoRecord pointed at by your valid handle. The data type that you are interested in is indicated by a tagID for that chunk. The types of tagged information that may be available include: DTAG_DISP: (DisplayInfo) - properties and availability information. DTAG_DIMS: (DimensionInfo) - default dimensions and overscan info. DTAG_MNTR: (MonitorInfo) - type, position, scanrate, and compatibility DTAG_NAME: (NameInfo) - a user friendly way to refer to this mode. INPUTS handle - displayinfo handle buf - pointer to destination buffer size - buffer size in bytes tagID - data chunk type ID - displayinfo identifier, optionally used if handle is NULL RESULT result - if positive, number of bytes actually transferred if zero, no information for ID was available BUGS SEE ALSO FindDisplayInfo(), NextDisplayInfo() graphics/displayinfo.h graphics.library/GetDrMd graphics.library/GetDrMd NAME GetDrMd -- Get the draw mode value for a RastPort (V39). SYNOPSIS mode = GetDrMd ( rp ) d0 a0 ULONG GetDrMd(struct RastPort *) FUNCTION Return the current value of the draw mode for the rastport. This function should be used instead of peeking the structure directly, because future graphics devices may store it differently. INPUTS rp = a pointer to a valid RastPort structure. BUGS NOTES SEE ALSO SetDrMd() graphics/gfx.h graphics.library/GetExtSpriteA graphics.library/GetExtSpriteA NAME GetExtSpriteA -- Attempt to get a sprite for the extended sprite manager. (V39) GetExtSprite -- varargs stub for GetExtSpriteA. (V39) SYNOPSIS Sprite_Number = GetExtSpriteA( sprite, tags ) (V39) d0 a2 a1 LONG GetExtSpriteA( struct ExtSprite *, struct TagItem * ); spritenum=GetExtSprite(sprite,tags,...); FUNCTION Attempt to allocate one of the eight sprites for private use with the extended sprite manager. INPUTS sprite - ptr to programmer's ExtSprite (from AllocSpriteData()). tags - a standard tag list: GSTAG_SPRITE_NUM specifies a specific sprite to get by number. GSTAG_ATTACHED specifies that you wish to get a sprite pair. the tag data field points to a ExtSprite structure for the second sprite. You must free both sprites. RESULTS Sprite_number = a sprite number or -1 for an error. This call will fail if no sprites could be allocated, or if you try to allocate a sprite which would require a mode change when there are other sprites of incompatible modes in use. BUGS GSTAG_ATTACHED does not work in version 39. When running under V39, you should attach the second sprite with a separate GetExtSprite call. SEE ALSO FreeSprite() ChangeSprite() MoveSprite() GetSprite() graphics/sprite.h graphics.library/GetGBuffers graphics.library/GetGBuffers NAME GetGBuffers -- Attempt to allocate ALL buffers of an entire AnimOb. SYNOPSIS status = GetGBuffers(anOb, rp, db) D0 A0 A1 D0 BOOL GetGBuffers(struct AnimOb *, struct RastPort *, BOOL); FUNCTION For each sequence of each component of the AnimOb, allocate memory for: SaveBuffer BorderLine CollMask and ImageShadow (point to same buffer) if db is set TRUE (user wants double-buffering) allocate: DBufPacket BufBuffer INPUTS anOb = pointer to the AnimOb structure rp = pointer to the current RastPort db = double-buffer indicator (set TRUE for double-buffering) RESULT status = TRUE if the memory allocations were all successful, else FALSE BUGS If any of the memory allocations fail it does not free the partial allocations that did succeed. SEE ALSO FreeGBuffers() graphics/gels.h graphics.library/GetOPen graphics.library/GetOPen NAME GetOPen -- Get the O Pen value for a RastPort (V39). SYNOPSIS pen = GetOPen ( rp ) d0 a0 ULONG GetOPen(struct RastPort *) FUNCTION Return the current value of the O pen for the rastport. This function should be used instead of peeking the structure directly, because future graphics devices may store it differently, for instance, using more bits. INPUTS rp = a pointer to a valid RastPort structure. BUGS NOTES SEE ALSO SetOutlinePen() graphics/gfx.h graphics.library/GetRGB32 graphics.library/GetRGB32 NAME GetRGB32 -- Set a series of color registers for this Viewport. (V39) SYNOPSIS GetRGB32( cm, firstcolor, ncolors, table ) a0 d0 d1 a1 void GetRGB32( struct ColorMap *, ULONG, ULONG, ULONG *); INPUTS cm = colormap firstcolor = the first color register to get ncolors = the number of color registers to set. table=a pointer to a series of 32-bit RGB triplets. RESULT The ULONG data pointed to by 'table' will be filled with the 32 bit fractional RGB values from the colormap. BUGS NOTES 'Table' should point to at least ncolors*3 longwords. SEE ALSO LoadRGB4() GetColorMap() LoadRGB32() SetRGB32CM() graphics/view.h graphics.library/GetRGB4 graphics.library/GetRGB4 NAME GetRGB4 -- Inquire value of entry in ColorMap. SYNOPSIS value = GetRGB4( colormap, entry ) d0 a0 d0 ULONG GetRGB4(struct ColorMap *, LONG); FUNCTION Read and format a value from the ColorMap. INPUTS colormap - pointer to ColorMap structure entry - index into colormap RESULT returns -1 if no valid entry return UWORD RGB value 4 bits per gun right justified NOTE Intuition's DisplayBeep() changes color 0. Reading Color 0 during a DisplayBeep() will lead to incorrect results. BUGS SEE ALSO SetRGB4() LoadRGB4() GetColorMap() FreeColorMap() graphics/view.h graphics.library/GetRPAttrA graphics.library/GetRPAttrA NAME GetRPAttrA -- examine rastport settings via a tag list GetRPAttrs -- varargs stub for GetRPAttrA SYNOPSIS GetRPAttrA(rp,tags) a0 a1 void GetRPAttrA(struct RastPort *, struct TagItem *); GetRPAttrs(rp,attr1,&result1,...); FUNCTION Read the settings of a rastport into variables. The ti_Tag field of the TagItem specifies which attribute should be read, and the ti_Data field points at the location where the result hsould be stored. All current tags store the return data as LONGs (32 bits). currently available tags are: RPTAG_Font Font for Text() RPTAG_SoftStyle style for text (see graphics/text.h) RPTAG_APen Primary rendering pen RPTAG_BPen Secondary rendering pen RPTAG_DrMd Drawing mode (see graphics/rastport.h) RPTAG_OutLinePen Area Outline pen RPTAG_WriteMask Bit Mask for writing. RPTAG_MaxPen Maximum pen to render (see SetMaxPen()) RPTAG_DrawBounds Determine the area that will be rendered into by rendering commands. Can be used to optimize window refresh. Pass a pointer to a rectangle in the tag data. On return, the rectangle's MinX will be greater than its MaxX if there are no active cliprects. INPUTS rp - pointer to the RastPort to examine. tags - a standard tag list specifying the attributes to be read, and where to store their values. RESULT BUGS SEE ALSO GetAPen() GetBPen() GetDrMd() GetOutLinePen() GetWriteMask() SetRPAttrA() graphics/rpattr.h graphics.library/GetSprite graphics.library/GetSprite NAME GetSprite -- Attempt to get a sprite for the simple sprite manager. SYNOPSIS Sprite_Number = GetSprite( sprite, pick ) d0 a0 d0 WORD GetSprite( struct SimpleSprite *, WORD ); FUNCTION Attempt to allocate one of the eight sprites for private use with the simple sprite manager. This must be done before using further calls to the simple sprite machine. If the programmer wants to use 15 color sprites, they must allocate both sprites and set the 'SPRITE_ATTACHED' bit in the odd sprite's posctldata array. INPUTS sprite - ptr to programmers SimpleSprite structure. pick - number in the range of 0-7 or -1 if programmer just wants the next one. RESULTS If pick is 0-7 attempt to allocate the sprite. If the sprite is already allocated then return -1. If pick -1 allocate the next sprite starting search at 0. If no sprites are available return -1 and fill -1 in num entry of SimpleSprite structure. If the sprite is available for allocation, mark it allocated and fill in the 'num' entry of the SimpleSprite structure. If successful return the sprite number. BUGS SEE ALSO FreeSprite() ChangeSprite() MoveSprite() GetSprite() graphics/sprite.h graphics.library/GetVPModeID graphics.library/GetVPModeID NAME GetVPModeID -- get the 32 bit DisplayID from a ViewPort. (V36) SYNOPSIS modeID = GetVPModeID( vp ) d0 a0 ULONG GetVPModeID( struct ViewPort *); FUNCTION returns the normal display modeID, if one is currently associated with this ViewPort. INPUTS vp -- pointer to a ViewPort structure. RESULT modeID -- a 32 bit DisplayInfoRecord identifier associated with this ViewPort, or INVALID_ID. NOTES Test the return value of this function against INVALID_ID, not NULL. (INVALID_ID is defined in graphics/displayinfo.h). BUGS SEE ALSO graphics/displayinfo.h, ModeNotAvailable() graphics.library/GfxAssociate graphics.library/GfxAssociate NAME GfxAssociate -- associate a graphics extended node with a given pointer (V36) SYNOPSIS GfxAssociate(pointer, node); A0 A1 void GfxAssociate(VOID *, struct ExtendedNode *); FUNCTION Associate a special graphics extended data structure (each of which begins with an ExtendedNode structure) with another structure via the other structure's pointer. Later, when you call GfxLookUp() with the other structure's pointer you may retrieve a pointer to this special graphics extended data structure, if it is available. INPUTS pointer = a pointer to a data structure. node = an ExtendedNode structure to associate with the pointer RESULT an association is created between the pointer and the node such that given the pointer the node can be retrieved via GfxLookUp(). BUGS SEE ALSO graphics/gfxnodes.h GfxNew() GfxFree() GfxLookUp() graphics.library/GfxFree graphics.library/GfxFree NAME GfxFree -- free a graphics extended data structure (V36) SYNOPSIS GfxFree( node ); a0 void GfxFree(struct ExtendedNode *); FUNCTION Free a special graphics extended data structure (each of which begins with an ExtendedNode structure). INPUTS node = pointer to a graphics extended data structure obtained via GfxNew(). RESULT the node is deallocated from memory. graphics will disassociate this special graphics extended node from any associated data structures, if necessary, before freeing it (see GfxAssociate()). BUGS an Alert() will be called if you attempt to free any structure other than a graphics extended data structure obtained via GfxFree(). SEE ALSO graphics/gfxnodes.h GfxNew() GfxAssociate() GfxLookUp() graphics.library/GfxLookUP graphics.library/GfxLookUP NAME GfxLookUp -- find a graphics extended node associated with a given pointer (V36) SYNOPSIS result = GfxLookUp( pointer ); d0 a0 struct ExtendedNode *GfxLookUp( void *); FUNCTION Finds a special graphics extended data structure (if any) associated with the pointer to a data structure (eg: ViewExtra associated with a View structure). INPUTS pointer = a pointer to a data structure which may have an ExtendedNode associated with it (typically a View ). RESULT result = a pointer to the ExtendedNode that has previously been associated with the pointer. BUGS SEE ALSO graphics/gfxnodes.h GfxNew() GfxFree() GfxAssociate() graphics.library/GfxNew graphics.library/GfxNew NAME GfxNew -- allocate a graphics extended data structure (V36) SYNOPSIS result = GfxNew( node_type ); d0 d0 struct ExtendedNode *GfxNew( ULONG); FUNCTION Allocate a special graphics extended data structure (each of which begins with an ExtendedNode structure). The type of structure to be allocated is specified by the node_type identifier. INPUTS node_type = which type of graphics extended data structure to allocate. (see gfxnodes.h for identifier definitions.) RESULT result = a pointer to the allocated graphics node or NULL if the allocation failed. BUGS SEE ALSO graphics/gfxnodes.h GfxFree() GfxAssociate() GfxLookUp() graphics.library/InitArea graphics.library/InitArea NAME InitArea -- Initialize vector collection matrix SYNOPSIS InitArea( areainfo, buffer, maxvectors ) a0 a1 d0 void InitArea(struct AreaInfo *, void *, SHORT); FUNCTION This function provides initialization for the vector collection matrix such that it has a size of (max vectors ). The size of the region pointed to by buffer (short pointer) should be five (5) times as large as maxvectors. This size is in bytes. Areafills done by using AreaMove, AreaDraw, and AreaEnd must have enough space allocated in this table to store all the points of the largest fill. AreaEllipse takes up two vectors for every call. If AreaMove/Draw/Ellipse detect too many vectors going into the buffer they will return -1. INPUTS areainfo - pointer to AreaInfo structure buffer - pointer to chunk of memory to collect vertices maxvectors - max number of vectors this buffer can hold RESULT Pointers are set up to begin storage of vectors done by AreaMove, AreaDraw, and AreaEllipse. BUGS SEE ALSO AreaEnd() AreaMove() AreaDraw() AreaEllipse() graphics/rastport.h graphics.library/InitBitMap graphics.library/InitBitMap NAME InitBitMap -- Initialize bit map structure with input values. SYNOPSIS InitBitMap( bm, depth, width, height ) a0 d0 d1 d2 void InitBitMap( struct BitMap *, BYTE, UWORD, UWORD ); FUNCTION Initialize various elements in the BitMap structure to correctly reflect depth, width, and height. Must be used before use of BitMap in other graphics calls. The Planes[8] are not initialized and need to be set up by the caller. The Planes table was put at the end of the structure so that it may be truncated to conserve space, as well as extended. All routines that use BitMap should only depend on existence of depth number of bitplanes. The Flagsh and pad fields are reserved for future use and should not be used by application programs. INPUTS bm - pointer to a BitMap structure (gfx.h) depth - number of bitplanes that this bitmap will have width - number of bits (columns) wide for this BitMap height- number of bits (rows) tall for this BitMap BUGS SEE ALSO graphics/gfx.h graphics.library/InitGels graphics.library/InitGels NAME InitGels -- initialize a gel list; must be called before using gels. SYNOPSIS InitGels(head, tail, GInfo) A0 A1 A2 void InitGels(struct VSprite *, struct VSprite *, struct GelsInfo *); FUNCTION Assigns the VSprites as the head and tail of the gel list in GfxBase. Links these two gels together as the keystones of the list. If the collHandler vector points to some memory array, sets the BORDERHIT vector to NULL. INPUTS head = pointer to the VSprite structure to be used as the gel list head tail = pointer to the VSprite structure to be used as the gel list tail GInfo = pointer to the GelsInfo structure to be initialized RESULT BUGS SEE ALSO graphics/gels.h graphics/rastport.h graphics.library/InitGMasks graphics.library/InitGMasks NAME InitGMasks -- Initialize all of the masks of an AnimOb. SYNOPSIS InitGMasks(anOb) A0 void InitGMasks(struct AnimOb *); FUNCTION For every sequence of every component call InitMasks. INPUTS anOb = pointer to the AnimOb BUGS SEE ALSO InitMasks() graphics/gels.h graphics.library/InitMasks graphics.library/InitMasks NAME InitMasks -- Initialize the BorderLine and CollMask masks of a VSprite. SYNOPSIS InitMasks(vs) A0 void InitMasks(struct VSprite *); FUNCTION Creates the appropriate BorderLine and CollMask masks of the VSprite. Correctly detects if the VSprite is actually a Bob definition, handles the image data accordingly. INPUTS vs = pointer to the VSprite structure RESULT BUGS SEE ALSO InitGels() graphics/gels.h graphics.library/InitRastPort graphics.library/InitRastPort NAME InitRastPort -- Initialize raster port structure SYNOPSIS InitRastPort( rp ) a1 void InitRastPort(struct RastPort *rp); FUNCTION Initialize a RastPort structure to standard values. INPUTS rp = pointer to a RastPort structure. RESULT all entries in RastPort get zeroed out, with the following exceptions: Mask, FgPen, AOLPen, and LinePtrn are set to -1. The DrawMode is set to JAM2 The font is set to the standard system font NOTES The struct Rastport describes a control structure for a write-able raster. The RastPort structure describes how a complete single playfield display will be written into. A RastPort structure is referenced whenever any drawing or filling operations are to be performed on a section of memory. The section of memory which is being used in this way may or may not be presently a part of the current actual onscreen display memory. The name of the actual memory section which is linked to the RastPort is referred to here as a "raster" or as a bitmap. NOTE: Calling the routine InitRastPort only establishes various defaults. It does NOT establish where, in memory, the rasters are located. To do graphics with this RastPort the user must set up the BitMap pointer in the RastPort. BUGS SEE ALSO graphics/rastport.h graphics.library/InitTmpRas graphics.library/InitTmpRas NAME InitTmpRas -- Initialize area of local memory for usage by areafill, floodfill, text. SYNOPSIS InitTmpRas(tmpras, buffer, size) a0 a1 d0 void InitTmpRas( struct TmpRas *, void *, ULONG ); FUNCTION The area of memory pointed to by buffer is set up to be used by RastPort routines that may need to get some memory for intermediate operations in preparation to putting the graphics into the final BitMap. Tmpras is used to control the usage of buffer. INPUTS tmpras - pointer to a TmpRas structure to be linked into a RastPort buffer - pointer to a contiguous piece of chip memory. size - size in bytes of buffer RESULT makes buffer available for users of RastPort BUGS Would be nice if RastPorts could share one TmpRas. SEE ALSO AreaEnd() Flood() Text() graphics/rastport.h graphics.library/InitView graphics.library/InitView NAME InitView - Initialize View structure. SYNOPSIS InitView( view ) a1 void InitView( struct View * ); FUNCTION Initialize View structure to default values. INPUTS view - pointer to a View structure RESULT View structure set to all 0's. (1.0,1.1.1.2) Then values are put in DxOffset,DyOffset to properly position default display about .5 inches from top and left on monitor. InitView pays no attention to previous contents of view. BUGS SEE ALSO MakeVPort graphics/view.h graphics.library/InitVPort graphics.library/InitVPort NAME InitVPort - Initialize ViewPort structure. SYNOPSIS InitVPort( vp ) a0 void InitViewPort( struct ViewPort * ); FUNCTION Initialize ViewPort structure to default values. INPUTS vp - pointer to a ViewPort structure RESULT ViewPort structure set to all 0's. (1.0,1.1) New field added SpritePriorities, initialized to 0x24 (1.2) BUGS SEE ALSO MakeVPort() graphics/view.h graphics.library/LoadRGB32 graphics.library/LoadRGB32 NAME LoadRGB32 -- Set a series of color registers for this Viewport. (V39) SYNOPSIS LoadRGB32( vp, table ) a0 a1 void LoadRGB32( struct ViewPort *, ULONG *); INPUTS vp = viewport table = a pointer to a series of records which describe which colors to modify. RESULT The selected color registers are changed to match your specs. BUGS NOTES Passing a NULL "table" is ignored. The format of the table passed to this function is a series of records, each with the following format: 1 Word with the number of colors to load 1 Word with the first color to be loaded. 3 longwords representing a left justified 32 bit rgb triplet. The list is terminated by a count value of 0. examples: ULONG table[]={1l<<16+0,0xffffffff,0,0,0} loads color register 0 with 100% red. ULONG table[]={256l<<16+0,r1,g1,b1,r2,g2,b2,.....0} can be used to load an entire 256 color palette. Lower order bits of the palette specification will be discarded, depending on the color palette resolution of the target graphics device. Use 0xffffffff for the full value, 0x7fffffff for 50%, etc. You can find out the palette range for your screen by querying the graphics data base. LoadRGB32 is faster than SetRGB32, even for one color. SEE ALSO LoadRGB4() GetColorMap() GetRGB32() SetRGB32CM() graphics/view.h graphics.library/LoadRGB4 graphics.library/LoadRGB4 NAME LoadRGB4 -- Load RGB color values from table. SYNOPSIS LoadRGB4( vp, colors , count ) a0 a1 d0:16 void LoadRGB4( struct ViewPort *, UWORD *, WORD); FUNCTION load the count words of the colormap from table starting at entry 0. INPUTS vp - pointer to ViewPort, whose colors you wish to change colors - pointer to table of RGB values set up as an array of USHORTS background-- 0x0RGB color1 -- 0x0RGB color2 -- 0x0RGB etc. UWORD per value. The colors are interpreted as 15 = maximum intensity. 0 = minimum intensity. count = number of UWORDs in the table to load into the colormap starting at color 0(background) and proceeding to the next higher color number RESULTS The ViewPort should have a pointer to a valid ColorMap to store the colors in. Updates the hardware copperlist to reflect the new colors. Updates the intermediate copperlist with the new colors. BUGS NOTE: Under V36 and up, it is not safe to call this function from an interrupt, due to semaphore protection of graphics copper lists. SEE ALSO SetRGB4() GetRGB4() GetColorMap() graphics/view.h graphics.library/LoadView graphics.library/LoadView NAME LoadView -- Use a (possibly freshly created) coprocessor instruction list to create the current display. SYNOPSIS LoadView( View ) A1 void LoadView( struct View * ); FUNCTION Install a new view to be displayed during the next display refresh pass. Coprocessor instruction list has been created by InitVPort(), MakeVPort(), and MrgCop(). INPUTS View - a pointer to the View structure which contains the pointer to the constructed coprocessor instructions list, or NULL. RESULT If the View pointer is non-NULL, the new View is displayed, according to your instructions. The vertical blank routine will pick this pointer up and direct the copper to start displaying this View. If the View pointer is NULL, no View is displayed. NOTE Even though a LoadView(NULL) is performed, display DMA will still be active. Sprites will continue to be displayed after a LoadView(NULL) unless an OFF_SPRITE is subsequently performed. BUGS SEE ALSO InitVPort() MakeVPort() MrgCop() intuition/RethinkDisplay() graphics/view.h graphics.library/LockLayerRom graphics.library/LockLayerRom NAME LockLayerRom -- Lock Layer structure by ROM(gfx lib) code. SYNOPSIS LockLayerRom( layer ) a5 void LockLayerRom( struct Layer * ); FUNCTION Return when the layer is locked and no other task may alter the ClipRect structure in the Layer structure. This call does not destroy any registers. This call nests so that callers in this chain will not lock themselves out. Do not have the Layer locked during a call to intuition. There is a potential deadlock problem here, if intuition needs to get other locks as well. Having the layer locked prevents other tasks from using the layer library functions, most notably intuition itself. So be brief. layers.library's LockLayer is identical to LockLayerRom. INPUTS layer - pointer to Layer structure RESULTS The layer is locked and the task can render assuming the ClipRects will not change out from underneath it until an UnlockLayerRom is called. SEE ALSO UnlockLayerRom() layers.library/LockLayer() graphics/clip.h graphics.library/MakeVPort graphics.library/MakeVPort NAME MakeVPort -- generate display copper list for a viewport. SYNOPSIS error = MakeVPort( view, viewport ) d0 a0 a1 ULONG MakeVPort( struct View *, struct ViewPort * ); FUNCTION Uses information in the View, ViewPort, ViewPort->RasInfo to construct and intermediate copper list for this ViewPort. INPUTS view - pointer to a View structure viewport - pointer to a ViewPort structure The viewport must have valid pointer to a RasInfo. RESULTS constructs intermediate copper list and puts pointers in viewport.DspIns If the ColorMap ptr in ViewPort is NULL then it uses colors from the default color table. If DUALPF in Modes then there must be a second RasInfo pointed to by the first RasInfo From V39, MakeVPort can return a ULONG error value (previous versions returned void), to indicate that either not enough memory could be allocated for MakeVPort's use, or that the ViewPort mode and bitplane alignments are incorrect for the bitplane's depth. You should check for these error values - they are defined in . BUGS In V37 and earlier, narrow Viewports (whose righthand edge is less than 3/4 of the way across the display) do not work properly. SEE ALSO InitVPort() MrgCop() graphics/view.h intuition.library/MakeScreen() intuition.library/RemakeDisplay() intuition.library/RethinkDisplay() graphics.library/ModeNotAvailable graphics.library/ModeNotAvailable NAME ModeNotAvailable -- check to see if a DisplayID isn't available. (V36) SYNOPSIS error = ModeNotAvailable( modeID ) d0 d0 ULONG ModeNotAvailable( ULONG); FUNCTION returns an error code, indicating why this modeID is not available, or NULL if there is no reason known why this mode should not be there. INPUTS modeID -- a 32 bit DisplayInfoRecord identifier. RESULT error -- a general indication of why this modeID is not available, or NULL if there is no reason why it shouldn't be available. NOTE ULONG return values from this function are a proper superset of the DisplayInfo.NotAvailable field (defined in graphics/displayinfo.h). BUGS SEE ALSO graphics/displayinfo.h, GetVPModeID() graphics.library/Move graphics.library/Move NAME Move -- Move graphics pen position. SYNOPSIS Move( rp, x, y) a1 d0:16 d1:16 void Move( struct RastPort *, SHORT, SHORT ); FUNCTION Move graphics pen position to (x,y) relative to upper left (0,0) of RastPort. This sets the starting point for subsequent Draw() and Text() calls. INPUTS rp - pointer to a RastPort structure x,y - point in the RastPort RESULTS BUGS SEE ALSO Draw() graphics/rastport.h graphics.library/MoveSprite graphics.library/MoveSprite NAME MoveSprite -- Move sprite to a point relative to top of viewport. SYNOPSIS MoveSprite(vp, sprite, x, y) A0 A1 D0 D1 void MoveSprite(struct ViewPort *,struct SimpleSprite *, WORD, WORD); FUNCTION Move sprite image to new place on display. INPUTS vp - pointer to ViewPort structure if vp = 0, sprite is positioned relative to View. sprite - pointer to SimpleSprite structure (x,y) - new position relative to top of viewport or view. RESULTS Calculate the hardware information for the sprite and place it in the posctldata array. During next video display the sprite will appear in new position. BUGS Sprites really appear one pixel to the left of the position you specify. This bug affects the apparent display position of the sprite on the screen, but does not affect the numeric position relative to the viewport or view. This behaviour only applies to SimpleSprites, not to ExtSprites. SEE ALSO FreeSprite() ChangeSprite() GetSprite() graphics/sprite.h graphics.library/MrgCop graphics.library/MrgCop NAME MrgCop -- Merge together coprocessor instructions. SYNOPSIS error = MrgCop( View ) d0 A1 ULONG MrgCop( struct View * ); FUNCTION Merge together the display, color, sprite and user coprocessor instructions into a single coprocessor instruction stream. This essentially creates a per-display-frame program for the coprocessor. This function MrgCop is used, for example, by the graphics animation routines which effectively add information into an essentially static background display. This changes some of the user or sprite instructions, but not those which have formed the basic display in the first place. When all forms of coprocessor instructions are merged together, you will have a complete per- frame instruction list for the coprocessor. Restrictions: Each of the coprocessor instruction lists MUST be internally sorted in min to max Y-X order. The merge routines depend on this! Each list must be terminated using CEND(copperlist). INPUTS View - a pointer to the view structure whose coprocessor instructions are to be merged. RESULT The view structure will now contain a complete, sorted/merged list of instructions for the coprocessor, ready to be used by the display processor. The display processor is told to use this new instruction stream through the instruction LoadView(). From V39, MrgCop() can return a ULONG error value (previous versions returned void), to indicate that either there was insufficient memory to build the system copper lists, or that MrgCop() had no work to do if, for example, there were no ViewPorts in the list. You should check for these error values - they are defined in . BUGS SEE ALSO InitVPort() MakeVPort() LoadView() graphics/view.h intuition.library/RethinkDisplay() graphics.library/NewRegion graphics.library/NewRegion NAME NewRegion -- Get an empty region. SYNOPSIS region = NewRegion() d0 struct Region *NewRegion(); FUNCTION Create a Region structure, initialize it to empty, and return a pointer it. RESULTS region - pointer to initialized region. If it could not allocate required memory region = NULL. INPUTS none BUGS SEE ALSO graphics/regions.h graphics.library/NextDisplayInfo graphics.library/NextDisplayInfo NAME NextDisplayInfo -- iterate current displayinfo identifiers (V36) SYNOPSIS next_ID = NextDisplayInfo(last_ID) D0 D0 ULONG NextDisplayInfo(ULONG); FUNCTION The basic iteration function with which to find all records in the graphics database. Using each ID in succession, you can then call FindDisplayInfo() to obtain the handle associated with each ID. Each ID is a 32-bit Key which uniquely identifies one record. The INVALID_ID is special, and indicates the end-of-list. INPUTS last_ID - previous displayinfo identifier or INVALID_ID if beginning iteration. RESULT next_ID - subsequent displayinfo identifier or INVALID_ID if no more records. BUGS SEE ALSO FindDisplayInfo(), GetDisplayInfoData() graphics/displayinfo.h graphics.library/ObtainBestPenA graphics.library/ObtainBestPenA NAME ObtainBestPenA --- Search for the closest color match, or allocate a new one. (V39) ObtainBestPen --- varargs stub for ObtainBestPenA SYNOPSIS color | -1 =ObtainBestPenA( cm, R, G, B, taglist) a0 d1 d2 d3 a1 LONG ObtainBestPenA( struct ColorMap *, ULONG, ULONG, ULONG, struct TagItem *); color = ObtainBestPen(cm,r,g,b,tags....); INPUTS cm = colormap R = red level (32 bit left justified fraction) G = green level (32 bit left justified fraction) B = blue level (32 bit left justified fraction) taglist = a pointer to a standard tag list specifying the color matching settings desired: OBP_Precision - specifies the desired precision for the match. Should be PRECISION_GUI, PRECISION_ICON, or PRECISION_IMAGE or PRECISION_EXACT. Defaults to PRECISION_IMAGE. OBP_FailIfBad - specifies that you want ObtainBestPen to return a failure value if there is not a color within the given tolerance, instead of returning the closest color. With OBP_FailIfBad==FALSE, ObtainBestPen will only fail if the ViewPort contains no sharable colors. Defaults to FALSE. FUNCTION This function can be used by applications to figure out what pen to use to represent a given color. The system will attempt to find the color in your viewport closest to the specified color. If there is no color within your tolerance, then a new one will be allocated, if available. If none is available, then the closest one found will be returned. RESULT The correct pen value, or -1 if no sharable palette entries are available. BUGS NOTES If this call succceeds, then you must call ReleasePen() when you are done with the color. The error metric used for ObtainBestPen() is based on the magnitude squared between the two RGB values, scaled by the percentage of free entries. SEE ALSO GetColorMap() ObtainPen() ReleasePen() graphics.library/ObtainPen graphics.library/ObtainPen NAME ObtainPen -- Obtain a free palette entry for use by your program. (V39) SYNOPSIS n = ObtainPen( cm, n, r, g, b, flags) d0 a0 d0 d1 d2 d3 d4 LONG ObtainPen(struct ColorMap *,ULONG,ULONG,ULONG,ULONG,ULONG); FUNCTION Attempt to allocate an entry in the colormap for use by the application. If successful, you should ReleasePen() this entry after you have finished with it. Applications needing exclusive use of a color register (say for color cycling) will typically call this function with n=-1. Applications needing only the shared use of a color will typically use ObtainBestPenA() instead. Other uses of this function are rare. INPUTS cm = A pointer to a color map created by GetColorMap(). n = The index of the desired entry, or -1 if any one is acceptable rgb = The RGB values (32 bit left justified fractions) to set the new palette entry to. flags= PEN_EXCLUSIVE - tells the system that you want exclusive (non-shared) use of this pen value. Default is shared access. PEN_NO_SETCOLOR - tells the system to not change the rgb values for the selected pen. Really only makes sense for exclusive pens. RESULTS n = The allocated pen. -1 will be returned if there is no pen available for you. BUGS NOTES When you allocate a palette entry in non-exclusive mode, you should not change it (via SetRGB32), because other programs on the same screen may be using it. With PEN_EXCLUSIVE mode, you can change the returned entry at will. To avoid visual artifacts, you should not free up a palette entry until you are sure that your application is not displaying any pixels in that color at the time you free it. Otherwise, another task could allocate and set that color index, thus changing the colors of your pixels. Generally, for shared access, you should use ObtainBestPenA() instead, since it will not allocate a new color if there is one "close enough" to the one you want already. If there is no Palextra attached to the colormap, then this routine will always fail. SEE ALSO GetColorMap() ReleasePen() AttachPalExtra() ObtainBestPenA() graphics.library/OpenFont graphics.library/OpenFont NAME OpenFont -- Get a pointer to a system font. SYNOPSIS font = OpenFont(textAttr) D0 A0 struct TextFont *OpenFont(struct TextAttr *); FUNCTION This function searches the system font space for the graphics text font that best matches the attributes specified. The pointer to the font returned can be used in subsequent SetFont and CloseFont calls. It is important to match this call with a corresponding CloseFont call for effective management of ram fonts. INPUTS textAttr - a TextAttr or TTextAttr structure that describes the text font attributes desired. RESULT font is zero if the desired font cannot be found. If the named font is found, but the size and style specified are not available, a font with the nearest attributes is returned. BUGS Prior to V39 this function would return a TextFont pointer for any font which matched exactly in Y size, regardless of differences in DPI, or DotSize. As part of fixing this bug it is REQUIRED that you use pass the same TextAttr (or TTextAttr) to this function that was used when OpenDiskFont() was called. OpenFont(), and OpenDiskFont() use WeighTAMatch() to measure how well two fonts match. WeightTAMatch() was a public function in graphics.library V36-V37; it is now a system PRIVATE function as of V39. SEE ALSO CloseFont() SetFont() diskfont.library/OpenDiskFont graphics/text.h intuition/intuition.h graphics.library/OpenMonitor graphics.library/OpenMonitor NAME OpenMonitor -- open a named MonitorSpec (V36) SYNOPSIS mspc = OpenMonitor( monitor_name , display_id) d0 a1 d0 struct MonitorSpec *OpenMonitor( char *, ULONG ); FUNCTION Locate and open a named MonitorSpec. INPUTS monitor_name - a pointer to a null terminated string. display_id - an optional 32 bit monitor/mode identifier RESULTS mspc - a pointer to an open MonitorSpec structure. NULL if MonitorSpec could not be opened. NOTE if monitor_name is non-NULL, the monitor will be opened by name. if monitor_name is NULL the monitor will be opened by optional ID. if both monitor_name and display_id are NULL returns default monitor. BUGS SEE ALSO CloseMonitor() graphics/monitor.h graphics.library/OrRectRegion graphics.library/OrRectRegion NAME OrRectRegion -- Perform 2d OR operation of rectangle with region, leaving result in region. SYNOPSIS status = OrRectRegion(region,rectangle) d0 a0 a1 BOOL OrRectRegion( struct Region *, struct Rectangle * ); FUNCTION If any portion of rectangle is not in the region then add that portion to the region. INPUTS region - pointer to Region structure rectangle - pointer to Rectangle structure RESULTS status - return TRUE if successful operation return FALSE if ran out of memory BUGS SEE ALSO AndRectRegion() OrRegionRegion() graphics/regions.h graphics.library/OrRegionRegion graphics.library/OrRegionRegion NAME OrRegionRegion -- Perform 2d OR operation of one region with second region, leaving result in second region SYNOPSIS status = OrRegionRegion(region1,region2) d0 a0 a1 BOOL OrRegionRegion( struct Region *, struct Region * ); FUNCTION If any portion of region1 is not in the region then add that portion to the region2 INPUTS region1 - pointer to Region structure region2 - pointer to Region structure RESULTS status - return TRUE if successful operation return FALSE if ran out of memory BUGS SEE ALSO OrRectRegion() graphics/regions.h graphics.library/OwnBlitter graphics.library/OwnBlitter NAME OwnBlitter -- get the blitter for private usage SYNOPSIS OwnBlitter() void OwnBlitter( void ); FUNCTION If blitter is available return immediately with the blitter locked for your exclusive use. If the blitter is not available put task to sleep. It will be awakened as soon as the blitter is available. When the task first owns the blitter the blitter may still be finishing up a blit for the previous owner. You must do a WaitBlit before actually using the blitter registers. Calls to OwnBlitter() do not nest. If a task that owns the blitter calls OwnBlitter() again, a lockup will result. (Same situation if the task calls a system function that tries to own the blitter). INPUTS NONE RETURNS NONE SEE ALSO DisownBlitter() WaitBlit() graphics.library/PolyDraw graphics.library/PolyDraw NAME PolyDraw -- Draw lines from table of (x,y) values. SYNOPSIS PolyDraw( rp, count , array ) a1 d0 a0 void PolyDraw( struct RastPort *, WORD, WORD * ); FUNCTION starting with the first pair in the array, draw connected lines to it and every successive pair. INPUTS rp - pointer to RastPort structure count - number of (x,y) pairs in the array array - pointer to first (x,y) pair BUGS SEE ALSO Draw() Move() graphics/rastport.h graphics.library/QBlit graphics.library/QBlit NAME QBlit -- Queue up a request for blitter usage SYNOPSIS QBlit( bp ) a1 void QBlit( struct bltnode * ); FUNCTION Link a request for the use of the blitter to the end of the current blitter queue. The pointer bp points to a blit structure containing, among other things, the link information, and the address of your routine which is to be called when the blitter queue finally gets around to this specific request. When your routine is called, you are in control of the blitter ... it is not busy with anyone else's requests. This means that you can directly specify the register contents and start the blitter. See the description of the blit structure and the uses of QBlit in the section titled Graphics Support in the OS Kernel Manual. Your code must be written to run either in supervisor or user mode on the 68000. INPUTS bp - pointer to a blit structure RESULT Your routine is called when the blitter is ready for you. In general requests for blitter usage through this channel are put in front of those who use the blitter via OwnBlitter and DisownBlitter. However for small blits there is more overhead using the queuer than Own/Disown Blitter. NOTES Code which uses QBlit(), or QBSBlit() should make use of the pointer to a cleanup routine in the bltnode structure. The cleanup routine may be called on the context of an interrupt, therefore the routine may set a flag, and signal a task, but it may not call FreeMem() directly. Use of the cleanup routine is the only safe way to signal that your bltnode has completed. BUGS QBlit(), and QBSBlit() have been rewritten for V39 due to various long standing bugs in earlier versions of this code. SEE ALSO QBSBlit() hardware/blit.h graphics.library/QBSBlit graphics.library/QBSBlit NAME QBSBlit -- Synchronize the blitter request with the video beam. SYNOPSIS QBSBlit( bsp ) a1 void QBSBlit( struct bltnode * ); FUNCTION Call a user routine for use of the blitter, enqueued separately from the QBlit queue. Calls the user routine contained in the blit structure when the video beam is located at a specified position onscreen. Useful when you are trying to blit into a visible part of the screen and wish to perform the data move while the beam is not trying to display that same area. (prevents showing part of an old display and part of a new display simultaneously). Blitter requests on the QBSBlit queue take precedence over those on the regular blitter queue. The beam position is specified the blitnode. INPUTS bsp - pointer to a blit structure. See description in the Graphics Support section of the manual for more info. RESULT User routine is called when the QBSBlit queue reaches this request AND the video beam is in the specified position. If there are lots of blits going on and the video beam has wrapped around back to the top it will call all the remaining bltnodes as fast as it can to try and catch up. NOTES QBlit(), and QBSBlit() have been rewritten for V39. Queued blits are now handled in FIFO order. Tasks trying to OwnBlitter() are now given a fair share of the total blitter time available. QBSBlit() are no longer queued separately from nodes added by QBlit(). This fixes the ordering dependencies listed under BUGS in prior autodoc notes. BUGS SEE ALSO QBlit() hardware/blit.h graphics.library/ReadPixel graphics.library/ReadPixel NAME ReadPixel -- read the pen number value of the pixel at a specified x,y location within a certain RastPort. SYNOPSIS penno = ReadPixel( rp, x, y ) d0 a1 d0:16 d1:16 LONG ReadPixel( struct RastPort *, SHORT, SHORT ); FUNCTION Combine the bits from each of the bit-planes used to describe a particular RastPort into the pen number selector which that bit combination normally forms for the system hardware selection of pixel color. INPUTS rp - pointer to a RastPort structure (x,y) a point in the RastPort RESULT penno - the pen number of the pixel at (x,y) is returned. -1 is returned if the pixel cannot be read for some reason. BUGS SEE ALSO WritePixel() graphics/rastport.h graphics.library/ReadPixelArray8 graphics.library/ReadPixelArray8 NAME ReadPixelArray8 -- read the pen number value of a rectangular array of pixels starting at a specified x,y location and continuing through to another x,y location within a certain RastPort. (V36) SYNOPSIS count = ReadPixelArray8(rp,xstart,ystart,xstop,ystop,array,temprp) D0 A0 D0:16 D1:16 D2:16 D3:16 A2 A1 LONG ReadPixelArray8(struct RastPort *, UWORD, UWORD, UWORD, UWORD, UBYTE *, struct RastPort *); FUNCTION For each pixel in a rectangular region, combine the bits from each of the bit-planes used to describe a particular RastPort into the pen number selector which that bit combination normally forms for the system hardware selection of pixel color. INPUTS rp - pointer to a RastPort structure (xstart,ystart) - starting point in the RastPort (xstop,ystop) - stopping point in the RastPort array - pointer to an array of UBYTEs from which to fetch the pixel data allocate at least ((((width+15)>>4)<<4)*(ystop-ystart+1)) bytes. temprp - temporary rastport (copy of rp with Layer set == NULL, temporary memory allocated for temprp->BitMap with Rows set == 1, temprp->BytesPerRow == (((width+15)>>4)<<1), and temporary memory allocated for temprp->BitMap->Planes[]) RESULT For each pixel in the array: Pen - (0..255) number at that position is returned count - the number of pixels read. NOTE xstop must be >= xstart ystop must be >= ystart BUGS SEE ALSO ReadPixel() ReadPixelLine8() graphics/rastport.h graphics.library/ReadPixelLine8 graphics.library/ReadPixelLine8 NAME ReadPixelLine8 -- read the pen number value of a horizontal line of pixels starting at a specified x,y location and continuing right for count pixels. (V36) SYNOPSIS count = ReadPixelLine8(rp,xstart,ystart,width,array,temprp) D0 A0 D0:16 D1:16 D2 A2 A1 LONG ReadPixelLine8(struct RastPort *, UWORD, UWORD, UWORD, UBYTE *, struct RastPort * ); FUNCTION For each pixel in a rectangular region, combine the bits from each of the bit-planes used to describe a particular RastPort into the pen number selector which that bit combination normally forms for the system hardware selection of pixel color. INPUTS rp - pointer to a RastPort structure (x,y) - a point in the RastPort width - count of horizontal pixels to read array - pointer to an array of UBYTEs from which to fetch the pixel data allocate at least (((width+15)>>4)<<4) bytes. temprp - temporary rastport (copy of rp with Layer set == NULL, temporary memory allocated for temprp->BitMap with Rows set == 1, temprp->BytesPerRow == (((width+15)>>4)<<1), and temporary memory allocated for temprp->BitMap->Planes[]) RESULT For each pixel in the array: Pen - (0..255) number at that position is returned count - the number of pixels read. NOTE width must be non negative BUGS SEE ALSO ReadPixel() graphics/rastport.h graphics.library/RectFill graphics.library/RectFill NAME RectFill -- Fill a rectangular region in a RastPort. SYNOPSIS RectFill( rp, xmin, ymin, xmax, ymax) a1 d0:16 d1:16 d2:16 d3:16 void RectFill( struct RastPort *, SHORT, SHORT, SHORT, SHORT ); FUNCTION Fills the rectangular region specified by the parameters with the chosen pen colors, areafill pattern, and drawing mode. If no areafill pattern is specified, fill the rectangular region with the FgPen color, taking into account the drawing mode. INPUTS rp - pointer to a RastPort structure (xmin,ymin) (xmax,ymax) are the coordinates of the upper left corner and the lower right corner, respectively, of the rectangle. NOTE The following relation MUST be true: (xmax >= xmin) and (ymax >= ymin) BUGS Complement mode with FgPen complements all bitplanes. SEE ALSO AreaEnd() graphics/rastport.h graphics.library/ReleasePen graphics.library/ReleasePen NAME ReleasePen -- Release an allocated palette entry to the free pool. (V39) SYNOPSIS ReleasePen( cm, n) a0 d0 void ReleasePen( Struct ColorMap *, ULONG); FUNCTION Return the palette entry for use by other applications. If the reference count for this palette entry goes to zero, then it may be reset to another RGB value. INPUTS cm = A pointer to a color map created by GetColorMap(). n = A palette index obtained via any of the palette allocation functions. Passing a -1 will result in this call doing nothing. BUGS NOTES This function works for both shared and exclusive palette entries. SEE ALSO GetColorMap() ObtainPen() ObtainBestPenA() graphics.library/RemBob graphics.library/RemBob NAME RemBob -- Macro to remove a Bob from the gel list. SYNOPSIS RemBob(bob) RemBob(struct Bob *); FUNCTION Marks a Bob as no-longer-required. The gels internal code then removes the Bob from the list of active gels the next time DrawGList is executed. This is implemented as a macro. If the user is double-buffering the Bob, it could take two calls to DrawGList before the Bob actually disappears from the RastPort. INPUTS Bob = pointer to the Bob to be removed RESULT BUGS SEE ALSO RemIBob() DrawGList() graphics/gels.h graphics/gfxmacros.h graphics.library/RemFont graphics.library/RemFont NAME RemFont -- Remove a font from the system list. SYNOPSIS RemFont(textFont) A1 void RemFont(struct TextFont *); FUNCTION This function removes a font from the system, ensuring that access to it is restricted to those applications that currently have an active pointer to it: i.e. no new SetFont requests to this font are satisfied. INPUTS textFont - the TextFont structure to remove. RESULT BUGS SEE ALSO SetFont() AddFont() graphics/text.h graphics.library/RemIBob graphics.library/RemIBob NAME RemIBob -- Immediately remove a Bob from the gel list and the RastPort. SYNOPSIS RemIBob(bob, rp, vp) A0 A1 A2 void RemIBob(struct Bob *, struct RastPort *, struct ViewPort *); FUNCTION Removes a Bob immediately by uncoupling it from the gel list and erases it from the RastPort. INPUTS bob = pointer to the Bob to be removed rp = pointer to the RastPort if the Bob is to be erased vp = pointer to the ViewPort for beam-synchronizing RESULT BUGS SEE ALSO InitGels() RemVSprite() graphics/gels.h graphics.library/RemVSprite graphics.library/RemVSprite NAME RemVSprite -- Remove a VSprite from the current gel list. SYNOPSIS RemVSprite(vs) A0 void RemVSprite(struct VSprite *); FUNCTION Unlinks the VSprite from the current gel list. INPUTS vs = pointer to the VSprite structure to be removed from the gel list RESULT BUGS SEE ALSO InitGels() RemIBob() graphics/gels.h graphics.library/ScalerDiv graphics.library/ScalerDiv NAME ScalerDiv -- Get the scaling result that BitMapScale would. (V36) SYNOPSIS result = ScalerDiv(factor, numerator, denominator) D0 D0 D1 D2 UWORD ScalerDiv(UWORD, UWORD, UWORD); FUNCTION Calculate the expression (factor*numerator/denominator) such that the result is the same as the width of the destination result of BitMapScale when the factor here is the width of the source, and the numerator and denominator are the XDestFactor and XSrcFactor for BitMapScale. INPUTS factor - a number in the range 0..16383 numerator, denominator - numbers in the range 1..16383 RESULT this returns factor*numerator/denominator graphics.library/ScrollRaster graphics.library/ScrollRaster NAME ScrollRaster -- Push bits in rectangle in raster around by dx,dy towards 0,0 inside rectangle. SYNOPSIS ScrollRaster(rp, dx, dy, xmin, ymin, xmax, ymax) A1 D0 D1 D2 D3 D4 D5 void ScrollRaster (struct RastPort *, WORD, WORD, WORD, WORD, WORD, WORD); FUNCTION Move the bits in the raster by (dx,dy) towards (0,0) The space vacated is RectFilled with BGPen. Limit the scroll operation to the rectangle defined by (xmin,ymin)(xmax,ymax). Bits outside will not be affected. If xmax,ymax is outside the rastport then use the lower right corner of the rastport. If you are dealing with a SimpleRefresh layered RastPort you should check rp->Layer->Flags & LAYERREFRESH to see if there is any damage in the damage list. If there is you should call the appropriate BeginRefresh(Intuition) or BeginUpdate(graphics) routine sequence. INPUTS rp - pointer to a RastPort structure dx,dy are integers that may be positive, zero, or negative xmin,ymin - upper left of bounding rectangle xmax,ymax - lower right of bounding rectangle EXAMPLE ScrollRaster(rp,0,1,minx,miny,maxx,maxy) /* shift raster up by one row */ ScrollRaster(rp,-1,-1,minx,miny,maxx,maxy) /* shift raster down and to the right by 1 pixel BUGS In 1.2/V1.3 if you ScrollRaster a SUPERBITMAP exactly left or right, and there is no TmpRas attached to the RastPort, the system will allocate one for you, but will never free it or record its location. This bug has been fixed for V36. The workaround for 1.2/1.3 is to attach a valid TmpRas of size at least MAXBYTESPERROW to the RastPort before the call. Beginning with V36 ScrollRaster adds the shifted areas into the damage list for SIMPLE_REFRESH windows. Due to unacceptable system overhead, the decision was made NOT to propagate this shifted area damage for SMART_REFRESH windows. SEE ALSO ScrollRasterBF() graphics/rastport.h graphics.library/ScrollRasterBF graphics.library/ScrollRasterBF NAME ScrollRasterBF -- Push bits in rectangle in raster around by dx,dy towards 0,0 inside rectangle. Newly empty areas will be filled via EraseRect(). (V39) SYNOPSIS ScrollRasterBF(rp, dx, dy, xmin, ymin, xmax, ymax) A1 D0 D1 D2 D3 D4 D5 void ScrollRasterBF (struct RastPort *, WORD, WORD, WORD, WORD, WORD, WORD); FUNCTION Move the bits in the raster by (dx,dy) towards (0,0) The space vacated is filled by calling EraseRect(). Limit the scroll operation to the rectangle defined by (xmin,ymin)(xmax,ymax). Bits outside will not be affected. If xmax,ymax is outside the rastport then use the lower right corner of the rastport. If you are dealing with a SimpleRefresh layered RastPort you should check rp->Layer->Flags & LAYERREFRESH to see if there is any damage in the damage list. If there is you should call the appropriate BeginRefresh(Intuition) or BeginUpdate(graphics) routine sequence. INPUTS rp - pointer to a RastPort structure dx,dy are integers that may be positive, zero, or negative xmin,ymin - upper left of bounding rectangle xmax,ymax - lower right of bounding rectangle NOTES This call is exactly the same as ScrollRaster, except that it calls EraseRect() instead of RectFill() when clearing the newly exposed area. This allows use of a custom layer backfill hook. BUGS SEE ALSO ScrollRaster() EraseRect() intuition.library/ScrollWindowRaster() graphics/rastport.h graphics.library/ScrollVPort graphics.library/ScrollVPort NAME ScrollVPort -- Reinterpret RasInfo information in ViewPort to reflect the current Offset values. SYNOPSIS ScrollVPort( vp ) a0 void ScrollVPort(struct ViewPort *vp); FUNCTION After the programmer has adjusted the Offset values in the RasInfo structures of ViewPort, change the the copper lists to reflect the the Scroll positions. Changing the BitMap ptr in RasInfo and not changing the the Offsets will effect a double buffering affect. INPUTS vp - pointer to a ViewPort structure that is currently be displayed. RESULTS modifies hardware and intermediate copperlists to reflect new RasInfo BUGS pokes not fast enough to avoid some visible hashing of display (V37) This function was re-written in V39 and is ~10 times faster than before. SEE ALSO MakeVPort() MrgCop() LoadView() graphics/view.h graphics.library/SetABPenDrMd graphics.library/SetABPenDrMd NAME SetABPenDrMd -- Set pen colors and draw mode for a RastPort. (V39) SYNOPSIS SetABPenDrMd( rp, apen, bpen, mode ) a1 d0 d1 d2 void SetABPenDrMd( struct RastPort *, ULONG, ULONG, ULONG ); FUNCTION Set the pen values and drawing mode for lines, fills and text. Get the bit definitions from rastport.h INPUTS rp - pointer to RastPort structure. apen - primary pen value bpen - secondary pen value mode - 0-255, some combinations may not make much sense. RESULT The mode set is dependent on the bits selected. Changes minterms to reflect new drawing mode and colors. Sets line drawer to restart pattern. NOTES This call is essentially the same as a sequence of SetAPen()/SetBPen()/SetDrMD() calls, except that it is significantly faster. The minterms will only be generated once, or not at all if nothing changed (warning to illegal RastPort pokers!). BUGS SEE ALSO SetAPen() SetBPen() SetDrMd() graphics/rastport.h graphics.library/SetAPen graphics.library/SetAPen NAME SetAPen -- Set the primary pen for a RastPort. SYNOPSIS SetAPen( rp, pen ) a1 d0 void SetAPen( struct RastPort *, UBYTE ); FUNCTION Set the primary drawing pen for lines, fills, and text. INPUTS rp - pointer to RastPort structure. pen - (0-255) RESULT Changes the minterms in the RastPort to reflect new primary pen. Sets line drawer to restart pattern. BUGS SEE ALSO SetBPen() graphics/rastport.h graphics.library/SetBPen graphics.library/SetBPen NAME SetBPen -- Set secondary pen for a RastPort SYNOPSIS SetBPen( rp, pen ) a1 d0 void SetBPen( struct RastPort *, UBYTE ); FUNCTION Set the secondary drawing pen for lines, fills, and text. INPUTS rp - pointer to RastPort structure. pen - (0-255) RESULT Changes the minterms in the RastPort to reflect new secondary pen. Sets line drawer to restart pattern. BUGS SEE ALSO SetAPen() graphics/rastport.h graphics.library/SetChipRev graphics.library/SetChipRev NAME SetChipRev -- turns on the features of a Chip Set (V39) SYNOPSIS chiprevbits = SetChipRev(ChipRev) d0 ULONG SetChipRev(ULONG); FUNCTION Enables the features of the requested Chip Set if available, and updates the graphics database accordingly. INPUTS ChipRev - Chip Rev that you would like to be enabled. RESULT chiprevbits - Actual bits set in GfxBase->ChipRevBits0. NOTES This routine should only be called once. It will be called by the system in the startup-sequence, but is included in the autodocs for authors of bootblock-games that wish to take advantage of post-ECS features. SEE ALSO graphics.library/SetCollision graphics.library/SetCollision NAME SetCollision -- Set a pointer to a user collision routine. SYNOPSIS SetCollision(num, routine, GInfo) D0 A0 A1 void SetCollision(ULONG, VOID (*)(), struct GelsInfo *); FUNCTION Sets a specified entry (num) in the user's collision vectors table equal to the address of the specified collision routine. INPUTS num = collision vector number routine = pointer to the user's collision routine GInfo = pointer to a GelsInfo structure RESULT BUGS SEE ALSO InitGels() graphics/gels.h graphics/rastport.h graphics.library/SetDrMd graphics.library/SetDrMd NAME SetDrMd -- Set drawing mode for a RastPort SYNOPSIS SetDrMd( rp, mode ) a1 d0:8 void SetDrMd( struct RastPort *, UBYTE ); FUNCTION Set the drawing mode for lines, fills and text. Get the bit definitions from rastport.h INPUTS rp - pointer to RastPort structure. mode - 0-255, some combinations may not make much sense. RESULT The mode set is dependent on the bits selected. Changes minterms to reflect new drawing mode. Sets line drawer to restart pattern. BUGS SEE ALSO SetAPen() SetBPen() graphics/rastport.h graphics.library/SetFont graphics.library/SetFont NAME SetFont -- Set the text font and attributes in a RastPort. SYNOPSIS SetFont(rp, font) A1 A0 void SetFont(struct RastPort *, struct TextFont *); FUNCTION This function sets the font in the RastPort to that described by font, and updates the text attributes to reflect that change. This function clears the effect of any previous soft styles. INPUTS rp - the RastPort in which the text attributes are to be changed font - pointer to a TextFont structure returned from OpenFont() or OpenDiskFont() RESULT NOTES This function had previously been documented that it would accept a null font. This practice is discouraged. o Use of a RastPort with a null font with text routines has always been incorrect and risked the guru. o Keeping an obsolete font pointer in the RastPort is no more dangerous than keeping a zero one there. o SetFont(rp, 0) causes spurious low memory accesses under some system software releases. As of V36, the following Amiga font variants are no longer directly supported: fonts with NULL tf_CharSpace and non-NULL tf_CharKern. fonts with non-NULL tf_CharSpace and NULL tf_CharKern. fonts with NULL tf_CharSpace and NULL tf_CharKern with a tf_CharLoc size component greater than tf_XSize. Attempts to SetFont these one of these font variants will cause the system to modify your font to make it acceptable. BUGS Calling SetFont() on in-code TextFonts (ie fonts not OpenFont()ed) will result in a loss of 24 bytes from the system as of V36. This can be resolved by calling StripFont(). SEE ALSO OpenFont() StripFont() diskfont.library/OpenDiskFont() graphics/text.h graphics.library/SetMaxPen graphics.library/SetMaxPen NAME SetMaxPen -- set maximum pen value for a rastport (V39). SYNOPSIS SetMaxPen ( rp, maxpen) a0 d0 void SetMaxPen(struct RastPort *,ULONG) FUNCTION This will instruct the graphics library that the owner of the rastport will not be rendering in any colors whose index is >maxpen. If there are any speed optimizations which the graphics device can make based on this fact (for instance, setting the pixel write mask), they will be done. Basically this call sets the rastport mask, if this would improve speed. On devices where masking would slow things down (like with chunky pixels), it will be a no-op. INPUTS rp = a pointer to a valid RastPort structure. maxpen = a longword pen value. BUGS NOTES The maximum pen value passed must take into account not only which colors you intend to render in the future, but what colors you will be rendering on top of. SetMaxPen(rp,0) doesn't make much sense. SEE ALSO SetWriteMask() graphics.library/SetOPen graphics.library/SetOPen NAME SetOPen -- Change the Area OutLine pen and turn on Outline mode for areafills. SYNOPSIS SetOPen(rp, pen) void SetOPen( struct RastPort *, UBYTE ); FUNCTION This is implemented as a c-macro. Pen is the pen number that will be used to draw a border around an areafill during AreaEnd(). INPUTS rp = pointer to RastPort structure pen = number between 0-255 BUGS SEE ALSO AreaEnd() graphics/gfxmacros.h graphics/rastport.h graphics.library/SetOutlinePen graphics.library/SetOutlinePen NAME SetOutlinePen -- Set the Outline Pen value for a RastPort (V39). SYNOPSIS old_pen=SetOutlinePen ( rp, pen ) d0 a0 d0 ULONG SetOutlinePen(struct RastPort *,ULONG) FUNCTION Set the current value of the O pen for the rastport and turn on area outline mode. This function should be used instead of poking the structure directly, because future graphics devices may store it differently, for instance, using more bits. INPUTS rp = a pointer to a valid RastPort structure. pen = a longword pen number returns the previous outline pen BUGS NOTES SEE ALSO GetOPen() graphics/gfxmacros.h graphics.library/SetRast graphics.library/SetRast NAME SetRast - Set an entire drawing area to a specified color. SYNOPSIS SetRast( rp, pen ) a1 d0 void SetRast( struct RastPort *, UBYTE ); FUNCTION Set the entire contents of the specified RastPort to the specified pen. INPUTS rp - pointer to RastPort structure pen - the pen number (0-255) to jam into bitmap RESULT All pixels within the drawing area are set to the selected pen number. BUGS SEE ALSO RectFill() graphics/rastport.h graphics.library/SetRGB32 graphics.library/SetRGB32 NAME SetRGB32 -- Set one color register for this Viewport. (V39) SYNOPSIS SetRGB32( vp, n, r, g, b) a0 d0 d1 d2 d3 void SetRGB32( struct ViewPort *, ULONG, ULONG, ULONG, ULONG ); INPUTS vp = viewport n = the number of the color register to set. r = red level (32 bit left justified fraction) g = green level (32 bit left justified fraction) b = blue level (32 bit left justified fraction) RESULT If there is a ColorMap for this viewport, then the value will be stored in the ColorMap. The selected color register is changed to match your specs. If the color value is unused then nothing will happen. BUGS NOTES Lower order bits of the palette specification will be discarded, depending on the color palette resolution of the target graphics device. Use 0xffffffff for the full value, 0x7fffffff for 50%, etc. You can find out the palette range for your screen by querying the graphics data base. SEE ALSO GetColorMap() GetRGB32() SetRGB32CM() LoadRGB32() graphics/view.h graphics.library/SetRGB32CM graphics.library/SetRGB32CM NAME SetRGB32CM -- Set one color register for this ColorMap. (V39) SYNOPSIS SetRGB32CM( cm, n, r, g, b) a0 d0 d1 d2 d3 void SetRGB4CM( struct ColorMap *, ULONG, ULONG, ULONG , ULONG); INPUTS cm = colormap n = the number of the color register to set. Must not exceed the numbe r of colors allocated for the colormap. r = red level (32 bit unsigned left justified fraction) g = green level b = blue level RESULT Store the (r,g,b) triplet at index n of the ColorMap structure. This function can be used to set up a ColorMap before before linking it into a viewport. BUGS SEE ALSO GetColorMap() GetRGB32() SetRGB32() SetRGB4CM() graphics/view.h graphics.library/SetRGB4 graphics.library/SetRGB4 NAME SetRGB4 -- Set one color register for this viewport. SYNOPSIS SetRGB4( vp, n, r, g, b) a0 d0 d1:4 d2:4 d3:4 void SetRGB4( struct ViewPort *, SHORT, UBYTE, UBYTE, UBYTE ); FUNCTION Change the color look up table so that this viewport displays the color (r,g,b) for pen number n. INPUTS vp - pointer to viewport structure n - the color number (range from 0 to 31) r - red level (0-15) g - green level (0-15) b - blue level (0-15) RESULT If there is a ColorMap for this viewport, then the value will be stored in the ColorMap. The selected color register is changed to match your specs. If the color value is unused then nothing will happen. BUGS NOTE: Under V36 and up, it is not safe to call this function from an interrupt, due to semaphore protection of graphics copper lists. SEE ALSO LoadRGB4() GetRGB4() graphics/view.h graphics.library/SetRGB4CM graphics.library/SetRGB4CM NAME SetRGB4CM -- Set one color register for this ColorMap. SYNOPSIS SetRGB4CM( cm, n, r, g, b) a0 d0 d1:4 d2:4 d3:4 void SetRGB4CM( struct ColorMap *, SHORT, UBYTE, UBYTE, UBYTE ); INPUTS cm = colormap n = the number of the color register to set. Ranges from 0 to 31 on current Amiga displays. r = red level (0-15) g = green level (0-15) b = blue level (0-15) RESULT Store the (r,g,b) triplet at index n of the ColorMap structure. This function can be used to set up a ColorMap before before linking it into a viewport. BUGS SEE ALSO GetColorMap() GetRGB4() SetRGB4() graphics/view.h graphics.library/SetRPAttrA graphics.library/SetRPAttrA NAME SetRPAttrA -- modify rastport settings via a tag list SetRPAttrs -- varargs stub for SetRPAttrA SYNOPSIS SetRPAttrA(rp,tags) a0 a1 void SetRPAttrA(struct RastPort *, struct TagItem *); SetRPAttrs(rp,tag,...); FUNCTION Modify settings of a rastport, based on the taglist passed. currently available tags are: RPTAG_Font Font for Text() RPTAG_SoftStyle style for text (see graphics/text.h) RPTAG_APen Primary rendering pen RPTAG_BPen Secondary rendering pen RPTAG_DrMd Drawing mode (see graphics/rastport.h) RPTAG_OutLinePen Area Outline pen RPTAG_WriteMask Bit Mask for writing. RPTAG_MaxPen Maximum pen to render (see SetMaxPen()) INPUTS rp - pointer to the RastPort to modify. tags - a standard tag list RESULT BUGS SEE ALSO SetFont() SetSoftStyle() SetAPen() SetBPen() SetDrMd() SetOutLinePen() SetWriteMask() SetMaxPen() GetRPAttrA() graphics/rpattr.h graphics.library/SetSoftStyle graphics.library/SetSoftStyle NAME SetSoftStyle -- Set the soft style of the current font. SYNOPSIS newStyle = SetSoftStyle(rp, style, enable) D0 A1 D0 D1 ULONG SetSoftStyle(struct RastPort *, ULONG, ULONG); FUNCTION This function alters the soft style of the current font. Only those bits that are also set in enable are affected. The resulting style is returned, since some style request changes will not be honored when the implicit style of the font precludes changing them. INPUTS rp - the RastPort from which the font and style are extracted. style - the new font style to set, subject to enable. enable - those bits in style to be changed. Any set bits here that would not be set as a result of AskSoftStyle will be ignored, and the newStyle result will not be as expected. RESULTS newStyle - the resulting style, both as a result of previous soft style selection, the effect of this function, and the style inherent in the set font. BUGS SEE ALSO AskSoftStyle() graphics/text.h graphics.library/SetWriteMask graphics.library/SetWriteMask NAME SetWriteMask -- Set the pixel write mask value for a RastPort (V39). SYNOPSIS success=SetWriteMask ( rp, msk ) d0 a0 d0 ULONG SetWriteMask(struct RastPort *,ULONG) FUNCTION Set the current value of the bit write mask for the rastport. bits of the pixel with zeros in their mask will not be modified by subsequent drawing operations. INPUTS rp = a pointer to a valid RastPort structure. msk = a longword mask value. Graphics devices which do not support per-bit masking will return 0 (failure). BUGS NOTES SEE ALSO graphics/gfxmacros.h graphics.library/SortGList graphics.library/SortGList NAME SortGList -- Sort the current gel list, ordering its y,x coordinates. SYNOPSIS SortGList(rp) A1 void SortGList(struct RastPort *); FUNCTION Sorts the current gel list according to the gels' y,x coordinates. This sorting is essential before calls to DrawGList or DoCollision. INPUTS rp = pointer to the RastPort structure containing the GelsInfo RESULT BUGS SEE ALSO InitGels() DoCollision() DrawGList() graphics/rastport.h graphics.library/StripFont graphics.library/StripFont NAME StripFont -- remove the tf_Extension from a font (V36) SYNOPSIS StripFont(font) A0 VOID StripFont(struct TextFont *); graphics.library/SyncSBitMap graphics.library/SyncSBitMap NAME SyncSBitMap -- Syncronize Super BitMap with whatever is in the standard Layer bounds. SYNOPSIS SyncSBitMap( layer ) a0 void SyncSBitMap( struct Layer * ); FUNCTION Copy all bits from ClipRects in Layer into Super BitMap BitMap. This is used for those functions that do not want to deal with the ClipRect structures but do want to be able to work with a SuperBitMap Layer. INPUTS layer - pointer to a Layer that has a SuperBitMap The Layer should already be locked by the caller. RESULT After calling this function, the programmer can manipulate the bits in the superbitmap associated with the layer. Afterwards, the programmer should call CopySBitMap to copy the bits back into the onscreen layer. BUGS SEE ALSO CopySBitMap() graphics/clip.h graphics.library/Text graphics.library/Text NAME Text -- Write text characters (no formatting). SYNOPSIS Text(rp, string, length) A1 A0 D0-0:16 void Text(struct RastPort *, STRPTR, WORD); FUNCTION This graphics function writes printable text characters to the specified RastPort at the current position. No control meaning is applied to any of the characters, thus only text on the current line is output. The current position in the RastPort is updated to the next character position. If the characters displayed run past the RastPort boundary, the current position is truncated to the boundary, and thus does not equal the old position plus the text length. INPUTS rp - a pointer to the RastPort which describes where the text is to be output string - the address of string to output length - the number of characters in the string. If zero, there are no characters to be output. NOTES o This function may use the blitter. o Changing the text direction with RastPort->TxSpacing is not supported. BUGS For V34 and earlier: o The maximum string length (in pixels) is limited to (1024 - 16 = 1008) pixels wide. o A text string whose last character(s) have a tf_CharLoc size component that extends to the right of the rightmost of the initial and final CP positions will be (inappropriately) clipped. SEE ALSO Move() TextLength() graphics/text.h graphics/rastport.h graphics.library/TextExtent graphics.library/TextExtent NAME TextExtent -- Determine raster extent of text data. (V36) SYNOPSIS TextExtent(rp, string, count, textExtent) A1 A0 D0:16 A2 void textExtent(struct RastPort *, STRPTR, WORD, struct TextExtent *); FUNCTION This function determines a more complete metric of the space that a text string would render into than the TextLength() function. INPUTS rp - a pointer to the RastPort which describes where the text attributes reside. string - the address of the string to determine the length of. count - the number of characters in the string. If zero, there are no characters in the string. textExtent - a structure to hold the result. RESULTS textExtent is filled in as follows: te_Width - same as TextLength() result: the rp_cp_x advance that rendering this text would cause. te_Height - same as tf_YSize. The height of the font. te_Extent.MinX - the offset to the left side of the rectangle this would render into. Often zero. te_Extent.MinY - same as -tf_Baseline. The offset from the baseline to the top of the rectangle this would render into. te_Extent.MaxX - the offset of the left side of the rectangle this would render into. Often the same as te_Width-1. te_Extent.MaxY - same as tf_YSize-tf_Baseline-1. The offset from the baseline to the bottom of the rectangle this would render into. SEE ALSO TextLength() Text() TextFit() graphics/text.h graphics/rastport.h graphics.library/TextFit graphics.library/TextFit NAME TextFit - count characters that will fit in a given extent (V36) SYNOPSIS chars = TextFit(rastport, string, strLen, textExtent, D0 A1 A0 D0 A2 constrainingExtent, strDirection, A3 D1 constrainingBitWidth, constrainingBitHeight) D2 D3 ULONG TextFit(struct RastPort *, STRPTR, UWORD, struct TextExtent *, struct TextExtent *, WORD, UWORD, UWORD); FUNCTION This function determines how many of the characters of the provided string will fit into the space described by the constraining parameters. It also returns the extent of that number of characters. INPUTS rp - a pointer to the RastPort which describes where the text attributes reside. string - the address of string to determine the constraint of strLen - The number of characters in the string. If zero, there are no characters in the string. textExtent - a structure to hold the extent result. constrainingExtent - the extent that the text must fit in. This can be NULL, indicating only the constrainingBit dimensions will describe the constraint. strDirection - the offset to add to the string pointer to get to the next character in the string. Usually 1. Set to -1 and the string to the end of the string to perform a TextFit() anchored at the end. No other value is valid. constrainingBitWidth - an alternative way to specify the rendering box constraint width that is independent of the rendering origin. Range 0..32767. constrainingBitHeight - an alternative way to specify the rendering box constraint height that is independent of the rendering origin. Range 0..32767. RESULTS chars - the number of characters from the origin of the given string that will fit in both the constraining extent (which specifies a CP bound and a rendering box relative to the origin) and in the rendering width and height specified. NOTES The result is zero chars and an empty textExtent when the fit cannot be performed. This occurs not only when no text will fit in the provided constraints, but also when: - the RastPort rp's rp_TxSpacing sign and magnitude is so great it reverses the path of the text. - the constrainingExtent does not include x = 0. BUGS Under V37, TextFit() would return one too few characters if the font was proportional. This can be worked around by passing (constrainingBitWidth + 1) for proportional fonts. This is fixed for V39. SEE ALSO TextExtent() TextLength() Text() graphics/text.h graphics/rastport.h graphics.library/TextLength graphics.library/TextLength NAME TextLength -- Determine raster length of text data. SYNOPSIS length = TextLength(rp, string, count) D0 A1 A0 D0:16 WORD TextLength(struct RastPort *, STRPTR, WORD); FUNCTION This graphics function determines the length that text data would occupy if output to the specified RastPort with the current attributes. The length is specified as the number of raster dots: to determine what the current position would be after a Text() using this string, add the length to cp_x (cp_y is unchanged by Text()). Use the newer TextExtent() to get more information. INPUTS rp - a pointer to the RastPort which describes where the text attributes reside. string - the address of string to determine the length of count - the string length. If zero, there are no characters in the string. RESULTS length - the number of pixels in x this text would occupy, not including any negative kerning that may take place at the beginning of the text string, nor taking into account the effects of any clipping that may take place. NOTES Prior to V36, the result length occupied only the low word of d0 and was not sign extended into the high word. BUGS A length that would overflow single word arithmetic is not calculated correctly. SEE ALSO TextExtent() Text() TextFit() graphics/text.h graphics/rastport.h graphics.library/UnlockLayerRom graphics.library/UnlockLayerRom NAME UnlockLayerRom -- Unlock Layer structure by ROM(gfx lib) code. SYNOPSIS UnlockLayerRom( layer ) a5 void UnlockLayerRom( struct Layer * ); FUNCTION Release the lock on this layer. If the same task has called LockLayerRom more than once than the same number of calls to UnlockLayerRom must happen before the layer is actually freed so that other tasks may use it. This call does destroy scratch registers. This call is identical to UnlockLayer (layers.library). INPUTS layer - pointer to Layer structure BUGS SEE ALSO LockLayerRom() layers.library/UnlockLayer() graphics/clip.h graphics.library/VBeamPos graphics.library/VBeamPos NAME VBeamPos -- Get vertical beam position at this instant. SYNOPSIS pos = VBeamPos() d0 LONG VBeamPos( void ); FUNCTION Get the vertical beam position from the hardware. INPUTS none RESULT interrogates hardware for beam position and returns value. valid results in are the range of 0-511. Because of multitasking, the actual value returned may have no use. If you are the highest priority task then the value returned should be close, within 1 line. BUGS SEE ALSO graphics.library/VideoControl graphics.library/VideoControl NAME VideoControl -- Modify the operation of a ViewPort's ColorMap (V36) VideoControlTags -- varargs stub for VideoControl (V36) SYNOPSIS error = VideoControl( cm , tags ) d0 a0 a1 ULONG VideoControl( struct ColorMap *, struct TagItem * ); error= VideoControlTags(cm, tags,...); FUNCTION Process the commands in the VideoControl command TagItem buffer using cm as the target, with respect to its "attached" ViewPort. viewport commands: VTAG_ATTACH_CM [_SET | _GET] -- set/get attached viewport VTAG_VIEWPORTEXTRA [_SET | _GET] -- set/get attached vp_extra VTAG_NORMAL_DISP [_SET | _GET] -- set/get DisplayInfoHandle (natural mode) VTAG_COERCE_DISP [_SET | _GET] -- set/get DisplayInfoHandle (coerced mode) VTAG_PF1_BASE [_SET | _GET] -- set/get color base for first playfield. (V39) VTAG_PF2_BASE [_SET | _GET] -- set/get color base for second playfield. (V39) VTAG_SPODD_BASE [_SET | _GET] -- set/get color base for odd sprites. (V39) VTAG_SPEVEN_BASE [_SET | _GET] -- set/get color base for even sprites. (V39) VTAG_BORDERSPRITE [_SET | _GET] -- on/off/inquire sprites in borders. (V39) VTAG_SPRITERESN [_SET | _GET] -- set/get sprite resolution (legal values are SPRITERESN_ECS/_140NS/_70NS/_35NS. see graphics/view.h) (V39) VTAG_PF1_TO_SPRITEPRI [_SET | _GET] -- set/get playfield1 priority with respect to sprites (V3 9) VTAG_PF2_TO_SPRITEPRI [_SET | _GET] -- set/get playfield2 priority with respect to sprites (V3 9) (These two require that the ColorMap is attached to a ViewPort to be effective). genlock commands: VTAG_BORDERBLANK [_SET | _CLR | _GET] -- on/off/inquire blanking VTAG_BORDERNOTRANS [_SET | _CLR | _GET] -- on/off/inquire notransparency VTAG_CHROMAKEY [_SET | _CLR | _GET] -- on/off/inquire chroma mode VTAG_BITPLANEKEY [_SET | _CLR | _GET] -- on/off/inquire bitplane mode VTAG_CHROMA_PEN [_SET | _CLR | _GET] -- set/clr/get chromakey pen # VTAG_CHROMA_PLANE [_SET | | _GET] -- set/get bitplanekey plane # control commands: VTAG_IMMEDIATE - normally, VideoControl changes do not occur until the next MakeVPort. Using this tag, some changes can be made to happen immediately. The tag data is a pointer to a longword flag variable which will be cleared if all changes happened immediately. See the example. (V39) VTAG_FULLPALETTE [_SET | _CLR | _GET] -- enable/disable loading of all colors in the copper list. Normally, graphics will only load the color which are necessary for the viewport, based upon the screen depth and mode. In order to use the color palette banking features, you may need to use this tag to tell graphics to load ALL colors, regardless of screen depth. (V39) VC_IntermediateCLUpdate VC_IntermediateCLUpdate_Query When set, graphics will update the intermediate copper lists on colour changes. When FALSE, graphics won't update the intermediate copperlists, so ScrollVPort(), ChangeVPBitMap() and colour loading functions will be faster. This value is TRUE by default. (V40) VC_NoColorPaletteLoad VC_NoColorPaletteLoad_Query When set, only colour 0 will be loaded for this ViewPort, hence the inter-ViewPort gap will be smaller. The colours for this ViewPort are inherited from the next higher ViewPort. The results are undefined if this is the first or only ViewPort in the display, and undefined when used in conjunction with VTAG_FULLPALETTE (!?!). This value is FALSE by default. (V40) VC_DUALPF_Disable VC_DUALPF_Disable_Query When set, disables the setting of the dual-playfield bit in bplcon0. When used with a dual-playfield mode screen, this allows using separate scroll and bitmaps for the odd and even bitplanes, without going through the normal dual-playfield priority and palette selection. With appropriate palette setup, this can be used for transparency effects, etc. copper commands VTAG_USERCLIP [_SET | _CLR | _GET] -- on/off/inquire clipping of UserCopperList at bottom edge of ColorMap->cm_vp (defaults to off) buffer commands: VTAG_NEXTBUF_CM -- link to more VTAG commands VTAG_END_CM -- terminate command buffer batch mode commands: (if you want your videocontrol taglist to be processed in "batch" mode, that is, at the next MakeVPort() for the ColorMap->cm_vp; you may install a static list of videocontrol TagItems into the ColorMap with the BATCH_ITEMS_SET command; and then enable/disable batch mode processing of those items via the BATCH_CM control command) VTAG_BATCH_CM [_SET | _CLR | _GET] -- on/off/inquire batch mode VTAG_BATCH_ITEMS [_SET | _ADD | _GET] -- set/add/get batched TagLists private commands (used internally by intuition -- do not call): VTAG_VPMODEID [_SET | _CLR | _GET] -- force GetVPModeID() return INPUTS cm = pointer to struct ColorMap obtained via GetColorMap(). tags = pointer to a table of videocontrol tagitems. RESULT error = NULL if no error occurred in the control operation. (non-NULL if bad colormap pointer, no tagitems or bad tag) The operating characteristics of the ColorMap and its attached ViewPort are modified. The result will be incorporated into the ViewPort when its copper lists are reassembled via MakeVPort(). Note that you must NOT change colors in the viewport (via SetRGB4(), LoadRGB4(), SetRGB4(), etc.) after changing any of the color palette offsets (VTAG_PF1_BASE, etc), without first remaking the ViewPort. NOTES Sprite resolutions is controlled by two sets of tags, SPRITERESN and DEFSPRITERESN. If you don't set the sprite resolution, it will follow the intuition-controlled "default" sprite resolution. Setting the sprite resolution to one of the SPRITERESN_ values will allow the application to override intuition's control of it. This function will modify the contents of the TagList you pass to it by changing _GET tags to the corresponding _SET or _CLR tag. The exceptions to this rule are documented as such above (such as VTAG_IMMEDIATE). The new tags added for V40 have the prefix VC_ instead of VTAG_. These tags work in the same manner as all other tags in the system, and will not be modified by VideoControl(). EXAMPLE must_remake=-1; error=VideoControl(myvp->ColorMap,VTAG_BORDERBLANK_SET,-1, (GFXBase->lib_Version>=39)?VTAG_IMMEDIATE:TAG_IGNORE, &must_remake); if (must_remake) { MakeVPort(myview,myvp); MrgCop(myview); } EXAMPLE struct TagItem VCTags[] = { {VTAG_BORDERBLANK_GET, NULL}, {VTAG_SPRITERESN_SET, SPRITERESN_35NS}, {TAG_DONE, NULL}, }; BOOL bblank = FALSE; if (VideoControl(cm, VCTags) == NULL) { bblank = (VCTags[0].ti_Tag == VTAG_BORDERBLANK_SET); } EXAMPLE struct TagItem VCTags[] = { {VC_NoColorPaletteLoad_Query, NULL}, {TAG_DONE}, }; ULONG query; VCTags[0].ti_Data = (ULONG)&query; if (VideoControl(cm, VCTags) == NULL) { printf("Palette loading is %s\n", (query ? "off" : "on")); } BUGS SEE ALSO graphics/videocontrol.h, GetColorMap(), FreeColorMap() graphics.library/WaitBlit graphics.library/WaitBlit NAME WaitBlit -- Wait for the blitter to be finished before proceeding with anything else. SYNOPSIS WaitBlit() void WaitBlit( void ); FUNCTION WaitBlit returns when the blitter is idle. This function should normally only be used when dealing with the blitter in a synchronous manner, such as when using OwnBlitter and DisownBlitter. WaitBlit does not wait for all blits queued up using QBlit or QBSBlit. You should call WaitBlit if you are just about to modify or free some memory that the blitter may be using. INPUTS none RESULT Your program waits until the blitter is finished. This routine does not use any the CPU registers. do/d1/a0/a1 are preserved by this routine. It may change the condition codes though. BUGS When examining bits with the CPU right after a blit, or when freeing temporary memory used by the blitter, a WaitBlit() may be required. Note that many graphics calls fire up the blitter, and let it run. The CPU does not need to wait for the blitter to finish before returning. Because of a bug in Agnus (prior to all revisions of fat Agnus) this code may return too soon when the blitter has, in fact, not started the blit yet, even though BltSize has been written. This most often occurs in a heavily loaded system with extended memory, HIRES, and 4 bitplanes. WaitBlit currently tries to avoid this Agnus problem by testing the BUSY bit multiple times to make sure the blitter has started. If the blitter is BUSY at first check, this function busy waits. This initial hardware bug was fixed as of the first "Fat Agnus" chip, as used in all A500 and A2000 computers. Because of a different bug in Agnus (currently all revisions thru ECS) this code may return too soon when the blitter has, in fact, not stopped the blit yet, even though blitter busy has been cleared. This most often occurs in a heavily loaded system with extended memory, in PRODUCTIVITY mode, and 2 bitplanes. WaitBlit currently tries to avoid this Agnus problem by testing the BUSY bit multiple times to make sure the blitter has really written its final word of destination data. SEE ALSO OwnBlitter() DisownBlitter() hardware/blit.h graphics.library/WaitBOVP graphics.library/WaitBOVP NAME WaitBOVP -- Wait till vertical beam reached bottom of this viewport. SYNOPSIS WaitBOVP( vp ) a0 void WaitBOVP( struct ViewPort * ); FUNCTION Returns when the vertical beam has reached the bottom of this viewport INPUTS vp - pointer to ViewPort structure RESULT This function will return sometime after the beam gets beyond the bottom of the viewport. Depending on the multitasking load of the system, the actual beam position may be different than what would be expected in a lightly loaded system. BUGS Horrors! This function currently busy waits waiting for the beam to get to the right place. It should use the copper interrupt to trigger and send signals like WaitTOF does. SEE ALSO WaitTOF() VBeamPos() graphics.library/WaitTOF graphics.library/WaitTOF NAME WaitTOF -- Wait for the top of the next video frame. SYNOPSIS WaitTOF() void WaitTOF( void ); FUNCTION Wait for vertical blank to occur and all vertical blank interrupt routines to complete before returning to caller. INPUTS none RESULT Places this task on the TOF wait queue. When the vertical blank interrupt comes around, the interrupt service routine will fire off signals to all the tasks doing WaitTOF. The highest priority task ready will get to run then. BUGS SEE ALSO exec.library/Wait() exec.library/Signal() graphics.library/WriteChunkyPixels graphics.library/WriteChunkyPixels NAME WriteChunkyPixels -- write the pen number value of a rectangular array of pixels starting at a specified x,y location and continuing through to another x,y location within a certain RastPort. (V40) SYNOPSIS WriteChunkyPixels(rp,xstart,ystart,xstop,ystop,array,bytesperrow) A0 D0 D1 D2 D3 A2 D4 VOID WriteChunkyPixels(struct RastPort *, LONG, LONG, LONG, LONG, UBYTE *, LONG); FUNCTION For each pixel in a rectangular region, decode the pen number selector from a linear array of pen numbers into the bit-planes used to describe a particular rastport. INPUTS rp - pointer to a RastPort structure (xstart,ystart) - starting point in the RastPort (xstop,ystop) - stopping point in the RastPort array - pointer to an array of UBYTEs from which to fetch the pixel data. bytesperrow - The number of bytes per row in the source array. This should be at least as large as the number of pixels being written per line. RESULT NOTE xstop must be >= xstart ystop must be >= ystart The source array can be in fast RAM. ===chunky-to-planar conversion HW: GfxBase->ChunkyToPlanarPtr is either NULL, or a pointer to a HW register used to aid in the process of converting 8-bit chunky pixel data into the bit-plane format used by the Amiga custom display chips. If NULL, then such hardware is not present. If an expansion device provides hardware which operates compatibly, than it can install the HW address into this pointer at boot time, and the system will use it. This pointer may be used for direct access to the chunky-to-planar conversion HW, if more is desired than the straight chunky-pixel copy that is performed by WriteChunkyPixels(). If using the hardware directly, it should only be accessed when the task using it has control of the blitter (via OwnBlitter()), since this is the locking used to arbitrate usage of this device. The hardware may be viewed as a device which accepts 32 8-bit chunky pixels and outputs 8 longwords of bitplane data. For proper operation, exactly 8 longwords (containing 32 pixels) of chunky data should be written to *(GfxBase->ChunkyToPlanarPtr). After the data is written, bitplane data (starting with plane 0) can be read back a longword at a time. There is no need to read back all 8 longwords if the high-order bitplanes are not needed. Since WriteChunkyPixels is not (currently) particularly fast on systems without the chunky-to-planar hardware, time critical applications (games, etc) may want to use their own custom conversion routine if GfxBase->ChunkyToPlanarPtr is NULL, and call WriteChunkyPixels() otherwise. This pointer is only present in GfxBase in versions of graphics.library >= 40, so this should be checked before the pointer is read. BUGS Not very fast on systems without chunky-to-planar conversion hardware. SEE ALSO WritePixel() graphics/rastport.h graphics.library/WritePixel graphics.library/WritePixel NAME WritePixel -- Change the pen num of one specific pixel in a specified RastPort. SYNOPSIS error = WritePixel( rp, x, y) d0 a1 D0 D1 LONG WritePixel( struct RastPort *, SHORT, SHORT ); FUNCTION Changes the pen number of the selected pixel in the specified RastPort to that currently specified by PenA, the primary drawing pen. Obeys minterms in RastPort. INPUTS rp - a pointer to the RastPort structure (x,y) - point within the RastPort at which the selected pixel is located. RESULT error = 0 if pixel succesfully changed = -1 if (x,y) is outside the RastPort BUGS SEE ALSO ReadPixel() graphics/rastport.h graphics.library/WritePixelArray8 graphics.library/WritePixelArray8 NAME WritePixelArray8 -- write the pen number value of a rectangular array of pixels starting at a specified x,y location and continuing through to another x,y location within a certain RastPort. (V36) SYNOPSIS count = WritePixelArray8(rp,xstart,ystart,xstop,ystop,array,temprp) D0 A0 D0:16 D1:16 D2:16 D3:16 A2 A1 LONG WritePixelArray8(struct RastPort *, UWORD, UWORD, UWORD, UWORD, UBYTE *, struct RastPort *); FUNCTION For each pixel in a rectangular region, decode the pen number selector from a linear array of pen numbers into the bit-planes used to describe a particular rastport. INPUTS rp - pointer to a RastPort structure (xstart,ystart) - starting point in the RastPort (xstop,ystop) - stopping point in the RastPort array - pointer to an array of UBYTEs from which to fetch the pixel data. Allocate at least ((((width+15)>>4)<<4)*(ystop-ystart+1)) bytes. temprp - temporary rastport (copy of rp with Layer set == NULL, temporary memory allocated for temprp->BitMap with Rows set == 1, temprp->BytesPerRow == (((width+15)>>4)<<1), and temporary memory allocated for temprp->BitMap->Planes[]) RESULT count will be set to the number of pixels plotted. NOTE xstop must be >= xstart ystop must be >= ystart BUGS SEE ALSO WritePixel() graphics/rastport.h graphics.library/WritePixelLine8 graphics.library/WritePixelLine8 NAME WritePixelLine8 -- write the pen number value of a horizontal line of pixels starting at a specified x,y location and continuing right for count pixels. (V36) SYNOPSIS count = WritePixelLine8(rp,xstart,ystart,width,array,temprp) D0 A0 D0:16 D1:16 D2 A2 A1 LONG WritePixelLine8(struct RastPort *, UWORD, UWORD, UWORD, UBYTE *, struct RastPort *); FUNCTION For each pixel in a horizontal region, decode the pen number selector from a linear array of pen numbers into the bit-planes used to describe a particular rastport. INPUTS rp - pointer to a RastPort structure (x,y) - a point in the RastPort width - count of horizontal pixels to write array - pointer to an array of UBYTEs from which to fetch the pixel data allocate at least (((width+15)>>4)<<4) bytes. temprp - temporary rastport (copy of rp with Layer set == NULL, temporary memory allocated for temprp->BitMap with Rows set == 1, temprp->BytesPerRow == (((width+15)>>4)<<1), and temporary memory allocated for temprp->BitMap->Planes[]) RESULT Count will be set to the number of pixels plotted NOTE width must be non negative BUGS SEE ALSO WritePixel() graphics/rastport.h graphics.library/XorRectRegion graphics.library/XorRectRegion NAME XorRectRegion -- Perform 2d XOR operation of rectangle with region, leaving result in region SYNOPSIS status = XorRectRegion(region,rectangle) d0 a0 a1 BOOL XorRectRegion( struct Region *, struct Rectangle * ); FUNCTION Add portions of rectangle to region if they are not in the region. Remove portions of rectangle from region if they are in the region. INPUTS region - pointer to Region structure rectangle - pointer to Rectangle structure RESULTS status - return TRUE if successful operation return FALSE if ran out of memory BUGS SEE ALSO OrRegionRegion() AndRegionRegion() graphics/regions.h graphics.library/XorRegionRegion graphics.library/XorRegionRegion NAME XorRegionRegion -- Perform 2d XOR operation of one region with second region, leaving result in second region SYNOPSIS status = XorRegionRegion(region1,region2) d0 a0 a1 BOOL XorRegionRegion( struct Region *, struct Region * ); FUNCTION Join the regions together. If any part of region1 overlaps region2 then remove that from the new region. INPUTS region1 = pointer to Region structure region2 = pointer to Region structure RESULTS status - return TRUE if successful operation return FALSE if ran out of memory BUGS .