{*********************************************************}
{*                   OVCUSER.PAS 4.06                    *}
{*********************************************************}

{* ***** BEGIN LICENSE BLOCK *****                                            *}
{* Version: MPL 1.1                                                           *}
{*                                                                            *}
{* The contents of this file are subject to the Mozilla Public License        *}
{* Version 1.1 (the "License"); you may not use this file except in           *}
{* compliance with the License. You may obtain a copy of the License at       *}
{* http://www.mozilla.org/MPL/                                                *}
{*                                                                            *}
{* Software distributed under the License is distributed on an "AS IS" basis, *}
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License   *}
{* for the specific language governing rights and limitations under the       *}
{* License.                                                                   *}
{*                                                                            *}
{* The Original Code is TurboPower Orpheus                                    *}
{*                                                                            *}
{* The Initial Developer of the Original Code is TurboPower Software          *}
{*                                                                            *}
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002    *}
{* TurboPower Software Inc. All Rights Reserved.                              *}
{*                                                                            *}
{* Contributor(s):                                                            *}
{*                                                                            *}
{* ***** END LICENSE BLOCK *****                                              *}

{$I OVC.INC}

{$B-} {Complete Boolean Evaluation}
{$I+} {Input/Output-Checking}
{$P+} {Open Parameters}
{$T-} {Typed @ Operator}
{.W-} {Windows Stack Frame}
{$X+} {Extended Syntax}

unit ovcuser;
  {-User data class}

interface

uses
  SysUtils,
  OvcData;

type
  {class for implementing user-defined mask and substitution characters}
  TOvcUserData = class(TObject)
  {.Z+}
  protected {private}
    FUserCharSets : TUserCharSets;
    FForceCase    : TForceCase;
    FSubstChars   : TSubstChars;

    {property methods}
    function GetForceCase(Index : TForceCaseRange) : TCaseChange;
      {-get the case changing behavior of the specified user mask character}
    function GetSubstChar(Index : TSubstCharRange) : AnsiChar;
      {-get the meaning of the specified substitution character}
    function GetUserCharSet(Index : TUserSetRange) : TCharSet;
      {-get the specified user-defined character set}
    procedure SetForceCase(Index : TForceCaseRange; CC : TCaseChange);
      {-set the case changing behavior of the specified user mask character}
    procedure SetSubstChar(Index : TSubstCharRange; SC : AnsiChar);
      {-set the meaning of the specified substitution character}
    procedure SetUserCharSet(Index : TUserSetRange; const US : TCharSet);
      {-set the specified user-defined character set}

  public
    constructor Create;
  {.Z+}

    property ForceCase[Index : TForceCaseRange] : TCaseChange
      read GetForceCase
      write SetForceCase;

    property SubstChars[Index : TSubstCharRange] : AnsiChar
      read GetSubstChar
      write SetSubstChar;

    property UserCharSet[Index : TUserSetRange] : TCharSet
      read GetUserCharSet
      write SetUserCharSet;
  end;

var
  {global default user data object}
  OvcUserData : TOvcUserData;


implementation


{*** TOvcUserData ***}

const
  DefUserCharSets : TUserCharSets = (
      {User1} [#1..#255], {User2} [#1..#255], {User3} [#1..#255],
      {User4} [#1..#255], {User5} [#1..#255], {User6} [#1..#255],
      {User7} [#1..#255], {User8} [#1..#255] );

  DefForceCase : TForceCase = (
      mcNoChange, mcNoChange, mcNoChange, mcNoChange,
      mcNoChange, mcNoChange, mcNoChange, mcNoChange);

  DefSubstChars : TSubstChars = (
      Subst1, Subst2, Subst3, Subst4, Subst5, Subst6, Subst7, Subst8);

constructor TOvcUserData.Create;
begin
  inherited Create;

  FUserCharSets := DefUserCharSets;
  FForceCase    := DefForceCase;
  FSubstChars   := DefSubstChars;
end;

function TOvcUserData.GetForceCase(Index : TForceCaseRange) : TCaseChange;
  {-get the case changing behavior of the specified user mask character}
begin
  case Index of
    pmUser1..pmUser8 : Result := FForceCase[Index];
  else
    Result := mcNoChange;
  end;
end;

function TOvcUserData.GetSubstChar(Index : TSubstCharRange) : AnsiChar;
  {-get the meaning of the specified substitution character}
begin
  case Index of
    Subst1..Subst8 : Result := FSubstChars[Index];
  else
    Result := #0;
  end;
end;

function TOvcUserData.GetUserCharSet(Index : TUserSetRange) : TCharSet;
  {-get the specified user-defined character set}
begin
  case Index of
    pmUser1..pmUser8 : Result := FUserCharSets[Index];
  end;
end;

procedure TOvcUserData.SetForceCase(Index : TForceCaseRange; CC : TCaseChange);
  {-set the case changing behavior of the specified user mask character}
begin
  case Index of
    pmUser1..pmUser8 : FForceCase[Index] := CC;
  end;
end;

procedure TOvcUserData.SetSubstChar(Index : TSubstCharRange; SC : AnsiChar);
  {-set the meaning of the specified substitution character}
begin
  case Index of
    Subst1..Subst8 : FSubstChars[Index] := SC;
  end;
end;

procedure TOvcUserData.SetUserCharSet(Index : TUserSetRange; const US : TCharSet);
  {-set the specified user-defined character set}
begin
  case Index of
    pmUser1..pmUser8 : FUserCharSets[Index] := US-[#0];
  end;
end;


{*** exit procedure ***}

procedure DestroyGlobalUserData; far;
begin
  OvcUserData.Free
end;


initialization
  {create instance of default user data class}
  OvcUserData := TOvcUserData.Create;

finalization
  DestroyGlobalUserData;
end.
