[Back to EGAVGA SWAG index]  [Back to Main SWAG index]  [Original]

UNIT GI;

INTERFACE
{---------------------------------------------------------------------------}
  USES CRT,GRAPH;
{---------------------------------------------------------------------------}
  CONST
    XMax=640;
    YMax=480;
{---------------------------------------------------------------------------}
  TYPE
    Location = OBJECT
      X:1..XMax;
      Y:1..YMax;
    END;{Location}
    GUI=OBJECT(Location)
      Coor:Location;
      PROCEDURE SetupScreen(Path:STRING);
        {initialize the screen to graphic mode
         Parameter: in: path
                    Out: none
         precondtion: none
         postconditon: screen initialize in graphic mode
                       or print error msg}
      PROCEDURE WriteInt( Num:LongInt;
                          Field:Integer);
        {write integer data in graphic mode at x,y and with field
         parameter: IN: num,field
                    OUT: none
         pre: in graphic mode
         Post: num displayed with field }
      PROCEDURE WriteReal( Num:Real;
                           DecField:Integer);
        {write integer data in graphic mode at x,y and with Integer field
         and decimal field
         parameter: IN: num,Intfield,Decfield
                    OUT: none
         pre: in graphic mode
         Post: num displayed with integer field and decimal field }
      PROCEDURE Init( NewX,NewY:Integer;
                      Path:STRING);
        {initialize the parameters
         Parameter: IN: NewX,NewY
                    OUT: None
         Pre: none
         Post: NewX=> X NewY=> Y}
      PROCEDURE GWrite( Prompt: STRING);
        {write a text string on the screen
         Parameter: IN: Prompt
                    OUT: none
         Pre: 0<Coor.X<640, 0<Coor.Y<480
         Post: Prompt outputed on screen}
      PROCEDURE NxtLn;
        {put the cursor at the beginning of the next line
         Parameter: IN: none
                    OUT: none
         Pre: None
         Post: Coor.Y incremented }
      PROCEDURE ChkPos( Prompt:STRING);
        {put the cursor at the end of the msg
         Parameter: IN: Prompt
                    OUT: none
         Pre: none
         Post: Coor.X incremented }
    END;
{---------------------------------------------------------------------------}
IMPLEMENTATION
{---------------------------------------------------------------------------}
  PROCEDURE GUI.SetupScreen;
    {initialize the screen to graphic mode
     Parameter: in: path
                Out: none
     precondtion: none
     postconditon: screen initialize in graphic mode
                   or print error msg}
    VAR
     GDriver,GMes,GError:Integer;
    BEGIN{SetupScreen}
      REPEAT
        GDriver:=Detect;
        InitGraph(GDriver,GMes, Path);
        GError:=GraphResult;
        IF GError <>GrOK THEN
          BEGIN
            Writeln ('Graphics error: ',GraphErrorMsg(GError));
            Readln;
          END;
      UNTIL GError=grOK;
    END;{SetupScreen}
{---------------------------------------------------------------------------}
  PROCEDURE GUI.Init;
    {initialize the parameters
     Parameter: IN: NewX,NewY,Patn
                OUT: None
     Pre: none
     Post: NewX=> X NewY=> Y screen in graphic mode}
    BEGIN{Init}
      X:=NewX;
      Y:=NewY;
      Coor.X:=NewX;
      Coor.Y:=NewY;
      SetupScreen('C:\TP\BGI');
    END;
{---------------------------------------------------------------------------}
  PROCEDURE GUI.ChkPos;
    {put the cursor at the end of the msg
     Parameter: IN: none
                OUT: none
     Pre: none
     Post: Coor.X incremented or Coor.X:=X }
    BEGIN{NxtPos}
      IF Coor.X<(640-TextWidth(Prompt+'x')) THEN
        INC(Coor.X,TextWidth(Prompt))
      ELSE
        NxtLn;
    END;{NxtPos}
{---------------------------------------------------------------------------}
  PROCEDURE GUI.GWrite;
    {write a text string on the screen
     Parameter: IN: Prompt
                OUT: none
     Pre: 0<Coor.X<640, 0<Coor.Y<480
     Post: Prompt outputed on screen}
    VAR
      K:Integer;
    BEGIN{GWrite}
      FOR K:= 1 TO Length(Prompt) DO
        BEGIN{K}
          OutTextXY(Coor.X,Coor.Y,Prompt[K]);
          ChkPos(Prompt[K]);
        END;{K}
    END;{GWrite}
{---------------------------------------------------------------------------}
  PROCEDURE GUI.NxtLn;
    {put the cursor at the beginning of the next line
     Parameter: IN: none
                OUT: none
     Pre: None
     Post: Coor.Y incremented }
    BEGIN{NxtLn}
      Coor.X:=X;
      IF Coor.Y<(480-3*TextHeight('X')) THEN
        INC(Coor.Y,TextHeight('X'))
      ELSE
        BEGIN{ELSE}
          INC(Coor.Y,TextHeight('X'));
          Write(#7);
          OutTextXY(Coor.X,Coor.Y,'Press Enter to continue...');
          Readln;
          ClearDevice;
          Coor.Y:=Y;
        END;{ELSE}
    END;{NxtLn}
{---------------------------------------------------------------------------}
  PROCEDURE GUI.WriteInt;
    {write integer data in graphic mode at x,y and with field
     parameter: IN: x,y,num,field
                OUT: none
     pre: in graphic mode
     Post: num displayed with field at x,y}
    VAR
      Temp:STRING;
    BEGIN{WriteInt}
      Str(Num:Field,Temp);
      GWrite(Temp);
    END;{WriteInt}
{---------------------------------------------------------------------------}
  PROCEDURE GUI.WriteReal;
    {write integer data in graphic mode at x,y and with Integer field
     and decimal field
     parameter: IN: x,y,num,Decfield
                OUT: none
     pre: in graphic mode,DecField<9
     Post: num displayed with decimal field at x,y}
    VAR
      K,TempNum1:Integer;
      TempNum2:Real;
      TempInt,TempDec:STRING;
    BEGIN{WriteReal}
      TempNum1:=Abs(Trunc(Num));
      Str(TempNum1,TempInt);
      TempNum2:=Abs(Num)-TempNum1;
      FOR K:= 1 TO DecField DO
        BEGIN
          TempNum2:=TempNum2*10;
          Str(Trunc(TempNum2),TempDec);
        END;
      IF Num<0 THEN
        GWrite('-'+TempInt+'.'+TempDec)
      ELSE
        GWrite(TempInt+'.'+TempDec);
    END;{WriteReal}
{---------------------------------------------------------------------------}
BEGIN
END.


[Back to EGAVGA SWAG index]  [Back to Main SWAG index]  [Original]