DEFINITION Graphics;

IMPORT
  e := Exec,
  u := Utility,
  h := Hardware;

TYPE
  RectanglePtr = UNTRACED POINTER TO Rectangle;
  Rect32Ptr = UNTRACED POINTER TO Rect32;
  PointPtr = UNTRACED POINTER TO Point;
  BitMapPtr = UNTRACED POINTER TO BitMap;
  LayerPtr = UNTRACED POINTER TO Layer;
  ClipRectPtr = UNTRACED POINTER TO ClipRect;
  CopInsPtr = UNTRACED POINTER TO CopIns;
  CopInsCLPtr = UNTRACED POINTER TO CopInsCL;
  CprlistPtr = UNTRACED POINTER TO Cprlist;
  CopListPtr = UNTRACED POINTER TO CopList;
  UCopListPtr = UNTRACED POINTER TO UCopList;
  CopinitPtr = UNTRACED POINTER TO Copinit;
  ExtendedNodePtr = UNTRACED POINTER TO ExtendedNode;
  MonitorSpecPtr = UNTRACED POINTER TO MonitorSpec;
  AnalogSignalIntervalPtr = UNTRACED POINTER TO AnalogSignalInterval;
  SpecialMonitorPtr = UNTRACED POINTER TO SpecialMonitor;
  QueryHeaderPtr = UNTRACED POINTER TO QueryHeader;
  DisplayInfoPtr = UNTRACED POINTER TO DisplayInfo;
  DimensionInfoPtr = UNTRACED POINTER TO DimensionInfo;
  MonitorInfoPtr = UNTRACED POINTER TO MonitorInfo;
  NameInfoPtr = UNTRACED POINTER TO NameInfo;
  VSpritePtr = UNTRACED POINTER TO VSprite;
  BobPtr = UNTRACED POINTER TO Bob;
  AnimCompPtr = UNTRACED POINTER TO AnimComp;
  AnimObPtr = UNTRACED POINTER TO AnimOb;
  DBufPacketPtr = UNTRACED POINTER TO DBufPacket;
  CollTablePtr = UNTRACED POINTER TO CollTable;
  IsrvstrPtr = UNTRACED POINTER TO Isrvstr;
  LayerInfoPtr = UNTRACED POINTER TO LayerInfo;
  AreaInfoPtr = UNTRACED POINTER TO AreaInfo;
  TmpRasPtr = UNTRACED POINTER TO TmpRas;
  GelsInfoPtr = UNTRACED POINTER TO GelsInfo;
  RastPortPtr = UNTRACED POINTER TO RastPort;
  RegionRectanglePtr = UNTRACED POINTER TO RegionRectangle;
  RegionPtr = UNTRACED POINTER TO Region;
  BitScaleArgsPtr = UNTRACED POINTER TO BitScaleArgs;
  SimpleSpritePtr = UNTRACED POINTER TO SimpleSprite;
  TextAttrPtr = UNTRACED POINTER TO TextAttr;
  TTextAttrPtr = UNTRACED POINTER TO TTextAttr;
  TextFontPtr = UNTRACED POINTER TO TextFont;
  TextFontExtensionPtr = UNTRACED POINTER TO TextFontExtension;
  ColorFontColorsPtr = UNTRACED POINTER TO ColorFontColors;
  ColorTextFontPtr = UNTRACED POINTER TO ColorTextFont;
  TextextentPtr = UNTRACED POINTER TO Textextent;
  ViewPortPtr = UNTRACED POINTER TO ViewPort;
  ViewPtr = UNTRACED POINTER TO View;
  ViewExtraPtr = UNTRACED POINTER TO ViewExtra;
  ViewPortExtraPtr = UNTRACED POINTER TO ViewPortExtra;
  RasInfoPtr = UNTRACED POINTER TO RasInfo;
  ColorMapPtr = UNTRACED POINTER TO ColorMap;
  GfxBasePtr = UNTRACED POINTER TO GfxBase;
  Rectangle = STRUCT 
    minX,minY : INTEGER;
    maxX,maxY : INTEGER;
  END;
  Rect32 = STRUCT 
    minX,minY : LONGINT;
    maxX,maxY : LONGINT;
  END;
  Point = STRUCT 
    x,y : INTEGER;
  END;
  PLANEPTR = e.APTR;
  BitMap = STRUCT 
    bytesPerRow : INTEGER;
    rows : INTEGER;
    flags : e.BYTE;
    depth : SHORTINT;
    pad : INTEGER;
    planes : ARRAY 8 OF PLANEPTR;
  END;
  Layer = STRUCT 
    front,back : LayerPtr;
    clipRect : ClipRectPtr;
    rp : RastPortPtr;
    bounds : Rectangle;
    reserved : ARRAY 4 OF e.BYTE;
    priority : INTEGER;
    flags : SET;
    superBitMap : BitMapPtr;
    superClipRect : ClipRectPtr;
    window : e.APTR;
    scrollX,scrollY : INTEGER;
    cr,cr2,crnew : ClipRectPtr;
    superSaveClipRects : ClipRectPtr;
    cliprects : ClipRectPtr;
    layerInfo : LayerInfoPtr;
    lock : e.SignalSemaphore;
    backFill : u.HookPtr;
    reserved1 : LONGINT;
    clipRegion : RegionPtr;
    saveClipRects : RegionPtr;
    width,height : INTEGER;
    reserved2 : ARRAY 18 OF e.BYTE;
    damageList : RegionPtr;
  END;
  ClipRect = STRUCT 
    next : ClipRectPtr;
    prev : ClipRectPtr;
    lobs : LayerPtr;
    bitMap : BitMapPtr;
    bounds : Rectangle;
    p1,p2 : ClipRectPtr;
    reserved : LONGINT;
    flags : LONGSET;
  END;

CONST
  needsNoConcealedRasters = 1;
  needsNoLayerBlitDamage = 2;
  isLessX = 1;
  isLessY = 2;
  isGrtrX = 4;
  isGrtrY = 8;
  borderHit = 0;
  topHit = 1;
  bottomHit = 2;
  leftHit = 4;
  rightHit = 8;
  move = 0;
  wait = 1;
  next = 2;
  ntLof = 15;
  ntSht = 14;
  ntSys = 13;

TYPE
  CopIns = STRUCT 
    opCode : INTEGER;
    destAddr : INTEGER;
    destData : INTEGER;
  END;
  CopInsCL = STRUCT 
    opCode : INTEGER;
    nxtList : CopListPtr;
  END;
  Cprlist = STRUCT 
    next : CprlistPtr;
    start : e.APTR;
    maxCount : INTEGER;
  END;
  CopList = STRUCT 
    next : CopListPtr;
    copList : CopListPtr;
    viewPort : ViewPortPtr;
    copIns : CopInsPtr;
    copPtr : CopInsPtr;
    copLStart : e.APTR;
    copSStart : e.APTR;
    count : INTEGER;
    maxCount : INTEGER;
    dyOffset : INTEGER;
    cop2Start : e.APTR;
    cop3Start : e.APTR;
    cop4Start : e.APTR;
    cop5Start : e.APTR;
  END;
  UCopList = STRUCT 
    next : UCopListPtr;
    firstCopList : CopListPtr;
    copList : CopListPtr;
  END;
  Copinit = STRUCT 
    vsyncHblank : ARRAY 2 OF INTEGER;
    diwstart : ARRAY 4 OF INTEGER;
    diagstart : ARRAY 4 OF INTEGER;
    sprstrtup : ARRAY (2 * 8 * 2) OF INTEGER;
    wait14 : ARRAY 2 OF INTEGER;
    normHblank : ARRAY 2 OF INTEGER;
    genloc : ARRAY 4 OF INTEGER;
    jump : ARRAY 2 * 2 OF INTEGER;
    waitForever : ARRAY 2 OF INTEGER;
    sprstop : ARRAY 4 OF INTEGER;
  END;

CONST
  mode640 = 15;
  plnCntMsk = {0.nCntMsk..2};
  plnCntShft = 12;
  pf2pri = 6;
  colorOn = 9;
  dblpf = 10;
  holdnmodify = 11;
  interlace = 2;
  fineScroll = {0.neScroll..3};
  fineScrollShift = 4;
  fineScrollMask = {0.neScrollMask..3};
  horizPos = {0.rizPos..6};
  vrtclPos = {0.tclPos..8};
  vrtclPosShift = 7;
  dftchMask = {0.tchMask..7};
  vposrlof = {15};

TYPE
  ExtendedNode = STRUCT (node : e.Node) 
    subsystem : SHORTINT;
    subtype : SHORTINT;
    library : LONGINT;
    init : e.PROC;
  END;

CONST
  ssGraphics = 2;
  viewExtraType = 1;
  viewPortExtraType = 2;
  specialMonitorType = 3;
  monitorSpecType = 4;

TYPE
  MonitorSpec = STRUCT (node : ExtendedNode) 
    flags : SET;
    ratioh : LONGINT;
    ratiow : LONGINT;
    totalRows : INTEGER;
    totalColorclocks : INTEGER;
    deniseMaxDisplayColumn : INTEGER;
    beamCon0 : INTEGER;
    minRow : INTEGER;
    special : SpecialMonitorPtr;
    openCount : INTEGER;
    transform : e.PROC;
    translate : e.PROC;
    scale : e.PROC;
    xoffset : INTEGER;
    yoffset : INTEGER;
    legalView : Rectangle;
    maxoscan : e.PROC;
    videoscan : e.PROC;
    deniseMinDisplayColumn : INTEGER;
    displayCompatible : LONGINT;
    displayInfoDataBase : e.List;
    displayInfoDataBaseSemaphore : e.SignalSemaphore;
    reserved00 : LONGINT;
    reserved01 : LONGINT;
  END;

CONST
  toMonitor = 0;
  fromMonitor = 1;
  standardXOffset = 9;
  standardYOffset = 0;
  requestNTSC = 1;
  requestPAL = 2;
  requestSpecial = 4;
  requestA2024 = 8;
  defaultMonitorName = "default.monitor";
  ntscMonitorName = "ntsc.monitor";
  palMonitorName = "pal.monitor";
  standardMonitorMask = requestNTSC + requestPAL;
  standardNTSCRows = 262;
  standardPALRows = 312;
  standardColorClocks = 226;
  standardDeniseMax = 455;
  standardDeniseMin = 93;
  standardNTSCBeamCon = {};
  standardPALBeamCon = {h.displayPal};
  specialBeamCon = {h.varVBlank, h.loLDis, h.varVSync, h.varBeam, h.csBlank};
  minNTSCRow = 21;
  minPALRow = 29;
  standardViewX = 81H;
  standardViewY = 2CH;
  standardHBStrt = 06H;
  standardHSStrt = 0BH;
  standardHSStop = 1CH;
  standardHBStop = 2CH;
  standardVBStrt = 0122H;
  standardVSStrt = 02A6H;
  standardVSStop = 03AAH;
  standardVBStop = 1066H;
  vgaColorClocks = standardColorClocks DIV 2;
  vgaTotalRows = standardNTSCRows * 2;
  vgaDeniseMin = 59;
  minvgaRow = 29;
  vgaHBStrt = 08H;
  vgaHSStrt = 0EH;
  vgaHSStop = 1CH;
  vgaHBStop = 1EH;
  vgaVBStrt = 0000H;
  vgaVSStrt = 0153H;
  vgaVSStop = 0235H;
  vgaVBStop = 0CCDH;
  vgaMonitorName = "vga.monitor";
  vga70ColorClocks = standardColorClocks DIV 2;
  vga70TotalRows = 449;
  vga70DeniseMin = 59;
  minvga70Row = 35;
  vga70HBStrt = 08H;
  vga70HSStrt = 0EH;
  vga70HSStop = 1CH;
  vga70HBStop = 1EH;
  vga70VBStrt = 0000H;
  vga70VSStrt = 02A6H;
  vga70VSStop = 0388H;
  vga70VBStop = 0F73H;
  vga70BeamCon = specialBeamCon / {h.vSyncTrue};
  vga70MonitorName = "vga70.monitor";
  broadcastHBStrt = 01H;
  broadcastHSStrt = 06H;
  broadcastHSStop = 17H;
  broadcastHBStop = 27H;
  broadcastVBStrt = 0000H;
  broadcastVSStrt = 02A6H;
  broadcastVSStop = 054CH;
  broadcastVBStop = 1C40H;
  broadcastBeamCon = {h.loLDis, h.csBlank};
  ratioFixedPart = 4;
  rationUnity = ASH(1, ratioFixedPart);

TYPE
  AnalogSignalInterval = STRUCT 
    start : INTEGER;
    stop : INTEGER;
  END;
  SpecialMonitor = STRUCT (node : ExtendedNode) 
    flags : SET;
    doMonitor : e.PROC;
    reserved1 : e.PROC;
    reserved2 : e.PROC;
    reserved3 : e.PROC;
    hblank : AnalogSignalInterval;
    vblank : AnalogSignalInterval;
    hsync : AnalogSignalInterval;
    vsync : AnalogSignalInterval;
  END;
  DisplayInfoHandle = e.APTR;

CONST
  dtagDisp = 80000000H;
  dtagDims = 80001000H;
  dtagMntr = 80002000H;
  dtagName = 80003000H;

TYPE
  QueryHeader = STRUCT 
    structID : LONGINT;
    displayID : LONGINT;
    skipID : LONGINT;
    length : LONGINT;
  END;
  DisplayInfo = STRUCT (header : QueryHeader) 
    notAvailable : INTEGER;
    propertyFlags : LONGSET;
    resolution : Point;
    pixelSpeed : INTEGER;
    numStdSprites : INTEGER;
    paletteRange : INTEGER;
    spriteResolution : Point;
    pad : ARRAY 4 OF e.BYTE;
    reserved : ARRAY 2 OF LONGINT;
  END;

CONST
  availNoChips = 0001H;
  availNoMonitor = 0002H;
  availNotWithGenlock = 0004H;
  isLace = 0;
  isDualPF = 1;
  isPF2pri = 2;
  isHAM = 3;
  isECS = 4;
  isPAL = 5;
  isSprites = 6;
  isGenlock = 7;
  isWB = 8;
  isDraggable = 9;
  isPanelled = 10;
  isBeamSync = 11;
  isExtraHalfBrite = 12;

TYPE
  DimensionInfo = STRUCT (header : QueryHeader) 
    maxDepth : INTEGER;
    minRasterWidth : INTEGER;
    minRasterHeight : INTEGER;
    maxRasterWidth : INTEGER;
    maxRasterHeight : INTEGER;
    nominal : Rectangle;
    maxOScan : Rectangle;
    videoOScan : Rectangle;
    txtOScan : Rectangle;
    stdOScan : Rectangle;
    pad : ARRAY 14 OF e.BYTE;
    reserved : ARRAY 2 OF LONGINT;
  END;
  MonitorInfo = STRUCT (header : QueryHeader) 
    mspc : MonitorSpecPtr;
    viewPosition : Point;
    viewResolution : Point;
    viewPositionRange : Rectangle;
    totalRows : INTEGER;
    totalColorClocks : INTEGER;
    minRow : INTEGER;
    compatibility : INTEGER;
    pad : ARRAY 36 OF e.BYTE;
    reserved : ARRAY 2 OF LONGINT;
  END;

CONST
  mCompatMixed = 0;
  mCompatSelf = 1;
  mCompatNobody = -1;
  displayNameLen = 32;

TYPE
  NameInfo = STRUCT (header : QueryHeader) 
    name : ARRAY displayNameLen OF CHAR;
    reserved : ARRAY 2 OF LONGINT;
  END;

CONST
  invalidID = -1;
  monitorIDMask = 0FFFF1000H;
  defaultMonitorID = 00000000H;
  ntscMonitorID = 00011000H;
  palMonitorID = 00021000H;
  loresKey = 00000000H;
  hiresKey = 00008000H;
  superKey = 00008020H;
  hamKey = 00000800H;
  loresLaceKey = 00000004H;
  hiresLaceKey = 00008004H;
  superLaceKey = 00008024H;
  hamLaceKey = 00000804H;
  loresDPFKey = 00000400H;
  hiresDPFKey = 00008400H;
  superDPFKey = 00008420H;
  loresLaceDPFKey = 00000404H;
  hiresLaceDPFKey = 00008404H;
  superLaceDPFKey = 00008424H;
  loresDPF2Key = 00000440H;
  hiresDPF2Key = 00008440H;
  superDPF2Key = 00008460H;
  loresLaceDPF2Key = 00000444H;
  hiresLaceDPF2Key = 00008444H;
  superLaceDPF2Key = 00008464H;
  extraHalfBriteKey = 00000080H;
  extraHalfBriteLaceKey = 00000084H;
  vgaMonitorID = 00031000H;
  vgaExtraLoresKey = 00031004H;
  vgaLoresKey = 00039004H;
  vgaProductKey = 00039024H;
  vgaHAMKey = 00031804H;
  vgaExtraLoresLaceKey = 00031005H;
  vgaLoresLaceKey = 00039005H;
  vgaProductLaceKey = 00039025H;
  vgaHAMLaceKey = 00031805H;
  vgaExtraLoresDPFKey = 00031404H;
  vgaLoresDPFKey = 00039404H;
  vgaProductDPFKey = 00039424H;
  vgaExtraLoresLaceDPFKey = 00031405H;
  vgaLoresLaceDPFKey = 00039405H;
  vgaProductLaceDPFKey = 00039425H;
  vgaExtraLoresDPF2Key = 00031444H;
  vgaLoresDPF2Key = 00039444H;
  vgaProductDPF2Key = 00039464H;
  vgaExtraLoresLaceDPF2Key = 00031445H;
  vgaLoresLaceDPF2Key = 00039445H;
  vgaProductLaceDPF2Key = 00039465H;
  vgaExtraHalfBriteKey = 00031084H;
  vgaExtraHalfBriteLaceKey = 00031085H;
  a2024MonitorID = 00041000H;
  a2024tenHertzKey = 00041000H;
  a2024fifteenHertzKey = 00049000H;
  protoMonitorID = 00051000H;
  sUserFlags = {0.serFlags..7};
  vsprite = 0;
  saveBack = 1;
  overlay = 2;
  mustDraw = 3;
  backSaved = 8;
  bobUpdate = 9;
  gelGone = 10;
  vsOverflow = 11;
  bUserFlags = {0.serFlags..7};
  saveBob = 0;
  bobIsComp = 1;
  bWaiting = 8;
  bDrawn = 9;
  bobsAway = 10;
  bobNix = 11;
  savePreserve = 12;
  outStep = 13;
  anfracsize = 6;
  animhalf = 0020H;
  ringTrigger = 0001H;

TYPE
  VUserStuff = INTEGER;
  BUserStuff = INTEGER;
  AUserStuff = INTEGER;
  VSprite = STRUCT 
    nextVSprite : VSpritePtr;
    prevVSprite : VSpritePtr;
    drawPath : VSpritePtr;
    clearPath : VSpritePtr;
    oldY,oldX : INTEGER;
    flags : SET;
    y,x : INTEGER;
    height : INTEGER;
    width : INTEGER;
    depth : INTEGER;
    meMask : SET;
    hitMask : SET;
    imageData : e.APTR;
    borderLine : e.APTR;
    collMask : e.APTR;
    sprColors : e.APTR;
    vsBob : BobPtr;
    planePick : SHORTSET;
    planeOnOff : SHORTSET;
    vUserExt : VUserStuff;
  END;
  Bob = STRUCT 
    flags : SET;
    saveBuffer : e.APTR;
    imageShadow : e.APTR;
    before : BobPtr;
    after : BobPtr;
    bobVSprite : VSpritePtr;
    bobComp : AnimCompPtr;
    dBuffer : DBufPacketPtr;
    bUserExt : BUserStuff;
  END;
  AnimComp = STRUCT 
    flags : SET;
    timer : INTEGER;
    timeSet : INTEGER;
    nextComp : AnimCompPtr;
    prevComp : AnimCompPtr;
    nextSeq : AnimCompPtr;
    prevSeq : AnimCompPtr;
    animCRoutine : e.PROC;
    yTrans : INTEGER;
    xTrans : INTEGER;
    headOb : AnimObPtr;
    animBob : BobPtr;
  END;
  AnimOb = STRUCT 
    nextOb,prevOb : AnimObPtr;
    clock : LONGINT;
    anOldY,anOldX : INTEGER;
    anY,anX : INTEGER;
    yVel,xVel : INTEGER;
    yAccel,xAccel : INTEGER;
    ringYTrans,ringXTrans : INTEGER;
    animoRoutine : e.PROC;
    headComp : AnimCompPtr;
    aUserExt : AUserStuff;
  END;
  DBufPacket = STRUCT 
    bufY,bufX : INTEGER;
    bufPath : VSpritePtr;
    bufBuffer : e.APTR;
  END;

CONST
  b2Norm = 0;
  b2Swap = 1;
  b2Bobber = 2;

TYPE
  CollTable = STRUCT 
    collPtrs : ARRAY 16 OF e.APTR;
  END;
  Isrvstr = STRUCT (node : e.Node) 
    iptr : IsrvstrPtr;
    code : e.PROC;
    ccode : e.PROC;
    carg : LONGINT;
  END;

CONST
  layerSimple = 0;
  layerSmart = 1;
  layerSuper = 2;
  layerUpdating = 4;
  layerBackdrop = 6;
  layerRefresh = 7;
  layerClipRectsLost = 8;
  lmnRegion = -1;

TYPE
  LayerInfo = STRUCT 
    layer : LayerPtr;
    lp : LayerPtr;
    obs : ClipRectPtr;
    freeClipRects : e.MinList;
    lock : e.SignalSemaphore;
    head : e.List;
    longreserved : LONGINT;
    flags : SET;
    count : SHORTINT;
    lockLayersCount : SHORTINT;
    layerInfoExtraSize : INTEGER;
    blitbuff : e.APTR;
    layerInfoExtra : e.PROC;
  END;

CONST
  newLayerInfoCalled = 1;
  alertLayersNoMem = 83010000H;

TYPE
  AreaInfo = STRUCT 
    vctrTbl : e.APTR;
    vctrPtr : e.APTR;
    flagTbl : e.APTR;
    flagPtr : e.APTR;
    count : INTEGER;
    maxCount : INTEGER;
    firstX,FirstY : INTEGER;
  END;
  TmpRas = STRUCT 
    rasPtr : e.APTR;
    size : LONGINT;
  END;
  GelsInfo = STRUCT 
    sprRsrvd : SHORTINT;
    flags : e.BYTE;
    gelHead,gelTail : VSpritePtr;
    nextLine : e.APTR;
    lastColor : e.APTR;
    collHandler : CollTablePtr;
    leftmost,rightmost,topmost,bottommost : INTEGER;
    firstBlissObj,lastBlissObj : e.APTR;
  END;
  RastPort = STRUCT 
    layer : LayerPtr;
    bitMap : BitMapPtr;
    areaPtrn : e.APTR;
    tmpRas : TmpRasPtr;
    areaInfo : AreaInfoPtr;
    gelsInfo : GelsInfoPtr;
    mask : SHORTSET;
    fgPen : SHORTINT;
    bgPen : SHORTINT;
    aOlPen : SHORTINT;
    drawMode : SHORTSET;
    areaPtSz : SHORTINT;
    linPatCnt : SHORTINT;
    dummy : e.BYTE;
    flags : SET;
    linePtrn : INTEGER;
    x,y : INTEGER;
    minterms : ARRAY 8 OF e.BYTE;
    penWidth : INTEGER;
    penHeight : INTEGER;
    font : TextFontPtr;
    algoStyle : SHORTSET;
    txFlags : SHORTSET;
    txHeight : INTEGER;
    txWidth : INTEGER;
    txBaseline : INTEGER;
    txSpacing : INTEGER;
    user : e.APTR;
    longreserved : ARRAY 2 OF LONGINT;
    wordreserved : ARRAY 7 OF INTEGER;
    reserved : ARRAY 8 OF e.BYTE;
  END;

CONST
  jam1 = SHORTSET{};
  jam2 = SHORTSET{0};
  complement = 1;
  inversvid = 2;
  firstDot = 0;
  oneDot = 1;
  dBuffer = 2;
  areaOutline = 3;
  noCrossFill = 5;

TYPE
  RegionRectangle = STRUCT 
    next,prev : RegionRectanglePtr;
    bounds : Rectangle;
  END;
  Region = STRUCT (bounds : Rectangle) 
    regionRectangle : RegionRectanglePtr;
  END;
  BitScaleArgs = STRUCT 
    srcX,srcY : INTEGER;
    srcWidth,srcHeight : INTEGER;
    xSrcFactor,ySrcFactor : INTEGER;
    destX,destY : INTEGER;
    destWidth,destHeight : INTEGER;
    xDestFactor,yDestFactor : INTEGER;
    srcBitMap : BitMapPtr;
    destBitMap : BitMapPtr;
    flags : LONGINT;
    xdda,ydda : INTEGER;
    reserved1 : LONGINT;
    reserved2 : LONGINT;
  END;

CONST
  spriteAttached = 80H;

TYPE
  SimpleSprite = STRUCT 
    posctldata : e.APTR;
    height : INTEGER;
    x,y : INTEGER;
    num : INTEGER;
  END;

CONST
  normal = SHORTSET{};
  normalFont = SHORTSET{};
  underlined = 0;
  bold = 1;
  italic = 2;
  extended = 3;
  colorFont = 6;
  tagged = 7;
  romFont = 0;
  diskFont = 1;
  revPath = 2;
  tallDot = 3;
  wideDot = 4;
  proportional = 5;
  designed = 6;
  removed = 7;

TYPE
  TextAttr = STRUCT 
    name : e.STRPTR;
    ySize : INTEGER;
    style : SHORTSET;
    flags : SHORTSET;
  END;
  TTextAttr = STRUCT 
    name : e.STRPTR;
    ySize : INTEGER;
    style : SHORTSET;
    flags : SHORTSET;
    tags : u.TagItemPtr;
  END;

CONST
  deviceDPI = 1 + u.user;
  maxFontMatchweight = 32767;

TYPE
  TextFont = STRUCT (message : e.Message) 
    ySize : INTEGER;
    style : SHORTSET;
    flags : SHORTSET;
    xSize : INTEGER;
    baseline : INTEGER;
    boldSmear : INTEGER;
    accessors : INTEGER;
    loChar : CHAR;
    hiChar : CHAR;
    charData : e.APTR;
    modulo : INTEGER;
    charLoc : e.APTR;
    charSpace : e.APTR;
    charKern : e.APTR;
  END;

CONST
  noRemFont = 0;

TYPE
  TextFontExtension = STRUCT 
    matchWord : INTEGER;
    flags0 : SHORTSET;
    flags1 : SHORTSET;
    backPtr : TextFontPtr;
    origReplyPort : e.MsgPortPtr;
    tags : u.TagItemPtr;
    oFontPatchS : e.APTR;
    oFontPatchK : e.APTR;
  END;

CONST
  ctColorMask = {0.ColorMask..3};
  ctColorFont = 0;
  ctGreyFont = 1;
  ctAntiAlias = 2;
  ctMapColor = 0;

TYPE
  ColorFontColors = STRUCT 
    reserved : INTEGER;
    count : INTEGER;
    colorTable : e.APTR;
  END;
  ColorTextFont = STRUCT (tf : TextFont) 
    flags : SET;
    depth : SHORTINT;
    fgColor : SHORTINT;
    low : SHORTINT;
    high : SHORTINT;
    planePick : SHORTSET;
    planeOnOff : SHORTSET;
    colorFontColors : ColorFontColorsPtr;
    charData : ARRAY 8 OF e.APTR;
  END;
  Textextent = STRUCT 
    width : INTEGER;
    height : INTEGER;
    extent : Rectangle;
  END;

CONST
  vTagEndCM = 00000000H;
  vTagChromaKeyClr = 80000000H;
  vTagChromaKeySet = 80000001H;
  vTagBitPlaneKeyClr = 80000002H;
  vTagBitPlaneKeySet = 80000003H;
  vTagBorderBlankClr = 80000004H;
  vTagBorderBlankSet = 80000005H;
  vTagBorderNoTransClr = 80000006H;
  vTagBorderNoTransSet = 80000007H;
  vTagChromaPenClr = 80000008H;
  vTagChromaPenSet = 80000009H;
  vTagChromaPlaneSet = 8000000AH;
  vTagAttachCMSet = 8000000BH;
  vTagNextBufCM = 8000000CH;
  vTagBatchCMClr = 8000000DH;
  vTagBatchCMSet = 8000000EH;
  vTagNormalDispGet = 8000000FH;
  vTagNormalDisplSet = 80000010H;
  vTagCoerceDispGet = 80000011H;
  vTagCoerceDispSet = 80000012H;
  vTagViewPortExtraGet = 80000013H;
  vTagViewPortExtraSet = 80000014H;
  vTagChromaKeyGet = 80000015H;
  vTagBitPlaneKeyGet = 80000016H;
  vTagBorderBlankGet = 80000017H;
  vTagBorderNoTransGet = 80000018H;
  vTagChromaPenGet = 80000019H;
  vTagChromaPlaneGet = 8000001AH;
  vTagAttachCMGet = 8000001BH;
  vTagBatchCMGet = 8000001CH;
  vTagBatchItemsGet = 8000001DH;
  vTagBatchItemsSet = 8000001EH;
  vTagBatchItemsAdd = 8000001FH;
  vTagVPModeIDGet = 80000020H;
  vTagVPMoedIDSet = 80000021H;
  vTagVPModeIDClr = 80000022H;
  vTagUserClipGet = 80000023H;
  vTagUserClipSet = 80000024H;
  vTagUserClipClr = 80000025H;

TYPE
  ViewPort = STRUCT 
    next : ViewPortPtr;
    colorMap : ColorMapPtr;
    dspIns : CopListPtr;
    sprIns : CopListPtr;
    clrIns : CopListPtr;
    uCopIns : UCopListPtr;
    dWidth,dHeight : INTEGER;
    dxOffset,dyOffset : INTEGER;
    modes : SET;
    spritePriorities : SHORTINT;
    extendedModes : SHORTINT;
    rasInfo : RasInfoPtr;
  END;
  View = STRUCT 
    viewPort : ViewPortPtr;
    lofCprList : CprlistPtr;
    shfCprList : CprlistPtr;
    dyOffset,dxOffset : INTEGER;
    modes : SET;
  END;
  ViewExtra = STRUCT (n : ExtendedNode) 
    view : ViewPtr;
    monitor : MonitorSpecPtr;
  END;
  ViewPortExtra = STRUCT (n : ExtendedNode) 
    viewPort : ViewPortPtr;
    displayClip : Rectangle;
  END;

CONST
  extendVStruct = 12;
  genLockVideo = 1;
  lace = 2;
  superHires = 5;
  pfba = 6;
  extraHalfbrite = 7;
  genlockAudio = 8;
  dualpf = 10;
  ham = 11;
  extendedMode = 12;
  vpHide = 13;
  sprites = 14;
  hires = 15;
  a2024 = 6;
  agnus = 5;
  tenHz = 5;

TYPE
  RasInfo = STRUCT 
    next : RasInfoPtr;
    bitMap : BitMapPtr;
    rxOffset,ryOffset : INTEGER;
  END;
  ColorMap = STRUCT 
    flags : SHORTSET;
    type : SHORTINT;
    count : INTEGER;
    colorTable : e.APTR;
    vpe : ViewPortExtraPtr;
    transparencyBits : e.APTR;
    transparencyPlane : SHORTINT;
    reserved1 : e.BYTE;
    reserved2 : INTEGER;
    vp : ViewPortPtr;
    normalDisplayInfo : DisplayInfoPtr;
    coerceDisplayInfo : DisplayInfoPtr;
    cmBatchItems : u.TagItemPtr;
    vpModeID : LONGINT;
  END;

CONST
  colorMapTypeV12 = 0;
  colorMapTypeV14 = 1;
  colorMapTypeV36 = colorMapTypeV14;
  colroMapTransparency = 0;
  colorPlaneTransparency = 1;
  borderBlanking = 2;
  boderNoTransparency = 3;
  videoControlBatch = 4;
  userCopperClip = 5;

TYPE
  GfxBase = STRUCT (libNode : e.Library) 
    actiView : ViewPtr;
    copinit : CopinitPtr;
    cia : e.APTR;
    blitter : e.APTR;
    loFlist : e.APTR;
    shFlist : e.APTR;
    blthd,blttl : h.BltnodePtr;
    bsblthd,bsblttl : h.BltnodePtr;
    vbsrv,timsrv,bltsrv : e.Interrupt;
    textFonts : e.List;
    defaultFont : TextFontPtr;
    modes : SET;
    vBlank : e.BYTE;
    debug : e.BYTE;
    beamSync : INTEGER;
    bplcon0 : SET;
    spriteReserved : e.BYTE;
    bytereserved : e.BYTE;
    flags : SET;
    blitLock : INTEGER;
    blitNest : INTEGER;
    blitWaitQ : e.List;
    blitOwner : e.TaskPtr;
    waitQ : e.List;
    displayFlags : SET;
    simpleSprites : e.APTR;
    maxDisplayRow : INTEGER;
    maxDisplayColumn : INTEGER;
    normalDisplayRows : INTEGER;
    normalDisplayColumns : INTEGER;
    normalDPMX : INTEGER;
    normalDPMY : INTEGER;
    lastChanceMemory : e.SignalSemaphore;
    lcMptr : e.APTR;
    microsPerLine : INTEGER;
    minDisplayColumn : INTEGER;
    chipRevBits0 : SHORTSET;
    reserved : ARRAY 4 OF e.BYTE;
    monitorID : INTEGER;
    hedley : ARRAY 8 OF LONGINT;
    hedleySprites : ARRAY 8 OF LONGINT;
    hedleySprites1 : ARRAY 8 OF LONGINT;
    hedleyCount : INTEGER;
    hedleyFlags : SET;
    hedleyTmp : INTEGER;
    hashTable : e.APTR;
    currentTotRows : INTEGER;
    currentTotCclks : INTEGER;
    hedleyHint : e.BYTE;
    hedleyHint2 : e.BYTE;
    nreserved : ARRAY 4 OF LONGINT;
    a2024SyncRaster : e.APTR;
    controlDeltaPAL : INTEGER;
    controlDeltaNTSC : INTEGER;
    currentMonitor : MonitorSpecPtr;
    monitorList : e.List;
    defaultMonitor : MonitorSpecPtr;
    monitorListSemaphore : e.SignalSemaphore;
    displayInfoDataBase : e.APTR;
    actiViewCprSemaphore : e.SignalSemaphorePtr;
    utilityBase : e.LibraryPtr;
    execBase : e.LibraryPtr;
  END;

CONST
  ntsc = 0;
  genloc = 1;
  pal = 2;
  todaSafe = 3;
  blitMsgFault = 4;
  bigBlits = 0;
  hrAgnus = 0;
  hrDenise = 1;
  graphicsName = "graphics.library";

VAR
  gfx : GfxBasePtr;

PROCEDURE BltBitMap(srcBitMap: BitMapPtr; xSrc: INTEGER; ySrc: INTEGER; destBitMap: BitMapPtr; xDest: INTEGER; yDest: INTEGER; xSize: INTEGER; ySize: INTEGER; minterm: e.BYTE; mask: SHORTSET; tempA: PLANEPTR): LONGINT;
PROCEDURE BltTemplate(source: PLANEPTR; xSrc: INTEGER; srcMod: INTEGER; destRP: RastPortPtr; xDest: INTEGER; yDest: INTEGER; xSize: INTEGER; ySize: INTEGER);
PROCEDURE ClearEOL(rp: RastPortPtr);
PROCEDURE ClearScreen(rp: RastPortPtr);
PROCEDURE TextLength(rp: RastPortPtr; string: ARRAY OF CHAR; count: LONGINT): INTEGER;
PROCEDURE Text(rp: RastPortPtr; string: ARRAY OF CHAR; count: LONGINT);
PROCEDURE SetFont(rp: RastPortPtr; textFont: TextFontPtr);
PROCEDURE OpenFont(textAttr: TextAttr): TextFontPtr;
PROCEDURE CloseFont(textFont: TextFontPtr);
PROCEDURE AskSoftStyle(rp: RastPortPtr): SHORTSET;
PROCEDURE SetSoftStyle(rp: RastPortPtr; style: SHORTSET; enable: SHORTSET): SHORTSET;
PROCEDURE AddBob(bob: BobPtr; rp: RastPortPtr);
PROCEDURE AddVSprite(vSprite: VSpritePtr; rp: RastPortPtr);
PROCEDURE DoCollision(rp: RastPortPtr);
PROCEDURE DrawGList(rp: RastPortPtr; vp: ViewPortPtr);
PROCEDURE InitGels(head: VSpritePtr; tail: VSpritePtr; gelsInfo: GelsInfoPtr);
PROCEDURE InitMasks(vSprite: VSpritePtr);
PROCEDURE RemIBob(bob: BobPtr; rp: RastPortPtr; vp: ViewPortPtr);
PROCEDURE RemVSprite(vSprite: VSpritePtr);
PROCEDURE SetCollision(num: LONGINT; routine: e.PROC; gelsInfo: GelsInfoPtr);
PROCEDURE SortGList(rp: RastPortPtr);
PROCEDURE AddAnimOb(anOb: AnimObPtr; VAR anKey: AnimObPtr; rp: RastPortPtr);
PROCEDURE Animate(VAR anKey: AnimObPtr; rp: RastPortPtr);
PROCEDURE GetGBuffers(anOb: AnimObPtr; rp: RastPortPtr; flag: BOOLEAN): BOOLEAN;
PROCEDURE InitGMasks(animOb: AnimObPtr);
PROCEDURE DrawEllipse(rp: RastPortPtr; xCenter: INTEGER; yCenter: INTEGER; a: INTEGER; b: INTEGER);
PROCEDURE AreaEllipse(rp: RastPortPtr; xCenter: INTEGER; yCenter: INTEGER; a: INTEGER; b: INTEGER): BOOLEAN;
PROCEDURE LoadRGB4(vp: ViewPortPtr; colors: ARRAY OF INTEGER; count: LONGINT);
PROCEDURE InitRastPort(VAR rp: RastPort);
PROCEDURE InitVPort(VAR vp: ViewPort);
PROCEDURE MrgCop(view: ViewPtr);
PROCEDURE MakeVPort(view: ViewPtr; vp: ViewPortPtr);
PROCEDURE LoadView(view: ViewPtr);
PROCEDURE WaitBlit();
PROCEDURE SetRast(rp: RastPortPtr; pen: INTEGER);
PROCEDURE Move(rp: RastPortPtr; x: INTEGER; y: INTEGER);
PROCEDURE Draw(rp: RastPortPtr; x: INTEGER; y: INTEGER);
PROCEDURE AreaMove(rp: RastPortPtr; x: INTEGER; y: INTEGER): BOOLEAN;
PROCEDURE AreaDraw(rp: RastPortPtr; x: INTEGER; y: INTEGER): BOOLEAN;
PROCEDURE AreaEnd(rp: RastPortPtr): BOOLEAN;
PROCEDURE WaitTOF();
PROCEDURE QBlit(blit: h.BltnodePtr);
PROCEDURE InitArea(VAR areaInfo: AreaInfo; vectorBuffer: e.APTR; maxVectors: LONGINT);
PROCEDURE SetRGB4(vp: ViewPortPtr; index: INTEGER; red: INTEGER; green: INTEGER; blue: INTEGER);
PROCEDURE QBSBlit(blit: h.BltnodePtr);
PROCEDURE BltClear(memBlock: PLANEPTR; byteCount: LONGINT; flags: LONGSET);
PROCEDURE RectFill(rp: RastPortPtr; xMin: INTEGER; yMin: INTEGER; xMax: INTEGER; yMax: INTEGER);
PROCEDURE BltPattern(rp: RastPortPtr; mask: PLANEPTR; xMin: INTEGER; yMin: INTEGER; xMax: INTEGER; yMax: INTEGER; bytecnt: INTEGER);
PROCEDURE ReadPixel(rp: RastPortPtr; x: INTEGER; y: INTEGER): LONGINT;
PROCEDURE WritePixel(rp: RastPortPtr; x: INTEGER; y: INTEGER): BOOLEAN;
PROCEDURE Flood(rp: RastPortPtr; mode: LONGINT; x: INTEGER; y: INTEGER): BOOLEAN;
PROCEDURE PolyDraw(rp: RastPortPtr; count: INTEGER; polyTable: ARRAY OF Point);
PROCEDURE PolyDrawList(rp: RastPortPtr; count: INTEGER; coors..: INTEGER);
PROCEDURE SetAPen(rp: RastPortPtr; pen: INTEGER);
PROCEDURE SetBPen(rp: RastPortPtr; pen: INTEGER);
PROCEDURE SetDrMd(rp: RastPortPtr; drawMode: SHORTSET);
PROCEDURE InitView(VAR view: View);
PROCEDURE CBump(copList: UCopListPtr);
PROCEDURE CMove(copList: UCopListPtr; destination: e.APTR; data: INTEGER);
PROCEDURE CWait(copList: UCopListPtr; v: INTEGER; h: INTEGER);
PROCEDURE VBeamPos(): LONGINT;
PROCEDURE InitBitMap(VAR bitMap: BitMap; depth: INTEGER; width: INTEGER; height: INTEGER);
PROCEDURE ScrollRaster(rp: RastPortPtr; x: INTEGER; y: INTEGER; xMin: INTEGER; yMin: INTEGER; xMax: INTEGER; yMax: INTEGER);
PROCEDURE WaitBOVP(vp: ViewPortPtr);
PROCEDURE GetSprite(VAR sprite: SimpleSprite; num: INTEGER): INTEGER;
PROCEDURE FreeSprite(num: INTEGER);
PROCEDURE ChangeSprite(vp: ViewPortPtr; VAR sprite: SimpleSprite; newData: PLANEPTR);
PROCEDURE MoveSprite(vo: ViewPortPtr; VAR sprite: SimpleSprite; x: INTEGER; y: INTEGER);
PROCEDURE LockLayerRom(layer: LayerPtr);
PROCEDURE UnlockLayerRom(layer: LayerPtr);
PROCEDURE SyncSBitMap(layer: LayerPtr);
PROCEDURE CopySBitMap(layer: LayerPtr);
PROCEDURE OwnBlitter();
PROCEDURE DisownBlitter();
PROCEDURE InitTmpRas(VAR tmpras: TmpRas; buffer: PLANEPTR; size: LONGINT);
PROCEDURE AskFont(rp: RastPortPtr; textAttr: TextAttr);
PROCEDURE AddFont(textfont: TextFontPtr);
PROCEDURE RemFont(textfont: TextFontPtr);
PROCEDURE AllocRaster(width: INTEGER; height: INTEGER): PLANEPTR;
PROCEDURE FreeRaster(p: PLANEPTR; width: INTEGER; height: INTEGER);
PROCEDURE AndRectRegion(region: RegionPtr; rectangle: Rectangle);
PROCEDURE OrRectRegion(region: RegionPtr; rectangle: Rectangle): BOOLEAN;
PROCEDURE NewRegion(): RegionPtr;
PROCEDURE ClearRectRegion(region: RegionPtr; rectangle: Rectangle): BOOLEAN;
PROCEDURE ClearRegion(region: RegionPtr);
PROCEDURE DisposeRegion(region: RegionPtr);
PROCEDURE FreeVPortCopLists(vp: ViewPortPtr);
PROCEDURE FreeCopList(copList: CopListPtr);
PROCEDURE ClipBlit(srcRP: RastPortPtr; xSrc: INTEGER; ySrc: INTEGER; destRP: RastPortPtr; xDest: INTEGER; yDest: INTEGER; xSize: INTEGER; ySize: INTEGER; minterm: e.BYTE);
PROCEDURE XorRectRegion(region: RegionPtr; rectangle: Rectangle): BOOLEAN;
PROCEDURE FreeCprList(cprlist: CprlistPtr);
PROCEDURE GetColorMap(entries: LONGINT): ColorMapPtr;
PROCEDURE FreeColorMap(colorMap: ColorMapPtr);
PROCEDURE GetRGB4(colorMap: ColorMapPtr; entry: LONGINT): INTEGER;
PROCEDURE ScrollVPort(vp: ViewPortPtr);
PROCEDURE UCopperListInit(uCopList: UCopListPtr; n: LONGINT): CopListPtr;
PROCEDURE FreeGBuffers(anOb: AnimObPtr; rp: RastPortPtr; flag: BOOLEAN);
PROCEDURE BltBitMapRastPort(srcBitMap: BitMapPtr; xSrc: INTEGER; ySrc: INTEGER; destRP: RastPortPtr; xDest: INTEGER; yDest: INTEGER; xSize: INTEGER; ySize: INTEGER; minterm: e.BYTE);
PROCEDURE OrRegionRegion(srcRegion: RegionPtr; destRegion: RegionPtr): BOOLEAN;
PROCEDURE XorRegionRegion(srcRegion: RegionPtr; destRegion: RegionPtr): BOOLEAN;
PROCEDURE AndRegionRegion(srcRegion: RegionPtr; destRegion: RegionPtr): BOOLEAN;
PROCEDURE SetRGB4CM(colorMap: ColorMapPtr; index: INTEGER; red: INTEGER; green: INTEGER; blue: INTEGER);
PROCEDURE BltMaskBitMapRastPort(srcBitMap: BitMapPtr; xSrc: INTEGER; ySrc: INTEGER; destRP: RastPortPtr; xDest: INTEGER; yDest: INTEGER; xSize: INTEGER; ySize: INTEGER; minterm: e.BYTE; bltMask: PLANEPTR);
PROCEDURE AttemptLockLayerRom(layer: LayerPtr): BOOLEAN;
PROCEDURE GfxNew(gfxNodeType: LONGINT): ExtendedNodePtr;
PROCEDURE GfxFree(gfxNodePtr: ExtendedNodePtr);
PROCEDURE GfxAssociate(associateNode: ExtendedNodePtr; gfxNodePtr: ExtendedNodePtr);
PROCEDURE BitMapScale(bitScaleArgs: BitScaleArgsPtr);
PROCEDURE ScalerDiv(factor: LONGINT; numerator: LONGINT; denominator: LONGINT): INTEGER;
PROCEDURE TextExtent(rp: RastPortPtr; string: ARRAY OF CHAR; count: LONGINT; textExtent: TextextentPtr): INTEGER;
PROCEDURE TextFit(rp: RastPortPtr; string: ARRAY OF CHAR; strLen: LONGINT; textExtent: TextextentPtr; constrainingExtent: TextextentPtr; strDirection: LONGINT; constrainingBitWidth: LONGINT; constrainingBitHeight: LONGINT): LONGINT;
PROCEDURE GfxLookUp(associateNode: ExtendedNodePtr): e.APTR;
PROCEDURE VideoControl(colorMap: ColorMapPtr; tagarray: ARRAY OF u.TagItem): BOOLEAN;
PROCEDURE VideoControlTagList(colorMap: ColorMapPtr; tags..: u.Tag): BOOLEAN;
PROCEDURE OpenMonitor(monitorName: ARRAY OF CHAR; displayID: LONGINT): MonitorSpecPtr;
PROCEDURE CloseMonitor(monitorSpec: MonitorSpecPtr): BOOLEAN;
PROCEDURE FindDisplayInfo(displayID: LONGINT): DisplayInfoHandle;
PROCEDURE NextDisplayInfo(displayID: LONGINT): LONGINT;
PROCEDURE AddDisplayInfo;
PROCEDURE AddDisplayInfoData;
PROCEDURE SetDisplayInfoData(handle: DisplayInfoHandle; buf: ARRAY OF e.BYTE; size: LONGINT; tagID: LONGINT; displayID: LONGINT): LONGINT;
PROCEDURE GetDisplayInfoData(handle: DisplayInfoHandle; VAR buf: ARRAY OF e.BYTE; size: LONGINT; tagID: LONGINT; displayID: LONGINT): LONGINT;
PROCEDURE FontExtent(font: TextFontPtr; fontExtent: TextFontExtensionPtr);
PROCEDURE ReadPixelLine8(rp: RastPortPtr; xstart: INTEGER; ystart: INTEGER; width: INTEGER; VAR array: ARRAY OF e.BYTE; tempRP: RastPortPtr): LONGINT;
PROCEDURE WritePixelLine8(rp: RastPortPtr; xstart: INTEGER; ystart: INTEGER; width: INTEGER; array: ARRAY OF e.BYTE; tempRP: RastPortPtr): LONGINT;
PROCEDURE ReadPixelArray8(rp: RastPortPtr; xstart: INTEGER; ystart: INTEGER; xstop: INTEGER; ystop: INTEGER; width: INTEGER; VAR array: ARRAY OF e.BYTE; tempRP: RastPortPtr): LONGINT;
PROCEDURE WritePixelArray8(rp: RastPortPtr; xstart: INTEGER; ystart: INTEGER; xstop: INTEGER; ystop: INTEGER; width: INTEGER; array: ARRAY OF e.BYTE; tempRP: RastPortPtr): LONGINT;
PROCEDURE GetVPModeID(vp: ViewPortPtr): LONGINT;
PROCEDURE ModeNotAvailable(modeID: LONGINT): LONGINT;
PROCEDURE WeighTAMatch(reqTextAttr: TextAttr; VAR targetTextAttr: TextAttr; targetTags: ARRAY OF u.TagItem): INTEGER;
PROCEDURE WeighTAMatchTagList(reqTextAttr: TextAttr; VAR targetTextAttr: TextAttr; tags..: u.Tag): INTEGER;
PROCEDURE EraseRect(rp: RastPortPtr; xMin: INTEGER; yMin: INTEGER; xMax: INTEGER; yMax: INTEGER);
PROCEDURE ExtendFont(font: TextFontPtr; fontTags: ARRAY OF u.TagItem): BOOLEAN;
PROCEDURE StripFont(font: TextFontPtr);
PROCEDURE RASSIZE(w, h: INTEGER): LONGINT;
PROCEDURE RemBob(b: BobPtr);
PROCEDURE OnDisplay;
PROCEDURE OffDisplay;
PROCEDURE OnSprite;
PROCEDURE OffSprite;
PROCEDURE OnVBlank;
PROCEDURE OffVBlank;
PROCEDURE SetOPen(w: RastPortPtr; c: e.BYTE);
PROCEDURE SetDrPt(w: RastPortPtr; p: INTEGER);
PROCEDURE SetWrMsk(w: RastPortPtr; m: SHORTSET);
PROCEDURE SetAfPt(w: RastPortPtr; p: e.ADDRESS; n: e.BYTE);
PROCEDURE BndryOff(w: RastPortPtr);
PROCEDURE CINIT(c: UCopListPtr; n: LONGINT);
PROCEDURE CMOVE(c: UCopListPtr; a: e.ADDRESS; b: INTEGER);
PROCEDURE CWAIT(c: UCopListPtr; a, b: INTEGER);
PROCEDURE CEND(c: UCopListPtr);
PROCEDURE DrawCircle(rp: RastPortPtr; cx, cy: INTEGER; r: INTEGER);
PROCEDURE AreaCircle(rp: RastPortPtr; cx, cy: INTEGER; r: INTEGER): BOOLEAN;

END Graphics.

