Jelajahi Sumber

* several more fixes

pierre 24 tahun lalu
induk
melakukan
8a41dbef3c
11 mengubah file dengan 346 tambahan dan 127 penghapusan
  1. 13 2
      fv/app.pas
  2. 7 1
      fv/drivers.pas
  3. 15 12
      fv/gfvgraph.pas
  4. 11 1
      fv/menus.pas
  5. 112 46
      fv/views.pas
  6. 13 2
      fvision/app.pas
  7. 7 1
      fvision/drivers.pas
  8. 15 12
      fvision/gfvgraph.pas
  9. 11 1
      fvision/menus.pas
  10. 30 3
      fvision/testapp.pas
  11. 112 46
      fvision/views.pas

+ 13 - 2
fv/app.pas

@@ -628,7 +628,15 @@ END;
 {  InitBackGround -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Sep97 LdB    }
 {---------------------------------------------------------------------------}
 PROCEDURE TDesktop.InitBackground;
-{$IFNDEF OS_WINDOWS} CONST Ch: Char = #176; {$ELSE} CONST Ch: Char = #167; {$ENDIF}
+{$IFNDEF OS_WINDOWS}
+CONST Ch: Char = #176;
+{$ELSE}
+{$IFDEF NO_WINDOW}
+CONST Ch: Char = #176;
+{$ELSE not NO_WINDOW}
+CONST Ch: Char = #167;
+{$ENDIF}
+{$ENDIF}
 VAR R: TRect;
 BEGIN
    GetExtent(R);                                      { Get desktop extents }
@@ -1325,7 +1333,10 @@ END;
 END.
 {
  $Log$
- Revision 1.6  2001-05-04 08:42:54  pierre
+ Revision 1.7  2001-05-04 15:43:45  pierre
+  * several more fixes
+
+ Revision 1.6  2001/05/04 08:42:54  pierre
   * some corrections for linux
 
  Revision 1.5  2001/05/03 22:32:52  pierre

+ 7 - 1
fv/drivers.pas

@@ -3033,12 +3033,18 @@ BEGIN
    TextModeGFV:=True;
    InitKeyboard;
    {$endif Use_API}
+   {$ifdef Graph_API}
+   TextModeGFV:=false;
+   {$endif Graph_API}
    SaveExit := ExitProc;                              { Save old exit }
    ExitProc := @ExitDrivers;                          { Set new exit }
 END.
 {
  $Log$
- Revision 1.7  2001-05-04 10:46:02  pierre
+ Revision 1.8  2001-05-04 15:43:45  pierre
+  * several more fixes
+
+ Revision 1.7  2001/05/04 10:46:02  pierre
   * various fixes  for win32 api mode
 
  Revision 1.6  2001/05/04 08:42:55  pierre

+ 15 - 12
fv/gfvgraph.pas

@@ -72,7 +72,7 @@ UNIT GFVGraph;
 {$V-} { Turn off strict VAR strings }
 {====================================================================}
 
-{$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
+{$IFDEF NO_WINDOW}                                       { DOS/DPMI CODE }
 USES Graph;                                           { Standard unit }
 {$ENDIF}
 
@@ -125,7 +125,7 @@ CONST
 CONST
    Detect = 0;                                        { Detect video }
 
-{$IFDEF OS_DOS}                                       { DOS CODE ONLY }
+{$IFDEF NO_WINDOW}                                       { DOS CODE ONLY }
 {---------------------------------------------------------------------------}
 {                 DOS GRAPHICS SOLID FILL BAR AREA CONSTANT                 }
 {---------------------------------------------------------------------------}
@@ -219,7 +219,7 @@ graphics routine, that is the actual screen height in pixels - 1.
 ---------------------------------------------------------------------}
 FUNCTION GetMaxY (TextMode: Boolean): Integer;
 
-{$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+{$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
 PROCEDURE SetColor(Color: Word);
 PROCEDURE SetFillStyle (Pattern: Word; Color: Word);
 PROCEDURE Bar (X1, Y1, X2, Y2: Integer);
@@ -272,7 +272,7 @@ CONST
 {---------------------------------------------------------------------------}
 PROCEDURE SetWriteMode (Mode: Byte; TextMode: Boolean);
 BEGIN
-   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
    If TextMode Then WriteMode := Mode                 { Hold write mode }
      Else Graph.SetWriteMode(Mode);                   { Call graph proc }
    {$ELSE}                                            { WIN/NT/OS2 CODE }
@@ -288,9 +288,9 @@ END;
 {  GetViewSettings -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 05Dec2000 LdB }
 {---------------------------------------------------------------------------}
 PROCEDURE GetViewSettings (Var CurrentViewPort: ViewPortType; TextMode: Boolean);
-{$IFDEF OS_DOS} VAR Ts: Graph.ViewPortType;{$ENDIF}   { DOS/DPMI CODE }
+{$IFDEF NO_WINDOW} VAR Ts: Graph.ViewPortType;{$ENDIF}   { DOS/DPMI CODE }
 BEGIN
-   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
    If TextMode Then CurrentViewPort := ViewPort       { Textmode viewport }
      Else Begin
        Graph.GetViewSettings(Ts);                     { Get graph settings }
@@ -310,7 +310,7 @@ END;
 {---------------------------------------------------------------------------}
 PROCEDURE SetViewPort (X1, Y1, X2, Y2: Integer; Clip, TextMode: Boolean);
 BEGIN
-   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
    If (TextMode = TRUE) Then Begin                    { TEXT MODE GFV }
    {$ENDIF}
      If (X1 < 0) Then X1 := 0;                        { X1 negative fix }
@@ -332,7 +332,7 @@ BEGIN
      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 }
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
    End Else Begin                                     { GRAPHICS MODE GFV }
      Graph.SetViewPort(X1, Y1, X2, Y2, Clip);         { Call graph proc }
    End;
@@ -348,7 +348,7 @@ END;
 {---------------------------------------------------------------------------}
 FUNCTION GetMaxX (TextMode: Boolean): Integer;
 BEGIN
-   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
    If TextMode Then GetMaxX := SysScreenWidth-1       { Screen width }
      Else GetMaxX := Graph.GetMaxX;                   { Call graph func }
    {$ELSE}                                            { WIN/NT/OS2 CODE }
@@ -361,7 +361,7 @@ END;
 {---------------------------------------------------------------------------}
 FUNCTION GetMaxY (TextMode: Boolean): Integer;
 BEGIN
-   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
    If TextMode Then GetMaxY := SysScreenHeight-1      { Screen height }
      Else GetMaxY := Graph.GetMaxY;                   { Call graph func }
    {$ELSE}                                            { WIN/NT/OS2 CODE }
@@ -369,7 +369,7 @@ BEGIN
    {$ENDIF}
 END;
 
-{$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
+{$IFDEF NO_WINDOW}                                       { DOS/DPMI CODE }
 PROCEDURE SetColor(Color: Word);
 BEGIN
    Graph.SetColor(Color);                             { Call graph proc }
@@ -404,7 +404,10 @@ END;
 END.
 {
  $Log$
- Revision 1.4  2001-04-10 21:57:55  pierre
+ Revision 1.5  2001-05-04 15:43:45  pierre
+  * several more fixes
+
+ Revision 1.4  2001/04/10 21:57:55  pierre
   + first adds for Use_API define
 
  Revision 1.3  2001/04/10 21:29:55  pierre

+ 11 - 1
fv/menus.pas

@@ -1048,6 +1048,8 @@ BEGIN
    Inherited Init(R);                                 { Call ancestor }
    State := State OR sfShadow;                        { Set shadow state }
    Options := Options OR ofPreProcess;                { View pre processes }
+   if TextModeGFV then
+     Options := Options OR ofFramed;
    Menu := AMenu;                                     { Hold menu }
    ParentMenu := AParentMenu;                         { Hold parent }
 END;
@@ -1090,6 +1092,11 @@ BEGIN
                DarkGray, False);                      { Draw higlight box }
            End;
          End;
+       End Else Begin { no text NewLine }
+         MoveChar(B, 'Ã', Color, 1);
+         MoveChar(B[1], 'Ä', Color, Size.X-2);
+         MoveChar(B[Size.X-1], '´', Color, 1);
+         WriteBuf(0, Y, Size.X, 1, B);                { Write the line }
        End;
        Inc(Y);                                        { Next line down }
        P := P^.Next;                                  { fetch next item }
@@ -1676,7 +1683,10 @@ END;
 END.
 {
  $Log$
- Revision 1.5  2001-05-04 10:46:02  pierre
+ Revision 1.6  2001-05-04 15:43:45  pierre
+  * several more fixes
+
+ Revision 1.5  2001/05/04 10:46:02  pierre
   * various fixes  for win32 api mode
 
  Revision 1.4  2001/04/10 21:57:55  pierre

+ 112 - 46
fv/views.pas

@@ -2041,8 +2041,15 @@ END;
 {  DrawBorder -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 17May98 LdB        }
 {---------------------------------------------------------------------------}
 PROCEDURE TView.DrawBorder;
-BEGIN
-   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE ONLY }
+VAR I : sw_integer;
+    LeftUpCorner,
+    RightUpCorner,
+    HorizontalBar,
+    VerticalBar,
+    LeftLowCorner,
+    RightLowCorner : Char;
+BEGIN
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE ONLY }
    If (TextModeGFV = FALSE) Then Begin                { GRAPHICS GFV MODE }
      BiColorRectangle(0, 0, RawSize.X, RawSize.Y,
        White, DarkGray, False);                       { Draw 3d effect }
@@ -2055,6 +2062,35 @@ BEGIN
          White, DarkGray, True);                      { Draw highlights }
      End;
    End Else Begin                                     { TEXT GFV MODE }
+     If not Focus or (GOptions AND goThickFramed = 0) then
+       begin
+         LeftUpCorner:='Ú';
+         RightUpCorner:='¿';
+         HorizontalBar:='Ä';
+         VerticalBar:='³';
+         LeftLowCorner:='À';
+         RightLowCorner:='Ù';
+       end
+     else
+       begin
+         LeftUpCorner:='É';
+         RightUpCorner:='»';
+         HorizontalBar:='Í';
+         VerticalBar:='º';
+         LeftLowCorner:='È';
+         RightLowCorner:='¼';
+       end;
+     WriteChar(0,0,LeftUpCorner,1,1);
+     WriteChar(1,0,HorizontalBar,1,Size.X-2);
+     WriteChar(Size.X-1,0,RightUpcorner,1,1);
+     For i:=1 to Size.Y -1 do
+       begin
+         WriteChar(0,i,VerticalBar,1,1);
+         WriteChar(Size.X-1,i,VerticalBar,1,1);
+       end;
+     WriteChar(0,Size.Y-1,LeftLowCorner,1,1);
+     WriteChar(1,Size.Y-1,HorizontalBar,1,Size.X-2);
+     WriteChar(Size.X-1,Size.Y-1,RightLowCorner,1,1);
    End;
    {$ENDIF}
 END;
@@ -3578,8 +3614,12 @@ BEGIN
          ForEach(@DoSetState);                        { Set each subview }
          UnLock;                                      { Unlock the view }
        End;
-     sfFocused: If (Current <> Nil) Then
-       Current^.SetState(sfFocused, Enable);          { Focus current view }
+     sfFocused: Begin
+         If (Current <> Nil) Then
+           Current^.SetState(sfFocused, Enable);          { Focus current view }
+         If TextModeGFV then
+           SetDrawMask(vdBackGnd OR vdFocus OR vdInner); { Set redraw masks }
+       End;
      sfExposed: Begin
          ForEach(@DoExpose);                          { Expose each subview }
        End;
@@ -5294,9 +5334,9 @@ END;
 {  HandleEvent -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 11Aug99 LdB       }
 {---------------------------------------------------------------------------}
 PROCEDURE TWindow.HandleEvent (Var Event: TEvent);
-VAR {$IFDEF OS_DOS} I, J: Integer; {$ENDIF} Min, Max: TPoint; Limits: TRect;
+VAR {$IFDEF NO_WINDOW} I, J: Integer; {$ENDIF} Min, Max: TPoint; Limits: TRect;
 
-   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
    PROCEDURE DragWindow (Mode: Byte);
    VAR Limits: TRect; Min, Max: TPoint;
    BEGIN
@@ -5363,14 +5403,16 @@ BEGIN
          End;
        End;
      End;
-     {$IFDEF OS_DOS}                                  { DOS/DPMI CODE ONLY }
+     {$IFDEF NO_WINDOW}                               { DOS/DPMI CODE ONLY }
      evMouseDown:                                     { MOUSE DOWN EVENT }
        If (GOptions AND goTitled <> 0) Then Begin     { Must have title area }
-         If (GOptions AND goThickFramed <> 0) Then
-           I := 5 Else                                { Thick frame adjust }
-           If (Options AND ofFramed <> 0) Then I := 1 { Frame adjust }
-             Else I := 0;                             { No frame size }
-         If (Event.Where.Y > (RawOrigin.Y + I)) AND
+         If TextModeGFV then
+           I:=0 Else
+           If (GOptions AND goThickFramed <> 0) Then
+             I := 5 Else                                { Thick frame adjust }
+             If (Options AND ofFramed <> 0) Then I := 1 { Frame adjust }
+               Else I := 0;                             { No frame size }
+         If (Event.Where.Y >= (RawOrigin.Y + I)) AND
          (Event.Where.Y < RawOrigin.Y+FontHeight+I)
          Then Begin                                   { Within top line }
            If (Current <> Nil) AND
@@ -5378,9 +5420,9 @@ BEGIN
              Then Current^.FocusFromTop Else
              FocusFromTop;
            If (Flags AND wfClose <> 0) Then Begin     { Has close icon }
-             J := I + FontWidth;                      { Set X value }
-             If (Event.Where.X > RawOrigin.X+J) AND
-             (Event.Where.X < RawOrigin.X+J+2*FontWidth)
+             J := I + 2*FontWidth;                      { Set X value }
+             If (Event.Where.X >= RawOrigin.X+J) AND
+             (Event.Where.X < RawOrigin.X+J+3*FontWidth)
              Then Begin                               { In close area }
                Event.What := evCommand;               { Command event }
                Event.Command := cmClose;              { Close command }
@@ -5640,8 +5682,8 @@ BEGIN
    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;
+     X2 := (RawOrigin.X+X2-1) DIV SysFontWidth;
+     Y2 := (RawOrigin.Y+Y2-1) DIV SysFontHeight;
      For Y := Y1 To Y2 Do
        For X := X1 To X2 Do Begin
          VideoBuf^[(Y*Drivers.ScreenWidth+X)] := (Colour shl 12) or $20;
@@ -6228,18 +6270,24 @@ BEGIN
      Bc := Col AND $F0 SHR 4;                         { Background colour }
      FillChar(S[1], 255, C);                          { Fill the string }
      If (X >= 0) AND (Y >= 0) AND ((GOptions and (goGraphical or goGraphView))=0) Then Begin
-       X := RawOrigin.X+X*FontWidth;                    { X position }
-       Y := RawOrigin.Y+Y*FontHeight;                   { Y position }
+       X := RawOrigin.X+X*SysFontWidth;                    { X position }
+       Y := RawOrigin.Y+Y*SysFontHeight;                   { Y position }
      End Else Begin
        X := RawOrigin.X + Abs(X);
        Y := RawOrigin.Y + Abs(Y);
      End;
        Tix := X DIV SysFontWidth;
        Tiy := Y DIV SysFontHeight;
+     While (Count>0) Do Begin
+       If (Count>255) Then I := 255 Else I := Count;  { Size to make }
+       S[0] := Chr(I);                                { Set string length }
        For Ti := 1 To length(S) Do Begin
          VideoBuf^[((Tiy * Drivers.ScreenWidth)+Tix)] := (GetColor(Color) shl 8) or Ord(S[Ti]);
-         Tix := Tix + SysFontWidth;
+         Inc(Tix);
        end;
+       Count := Count - I;                            { Subtract count }
+       X := X + I;                                    { Move x position }
+     End;
        UpdateScreen(false);
      {$ELSE not Use_API}
    {$IFDEF OS_DOS}
@@ -6341,7 +6389,8 @@ BEGIN
      Op2.X := RawOrigin.X+RawSize.X;                  { Right side x value }
      Op2.Y := RawOrigin.Y+RawSize.Y;                  { Right side y value }
      PState := State;                                 { Hold current state }
-     State := State AND NOT sfVisible;                { Temp not visible }
+     if not TextModeGFV then
+       State := State AND NOT sfVisible;                { Temp not visible }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      HideMouseCursor;                                 { Hide the mouse }
      {$ENDIF}
@@ -6372,13 +6421,20 @@ BEGIN
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
        HideMouseCursor;                               { Hide the mouse }
        {$ENDIF}
-       SetWriteMode(XORPut, TextModeGFV);
-       GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
-       SetWriteMode(NormalPut, TextModeGFV);
-       MoveGrow(R, Mouse);                            { Resize the view }
-       SetWriteMode(XORPut, TextModeGFV);
-       GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
-       SetWriteMode(NormalPut, TextModeGFV);
+       if not TextModeGFV then
+         begin
+           SetWriteMode(XORPut, TextModeGFV);
+           GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
+           SetWriteMode(NormalPut, TextModeGFV);
+           MoveGrow(R, Mouse);                            { Resize the view }
+           SetWriteMode(XORPut, TextModeGFV);
+           GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
+           SetWriteMode(NormalPut, TextModeGFV);
+         end
+       else
+         begin
+           MoveGrow(R, Mouse);                            { Resize the view }
+         end;
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
        ShowMouseCursor;                               { Show the mouse }
        {$ENDIF}
@@ -6413,10 +6469,6 @@ BEGIN
    SetState(sfDragging, False);                       { Clr dragging flag }
 END;
 
-
-
-
-
 FUNCTION TView.FontWidth: Integer;
 BEGIN
    FontWidth := SysFontWidth;
@@ -6685,26 +6737,32 @@ BEGIN
 END;
 
 PROCEDURE TWindow.DrawBorder;
-{$IFDEF OS_DOS} VAR Fc, Bc: Byte; X, Y: Integer; S: String;
+{$IFDEF NO_WINDOW} VAR Fc, Bc: Byte; X, Y: Integer; S: String;
 ViewPort: ViewPortType; {$ENDIF}
 BEGIN
-   {$IFDEF OS_DOS}
+   {$IFDEF NO_WINDOW}
    Fc := GetColor(2) AND $0F;                        { Foreground colour }
-   Bc := 9;                                           { Background colour }
-   If (Options AND ofFramed<>0) Then Y := 1
-     Else Y := 0;                                     { Initial value }
-   If (GOptions AND goThickFramed<>0) Then Inc(Y, 3); { Adjust position }
+   Bc := (GetColor(2) AND $70) SHR 4;                { Background colour }
+   If TextModeGFV then
+     Y:=0 else
+     begin
+       If (Options AND ofFramed<>0) Then Y := 1
+         Else Y := 0;                                     { Initial value }
+       If (GOptions AND goThickFramed<>0) Then Inc(Y, 3); { Adjust position }
+     end;
    ClearArea(0, Y, RawSize.X, Y+FontHeight, Bc);      { Clear background }
+   Inherited DrawBorder;
    If (Title<>Nil) AND (GOptions AND goTitled<>0)
    Then Begin                                         { View has a title }
      GetViewSettings(ViewPort, TextModeGFV);
      X := (RawSize.X DIV 2);                          { Half way point }
-     X := X - (Length(Title^)*FontWidth) DIV 2;       { Calc start point }
+     X := X - ((Length(Title^)+2)*FontWidth) DIV 2;       { Calc start point }
      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 }
+         RawOrigin.Y+Y+1-ViewPort.Y1+2, ' '+Title^+' ');      { Write the title }
      End Else Begin                                   { LEON??? }
+       WriteStr(X div SysFontWidth,0,' '+Title^+' ',2);
      End;
    End;
    If (Number>0) AND (Number<10) Then Begin           { Valid number }
@@ -6714,6 +6772,7 @@ BEGIN
        OutTextXY(RawOrigin.X+RawSize.X-2*FontWidth-ViewPort.X1,
          RawOrigin.Y+Y+1-ViewPort.Y1+2, S);           { Write number }
      End Else Begin                                   { LEON ????? }
+       WriteStr(Size.X-5,0,S,2);
      End;
    End;
    If (Flags AND wfClose<>0) Then Begin               { Close icon request }
@@ -6722,6 +6781,7 @@ BEGIN
        OutTextXY(RawOrigin.X+Y+FontWidth-ViewPort.X1,
          RawOrigin.Y+Y+1-ViewPort.Y1+2, '[*]');       { Write close icon }
      End Else Begin                                   { LEON??? }
+       WriteStr(2,0,'[*]',2);
      End;
    End;
    If (Flags AND wfZoom<>0) Then Begin
@@ -6730,13 +6790,16 @@ BEGIN
        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??? }
+       WriteStr(Size.X-5,0,'['+#24+']',2);
      End;
    End;
-   BiColorRectangle(Y+1, Y+1, RawSize.X-Y-1, Y+FontHeight,
-     White, DarkGray, False);                         { Draw 3d effect }
-   BiColorRectangle(Y+1, Y+1, RawSize.X-Y-2, Y+FontHeight-1,
-     White, DarkGray, False);                         { Draw 3d effect }
-   Inherited DrawBorder;
+   If not TextModeGFV then
+     begin
+       BiColorRectangle(Y+1, Y+1, RawSize.X-Y-1, Y+FontHeight,
+         White, DarkGray, False);                         { Draw 3d effect }
+       BiColorRectangle(Y+1, Y+1, RawSize.X-Y-2, Y+FontHeight-1,
+         White, DarkGray, False);                         { Draw 3d effect }
+     end;
    {$ENDIF}
 END;
 
@@ -6831,7 +6894,10 @@ END.
 
 {
  $Log$
- Revision 1.7  2001-05-04 10:46:03  pierre
+ Revision 1.8  2001-05-04 15:43:46  pierre
+  * several more fixes
+
+ Revision 1.7  2001/05/04 10:46:03  pierre
   * various fixes  for win32 api mode
 
  Revision 1.6  2001/05/04 08:42:56  pierre

+ 13 - 2
fvision/app.pas

@@ -628,7 +628,15 @@ END;
 {  InitBackGround -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 12Sep97 LdB    }
 {---------------------------------------------------------------------------}
 PROCEDURE TDesktop.InitBackground;
-{$IFNDEF OS_WINDOWS} CONST Ch: Char = #176; {$ELSE} CONST Ch: Char = #167; {$ENDIF}
+{$IFNDEF OS_WINDOWS}
+CONST Ch: Char = #176;
+{$ELSE}
+{$IFDEF NO_WINDOW}
+CONST Ch: Char = #176;
+{$ELSE not NO_WINDOW}
+CONST Ch: Char = #167;
+{$ENDIF}
+{$ENDIF}
 VAR R: TRect;
 BEGIN
    GetExtent(R);                                      { Get desktop extents }
@@ -1325,7 +1333,10 @@ END;
 END.
 {
  $Log$
- Revision 1.6  2001-05-04 08:42:54  pierre
+ Revision 1.7  2001-05-04 15:43:45  pierre
+  * several more fixes
+
+ Revision 1.6  2001/05/04 08:42:54  pierre
   * some corrections for linux
 
  Revision 1.5  2001/05/03 22:32:52  pierre

+ 7 - 1
fvision/drivers.pas

@@ -3033,12 +3033,18 @@ BEGIN
    TextModeGFV:=True;
    InitKeyboard;
    {$endif Use_API}
+   {$ifdef Graph_API}
+   TextModeGFV:=false;
+   {$endif Graph_API}
    SaveExit := ExitProc;                              { Save old exit }
    ExitProc := @ExitDrivers;                          { Set new exit }
 END.
 {
  $Log$
- Revision 1.7  2001-05-04 10:46:02  pierre
+ Revision 1.8  2001-05-04 15:43:45  pierre
+  * several more fixes
+
+ Revision 1.7  2001/05/04 10:46:02  pierre
   * various fixes  for win32 api mode
 
  Revision 1.6  2001/05/04 08:42:55  pierre

+ 15 - 12
fvision/gfvgraph.pas

@@ -72,7 +72,7 @@ UNIT GFVGraph;
 {$V-} { Turn off strict VAR strings }
 {====================================================================}
 
-{$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
+{$IFDEF NO_WINDOW}                                       { DOS/DPMI CODE }
 USES Graph;                                           { Standard unit }
 {$ENDIF}
 
@@ -125,7 +125,7 @@ CONST
 CONST
    Detect = 0;                                        { Detect video }
 
-{$IFDEF OS_DOS}                                       { DOS CODE ONLY }
+{$IFDEF NO_WINDOW}                                       { DOS CODE ONLY }
 {---------------------------------------------------------------------------}
 {                 DOS GRAPHICS SOLID FILL BAR AREA CONSTANT                 }
 {---------------------------------------------------------------------------}
@@ -219,7 +219,7 @@ graphics routine, that is the actual screen height in pixels - 1.
 ---------------------------------------------------------------------}
 FUNCTION GetMaxY (TextMode: Boolean): Integer;
 
-{$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+{$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
 PROCEDURE SetColor(Color: Word);
 PROCEDURE SetFillStyle (Pattern: Word; Color: Word);
 PROCEDURE Bar (X1, Y1, X2, Y2: Integer);
@@ -272,7 +272,7 @@ CONST
 {---------------------------------------------------------------------------}
 PROCEDURE SetWriteMode (Mode: Byte; TextMode: Boolean);
 BEGIN
-   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
    If TextMode Then WriteMode := Mode                 { Hold write mode }
      Else Graph.SetWriteMode(Mode);                   { Call graph proc }
    {$ELSE}                                            { WIN/NT/OS2 CODE }
@@ -288,9 +288,9 @@ END;
 {  GetViewSettings -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 05Dec2000 LdB }
 {---------------------------------------------------------------------------}
 PROCEDURE GetViewSettings (Var CurrentViewPort: ViewPortType; TextMode: Boolean);
-{$IFDEF OS_DOS} VAR Ts: Graph.ViewPortType;{$ENDIF}   { DOS/DPMI CODE }
+{$IFDEF NO_WINDOW} VAR Ts: Graph.ViewPortType;{$ENDIF}   { DOS/DPMI CODE }
 BEGIN
-   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
    If TextMode Then CurrentViewPort := ViewPort       { Textmode viewport }
      Else Begin
        Graph.GetViewSettings(Ts);                     { Get graph settings }
@@ -310,7 +310,7 @@ END;
 {---------------------------------------------------------------------------}
 PROCEDURE SetViewPort (X1, Y1, X2, Y2: Integer; Clip, TextMode: Boolean);
 BEGIN
-   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
    If (TextMode = TRUE) Then Begin                    { TEXT MODE GFV }
    {$ENDIF}
      If (X1 < 0) Then X1 := 0;                        { X1 negative fix }
@@ -332,7 +332,7 @@ BEGIN
      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 }
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
    End Else Begin                                     { GRAPHICS MODE GFV }
      Graph.SetViewPort(X1, Y1, X2, Y2, Clip);         { Call graph proc }
    End;
@@ -348,7 +348,7 @@ END;
 {---------------------------------------------------------------------------}
 FUNCTION GetMaxX (TextMode: Boolean): Integer;
 BEGIN
-   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
    If TextMode Then GetMaxX := SysScreenWidth-1       { Screen width }
      Else GetMaxX := Graph.GetMaxX;                   { Call graph func }
    {$ELSE}                                            { WIN/NT/OS2 CODE }
@@ -361,7 +361,7 @@ END;
 {---------------------------------------------------------------------------}
 FUNCTION GetMaxY (TextMode: Boolean): Integer;
 BEGIN
-   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
    If TextMode Then GetMaxY := SysScreenHeight-1      { Screen height }
      Else GetMaxY := Graph.GetMaxY;                   { Call graph func }
    {$ELSE}                                            { WIN/NT/OS2 CODE }
@@ -369,7 +369,7 @@ BEGIN
    {$ENDIF}
 END;
 
-{$IFDEF OS_DOS}                                       { DOS/DPMI CODE }
+{$IFDEF NO_WINDOW}                                       { DOS/DPMI CODE }
 PROCEDURE SetColor(Color: Word);
 BEGIN
    Graph.SetColor(Color);                             { Call graph proc }
@@ -404,7 +404,10 @@ END;
 END.
 {
  $Log$
- Revision 1.4  2001-04-10 21:57:55  pierre
+ Revision 1.5  2001-05-04 15:43:45  pierre
+  * several more fixes
+
+ Revision 1.4  2001/04/10 21:57:55  pierre
   + first adds for Use_API define
 
  Revision 1.3  2001/04/10 21:29:55  pierre

+ 11 - 1
fvision/menus.pas

@@ -1048,6 +1048,8 @@ BEGIN
    Inherited Init(R);                                 { Call ancestor }
    State := State OR sfShadow;                        { Set shadow state }
    Options := Options OR ofPreProcess;                { View pre processes }
+   if TextModeGFV then
+     Options := Options OR ofFramed;
    Menu := AMenu;                                     { Hold menu }
    ParentMenu := AParentMenu;                         { Hold parent }
 END;
@@ -1090,6 +1092,11 @@ BEGIN
                DarkGray, False);                      { Draw higlight box }
            End;
          End;
+       End Else Begin { no text NewLine }
+         MoveChar(B, 'Ã', Color, 1);
+         MoveChar(B[1], 'Ä', Color, Size.X-2);
+         MoveChar(B[Size.X-1], '´', Color, 1);
+         WriteBuf(0, Y, Size.X, 1, B);                { Write the line }
        End;
        Inc(Y);                                        { Next line down }
        P := P^.Next;                                  { fetch next item }
@@ -1676,7 +1683,10 @@ END;
 END.
 {
  $Log$
- Revision 1.5  2001-05-04 10:46:02  pierre
+ Revision 1.6  2001-05-04 15:43:45  pierre
+  * several more fixes
+
+ Revision 1.5  2001/05/04 10:46:02  pierre
   * various fixes  for win32 api mode
 
  Revision 1.4  2001/04/10 21:57:55  pierre

+ 30 - 3
fvision/testapp.pas

@@ -36,6 +36,9 @@ PROGRAM TestApp;
   USES
      {$IFDEF OS_OS2} Os2Def, os2PmApi,  {$ENDIF}
      Objects, Drivers, Views, Menus, Dialogs, App,             { Standard GFV units }
+     {$ifdef TEST}
+     AsciiTab,
+     {$endif TEST}
      Gadgets;
 
 
@@ -43,6 +46,7 @@ CONST cmAppToolbar = 1000;
       cmWindow1    = 1001;
       cmWindow2    = 1002;
       cmWindow3    = 1003;
+      cmAscii      = 1010;
       cmCloseWindow1    = 1101;
       cmCloseWindow2    = 1102;
       cmCloseWindow3    = 1103;
@@ -56,6 +60,9 @@ TYPE
         Clock: PClockView;
         Heap: PHeapView;
         P1,P2,P3 : PGroup;
+     {$ifdef TEST}
+        ASCIIChart : PAsciiChart;
+     {$endif TEST}
       CONSTRUCTOR Init;
       PROCEDURE Idle; Virtual;
       PROCEDURE HandleEvent(var Event : TEvent);virtual;
@@ -64,6 +71,7 @@ TYPE
       PROCEDURE Window1;
       PROCEDURE Window2;
       PROCEDURE Window3;
+      PROCEDURE AsciiWindow;
       PROCEDURE CloseWindow(var P : PGroup);
     End;
 
@@ -115,6 +123,7 @@ BEGIN
        cmWindow1 : Window1;
        cmWindow2 : Window2;
        cmWindow3 : Window3;
+       cmAscii   : AsciiWindow;
        cmCloseWindow1 : CloseWindow(P1);
        cmCloseWindow2 : CloseWindow(P2);
        cmCloseWindow3 : CloseWindow(P3);
@@ -138,13 +147,14 @@ BEGIN
     NewSubMenu('~E~dit', 0, NewMenu(
       StdEditMenuItems(Nil)),                         { Standard edit menu }
     NewSubMenu('~T~est', 0, NewMenu(
+      NewItem('Ascii Chart','',kbNoKey,cmAscii,hcNoContext,
       NewItem('Window 1','',kbNoKey,cmWindow1,hcNoContext,
       NewItem('Window 2','',kbNoKey,cmWindow2,hcNoContext,
       NewItem('Window 3','',kbNoKey,cmWindow3,hcNoContext,
       NewItem('Close Window 1','',kbNoKey,cmCloseWindow1,hcNoContext,
       NewItem('Close Window 2','',kbNoKey,cmCloseWindow2,hcNoContext,
       NewItem('Close Window 3','',kbNoKey,cmCloseWindow3,hcNoContext,
-      Nil))))))),                         { Standard edit menu }
+      Nil)))))))),
     NewSubMenu('~W~indow', 0, NewMenu(
       StdWindowMenuItems(Nil)), Nil)))))));            { Standard window  menu }
 END;
@@ -185,7 +195,7 @@ BEGIN
    R.Assign(5, 1, 35, 16);                            { Assign area }
    P := New(PWindow, Init(R, 'TEST WINDOW 1', 1));    { Create a window }
    If (P <> Nil) Then Begin                           { Window valid }
-     R.Assign(5, 5, 20, 7);                           { Assign area }
+     R.Assign(5, 5, 20, 6);                           { Assign area }
      P^.Insert(New(PInputLine, Init(R, 30)));
      R.Assign(5, 8, 20, 9);                           { Assign area }
      P^.Insert(New(PRadioButtons, Init(R,
@@ -199,6 +209,20 @@ BEGIN
    P1:=P;
 END;
 
+PROCEDURE TTvDemo.AsciiWindow;
+begin
+{$ifdef TEST}
+  if ASCIIChart=nil then
+    begin
+      New(ASCIIChart, Init);
+      Desktop^.Insert(ASCIIChart);
+    end
+  else
+    ASCIIChart^.Focus;
+{$endif TEST}
+end;
+
+
 PROCEDURE TTvDemo.CloseWindow(var P : PGroup);
 BEGIN
   If Assigned(P) then
@@ -308,7 +332,10 @@ END.
 
 {
  $Log$
- Revision 1.4  2001-05-04 10:46:02  pierre
+ Revision 1.5  2001-05-04 15:43:46  pierre
+  * several more fixes
+
+ Revision 1.4  2001/05/04 10:46:02  pierre
   * various fixes  for win32 api mode
 
  Revision 1.3  2001/05/04 08:42:55  pierre

+ 112 - 46
fvision/views.pas

@@ -2041,8 +2041,15 @@ END;
 {  DrawBorder -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 17May98 LdB        }
 {---------------------------------------------------------------------------}
 PROCEDURE TView.DrawBorder;
-BEGIN
-   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE ONLY }
+VAR I : sw_integer;
+    LeftUpCorner,
+    RightUpCorner,
+    HorizontalBar,
+    VerticalBar,
+    LeftLowCorner,
+    RightLowCorner : Char;
+BEGIN
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE ONLY }
    If (TextModeGFV = FALSE) Then Begin                { GRAPHICS GFV MODE }
      BiColorRectangle(0, 0, RawSize.X, RawSize.Y,
        White, DarkGray, False);                       { Draw 3d effect }
@@ -2055,6 +2062,35 @@ BEGIN
          White, DarkGray, True);                      { Draw highlights }
      End;
    End Else Begin                                     { TEXT GFV MODE }
+     If not Focus or (GOptions AND goThickFramed = 0) then
+       begin
+         LeftUpCorner:='Ú';
+         RightUpCorner:='¿';
+         HorizontalBar:='Ä';
+         VerticalBar:='³';
+         LeftLowCorner:='À';
+         RightLowCorner:='Ù';
+       end
+     else
+       begin
+         LeftUpCorner:='É';
+         RightUpCorner:='»';
+         HorizontalBar:='Í';
+         VerticalBar:='º';
+         LeftLowCorner:='È';
+         RightLowCorner:='¼';
+       end;
+     WriteChar(0,0,LeftUpCorner,1,1);
+     WriteChar(1,0,HorizontalBar,1,Size.X-2);
+     WriteChar(Size.X-1,0,RightUpcorner,1,1);
+     For i:=1 to Size.Y -1 do
+       begin
+         WriteChar(0,i,VerticalBar,1,1);
+         WriteChar(Size.X-1,i,VerticalBar,1,1);
+       end;
+     WriteChar(0,Size.Y-1,LeftLowCorner,1,1);
+     WriteChar(1,Size.Y-1,HorizontalBar,1,Size.X-2);
+     WriteChar(Size.X-1,Size.Y-1,RightLowCorner,1,1);
    End;
    {$ENDIF}
 END;
@@ -3578,8 +3614,12 @@ BEGIN
          ForEach(@DoSetState);                        { Set each subview }
          UnLock;                                      { Unlock the view }
        End;
-     sfFocused: If (Current <> Nil) Then
-       Current^.SetState(sfFocused, Enable);          { Focus current view }
+     sfFocused: Begin
+         If (Current <> Nil) Then
+           Current^.SetState(sfFocused, Enable);          { Focus current view }
+         If TextModeGFV then
+           SetDrawMask(vdBackGnd OR vdFocus OR vdInner); { Set redraw masks }
+       End;
      sfExposed: Begin
          ForEach(@DoExpose);                          { Expose each subview }
        End;
@@ -5294,9 +5334,9 @@ END;
 {  HandleEvent -> Platforms DOS/DPMI/WIN/NT/OS2 - Updated 11Aug99 LdB       }
 {---------------------------------------------------------------------------}
 PROCEDURE TWindow.HandleEvent (Var Event: TEvent);
-VAR {$IFDEF OS_DOS} I, J: Integer; {$ENDIF} Min, Max: TPoint; Limits: TRect;
+VAR {$IFDEF NO_WINDOW} I, J: Integer; {$ENDIF} Min, Max: TPoint; Limits: TRect;
 
-   {$IFDEF OS_DOS}                                    { DOS/DPMI CODE }
+   {$IFDEF NO_WINDOW}                                    { DOS/DPMI CODE }
    PROCEDURE DragWindow (Mode: Byte);
    VAR Limits: TRect; Min, Max: TPoint;
    BEGIN
@@ -5363,14 +5403,16 @@ BEGIN
          End;
        End;
      End;
-     {$IFDEF OS_DOS}                                  { DOS/DPMI CODE ONLY }
+     {$IFDEF NO_WINDOW}                               { DOS/DPMI CODE ONLY }
      evMouseDown:                                     { MOUSE DOWN EVENT }
        If (GOptions AND goTitled <> 0) Then Begin     { Must have title area }
-         If (GOptions AND goThickFramed <> 0) Then
-           I := 5 Else                                { Thick frame adjust }
-           If (Options AND ofFramed <> 0) Then I := 1 { Frame adjust }
-             Else I := 0;                             { No frame size }
-         If (Event.Where.Y > (RawOrigin.Y + I)) AND
+         If TextModeGFV then
+           I:=0 Else
+           If (GOptions AND goThickFramed <> 0) Then
+             I := 5 Else                                { Thick frame adjust }
+             If (Options AND ofFramed <> 0) Then I := 1 { Frame adjust }
+               Else I := 0;                             { No frame size }
+         If (Event.Where.Y >= (RawOrigin.Y + I)) AND
          (Event.Where.Y < RawOrigin.Y+FontHeight+I)
          Then Begin                                   { Within top line }
            If (Current <> Nil) AND
@@ -5378,9 +5420,9 @@ BEGIN
              Then Current^.FocusFromTop Else
              FocusFromTop;
            If (Flags AND wfClose <> 0) Then Begin     { Has close icon }
-             J := I + FontWidth;                      { Set X value }
-             If (Event.Where.X > RawOrigin.X+J) AND
-             (Event.Where.X < RawOrigin.X+J+2*FontWidth)
+             J := I + 2*FontWidth;                      { Set X value }
+             If (Event.Where.X >= RawOrigin.X+J) AND
+             (Event.Where.X < RawOrigin.X+J+3*FontWidth)
              Then Begin                               { In close area }
                Event.What := evCommand;               { Command event }
                Event.Command := cmClose;              { Close command }
@@ -5640,8 +5682,8 @@ BEGIN
    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;
+     X2 := (RawOrigin.X+X2-1) DIV SysFontWidth;
+     Y2 := (RawOrigin.Y+Y2-1) DIV SysFontHeight;
      For Y := Y1 To Y2 Do
        For X := X1 To X2 Do Begin
          VideoBuf^[(Y*Drivers.ScreenWidth+X)] := (Colour shl 12) or $20;
@@ -6228,18 +6270,24 @@ BEGIN
      Bc := Col AND $F0 SHR 4;                         { Background colour }
      FillChar(S[1], 255, C);                          { Fill the string }
      If (X >= 0) AND (Y >= 0) AND ((GOptions and (goGraphical or goGraphView))=0) Then Begin
-       X := RawOrigin.X+X*FontWidth;                    { X position }
-       Y := RawOrigin.Y+Y*FontHeight;                   { Y position }
+       X := RawOrigin.X+X*SysFontWidth;                    { X position }
+       Y := RawOrigin.Y+Y*SysFontHeight;                   { Y position }
      End Else Begin
        X := RawOrigin.X + Abs(X);
        Y := RawOrigin.Y + Abs(Y);
      End;
        Tix := X DIV SysFontWidth;
        Tiy := Y DIV SysFontHeight;
+     While (Count>0) Do Begin
+       If (Count>255) Then I := 255 Else I := Count;  { Size to make }
+       S[0] := Chr(I);                                { Set string length }
        For Ti := 1 To length(S) Do Begin
          VideoBuf^[((Tiy * Drivers.ScreenWidth)+Tix)] := (GetColor(Color) shl 8) or Ord(S[Ti]);
-         Tix := Tix + SysFontWidth;
+         Inc(Tix);
        end;
+       Count := Count - I;                            { Subtract count }
+       X := X + I;                                    { Move x position }
+     End;
        UpdateScreen(false);
      {$ELSE not Use_API}
    {$IFDEF OS_DOS}
@@ -6341,7 +6389,8 @@ BEGIN
      Op2.X := RawOrigin.X+RawSize.X;                  { Right side x value }
      Op2.Y := RawOrigin.Y+RawSize.Y;                  { Right side y value }
      PState := State;                                 { Hold current state }
-     State := State AND NOT sfVisible;                { Temp not visible }
+     if not TextModeGFV then
+       State := State AND NOT sfVisible;                { Temp not visible }
      {$IFDEF OS_DOS}                                  { DOS/DPMI CODE }
      HideMouseCursor;                                 { Hide the mouse }
      {$ENDIF}
@@ -6372,13 +6421,20 @@ BEGIN
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
        HideMouseCursor;                               { Hide the mouse }
        {$ENDIF}
-       SetWriteMode(XORPut, TextModeGFV);
-       GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
-       SetWriteMode(NormalPut, TextModeGFV);
-       MoveGrow(R, Mouse);                            { Resize the view }
-       SetWriteMode(XORPut, TextModeGFV);
-       GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
-       SetWriteMode(NormalPut, TextModeGFV);
+       if not TextModeGFV then
+         begin
+           SetWriteMode(XORPut, TextModeGFV);
+           GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
+           SetWriteMode(NormalPut, TextModeGFV);
+           MoveGrow(R, Mouse);                            { Resize the view }
+           SetWriteMode(XORPut, TextModeGFV);
+           GraphRectangle(0, 0, RawSize.X, RawSize.Y, Red);
+           SetWriteMode(NormalPut, TextModeGFV);
+         end
+       else
+         begin
+           MoveGrow(R, Mouse);                            { Resize the view }
+         end;
        {$IFDEF OS_DOS}                                { DOS/DPMI CODE }
        ShowMouseCursor;                               { Show the mouse }
        {$ENDIF}
@@ -6413,10 +6469,6 @@ BEGIN
    SetState(sfDragging, False);                       { Clr dragging flag }
 END;
 
-
-
-
-
 FUNCTION TView.FontWidth: Integer;
 BEGIN
    FontWidth := SysFontWidth;
@@ -6685,26 +6737,32 @@ BEGIN
 END;
 
 PROCEDURE TWindow.DrawBorder;
-{$IFDEF OS_DOS} VAR Fc, Bc: Byte; X, Y: Integer; S: String;
+{$IFDEF NO_WINDOW} VAR Fc, Bc: Byte; X, Y: Integer; S: String;
 ViewPort: ViewPortType; {$ENDIF}
 BEGIN
-   {$IFDEF OS_DOS}
+   {$IFDEF NO_WINDOW}
    Fc := GetColor(2) AND $0F;                        { Foreground colour }
-   Bc := 9;                                           { Background colour }
-   If (Options AND ofFramed<>0) Then Y := 1
-     Else Y := 0;                                     { Initial value }
-   If (GOptions AND goThickFramed<>0) Then Inc(Y, 3); { Adjust position }
+   Bc := (GetColor(2) AND $70) SHR 4;                { Background colour }
+   If TextModeGFV then
+     Y:=0 else
+     begin
+       If (Options AND ofFramed<>0) Then Y := 1
+         Else Y := 0;                                     { Initial value }
+       If (GOptions AND goThickFramed<>0) Then Inc(Y, 3); { Adjust position }
+     end;
    ClearArea(0, Y, RawSize.X, Y+FontHeight, Bc);      { Clear background }
+   Inherited DrawBorder;
    If (Title<>Nil) AND (GOptions AND goTitled<>0)
    Then Begin                                         { View has a title }
      GetViewSettings(ViewPort, TextModeGFV);
      X := (RawSize.X DIV 2);                          { Half way point }
-     X := X - (Length(Title^)*FontWidth) DIV 2;       { Calc start point }
+     X := X - ((Length(Title^)+2)*FontWidth) DIV 2;       { Calc start point }
      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 }
+         RawOrigin.Y+Y+1-ViewPort.Y1+2, ' '+Title^+' ');      { Write the title }
      End Else Begin                                   { LEON??? }
+       WriteStr(X div SysFontWidth,0,' '+Title^+' ',2);
      End;
    End;
    If (Number>0) AND (Number<10) Then Begin           { Valid number }
@@ -6714,6 +6772,7 @@ BEGIN
        OutTextXY(RawOrigin.X+RawSize.X-2*FontWidth-ViewPort.X1,
          RawOrigin.Y+Y+1-ViewPort.Y1+2, S);           { Write number }
      End Else Begin                                   { LEON ????? }
+       WriteStr(Size.X-5,0,S,2);
      End;
    End;
    If (Flags AND wfClose<>0) Then Begin               { Close icon request }
@@ -6722,6 +6781,7 @@ BEGIN
        OutTextXY(RawOrigin.X+Y+FontWidth-ViewPort.X1,
          RawOrigin.Y+Y+1-ViewPort.Y1+2, '[*]');       { Write close icon }
      End Else Begin                                   { LEON??? }
+       WriteStr(2,0,'[*]',2);
      End;
    End;
    If (Flags AND wfZoom<>0) Then Begin
@@ -6730,13 +6790,16 @@ BEGIN
        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??? }
+       WriteStr(Size.X-5,0,'['+#24+']',2);
      End;
    End;
-   BiColorRectangle(Y+1, Y+1, RawSize.X-Y-1, Y+FontHeight,
-     White, DarkGray, False);                         { Draw 3d effect }
-   BiColorRectangle(Y+1, Y+1, RawSize.X-Y-2, Y+FontHeight-1,
-     White, DarkGray, False);                         { Draw 3d effect }
-   Inherited DrawBorder;
+   If not TextModeGFV then
+     begin
+       BiColorRectangle(Y+1, Y+1, RawSize.X-Y-1, Y+FontHeight,
+         White, DarkGray, False);                         { Draw 3d effect }
+       BiColorRectangle(Y+1, Y+1, RawSize.X-Y-2, Y+FontHeight-1,
+         White, DarkGray, False);                         { Draw 3d effect }
+     end;
    {$ENDIF}
 END;
 
@@ -6831,7 +6894,10 @@ END.
 
 {
  $Log$
- Revision 1.7  2001-05-04 10:46:03  pierre
+ Revision 1.8  2001-05-04 15:43:46  pierre
+  * several more fixes
+
+ Revision 1.7  2001/05/04 10:46:03  pierre
   * various fixes  for win32 api mode
 
  Revision 1.6  2001/05/04 08:42:56  pierre