{-------------------------------------------------------------------------}
{ graph.imp was designed to be read by p2c. It's a direct replacement for }
{ the graph unit defined in turbo.imp.                                    }
{-------------------------------------------------------------------------}
{ This interface declaration isn't totaly compatible with graph.tpu but   }
{ mainly compatible with the BCC graphics.lib. Check the p2c output to    }
{ be sure every thing wents right, most times I changed word to integer.  }
{-------------------------------------------------------------------------}

unit graph;

interface

const
  grOk               = 0;
  grNoInitGraph      = -1;
  grNotDetected      = -2;
  grFileNotFound     = -3;
  grInvalidDriver    = -4;
  grNoLoadMem        = -5;
  grNoScanMem        = -6;
  grNoFloodMem       = -7;
  grFontNotFound     = -8;
  grNoFontMem        = -9;
  grInvalidMode      = -10;
  grError            = -11;
  grIOerror          = -13;
  grInvalidFontNum   = -14;

  DETECT = 0;
  CGA = 1;
  MCGA = 2;
  EGA = 3;
  EGA64 = 4;
  EGAMONO = 5;
  IBM8514 = 6;
  HERCMONO = 7;
  ATT400 = 8;
  VGA = 9;
  PC3270 = 10;
  CurrentDriver = -128;

  CGAC0 = 0;
  CGAC1 = 1;
  CGAC2 = 2;
  CGAC3 = 3;
  CGAHI = 4;
  MCGAC0 = 0;
  MCGAC1 = 1;
  MCGAC2 = 2;
  MCGAC3 = 3;
  MCGAMED = 4;
  MCGAHI = 5;
  EGALO = 0;
  EGAHO = 1;
  EGA64LO = 0;
  EGA64HO = 1;
  EGAMONOHI = 3;
  HERCMONOHI = 0;
  ATT400C0 = 0;
  ATT400C1 = 1;
  ATT400C2 = 2;
  ATT400C3 = 3;
  ATT400MED = 4;
  ATT400HI = 5;
  VGALO = 0;
  VGAMED = 1;
  VGAHI = 2;
  PC3270HI = 0;
  IBM8514LO = 0;
  IBM8514HI = 1;

  BLACK = 0;
  BLUE = 1;
  GREEN = 2;
  CYAN = 3;
  RED = 4;
  MAGENTA = 5;
  BROWN = 6;
  LIGHTGRAY = 7;
  DARKGRAY = 8;
  LIGHTBLUE = 9;
  LIGHTGREEN = 10;
  LIGHTCYAN = 11;
  LIGHTRED = 12;
  LIGHTMAGENTA = 13;
  YELLOW = 14;
  WHITE = 15;

  EGABLACK = 0;
  EGABLUE = 1;
  EGAGREEN = 2;
  EGACYAN = 3;
  EGARED = 4;
  EGAMAGENTA = 5;
  EGABROWN = 20;
  EGALIGHTGRAY = 7;
  EGADARKGRAY = 56;
  EGALIGHTBLUE = 57;
  EGALIGHTGREEN = 58;
  EGALIGHTCYAN = 59;
  EGALIGHTRED = 60;
  EGALIGHTMAGENTA = 61;
  EGAYELLOW = 62;
  EGAWHITE = 63;

  SolidLn = 0;
  DottedLn = 1;
  CenterLn = 2;
  DashedLn = 3;
  UserBitLn = 4;

  NormWidth = 1;
  ThickWidth = 3;


type
  ArcCoordsType = record
		    x, y: integer;
		    xstart, ystart,
		    xend, yend: integer;
		  end;

const
  MaxColors = 15;
type
  PaletteType = record
		  size: byte;
		  colors: array[0..MaxColors] of shortint;
		end;
  FillPatternType = array[1..8] of byte;
  FillSettingsType = record
		       pattern: integer;
		       color: integer;
		     end;
  LineSettingsType = record
		       linestyle: integer;
		       Pattern: word;
		       thickness: integer;
		     end;
  TextSettingsType = record
		       font: integer;
		       direction: integer;
		       charsize: integer;
		       horiz: integer;
		       vert: integer;
		     end;
  ViewPortType = record
		   x1, y1, x2, y2: integer;
		   clip: integer;
		 end;

  PointType    = record
		   x, y: integer;
		 end;


const
  DefaultFont=0;
  TriplexFont=1;
  SmallFont=2;
  SansSerifFont=3;
  GothicFont=4;
  ScriptFont=5;
  SimplexFont=6;
  TriplexScrFont=7;
  ComplexFont=8;
  EuropeanFont=9;
  BoldFont=10;

  HorizDir=0;
  VertDir=1;

  UserCharSize=0;

const
  LeftText = 0;
  CenterText = 1;
  RightText = 2;
  BottomText = 0;
  TopText = 2;

const
  ClipOn = true;
  ClipOff = false;
  TopOn = true;
  TopOff = false;

const
  EmptyFill = 0;
  SolidFill = 1;
  LineFill = 2;
  LtSlashFill = 3;
  SlashFill = 4;
  BkSlashFill = 5;
  LtBkSlashFill = 6;
  HatchFill = 7;
  XHatchFill = 8;
  InterleaveFill = 9;
  WideDotFill = 10;
  CloseDotFill = 11;
  UserFill = 17;

const
  NormalPut = 0;
  CopyPut = 0;
  XORPut = 1;
  OrPut = 2;
  AndPut = 3;
  NotPut = 4;

procedure arc(X, Y: integer; StAngle, EndAngle, Radius: integer);
procedure bar(x1, y1, x2, y2: integer);
procedure bar3d(x1, y1, x2, y2: integer; Depth: integer; Top: integer);
procedure circle(X, Y: integer; Radius: integer);
procedure cleardevice;
procedure clearviewport;
procedure closegraph;
procedure detectgraph(var GraphDriver, GraphMode: integer);
procedure drawpoly(NumPoints: integer; var PolyPoints);
procedure ellipse(X, Y: integer; StAngle, EndAngle: integer;
		  XRadius, YRadius: integer);
procedure fillellipse(X, Y: integer; XRadius, YRadius: integer);
procedure fillpoly(NumPoints: integer; var PolyPoints);
procedure floodfill(x, y: integer; Border: word);
procedure getarccoords(var ArcCoords: ArcCoordsType);
procedure getaspectratio(var Xasp, Yasp: word);
function  getbkcolor: integer;
function  getcolor: integer;
function  GetDefaultPalette(var Palette: PaletteType): PaletteType;
function  GetDriverName: string;
procedure getfillpattern(var FillPattern: FillPatternType);
procedure getfillsettings(var FillInfo: FillSettingsType);
function  getgraphmode: integer;
procedure getimage(x1, y1, x2, y2: integer; var BitMap);
procedure getlinesettings(var LineInfo: LineSettingsType);
function  getmaxcolor: integer;
function  getmaxmode: integer;
function  getmaxx: integer;
function  getmaxy: integer;
function  GetModeName(ModeNumber: integer): string;
procedure getmoderange(GraphDriver: integer; var LoMode, HiMode: integer);
procedure getpalette(var Palette: PaletteType);
function  getpalettesize: integer;
function  getpixel(X,Y: integer): integer;
procedure gettextsettings(var TextInfo: TextSettingsType);
procedure getviewsettings(var ViewPort: ViewPortType);
function  getx: integer;
function  gety: integer;
procedure graphdefaults;
function  GraphErrorMsg(ErrorCode: integer): string;
function  graphresult: integer;
function  imagesize(x1, y1, x2, y2: integer): word;
procedure initgraph(var GraphDriver: integer; var GraphMode: integer;
		    PathToDriver: string);
function  InstallUserDriver(Name: string; AutoDetectPtr: pointer): integer;
function  InstallUserFont(FontFileName: string): integer;
procedure line(x1, y1, x2, y2: integer);
procedure linerel(Dx, Dy: integer);
procedure lineto(x, y: integer);
procedure moverel(Dx, Dy: integer);
procedure moveto(x, y: integer);
procedure outtext(TextString: string);
procedure outtextxy(X,Y: integer; TextString: string);
procedure pieslice(x, y: integer; StAngle, EndAngle, Radius: integer);
procedure putimage(x, y: integer; var BitMap; BitBlt: integer);
procedure putpixel(x, y: integer; Pixel: integer);
procedure rectangle(x1, y1, x2, y2: integer);
function  RegisterBGIdriver(driver: pointer): integer;
function  RegisterBGIfont(font: pointer): integer;
procedure restorecrtmode;
procedure sector(x, y: integer; StAngle, EndAngle, XRadius, YRadius: integer);
procedure setactivepage(Page: integer);
procedure setallpalette(var Palette);
procedure setaspectratio(Xasp, Yasp: integer);
procedure setbkcolor(ColorNum: integer);
procedure setcolor(Color: integer);
procedure setfillpattern(Pattern: FillPatternType; Color: integer);
procedure setfillstyle(Pattern: integer; Color: integer);
procedure setgraphbufsize(BufSize: word);
procedure setgraphmode(Mode: integer);
procedure setlinestyle(LineStyle: integer; Pattern: word; Thickness: integer);
procedure setpalette(ColorNum: integer; Color: integer);
procedure setrgbpalette(ColorNum, RedValue, GreenValue, BlueValue: integer);
procedure settextjustify(Horiz, Vert: integer);
procedure settextstyle(Font, Direction, CharSize: integer);
procedure setusercharsize(MultX, DivX, MultY, DivY: integer);
procedure setviewport(x1, y1, x2, y2: integer; Clip: integer);
procedure setvisualpage(Page: integer);
procedure setwritemode(WriteMode: integer);
function  textheight(TextString: string): integer;
function  textwidth(TextString: string): integer;


end;
