Unit Graphics;

Interface
Uses Hardware, Input, Exec;

Type
  pCustom = ^tCustom;
  pLayer = ^tLayer;
  pClipRect = ^tClipRect;
  pRastPort = ^tRastPort;
  tRectangle = Record
		  MinX: Integer;
		  MinY: Integer;
		  MaxX: Integer;
		  MaxY: Integer;
		End;

  pBitMap = ^tBitMap;
  pLayer_Info = ^tLayer_Info;
  pRegion = ^tRegion;
  tLayer = Record
		  front: pLayer;
		  back: pLayer;
		  ClipRect: pClipRect;
		  rp: pRastPort;
		  bounds: tRectangle;
		  reserved: Array [0..3] of ShortInt;
		  priority: Integer;
		  Flags: Integer;
		  SuperBitMap: pBitMap;
		  SuperClipRect: pClipRect;
		  Window: Pointer;
		  Scroll_X: Integer;
		  Scroll_Y: Integer;
		  cr: pClipRect;
		  cr2: pClipRect;
		  crnew: pClipRect;
		  SuperSaveClipRects: pClipRect;
		  _cliprects: pClipRect;
		  LayerInfo: pLayer_Info;
		  Lock: tSignalSemaphore;
		  reserved3: Array [0..7] of ShortInt;
		  ClipRegion: pRegion;
		  saveClipRects: pRegion;
		  reserved2: Array [0..21] of ShortInt;
		  DamageList: pRegion;
		End;

  tcollTable = Record
		  collPtrs: Array [0..15] of pPointer;
		End;

  pRegionRectangle = ^tRegionRectangle;
  tRegion = Record
		  bounds: tRectangle;
		  RegionRectangle: pRegionRectangle;
		End;

  pViewPort = ^tViewPort;
  pcprlist = ^tcprlist;
  tView = Record
		  ViewPort: pViewPort;
		  LOFCprList: pcprlist;
		  SHFCprList: pcprlist;
		  DyOffset: Integer;
		  DxOffset: Integer;
		  Modes: Integer;
		End;

  pVSprite = ^tVSprite;
  pBob = ^tBob;
  tVSprite = Record
		  NextVSprite: pVSprite;
		  PrevVSprite: pVSprite;
		  DrawPath: pVSprite;
		  ClearPath: pVSprite;
		  OldY: Integer;
		  OldX: Integer;
		  Flags: Integer;
		  Y: Integer;
		  X: Integer;
		  Height: Integer;
		  Width: Integer;
		  Depth: Integer;
		  MeMask: Integer;
		  HitMask: Integer;
		  ImageData: pInteger;
		  BorderLine: pInteger;
		  CollMask: pInteger;
		  SprColors: pInteger;
		  VSBob: pBob;
		  PlanePick: ShortInt;
		  PlaneOnOff: ShortInt;
		  VUserExt: Integer;
		End;

  tRegionRectangle = Record
		  Next: pRegionRectangle;
		  Prev: pRegionRectangle;
		  bounds: tRectangle;
		End;

  tTextFont = Record
		  tf_Message: tMessage;
		  tf_YSize: Integer;
		  tf_Style: ShortInt;
		  tf_Flags: ShortInt;
		  tf_XSize: Integer;
		  tf_Baseline: Integer;
		  tf_BoldSmear: Integer;
		  tf_Accessors: Integer;
		  tf_LoChar: ShortInt;
		  tf_HiChar: ShortInt;
		  tf_CharData: Pointer;
		  tf_Modulo: Integer;
		  tf_CharLoc: Pointer;
		  tf_CharSpace: Pointer;
		  tf_CharKern: Pointer;
		End;

  pTmpRas = ^tTmpRas;
  pAreaInfo = ^tAreaInfo;
  pGelsInfo = ^tGelsInfo;
  pTextFont = ^tTextFont;
  tRastPort = Record
		  Layer: pLayer;
		  BitMap: pBitMap;
		  AreaPtrn: pInteger;
		  TmpRas: pTmpRas;
		  AreaInfo: pAreaInfo;
		  GelsInfo: pGelsInfo;
		  Mask: ShortInt;
		  FgPen: ShortInt;
		  BgPen: ShortInt;
		  AOlPen: ShortInt;
		  DrawMode: ShortInt;
		  AreaPtSz: ShortInt;
		  linpatcnt: ShortInt;
		  dummy: ShortInt;
		  Flags: Integer;
		  LinePtrn: Integer;
		  cp_x: Integer;
		  cp_y: Integer;
		  minterms: Array [0..7] of ShortInt;
		  PenWidth: Integer;
		  PenHeight: Integer;
		  Font: pTextFont;
		  AlgoStyle: ShortInt;
		  TxFlags: ShortInt;
		  TxHeight: Integer;
		  TxWidth: Integer;
		  TxBaseline: Integer;
		  TxSpacing: Integer;
		  RP_User: Pointer;
		  longreserved: Array [0..1] of LongInt;
		  wordreserved: Array [0..6] of Integer;
		  reserved: Array [0..7] of ShortInt;
		End;

  tTextAttr = Record
		  ta_Name: pShortInt;
		  ta_YSize: Integer;
		  ta_Style: ShortInt;
		  ta_Flags: ShortInt;
		End;

  pColorMap = ^tColorMap;
  pCopList = ^tCopList;
  pUCopList = ^tUCopList;
  pRasInfo = ^tRasInfo;
  tViewPort = Record
		  Next: pViewPort;
		  ColorMap: pColorMap;
		  DspIns: pCopList;
		  SprIns: pCopList;
		  ClrIns: pCopList;
		  UCopIns: pUCopList;
		  DWidth: Integer;
		  DHeight: Integer;
		  DxOffset: Integer;
		  DyOffset: Integer;
		  Modes: Integer;
		  SpritePriorities: ShortInt;
		  reserved: ShortInt;
		  RasInfo: pRasInfo;
		End;

  ttPoint = Record
		  x: Integer;
		  y: Integer;
		End;

  tSimpleSprite = Record
		  posctldata: pInteger;
		  height: Integer;
		  x: Integer;
		  y: Integer;
		  num: Integer;
		End;

  tDBufPacket = Record
		  BufY: Integer;
		  BufX: Integer;
		  BufPath: pVSprite;
		  BufBuffer: pInteger;
		End;

  tcopinit = Record
		  diagstrt: Array [0..3] of Integer;
		  sprstrtup: Array [0..39] of Integer;
		  sprstop: Array [0..1] of Integer;
		End;

  pIsrvstr = ^tIsrvstr;
  tIsrvstr = Record
		  is_Node: tNode;
		  Iptr: pIsrvstr;
		  code: pPointer;
		  ccode: pPointer;
		  Carg: LongInt;
		End;

  pAnimOb = ^tAnimOb;
  pAnimComp = ^tAnimComp;
  tAnimOb = Record
		  NextOb: pAnimOb;
		  PrevOb: pAnimOb;
		  Clock: LongInt;
		  AnOldY: Integer;
		  AnOldX: Integer;
		  AnY: Integer;
		  AnX: Integer;
		  YVel: Integer;
		  XVel: Integer;
		  YAccel: Integer;
		  XAccel: Integer;
		  RingYTrans: Integer;
		  RingXTrans: Integer;
		  AnimORoutine: pPointer;
		  HeadComp: pAnimComp;
		  AUserExt: Integer;
		End;

  tcprlist = Record
		  Next: pcprlist;
		  start: pInteger;
		  MaxCount: Integer;
		End;

  pView = ^tView;
  pcopinit = ^tcopinit;
  pbltnode = ^tbltnode;
  pTask = ^tTask;
  pSimpleSprite = ^tSimpleSprite;
  ppSimpleSprite = ^pSimpleSprite;
  pSignalSemaphore = ^tSignalSemaphore;
  tGfxBase = Record
		  LibNode: tLibrary;
		  ActiView: pView;
		  copinit: pcopinit;
		  cia: pLongInt;
		  blitter: pLongInt;
		  LOFlist: pInteger;
		  SHFlist: pInteger;
		  blthd: pbltnode;
		  blttl: pbltnode;
		  bsblthd: pbltnode;
		  bsblttl: pbltnode;
		  vbsrv: tInterrupt;
		  timsrv: tInterrupt;
		  bltsrv: tInterrupt;
		  TextFonts: tList;
		  DefaultFont: pTextFont;
		  Modes: Integer;
		  VBlank: ShortInt;
		  Debug: ShortInt;
		  BeamSync: Integer;
		  system_bplcon0: Integer;
		  SpriteReserved: ShortInt;
		  bytereserved: ShortInt;
		  Flags: Integer;
		  BlitLock: Integer;
		  BlitNest: Integer;
		  BlitWaitQ: tList;
		  BlitOwner: pTask;
		  TOF_WaitQ: tList;
		  DisplayFlags: Integer;
		  SimpleSprites: ppSimpleSprite;
		  MaxDisplayRow: Integer;
		  MaxDisplayColumn: Integer;
		  NormalDisplayRows: Integer;
		  NormalDisplayColumns: Integer;
		  NormalDPMX: Integer;
		  NormalDPMY: Integer;
		  LastChanceMemory: pSignalSemaphore;
		  LCMptr: pInteger;
		  MicrosPerLine: Integer;
		  MinDisplayColumn: Integer;
		  reserved: Array [0..22] of LongInt;
		End;

  tAreaInfo = Record
		  VctrTbl: pInteger;
		  VctrPtr: pInteger;
		  FlagTbl: pShortInt;
		  FlagPtr: pShortInt;
		  Count: Integer;
		  MaxCount: Integer;
		  FirstX: Integer;
		  FirstY: Integer;
		End;

  tBitMap = Record
		  BytesPerRow: Integer;
		  Rows: Integer;
		  Flags: ShortInt;
		  Depth: ShortInt;
		  pad: Integer;
		  Planes: Array [0..7] of pShortInt;
		End;

  pDBufPacket = ^tDBufPacket;
  tBob = Record
		  Flags: Integer;
		  SaveBuffer: pInteger;
		  ImageShadow: pInteger;
		  Before: pBob;
		  After: pBob;
		  BobVSprite: pVSprite;
		  BobComp: pAnimComp;
		  DBuffer: pDBufPacket;
		  BUserExt: Integer;
		End;

  tUCopList = Record
		  Next: pUCopList;
		  FirstCopList: pCopList;
		  CopList: pCopList;
		End;

  tAnimComp = Record
		  Flags: Integer;
		  Timer: Integer;
		  TimeSet: Integer;
		  NextComp: pAnimComp;
		  PrevComp: pAnimComp;
		  NextSeq: pAnimComp;
		  PrevSeq: pAnimComp;
		  AnimCRoutine: pPointer;
		  YTrans: Integer;
		  XTrans: Integer;
		  HeadOb: pAnimOb;
		  AnimBob: pBob;
		End;

  tCopIns = Record
		  OpCode: Integer;
		Case Integer of
		0: (
		  nxtlist: pCopList;
		);
		1: (
		  WaitPos: Record
		  V: Integer;
		  H: Integer;
		  End;
		);
		2: (
		  Dest: Record
		  Addr: Integer;
		  Data: Integer;
		  End;
		);
		End;

  tClipRect = Record
		  Next: pClipRect;
		  prev: pClipRect;
		  lobs: pLayer;
		  BitMap: pBitMap;
		  bounds: tRectangle;
		  _p1: pClipRect;
		  _p2: pClipRect;
		  reserved: LongInt;
		End;

  tRasInfo = Record
		  Next: pRasInfo;
		  BitMap: pBitMap;
		  RxOffset: Integer;
		  RyOffset: Integer;
		End;

  pcollTable = ^tcollTable;
  tGelsInfo = Record
		  sprRsrvd: ShortInt;
		  Flags: ShortInt;
		  gelHead: pVSprite;
		  gelTail: pVSprite;
		  nextLine: pInteger;
		  lastColor: ppInteger;
		  collHandler: pcollTable;
		  leftmost: Integer;
		  rightmost: Integer;
		  topmost: Integer;
		  bottommost: Integer;
		  firstBlissObj: Pointer;
		  lastBlissObj: Pointer;
		End;

  tColorMap = Record
		  Flags: ShortInt;
		  Type_: ShortInt;
		  Count: Integer;
		  ColorTable: Pointer;
		End;

  tLayer_Info = Record
		  top_layer: pLayer;
		  check_lp: pLayer;
		  obs: pLayer;
		  FreeClipRects: tMinList;
		  Lock: tSignalSemaphore;
		  gs_Head: tList;
		  longreserved: LongInt;
		  Flags: Integer;
		  fatten_count: ShortInt;
		  LockLayersCount: ShortInt;
		  LayerInfo_extra_size: Integer;
		  blitbuff: pInteger;
		  LayerInfo_extra: Pointer;
		End;

  tTmpRas = Record
		  RasPtr: pShortInt;
		  Size: LongInt;
		End;

  pCopIns = ^tCopIns;
  tCopList = Record
		  Next: pCopList;
		  _CopList: pCopList;
		  _ViewPort: pViewPort;
		  CopIns: pCopIns;
		  CopPtr: pCopIns;
		  CopLStart: pInteger;
		  CopSStart: pInteger;
		  Count: Integer;
		  MaxCount: Integer;
		  DyOffset: Integer;
		End;

  PLANEPTR = pShortInt;
  Point = ttPoint;
  pTextAttr = ^tTextAttr;
  pRectangle = ^tRectangle;
  ppAnimOb = ^pAnimOb;
  pGfxBase = ^tGfxBase;


Var
  GfxBase: pGfxBase;


Const
  FSF_BOLD = $2;
  FSF_EXTENDED = $8;
  RIGHTHIT = $8;
  DBUFFER = $4;
  GELGONE = $400;
  ALERTLAYERSNOMEM = $83010000;
  SAVEBOB = $1;
  NTSC = $1;
  CPR_NT_SHT = $4000;
  FPB_DISKFONT = $1;
  HAM = $800;
  SAVEPRESERVE = $1000;
  FPF_DISKFONT = $2;
  CR_NEEDS_NO_CONCEALED_RASTERS = $1;
  DIW_VRTCL_POS_SHIFT = $7;
  AREAOUTLINE = $8;
  NEWLAYERINFO_CALLED = $1;
  PAL = $4;
  PFB_FINE_SCROLL_SHIFT = $4;
  HOLDNMODIFY = $800;
  LEFTHIT = $4;
  MUSTDRAW = $8;
  B2SWAP = $1;
  RINGTRIGGER = $1;
  B2NORM = $0;
  VPOSRLOF = $8000;
  SPRITE_ATTACHED = $80;
  EXTRA_HALFBRITE = $80;
  PF2PRI = $40;
  LAYERSIMPLE = $1;
  FPB_WIDEDOT = $4;
  FPB_REMOVED = $7;
  COLORON = $200;
  ANFRACSIZE = $6;
  FPB_TALLDOT = $3;
  FPF_WIDEDOT = $10;
  GENLOC = $2;
  FPB_PROPORTIONAL = $5;
  MODE_640 = $8000;
  FPF_REMOVED = $80;
  BACKSAVED = $100;
  NOCROSSFILL = $20;
  VP_HIDE = $2000;
  B2BOBBER = $2;
  FRST_DOT = $1;
  FPF_TALLDOT = $8;
  FPF_PROPORTIONAL = $20;
  DUALPF = $400;
  OVERLAY = $4;
  FPB_REVPATH = $2;
  BDRAWN = $200;
  BUSERFLAGS = $FF;
  BITCLR = $0;
  DIW_VRTCL_POS = $1FF;
  FSB_ITALIC = $2;
  FPF_REVPATH = $4;
  DIW_HORIZ_POS = $7F;
  BOBNIX = $800;
  PFA_FINE_SCROLL = $F;
  ONE_DOT = $2;
  DFTCH_MASK = $FF;
  COMPLEMENT = $2;
  FSF_ITALIC = $4;
  SPRITES = $4000;
  ISLESSX = $1;
  FSB_UNDERLINED = $0;
  ISLESSY = $2;
  VSPRITE = $1;
  FPB_ROMFONT = $0;
  COPPER_WAIT = $1;
  LAYERBACKDROP = $40;
  FSF_UNDERLINED = $1;
  BITSET = $8000;
  COPPER_MOVE = $0;
  BOBUPDATE = $200;
  FPF_ROMFONT = $1;
  DBLPF = $400;
  INTERLACE = $4;
  ISGRTRX = $4;
  ISGRTRY = $8;
  OUTSTEP = $2000;
  LAYER_CLIPRECTS_LOST = $100;
  SUSERFLAGS = $FF;
  JAM1 = $0;
  BOBISCOMP = $2;
  JAM2 = $1;
  PLNCNTSHFT = $C;
  LAYERSMART = $2;
  TOPHIT = $1;
  BORDERHIT = $0;
  SAVEBACK = $2;
  ANIMHALF = $20;
  LMN_REGION = $FFFFFFFF;
  GENLOCK_AUDIO = $100;
  LAYERSUPER = $4;
  PF_FINE_SCROLL_MASK = $F;
  LACE = $4;
  LAYERUPDATING = $10;
  HIRES = $8000;
  GENLOCK_VIDEO = $2;
  PFBA = $40;
  FPB_DESIGNED = $6;
  FPF_DESIGNED = $40;
  VSOVERFLOW = $800;
  BOTTOMHIT = $2;
  PLNCNTMSK = $7;
  BWAITING = $100;
  INVERSVID = $4;
  CPRNXTBUF = $2;
  BOBSAWAY = $400;
  BLITMSG_FAULT = $4;
  FSB_BOLD = $1;
  CPR_NT_LOF = $8000;
  FS_NORMAL = $0;
  FSB_EXTENDED = $3;
  LAYERREFRESH = $80;


Function BltBitMap
		 (srcBitMap: pBitMap;
		  srcX: Integer;
		  srcY: Integer;
		  destBitMap: pBitMap;
		  destX: Integer;
		  destY: Integer;
		  sizeX: Integer;
		  sizeY: Integer;
		  minterm: ShortInt;
		  mask: ShortInt;
		  tempA: pInteger): LongInt;

Procedure BltTemplate
		 (source: pInteger;
		  srcX: Integer;
		  srcMod: Integer;
		  destRastPort: pRastPort;
		  destX: Integer;
		  destY: Integer;
		  sizeX: Integer;
		  sizeY: Integer);

Procedure ClearEOL (rastPort: pRastPort);
Procedure ClearScreen (rastPort: pRastPort);
Function TextLength
		 (RastPort: pRastPort;
		  string_: String;
		  count: Integer): Integer;

Procedure Text_
		 (RastPort: pRastPort;
		  string_: String;
		  count: Integer);

Procedure SetFont
		 (RastPortID: pRastPort;
		  textFont: pTextFont);

Function OpenFont (textAttr: pTextAttr): pTextFont;
Procedure CloseFont (textFont: pTextFont);
Function AskSoftStyle (rastPort: pRastPort): LongInt;
Function SetSoftStyle
		 (rastPort: pRastPort;
		  style: LongInt;
		  enable: LongInt): LongInt;

Procedure AddBob
		 (bob: pBob;
		  rastPort: pRastPort);

Procedure AddVSprite
		 (vSprite: pVSprite;
		  rastPort: pRastPort);

Procedure DoCollision (rasPort: pRastPort);
Procedure DrawGList
		 (rastPort: pRastPort;
		  viewPort: pViewPort);

Procedure InitGels
		 (dummyHead: pVSprite;
		  dummyTail: pVSprite;
		  GelsInfo: pGelsInfo);

Procedure InitMasks (vSprite: pVSprite);
Procedure RemIBob
		 (bob: pBob;
		  rastPort: pRastPort;
		  viewPort: pViewPort);

Procedure RemVSprite (vSprite: pVSprite);
Procedure SetCollision
		 (type_: LongInt;
		  routine: Pointer;
		  gelsInfo: pGelsInfo);

Procedure SortGList (rastPort: pRastPort);
Procedure AddAnimOb
		 (obj: pAnimOb;
		  animationKey: ppAnimOb;
		  rastPort: pRastPort);

Procedure Animate
		 (animationKey: ppAnimOb;
		  rastPort: pRastPort);

Function GetGBuffers
		 (animationObj: pAnimOb;
		  rastPort: pRastPort;
		  doubleBuffer: Boolean): Boolean;

Procedure InitGMasks (animationObj: pAnimOb);
Procedure DrawEllipse
		 (rastPort: pRastPort;
		  cx: Integer;
		  cy: Integer;
		  a: Integer;
		  b: Integer);

Function AreaEllipse
		 (rastPort: pRastPort;
		  cx: Integer;
		  cy: Integer;
		  a: Integer;
		  b: Integer): LongInt;

Procedure LoadRGB4
		 (viewPort: pViewPort;
		  colors: pInteger;
		  count: Integer);

Procedure InitRastPort (rastPort: pRastPort);
Procedure InitVPort (viewPort: pViewPort);
Procedure MrgCop (view: pView);
Procedure MakeVPort
		 (view: pView;
		  viewPort: pViewPort);

Procedure LoadView (view: pView);
Procedure WaitBlit;
Procedure SetRast
		 (rastPort: pRastPort;
		  color: ShortInt);

Procedure Move_
		 (rastPort: pRastPort;
		  x: Integer;
		  y: Integer);

Procedure Draw
		 (rastPort: pRastPort;
		  x: Integer;
		  y: Integer);

Function AreaMove
		 (rastPort: pRastPort;
		  x: Integer;
		  y: Integer): LongInt;

Function AreaDraw
		 (rastPort: pRastPort;
		  x: Integer;
		  y: Integer): LongInt;

Function AreaEnd (rastPort: pRastPort): LongInt;
Procedure WaitTOF;
Procedure QBlit (blit: pbltnode);
Procedure InitArea
		 (areaInfo: pAreaInfo;
		  vectorTable: Pointer;
		  vectorTableSize: Integer);

Procedure SetRGB4
		 (viewPort: pViewPort;
		  index: Integer;
		  r: ShortInt;
		  g: ShortInt;
		  b: ShortInt);

Procedure QBSBlit (blit: pbltnode);
Procedure BltClear
		 (memory: Pointer;
		  size: LongInt;
		  flags: LongInt);

Procedure RectFill
		 (rastPort: pRastPort;
		  xl: Integer;
		  yl: Integer;
		  xu: Integer;
		  yu: Integer);

Procedure BltPattern
		 (rastPort: pRastPort;
		  ras: Pointer;
		  xl: Integer;
		  yl: Integer;
		  maxX: Integer;
		  maxY: Integer;
		  fillBytes: Integer);

Function ReadPixel
		 (rastPort: pRastPort;
		  x: Integer;
		  y: Integer): LongInt;

Function WritePixel
		 (rastPort: pRastPort;
		  x: Integer;
		  y: Integer): LongInt;

Function Flood
		 (rastPort: pRastPort;
		  mode: LongInt;
		  x: Integer;
		  y: Integer): Boolean;

Procedure PolyDraw
		 (rastPort: pRastPort;
		  count: Integer;
		  polyTable: pInteger);

Procedure SetAPen
		 (rastPort: pRastPort;
		  pen: ShortInt);

Procedure SetBPen
		 (rastPort: pRastPort;
		  pen: ShortInt);

Procedure SetDrMd
		 (rastPort: pRastPort;
		  drawMode: ShortInt);

Procedure InitView (view: pView);
Procedure CBump (copperList: pUCopList);
Procedure CMove_
		 (copperList: pUCopList;
		  destination: Pointer;
		  data: Integer);

Procedure CWait_
		 (copperList: pUCopList;
		  x: Integer;
		  y: Integer);

Function VBeamPos: LongInt;
Procedure InitBitMap
		 (bitMap: pBitMap;
		  depth: ShortInt;
		  width: Integer;
		  height: Integer);

Procedure ScrollRaster
		 (rastPort: pRastPort;
		  dX: Integer;
		  dY: Integer;
		  minx: Integer;
		  miny: Integer;
		  maxx: Integer;
		  maxy: Integer);

Procedure WaitBOVP (viewport: pViewPort);
Function GetSprite
		 (simplesprite: pSimpleSprite;
		  num: Integer): Integer;

Procedure FreeSprite (num: Integer);
Procedure ChangeSprite
		 (vp: pViewPort;
		  simplesprite: pSimpleSprite;
		  data: Pointer);

Procedure MoveSprite
		 (viewport: pViewPort;
		  simplesprite: pSimpleSprite;
		  x: Integer;
		  y: Integer);

Procedure LockLayerRom (layer: pLayer);
Procedure UnlockLayerRom (layer: pLayer);
Procedure SyncSBitMap (l: pLayer);
Procedure CopySBitMap (l: pLayer);
Procedure OwnBlitter;
Procedure DisownBlitter;
Procedure InitTmpRas
		 (tmpras: pTmpRas;
		  buff: Pointer;
		  size: LongInt);

Procedure AskFont
		 (rastPort: pRastPort;
		  textAttr: pTextAttr);

Procedure AddFont (textFont: pTextFont);
Procedure RemFont (textFont: pTextFont);
Function AllocRaster
		 (width: Integer;
		  height: Integer): pShortInt;

Procedure FreeRaster
		 (planeptr: pShortInt;
		  width: Integer;
		  height: Integer);

Procedure AndRectRegion
		 (rgn: pRegion;
		  rect: pRectangle);

Function OrRectRegion
		 (rgn: pRegion;
		  rect: pRectangle): Boolean;

Function NewRegion: pRegion;
Function ClearRectRegion
		 (rgn: pRegion;
		  rect: pRectangle): Boolean;

Procedure ClearRegion (rgn: pRegion);
Procedure DisposeRegion (rgn: pRegion);
Procedure FreeVPortCopLists (viewport: pViewPort);
Procedure FreeCopList (coplist: pCopList);
Procedure ClipBlit
		 (srcrp: pRastPort;
		  srcX: Integer;
		  srcY: Integer;
		  destrp: pRastPort;
		  destX: Integer;
		  destY: Integer;
		  sizeX: Integer;
		  sizeY: Integer;
		  minterm: ShortInt);

Function XorRectRegion
		 (rgn: pRegion;
		  rect: pRectangle): Boolean;

Procedure FreeCprList (cprlist: pcprlist);
Function GetColorMap (entries: LongInt): pColorMap;
Procedure FreeColorMap (colormap: pColorMap);
Function GetRGB4
		 (colormap: pColorMap;
		  entry: LongInt): LongInt;

Procedure ScrollVPort (vp: pViewPort);
Function UCopperListInit
		 (copperlist: pUCopList;
		  num: Integer): pCopList;

Procedure FreeGBuffers
		 (animationObj: pAnimOb;
		  rastPort: pRastPort;
		  doubleBuffer: Boolean);

Function BltBitMapRastPort
		 (srcbm: pBitMap;
		  srcx: Integer;
		  srcy: Integer;
		  destrp: pRastPort;
		  destX: Integer;
		  destY: Integer;
		  sizeX: Integer;
		  sizeY: Integer;
		  minterm: ShortInt): Boolean;

Function OrRegionRegion
		 (src: pRegion;
		  dst: pRegion): Boolean;

Function XorRegionRegion
		 (src: pRegion;
		  dst: pRegion): Boolean;

Function AndRegionRegion
		 (src: pRegion;
		  dst: pRegion): Boolean;

Procedure SetRGB4CM
		 (cm: pColorMap;
		  i: Integer;
		  r: ShortInt;
		  g: ShortInt;
		  b: ShortInt);

Procedure BltMaskBitMapRastPort
		 (srcbm: pBitMap;
		  srcx: Integer;
		  srcy: Integer;
		  destrp: pRastPort;
		  destX: Integer;
		  destY: Integer;
		  sizeX: Integer;
		  sizeY: Integer;
		  minterm: ShortInt;
		  bltmask: Pointer);

Function AttemptLockLayerRom (layer: pLayer): Boolean;


Function AreaCircle
		 (rastPort: pRastPort;
		  cx: Integer;
		  cy: Integer;
		  r: Integer): LongInt;

Procedure DrawCircle
		 (rastPort: pRastPort;
		  cx: Integer;
		  cy: Integer;
		  r: Integer);

Procedure SetOPen
		 (w: pRastPort;
		  c: ShortInt);

Procedure SetWrMsk
		 (w: pRastPort;
		  m: ShortInt);

Procedure SetDrPt
		 (w: pRastPort;
		  p: Integer);

Procedure SetAfPt
		 (w: pRastPort;
		  p: pInteger;
		  n: ShortInt);

Function RASSIZE
		 (w: Integer;
		  h: Integer): LongInt;

Procedure CINIT
		 (copperlist: pUCopList;
		  num: Integer);

Procedure CMOVE
		 (copperList: pUCopList;
		  var destination: Pointer;
		  data: Integer);

Procedure CWAIT
		 (copperList: pUCopList;
		  x: Integer;
		  y: Integer);

Procedure CEND (copperList: pUCopList);
Procedure BNDRYOFF (w: pRastPort);
Procedure OFF_DISPLAY (custom: pCustom);
Procedure ON_DISPLAY (custom: pCustom);
Procedure OFF_SPRITE (custom: pCustom);
Procedure ON_SPRITE (custom: pCustom);
Procedure OFF_VBLANK (custom: pCustom);
Procedure ON_VBLANK (custom: pCustom);
Procedure InitAnimate (var animkey: pAnimOb);
Procedure RemBob (bob: pVSprite);


End.
