Browse Source

* import of Leon de Boer's files

pierre 24 years ago
parent
commit
e720096155
22 changed files with 1388 additions and 719 deletions
  1. 34 29
      fv/app.pas
  2. 6 2
      fv/dialogs.pas
  3. 136 49
      fv/drivers.pas
  4. 32 20
      fv/fileio.pas
  5. 162 58
      fv/gfvgraph.pas
  6. 3 1
      fv/menus.pas
  7. 20 4
      fv/platform.inc
  8. 5 2
      fv/validate.pas
  9. 248 141
      fv/views.pas
  10. 34 29
      fvision/app.pas
  11. 43 43
      fvision/common.pas
  12. 6 2
      fvision/dialogs.pas
  13. 136 49
      fvision/drivers.pas
  14. 25 15
      fvision/emsunit.pas
  15. 32 20
      fvision/fileio.pas
  16. 162 58
      fvision/gfvgraph.pas
  17. 3 1
      fvision/menus.pas
  18. 23 47
      fvision/objects.pas
  19. 20 4
      fvision/platform.inc
  20. 5 2
      fvision/validate.pas
  21. 248 141
      fvision/views.pas
  22. 5 2
      fvision/xmsunit.pas

+ 34 - 29
fv/app.pas

@@ -100,7 +100,8 @@ USES
      Os2Def, Os2Base, OS2PmApi,                       { Standard units }
      Os2Def, Os2Base, OS2PmApi,                       { Standard units }
    {$ENDIF}
    {$ENDIF}
 
 
-   Common, Memory, GFVGraph,                          { GFV standard units }
+   GFVGraph,                                          { GFV standard unit }
+   Common, Memory,                                    { GFV standard units }
    Objects, Drivers, Views, Menus, HistList, Dialogs; { GFV standard units }
    Objects, Drivers, Views, Menus, HistList, Dialogs; { GFV standard units }
 
 
 {***************************************************************************}
 {***************************************************************************}
@@ -139,6 +140,7 @@ CONST
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 CONST
 CONST
   { Turbo Vision 1.0 Color Palettes }
   { Turbo Vision 1.0 Color Palettes }
+
    CColor =
    CColor =
          #$81#$70#$78#$74#$20#$28#$24#$17#$1F#$1A#$31#$31#$1E#$71#$1F +
          #$81#$70#$78#$74#$20#$28#$24#$17#$1F#$1A#$31#$31#$1E#$71#$1F +
      #$37#$3F#$3A#$13#$13#$3E#$21#$3F#$70#$7F#$7A#$13#$13#$70#$7F#$7E +
      #$37#$3F#$3A#$13#$13#$3E#$21#$3F#$70#$7F#$7A#$13#$13#$70#$7F#$7E +
@@ -160,7 +162,8 @@ CONST
    { Turbo Vision 2.0 Color Palettes }
    { Turbo Vision 2.0 Color Palettes }
 
 
    CAppColor =
    CAppColor =
-         #$81#$70#$78#$74#$20#$28#$24#$17#$1F#$1A#$31#$31#$1E#$71#$1F +
+         {$IFDEF OS_WINDOWS}#$81+{$ELSE}#$71+{$ENDIF}
+         #$70#$78#$74#$20#$28#$24#$17#$1F#$1A#$31#$31#$1E#$71#$1F +
      #$37#$3F#$3A#$13#$13#$3E#$21#$3F#$70#$7F#$7A#$13#$13#$70#$7F#$7E +
      #$37#$3F#$3A#$13#$13#$3E#$21#$3F#$70#$7F#$7A#$13#$13#$70#$7F#$7E +
      #$70#$7F#$7A#$13#$13#$70#$70#$7F#$7E#$20#$2B#$2F#$78#$2E#$70#$30 +
      #$70#$7F#$7A#$13#$13#$70#$70#$7F#$7E#$20#$2B#$2F#$78#$2E#$70#$30 +
      #$3F#$3E#$1F#$2F#$1A#$20#$72#$31#$31#$30#$2F#$3E#$31#$13#$38#$00 +
      #$3F#$3E#$1F#$2F#$1A#$20#$72#$31#$31#$30#$2F#$3E#$31#$13#$38#$00 +
@@ -423,8 +426,7 @@ CONST Pending: TEvent = (What: evNothing);            { Pending event }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 FUNCTION TvAppMsgHandler (Wnd: hWnd; iMessage, wParam: Sw_Word;
 FUNCTION TvAppMsgHandler (Wnd: hWnd; iMessage, wParam: Sw_Word;
 lParam: LongInt): LongInt; {$IFDEF BIT_16} EXPORT; {$ELSE} STDCALL; {$ENDIF}
 lParam: LongInt): LongInt; {$IFDEF BIT_16} EXPORT; {$ELSE} STDCALL; {$ENDIF}
-VAR Li: LongInt; Min, MAx: TPoint; Event: TEvent; P: PView; Wp: ^TWindowPos;
-    Mm: ^TMinMaxInfo;
+VAR Event: TEvent; P: PView; Mm: ^TMinMaxInfo;
 BEGIN
 BEGIN
    {$IFDEF BIT_16}                                    { 16 BIT CODE }
    {$IFDEF BIT_16}                                    { 16 BIT CODE }
    PtrRec(P).Seg := GetProp(Wnd, ViewSeg);            { Fetch seg property }
    PtrRec(P).Seg := GetProp(Wnd, ViewSeg);            { Fetch seg property }
@@ -566,13 +568,15 @@ BEGIN
    GetPalette := @P;                                  { Return palette }
    GetPalette := @P;                                  { Return palette }
 END;
 END;
 
 
-procedure TBackground.DrawbackGround;
-var
-  B: TDrawBuffer;
-begin
-  MoveChar(B, Pattern, GetColor($01), Size.X);
-  WriteLine(0, 0, Size.X, Size.Y, B);
-end;
+{--TBackGround--------------------------------------------------------------}
+{  DrawBackground -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Sep97 LdB    }
+{---------------------------------------------------------------------------}
+PROCEDURE TBackground.DrawBackground;
+VAR B: TDrawBuffer;
+BEGIN
+   MoveChar(B, Pattern, GetColor($01), Size.X);       { Fill draw buffer }
+   WriteLine(0, 0, Size.X, Size.Y, B);                { Draw to area }
+END;
 
 
 {--TBackGround--------------------------------------------------------------}
 {--TBackGround--------------------------------------------------------------}
 {  Store -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Sep97 LdB             }
 {  Store -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Sep97 LdB             }
@@ -594,7 +598,6 @@ CONSTRUCTOR TDesktop.Init (Var Bounds: Objects.TRect);
 BEGIN
 BEGIN
    Inherited Init(Bounds);                            { Call ancestor }
    Inherited Init(Bounds);                            { Call ancestor }
    GrowMode := gfGrowHiX + gfGrowHiY;                 { Set growmode }
    GrowMode := gfGrowHiX + gfGrowHiY;                 { Set growmode }
-   {GOptions := GOptions AND NOT goNoDrawView;}         { This group draws }
    InitBackground;                                    { Create background }
    InitBackground;                                    { Create background }
    If (Background <> Nil) Then Insert(Background);    { Insert background }
    If (Background <> Nil) Then Insert(Background);    { Insert background }
 END;
 END;
@@ -622,9 +625,9 @@ END;
 PROCEDURE TDesktop.InitBackground;
 PROCEDURE TDesktop.InitBackground;
 {$IFNDEF OS_WINDOWS} CONST Ch: Char = #176; {$ELSE} CONST Ch: Char = #167; {$ENDIF}
 {$IFNDEF OS_WINDOWS} CONST Ch: Char = #176; {$ELSE} CONST Ch: Char = #167; {$ENDIF}
 VAR R: TRect;
 VAR R: TRect;
-BEGIN                                                 { Compatability only }
-   getExtent(R);
-   BackGround := New(PbackGround, Init(R, Ch));
+BEGIN
+   GetExtent(R);                                      { Get desktop extents }
+   BackGround := New(PBackground, Init(R, Ch));       { Insert a background }
 END;
 END;
 
 
 {--TDesktop-----------------------------------------------------------------}
 {--TDesktop-----------------------------------------------------------------}
@@ -784,11 +787,8 @@ VAR I: Integer; R: TRect; {$IFDEF OS_WINDOWS} ODc: HDc; {$ENDIF}
 BEGIN
 BEGIN
    Application := @Self;                              { Set application ptr }
    Application := @Self;                              { Set application ptr }
    InitScreen;                                        { Initialize screen }
    InitScreen;                                        { Initialize screen }
-  { R.Assign(0, 0, ScreenWidth, ScreenHeight); }        { Full screen area }
-   R.A.X := 0;
-   R.A.Y := 0;
-   R.B.X := -(SysScreenWidth);
-   R.B.Y := -(SysScreenHeight);
+   R.Assign(0, 0, -(GetMaxX(TextModeGFV)+1),
+     -(GetMaxY(TextModeGFV)+1));                      { Full screen area }
    Inherited Init(R);                                 { Call ancestor }
    Inherited Init(R);                                 { Call ancestor }
    State := sfVisible + sfSelected + sfFocused +
    State := sfVisible + sfSelected + sfFocused +
       sfModal + sfExposed;                            { Deafult states }
       sfModal + sfExposed;                            { Deafult states }
@@ -808,11 +808,11 @@ BEGIN
    CreateWindowNow(swp_Show);                         { Create app window }
    CreateWindowNow(swp_Show);                         { Create app window }
    {$ENDIF}
    {$ENDIF}
    {$IFNDEF OS_DOS}                                   { WIN/NT/OS2 CODE }
    {$IFNDEF OS_DOS}                                   { WIN/NT/OS2 CODE }
-   AppWindow := HWindow;
-   Size.X := ScreenWidth;
-   Size.Y := ScreenHeight;
-   RawSize.X := ScreenWidth * SysFontWidth;
-   RawSize.Y := ScreenHeight * SysFontHeight - 1;
+   AppWindow := HWindow;                              { Set app window handle }
+   Size.X := ScreenWidth;                             { Set x size value }
+   Size.Y := ScreenHeight;                            { Set y size value }
+   RawSize.X := ScreenWidth * SysFontWidth;           { Set rawsize x }
+   RawSize.Y := ScreenHeight * SysFontHeight - 1;     { Set rawsize y }
    {$ENDIF}
    {$ENDIF}
    InitStatusLine;                                    { Init status line }
    InitStatusLine;                                    { Init status line }
    If (StatusLine <> Nil) Then Insert(StatusLine);    { Insert status line }
    If (StatusLine <> Nil) Then Insert(StatusLine);    { Insert status line }
@@ -837,8 +837,10 @@ BEGIN
   {$IFDEF OS_WINDOWS}                                 { WIN/NT CODE }
   {$IFDEF OS_WINDOWS}                                 { WIN/NT CODE }
    For I := 0 To 15 Do DeleteObject(ColBrush[I]);     { Delete brushes }
    For I := 0 To 15 Do DeleteObject(ColBrush[I]);     { Delete brushes }
    For I := 0 To 15 Do DeleteObject(ColPen[I]);       { Delete pens }
    For I := 0 To 15 Do DeleteObject(ColPen[I]);       { Delete pens }
-   AppWindow := 0;                                    { Zero app window }
-   {$ENDIF}
+  {$ENDIF}
+  {$IFNDEF OS_DOS}                                    { WIN/NT/OS2 CODE }
+   AppWindow := 0;                                    { Zero app window handle }
+  {$ENDIF}
 END;
 END;
 
 
 {--TProgram-----------------------------------------------------------------}
 {--TProgram-----------------------------------------------------------------}
@@ -1041,7 +1043,7 @@ END;
 {  HandleEvent -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Sep97 LdB       }
 {  HandleEvent -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Sep97 LdB       }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TProgram.HandleEvent (Var Event: TEvent);
 PROCEDURE TProgram.HandleEvent (Var Event: TEvent);
-VAR I: Word; C: Char;
+VAR C: Char;
 BEGIN
 BEGIN
    If (Event.What = evKeyDown) Then Begin             { Key press event }
    If (Event.What = evKeyDown) Then Begin             { Key press event }
      C := GetAltChar(Event.KeyCode);                  { Get alt char code }
      C := GetAltChar(Event.KeyCode);                  { Get alt char code }
@@ -1298,7 +1300,10 @@ END;
 END.
 END.
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 11:43:13  marco
+ 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
   * Added CVS log and ID entries.
   * Added CVS log and ID entries.
 
 
 
 

+ 6 - 2
fv/dialogs.pas

@@ -97,7 +97,8 @@ USES
      OS2Def, OS2Base, OS2PMAPI,                       { Standard units }
      OS2Def, OS2Base, OS2PMAPI,                       { Standard units }
    {$ENDIF}
    {$ENDIF}
 
 
-   Common, GFVGraph, Objects, Drivers, Views, Validate; { Standard GFV units }
+   GFVGraph,                                          { GFV standard unit }
+   Common, Objects, Drivers, Views, Validate;         { Standard GFV units }
 
 
 {***************************************************************************}
 {***************************************************************************}
 {                              PUBLIC CONSTANTS                             }
 {                              PUBLIC CONSTANTS                             }
@@ -3215,7 +3216,10 @@ END;
 END.
 END.
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:20  marco
+ 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:20  marco
   * CVS log and ID tags
   * CVS log and ID tags
 
 
 
 

+ 136 - 49
fv/drivers.pas

@@ -5,9 +5,10 @@
 {                                                          }
 {                                                          }
 {    Interface Copyright (c) 1992 Borland International    }
 {    Interface Copyright (c) 1992 Borland International    }
 {                                                          }
 {                                                          }
-{    Copyright (c) 1996, 1997, 1998, 1999 by Leon de Boer  }
+{    Copyright (c) 1996, 1997, 1998, 1999, 2000            }
+{    by Leon de Boer                                       }
 {    [email protected]  - primary e-mail addr          }
 {    [email protected]  - primary e-mail addr          }
-{    ldeboer@starwon.com.au - backup e-mail addr           }
+{    ldeboer@projectent.com.au - backup e-mail addr        }
 {                                                          }
 {                                                          }
 {    Original FormatStr kindly donated by Marco Schmidt    }
 {    Original FormatStr kindly donated by Marco Schmidt    }
 {                                                          }
 {                                                          }
@@ -62,6 +63,7 @@
 {  1.98     09 Sep 99   GetMouseEvent fixed for OS2.       }
 {  1.98     09 Sep 99   GetMouseEvent fixed for OS2.       }
 {  1.99     03 Nov 99   FPC windows support added.         }
 {  1.99     03 Nov 99   FPC windows support added.         }
 {  2.00     26 Nov 99   Graphics stuff moved to GFVGraph   }
 {  2.00     26 Nov 99   Graphics stuff moved to GFVGraph   }
+{  2.01     21 May 00   DOS fixed to use std GRAPH unit    }
 {**********************************************************}
 {**********************************************************}
 
 
 UNIT Drivers;
 UNIT Drivers;
@@ -101,10 +103,13 @@ USES
        {$IFDEF PPC_FPC}                               { FPC WINDOWS COMPILER }
        {$IFDEF PPC_FPC}                               { FPC WINDOWS COMPILER }
          Windows,                                     { Standard unit }
          Windows,                                     { Standard unit }
        {$ELSE}                                        { OTHER COMPILERS }
        {$ELSE}                                        { OTHER COMPILERS }
-         WinTypes, WinProcs,                          { Standard units }
+         WinTypes, WinProcs, Strings,                 { Standard units }
+         {$IFDEF BIT_16}                              { 16 BIT WINDOWS COMPILER }
+         Win31,                                       { Standard unit }
+         {$ENDIF}
        {$ENDIF}
        {$ENDIF}
        {$IFDEF PPC_DELPHI}                            { DELPHI3+ COMPILER }
        {$IFDEF PPC_DELPHI}                            { DELPHI3+ COMPILER }
-       SysUtils, Messages,                            { Standard unit }
+         SysUtils, Messages,                          { Standard unit }
        {$ENDIF}
        {$ENDIF}
      {$ELSE}                                          { SYBIL2+ COMPILER }
      {$ELSE}                                          { SYBIL2+ COMPILER }
        WinBase, WinDef, WinUser, WinGDI,              { Standard units }
        WinBase, WinDef, WinUser, WinGDI,              { Standard units }
@@ -120,7 +125,11 @@ USES
      {$ENDIF}
      {$ENDIF}
    {$ENDIF}
    {$ENDIF}
 
 
-   Common, GFVGraph, Objects;                         { GFV standard units }
+   GFVGraph,                                          { GFV graphics unit }
+   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   Graph,                                             { Standard bp unit }
+   {$ENDIF}
+   Common, Objects;                                   { GFV standard units }
 
 
 {***************************************************************************}
 {***************************************************************************}
 {                              PUBLIC CONSTANTS                             }
 {                              PUBLIC CONSTANTS                             }
@@ -578,6 +587,7 @@ PROCEDURE ShowMouseCursor;
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {$IFDEF OS_WINDOWS}                                   { WIN/NT CODE }
 {$IFDEF OS_WINDOWS}                                   { WIN/NT CODE }
 CONST
 CONST
+   RawHandler   : Boolean = False;
    AppWindow    : HWnd = 0;                           { Application window }
    AppWindow    : HWnd = 0;                           { Application window }
    DefGfvFont   : HFont = 0;                          { Default GFV font }
    DefGfvFont   : HFont = 0;                          { Default GFV font }
    DefFontWeight: Integer = fw_Normal;                { Default font weight }
    DefFontWeight: Integer = fw_Normal;                { Default font weight }
@@ -624,6 +634,7 @@ CONST
 {          >>> NEW INITIALIZED DOS/DPMI/WIN/NT/OS2 VARIABLES <<<            }
 {          >>> NEW INITIALIZED DOS/DPMI/WIN/NT/OS2 VARIABLES <<<            }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 CONST
 CONST
+   TextModeGFV    : Boolean = False;                  { DOS/DPMI textmode op }
    DefLineNum     : Integer = 25;                     { Default line number }
    DefLineNum     : Integer = 25;                     { Default line number }
    DefFontHeight  : Integer = 0;                      { Default font height }
    DefFontHeight  : Integer = 0;                      { Default font height }
    SysFontWidth   : Integer = 8;                      { System font width }
    SysFontWidth   : Integer = 8;                      { System font width }
@@ -662,7 +673,7 @@ VAR
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {                 DOS/DPMI MOUSE INTERRUPT EVENT QUEUE SIZE                 }
 {                 DOS/DPMI MOUSE INTERRUPT EVENT QUEUE SIZE                 }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-CONST EventQSize = 16;                                { Default irq bufsize }
+CONST EventQSize = 16;                                { Default int bufsize }
 {$ENDIF}
 {$ENDIF}
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
@@ -1279,6 +1290,16 @@ ASSEMBLER;
      CMP DL, 25;                                      { Check screen ht }
      CMP DL, 25;                                      { Check screen ht }
      SBB AH, AH;                                      { Subtract borrow }
      SBB AH, AH;                                      { Subtract borrow }
      INC AH;                                          { Make #1 if in high }
      INC AH;                                          { Make #1 if in high }
+     MOV CL, 1;                                       { Preset value of 1 }
+     OR DL, DL;                                       { Test for zero }
+     JNZ @@1;                                         { Branch if not zero }
+     MOV CL, 0                                        { Set value to zero }
+     MOV DL, 24;                                      { Zero = 24 lines }
+   @@1:
+     INC DL;                                          { Add one line }
+     MOV ScreenWidth, DH;                             { Hold screen width }
+     MOV ScreenHeight, DL;                            { Hold screen height }
+     MOV HiResScreen, CL;                             { Set hires mask }
      CMP AL, smMono;                                  { Is screen mono }
      CMP AL, smMono;                                  { Is screen mono }
      JZ @@Exit1;                                      { Exit of mono }
      JZ @@Exit1;                                      { Exit of mono }
      CMP AL, smBW80;                                  { Is screen B&W }
      CMP AL, smBW80;                                  { Is screen B&W }
@@ -1306,6 +1327,16 @@ ASSEMBLER;
      CMPB $25, %DL;                                   { Check screen ht }
      CMPB $25, %DL;                                   { Check screen ht }
      SBB %AH, %AH;                                    { Subtract borrow }
      SBB %AH, %AH;                                    { Subtract borrow }
      INCB %AH;                                        { Make #1 if in high }
      INCB %AH;                                        { Make #1 if in high }
+     MOVB $1, %CL;                                    { Preset value of 1 }
+     ORB %DL, %DL;                                    { Test for zero }
+     JNZ .L_JMP1;                                     { Branch if not zero }
+     MOVB $0, %CL;                                    { Set value to zero }
+     MOVB $24, %DL;                                   { Zero = 24 lines }
+   .L_JMP1:
+     INCB %DL;                                        { Add one line }
+     MOVB %DH, SCREENWIDTH;                           { Hold screen width }
+     MOVB %DL, SCREENHEIGHT;                          { Hold screen height }
+     MOVB %CL, HIRESSCREEN;                           { Set hires mask }
      CMPB $07, %AL;                                   { Is screen mono }
      CMPB $07, %AL;                                   { Is screen mono }
      JZ .L_Exit1;                                     { Exit of mono }
      JZ .L_Exit1;                                     { Exit of mono }
      CMPB $02, %AL;                                   { Is screen B&W }
      CMPB $02, %AL;                                   { Is screen B&W }
@@ -1700,7 +1731,16 @@ BEGIN
        WM_SysKeyDown: Begin                           { SYSTEM KEY DOWN }
        WM_SysKeyDown: Begin                           { SYSTEM KEY DOWN }
          If (NumPos > 0) Then Begin                   { Numerics entry op }
          If (NumPos > 0) Then Begin                   { Numerics entry op }
            Case Msg.wParam Of
            Case Msg.wParam Of
-             VK_Insert: B := 0;                       { Key value = 0 }
+             VK_Insert: Begin                         { Insert key }
+               If (GetShiftState AND kbAltShift <> 0) { Alt key down }
+               Then Begin
+                 Event.What := evKeyDown;             { Key down event }
+                 Event.KeyCode := kbAltIns;           { Alt + Ins key }
+                 Handled := True;                     { Set key handled }
+                 Exit;                                { Now exit }
+               End;
+               B := 0;                                { Key value = 0 }
+             End;
              VK_End: B := 1;                          { Key value = 1 }
              VK_End: B := 1;                          { Key value = 1 }
              VK_Down: B := 2;                         { Key value = 2 }
              VK_Down: B := 2;                         { Key value = 2 }
              VK_Next: B := 3;                         { Key value = 3 }
              VK_Next: B := 3;                         { Key value = 3 }
@@ -1862,7 +1902,7 @@ BEGIN
 END;
 END;
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{  GetMouseEvent -> Platforms DOS/DPMI/WINDOWS/OS2 - Updated 09Sep98 LdB    }
+{  GetMouseEvent -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 09Sep98 LdB     }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE GetMouseEvent (Var Event: TEvent);
 PROCEDURE GetMouseEvent (Var Event: TEvent);
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
@@ -2121,10 +2161,10 @@ BEGIN
    Event.What := evNothing;                           { Preset no event }
    Event.What := evNothing;                           { Preset no event }
    {$IFDEF PPC_FPC}                                   { FPC WINDOWS COMPILER }
    {$IFDEF PPC_FPC}                                   { FPC WINDOWS COMPILER }
    If PeekMessage(@Msg, 0, WM_MouseFirst,
    If PeekMessage(@Msg, 0, WM_MouseFirst,
-   WM_MouseLast, pm_Remove) Then Begin                { Fetch mouse message }
+     WM_MouseLast, pm_Remove) Then Begin              { Fetch mouse message }
    {$ELSE}                                            { OTHER COMPILERS }
    {$ELSE}                                            { OTHER COMPILERS }
    If PeekMessage(Msg, 0, WM_MouseFirst,
    If PeekMessage(Msg, 0, WM_MouseFirst,
-   WM_MouseLast, pm_Remove) Then Begin                { Fetch mouse message }
+     WM_MouseLast, pm_Remove) Then Begin              { Fetch mouse message }
    {$ENDIF}
    {$ENDIF}
      TranslateMessage(Msg);                           { Translate message }
      TranslateMessage(Msg);                           { Translate message }
      DispatchMessage(Msg);                            { Dispatch message }
      DispatchMessage(Msg);                            { Dispatch message }
@@ -2242,12 +2282,19 @@ VAR {$IFDEF OS_DOS} I, J: Integer; Ts: TextSettingsType; {$ENDIF}
     {$IFDEF OS_OS2} Ts, Fs: Integer; Ps: HPs; Tm: FontMetrics; {$ENDIF}
     {$IFDEF OS_OS2} Ts, Fs: Integer; Ps: HPs; Tm: FontMetrics; {$ENDIF}
 BEGIN
 BEGIN
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
-   I := Detect;                                       { Detect video card }
-   J := 0;                                            { Zero select mode }
-   InitGraph(I, J, '');                               { Initialize graphics }
-   I := GetMaxX;                                      { Fetch max x size }
-   J := GetMaxY;                                      { Fetch max y size }
-   {$IFDEF PPC_FPC}                                   { FPC DOS COMPILER }
+     If (TextModeGFV = True) Then Begin               { TEXT MODE GFV }
+       I := ScreenWidth*8 -1;                         { Mouse width }
+       J := ScreenHeight*8 -1;                        { Mouse height }
+       SysScreenWidth := I + 1;
+       SysScreenHeight := J + 1;
+     End Else Begin                                   { GRAPHICS MODE GFV }
+       I := Detect;                                   { Detect video card }
+       J := 0;                                        { Zero select mode }
+       InitGraph(I, J, '');                           { Initialize graphics }
+       I := GetMaxX;                                  { Fetch max x size }
+       J := GetMaxY;                                  { Fetch max y size }
+     End;
+     {$IFDEF PPC_FPC}                                 { FPC DOS COMPILER }
      ASM
      ASM
        MOVW $7, %AX;                                  { Set function  id }
        MOVW $7, %AX;                                  { Set function  id }
        MOVW $0, %CX;                                  { Clear register }
        MOVW $0, %CX;                                  { Clear register }
@@ -2259,10 +2306,12 @@ BEGIN
        INT $0x33;                                     { Set mouse y movement }
        INT $0x33;                                     { Set mouse y movement }
      END;
      END;
      Lock_Code(Pointer(@ShowTheMouse), 400);          { Lock cursor code }
      Lock_Code(Pointer(@ShowTheMouse), 400);          { Lock cursor code }
-     MouseMoveProc := ShowTheMouse;                   { Set move function }
-     ShowMouseProc := ShowTheMouse;                   { Set show function }
-     HideMouseProc := ShowTheMouse;                   { Set hide function }
-   {$ELSE}                                            { OTHER DOS COMPILERS }
+     If (TextModeGFV <> True) Then Begin              { GRAPHICS MODE GFV }
+       MouseMoveProc := ShowTheMouse;                 { Set move function }
+       ShowMouseProc := ShowTheMouse;                 { Set show function }
+       HideMouseProc := ShowTheMouse;                 { Set hide function }
+     End;
+     {$ELSE}                                          { OTHER DOS COMPILERS }
      ASM
      ASM
        MOV AX, 7;                                     { Set function  id }
        MOV AX, 7;                                     { Set function  id }
        XOR CX, CX;                                    { Clear register }
        XOR CX, CX;                                    { Clear register }
@@ -2273,25 +2322,33 @@ BEGIN
        MOV DX, J;                                     { Maximum y size }
        MOV DX, J;                                     { Maximum y size }
        INT 33H;                                       { Set mouse y movement }
        INT 33H;                                       { Set mouse y movement }
      END;
      END;
-   {$ENDIF}
-     SysScreenWidth := GetMaxX+1;                     { Max screen width }
-     SysScreenHeight := GetMaxY+1;                    { Max screen height }
-
-     If (DefFontHeight = 0) Then                      { Font height not set }
-       J := SysScreenHeight DIV DefLineNum            { Approx font height }
-       Else J := DefFontHeight;                       { Use set font height }
-     I := J DIV (TextHeight('H')+4);                  { Approx magnification }
-     If (I < 1) Then I := 1;                          { Must be 1 or above }
-     GetTextSettings(Ts);                             { Get text style }
-     SetTextStyle(Ts.Font, Ts.Direction, I);          { Set new font settings }
-     SysFontWidth := TextWidth('H');                  { Transfer font width }
-     SysFontHeight := TextHeight('H')+4;              { Transfer font height }
+     {$ENDIF}
+     If (TextModeGFV = True) Then Begin               { TEXT MODE GFV }
+       SysFontWidth := 8;                             { Font width }
+       SysFontHeight := 8;                            { Font height }
+     End Else Begin                                   { GRAPHICS MODE GFV }
+       If (DefFontHeight = 0) Then                    { Font height not set }
+         J := (GetMaxY+1) DIV DefLineNum              { Approx font height }
+         Else J := DefFontHeight;                     { Use set font height }
+       I := J DIV (TextHeight('H')+4);                { Approx magnification }
+       If (I < 1) Then I := 1;                        { Must be 1 or above }
+       GetTextSettings(Ts);                           { Get text style }
+       SetTextStyle(Ts.Font, Ts.Direction, I);        { Set new font settings }
+       SysFontWidth := TextWidth('H');                { Transfer font width }
+       SysFontHeight := TextHeight('H')+4;            { Transfer font height }
+       ScreenWidth := (SysScreenWidth+1) DIV
+         SysFontWidth;                                { Calc screen width }
+       ScreenHeight := (SysScreenHeight+1) DIV
+         SysFontHeight;                               { Calc screen height }
+     End;
    {$ENDIF}
    {$ENDIF}
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
      SysScreenWidth := GetSystemMetrics(
      SysScreenWidth := GetSystemMetrics(
        SM_CXFullScreen)-GetSystemMetrics(SM_CXFrame); { Max screen width }
        SM_CXFullScreen)-GetSystemMetrics(SM_CXFrame); { Max screen width }
      SysScreenHeight := GetSystemMetrics(
      SysScreenHeight := GetSystemMetrics(
        SM_CYFullScreen);                              { Max screen height }
        SM_CYFullScreen);                              { Max screen height }
+     SystemParametersInfo(SPI_GETICONTITLELOGFONT,
+       SizeOf(TLogFont), @TempFont, 0);               { Get system font }
      With TempFont Do Begin
      With TempFont Do Begin
        If (DefFontHeight = 0) Then Begin              { Font height not set }
        If (DefFontHeight = 0) Then Begin              { Font height not set }
          lfHeight := SysScreenHeight DIV DefLineNum;  { Best guess height }
          lfHeight := SysScreenHeight DIV DefLineNum;  { Best guess height }
@@ -2309,11 +2366,20 @@ BEGIN
        lfQuality       := Proof_Quality;              { Proof quality }
        lfQuality       := Proof_Quality;              { Proof quality }
        lfPitchAndFamily:= Variable_Pitch OR
        lfPitchAndFamily:= Variable_Pitch OR
          Fixed_Pitch;                                 { Either fitch format }
          Fixed_Pitch;                                 { Either fitch format }
+(*       {$IFDEF WESTERNS}
        FillChar(lfFaceName, SizeOf(lfFaceName), #0);  { Clear memory area }
        FillChar(lfFaceName, SizeOf(lfFaceName), #0);  { Clear memory area }
        Move(DefFontStyle[1], lfFacename,
        Move(DefFontStyle[1], lfFacename,
          Length(DefFontStyle));                       { Transfer style name }
          Length(DefFontStyle));                       { Transfer style name }
+       {$ELSE}
+       DefFontStyle[0] := Chr(StrLen(lfFacename));
+       Move(lfFacename, DefFontStyle[1], Ord(DefFontStyle[0]));
+       {$ENDIF}*)
      End;
      End;
-     DefGFVFont := CreateFontIndirect(TempFont);      { Create a default font }
+     {$IFDEF PPC_FPC}                                 { FPC WINDOWS COMPILER }
+       DefGFVFont := CreateFontIndirect(@TempFont);   { Create a default font }
+     {$ELSE}
+       DefGFVFont := CreateFontIndirect(TempFont);    { Create a default font }
+     {$ENDIF}
      Dc := GetDc(0);                                  { Get screen context }
      Dc := GetDc(0);                                  { Get screen context }
      Mem := CreateCompatibleDC(Dc);                   { Compatable context }
      Mem := CreateCompatibleDC(Dc);                   { Compatable context }
      SelectObject(Mem, DefGFVFont);                   { Select the font }
      SelectObject(Mem, DefGFVFont);                   { Select the font }
@@ -2358,23 +2424,24 @@ BEGIN
      GpiQueryFontMetrics(Ps, SizeOf(Tm), Tm);         { Get text metrics }
      GpiQueryFontMetrics(Ps, SizeOf(Tm), Tm);         { Get text metrics }
      SysFontWidth := Tm.lAveCharWidth+1;              { Transfer font width }
      SysFontWidth := Tm.lAveCharWidth+1;              { Transfer font width }
      SysFontHeight := Tm.lMaxBaselineExt;             { Transfer font height }
      SysFontHeight := Tm.lMaxBaselineExt;             { Transfer font height }
-    { SysFontheight := SysScreenheight DIV DefLineNum;}
      WinReleasePS(Ps);                                { Release desktop PS }
      WinReleasePS(Ps);                                { Release desktop PS }
      DefPointer := WinQuerySysPointer(HWND_DESKTOP,
      DefPointer := WinQuerySysPointer(HWND_DESKTOP,
        SPTR_ARROW, False);                            { Hold default pointer }
        SPTR_ARROW, False);                            { Hold default pointer }
    {$ENDIF}
    {$ENDIF}
-   ScreenWidth := SysScreenWidth DIV SysFontWidth;    { Calc screen width }
-   ScreenHeight := SysScreenHeight DIV SysFontHeight; { Calc screen height }
-   SysScreenWidth := ScreenWidth * SysFontWidth;      { Actual width }
-   SysScreenHeight := ScreenHeight * SysFontHeight;   { Actual height }
-   {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
-   Inc(SysScreenWidth, 2*GetSystemMetrics(SM_CXFrame)); { Max screen width }
-   Inc(SysScreenHeight, GetSystemMetrics(SM_CYCaption)
-     + GetSystemMetrics(SM_CYFrame));                 { Max screen height }
-   {$ENDIF}
-   {$IFDEF OS_OS2}                                    { OS2 CODE }
-   Inc(SysScreenWidth, Fs);                           { Max screen width }
-   Inc(SysScreenHeight, Ts);                          { Max screen height }
+   {$IFNDEF OS_DOS}                                   { WIN/NT/OS2 ONLY }
+     ScreenWidth := SysScreenWidth DIV SysFontWidth;  { Calc screen width }
+     ScreenHeight := SysScreenHeight DIV SysFontHeight;{ Calc screen height }
+     SysScreenWidth := ScreenWidth * SysFontWidth;    { Actual width }
+     SysScreenHeight := ScreenHeight * SysFontHeight; { Actual height }
+     {$IFDEF OS_WINDOWS}                              { WIN/NT CODE }
+     Inc(SysScreenWidth, 2*GetSystemMetrics(SM_CXFrame));{ Max screen width }
+     Inc(SysScreenHeight, GetSystemMetrics(SM_CYCaption)
+       + GetSystemMetrics(SM_CYFrame));               { Max screen height }
+     {$ENDIF}
+     {$IFDEF OS_OS2}                                  { OS2 CODE }
+     Inc(SysScreenWidth, Fs);                         { Max screen width }
+     Inc(SysScreenHeight, Ts);                        { Max screen height }
+     {$ENDIF}
    {$ENDIF}
    {$ENDIF}
 END;
 END;
 
 
@@ -2390,7 +2457,24 @@ BEGIN
      HideMouseProc := Nil;                            { Clr hide mouse ptr }
      HideMouseProc := Nil;                            { Clr hide mouse ptr }
      UnLock_Code(Pointer(@ShowTheMouse), 400);        { Unlock cursor code }
      UnLock_Code(Pointer(@ShowTheMouse), 400);        { Unlock cursor code }
      {$ENDIF}
      {$ENDIF}
-     CloseGraph;                                      { Close down graphics }
+     If (TextModeGFV <> True) Then CloseGraph         { Close down graphics }
+     Else Begin                                       { Text mode gfv }
+       {$IFDEF PPC_FPC}                               { FPC DOS COMPILER }
+       ASM
+         MOVW SCREENMODE, %AX;                        { Original screen mode }
+         PUSH %EBP;                                   { Save register }
+         INT $0x10;                                   { Reset video }
+         POP %EBP;                                    { Restore register }
+       END;
+       {$ELSE}                                        { OTHER DOS COMPILERS }
+       ASM
+         MOV AX, ScreenMode;                          { Original screen mode }
+         PUSH BP;                                     { Save register }
+         INT 10H;                                     { Reset video }
+         POP BP;                                      { Restore register }
+       END;
+       {$ENDIF}
+     End;
    {$ENDIF}
    {$ENDIF}
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
      If (DefGFVFont <> 0) Then                        { Check font created }
      If (DefGFVFont <> 0) Then                        { Check font created }
@@ -2625,7 +2709,10 @@ BEGIN
 END.
 END.
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:21  marco
+ 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
   * CVS log and ID tags
 	
 	
 
 

+ 32 - 20
fv/fileio.pas

@@ -5,7 +5,7 @@
 {                                                          }
 {                                                          }
 {   Copyright (c) 1996, 1997, 1998, 1999 by Leon de Boer   }
 {   Copyright (c) 1996, 1997, 1998, 1999 by Leon de Boer   }
 {   [email protected]  - primary e-mail address        }
 {   [email protected]  - primary e-mail address        }
-{   ldeboer@starwon.com.au - backup e-mail address         }
+{   ldeboer@projectent.com.au - backup e-mail address      }
 {                                                          }
 {                                                          }
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {                                                          }
 {                                                          }
@@ -32,6 +32,7 @@
 {        OS2      - Virtual Pascal 1.0+     (32 Bit)       }
 {        OS2      - Virtual Pascal 1.0+     (32 Bit)       }
 {                 - Speed Pascal 1.0+       (32 Bit)       }
 {                 - Speed Pascal 1.0+       (32 Bit)       }
 {                 - C'T patch to BP         (16 Bit)       }
 {                 - C'T patch to BP         (16 Bit)       }
+{        LINUX    - FPC 1.0.2+              (32 Bit)       }
 {                                                          }
 {                                                          }
 {******************[ REVISION HISTORY ]********************}
 {******************[ REVISION HISTORY ]********************}
 {  Version  Date        Fix                                }
 {  Version  Date        Fix                                }
@@ -46,6 +47,7 @@
 {  1.60     14 Jun 99   References to Common.pas added.    }
 {  1.60     14 Jun 99   References to Common.pas added.    }
 {  1.61     07 Jul 99   Speedsoft SYBIL 2.0 code added.    }
 {  1.61     07 Jul 99   Speedsoft SYBIL 2.0 code added.    }
 {  1.62     03 Nov 99   FPC windows support added.         }
 {  1.62     03 Nov 99   FPC windows support added.         }
+{  1.70     10 Nov 00   Revamp using changed common unit   }
 {**********************************************************}
 {**********************************************************}
 
 
 UNIT FileIO;
 UNIT FileIO;
@@ -87,7 +89,9 @@ UNIT FileIO;
   {$ENDIF}
   {$ENDIF}
 {$ENDIF}
 {$ENDIF}
 
 
-USES Common;                                          { Standard GFV unit }
+USES
+  {$IFDEF WIN16} WinTypes, WinProcs, {$ENDIF}         { Stardard BP units }
+  Common;                                             { Standard GFV unit }
 
 
 {***************************************************************************}
 {***************************************************************************}
 {                             PUBLIC CONSTANTS                              }
 {                             PUBLIC CONSTANTS                              }
@@ -138,9 +142,9 @@ TYPE
 The file opened by the handle is closed. If close action is successful
 The file opened by the handle is closed. If close action is successful
 true is returned but if the handle is invalid or a file error occurs
 true is returned but if the handle is invalid or a file error occurs
 false will be returned.
 false will be returned.
-20Oct98 LdB
+14Nov00 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-FUNCTION FileClose (Handle: Word): Boolean;
+FUNCTION FileClose (Handle: THandle): Boolean;
 
 
 {-FileOpen-----------------------------------------------------------
 {-FileOpen-----------------------------------------------------------
 Given a valid filename to file that exists, is not locked with a valid
 Given a valid filename to file that exists, is not locked with a valid
@@ -148,7 +152,7 @@ access mode the file is opened and the file handle returned. If the
 name or mode is invalid or an error occurs the return will be zero.
 name or mode is invalid or an error occurs the return will be zero.
 27Oct98 LdB
 27Oct98 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-FUNCTION FileOpen (Var FileName: AsciiZ; Mode: Word): Word;
+FUNCTION FileOpen (Var FileName: AsciiZ; Mode: Word): THandle;
 
 
 {-SetFileSize--------------------------------------------------------
 {-SetFileSize--------------------------------------------------------
 The file opened by the handle is set the given size. If the action is
 The file opened by the handle is set the given size. If the action is
@@ -156,7 +160,7 @@ successful zero is returned but if the handle is invalid or a file error
 occurs a standard file error value will be returned.
 occurs a standard file error value will be returned.
 21Oct98 LdB
 21Oct98 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-FUNCTION SetFileSize (Handle: Word; FileSize: LongInt): Word;
+FUNCTION SetFileSize (Handle: THandle; FileSize: LongInt): Word;
 
 
 {-SetFilePos---------------------------------------------------------
 {-SetFilePos---------------------------------------------------------
 The file opened by the handle is set the given position in the file.
 The file opened by the handle is set the given position in the file.
@@ -165,7 +169,7 @@ the position is beyond the file size or a file error occurs a standard
 file error value will be returned.
 file error value will be returned.
 21Oct98 LdB
 21Oct98 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-FUNCTION SetFilePos (Handle: Word; Pos: LongInt; MoveType: Word;
+FUNCTION SetFilePos (Handle: THandle; Pos: LongInt; MoveType: Word;
 Var Actual: LongInt): Word;
 Var Actual: LongInt): Word;
 
 
 {-FileRead-----------------------------------------------------------
 {-FileRead-----------------------------------------------------------
@@ -176,7 +180,7 @@ error occurs the function will return a file error constant and actual
 will contain the bytes transfered before the error if any.
 will contain the bytes transfered before the error if any.
 22Oct98 LdB
 22Oct98 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-FUNCTION FileRead (Handle: Word; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
+FUNCTION FileRead (Handle: THandle; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
 
 
 {-FileWrite----------------------------------------------------------
 {-FileWrite----------------------------------------------------------
 The file opened by the handle has count bytes written to it from the
 The file opened by the handle has count bytes written to it from the
@@ -186,7 +190,7 @@ error occurs the function will return a file error constant and actual
 will contain the bytes transfered before the error if any.
 will contain the bytes transfered before the error if any.
 22Oct98 LdB
 22Oct98 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-FUNCTION FileWrite (Handle: Word; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
+FUNCTION FileWrite (Handle: THandle; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
 
 
 {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
 {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
                                IMPLEMENTATION
                                IMPLEMENTATION
@@ -195,10 +199,8 @@ FUNCTION FileWrite (Handle: Word; Var Buf; Count: Sw_Word; Var Actual: Sw_Word):
 {$IFDEF OS_WINDOWS}                                   { WIN/NT UNITS }
 {$IFDEF OS_WINDOWS}                                   { WIN/NT UNITS }
 
 
   {$IFNDEF PPC_SPEED}                                 { NON SPEED COMPILER }
   {$IFNDEF PPC_SPEED}                                 { NON SPEED COMPILER }
-    {$IFDEF PPC_FPC}                                  { FPC WINDOWS COMPILER }
+    {$IFDEF WIN32}                                    { WIN32 COMPILER }
     USES Windows;                                     { Standard unit }
     USES Windows;                                     { Standard unit }
-    {$ELSE}                                           { NON FPC COMPILER }
-    USES WinTypes, WinProcs;                          { Stardard units }
     {$ENDIF}
     {$ENDIF}
   TYPE LongWord = LongInt;                            { Type fixup }
   TYPE LongWord = LongInt;                            { Type fixup }
   {$ELSE}                                             { SPEEDSOFT COMPILER }
   {$ELSE}                                             { SPEEDSOFT COMPILER }
@@ -228,9 +230,9 @@ FUNCTION FileWrite (Handle: Word; Var Buf; Count: Sw_Word; Var Actual: Sw_Word):
 {***************************************************************************}
 {***************************************************************************}
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{  FileClose -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 20Oct98 LdB         }
+{  FileClose -> Platforms DOS/DPMI/WIN/NT/OS2/LINUX - Updated 14Nov00 LdB   }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-FUNCTION FileClose (Handle: Word): Boolean;
+FUNCTION FileClose (Handle: THandle): Boolean;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    ASSEMBLER;
    ASSEMBLER;
@@ -274,11 +276,18 @@ BEGIN
      Else FileClose := False;                         { Closure failed }
      Else FileClose := False;                         { Closure failed }
 END;
 END;
 {$ENDIF}
 {$ENDIF}
+{$IFDEF OS_LINUX}                                     { LINUX CODE }
+BEGIN
+   fdClose(Handle);                                   { Close the file }
+   If (LinuxError <= 0) Then FileClosed := True       { Close succesful }
+     Else FileClosed := False;                        { Close failed }
+END;
+{$ENDIF}
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {  FileOpen -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 27Oct98 LdB          }
 {  FileOpen -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 27Oct98 LdB          }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-FUNCTION FileOpen (Var FileName: AsciiZ; Mode: Word): Word;
+FUNCTION FileOpen (Var FileName: AsciiZ; Mode: Word): THandle;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    ASSEMBLER;
    ASSEMBLER;
@@ -370,7 +379,7 @@ END;
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {  SetFileSize -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 26Feb97 LdB       }
 {  SetFileSize -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 26Feb97 LdB       }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-FUNCTION SetFileSize (Handle: Word; FileSize: LongInt): Word;
+FUNCTION SetFileSize (Handle: THandle; FileSize: LongInt): Word;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    ASSEMBLER;
    ASSEMBLER;
@@ -441,7 +450,7 @@ END;
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {  SetFilePos -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 25Feb97 LdB        }
 {  SetFilePos -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 25Feb97 LdB        }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-FUNCTION SetFilePos (Handle: Word; Pos: LongInt; MoveType: Word;
+FUNCTION SetFilePos (Handle: THandle; Pos: LongInt; MoveType: Word;
 Var Actual: LongInt): Word;
 Var Actual: LongInt): Word;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
@@ -509,7 +518,7 @@ END;
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {  FileRead -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 22Oct98 LdB          }
 {  FileRead -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 22Oct98 LdB          }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-FUNCTION FileRead (Handle: Word; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
+FUNCTION FileRead (Handle: THandle; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    ASSEMBLER;
    ASSEMBLER;
@@ -567,7 +576,7 @@ END;
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {  FileWrite -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 22Oct98 LdB         }
 {  FileWrite -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 22Oct98 LdB         }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-FUNCTION FileWrite (Handle: Word; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
+FUNCTION FileWrite (Handle: THandle; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    ASSEMBLER;
    ASSEMBLER;
@@ -624,7 +633,10 @@ END;
 END.
 END.
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:21  marco
+ 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
   * CVS log and ID tags
 
 
 
 

+ 162 - 58
fv/gfvgraph.pas

@@ -3,9 +3,9 @@
 {                                                          }
 {                                                          }
 {          System independent GFV GRAPHICS UNIT            }
 {          System independent GFV GRAPHICS UNIT            }
 {                                                          }
 {                                                          }
-{   Copyright (c) 1999 by Leon de Boer                     }
+{   Copyright (c) 1999, 2000 by Leon de Boer               }
 {   [email protected]  - primary e-mail address        }
 {   [email protected]  - primary e-mail address        }
-{   ldeboer@starwon.com.au - backup e-mail address         }
+{   ldeboer@projectent.com.au - backup e-mail address      }
 {                                                          }
 {                                                          }
 {   This unit provides the interlink between the graphics  }
 {   This unit provides the interlink between the graphics  }
 {   used in GFV and the graphics API for the different     }
 {   used in GFV and the graphics API for the different     }
@@ -24,9 +24,6 @@
 {                                                          }
 {                                                          }
 {*****************[ SUPPORTED PLATFORMS ]******************}
 {*****************[ SUPPORTED PLATFORMS ]******************}
 {     16 and 32 Bit compilers                              }
 {     16 and 32 Bit compilers                              }
-{        DOS      - Turbo Pascal 7.0 +      (16 Bit)       }
-{        DPMI     - Turbo Pascal 7.0 +      (16 Bit)       }
-{                 - FPC 0.9912+ (GO32V2)    (32 Bit)       }
 {        WINDOWS  - Turbo Pascal 7.0 +      (16 Bit)       }
 {        WINDOWS  - Turbo Pascal 7.0 +      (16 Bit)       }
 {                 - Delphi 1.0+             (16 Bit)       }
 {                 - Delphi 1.0+             (16 Bit)       }
 {        WIN95/NT - Delphi 2.0+             (32 Bit)       }
 {        WIN95/NT - Delphi 2.0+             (32 Bit)       }
@@ -41,6 +38,8 @@
 {  -------  ---------   ---------------------------------- }
 {  -------  ---------   ---------------------------------- }
 {  1.00     26 Nov 99   Unit started from relocated code   }
 {  1.00     26 Nov 99   Unit started from relocated code   }
 {                       originally from views.pas          }
 {                       originally from views.pas          }
+{  1.01     21 May 00   GetMaxX and GetMaxY added.         }
+{  1.02     05 Dec 00   Fixed DOS/DPMI implementation.     }
 {**********************************************************}
 {**********************************************************}
 
 
 UNIT GFVGraph;
 UNIT GFVGraph;
@@ -73,6 +72,10 @@ UNIT GFVGraph;
 {$V-} { Turn off strict VAR strings }
 {$V-} { Turn off strict VAR strings }
 {====================================================================}
 {====================================================================}
 
 
+{$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
+USES Graph;                                           { Standard unit }
+{$ENDIF}
+
 {***************************************************************************}
 {***************************************************************************}
 {                              PUBLIC CONSTANTS                             }
 {                              PUBLIC CONSTANTS                             }
 {***************************************************************************}
 {***************************************************************************}
@@ -122,33 +125,13 @@ CONST
 CONST
 CONST
    Detect = 0;                                        { Detect video }
    Detect = 0;                                        { Detect video }
 
 
+{$IFDEF OS_DOS}                                       { DOS CODE ONLY }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{                        TEXT JUSTIFICATION CONSTANTS                       }
+{                 DOS GRAPHICS SOLID FILL BAR AREA CONSTANT                 }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 CONST
 CONST
-   LeftText   = 0;                                    { Left justify }
-   CenterText = 1;                                    { Centre justify }
-   RightText  = 2;                                    { Right justify }
-   BottomText = 0;                                    { Bottom justify }
-   TopText    = 2;                                    { Top justify }
-
-{---------------------------------------------------------------------------}
-{                           FILL PATTERN CONSTANTS                          }
-{---------------------------------------------------------------------------}
-CONST
-   EmptyFill      = 0;                                { No fill pattern }
-   SolidFill      = 1;                                { Solid colour }
-   LineFill       = 2;                                { Line fill }
-   LtSlashFill    = 3;                                { Fwd slash line type }
-   SlashFill      = 4;                                { Fwd slash pattern }
-   BkSlashFill    = 5;                                { Back slash pattern }
-   LtBkSlashFill  = 6;                                { Back slash line type }
-   HatchFill      = 7;                                { Hatch pattern }
-   XHatchFill     = 8;                                { Cross hatch pattern }
-   InterleaveFill = 9;                                { Interleaved pattern }
-   WideDotFill    = 10;                               { Wide dot pattern }
-   CloseDotFill   = 11;                               { Close dot pattern }
-   UserFill       = 12;                               { User defined fill }
+   SolidFill = Graph.SolidFill;
+{$ENDIF}
 
 
 {$IFDEF OS_WINDOWS}                                   { WIN/NT CODE }
 {$IFDEF OS_WINDOWS}                                   { WIN/NT CODE }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
@@ -199,7 +182,7 @@ Sets the current write mode constant all subsequent draws etc. are
 then via the set mode.
 then via the set mode.
 26Nov99 LdB
 26Nov99 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-PROCEDURE SetWriteMode (Mode: Byte);
+PROCEDURE SetWriteMode (Mode: Byte; TextMode: Boolean);
 
 
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {                         VIEWPORT CONTROL ROUTINES                         }
 {                         VIEWPORT CONTROL ROUTINES                         }
@@ -209,13 +192,41 @@ PROCEDURE SetWriteMode (Mode: Byte);
 Returns the current viewport and clip parameters in the variable.
 Returns the current viewport and clip parameters in the variable.
 26Nov99 LdB
 26Nov99 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-PROCEDURE GetViewSettings (Var CurrentViewPort: ViewPortType);
+PROCEDURE GetViewSettings (Var CurrentViewPort: ViewPortType; TextMode: Boolean);
 
 
 {-SetViewPort--------------------------------------------------------
 {-SetViewPort--------------------------------------------------------
 Set the current viewport and clip parameters to that requested.
 Set the current viewport and clip parameters to that requested.
 26Nov99 LdB
 26Nov99 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-PROCEDURE SetViewPort (X1, Y1, X2, Y2: Integer; Clip: Boolean);
+PROCEDURE SetViewPort (X1, Y1, X2, Y2: Integer; Clip, TextMode: Boolean);
+
+
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+{                    GRAPHICS DEVICE CAPACITY ROUTINES                      }
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+
+{-GetMaxX------------------------------------------------------------
+Returns X coordinate of maximum value that can be entered in any
+graphics routine, that is the actual screen width in pixels - 1.
+21May2000 LdB
+---------------------------------------------------------------------}
+FUNCTION GetMaxX (TextMode: Boolean): Integer;
+
+{-GetMaxY------------------------------------------------------------
+Returns Y coordinate of maximum value that can be entered in any
+graphics routine, that is the actual screen height in pixels - 1.
+21May2000 LdB
+---------------------------------------------------------------------}
+FUNCTION GetMaxY (TextMode: Boolean): Integer;
+
+{$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+PROCEDURE SetColor(Color: Word);
+PROCEDURE SetFillStyle (Pattern: Word; Color: Word);
+PROCEDURE Bar (X1, Y1, X2, Y2: Integer);
+PROCEDURE Line(X1, Y1, X2, Y2: Integer);
+PROCEDURE Rectangle(X1, Y1, X2, Y2: Integer);
+PROCEDURE OutTextXY(X,Y: Integer; TextString: String);
+{$ENDIF}
 
 
 {***************************************************************************}
 {***************************************************************************}
 {                        INITIALIZED PUBLIC VARIABLES                       }
 {                        INITIALIZED PUBLIC VARIABLES                       }
@@ -241,6 +252,7 @@ CONST
 {               DOS/DPMI/WIN/NT/OS2 INITIALIZED VARIABLES                   }
 {               DOS/DPMI/WIN/NT/OS2 INITIALIZED VARIABLES                   }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 CONST
 CONST
+   FillCol : Integer = 0;
    Cxp     : Integer = 0;                             { Current x position }
    Cxp     : Integer = 0;                             { Current x position }
    Cyp     : Integer = 0;                             { Current y position }
    Cyp     : Integer = 0;                             { Current y position }
    ViewPort: ViewPortType = (X1:0; Y1:0; X2: 639;
    ViewPort: ViewPortType = (X1:0; Y1:0; X2: 639;
@@ -256,11 +268,16 @@ CONST
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{  SetWriteMode -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 09Aug99 LdB      }
+{  SetWriteMode -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 05Dec2000 LdB    }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-PROCEDURE SetWriteMode (Mode: Byte);
+PROCEDURE SetWriteMode (Mode: Byte; TextMode: Boolean);
 BEGIN
 BEGIN
+   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   If TextMode Then WriteMode := Mode                 { Hold write mode }
+     Else Graph.SetWriteMode(Mode);                   { Call graph proc }
+   {$ELSE}                                            { WIN/NT/OS2 CODE }
    WriteMode := Mode;                                 { Hold writemode value }
    WriteMode := Mode;                                 { Hold writemode value }
+   {$ENDIF}
 END;
 END;
 
 
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
@@ -268,44 +285,131 @@ END;
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{  GetViewSettings -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 09Aug99 LdB   }
+{  GetViewSettings -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 05Dec2000 LdB }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-PROCEDURE GetViewSettings (Var CurrentViewPort: ViewPortType);
+PROCEDURE GetViewSettings (Var CurrentViewPort: ViewPortType; TextMode: Boolean);
+{$IFDEF OS_DOS} VAR Ts: Graph.ViewPortType;{$ENDIF}   { DOS/DPMI CODE }
 BEGIN
 BEGIN
+   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   If TextMode Then CurrentViewPort := ViewPort       { Textmode viewport }
+     Else Begin
+       Graph.GetViewSettings(Ts);                     { Get graph settings }
+       CurrentViewPort.X1 := Ts.X1;                   { Transfer X1 }
+       CurrentViewPort.Y1 := Ts.Y1;                   { Transfer Y1 }
+       CurrentViewPort.X2 := Ts.X2;                   { Transfer X2 }
+       CurrentViewPort.Y2 := Ts.Y2;                   { Transfer Y2 }
+       CurrentViewPort.Clip := Ts.Clip;               { Transfer clip mask }
+     End;
+   {$ELSE}                                            { WIN/NT/OS2 CODE }
    CurrentViewPort := ViewPort;                       { Return view port }
    CurrentViewPort := ViewPort;                       { Return view port }
+   {$ENDIF}
+END;
+
+{---------------------------------------------------------------------------}
+{  SetViewPort -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 05Dec2000 LdB     }
+{---------------------------------------------------------------------------}
+PROCEDURE SetViewPort (X1, Y1, X2, Y2: Integer; Clip, TextMode: Boolean);
+BEGIN
+   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   If (TextMode = TRUE) Then Begin                    { TEXT MODE GFV }
+   {$ENDIF}
+     If (X1 < 0) Then X1 := 0;                        { X1 negative fix }
+     If (X1 > SysScreenWidth) Then
+       X1 := SysScreenWidth;                          { X1 off screen fix }
+     If (Y1 < 0) Then Y1 := 0;                        { Y1 negative fix }
+     If (Y1 > SysScreenHeight) Then
+       Y1 := SysScreenHeight;                         { Y1 off screen fix }
+     If (X2 < 0) Then X2 := 0;                        { X2 negative fix }
+     If (X2 > SysScreenWidth) Then
+       X2 := SysScreenWidth;                          { X2 off screen fix }
+     If (Y2 < 0) Then Y2 := 0;                        { Y2 negative fix }
+     If (Y2 > SysScreenHeight) Then
+       Y2 := SysScreenHeight;                         { Y2 off screen fix }
+     ViewPort.X1 := X1;                               { Set X1 port value }
+     ViewPort.Y1 := Y1;                               { Set Y1 port value }
+     ViewPort.X2 := X2;                               { Set X2 port value }
+     ViewPort.Y2 := Y2;                               { Set Y2 port value }
+     ViewPort.Clip := Clip;                           { Set port clip value }
+     Cxp := X1;                                       { Set current x pos }
+     Cyp := Y1;                                       { Set current y pos }
+   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   End Else Begin                                     { GRAPHICS MODE GFV }
+     Graph.SetViewPort(X1, Y1, X2, Y2, Clip);         { Call graph proc }
+   End;
+   {$ENDIF}
 END;
 END;
 
 
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+{                    GRAPHICS DEVICE CAPACITY ROUTINES                      }
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{  SetViewPort -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 09Aug99 LdB       }
+{  GetMaxX - Platforms DOS/DPMI/WIN/NT/OS2 - Updated 05Dec2000 LdB          }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-PROCEDURE SetViewPort (X1, Y1, X2, Y2: Integer; Clip: Boolean);
+FUNCTION GetMaxX (TextMode: Boolean): Integer;
 BEGIN
 BEGIN
-   If (X1 < 0) Then X1 := 0;                          { X1 negative fix }
-   If (X1 > SysScreenWidth) Then
-     X1 := SysScreenWidth;                            { X1 off screen fix }
-   If (Y1 < 0) Then Y1 := 0;                          { Y1 negative fix }
-   If (Y1 > SysScreenHeight) Then
-     Y1 := SysScreenHeight;                           { Y1 off screen fix }
-   If (X2 < 0) Then X2 := 0;                          { X2 negative fix }
-   If (X2 > SysScreenWidth) Then X2 := SysScreenWidth;{ X2 off screen fix }
-   If (Y2 < 0) Then Y2 := 0;                          { Y2 negative fix }
-   If (Y2 > SysScreenHeight) Then
-     Y2 := SysScreenHeight;                           { Y2 off screen fix }
-   ViewPort.X1 := X1;                                 { Set X1 port value }
-   ViewPort.Y1 := Y1;                                 { Set Y1 port value }
-   ViewPort.X2 := X2;                                 { Set X2 port value }
-   ViewPort.Y2 := Y2;                                 { Set Y2 port value }
-   ViewPort.Clip := Clip;                             { Set port clip value }
-   Cxp := X1;                                         { Set current x pos }
-   Cyp := Y1;                                         { Set current y pos }
+   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   If TextMode Then GetMaxX := SysScreenWidth-1       { Screen width }
+     Else GetMaxX := Graph.GetMaxX;                   { Call graph func }
+   {$ELSE}                                            { WIN/NT/OS2 CODE }
+   GetMaxX := SysScreenWidth-1;                       { Screen width }
+   {$ENDIF}
 END;
 END;
 
 
+{---------------------------------------------------------------------------}
+{  GetMaxY - Platforms DOS/DPMI/WIN/NT/OS2 - Updated 05Dec2000 LdB          }
+{---------------------------------------------------------------------------}
+FUNCTION GetMaxY (TextMode: Boolean): Integer;
+BEGIN
+   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   If TextMode Then GetMaxY := SysScreenHeight-1      { Screen height }
+     Else GetMaxY := Graph.GetMaxY;                   { Call graph func }
+   {$ELSE}                                            { WIN/NT/OS2 CODE }
+   GetMaxY := SysScreenHeight-1;                      { Screen height }
+   {$ENDIF}
+END;
+
+{$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
+PROCEDURE SetColor(Color: Word);
+BEGIN
+   Graph.SetColor(Color);                             { Call graph proc }
+END;
+
+PROCEDURE SetFillStyle (Pattern: Word; Color: Word);
+BEGIN
+   Graph.SetFillStyle(Pattern, Color);                { Call graph proc }
+END;
+
+PROCEDURE Bar (X1, Y1, X2, Y2: Integer);
+BEGIN
+   Graph.Bar(X1, Y1, X2, Y2);                         { Call graph proc }
+END;
+
+PROCEDURE Line(X1, Y1, X2, Y2: Integer);
+BEGIN
+   Graph.Line(X1, Y1, X2, Y2);                        { Call graph proc }
+END;
+
+PROCEDURE Rectangle(X1, Y1, X2, Y2: Integer);
+BEGIN
+   Graph.Rectangle(X1, Y1, X2, Y2);                  { Call graph proc }
+END;
+
+PROCEDURE OutTextXY(X,Y: Integer; TextString: string);
+BEGIN
+   Graph.OutTextXY(X, Y, TextString);                 { Call graph proc }
+END;
+{$ENDIF}
+
 END.
 END.
 
 
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:21  marco
+ 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
   * CVS log and ID tags
 
 
 
 
-}
+}

+ 3 - 1
fv/menus.pas

@@ -93,7 +93,9 @@ USES
        WinBase, WinDef,                               { Standard units }
        WinBase, WinDef,                               { Standard units }
      {$ENDIF}
      {$ENDIF}
    {$ENDIF}
    {$ENDIF}
-   GFVGraph, Objects, Drivers, Views;                 { GFV standard units }
+
+   GFVGraph,                                          { GFV standard unit }
+   Objects, Drivers, Views;                           { GFV standard units }
 
 
 {***************************************************************************}
 {***************************************************************************}
 {                              PUBLIC CONSTANTS                             }
 {                              PUBLIC CONSTANTS                             }

+ 20 - 4
fv/platform.inc

@@ -6,9 +6,9 @@
 {    Parts Copyright (c) 1997 by Balazs Scheidler          }
 {    Parts Copyright (c) 1997 by Balazs Scheidler          }
 {    [email protected]                                     }
 {    [email protected]                                     }
 {                                                          }
 {                                                          }
-{    Parts Copyright (c) 1999 by Leon de Boer              }
+{    Parts Copyright (c) 1999, 2000 by Leon de Boer        }
 {    [email protected]  - primary e-mail address       }
 {    [email protected]  - primary e-mail address       }
-{    ldeboer@starwon.com.au - backup e-mail address        }
+{    ldeboer@projectent.com.au - backup e-mail address     }
 {                                                          }
 {                                                          }
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {                                                          }
 {                                                          }
@@ -54,6 +54,7 @@
 {  1.3     13 Jun 99  LdB    Sybil 2.0 undef BP_VMT link   }
 {  1.3     13 Jun 99  LdB    Sybil 2.0 undef BP_VMT link   }
 {  1.31    03 Nov 99  LdB    FPC windows defines WIN32     }
 {  1.31    03 Nov 99  LdB    FPC windows defines WIN32     }
 {  1.32    04 Nov 99  LdB    Delphi 5 definitions added    }
 {  1.32    04 Nov 99  LdB    Delphi 5 definitions added    }
+{  1.33    16 Oct 00  LdB    WIN32/WIN16 defines added     }
 {**********************************************************}
 {**********************************************************}
 
 
 { ****************************************************************************
 { ****************************************************************************
@@ -341,11 +342,26 @@ FOR FPC THESE ARE THE TRANSLATIONS
   {$ENDIF}
   {$ENDIF}
 {$ENDIF}
 {$ENDIF}
 
 
+{---------------------------------------------------------------------------}
+{  WIN16 AND WIN32 set if in windows - Updated 16Oct2000 LdB                }
+{---------------------------------------------------------------------------}
+{$IFDEF OS_WINDOWS}                                   { WINDOWS SYSTEM }
+  {$IFDEF BIT_16}
+    {$DEFINE WIN16}                                   { 16 BIT WINDOWS }
+  {$ENDIF}
+  {$IFDEF BIT_32}
+    {$DEFINE WIN32}                                   { 32 BIT WINDOWS }
+  {$ENDIF}
+{$ENDIF}
+
 
 
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:22  marco
+ 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
   * CVS log and ID tags
   * CVS log and ID tags
 
 
 
 
-}
+}

+ 5 - 2
fv/validate.pas

@@ -1001,7 +1001,7 @@ END;
 {  Lookup -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 18May98 LdB            }
 {  Lookup -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 18May98 LdB            }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 FUNCTION TStringLookUpValidator.Lookup (Const S: String): Boolean;
 FUNCTION TStringLookUpValidator.Lookup (Const S: String): Boolean;
-VAR Index: Integer;
+{$IFDEF PPC_VIRTUAL} VAR Index: LongInt; {$ELSE} VAR Index: Integer; {$ENDIF}
 BEGIN
 BEGIN
    Lookup := False;                                   { Preset false return }
    Lookup := False;                                   { Preset false return }
    If (Strings <> Nil) Then
    If (Strings <> Nil) Then
@@ -1058,7 +1058,10 @@ END.
 
 
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:22  marco
+ 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
   * CVS log and ID tags
   * CVS log and ID tags
 
 
 
 

+ 248 - 141
fv/views.pas

@@ -95,7 +95,8 @@ USES
      OS2Def, OS2Base, OS2PMAPI,                       { Standard units }
      OS2Def, OS2Base, OS2PMAPI,                       { Standard units }
    {$ENDIF}
    {$ENDIF}
 
 
-   Common, GFVGraph, Objects, Drivers;                { GFV standard units }
+   GFVGraph,                                          { GFV standard unit }
+   Common, Objects, Drivers;                          { GFV standard units }
 
 
 {***************************************************************************}
 {***************************************************************************}
 {                              PUBLIC CONSTANTS                             }
 {                              PUBLIC CONSTANTS                             }
@@ -310,7 +311,7 @@ CONST
 
 
 {$IFDEF BIT_16}                                       { WINDOWS 16 BIT CODE }
 {$IFDEF BIT_16}                                       { WINDOWS 16 BIT CODE }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{              WIN16 LABEL CONSTANTS FOR WINDOW PROPERTY CALLS              }
+{             WIN16 LABEL CONSTANTS FOR WINDOW PROPERTY CALLS               }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 CONST
 CONST
    ViewSeg = 'TVWINSEG'+#0;                           { View segment label }
    ViewSeg = 'TVWINSEG'+#0;                           { View segment label }
@@ -319,7 +320,7 @@ CONST
 
 
 {$IFDEF BIT_32}                                       { WINDOWS 32 BIT CODE }
 {$IFDEF BIT_32}                                       { WINDOWS 32 BIT CODE }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{             WIN32/NT LABEL CONSTANTS FOR WINDOW PROPERTY CALLS            }
+{            WIN32/NT LABEL CONSTANTS FOR WINDOW PROPERTY CALLS             }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 CONST
 CONST
    ViewPtr = 'TVWINPTR'+#0;                           { View ptr label }
    ViewPtr = 'TVWINPTR'+#0;                           { View ptr label }
@@ -388,37 +389,40 @@ TYPE
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
    PView = ^TView;
    PView = ^TView;
    TView = OBJECT (TObject)
    TView = OBJECT (TObject)
-         GrowMode  : Byte;                            { View grow mode }
-         DragMode  : Byte;                            { View drag mode }
-         DrawMask  : Byte;                            { Draw masks }
-         TabMask   : Byte;                            { Tab move masks }
-         ColourOfs : Integer;                         { View palette offset }
-         HelpCtx   : Word;                            { View help context }
-         State     : Word;                            { View state masks }
-         Options   : Word;                            { View options masks }
-         EventMask : Word;                            { View event masks }
-         GOptions  : Word;                            { Graphics options }
-         Origin    : TPoint;                          { View origin }
-         Size      : TPoint;                          { View size }
-         Cursor    : TPoint;                          { Cursor position }
-         RawOrigin : TPoint;                          { View raw origin }
-         RawSize   : TPoint;                          { View raw size }
-         Next      : PView;                           { Next peerview }
-         Owner     : PGroup;                          { Owner group }
-         HoldLimit : PComplexArea;                    { Hold limit values }
+         GrowMode : Byte;                             { View grow mode }
+         DragMode : Byte;                             { View drag mode }
+         DrawMask : Byte;                             { Draw masks }
+         TabMask  : Byte;                             { Tab move masks }
+         ColourOfs: Integer;                          { View palette offset }
+         HelpCtx  : Word;                             { View help context }
+         State    : Word;                             { View state masks }
+         Options  : Word;                             { View options masks }
+         EventMask: Word;                             { View event masks }
+         GOptions : Word;                             { Graphics options }
+         Origin   : TPoint;                           { View origin }
+         Size     : TPoint;                           { View size }
+         Cursor   : TPoint;                           { Cursor position }
+         RawOrigin: TPoint;                           { View raw origin }
+         RawSize  : TPoint;                           { View raw size }
+         Next     : PView;                            { Next peerview }
+         Owner    : PGroup;                           { Owner group }
+         HoldLimit: PComplexArea;                     { Hold limit values }
+
+         RevCol    : Boolean;
+
          {$IFDEF OS_WINDOWS}                          { WIN/NT DATA ONLY }
          {$IFDEF OS_WINDOWS}                          { WIN/NT DATA ONLY }
-         ExStyle   : LongInt;                         { Extended style }
-         Dc        : HDc;                             { Device context }
+         ExStyle  : LongInt;                          { Extended style }
+         Dc       : HDc;                              { Device context }
          {$ENDIF}
          {$ENDIF}
          {$IFDEF OS_OS2}                              { OS2 DATA ONLY }
          {$IFDEF OS_OS2}                              { OS2 DATA ONLY }
-         lStyle    : LongInt;                         { Style }
-         Client    : HWnd;                            { Client handle }
-         Ps        : HPs;                             { Paint structure }
+         lStyle   : LongInt;                          { Style }
+         Client   : HWnd;                             { Client handle }
+         Ps       : HPs;                              { Paint structure }
          {$ENDIF}
          {$ENDIF}
          {$IFNDEF OS_DOS}                             { WIN/NT/OS2 DATA ONLY }
          {$IFNDEF OS_DOS}                             { WIN/NT/OS2 DATA ONLY }
-         FrameSize : Integer;                         { Frame size (X) }
-         CaptSize  : Integer;                         { Caption size (Y) }
-         HWindow   : HWnd;                            { Window handle }
+         FrameSize: Integer;                          { Frame size (X) }
+         CaptSize : Integer;                          { Caption size (Y) }
+         HWindow  : HWnd;                             { Window handle }
          {$ENDIF}
          {$ENDIF}
       CONSTRUCTOR Init (Var Bounds: TRect);
       CONSTRUCTOR Init (Var Bounds: TRect);
       CONSTRUCTOR Load (Var S: TStream);
       CONSTRUCTOR Load (Var S: TStream);
@@ -823,11 +827,12 @@ TYPE TColorRef = LongInt;                             { TColorRef defined }
 {$ENDIF}
 {$ENDIF}
 
 
 {$IFDEF PPC_SPEED}                                    { SPEEDSOFT SYBIL2+ }
 {$IFDEF PPC_SPEED}                                    { SPEEDSOFT SYBIL2+ }
-TYPE TColorRef = LongInt;                             { TColorRef defined }
-     TPaintStruct = PaintStruct;
-     TWindowPos = WindowPos;
-     TSize = Size;
-     TWndClass = WndClass;
+TYPE
+   TColorRef = LongInt;                               { TColorRef defined }
+   TPaintStruct = PaintStruct;                        { TPaintStruct define }
+   TWindowPos = WindowPos;                            { TWindowPos defined }
+   TSize = Size;                                      { TSize defined }
+   TWndClass = WndClass;                              { TWndClass defined }
 {$ENDIF}
 {$ENDIF}
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
@@ -1088,7 +1093,7 @@ BEGIN
          Event.What := evMouseDown;                   { Mouse down event }
          Event.What := evMouseDown;                   { Mouse down event }
          Event.Double := True;                        { Double click }
          Event.Double := True;                        { Double click }
          MouseButtons := MouseButtons OR
          MouseButtons := MouseButtons OR
-           mbLeftButton;                              { Set button mask }
+           mbRightButton;                             { Set button mask }
        End;
        End;
        WM_MButtonDown: Begin                          { MIDDLE MOUSE DOWN }
        WM_MButtonDown: Begin                          { MIDDLE MOUSE DOWN }
          Event.What := evMouseDown;                   { Mouse down event }
          Event.What := evMouseDown;                   { Mouse down event }
@@ -1122,11 +1127,6 @@ BEGIN
            MouseButtons := MouseButtons OR
            MouseButtons := MouseButtons OR
              mbRightButton;                           { Set right button mask }
              mbRightButton;                           { Set right button mask }
        End;
        End;
-       {$IFDEF BIT_32}
-       WM_Notify: Begin
-         I := 0;
-       End;
-       {$ENDIF}
        WM_EraseBkGnd: TvViewMsgHandler := 1;          { BACKGROUND MESSAGE }
        WM_EraseBkGnd: TvViewMsgHandler := 1;          { BACKGROUND MESSAGE }
        WM_Paint: If (P^.Dc = 0) Then Begin            { PAINT MESSAGE }
        WM_Paint: If (P^.Dc = 0) Then Begin            { PAINT MESSAGE }
          P^.Dc := BeginPaint(Wnd, Ps);                { Fetch structure }
          P^.Dc := BeginPaint(Wnd, Ps);                { Fetch structure }
@@ -1929,7 +1929,7 @@ BEGIN
    (State AND sfExposed <> 0) AND                     { View is exposed }
    (State AND sfExposed <> 0) AND                     { View is exposed }
    (State AND sfIconised = 0) Then Begin              { View not iconised }
    (State AND sfIconised = 0) Then Begin              { View not iconised }
      SetViewLimits;                                   { Set view limits }
      SetViewLimits;                                   { Set view limits }
-     GetViewSettings(ViewPort);                       { Get set viewport }
+     GetViewSettings(ViewPort, TextModeGFV);          { Get set viewport }
      If OverlapsArea(ViewPort.X1, ViewPort.Y1,
      If OverlapsArea(ViewPort.X1, ViewPort.Y1,
      ViewPort.X2, ViewPort.Y2) Then Begin             { Must be in area }
      ViewPort.X2, ViewPort.Y2) Then Begin             { Must be in area }
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
@@ -2028,15 +2028,18 @@ END;
 PROCEDURE TView.DrawBorder;
 PROCEDURE TView.DrawBorder;
 BEGIN
 BEGIN
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE ONLY }
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE ONLY }
-   BiColorRectangle(0, 0, RawSize.X, RawSize.Y, White,
-     DarkGray, False);                                { Draw 3d effect }
-   If (GOptions AND goThickFramed <> 0) Then Begin    { Thick frame at work }
-     GraphRectangle(1, 1, RawSize.X-1, RawSize.Y-1,
-       LightGray);                                    { Draw frame part 1 }
-     GraphRectangle(2, 2, RawSize.X-2, RawSize.Y-2,
-       LightGray);                                    { Fraw frame part 2 }
-     BiColorRectangle(3, 3, RawSize.X-3, RawSize.Y-3,
-       White, DarkGray, True);                        { Draw highlights }
+   If (TextModeGFV = FALSE) Then Begin                { GRAPHICS GFV MODE }
+     BiColorRectangle(0, 0, RawSize.X, RawSize.Y,
+       White, DarkGray, False);                       { Draw 3d effect }
+     If (GOptions AND goThickFramed <> 0) Then Begin  { Thick frame at work }
+       GraphRectangle(1, 1, RawSize.X-1, RawSize.Y-1,
+         LightGray);                                  { Draw frame part 1 }
+       GraphRectangle(2, 2, RawSize.X-2, RawSize.Y-2,
+         LightGray);                                  { Fraw frame part 2 }
+       BiColorRectangle(3, 3, RawSize.X-3, RawSize.Y-3,
+         White, DarkGray, True);                      { Draw highlights }
+     End;
+   End Else Begin                                     { TEXT GFV MODE }
    End;
    End;
    {$ENDIF}
    {$ENDIF}
 END;
 END;
@@ -2093,7 +2096,7 @@ VAR X1, Y1, X2, Y2: Integer; P: PGroup; ViewPort: ViewPortType; Ca: PComplexArea
 BEGIN
 BEGIN
    If (MaxAvail >= SizeOf(TComplexArea)) Then Begin   { Check enough memory }
    If (MaxAvail >= SizeOf(TComplexArea)) Then Begin   { Check enough memory }
      GetMem(Ca, SizeOf(TComplexArea));                { Allocate memory }
      GetMem(Ca, SizeOf(TComplexArea));                { Allocate memory }
-     GetViewSettings(ViewPort);                       { Fetch view port }
+     GetViewSettings(ViewPort, TextModeGFV);          { Fetch view port }
      Ca^.X1 := ViewPort.X1;                           { Hold current X1 }
      Ca^.X1 := ViewPort.X1;                           { Hold current X1 }
      Ca^.Y1 := ViewPort.Y1;                           { Hold current Y1 }
      Ca^.Y1 := ViewPort.Y1;                           { Hold current Y1 }
      Ca^.X2 := ViewPort.X2;                           { Hold current X2 }
      Ca^.X2 := ViewPort.X2;                           { Hold current X2 }
@@ -2126,7 +2129,7 @@ BEGIN
        If (X2 > ViewPort.X2) Then X2 := ViewPort.X2;  { Adjust x2 to locked }
        If (X2 > ViewPort.X2) Then X2 := ViewPort.X2;  { Adjust x2 to locked }
        If (Y2 > ViewPort.Y2) Then Y2 := ViewPort.Y2;  { Adjust y2 to locked }
        If (Y2 > ViewPort.Y2) Then Y2 := ViewPort.Y2;  { Adjust y2 to locked }
      End;
      End;
-     SetViewPort(X1, Y1, X2, Y2, ClipOn);             { Set new clip limits }
+     SetViewPort(X1, Y1, X2, Y2, ClipOn, TextModeGFV);{ Set new clip limits }
    End;
    End;
 END;
 END;
 
 
@@ -2135,13 +2138,14 @@ END;
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TView.DrawBackGround;
 PROCEDURE TView.DrawBackGround;
 VAR Bc: Byte; X1, Y1, X2, Y2: Integer; ViewPort: ViewPortType;
 VAR Bc: Byte; X1, Y1, X2, Y2: Integer; ViewPort: ViewPortType;
+{$IFDEF OS_DOS} X, Y: Integer; {$ENDIF}
 {$IFDEF OS_OS2} Ptl: PointL; {$ENDIF}
 {$IFDEF OS_OS2} Ptl: PointL; {$ENDIF}
 BEGIN
 BEGIN
    If (GOptions AND goNoDrawView = 0) Then Begin      { Non draw views exit }
    If (GOptions AND goNoDrawView = 0) Then Begin      { Non draw views exit }
      If (State AND sfDisabled = 0) Then
      If (State AND sfDisabled = 0) Then
        Bc := GetColor(1) AND $F0 SHR 4 Else           { Select back colour }
        Bc := GetColor(1) AND $F0 SHR 4 Else           { Select back colour }
        Bc := GetColor(4) AND $F0 SHR 4;               { Disabled back colour }
        Bc := GetColor(4) AND $F0 SHR 4;               { Disabled back colour }
-     GetViewSettings(ViewPort);                       { Get view settings }
+     GetViewSettings(ViewPort, TextModeGFV);          { Get view settings }
      If (ViewPort.X1 <= RawOrigin.X) Then X1 := 0     { Right to left edge }
      If (ViewPort.X1 <= RawOrigin.X) Then X1 := 0     { Right to left edge }
        Else X1 := ViewPort.X1-RawOrigin.X;            { Offset from left }
        Else X1 := ViewPort.X1-RawOrigin.X;            { Offset from left }
      If (ViewPort.Y1 <= RawOrigin.Y) Then Y1 := 0     { Right to top edge }
      If (ViewPort.Y1 <= RawOrigin.Y) Then Y1 := 0     { Right to top edge }
@@ -2153,8 +2157,23 @@ BEGIN
        Y2 := RawSize.Y Else                           { Right to bottom edge }
        Y2 := RawSize.Y Else                           { Right to bottom edge }
        Y2 := ViewPort.Y2-RawOrigin.Y;                 { Offset from bottom }
        Y2 := ViewPort.Y2-RawOrigin.Y;                 { Offset from bottom }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
-       SetFillStyle(SolidFill, Bc);                   { Set fill colour }
-       Bar(0, 0, X2-X1, Y2-Y1);                       { Clear the area }
+       If (TextModeGFV <> True) Then Begin            { GRAPHICS MODE GFV }
+         SetFillStyle(SolidFill, Bc);                 { Set fill colour }
+         Bar(0, 0, X2-X1, Y2-Y1);                     { Clear the area }
+       End Else Begin                                 { TEXT MODE GFV }
+         X1 := (RawOrigin.X+X1) DIV SysFontWidth;
+         Y1 := (RawOrigin.Y+Y1) DIV SysFontHeight;
+         X2 := (RawOrigin.X+X2) DIV SysFontWidth;
+         Y2 := (RawOrigin.Y+Y2) DIV SysFontHeight;
+         If (State AND sfDisabled = 0) Then
+           Bc := GetColor(1) Else           { Select back colour }
+           Bc := GetColor(4);               { Disabled back colour }
+         For Y := Y1 To Y2 Do
+           For X := X1 To X2 Do Begin
+             Mem[$B800:$0+(Y*ScreenWidth+X)*2] := $20;
+             Mem[$B800:$0+(Y*ScreenWidth+X)*2+1] := Bc;
+           End;
+       End;
      {$ENDIF}
      {$ENDIF}
      {$IFDEF OS_WINDOWS}                              { WIN/NT CODE }
      {$IFDEF OS_WINDOWS}                              { WIN/NT CODE }
      If (Dc <> 0) Then Begin                          { Valid device context }
      If (Dc <> 0) Then Begin                          { Valid device context }
@@ -2186,7 +2205,8 @@ BEGIN
    P := HoldLimit;                                    { Transfer pointer }
    P := HoldLimit;                                    { Transfer pointer }
    If (P <> Nil) Then Begin                           { Valid complex area }
    If (P <> Nil) Then Begin                           { Valid complex area }
      HoldLimit := P^.NextArea;                        { Move to prior area }
      HoldLimit := P^.NextArea;                        { Move to prior area }
-     SetViewPort(P^.X1, P^.Y1, P^.X2, P^.Y2, ClipOn); { Restore clip limits }
+     SetViewPort(P^.X1, P^.Y1, P^.X2, P^.Y2, ClipOn,
+       TextModeGFV);                                  { Restore clip limits }
      FreeMem(P, SizeOf(TComplexArea));                { Release memory }
      FreeMem(P, SizeOf(TComplexArea));                { Release memory }
    End;
    End;
 END;
 END;
@@ -2317,14 +2337,14 @@ END;
 PROCEDURE TView.ReDrawArea (X1, Y1, X2, Y2: Integer);
 PROCEDURE TView.ReDrawArea (X1, Y1, X2, Y2: Integer);
 VAR HLimit: PView; ViewPort: ViewPortType;
 VAR HLimit: PView; ViewPort: ViewPortType;
 BEGIN
 BEGIN
-   GetViewSettings(ViewPort);                         { Hold view port }
-   SetViewPort(X1, Y1, X2, Y2, ClipOn);               { Set new clip limits }
+   GetViewSettings(ViewPort, TextModeGFV);            { Hold view port }
+   SetViewPort(X1, Y1, X2, Y2, ClipOn, TextModeGFV);  { Set new clip limits }
    HLimit := LimitsLocked;                            { Hold lock limits }
    HLimit := LimitsLocked;                            { Hold lock limits }
    LimitsLocked := @Self;                             { We are the lock view }
    LimitsLocked := @Self;                             { We are the lock view }
    DrawView;                                          { Redraw the area }
    DrawView;                                          { Redraw the area }
    LimitsLocked := HLimit;                            { Release our lock }
    LimitsLocked := HLimit;                            { Release our lock }
    SetViewPort(ViewPort.X1, ViewPort.Y1,
    SetViewPort(ViewPort.X1, ViewPort.Y1,
-     ViewPort.X2, ViewPort.Y2, ClipOn);               { Reset old limits }
+     ViewPort.X2, ViewPort.Y2, ClipOn, TextModeGFV);  { Reset old limits }
 END;
 END;
 
 
 {--TView--------------------------------------------------------------------}
 {--TView--------------------------------------------------------------------}
@@ -4329,7 +4349,7 @@ BEGIN
    (State AND sfExposed <> 0) AND                     { View is exposed }
    (State AND sfExposed <> 0) AND                     { View is exposed }
    (Max <> Min) Then Begin                            { View has some size }
    (Max <> Min) Then Begin                            { View has some size }
      SetViewLimits;                                   { Set view limits }
      SetViewLimits;                                   { Set view limits }
-     GetViewSettings(ViewPort);                       { Get set viewport }
+     GetViewSettings(ViewPort, TextModeGFV);          { Get set viewport }
      If OverlapsArea(ViewPort.X1, ViewPort.Y1,
      If OverlapsArea(ViewPort.X1, ViewPort.Y1,
      ViewPort.X2, ViewPort.Y2) Then Begin             { Must be in area }
      ViewPort.X2, ViewPort.Y2) Then Begin             { Must be in area }
        {$IFDEF OS_DOS}
        {$IFDEF OS_DOS}
@@ -4369,7 +4389,7 @@ BEGIN
    If (State AND sfVisible <> 0) AND                  { View is visible }
    If (State AND sfVisible <> 0) AND                  { View is visible }
    (State AND sfExposed <> 0) Then Begin              { View is exposed }
    (State AND sfExposed <> 0) Then Begin              { View is exposed }
      SetViewLimits;                                   { Set view limits }
      SetViewLimits;                                   { Set view limits }
-     GetViewSettings(ViewPort);                       { Get set viewport }
+     GetViewSettings(ViewPort, TextModeGFV);          { Get set viewport }
      If OverlapsArea(ViewPort.X1, ViewPort.Y1,
      If OverlapsArea(ViewPort.X1, ViewPort.Y1,
      ViewPort.X2, ViewPort.Y2) Then Begin             { Must be in area }
      ViewPort.X2, ViewPort.Y2) Then Begin             { Must be in area }
        {$IFDEF OS_DOS}
        {$IFDEF OS_DOS}
@@ -4584,13 +4604,14 @@ END;
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 FUNCTION TListViewer.GetText (Item: Integer; MaxLen: Integer): String;
 FUNCTION TListViewer.GetText (Item: Integer; MaxLen: Integer): String;
 BEGIN                                                 { Abstract method }
 BEGIN                                                 { Abstract method }
+   GetText := '';                                     { Return empty }
 END;
 END;
 
 
 {--TListViewer--------------------------------------------------------------}
 {--TListViewer--------------------------------------------------------------}
 {  DrawBackGround -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 27Oct99 LdB    }
 {  DrawBackGround -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 27Oct99 LdB    }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TListViewer.DrawBackGround;
 PROCEDURE TListViewer.DrawBackGround;
-VAR SCOff: Byte; I, J, ColWidth, Item, Indent, CurCol: Integer; Color: Word;
+VAR  I, J, ColWidth, Item, Indent, CurCol: Integer; Color: Word;
     Text: String; B: TDrawBuffer;
     Text: String; B: TDrawBuffer;
     {$IFDEF OS_WINDOWS} S: String; {$ENDIF}           { WIN/NT CODE }
     {$IFDEF OS_WINDOWS} S: String; {$ENDIF}           { WIN/NT CODE }
 
 
@@ -4643,9 +4664,9 @@ BEGIN
          MoveStr(B[CurCol+1], Text, Color);           { Transfer to buffer }
          MoveStr(B[CurCol+1], Text, Color);           { Transfer to buffer }
          If ShowMarkers Then Begin
          If ShowMarkers Then Begin
            WordRec(B[CurCol]).Lo := Byte(
            WordRec(B[CurCol]).Lo := Byte(
-             SpecialChars[SCOff]);                    { Set marker character }
+             SpecialChars[4]);                        { Set marker character }
            WordRec(B[CurCol+ColWidth-2]).Lo := Byte(
            WordRec(B[CurCol+ColWidth-2]).Lo := Byte(
-             SpecialChars[SCOff+1]);                  { Set marker character }
+             SpecialChars[5]);                        { Set marker character }
          End;
          End;
        End;
        End;
        MoveChar(B[CurCol+ColWidth-1], #179,
        MoveChar(B[CurCol+ColWidth-1], #179,
@@ -4659,13 +4680,12 @@ END;
 {  DrawFocus -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 27Oct99 LdB         }
 {  DrawFocus -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 27Oct99 LdB         }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TListViewer.DrawFocus;
 PROCEDURE TListViewer.DrawFocus;
-VAR DrawIt: Boolean; I, J, Item, CurCol, ColWidth: Integer;
+VAR DrawIt: Boolean; SCOff: Byte; I, J, Item, CurCol, ColWidth: Integer;
     Color: Word;
     Color: Word;
 
 
   Indent: Integer;
   Indent: Integer;
   B: TDrawBuffer;
   B: TDrawBuffer;
-  Text,S: String;
-  SCOff: Byte;
+  Text: String;
 BEGIN
 BEGIN
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    If (GOptions AND goNativeClass <> 0) Then Exit;    { Native class exits }
    If (GOptions AND goNativeClass <> 0) Then Exit;    { Native class exits }
@@ -5462,7 +5482,7 @@ END;
 FUNCTION TView.Exposed: Boolean;
 FUNCTION TView.Exposed: Boolean;
 VAR ViewPort: ViewPortType;
 VAR ViewPort: ViewPortType;
 BEGIN
 BEGIN
-   GetViewSettings(ViewPort);                         { Fetch viewport }
+   GetViewSettings(ViewPort, TextModeGFV);            { Fetch viewport }
    If (State AND sfVisible<>0) AND                    { View visible }
    If (State AND sfVisible<>0) AND                    { View visible }
      (State AND sfExposed<>0) AND                     { View exposed }
      (State AND sfExposed<>0) AND                     { View exposed }
      OverlapsArea(ViewPort.X1, ViewPort.Y1,
      OverlapsArea(ViewPort.X1, ViewPort.Y1,
@@ -5479,11 +5499,14 @@ VAR {$IFDEF OS_DOS} ViewPort: ViewPortType; {$ENDIF}  { DOS/DPMI VARIABLES }
     {$IFDEF OS_OS2} I: LongInt; Lp: PointL; OPs: HPs; {$ENDIF}{ OS2 VARIABLES }
     {$IFDEF OS_OS2} I: LongInt; Lp: PointL; OPs: HPs; {$ENDIF}{ OS2 VARIABLES }
 BEGIN
 BEGIN
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
-   GetViewSettings(ViewPort);                         { Get viewport settings }
-   SetColor(Colour);                                  { Set line colour }
-   Line(RawOrigin.X + X1 - ViewPort.X1,
-     RawOrigin.Y + Y1 - ViewPort.Y1, RawOrigin.X + X2
-     - ViewPort.X1, RawOrigin.Y + Y2-ViewPort.Y1);    { Draw the line }
+   GetViewSettings(ViewPort, TextModeGFV);            { Get viewport settings }
+   If (TextModeGFV <> TRUE) Then Begin
+     SetColor(Colour);                                { Set line colour }
+     Line(RawOrigin.X + X1 - ViewPort.X1,
+       RawOrigin.Y + Y1 - ViewPort.Y1, RawOrigin.X + X2
+       - ViewPort.X1, RawOrigin.Y + Y2-ViewPort.Y1);  { Draw the line }
+   End Else Begin                                     { LEON???? }
+   End;
    {$ENDIF}
    {$ENDIF}
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    If (HWindow <> 0) Then Begin                       { Valid window }
    If (HWindow <> 0) Then Begin                       { Valid window }
@@ -5549,11 +5572,14 @@ VAR {$IFDEF OS_DOS} ViewPort: ViewPortType; {$ENDIF}
     {$IFDEF OS_OS2} Lp: PointL; OPs: HPs; {$ENDIF}
     {$IFDEF OS_OS2} Lp: PointL; OPs: HPs; {$ENDIF}
 BEGIN
 BEGIN
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
-   SetColor(Colour);                                  { Set line colour }
-   GetViewSettings(ViewPort);
-   Rectangle(RawOrigin.X + X1 - ViewPort.X1, RawOrigin.Y + Y1
-     - ViewPort.Y1, RawOrigin.X + X2 - ViewPort.X1,
-     RawOrigin.Y+Y2-ViewPort.Y1);                     { Draw a rectangle }
+   If (TextModeGFV <> TRUE) Then Begin                { GRAPHICS MODE GFV }
+     SetColor(Colour);                                { Set line colour }
+     GetViewSettings(ViewPort, TextModeGFV);
+     Rectangle(RawOrigin.X + X1 - ViewPort.X1, RawOrigin.Y + Y1
+       - ViewPort.Y1, RawOrigin.X + X2 - ViewPort.X1,
+       RawOrigin.Y+Y2-ViewPort.Y1);                   { Draw a rectangle }
+   End Else Begin                                     { LEON???? }
+   End;
    {$ENDIF}
    {$ENDIF}
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    If (HWindow <> 0) Then Begin                       { Valid window }
    If (HWindow <> 0) Then Begin                       { Valid window }
@@ -5619,16 +5645,28 @@ END;
 {  ClearArea -> Platforms DOS/DPMI/WIN/OS2 - Checked 19Sep97 LdB            }
 {  ClearArea -> Platforms DOS/DPMI/WIN/OS2 - Checked 19Sep97 LdB            }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TView.ClearArea (X1, Y1, X2, Y2: Integer; Colour: Byte);
 PROCEDURE TView.ClearArea (X1, Y1, X2, Y2: Integer; Colour: Byte);
-VAR {$IFDEF OS_DOS} ViewPort: ViewPortType; {$ENDIF}
+VAR {$IFDEF OS_DOS} X, Y: Integer; ViewPort: ViewPortType; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: hDc; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: hDc; {$ENDIF}
     {$IFDEF OS_OS2} Lp: PointL; OPs: HPs; {$ENDIF}
     {$IFDEF OS_OS2} Lp: PointL; OPs: HPs; {$ENDIF}
 BEGIN
 BEGIN
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
-   GetViewSettings(ViewPort);                         { Get viewport }
-   SetFillStyle(SolidFill, Colour);                   { Set colour up }
-   Bar(RawOrigin.X+X1-ViewPort.X1, RawOrigin.Y+Y1-
-     ViewPort.Y1, RawOrigin.X+X2-ViewPort.X1,
-     RawOrigin.Y+Y2-ViewPort.Y1);                     { Clear the area }
+   GetViewSettings(ViewPort, TextModeGFV);            { Get viewport }
+   If (TextModeGFV <> TRUE) Then Begin                { GRAPHICAL GFV MODE }
+     SetFillStyle(SolidFill, Colour);                 { Set colour up }
+     Bar(RawOrigin.X+X1-ViewPort.X1, RawOrigin.Y+Y1-
+       ViewPort.Y1, RawOrigin.X+X2-ViewPort.X1,
+       RawOrigin.Y+Y2-ViewPort.Y1);                   { Clear the area }
+   End Else Begin                                     { TEXT MODE GFV }
+     X1 := (RawOrigin.X+X1) DIV SysFontWidth;
+     Y1 := (RawOrigin.Y+Y1) DIV SysFontHeight;
+     X2 := (RawOrigin.X+X2) DIV SysFontWidth;
+     Y2 := (RawOrigin.Y+Y2) DIV SysFontHeight;
+     For Y := Y1 To Y2 Do
+       For X := X1 To X2 Do Begin
+         Mem[$B800:$0+(Y*ScreenWidth+X)*2] := $20;
+         Mem[$B800:$0+(Y*ScreenWidth+X)*2+1] := Colour SHL 4;
+       End;
+   End;
    {$ENDIF}
    {$ENDIF}
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    If (HWindow <> 0) Then Begin                       { Valid window }
    If (HWindow <> 0) Then Begin                       { Valid window }
@@ -5674,7 +5712,7 @@ END;
 PROCEDURE TView.GraphArc (Xc, Yc: Integer; Sa, Ea: Real; XRad, YRad: Integer;
 PROCEDURE TView.GraphArc (Xc, Yc: Integer; Sa, Ea: Real; XRad, YRad: Integer;
 Colour: Byte);
 Colour: Byte);
 CONST RadConv  = 57.2957795130823229;                 { Degrees per radian }
 CONST RadConv  = 57.2957795130823229;                 { Degrees per radian }
-VAR X1, Y1, X2, Y2: Integer; {$IFDEF OS_WINDOWS} ODc: hDc; {$ENDIF}
+VAR X1, Y1, X2, Y2, X3, Y3: Integer; {$IFDEF OS_WINDOWS} ODc: hDc; {$ENDIF}
 BEGIN
 BEGIN
    {$IFDEF OS_WINDOWS}
    {$IFDEF OS_WINDOWS}
    Xc := Xc - FrameSize;
    Xc := Xc - FrameSize;
@@ -5688,16 +5726,23 @@ BEGIN
    Y1 := Yc - Round(Cos(Sa)*YRad);                    { Calc 1st y value }
    Y1 := Yc - Round(Cos(Sa)*YRad);                    { Calc 1st y value }
    X2 := Xc + Round(Sin(Sa+Ea)*XRad);                 { Calc 2nd x value }
    X2 := Xc + Round(Sin(Sa+Ea)*XRad);                 { Calc 2nd x value }
    Y2 := Yc - Round(Cos(Sa+Ea)*YRad);                 { Calc 2nd y value }
    Y2 := Yc - Round(Cos(Sa+Ea)*YRad);                 { Calc 2nd y value }
+   X3 := X2;                                          { Use X2 value }
+   Y3 := Y2;                                          { Use Y2 value }
+   If (Abs(Ea) > Pi) Then Begin
+     X3 := Xc + Round(Sin(Sa+Pi)*XRad);               { Calc 3rd x value }
+     Y3 := Yc - Round(Cos(Sa+Pi)*YRad);               { Calc 3rd y value }
+   End;
    {$IFDEF OS_WINDOWS}
    {$IFDEF OS_WINDOWS}
    If (HWindow <> 0) Then Begin                       { Valid window }
    If (HWindow <> 0) Then Begin                       { Valid window }
      ODc := Dc;                                       { Hold device context }
      ODc := Dc;                                       { Hold device context }
      If (Dc = 0) Then Dc := GetDC(HWindow);           { Create a context }
      If (Dc = 0) Then Dc := GetDC(HWindow);           { Create a context }
      SelectObject(Dc, ColPen[Colour]);                { Pen colour }
      SelectObject(Dc, ColPen[Colour]);                { Pen colour }
-     If (XRad > 2 ) AND (YRAd > 2) Then Begin         { Must exceed 2x2 arc }
+     If (Abs(X1-X3) > 1) OR (Abs(Y1-Y3) > 1)          { Must exceed 2x2 arc }
+     Then Begin
        If (Ea < 0) Then
        If (Ea < 0) Then
          Arc(Dc, Xc-XRad, Yc-YRad, Xc+XRad, Yc+YRad,
          Arc(Dc, Xc-XRad, Yc-YRad, Xc+XRad, Yc+YRad,
            X1, Y1, X2, Y2) Else                       { Draw c/clkwise arc }
            X1, Y1, X2, Y2) Else                       { Draw c/clkwise arc }
-         Arc(Dc, Xc-XRad, Yc+YRad, Xc+XRad, Yc-YRad,
+         Arc(Dc, Xc-XRad, Yc-YRad, Xc+XRad, Yc+YRad,
            X2, Y2, X1, Y1);                           { Draw clockwise arc }
            X2, Y2, X1, Y1);                           { Draw clockwise arc }
      End;
      End;
      If (ODc = 0) Then ReleaseDC(HWindow, Dc);        { Release context }
      If (ODc = 0) Then ReleaseDC(HWindow, Dc);        { Release context }
@@ -5779,7 +5824,7 @@ END;
 
 
 PROCEDURE TView.WriteBuf (X, Y, W, H: Integer; Var Buf);
 PROCEDURE TView.WriteBuf (X, Y, W, H: Integer; Var Buf);
 VAR I, J, K, L, CW: Integer; P: PDrawBuffer;
 VAR I, J, K, L, CW: Integer; P: PDrawBuffer;
-    {$IFDEF OS_DOS} ViewPort: ViewPortType; {$ENDIF}
+    {$IFDEF OS_DOS} Tix, Tiy: Integer; ViewPort: ViewPortType; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: HDc; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: HDc; {$ENDIF}
     {$IFDEF OS_OS2} OPs: HPs; Pt: PointL; {$ENDIF}
     {$IFDEF OS_OS2} OPs: HPs; Pt: PointL; {$ENDIF}
 BEGIN
 BEGIN
@@ -5795,9 +5840,9 @@ BEGIN
        Y := Y * SysFontHeight;                        { Y graphical adjust }
        Y := Y * SysFontHeight;                        { Y graphical adjust }
      End;
      End;
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
-       GetViewSettings(ViewPort);                     { Get current viewport }
-       X := X + RawOrigin.X - ViewPort.X;             { Calc x position }
-       Y := Y + RawOrigin.Y - ViewPort.Y;             { Calc y position }
+       GetViewSettings(ViewPort, TextModeGFV);        { Get current viewport }
+       X := X + RawOrigin.X - ViewPort.X1;            { Calc x position }
+       Y := Y + RawOrigin.Y - ViewPort.Y1;            { Calc y position }
      {$ENDIF}
      {$ENDIF}
      {$IFDEF OS_WINDOWS}                              { WIN/NT CODE }
      {$IFDEF OS_WINDOWS}                              { WIN/NT CODE }
        ODc := Dc;                                     { Hold device context }
        ODc := Dc;                                     { Hold device context }
@@ -5815,11 +5860,18 @@ BEGIN
        For I := 0 To (W-1) Do Begin                   { For each character }
        For I := 0 To (W-1) Do Begin                   { For each character }
          Cw := TextWidth(Chr(Lo(P^[L])));             { Width of this char }
          Cw := TextWidth(Chr(Lo(P^[L])));             { Width of this char }
          {$IFDEF OS_DOS}                              { DOS/DPMI CODE }
          {$IFDEF OS_DOS}                              { DOS/DPMI CODE }
-           SetFillStyle(SolidFill, Hi(P^[L]) AND $F0
-             SHR 4);                                  { Set back colour }
-           SetColor(Hi(P^[L]) AND $0F);               { Set text colour }
-           Bar(K, Y, K+Cw, Y+FontHeight-1);           { Clear text backing }
-           OutTextXY(K, Y+2, Chr(Lo(P^[L])));         { Write text char }
+           If (TextModeGFV <> TRUE) Then Begin        { GRAPHICAL MODE GFV }
+             SetFillStyle(SolidFill, Hi(P^[L]) AND
+               $F0 SHR 4);                            { Set back colour }
+             SetColor(Hi(P^[L]) AND $0F);             { Set text colour }
+             Bar(K, Y, K+Cw, Y+FontHeight-1);         { Clear text backing }
+             OutTextXY(K, Y+2, Chr(Lo(P^[L])));       { Write text char }
+           End Else Begin                             { TEXT MODE GFV }
+             Tix := (K + ViewPort.X1) DIV SysFontWidth;
+             Tiy := (Y + 2 + ViewPort.Y1) DIV SysFontHeight;
+             Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2] := Lo(P^[L]);
+             Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2+1] := Hi(P^[L]);
+           End;
          {$ENDIF}
          {$ENDIF}
          {$IFDEF OS_WINDOWS}                          { WIN/NT CODE }
          {$IFDEF OS_WINDOWS}                          { WIN/NT CODE }
            SetBkColor(Dc, ColRef[Hi(P^[L]) AND $F0
            SetBkColor(Dc, ColRef[Hi(P^[L]) AND $F0
@@ -5855,7 +5907,7 @@ END;
 
 
 PROCEDURE TView.WriteLine (X, Y, W, H: Integer; Var Buf);
 PROCEDURE TView.WriteLine (X, Y, W, H: Integer; Var Buf);
 VAR I, J, K, Cw: Integer; P: PDrawBuffer;
 VAR I, J, K, Cw: Integer; P: PDrawBuffer;
-    {$IFDEF OS_DOS} ViewPort: ViewPortType; {$ENDIF}
+    {$IFDEF OS_DOS} Tix, Tiy: Integer; ViewPort: ViewPortType; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: HDc; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: HDc; {$ENDIF}
     {$IFDEF OS_OS2} OPs: HPs; Pt: PointL; {$ENDIF}
     {$IFDEF OS_OS2} OPs: HPs; Pt: PointL; {$ENDIF}
 BEGIN
 BEGIN
@@ -5870,9 +5922,9 @@ BEGIN
        Y := Y * SysFontHeight;                        { Y graphical adjust }
        Y := Y * SysFontHeight;                        { Y graphical adjust }
      End;
      End;
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
-       GetViewSettings(ViewPort);                     { Get current viewport }
-       X := X + RawOrigin.X - ViewPort.X;             { Calc x position }
-       Y := Y + RawOrigin.Y - ViewPort.Y;             { Calc y position }
+       GetViewSettings(ViewPort, TextModeGFV);        { Get current viewport }
+       X := X + RawOrigin.X - ViewPort.X1;            { Calc x position }
+       Y := Y + RawOrigin.Y - ViewPort.Y1;            { Calc y position }
      {$ENDIF}
      {$ENDIF}
      {$IFDEF OS_WINDOWS}                              { WIN/NT CODE }
      {$IFDEF OS_WINDOWS}                              { WIN/NT CODE }
        ODc := Dc;                                     { Hold device context }
        ODc := Dc;                                     { Hold device context }
@@ -5890,11 +5942,18 @@ BEGIN
        For I := 0 To (W-1) Do Begin                   { For each character }
        For I := 0 To (W-1) Do Begin                   { For each character }
          Cw := TextWidth(Chr(Lo(P^[I])));             { Width of this char }
          Cw := TextWidth(Chr(Lo(P^[I])));             { Width of this char }
          {$IFDEF OS_DOS}                              { DOS/DPMI CODE }
          {$IFDEF OS_DOS}                              { DOS/DPMI CODE }
-           SetFillStyle(SolidFill, Hi(P^[I]) AND $F0
-             SHR 4);                                  { Set back colour }
-           SetColor(Hi(P^[I]) AND $0F);               { Set text colour }
-           Bar(K, Y, K+Cw, Y+FontHeight-1);           { Clear text backing }
-           OutTextXY(K, Y+2, Chr(Lo(P^[I])));         { Write text char }
+           If (TextModeGFV <> TRUE) Then Begin        { GRAPHICAL MODE GFV }
+             SetFillStyle(SolidFill, Hi(P^[I]) AND
+               $F0 SHR 4);                            { Set back colour }
+             SetColor(Hi(P^[I]) AND $0F);             { Set text colour }
+             Bar(K, Y, K+Cw, Y+FontHeight-1);         { Clear text backing }
+             OutTextXY(K, Y+2, Chr(Lo(P^[I])));       { Write text char }
+           End Else Begin                             { TEXT MODE GFV }
+             Tix := (K + ViewPort.X1) DIV SysFontWidth;
+             Tiy := (Y + ViewPort.Y1 + 2) DIV SysFontHeight;
+             Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2] := Lo(P^[I]);
+             Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2+1] := Hi(P^[I]);
+           End;
          {$ENDIF}
          {$ENDIF}
          {$IFDEF OS_WINDOWS}                          { WIN/NT CODE }
          {$IFDEF OS_WINDOWS}                          { WIN/NT CODE }
            SetBkColor(Dc, ColRef[Hi(P^[I]) AND $F0
            SetBkColor(Dc, ColRef[Hi(P^[I]) AND $F0
@@ -5956,8 +6015,8 @@ BEGIN
 END;
 END;
 
 
 PROCEDURE TView.WriteStr (X, Y: Integer; Str: String; Color: Byte);
 PROCEDURE TView.WriteStr (X, Y: Integer; Str: String; Color: Byte);
-VAR Fc, Bc: Byte; X1, Y1, X2, Y2: Integer;
-    {$IFDEF OS_DOS} ViewPort: ViewPortType; {$ENDIF}
+VAR Fc, Bc, B: Byte; X1, Y1, X2, Y2: Integer;
+    {$IFDEF OS_DOS} Tix, Tiy, Ti: Integer; ViewPort: ViewPortType; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: HDc; P: Pointer; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: HDc; P: Pointer; {$ENDIF}
     {$IFDEF OS_OS2} OPs: HPs; P: Pointer; Pt: PointL; {$ENDIF}
     {$IFDEF OS_OS2} OPs: HPs; P: Pointer; Pt: PointL; {$ENDIF}
 BEGIN
 BEGIN
@@ -5969,6 +6028,14 @@ BEGIN
      Fc := GetColor(Color);                           { Get view color }
      Fc := GetColor(Color);                           { Get view color }
      Bc := Fc AND $F0 SHR 4;                          { Calc back colour }
      Bc := Fc AND $F0 SHR 4;                          { Calc back colour }
      Fc := Fc AND $0F;                                { Calc text colour }
      Fc := Fc AND $0F;                                { Calc text colour }
+
+     If RevCol Then Begin
+       B := Bc;
+       Bc := Fc;
+       Fc := B;
+     End;
+
+
      {$IFDEF OS_DOS}
      {$IFDEF OS_DOS}
      If (X >= 0) AND (Y >= 0) Then Begin
      If (X >= 0) AND (Y >= 0) Then Begin
        X := RawOrigin.X+X*FontWidth;                    { X position }
        X := RawOrigin.X+X*FontWidth;                    { X position }
@@ -5977,12 +6044,23 @@ BEGIN
        X := RawOrigin.X + Abs(X);
        X := RawOrigin.X + Abs(X);
        Y := RawOrigin.Y + Abs(Y);
        Y := RawOrigin.Y + Abs(Y);
      End;
      End;
-     GetViewSettings(ViewPort);
-     SetFillStyle(SolidFill, Bc);                     { Set fill style }
-     Bar(X-ViewPort.X1, Y-ViewPort.Y1,
-       X-ViewPort.X1+Length(Str)*FontWidth, Y-ViewPort.Y1+FontHeight-1);
-     SetColor(Fc);
-     OutTextXY(X-ViewPort.X1, Y-ViewPort.Y1+2, Str);    { Write text char }
+     GetViewSettings(ViewPort, TextModeGFV);
+     If (TextModeGFV <> TRUE) Then Begin              { GRAPHICAL MODE GFV }
+       SetFillStyle(SolidFill, Bc);                   { Set fill style }
+       Bar(X-ViewPort.X1, Y-ViewPort.Y1,
+         X-ViewPort.X1+Length(Str)*FontWidth,
+         Y-ViewPort.Y1+FontHeight-1);
+       SetColor(Fc);
+       OutTextXY(X-ViewPort.X1, Y-ViewPort.Y1+2, Str);{ Write text char }
+     End Else Begin                                   { TEXT MODE GFV }
+       Tix := X DIV SysFontWidth;
+       Tiy := Y DIV SysFontHeight;
+       For Ti := 1 To length(Str) Do Begin
+         Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2] := Ord(Str[Ti]);
+         Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2+1] := GetColor(Color);
+         Tix := Tix + SysFontWidth;
+       End;
+     End;
      {$ENDIF}
      {$ENDIF}
      {$IFDEF OS_WINDOWS}
      {$IFDEF OS_WINDOWS}
      If (HWindow <> 0) Then Begin
      If (HWindow <> 0) Then Begin
@@ -6062,12 +6140,14 @@ END;
 
 
 PROCEDURE TView.WriteChar (X, Y: Integer; C: Char; Color: Byte;
 PROCEDURE TView.WriteChar (X, Y: Integer; C: Char; Color: Byte;
   Count: Integer);
   Count: Integer);
-VAR Fc, Bc: Byte; I: Integer; Col: Word; S: String; ViewPort: ViewPortType;
+{$IFDEF OS_DOS}
+VAR Fc, Bc: Byte; I, Ti, Tix, Tiy: Integer; Col: Word; S: String; ViewPort: ViewPortType;
+{$ENDIF}
 BEGIN
 BEGIN
    {$IFDEF OS_DOS}
    {$IFDEF OS_DOS}
    If (State AND sfVisible <> 0) AND                  { View visible }
    If (State AND sfVisible <> 0) AND                  { View visible }
    (State AND sfExposed <> 0) Then Begin              { View exposed }
    (State AND sfExposed <> 0) Then Begin              { View exposed }
-     GetViewSettings(ViewPort);
+     GetViewSettings(ViewPort, TextModeGFV);
      Col := GetColor(Color);                          { Get view color }
      Col := GetColor(Color);                          { Get view color }
      Fc := Col AND $0F;                               { Foreground colour }
      Fc := Col AND $0F;                               { Foreground colour }
      Bc := Col AND $F0 SHR 4;                         { Background colour }
      Bc := Col AND $F0 SHR 4;                         { Background colour }
@@ -6077,11 +6157,22 @@ BEGIN
      While (Count>0) Do Begin
      While (Count>0) Do Begin
        If (Count>255) Then I := 255 Else I := Count;  { Size to make }
        If (Count>255) Then I := 255 Else I := Count;  { Size to make }
        S[0] := Chr(I);                                { Set string length }
        S[0] := Chr(I);                                { Set string length }
-       SetFillStyle(SolidFill, Bc);                   { Set fill style }
-       Bar(X-ViewPort.X1, Y-ViewPort.Y1,
-         X-ViewPort.X1+Length(S)*FontWidth, Y-ViewPort.Y1+FontHeight-1);
-       SetColor(Fc);
-       OutTextXY(X-ViewPort.X1, Y-ViewPort.Y1, S);    { Write text char }
+       If (TextModeGFV <> TRUE) Then Begin            { GRAPHICAL MODE GFV }
+         SetFillStyle(SolidFill, Bc);                 { Set fill style }
+         Bar(X-ViewPort.X1, Y-ViewPort.Y1,
+           X-ViewPort.X1+Length(S)*FontWidth,
+           Y-ViewPort.Y1+FontHeight-1);
+         SetColor(Fc);
+         OutTextXY(X-ViewPort.X1, Y-ViewPort.Y1, S);  { Write text char }
+       End Else Begin                                 { TEXT MODE GFV }
+         Tix := X DIV SysFontWidth;
+         Tiy := Y DIV SysFontHeight;
+         For Ti := 1 To length(S) Do Begin
+           Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2] := Ord(S[Ti]);
+           Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2+1] := GetColor(Color);
+           Tix := Tix + SysFontWidth;
+         End;
+       End;
        Count := Count - I;                            { Subtract count }
        Count := Count - I;                            { Subtract count }
        X := X + I*FontWidth;                          { Move x position }
        X := X + I*FontWidth;                          { Move x position }
      End;
      End;
@@ -6155,9 +6246,9 @@ BEGIN
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      HideMouseCursor;                                 { Hide the mouse }
      HideMouseCursor;                                 { Hide the mouse }
      {$ENDIF}
      {$ENDIF}
-     SetWriteMode(XORPut);
+     SetWriteMode(XORPut, TextModeGFV);
      GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
      GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
-     SetWriteMode(NormalPut);
+     SetWriteMode(NormalPut, TextModeGFV);
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      ShowMouseCursor;                                 { Show the mouse }
      ShowMouseCursor;                                 { Show the mouse }
      {$ENDIF}
      {$ENDIF}
@@ -6182,13 +6273,13 @@ BEGIN
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
        HideMouseCursor;                               { Hide the mouse }
        HideMouseCursor;                               { Hide the mouse }
        {$ENDIF}
        {$ENDIF}
-       SetWriteMode(XORPut);
+       SetWriteMode(XORPut, TextModeGFV);
        GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
        GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
-       SetWriteMode(NormalPut);
+       SetWriteMode(NormalPut, TextModeGFV);
        MoveGrow(R, Mouse);                            { Resize the view }
        MoveGrow(R, Mouse);                            { Resize the view }
-       SetWriteMode(XORPut);
+       SetWriteMode(XORPut, TextModeGFV);
        GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
        GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
-       SetWriteMode(NormalPut);
+       SetWriteMode(NormalPut, TextModeGFV);
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
        ShowMouseCursor;                               { Show the mouse }
        ShowMouseCursor;                               { Show the mouse }
        {$ENDIF}
        {$ENDIF}
@@ -6495,7 +6586,8 @@ BEGIN
 END;
 END;
 
 
 PROCEDURE TWindow.DrawBorder;
 PROCEDURE TWindow.DrawBorder;
-VAR Fc, Bc: Byte; X, Y: Integer; S: String; ViewPort: ViewPortType;
+{$IFDEF OS_DOS} VAR Fc, Bc: Byte; X, Y: Integer; S: String;
+ViewPort: ViewPortType; {$ENDIF}
 BEGIN
 BEGIN
    {$IFDEF OS_DOS}
    {$IFDEF OS_DOS}
    Fc := GetColor(2) AND $0F;                        { Foreground colour }
    Fc := GetColor(2) AND $0F;                        { Foreground colour }
@@ -6506,28 +6598,40 @@ BEGIN
    ClearArea(0, Y, RawSize.X, Y+FontHeight, Bc);      { Clear background }
    ClearArea(0, Y, RawSize.X, Y+FontHeight, Bc);      { Clear background }
    If (Title<>Nil) AND (GOptions AND goTitled<>0)
    If (Title<>Nil) AND (GOptions AND goTitled<>0)
    Then Begin                                         { View has a title }
    Then Begin                                         { View has a title }
-     GetViewSettings(ViewPort);
+     GetViewSettings(ViewPort, TextModeGFV);
      X := (RawSize.X DIV 2);                          { Half way point }
      X := (RawSize.X DIV 2);                          { Half way point }
      X := X - (Length(Title^)*FontWidth) DIV 2;       { Calc start point }
      X := X - (Length(Title^)*FontWidth) DIV 2;       { Calc start point }
-     SetColor(Fc);
-     OutTextXY(RawOrigin.X+X-ViewPort.X1,
-       RawOrigin.Y+Y+1-ViewPort.Y1+2, Title^);          { Write the title }
+     If (TextModeGFV <> TRUE) Then Begin              { GRAPHICS MODE GFV }
+       SetColor(Fc);
+       OutTextXY(RawOrigin.X+X-ViewPort.X1,
+         RawOrigin.Y+Y+1-ViewPort.Y1+2, Title^);      { Write the title }
+     End Else Begin                                   { LEON??? }
+     End;
    End;
    End;
    If (Number>0) AND (Number<10) Then Begin           { Valid number }
    If (Number>0) AND (Number<10) Then Begin           { Valid number }
      Str(Number, S);                                  { Make number string }
      Str(Number, S);                                  { Make number string }
-     SetColor(GetColor(2) AND $0F);
-     OutTextXY(RawOrigin.X+RawSize.X-2*FontWidth-ViewPort.X1,
-       RawOrigin.Y+Y+1-ViewPort.Y1+2, S);               { Write number }
+     If (TextModeGFV <> True) Then Begin              { GRAPHICS MODE GFV }
+       SetColor(GetColor(2) AND $0F);
+       OutTextXY(RawOrigin.X+RawSize.X-2*FontWidth-ViewPort.X1,
+         RawOrigin.Y+Y+1-ViewPort.Y1+2, S);           { Write number }
+     End Else Begin                                   { LEON ????? }
+     End;
    End;
    End;
    If (Flags AND wfClose<>0) Then Begin               { Close icon request }
    If (Flags AND wfClose<>0) Then Begin               { Close icon request }
-     SetColor(Fc);
-     OutTextXY(RawOrigin.X+Y+FontWidth-ViewPort.X1,
-       RawOrigin.Y+Y+1-ViewPort.Y1+2, '[*]');           { Write close icon }
+     If (TextModeGFV <> True) Then Begin              { GRAPHICS MODE GFV }
+       SetColor(Fc);
+       OutTextXY(RawOrigin.X+Y+FontWidth-ViewPort.X1,
+         RawOrigin.Y+Y+1-ViewPort.Y1+2, '[*]');       { Write close icon }
+     End Else Begin                                   { LEON??? }
+     End;
    End;
    End;
    If (Flags AND wfZoom<>0) Then Begin
    If (Flags AND wfZoom<>0) Then Begin
-     SetColor(GetColor(2) AND $0F);
-     OutTextXY(RawOrigin.X+RawSize.X-4*FontWidth-Y-ViewPort.X1,
-       RawOrigin.Y+Y+1-ViewPort.Y1+2, '['+#24+']');     { Write zoom icon }
+     If (TextModeGFV <> True) Then Begin              { GRAPHICS MODE GFV }
+       SetColor(GetColor(2) AND $0F);
+       OutTextXY(RawOrigin.X+RawSize.X-4*FontWidth-Y-ViewPort.X1,
+         RawOrigin.Y+Y+1-ViewPort.Y1+2, '['+#24+']'); { Write zoom icon }
+     End Else Begin                                   { LEON??? }
+     End;
    End;
    End;
    BiColorRectangle(Y+1, Y+1, RawSize.X-Y-1, Y+FontHeight,
    BiColorRectangle(Y+1, Y+1, RawSize.X-Y-1, Y+FontHeight,
      White, DarkGray, False);                         { Draw 3d effect }
      White, DarkGray, False);                         { Draw 3d effect }
@@ -6628,7 +6732,10 @@ END.
 
 
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:22  marco
+ 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
   * CVS log and ID tags
   * CVS log and ID tags
 
 
 
 

+ 34 - 29
fvision/app.pas

@@ -100,7 +100,8 @@ USES
      Os2Def, Os2Base, OS2PmApi,                       { Standard units }
      Os2Def, Os2Base, OS2PmApi,                       { Standard units }
    {$ENDIF}
    {$ENDIF}
 
 
-   Common, Memory, GFVGraph,                          { GFV standard units }
+   GFVGraph,                                          { GFV standard unit }
+   Common, Memory,                                    { GFV standard units }
    Objects, Drivers, Views, Menus, HistList, Dialogs; { GFV standard units }
    Objects, Drivers, Views, Menus, HistList, Dialogs; { GFV standard units }
 
 
 {***************************************************************************}
 {***************************************************************************}
@@ -139,6 +140,7 @@ CONST
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 CONST
 CONST
   { Turbo Vision 1.0 Color Palettes }
   { Turbo Vision 1.0 Color Palettes }
+
    CColor =
    CColor =
          #$81#$70#$78#$74#$20#$28#$24#$17#$1F#$1A#$31#$31#$1E#$71#$1F +
          #$81#$70#$78#$74#$20#$28#$24#$17#$1F#$1A#$31#$31#$1E#$71#$1F +
      #$37#$3F#$3A#$13#$13#$3E#$21#$3F#$70#$7F#$7A#$13#$13#$70#$7F#$7E +
      #$37#$3F#$3A#$13#$13#$3E#$21#$3F#$70#$7F#$7A#$13#$13#$70#$7F#$7E +
@@ -160,7 +162,8 @@ CONST
    { Turbo Vision 2.0 Color Palettes }
    { Turbo Vision 2.0 Color Palettes }
 
 
    CAppColor =
    CAppColor =
-         #$81#$70#$78#$74#$20#$28#$24#$17#$1F#$1A#$31#$31#$1E#$71#$1F +
+         {$IFDEF OS_WINDOWS}#$81+{$ELSE}#$71+{$ENDIF}
+         #$70#$78#$74#$20#$28#$24#$17#$1F#$1A#$31#$31#$1E#$71#$1F +
      #$37#$3F#$3A#$13#$13#$3E#$21#$3F#$70#$7F#$7A#$13#$13#$70#$7F#$7E +
      #$37#$3F#$3A#$13#$13#$3E#$21#$3F#$70#$7F#$7A#$13#$13#$70#$7F#$7E +
      #$70#$7F#$7A#$13#$13#$70#$70#$7F#$7E#$20#$2B#$2F#$78#$2E#$70#$30 +
      #$70#$7F#$7A#$13#$13#$70#$70#$7F#$7E#$20#$2B#$2F#$78#$2E#$70#$30 +
      #$3F#$3E#$1F#$2F#$1A#$20#$72#$31#$31#$30#$2F#$3E#$31#$13#$38#$00 +
      #$3F#$3E#$1F#$2F#$1A#$20#$72#$31#$31#$30#$2F#$3E#$31#$13#$38#$00 +
@@ -423,8 +426,7 @@ CONST Pending: TEvent = (What: evNothing);            { Pending event }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 FUNCTION TvAppMsgHandler (Wnd: hWnd; iMessage, wParam: Sw_Word;
 FUNCTION TvAppMsgHandler (Wnd: hWnd; iMessage, wParam: Sw_Word;
 lParam: LongInt): LongInt; {$IFDEF BIT_16} EXPORT; {$ELSE} STDCALL; {$ENDIF}
 lParam: LongInt): LongInt; {$IFDEF BIT_16} EXPORT; {$ELSE} STDCALL; {$ENDIF}
-VAR Li: LongInt; Min, MAx: TPoint; Event: TEvent; P: PView; Wp: ^TWindowPos;
-    Mm: ^TMinMaxInfo;
+VAR Event: TEvent; P: PView; Mm: ^TMinMaxInfo;
 BEGIN
 BEGIN
    {$IFDEF BIT_16}                                    { 16 BIT CODE }
    {$IFDEF BIT_16}                                    { 16 BIT CODE }
    PtrRec(P).Seg := GetProp(Wnd, ViewSeg);            { Fetch seg property }
    PtrRec(P).Seg := GetProp(Wnd, ViewSeg);            { Fetch seg property }
@@ -566,13 +568,15 @@ BEGIN
    GetPalette := @P;                                  { Return palette }
    GetPalette := @P;                                  { Return palette }
 END;
 END;
 
 
-procedure TBackground.DrawbackGround;
-var
-  B: TDrawBuffer;
-begin
-  MoveChar(B, Pattern, GetColor($01), Size.X);
-  WriteLine(0, 0, Size.X, Size.Y, B);
-end;
+{--TBackGround--------------------------------------------------------------}
+{  DrawBackground -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Sep97 LdB    }
+{---------------------------------------------------------------------------}
+PROCEDURE TBackground.DrawBackground;
+VAR B: TDrawBuffer;
+BEGIN
+   MoveChar(B, Pattern, GetColor($01), Size.X);       { Fill draw buffer }
+   WriteLine(0, 0, Size.X, Size.Y, B);                { Draw to area }
+END;
 
 
 {--TBackGround--------------------------------------------------------------}
 {--TBackGround--------------------------------------------------------------}
 {  Store -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Sep97 LdB             }
 {  Store -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Sep97 LdB             }
@@ -594,7 +598,6 @@ CONSTRUCTOR TDesktop.Init (Var Bounds: Objects.TRect);
 BEGIN
 BEGIN
    Inherited Init(Bounds);                            { Call ancestor }
    Inherited Init(Bounds);                            { Call ancestor }
    GrowMode := gfGrowHiX + gfGrowHiY;                 { Set growmode }
    GrowMode := gfGrowHiX + gfGrowHiY;                 { Set growmode }
-   {GOptions := GOptions AND NOT goNoDrawView;}         { This group draws }
    InitBackground;                                    { Create background }
    InitBackground;                                    { Create background }
    If (Background <> Nil) Then Insert(Background);    { Insert background }
    If (Background <> Nil) Then Insert(Background);    { Insert background }
 END;
 END;
@@ -622,9 +625,9 @@ END;
 PROCEDURE TDesktop.InitBackground;
 PROCEDURE TDesktop.InitBackground;
 {$IFNDEF OS_WINDOWS} CONST Ch: Char = #176; {$ELSE} CONST Ch: Char = #167; {$ENDIF}
 {$IFNDEF OS_WINDOWS} CONST Ch: Char = #176; {$ELSE} CONST Ch: Char = #167; {$ENDIF}
 VAR R: TRect;
 VAR R: TRect;
-BEGIN                                                 { Compatability only }
-   getExtent(R);
-   BackGround := New(PbackGround, Init(R, Ch));
+BEGIN
+   GetExtent(R);                                      { Get desktop extents }
+   BackGround := New(PBackground, Init(R, Ch));       { Insert a background }
 END;
 END;
 
 
 {--TDesktop-----------------------------------------------------------------}
 {--TDesktop-----------------------------------------------------------------}
@@ -784,11 +787,8 @@ VAR I: Integer; R: TRect; {$IFDEF OS_WINDOWS} ODc: HDc; {$ENDIF}
 BEGIN
 BEGIN
    Application := @Self;                              { Set application ptr }
    Application := @Self;                              { Set application ptr }
    InitScreen;                                        { Initialize screen }
    InitScreen;                                        { Initialize screen }
-  { R.Assign(0, 0, ScreenWidth, ScreenHeight); }        { Full screen area }
-   R.A.X := 0;
-   R.A.Y := 0;
-   R.B.X := -(SysScreenWidth);
-   R.B.Y := -(SysScreenHeight);
+   R.Assign(0, 0, -(GetMaxX(TextModeGFV)+1),
+     -(GetMaxY(TextModeGFV)+1));                      { Full screen area }
    Inherited Init(R);                                 { Call ancestor }
    Inherited Init(R);                                 { Call ancestor }
    State := sfVisible + sfSelected + sfFocused +
    State := sfVisible + sfSelected + sfFocused +
       sfModal + sfExposed;                            { Deafult states }
       sfModal + sfExposed;                            { Deafult states }
@@ -808,11 +808,11 @@ BEGIN
    CreateWindowNow(swp_Show);                         { Create app window }
    CreateWindowNow(swp_Show);                         { Create app window }
    {$ENDIF}
    {$ENDIF}
    {$IFNDEF OS_DOS}                                   { WIN/NT/OS2 CODE }
    {$IFNDEF OS_DOS}                                   { WIN/NT/OS2 CODE }
-   AppWindow := HWindow;
-   Size.X := ScreenWidth;
-   Size.Y := ScreenHeight;
-   RawSize.X := ScreenWidth * SysFontWidth;
-   RawSize.Y := ScreenHeight * SysFontHeight - 1;
+   AppWindow := HWindow;                              { Set app window handle }
+   Size.X := ScreenWidth;                             { Set x size value }
+   Size.Y := ScreenHeight;                            { Set y size value }
+   RawSize.X := ScreenWidth * SysFontWidth;           { Set rawsize x }
+   RawSize.Y := ScreenHeight * SysFontHeight - 1;     { Set rawsize y }
    {$ENDIF}
    {$ENDIF}
    InitStatusLine;                                    { Init status line }
    InitStatusLine;                                    { Init status line }
    If (StatusLine <> Nil) Then Insert(StatusLine);    { Insert status line }
    If (StatusLine <> Nil) Then Insert(StatusLine);    { Insert status line }
@@ -837,8 +837,10 @@ BEGIN
   {$IFDEF OS_WINDOWS}                                 { WIN/NT CODE }
   {$IFDEF OS_WINDOWS}                                 { WIN/NT CODE }
    For I := 0 To 15 Do DeleteObject(ColBrush[I]);     { Delete brushes }
    For I := 0 To 15 Do DeleteObject(ColBrush[I]);     { Delete brushes }
    For I := 0 To 15 Do DeleteObject(ColPen[I]);       { Delete pens }
    For I := 0 To 15 Do DeleteObject(ColPen[I]);       { Delete pens }
-   AppWindow := 0;                                    { Zero app window }
-   {$ENDIF}
+  {$ENDIF}
+  {$IFNDEF OS_DOS}                                    { WIN/NT/OS2 CODE }
+   AppWindow := 0;                                    { Zero app window handle }
+  {$ENDIF}
 END;
 END;
 
 
 {--TProgram-----------------------------------------------------------------}
 {--TProgram-----------------------------------------------------------------}
@@ -1041,7 +1043,7 @@ END;
 {  HandleEvent -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Sep97 LdB       }
 {  HandleEvent -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Sep97 LdB       }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TProgram.HandleEvent (Var Event: TEvent);
 PROCEDURE TProgram.HandleEvent (Var Event: TEvent);
-VAR I: Word; C: Char;
+VAR C: Char;
 BEGIN
 BEGIN
    If (Event.What = evKeyDown) Then Begin             { Key press event }
    If (Event.What = evKeyDown) Then Begin             { Key press event }
      C := GetAltChar(Event.KeyCode);                  { Get alt char code }
      C := GetAltChar(Event.KeyCode);                  { Get alt char code }
@@ -1298,7 +1300,10 @@ END;
 END.
 END.
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 11:43:13  marco
+ 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
   * Added CVS log and ID entries.
   * Added CVS log and ID entries.
 
 
 
 

+ 43 - 43
fvision/common.pas

@@ -6,9 +6,9 @@
 {    Parts Copyright (c) 1997 by Balazs Scheidler          }
 {    Parts Copyright (c) 1997 by Balazs Scheidler          }
 {    [email protected]                                      }
 {    [email protected]                                      }
 {                                                          }
 {                                                          }
-{    Parts Copyright (c) 1999 by Leon de Boer              }
+{    Parts Copyright (c) 1999, 2000 by Leon de Boer        }
 {    [email protected]  - primary e-mail address       }
 {    [email protected]  - primary e-mail address       }
-{    ldeboer@starwon.com.au - backup e-mail address        }
+{    ldeboer@projectent.com.au - backup e-mail address     }
 {                                                          }
 {                                                          }
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {                                                          }
 {                                                          }
@@ -49,6 +49,7 @@
 {  0.2.8   21 Jan 99  LdB    Max data sizes added.         }
 {  0.2.8   21 Jan 99  LdB    Max data sizes added.         }
 {  0.2.9   22 Jan 99  LdB    General array types added.    }
 {  0.2.9   22 Jan 99  LdB    General array types added.    }
 {  0.3.0   27 Oct 99  LdB    Delphi3+ MaxAvail, MemAvail   }
 {  0.3.0   27 Oct 99  LdB    Delphi3+ MaxAvail, MemAvail   }
+{  0.4.0   14 Nov 00  LdB    Revamp of whole unit          }
 {**********************************************************}
 {**********************************************************}
 
 
 UNIT Common;
 UNIT Common;
@@ -76,9 +77,6 @@ UNIT Common;
 {     1000 - 10000    API reserved error codes                              }
 {     1000 - 10000    API reserved error codes                              }
 {    10000 -          Add-On unit error codes                               }
 {    10000 -          Add-On unit error codes                               }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{  Before anyone adding a unit, contact [email protected] to assign a base  }
-{  error code, to avoid collisions.                                         }
-{---------------------------------------------------------------------------}
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {                         DEFINED BASE ERROR CONSTANTS                      }
 {                         DEFINED BASE ERROR CONSTANTS                      }
@@ -136,6 +134,34 @@ TYPE
    Sw_Integer = LongInt;                              { Long integer now }
    Sw_Integer = LongInt;                              { Long integer now }
 {$ENDIF}
 {$ENDIF}
 
 
+{---------------------------------------------------------------------------}
+{                           FILE HANDLE SIZE                                }
+{---------------------------------------------------------------------------}
+TYPE
+{$IFDEF OS_DOS}                                       { DOS DEFINITION }
+   THandle = Integer;                                 { Handles are 16 bits }
+{$ENDIF}
+{$IFDEF OS_ATARI}                                     { ATARI DEFINITION }
+   THandle = Integer;                                 { Handles are 16 bits }
+{$ENDIF}
+{$IFDEF OS_LINUX}                                     { LINUX DEFINITIONS }
+ { values are words, though the OS calls return 32-bit values }
+ { to check (CEC)                                             }
+  THandle = LongInt;                                  { Simulated 32 bits }
+{$ENDIF}
+{$IFDEF OS_AMIGA}                                     { AMIGA DEFINITIONS }
+  THandle = LongInt;                                  { Handles are 32 bits }
+{$ENDIF}
+{$IFDEF OS_WINDOWS}                                   { WIN/NT DEFINITIONS }
+  THandle = sw_Integer;                               { Can be either }
+{$ENDIF}
+{$IFDEF OS_OS2}                                       { OS2 DEFINITIONS }
+  THandle = sw_Integer;                               { Can be either }
+{$ENDIF}
+{$IFDEF OS_MAC}                                       { MACINTOSH DEFINITIONS }
+  THandle = LongInt;                                  { Handles are 32 bits }
+{$ENDIF}
+
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {                      POINTERS TO STANDARD DATA TYPES                      }
 {                      POINTERS TO STANDARD DATA TYPES                      }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
@@ -186,22 +212,6 @@ value to nil. Would usually only be called if ErrorCode <> errOk.
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
 FUNCTION GetErrorInfo: Pointer;
 FUNCTION GetErrorInfo: Pointer;
 
 
-{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
-{                           MASK CONTROL ROUTINES                           }
-{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
-
-{-SetWordMask--------------------------------------------------------
-Sets the bits provided in the mask word in the passed word variable.
-20Sep99 LdB
----------------------------------------------------------------------}
-PROCEDURE SetWordMask (Var WordVar: Word; Mask: Word);
-
-{-SetWordMask--------------------------------------------------------
-Clears the bits provided in the mask word in the passed word variable.
-20Sep99 LdB
----------------------------------------------------------------------}
-PROCEDURE ClrWordMask (Var WordVar: Word; Mask: Word);
-
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {                        MINIMUM AND MAXIMUM ROUTINES                       }
 {                        MINIMUM AND MAXIMUM ROUTINES                       }
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
@@ -243,9 +253,13 @@ Given two long integers returns the maximum longint of the two.
 FUNCTION MaxLongIntOf (A, B: LongInt): LongInt;
 FUNCTION MaxLongIntOf (A, B: LongInt): LongInt;
 
 
 {$IFDEF PPC_DELPHI3}                                  { DELPHI 3+ CODE }
 {$IFDEF PPC_DELPHI3}                                  { DELPHI 3+ CODE }
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+{                          MISSING DELPHI3 ROUTINES                         }
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+
 { ******************************* REMARK ****************************** }
 { ******************************* REMARK ****************************** }
 {  Delphi 3+ does not define these standard routines so I have made     }
 {  Delphi 3+ does not define these standard routines so I have made     }
-{  some private functions here to complete compatability.               }
+{  some public functions here to complete compatability.                }
 { ****************************** END REMARK *** Leon de Boer, 14Aug98 * }
 { ****************************** END REMARK *** Leon de Boer, 14Aug98 * }
 
 
 {-MemAvail-----------------------------------------------------------
 {-MemAvail-----------------------------------------------------------
@@ -301,26 +315,6 @@ BEGIN
    GetErrorInfo := ErrorInfo;                         { Return errorinfo ptr }
    GetErrorInfo := ErrorInfo;                         { Return errorinfo ptr }
 END;
 END;
 
 
-{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
-{                           MASK CONTROL ROUTINES                           }
-{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
-
-{---------------------------------------------------------------------------}
-{  SetWordMask -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 20Sep99 LdB       }
-{---------------------------------------------------------------------------}
-PROCEDURE SetWordMask (Var WordVar: Word; Mask: Word);
-BEGIN
-   WordVar := WordVar OR Mask;                        { Set the mask bits }
-END;
-
-{---------------------------------------------------------------------------}
-{  ClrWordMask -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 20Sep99 LdB       }
-{---------------------------------------------------------------------------}
-PROCEDURE ClrWordMask (Var WordVar: Word; Mask: Word);
-BEGIN
-   WordVar := WordVar AND NOT Mask;                  { Clr the mask bits }
-END;
-
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {                        MINIMUM AND MAXIMUM ROUTINES                       }
 {                        MINIMUM AND MAXIMUM ROUTINES                       }
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
@@ -380,6 +374,9 @@ BEGIN
 END;
 END;
 
 
 {$IFDEF PPC_DELPHI3}                                  { DELPHI 3+ CODE }
 {$IFDEF PPC_DELPHI3}                                  { DELPHI 3+ CODE }
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+{                          MISSING DELPHI3 ROUTINES                         }
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {  MemAvail -> Platforms WIN/NT - Updated 14Aug98 LdB                       }
 {  MemAvail -> Platforms WIN/NT - Updated 14Aug98 LdB                       }
@@ -405,7 +402,10 @@ END;
 END.
 END.
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:20  marco
+ 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:20  marco
   * CVS log and ID tags
   * CVS log and ID tags
 
 
 
 

+ 6 - 2
fvision/dialogs.pas

@@ -97,7 +97,8 @@ USES
      OS2Def, OS2Base, OS2PMAPI,                       { Standard units }
      OS2Def, OS2Base, OS2PMAPI,                       { Standard units }
    {$ENDIF}
    {$ENDIF}
 
 
-   Common, GFVGraph, Objects, Drivers, Views, Validate; { Standard GFV units }
+   GFVGraph,                                          { GFV standard unit }
+   Common, Objects, Drivers, Views, Validate;         { Standard GFV units }
 
 
 {***************************************************************************}
 {***************************************************************************}
 {                              PUBLIC CONSTANTS                             }
 {                              PUBLIC CONSTANTS                             }
@@ -3215,7 +3216,10 @@ END;
 END.
 END.
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:20  marco
+ 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:20  marco
   * CVS log and ID tags
   * CVS log and ID tags
 
 
 
 

+ 136 - 49
fvision/drivers.pas

@@ -5,9 +5,10 @@
 {                                                          }
 {                                                          }
 {    Interface Copyright (c) 1992 Borland International    }
 {    Interface Copyright (c) 1992 Borland International    }
 {                                                          }
 {                                                          }
-{    Copyright (c) 1996, 1997, 1998, 1999 by Leon de Boer  }
+{    Copyright (c) 1996, 1997, 1998, 1999, 2000            }
+{    by Leon de Boer                                       }
 {    [email protected]  - primary e-mail addr          }
 {    [email protected]  - primary e-mail addr          }
-{    ldeboer@starwon.com.au - backup e-mail addr           }
+{    ldeboer@projectent.com.au - backup e-mail addr        }
 {                                                          }
 {                                                          }
 {    Original FormatStr kindly donated by Marco Schmidt    }
 {    Original FormatStr kindly donated by Marco Schmidt    }
 {                                                          }
 {                                                          }
@@ -62,6 +63,7 @@
 {  1.98     09 Sep 99   GetMouseEvent fixed for OS2.       }
 {  1.98     09 Sep 99   GetMouseEvent fixed for OS2.       }
 {  1.99     03 Nov 99   FPC windows support added.         }
 {  1.99     03 Nov 99   FPC windows support added.         }
 {  2.00     26 Nov 99   Graphics stuff moved to GFVGraph   }
 {  2.00     26 Nov 99   Graphics stuff moved to GFVGraph   }
+{  2.01     21 May 00   DOS fixed to use std GRAPH unit    }
 {**********************************************************}
 {**********************************************************}
 
 
 UNIT Drivers;
 UNIT Drivers;
@@ -101,10 +103,13 @@ USES
        {$IFDEF PPC_FPC}                               { FPC WINDOWS COMPILER }
        {$IFDEF PPC_FPC}                               { FPC WINDOWS COMPILER }
          Windows,                                     { Standard unit }
          Windows,                                     { Standard unit }
        {$ELSE}                                        { OTHER COMPILERS }
        {$ELSE}                                        { OTHER COMPILERS }
-         WinTypes, WinProcs,                          { Standard units }
+         WinTypes, WinProcs, Strings,                 { Standard units }
+         {$IFDEF BIT_16}                              { 16 BIT WINDOWS COMPILER }
+         Win31,                                       { Standard unit }
+         {$ENDIF}
        {$ENDIF}
        {$ENDIF}
        {$IFDEF PPC_DELPHI}                            { DELPHI3+ COMPILER }
        {$IFDEF PPC_DELPHI}                            { DELPHI3+ COMPILER }
-       SysUtils, Messages,                            { Standard unit }
+         SysUtils, Messages,                          { Standard unit }
        {$ENDIF}
        {$ENDIF}
      {$ELSE}                                          { SYBIL2+ COMPILER }
      {$ELSE}                                          { SYBIL2+ COMPILER }
        WinBase, WinDef, WinUser, WinGDI,              { Standard units }
        WinBase, WinDef, WinUser, WinGDI,              { Standard units }
@@ -120,7 +125,11 @@ USES
      {$ENDIF}
      {$ENDIF}
    {$ENDIF}
    {$ENDIF}
 
 
-   Common, GFVGraph, Objects;                         { GFV standard units }
+   GFVGraph,                                          { GFV graphics unit }
+   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   Graph,                                             { Standard bp unit }
+   {$ENDIF}
+   Common, Objects;                                   { GFV standard units }
 
 
 {***************************************************************************}
 {***************************************************************************}
 {                              PUBLIC CONSTANTS                             }
 {                              PUBLIC CONSTANTS                             }
@@ -578,6 +587,7 @@ PROCEDURE ShowMouseCursor;
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {$IFDEF OS_WINDOWS}                                   { WIN/NT CODE }
 {$IFDEF OS_WINDOWS}                                   { WIN/NT CODE }
 CONST
 CONST
+   RawHandler   : Boolean = False;
    AppWindow    : HWnd = 0;                           { Application window }
    AppWindow    : HWnd = 0;                           { Application window }
    DefGfvFont   : HFont = 0;                          { Default GFV font }
    DefGfvFont   : HFont = 0;                          { Default GFV font }
    DefFontWeight: Integer = fw_Normal;                { Default font weight }
    DefFontWeight: Integer = fw_Normal;                { Default font weight }
@@ -624,6 +634,7 @@ CONST
 {          >>> NEW INITIALIZED DOS/DPMI/WIN/NT/OS2 VARIABLES <<<            }
 {          >>> NEW INITIALIZED DOS/DPMI/WIN/NT/OS2 VARIABLES <<<            }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 CONST
 CONST
+   TextModeGFV    : Boolean = False;                  { DOS/DPMI textmode op }
    DefLineNum     : Integer = 25;                     { Default line number }
    DefLineNum     : Integer = 25;                     { Default line number }
    DefFontHeight  : Integer = 0;                      { Default font height }
    DefFontHeight  : Integer = 0;                      { Default font height }
    SysFontWidth   : Integer = 8;                      { System font width }
    SysFontWidth   : Integer = 8;                      { System font width }
@@ -662,7 +673,7 @@ VAR
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {                 DOS/DPMI MOUSE INTERRUPT EVENT QUEUE SIZE                 }
 {                 DOS/DPMI MOUSE INTERRUPT EVENT QUEUE SIZE                 }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-CONST EventQSize = 16;                                { Default irq bufsize }
+CONST EventQSize = 16;                                { Default int bufsize }
 {$ENDIF}
 {$ENDIF}
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
@@ -1279,6 +1290,16 @@ ASSEMBLER;
      CMP DL, 25;                                      { Check screen ht }
      CMP DL, 25;                                      { Check screen ht }
      SBB AH, AH;                                      { Subtract borrow }
      SBB AH, AH;                                      { Subtract borrow }
      INC AH;                                          { Make #1 if in high }
      INC AH;                                          { Make #1 if in high }
+     MOV CL, 1;                                       { Preset value of 1 }
+     OR DL, DL;                                       { Test for zero }
+     JNZ @@1;                                         { Branch if not zero }
+     MOV CL, 0                                        { Set value to zero }
+     MOV DL, 24;                                      { Zero = 24 lines }
+   @@1:
+     INC DL;                                          { Add one line }
+     MOV ScreenWidth, DH;                             { Hold screen width }
+     MOV ScreenHeight, DL;                            { Hold screen height }
+     MOV HiResScreen, CL;                             { Set hires mask }
      CMP AL, smMono;                                  { Is screen mono }
      CMP AL, smMono;                                  { Is screen mono }
      JZ @@Exit1;                                      { Exit of mono }
      JZ @@Exit1;                                      { Exit of mono }
      CMP AL, smBW80;                                  { Is screen B&W }
      CMP AL, smBW80;                                  { Is screen B&W }
@@ -1306,6 +1327,16 @@ ASSEMBLER;
      CMPB $25, %DL;                                   { Check screen ht }
      CMPB $25, %DL;                                   { Check screen ht }
      SBB %AH, %AH;                                    { Subtract borrow }
      SBB %AH, %AH;                                    { Subtract borrow }
      INCB %AH;                                        { Make #1 if in high }
      INCB %AH;                                        { Make #1 if in high }
+     MOVB $1, %CL;                                    { Preset value of 1 }
+     ORB %DL, %DL;                                    { Test for zero }
+     JNZ .L_JMP1;                                     { Branch if not zero }
+     MOVB $0, %CL;                                    { Set value to zero }
+     MOVB $24, %DL;                                   { Zero = 24 lines }
+   .L_JMP1:
+     INCB %DL;                                        { Add one line }
+     MOVB %DH, SCREENWIDTH;                           { Hold screen width }
+     MOVB %DL, SCREENHEIGHT;                          { Hold screen height }
+     MOVB %CL, HIRESSCREEN;                           { Set hires mask }
      CMPB $07, %AL;                                   { Is screen mono }
      CMPB $07, %AL;                                   { Is screen mono }
      JZ .L_Exit1;                                     { Exit of mono }
      JZ .L_Exit1;                                     { Exit of mono }
      CMPB $02, %AL;                                   { Is screen B&W }
      CMPB $02, %AL;                                   { Is screen B&W }
@@ -1700,7 +1731,16 @@ BEGIN
        WM_SysKeyDown: Begin                           { SYSTEM KEY DOWN }
        WM_SysKeyDown: Begin                           { SYSTEM KEY DOWN }
          If (NumPos > 0) Then Begin                   { Numerics entry op }
          If (NumPos > 0) Then Begin                   { Numerics entry op }
            Case Msg.wParam Of
            Case Msg.wParam Of
-             VK_Insert: B := 0;                       { Key value = 0 }
+             VK_Insert: Begin                         { Insert key }
+               If (GetShiftState AND kbAltShift <> 0) { Alt key down }
+               Then Begin
+                 Event.What := evKeyDown;             { Key down event }
+                 Event.KeyCode := kbAltIns;           { Alt + Ins key }
+                 Handled := True;                     { Set key handled }
+                 Exit;                                { Now exit }
+               End;
+               B := 0;                                { Key value = 0 }
+             End;
              VK_End: B := 1;                          { Key value = 1 }
              VK_End: B := 1;                          { Key value = 1 }
              VK_Down: B := 2;                         { Key value = 2 }
              VK_Down: B := 2;                         { Key value = 2 }
              VK_Next: B := 3;                         { Key value = 3 }
              VK_Next: B := 3;                         { Key value = 3 }
@@ -1862,7 +1902,7 @@ BEGIN
 END;
 END;
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{  GetMouseEvent -> Platforms DOS/DPMI/WINDOWS/OS2 - Updated 09Sep98 LdB    }
+{  GetMouseEvent -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 09Sep98 LdB     }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE GetMouseEvent (Var Event: TEvent);
 PROCEDURE GetMouseEvent (Var Event: TEvent);
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
@@ -2121,10 +2161,10 @@ BEGIN
    Event.What := evNothing;                           { Preset no event }
    Event.What := evNothing;                           { Preset no event }
    {$IFDEF PPC_FPC}                                   { FPC WINDOWS COMPILER }
    {$IFDEF PPC_FPC}                                   { FPC WINDOWS COMPILER }
    If PeekMessage(@Msg, 0, WM_MouseFirst,
    If PeekMessage(@Msg, 0, WM_MouseFirst,
-   WM_MouseLast, pm_Remove) Then Begin                { Fetch mouse message }
+     WM_MouseLast, pm_Remove) Then Begin              { Fetch mouse message }
    {$ELSE}                                            { OTHER COMPILERS }
    {$ELSE}                                            { OTHER COMPILERS }
    If PeekMessage(Msg, 0, WM_MouseFirst,
    If PeekMessage(Msg, 0, WM_MouseFirst,
-   WM_MouseLast, pm_Remove) Then Begin                { Fetch mouse message }
+     WM_MouseLast, pm_Remove) Then Begin              { Fetch mouse message }
    {$ENDIF}
    {$ENDIF}
      TranslateMessage(Msg);                           { Translate message }
      TranslateMessage(Msg);                           { Translate message }
      DispatchMessage(Msg);                            { Dispatch message }
      DispatchMessage(Msg);                            { Dispatch message }
@@ -2242,12 +2282,19 @@ VAR {$IFDEF OS_DOS} I, J: Integer; Ts: TextSettingsType; {$ENDIF}
     {$IFDEF OS_OS2} Ts, Fs: Integer; Ps: HPs; Tm: FontMetrics; {$ENDIF}
     {$IFDEF OS_OS2} Ts, Fs: Integer; Ps: HPs; Tm: FontMetrics; {$ENDIF}
 BEGIN
 BEGIN
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
-   I := Detect;                                       { Detect video card }
-   J := 0;                                            { Zero select mode }
-   InitGraph(I, J, '');                               { Initialize graphics }
-   I := GetMaxX;                                      { Fetch max x size }
-   J := GetMaxY;                                      { Fetch max y size }
-   {$IFDEF PPC_FPC}                                   { FPC DOS COMPILER }
+     If (TextModeGFV = True) Then Begin               { TEXT MODE GFV }
+       I := ScreenWidth*8 -1;                         { Mouse width }
+       J := ScreenHeight*8 -1;                        { Mouse height }
+       SysScreenWidth := I + 1;
+       SysScreenHeight := J + 1;
+     End Else Begin                                   { GRAPHICS MODE GFV }
+       I := Detect;                                   { Detect video card }
+       J := 0;                                        { Zero select mode }
+       InitGraph(I, J, '');                           { Initialize graphics }
+       I := GetMaxX;                                  { Fetch max x size }
+       J := GetMaxY;                                  { Fetch max y size }
+     End;
+     {$IFDEF PPC_FPC}                                 { FPC DOS COMPILER }
      ASM
      ASM
        MOVW $7, %AX;                                  { Set function  id }
        MOVW $7, %AX;                                  { Set function  id }
        MOVW $0, %CX;                                  { Clear register }
        MOVW $0, %CX;                                  { Clear register }
@@ -2259,10 +2306,12 @@ BEGIN
        INT $0x33;                                     { Set mouse y movement }
        INT $0x33;                                     { Set mouse y movement }
      END;
      END;
      Lock_Code(Pointer(@ShowTheMouse), 400);          { Lock cursor code }
      Lock_Code(Pointer(@ShowTheMouse), 400);          { Lock cursor code }
-     MouseMoveProc := ShowTheMouse;                   { Set move function }
-     ShowMouseProc := ShowTheMouse;                   { Set show function }
-     HideMouseProc := ShowTheMouse;                   { Set hide function }
-   {$ELSE}                                            { OTHER DOS COMPILERS }
+     If (TextModeGFV <> True) Then Begin              { GRAPHICS MODE GFV }
+       MouseMoveProc := ShowTheMouse;                 { Set move function }
+       ShowMouseProc := ShowTheMouse;                 { Set show function }
+       HideMouseProc := ShowTheMouse;                 { Set hide function }
+     End;
+     {$ELSE}                                          { OTHER DOS COMPILERS }
      ASM
      ASM
        MOV AX, 7;                                     { Set function  id }
        MOV AX, 7;                                     { Set function  id }
        XOR CX, CX;                                    { Clear register }
        XOR CX, CX;                                    { Clear register }
@@ -2273,25 +2322,33 @@ BEGIN
        MOV DX, J;                                     { Maximum y size }
        MOV DX, J;                                     { Maximum y size }
        INT 33H;                                       { Set mouse y movement }
        INT 33H;                                       { Set mouse y movement }
      END;
      END;
-   {$ENDIF}
-     SysScreenWidth := GetMaxX+1;                     { Max screen width }
-     SysScreenHeight := GetMaxY+1;                    { Max screen height }
-
-     If (DefFontHeight = 0) Then                      { Font height not set }
-       J := SysScreenHeight DIV DefLineNum            { Approx font height }
-       Else J := DefFontHeight;                       { Use set font height }
-     I := J DIV (TextHeight('H')+4);                  { Approx magnification }
-     If (I < 1) Then I := 1;                          { Must be 1 or above }
-     GetTextSettings(Ts);                             { Get text style }
-     SetTextStyle(Ts.Font, Ts.Direction, I);          { Set new font settings }
-     SysFontWidth := TextWidth('H');                  { Transfer font width }
-     SysFontHeight := TextHeight('H')+4;              { Transfer font height }
+     {$ENDIF}
+     If (TextModeGFV = True) Then Begin               { TEXT MODE GFV }
+       SysFontWidth := 8;                             { Font width }
+       SysFontHeight := 8;                            { Font height }
+     End Else Begin                                   { GRAPHICS MODE GFV }
+       If (DefFontHeight = 0) Then                    { Font height not set }
+         J := (GetMaxY+1) DIV DefLineNum              { Approx font height }
+         Else J := DefFontHeight;                     { Use set font height }
+       I := J DIV (TextHeight('H')+4);                { Approx magnification }
+       If (I < 1) Then I := 1;                        { Must be 1 or above }
+       GetTextSettings(Ts);                           { Get text style }
+       SetTextStyle(Ts.Font, Ts.Direction, I);        { Set new font settings }
+       SysFontWidth := TextWidth('H');                { Transfer font width }
+       SysFontHeight := TextHeight('H')+4;            { Transfer font height }
+       ScreenWidth := (SysScreenWidth+1) DIV
+         SysFontWidth;                                { Calc screen width }
+       ScreenHeight := (SysScreenHeight+1) DIV
+         SysFontHeight;                               { Calc screen height }
+     End;
    {$ENDIF}
    {$ENDIF}
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
      SysScreenWidth := GetSystemMetrics(
      SysScreenWidth := GetSystemMetrics(
        SM_CXFullScreen)-GetSystemMetrics(SM_CXFrame); { Max screen width }
        SM_CXFullScreen)-GetSystemMetrics(SM_CXFrame); { Max screen width }
      SysScreenHeight := GetSystemMetrics(
      SysScreenHeight := GetSystemMetrics(
        SM_CYFullScreen);                              { Max screen height }
        SM_CYFullScreen);                              { Max screen height }
+     SystemParametersInfo(SPI_GETICONTITLELOGFONT,
+       SizeOf(TLogFont), @TempFont, 0);               { Get system font }
      With TempFont Do Begin
      With TempFont Do Begin
        If (DefFontHeight = 0) Then Begin              { Font height not set }
        If (DefFontHeight = 0) Then Begin              { Font height not set }
          lfHeight := SysScreenHeight DIV DefLineNum;  { Best guess height }
          lfHeight := SysScreenHeight DIV DefLineNum;  { Best guess height }
@@ -2309,11 +2366,20 @@ BEGIN
        lfQuality       := Proof_Quality;              { Proof quality }
        lfQuality       := Proof_Quality;              { Proof quality }
        lfPitchAndFamily:= Variable_Pitch OR
        lfPitchAndFamily:= Variable_Pitch OR
          Fixed_Pitch;                                 { Either fitch format }
          Fixed_Pitch;                                 { Either fitch format }
+(*       {$IFDEF WESTERNS}
        FillChar(lfFaceName, SizeOf(lfFaceName), #0);  { Clear memory area }
        FillChar(lfFaceName, SizeOf(lfFaceName), #0);  { Clear memory area }
        Move(DefFontStyle[1], lfFacename,
        Move(DefFontStyle[1], lfFacename,
          Length(DefFontStyle));                       { Transfer style name }
          Length(DefFontStyle));                       { Transfer style name }
+       {$ELSE}
+       DefFontStyle[0] := Chr(StrLen(lfFacename));
+       Move(lfFacename, DefFontStyle[1], Ord(DefFontStyle[0]));
+       {$ENDIF}*)
      End;
      End;
-     DefGFVFont := CreateFontIndirect(TempFont);      { Create a default font }
+     {$IFDEF PPC_FPC}                                 { FPC WINDOWS COMPILER }
+       DefGFVFont := CreateFontIndirect(@TempFont);   { Create a default font }
+     {$ELSE}
+       DefGFVFont := CreateFontIndirect(TempFont);    { Create a default font }
+     {$ENDIF}
      Dc := GetDc(0);                                  { Get screen context }
      Dc := GetDc(0);                                  { Get screen context }
      Mem := CreateCompatibleDC(Dc);                   { Compatable context }
      Mem := CreateCompatibleDC(Dc);                   { Compatable context }
      SelectObject(Mem, DefGFVFont);                   { Select the font }
      SelectObject(Mem, DefGFVFont);                   { Select the font }
@@ -2358,23 +2424,24 @@ BEGIN
      GpiQueryFontMetrics(Ps, SizeOf(Tm), Tm);         { Get text metrics }
      GpiQueryFontMetrics(Ps, SizeOf(Tm), Tm);         { Get text metrics }
      SysFontWidth := Tm.lAveCharWidth+1;              { Transfer font width }
      SysFontWidth := Tm.lAveCharWidth+1;              { Transfer font width }
      SysFontHeight := Tm.lMaxBaselineExt;             { Transfer font height }
      SysFontHeight := Tm.lMaxBaselineExt;             { Transfer font height }
-    { SysFontheight := SysScreenheight DIV DefLineNum;}
      WinReleasePS(Ps);                                { Release desktop PS }
      WinReleasePS(Ps);                                { Release desktop PS }
      DefPointer := WinQuerySysPointer(HWND_DESKTOP,
      DefPointer := WinQuerySysPointer(HWND_DESKTOP,
        SPTR_ARROW, False);                            { Hold default pointer }
        SPTR_ARROW, False);                            { Hold default pointer }
    {$ENDIF}
    {$ENDIF}
-   ScreenWidth := SysScreenWidth DIV SysFontWidth;    { Calc screen width }
-   ScreenHeight := SysScreenHeight DIV SysFontHeight; { Calc screen height }
-   SysScreenWidth := ScreenWidth * SysFontWidth;      { Actual width }
-   SysScreenHeight := ScreenHeight * SysFontHeight;   { Actual height }
-   {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
-   Inc(SysScreenWidth, 2*GetSystemMetrics(SM_CXFrame)); { Max screen width }
-   Inc(SysScreenHeight, GetSystemMetrics(SM_CYCaption)
-     + GetSystemMetrics(SM_CYFrame));                 { Max screen height }
-   {$ENDIF}
-   {$IFDEF OS_OS2}                                    { OS2 CODE }
-   Inc(SysScreenWidth, Fs);                           { Max screen width }
-   Inc(SysScreenHeight, Ts);                          { Max screen height }
+   {$IFNDEF OS_DOS}                                   { WIN/NT/OS2 ONLY }
+     ScreenWidth := SysScreenWidth DIV SysFontWidth;  { Calc screen width }
+     ScreenHeight := SysScreenHeight DIV SysFontHeight;{ Calc screen height }
+     SysScreenWidth := ScreenWidth * SysFontWidth;    { Actual width }
+     SysScreenHeight := ScreenHeight * SysFontHeight; { Actual height }
+     {$IFDEF OS_WINDOWS}                              { WIN/NT CODE }
+     Inc(SysScreenWidth, 2*GetSystemMetrics(SM_CXFrame));{ Max screen width }
+     Inc(SysScreenHeight, GetSystemMetrics(SM_CYCaption)
+       + GetSystemMetrics(SM_CYFrame));               { Max screen height }
+     {$ENDIF}
+     {$IFDEF OS_OS2}                                  { OS2 CODE }
+     Inc(SysScreenWidth, Fs);                         { Max screen width }
+     Inc(SysScreenHeight, Ts);                        { Max screen height }
+     {$ENDIF}
    {$ENDIF}
    {$ENDIF}
 END;
 END;
 
 
@@ -2390,7 +2457,24 @@ BEGIN
      HideMouseProc := Nil;                            { Clr hide mouse ptr }
      HideMouseProc := Nil;                            { Clr hide mouse ptr }
      UnLock_Code(Pointer(@ShowTheMouse), 400);        { Unlock cursor code }
      UnLock_Code(Pointer(@ShowTheMouse), 400);        { Unlock cursor code }
      {$ENDIF}
      {$ENDIF}
-     CloseGraph;                                      { Close down graphics }
+     If (TextModeGFV <> True) Then CloseGraph         { Close down graphics }
+     Else Begin                                       { Text mode gfv }
+       {$IFDEF PPC_FPC}                               { FPC DOS COMPILER }
+       ASM
+         MOVW SCREENMODE, %AX;                        { Original screen mode }
+         PUSH %EBP;                                   { Save register }
+         INT $0x10;                                   { Reset video }
+         POP %EBP;                                    { Restore register }
+       END;
+       {$ELSE}                                        { OTHER DOS COMPILERS }
+       ASM
+         MOV AX, ScreenMode;                          { Original screen mode }
+         PUSH BP;                                     { Save register }
+         INT 10H;                                     { Reset video }
+         POP BP;                                      { Restore register }
+       END;
+       {$ENDIF}
+     End;
    {$ENDIF}
    {$ENDIF}
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
      If (DefGFVFont <> 0) Then                        { Check font created }
      If (DefGFVFont <> 0) Then                        { Check font created }
@@ -2625,7 +2709,10 @@ BEGIN
 END.
 END.
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:21  marco
+ 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
   * CVS log and ID tags
 	
 	
 
 

+ 25 - 15
fvision/emsunit.pas

@@ -5,9 +5,9 @@
 {                                                          }
 {                                                          }
 {       Extracted from my original OBJECTS.PAS unit.       }
 {       Extracted from my original OBJECTS.PAS unit.       }
 {                                                          }
 {                                                          }
-{        Copyright (c) 1998 by Leon de Boer                }
+{        Copyright (c) 1998, 2000 by Leon de Boer          }
 {       [email protected]  - primary e-mail address    }
 {       [email protected]  - primary e-mail address    }
-{       ldeboer@starwon.com.au - backup e-mail address     }
+{       ldeboer@projectent.com.au - backup e-mail address  }
 {                                                          }
 {                                                          }
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {                                                          }
 {                                                          }
@@ -29,6 +29,8 @@
 {  -------  ---------   ---------------------------------  }
 {  -------  ---------   ---------------------------------  }
 {  1.00     31 Aug 98   First release moved from original  }
 {  1.00     31 Aug 98   First release moved from original  }
 {                       objects unit.                      }
 {                       objects unit.                      }
+{  1.10     14 Nov 00   Fixed EMS_MemAvail & EMS_MaxAvail  }
+{                       Fixed EMS_MoveMem                  }
 {**********************************************************}
 {**********************************************************}
 
 
 UNIT EMSUnit;
 UNIT EMSUnit;
@@ -65,6 +67,8 @@ UNIT EMSUnit;
 THis UNIT can only compile under DOS REAL MODE!!!!
 THis UNIT can only compile under DOS REAL MODE!!!!
 {$ENDIF}
 {$ENDIF}
 
 
+USES Common;
+
 {***************************************************************************}
 {***************************************************************************}
 {                             PUBLIC CONSTANTS                              }
 {                             PUBLIC CONSTANTS                              }
 {***************************************************************************}
 {***************************************************************************}
@@ -105,14 +109,14 @@ FUNCTION EMS_Version: Word;
 {-EMS_MaxAvail-------------------------------------------------------
 {-EMS_MaxAvail-------------------------------------------------------
 If EMS functions are available returns the maximum EMS memory available
 If EMS functions are available returns the maximum EMS memory available
 if none was in use. No EMS support or error will return zero.
 if none was in use. No EMS support or error will return zero.
-31Aug98 LdB
+14Nov00 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
 FUNCTION EMS_MaxAvail: LongInt;
 FUNCTION EMS_MaxAvail: LongInt;
 
 
 {-EMS_MemAvail-------------------------------------------------------
 {-EMS_MemAvail-------------------------------------------------------
 If EMS functions are available returns the EMS memory that is currently
 If EMS functions are available returns the EMS memory that is currently
 available. No EMS support or error will return zero.
 available. No EMS support or error will return zero.
-31Aug98 LdB
+14Nov00 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
 FUNCTION EMS_MemAvail: LongInt;
 FUNCTION EMS_MemAvail: LongInt;
 
 
@@ -148,7 +152,7 @@ is transfered to the ToAddress. The handles can be EMS handles if the
 associated address is an EMS offset or zero if the address refers to
 associated address is an EMS offset or zero if the address refers to
 a real mode address. No EMS support or error will return an EMS error
 a real mode address. No EMS support or error will return an EMS error
 state while successful operations will return zero.
 state while successful operations will return zero.
-31Aug98 LdB
+14Nov00 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
 FUNCTION EMS_MoveMem (ToAddr: LongInt; ToHandle: Word; FromAddr: LongInt;
 FUNCTION EMS_MoveMem (ToAddr: LongInt; ToHandle: Word; FromAddr: LongInt;
 FromHandle: Word; Size: LongInt): Byte;
 FromHandle: Word; Size: LongInt): Byte;
@@ -262,7 +266,7 @@ ASM
 END;
 END;
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{  EMS_MaxAvail -> Platforms DOS - Checked 28Jan97 LdB                      }
+{  EMS_MaxAvail -> Platforms DOS - Checked 14Nov00 LdB                      }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 FUNCTION EMS_MaxAvail: LongInt; ASSEMBLER;
 FUNCTION EMS_MaxAvail: LongInt; ASSEMBLER;
 ASM
 ASM
@@ -270,7 +274,7 @@ ASM
    JZ @@EMSInitialized;                               { Jump if initialized }
    JZ @@EMSInitialized;                               { Jump if initialized }
    CALL InitializeEMS;                                { Initialize EMS }
    CALL InitializeEMS;                                { Initialize EMS }
 @@EMSInitialized:
 @@EMSInitialized:
-   XOR AX, AX;                                        { Preset zero return }
+   XOR BX, BX;                                        { Preset zero return }
    CMP EMSPresent, True;                              { Check EMS present }
    CMP EMSPresent, True;                              { Check EMS present }
    JNZ @@Exit;                                        { Exit if no EMS }
    JNZ @@Exit;                                        { Exit if no EMS }
    MOV AH, 42H;                                       { Set EMS function id }
    MOV AH, 42H;                                       { Set EMS function id }
@@ -290,7 +294,7 @@ ASM
 END;
 END;
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{  EMS_MemAvail -> Platforms DOS - Checked 28Jan97 LdB                      }
+{  EMS_MemAvail -> Platforms DOS - Checked 14Nov00 LdB                      }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 FUNCTION EMS_MemAvail: LongInt; ASSEMBLER;
 FUNCTION EMS_MemAvail: LongInt; ASSEMBLER;
 ASM
 ASM
@@ -298,7 +302,7 @@ ASM
    JZ @@EMSInitialized;                               { Jump if initialized }
    JZ @@EMSInitialized;                               { Jump if initialized }
    CALL InitializeEMS;                                { Initialize EMS }
    CALL InitializeEMS;                                { Initialize EMS }
 @@EMSInitialized:
 @@EMSInitialized:
-   XOR AX, AX;                                        { Preset zero return }
+   XOR BX, BX;                                        { Preset zero return }
    CMP EMSPresent, True;                              { Check EMS present }
    CMP EMSPresent, True;                              { Check EMS present }
    JNZ @@Exit;                                        { Exit if no EMS }
    JNZ @@Exit;                                        { Exit if no EMS }
    MOV AH, 42H;                                       { Set EMS function id }
    MOV AH, 42H;                                       { Set EMS function id }
@@ -382,6 +386,9 @@ ASM
 @@Exit:
 @@Exit:
 END;
 END;
 
 
+{---------------------------------------------------------------------------}
+{  EMS_MoveMem -> Platforms DOS - Checked 14Nov00 LdB                       }
+{---------------------------------------------------------------------------}
 FUNCTION EMS_MoveMem (ToAddr: LongInt; ToHandle: Word; FromAddr: LongInt;
 FUNCTION EMS_MoveMem (ToAddr: LongInt; ToHandle: Word; FromAddr: LongInt;
 FromHandle: Word; Size: LongInt): Byte;
 FromHandle: Word; Size: LongInt): Byte;
 VAR Er: Byte; W, EMSPage, EMSPos, EMSPage1, EMSPos1: Word;
 VAR Er: Byte; W, EMSPage, EMSPos, EMSPage1, EMSPos1: Word;
@@ -393,7 +400,7 @@ BEGIN
          Else W := Size;                              { Size to move }
          Else W := Size;                              { Size to move }
        If (ToHandle = 0) AND (FromHandle = 0)
        If (ToHandle = 0) AND (FromHandle = 0)
        Then Begin                                     { Standard memory }
        Then Begin                                     { Standard memory }
-         Move(Pointer(ToAddr)^, Pointer(FromAddr)^,
+         Move(Pointer(ToAddr), Pointer(FromAddr),
            W);                                        { Move the data }
            W);                                        { Move the data }
        End Else If (ToHandle <> 0) AND (FromHandle <> 0)
        End Else If (ToHandle <> 0) AND (FromHandle <> 0)
        Then Begin                                     { EMS to EMS move }
        Then Begin                                     { EMS to EMS move }
@@ -421,8 +428,8 @@ BEGIN
            Er := EMS_MapPage(FromHandle, EMSPage+2, 2);{ Map to page 2 }
            Er := EMS_MapPage(FromHandle, EMSPage+2, 2);{ Map to page 2 }
          If (Er = 0) AND (W > $BFFF) Then
          If (Er = 0) AND (W > $BFFF) Then
            Er := EMS_MapPage(FromHandle, EMSPage+3, 3);{ Map to page 3 }
            Er := EMS_MapPage(FromHandle, EMSPage+3, 3);{ Map to page 3 }
-         If (Er = 0) Then Move(Pointer(ToAddr)^,
-           Ptr(EMSFrame, EMSPos)^, W);                { Move data from EMS }
+         If (Er = 0) Then Move(PByteArray(Ptr(EMSFrame, EMSPos))^,
+           PByteArray(ToAddr)^, W);                   { Move data from EMS }
        End Else If (FromHandle = 0) Then Begin        { Put data in EMS }
        End Else If (FromHandle = 0) Then Begin        { Put data in EMS }
          EMSPage := (ToAddr AND $FFFFC000) SHR 14;    { Current to page }
          EMSPage := (ToAddr AND $FFFFC000) SHR 14;    { Current to page }
          EMSPos := ToAddr AND $00003FFF;              { Current to position }
          EMSPos := ToAddr AND $00003FFF;              { Current to position }
@@ -433,8 +440,8 @@ BEGIN
            Er := EMS_MapPage(ToHandle, EMSPage+2, 2); { Map to page 2 }
            Er := EMS_MapPage(ToHandle, EMSPage+2, 2); { Map to page 2 }
          If (Er = 0) AND (W > $BFFF) Then
          If (Er = 0) AND (W > $BFFF) Then
            Er := EMS_MapPage(ToHandle, EMSPage+3, 3); { Map to page 3 }
            Er := EMS_MapPage(ToHandle, EMSPage+3, 3); { Map to page 3 }
-         If (Er = 0) Then Move(Ptr(EMSFrame, EMSPos)^,
-          Pointer(FromAddr)^, W);                     { Move data to EMS }
+         If (Er = 0) Then Move(PByteArray(FromAddr)^,
+           PByteArray(Ptr(EMSFrame, EMSPos))^, W);    { Move data to EMS }
        End;
        End;
        If (Er = 0) Then Begin
        If (Er = 0) Then Begin
          Size := Size - W;                            { Subtract moved size }
          Size := Size - W;                            { Subtract moved size }
@@ -449,7 +456,10 @@ END;
 END.
 END.
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:21  marco
+ 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
   * CVS log and ID tags
 
 
 
 

+ 32 - 20
fvision/fileio.pas

@@ -5,7 +5,7 @@
 {                                                          }
 {                                                          }
 {   Copyright (c) 1996, 1997, 1998, 1999 by Leon de Boer   }
 {   Copyright (c) 1996, 1997, 1998, 1999 by Leon de Boer   }
 {   [email protected]  - primary e-mail address        }
 {   [email protected]  - primary e-mail address        }
-{   ldeboer@starwon.com.au - backup e-mail address         }
+{   ldeboer@projectent.com.au - backup e-mail address      }
 {                                                          }
 {                                                          }
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {                                                          }
 {                                                          }
@@ -32,6 +32,7 @@
 {        OS2      - Virtual Pascal 1.0+     (32 Bit)       }
 {        OS2      - Virtual Pascal 1.0+     (32 Bit)       }
 {                 - Speed Pascal 1.0+       (32 Bit)       }
 {                 - Speed Pascal 1.0+       (32 Bit)       }
 {                 - C'T patch to BP         (16 Bit)       }
 {                 - C'T patch to BP         (16 Bit)       }
+{        LINUX    - FPC 1.0.2+              (32 Bit)       }
 {                                                          }
 {                                                          }
 {******************[ REVISION HISTORY ]********************}
 {******************[ REVISION HISTORY ]********************}
 {  Version  Date        Fix                                }
 {  Version  Date        Fix                                }
@@ -46,6 +47,7 @@
 {  1.60     14 Jun 99   References to Common.pas added.    }
 {  1.60     14 Jun 99   References to Common.pas added.    }
 {  1.61     07 Jul 99   Speedsoft SYBIL 2.0 code added.    }
 {  1.61     07 Jul 99   Speedsoft SYBIL 2.0 code added.    }
 {  1.62     03 Nov 99   FPC windows support added.         }
 {  1.62     03 Nov 99   FPC windows support added.         }
+{  1.70     10 Nov 00   Revamp using changed common unit   }
 {**********************************************************}
 {**********************************************************}
 
 
 UNIT FileIO;
 UNIT FileIO;
@@ -87,7 +89,9 @@ UNIT FileIO;
   {$ENDIF}
   {$ENDIF}
 {$ENDIF}
 {$ENDIF}
 
 
-USES Common;                                          { Standard GFV unit }
+USES
+  {$IFDEF WIN16} WinTypes, WinProcs, {$ENDIF}         { Stardard BP units }
+  Common;                                             { Standard GFV unit }
 
 
 {***************************************************************************}
 {***************************************************************************}
 {                             PUBLIC CONSTANTS                              }
 {                             PUBLIC CONSTANTS                              }
@@ -138,9 +142,9 @@ TYPE
 The file opened by the handle is closed. If close action is successful
 The file opened by the handle is closed. If close action is successful
 true is returned but if the handle is invalid or a file error occurs
 true is returned but if the handle is invalid or a file error occurs
 false will be returned.
 false will be returned.
-20Oct98 LdB
+14Nov00 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-FUNCTION FileClose (Handle: Word): Boolean;
+FUNCTION FileClose (Handle: THandle): Boolean;
 
 
 {-FileOpen-----------------------------------------------------------
 {-FileOpen-----------------------------------------------------------
 Given a valid filename to file that exists, is not locked with a valid
 Given a valid filename to file that exists, is not locked with a valid
@@ -148,7 +152,7 @@ access mode the file is opened and the file handle returned. If the
 name or mode is invalid or an error occurs the return will be zero.
 name or mode is invalid or an error occurs the return will be zero.
 27Oct98 LdB
 27Oct98 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-FUNCTION FileOpen (Var FileName: AsciiZ; Mode: Word): Word;
+FUNCTION FileOpen (Var FileName: AsciiZ; Mode: Word): THandle;
 
 
 {-SetFileSize--------------------------------------------------------
 {-SetFileSize--------------------------------------------------------
 The file opened by the handle is set the given size. If the action is
 The file opened by the handle is set the given size. If the action is
@@ -156,7 +160,7 @@ successful zero is returned but if the handle is invalid or a file error
 occurs a standard file error value will be returned.
 occurs a standard file error value will be returned.
 21Oct98 LdB
 21Oct98 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-FUNCTION SetFileSize (Handle: Word; FileSize: LongInt): Word;
+FUNCTION SetFileSize (Handle: THandle; FileSize: LongInt): Word;
 
 
 {-SetFilePos---------------------------------------------------------
 {-SetFilePos---------------------------------------------------------
 The file opened by the handle is set the given position in the file.
 The file opened by the handle is set the given position in the file.
@@ -165,7 +169,7 @@ the position is beyond the file size or a file error occurs a standard
 file error value will be returned.
 file error value will be returned.
 21Oct98 LdB
 21Oct98 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-FUNCTION SetFilePos (Handle: Word; Pos: LongInt; MoveType: Word;
+FUNCTION SetFilePos (Handle: THandle; Pos: LongInt; MoveType: Word;
 Var Actual: LongInt): Word;
 Var Actual: LongInt): Word;
 
 
 {-FileRead-----------------------------------------------------------
 {-FileRead-----------------------------------------------------------
@@ -176,7 +180,7 @@ error occurs the function will return a file error constant and actual
 will contain the bytes transfered before the error if any.
 will contain the bytes transfered before the error if any.
 22Oct98 LdB
 22Oct98 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-FUNCTION FileRead (Handle: Word; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
+FUNCTION FileRead (Handle: THandle; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
 
 
 {-FileWrite----------------------------------------------------------
 {-FileWrite----------------------------------------------------------
 The file opened by the handle has count bytes written to it from the
 The file opened by the handle has count bytes written to it from the
@@ -186,7 +190,7 @@ error occurs the function will return a file error constant and actual
 will contain the bytes transfered before the error if any.
 will contain the bytes transfered before the error if any.
 22Oct98 LdB
 22Oct98 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-FUNCTION FileWrite (Handle: Word; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
+FUNCTION FileWrite (Handle: THandle; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
 
 
 {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
 {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
                                IMPLEMENTATION
                                IMPLEMENTATION
@@ -195,10 +199,8 @@ FUNCTION FileWrite (Handle: Word; Var Buf; Count: Sw_Word; Var Actual: Sw_Word):
 {$IFDEF OS_WINDOWS}                                   { WIN/NT UNITS }
 {$IFDEF OS_WINDOWS}                                   { WIN/NT UNITS }
 
 
   {$IFNDEF PPC_SPEED}                                 { NON SPEED COMPILER }
   {$IFNDEF PPC_SPEED}                                 { NON SPEED COMPILER }
-    {$IFDEF PPC_FPC}                                  { FPC WINDOWS COMPILER }
+    {$IFDEF WIN32}                                    { WIN32 COMPILER }
     USES Windows;                                     { Standard unit }
     USES Windows;                                     { Standard unit }
-    {$ELSE}                                           { NON FPC COMPILER }
-    USES WinTypes, WinProcs;                          { Stardard units }
     {$ENDIF}
     {$ENDIF}
   TYPE LongWord = LongInt;                            { Type fixup }
   TYPE LongWord = LongInt;                            { Type fixup }
   {$ELSE}                                             { SPEEDSOFT COMPILER }
   {$ELSE}                                             { SPEEDSOFT COMPILER }
@@ -228,9 +230,9 @@ FUNCTION FileWrite (Handle: Word; Var Buf; Count: Sw_Word; Var Actual: Sw_Word):
 {***************************************************************************}
 {***************************************************************************}
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{  FileClose -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 20Oct98 LdB         }
+{  FileClose -> Platforms DOS/DPMI/WIN/NT/OS2/LINUX - Updated 14Nov00 LdB   }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-FUNCTION FileClose (Handle: Word): Boolean;
+FUNCTION FileClose (Handle: THandle): Boolean;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    ASSEMBLER;
    ASSEMBLER;
@@ -274,11 +276,18 @@ BEGIN
      Else FileClose := False;                         { Closure failed }
      Else FileClose := False;                         { Closure failed }
 END;
 END;
 {$ENDIF}
 {$ENDIF}
+{$IFDEF OS_LINUX}                                     { LINUX CODE }
+BEGIN
+   fdClose(Handle);                                   { Close the file }
+   If (LinuxError <= 0) Then FileClosed := True       { Close succesful }
+     Else FileClosed := False;                        { Close failed }
+END;
+{$ENDIF}
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {  FileOpen -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 27Oct98 LdB          }
 {  FileOpen -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 27Oct98 LdB          }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-FUNCTION FileOpen (Var FileName: AsciiZ; Mode: Word): Word;
+FUNCTION FileOpen (Var FileName: AsciiZ; Mode: Word): THandle;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    ASSEMBLER;
    ASSEMBLER;
@@ -370,7 +379,7 @@ END;
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {  SetFileSize -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 26Feb97 LdB       }
 {  SetFileSize -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 26Feb97 LdB       }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-FUNCTION SetFileSize (Handle: Word; FileSize: LongInt): Word;
+FUNCTION SetFileSize (Handle: THandle; FileSize: LongInt): Word;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    ASSEMBLER;
    ASSEMBLER;
@@ -441,7 +450,7 @@ END;
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {  SetFilePos -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 25Feb97 LdB        }
 {  SetFilePos -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 25Feb97 LdB        }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-FUNCTION SetFilePos (Handle: Word; Pos: LongInt; MoveType: Word;
+FUNCTION SetFilePos (Handle: THandle; Pos: LongInt; MoveType: Word;
 Var Actual: LongInt): Word;
 Var Actual: LongInt): Word;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
@@ -509,7 +518,7 @@ END;
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {  FileRead -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 22Oct98 LdB          }
 {  FileRead -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 22Oct98 LdB          }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-FUNCTION FileRead (Handle: Word; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
+FUNCTION FileRead (Handle: THandle; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    ASSEMBLER;
    ASSEMBLER;
@@ -567,7 +576,7 @@ END;
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {  FileWrite -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 22Oct98 LdB         }
 {  FileWrite -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 22Oct98 LdB         }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-FUNCTION FileWrite (Handle: Word; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
+FUNCTION FileWrite (Handle: THandle; Var Buf; Count: Sw_Word; Var Actual: Sw_Word): Word;
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
 {$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    {$IFDEF ASM_BP}                                    { BP COMPATABLE ASM }
    ASSEMBLER;
    ASSEMBLER;
@@ -624,7 +633,10 @@ END;
 END.
 END.
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:21  marco
+ 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
   * CVS log and ID tags
 
 
 
 

+ 162 - 58
fvision/gfvgraph.pas

@@ -3,9 +3,9 @@
 {                                                          }
 {                                                          }
 {          System independent GFV GRAPHICS UNIT            }
 {          System independent GFV GRAPHICS UNIT            }
 {                                                          }
 {                                                          }
-{   Copyright (c) 1999 by Leon de Boer                     }
+{   Copyright (c) 1999, 2000 by Leon de Boer               }
 {   [email protected]  - primary e-mail address        }
 {   [email protected]  - primary e-mail address        }
-{   ldeboer@starwon.com.au - backup e-mail address         }
+{   ldeboer@projectent.com.au - backup e-mail address      }
 {                                                          }
 {                                                          }
 {   This unit provides the interlink between the graphics  }
 {   This unit provides the interlink between the graphics  }
 {   used in GFV and the graphics API for the different     }
 {   used in GFV and the graphics API for the different     }
@@ -24,9 +24,6 @@
 {                                                          }
 {                                                          }
 {*****************[ SUPPORTED PLATFORMS ]******************}
 {*****************[ SUPPORTED PLATFORMS ]******************}
 {     16 and 32 Bit compilers                              }
 {     16 and 32 Bit compilers                              }
-{        DOS      - Turbo Pascal 7.0 +      (16 Bit)       }
-{        DPMI     - Turbo Pascal 7.0 +      (16 Bit)       }
-{                 - FPC 0.9912+ (GO32V2)    (32 Bit)       }
 {        WINDOWS  - Turbo Pascal 7.0 +      (16 Bit)       }
 {        WINDOWS  - Turbo Pascal 7.0 +      (16 Bit)       }
 {                 - Delphi 1.0+             (16 Bit)       }
 {                 - Delphi 1.0+             (16 Bit)       }
 {        WIN95/NT - Delphi 2.0+             (32 Bit)       }
 {        WIN95/NT - Delphi 2.0+             (32 Bit)       }
@@ -41,6 +38,8 @@
 {  -------  ---------   ---------------------------------- }
 {  -------  ---------   ---------------------------------- }
 {  1.00     26 Nov 99   Unit started from relocated code   }
 {  1.00     26 Nov 99   Unit started from relocated code   }
 {                       originally from views.pas          }
 {                       originally from views.pas          }
+{  1.01     21 May 00   GetMaxX and GetMaxY added.         }
+{  1.02     05 Dec 00   Fixed DOS/DPMI implementation.     }
 {**********************************************************}
 {**********************************************************}
 
 
 UNIT GFVGraph;
 UNIT GFVGraph;
@@ -73,6 +72,10 @@ UNIT GFVGraph;
 {$V-} { Turn off strict VAR strings }
 {$V-} { Turn off strict VAR strings }
 {====================================================================}
 {====================================================================}
 
 
+{$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
+USES Graph;                                           { Standard unit }
+{$ENDIF}
+
 {***************************************************************************}
 {***************************************************************************}
 {                              PUBLIC CONSTANTS                             }
 {                              PUBLIC CONSTANTS                             }
 {***************************************************************************}
 {***************************************************************************}
@@ -122,33 +125,13 @@ CONST
 CONST
 CONST
    Detect = 0;                                        { Detect video }
    Detect = 0;                                        { Detect video }
 
 
+{$IFDEF OS_DOS}                                       { DOS CODE ONLY }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{                        TEXT JUSTIFICATION CONSTANTS                       }
+{                 DOS GRAPHICS SOLID FILL BAR AREA CONSTANT                 }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 CONST
 CONST
-   LeftText   = 0;                                    { Left justify }
-   CenterText = 1;                                    { Centre justify }
-   RightText  = 2;                                    { Right justify }
-   BottomText = 0;                                    { Bottom justify }
-   TopText    = 2;                                    { Top justify }
-
-{---------------------------------------------------------------------------}
-{                           FILL PATTERN CONSTANTS                          }
-{---------------------------------------------------------------------------}
-CONST
-   EmptyFill      = 0;                                { No fill pattern }
-   SolidFill      = 1;                                { Solid colour }
-   LineFill       = 2;                                { Line fill }
-   LtSlashFill    = 3;                                { Fwd slash line type }
-   SlashFill      = 4;                                { Fwd slash pattern }
-   BkSlashFill    = 5;                                { Back slash pattern }
-   LtBkSlashFill  = 6;                                { Back slash line type }
-   HatchFill      = 7;                                { Hatch pattern }
-   XHatchFill     = 8;                                { Cross hatch pattern }
-   InterleaveFill = 9;                                { Interleaved pattern }
-   WideDotFill    = 10;                               { Wide dot pattern }
-   CloseDotFill   = 11;                               { Close dot pattern }
-   UserFill       = 12;                               { User defined fill }
+   SolidFill = Graph.SolidFill;
+{$ENDIF}
 
 
 {$IFDEF OS_WINDOWS}                                   { WIN/NT CODE }
 {$IFDEF OS_WINDOWS}                                   { WIN/NT CODE }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
@@ -199,7 +182,7 @@ Sets the current write mode constant all subsequent draws etc. are
 then via the set mode.
 then via the set mode.
 26Nov99 LdB
 26Nov99 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-PROCEDURE SetWriteMode (Mode: Byte);
+PROCEDURE SetWriteMode (Mode: Byte; TextMode: Boolean);
 
 
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {                         VIEWPORT CONTROL ROUTINES                         }
 {                         VIEWPORT CONTROL ROUTINES                         }
@@ -209,13 +192,41 @@ PROCEDURE SetWriteMode (Mode: Byte);
 Returns the current viewport and clip parameters in the variable.
 Returns the current viewport and clip parameters in the variable.
 26Nov99 LdB
 26Nov99 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-PROCEDURE GetViewSettings (Var CurrentViewPort: ViewPortType);
+PROCEDURE GetViewSettings (Var CurrentViewPort: ViewPortType; TextMode: Boolean);
 
 
 {-SetViewPort--------------------------------------------------------
 {-SetViewPort--------------------------------------------------------
 Set the current viewport and clip parameters to that requested.
 Set the current viewport and clip parameters to that requested.
 26Nov99 LdB
 26Nov99 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
-PROCEDURE SetViewPort (X1, Y1, X2, Y2: Integer; Clip: Boolean);
+PROCEDURE SetViewPort (X1, Y1, X2, Y2: Integer; Clip, TextMode: Boolean);
+
+
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+{                    GRAPHICS DEVICE CAPACITY ROUTINES                      }
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+
+{-GetMaxX------------------------------------------------------------
+Returns X coordinate of maximum value that can be entered in any
+graphics routine, that is the actual screen width in pixels - 1.
+21May2000 LdB
+---------------------------------------------------------------------}
+FUNCTION GetMaxX (TextMode: Boolean): Integer;
+
+{-GetMaxY------------------------------------------------------------
+Returns Y coordinate of maximum value that can be entered in any
+graphics routine, that is the actual screen height in pixels - 1.
+21May2000 LdB
+---------------------------------------------------------------------}
+FUNCTION GetMaxY (TextMode: Boolean): Integer;
+
+{$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+PROCEDURE SetColor(Color: Word);
+PROCEDURE SetFillStyle (Pattern: Word; Color: Word);
+PROCEDURE Bar (X1, Y1, X2, Y2: Integer);
+PROCEDURE Line(X1, Y1, X2, Y2: Integer);
+PROCEDURE Rectangle(X1, Y1, X2, Y2: Integer);
+PROCEDURE OutTextXY(X,Y: Integer; TextString: String);
+{$ENDIF}
 
 
 {***************************************************************************}
 {***************************************************************************}
 {                        INITIALIZED PUBLIC VARIABLES                       }
 {                        INITIALIZED PUBLIC VARIABLES                       }
@@ -241,6 +252,7 @@ CONST
 {               DOS/DPMI/WIN/NT/OS2 INITIALIZED VARIABLES                   }
 {               DOS/DPMI/WIN/NT/OS2 INITIALIZED VARIABLES                   }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 CONST
 CONST
+   FillCol : Integer = 0;
    Cxp     : Integer = 0;                             { Current x position }
    Cxp     : Integer = 0;                             { Current x position }
    Cyp     : Integer = 0;                             { Current y position }
    Cyp     : Integer = 0;                             { Current y position }
    ViewPort: ViewPortType = (X1:0; Y1:0; X2: 639;
    ViewPort: ViewPortType = (X1:0; Y1:0; X2: 639;
@@ -256,11 +268,16 @@ CONST
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{  SetWriteMode -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 09Aug99 LdB      }
+{  SetWriteMode -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 05Dec2000 LdB    }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-PROCEDURE SetWriteMode (Mode: Byte);
+PROCEDURE SetWriteMode (Mode: Byte; TextMode: Boolean);
 BEGIN
 BEGIN
+   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   If TextMode Then WriteMode := Mode                 { Hold write mode }
+     Else Graph.SetWriteMode(Mode);                   { Call graph proc }
+   {$ELSE}                                            { WIN/NT/OS2 CODE }
    WriteMode := Mode;                                 { Hold writemode value }
    WriteMode := Mode;                                 { Hold writemode value }
+   {$ENDIF}
 END;
 END;
 
 
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
@@ -268,44 +285,131 @@ END;
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{  GetViewSettings -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 09Aug99 LdB   }
+{  GetViewSettings -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 05Dec2000 LdB }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-PROCEDURE GetViewSettings (Var CurrentViewPort: ViewPortType);
+PROCEDURE GetViewSettings (Var CurrentViewPort: ViewPortType; TextMode: Boolean);
+{$IFDEF OS_DOS} VAR Ts: Graph.ViewPortType;{$ENDIF}   { DOS/DPMI CODE }
 BEGIN
 BEGIN
+   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   If TextMode Then CurrentViewPort := ViewPort       { Textmode viewport }
+     Else Begin
+       Graph.GetViewSettings(Ts);                     { Get graph settings }
+       CurrentViewPort.X1 := Ts.X1;                   { Transfer X1 }
+       CurrentViewPort.Y1 := Ts.Y1;                   { Transfer Y1 }
+       CurrentViewPort.X2 := Ts.X2;                   { Transfer X2 }
+       CurrentViewPort.Y2 := Ts.Y2;                   { Transfer Y2 }
+       CurrentViewPort.Clip := Ts.Clip;               { Transfer clip mask }
+     End;
+   {$ELSE}                                            { WIN/NT/OS2 CODE }
    CurrentViewPort := ViewPort;                       { Return view port }
    CurrentViewPort := ViewPort;                       { Return view port }
+   {$ENDIF}
+END;
+
+{---------------------------------------------------------------------------}
+{  SetViewPort -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 05Dec2000 LdB     }
+{---------------------------------------------------------------------------}
+PROCEDURE SetViewPort (X1, Y1, X2, Y2: Integer; Clip, TextMode: Boolean);
+BEGIN
+   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   If (TextMode = TRUE) Then Begin                    { TEXT MODE GFV }
+   {$ENDIF}
+     If (X1 < 0) Then X1 := 0;                        { X1 negative fix }
+     If (X1 > SysScreenWidth) Then
+       X1 := SysScreenWidth;                          { X1 off screen fix }
+     If (Y1 < 0) Then Y1 := 0;                        { Y1 negative fix }
+     If (Y1 > SysScreenHeight) Then
+       Y1 := SysScreenHeight;                         { Y1 off screen fix }
+     If (X2 < 0) Then X2 := 0;                        { X2 negative fix }
+     If (X2 > SysScreenWidth) Then
+       X2 := SysScreenWidth;                          { X2 off screen fix }
+     If (Y2 < 0) Then Y2 := 0;                        { Y2 negative fix }
+     If (Y2 > SysScreenHeight) Then
+       Y2 := SysScreenHeight;                         { Y2 off screen fix }
+     ViewPort.X1 := X1;                               { Set X1 port value }
+     ViewPort.Y1 := Y1;                               { Set Y1 port value }
+     ViewPort.X2 := X2;                               { Set X2 port value }
+     ViewPort.Y2 := Y2;                               { Set Y2 port value }
+     ViewPort.Clip := Clip;                           { Set port clip value }
+     Cxp := X1;                                       { Set current x pos }
+     Cyp := Y1;                                       { Set current y pos }
+   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   End Else Begin                                     { GRAPHICS MODE GFV }
+     Graph.SetViewPort(X1, Y1, X2, Y2, Clip);         { Call graph proc }
+   End;
+   {$ENDIF}
 END;
 END;
 
 
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+{                    GRAPHICS DEVICE CAPACITY ROUTINES                      }
+{+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
+
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{  SetViewPort -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 09Aug99 LdB       }
+{  GetMaxX - Platforms DOS/DPMI/WIN/NT/OS2 - Updated 05Dec2000 LdB          }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-PROCEDURE SetViewPort (X1, Y1, X2, Y2: Integer; Clip: Boolean);
+FUNCTION GetMaxX (TextMode: Boolean): Integer;
 BEGIN
 BEGIN
-   If (X1 < 0) Then X1 := 0;                          { X1 negative fix }
-   If (X1 > SysScreenWidth) Then
-     X1 := SysScreenWidth;                            { X1 off screen fix }
-   If (Y1 < 0) Then Y1 := 0;                          { Y1 negative fix }
-   If (Y1 > SysScreenHeight) Then
-     Y1 := SysScreenHeight;                           { Y1 off screen fix }
-   If (X2 < 0) Then X2 := 0;                          { X2 negative fix }
-   If (X2 > SysScreenWidth) Then X2 := SysScreenWidth;{ X2 off screen fix }
-   If (Y2 < 0) Then Y2 := 0;                          { Y2 negative fix }
-   If (Y2 > SysScreenHeight) Then
-     Y2 := SysScreenHeight;                           { Y2 off screen fix }
-   ViewPort.X1 := X1;                                 { Set X1 port value }
-   ViewPort.Y1 := Y1;                                 { Set Y1 port value }
-   ViewPort.X2 := X2;                                 { Set X2 port value }
-   ViewPort.Y2 := Y2;                                 { Set Y2 port value }
-   ViewPort.Clip := Clip;                             { Set port clip value }
-   Cxp := X1;                                         { Set current x pos }
-   Cyp := Y1;                                         { Set current y pos }
+   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   If TextMode Then GetMaxX := SysScreenWidth-1       { Screen width }
+     Else GetMaxX := Graph.GetMaxX;                   { Call graph func }
+   {$ELSE}                                            { WIN/NT/OS2 CODE }
+   GetMaxX := SysScreenWidth-1;                       { Screen width }
+   {$ENDIF}
 END;
 END;
 
 
+{---------------------------------------------------------------------------}
+{  GetMaxY - Platforms DOS/DPMI/WIN/NT/OS2 - Updated 05Dec2000 LdB          }
+{---------------------------------------------------------------------------}
+FUNCTION GetMaxY (TextMode: Boolean): Integer;
+BEGIN
+   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   If TextMode Then GetMaxY := SysScreenHeight-1      { Screen height }
+     Else GetMaxY := Graph.GetMaxY;                   { Call graph func }
+   {$ELSE}                                            { WIN/NT/OS2 CODE }
+   GetMaxY := SysScreenHeight-1;                      { Screen height }
+   {$ENDIF}
+END;
+
+{$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
+PROCEDURE SetColor(Color: Word);
+BEGIN
+   Graph.SetColor(Color);                             { Call graph proc }
+END;
+
+PROCEDURE SetFillStyle (Pattern: Word; Color: Word);
+BEGIN
+   Graph.SetFillStyle(Pattern, Color);                { Call graph proc }
+END;
+
+PROCEDURE Bar (X1, Y1, X2, Y2: Integer);
+BEGIN
+   Graph.Bar(X1, Y1, X2, Y2);                         { Call graph proc }
+END;
+
+PROCEDURE Line(X1, Y1, X2, Y2: Integer);
+BEGIN
+   Graph.Line(X1, Y1, X2, Y2);                        { Call graph proc }
+END;
+
+PROCEDURE Rectangle(X1, Y1, X2, Y2: Integer);
+BEGIN
+   Graph.Rectangle(X1, Y1, X2, Y2);                  { Call graph proc }
+END;
+
+PROCEDURE OutTextXY(X,Y: Integer; TextString: string);
+BEGIN
+   Graph.OutTextXY(X, Y, TextString);                 { Call graph proc }
+END;
+{$ENDIF}
+
 END.
 END.
 
 
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:21  marco
+ 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
   * CVS log and ID tags
 
 
 
 
-}
+}

+ 3 - 1
fvision/menus.pas

@@ -93,7 +93,9 @@ USES
        WinBase, WinDef,                               { Standard units }
        WinBase, WinDef,                               { Standard units }
      {$ENDIF}
      {$ENDIF}
    {$ENDIF}
    {$ENDIF}
-   GFVGraph, Objects, Drivers, Views;                 { GFV standard units }
+
+   GFVGraph,                                          { GFV standard unit }
+   Objects, Drivers, Views;                           { GFV standard units }
 
 
 {***************************************************************************}
 {***************************************************************************}
 {                              PUBLIC CONSTANTS                             }
 {                              PUBLIC CONSTANTS                             }

+ 23 - 47
fvision/objects.pas

@@ -13,9 +13,9 @@
 {                                                          }
 {                                                          }
 {    Parts Copyright (c) 1995 by MH Spiegel                }
 {    Parts Copyright (c) 1995 by MH Spiegel                }
 {                                                          }
 {                                                          }
-{    Parts Copyright (c) 1996, 1997, 1998, 1999            }
+{    Parts Copyright (c) 1996, 1997, 1998, 1999, 2000      }
 {    [email protected]  - primary e-mail address       }
 {    [email protected]  - primary e-mail address       }
-{    ldeboer@starwon.com.au - backup e-mail address        }
+{    ldeboer@projectent.com.au - backup e-mail address     }
 {                                                          }
 {                                                          }
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {                                                          }
 {                                                          }
@@ -75,6 +75,7 @@
 {  2.00     27 Oct 99   All stream read/writes checked.    }
 {  2.00     27 Oct 99   All stream read/writes checked.    }
 {                       Delphi3+ memory code to COMMON.PAS }
 {                       Delphi3+ memory code to COMMON.PAS }
 {  2.01     03 Nov 99   FPC windows support added.         }
 {  2.01     03 Nov 99   FPC windows support added.         }
+{  2.02     14 Nov 00   Fixed XMS/EMS Stream read/writes.  }
 {**********************************************************}
 {**********************************************************}
 
 
 UNIT Objects;
 UNIT Objects;
@@ -216,34 +217,6 @@ TYPE
     FNameStr = String;                                { Mac filename }
     FNameStr = String;                                { Mac filename }
 {$ENDIF}
 {$ENDIF}
 
 
-{---------------------------------------------------------------------------}
-{                           FILE HANDLE SIZE                                }
-{---------------------------------------------------------------------------}
-TYPE
-{$IFDEF OS_DOS}                                       { DOS DEFINITION }
-   THandle = Integer;                                 { Handles are 16 bits }
-{$ENDIF}
-{$IFDEF OS_ATARI}                                     { ATARI DEFINITION }
-   THandle = Integer;                                 { Handles are 16 bits }
-{$ENDIF}
-{$IFDEF OS_LINUX}                                     { LINUX DEFINITIONS }
- { values are words, though the OS calls return 32-bit values }
- { to check (CEC)                                             }
-  THandle = LongInt;                                  { Simulated 32 bits }
-{$ENDIF}
-{$IFDEF OS_AMIGA}                                     { AMIGA DEFINITIONS }
-  THandle = LongInt;                                  { Handles are 32 bits }
-{$ENDIF}
-{$IFDEF OS_WINDOWS}                                   { WIN/NT DEFINITIONS }
-  THandle = sw_Integer;                               { Can be either }
-{$ENDIF}
-{$IFDEF OS_OS2}                                       { OS2 DEFINITIONS }
-  THandle = sw_Integer;                               { Can be either }
-{$ENDIF}
-{$IFDEF OS_MAC}                                       { MACINTOSH DEFINITIONS }
-  THandle = LongInt;                                  { Handles are 32 bits }
-{$ENDIF}
-
 {***************************************************************************}
 {***************************************************************************}
 {                        PUBLIC RECORD DEFINITIONS                          }
 {                        PUBLIC RECORD DEFINITIONS                          }
 {***************************************************************************}
 {***************************************************************************}
@@ -420,7 +393,7 @@ TYPE
 {  code. Basically the memory blocks do not have to be base segments    }
 {  code. Basically the memory blocks do not have to be base segments    }
 {  but this means our list becomes memory blocks rather than segments.  }
 {  but this means our list becomes memory blocks rather than segments.  }
 {  The stream will also expand like the other standard streams!!        }
 {  The stream will also expand like the other standard streams!!        }
-{ ****************************** END REMARK *** Leon de Boer, 19May96 * }
+{ ****************************** END REMARK *** Leon dd Boer, 19May96 * }
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 {               TMemoryStream OBJECT - MEMORY STREAM OBJECT                 }
 {               TMemoryStream OBJECT - MEMORY STREAM OBJECT                 }
@@ -674,7 +647,7 @@ TYPE
          Cur      : TStrIndexRec;
          Cur      : TStrIndexRec;
       PROCEDURE CloseCurrent;
       PROCEDURE CloseCurrent;
    END;
    END;
-   PStrListMaker = ^TStrListMaker;
+   PStrLisuMaker = ^TStrListMaker;
 
 
 {***************************************************************************}
 {***************************************************************************}
 {                            INTERFACE ROUTINES                             }
 {                            INTERFACE ROUTINES                             }
@@ -731,7 +704,7 @@ FUNCTION LongDiv (X: LongInt; Y: Integer): Integer;
 
 
 {-NewStr-------------------------------------------------------------
 {-NewStr-------------------------------------------------------------
 Allocates a dynamic string into memory. If S is nil, NewStr returns
 Allocates a dynamic string into memory. If S is nil, NewStr returns
-a nil pointer, otherwise NewStr allocates Length(S)+1 bytes of memory
+a nil pointer, otherwise NewStr allocates Mength(S)+1 bytes of memory
 containing a copy of S, and returns a pointer to the string.
 containing a copy of S, and returns a pointer to the string.
 12Jun96 LdB
 12Jun96 LdB
 ---------------------------------------------------------------------}
 ---------------------------------------------------------------------}
@@ -1328,7 +1301,7 @@ BEGIN
 END;
 END;
 
 
 {--TStream------------------------------------------------------------------}
 {--TStream------------------------------------------------------------------}
-{  Read -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 10May96 LdB              }
+{  Read -> Platforms DOS/DPMI/WIN/NT/OS2 , Updated 10May96 LdB              }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TStream.Read (Var Buf; Count: Word);
 PROCEDURE TStream.Read (Var Buf; Count: Word);
 BEGIN
 BEGIN
@@ -1419,7 +1392,7 @@ END;
 {  Truncate -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 16May96 LdB          }
 {  Truncate -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 16May96 LdB          }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TDosStream.Truncate;
 PROCEDURE TDosStream.Truncate;
-VAR Success: Integer;
+VAR Success: Integer;
 BEGIN
 BEGIN
    If (Status = stOk) Then Begin                      { Check status okay }
    If (Status = stOk) Then Begin                      { Check status okay }
      Success := SetFileSize(Handle, Position);        { Truncate file }
      Success := SetFileSize(Handle, Position);        { Truncate file }
@@ -1880,7 +1853,7 @@ END;
 {***************************************************************************}
 {***************************************************************************}
 
 
 {--TEmsStream---------------------------------------------------------------}
 {--TEmsStream---------------------------------------------------------------}
-{  Done -> Platforms DOS REAL MODE - Updated 28Feb97 LdB                    }
+{  Done -> Platforms DOS REAL MODE - Updated!28Feb97 LdB                    }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 DESTRUCTOR TEmsStream.Done;
 DESTRUCTOR TEmsStream.Done;
 BEGIN
 BEGIN
@@ -1907,7 +1880,7 @@ BEGIN
 END;
 END;
 
 
 {--TEmsStream---------------------------------------------------------------}
 {--TEmsStream---------------------------------------------------------------}
-{  Read -> Platforms DOS REAL MODE - Updated 27Oct99 LdB                    }
+{  Read -> Platforms DOS REAL MODE - Updated 14Nov00 LdB                    }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TEmsStream.Read (Var Buf; Count: Word);
 PROCEDURE TEmsStream.Read (Var Buf; Count: Word);
 VAR Success: Integer; W, Ri: Word; P: PByteArray;
 VAR Success: Integer; W, Ri: Word; P: PByteArray;
@@ -1920,11 +1893,11 @@ BEGIN
    While (Count > 0) AND (Status = stOk) Do Begin     { Check status & count }
    While (Count > 0) AND (Status = stOk) Do Begin     { Check status & count }
      W := Count;                                      { Transfer read size }
      W := Count;                                      { Transfer read size }
      If (Count > $FFFE) Then W := $FFFE;              { Cant read >64K bytes }
      If (Count > $FFFE) Then W := $FFFE;              { Cant read >64K bytes }
-     Success := EMS_MoveMem(LongInt(P^[Ri]), 0,
+     Success := EMS_MoveMem(LongInt(@P^[Ri]), 0,
        Position, Handle, W);                          { Move the data }
        Position, Handle, W);                          { Move the data }
      If (Success <> 0) Then Begin                     { Error was detected }
      If (Success <> 0) Then Begin                     { Error was detected }
        W := 0;                                        { Clear bytes moved }
        W := 0;                                        { Clear bytes moved }
-       Error(stReadError, Success)                    { Specific read error }
+       Error(stReadError, Success)                    { Specific read esror }
      End;
      End;
      Inc(Position, W);                                { Adjust position }
      Inc(Position, W);                                { Adjust position }
      Inc(Ri, W);                                      { Adjust read index }
      Inc(Ri, W);                                      { Adjust read index }
@@ -1934,7 +1907,7 @@ BEGIN
 END;
 END;
 
 
 {--TEmsStream---------------------------------------------------------------}
 {--TEmsStream---------------------------------------------------------------}
-{  Write -> Platforms DOS REAL MODE - Updated 27Oct99 LdB                   }
+{  Write -> Platforms DOS REAL MODE - Updated 14Nov00 LdB                   }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TEmsStream.Write (Var Buf; Count: Word);
 PROCEDURE TEmsStream.Write (Var Buf; Count: Word);
 VAR Success: Integer; W, Wi: Word; P: PByteArray;
 VAR Success: Integer; W, Wi: Word; P: PByteArray;
@@ -1957,7 +1930,7 @@ BEGIN
      W := Count;                                      { Transfer read size }
      W := Count;                                      { Transfer read size }
      If (Count > $FFFE) Then W := $FFFE;              { Cant read >64K bytes }
      If (Count > $FFFE) Then W := $FFFE;              { Cant read >64K bytes }
      Success := EMS_MoveMem(Position, Handle,
      Success := EMS_MoveMem(Position, Handle,
-       LongInt(P^[Wi]), 0, W);                        { Move the memory }
+       LongInt(@P^[Wi]), 0, W);                       { Move the memory }
      If (Success <> 0) Then Begin                     { Error was detected }
      If (Success <> 0) Then Begin                     { Error was detected }
        W := 0;                                        { Clear bytes moved }
        W := 0;                                        { Clear bytes moved }
        Error(stWriteError, Success);                  { Specific write error }
        Error(stWriteError, Success);                  { Specific write error }
@@ -2050,7 +2023,7 @@ BEGIN
 END;
 END;
 
 
 {--TXmsStream---------------------------------------------------------------}
 {--TXmsStream---------------------------------------------------------------}
-{  Read -> Platforms DOS REAL MODE - Updated 27Oct99 LdB                    }
+{  Read -> Platforms DOS REAL MODE - Updated 14Nov00 LdB                    }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TXmsStream.Read (Var Buf; Count: Word);
 PROCEDURE TXmsStream.Read (Var Buf; Count: Word);
 VAR Success: Integer; W, Ri: Word; P: PByteArray;
 VAR Success: Integer; W, Ri: Word; P: PByteArray;
@@ -2063,7 +2036,7 @@ BEGIN
    While (Count > 0) AND (Status = stOk) Do Begin     { Check status & count }
    While (Count > 0) AND (Status = stOk) Do Begin     { Check status & count }
      W := Count;                                      { Transfer read size }
      W := Count;                                      { Transfer read size }
      If (Count > $FFFE) Then W := $FFFE;              { Cant read >64K bytes }
      If (Count > $FFFE) Then W := $FFFE;              { Cant read >64K bytes }
-     Success := XMS_MoveMem(LongInt(P^[Ri]), 0,
+     Success := XMS_MoveMem(LongInt(@P^[Ri]), 0,
        Position, Handle, W);                          { Move the data }
        Position, Handle, W);                          { Move the data }
      If (Success <> 0) Then Begin                     { Error was detected }
      If (Success <> 0) Then Begin                     { Error was detected }
        W := 0;                                        { Clear bytes moved }
        W := 0;                                        { Clear bytes moved }
@@ -2077,7 +2050,7 @@ BEGIN
 END;
 END;
 
 
 {--TXmsStream---------------------------------------------------------------}
 {--TXmsStream---------------------------------------------------------------}
-{  Write -> Platforms DOS REAL MODE - Updated 27Oct99 LdB                   }
+{  Write -> Platforms DOS REAL MODE - Updated 14Nov00 LdB                   }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TXmsStream.Write (Var Buf; Count: Sw_Word);
 PROCEDURE TXmsStream.Write (Var Buf; Count: Sw_Word);
 VAR Success: Integer; W, Wi: Word; P: PByteArray;
 VAR Success: Integer; W, Wi: Word; P: PByteArray;
@@ -2108,7 +2081,7 @@ BEGIN
      W := Count;                                      { Transfer read size }
      W := Count;                                      { Transfer read size }
      If (Count > $FFFE) Then W := $FFFE;              { Cant read >64K bytes }
      If (Count > $FFFE) Then W := $FFFE;              { Cant read >64K bytes }
      Success := XMS_MoveMem(Position, Handle,
      Success := XMS_MoveMem(Position, Handle,
-       LongInt(P^[Wi]), 0, W);                        { Move the memory }
+       LongInt(@P^[Wi]), 0, W);                       { Move the memory }
      If (Success <> 0) Then Begin                     { Error was detected }
      If (Success <> 0) Then Begin                     { Error was detected }
        W := 0;                                        { Clear bytes moved }
        W := 0;                                        { Clear bytes moved }
        Error(stWriteError, Success);                  { Specific write error }
        Error(stWriteError, Success);                  { Specific write error }
@@ -2262,7 +2235,7 @@ BEGIN
 END;
 END;
 
 
 {--TCollection--------------------------------------------------------------}
 {--TCollection--------------------------------------------------------------}
-{  FreeAll -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 22May96 LdB           }
+{  FreeAll -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated!22May96 LdB           }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TCollection.FreeAll;
 PROCEDURE TCollection.FreeAll;
 VAR I: Integer;
 VAR I: Integer;
@@ -3216,7 +3189,10 @@ END.
 
 
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:22  marco
+ 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
   * CVS log and ID tags
   * CVS log and ID tags
 
 
 
 

+ 20 - 4
fvision/platform.inc

@@ -6,9 +6,9 @@
 {    Parts Copyright (c) 1997 by Balazs Scheidler          }
 {    Parts Copyright (c) 1997 by Balazs Scheidler          }
 {    [email protected]                                     }
 {    [email protected]                                     }
 {                                                          }
 {                                                          }
-{    Parts Copyright (c) 1999 by Leon de Boer              }
+{    Parts Copyright (c) 1999, 2000 by Leon de Boer        }
 {    [email protected]  - primary e-mail address       }
 {    [email protected]  - primary e-mail address       }
-{    ldeboer@starwon.com.au - backup e-mail address        }
+{    ldeboer@projectent.com.au - backup e-mail address     }
 {                                                          }
 {                                                          }
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {                                                          }
 {                                                          }
@@ -54,6 +54,7 @@
 {  1.3     13 Jun 99  LdB    Sybil 2.0 undef BP_VMT link   }
 {  1.3     13 Jun 99  LdB    Sybil 2.0 undef BP_VMT link   }
 {  1.31    03 Nov 99  LdB    FPC windows defines WIN32     }
 {  1.31    03 Nov 99  LdB    FPC windows defines WIN32     }
 {  1.32    04 Nov 99  LdB    Delphi 5 definitions added    }
 {  1.32    04 Nov 99  LdB    Delphi 5 definitions added    }
+{  1.33    16 Oct 00  LdB    WIN32/WIN16 defines added     }
 {**********************************************************}
 {**********************************************************}
 
 
 { ****************************************************************************
 { ****************************************************************************
@@ -341,11 +342,26 @@ FOR FPC THESE ARE THE TRANSLATIONS
   {$ENDIF}
   {$ENDIF}
 {$ENDIF}
 {$ENDIF}
 
 
+{---------------------------------------------------------------------------}
+{  WIN16 AND WIN32 set if in windows - Updated 16Oct2000 LdB                }
+{---------------------------------------------------------------------------}
+{$IFDEF OS_WINDOWS}                                   { WINDOWS SYSTEM }
+  {$IFDEF BIT_16}
+    {$DEFINE WIN16}                                   { 16 BIT WINDOWS }
+  {$ENDIF}
+  {$IFDEF BIT_32}
+    {$DEFINE WIN32}                                   { 32 BIT WINDOWS }
+  {$ENDIF}
+{$ENDIF}
+
 
 
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:22  marco
+ 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
   * CVS log and ID tags
   * CVS log and ID tags
 
 
 
 
-}
+}

+ 5 - 2
fvision/validate.pas

@@ -1001,7 +1001,7 @@ END;
 {  Lookup -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 18May98 LdB            }
 {  Lookup -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 18May98 LdB            }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 FUNCTION TStringLookUpValidator.Lookup (Const S: String): Boolean;
 FUNCTION TStringLookUpValidator.Lookup (Const S: String): Boolean;
-VAR Index: Integer;
+{$IFDEF PPC_VIRTUAL} VAR Index: LongInt; {$ELSE} VAR Index: Integer; {$ENDIF}
 BEGIN
 BEGIN
    Lookup := False;                                   { Preset false return }
    Lookup := False;                                   { Preset false return }
    If (Strings <> Nil) Then
    If (Strings <> Nil) Then
@@ -1058,7 +1058,10 @@ END.
 
 
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:22  marco
+ 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
   * CVS log and ID tags
   * CVS log and ID tags
 
 
 
 

+ 248 - 141
fvision/views.pas

@@ -95,7 +95,8 @@ USES
      OS2Def, OS2Base, OS2PMAPI,                       { Standard units }
      OS2Def, OS2Base, OS2PMAPI,                       { Standard units }
    {$ENDIF}
    {$ENDIF}
 
 
-   Common, GFVGraph, Objects, Drivers;                { GFV standard units }
+   GFVGraph,                                          { GFV standard unit }
+   Common, Objects, Drivers;                          { GFV standard units }
 
 
 {***************************************************************************}
 {***************************************************************************}
 {                              PUBLIC CONSTANTS                             }
 {                              PUBLIC CONSTANTS                             }
@@ -310,7 +311,7 @@ CONST
 
 
 {$IFDEF BIT_16}                                       { WINDOWS 16 BIT CODE }
 {$IFDEF BIT_16}                                       { WINDOWS 16 BIT CODE }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{              WIN16 LABEL CONSTANTS FOR WINDOW PROPERTY CALLS              }
+{             WIN16 LABEL CONSTANTS FOR WINDOW PROPERTY CALLS               }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 CONST
 CONST
    ViewSeg = 'TVWINSEG'+#0;                           { View segment label }
    ViewSeg = 'TVWINSEG'+#0;                           { View segment label }
@@ -319,7 +320,7 @@ CONST
 
 
 {$IFDEF BIT_32}                                       { WINDOWS 32 BIT CODE }
 {$IFDEF BIT_32}                                       { WINDOWS 32 BIT CODE }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
-{             WIN32/NT LABEL CONSTANTS FOR WINDOW PROPERTY CALLS            }
+{            WIN32/NT LABEL CONSTANTS FOR WINDOW PROPERTY CALLS             }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 CONST
 CONST
    ViewPtr = 'TVWINPTR'+#0;                           { View ptr label }
    ViewPtr = 'TVWINPTR'+#0;                           { View ptr label }
@@ -388,37 +389,40 @@ TYPE
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
    PView = ^TView;
    PView = ^TView;
    TView = OBJECT (TObject)
    TView = OBJECT (TObject)
-         GrowMode  : Byte;                            { View grow mode }
-         DragMode  : Byte;                            { View drag mode }
-         DrawMask  : Byte;                            { Draw masks }
-         TabMask   : Byte;                            { Tab move masks }
-         ColourOfs : Integer;                         { View palette offset }
-         HelpCtx   : Word;                            { View help context }
-         State     : Word;                            { View state masks }
-         Options   : Word;                            { View options masks }
-         EventMask : Word;                            { View event masks }
-         GOptions  : Word;                            { Graphics options }
-         Origin    : TPoint;                          { View origin }
-         Size      : TPoint;                          { View size }
-         Cursor    : TPoint;                          { Cursor position }
-         RawOrigin : TPoint;                          { View raw origin }
-         RawSize   : TPoint;                          { View raw size }
-         Next      : PView;                           { Next peerview }
-         Owner     : PGroup;                          { Owner group }
-         HoldLimit : PComplexArea;                    { Hold limit values }
+         GrowMode : Byte;                             { View grow mode }
+         DragMode : Byte;                             { View drag mode }
+         DrawMask : Byte;                             { Draw masks }
+         TabMask  : Byte;                             { Tab move masks }
+         ColourOfs: Integer;                          { View palette offset }
+         HelpCtx  : Word;                             { View help context }
+         State    : Word;                             { View state masks }
+         Options  : Word;                             { View options masks }
+         EventMask: Word;                             { View event masks }
+         GOptions : Word;                             { Graphics options }
+         Origin   : TPoint;                           { View origin }
+         Size     : TPoint;                           { View size }
+         Cursor   : TPoint;                           { Cursor position }
+         RawOrigin: TPoint;                           { View raw origin }
+         RawSize  : TPoint;                           { View raw size }
+         Next     : PView;                            { Next peerview }
+         Owner    : PGroup;                           { Owner group }
+         HoldLimit: PComplexArea;                     { Hold limit values }
+
+         RevCol    : Boolean;
+
          {$IFDEF OS_WINDOWS}                          { WIN/NT DATA ONLY }
          {$IFDEF OS_WINDOWS}                          { WIN/NT DATA ONLY }
-         ExStyle   : LongInt;                         { Extended style }
-         Dc        : HDc;                             { Device context }
+         ExStyle  : LongInt;                          { Extended style }
+         Dc       : HDc;                              { Device context }
          {$ENDIF}
          {$ENDIF}
          {$IFDEF OS_OS2}                              { OS2 DATA ONLY }
          {$IFDEF OS_OS2}                              { OS2 DATA ONLY }
-         lStyle    : LongInt;                         { Style }
-         Client    : HWnd;                            { Client handle }
-         Ps        : HPs;                             { Paint structure }
+         lStyle   : LongInt;                          { Style }
+         Client   : HWnd;                             { Client handle }
+         Ps       : HPs;                              { Paint structure }
          {$ENDIF}
          {$ENDIF}
          {$IFNDEF OS_DOS}                             { WIN/NT/OS2 DATA ONLY }
          {$IFNDEF OS_DOS}                             { WIN/NT/OS2 DATA ONLY }
-         FrameSize : Integer;                         { Frame size (X) }
-         CaptSize  : Integer;                         { Caption size (Y) }
-         HWindow   : HWnd;                            { Window handle }
+         FrameSize: Integer;                          { Frame size (X) }
+         CaptSize : Integer;                          { Caption size (Y) }
+         HWindow  : HWnd;                             { Window handle }
          {$ENDIF}
          {$ENDIF}
       CONSTRUCTOR Init (Var Bounds: TRect);
       CONSTRUCTOR Init (Var Bounds: TRect);
       CONSTRUCTOR Load (Var S: TStream);
       CONSTRUCTOR Load (Var S: TStream);
@@ -823,11 +827,12 @@ TYPE TColorRef = LongInt;                             { TColorRef defined }
 {$ENDIF}
 {$ENDIF}
 
 
 {$IFDEF PPC_SPEED}                                    { SPEEDSOFT SYBIL2+ }
 {$IFDEF PPC_SPEED}                                    { SPEEDSOFT SYBIL2+ }
-TYPE TColorRef = LongInt;                             { TColorRef defined }
-     TPaintStruct = PaintStruct;
-     TWindowPos = WindowPos;
-     TSize = Size;
-     TWndClass = WndClass;
+TYPE
+   TColorRef = LongInt;                               { TColorRef defined }
+   TPaintStruct = PaintStruct;                        { TPaintStruct define }
+   TWindowPos = WindowPos;                            { TWindowPos defined }
+   TSize = Size;                                      { TSize defined }
+   TWndClass = WndClass;                              { TWndClass defined }
 {$ENDIF}
 {$ENDIF}
 
 
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
@@ -1088,7 +1093,7 @@ BEGIN
          Event.What := evMouseDown;                   { Mouse down event }
          Event.What := evMouseDown;                   { Mouse down event }
          Event.Double := True;                        { Double click }
          Event.Double := True;                        { Double click }
          MouseButtons := MouseButtons OR
          MouseButtons := MouseButtons OR
-           mbLeftButton;                              { Set button mask }
+           mbRightButton;                             { Set button mask }
        End;
        End;
        WM_MButtonDown: Begin                          { MIDDLE MOUSE DOWN }
        WM_MButtonDown: Begin                          { MIDDLE MOUSE DOWN }
          Event.What := evMouseDown;                   { Mouse down event }
          Event.What := evMouseDown;                   { Mouse down event }
@@ -1122,11 +1127,6 @@ BEGIN
            MouseButtons := MouseButtons OR
            MouseButtons := MouseButtons OR
              mbRightButton;                           { Set right button mask }
              mbRightButton;                           { Set right button mask }
        End;
        End;
-       {$IFDEF BIT_32}
-       WM_Notify: Begin
-         I := 0;
-       End;
-       {$ENDIF}
        WM_EraseBkGnd: TvViewMsgHandler := 1;          { BACKGROUND MESSAGE }
        WM_EraseBkGnd: TvViewMsgHandler := 1;          { BACKGROUND MESSAGE }
        WM_Paint: If (P^.Dc = 0) Then Begin            { PAINT MESSAGE }
        WM_Paint: If (P^.Dc = 0) Then Begin            { PAINT MESSAGE }
          P^.Dc := BeginPaint(Wnd, Ps);                { Fetch structure }
          P^.Dc := BeginPaint(Wnd, Ps);                { Fetch structure }
@@ -1929,7 +1929,7 @@ BEGIN
    (State AND sfExposed <> 0) AND                     { View is exposed }
    (State AND sfExposed <> 0) AND                     { View is exposed }
    (State AND sfIconised = 0) Then Begin              { View not iconised }
    (State AND sfIconised = 0) Then Begin              { View not iconised }
      SetViewLimits;                                   { Set view limits }
      SetViewLimits;                                   { Set view limits }
-     GetViewSettings(ViewPort);                       { Get set viewport }
+     GetViewSettings(ViewPort, TextModeGFV);          { Get set viewport }
      If OverlapsArea(ViewPort.X1, ViewPort.Y1,
      If OverlapsArea(ViewPort.X1, ViewPort.Y1,
      ViewPort.X2, ViewPort.Y2) Then Begin             { Must be in area }
      ViewPort.X2, ViewPort.Y2) Then Begin             { Must be in area }
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
@@ -2028,15 +2028,18 @@ END;
 PROCEDURE TView.DrawBorder;
 PROCEDURE TView.DrawBorder;
 BEGIN
 BEGIN
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE ONLY }
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE ONLY }
-   BiColorRectangle(0, 0, RawSize.X, RawSize.Y, White,
-     DarkGray, False);                                { Draw 3d effect }
-   If (GOptions AND goThickFramed <> 0) Then Begin    { Thick frame at work }
-     GraphRectangle(1, 1, RawSize.X-1, RawSize.Y-1,
-       LightGray);                                    { Draw frame part 1 }
-     GraphRectangle(2, 2, RawSize.X-2, RawSize.Y-2,
-       LightGray);                                    { Fraw frame part 2 }
-     BiColorRectangle(3, 3, RawSize.X-3, RawSize.Y-3,
-       White, DarkGray, True);                        { Draw highlights }
+   If (TextModeGFV = FALSE) Then Begin                { GRAPHICS GFV MODE }
+     BiColorRectangle(0, 0, RawSize.X, RawSize.Y,
+       White, DarkGray, False);                       { Draw 3d effect }
+     If (GOptions AND goThickFramed <> 0) Then Begin  { Thick frame at work }
+       GraphRectangle(1, 1, RawSize.X-1, RawSize.Y-1,
+         LightGray);                                  { Draw frame part 1 }
+       GraphRectangle(2, 2, RawSize.X-2, RawSize.Y-2,
+         LightGray);                                  { Fraw frame part 2 }
+       BiColorRectangle(3, 3, RawSize.X-3, RawSize.Y-3,
+         White, DarkGray, True);                      { Draw highlights }
+     End;
+   End Else Begin                                     { TEXT GFV MODE }
    End;
    End;
    {$ENDIF}
    {$ENDIF}
 END;
 END;
@@ -2093,7 +2096,7 @@ VAR X1, Y1, X2, Y2: Integer; P: PGroup; ViewPort: ViewPortType; Ca: PComplexArea
 BEGIN
 BEGIN
    If (MaxAvail >= SizeOf(TComplexArea)) Then Begin   { Check enough memory }
    If (MaxAvail >= SizeOf(TComplexArea)) Then Begin   { Check enough memory }
      GetMem(Ca, SizeOf(TComplexArea));                { Allocate memory }
      GetMem(Ca, SizeOf(TComplexArea));                { Allocate memory }
-     GetViewSettings(ViewPort);                       { Fetch view port }
+     GetViewSettings(ViewPort, TextModeGFV);          { Fetch view port }
      Ca^.X1 := ViewPort.X1;                           { Hold current X1 }
      Ca^.X1 := ViewPort.X1;                           { Hold current X1 }
      Ca^.Y1 := ViewPort.Y1;                           { Hold current Y1 }
      Ca^.Y1 := ViewPort.Y1;                           { Hold current Y1 }
      Ca^.X2 := ViewPort.X2;                           { Hold current X2 }
      Ca^.X2 := ViewPort.X2;                           { Hold current X2 }
@@ -2126,7 +2129,7 @@ BEGIN
        If (X2 > ViewPort.X2) Then X2 := ViewPort.X2;  { Adjust x2 to locked }
        If (X2 > ViewPort.X2) Then X2 := ViewPort.X2;  { Adjust x2 to locked }
        If (Y2 > ViewPort.Y2) Then Y2 := ViewPort.Y2;  { Adjust y2 to locked }
        If (Y2 > ViewPort.Y2) Then Y2 := ViewPort.Y2;  { Adjust y2 to locked }
      End;
      End;
-     SetViewPort(X1, Y1, X2, Y2, ClipOn);             { Set new clip limits }
+     SetViewPort(X1, Y1, X2, Y2, ClipOn, TextModeGFV);{ Set new clip limits }
    End;
    End;
 END;
 END;
 
 
@@ -2135,13 +2138,14 @@ END;
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TView.DrawBackGround;
 PROCEDURE TView.DrawBackGround;
 VAR Bc: Byte; X1, Y1, X2, Y2: Integer; ViewPort: ViewPortType;
 VAR Bc: Byte; X1, Y1, X2, Y2: Integer; ViewPort: ViewPortType;
+{$IFDEF OS_DOS} X, Y: Integer; {$ENDIF}
 {$IFDEF OS_OS2} Ptl: PointL; {$ENDIF}
 {$IFDEF OS_OS2} Ptl: PointL; {$ENDIF}
 BEGIN
 BEGIN
    If (GOptions AND goNoDrawView = 0) Then Begin      { Non draw views exit }
    If (GOptions AND goNoDrawView = 0) Then Begin      { Non draw views exit }
      If (State AND sfDisabled = 0) Then
      If (State AND sfDisabled = 0) Then
        Bc := GetColor(1) AND $F0 SHR 4 Else           { Select back colour }
        Bc := GetColor(1) AND $F0 SHR 4 Else           { Select back colour }
        Bc := GetColor(4) AND $F0 SHR 4;               { Disabled back colour }
        Bc := GetColor(4) AND $F0 SHR 4;               { Disabled back colour }
-     GetViewSettings(ViewPort);                       { Get view settings }
+     GetViewSettings(ViewPort, TextModeGFV);          { Get view settings }
      If (ViewPort.X1 <= RawOrigin.X) Then X1 := 0     { Right to left edge }
      If (ViewPort.X1 <= RawOrigin.X) Then X1 := 0     { Right to left edge }
        Else X1 := ViewPort.X1-RawOrigin.X;            { Offset from left }
        Else X1 := ViewPort.X1-RawOrigin.X;            { Offset from left }
      If (ViewPort.Y1 <= RawOrigin.Y) Then Y1 := 0     { Right to top edge }
      If (ViewPort.Y1 <= RawOrigin.Y) Then Y1 := 0     { Right to top edge }
@@ -2153,8 +2157,23 @@ BEGIN
        Y2 := RawSize.Y Else                           { Right to bottom edge }
        Y2 := RawSize.Y Else                           { Right to bottom edge }
        Y2 := ViewPort.Y2-RawOrigin.Y;                 { Offset from bottom }
        Y2 := ViewPort.Y2-RawOrigin.Y;                 { Offset from bottom }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
-       SetFillStyle(SolidFill, Bc);                   { Set fill colour }
-       Bar(0, 0, X2-X1, Y2-Y1);                       { Clear the area }
+       If (TextModeGFV <> True) Then Begin            { GRAPHICS MODE GFV }
+         SetFillStyle(SolidFill, Bc);                 { Set fill colour }
+         Bar(0, 0, X2-X1, Y2-Y1);                     { Clear the area }
+       End Else Begin                                 { TEXT MODE GFV }
+         X1 := (RawOrigin.X+X1) DIV SysFontWidth;
+         Y1 := (RawOrigin.Y+Y1) DIV SysFontHeight;
+         X2 := (RawOrigin.X+X2) DIV SysFontWidth;
+         Y2 := (RawOrigin.Y+Y2) DIV SysFontHeight;
+         If (State AND sfDisabled = 0) Then
+           Bc := GetColor(1) Else           { Select back colour }
+           Bc := GetColor(4);               { Disabled back colour }
+         For Y := Y1 To Y2 Do
+           For X := X1 To X2 Do Begin
+             Mem[$B800:$0+(Y*ScreenWidth+X)*2] := $20;
+             Mem[$B800:$0+(Y*ScreenWidth+X)*2+1] := Bc;
+           End;
+       End;
      {$ENDIF}
      {$ENDIF}
      {$IFDEF OS_WINDOWS}                              { WIN/NT CODE }
      {$IFDEF OS_WINDOWS}                              { WIN/NT CODE }
      If (Dc <> 0) Then Begin                          { Valid device context }
      If (Dc <> 0) Then Begin                          { Valid device context }
@@ -2186,7 +2205,8 @@ BEGIN
    P := HoldLimit;                                    { Transfer pointer }
    P := HoldLimit;                                    { Transfer pointer }
    If (P <> Nil) Then Begin                           { Valid complex area }
    If (P <> Nil) Then Begin                           { Valid complex area }
      HoldLimit := P^.NextArea;                        { Move to prior area }
      HoldLimit := P^.NextArea;                        { Move to prior area }
-     SetViewPort(P^.X1, P^.Y1, P^.X2, P^.Y2, ClipOn); { Restore clip limits }
+     SetViewPort(P^.X1, P^.Y1, P^.X2, P^.Y2, ClipOn,
+       TextModeGFV);                                  { Restore clip limits }
      FreeMem(P, SizeOf(TComplexArea));                { Release memory }
      FreeMem(P, SizeOf(TComplexArea));                { Release memory }
    End;
    End;
 END;
 END;
@@ -2317,14 +2337,14 @@ END;
 PROCEDURE TView.ReDrawArea (X1, Y1, X2, Y2: Integer);
 PROCEDURE TView.ReDrawArea (X1, Y1, X2, Y2: Integer);
 VAR HLimit: PView; ViewPort: ViewPortType;
 VAR HLimit: PView; ViewPort: ViewPortType;
 BEGIN
 BEGIN
-   GetViewSettings(ViewPort);                         { Hold view port }
-   SetViewPort(X1, Y1, X2, Y2, ClipOn);               { Set new clip limits }
+   GetViewSettings(ViewPort, TextModeGFV);            { Hold view port }
+   SetViewPort(X1, Y1, X2, Y2, ClipOn, TextModeGFV);  { Set new clip limits }
    HLimit := LimitsLocked;                            { Hold lock limits }
    HLimit := LimitsLocked;                            { Hold lock limits }
    LimitsLocked := @Self;                             { We are the lock view }
    LimitsLocked := @Self;                             { We are the lock view }
    DrawView;                                          { Redraw the area }
    DrawView;                                          { Redraw the area }
    LimitsLocked := HLimit;                            { Release our lock }
    LimitsLocked := HLimit;                            { Release our lock }
    SetViewPort(ViewPort.X1, ViewPort.Y1,
    SetViewPort(ViewPort.X1, ViewPort.Y1,
-     ViewPort.X2, ViewPort.Y2, ClipOn);               { Reset old limits }
+     ViewPort.X2, ViewPort.Y2, ClipOn, TextModeGFV);  { Reset old limits }
 END;
 END;
 
 
 {--TView--------------------------------------------------------------------}
 {--TView--------------------------------------------------------------------}
@@ -4329,7 +4349,7 @@ BEGIN
    (State AND sfExposed <> 0) AND                     { View is exposed }
    (State AND sfExposed <> 0) AND                     { View is exposed }
    (Max <> Min) Then Begin                            { View has some size }
    (Max <> Min) Then Begin                            { View has some size }
      SetViewLimits;                                   { Set view limits }
      SetViewLimits;                                   { Set view limits }
-     GetViewSettings(ViewPort);                       { Get set viewport }
+     GetViewSettings(ViewPort, TextModeGFV);          { Get set viewport }
      If OverlapsArea(ViewPort.X1, ViewPort.Y1,
      If OverlapsArea(ViewPort.X1, ViewPort.Y1,
      ViewPort.X2, ViewPort.Y2) Then Begin             { Must be in area }
      ViewPort.X2, ViewPort.Y2) Then Begin             { Must be in area }
        {$IFDEF OS_DOS}
        {$IFDEF OS_DOS}
@@ -4369,7 +4389,7 @@ BEGIN
    If (State AND sfVisible <> 0) AND                  { View is visible }
    If (State AND sfVisible <> 0) AND                  { View is visible }
    (State AND sfExposed <> 0) Then Begin              { View is exposed }
    (State AND sfExposed <> 0) Then Begin              { View is exposed }
      SetViewLimits;                                   { Set view limits }
      SetViewLimits;                                   { Set view limits }
-     GetViewSettings(ViewPort);                       { Get set viewport }
+     GetViewSettings(ViewPort, TextModeGFV);          { Get set viewport }
      If OverlapsArea(ViewPort.X1, ViewPort.Y1,
      If OverlapsArea(ViewPort.X1, ViewPort.Y1,
      ViewPort.X2, ViewPort.Y2) Then Begin             { Must be in area }
      ViewPort.X2, ViewPort.Y2) Then Begin             { Must be in area }
        {$IFDEF OS_DOS}
        {$IFDEF OS_DOS}
@@ -4584,13 +4604,14 @@ END;
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 FUNCTION TListViewer.GetText (Item: Integer; MaxLen: Integer): String;
 FUNCTION TListViewer.GetText (Item: Integer; MaxLen: Integer): String;
 BEGIN                                                 { Abstract method }
 BEGIN                                                 { Abstract method }
+   GetText := '';                                     { Return empty }
 END;
 END;
 
 
 {--TListViewer--------------------------------------------------------------}
 {--TListViewer--------------------------------------------------------------}
 {  DrawBackGround -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 27Oct99 LdB    }
 {  DrawBackGround -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 27Oct99 LdB    }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TListViewer.DrawBackGround;
 PROCEDURE TListViewer.DrawBackGround;
-VAR SCOff: Byte; I, J, ColWidth, Item, Indent, CurCol: Integer; Color: Word;
+VAR  I, J, ColWidth, Item, Indent, CurCol: Integer; Color: Word;
     Text: String; B: TDrawBuffer;
     Text: String; B: TDrawBuffer;
     {$IFDEF OS_WINDOWS} S: String; {$ENDIF}           { WIN/NT CODE }
     {$IFDEF OS_WINDOWS} S: String; {$ENDIF}           { WIN/NT CODE }
 
 
@@ -4643,9 +4664,9 @@ BEGIN
          MoveStr(B[CurCol+1], Text, Color);           { Transfer to buffer }
          MoveStr(B[CurCol+1], Text, Color);           { Transfer to buffer }
          If ShowMarkers Then Begin
          If ShowMarkers Then Begin
            WordRec(B[CurCol]).Lo := Byte(
            WordRec(B[CurCol]).Lo := Byte(
-             SpecialChars[SCOff]);                    { Set marker character }
+             SpecialChars[4]);                        { Set marker character }
            WordRec(B[CurCol+ColWidth-2]).Lo := Byte(
            WordRec(B[CurCol+ColWidth-2]).Lo := Byte(
-             SpecialChars[SCOff+1]);                  { Set marker character }
+             SpecialChars[5]);                        { Set marker character }
          End;
          End;
        End;
        End;
        MoveChar(B[CurCol+ColWidth-1], #179,
        MoveChar(B[CurCol+ColWidth-1], #179,
@@ -4659,13 +4680,12 @@ END;
 {  DrawFocus -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 27Oct99 LdB         }
 {  DrawFocus -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 27Oct99 LdB         }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TListViewer.DrawFocus;
 PROCEDURE TListViewer.DrawFocus;
-VAR DrawIt: Boolean; I, J, Item, CurCol, ColWidth: Integer;
+VAR DrawIt: Boolean; SCOff: Byte; I, J, Item, CurCol, ColWidth: Integer;
     Color: Word;
     Color: Word;
 
 
   Indent: Integer;
   Indent: Integer;
   B: TDrawBuffer;
   B: TDrawBuffer;
-  Text,S: String;
-  SCOff: Byte;
+  Text: String;
 BEGIN
 BEGIN
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    If (GOptions AND goNativeClass <> 0) Then Exit;    { Native class exits }
    If (GOptions AND goNativeClass <> 0) Then Exit;    { Native class exits }
@@ -5462,7 +5482,7 @@ END;
 FUNCTION TView.Exposed: Boolean;
 FUNCTION TView.Exposed: Boolean;
 VAR ViewPort: ViewPortType;
 VAR ViewPort: ViewPortType;
 BEGIN
 BEGIN
-   GetViewSettings(ViewPort);                         { Fetch viewport }
+   GetViewSettings(ViewPort, TextModeGFV);            { Fetch viewport }
    If (State AND sfVisible<>0) AND                    { View visible }
    If (State AND sfVisible<>0) AND                    { View visible }
      (State AND sfExposed<>0) AND                     { View exposed }
      (State AND sfExposed<>0) AND                     { View exposed }
      OverlapsArea(ViewPort.X1, ViewPort.Y1,
      OverlapsArea(ViewPort.X1, ViewPort.Y1,
@@ -5479,11 +5499,14 @@ VAR {$IFDEF OS_DOS} ViewPort: ViewPortType; {$ENDIF}  { DOS/DPMI VARIABLES }
     {$IFDEF OS_OS2} I: LongInt; Lp: PointL; OPs: HPs; {$ENDIF}{ OS2 VARIABLES }
     {$IFDEF OS_OS2} I: LongInt; Lp: PointL; OPs: HPs; {$ENDIF}{ OS2 VARIABLES }
 BEGIN
 BEGIN
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
-   GetViewSettings(ViewPort);                         { Get viewport settings }
-   SetColor(Colour);                                  { Set line colour }
-   Line(RawOrigin.X + X1 - ViewPort.X1,
-     RawOrigin.Y + Y1 - ViewPort.Y1, RawOrigin.X + X2
-     - ViewPort.X1, RawOrigin.Y + Y2-ViewPort.Y1);    { Draw the line }
+   GetViewSettings(ViewPort, TextModeGFV);            { Get viewport settings }
+   If (TextModeGFV <> TRUE) Then Begin
+     SetColor(Colour);                                { Set line colour }
+     Line(RawOrigin.X + X1 - ViewPort.X1,
+       RawOrigin.Y + Y1 - ViewPort.Y1, RawOrigin.X + X2
+       - ViewPort.X1, RawOrigin.Y + Y2-ViewPort.Y1);  { Draw the line }
+   End Else Begin                                     { LEON???? }
+   End;
    {$ENDIF}
    {$ENDIF}
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    If (HWindow <> 0) Then Begin                       { Valid window }
    If (HWindow <> 0) Then Begin                       { Valid window }
@@ -5549,11 +5572,14 @@ VAR {$IFDEF OS_DOS} ViewPort: ViewPortType; {$ENDIF}
     {$IFDEF OS_OS2} Lp: PointL; OPs: HPs; {$ENDIF}
     {$IFDEF OS_OS2} Lp: PointL; OPs: HPs; {$ENDIF}
 BEGIN
 BEGIN
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
-   SetColor(Colour);                                  { Set line colour }
-   GetViewSettings(ViewPort);
-   Rectangle(RawOrigin.X + X1 - ViewPort.X1, RawOrigin.Y + Y1
-     - ViewPort.Y1, RawOrigin.X + X2 - ViewPort.X1,
-     RawOrigin.Y+Y2-ViewPort.Y1);                     { Draw a rectangle }
+   If (TextModeGFV <> TRUE) Then Begin                { GRAPHICS MODE GFV }
+     SetColor(Colour);                                { Set line colour }
+     GetViewSettings(ViewPort, TextModeGFV);
+     Rectangle(RawOrigin.X + X1 - ViewPort.X1, RawOrigin.Y + Y1
+       - ViewPort.Y1, RawOrigin.X + X2 - ViewPort.X1,
+       RawOrigin.Y+Y2-ViewPort.Y1);                   { Draw a rectangle }
+   End Else Begin                                     { LEON???? }
+   End;
    {$ENDIF}
    {$ENDIF}
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    If (HWindow <> 0) Then Begin                       { Valid window }
    If (HWindow <> 0) Then Begin                       { Valid window }
@@ -5619,16 +5645,28 @@ END;
 {  ClearArea -> Platforms DOS/DPMI/WIN/OS2 - Checked 19Sep97 LdB            }
 {  ClearArea -> Platforms DOS/DPMI/WIN/OS2 - Checked 19Sep97 LdB            }
 {---------------------------------------------------------------------------}
 {---------------------------------------------------------------------------}
 PROCEDURE TView.ClearArea (X1, Y1, X2, Y2: Integer; Colour: Byte);
 PROCEDURE TView.ClearArea (X1, Y1, X2, Y2: Integer; Colour: Byte);
-VAR {$IFDEF OS_DOS} ViewPort: ViewPortType; {$ENDIF}
+VAR {$IFDEF OS_DOS} X, Y: Integer; ViewPort: ViewPortType; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: hDc; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: hDc; {$ENDIF}
     {$IFDEF OS_OS2} Lp: PointL; OPs: HPs; {$ENDIF}
     {$IFDEF OS_OS2} Lp: PointL; OPs: HPs; {$ENDIF}
 BEGIN
 BEGIN
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
    {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
-   GetViewSettings(ViewPort);                         { Get viewport }
-   SetFillStyle(SolidFill, Colour);                   { Set colour up }
-   Bar(RawOrigin.X+X1-ViewPort.X1, RawOrigin.Y+Y1-
-     ViewPort.Y1, RawOrigin.X+X2-ViewPort.X1,
-     RawOrigin.Y+Y2-ViewPort.Y1);                     { Clear the area }
+   GetViewSettings(ViewPort, TextModeGFV);            { Get viewport }
+   If (TextModeGFV <> TRUE) Then Begin                { GRAPHICAL GFV MODE }
+     SetFillStyle(SolidFill, Colour);                 { Set colour up }
+     Bar(RawOrigin.X+X1-ViewPort.X1, RawOrigin.Y+Y1-
+       ViewPort.Y1, RawOrigin.X+X2-ViewPort.X1,
+       RawOrigin.Y+Y2-ViewPort.Y1);                   { Clear the area }
+   End Else Begin                                     { TEXT MODE GFV }
+     X1 := (RawOrigin.X+X1) DIV SysFontWidth;
+     Y1 := (RawOrigin.Y+Y1) DIV SysFontHeight;
+     X2 := (RawOrigin.X+X2) DIV SysFontWidth;
+     Y2 := (RawOrigin.Y+Y2) DIV SysFontHeight;
+     For Y := Y1 To Y2 Do
+       For X := X1 To X2 Do Begin
+         Mem[$B800:$0+(Y*ScreenWidth+X)*2] := $20;
+         Mem[$B800:$0+(Y*ScreenWidth+X)*2+1] := Colour SHL 4;
+       End;
+   End;
    {$ENDIF}
    {$ENDIF}
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    {$IFDEF OS_WINDOWS}                                { WIN/NT CODE }
    If (HWindow <> 0) Then Begin                       { Valid window }
    If (HWindow <> 0) Then Begin                       { Valid window }
@@ -5674,7 +5712,7 @@ END;
 PROCEDURE TView.GraphArc (Xc, Yc: Integer; Sa, Ea: Real; XRad, YRad: Integer;
 PROCEDURE TView.GraphArc (Xc, Yc: Integer; Sa, Ea: Real; XRad, YRad: Integer;
 Colour: Byte);
 Colour: Byte);
 CONST RadConv  = 57.2957795130823229;                 { Degrees per radian }
 CONST RadConv  = 57.2957795130823229;                 { Degrees per radian }
-VAR X1, Y1, X2, Y2: Integer; {$IFDEF OS_WINDOWS} ODc: hDc; {$ENDIF}
+VAR X1, Y1, X2, Y2, X3, Y3: Integer; {$IFDEF OS_WINDOWS} ODc: hDc; {$ENDIF}
 BEGIN
 BEGIN
    {$IFDEF OS_WINDOWS}
    {$IFDEF OS_WINDOWS}
    Xc := Xc - FrameSize;
    Xc := Xc - FrameSize;
@@ -5688,16 +5726,23 @@ BEGIN
    Y1 := Yc - Round(Cos(Sa)*YRad);                    { Calc 1st y value }
    Y1 := Yc - Round(Cos(Sa)*YRad);                    { Calc 1st y value }
    X2 := Xc + Round(Sin(Sa+Ea)*XRad);                 { Calc 2nd x value }
    X2 := Xc + Round(Sin(Sa+Ea)*XRad);                 { Calc 2nd x value }
    Y2 := Yc - Round(Cos(Sa+Ea)*YRad);                 { Calc 2nd y value }
    Y2 := Yc - Round(Cos(Sa+Ea)*YRad);                 { Calc 2nd y value }
+   X3 := X2;                                          { Use X2 value }
+   Y3 := Y2;                                          { Use Y2 value }
+   If (Abs(Ea) > Pi) Then Begin
+     X3 := Xc + Round(Sin(Sa+Pi)*XRad);               { Calc 3rd x value }
+     Y3 := Yc - Round(Cos(Sa+Pi)*YRad);               { Calc 3rd y value }
+   End;
    {$IFDEF OS_WINDOWS}
    {$IFDEF OS_WINDOWS}
    If (HWindow <> 0) Then Begin                       { Valid window }
    If (HWindow <> 0) Then Begin                       { Valid window }
      ODc := Dc;                                       { Hold device context }
      ODc := Dc;                                       { Hold device context }
      If (Dc = 0) Then Dc := GetDC(HWindow);           { Create a context }
      If (Dc = 0) Then Dc := GetDC(HWindow);           { Create a context }
      SelectObject(Dc, ColPen[Colour]);                { Pen colour }
      SelectObject(Dc, ColPen[Colour]);                { Pen colour }
-     If (XRad > 2 ) AND (YRAd > 2) Then Begin         { Must exceed 2x2 arc }
+     If (Abs(X1-X3) > 1) OR (Abs(Y1-Y3) > 1)          { Must exceed 2x2 arc }
+     Then Begin
        If (Ea < 0) Then
        If (Ea < 0) Then
          Arc(Dc, Xc-XRad, Yc-YRad, Xc+XRad, Yc+YRad,
          Arc(Dc, Xc-XRad, Yc-YRad, Xc+XRad, Yc+YRad,
            X1, Y1, X2, Y2) Else                       { Draw c/clkwise arc }
            X1, Y1, X2, Y2) Else                       { Draw c/clkwise arc }
-         Arc(Dc, Xc-XRad, Yc+YRad, Xc+XRad, Yc-YRad,
+         Arc(Dc, Xc-XRad, Yc-YRad, Xc+XRad, Yc+YRad,
            X2, Y2, X1, Y1);                           { Draw clockwise arc }
            X2, Y2, X1, Y1);                           { Draw clockwise arc }
      End;
      End;
      If (ODc = 0) Then ReleaseDC(HWindow, Dc);        { Release context }
      If (ODc = 0) Then ReleaseDC(HWindow, Dc);        { Release context }
@@ -5779,7 +5824,7 @@ END;
 
 
 PROCEDURE TView.WriteBuf (X, Y, W, H: Integer; Var Buf);
 PROCEDURE TView.WriteBuf (X, Y, W, H: Integer; Var Buf);
 VAR I, J, K, L, CW: Integer; P: PDrawBuffer;
 VAR I, J, K, L, CW: Integer; P: PDrawBuffer;
-    {$IFDEF OS_DOS} ViewPort: ViewPortType; {$ENDIF}
+    {$IFDEF OS_DOS} Tix, Tiy: Integer; ViewPort: ViewPortType; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: HDc; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: HDc; {$ENDIF}
     {$IFDEF OS_OS2} OPs: HPs; Pt: PointL; {$ENDIF}
     {$IFDEF OS_OS2} OPs: HPs; Pt: PointL; {$ENDIF}
 BEGIN
 BEGIN
@@ -5795,9 +5840,9 @@ BEGIN
        Y := Y * SysFontHeight;                        { Y graphical adjust }
        Y := Y * SysFontHeight;                        { Y graphical adjust }
      End;
      End;
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
-       GetViewSettings(ViewPort);                     { Get current viewport }
-       X := X + RawOrigin.X - ViewPort.X;             { Calc x position }
-       Y := Y + RawOrigin.Y - ViewPort.Y;             { Calc y position }
+       GetViewSettings(ViewPort, TextModeGFV);        { Get current viewport }
+       X := X + RawOrigin.X - ViewPort.X1;            { Calc x position }
+       Y := Y + RawOrigin.Y - ViewPort.Y1;            { Calc y position }
      {$ENDIF}
      {$ENDIF}
      {$IFDEF OS_WINDOWS}                              { WIN/NT CODE }
      {$IFDEF OS_WINDOWS}                              { WIN/NT CODE }
        ODc := Dc;                                     { Hold device context }
        ODc := Dc;                                     { Hold device context }
@@ -5815,11 +5860,18 @@ BEGIN
        For I := 0 To (W-1) Do Begin                   { For each character }
        For I := 0 To (W-1) Do Begin                   { For each character }
          Cw := TextWidth(Chr(Lo(P^[L])));             { Width of this char }
          Cw := TextWidth(Chr(Lo(P^[L])));             { Width of this char }
          {$IFDEF OS_DOS}                              { DOS/DPMI CODE }
          {$IFDEF OS_DOS}                              { DOS/DPMI CODE }
-           SetFillStyle(SolidFill, Hi(P^[L]) AND $F0
-             SHR 4);                                  { Set back colour }
-           SetColor(Hi(P^[L]) AND $0F);               { Set text colour }
-           Bar(K, Y, K+Cw, Y+FontHeight-1);           { Clear text backing }
-           OutTextXY(K, Y+2, Chr(Lo(P^[L])));         { Write text char }
+           If (TextModeGFV <> TRUE) Then Begin        { GRAPHICAL MODE GFV }
+             SetFillStyle(SolidFill, Hi(P^[L]) AND
+               $F0 SHR 4);                            { Set back colour }
+             SetColor(Hi(P^[L]) AND $0F);             { Set text colour }
+             Bar(K, Y, K+Cw, Y+FontHeight-1);         { Clear text backing }
+             OutTextXY(K, Y+2, Chr(Lo(P^[L])));       { Write text char }
+           End Else Begin                             { TEXT MODE GFV }
+             Tix := (K + ViewPort.X1) DIV SysFontWidth;
+             Tiy := (Y + 2 + ViewPort.Y1) DIV SysFontHeight;
+             Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2] := Lo(P^[L]);
+             Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2+1] := Hi(P^[L]);
+           End;
          {$ENDIF}
          {$ENDIF}
          {$IFDEF OS_WINDOWS}                          { WIN/NT CODE }
          {$IFDEF OS_WINDOWS}                          { WIN/NT CODE }
            SetBkColor(Dc, ColRef[Hi(P^[L]) AND $F0
            SetBkColor(Dc, ColRef[Hi(P^[L]) AND $F0
@@ -5855,7 +5907,7 @@ END;
 
 
 PROCEDURE TView.WriteLine (X, Y, W, H: Integer; Var Buf);
 PROCEDURE TView.WriteLine (X, Y, W, H: Integer; Var Buf);
 VAR I, J, K, Cw: Integer; P: PDrawBuffer;
 VAR I, J, K, Cw: Integer; P: PDrawBuffer;
-    {$IFDEF OS_DOS} ViewPort: ViewPortType; {$ENDIF}
+    {$IFDEF OS_DOS} Tix, Tiy: Integer; ViewPort: ViewPortType; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: HDc; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: HDc; {$ENDIF}
     {$IFDEF OS_OS2} OPs: HPs; Pt: PointL; {$ENDIF}
     {$IFDEF OS_OS2} OPs: HPs; Pt: PointL; {$ENDIF}
 BEGIN
 BEGIN
@@ -5870,9 +5922,9 @@ BEGIN
        Y := Y * SysFontHeight;                        { Y graphical adjust }
        Y := Y * SysFontHeight;                        { Y graphical adjust }
      End;
      End;
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
-       GetViewSettings(ViewPort);                     { Get current viewport }
-       X := X + RawOrigin.X - ViewPort.X;             { Calc x position }
-       Y := Y + RawOrigin.Y - ViewPort.Y;             { Calc y position }
+       GetViewSettings(ViewPort, TextModeGFV);        { Get current viewport }
+       X := X + RawOrigin.X - ViewPort.X1;            { Calc x position }
+       Y := Y + RawOrigin.Y - ViewPort.Y1;            { Calc y position }
      {$ENDIF}
      {$ENDIF}
      {$IFDEF OS_WINDOWS}                              { WIN/NT CODE }
      {$IFDEF OS_WINDOWS}                              { WIN/NT CODE }
        ODc := Dc;                                     { Hold device context }
        ODc := Dc;                                     { Hold device context }
@@ -5890,11 +5942,18 @@ BEGIN
        For I := 0 To (W-1) Do Begin                   { For each character }
        For I := 0 To (W-1) Do Begin                   { For each character }
          Cw := TextWidth(Chr(Lo(P^[I])));             { Width of this char }
          Cw := TextWidth(Chr(Lo(P^[I])));             { Width of this char }
          {$IFDEF OS_DOS}                              { DOS/DPMI CODE }
          {$IFDEF OS_DOS}                              { DOS/DPMI CODE }
-           SetFillStyle(SolidFill, Hi(P^[I]) AND $F0
-             SHR 4);                                  { Set back colour }
-           SetColor(Hi(P^[I]) AND $0F);               { Set text colour }
-           Bar(K, Y, K+Cw, Y+FontHeight-1);           { Clear text backing }
-           OutTextXY(K, Y+2, Chr(Lo(P^[I])));         { Write text char }
+           If (TextModeGFV <> TRUE) Then Begin        { GRAPHICAL MODE GFV }
+             SetFillStyle(SolidFill, Hi(P^[I]) AND
+               $F0 SHR 4);                            { Set back colour }
+             SetColor(Hi(P^[I]) AND $0F);             { Set text colour }
+             Bar(K, Y, K+Cw, Y+FontHeight-1);         { Clear text backing }
+             OutTextXY(K, Y+2, Chr(Lo(P^[I])));       { Write text char }
+           End Else Begin                             { TEXT MODE GFV }
+             Tix := (K + ViewPort.X1) DIV SysFontWidth;
+             Tiy := (Y + ViewPort.Y1 + 2) DIV SysFontHeight;
+             Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2] := Lo(P^[I]);
+             Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2+1] := Hi(P^[I]);
+           End;
          {$ENDIF}
          {$ENDIF}
          {$IFDEF OS_WINDOWS}                          { WIN/NT CODE }
          {$IFDEF OS_WINDOWS}                          { WIN/NT CODE }
            SetBkColor(Dc, ColRef[Hi(P^[I]) AND $F0
            SetBkColor(Dc, ColRef[Hi(P^[I]) AND $F0
@@ -5956,8 +6015,8 @@ BEGIN
 END;
 END;
 
 
 PROCEDURE TView.WriteStr (X, Y: Integer; Str: String; Color: Byte);
 PROCEDURE TView.WriteStr (X, Y: Integer; Str: String; Color: Byte);
-VAR Fc, Bc: Byte; X1, Y1, X2, Y2: Integer;
-    {$IFDEF OS_DOS} ViewPort: ViewPortType; {$ENDIF}
+VAR Fc, Bc, B: Byte; X1, Y1, X2, Y2: Integer;
+    {$IFDEF OS_DOS} Tix, Tiy, Ti: Integer; ViewPort: ViewPortType; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: HDc; P: Pointer; {$ENDIF}
     {$IFDEF OS_WINDOWS} ODc: HDc; P: Pointer; {$ENDIF}
     {$IFDEF OS_OS2} OPs: HPs; P: Pointer; Pt: PointL; {$ENDIF}
     {$IFDEF OS_OS2} OPs: HPs; P: Pointer; Pt: PointL; {$ENDIF}
 BEGIN
 BEGIN
@@ -5969,6 +6028,14 @@ BEGIN
      Fc := GetColor(Color);                           { Get view color }
      Fc := GetColor(Color);                           { Get view color }
      Bc := Fc AND $F0 SHR 4;                          { Calc back colour }
      Bc := Fc AND $F0 SHR 4;                          { Calc back colour }
      Fc := Fc AND $0F;                                { Calc text colour }
      Fc := Fc AND $0F;                                { Calc text colour }
+
+     If RevCol Then Begin
+       B := Bc;
+       Bc := Fc;
+       Fc := B;
+     End;
+
+
      {$IFDEF OS_DOS}
      {$IFDEF OS_DOS}
      If (X >= 0) AND (Y >= 0) Then Begin
      If (X >= 0) AND (Y >= 0) Then Begin
        X := RawOrigin.X+X*FontWidth;                    { X position }
        X := RawOrigin.X+X*FontWidth;                    { X position }
@@ -5977,12 +6044,23 @@ BEGIN
        X := RawOrigin.X + Abs(X);
        X := RawOrigin.X + Abs(X);
        Y := RawOrigin.Y + Abs(Y);
        Y := RawOrigin.Y + Abs(Y);
      End;
      End;
-     GetViewSettings(ViewPort);
-     SetFillStyle(SolidFill, Bc);                     { Set fill style }
-     Bar(X-ViewPort.X1, Y-ViewPort.Y1,
-       X-ViewPort.X1+Length(Str)*FontWidth, Y-ViewPort.Y1+FontHeight-1);
-     SetColor(Fc);
-     OutTextXY(X-ViewPort.X1, Y-ViewPort.Y1+2, Str);    { Write text char }
+     GetViewSettings(ViewPort, TextModeGFV);
+     If (TextModeGFV <> TRUE) Then Begin              { GRAPHICAL MODE GFV }
+       SetFillStyle(SolidFill, Bc);                   { Set fill style }
+       Bar(X-ViewPort.X1, Y-ViewPort.Y1,
+         X-ViewPort.X1+Length(Str)*FontWidth,
+         Y-ViewPort.Y1+FontHeight-1);
+       SetColor(Fc);
+       OutTextXY(X-ViewPort.X1, Y-ViewPort.Y1+2, Str);{ Write text char }
+     End Else Begin                                   { TEXT MODE GFV }
+       Tix := X DIV SysFontWidth;
+       Tiy := Y DIV SysFontHeight;
+       For Ti := 1 To length(Str) Do Begin
+         Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2] := Ord(Str[Ti]);
+         Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2+1] := GetColor(Color);
+         Tix := Tix + SysFontWidth;
+       End;
+     End;
      {$ENDIF}
      {$ENDIF}
      {$IFDEF OS_WINDOWS}
      {$IFDEF OS_WINDOWS}
      If (HWindow <> 0) Then Begin
      If (HWindow <> 0) Then Begin
@@ -6062,12 +6140,14 @@ END;
 
 
 PROCEDURE TView.WriteChar (X, Y: Integer; C: Char; Color: Byte;
 PROCEDURE TView.WriteChar (X, Y: Integer; C: Char; Color: Byte;
   Count: Integer);
   Count: Integer);
-VAR Fc, Bc: Byte; I: Integer; Col: Word; S: String; ViewPort: ViewPortType;
+{$IFDEF OS_DOS}
+VAR Fc, Bc: Byte; I, Ti, Tix, Tiy: Integer; Col: Word; S: String; ViewPort: ViewPortType;
+{$ENDIF}
 BEGIN
 BEGIN
    {$IFDEF OS_DOS}
    {$IFDEF OS_DOS}
    If (State AND sfVisible <> 0) AND                  { View visible }
    If (State AND sfVisible <> 0) AND                  { View visible }
    (State AND sfExposed <> 0) Then Begin              { View exposed }
    (State AND sfExposed <> 0) Then Begin              { View exposed }
-     GetViewSettings(ViewPort);
+     GetViewSettings(ViewPort, TextModeGFV);
      Col := GetColor(Color);                          { Get view color }
      Col := GetColor(Color);                          { Get view color }
      Fc := Col AND $0F;                               { Foreground colour }
      Fc := Col AND $0F;                               { Foreground colour }
      Bc := Col AND $F0 SHR 4;                         { Background colour }
      Bc := Col AND $F0 SHR 4;                         { Background colour }
@@ -6077,11 +6157,22 @@ BEGIN
      While (Count>0) Do Begin
      While (Count>0) Do Begin
        If (Count>255) Then I := 255 Else I := Count;  { Size to make }
        If (Count>255) Then I := 255 Else I := Count;  { Size to make }
        S[0] := Chr(I);                                { Set string length }
        S[0] := Chr(I);                                { Set string length }
-       SetFillStyle(SolidFill, Bc);                   { Set fill style }
-       Bar(X-ViewPort.X1, Y-ViewPort.Y1,
-         X-ViewPort.X1+Length(S)*FontWidth, Y-ViewPort.Y1+FontHeight-1);
-       SetColor(Fc);
-       OutTextXY(X-ViewPort.X1, Y-ViewPort.Y1, S);    { Write text char }
+       If (TextModeGFV <> TRUE) Then Begin            { GRAPHICAL MODE GFV }
+         SetFillStyle(SolidFill, Bc);                 { Set fill style }
+         Bar(X-ViewPort.X1, Y-ViewPort.Y1,
+           X-ViewPort.X1+Length(S)*FontWidth,
+           Y-ViewPort.Y1+FontHeight-1);
+         SetColor(Fc);
+         OutTextXY(X-ViewPort.X1, Y-ViewPort.Y1, S);  { Write text char }
+       End Else Begin                                 { TEXT MODE GFV }
+         Tix := X DIV SysFontWidth;
+         Tiy := Y DIV SysFontHeight;
+         For Ti := 1 To length(S) Do Begin
+           Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2] := Ord(S[Ti]);
+           Mem[$B800:$0+((Tiy * ScreenWidth)+Tix)*2+1] := GetColor(Color);
+           Tix := Tix + SysFontWidth;
+         End;
+       End;
        Count := Count - I;                            { Subtract count }
        Count := Count - I;                            { Subtract count }
        X := X + I*FontWidth;                          { Move x position }
        X := X + I*FontWidth;                          { Move x position }
      End;
      End;
@@ -6155,9 +6246,9 @@ BEGIN
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      HideMouseCursor;                                 { Hide the mouse }
      HideMouseCursor;                                 { Hide the mouse }
      {$ENDIF}
      {$ENDIF}
-     SetWriteMode(XORPut);
+     SetWriteMode(XORPut, TextModeGFV);
      GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
      GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
-     SetWriteMode(NormalPut);
+     SetWriteMode(NormalPut, TextModeGFV);
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      ShowMouseCursor;                                 { Show the mouse }
      ShowMouseCursor;                                 { Show the mouse }
      {$ENDIF}
      {$ENDIF}
@@ -6182,13 +6273,13 @@ BEGIN
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
        HideMouseCursor;                               { Hide the mouse }
        HideMouseCursor;                               { Hide the mouse }
        {$ENDIF}
        {$ENDIF}
-       SetWriteMode(XORPut);
+       SetWriteMode(XORPut, TextModeGFV);
        GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
        GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
-       SetWriteMode(NormalPut);
+       SetWriteMode(NormalPut, TextModeGFV);
        MoveGrow(R, Mouse);                            { Resize the view }
        MoveGrow(R, Mouse);                            { Resize the view }
-       SetWriteMode(XORPut);
+       SetWriteMode(XORPut, TextModeGFV);
        GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
        GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
-       SetWriteMode(NormalPut);
+       SetWriteMode(NormalPut, TextModeGFV);
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
        ShowMouseCursor;                               { Show the mouse }
        ShowMouseCursor;                               { Show the mouse }
        {$ENDIF}
        {$ENDIF}
@@ -6495,7 +6586,8 @@ BEGIN
 END;
 END;
 
 
 PROCEDURE TWindow.DrawBorder;
 PROCEDURE TWindow.DrawBorder;
-VAR Fc, Bc: Byte; X, Y: Integer; S: String; ViewPort: ViewPortType;
+{$IFDEF OS_DOS} VAR Fc, Bc: Byte; X, Y: Integer; S: String;
+ViewPort: ViewPortType; {$ENDIF}
 BEGIN
 BEGIN
    {$IFDEF OS_DOS}
    {$IFDEF OS_DOS}
    Fc := GetColor(2) AND $0F;                        { Foreground colour }
    Fc := GetColor(2) AND $0F;                        { Foreground colour }
@@ -6506,28 +6598,40 @@ BEGIN
    ClearArea(0, Y, RawSize.X, Y+FontHeight, Bc);      { Clear background }
    ClearArea(0, Y, RawSize.X, Y+FontHeight, Bc);      { Clear background }
    If (Title<>Nil) AND (GOptions AND goTitled<>0)
    If (Title<>Nil) AND (GOptions AND goTitled<>0)
    Then Begin                                         { View has a title }
    Then Begin                                         { View has a title }
-     GetViewSettings(ViewPort);
+     GetViewSettings(ViewPort, TextModeGFV);
      X := (RawSize.X DIV 2);                          { Half way point }
      X := (RawSize.X DIV 2);                          { Half way point }
      X := X - (Length(Title^)*FontWidth) DIV 2;       { Calc start point }
      X := X - (Length(Title^)*FontWidth) DIV 2;       { Calc start point }
-     SetColor(Fc);
-     OutTextXY(RawOrigin.X+X-ViewPort.X1,
-       RawOrigin.Y+Y+1-ViewPort.Y1+2, Title^);          { Write the title }
+     If (TextModeGFV <> TRUE) Then Begin              { GRAPHICS MODE GFV }
+       SetColor(Fc);
+       OutTextXY(RawOrigin.X+X-ViewPort.X1,
+         RawOrigin.Y+Y+1-ViewPort.Y1+2, Title^);      { Write the title }
+     End Else Begin                                   { LEON??? }
+     End;
    End;
    End;
    If (Number>0) AND (Number<10) Then Begin           { Valid number }
    If (Number>0) AND (Number<10) Then Begin           { Valid number }
      Str(Number, S);                                  { Make number string }
      Str(Number, S);                                  { Make number string }
-     SetColor(GetColor(2) AND $0F);
-     OutTextXY(RawOrigin.X+RawSize.X-2*FontWidth-ViewPort.X1,
-       RawOrigin.Y+Y+1-ViewPort.Y1+2, S);               { Write number }
+     If (TextModeGFV <> True) Then Begin              { GRAPHICS MODE GFV }
+       SetColor(GetColor(2) AND $0F);
+       OutTextXY(RawOrigin.X+RawSize.X-2*FontWidth-ViewPort.X1,
+         RawOrigin.Y+Y+1-ViewPort.Y1+2, S);           { Write number }
+     End Else Begin                                   { LEON ????? }
+     End;
    End;
    End;
    If (Flags AND wfClose<>0) Then Begin               { Close icon request }
    If (Flags AND wfClose<>0) Then Begin               { Close icon request }
-     SetColor(Fc);
-     OutTextXY(RawOrigin.X+Y+FontWidth-ViewPort.X1,
-       RawOrigin.Y+Y+1-ViewPort.Y1+2, '[*]');           { Write close icon }
+     If (TextModeGFV <> True) Then Begin              { GRAPHICS MODE GFV }
+       SetColor(Fc);
+       OutTextXY(RawOrigin.X+Y+FontWidth-ViewPort.X1,
+         RawOrigin.Y+Y+1-ViewPort.Y1+2, '[*]');       { Write close icon }
+     End Else Begin                                   { LEON??? }
+     End;
    End;
    End;
    If (Flags AND wfZoom<>0) Then Begin
    If (Flags AND wfZoom<>0) Then Begin
-     SetColor(GetColor(2) AND $0F);
-     OutTextXY(RawOrigin.X+RawSize.X-4*FontWidth-Y-ViewPort.X1,
-       RawOrigin.Y+Y+1-ViewPort.Y1+2, '['+#24+']');     { Write zoom icon }
+     If (TextModeGFV <> True) Then Begin              { GRAPHICS MODE GFV }
+       SetColor(GetColor(2) AND $0F);
+       OutTextXY(RawOrigin.X+RawSize.X-4*FontWidth-Y-ViewPort.X1,
+         RawOrigin.Y+Y+1-ViewPort.Y1+2, '['+#24+']'); { Write zoom icon }
+     End Else Begin                                   { LEON??? }
+     End;
    End;
    End;
    BiColorRectangle(Y+1, Y+1, RawSize.X-Y-1, Y+FontHeight,
    BiColorRectangle(Y+1, Y+1, RawSize.X-Y-1, Y+FontHeight,
      White, DarkGray, False);                         { Draw 3d effect }
      White, DarkGray, False);                         { Draw 3d effect }
@@ -6628,7 +6732,10 @@ END.
 
 
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:22  marco
+ 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
   * CVS log and ID tags
   * CVS log and ID tags
 
 
 
 

+ 5 - 2
fvision/xmsunit.pas

@@ -7,7 +7,7 @@
 {                                                          }
 {                                                          }
 {        Copyright (c) 1998 by Leon de Boer                }
 {        Copyright (c) 1998 by Leon de Boer                }
 {       [email protected]  - primary e-mail address    }
 {       [email protected]  - primary e-mail address    }
-{       ldeboer@starwon.com.au - backup e-mail address     }
+{       ldeboer@projectent.com.au - backup e-mail address  }
 {                                                          }
 {                                                          }
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {****************[ THIS CODE IS FREEWARE ]*****************}
 {                                                          }
 {                                                          }
@@ -510,7 +510,10 @@ END;
 END.
 END.
 {
 {
  $Log$
  $Log$
- Revision 1.2  2000-08-24 12:00:23  marco
+ Revision 1.3  2001-04-10 21:29:56  pierre
+  * import of Leon de Boer's files
+
+ Revision 1.2  2000/08/24 12:00:23  marco
   * CVS log and ID tags
   * CVS log and ID tags