Ver código fonte

+ first adds for Use_API define

pierre 24 anos atrás
pai
commit
3fe44ab904
13 arquivos alterados com 697 adições e 174 exclusões
  1. 28 2
      fv/app.pas
  2. 291 9
      fv/drivers.pas
  3. 4 3
      fv/gfvgraph.pas
  4. 8 1
      fv/menus.pas
  5. 11 1
      fv/platform.inc
  6. 4 70
      fv/views.pas
  7. 28 2
      fvision/app.pas
  8. 291 9
      fvision/drivers.pas
  9. 4 3
      fvision/gfvgraph.pas
  10. 8 1
      fvision/menus.pas
  11. 5 2
      fvision/objects.pas
  12. 11 1
      fvision/platform.inc
  13. 4 70
      fvision/views.pas

+ 28 - 2
fv/app.pas

@@ -404,6 +404,11 @@ CONST
                                 IMPLEMENTATION
 {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
 
+{$ifdef Use_API}
+  uses
+    Video,Mouse;
+{$endif Use_API}
+
 {***************************************************************************}
 {                        PRIVATE DEFINED CONSTANTS                          }
 {***************************************************************************}
@@ -941,6 +946,7 @@ END;
 {---------------------------------------------------------------------------}
 PROCEDURE TProgram.InitScreen;
 BEGIN
+{$ifndef Use_API}
    If (Lo(ScreenMode) <> smMono) Then Begin           { Coloured mode }
      If (ScreenMode AND smFont8x8 <> 0) Then
        ShadowSize.X := 1 Else                         { Single bit shadow }
@@ -955,6 +961,23 @@ BEGIN
      ShowMarkers := True;                             { Show markers }
      AppPalette := apMonochrome;                      { Mono palette }
    End;
+{$else Use_API}
+  { the orginal code can't be used here because of the limited
+    video unit capabilities, the mono modus can't be handled
+  }
+  if (ScreenMode.Col div ScreenMode.Row<2) then
+    ShadowSize.X := 1
+  else
+    ShadowSize.X := 2;
+
+  ShadowSize.Y := 1;
+  ShowMarkers := False;
+  if ScreenMode.color then
+    AppPalette := apColor
+  else
+    AppPalette := apBlackWhite;
+  Buffer := Views.PVideoBuf(VideoBuf);
+{$endif Use_API}
 END;
 
 {--TProgram-----------------------------------------------------------------}
@@ -1031,7 +1054,7 @@ BEGIN
        If (Event.What = evNothing) Then Begin
          GetKeyEvent(Event);                          { Fetch key event }
          If (Event.What = evNothing) Then Begin       { No mouse event }
-           GetMouseEvent(Event);                      { Load mouse event }
+           Drivers.GetMouseEvent(Event);                      { Load mouse event }
            If (Event.What = evNothing) Then Idle;     { Idle if no event }
          End;
        End;
@@ -1300,7 +1323,10 @@ END;
 END.
 {
  $Log$
- Revision 1.3  2001-04-10 21:29:54  pierre
+ Revision 1.4  2001-04-10 21:57:55  pierre
+  + first adds for Use_API define
+
+ Revision 1.3  2001/04/10 21:29:54  pierre
   * import of Leon de Boer's files
 
  Revision 1.2  2000/08/24 11:43:13  marco

+ 291 - 9
fv/drivers.pas

@@ -124,11 +124,15 @@ USES
        BseDos, Os2Def,                                { Standard units }
      {$ENDIF}
    {$ENDIF}
-
+   {$ifdef Use_API}
+   video,
+   {$endif Use_API}
    GFVGraph,                                          { GFV graphics unit }
+   {$ifndef Use_API}
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
    Graph,                                             { Standard bp unit }
    {$ENDIF}
+   {$endif not Use_API}
    Common, Objects;                                   { GFV standard units }
 
 {***************************************************************************}
@@ -293,7 +297,8 @@ TYPE
           Case Integer Of
             0: (KeyCode: Word);                       { Full key code }
             1: (CharCode: Char;                       { Char code }
-                ScanCode: Byte));                     { Scan code }
+                ScanCode: Byte;                       { Scan code }
+                KeyShift: byte));                     { Shift states }
         evMessage: (                                  { ** MESSAGE EVENT ** }
           Command: Word;                              { Message command }
           Id     : Word;                              { Message id }
@@ -318,6 +323,9 @@ TYPE
 {                            INTERFACE ROUTINES                             }
 {***************************************************************************}
 
+{ Get Dos counter ticks }
+Function GetDosTicks:longint; { returns ticks at 18.2 Hz, just like DOS }
+
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {                          BUFFER MOVE ROUTINES                             }
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
@@ -652,24 +660,38 @@ VAR
    MouseButtons: Byte;                                { Mouse button state }
    ScreenWidth : Byte;                                { Screen text width }
    ScreenHeight: Byte;                                { Screen text height }
+{$ifndef Use_API}
    ScreenMode  : Word;                                { Screen mode }
+{$else Use_API}
+   ScreenMode  : TVideoMode;                         { Screen mode }
+{$endif Use_API}
    MouseWhere  : TPoint;                              { Mouse position }
 
 {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
                                IMPLEMENTATION
 {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
-
+{$ifdef Use_API}
+{ API Units }
+  USES Keyboard,Mouse;
+{$else not Use_API}
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
   {$IFDEF PPC_FPC}                                    { FPC DOS COMPILER }
   USES Go32;                                          { Standard unit }
   {$ENDIF}
 {$ENDIF}
+{$endif not Use_API}
 
 {***************************************************************************}
 {                        PRIVATE INTERNAL CONSTANTS                         }
 {***************************************************************************}
 
-{$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
+{$IFDEF OS_DOS}                                       { DOS/DPMI/API CODE }
+{$define Has_vars}
+{$ENDIF OS_DOS}
+{$IFDEF Use_API}
+{$define Has_vars}
+{$ENDIF Use_API}
+{$IFDEF HAS_VARS}                                       { DOS/DPMI/API CODE }
 {---------------------------------------------------------------------------}
 {                 DOS/DPMI MOUSE INTERRUPT EVENT QUEUE SIZE                 }
 {---------------------------------------------------------------------------}
@@ -796,9 +818,9 @@ CONST
 {                 PRIVATE INTERNAL UNINITIALIZED VARIABLES                  }
 {***************************************************************************}
 
-{$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
+{$ifdef Has_vars}
 {---------------------------------------------------------------------------}
-{                     UNINITIALIZED DOS/DPMI VARIABLES                      }
+{                     UNINITIALIZED DOS/DPMI/API VARIABLES                      }
 {---------------------------------------------------------------------------}
 VAR
    LastDouble : Boolean;                              { Last double buttons }
@@ -812,6 +834,8 @@ VAR
    LastWhereY : Word;                                 { Last y position }
    DownWhereX : Word;                                 { Last x position }
    DownWhereY : Word;                                 { Last y position }
+   LastWhere  : TPoint;                               { Last mouse position }
+   DownWhere  : TPoint;                               { Last down position }
    EventQHead : Pointer;                              { Head of queue }
    EventQTail : Pointer;                              { Tail of queue }
    EventQueue : Array [0..EventQSize - 1] Of TEvent;  { Event queue }
@@ -820,17 +844,55 @@ VAR
 {---------------------------------------------------------------------------}
 {                ABSOLUTE PRIVATE DOS/DPMI ADDRESS VARIABLES                }
 {---------------------------------------------------------------------------}
-VAR
+   {$ifdef OS_DOS}
    {$IFNDEF GO32V1}
+VAR
    ShiftState: Byte Absolute $40:$17;                 { Shift state mask }
    Ticks: Word Absolute $40:$6C;                      { DOS tick counter }
    {$ENDIF}
+   {$endif OS_DOS}
 
    {$IFDEF GO32V2}                                    { GO32V2 registers }
+VAR
    ActionRegs: TRealRegs;                             { Real mode registers }
    {$ENDIF}
 
+{$ENDIF Has_Vars}
+
+{---------------------------------------------------------------------------}
+{  GetDosTicks (18.2 Hz)                                                    }
+{---------------------------------------------------------------------------}
+
+Function GetDosTicks:longint; { returns ticks at 18.2 Hz, just like DOS }
+{$IFDEF OS_OS2}
+  const
+    QSV_MS_COUNT = 14;
+  var
+    L: longint;
+  begin
+    DosQuerySysInfo (QSV_MS_COUNT, QSV_MS_COUNT, L, 4);
+    GetDosTicks := L div 55;
+  end;
 {$ENDIF}
+{$IFDEF OS_LINUX}
+  var
+    tv : TimeVal;
+  {  tz : TimeZone;}
+  begin
+    GetTimeOfDay(tv{,tz});
+    GetDosTicks:=((tv.Sec mod 86400) div 60)*1092+((tv.Sec mod 60)*1000000+tv.USec) div 54945;
+  end;
+{$ENDIF OS_LINUX}
+{$IFDEF OS_WINDOWS}
+  begin
+     GetDosTicks:=GetTickCount div 55;
+  end;
+{$ENDIF OS_WINDOWS}
+{$IFDEF OS_DOS}
+  begin
+    GetDosTicks:=MemL[$40:$6c];
+  end;
+{$ENDIF OS_DOS}
 
 {---------------------------------------------------------------------------}
 {                UNINITIALIZED DOS/DPMI/WIN/NT/OS2 VARIABLES                }
@@ -886,6 +948,7 @@ END;
 {$ENDIF}
 
 {$IFDEF PPC_FPC}                                      { FPC COMPILER CODE }
+{$ifndef Use_API}
 {---------------------------------------------------------------------------}
 {  Mouse_Action -> Platforms DPMI - FPC COMPILER Updated 10Sep98 LdB        }
 {---------------------------------------------------------------------------}
@@ -1090,6 +1153,7 @@ ASM
 .L_Exit:
 END;
 {$ENDIF}
+{$endif not Use_API}
 
 {---------------------------------------------------------------------------}
 {  HideMouseCursor -> Platforms DOS/DPMI - Updated 10Sep98 LdB              }
@@ -1169,6 +1233,7 @@ ASM
 END;
 {$ENDIF}
 
+{$ifndef Use_API}
 {---------------------------------------------------------------------------}
 {  HookMouse -> Platforms DOS/DPMI - Updated 27Aug98 LdB                    }
 {---------------------------------------------------------------------------}
@@ -1249,6 +1314,7 @@ ASM
    MOVW %DX, (%EDI);                                  { Return y position }
 END;
 {$ENDIF}
+{$endif not Use_API}
 
 {$ENDIF}
 
@@ -1269,6 +1335,15 @@ END;
 {---------------------------------------------------------------------------}
 {  DetectVideo -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 19May98 LdB       }
 {---------------------------------------------------------------------------}
+{$ifdef Use_API}
+procedure DetectVideo;
+VAR
+  CurrMode : TVideoMode;
+begin
+  GetVideoMode(CurrMode);
+  ScreenMode:=CurrMode;
+end;
+{$else not Use_API}
 PROCEDURE DetectVideo;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 ASSEMBLER;
@@ -1368,9 +1443,16 @@ BEGIN
    WinReleasePS(Ps);                                  { Release desktop PS }
 END;
 {$ENDIF}
+{$endif not Use_API}
 
 {---------------------------------------------------------------------------}
 {  DetectMouse -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 19May98 LdB       }
+{$ifdef Use_API}
+FUNCTION DetectMouse: Byte;
+begin
+  DetectMouse:=Mouse.DetectMouse;
+end;
+{$else not Use_API}
 {---------------------------------------------------------------------------}
 FUNCTION DetectMouse: Byte;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
@@ -1428,6 +1510,7 @@ BEGIN
      SV_CMouseButtons);                               { Buttons present }
 END;
 {$ENDIF}
+{$endif not Use_API}
 
 {***************************************************************************}
 {                            INTERFACE ROUTINES                             }
@@ -1586,6 +1669,158 @@ BEGIN
      End;
 END;
 
+{$ifdef Use_API}
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+{                        KEYBOARD CONTROL ROUTINES                          }
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+
+{---------------------------------------------------------------------------}
+{  GetShiftState -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 08Jul96 LdB     }
+{---------------------------------------------------------------------------}
+FUNCTION GetShiftState: Byte;
+begin
+  GetShiftState:=Keyboard.GetKeyEventShiftState(Keyboard.PollShiftStateEvent);
+end;
+
+{---------------------------------------------------------------------------}
+{  GetKeyEvent -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 19May98 LdB       }
+{---------------------------------------------------------------------------}
+procedure GetKeyEvent (Var Event: TEvent);
+var
+  key      : TKeyEvent;
+  keycode  : word;
+  keyshift : byte;
+begin
+  if Keyboard.PollKeyEvent<>0 then
+   begin
+     key:=Keyboard.GetKeyEvent;
+     keycode:=Keyboard.GetKeyEventCode(key);
+     keyshift:=KeyBoard.GetKeyEventShiftState(key);
+     { fixup shift-keys }
+     if keyshift and kbShift<>0 then
+       begin
+         case keycode of
+           $5200 : keycode:=kbShiftIns;
+           $5300 : keycode:=kbShiftDel;
+           $8500 : keycode:=kbShiftF1;
+           $8600 : keycode:=kbShiftF2;
+         end;
+       end
+     { fixup ctrl-keys }
+     else if keyshift and kbCtrl<>0 then
+       begin
+         case keycode of
+           $5200,
+           $9200 : keycode:=kbCtrlIns;
+           $5300,
+           $9300 : keycode:=kbCtrlDel;
+         end;
+       end
+     { fixup alt-keys }
+     else if keyshift and kbAlt<>0 then
+       begin
+         case keycode of
+           $0e08,
+           $0e00 : keycode:=kbAltBack;
+         end;
+       end
+     { fixup normal keys }
+     else
+       begin
+         case keycode of
+           $e00d : keycode:=kbEnter;
+         end;
+       end;
+     Event.What:=evKeyDown;
+     Event.KeyCode:=keycode;
+     Event.KeyShift:=keyshift;
+   end
+  else
+   Event.What:=evNothing;
+end;
+
+
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+{                          MOUSE CONTROL ROUTINES                           }
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+
+{---------------------------------------------------------------------------}
+{  HideMouse -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 30Jun98 LdB         }
+{---------------------------------------------------------------------------}
+procedure HideMouse;
+begin
+{ Is mouse hidden yet?
+  If (HideCount = 0) Then}
+    Mouse.HideMouse;
+{  Inc(HideCount);}
+end;
+
+{---------------------------------------------------------------------------}
+{  ShowMouse -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 30Jun98 LdB         }
+{---------------------------------------------------------------------------}
+procedure ShowMouse;
+begin
+{  if HideCount>0 then
+    dec(HideCount);
+  if (HideCount=0) then}
+   Mouse.ShowMouse;
+end;
+
+{---------------------------------------------------------------------------}
+{  GetMouseEvent -> Platforms DOS/DPMI/WINDOWS/OS2 - Updated 30Jun98 LdB    }
+{---------------------------------------------------------------------------}
+procedure GetMouseEvent (Var Event: TEvent);
+var
+  e : Mouse.TMouseEvent;
+begin
+  if Mouse.PollMouseEvent(e) then
+   begin
+     Mouse.GetMouseEvent(e);
+     MouseWhere.X:=e.x;
+     MouseWhere.Y:=e.y;
+     Event.Double:=false;
+     case e.Action of
+       MouseActionMove :
+         Event.What:=evMouseMove;
+       MouseActionDown :
+         begin
+           Event.What:=evMouseDown;
+           if (DownButtons=e.Buttons) and (LastWhere.X=e.x) and (LastWhere.Y=e.y) and
+              (GetDosTicks-DownTicks<=DoubleDelay) then
+             Event.Double:=true;
+           DownButtons:=e.Buttons;
+           DownWhere.X:=e.x;
+           DownWhere.Y:=e.y;
+           DownTicks:=GetDosTicks;
+           AutoTicks:=GetDosTicks;
+           AutoDelay:=RepeatDelay;
+         end;
+       MouseActionUp :
+         begin
+           Event.What:=evMouseUp;
+         end;
+       else
+         begin
+           if GetDosTicks-AutoTicks>=AutoDelay then
+            begin
+              Event.What:=evMouseAuto;
+              AutoTicks:=GetDosTicks;
+              AutoDelay:=1;
+            end;
+         end;
+     end;
+     Event.Buttons:=e.Buttons;
+     Event.Where.X:=e.x;
+     Event.Where.Y:=e.y;
+     LastButtons:=Event.Buttons;
+     LastWhere.x:=Event.Where.x;
+     LastWhere.y:=Event.Where.y;
+   end
+  else
+   FillChar(Event,sizeof(TEvent),0);
+end;
+
+{$else not Use_API}
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {                        KEYBOARD CONTROL ROUTINES                          }
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
@@ -2181,6 +2416,7 @@ BEGIN
    End;
 END;
 {$ENDIF}
+{$endif not Use_API}
 
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {                      EVENT HANDLER CONTROL ROUTINES                       }
@@ -2191,6 +2427,24 @@ END;
 {---------------------------------------------------------------------------}
 PROCEDURE InitEvents;
 BEGIN
+{$ifdef Use_API}
+   If (ButtonCount <> 0) Then
+    begin                   { Mouse is available }
+     Mouse.InitMouse;                                 { Hook the mouse }
+     { this is required by the use of HideCount variable }
+     Mouse.ShowMouse;                                 { visible by default }
+     { HideCount:=0;  }
+     LastButtons := 0;                                { Clear last buttons }
+     DownButtons := 0;                                { Clear down buttons }
+     MouseWhere.X:=Mouse.GetMouseX;
+     MouseWhere.Y:=Mouse.GetMouseY;                   { Get mouse position }
+     LastWhere.x:=MouseWhere.x;
+     LastWhereX:=MouseWhere.x;
+     LastWhere.y:=MouseWhere.y;
+     LastWhereY:=MouseWhere.y;
+     MouseEvents := True;                             { Set initialized flag }
+   end;
+{$else not Use_API}
    If (ButtonCount <> 0) Then Begin                   { Mouse is available }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      EventQHead := @EventQueue;                       { Initialize head }
@@ -2216,6 +2470,7 @@ BEGIN
      MouseEvents := True;                             { Set initialized flag }
      {$ENDIF}
    End;
+{$endif not Use_API}
 END;
 
 {---------------------------------------------------------------------------}
@@ -2223,6 +2478,8 @@ END;
 {---------------------------------------------------------------------------}
 PROCEDURE DoneEvents;
 BEGIN
+{$ifdef Use_API}
+{$else not Use_API}
    If MouseEvents Then Begin                          { Initialized check }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      HideMouseCursor;                                 { Hide the mouse }
@@ -2240,11 +2497,13 @@ BEGIN
      MouseEvents := False;                            { Clr initialized flag }
      {$ENDIF}
    End;
+{$endif not Use_API}
 END;
 
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {                           VIDEO CONTROL ROUTINES                          }
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+{$ifndef Use_API}
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF PPC_FPC}                                      { FPC COMPILER ONLY }
 { ******************************* REMARK ****************************** }
@@ -2272,15 +2531,24 @@ BEGIN
 END;
 {$ENDIF}
 {$ENDIF}
+{$endif not Use_API}
 
 {---------------------------------------------------------------------------}
 {  InitVideo -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 26Nov99 LdB         }
 {---------------------------------------------------------------------------}
 PROCEDURE InitVideo;
+{$ifndef Use_API}
 VAR {$IFDEF OS_DOS} I, J: Integer; Ts: TextSettingsType; {$ENDIF}
     {$IFDEF OS_WINDOWS} Dc, Mem: HDc; TempFont: TLogFont; Tm: TTextmetric; {$ENDIF}
     {$IFDEF OS_OS2} Ts, Fs: Integer; Ps: HPs; Tm: FontMetrics; {$ENDIF}
+{$endif not Use_API}
 BEGIN
+   {$ifdef Use_API}
+   Video.InitVideo;
+   ScreenWidth:=Video.ScreenWidth;
+   ScreenHeight:=Video.ScreenHeight;
+   GetVideoMode(ScreenMode);
+   {$else not Use_API}
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
      If (TextModeGFV = True) Then Begin               { TEXT MODE GFV }
        I := ScreenWidth*8 -1;                         { Mouse width }
@@ -2443,6 +2711,7 @@ BEGIN
      Inc(SysScreenHeight, Ts);                        { Max screen height }
      {$ENDIF}
    {$ENDIF}
+   {$endif not Use_API}
 END;
 
 {---------------------------------------------------------------------------}
@@ -2450,6 +2719,9 @@ END;
 {---------------------------------------------------------------------------}
 PROCEDURE DoneVideo;
 BEGIN
+   {$ifdef Use_API}
+    Video.DoneVideo;
+   {$else not Use_API}
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
      {$IFDEF PPC_FPC}
      MouseMoveProc := Nil;                            { Clr mouse move ptr }
@@ -2480,6 +2752,7 @@ BEGIN
      If (DefGFVFont <> 0) Then                        { Check font created }
        DeleteObject(DefGFVFont);                      { Delete the font }
    {$ENDIF}
+   {$endif not Use_API}
 END;
 
 {---------------------------------------------------------------------------}
@@ -2487,6 +2760,9 @@ END;
 {---------------------------------------------------------------------------}
 PROCEDURE ClearScreen;
 BEGIN
+   {$ifdef Use_API}
+    Video.ClearScreen;
+   {$endif Use_API}
 END;
 
 {---------------------------------------------------------------------------}
@@ -2704,16 +2980,22 @@ END;
 BEGIN
    ButtonCount := DetectMouse;                        { Detect mouse }
    DetectVideo;                                       { Detect video }
+   {$ifdef Use_API}
+   TextModeGFV:=True;
+   {$endif Use_API}
    SaveExit := ExitProc;                              { Save old exit }
    ExitProc := @ExitDrivers;                          { Set new exit }
 END.
 {
  $Log$
- Revision 1.3  2001-04-10 21:29:55  pierre
+ Revision 1.4  2001-04-10 21:57:55  pierre
+  + first adds for Use_API define
+
+ Revision 1.3  2001/04/10 21:29:55  pierre
   * import of Leon de Boer's files
 
  Revision 1.2  2000/08/24 12:00:21  marco
   * CVS log and ID tags
-	
+
 
 }

+ 4 - 3
fv/gfvgraph.pas

@@ -402,14 +402,15 @@ END;
 {$ENDIF}
 
 END.
-
 {
  $Log$
- Revision 1.3  2001-04-10 21:29:55  pierre
+ Revision 1.4  2001-04-10 21:57:55  pierre
+  + first adds for Use_API define
+
+ Revision 1.3  2001/04/10 21:29:55  pierre
   * import of Leon de Boer's files
 
  Revision 1.2  2000/08/24 12:00:21  marco
   * CVS log and ID tags
 
-
 }

+ 8 - 1
fv/menus.pas

@@ -453,7 +453,11 @@ CONSTRUCTOR TMenuView.Load (Var S: TStream);
            S.Read(HelpCtx, 2);                        { Menu item help ctx }
            If (Name <> Nil) Then
              If Command = 0 Then
+{$ifdef PPC_FPC}
+               SubMenu := DoLoadMenu()                  { Load submenu }
+{$else not PPC_FPC}
                SubMenu := DoLoadMenu                  { Load submenu }
+{$endif not PPC_FPC}
                  Else Param := S.ReadStr;             { Read param string }
          End;
        End;
@@ -1669,6 +1673,9 @@ END;
 
 END.
 {
- $Log				$
+ $Log$
+ Revision 1.4  2001-04-10 21:57:55  pierre
+  + first adds for Use_API define
+
 
 }

+ 11 - 1
fv/platform.inc

@@ -163,8 +163,14 @@ FOR FPC THESE ARE THE TRANSLATIONS
   {$UNDEF ASM_BP}
   {$DEFINE ASM_FPC}
   {$UNDEF BP_VMTLink}
+  {$DEFINE Use_API}
 {$ENDIF}
 
+{$IFDEF NoAPI}
+{$UNDEF Use_API}
+{$ENDIF UseAPI}
+
+
 {---------------------------------------------------------------------------}
 {  FPC LINUX COMPILER changes operating system - Updated 27Aug98 LdB        }
 {  Note: Other linux compilers would need to change other details           }
@@ -357,7 +363,10 @@ FOR FPC THESE ARE THE TRANSLATIONS
 
 {
  $Log$
- Revision 1.3  2001-04-10 21:29:55  pierre
+ Revision 1.4  2001-04-10 21:57:56  pierre
+  + first adds for Use_API define
+
+ Revision 1.3  2001/04/10 21:29:55  pierre
   * import of Leon de Boer's files
 
  Revision 1.2  2000/08/24 12:00:22  marco
@@ -365,3 +374,4 @@ FOR FPC THESE ARE THE TRANSLATIONS
 
 
 }
+

+ 4 - 70
fv/views.pas

@@ -5400,75 +5400,6 @@ END;
 
 {$ENDIF}
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {                       UNCOMPLETED OBJECT METHODS                          }
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
@@ -6732,7 +6663,10 @@ END.
 
 {
  $Log$
- Revision 1.3  2001-04-10 21:29:55  pierre
+ Revision 1.4  2001-04-10 21:57:56  pierre
+  + first adds for Use_API define
+
+ Revision 1.3  2001/04/10 21:29:55  pierre
   * import of Leon de Boer's files
 
  Revision 1.2  2000/08/24 12:00:22  marco

+ 28 - 2
fvision/app.pas

@@ -404,6 +404,11 @@ CONST
                                 IMPLEMENTATION
 {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
 
+{$ifdef Use_API}
+  uses
+    Video,Mouse;
+{$endif Use_API}
+
 {***************************************************************************}
 {                        PRIVATE DEFINED CONSTANTS                          }
 {***************************************************************************}
@@ -941,6 +946,7 @@ END;
 {---------------------------------------------------------------------------}
 PROCEDURE TProgram.InitScreen;
 BEGIN
+{$ifndef Use_API}
    If (Lo(ScreenMode) <> smMono) Then Begin           { Coloured mode }
      If (ScreenMode AND smFont8x8 <> 0) Then
        ShadowSize.X := 1 Else                         { Single bit shadow }
@@ -955,6 +961,23 @@ BEGIN
      ShowMarkers := True;                             { Show markers }
      AppPalette := apMonochrome;                      { Mono palette }
    End;
+{$else Use_API}
+  { the orginal code can't be used here because of the limited
+    video unit capabilities, the mono modus can't be handled
+  }
+  if (ScreenMode.Col div ScreenMode.Row<2) then
+    ShadowSize.X := 1
+  else
+    ShadowSize.X := 2;
+
+  ShadowSize.Y := 1;
+  ShowMarkers := False;
+  if ScreenMode.color then
+    AppPalette := apColor
+  else
+    AppPalette := apBlackWhite;
+  Buffer := Views.PVideoBuf(VideoBuf);
+{$endif Use_API}
 END;
 
 {--TProgram-----------------------------------------------------------------}
@@ -1031,7 +1054,7 @@ BEGIN
        If (Event.What = evNothing) Then Begin
          GetKeyEvent(Event);                          { Fetch key event }
          If (Event.What = evNothing) Then Begin       { No mouse event }
-           GetMouseEvent(Event);                      { Load mouse event }
+           Drivers.GetMouseEvent(Event);                      { Load mouse event }
            If (Event.What = evNothing) Then Idle;     { Idle if no event }
          End;
        End;
@@ -1300,7 +1323,10 @@ END;
 END.
 {
  $Log$
- Revision 1.3  2001-04-10 21:29:54  pierre
+ Revision 1.4  2001-04-10 21:57:55  pierre
+  + first adds for Use_API define
+
+ Revision 1.3  2001/04/10 21:29:54  pierre
   * import of Leon de Boer's files
 
  Revision 1.2  2000/08/24 11:43:13  marco

+ 291 - 9
fvision/drivers.pas

@@ -124,11 +124,15 @@ USES
        BseDos, Os2Def,                                { Standard units }
      {$ENDIF}
    {$ENDIF}
-
+   {$ifdef Use_API}
+   video,
+   {$endif Use_API}
    GFVGraph,                                          { GFV graphics unit }
+   {$ifndef Use_API}
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
    Graph,                                             { Standard bp unit }
    {$ENDIF}
+   {$endif not Use_API}
    Common, Objects;                                   { GFV standard units }
 
 {***************************************************************************}
@@ -293,7 +297,8 @@ TYPE
           Case Integer Of
             0: (KeyCode: Word);                       { Full key code }
             1: (CharCode: Char;                       { Char code }
-                ScanCode: Byte));                     { Scan code }
+                ScanCode: Byte;                       { Scan code }
+                KeyShift: byte));                     { Shift states }
         evMessage: (                                  { ** MESSAGE EVENT ** }
           Command: Word;                              { Message command }
           Id     : Word;                              { Message id }
@@ -318,6 +323,9 @@ TYPE
 {                            INTERFACE ROUTINES                             }
 {***************************************************************************}
 
+{ Get Dos counter ticks }
+Function GetDosTicks:longint; { returns ticks at 18.2 Hz, just like DOS }
+
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {                          BUFFER MOVE ROUTINES                             }
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
@@ -652,24 +660,38 @@ VAR
    MouseButtons: Byte;                                { Mouse button state }
    ScreenWidth : Byte;                                { Screen text width }
    ScreenHeight: Byte;                                { Screen text height }
+{$ifndef Use_API}
    ScreenMode  : Word;                                { Screen mode }
+{$else Use_API}
+   ScreenMode  : TVideoMode;                         { Screen mode }
+{$endif Use_API}
    MouseWhere  : TPoint;                              { Mouse position }
 
 {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
                                IMPLEMENTATION
 {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
-
+{$ifdef Use_API}
+{ API Units }
+  USES Keyboard,Mouse;
+{$else not Use_API}
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
   {$IFDEF PPC_FPC}                                    { FPC DOS COMPILER }
   USES Go32;                                          { Standard unit }
   {$ENDIF}
 {$ENDIF}
+{$endif not Use_API}
 
 {***************************************************************************}
 {                        PRIVATE INTERNAL CONSTANTS                         }
 {***************************************************************************}
 
-{$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
+{$IFDEF OS_DOS}                                       { DOS/DPMI/API CODE }
+{$define Has_vars}
+{$ENDIF OS_DOS}
+{$IFDEF Use_API}
+{$define Has_vars}
+{$ENDIF Use_API}
+{$IFDEF HAS_VARS}                                       { DOS/DPMI/API CODE }
 {---------------------------------------------------------------------------}
 {                 DOS/DPMI MOUSE INTERRUPT EVENT QUEUE SIZE                 }
 {---------------------------------------------------------------------------}
@@ -796,9 +818,9 @@ CONST
 {                 PRIVATE INTERNAL UNINITIALIZED VARIABLES                  }
 {***************************************************************************}
 
-{$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
+{$ifdef Has_vars}
 {---------------------------------------------------------------------------}
-{                     UNINITIALIZED DOS/DPMI VARIABLES                      }
+{                     UNINITIALIZED DOS/DPMI/API VARIABLES                      }
 {---------------------------------------------------------------------------}
 VAR
    LastDouble : Boolean;                              { Last double buttons }
@@ -812,6 +834,8 @@ VAR
    LastWhereY : Word;                                 { Last y position }
    DownWhereX : Word;                                 { Last x position }
    DownWhereY : Word;                                 { Last y position }
+   LastWhere  : TPoint;                               { Last mouse position }
+   DownWhere  : TPoint;                               { Last down position }
    EventQHead : Pointer;                              { Head of queue }
    EventQTail : Pointer;                              { Tail of queue }
    EventQueue : Array [0..EventQSize - 1] Of TEvent;  { Event queue }
@@ -820,17 +844,55 @@ VAR
 {---------------------------------------------------------------------------}
 {                ABSOLUTE PRIVATE DOS/DPMI ADDRESS VARIABLES                }
 {---------------------------------------------------------------------------}
-VAR
+   {$ifdef OS_DOS}
    {$IFNDEF GO32V1}
+VAR
    ShiftState: Byte Absolute $40:$17;                 { Shift state mask }
    Ticks: Word Absolute $40:$6C;                      { DOS tick counter }
    {$ENDIF}
+   {$endif OS_DOS}
 
    {$IFDEF GO32V2}                                    { GO32V2 registers }
+VAR
    ActionRegs: TRealRegs;                             { Real mode registers }
    {$ENDIF}
 
+{$ENDIF Has_Vars}
+
+{---------------------------------------------------------------------------}
+{  GetDosTicks (18.2 Hz)                                                    }
+{---------------------------------------------------------------------------}
+
+Function GetDosTicks:longint; { returns ticks at 18.2 Hz, just like DOS }
+{$IFDEF OS_OS2}
+  const
+    QSV_MS_COUNT = 14;
+  var
+    L: longint;
+  begin
+    DosQuerySysInfo (QSV_MS_COUNT, QSV_MS_COUNT, L, 4);
+    GetDosTicks := L div 55;
+  end;
 {$ENDIF}
+{$IFDEF OS_LINUX}
+  var
+    tv : TimeVal;
+  {  tz : TimeZone;}
+  begin
+    GetTimeOfDay(tv{,tz});
+    GetDosTicks:=((tv.Sec mod 86400) div 60)*1092+((tv.Sec mod 60)*1000000+tv.USec) div 54945;
+  end;
+{$ENDIF OS_LINUX}
+{$IFDEF OS_WINDOWS}
+  begin
+     GetDosTicks:=GetTickCount div 55;
+  end;
+{$ENDIF OS_WINDOWS}
+{$IFDEF OS_DOS}
+  begin
+    GetDosTicks:=MemL[$40:$6c];
+  end;
+{$ENDIF OS_DOS}
 
 {---------------------------------------------------------------------------}
 {                UNINITIALIZED DOS/DPMI/WIN/NT/OS2 VARIABLES                }
@@ -886,6 +948,7 @@ END;
 {$ENDIF}
 
 {$IFDEF PPC_FPC}                                      { FPC COMPILER CODE }
+{$ifndef Use_API}
 {---------------------------------------------------------------------------}
 {  Mouse_Action -> Platforms DPMI - FPC COMPILER Updated 10Sep98 LdB        }
 {---------------------------------------------------------------------------}
@@ -1090,6 +1153,7 @@ ASM
 .L_Exit:
 END;
 {$ENDIF}
+{$endif not Use_API}
 
 {---------------------------------------------------------------------------}
 {  HideMouseCursor -> Platforms DOS/DPMI - Updated 10Sep98 LdB              }
@@ -1169,6 +1233,7 @@ ASM
 END;
 {$ENDIF}
 
+{$ifndef Use_API}
 {---------------------------------------------------------------------------}
 {  HookMouse -> Platforms DOS/DPMI - Updated 27Aug98 LdB                    }
 {---------------------------------------------------------------------------}
@@ -1249,6 +1314,7 @@ ASM
    MOVW %DX, (%EDI);                                  { Return y position }
 END;
 {$ENDIF}
+{$endif not Use_API}
 
 {$ENDIF}
 
@@ -1269,6 +1335,15 @@ END;
 {---------------------------------------------------------------------------}
 {  DetectVideo -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 19May98 LdB       }
 {---------------------------------------------------------------------------}
+{$ifdef Use_API}
+procedure DetectVideo;
+VAR
+  CurrMode : TVideoMode;
+begin
+  GetVideoMode(CurrMode);
+  ScreenMode:=CurrMode;
+end;
+{$else not Use_API}
 PROCEDURE DetectVideo;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 ASSEMBLER;
@@ -1368,9 +1443,16 @@ BEGIN
    WinReleasePS(Ps);                                  { Release desktop PS }
 END;
 {$ENDIF}
+{$endif not Use_API}
 
 {---------------------------------------------------------------------------}
 {  DetectMouse -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 19May98 LdB       }
+{$ifdef Use_API}
+FUNCTION DetectMouse: Byte;
+begin
+  DetectMouse:=Mouse.DetectMouse;
+end;
+{$else not Use_API}
 {---------------------------------------------------------------------------}
 FUNCTION DetectMouse: Byte;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
@@ -1428,6 +1510,7 @@ BEGIN
      SV_CMouseButtons);                               { Buttons present }
 END;
 {$ENDIF}
+{$endif not Use_API}
 
 {***************************************************************************}
 {                            INTERFACE ROUTINES                             }
@@ -1586,6 +1669,158 @@ BEGIN
      End;
 END;
 
+{$ifdef Use_API}
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+{                        KEYBOARD CONTROL ROUTINES                          }
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+
+{---------------------------------------------------------------------------}
+{  GetShiftState -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 08Jul96 LdB     }
+{---------------------------------------------------------------------------}
+FUNCTION GetShiftState: Byte;
+begin
+  GetShiftState:=Keyboard.GetKeyEventShiftState(Keyboard.PollShiftStateEvent);
+end;
+
+{---------------------------------------------------------------------------}
+{  GetKeyEvent -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 19May98 LdB       }
+{---------------------------------------------------------------------------}
+procedure GetKeyEvent (Var Event: TEvent);
+var
+  key      : TKeyEvent;
+  keycode  : word;
+  keyshift : byte;
+begin
+  if Keyboard.PollKeyEvent<>0 then
+   begin
+     key:=Keyboard.GetKeyEvent;
+     keycode:=Keyboard.GetKeyEventCode(key);
+     keyshift:=KeyBoard.GetKeyEventShiftState(key);
+     { fixup shift-keys }
+     if keyshift and kbShift<>0 then
+       begin
+         case keycode of
+           $5200 : keycode:=kbShiftIns;
+           $5300 : keycode:=kbShiftDel;
+           $8500 : keycode:=kbShiftF1;
+           $8600 : keycode:=kbShiftF2;
+         end;
+       end
+     { fixup ctrl-keys }
+     else if keyshift and kbCtrl<>0 then
+       begin
+         case keycode of
+           $5200,
+           $9200 : keycode:=kbCtrlIns;
+           $5300,
+           $9300 : keycode:=kbCtrlDel;
+         end;
+       end
+     { fixup alt-keys }
+     else if keyshift and kbAlt<>0 then
+       begin
+         case keycode of
+           $0e08,
+           $0e00 : keycode:=kbAltBack;
+         end;
+       end
+     { fixup normal keys }
+     else
+       begin
+         case keycode of
+           $e00d : keycode:=kbEnter;
+         end;
+       end;
+     Event.What:=evKeyDown;
+     Event.KeyCode:=keycode;
+     Event.KeyShift:=keyshift;
+   end
+  else
+   Event.What:=evNothing;
+end;
+
+
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+{                          MOUSE CONTROL ROUTINES                           }
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+
+{---------------------------------------------------------------------------}
+{  HideMouse -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 30Jun98 LdB         }
+{---------------------------------------------------------------------------}
+procedure HideMouse;
+begin
+{ Is mouse hidden yet?
+  If (HideCount = 0) Then}
+    Mouse.HideMouse;
+{  Inc(HideCount);}
+end;
+
+{---------------------------------------------------------------------------}
+{  ShowMouse -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 30Jun98 LdB         }
+{---------------------------------------------------------------------------}
+procedure ShowMouse;
+begin
+{  if HideCount>0 then
+    dec(HideCount);
+  if (HideCount=0) then}
+   Mouse.ShowMouse;
+end;
+
+{---------------------------------------------------------------------------}
+{  GetMouseEvent -> Platforms DOS/DPMI/WINDOWS/OS2 - Updated 30Jun98 LdB    }
+{---------------------------------------------------------------------------}
+procedure GetMouseEvent (Var Event: TEvent);
+var
+  e : Mouse.TMouseEvent;
+begin
+  if Mouse.PollMouseEvent(e) then
+   begin
+     Mouse.GetMouseEvent(e);
+     MouseWhere.X:=e.x;
+     MouseWhere.Y:=e.y;
+     Event.Double:=false;
+     case e.Action of
+       MouseActionMove :
+         Event.What:=evMouseMove;
+       MouseActionDown :
+         begin
+           Event.What:=evMouseDown;
+           if (DownButtons=e.Buttons) and (LastWhere.X=e.x) and (LastWhere.Y=e.y) and
+              (GetDosTicks-DownTicks<=DoubleDelay) then
+             Event.Double:=true;
+           DownButtons:=e.Buttons;
+           DownWhere.X:=e.x;
+           DownWhere.Y:=e.y;
+           DownTicks:=GetDosTicks;
+           AutoTicks:=GetDosTicks;
+           AutoDelay:=RepeatDelay;
+         end;
+       MouseActionUp :
+         begin
+           Event.What:=evMouseUp;
+         end;
+       else
+         begin
+           if GetDosTicks-AutoTicks>=AutoDelay then
+            begin
+              Event.What:=evMouseAuto;
+              AutoTicks:=GetDosTicks;
+              AutoDelay:=1;
+            end;
+         end;
+     end;
+     Event.Buttons:=e.Buttons;
+     Event.Where.X:=e.x;
+     Event.Where.Y:=e.y;
+     LastButtons:=Event.Buttons;
+     LastWhere.x:=Event.Where.x;
+     LastWhere.y:=Event.Where.y;
+   end
+  else
+   FillChar(Event,sizeof(TEvent),0);
+end;
+
+{$else not Use_API}
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {                        KEYBOARD CONTROL ROUTINES                          }
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
@@ -2181,6 +2416,7 @@ BEGIN
    End;
 END;
 {$ENDIF}
+{$endif not Use_API}
 
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {                      EVENT HANDLER CONTROL ROUTINES                       }
@@ -2191,6 +2427,24 @@ END;
 {---------------------------------------------------------------------------}
 PROCEDURE InitEvents;
 BEGIN
+{$ifdef Use_API}
+   If (ButtonCount <> 0) Then
+    begin                   { Mouse is available }
+     Mouse.InitMouse;                                 { Hook the mouse }
+     { this is required by the use of HideCount variable }
+     Mouse.ShowMouse;                                 { visible by default }
+     { HideCount:=0;  }
+     LastButtons := 0;                                { Clear last buttons }
+     DownButtons := 0;                                { Clear down buttons }
+     MouseWhere.X:=Mouse.GetMouseX;
+     MouseWhere.Y:=Mouse.GetMouseY;                   { Get mouse position }
+     LastWhere.x:=MouseWhere.x;
+     LastWhereX:=MouseWhere.x;
+     LastWhere.y:=MouseWhere.y;
+     LastWhereY:=MouseWhere.y;
+     MouseEvents := True;                             { Set initialized flag }
+   end;
+{$else not Use_API}
    If (ButtonCount <> 0) Then Begin                   { Mouse is available }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      EventQHead := @EventQueue;                       { Initialize head }
@@ -2216,6 +2470,7 @@ BEGIN
      MouseEvents := True;                             { Set initialized flag }
      {$ENDIF}
    End;
+{$endif not Use_API}
 END;
 
 {---------------------------------------------------------------------------}
@@ -2223,6 +2478,8 @@ END;
 {---------------------------------------------------------------------------}
 PROCEDURE DoneEvents;
 BEGIN
+{$ifdef Use_API}
+{$else not Use_API}
    If MouseEvents Then Begin                          { Initialized check }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      HideMouseCursor;                                 { Hide the mouse }
@@ -2240,11 +2497,13 @@ BEGIN
      MouseEvents := False;                            { Clr initialized flag }
      {$ENDIF}
    End;
+{$endif not Use_API}
 END;
 
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {                           VIDEO CONTROL ROUTINES                          }
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+{$ifndef Use_API}
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF PPC_FPC}                                      { FPC COMPILER ONLY }
 { ******************************* REMARK ****************************** }
@@ -2272,15 +2531,24 @@ BEGIN
 END;
 {$ENDIF}
 {$ENDIF}
+{$endif not Use_API}
 
 {---------------------------------------------------------------------------}
 {  InitVideo -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 26Nov99 LdB         }
 {---------------------------------------------------------------------------}
 PROCEDURE InitVideo;
+{$ifndef Use_API}
 VAR {$IFDEF OS_DOS} I, J: Integer; Ts: TextSettingsType; {$ENDIF}
     {$IFDEF OS_WINDOWS} Dc, Mem: HDc; TempFont: TLogFont; Tm: TTextmetric; {$ENDIF}
     {$IFDEF OS_OS2} Ts, Fs: Integer; Ps: HPs; Tm: FontMetrics; {$ENDIF}
+{$endif not Use_API}
 BEGIN
+   {$ifdef Use_API}
+   Video.InitVideo;
+   ScreenWidth:=Video.ScreenWidth;
+   ScreenHeight:=Video.ScreenHeight;
+   GetVideoMode(ScreenMode);
+   {$else not Use_API}
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
      If (TextModeGFV = True) Then Begin               { TEXT MODE GFV }
        I := ScreenWidth*8 -1;                         { Mouse width }
@@ -2443,6 +2711,7 @@ BEGIN
      Inc(SysScreenHeight, Ts);                        { Max screen height }
      {$ENDIF}
    {$ENDIF}
+   {$endif not Use_API}
 END;
 
 {---------------------------------------------------------------------------}
@@ -2450,6 +2719,9 @@ END;
 {---------------------------------------------------------------------------}
 PROCEDURE DoneVideo;
 BEGIN
+   {$ifdef Use_API}
+    Video.DoneVideo;
+   {$else not Use_API}
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
      {$IFDEF PPC_FPC}
      MouseMoveProc := Nil;                            { Clr mouse move ptr }
@@ -2480,6 +2752,7 @@ BEGIN
      If (DefGFVFont <> 0) Then                        { Check font created }
        DeleteObject(DefGFVFont);                      { Delete the font }
    {$ENDIF}
+   {$endif not Use_API}
 END;
 
 {---------------------------------------------------------------------------}
@@ -2487,6 +2760,9 @@ END;
 {---------------------------------------------------------------------------}
 PROCEDURE ClearScreen;
 BEGIN
+   {$ifdef Use_API}
+    Video.ClearScreen;
+   {$endif Use_API}
 END;
 
 {---------------------------------------------------------------------------}
@@ -2704,16 +2980,22 @@ END;
 BEGIN
    ButtonCount := DetectMouse;                        { Detect mouse }
    DetectVideo;                                       { Detect video }
+   {$ifdef Use_API}
+   TextModeGFV:=True;
+   {$endif Use_API}
    SaveExit := ExitProc;                              { Save old exit }
    ExitProc := @ExitDrivers;                          { Set new exit }
 END.
 {
  $Log$
- Revision 1.3  2001-04-10 21:29:55  pierre
+ Revision 1.4  2001-04-10 21:57:55  pierre
+  + first adds for Use_API define
+
+ Revision 1.3  2001/04/10 21:29:55  pierre
   * import of Leon de Boer's files
 
  Revision 1.2  2000/08/24 12:00:21  marco
   * CVS log and ID tags
-	
+
 
 }

+ 4 - 3
fvision/gfvgraph.pas

@@ -402,14 +402,15 @@ END;
 {$ENDIF}
 
 END.
-
 {
  $Log$
- Revision 1.3  2001-04-10 21:29:55  pierre
+ Revision 1.4  2001-04-10 21:57:55  pierre
+  + first adds for Use_API define
+
+ Revision 1.3  2001/04/10 21:29:55  pierre
   * import of Leon de Boer's files
 
  Revision 1.2  2000/08/24 12:00:21  marco
   * CVS log and ID tags
 
-
 }

+ 8 - 1
fvision/menus.pas

@@ -453,7 +453,11 @@ CONSTRUCTOR TMenuView.Load (Var S: TStream);
            S.Read(HelpCtx, 2);                        { Menu item help ctx }
            If (Name <> Nil) Then
              If Command = 0 Then
+{$ifdef PPC_FPC}
+               SubMenu := DoLoadMenu()                  { Load submenu }
+{$else not PPC_FPC}
                SubMenu := DoLoadMenu                  { Load submenu }
+{$endif not PPC_FPC}
                  Else Param := S.ReadStr;             { Read param string }
          End;
        End;
@@ -1669,6 +1673,9 @@ END;
 
 END.
 {
- $Log				$
+ $Log$
+ Revision 1.4  2001-04-10 21:57:55  pierre
+  + first adds for Use_API define
+
 
 }

+ 5 - 2
fvision/objects.pas

@@ -175,7 +175,7 @@ CONST
    MaxCollectionSize = 65520 DIV SizeOf(Pointer);     { Max collection size }
 
 {***************************************************************************}
-{                          PUBLIC TYPE DEFINITIONS                          }
+{                          PTBMIC TYPE DEFINITIONS                          }
 {***************************************************************************}
 
 {---------------------------------------------------------------------------}
@@ -3189,7 +3189,10 @@ END.
 
 {
  $Log$
- Revision 1.3  2001-04-10 21:29:55  pierre
+ Revision 1.4  2001-04-10 21:57:55  pierre
+  + first adds for Use_API define
+
+ Revision 1.3  2001/04/10 21:29:55  pierre
   * import of Leon de Boer's files
 
  Revision 1.2  2000/08/24 12:00:22  marco

+ 11 - 1
fvision/platform.inc

@@ -163,8 +163,14 @@ FOR FPC THESE ARE THE TRANSLATIONS
   {$UNDEF ASM_BP}
   {$DEFINE ASM_FPC}
   {$UNDEF BP_VMTLink}
+  {$DEFINE Use_API}
 {$ENDIF}
 
+{$IFDEF NoAPI}
+{$UNDEF Use_API}
+{$ENDIF UseAPI}
+
+
 {---------------------------------------------------------------------------}
 {  FPC LINUX COMPILER changes operating system - Updated 27Aug98 LdB        }
 {  Note: Other linux compilers would need to change other details           }
@@ -357,7 +363,10 @@ FOR FPC THESE ARE THE TRANSLATIONS
 
 {
  $Log$
- Revision 1.3  2001-04-10 21:29:55  pierre
+ Revision 1.4  2001-04-10 21:57:56  pierre
+  + first adds for Use_API define
+
+ Revision 1.3  2001/04/10 21:29:55  pierre
   * import of Leon de Boer's files
 
  Revision 1.2  2000/08/24 12:00:22  marco
@@ -365,3 +374,4 @@ FOR FPC THESE ARE THE TRANSLATIONS
 
 
 }
+

+ 4 - 70
fvision/views.pas

@@ -5400,75 +5400,6 @@ END;
 
 {$ENDIF}
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {                       UNCOMPLETED OBJECT METHODS                          }
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
@@ -6732,7 +6663,10 @@ END.
 
 {
  $Log$
- Revision 1.3  2001-04-10 21:29:55  pierre
+ Revision 1.4  2001-04-10 21:57:56  pierre
+  + first adds for Use_API define
+
+ Revision 1.3  2001/04/10 21:29:55  pierre
   * import of Leon de Boer's files
 
  Revision 1.2  2000/08/24 12:00:22  marco