mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 05:59:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			173 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
{
 | 
						|
    This file is part of the Free Pascal run time library.
 | 
						|
    Copyright (c) 1999-2000 by the Free Pascal development team
 | 
						|
 | 
						|
    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.
 | 
						|
 | 
						|
 **********************************************************************}
 | 
						|
 | 
						|
type
 | 
						|
  PVideoMode = ^TVideoMode;
 | 
						|
  TVideoMode = record
 | 
						|
    Col,Row : Word;
 | 
						|
    Color   : Boolean;
 | 
						|
  end;
 | 
						|
  TVideoModeSelector = function (const VideoMode: TVideoMode; Params: Longint): Boolean;
 | 
						|
 | 
						|
  TVideoCell = Word;
 | 
						|
  PVideoCell = ^TVideoCell;
 | 
						|
 | 
						|
  TVideoBuf = array[0..32759] of TVideoCell;
 | 
						|
  PVideoBuf = ^TVideoBuf;
 | 
						|
 | 
						|
  TVideoDriver = Record
 | 
						|
    InitDriver        : Procedure;
 | 
						|
    DoneDriver        : Procedure;
 | 
						|
    UpdateScreen      : Procedure(Force : Boolean);
 | 
						|
    ClearScreen       : Procedure;
 | 
						|
    SetVideoMode      : Function (Const Mode : TVideoMode) : Boolean;
 | 
						|
    GetVideoModeCount : Function : Word;
 | 
						|
    GetVideoModeData  : Function(Index : Word; Var Data : TVideoMode) : Boolean;
 | 
						|
    SetCursorPos      : procedure (NewCursorX, NewCursorY: Word);
 | 
						|
    GetCursorType     : function : Word;
 | 
						|
    SetCursorType     : procedure (NewType: Word);
 | 
						|
    GetCapabilities   : Function : Word;
 | 
						|
  end;
 | 
						|
 | 
						|
const
 | 
						|
  { Foreground and background color constants }
 | 
						|
  Black         = 0;
 | 
						|
  Blue          = 1;
 | 
						|
  Green         = 2;
 | 
						|
  Cyan          = 3;
 | 
						|
  Red           = 4;
 | 
						|
  Magenta       = 5;
 | 
						|
  Brown         = 6;
 | 
						|
  LightGray     = 7;
 | 
						|
 | 
						|
  { Foreground color constants }
 | 
						|
  DarkGray      = 8;
 | 
						|
  LightBlue     = 9;
 | 
						|
  LightGreen    = 10;
 | 
						|
  LightCyan     = 11;
 | 
						|
  LightRed      = 12;
 | 
						|
  LightMagenta  = 13;
 | 
						|
  Yellow        = 14;
 | 
						|
  White         = 15;
 | 
						|
 | 
						|
  { Add-in for blinking }
 | 
						|
  Blink         = 128;
 | 
						|
 | 
						|
  { Capabilities bitmask }
 | 
						|
  cpUnderLine     = $0001;
 | 
						|
  cpBlink         = $0002;
 | 
						|
  cpColor         = $0004;
 | 
						|
  cpChangeFont    = $0008;
 | 
						|
  cpChangeMode    = $0010;
 | 
						|
  cpChangeCursor  = $0020;
 | 
						|
 | 
						|
  { Possible cursor types }
 | 
						|
  crHidden        = 0;
 | 
						|
  crUnderLine     = 1;
 | 
						|
  crBlock         = 2;
 | 
						|
  crHalfBlock     = 3;
 | 
						|
 | 
						|
  { Possible error codes }
 | 
						|
  vioOK              = 0;
 | 
						|
  errVioBase         = 1000;
 | 
						|
  errVioInit         = errVioBase + 1; { Initialization error, shouldn't occur on DOS, but may
 | 
						|
                         on Linux }
 | 
						|
  errVioNotSupported = errVioBase + 2; { call to an unsupported function }
 | 
						|
  errVioNoSuchMode   = errVioBase + 3; { No such video mode }
 | 
						|
 | 
						|
const
 | 
						|
  ScreenWidth  : Word = 0;
 | 
						|
  ScreenHeight : Word = 0;
 | 
						|
 | 
						|
var
 | 
						|
  ScreenColor  : Boolean;
 | 
						|
  CursorX,
 | 
						|
  CursorY      : Word;
 | 
						|
  VideoBuf,
 | 
						|
  OldVideoBuf  : PVideoBuf;
 | 
						|
  VideoBufSize : Longint;
 | 
						|
  CursorLines  : Byte;
 | 
						|
 | 
						|
const {The following constants were variables in the past.
 | 
						|
       - Lowascii was set to true if ASCII characters < 32 were available
 | 
						|
       - NoExtendedFrame was set to true if the double with line drawing
 | 
						|
         characters were set to true.
 | 
						|
 | 
						|
      These variables did exist because of VT100 limitations on Unix. However,
 | 
						|
      only part of the character set problem was solved this way. Nowadays, the
 | 
						|
      video unit converts characters to the output character set (which might be
 | 
						|
      VT100) automatically, so the user does not need to worry about it anymore.}
 | 
						|
      LowAscii = true;
 | 
						|
      NoExtendedFrame = false;
 | 
						|
 | 
						|
      FVMaxWidth = 132;
 | 
						|
 | 
						|
Procedure LockScreenUpdate;
 | 
						|
{ Increments the screen update lock count with one.}
 | 
						|
Procedure UnlockScreenUpdate;
 | 
						|
{ Decrements the screen update lock count with one.}
 | 
						|
Function GetLockScreenCount : integer;
 | 
						|
{ Gets the current lock level }
 | 
						|
Function SetVideoDriver (Const Driver : TVideoDriver) : Boolean;
 | 
						|
{ Sets the videodriver to be used }
 | 
						|
Procedure GetVideoDriver (Var Driver : TVideoDriver);
 | 
						|
{ Retrieves the current videodriver }
 | 
						|
 | 
						|
procedure InitVideo;
 | 
						|
{ Initializes the video subsystem }
 | 
						|
procedure DoneVideo;
 | 
						|
{ Deinitializes the video subsystem }
 | 
						|
function GetCapabilities: Word;
 | 
						|
{ Return the capabilities of the current environment }
 | 
						|
procedure ClearScreen;
 | 
						|
{ Clears the screen }
 | 
						|
procedure UpdateScreen(Force: Boolean);
 | 
						|
{ Force specifies whether the whole screen has to be redrawn, or (if target
 | 
						|
  platform supports it) its parts only }
 | 
						|
procedure SetCursorPos(NewCursorX, NewCursorY: Word);
 | 
						|
{ Position the cursor to the given position }
 | 
						|
function GetCursorType: Word;
 | 
						|
{ Return the cursor type: Hidden, UnderLine or Block }
 | 
						|
procedure SetCursorType(NewType: Word);
 | 
						|
{ Set the cursor to the given type }
 | 
						|
 | 
						|
procedure GetVideoMode(var Mode: TVideoMode);
 | 
						|
{ Return dimensions of the current video mode }
 | 
						|
Function SetVideoMode(Const Mode: TVideoMode) : Boolean;
 | 
						|
{ Set video-mode to have Mode dimensions, may return errVioNoSuchMode }
 | 
						|
Function GetVideoModeCount : Word;
 | 
						|
{ Get the number of video modes supported by this driver }
 | 
						|
Function GetVideoModeData(Index : Word; Var Data: TVideoMode) : Boolean;
 | 
						|
{ Get the data for Video mode Index. Index is zero based. }
 | 
						|
 | 
						|
type
 | 
						|
  TErrorHandlerReturnValue = (errRetry, errAbort, errContinue);
 | 
						|
  { errRetry = retry the operation,
 | 
						|
    errAbort = abort, return error code,
 | 
						|
    errContinue = abort, without returning errorcode }
 | 
						|
 | 
						|
  TErrorHandler = function (Code: Longint; Info: Pointer): TErrorHandlerReturnValue;
 | 
						|
    { ErrorHandler is the standard procedural interface for all error functions.
 | 
						|
      Info may contain any data type specific to the error code passed to the
 | 
						|
      function. }
 | 
						|
 | 
						|
function DefaultErrorHandler(AErrorCode: Longint; AErrorInfo: Pointer): TErrorHandlerReturnValue;
 | 
						|
{ Default error handler, simply sets error code, and returns errContinue }
 | 
						|
 | 
						|
const
 | 
						|
  errOk              = 0;
 | 
						|
  ErrorCode: Longint = ErrOK;
 | 
						|
  ErrorInfo: Pointer = nil;
 | 
						|
  ErrorHandler: TErrorHandler = @DefaultErrorHandler;
 | 
						|
 |