mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 14:59:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			2837 lines
		
	
	
		
			101 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			2837 lines
		
	
	
		
			101 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
{
 | 
						|
    This file is part of the Free Pascal run time library.
 | 
						|
    Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. <www.genesi.lu>
 | 
						|
 | 
						|
    graphics.library interface unit for MorphOS/PowerPC
 | 
						|
 | 
						|
    Based on work of Nils Sjoholm member of the Amiga RTL
 | 
						|
    development team.
 | 
						|
 | 
						|
    MorphOS port was done on a free Pegasos II/G4 machine
 | 
						|
    provided by Genesi S.a.r.l. <www.genesi.lu>
 | 
						|
 | 
						|
    See the file COPYING.FPC, included in this distribution,
 | 
						|
    for details about the copyright.
 | 
						|
 | 
						|
    This program is distributed in the hope that it will be useful,
 | 
						|
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | 
						|
 | 
						|
 **********************************************************************}
 | 
						|
{$PACKRECORDS 2}
 | 
						|
 | 
						|
unit graphics;
 | 
						|
 | 
						|
interface
 | 
						|
 | 
						|
uses exec, hardware, utility;
 | 
						|
 | 
						|
const
 | 
						|
    BITSET      = $8000;
 | 
						|
    BITCLR      = 0;
 | 
						|
 | 
						|
type
 | 
						|
    pRectangle = ^tRectangle;
 | 
						|
    tRectangle = record
 | 
						|
        MinX,MinY       : Word;
 | 
						|
        MaxX,MaxY       : Word;
 | 
						|
    end;
 | 
						|
 | 
						|
    pRect32 = ^tRect32;
 | 
						|
    tRect32 = record
 | 
						|
        MinX,MinY       : Longint;
 | 
						|
        MaxX,MaxY       : Longint;
 | 
						|
    end;
 | 
						|
 | 
						|
    pPoint = ^tPoint;
 | 
						|
    tPoint = record
 | 
						|
        x,y     : Word;
 | 
						|
    end;
 | 
						|
 | 
						|
    PLANEPTR = Pointer;
 | 
						|
 | 
						|
    pBitMap = ^tBitMap;
 | 
						|
    tBitMap = record
 | 
						|
        BytesPerRow     : Word;
 | 
						|
        Rows            : Word;
 | 
						|
        Flags           : Byte;
 | 
						|
        Depth           : Byte;
 | 
						|
        pad             : Word;
 | 
						|
        Planes          : Array [0..7] of PLANEPTR;
 | 
						|
    end;
 | 
						|
{* flags for AllocBitMap, etc. *}
 | 
						|
const
 | 
						|
     BMB_CLEAR       = 0;
 | 
						|
     BMB_DISPLAYABLE = 1;
 | 
						|
     BMB_INTERLEAVED = 2;
 | 
						|
     BMB_STANDARD    = 3;
 | 
						|
     BMB_MINPLANES   = 4;
 | 
						|
 | 
						|
     BMF_CLEAR       = (1 shl BMB_CLEAR);
 | 
						|
     BMF_DISPLAYABLE = (1 shl BMB_DISPLAYABLE);
 | 
						|
     BMF_INTERLEAVED = (1 shl BMB_INTERLEAVED);
 | 
						|
     BMF_STANDARD    = (1 shl BMB_STANDARD);
 | 
						|
     BMF_MINPLANES   = (1 shl BMB_MINPLANES);
 | 
						|
 | 
						|
{* the following are for GetBitMapAttr() *}
 | 
						|
     BMA_HEIGHT      = 0;
 | 
						|
     BMA_DEPTH       = 4;
 | 
						|
     BMA_WIDTH       = 8;
 | 
						|
     BMA_FLAGS       = 12;
 | 
						|
 | 
						|
 | 
						|
{ structures used by and constructed by windowlib.a }
 | 
						|
{ understood by rom software }
 | 
						|
type
 | 
						|
    pClipRect = ^tClipRect;
 | 
						|
    tClipRect = record
 | 
						|
        Next    : pClipRect;    { roms used to find next ClipRect }
 | 
						|
        prev    : pClipRect;    { ignored by roms, used by windowlib }
 | 
						|
        lobs    : Pointer;      { ignored by roms, used by windowlib (LayerPtr)}
 | 
						|
        BitMap  : pBitMap;
 | 
						|
        bounds  : tRectangle;    { set up by windowlib, used by roms }
 | 
						|
        _p1,
 | 
						|
        _p2     : Pointer;    { system reserved }
 | 
						|
        reserved : Longint;     { system use }
 | 
						|
        Flags   : Longint;      { only exists in layer allocation }
 | 
						|
    end;
 | 
						|
 | 
						|
    pLayer = ^tLayer;
 | 
						|
    tLayer = record
 | 
						|
        front,
 | 
						|
        back            : pLayer;       { ignored by roms }
 | 
						|
        ClipRect        : pClipRect;  { read by roms to find first cliprect }
 | 
						|
        rp              : Pointer;      { (RastPortPtr) ignored by roms, I hope }
 | 
						|
        bounds          : tRectangle;    { ignored by roms }
 | 
						|
        reserved        : Array [0..3] of Byte;
 | 
						|
        priority        : Word;        { system use only }
 | 
						|
        Flags           : Word;        { obscured ?, Virtual BitMap? }
 | 
						|
        SuperBitMap     : pBitMap;
 | 
						|
        SuperClipRect   : pClipRect;  { super bitmap cliprects if
 | 
						|
                                                VBitMap != 0}
 | 
						|
                                        { else damage cliprect list for refresh }
 | 
						|
        Window          : Pointer;      { reserved for user interface use }
 | 
						|
        Scroll_X,
 | 
						|
        Scroll_Y        : Word;
 | 
						|
        cr,
 | 
						|
        cr2,
 | 
						|
        crnew           : pClipRect;  { used by dedice }
 | 
						|
        SuperSaveClipRects : pClipRect; { preallocated cr's }
 | 
						|
        cliprects      : pClipRect;  { system use during refresh }
 | 
						|
        LayerInfo       : Pointer;      { points to head of the list }
 | 
						|
        Lock            : tSignalSemaphore;
 | 
						|
        BackFill        : pHook;
 | 
						|
        reserved1       : Cardinal;
 | 
						|
        ClipRegion      : Pointer;
 | 
						|
        saveClipRects   : Pointer;      { used to back out when in trouble}
 | 
						|
        Width,
 | 
						|
        Height          : smallint;
 | 
						|
        reserved2       : Array [0..17] of Byte;
 | 
						|
        { this must stay here }
 | 
						|
        DamageList      : Pointer;      { list of rectangles to refresh
 | 
						|
                                                through }
 | 
						|
    end;
 | 
						|
 | 
						|
const
 | 
						|
 | 
						|
{ internal cliprect flags }
 | 
						|
 | 
						|
    CR_NEEDS_NO_CONCEALED_RASTERS       = 1;
 | 
						|
    CR_NEEDS_NO_LAYERBLIT_DAMAGE        = 2;
 | 
						|
 | 
						|
 | 
						|
{ defines for code values for getcode }
 | 
						|
 | 
						|
    ISLESSX     = 1;
 | 
						|
    ISLESSY     = 2;
 | 
						|
    ISGRTRX     = 4;
 | 
						|
    ISGRTRY     = 8;
 | 
						|
 | 
						|
 | 
						|
{------ Font Styles ------------------------------------------------}
 | 
						|
 | 
						|
    FS_NORMAL           = 0;    { normal text (no style bits set) }
 | 
						|
    FSB_EXTENDED        = 3;    { extended face (wider than normal) }
 | 
						|
    FSF_EXTENDED        = 8;
 | 
						|
    FSB_ITALIC          = 2;    { italic (slanted 1:2 right) }
 | 
						|
    FSF_ITALIC          = 4;
 | 
						|
    FSB_BOLD            = 1;    { bold face text (ORed w/ shifted) }
 | 
						|
    FSF_BOLD            = 2;
 | 
						|
    FSB_UNDERLINED      = 0;    { underlined (under baseline) }
 | 
						|
    FSF_UNDERLINED      = 1;
 | 
						|
 | 
						|
    FSB_COLORFONT       = 6;       { this uses ColorTextFont structure }
 | 
						|
    FSF_COLORFONT       = $40;
 | 
						|
    FSB_TAGGED          = 7;       { the TextAttr is really an TTextAttr, }
 | 
						|
    FSF_TAGGED          = $80;
 | 
						|
 | 
						|
 | 
						|
{------ Font Flags -------------------------------------------------}
 | 
						|
    FPB_ROMFONT         = 0;    { font is in rom }
 | 
						|
    FPF_ROMFONT         = 1;
 | 
						|
    FPB_DISKFONT        = 1;    { font is from diskfont.library }
 | 
						|
    FPF_DISKFONT        = 2;
 | 
						|
    FPB_REVPATH         = 2;    { designed path is reversed (e.g. left) }
 | 
						|
    FPF_REVPATH         = 4;
 | 
						|
    FPB_TALLDOT         = 3;    { designed for hires non-interlaced }
 | 
						|
    FPF_TALLDOT         = 8;
 | 
						|
    FPB_WIDEDOT         = 4;    { designed for lores interlaced }
 | 
						|
    FPF_WIDEDOT         = 16;
 | 
						|
    FPB_PROPORTIONAL    = 5;    { character sizes can vary from nominal }
 | 
						|
    FPF_PROPORTIONAL    = 32;
 | 
						|
    FPB_DESIGNED        = 6;    { size is "designed", not constructed }
 | 
						|
    FPF_DESIGNED        = 64;
 | 
						|
    FPB_REMOVED         = 7;    { the font has been removed }
 | 
						|
    FPF_REMOVED         = 128;
 | 
						|
 | 
						|
{***** TextAttr node, matches text attributes in RastPort *********}
 | 
						|
 | 
						|
type
 | 
						|
 | 
						|
    pTextAttr = ^tTextAttr;
 | 
						|
    tTextAttr = record
 | 
						|
        ta_Name : PChar;       { name of the font }
 | 
						|
        ta_YSize : Word;       { height of the font }
 | 
						|
        ta_Style : Byte;        { intrinsic font style }
 | 
						|
        ta_Flags : Byte;        { font preferences and flags }
 | 
						|
    end;
 | 
						|
 | 
						|
    pTTextAttr = ^tTTextAttr;
 | 
						|
    tTTextAttr = record
 | 
						|
        tta_Name : PChar;       { name of the font }
 | 
						|
        tta_YSize : Word;       { height of the font }
 | 
						|
        tta_Style : Byte;        { intrinsic font style }
 | 
						|
        tta_Flags : Byte;        { font preferences AND flags }
 | 
						|
        tta_Tags  : pTagItem;     { extended attributes }
 | 
						|
    end;
 | 
						|
 | 
						|
{***** Text Tags **************************************************}
 | 
						|
CONST
 | 
						|
  TA_DeviceDPI  =  (1+TAG_USER);    { Tag value is Point union: }
 | 
						|
                                        { Hi Longint XDPI, Lo Longint YDPI }
 | 
						|
 | 
						|
  MAXFONTMATCHWEIGHT  =    32767;   { perfect match from WeighTAMatch }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
{***** TextFonts node *********************************************}
 | 
						|
Type
 | 
						|
 | 
						|
    pTextFont = ^tTextFont;
 | 
						|
    tTextFont = record
 | 
						|
        tf_Message      : tMessage;      { reply message for font removal }
 | 
						|
                                        { font name in LN \    used in this }
 | 
						|
        tf_YSize        : Word;        { font height     |    order to best }
 | 
						|
        tf_Style        : Byte;         { font style      |    match a font }
 | 
						|
        tf_Flags        : Byte;         { preferences and flags /    request. }
 | 
						|
        tf_XSize        : Word;        { nominal font width }
 | 
						|
        tf_Baseline     : Word; { distance from the top of char to baseline }
 | 
						|
        tf_BoldSmear    : Word;        { smear to affect a bold enhancement }
 | 
						|
 | 
						|
        tf_Accessors    : Word;        { access count }
 | 
						|
 | 
						|
        tf_LoChar       : Byte;         { the first character described here }
 | 
						|
        tf_HiChar       : Byte;         { the last character described here }
 | 
						|
        tf_CharData     : Pointer;      { the bit character data }
 | 
						|
 | 
						|
        tf_Modulo       : Word; { the row modulo for the strike font data }
 | 
						|
        tf_CharLoc      : Pointer; { ptr to location data for the strike font }
 | 
						|
                                        { 2 words: bit offset then size }
 | 
						|
        tf_CharSpace    : Pointer; { ptr to words of proportional spacing data }
 | 
						|
        tf_CharKern     : Pointer;      { ptr to words of kerning data }
 | 
						|
    end;
 | 
						|
 | 
						|
 | 
						|
{----- tfe_Flags0 (partial definition) ----------------------------}
 | 
						|
CONST
 | 
						|
 TE0B_NOREMFONT = 0;       { disallow RemFont for this font }
 | 
						|
 TE0F_NOREMFONT = $01;
 | 
						|
 | 
						|
Type
 | 
						|
 | 
						|
   pTextFontExtension = ^tTextFontExtension;
 | 
						|
   tTextFontExtension = record              { this structure is read-only }
 | 
						|
    tfe_MatchWord  : Word;                { a magic cookie for the extension }
 | 
						|
    tfe_Flags0     : Byte;                 { (system private flags) }
 | 
						|
    tfe_Flags1     : Byte;                 { (system private flags) }
 | 
						|
    tfe_BackPtr    : pTextFont;          { validation of compilation }
 | 
						|
    tfe_OrigReplyPort : pMsgPort;        { original value in tf_Extension }
 | 
						|
    tfe_Tags       : pTagItem;              { Text Tags for the font }
 | 
						|
    tfe_OFontPatchS,                       { (system private use) }
 | 
						|
    tfe_OFontPatchK : Pointer;             { (system private use) }
 | 
						|
    { this space is reserved for future expansion }
 | 
						|
   END;
 | 
						|
 | 
						|
{***** ColorTextFont node *****************************************}
 | 
						|
{----- ctf_Flags --------------------------------------------------}
 | 
						|
CONST
 | 
						|
 CT_COLORMASK  =  $000F;  { mask to get to following color styles }
 | 
						|
 CT_COLORFONT  =  $0001;  { color map contains designer's colors }
 | 
						|
 CT_GREYFONT   =  $0002;  { color map describes even-stepped }
 | 
						|
                                { brightnesses from low to high }
 | 
						|
 CT_ANTIALIAS  =  $0004;  { zero background thru fully saturated char }
 | 
						|
 | 
						|
 CTB_MAPCOLOR  =  0;      { map ctf_FgColor to the rp_FgPen IF it's }
 | 
						|
 CTF_MAPCOLOR  =  $0001;  { is a valid color within ctf_Low..ctf_High }
 | 
						|
 | 
						|
{----- ColorFontColors --------------------------------------------}
 | 
						|
Type
 | 
						|
   pColorFontColors = ^tColorFontColors;
 | 
						|
   tColorFontColors = record
 | 
						|
    cfc_Reserved,                 { *must* be zero }
 | 
						|
    cfc_Count   : Word;          { number of entries in cfc_ColorTable }
 | 
						|
    cfc_ColorTable : Pointer;     { 4 bit per component color map packed xRGB }
 | 
						|
   END;
 | 
						|
 | 
						|
{----- ColorTextFont ----------------------------------------------}
 | 
						|
 | 
						|
   pColorTextFont = ^tColorTextFont;
 | 
						|
   tColorTextFont = record
 | 
						|
    ctf_TF      : tTextFont;
 | 
						|
    ctf_Flags   : Word;          { extended flags }
 | 
						|
    ctf_Depth,          { number of bit planes }
 | 
						|
    ctf_FgColor,        { color that is remapped to FgPen }
 | 
						|
    ctf_Low,            { lowest color represented here }
 | 
						|
    ctf_High,           { highest color represented here }
 | 
						|
    ctf_PlanePick,      { PlanePick ala Images }
 | 
						|
    ctf_PlaneOnOff : Byte;     { PlaneOnOff ala Images }
 | 
						|
    ctf_ColorFontColors : pColorFontColors; { colors for font }
 | 
						|
    ctf_CharData : Array[0..7] of Pointer;    {pointers to bit planes ala tf_CharData }
 | 
						|
   END;
 | 
						|
 | 
						|
{***** TextExtent node ********************************************}
 | 
						|
 | 
						|
   pTextExtent = ^tTextExtent;
 | 
						|
   tTextExtent = record
 | 
						|
    te_Width,                   { same as TextLength }
 | 
						|
    te_Height : Word;          { same as tf_YSize }
 | 
						|
    te_Extent : tRectangle;      { relative to CP }
 | 
						|
   END;
 | 
						|
 | 
						|
 | 
						|
const
 | 
						|
 | 
						|
    COPPER_MOVE = 0;    { pseude opcode for move #XXXX,dir }
 | 
						|
    COPPER_WAIT = 1;    { pseudo opcode for wait y,x }
 | 
						|
    CPRNXTBUF   = 2;    { continue processing with next buffer }
 | 
						|
    CPR_NT_LOF  = $8000; { copper instruction only for Longint frames }
 | 
						|
    CPR_NT_SHT  = $4000; { copper instruction only for long frames }
 | 
						|
    CPR_NT_SYS  = $2000; { copper user instruction only }
 | 
						|
type
 | 
						|
 | 
						|
{ Note: The combination VWaitAddr and HWaitAddr replace a three way
 | 
						|
        union in C.  The three possibilities are:
 | 
						|
 | 
						|
        nxtList : CopListPtr;  or
 | 
						|
 | 
						|
        VWaitPos : Longint;
 | 
						|
        HWaitPos : Longint;  or
 | 
						|
 | 
						|
        DestAddr : Longint;
 | 
						|
        DestData : Longint;
 | 
						|
}
 | 
						|
 | 
						|
    pCopIns = ^tCopIns;
 | 
						|
    tCopIns = record
 | 
						|
        OpCode  : smallint; { 0 = move, 1 = wait }
 | 
						|
        VWaitAddr : smallint; { vertical or horizontal wait position }
 | 
						|
        HWaitData : smallint; { destination Pointer or data to send }
 | 
						|
    end;
 | 
						|
 | 
						|
{ structure of cprlist that points to list that hardware actually executes }
 | 
						|
 | 
						|
    pcprlist = ^tcprlist;
 | 
						|
    tcprlist = record
 | 
						|
        Next    : pcprlist;
 | 
						|
        start   : psmallint;       { start of copper list }
 | 
						|
        MaxCount : smallint;       { number of long instructions }
 | 
						|
    end;
 | 
						|
 | 
						|
    pCopList = ^tCopList;
 | 
						|
    tCopList = record
 | 
						|
        Next    : pCopList;     { next block for this copper list }
 | 
						|
        CopList : pCopList;    { system use }
 | 
						|
        ViewPort : Pointer;    { system use }
 | 
						|
        CopIns  : pCopIns;    { start of this block }
 | 
						|
        CopPtr  : pCopIns;    { intermediate ptr }
 | 
						|
        CopLStart : psmallint;     { mrgcop fills this in for Long Frame}
 | 
						|
        CopSStart : psmallint;     { mrgcop fills this in for Longint Frame}
 | 
						|
        Count   : smallint;        { intermediate counter }
 | 
						|
        MaxCount : smallint;       { max # of copins for this block }
 | 
						|
        DyOffset : smallint;       { offset this copper list vertical waits }
 | 
						|
        SLRepeat : Word;
 | 
						|
        Flags    : Word;
 | 
						|
    end;
 | 
						|
 | 
						|
    pUCopList = ^tUCopList;
 | 
						|
    tUCopList = record
 | 
						|
        Next    : pUCopList;
 | 
						|
        FirstCopList : pCopList;      { head node of this copper list }
 | 
						|
        CopList : pCopList;           { node in use }
 | 
						|
    end;
 | 
						|
 | 
						|
    pcopinit = ^tcopinit;
 | 
						|
    tcopinit = record
 | 
						|
        vsync_hblank : array [0..1] of word;
 | 
						|
        diagstrt : Array [0..11] of word;
 | 
						|
        fm0      : array [0..1] of word;
 | 
						|
        diwstart : array [0..9] of word;
 | 
						|
        bplcon2  : array [0..1] of word;
 | 
						|
        sprfix   : array [0..(2*8)] of word;
 | 
						|
        sprstrtup : Array [0..(2*8*2)] of Word;
 | 
						|
        wait14    : array [0..1] of word;
 | 
						|
        norm_hblank : array [0..1] of word;
 | 
						|
        jump        : array [0..1] of word;
 | 
						|
        wait_forever : array [0..5] of word;
 | 
						|
        sprstop : Array [0..7] of Word;
 | 
						|
    end;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    pAreaInfo = ^tAreaInfo;
 | 
						|
    tAreaInfo = record
 | 
						|
        VctrTbl : Pointer;      { ptr to start of vector table }
 | 
						|
        VctrPtr : Pointer;      { ptr to current vertex }
 | 
						|
        FlagTbl : Pointer;      { ptr to start of vector flag table }
 | 
						|
        FlagPtr : Pointer;      { ptrs to areafill flags }
 | 
						|
        Count   : smallint;        { number of vertices in list }
 | 
						|
        MaxCount : smallint;       { AreaMove/Draw will not allow Count>MaxCount}
 | 
						|
        FirstX,
 | 
						|
        FirstY  : smallint;        { first point for this polygon }
 | 
						|
    end;
 | 
						|
 | 
						|
    pTmpRas = ^tTmpRas;
 | 
						|
    tTmpRas = record
 | 
						|
        RasPtr  : Pointer;
 | 
						|
        Size    : Longint;
 | 
						|
    end;
 | 
						|
 | 
						|
{ unoptimized for 32bit alignment of pointers }
 | 
						|
 | 
						|
    pGelsInfo = ^tGelsInfo;
 | 
						|
    tGelsInfo = record
 | 
						|
        sprRsrvd        : Shortint; { flag of which sprites to reserve from
 | 
						|
                                  vsprite system }
 | 
						|
        Flags   : Byte;       { system use }
 | 
						|
        gelHead,
 | 
						|
        gelTail : Pointer; { (VSpritePtr) dummy vSprites for list management}
 | 
						|
 | 
						|
    { pointer to array of 8 WORDS for sprite available lines }
 | 
						|
 | 
						|
        nextLine : Pointer;
 | 
						|
 | 
						|
    { pointer to array of 8 pointers for color-last-assigned to vSprites }
 | 
						|
 | 
						|
        lastColor : Pointer;
 | 
						|
        collHandler : Pointer;  { (collTablePtr) Pointeres of collision routines }
 | 
						|
        leftmost,
 | 
						|
        rightmost,
 | 
						|
        topmost,
 | 
						|
        bottommost      : smallint;
 | 
						|
        firstBlissObj,
 | 
						|
        lastBlissObj    : Pointer;    { system use only }
 | 
						|
    end;
 | 
						|
 | 
						|
    pRastPort = ^tRastPort;
 | 
						|
    tRastPort = record
 | 
						|
        Layer           : pLayer;      { LayerPtr }
 | 
						|
        BitMap          : pBitMap;      { BitMapPtr }
 | 
						|
        ArePointern        : Pointer;      { ptr to areafill pattern }
 | 
						|
        TmpRas          : pTmpRas;
 | 
						|
        AreaInfo        : pAreaInfo;
 | 
						|
        GelsInfo        : pGelsInfo;
 | 
						|
        Mask            : Byte;         { write mask for this raster }
 | 
						|
        FgPen           : Shortint;         { foreground pen for this raster }
 | 
						|
        BgPen           : Shortint;         { background pen         }
 | 
						|
        AOlPen          : Shortint;         { areafill outline pen }
 | 
						|
        DrawMode        : Shortint; { drawing mode for fill, lines, and text }
 | 
						|
        AreaPtSz        : Shortint;         { 2^n words for areafill pattern }
 | 
						|
        linpatcnt       : Shortint; { current line drawing pattern preshift }
 | 
						|
        dummy           : Shortint;
 | 
						|
        Flags           : Word;        { miscellaneous control bits }
 | 
						|
        LinePtrn        : Word;        { 16 bits for textured lines }
 | 
						|
        cp_x,
 | 
						|
        cp_y            : smallint;        { current pen position }
 | 
						|
        minterms        : Array [0..7] of Byte;
 | 
						|
        PenWidth        : smallint;
 | 
						|
        PenHeight       : smallint;
 | 
						|
        Font            : pTextFont;      { (TextFontPtr) current font Pointer }
 | 
						|
        AlgoStyle       : Byte;         { the algorithmically generated style }
 | 
						|
        TxFlags         : Byte;         { text specific flags }
 | 
						|
        TxHeight        : Word;        { text height }
 | 
						|
        TxWidth         : Word;        { text nominal width }
 | 
						|
        TxBaseline      : Word;        { text baseline }
 | 
						|
        TxSpacing       : smallint;        { text spacing (per character) }
 | 
						|
        RP_User         : Pointer;
 | 
						|
        longreserved    : Array [0..1] of Cardinal;
 | 
						|
        wordreserved    : Array [0..6] of Word;        { used to be a node }
 | 
						|
        reserved        : Array [0..7] of Byte;         { for future use }
 | 
						|
    end;
 | 
						|
 | 
						|
const
 | 
						|
 | 
						|
{ drawing modes }
 | 
						|
 | 
						|
    JAM1        = 0;    { jam 1 color into raster }
 | 
						|
    JAM2        = 1;    { jam 2 colors into raster }
 | 
						|
    COMPLEMENT  = 2;    { XOR bits into raster }
 | 
						|
    INVERSVID   = 4;    { inverse video for drawing modes }
 | 
						|
 | 
						|
{ these are the flag bits for RastPort flags }
 | 
						|
 | 
						|
    FRST_DOT    = $01;  { draw the first dot of this line ? }
 | 
						|
    ONE_DOT     = $02;  { use one dot mode for drawing lines }
 | 
						|
    DBUFFER     = $04;  { flag set when RastPorts are double-buffered }
 | 
						|
 | 
						|
             { only used for bobs }
 | 
						|
 | 
						|
    AREAOUTLINE = $08;  { used by areafiller }
 | 
						|
    NOCROSSFILL = $20;  { areafills have no crossovers }
 | 
						|
 | 
						|
{ there is only one style of clipping: raster clipping }
 | 
						|
{ this preserves the continuity of jaggies regardless of clip window }
 | 
						|
{ When drawing into a RastPort, if the ptr to ClipRect is nil then there }
 | 
						|
{ is no clipping done, this is dangerous but useful for speed }
 | 
						|
 | 
						|
 | 
						|
Const
 | 
						|
    CleanUp     = $40;
 | 
						|
    CleanMe     = CleanUp;
 | 
						|
 | 
						|
    BltClearWait        = 1;    { Waits for blit to finish }
 | 
						|
    BltClearXY          = 2;    { Use Row/Bytes per row method }
 | 
						|
 | 
						|
        { Useful minterms }
 | 
						|
 | 
						|
    StraightCopy        = $C0;  { Vanilla copy }
 | 
						|
    InvertAndCopy       = $30;  { Invert the source before copy }
 | 
						|
    InvertDest          = $50;  { Forget source, invert dest }
 | 
						|
 | 
						|
 | 
						|
 {      mode coercion definitions }
 | 
						|
 | 
						|
const
 | 
						|
{  These flags are passed (in combination) to CoerceMode() to determine the
 | 
						|
 * type of coercion required.
 | 
						|
 }
 | 
						|
 | 
						|
{  Ensure that the mode coerced to can display just as many colours as the
 | 
						|
 * ViewPort being coerced.
 | 
						|
 }
 | 
						|
    PRESERVE_COLORS = 1;
 | 
						|
 | 
						|
{  Ensure that the mode coerced to is not interlaced. }
 | 
						|
    AVOID_FLICKER   = 2;
 | 
						|
 | 
						|
{  Coercion should ignore monitor compatibility issues. }
 | 
						|
    IGNORE_MCOMPAT  = 4;
 | 
						|
 | 
						|
 | 
						|
    BIDTAG_COERCE   = 1; {  Private }
 | 
						|
 | 
						|
const
 | 
						|
 | 
						|
{ VSprite flags }
 | 
						|
{ user-set VSprite flags: }
 | 
						|
 | 
						|
    SUSERFLAGS  = $00FF;        { mask of all user-settable VSprite-flags }
 | 
						|
    VSPRITE_f   = $0001;        { set if VSprite, clear if Bob }
 | 
						|
                                { VSPRITE had to be changed for name conflict }
 | 
						|
    SAVEBACK    = $0002;        { set if background is to be saved/restored }
 | 
						|
    OVERLAY     = $0004;        { set to mask image of Bob onto background }
 | 
						|
    MUSTDRAW    = $0008;        { set if VSprite absolutely must be drawn }
 | 
						|
 | 
						|
{ system-set VSprite flags: }
 | 
						|
 | 
						|
    BACKSAVED   = $0100;        { this Bob's background has been saved }
 | 
						|
    BOBUPDATE   = $0200;        { temporary flag, useless to outside world }
 | 
						|
    GELGONE     = $0400;        { set if gel is completely clipped (offscreen) }
 | 
						|
    VSOVERFLOW  = $0800;        { VSprite overflow (if MUSTDRAW set we draw!) }
 | 
						|
 | 
						|
{ Bob flags }
 | 
						|
{ these are the user flag bits }
 | 
						|
 | 
						|
    BUSERFLAGS  = $00FF;        { mask of all user-settable Bob-flags }
 | 
						|
    SAVEBOB     = $0001;        { set to not erase Bob }
 | 
						|
    BOBISCOMP   = $0002;        { set to identify Bob as AnimComp }
 | 
						|
 | 
						|
{ these are the system flag bits }
 | 
						|
 | 
						|
    BWAITING    = $0100;        { set while Bob is waiting on 'after' }
 | 
						|
    BDRAWN      = $0200;        { set when Bob is drawn this DrawG pass}
 | 
						|
    BOBSAWAY    = $0400;        { set to initiate removal of Bob }
 | 
						|
    BOBNIX      = $0800;        { set when Bob is completely removed }
 | 
						|
    SAVEPRESERVE = $1000;       { for back-restore during double-buffer}
 | 
						|
    OUTSTEP     = $2000;        { for double-clearing if double-buffer }
 | 
						|
 | 
						|
{ defines for the animation procedures }
 | 
						|
 | 
						|
    ANFRACSIZE  = 6;
 | 
						|
    ANIMHALF    = $0020;
 | 
						|
    RINGTRIGGER = $0001;
 | 
						|
 | 
						|
 | 
						|
{ UserStuff definitions
 | 
						|
 *  the user can define these to be a single variable or a sub-structure
 | 
						|
 *  if undefined by the user, the system turns these into innocuous variables
 | 
						|
 *  see the manual for a thorough definition of the UserStuff definitions
 | 
						|
 *
 | 
						|
 }
 | 
						|
 | 
						|
type
 | 
						|
 | 
						|
    VUserStuff  = smallint;        { Sprite user stuff }
 | 
						|
    BUserStuff  = smallint;        { Bob user stuff }
 | 
						|
    AUserStuff  = smallint;        { AnimOb user stuff }
 | 
						|
 | 
						|
{********************** GEL STRUCTURES **********************************}
 | 
						|
 | 
						|
    pVSprite = ^tVSprite;
 | 
						|
    tVSprite = record
 | 
						|
 | 
						|
{ --------------------- SYSTEM VARIABLES ------------------------------- }
 | 
						|
{ GEL linked list forward/backward pointers sorted by y,x value }
 | 
						|
 | 
						|
        NextVSprite     : pVSprite;
 | 
						|
        PrevVSprite     : pVSprite;
 | 
						|
 | 
						|
{ GEL draw list constructed in the order the Bobs are actually drawn, then
 | 
						|
 *  list is copied to clear list
 | 
						|
 *  must be here in VSprite for system boundary detection
 | 
						|
 }
 | 
						|
 | 
						|
        DrawPath        : pVSprite;     { pointer of overlay drawing }
 | 
						|
        ClearPath       : pVSprite;     { pointer for overlay clearing }
 | 
						|
 | 
						|
{ the VSprite positions are defined in (y,x) order to make sorting
 | 
						|
 *  sorting easier, since (y,x) as a long Longint
 | 
						|
 }
 | 
						|
 | 
						|
        OldY, OldX      : smallint;        { previous position }
 | 
						|
 | 
						|
{ --------------------- COMMON VARIABLES --------------------------------- }
 | 
						|
 | 
						|
        Flags           : smallint;        { VSprite flags }
 | 
						|
 | 
						|
 | 
						|
{ --------------------- USER VARIABLES ----------------------------------- }
 | 
						|
{ the VSprite positions are defined in (y,x) order to make sorting
 | 
						|
 *  sorting easier, since (y,x) as a long Longint
 | 
						|
 }
 | 
						|
 | 
						|
        Y, X            : smallint;        { screen position }
 | 
						|
 | 
						|
        Height  : smallint;
 | 
						|
        Width   : smallint;        { number of words per row of image data }
 | 
						|
        Depth   : smallint;        { number of planes of data }
 | 
						|
 | 
						|
        MeMask  : smallint;        { which types can collide with this VSprite}
 | 
						|
        HitMask : smallint;        { which types this VSprite can collide with}
 | 
						|
 | 
						|
        ImageData       : Pointer;      { pointer to VSprite image }
 | 
						|
 | 
						|
{ borderLine is the one-dimensional logical OR of all
 | 
						|
 *  the VSprite bits, used for fast collision detection of edge
 | 
						|
 }
 | 
						|
 | 
						|
        BorderLine      : Pointer; { logical OR of all VSprite bits }
 | 
						|
        CollMask        : Pointer; { similar to above except this is a matrix }
 | 
						|
 | 
						|
{ pointer to this VSprite's color definitions (not used by Bobs) }
 | 
						|
 | 
						|
        SprColors       : Pointer;
 | 
						|
 | 
						|
        VSBob   : Pointer;      { (BobPtr) points home if this VSprite
 | 
						|
                                   is part of a Bob }
 | 
						|
 | 
						|
{ planePick flag:  set bit selects a plane from image, clear bit selects
 | 
						|
 *  use of shadow mask for that plane
 | 
						|
 * OnOff flag: if using shadow mask to fill plane, this bit (corresponding
 | 
						|
 *  to bit in planePick) describes whether to fill with 0's or 1's
 | 
						|
 * There are two uses for these flags:
 | 
						|
 *      - if this is the VSprite of a Bob, these flags describe how the Bob
 | 
						|
 *        is to be drawn into memory
 | 
						|
 *      - if this is a simple VSprite and the user intends on setting the
 | 
						|
 *        MUSTDRAW flag of the VSprite, these flags must be set too to describe
 | 
						|
 *        which color registers the user wants for the image
 | 
						|
 }
 | 
						|
 | 
						|
        PlanePick       : Shortint;
 | 
						|
        PlaneOnOff      : Shortint;
 | 
						|
 | 
						|
        VUserExt        : VUserStuff;   { user definable:  see note above }
 | 
						|
    end;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
{ dBufPacket defines the values needed to be saved across buffer to buffer
 | 
						|
 *  when in double-buffer mode
 | 
						|
 }
 | 
						|
 | 
						|
    pDBufPacket = ^tDBufPacket;
 | 
						|
    tDBufPacket = record
 | 
						|
        BufY,
 | 
						|
        BufX    : Word;        { save other buffers screen coordinates }
 | 
						|
        BufPath : pVSprite;   { carry the draw path over the gap }
 | 
						|
 | 
						|
{ these pointers must be filled in by the user }
 | 
						|
{ pointer to other buffer's background save buffer }
 | 
						|
 | 
						|
        BufBuffer : Pointer;
 | 
						|
    end;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    pBob = ^tBob;
 | 
						|
    tBob = record
 | 
						|
{ blitter-objects }
 | 
						|
 | 
						|
{ --------------------- SYSTEM VARIABLES --------------------------------- }
 | 
						|
 | 
						|
{ --------------------- COMMON VARIABLES --------------------------------- }
 | 
						|
 | 
						|
        Flags   : smallint; { general purpose flags (see definitions below) }
 | 
						|
 | 
						|
{ --------------------- USER VARIABLES ----------------------------------- }
 | 
						|
 | 
						|
        SaveBuffer : Pointer;   { pointer to the buffer for background save }
 | 
						|
 | 
						|
{ used by Bobs for "cookie-cutting" and multi-plane masking }
 | 
						|
 | 
						|
        ImageShadow : Pointer;
 | 
						|
 | 
						|
{ pointer to BOBs for sequenced drawing of Bobs
 | 
						|
 *  for correct overlaying of multiple component animations
 | 
						|
 }
 | 
						|
        Before  : pBob; { draw this Bob before Bob pointed to by before }
 | 
						|
        After   : pBob; { draw this Bob after Bob pointed to by after }
 | 
						|
 | 
						|
        BobVSprite : pVSprite;        { this Bob's VSprite definition }
 | 
						|
 | 
						|
        BobComp : Pointer; { (AnimCompPtr) pointer to this Bob's AnimComp def }
 | 
						|
 | 
						|
        DBuffer : Pointer;        { pointer to this Bob's dBuf packet }
 | 
						|
 | 
						|
        BUserExt : BUserStuff;  { Bob user extension }
 | 
						|
    end;
 | 
						|
 | 
						|
    pAnimComp = ^tAnimComp;
 | 
						|
    tAnimComp = record
 | 
						|
 | 
						|
{ --------------------- SYSTEM VARIABLES --------------------------------- }
 | 
						|
 | 
						|
{ --------------------- COMMON VARIABLES --------------------------------- }
 | 
						|
 | 
						|
        Flags   : smallint;        { AnimComp flags for system & user }
 | 
						|
 | 
						|
{ timer defines how long to keep this component active:
 | 
						|
 *  if set non-zero, timer decrements to zero then switches to nextSeq
 | 
						|
 *  if set to zero, AnimComp never switches
 | 
						|
 }
 | 
						|
 | 
						|
        Timer   : smallint;
 | 
						|
 | 
						|
{ --------------------- USER VARIABLES ----------------------------------- }
 | 
						|
{ initial value for timer when the AnimComp is activated by the system }
 | 
						|
 | 
						|
        TimeSet : smallint;
 | 
						|
 | 
						|
{ pointer to next and previous components of animation object }
 | 
						|
 | 
						|
        NextComp        : pAnimComp;
 | 
						|
        PrevComp        : pAnimComp;
 | 
						|
 | 
						|
{ pointer to component component definition of next image in sequence }
 | 
						|
 | 
						|
        NextSeq : pAnimComp;
 | 
						|
        PrevSeq : pAnimComp;
 | 
						|
 | 
						|
        AnimCRoutine : Pointer; { Pointer of special animation procedure }
 | 
						|
 | 
						|
        YTrans  : smallint; { initial y translation (if this is a component) }
 | 
						|
        XTrans  : smallint; { initial x translation (if this is a component) }
 | 
						|
 | 
						|
        HeadOb  : Pointer; { AnimObPtr }
 | 
						|
 | 
						|
        AnimBob : pBob;
 | 
						|
    end;
 | 
						|
 | 
						|
    pAnimOb = ^tAnimOb;
 | 
						|
    tAnimOb = record
 | 
						|
 | 
						|
{ --------------------- SYSTEM VARIABLES --------------------------------- }
 | 
						|
 | 
						|
        NextOb,
 | 
						|
        PrevOb  : pAnimOb;
 | 
						|
 | 
						|
{ number of calls to Animate this AnimOb has endured }
 | 
						|
 | 
						|
        Clock   : Longint;
 | 
						|
 | 
						|
        AnOldY,
 | 
						|
        AnOldX  : smallint;        { old y,x coordinates }
 | 
						|
 | 
						|
{ --------------------- COMMON VARIABLES --------------------------------- }
 | 
						|
 | 
						|
        AnY,
 | 
						|
        AnX     : smallint;        { y,x coordinates of the AnimOb }
 | 
						|
 | 
						|
{ --------------------- USER VARIABLES ----------------------------------- }
 | 
						|
 | 
						|
        YVel,
 | 
						|
        XVel    : smallint;        { velocities of this object }
 | 
						|
        YAccel,
 | 
						|
        XAccel  : smallint;        { accelerations of this object }
 | 
						|
 | 
						|
        RingYTrans,
 | 
						|
        RingXTrans      : smallint;        { ring translation values }
 | 
						|
 | 
						|
        AnimORoutine    : Pointer;      { Pointer of special animation
 | 
						|
                                          procedure }
 | 
						|
 | 
						|
        HeadComp        : pAnimComp;  { pointer to first component }
 | 
						|
 | 
						|
        AUserExt        : AUserStuff;       { AnimOb user extension }
 | 
						|
    end;
 | 
						|
 | 
						|
    ppAnimOb = ^pAnimOb;
 | 
						|
 | 
						|
 | 
						|
{ ************************************************************************ }
 | 
						|
 | 
						|
const
 | 
						|
 | 
						|
    B2NORM      = 0;
 | 
						|
    B2SWAP      = 1;
 | 
						|
    B2BOBBER    = 2;
 | 
						|
 | 
						|
{ ************************************************************************ }
 | 
						|
 | 
						|
type
 | 
						|
 | 
						|
{ a structure to contain the 16 collision procedure addresses }
 | 
						|
 | 
						|
    collTable = Array [0..15] of Pointer;
 | 
						|
    pcollTable = ^collTable;
 | 
						|
 | 
						|
const
 | 
						|
 | 
						|
{   These bit descriptors are used by the GEL collide routines.
 | 
						|
 *  These bits are set in the hitMask and meMask variables of
 | 
						|
 *  a GEL to describe whether or not these types of collisions
 | 
						|
 *  can affect the GEL.  BNDRY_HIT is described further below;
 | 
						|
 *  this bit is permanently assigned as the boundary-hit flag.
 | 
						|
 *  The other bit GEL_HIT is meant only as a default to cover
 | 
						|
 *  any GEL hitting any other; the user may redefine this bit.
 | 
						|
 }
 | 
						|
 | 
						|
    BORDERHIT   = 0;
 | 
						|
 | 
						|
{   These bit descriptors are used by the GEL boundry hit routines.
 | 
						|
 *  When the user's boundry-hit routine is called (via the argument
 | 
						|
 *  set by a call to SetCollision) the first argument passed to
 | 
						|
 *  the user's routine is the Pointer of the GEL involved in the
 | 
						|
 *  boundry-hit, and the second argument has the appropriate bit(s)
 | 
						|
 *  set to describe which boundry was surpassed
 | 
						|
 }
 | 
						|
 | 
						|
    TOPHIT      = 1;
 | 
						|
    BOTTOMHIT   = 2;
 | 
						|
    LEFTHIT     = 4;
 | 
						|
    RIGHTHIT    = 8;
 | 
						|
 | 
						|
Type
 | 
						|
 pExtendedNode = ^tExtendedNode;
 | 
						|
 tExtendedNode = record
 | 
						|
  xln_Succ,
 | 
						|
  xln_Pred  : pNode;
 | 
						|
  xln_Type  : Byte;
 | 
						|
  xln_Pri   : Shortint;
 | 
						|
  xln_Name  : PChar;
 | 
						|
  xln_Subsystem : Byte;
 | 
						|
  xln_Subtype   : Byte;
 | 
						|
  xln_Library : Longint;
 | 
						|
  xln_Init : Pointer;
 | 
						|
 END;
 | 
						|
 | 
						|
CONST
 | 
						|
 SS_GRAPHICS   =  $02;
 | 
						|
 | 
						|
 VIEW_EXTRA_TYPE       =  1;
 | 
						|
 VIEWPORT_EXTRA_TYPE   =  2;
 | 
						|
 SPECIAL_MONITOR_TYPE  =  3;
 | 
						|
 MONITOR_SPEC_TYPE     =  4;
 | 
						|
 | 
						|
type
 | 
						|
 | 
						|
{ structure used by AddTOFTask }
 | 
						|
 | 
						|
    pIsrvstr = ^tIsrvstr;
 | 
						|
    tIsrvstr = record
 | 
						|
        is_Node : tNode;
 | 
						|
        Iptr    : pIsrvstr;     { passed to srvr by os }
 | 
						|
        code    : Pointer;
 | 
						|
        ccode   : Pointer;
 | 
						|
        Carg    : Pointer;
 | 
						|
    end;
 | 
						|
 | 
						|
Type
 | 
						|
 pAnalogSignalInterval = ^tAnalogSignalInterval;
 | 
						|
 tAnalogSignalInterval = record
 | 
						|
  asi_Start,
 | 
						|
  asi_Stop  : Word;
 | 
						|
 END;
 | 
						|
 | 
						|
 pSpecialMonitor = ^tSpecialMonitor;
 | 
						|
 tSpecialMonitor = record
 | 
						|
  spm_Node      : tExtendedNode;
 | 
						|
  spm_Flags     : Word;
 | 
						|
  do_monitor,
 | 
						|
  reserved1,
 | 
						|
  reserved2,
 | 
						|
  reserved3     : Pointer;
 | 
						|
  hblank,
 | 
						|
  vblank,
 | 
						|
  hsync,
 | 
						|
  vsync : tAnalogSignalInterval;
 | 
						|
 END;
 | 
						|
 | 
						|
 | 
						|
 pMonitorSpec = ^tMonitorSpec;
 | 
						|
 tMonitorSpec = record
 | 
						|
    ms_Node     : tExtendedNode;
 | 
						|
    ms_Flags    : Word;
 | 
						|
    ratioh,
 | 
						|
    ratiov      : Longint;
 | 
						|
    total_rows,
 | 
						|
    total_colorclocks,
 | 
						|
    DeniseMaxDisplayColumn,
 | 
						|
    BeamCon0,
 | 
						|
    min_row     : Word;
 | 
						|
    ms_Special  : pSpecialMonitor;
 | 
						|
    ms_OpenCount : Word;
 | 
						|
    ms_transform,
 | 
						|
    ms_translate,
 | 
						|
    ms_scale    : Pointer;
 | 
						|
    ms_xoffset,
 | 
						|
    ms_yoffset  : Word;
 | 
						|
    ms_LegalView : tRectangle;
 | 
						|
    ms_maxoscan,       { maximum legal overscan }
 | 
						|
    ms_videoscan  : Pointer;      { video display overscan }
 | 
						|
    DeniseMinDisplayColumn : Word;
 | 
						|
    DisplayCompatible      : Cardinal;
 | 
						|
    DisplayInfoDataBase    : tList;
 | 
						|
    DisplayInfoDataBaseSemaphore : tSignalSemaphore;
 | 
						|
    ms_MrgCop,
 | 
						|
    ms_LoadView,
 | 
						|
    ms_KillView  : Longint;
 | 
						|
 END;
 | 
						|
 | 
						|
const
 | 
						|
  TO_MONITOR            =  0;
 | 
						|
  FROM_MONITOR          =  1;
 | 
						|
  STANDARD_XOFFSET      =  9;
 | 
						|
  STANDARD_YOFFSET      =  0;
 | 
						|
 | 
						|
  MSB_REQUEST_NTSC      =  0;
 | 
						|
  MSB_REQUEST_PAL       =  1;
 | 
						|
  MSB_REQUEST_SPECIAL   =  2;
 | 
						|
  MSB_REQUEST_A2024     =  3;
 | 
						|
  MSB_DOUBLE_SPRITES    =  4;
 | 
						|
  MSF_REQUEST_NTSC      =  1;
 | 
						|
  MSF_REQUEST_PAL       =  2;
 | 
						|
  MSF_REQUEST_SPECIAL   =  4;
 | 
						|
  MSF_REQUEST_A2024     =  8;
 | 
						|
  MSF_DOUBLE_SPRITES    =  16;
 | 
						|
 | 
						|
 | 
						|
{ obsolete, v37 compatible definitions follow }
 | 
						|
  REQUEST_NTSC          =  1;
 | 
						|
  REQUEST_PAL           =  2;
 | 
						|
  REQUEST_SPECIAL       =  4;
 | 
						|
  REQUEST_A2024         =  8;
 | 
						|
 | 
						|
  DEFAULT_MONITOR_NAME  : PChar =  'default.monitor';
 | 
						|
  NTSC_MONITOR_NAME     : PChar =  'ntsc.monitor';
 | 
						|
  PAL_MONITOR_NAME      : PChar =  'pal.monitor';
 | 
						|
  STANDARD_MONITOR_MASK =  ( REQUEST_NTSC OR REQUEST_PAL ) ;
 | 
						|
 | 
						|
  STANDARD_NTSC_ROWS    =  262;
 | 
						|
  STANDARD_PAL_ROWS     =  312;
 | 
						|
  STANDARD_COLORCLOCKS  =  226;
 | 
						|
  STANDARD_DENISE_MAX   =  455;
 | 
						|
  STANDARD_DENISE_MIN   =  93 ;
 | 
						|
  STANDARD_NTSC_BEAMCON =  $0000;
 | 
						|
  STANDARD_PAL_BEAMCON  =  DISPLAYPAL ;
 | 
						|
 | 
						|
  SPECIAL_BEAMCON       = ( VARVBLANK OR LOLDIS OR VARVSYNC OR VARHSYNC OR VARBEAM OR CSBLANK OR VSYNCTRUE);
 | 
						|
 | 
						|
  MIN_NTSC_ROW    = 21   ;
 | 
						|
  MIN_PAL_ROW     = 29   ;
 | 
						|
  STANDARD_VIEW_X = $81  ;
 | 
						|
  STANDARD_VIEW_Y = $2C  ;
 | 
						|
  STANDARD_HBSTRT = $06  ;
 | 
						|
  STANDARD_HSSTRT = $0B  ;
 | 
						|
  STANDARD_HSSTOP = $1C  ;
 | 
						|
  STANDARD_HBSTOP = $2C  ;
 | 
						|
  STANDARD_VBSTRT = $0122;
 | 
						|
  STANDARD_VSSTRT = $02A6;
 | 
						|
  STANDARD_VSSTOP = $03AA;
 | 
						|
  STANDARD_VBSTOP = $1066;
 | 
						|
 | 
						|
  VGA_COLORCLOCKS = (STANDARD_COLORCLOCKS/2);
 | 
						|
  VGA_TOTAL_ROWS  = (STANDARD_NTSC_ROWS*2);
 | 
						|
  VGA_DENISE_MIN  = 59   ;
 | 
						|
  MIN_VGA_ROW     = 29   ;
 | 
						|
  VGA_HBSTRT      = $08  ;
 | 
						|
  VGA_HSSTRT      = $0E  ;
 | 
						|
  VGA_HSSTOP      = $1C  ;
 | 
						|
  VGA_HBSTOP      = $1E  ;
 | 
						|
  VGA_VBSTRT      = $0000;
 | 
						|
  VGA_VSSTRT      = $0153;
 | 
						|
  VGA_VSSTOP      = $0235;
 | 
						|
  VGA_VBSTOP      = $0CCD;
 | 
						|
 | 
						|
  VGA_MONITOR_NAME  : PChar    =  'vga.monitor';
 | 
						|
 | 
						|
{ NOTE: VGA70 definitions are obsolete - a VGA70 monitor has never been
 | 
						|
 * implemented.
 | 
						|
 }
 | 
						|
  VGA70_COLORCLOCKS = (STANDARD_COLORCLOCKS/2) ;
 | 
						|
  VGA70_TOTAL_ROWS  = 449;
 | 
						|
  VGA70_DENISE_MIN  = 59;
 | 
						|
  MIN_VGA70_ROW     = 35   ;
 | 
						|
  VGA70_HBSTRT      = $08  ;
 | 
						|
  VGA70_HSSTRT      = $0E  ;
 | 
						|
  VGA70_HSSTOP      = $1C  ;
 | 
						|
  VGA70_HBSTOP      = $1E  ;
 | 
						|
  VGA70_VBSTRT      = $0000;
 | 
						|
  VGA70_VSSTRT      = $02A6;
 | 
						|
  VGA70_VSSTOP      = $0388;
 | 
						|
  VGA70_VBSTOP      = $0F73;
 | 
						|
 | 
						|
  VGA70_BEAMCON     = (SPECIAL_BEAMCON XOR VSYNCTRUE);
 | 
						|
  VGA70_MONITOR_NAME  : PChar  =      'vga70.monitor';
 | 
						|
 | 
						|
  BROADCAST_HBSTRT  =      $01  ;
 | 
						|
  BROADCAST_HSSTRT  =      $06  ;
 | 
						|
  BROADCAST_HSSTOP  =      $17  ;
 | 
						|
  BROADCAST_HBSTOP  =      $27  ;
 | 
						|
  BROADCAST_VBSTRT  =      $0000;
 | 
						|
  BROADCAST_VSSTRT  =      $02A6;
 | 
						|
  BROADCAST_VSSTOP  =      $054C;
 | 
						|
  BROADCAST_VBSTOP  =      $1C40;
 | 
						|
  BROADCAST_BEAMCON =      ( LOLDIS OR CSBLANK );
 | 
						|
  RATIO_FIXEDPART   =      4;
 | 
						|
  RATIO_UNITY       =      16;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
Type
 | 
						|
    pRasInfo = ^tRasInfo;
 | 
						|
    tRasInfo = record    { used by callers to and InitDspC() }
 | 
						|
        Next    : pRasInfo;     { used for dualpf }
 | 
						|
        BitMap  : pBitMap;
 | 
						|
        RxOffset,
 | 
						|
        RyOffset : smallint;       { scroll offsets in this BitMap }
 | 
						|
    end;
 | 
						|
 | 
						|
 | 
						|
    pView = ^tView;
 | 
						|
    tView = record
 | 
						|
        ViewPort        : Pointer;      { ViewPortPtr }
 | 
						|
        LOFCprList      : pcprlist;   { used for interlaced and noninterlaced }
 | 
						|
        SHFCprList      : pcprlist;   { only used during interlace }
 | 
						|
        DyOffset,
 | 
						|
        DxOffset        : smallint;        { for complete View positioning }
 | 
						|
                                { offsets are +- adjustments to standard #s }
 | 
						|
        Modes           : WORD;        { such as INTERLACE, GENLOC }
 | 
						|
    end;
 | 
						|
 | 
						|
{ these structures are obtained via GfxNew }
 | 
						|
{ and disposed by GfxFree }
 | 
						|
Type
 | 
						|
       pViewExtra = ^tViewExtra;
 | 
						|
       tViewExtra = record
 | 
						|
        n : tExtendedNode;
 | 
						|
        View     : pView;       { backwards link }   { view in C-Includes }
 | 
						|
        Monitor : pMonitorSpec; { monitors for this view }
 | 
						|
        TopLine : Word;
 | 
						|
       END;
 | 
						|
 | 
						|
 | 
						|
    pViewPort = ^tViewPort;
 | 
						|
    tViewPort = record
 | 
						|
        Next    : pViewPort;
 | 
						|
        ColorMap : Pointer; { table of colors for this viewport }        { ColorMapPtr }
 | 
						|
                          { if this is nil, MakeVPort assumes default values }
 | 
						|
        DspIns  : pCopList;   { user by MakeView() }
 | 
						|
        SprIns  : pCopList;   { used by sprite stuff }
 | 
						|
        ClrIns  : pCopList;   { used by sprite stuff }
 | 
						|
        UCopIns : pUCopList;  { User copper list }
 | 
						|
        DWidth,
 | 
						|
        DHeight : smallint;
 | 
						|
        DxOffset,
 | 
						|
        DyOffset : smallint;
 | 
						|
        Modes   : Word;
 | 
						|
        SpritePriorities : Byte;        { used by makevp }
 | 
						|
        reserved : Byte;
 | 
						|
        RasInfo : pRasInfo;
 | 
						|
    end;
 | 
						|
 | 
						|
 | 
						|
{ this structure is obtained via GfxNew }
 | 
						|
{ and disposed by GfxFree }
 | 
						|
 | 
						|
 pViewPortExtra = ^tViewPortExtra;
 | 
						|
 tViewPortExtra = record
 | 
						|
  n : tExtendedNode;
 | 
						|
  ViewPort     : pViewPort;      { backwards link }   { ViewPort in C-Includes }
 | 
						|
  DisplayClip  : tRectangle;  { makevp display clipping information }
 | 
						|
        { These are added for V39 }
 | 
						|
  VecTable     : Pointer;                { Private }
 | 
						|
  DriverData   : Array[0..1] of Pointer;
 | 
						|
  Flags        : WORD;
 | 
						|
  Origin       : Array[0..1] of tPoint;  { First visible point relative to the DClip.
 | 
						|
                                         * One for each possible playfield.
 | 
						|
                                         }
 | 
						|
  cop1ptr,                  { private }
 | 
						|
  cop2ptr      : Cardinal;   { private }
 | 
						|
 END;
 | 
						|
 | 
						|
 | 
						|
    pColorMap = ^tColorMap;
 | 
						|
    tColorMap = record
 | 
						|
        Flags   : Byte;
 | 
						|
        CType   : Byte;         { This is "Type" in C includes }
 | 
						|
        Count   : Word;
 | 
						|
        ColorTable      : Pointer;
 | 
						|
        cm_vpe  : pViewPortExtra;
 | 
						|
        LowColorBits : Pointer;
 | 
						|
        TransparencyPlane,
 | 
						|
        SpriteResolution,
 | 
						|
        SpriteResDefault,
 | 
						|
        AuxFlags         : Byte;
 | 
						|
        cm_vp            : pViewPort;   { ViewPortPtr }
 | 
						|
        NormalDisplayInfo,
 | 
						|
        CoerceDisplayInfo : Pointer;
 | 
						|
        cm_batch_items   : pTagItem;
 | 
						|
        VPModeID         : Cardinal;
 | 
						|
        PalExtra         : Pointer;
 | 
						|
        SpriteBase_Even,
 | 
						|
        SpriteBase_Odd,
 | 
						|
        Bp_0_base,
 | 
						|
        Bp_1_base        : Word;
 | 
						|
    end;
 | 
						|
 | 
						|
{ if Type == 0 then ColorMap is V1.2/V1.3 compatible }
 | 
						|
{ if Type != 0 then ColorMap is V36       compatible }
 | 
						|
{ the system will never create other than V39 type colormaps when running V39 }
 | 
						|
 | 
						|
CONST
 | 
						|
 COLORMAP_TYPE_V1_2     = $00;
 | 
						|
 COLORMAP_TYPE_V1_4     = $01;
 | 
						|
 COLORMAP_TYPE_V36      = COLORMAP_TYPE_V1_4;    { use this definition }
 | 
						|
 COLORMAP_TYPE_V39      = $02;
 | 
						|
 | 
						|
 | 
						|
{ Flags variable }
 | 
						|
 COLORMAP_TRANSPARENCY   = $01;
 | 
						|
 COLORPLANE_TRANSPARENCY = $02;
 | 
						|
 BORDER_BLANKING         = $04;
 | 
						|
 BORDER_NOTRANSPARENCY   = $08;
 | 
						|
 VIDEOCONTROL_BATCH      = $10;
 | 
						|
 USER_COPPER_CLIP        = $20;
 | 
						|
 | 
						|
 | 
						|
CONST
 | 
						|
 EXTEND_VSTRUCT = $1000;  { unused bit in Modes field of View }
 | 
						|
 | 
						|
 | 
						|
{ defines used for Modes in IVPargs }
 | 
						|
 | 
						|
CONST
 | 
						|
 GENLOCK_VIDEO  =  $0002;
 | 
						|
 LACE           =  $0004;
 | 
						|
 SUPERHIRES     =  $0020;
 | 
						|
 PFBA           =  $0040;
 | 
						|
 EXTRA_HALFBRITE=  $0080;
 | 
						|
 GENLOCK_AUDIO  =  $0100;
 | 
						|
 DUALPF         =  $0400;
 | 
						|
 HAM            =  $0800;
 | 
						|
 EXTENDED_MODE  =  $1000;
 | 
						|
 VP_HIDE        =  $2000;
 | 
						|
 SPRITES        =  $4000;
 | 
						|
 HIRES          =  $8000;
 | 
						|
 | 
						|
 VPF_A2024      =  $40;
 | 
						|
 VPF_AGNUS      =  $20;
 | 
						|
 VPF_TENHZ      =  $20;
 | 
						|
 | 
						|
 BORDERSPRITES   = $40;
 | 
						|
 | 
						|
 CMF_CMTRANS   =  0;
 | 
						|
 CMF_CPTRANS   =  1;
 | 
						|
 CMF_BRDRBLNK  =  2;
 | 
						|
 CMF_BRDNTRAN  =  3;
 | 
						|
 CMF_BRDRSPRT  =  6;
 | 
						|
 | 
						|
 SPRITERESN_ECS       =   0;
 | 
						|
{ ^140ns, except in 35ns viewport, where it is 70ns. }
 | 
						|
 SPRITERESN_140NS     =   1;
 | 
						|
 SPRITERESN_70NS      =   2;
 | 
						|
 SPRITERESN_35NS      =   3;
 | 
						|
 SPRITERESN_DEFAULT   =   -1;
 | 
						|
 | 
						|
{ AuxFlags : }
 | 
						|
 CMAB_FULLPALETTE = 0;
 | 
						|
 CMAF_FULLPALETTE = 1;
 | 
						|
 CMAB_NO_INTERMED_UPDATE = 1;
 | 
						|
 CMAF_NO_INTERMED_UPDATE = 2;
 | 
						|
 CMAB_NO_COLOR_LOAD = 2;
 | 
						|
 CMAF_NO_COLOR_LOAD = 4;
 | 
						|
 CMAB_DUALPF_DISABLE = 3;
 | 
						|
 CMAF_DUALPF_DISABLE = 8;
 | 
						|
 | 
						|
Type
 | 
						|
    pPaletteExtra = ^tPaletteExtra;
 | 
						|
    tPaletteExtra = record                            { structure may be extended so watch out! }
 | 
						|
        pe_Semaphore  : tSignalSemaphore;                { shared semaphore for arbitration     }
 | 
						|
        pe_FirstFree,                                   { *private*                            }
 | 
						|
        pe_NFree,                                       { number of free colors                }
 | 
						|
        pe_FirstShared,                                 { *private*                            }
 | 
						|
        pe_NShared    : WORD;                           { *private*                            }
 | 
						|
        pe_RefCnt     : Pointer;                        { *private*                            }
 | 
						|
        pe_AllocList  : Pointer;                        { *private*                            }
 | 
						|
        pe_ViewPort   : pViewPort;                    { back pointer to viewport             }
 | 
						|
        pe_SharableColors : WORD;                       { the number of sharable colors.       }
 | 
						|
    end;
 | 
						|
{ flags values for ObtainPen }
 | 
						|
Const
 | 
						|
 PENB_EXCLUSIVE = 0;
 | 
						|
 PENB_NO_SETCOLOR = 1;
 | 
						|
 | 
						|
 PENF_EXCLUSIVE = 1;
 | 
						|
 PENF_NO_SETCOLOR = 2;
 | 
						|
 | 
						|
{ obsolete names for PENF_xxx flags: }
 | 
						|
 | 
						|
 PEN_EXCLUSIVE = PENF_EXCLUSIVE;
 | 
						|
 PEN_NO_SETCOLOR = PENF_NO_SETCOLOR;
 | 
						|
 | 
						|
{ precision values for ObtainBestPen : }
 | 
						|
 | 
						|
 PRECISION_EXACT = -1;
 | 
						|
 PRECISION_IMAGE = 0;
 | 
						|
 PRECISION_ICON  = 16;
 | 
						|
 PRECISION_GUI   = 32;
 | 
						|
 | 
						|
 | 
						|
{ tags for ObtainBestPen: }
 | 
						|
 OBP_Precision = $84000000;
 | 
						|
 OBP_FailIfBad = $84000001;
 | 
						|
 | 
						|
{ From V39, MakeVPort() will return an error if there is not enough memory,
 | 
						|
 * or the requested mode cannot be opened with the requested depth with the
 | 
						|
 * given bitmap (for higher bandwidth alignments).
 | 
						|
 }
 | 
						|
 | 
						|
 MVP_OK        =  0;       { you want to see this one }
 | 
						|
 MVP_NO_MEM    =  1;       { insufficient memory for intermediate workspace }
 | 
						|
 MVP_NO_VPE    =  2;       { ViewPort does not have a ViewPortExtra, and
 | 
						|
                                 * insufficient memory to allocate a temporary one.
 | 
						|
                                 }
 | 
						|
 MVP_NO_DSPINS =  3;       { insufficient memory for intermidiate copper
 | 
						|
                                 * instructions.
 | 
						|
                                 }
 | 
						|
 MVP_NO_DISPLAY = 4;       { BitMap data is misaligned for this viewport's
 | 
						|
                                 * mode and depth - see AllocBitMap().
 | 
						|
                                 }
 | 
						|
 MVP_OFF_BOTTOM = 5;       { PRIVATE - you will never see this. }
 | 
						|
 | 
						|
{ From V39, MrgCop() will return an error if there is not enough memory,
 | 
						|
 * or for some reason MrgCop() did not need to make any copper lists.
 | 
						|
 }
 | 
						|
 | 
						|
 MCOP_OK       =  0;       { you want to see this one }
 | 
						|
 MCOP_NO_MEM   =  1;       { insufficient memory to allocate the system
 | 
						|
                                 * copper lists.
 | 
						|
                                 }
 | 
						|
 MCOP_NOP      =  2;       { MrgCop() did not merge any copper lists
 | 
						|
                                 * (eg, no ViewPorts in the list, or all marked as
 | 
						|
                                 * hidden).
 | 
						|
                                 }
 | 
						|
Type
 | 
						|
    pDBufInfo = ^tDBufInfo;
 | 
						|
    tDBufInfo = record
 | 
						|
        dbi_Link1   : Pointer;
 | 
						|
        dbi_Count1  : Cardinal;
 | 
						|
        dbi_SafeMessage : tMessage;         { replied to when safe to write to old bitmap }
 | 
						|
        dbi_UserData1   : Pointer;                     { first user data }
 | 
						|
 | 
						|
        dbi_Link2   : Pointer;
 | 
						|
        dbi_Count2  : Cardinal;
 | 
						|
        dbi_DispMessage : tMessage; { replied to when new bitmap has been displayed at least
 | 
						|
                                                        once }
 | 
						|
        dbi_UserData2 : Pointer;                  { second user data }
 | 
						|
        dbi_MatchLong : Cardinal;
 | 
						|
        dbi_CopPtr1,
 | 
						|
        dbi_CopPtr2,
 | 
						|
        dbi_CopPtr3   : Pointer;
 | 
						|
        dbi_BeamPos1,
 | 
						|
        dbi_BeamPos2  : WORD;
 | 
						|
    end;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
   {   include define file for graphics display mode IDs.   }
 | 
						|
 | 
						|
 | 
						|
const
 | 
						|
 | 
						|
   INVALID_ID                   =   NOT 0;
 | 
						|
 | 
						|
{ With all the new modes that are available under V38 and V39, it is highly
 | 
						|
 * recommended that you use either the asl.library screenmode requester,
 | 
						|
 * and/or the V39 graphics.library function BestModeIDA().
 | 
						|
 *
 | 
						|
 * DO NOT interpret the any of the bits in the ModeID for its meaning. For
 | 
						|
 * example, do not interpret bit 3 ($4) as meaning the ModeID is interlaced.
 | 
						|
 * Instead, use GetDisplayInfoData() with DTAG_DISP, and examine the DIPF_...
 | 
						|
 * flags to determine a ModeID's characteristics. The only exception to
 | 
						|
 * this rule is that bit 7 ($80) will always mean the ModeID is
 | 
						|
 * ExtraHalfBright, and bit 11 ($800) will always mean the ModeID is HAM.
 | 
						|
 }
 | 
						|
 | 
						|
{ normal identifiers }
 | 
						|
 | 
						|
   MONITOR_ID_MASK              =   $FFFF1000;
 | 
						|
 | 
						|
   DEFAULT_MONITOR_ID           =   $00000000;
 | 
						|
   NTSC_MONITOR_ID              =   $00011000;
 | 
						|
   PAL_MONITOR_ID               =   $00021000;
 | 
						|
 | 
						|
{ the following 22 composite keys are for Modes on the default Monitor.
 | 
						|
 * NTSC & PAL "flavors" of these particular keys may be made by or'ing
 | 
						|
 * the NTSC or PAL MONITOR_ID with the desired MODE_KEY...
 | 
						|
 *
 | 
						|
 * For example, to specifically open a PAL HAM interlaced ViewPort
 | 
						|
 * (or intuition screen), you would use the modeid of
 | 
						|
 * (PAL_MONITOR_ID OR HAMLACE_KEY)
 | 
						|
 }
 | 
						|
 | 
						|
   LORES_KEY                     =  $00000000;
 | 
						|
   HIRES_KEY                     =  $00008000;
 | 
						|
   SUPER_KEY                     =  $00008020;
 | 
						|
   HAM_KEY                       =  $00000800;
 | 
						|
   LORESLACE_KEY                 =  $00000004;
 | 
						|
   HIRESLACE_KEY                 =  $00008004;
 | 
						|
   SUPERLACE_KEY                 =  $00008024;
 | 
						|
   HAMLACE_KEY                   =  $00000804;
 | 
						|
   LORESDPF_KEY                  =  $00000400;
 | 
						|
   HIRESDPF_KEY                  =  $00008400;
 | 
						|
   SUPERDPF_KEY                  =  $00008420;
 | 
						|
   LORESLACEDPF_KEY              =  $00000404;
 | 
						|
   HIRESLACEDPF_KEY              =  $00008404;
 | 
						|
   SUPERLACEDPF_KEY              =  $00008424;
 | 
						|
   LORESDPF2_KEY                 =  $00000440;
 | 
						|
   HIRESDPF2_KEY                 =  $00008440;
 | 
						|
   SUPERDPF2_KEY                 =  $00008460;
 | 
						|
   LORESLACEDPF2_KEY             =  $00000444;
 | 
						|
   HIRESLACEDPF2_KEY             =  $00008444;
 | 
						|
   SUPERLACEDPF2_KEY             =  $00008464;
 | 
						|
   EXTRAHALFBRITE_KEY            =  $00000080;
 | 
						|
   EXTRAHALFBRITELACE_KEY        =  $00000084;
 | 
						|
{ New for AA ChipSet (V39) }
 | 
						|
   HIRESHAM_KEY                  =  $00008800;
 | 
						|
   SUPERHAM_KEY                  =  $00008820;
 | 
						|
   HIRESEHB_KEY                  =  $00008080;
 | 
						|
   SUPEREHB_KEY                  =  $000080a0;
 | 
						|
   HIRESHAMLACE_KEY              =  $00008804;
 | 
						|
   SUPERHAMLACE_KEY              =  $00008824;
 | 
						|
   HIRESEHBLACE_KEY              =  $00008084;
 | 
						|
   SUPEREHBLACE_KEY              =  $000080a4;
 | 
						|
{ Added for V40 - may be useful modes for some games or animations. }
 | 
						|
   LORESSDBL_KEY                 =  $00000008;
 | 
						|
   LORESHAMSDBL_KEY              =  $00000808;
 | 
						|
   LORESEHBSDBL_KEY              =  $00000088;
 | 
						|
   HIRESHAMSDBL_KEY              =  $00008808;
 | 
						|
 | 
						|
 | 
						|
{ VGA identifiers }
 | 
						|
 | 
						|
   VGA_MONITOR_ID                =  $00031000;
 | 
						|
 | 
						|
   VGAEXTRALORES_KEY             =  $00031004;
 | 
						|
   VGALORES_KEY                  =  $00039004;
 | 
						|
   VGAPRODUCT_KEY                =  $00039024;
 | 
						|
   VGAHAM_KEY                    =  $00031804;
 | 
						|
   VGAEXTRALORESLACE_KEY         =  $00031005;
 | 
						|
   VGALORESLACE_KEY              =  $00039005;
 | 
						|
   VGAPRODUCTLACE_KEY            =  $00039025;
 | 
						|
   VGAHAMLACE_KEY                =  $00031805;
 | 
						|
   VGAEXTRALORESDPF_KEY          =  $00031404;
 | 
						|
   VGALORESDPF_KEY               =  $00039404;
 | 
						|
   VGAPRODUCTDPF_KEY             =  $00039424;
 | 
						|
   VGAEXTRALORESLACEDPF_KEY      =  $00031405;
 | 
						|
   VGALORESLACEDPF_KEY           =  $00039405;
 | 
						|
   VGAPRODUCTLACEDPF_KEY         =  $00039425;
 | 
						|
   VGAEXTRALORESDPF2_KEY         =  $00031444;
 | 
						|
   VGALORESDPF2_KEY              =  $00039444;
 | 
						|
   VGAPRODUCTDPF2_KEY            =  $00039464;
 | 
						|
   VGAEXTRALORESLACEDPF2_KEY     =  $00031445;
 | 
						|
   VGALORESLACEDPF2_KEY          =  $00039445;
 | 
						|
   VGAPRODUCTLACEDPF2_KEY        =  $00039465;
 | 
						|
   VGAEXTRAHALFBRITE_KEY         =  $00031084;
 | 
						|
   VGAEXTRAHALFBRITELACE_KEY     =  $00031085;
 | 
						|
{ New for AA ChipSet (V39) }
 | 
						|
   VGAPRODUCTHAM_KEY             =  $00039824;
 | 
						|
   VGALORESHAM_KEY               =  $00039804;
 | 
						|
   VGAEXTRALORESHAM_KEY          =  VGAHAM_KEY;
 | 
						|
   VGAPRODUCTHAMLACE_KEY         =  $00039825;
 | 
						|
   VGALORESHAMLACE_KEY           =  $00039805;
 | 
						|
   VGAEXTRALORESHAMLACE_KEY      =  VGAHAMLACE_KEY;
 | 
						|
   VGAEXTRALORESEHB_KEY          =  VGAEXTRAHALFBRITE_KEY;
 | 
						|
   VGAEXTRALORESEHBLACE_KEY      =  VGAEXTRAHALFBRITELACE_KEY;
 | 
						|
   VGALORESEHB_KEY               =  $00039084;
 | 
						|
   VGALORESEHBLACE_KEY           =  $00039085;
 | 
						|
   VGAEHB_KEY                    =  $000390a4;
 | 
						|
   VGAEHBLACE_KEY                =  $000390a5;
 | 
						|
{ These ModeIDs are the scandoubled equivalents of the above, with the
 | 
						|
 * exception of the DualPlayfield modes, as AA does not allow for scandoubling
 | 
						|
 * dualplayfield.
 | 
						|
 }
 | 
						|
   VGAEXTRALORESDBL_KEY          =  $00031000;
 | 
						|
   VGALORESDBL_KEY               =  $00039000;
 | 
						|
   VGAPRODUCTDBL_KEY             =  $00039020;
 | 
						|
   VGAEXTRALORESHAMDBL_KEY       =  $00031800;
 | 
						|
   VGALORESHAMDBL_KEY            =  $00039800;
 | 
						|
   VGAPRODUCTHAMDBL_KEY          =  $00039820;
 | 
						|
   VGAEXTRALORESEHBDBL_KEY       =  $00031080;
 | 
						|
   VGALORESEHBDBL_KEY            =  $00039080;
 | 
						|
   VGAPRODUCTEHBDBL_KEY          =  $000390a0;
 | 
						|
 | 
						|
{ a2024 identifiers }
 | 
						|
 | 
						|
   A2024_MONITOR_ID              =  $00041000;
 | 
						|
 | 
						|
   A2024TENHERTZ_KEY             =  $00041000;
 | 
						|
   A2024FIFTEENHERTZ_KEY         =  $00049000;
 | 
						|
 | 
						|
{ prototype identifiers (private) }
 | 
						|
 | 
						|
   PROTO_MONITOR_ID              =  $00051000;
 | 
						|
 | 
						|
 | 
						|
{ These monitors and modes were added for the V38 release. }
 | 
						|
 | 
						|
   EURO72_MONITOR_ID             =  $00061000;
 | 
						|
 | 
						|
   EURO72EXTRALORES_KEY          =  $00061004;
 | 
						|
   EURO72LORES_KEY               =  $00069004;
 | 
						|
   EURO72PRODUCT_KEY             =  $00069024;
 | 
						|
   EURO72HAM_KEY                 =  $00061804;
 | 
						|
   EURO72EXTRALORESLACE_KEY      =  $00061005;
 | 
						|
   EURO72LORESLACE_KEY           =  $00069005;
 | 
						|
   EURO72PRODUCTLACE_KEY         =  $00069025;
 | 
						|
   EURO72HAMLACE_KEY             =  $00061805;
 | 
						|
   EURO72EXTRALORESDPF_KEY       =  $00061404;
 | 
						|
   EURO72LORESDPF_KEY            =  $00069404;
 | 
						|
   EURO72PRODUCTDPF_KEY          =  $00069424;
 | 
						|
   EURO72EXTRALORESLACEDPF_KEY   =  $00061405;
 | 
						|
   EURO72LORESLACEDPF_KEY        =  $00069405;
 | 
						|
   EURO72PRODUCTLACEDPF_KEY      =  $00069425;
 | 
						|
   EURO72EXTRALORESDPF2_KEY      =  $00061444;
 | 
						|
   EURO72LORESDPF2_KEY           =  $00069444;
 | 
						|
   EURO72PRODUCTDPF2_KEY         =  $00069464;
 | 
						|
   EURO72EXTRALORESLACEDPF2_KEY  =  $00061445;
 | 
						|
   EURO72LORESLACEDPF2_KEY       =  $00069445;
 | 
						|
   EURO72PRODUCTLACEDPF2_KEY     =  $00069465;
 | 
						|
   EURO72EXTRAHALFBRITE_KEY      =  $00061084;
 | 
						|
   EURO72EXTRAHALFBRITELACE_KEY  =  $00061085;
 | 
						|
{ New AA modes (V39) }
 | 
						|
   EURO72PRODUCTHAM_KEY          =  $00069824;
 | 
						|
   EURO72PRODUCTHAMLACE_KEY      =  $00069825;
 | 
						|
   EURO72LORESHAM_KEY            =  $00069804;
 | 
						|
   EURO72LORESHAMLACE_KEY        =  $00069805;
 | 
						|
   EURO72EXTRALORESHAM_KEY       =  EURO72HAM_KEY;
 | 
						|
   EURO72EXTRALORESHAMLACE_KEY   =  EURO72HAMLACE_KEY ;
 | 
						|
   EURO72EXTRALORESEHB_KEY       =  EURO72EXTRAHALFBRITE_KEY;
 | 
						|
   EURO72EXTRALORESEHBLACE_KEY   =  EURO72EXTRAHALFBRITELACE_KEY;
 | 
						|
   EURO72LORESEHB_KEY            =  $00069084;
 | 
						|
   EURO72LORESEHBLACE_KEY        =  $00069085;
 | 
						|
   EURO72EHB_KEY                 =  $000690a4;
 | 
						|
   EURO72EHBLACE_KEY             =  $000690a5;
 | 
						|
{ These ModeIDs are the scandoubled equivalents of the above, with the
 | 
						|
 * exception of the DualPlayfield modes, as AA does not allow for scandoubling
 | 
						|
 * dualplayfield.
 | 
						|
 }
 | 
						|
   EURO72EXTRALORESDBL_KEY       =  $00061000;
 | 
						|
   EURO72LORESDBL_KEY            =  $00069000;
 | 
						|
   EURO72PRODUCTDBL_KEY          =  $00069020;
 | 
						|
   EURO72EXTRALORESHAMDBL_KEY    =  $00061800;
 | 
						|
   EURO72LORESHAMDBL_KEY         =  $00069800;
 | 
						|
   EURO72PRODUCTHAMDBL_KEY       =  $00069820;
 | 
						|
   EURO72EXTRALORESEHBDBL_KEY    =  $00061080;
 | 
						|
   EURO72LORESEHBDBL_KEY         =  $00069080;
 | 
						|
   EURO72PRODUCTEHBDBL_KEY       =  $000690a0;
 | 
						|
 | 
						|
 | 
						|
   EURO36_MONITOR_ID             =  $00071000;
 | 
						|
 | 
						|
{ Euro36 modeids can be ORed with the default modeids a la NTSC and PAL.
 | 
						|
 * For example, Euro36 SuperHires is
 | 
						|
 * (EURO36_MONITOR_ID OR SUPER_KEY)
 | 
						|
 }
 | 
						|
 | 
						|
   SUPER72_MONITOR_ID            =  $00081000;
 | 
						|
 | 
						|
{ Super72 modeids can be ORed with the default modeids a la NTSC and PAL.
 | 
						|
 * For example, Super72 SuperHiresLace (80$600) is
 | 
						|
 * (SUPER72_MONITOR_ID OR SUPERLACE_KEY).
 | 
						|
 * The following scandoubled Modes are the exception:
 | 
						|
 }
 | 
						|
   SUPER72LORESDBL_KEY           =  $00081008;
 | 
						|
   SUPER72HIRESDBL_KEY           =  $00089008;
 | 
						|
   SUPER72SUPERDBL_KEY           =  $00089028;
 | 
						|
   SUPER72LORESHAMDBL_KEY        =  $00081808;
 | 
						|
   SUPER72HIRESHAMDBL_KEY        =  $00089808;
 | 
						|
   SUPER72SUPERHAMDBL_KEY        =  $00089828;
 | 
						|
   SUPER72LORESEHBDBL_KEY        =  $00081088;
 | 
						|
   SUPER72HIRESEHBDBL_KEY        =  $00089088;
 | 
						|
   SUPER72SUPEREHBDBL_KEY        =  $000890a8;
 | 
						|
 | 
						|
 | 
						|
{ These monitors and modes were added for the V39 release. }
 | 
						|
 | 
						|
   DBLNTSC_MONITOR_ID            =  $00091000;
 | 
						|
 | 
						|
   DBLNTSCLORES_KEY              =  $00091000;
 | 
						|
   DBLNTSCLORESFF_KEY            =  $00091004;
 | 
						|
   DBLNTSCLORESHAM_KEY           =  $00091800;
 | 
						|
   DBLNTSCLORESHAMFF_KEY         =  $00091804;
 | 
						|
   DBLNTSCLORESEHB_KEY           =  $00091080;
 | 
						|
   DBLNTSCLORESEHBFF_KEY         =  $00091084;
 | 
						|
   DBLNTSCLORESLACE_KEY          =  $00091005;
 | 
						|
   DBLNTSCLORESHAMLACE_KEY       =  $00091805;
 | 
						|
   DBLNTSCLORESEHBLACE_KEY       =  $00091085;
 | 
						|
   DBLNTSCLORESDPF_KEY           =  $00091400;
 | 
						|
   DBLNTSCLORESDPFFF_KEY         =  $00091404;
 | 
						|
   DBLNTSCLORESDPFLACE_KEY       =  $00091405;
 | 
						|
   DBLNTSCLORESDPF2_KEY          =  $00091440;
 | 
						|
   DBLNTSCLORESDPF2FF_KEY        =  $00091444;
 | 
						|
   DBLNTSCLORESDPF2LACE_KEY      =  $00091445;
 | 
						|
   DBLNTSCHIRES_KEY              =  $00099000;
 | 
						|
   DBLNTSCHIRESFF_KEY            =  $00099004;
 | 
						|
   DBLNTSCHIRESHAM_KEY           =  $00099800;
 | 
						|
   DBLNTSCHIRESHAMFF_KEY         =  $00099804;
 | 
						|
   DBLNTSCHIRESLACE_KEY          =  $00099005;
 | 
						|
   DBLNTSCHIRESHAMLACE_KEY       =  $00099805;
 | 
						|
   DBLNTSCHIRESEHB_KEY           =  $00099080;
 | 
						|
   DBLNTSCHIRESEHBFF_KEY         =  $00099084;
 | 
						|
   DBLNTSCHIRESEHBLACE_KEY       =  $00099085;
 | 
						|
   DBLNTSCHIRESDPF_KEY           =  $00099400;
 | 
						|
   DBLNTSCHIRESDPFFF_KEY         =  $00099404;
 | 
						|
   DBLNTSCHIRESDPFLACE_KEY       =  $00099405;
 | 
						|
   DBLNTSCHIRESDPF2_KEY          =  $00099440;
 | 
						|
   DBLNTSCHIRESDPF2FF_KEY        =  $00099444;
 | 
						|
   DBLNTSCHIRESDPF2LACE_KEY      =  $00099445;
 | 
						|
   DBLNTSCEXTRALORES_KEY         =  $00091200;
 | 
						|
   DBLNTSCEXTRALORESHAM_KEY      =  $00091a00;
 | 
						|
   DBLNTSCEXTRALORESEHB_KEY      =  $00091280;
 | 
						|
   DBLNTSCEXTRALORESDPF_KEY      =  $00091600;
 | 
						|
   DBLNTSCEXTRALORESDPF2_KEY     =  $00091640;
 | 
						|
   DBLNTSCEXTRALORESFF_KEY       =  $00091204;
 | 
						|
   DBLNTSCEXTRALORESHAMFF_KEY    =  $00091a04;
 | 
						|
   DBLNTSCEXTRALORESEHBFF_KEY    =  $00091284;
 | 
						|
   DBLNTSCEXTRALORESDPFFF_KEY    =  $00091604;
 | 
						|
   DBLNTSCEXTRALORESDPF2FF_KEY   =  $00091644;
 | 
						|
   DBLNTSCEXTRALORESLACE_KEY     =  $00091205;
 | 
						|
   DBLNTSCEXTRALORESHAMLACE_KEY  =  $00091a05;
 | 
						|
   DBLNTSCEXTRALORESEHBLACE_KEY  =  $00091285;
 | 
						|
   DBLNTSCEXTRALORESDPFLACE_KEY  =  $00091605;
 | 
						|
   DBLNTSCEXTRALORESDPF2LACE_KEY =  $00091645;
 | 
						|
 | 
						|
   DBLPAL_MONITOR_ID             =  $000a1000;
 | 
						|
 | 
						|
   DBLPALLORES_KEY               =  $000a1000;
 | 
						|
   DBLPALLORESFF_KEY             =  $000a1004;
 | 
						|
   DBLPALLORESHAM_KEY            =  $000a1800;
 | 
						|
   DBLPALLORESHAMFF_KEY          =  $000a1804;
 | 
						|
   DBLPALLORESEHB_KEY            =  $000a1080;
 | 
						|
   DBLPALLORESEHBFF_KEY          =  $000a1084;
 | 
						|
   DBLPALLORESLACE_KEY           =  $000a1005;
 | 
						|
   DBLPALLORESHAMLACE_KEY        =  $000a1805;
 | 
						|
   DBLPALLORESEHBLACE_KEY        =  $000a1085;
 | 
						|
   DBLPALLORESDPF_KEY            =  $000a1400;
 | 
						|
   DBLPALLORESDPFFF_KEY          =  $000a1404;
 | 
						|
   DBLPALLORESDPFLACE_KEY        =  $000a1405;
 | 
						|
   DBLPALLORESDPF2_KEY           =  $000a1440;
 | 
						|
   DBLPALLORESDPF2FF_KEY         =  $000a1444;
 | 
						|
   DBLPALLORESDPF2LACE_KEY       =  $000a1445;
 | 
						|
   DBLPALHIRES_KEY               =  $000a9000;
 | 
						|
   DBLPALHIRESFF_KEY             =  $000a9004;
 | 
						|
   DBLPALHIRESHAM_KEY            =  $000a9800;
 | 
						|
   DBLPALHIRESHAMFF_KEY          =  $000a9804;
 | 
						|
   DBLPALHIRESLACE_KEY           =  $000a9005;
 | 
						|
   DBLPALHIRESHAMLACE_KEY        =  $000a9805;
 | 
						|
   DBLPALHIRESEHB_KEY            =  $000a9080;
 | 
						|
   DBLPALHIRESEHBFF_KEY          =  $000a9084;
 | 
						|
   DBLPALHIRESEHBLACE_KEY        =  $000a9085;
 | 
						|
   DBLPALHIRESDPF_KEY            =  $000a9400;
 | 
						|
   DBLPALHIRESDPFFF_KEY          =  $000a9404;
 | 
						|
   DBLPALHIRESDPFLACE_KEY        =  $000a9405;
 | 
						|
   DBLPALHIRESDPF2_KEY           =  $000a9440;
 | 
						|
   DBLPALHIRESDPF2FF_KEY         =  $000a9444;
 | 
						|
   DBLPALHIRESDPF2LACE_KEY       =  $000a9445;
 | 
						|
   DBLPALEXTRALORES_KEY          =  $000a1200;
 | 
						|
   DBLPALEXTRALORESHAM_KEY       =  $000a1a00;
 | 
						|
   DBLPALEXTRALORESEHB_KEY       =  $000a1280;
 | 
						|
   DBLPALEXTRALORESDPF_KEY       =  $000a1600;
 | 
						|
   DBLPALEXTRALORESDPF2_KEY      =  $000a1640;
 | 
						|
   DBLPALEXTRALORESFF_KEY        =  $000a1204;
 | 
						|
   DBLPALEXTRALORESHAMFF_KEY     =  $000a1a04;
 | 
						|
   DBLPALEXTRALORESEHBFF_KEY     =  $000a1284;
 | 
						|
   DBLPALEXTRALORESDPFFF_KEY     =  $000a1604;
 | 
						|
   DBLPALEXTRALORESDPF2FF_KEY    =  $000a1644;
 | 
						|
   DBLPALEXTRALORESLACE_KEY      =  $000a1205;
 | 
						|
   DBLPALEXTRALORESHAMLACE_KEY   =  $000a1a05;
 | 
						|
   DBLPALEXTRALORESEHBLACE_KEY   =  $000a1285;
 | 
						|
   DBLPALEXTRALORESDPFLACE_KEY   =  $000a1605;
 | 
						|
   DBLPALEXTRALORESDPF2LACE_KEY  =  $000a1645;
 | 
						|
 | 
						|
 | 
						|
{ Use these tags for passing to BestModeID() (V39) }
 | 
						|
 | 
						|
   SPECIAL_FLAGS = $100E;
 | 
						|
   { Original:
 | 
						|
     SPECIAL_FLAGS = DIPF_IS_DUALPF OR DIPF_IS_PF2PRI OR DIPF_IS_HAM OR DIPF_IS_EXTRAHALFBRITE;
 | 
						|
     ( Mu?te aufgrund eines Fehler in PCQ ge?ndert werden )
 | 
						|
   }
 | 
						|
 | 
						|
 | 
						|
   BIDTAG_DIPFMustHave     = $80000001;      { mask of the DIPF_ flags the ModeID must have }
 | 
						|
                                { Default - NULL }
 | 
						|
   BIDTAG_DIPFMustNotHave  = $80000002;      { mask of the DIPF_ flags the ModeID must not have }
 | 
						|
                                { Default - SPECIAL_FLAGS }
 | 
						|
   BIDTAG_ViewPort         = $80000003;      { ViewPort for which a ModeID is sought. }
 | 
						|
                                { Default - NULL }
 | 
						|
   BIDTAG_NominalWidth     = $80000004;      { \ together make the aspect ratio and }
 | 
						|
   BIDTAG_NominalHeight    = $80000005;      { / override the vp->Width/Height. }
 | 
						|
                                { Default - SourceID NominalDimensionInfo,
 | 
						|
                                 * or vp->DWidth/Height, or (640 * 200),
 | 
						|
                                 * in that preferred order.
 | 
						|
                                 }
 | 
						|
   BIDTAG_DesiredWidth     = $80000006;      { \ Nominal Width and Height of the }
 | 
						|
   BIDTAG_DesiredHeight    = $80000007;      { / returned ModeID. }
 | 
						|
                                { Default - same as Nominal }
 | 
						|
   BIDTAG_Depth            = $80000008;      { ModeID must support this depth. }
 | 
						|
                                { Default - vp->RasInfo->BitMap->Depth or 1 }
 | 
						|
   BIDTAG_MonitorID        = $80000009;      { ModeID must use this monitor. }
 | 
						|
                                { Default - use best monitor available }
 | 
						|
   BIDTAG_SourceID         = $8000000a;      { instead of a ViewPort. }
 | 
						|
                                { Default - VPModeID(vp) if BIDTAG_ViewPort is
 | 
						|
                                 * specified, else leave the DIPFMustHave and
 | 
						|
                                 * DIPFMustNotHave values untouched.
 | 
						|
                                 }
 | 
						|
   BIDTAG_RedBits        =  $8000000b;      { \                            }
 | 
						|
   BIDTAG_BlueBits       =  $8000000c;      {  > Match up from the database }
 | 
						|
   BIDTAG_GreenBits      =  $8000000d;      { /                            }
 | 
						|
                                            { Default - 4 }
 | 
						|
   BIDTAG_GfxPrivate     =  $8000000e;      { Private }
 | 
						|
 | 
						|
 | 
						|
const
 | 
						|
 | 
						|
{ bplcon0 defines }
 | 
						|
 | 
						|
    MODE_640    = $8000;
 | 
						|
    PLNCNTMSK   = $7;           { how many bit planes? }
 | 
						|
                                { 0 = none, 1->6 = 1->6, 7 = reserved }
 | 
						|
    PLNCNTSHFT  = 12;           { bits to shift for bplcon0 }
 | 
						|
    PF2PRI      = $40;          { bplcon2 bit }
 | 
						|
    COLORON     = $0200;        { disable color burst }
 | 
						|
    DBLPF       = $400;
 | 
						|
    HOLDNMODIFY = $800;
 | 
						|
    INTERLACE   = 4;            { interlace mode for 400 }
 | 
						|
 | 
						|
{ bplcon1 defines }
 | 
						|
 | 
						|
    PFA_FINE_SCROLL             = $F;
 | 
						|
    PFB_FINE_SCROLL_SHIFT       = 4;
 | 
						|
    PF_FINE_SCROLL_MASK         = $F;
 | 
						|
 | 
						|
{ display window start and stop defines }
 | 
						|
 | 
						|
    DIW_HORIZ_POS       = $7F;  { horizontal start/stop }
 | 
						|
    DIW_VRTCL_POS       = $1FF; { vertical start/stop }
 | 
						|
    DIW_VRTCL_POS_SHIFT = $7;
 | 
						|
 | 
						|
{ Data fetch start/stop horizontal position }
 | 
						|
 | 
						|
    DFTCH_MASK  = $FF;
 | 
						|
 | 
						|
{ vposr bits }
 | 
						|
 | 
						|
    VPOSRLOF    = $8000;
 | 
						|
 | 
						|
  {   include define file for displayinfo database }
 | 
						|
 | 
						|
{ the "public" handle to a DisplayInfoRecord }
 | 
						|
Type
 | 
						|
 | 
						|
 DisplayInfoHandle = Pointer;
 | 
						|
 | 
						|
{ datachunk type identifiers }
 | 
						|
 | 
						|
CONST
 | 
						|
 DTAG_DISP            =   $80000000;
 | 
						|
 DTAG_DIMS            =   $80001000;
 | 
						|
 DTAG_MNTR            =   $80002000;
 | 
						|
 DTAG_NAME            =   $80003000;
 | 
						|
 DTAG_VEC             =   $80004000;      { internal use only }
 | 
						|
 | 
						|
Type
 | 
						|
 | 
						|
  pQueryHeader = ^tQueryHeader;
 | 
						|
  tQueryHeader = record
 | 
						|
   tructID,                    { datachunk type identifier }
 | 
						|
   DisplayID,                  { copy of display record key   }
 | 
						|
   SkipID,                     { TAG_SKIP -- see tagitems.h }
 | 
						|
   Length  :  Cardinal;         { length of local data in double-longwords }
 | 
						|
  END;
 | 
						|
 | 
						|
  pDisplayInfo = ^tDisplayInfo;
 | 
						|
  tDisplayInfo = record
 | 
						|
   Header : tQueryHeader;
 | 
						|
   NotAvailable : Word;    { IF NULL available, else see defines }
 | 
						|
   PropertyFlags : Cardinal;  { Properties of this mode see defines }
 | 
						|
   Resolution : tPoint;     { ticks-per-pixel X/Y                 }
 | 
						|
   PixelSpeed : Word;     { aproximation in nanoseconds         }
 | 
						|
   NumStdSprites : Word;  { number of standard amiga sprites    }
 | 
						|
   PaletteRange : Word;   { distinguishable shades available    }
 | 
						|
   SpriteResolution : tPoint; { std sprite ticks-per-pixel X/Y    }
 | 
						|
   pad : Array[0..3] of Byte;
 | 
						|
   RedBits     : Byte;
 | 
						|
   GreenBits   : Byte;
 | 
						|
   BlueBits    : Byte;
 | 
						|
   pad2        : array [0..4] of Byte;
 | 
						|
   reserved : Array[0..1] of Cardinal;    { terminator }
 | 
						|
  END;
 | 
						|
 | 
						|
{ availability }
 | 
						|
 | 
						|
CONST
 | 
						|
 DI_AVAIL_NOCHIPS        =$0001;
 | 
						|
 DI_AVAIL_NOMONITOR      =$0002;
 | 
						|
 DI_AVAIL_NOTWITHGENLOCK =$0004;
 | 
						|
 | 
						|
{ mode properties }
 | 
						|
 | 
						|
 DIPF_IS_LACE          =  $00000001;
 | 
						|
 DIPF_IS_DUALPF        =  $00000002;
 | 
						|
 DIPF_IS_PF2PRI        =  $00000004;
 | 
						|
 DIPF_IS_HAM           =  $00000008;
 | 
						|
 | 
						|
 DIPF_IS_ECS           =  $00000010;      {      note: ECS modes (SHIRES, VGA, AND **
 | 
						|
                                                 PRODUCTIVITY) do not support      **
 | 
						|
                                                 attached sprites.                 **
 | 
						|
                                                                                        }
 | 
						|
 DIPF_IS_AA            =  $00010000;      { AA modes - may only be available
 | 
						|
                                                ** if machine has correct memory
 | 
						|
                                                ** type to support required
 | 
						|
                                                ** bandwidth - check availability.
 | 
						|
                                                ** (V39)
 | 
						|
                                                }
 | 
						|
 DIPF_IS_PAL           =  $00000020;
 | 
						|
 DIPF_IS_SPRITES       =  $00000040;
 | 
						|
 DIPF_IS_GENLOCK       =  $00000080;
 | 
						|
 | 
						|
 DIPF_IS_WB            =  $00000100;
 | 
						|
 DIPF_IS_DRAGGABLE     =  $00000200;
 | 
						|
 DIPF_IS_PANELLED      =  $00000400;
 | 
						|
 DIPF_IS_BEAMSYNC      =  $00000800;
 | 
						|
 | 
						|
 DIPF_IS_EXTRAHALFBRITE = $00001000;
 | 
						|
 | 
						|
{ The following DIPF_IS_... flags are new for V39 }
 | 
						|
  DIPF_IS_SPRITES_ATT           =  $00002000;      { supports attached sprites }
 | 
						|
  DIPF_IS_SPRITES_CHNG_RES      =  $00004000;      { supports variable sprite resolution }
 | 
						|
  DIPF_IS_SPRITES_BORDER        =  $00008000;      { sprite can be displayed in the border }
 | 
						|
  DIPF_IS_SCANDBL               =  $00020000;      { scan doubled }
 | 
						|
  DIPF_IS_SPRITES_CHNG_BASE     =  $00040000;
 | 
						|
                                                   { can change the sprite base colour }
 | 
						|
  DIPF_IS_SPRITES_CHNG_PRI      =  $00080000;
 | 
						|
                                                                                        { can change the sprite priority
 | 
						|
                                                                                        ** with respect to the playfield(s).
 | 
						|
                                                                                        }
 | 
						|
  DIPF_IS_DBUFFER       =  $00100000;      { can support double buffering }
 | 
						|
  DIPF_IS_PROGBEAM      =  $00200000;      { is a programmed beam-sync mode }
 | 
						|
  DIPF_IS_FOREIGN       =  $80000000;      { this mode is not native to the Amiga }
 | 
						|
 | 
						|
Type
 | 
						|
 pDimensionInfo =^tDimensionInfo;
 | 
						|
 tDimensionInfo = record
 | 
						|
  Header : tQueryHeader;
 | 
						|
  MaxDepth,             { log2( max number of colors ) }
 | 
						|
  MinRasterWidth,       { minimum width in pixels      }
 | 
						|
  MinRasterHeight,      { minimum height in pixels     }
 | 
						|
  MaxRasterWidth,       { maximum width in pixels      }
 | 
						|
  MaxRasterHeight : Word;      { maximum height in pixels     }
 | 
						|
  Nominal,              { "standard" dimensions        }
 | 
						|
  MaxOScan,             { fixed, hardware dependant    }
 | 
						|
  VideoOScan,           { fixed, hardware dependant    }
 | 
						|
  TxtOScan,             { editable via preferences     }
 | 
						|
  StdOScan  : tRectangle; { editable via preferences     }
 | 
						|
  pad  : Array[0..13] of Byte;
 | 
						|
  reserved : Array[0..1] of Longint;          { terminator }
 | 
						|
 END;
 | 
						|
 | 
						|
 pMonitorInfo = ^tMonitorInfo;
 | 
						|
 tMonitorInfo = record
 | 
						|
  Header : tQueryHeader;
 | 
						|
  Mspc   : pMonitorSpec;         { pointer to monitor specification  }
 | 
						|
  ViewPosition,                    { editable via preferences          }
 | 
						|
  ViewResolution : tPoint;          { standard monitor ticks-per-pixel  }
 | 
						|
  ViewPositionRange : tRectangle;   { fixed, hardware dependant }
 | 
						|
  TotalRows,                       { display height in scanlines       }
 | 
						|
  TotalColorClocks,                { scanline width in 280 ns units    }
 | 
						|
  MinRow        : Word;            { absolute minimum active scanline  }
 | 
						|
  Compatibility : smallint;           { how this coexists with others     }
 | 
						|
  pad : Array[0..31] of Byte;
 | 
						|
  MouseTicks    : tPoint;
 | 
						|
  DefaultViewPosition : tPoint;
 | 
						|
  PreferredModeID : Cardinal;
 | 
						|
  reserved : Array[0..1] of Cardinal;          { terminator }
 | 
						|
 END;
 | 
						|
 | 
						|
{ monitor compatibility }
 | 
						|
 | 
						|
CONST
 | 
						|
 MCOMPAT_MIXED =  0;       { can share display with other MCOMPAT_MIXED }
 | 
						|
 MCOMPAT_SELF  =  1;       { can share only within same monitor }
 | 
						|
 MCOMPAT_NOBODY= -1;       { only one viewport at a time }
 | 
						|
 | 
						|
 DISPLAYNAMELEN = 32;
 | 
						|
 | 
						|
Type
 | 
						|
 pNameInfo = ^tNameInfo;
 | 
						|
 tNameInfo = record
 | 
						|
  Header : tQueryHeader;
 | 
						|
  Name   : Array[0..DISPLAYNAMELEN-1] of Char;
 | 
						|
  reserved : Array[0..1] of Cardinal;          { terminator }
 | 
						|
 END;
 | 
						|
 | 
						|
 | 
						|
{****************************************************************************}
 | 
						|
 | 
						|
{ The following VecInfo structure is PRIVATE, for our use only
 | 
						|
 * Touch these, and burn! (V39)
 | 
						|
 }
 | 
						|
Type
 | 
						|
 pVecInfo = ^tVecInfo;
 | 
						|
 tVecInfo = record
 | 
						|
        Header  : tQueryHeader;
 | 
						|
        Vec     : Pointer;
 | 
						|
        Data    : Pointer;
 | 
						|
        vi_Type : WORD;               { Type in C Includes }
 | 
						|
        pad     : Array[0..2] of WORD;
 | 
						|
        reserved : Array[0..1] of Cardinal;
 | 
						|
 end;
 | 
						|
 | 
						|
 | 
						|
CONST
 | 
						|
 VTAG_END_CM            = $00000000;
 | 
						|
 VTAG_CHROMAKEY_CLR     = $80000000;
 | 
						|
 VTAG_CHROMAKEY_SET     = $80000001;
 | 
						|
 VTAG_BITPLANEKEY_CLR   = $80000002;
 | 
						|
 VTAG_BITPLANEKEY_SET   = $80000003;
 | 
						|
 VTAG_BORDERBLANK_CLR   = $80000004;
 | 
						|
 VTAG_BORDERBLANK_SET   = $80000005;
 | 
						|
 VTAG_BORDERNOTRANS_CLR = $80000006;
 | 
						|
 VTAG_BORDERNOTRANS_SET = $80000007;
 | 
						|
 VTAG_CHROMA_PEN_CLR    = $80000008;
 | 
						|
 VTAG_CHROMA_PEN_SET    = $80000009;
 | 
						|
 VTAG_CHROMA_PLANE_SET  = $8000000A;
 | 
						|
 VTAG_ATTACH_CM_SET     = $8000000B;
 | 
						|
 VTAG_NEXTBUF_CM        = $8000000C;
 | 
						|
 VTAG_BATCH_CM_CLR      = $8000000D;
 | 
						|
 VTAG_BATCH_CM_SET      = $8000000E;
 | 
						|
 VTAG_NORMAL_DISP_GET   = $8000000F;
 | 
						|
 VTAG_NORMAL_DISP_SET   = $80000010;
 | 
						|
 VTAG_COERCE_DISP_GET   = $80000011;
 | 
						|
 VTAG_COERCE_DISP_SET   = $80000012;
 | 
						|
 VTAG_VIEWPORTEXTRA_GET = $80000013;
 | 
						|
 VTAG_VIEWPORTEXTRA_SET = $80000014;
 | 
						|
 VTAG_CHROMAKEY_GET     = $80000015;
 | 
						|
 VTAG_BITPLANEKEY_GET   = $80000016;
 | 
						|
 VTAG_BORDERBLANK_GET   = $80000017;
 | 
						|
 VTAG_BORDERNOTRANS_GET = $80000018;
 | 
						|
 VTAG_CHROMA_PEN_GET    = $80000019;
 | 
						|
 VTAG_CHROMA_PLANE_GET  = $8000001A;
 | 
						|
 VTAG_ATTACH_CM_GET     = $8000001B;
 | 
						|
 VTAG_BATCH_CM_GET      = $8000001C;
 | 
						|
 VTAG_BATCH_ITEMS_GET   = $8000001D;
 | 
						|
 VTAG_BATCH_ITEMS_SET   = $8000001E;
 | 
						|
 VTAG_BATCH_ITEMS_ADD   = $8000001F;
 | 
						|
 VTAG_VPMODEID_GET      = $80000020;
 | 
						|
 VTAG_VPMODEID_SET      = $80000021;
 | 
						|
 VTAG_VPMODEID_CLR      = $80000022;
 | 
						|
 VTAG_USERCLIP_GET      = $80000023;
 | 
						|
 VTAG_USERCLIP_SET      = $80000024;
 | 
						|
 VTAG_USERCLIP_CLR      = $80000025;
 | 
						|
{ The following tags are V39 specific. They will be ignored (returing error -3) by
 | 
						|
        earlier versions }
 | 
						|
 VTAG_PF1_BASE_GET             =  $80000026;
 | 
						|
 VTAG_PF2_BASE_GET             =  $80000027;
 | 
						|
 VTAG_SPEVEN_BASE_GET          =  $80000028;
 | 
						|
 VTAG_SPODD_BASE_GET           =  $80000029;
 | 
						|
 VTAG_PF1_BASE_SET             =  $8000002a;
 | 
						|
 VTAG_PF2_BASE_SET             =  $8000002b;
 | 
						|
 VTAG_SPEVEN_BASE_SET          =  $8000002c;
 | 
						|
 VTAG_SPODD_BASE_SET           =  $8000002d;
 | 
						|
 VTAG_BORDERSPRITE_GET         =  $8000002e;
 | 
						|
 VTAG_BORDERSPRITE_SET         =  $8000002f;
 | 
						|
 VTAG_BORDERSPRITE_CLR         =  $80000030;
 | 
						|
 VTAG_SPRITERESN_SET           =  $80000031;
 | 
						|
 VTAG_SPRITERESN_GET           =  $80000032;
 | 
						|
 VTAG_PF1_TO_SPRITEPRI_SET     =  $80000033;
 | 
						|
 VTAG_PF1_TO_SPRITEPRI_GET     =  $80000034;
 | 
						|
 VTAG_PF2_TO_SPRITEPRI_SET     =  $80000035;
 | 
						|
 VTAG_PF2_TO_SPRITEPRI_GET     =  $80000036;
 | 
						|
 VTAG_IMMEDIATE                =  $80000037;
 | 
						|
 VTAG_FULLPALETTE_SET          =  $80000038;
 | 
						|
 VTAG_FULLPALETTE_GET          =  $80000039;
 | 
						|
 VTAG_FULLPALETTE_CLR          =  $8000003A;
 | 
						|
 VTAG_DEFSPRITERESN_SET        =  $8000003B;
 | 
						|
 VTAG_DEFSPRITERESN_GET        =  $8000003C;
 | 
						|
 | 
						|
{ all the following tags follow the new, rational standard for videocontrol tags:
 | 
						|
 * VC_xxx,state         set the state of attribute 'xxx' to value 'state'
 | 
						|
 * VC_xxx_QUERY,&var    get the state of attribute 'xxx' and store it into the longword
 | 
						|
 *                      pointed to by &var.
 | 
						|
 *
 | 
						|
 * The following are new for V40:
 | 
						|
 }
 | 
						|
 | 
						|
 VC_IntermediateCLUpdate       =  $80000080;
 | 
						|
        { default=true. When set graphics will update the intermediate copper
 | 
						|
         * lists on color changes, etc. When false, it won't, and will be faster.
 | 
						|
         }
 | 
						|
 VC_IntermediateCLUpdate_Query =  $80000081;
 | 
						|
 | 
						|
 VC_NoColorPaletteLoad         =  $80000082;
 | 
						|
        { default = false. When set, graphics will only load color 0
 | 
						|
         * for this ViewPort, and so the ViewPort's colors will come
 | 
						|
         * from the previous ViewPort's.
 | 
						|
         *
 | 
						|
         * NB - Using this tag and VTAG_FULLPALETTE_SET together is undefined.
 | 
						|
         }
 | 
						|
 VC_NoColorPaletteLoad_Query   =  $80000083;
 | 
						|
 | 
						|
 VC_DUALPF_Disable             =  $80000084;
 | 
						|
        { default = false. When this flag is set, the dual-pf bit
 | 
						|
           in Dual-Playfield screens will be turned off. Even bitplanes
 | 
						|
           will still come from the first BitMap and odd bitplanes
 | 
						|
           from the second BitMap, and both R[xy]Offsets will be
 | 
						|
           considered. This can be used (with appropriate palette
 | 
						|
           selection) for cross-fades between differently scrolling
 | 
						|
           images.
 | 
						|
           When this flag is turned on, colors will be loaded for
 | 
						|
           the viewport as if it were a single viewport of depth
 | 
						|
           depth1+depth2 }
 | 
						|
 VC_DUALPF_Disable_Query       =  $80000085;
 | 
						|
 | 
						|
 | 
						|
const
 | 
						|
 | 
						|
    SPRITE_ATTACHED     = $80;
 | 
						|
 | 
						|
type
 | 
						|
 | 
						|
    pSimpleSprite = ^tSimpleSprite;
 | 
						|
    tSimpleSprite = record
 | 
						|
        posctldata      : Pointer;
 | 
						|
        height          : Word;
 | 
						|
        x,y             : Word;        { current position }
 | 
						|
        num             : Word;
 | 
						|
    end;
 | 
						|
 | 
						|
    pExtSprite = ^tExtSprite;
 | 
						|
    tExtSprite = record
 | 
						|
        es_SimpleSprite : tSimpleSprite;         { conventional simple sprite structure }
 | 
						|
        es_wordwidth    : WORD;                 { graphics use only, subject to change }
 | 
						|
        es_flags        : WORD;                 { graphics use only, subject to change }
 | 
						|
    end;
 | 
						|
 | 
						|
const
 | 
						|
{ tags for AllocSpriteData() }
 | 
						|
 SPRITEA_Width          = $81000000;
 | 
						|
 SPRITEA_XReplication   = $81000002;
 | 
						|
 SPRITEA_YReplication   = $81000004;
 | 
						|
 SPRITEA_OutputHeight   = $81000006;
 | 
						|
 SPRITEA_Attached       = $81000008;
 | 
						|
 SPRITEA_OldDataFormat  = $8100000a;      { MUST pass in outputheight if using this tag }
 | 
						|
 | 
						|
{ tags for GetExtSprite() }
 | 
						|
 GSTAG_SPRITE_NUM = $82000020;
 | 
						|
 GSTAG_ATTACHED   = $82000022;
 | 
						|
 GSTAG_SOFTSPRITE = $82000024;
 | 
						|
 | 
						|
{ tags valid for either GetExtSprite or ChangeExtSprite }
 | 
						|
 GSTAG_SCANDOUBLED     =  $83000000;      { request "NTSC-Like" height if possible. }
 | 
						|
 | 
						|
 | 
						|
Type
 | 
						|
    pBitScaleArgs = ^tBitScaleArgs;
 | 
						|
    tBitScaleArgs = record
 | 
						|
    bsa_SrcX, bsa_SrcY,                 { source origin }
 | 
						|
    bsa_SrcWidth, bsa_SrcHeight,        { source size }
 | 
						|
    bsa_XSrcFactor, bsa_YSrcFactor,     { scale factor denominators }
 | 
						|
    bsa_DestX, bsa_DestY,               { destination origin }
 | 
						|
    bsa_DestWidth, bsa_DestHeight,      { destination size result }
 | 
						|
    bsa_XDestFactor, bsa_YDestFactor : Word;   { scale factor numerators }
 | 
						|
    bsa_SrcBitMap,                           { source BitMap }
 | 
						|
    bsa_DestBitMap : pBitMap;              { destination BitMap }
 | 
						|
    bsa_Flags   : Cardinal;              { reserved.  Must be zero! }
 | 
						|
    bsa_XDDA, bsa_YDDA : Word;         { reserved }
 | 
						|
    bsa_Reserved1,
 | 
						|
    bsa_Reserved2 : Longint;
 | 
						|
   END;
 | 
						|
 | 
						|
  {    tag definitions for GetRPAttr, SetRPAttr     }
 | 
						|
 | 
						|
const
 | 
						|
 RPTAG_Font            =  $80000000;      { get/set font }
 | 
						|
 RPTAG_APen            =  $80000002;      { get/set apen }
 | 
						|
 RPTAG_BPen            =  $80000003;      { get/set bpen }
 | 
						|
 RPTAG_DrMd            =  $80000004;      { get/set draw mode }
 | 
						|
 RPTAG_OutlinePen      =  $80000005;      { get/set outline pen. corrected case. }
 | 
						|
 RPTAG_WriteMask       =  $80000006;      { get/set WriteMask }
 | 
						|
 RPTAG_MaxPen          =  $80000007;      { get/set maxpen }
 | 
						|
 | 
						|
 RPTAG_DrawBounds      =  $80000008;      { get only rastport draw bounds. pass &rect }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
TYPE
 | 
						|
 | 
						|
 pRegionRectangle = ^tRegionRectangle;
 | 
						|
 tRegionRectangle = record
 | 
						|
    Next, Prev  : pRegionRectangle;
 | 
						|
    bounds      : tRectangle;
 | 
						|
 END;
 | 
						|
 | 
						|
 pRegion = ^tRegion;
 | 
						|
 tRegion = record
 | 
						|
    bounds      : tRectangle;
 | 
						|
    RegionRectangle  : pRegionRectangle;
 | 
						|
 END;
 | 
						|
 | 
						|
type
 | 
						|
 | 
						|
    pGfxBase = ^tGfxBase;
 | 
						|
    tGfxBase = record
 | 
						|
        LibNode         : tLibrary;
 | 
						|
        ActiView        : pView;      { ViewPtr }
 | 
						|
        copinit         : pcopinit; { (copinitptr) ptr to copper start up list }
 | 
						|
        cia             : Pointer;      { for 8520 resource use }
 | 
						|
        blitter         : Pointer;      { for future blitter resource use }
 | 
						|
        LOFlist         : Pointer;
 | 
						|
        SHFlist         : Pointer;
 | 
						|
        blthd,
 | 
						|
        blttl           : pbltnode;
 | 
						|
        bsblthd,
 | 
						|
        bsblttl         : pbltnode;      { Previous four are (bltnodeptr) }
 | 
						|
        vbsrv,
 | 
						|
        timsrv,
 | 
						|
        bltsrv          : tInterrupt;
 | 
						|
        TextFonts       : tList;
 | 
						|
        DefaultFont     : pTextFont;      { TextFontPtr }
 | 
						|
        Modes           : Word;        { copy of current first bplcon0 }
 | 
						|
        VBlank          : Shortint;
 | 
						|
        Debug           : Shortint;
 | 
						|
        BeamSync        : smallint;
 | 
						|
        system_bplcon0  : smallint; { it is ored into each bplcon0 for display }
 | 
						|
        SpriteReserved  : Byte;
 | 
						|
        bytereserved    : Byte;
 | 
						|
        Flags           : Word;
 | 
						|
        BlitLock        : smallint;
 | 
						|
        BlitNest        : smallint;
 | 
						|
 | 
						|
        BlitWaitQ       : tList;
 | 
						|
        BlitOwner       : pTask;      { TaskPtr }
 | 
						|
        TOF_WaitQ       : tList;
 | 
						|
        DisplayFlags    : Word;        { NTSC PAL GENLOC etc}
 | 
						|
 | 
						|
                { Display flags are determined at power on }
 | 
						|
 | 
						|
        SimpleSprites   : Pointer;      { SimpleSpritePtr ptr }
 | 
						|
        MaxDisplayRow   : Word;        { hardware stuff, do not use }
 | 
						|
        MaxDisplayColumn : Word;       { hardware stuff, do not use }
 | 
						|
        NormalDisplayRows : Word;
 | 
						|
        NormalDisplayColumns : Word;
 | 
						|
 | 
						|
        { the following are for standard non interlace, 1/2 wb width }
 | 
						|
 | 
						|
        NormalDPMX      : Word;        { Dots per meter on display }
 | 
						|
        NormalDPMY      : Word;        { Dots per meter on display }
 | 
						|
        LastChanceMemory : pSignalSemaphore;     { SignalSemaphorePtr }
 | 
						|
        LCMptr          : Pointer;
 | 
						|
        MicrosPerLine   : Word;        { 256 time usec/line }
 | 
						|
        MinDisplayColumn : Word;
 | 
						|
        ChipRevBits0    : Byte;
 | 
						|
        MemType         : Byte;
 | 
						|
        crb_reserved  :  Array[0..3] of Byte;
 | 
						|
        monitor_id  : Word;             { normally null }
 | 
						|
        hedley  : Array[0..7] of Cardinal;
 | 
						|
        hedley_sprites  : Array[0..7] of Cardinal;     { sprite ptrs for intuition mouse }
 | 
						|
        hedley_sprites1 : Array[0..7] of Cardinal;            { sprite ptrs for intuition mouse }
 | 
						|
        hedley_count    : smallint;
 | 
						|
        hedley_flags    : Word;
 | 
						|
        hedley_tmp      : smallint;
 | 
						|
        hash_table      : Pointer;
 | 
						|
        current_tot_rows : Word;
 | 
						|
        current_tot_cclks : Word;
 | 
						|
        hedley_hint     : Byte;
 | 
						|
        hedley_hint2    : Byte;
 | 
						|
        nreserved       : Array[0..3] of Cardinal;
 | 
						|
        a2024_sync_raster : Pointer;
 | 
						|
        control_delta_pal : Word;
 | 
						|
        control_delta_ntsc : Word;
 | 
						|
        current_monitor : pMonitorSpec;
 | 
						|
        MonitorList     : tList;
 | 
						|
        default_monitor : pMonitorSpec;
 | 
						|
        MonitorListSemaphore : pSignalSemaphore;
 | 
						|
        DisplayInfoDataBase : Pointer;
 | 
						|
        TopLine      : Word;
 | 
						|
        ActiViewCprSemaphore : pSignalSemaphore;
 | 
						|
        UtilityBase  : Pointer;           { for hook AND tag utilities   }
 | 
						|
        ExecBase     : Pointer;              { to link with rom.lib }
 | 
						|
        bwshifts     : Pointer;
 | 
						|
        StrtFetchMasks,
 | 
						|
        StopFetchMasks,
 | 
						|
        Overrun,
 | 
						|
        RealStops    : Pointer;
 | 
						|
        SpriteWidth,                    { current width (in words) of sprites }
 | 
						|
        SpriteFMode  : WORD;            { current sprite fmode bits    }
 | 
						|
        SoftSprites,                    { bit mask of size change knowledgeable sprites }
 | 
						|
        arraywidth   : Shortint;
 | 
						|
        DefaultSpriteWidth : WORD;      { what width intuition wants }
 | 
						|
        SprMoveDisable : Shortint;
 | 
						|
        WantChips,
 | 
						|
        BoardMemType,
 | 
						|
        Bugs         : Byte;
 | 
						|
        gb_LayersBase : Pointer;
 | 
						|
        ColorMask    : Cardinal;
 | 
						|
        IVector,
 | 
						|
        IData        : Pointer;
 | 
						|
        SpecialCounter : Cardinal;         { special for double buffering }
 | 
						|
        DBList       : Pointer;
 | 
						|
        MonitorFlags : WORD;
 | 
						|
        ScanDoubledSprites,
 | 
						|
        BP3Bits      : Byte;
 | 
						|
        MonitorVBlank  : tAnalogSignalInterval;
 | 
						|
        natural_monitor  : pMonitorSpec;
 | 
						|
        ProgData     : Pointer;
 | 
						|
        ExtSprites   : Byte;
 | 
						|
        pad3         : Byte;
 | 
						|
        GfxFlags     : WORD;
 | 
						|
        VBCounter    : Cardinal;
 | 
						|
        HashTableSemaphore  : pSignalSemaphore;
 | 
						|
        HWEmul       : Array[0..8] of Pointer;
 | 
						|
    end;
 | 
						|
 | 
						|
const
 | 
						|
 | 
						|
    NTSC        = 1;
 | 
						|
    GENLOC      = 2;
 | 
						|
    PAL         = 4;
 | 
						|
    TODA_SAFE   = 8;
 | 
						|
 | 
						|
    BLITMSG_FAULT = 4;
 | 
						|
 | 
						|
{ bits defs for ChipRevBits }
 | 
						|
   GFXB_BIG_BLITS = 0 ;
 | 
						|
   GFXB_HR_AGNUS  = 0 ;
 | 
						|
   GFXB_HR_DENISE = 1 ;
 | 
						|
   GFXB_AA_ALICE  = 2 ;
 | 
						|
   GFXB_AA_LISA   = 3 ;
 | 
						|
   GFXB_AA_MLISA  = 4 ;      { internal use only. }
 | 
						|
 | 
						|
   GFXF_BIG_BLITS = 1 ;
 | 
						|
   GFXF_HR_AGNUS  = 1 ;
 | 
						|
   GFXF_HR_DENISE = 2 ;
 | 
						|
   GFXF_AA_ALICE  = 4 ;
 | 
						|
   GFXF_AA_LISA   = 8 ;
 | 
						|
   GFXF_AA_MLISA  = 16;      { internal use only }
 | 
						|
 | 
						|
{ Pass ONE of these to SetChipRev() }
 | 
						|
   SETCHIPREV_A   = GFXF_HR_AGNUS;
 | 
						|
   SETCHIPREV_ECS = (GFXF_HR_AGNUS OR GFXF_HR_DENISE);
 | 
						|
   SETCHIPREV_AA  = (GFXF_AA_ALICE OR GFXF_AA_LISA OR SETCHIPREV_ECS);
 | 
						|
   SETCHIPREV_BEST= $ffffffff;
 | 
						|
 | 
						|
{ memory type }
 | 
						|
   BUS_16         = 0;
 | 
						|
   NML_CAS        = 0;
 | 
						|
   BUS_32         = 1;
 | 
						|
   DBL_CAS        = 2;
 | 
						|
   BANDWIDTH_1X   = (BUS_16 OR NML_CAS);
 | 
						|
   BANDWIDTH_2XNML= BUS_32;
 | 
						|
   BANDWIDTH_2XDBL= DBL_CAS;
 | 
						|
   BANDWIDTH_4X   = (BUS_32 OR DBL_CAS);
 | 
						|
 | 
						|
{ GfxFlags (private) }
 | 
						|
   NEW_DATABASE   = 1;
 | 
						|
 | 
						|
   GRAPHICSNAME   : PChar  = 'graphics.library';
 | 
						|
 | 
						|
 | 
						|
var
 | 
						|
  GfxBase : Pointer;
 | 
						|
 | 
						|
 | 
						|
function BltBitMap(srcBitMap : pBitMap location 'a0'; xSrc : LongInt location 'd0'; ySrc : LongInt location 'd1'; destBitMap : pBitMap location 'a1'; xDest : LongInt location 'd2'; yDest : LongInt location 'd3'; xSize : LongInt location 'd4'; ySize : LongInt location 'd5'; minterm : CARDINAL location 'd6'; mask : CARDINAL location 'd7'; tempA : pCHAR location 'a2') : LongInt;
 | 
						|
SysCall GfxBase 030;
 | 
						|
 | 
						|
procedure BltTemplate(source : pCHAR location 'a0'; xSrc : LongInt location 'd0'; srcMod : LongInt location 'd1'; destRP : pRastPort location 'a1'; xDest : LongInt location 'd2'; yDest : LongInt location 'd3'; xSize : LongInt location 'd4'; ySize : LongInt location 'd5');
 | 
						|
SysCall GfxBase 036;
 | 
						|
 | 
						|
procedure ClearEOL(rp : pRastPort location 'a1');
 | 
						|
SysCall GfxBase 042;
 | 
						|
 | 
						|
procedure ClearScreen(rp : pRastPort location 'a1');
 | 
						|
SysCall GfxBase 048;
 | 
						|
 | 
						|
function TextLength(rp : pRastPort location 'a1'; string1 : pSHORTINT location 'a0'; count : CARDINAL location 'd0') : INTEGER;
 | 
						|
SysCall GfxBase 054;
 | 
						|
 | 
						|
function Text(rp : pRastPort location 'a1'; string1: pSHORTINT location 'a0'; count : CARDINAL location 'd0') : LongInt;
 | 
						|
SysCall GfxBase 060;
 | 
						|
 | 
						|
function SetFont(rp : pRastPort location 'a1'; textFont : pTextFont location 'a0') : LongInt;
 | 
						|
SysCall GfxBase 066;
 | 
						|
 | 
						|
function OpenFont(textAttr : pTextAttr location 'a0') : pTextFont;
 | 
						|
SysCall GfxBase 072;
 | 
						|
 | 
						|
procedure CloseFont(textFont : pTextFont location 'a1');
 | 
						|
SysCall GfxBase 078;
 | 
						|
 | 
						|
function AskSoftStyle(rp : pRastPort location 'a1') : CARDINAL;
 | 
						|
SysCall GfxBase 084;
 | 
						|
 | 
						|
function SetSoftStyle(rp : pRastPort location 'a1'; style : CARDINAL location 'd0'; enable : CARDINAL location 'd1') : CARDINAL;
 | 
						|
SysCall GfxBase 090;
 | 
						|
 | 
						|
procedure AddBob(bob : pBob location 'a0'; rp : pRastPort location 'a1');
 | 
						|
SysCall GfxBase 096;
 | 
						|
 | 
						|
procedure AddVSprite(vSprite : pVSprite location 'a0'; rp : pRastPort location 'a1');
 | 
						|
SysCall GfxBase 102;
 | 
						|
 | 
						|
procedure DoCollision(rp : pRastPort location 'a1');
 | 
						|
SysCall GfxBase 108;
 | 
						|
 | 
						|
procedure DrawGList(rp : pRastPort location 'a1'; vp : pViewPort location 'a0');
 | 
						|
SysCall GfxBase 114;
 | 
						|
 | 
						|
procedure InitGels(head : pVSprite location 'a0'; tail : pVSprite location 'a1'; gelsInfo : pGelsInfo location 'a2');
 | 
						|
SysCall GfxBase 120;
 | 
						|
 | 
						|
procedure InitMasks(vSprite : pVSprite location 'a0');
 | 
						|
SysCall GfxBase 126;
 | 
						|
 | 
						|
procedure RemIBob(bob : pBob location 'a0'; rp : pRastPort location 'a1'; vp : pViewPort location 'a2');
 | 
						|
SysCall GfxBase 132;
 | 
						|
 | 
						|
procedure RemVSprite(vSprite : pVSprite location 'a0');
 | 
						|
SysCall GfxBase 138;
 | 
						|
 | 
						|
procedure SortGList(rp : pRastPort location 'a1');
 | 
						|
SysCall GfxBase 150;
 | 
						|
 | 
						|
procedure AddAnimOb(anOb : pAnimOb location 'a0'; anKey : ppAnimOb location 'a1'; rp : pRastPort location 'a2');
 | 
						|
SysCall GfxBase 156;
 | 
						|
 | 
						|
procedure Animate(anKey : ppAnimOb location 'a0'; rp : pRastPort location 'a1');
 | 
						|
SysCall GfxBase 162;
 | 
						|
 | 
						|
function GetGBuffers(anOb : pAnimOb location 'a0'; rp : pRastPort location 'a1'; flag : LongInt location 'd0') : BOOLEAN;
 | 
						|
SysCall GfxBase 168;
 | 
						|
 | 
						|
procedure InitGMasks(anOb : pAnimOb location 'a0');
 | 
						|
SysCall GfxBase 174;
 | 
						|
 | 
						|
procedure DrawEllipse(rp : pRastPort location 'a1'; xCenter : LongInt location 'd0'; yCenter : LongInt location 'd1'; a : LongInt location 'd2'; b : LongInt location 'd3');
 | 
						|
SysCall GfxBase 180;
 | 
						|
 | 
						|
function AreaEllipse(rp : pRastPort location 'a1'; xCenter : LongInt location 'd0'; yCenter : LongInt location 'd1'; a : LongInt location 'd2'; b : LongInt location 'd3') : LongInt;
 | 
						|
SysCall GfxBase 186;
 | 
						|
 | 
						|
procedure LoadRGB4(vp : pViewPort location 'a0'; VAR colors : Integer location 'a1'; count : LongInt location 'd0');
 | 
						|
SysCall GfxBase 192;
 | 
						|
 | 
						|
procedure InitRastPort(rp : pRastPort location 'a1');
 | 
						|
SysCall GfxBase 198;
 | 
						|
 | 
						|
procedure InitVPort(vp : pViewPort location 'a0');
 | 
						|
SysCall GfxBase 204;
 | 
						|
 | 
						|
function MrgCop(view : pView location 'a1') : CARDINAL;
 | 
						|
SysCall GfxBase 210;
 | 
						|
 | 
						|
function MakeVPort(view : pView location 'a0'; vp : pViewPort location 'a1') : CARDINAL;
 | 
						|
SysCall GfxBase 216;
 | 
						|
 | 
						|
procedure LoadView(view : pView location 'a1');
 | 
						|
SysCall GfxBase 222;
 | 
						|
 | 
						|
procedure WaitBlit;
 | 
						|
SysCall GfxBase 228;
 | 
						|
 | 
						|
procedure SetRast(rp : pRastPort location 'a1'; pen : CARDINAL location 'd0');
 | 
						|
SysCall GfxBase 234;
 | 
						|
 | 
						|
procedure Move(rp : pRastPort location 'a1'; x : LongInt location 'd0'; y : LongInt location 'd1');
 | 
						|
SysCall GfxBase 240;
 | 
						|
 | 
						|
procedure Draw(rp : pRastPort location 'a1'; x : LongInt location 'd0'; y : LongInt location 'd1');
 | 
						|
SysCall GfxBase 246;
 | 
						|
 | 
						|
function AreaMove(rp : pRastPort location 'a1'; x : LongInt location 'd0'; y : LongInt location 'd1') : LongInt;
 | 
						|
SysCall GfxBase 252;
 | 
						|
 | 
						|
function AreaDraw(rp : pRastPort location 'a1'; x : LongInt location 'd0'; y : LongInt location 'd1') : LongInt;
 | 
						|
SysCall GfxBase 258;
 | 
						|
 | 
						|
function AreaEnd(rp : pRastPort location 'a1') : LongInt;
 | 
						|
SysCall GfxBase 264;
 | 
						|
 | 
						|
procedure WaitTOF;
 | 
						|
SysCall GfxBase 270;
 | 
						|
 | 
						|
procedure QBlit(blit : pbltnode location 'a1');
 | 
						|
SysCall GfxBase 276;
 | 
						|
 | 
						|
procedure InitArea(areaInfo : pAreaInfo location 'a0'; vectorBuffer : POINTER location 'a1'; maxVectors : LongInt location 'd0');
 | 
						|
SysCall GfxBase 282;
 | 
						|
 | 
						|
procedure SetRGB4(vp : pViewPort location 'a0'; index : LongInt location 'd0'; red : CARDINAL location 'd1'; green : CARDINAL location 'd2'; blue : CARDINAL location 'd3');
 | 
						|
SysCall GfxBase 288;
 | 
						|
 | 
						|
procedure QBSBlit(blit : pbltnode location 'a1');
 | 
						|
SysCall GfxBase 294;
 | 
						|
 | 
						|
procedure BltClear(memBlock : pCHAR location 'a1'; byteCount : CARDINAL location 'd0'; flags : CARDINAL location 'd1');
 | 
						|
SysCall GfxBase 300;
 | 
						|
 | 
						|
procedure RectFill(rp : pRastPort location 'a1'; xMin : LongInt location 'd0'; yMin : LongInt location 'd1'; xMax : LongInt location 'd2'; yMax : LongInt location 'd3');
 | 
						|
SysCall GfxBase 306;
 | 
						|
 | 
						|
procedure BltPattern(rp : pRastPort location 'a1'; mask : pCHAR location 'a0'; xMin : LongInt location 'd0'; yMin : LongInt location 'd1'; xMax : LongInt location 'd2'; yMax : LongInt location 'd3'; maskBPR : CARDINAL location 'd4');
 | 
						|
SysCall GfxBase 312;
 | 
						|
 | 
						|
function ReadPixel(rp : pRastPort location 'a1'; x : LongInt location 'd0'; y : LongInt location 'd1') : CARDINAL;
 | 
						|
SysCall GfxBase 318;
 | 
						|
 | 
						|
function WritePixel(rp : pRastPort location 'a1'; x : LongInt location 'd0'; y : LongInt location 'd1') : LongInt;
 | 
						|
SysCall GfxBase 324;
 | 
						|
 | 
						|
function Flood(rp : pRastPort location 'a1'; mode : CARDINAL location 'd2'; x : LongInt location 'd0'; y : LongInt location 'd1') : BOOLEAN;
 | 
						|
SysCall GfxBase 330;
 | 
						|
 | 
						|
procedure PolyDraw(rp : pRastPort location 'a1'; count : LongInt location 'd0'; VAR polyTable : INTEGER location 'a0');
 | 
						|
SysCall GfxBase 336;
 | 
						|
 | 
						|
procedure SetAPen(rp : pRastPort location 'a1'; pen : CARDINAL location 'd0');
 | 
						|
SysCall GfxBase 342;
 | 
						|
 | 
						|
procedure SetBPen(rp : pRastPort location 'a1'; pen : CARDINAL location 'd0');
 | 
						|
SysCall GfxBase 348;
 | 
						|
 | 
						|
procedure SetDrMd(rp : pRastPort location 'a1'; drawMode : CARDINAL location 'd0');
 | 
						|
SysCall GfxBase 354;
 | 
						|
 | 
						|
procedure InitView(view : pView location 'a1');
 | 
						|
SysCall GfxBase 360;
 | 
						|
 | 
						|
procedure CBump(copList : pUCopList location 'a1');
 | 
						|
SysCall GfxBase 366;
 | 
						|
 | 
						|
procedure CMove(copList : pUCopList location 'a1'; destination : POINTER location 'd0'; data : LongInt location 'd1');
 | 
						|
SysCall GfxBase 372;
 | 
						|
 | 
						|
procedure CWait(copList : pUCopList location 'a1'; v : LongInt location 'd0'; h : LongInt location 'd1');
 | 
						|
SysCall GfxBase 378;
 | 
						|
 | 
						|
function VBeamPos : LongInt;
 | 
						|
SysCall GfxBase 384;
 | 
						|
 | 
						|
procedure InitBitMap(bitMap : pBitMap location 'a0'; depth : LongInt location 'd0'; width : LongInt location 'd1'; height : LongInt location 'd2');
 | 
						|
SysCall GfxBase 390;
 | 
						|
 | 
						|
procedure ScrollRaster(rp : pRastPort location 'a1'; dx : LongInt location 'd0'; dy : LongInt location 'd1'; xMin : LongInt location 'd2'; yMin : LongInt location 'd3'; xMax : LongInt location 'd4'; yMax : LongInt location 'd5');
 | 
						|
SysCall GfxBase 396;
 | 
						|
 | 
						|
procedure WaitBOVP(vp : pViewPort location 'a0');
 | 
						|
SysCall GfxBase 402;
 | 
						|
 | 
						|
function GetSprite(sprite : pSimpleSprite location 'a0'; num : LongInt location 'd0') : INTEGER;
 | 
						|
SysCall GfxBase 408;
 | 
						|
 | 
						|
procedure FreeSprite(num : LongInt location 'd0');
 | 
						|
SysCall GfxBase 414;
 | 
						|
 | 
						|
procedure ChangeSprite(vp : pViewPort location 'a0'; sprite : pSimpleSprite location 'a1'; VAR newData : Integer location 'a2');
 | 
						|
SysCall GfxBase 420;
 | 
						|
 | 
						|
procedure MoveSprite(vp : pViewPort location 'a0'; sprite : pSimpleSprite location 'a1'; x : LongInt location 'd0'; y : LongInt location 'd1');
 | 
						|
SysCall GfxBase 426;
 | 
						|
 | 
						|
procedure LockLayerRom(layer : pLayer location 'a5');
 | 
						|
SysCall GfxBase 432;
 | 
						|
 | 
						|
procedure UnlockLayerRom(layer : pLayer location 'a5');
 | 
						|
SysCall GfxBase 438;
 | 
						|
 | 
						|
procedure SyncSBitMap(layer : pLayer location 'a0');
 | 
						|
SysCall GfxBase 444;
 | 
						|
 | 
						|
procedure CopySBitMap(layer : pLayer location 'a0');
 | 
						|
SysCall GfxBase 450;
 | 
						|
 | 
						|
procedure OwnBlitter;
 | 
						|
SysCall GfxBase 456;
 | 
						|
 | 
						|
procedure DisownBlitter;
 | 
						|
SysCall GfxBase 462;
 | 
						|
 | 
						|
function InitTmpRas(tmpRas : pTmpRas location 'a0'; buffer : pCHAR location 'a1'; size : LongInt location 'd0') : pTmpRas;
 | 
						|
SysCall GfxBase 468;
 | 
						|
 | 
						|
procedure AskFont(rp : pRastPort location 'a1'; textAttr : pTextAttr location 'a0');
 | 
						|
SysCall GfxBase 474;
 | 
						|
 | 
						|
procedure AddFont(textFont : pTextFont location 'a1');
 | 
						|
SysCall GfxBase 480;
 | 
						|
 | 
						|
procedure RemFont(textFont : pTextFont location 'a1');
 | 
						|
SysCall GfxBase 486;
 | 
						|
 | 
						|
function AllocRaster(width : CARDINAL location 'd0'; height : CARDINAL location 'd1') : pCHAR;
 | 
						|
SysCall GfxBase 492;
 | 
						|
 | 
						|
procedure FreeRaster(p : pCHAR location 'a0'; width : CARDINAL location 'd0'; height : CARDINAL location 'd1');
 | 
						|
SysCall GfxBase 498;
 | 
						|
 | 
						|
procedure AndRectRegion(region : pRegion location 'a0'; rectangle : pRectangle location 'a1');
 | 
						|
SysCall GfxBase 504;
 | 
						|
 | 
						|
function OrRectRegion(region : pRegion location 'a0'; rectangle : pRectangle location 'a1') : BOOLEAN;
 | 
						|
SysCall GfxBase 510;
 | 
						|
 | 
						|
function NewRegion : pRegion;
 | 
						|
SysCall GfxBase 516;
 | 
						|
 | 
						|
function ClearRectRegion(region : pRegion location 'a0'; rectangle : pRectangle location 'a1') : BOOLEAN;
 | 
						|
SysCall GfxBase 522;
 | 
						|
 | 
						|
procedure ClearRegion(region : pRegion location 'a0');
 | 
						|
SysCall GfxBase 528;
 | 
						|
 | 
						|
procedure DisposeRegion(region : pRegion location 'a0');
 | 
						|
SysCall GfxBase 534;
 | 
						|
 | 
						|
procedure FreeVPortCopLists(vp : pViewPort location 'a0');
 | 
						|
SysCall GfxBase 540;
 | 
						|
 | 
						|
procedure FreeCopList(copList : pCopList location 'a0');
 | 
						|
SysCall GfxBase 546;
 | 
						|
 | 
						|
procedure ClipBlit(srcRP : pRastPort location 'a0'; xSrc : LongInt location 'd0'; ySrc : LongInt location 'd1'; destRP : pRastPort location 'a1'; xDest : LongInt location 'd2'; yDest : LongInt location 'd3'; xSize : LongInt location 'd4'; ySize : LongInt location 'd5'; minterm : CARDINAL location 'd6');
 | 
						|
SysCall GfxBase 552;
 | 
						|
 | 
						|
function XorRectRegion(region : pRegion location 'a0'; rectangle : pRectangle location 'a1') : BOOLEAN;
 | 
						|
SysCall GfxBase 558;
 | 
						|
 | 
						|
procedure FreeCprList(cprList : pcprlist location 'a0');
 | 
						|
SysCall GfxBase 564;
 | 
						|
 | 
						|
function GetColorMap(entries : LongInt location 'd0') : pColorMap;
 | 
						|
SysCall GfxBase 570;
 | 
						|
 | 
						|
procedure FreeColorMap(colorMap : pColorMap location 'a0');
 | 
						|
SysCall GfxBase 576;
 | 
						|
 | 
						|
function GetRGB4(colorMap : pColorMap location 'a0'; entry : LongInt location 'd0') : CARDINAL;
 | 
						|
SysCall GfxBase 582;
 | 
						|
 | 
						|
procedure ScrollVPort(vp : pViewPort location 'a0');
 | 
						|
SysCall GfxBase 588;
 | 
						|
 | 
						|
function UCopperListInit(uCopList : pUCopList location 'a0'; n : LongInt location 'd0') : pCopList;
 | 
						|
SysCall GfxBase 594;
 | 
						|
 | 
						|
procedure FreeGBuffers(anOb : pAnimOb location 'a0'; rp : pRastPort location 'a1'; flag : LongInt location 'd0');
 | 
						|
SysCall GfxBase 600;
 | 
						|
 | 
						|
procedure BltBitMapRastPort(srcBitMap : pBitMap location 'a0'; xSrc : LongInt location 'd0'; ySrc : LongInt location 'd1'; destRP : pRastPort location 'a1'; xDest : LongInt location 'd2'; yDest : LongInt location 'd3'; xSize : LongInt location 'd4'; ySize : LongInt location 'd5'; minterm : CARDINAL location 'd6');
 | 
						|
SysCall GfxBase 606;
 | 
						|
 | 
						|
function OrRegionRegion(srcRegion : pRegion location 'a0'; destRegion : pRegion location 'a1') : BOOLEAN;
 | 
						|
SysCall GfxBase 612;
 | 
						|
 | 
						|
function XorRegionRegion(srcRegion : pRegion location 'a0'; destRegion : pRegion location 'a1') : BOOLEAN;
 | 
						|
SysCall GfxBase 618;
 | 
						|
 | 
						|
function AndRegionRegion(srcRegion : pRegion location 'a0'; destRegion : pRegion location 'a1') : BOOLEAN;
 | 
						|
SysCall GfxBase 624;
 | 
						|
 | 
						|
procedure SetRGB4CM(colorMap : pColorMap location 'a0'; index : LongInt location 'd0'; red : CARDINAL location 'd1'; green : CARDINAL location 'd2'; blue : CARDINAL location 'd3');
 | 
						|
SysCall GfxBase 630;
 | 
						|
 | 
						|
procedure BltMaskBitMapRastPort(srcBitMap : pBitMap location 'a0'; xSrc : LongInt location 'd0'; ySrc : LongInt location 'd1'; destRP : pRastPort location 'a1'; xDest : LongInt location 'd2'; yDest : LongInt location 'd3'; xSize : LongInt location 'd4'; ySize : LongInt location 'd5'; minterm : CARDINAL location 'd6'; bltMask : pCHAR location 'a2');
 | 
						|
SysCall GfxBase 636;
 | 
						|
 | 
						|
function AttemptLockLayerRom(layer : pLayer location 'a5') : BOOLEAN;
 | 
						|
SysCall GfxBase 654;
 | 
						|
 | 
						|
function GfxNew(gfxNodeType : CARDINAL location 'd0') : POINTER;
 | 
						|
SysCall GfxBase 660;
 | 
						|
 | 
						|
procedure GfxFree(gfxNodePtr : POINTER location 'a0');
 | 
						|
SysCall GfxBase 666;
 | 
						|
 | 
						|
procedure GfxAssociate(associateNode : POINTER location 'a0'; gfxNodePtr : POINTER location 'a1');
 | 
						|
SysCall GfxBase 672;
 | 
						|
 | 
						|
procedure BitMapScale(bitScaleArgs : pBitScaleArgs location 'a0');
 | 
						|
SysCall GfxBase 678;
 | 
						|
 | 
						|
function ScalerDiv(factor : CARDINAL location 'd0'; numerator : CARDINAL location 'd1'; denominator : CARDINAL location 'd2') : Integer;
 | 
						|
SysCall GfxBase 684;
 | 
						|
 | 
						|
function TextExtent(rp : pRastPort location 'a1'; string1: pSHORTINT location 'a0'; count : LongInt location 'd0'; textExtent : pTextExtent location 'a2') : INTEGER;
 | 
						|
SysCall GfxBase 690;
 | 
						|
 | 
						|
function TextFit(rp : pRastPort location 'a1'; string1: pSHORTINT location 'a0'; strLen : CARDINAL location 'd0'; textExtent : pTextExtent location 'a2'; constrainingExtent : pTextExtent location 'a3'; strDirection : LongInt location 'd1'; constrainingBitWidth : CARDINAL location 'd2'; constrainingBitHeight : CARDINAL location 'd3') : CARDINAL;
 | 
						|
SysCall GfxBase 696;
 | 
						|
 | 
						|
function GfxLookUp(associateNode : POINTER location 'a0') : POINTER;
 | 
						|
SysCall GfxBase 702;
 | 
						|
 | 
						|
function VideoControl(colorMap : pColorMap location 'a0'; tagarray : pTagItem location 'a1') : BOOLEAN;
 | 
						|
SysCall GfxBase 708;
 | 
						|
 | 
						|
function OpenMonitor(monitorName : pSHORTINT location 'a1'; displayID : CARDINAL location 'd0') : pMonitorSpec;
 | 
						|
SysCall GfxBase 714;
 | 
						|
 | 
						|
function CloseMonitor(monitorSpec : pMonitorSpec location 'a0') : BOOLEAN;
 | 
						|
SysCall GfxBase 720;
 | 
						|
 | 
						|
function FindDisplayInfo(displayID : CARDINAL location 'd0') : POINTER;
 | 
						|
SysCall GfxBase 726;
 | 
						|
 | 
						|
function NextDisplayInfo(displayID : CARDINAL location 'd0') : CARDINAL;
 | 
						|
SysCall GfxBase 732;
 | 
						|
 | 
						|
function GetDisplayInfoData(handle : POINTER location 'a0'; buf : POINTER location 'a1'; size : CARDINAL location 'd0'; tagID : CARDINAL location 'd1'; displayID : CARDINAL location 'd2') : CARDINAL;
 | 
						|
SysCall GfxBase 756;
 | 
						|
 | 
						|
procedure FontExtent(font : pTextFont location 'a0'; fontExtent : pTextExtent location 'a1');
 | 
						|
SysCall GfxBase 762;
 | 
						|
 | 
						|
function ReadPixelLine8(rp : pRastPort location 'a0'; xstart : CARDINAL location 'd0'; ystart : CARDINAL location 'd1'; width : CARDINAL location 'd2'; array1 : pCHAR location 'a2'; tempRP : pRastPort location 'a1') : LongInt;
 | 
						|
SysCall GfxBase 768;
 | 
						|
 | 
						|
function WritePixelLine8(rp : pRastPort location 'a0'; xstart : CARDINAL location 'd0'; ystart : CARDINAL location 'd1'; width : CARDINAL location 'd2'; array1 : pCHAR location 'a2'; tempRP : pRastPort location 'a1') : LongInt;
 | 
						|
SysCall GfxBase 774;
 | 
						|
 | 
						|
function ReadPixelArray8(rp : pRastPort location 'a0'; xstart : CARDINAL location 'd0'; ystart : CARDINAL location 'd1'; xstop : CARDINAL location 'd2'; ystop : CARDINAL location 'd3'; array1: pCHAR location 'a2'; temprp : pRastPort location 'a1') : LongInt;
 | 
						|
SysCall GfxBase 780;
 | 
						|
 | 
						|
function WritePixelArray8(rp : pRastPort location 'a0'; xstart : CARDINAL location 'd0'; ystart : CARDINAL location 'd1'; xstop : CARDINAL location 'd2'; ystop : CARDINAL location 'd3'; array1: pCHAR location 'a2'; temprp : pRastPort location 'a1') : LongInt;
 | 
						|
SysCall GfxBase 786;
 | 
						|
 | 
						|
function GetVPModeID(vp : pViewPort location 'a0') : LongInt;
 | 
						|
SysCall GfxBase 792;
 | 
						|
 | 
						|
function ModeNotAvailable(modeID : CARDINAL location 'd0') : LongInt;
 | 
						|
SysCall GfxBase 798;
 | 
						|
 | 
						|
function WeighTAMatch(reqTextAttr : pTTextAttr location 'a0'; targetTextAttr : pTextAttr location 'a1'; targetTags : pTagItem location 'a2') : INTEGER;
 | 
						|
SysCall GfxBase 804;
 | 
						|
 | 
						|
procedure EraseRect(rp : pRastPort location 'a1'; xMin : LongInt location 'd0'; yMin : LongInt location 'd1'; xMax : LongInt location 'd2'; yMax : LongInt location 'd3');
 | 
						|
SysCall GfxBase 810;
 | 
						|
 | 
						|
function ExtendFont(font : pTextFont location 'a0'; fontTags : pTagItem location 'a1') : CARDINAL;
 | 
						|
SysCall GfxBase 816;
 | 
						|
 | 
						|
procedure StripFont(font : pTextFont location 'a0');
 | 
						|
SysCall GfxBase 822;
 | 
						|
 | 
						|
function CalcIVG(v : pView location 'a0'; vp : pViewPort location 'a1') : Integer;
 | 
						|
SysCall GfxBase 828;
 | 
						|
 | 
						|
function AttachPalExtra(cm : pColorMap location 'a0'; vp : pViewPort location 'a1') : LongInt;
 | 
						|
SysCall GfxBase 834;
 | 
						|
 | 
						|
function ObtainBestPenA(cm : pColorMap location 'a0'; r : CARDINAL location 'd1'; g : CARDINAL location 'd2'; b : CARDINAL location 'd3'; tags : pTagItem location 'a1') : LongInt;
 | 
						|
SysCall GfxBase 840;
 | 
						|
 | 
						|
procedure SetRGB32(vp : pViewPort location 'a0'; n : CARDINAL location 'd0'; r : CARDINAL location 'd1'; g : CARDINAL location 'd2'; b : CARDINAL location 'd3');
 | 
						|
SysCall GfxBase 852;
 | 
						|
 | 
						|
function GetAPen(rp : pRastPort location 'a0') : CARDINAL;
 | 
						|
SysCall GfxBase 858;
 | 
						|
 | 
						|
function GetBPen(rp : pRastPort location 'a0') : CARDINAL;
 | 
						|
SysCall GfxBase 864;
 | 
						|
 | 
						|
function GetDrMd(rp : pRastPort location 'a0') : CARDINAL;
 | 
						|
SysCall GfxBase 870;
 | 
						|
 | 
						|
function GetOutlinePen(rp : pRastPort location 'a0') : CARDINAL;
 | 
						|
SysCall GfxBase 876;
 | 
						|
 | 
						|
procedure LoadRGB32(vp : pViewPort location 'a0'; VAR table : CARDINAL location 'a1');
 | 
						|
SysCall GfxBase 882;
 | 
						|
 | 
						|
function SetChipRev(want : CARDINAL location 'd0') : CARDINAL;
 | 
						|
SysCall GfxBase 888;
 | 
						|
 | 
						|
procedure SetABPenDrMd(rp : pRastPort location 'a1'; apen : CARDINAL location 'd0'; bpen : CARDINAL location 'd1'; drawmode : CARDINAL location 'd2');
 | 
						|
SysCall GfxBase 894;
 | 
						|
 | 
						|
procedure GetRGB32(cm : pColorMap location 'a0'; firstcolor : CARDINAL location 'd0'; ncolors : CARDINAL location 'd1'; VAR table : CARDINAL location 'a1');
 | 
						|
SysCall GfxBase 900;
 | 
						|
 | 
						|
function AllocBitMap(sizex : CARDINAL location 'd0'; sizey : CARDINAL location 'd1'; depth : CARDINAL location 'd2'; flags : CARDINAL location 'd3'; friend_bitmap : pBitMap location 'a0') : pBitMap;
 | 
						|
SysCall GfxBase 918;
 | 
						|
 | 
						|
procedure FreeBitMap(bm : pBitMap location 'a0');
 | 
						|
SysCall GfxBase 924;
 | 
						|
 | 
						|
function GetExtSpriteA(ss : pExtSprite location 'a2'; tags : pTagItem location 'a1') : LongInt;
 | 
						|
SysCall GfxBase 930;
 | 
						|
 | 
						|
function CoerceMode(vp : pViewPort location 'a0'; monitorid : CARDINAL location 'd0'; flags : CARDINAL location 'd1') : CARDINAL;
 | 
						|
SysCall GfxBase 936;
 | 
						|
 | 
						|
procedure ChangeVPBitMap(vp : pViewPort location 'a0'; bm : pBitMap location 'a1'; db : pDBufInfo location 'a2');
 | 
						|
SysCall GfxBase 942;
 | 
						|
 | 
						|
procedure ReleasePen(cm : pColorMap location 'a0'; n : CARDINAL location 'd0');
 | 
						|
SysCall GfxBase 948;
 | 
						|
 | 
						|
function ObtainPen(cm : pColorMap location 'a0'; n : CARDINAL location 'd0'; r : CARDINAL location 'd1'; g : CARDINAL location 'd2'; b : CARDINAL location 'd3'; f : LongInt location 'd4') : CARDINAL;
 | 
						|
SysCall GfxBase 954;
 | 
						|
 | 
						|
function GetBitMapAttr(bm : pBitMap location 'a0'; attrnum : CARDINAL location 'd1') : CARDINAL;
 | 
						|
SysCall GfxBase 960;
 | 
						|
 | 
						|
function AllocDBufInfo(vp : pViewPort location 'a0') : pDBufInfo;
 | 
						|
SysCall GfxBase 966;
 | 
						|
 | 
						|
procedure FreeDBufInfo(dbi : pDBufInfo location 'a1');
 | 
						|
SysCall GfxBase 972;
 | 
						|
 | 
						|
function SetOutlinePen(rp : pRastPort location 'a0'; pen : CARDINAL location 'd0') : CARDINAL;
 | 
						|
SysCall GfxBase 978;
 | 
						|
 | 
						|
function SetWriteMask(rp : pRastPort location 'a0'; msk : CARDINAL location 'd0') : CARDINAL;
 | 
						|
SysCall GfxBase 984;
 | 
						|
 | 
						|
procedure SetMaxPen(rp : pRastPort location 'a0'; maxpen : CARDINAL location 'd0');
 | 
						|
SysCall GfxBase 990;
 | 
						|
 | 
						|
procedure SetRGB32CM(cm : pColorMap location 'a0'; n : CARDINAL location 'd0'; r : CARDINAL location 'd1'; g : CARDINAL location 'd2'; b : CARDINAL location 'd3');
 | 
						|
SysCall GfxBase 996;
 | 
						|
 | 
						|
procedure ScrollRasterBF(rp : pRastPort location 'a1'; dx : LongInt location 'd0'; dy : LongInt location 'd1'; xMin : LongInt location 'd2'; yMin : LongInt location 'd3'; xMax : LongInt location 'd4'; yMax : LongInt location 'd5');
 | 
						|
SysCall GfxBase 1002;
 | 
						|
 | 
						|
function FindColor(cm : pColorMap location 'a3'; r : CARDINAL location 'd1'; g : CARDINAL location 'd2'; b : CARDINAL location 'd3'; maxcolor : LongInt location 'd4') : LongInt;
 | 
						|
SysCall GfxBase 1008;
 | 
						|
 | 
						|
function AllocSpriteDataA(bm : pBitMap location 'a2'; tags : pTagItem location 'a1') : pExtSprite;
 | 
						|
SysCall GfxBase 1020;
 | 
						|
 | 
						|
function ChangeExtSpriteA(vp : pViewPort location 'a0'; oldsprite : pExtSprite location 'a1'; newsprite : pExtSprite location 'a2'; tags : pTagItem location 'a3') : LongInt;
 | 
						|
SysCall GfxBase 1026;
 | 
						|
 | 
						|
procedure FreeSpriteData(sp : pExtSprite location 'a2');
 | 
						|
SysCall GfxBase 1032;
 | 
						|
 | 
						|
procedure SetRPAttrsA(rp : pRastPort location 'a0'; tags : pTagItem location 'a1');
 | 
						|
SysCall GfxBase 1038;
 | 
						|
 | 
						|
procedure GetRPAttrsA(rp : pRastPort location 'a0'; tags : pTagItem location 'a1');
 | 
						|
SysCall GfxBase 1044;
 | 
						|
 | 
						|
function BestModeIDA(tags : pTagItem location 'a0') : CARDINAL;
 | 
						|
SysCall GfxBase 1050;
 | 
						|
 | 
						|
procedure WriteChunkyPixels(rp : pRastPort location 'a0'; xstart : CARDINAL location 'd0'; ystart : CARDINAL location 'd1'; xstop : CARDINAL location 'd2'; ystop : CARDINAL location 'd3'; array1: pCHAR location 'a2'; bytesperrow : LongInt location 'd4');
 | 
						|
SysCall GfxBase 1056;
 | 
						|
 | 
						|
function OpenFontTagList(textattr : pTextAttr location 'a0'; tags : pTagItem location 'a1') : pTextFont;
 | 
						|
SysCall GfxBase 1062;
 | 
						|
 | 
						|
 | 
						|
{ gfxmacros }
 | 
						|
procedure BNDRYOFF (w: pRastPort);
 | 
						|
procedure InitAnimate (animkey: ppAnimOb);
 | 
						|
procedure SetAfPt(w: pRastPort;p: Pointer; n: Byte);
 | 
						|
procedure SetDrPt(w: pRastPort;p: Word);
 | 
						|
procedure SetOPen(w: pRastPort;c: Byte);
 | 
						|
procedure SetWrMsk(w: pRastPort; m: Byte);
 | 
						|
 | 
						|
procedure SafeSetOutlinePen(w : pRastPort; c : byte);
 | 
						|
procedure SafeSetWriteMask( w : pRastPort ; m : smallint ) ;
 | 
						|
 | 
						|
procedure OFF_DISPLAY (cust: pCustom);
 | 
						|
procedure ON_DISPLAY (cust: pCustom);
 | 
						|
procedure OFF_SPRITE (cust: pCustom);
 | 
						|
procedure ON_SPRITE (cust: pCustom);
 | 
						|
procedure OFF_VBLANK (cust: pCustom);
 | 
						|
procedure ON_VBLANK (cust: pCustom);
 | 
						|
 | 
						|
{ unit/library initialization }
 | 
						|
function InitGraphicsLibrary : boolean;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
implementation
 | 
						|
 | 
						|
 | 
						|
procedure BNDRYOFF (w: pRastPort);
 | 
						|
begin
 | 
						|
  with w^ do Flags := Flags And (Not AREAOUTLINE);
 | 
						|
end;
 | 
						|
 | 
						|
procedure InitAnimate (animkey: ppAnimOb);
 | 
						|
begin
 | 
						|
  animkey^ := NIL;
 | 
						|
end;
 | 
						|
 | 
						|
procedure SetAfPt(w: pRastPort;p: Pointer; n: Byte);
 | 
						|
begin
 | 
						|
  with w^ do begin
 | 
						|
    ArePointern := p;
 | 
						|
    AreaPtSz := n;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure SetDrPt(w: pRastPort;p: Word);
 | 
						|
begin
 | 
						|
  with w^ do begin
 | 
						|
    LinePtrn    := p;
 | 
						|
    Flags       := Flags or FRST_doT;
 | 
						|
    linpatcnt   := 15;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure SetOPen(w: pRastPort;c: Byte);
 | 
						|
begin
 | 
						|
  with w^ do begin
 | 
						|
    AOlPen  := c;
 | 
						|
    Flags   := Flags or AREAOUTLINE;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
{ This function is fine, but For OS39 the SetWriteMask() gfx function
 | 
						|
  should be prefered because it SHOULD operate with gfx boards as well.
 | 
						|
  At least I hope it does.... }
 | 
						|
procedure SetWrMsk(w: pRastPort; m: Byte);
 | 
						|
begin
 | 
						|
  w^.Mask := m;
 | 
						|
end;
 | 
						|
 | 
						|
procedure SafeSetOutlinePen(w : pRastPort; c : byte);
 | 
						|
begin
 | 
						|
    IF pGfxBase(GfxBase)^.LibNode.Lib_Version < 39 THEN begin
 | 
						|
        w^.AOlPen := c;
 | 
						|
        w^.Flags := w^.Flags or AREAOUTLINE;
 | 
						|
    end ELSE begin
 | 
						|
        c := SetOutlinePen(w,c);
 | 
						|
    end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure SafeSetWriteMask( w : pRastPort ; m : smallint ) ;
 | 
						|
  VAR x : smallint ;
 | 
						|
begin
 | 
						|
  IF pGfxBase(GfxBase)^.LibNode.Lib_Version < 39 THEN w^.Mask := BYTE(m)
 | 
						|
  ELSE x := SetWriteMask( w, m );
 | 
						|
end;
 | 
						|
 | 
						|
procedure OFF_DISPLAY (cust: pCustom);
 | 
						|
begin
 | 
						|
    cust^.dmacon := BITCLR or DMAF_RASTER;
 | 
						|
end;
 | 
						|
 | 
						|
procedure ON_DISPLAY (cust: pCustom);
 | 
						|
begin
 | 
						|
    cust^.dmacon := BITSET or DMAF_RASTER;
 | 
						|
end;
 | 
						|
 | 
						|
procedure OFF_SPRITE (cust: pCustom);
 | 
						|
begin
 | 
						|
    cust^.dmacon := BITCLR or DMAF_SPRITE;
 | 
						|
end;
 | 
						|
 | 
						|
procedure ON_SPRITE (cust: pCustom);
 | 
						|
begin
 | 
						|
    cust^.dmacon := BITSET or DMAF_SPRITE;
 | 
						|
end;
 | 
						|
 | 
						|
procedure OFF_VBLANK (cust: pCustom);
 | 
						|
begin
 | 
						|
    cust^.intena := BITCLR or INTF_VERTB;
 | 
						|
end;
 | 
						|
 | 
						|
procedure ON_VBLANK (cust: pCustom);
 | 
						|
begin
 | 
						|
    cust^.intena := BITSET or INTF_VERTB;
 | 
						|
end;
 | 
						|
 | 
						|
 | 
						|
const
 | 
						|
  { Change VERSION and LIBVERSION to proper values }
 | 
						|
  VERSION : string[2] = '50';
 | 
						|
  LIBVERSION : longword = 50;
 | 
						|
 | 
						|
var
 | 
						|
  graphics_exit : Pointer;
 | 
						|
 | 
						|
procedure CloseGraphicsLibrary;
 | 
						|
begin
 | 
						|
  ExitProc := graphics_exit;
 | 
						|
  if GfxBase <> nil then begin
 | 
						|
    CloseLibrary(GfxBase);
 | 
						|
    GfxBase := nil;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
function InitGraphicsLibrary : boolean;
 | 
						|
begin
 | 
						|
  GfxBase := nil;
 | 
						|
  GfxBase := OpenLibrary(GRAPHICSNAME,LIBVERSION);
 | 
						|
  if GfxBase <> nil then begin
 | 
						|
    graphics_exit := ExitProc;
 | 
						|
    ExitProc := @CloseGraphicsLibrary;
 | 
						|
    InitGraphicsLibrary:=True;
 | 
						|
  end else begin
 | 
						|
    InitGraphicsLibrary:=False;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
end.
 |