{*******************************************************} { } { Turbo Pascal Version 6.0 } { Graph Interface Unit } { } { Copyright (C) 1987,90 Borland International } { } {*******************************************************} unit Graph; interface const { GraphResult error return codes: } grOk = 0; grNoInitGraph = -1; grNotDetected = -2; grFileNotFound = -3; grInvalidDriver = -4; grNoLoadMem = -5; grNoScanMem = -6; grNoFloodMem = -7; grFontNotFound = -8; grNoFontMem = -9; grInvalidMode = -10; grError = -11; { generic error } grIOerror = -12; grInvalidFont = -13; grInvalidFontNum = -14; { define graphics drivers } CurrentDriver = -128; { passed to GetModeRange } Detect = 0; { requests autodetection } CGA = 1; MCGA = 2; EGA = 3; EGA64 = 4; EGAMono = 5; IBM8514 = 6; HercMono = 7; ATT400 = 8; VGA = 9; PC3270 = 10; { graphics modes for each driver } CGAC0 = 0; { 320x200 palette 0: LightGreen, LightRed, Yellow; 1 page } CGAC1 = 1; { 320x200 palette 1: LightCyan, LightMagenta, White; 1 page } CGAC2 = 2; { 320x200 palette 2: Green, Red, Brown; 1 page } CGAC3 = 3; { 320x200 palette 3: Cyan, Magenta, LightGray; 1 page } CGAHi = 4; { 640x200 1 page } MCGAC0 = 0; { 320x200 palette 0: LightGreen, LightRed, Yellow; 1 page } MCGAC1 = 1; { 320x200 palette 1: LightCyan, LightMagenta, White; 1 page } MCGAC2 = 2; { 320x200 palette 2: Green, Red, Brown; 1 page } MCGAC3 = 3; { 320x200 palette 3: Cyan, Magenta, LightGray; 1 page } MCGAMed = 4; { 640x200 1 page } MCGAHi = 5; { 640x480 1 page } EGALo = 0; { 640x200 16 color 4 page } EGAHi = 1; { 640x350 16 color 2 page } EGA64Lo = 0; { 640x200 16 color 1 page } EGA64Hi = 1; { 640x350 4 color 1 page } EGAMonoHi = 3; { 640x350 64K on card, 1 page; 256K on card, 2 page } HercMonoHi = 0; { 720x348 2 page } ATT400C0 = 0; { 320x200 palette 0: LightGreen, LightRed, Yellow; 1 page } ATT400C1 = 1; { 320x200 palette 1: LightCyan, LightMagenta, White; 1 page } ATT400C2 = 2; { 320x200 palette 2: Green, Red, Brown; 1 page } ATT400C3 = 3; { 320x200 palette 3: Cyan, Magenta, LightGray; 1 page } ATT400Med = 4; { 640x200 1 page } ATT400Hi = 5; { 640x400 1 page } VGALo = 0; { 640x200 16 color 4 page } VGAMed = 1; { 640x350 16 color 2 page } VGAHi = 2; { 640x480 16 color 1 page } PC3270Hi = 0; { 720x350 1 page } IBM8514LO = 0; { 640x480 256 colors } IBM8514HI = 1; { 1024x768 256 colors } { Colors for SetPalette and SetAllPalette: } 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; { colors for 8514 to set standard EGA colors w/o knowing their values } EGABlack = 0; { dark colors } EGABlue = 1; EGAGreen = 2; EGACyan = 3; EGARed = 4; EGAMagenta = 5; EGABrown = 20; EGALightgray = 7; EGADarkgray = 56; { light colors } EGALightblue = 57; EGALightgreen = 58; EGALightcyan = 59; EGALightred = 60; EGALightmagenta = 61; EGAYellow = 62; EGAWhite = 63; { Line styles and widths for Get/SetLineStyle: } SolidLn = 0; DottedLn = 1; CenterLn = 2; DashedLn = 3; UserBitLn = 4; { User-defined line style } NormWidth = 1; ThickWidth = 3; { Set/GetTextStyle constants: } DefaultFont = 0; { 8x8 bit mapped font } TriplexFont = 1; { "Stroked" fonts } SmallFont = 2; SansSerifFont = 3; GothicFont = 4; HorizDir = 0; { left to right } VertDir = 1; { bottom to top } UserCharSize = 0; { user-defined char size } { Clipping constants: } ClipOn = true; ClipOff = false; { Bar3D constants: } TopOn = true; TopOff = false; { Fill patterns for Get/SetFillStyle: } EmptyFill = 0; { fills area in background color } SolidFill = 1; { fills area in solid fill color } LineFill = 2; { --- fill } LtSlashFill = 3; { /// fill } SlashFill = 4; { /// fill with thick lines } BkSlashFill = 5; { \\\ fill with thick lines } LtBkSlashFill = 6; { \\\ fill } HatchFill = 7; { light hatch fill } XHatchFill = 8; { heavy cross hatch fill } InterleaveFill = 9; { interleaving line fill } WideDotFill = 10; { Widely spaced dot fill } CloseDotFill = 11; { Closely spaced dot fill } UserFill = 12; { user defined fill } { BitBlt operators for PutImage: } NormalPut = 0; { MOV } { left for 1.0 compatibility } CopyPut = 0; { MOV } XORPut = 1; { XOR } OrPut = 2; { OR } AndPut = 3; { AND } NotPut = 4; { NOT } { Horizontal and vertical justification for SetTextJustify: } LeftText = 0; CenterText = 1; RightText = 2; BottomText = 0; { CenterText = 1; already defined above } TopText = 2; const MaxColors = 15; type PaletteType = record Size : byte; Colors : array[0..MaxColors] of shortint; end; LineSettingsType = record LineStyle : word; Pattern : word; Thickness : word; end; TextSettingsType = record Font : word; Direction : word; CharSize : word; Horiz : word; Vert : word; end; FillSettingsType = record { Pre-defined fill style } Pattern : word; Color : word; end; FillPatternType = array[1..8] of byte; { User defined fill style } PointType = record X, Y : integer; end; ViewPortType = record x1, y1, x2, y2 : integer; Clip : boolean; end; ArcCoordsType = record X, Y : integer; Xstart, Ystart : integer; Xend, Yend : integer; end; var GraphGetMemPtr : Pointer; { allows user to steal heap allocation } GraphFreeMemPtr : Pointer; { allows user to steal heap de-allocation } { *** high-level error handling *** } function GraphErrorMsg(ErrorCode : integer) : String; function GraphResult : integer; { *** detection, initialization and crt mode routines *** } procedure DetectGraph(var GraphDriver, GraphMode : integer); function GetDriverName : string; procedure InitGraph(var GraphDriver : integer; var GraphMode : integer; PathToDriver : String); function RegisterBGIfont(Font : pointer) : integer; function RegisterBGIdriver(Driver : pointer) : integer; function InstallUserDriver(DriverFileName : string; AutoDetectPtr : pointer) : integer; function InstallUserFont(FontFileName : string) : integer; procedure SetGraphBufSize(BufSize : word); function GetMaxMode : integer; procedure GetModeRange(GraphDriver : integer; var LoMode, HiMode : integer); function GetModeName(GraphMode : integer) : string; procedure SetGraphMode(Mode : integer); function GetGraphMode : integer; procedure GraphDefaults; procedure RestoreCrtMode; procedure CloseGraph; function GetX : integer; function GetY : integer; function GetMaxX : integer; function GetMaxY : integer; { *** Screen, viewport, page routines *** } procedure ClearDevice; procedure SetViewPort(x1, y1, x2, y2 : integer; Clip : boolean); procedure GetViewSettings(var ViewPort : ViewPortType); procedure ClearViewPort; procedure SetVisualPage(Page : word); procedure SetActivePage(Page : word); { *** point-oriented routines *** } procedure PutPixel(X, Y : integer; Pixel : word); function GetPixel(X, Y : integer) : word; { *** line-oriented routines *** } procedure SetWriteMode(WriteMode : integer); procedure LineTo(X, Y : integer); procedure LineRel(Dx, Dy : integer); procedure MoveTo(X, Y : integer); procedure MoveRel(Dx, Dy : integer); procedure Line(x1, y1, x2, y2 : integer); procedure GetLineSettings(var LineInfo : LineSettingsType); procedure SetLineStyle(LineStyle : word; Pattern : word; Thickness : word); { *** polygon, fills and figures *** } procedure Rectangle(x1, y1, x2, y2 : integer); procedure Bar(x1, y1, x2, y2 : integer); procedure Bar3D(x1, y1, x2, y2 : integer; Depth : word; Top : boolean); procedure DrawPoly(NumPoints : word; var PolyPoints); procedure FillPoly(NumPoints : word; var PolyPoints); procedure GetFillSettings(var FillInfo : FillSettingsType); procedure GetFillPattern(var FillPattern : FillPatternType); procedure SetFillStyle(Pattern : word; Color : word); procedure SetFillPattern(Pattern : FillPatternType; Color : word); procedure FloodFill(X, Y : integer; Border : word); { *** arc, circle, and other curves *** } procedure Arc(X, Y : integer; StAngle, EndAngle, Radius : word); procedure GetArcCoords(var ArcCoords : ArcCoordsType); procedure Circle(X, Y : integer; Radius : word); procedure Ellipse(X, Y : integer; StAngle, EndAngle : word; XRadius, YRadius : word); procedure FillEllipse(X, Y : integer; XRadius, YRadius : word); procedure GetAspectRatio(var Xasp, Yasp : word); procedure SetAspectRatio(Xasp, Yasp : word); procedure PieSlice(X, Y : integer; StAngle, EndAngle, Radius : word); procedure Sector(X, Y : Integer; StAngle, EndAngle, XRadius, YRadius : word); { *** color and palette routines *** } procedure SetBkColor(ColorNum : word); procedure SetColor(Color : word); function GetBkColor : word; function GetColor : word; procedure SetAllPalette(var Palette); procedure SetPalette(ColorNum : word; Color : shortint); procedure GetPalette(var Palette : PaletteType); function GetPaletteSize : integer; procedure GetDefaultPalette(var Palette : PaletteType); function GetMaxColor : word; procedure SetRGBPalette(ColorNum, RedValue, GreenValue, BlueValue : integer); { *** bit-image routines *** } function ImageSize(x1, y1, x2, y2 : integer) : word; procedure GetImage(x1, y1, x2, y2 : integer; var BitMap); procedure PutImage(X, Y : integer; var BitMap; BitBlt : word); { *** text routines *** } procedure GetTextSettings(var TextInfo : TextSettingsType); procedure OutText(TextString : string); procedure OutTextXY(X, Y : integer; TextString : string); procedure SetTextJustify(Horiz, Vert : word); procedure SetTextStyle(Font, Direction : word; CharSize : word); procedure SetUserCharSize(MultX, DivX, MultY, DivY : word); function TextHeight(TextString : string) : word; function TextWidth(TextString : string) : word;