{********************************************************************}
{                                                                    }
{ Author:     Donn Ault                                              }
{ Date:       12/18/91                                               }
{ Purpose:    Extend clock view to show am/pm                        }
{             Extend heap view to include commas (more readable)     }
{ Copyright:  Donated to the public domain                           }
{                                                                    }
{ Notes:                                                             }
{  + In your main program you will need more space for the expanded  }
{    views.  The old clock uses 9 characters while the new           }
{    clock uses 12.  The old heap viewer uses 9 while the new one    }
{    uses 13.  Change the R.B.X occordingly.                         }
{                                                                    }
{********************************************************************}

unit xgadgets;

{$F+,O+,S-,D-}

interface

uses Dos, Objects, Views, App, gadgets;

type
  PXHeapView = ^TXHeapView;
  TXHeapView = object (THeapView)
    Procedure Draw; Virtual;
    Function  Comma ( N : LongInt ) : String;
  End;

  PXClockView = ^TXClockView;
  TXClockView = Object (TClockView)
    am : Char;
    Function FormatTimeStr (h,m,s : word) : String; Virtual;
    Procedure Draw; Virtual;
  End;

implementation

uses Drivers;

Function TXHeapView.Comma ( n : LongInt) : String;
Var num, loc : Byte;
    s : String;
    t : String;
Begin
  Str (n,s);
  Str (n:Size.X,t);

  num := length(s) div 3;
  if (length(s) mod 3) = 0 then dec (num);

  delete (t,1,num);
  loc := length(t)-2;

  while num > 0 do
  Begin
    Insert (',',t,loc);
    dec (num);
    dec (loc,3);
  End;

  Comma := t;
End;

procedure TXHeapView.Draw;
var
  S: String;
  B: TDrawBuffer;
  C: Byte;

begin
  OldMem := MemAvail;

  S := Comma (OldMem);
  C := GetColor(2);
  MoveChar(B, ' ', C, Size.X);
  MoveStr(B, S, C);
  WriteLine(0, 0, Size.X, 1, B);
end;

procedure TXClockView.Draw;
var
  B: TDrawBuffer;
  C: Byte;
begin
  C := GetColor(2);
  MoveChar(B, ' ', C, Size.X);
  MoveStr(B, TimeStr + ' '+am+'m', C);     { Modified line }
  WriteLine(0, 0, Size.X, 1, B);
end;

Function TXClockView.FormatTimeStr (h,m,s: Word) : String;
Begin
  if h = 0 then
  Begin
    h := 12;
    am := 'a';
  End
  Else if h > 12 then
  Begin
    dec (h,12);
    am := 'p';
  End
  Else am := 'a';
  FormatTimeStr := TClockView.FormatTimeStr (h,m,s);
End;

End.

