
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5438 8e941d3f-bd1b-0410-a28a-d453659cc2b4
254 lines
7.2 KiB
ObjectPascal
254 lines
7.2 KiB
ObjectPascal
{*********************************************************}
|
|
{* Global data; base classes, defines, functions *}
|
|
{*********************************************************}
|
|
|
|
(* ***** 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 FlashFiler
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* TurboPower Software
|
|
*
|
|
* Portions created by the Initial Developer are Copyright (C) 1996-2002
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* ***** END LICENSE BLOCK ***** *)
|
|
|
|
{$I ffdefine.inc}
|
|
|
|
|
|
unit ubase;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows,
|
|
Classes,
|
|
Controls,
|
|
ExtCtrls,
|
|
StdCtrls,
|
|
ffdb,
|
|
ffclreng,
|
|
ffllbase,
|
|
fflldict,
|
|
uentity,
|
|
uconfig;
|
|
|
|
type
|
|
TMenuAction = (maServerAttach,
|
|
maServerDetach,
|
|
maDatabaseOpen,
|
|
maDatabaseClose);
|
|
|
|
var
|
|
ClosingApp : Boolean;
|
|
ServerList : TffeServerList;
|
|
FieldTypes : array[TffFieldType] of string[20];
|
|
|
|
function FFEBlockSizeIndex(const aBlockSize: LongInt): Integer;
|
|
|
|
function FFEBoolToStr(B: Boolean): TffShStr;
|
|
|
|
procedure FFEEnableContainer(Container: TWinControl; Switch: Boolean);
|
|
|
|
function FFEFieldAllowedDefault(aFieldType : TffFieldType) : Boolean;
|
|
{ Returns true if the field type is allowed to have a default value.
|
|
AutoInc, ByteArrays, and Boolean fields are not allowed to have a
|
|
default value}
|
|
|
|
function FFEFieldTypeHasDecPl(aFieldType: TffFieldType): Boolean;
|
|
{ Returns true if the given field type has a "decimal places" factor
|
|
associated with it. For example, currency and float fields. }
|
|
|
|
function FFEFieldTypeHasUnits(aFieldType: TffFieldType): Boolean;
|
|
{ Returns true if the given field type has a "number of units" factor
|
|
associated with it. For example, string and character fields. }
|
|
|
|
function FFEFieldTypeRequiresUnits(aFieldType: TffFieldType): Boolean;
|
|
{ Returns true if the given field type requires a units factor. }
|
|
|
|
function FFEFieldTypeToIndex(aFieldType: TffFieldType): Integer;
|
|
{ Converts a given FF fieldtype value to an integer index, skipping
|
|
the reserved positions }
|
|
|
|
function FFEIndexToFieldType(aIndex: Integer): TffFieldType;
|
|
{ Converts an integer index to a FF field type, skipping the
|
|
reserved positions }
|
|
|
|
function FFEVersionStr: TffShStr;
|
|
|
|
implementation
|
|
|
|
uses
|
|
ffnetmsg,
|
|
ffllprot,
|
|
DB,
|
|
uconsts,
|
|
SysUtils,
|
|
TypInfo;
|
|
|
|
var
|
|
FFEFirstReservedFieldType,
|
|
FFELastReservedFieldType: TffFieldType;
|
|
{--------}
|
|
function FFEBlockSizeIndex(const aBlockSize: LongInt): Integer;
|
|
begin
|
|
case aBlockSize of
|
|
4 * 1024: Result := 0;
|
|
8 * 1024: Result := 1;
|
|
16 * 1024: Result := 2;
|
|
32 * 1024: Result := 3;
|
|
64 * 1024: Result := 4;
|
|
else Result := -1;
|
|
end;
|
|
end;
|
|
{--------}
|
|
function FFEBoolToStr(B: Boolean): TffShStr;
|
|
begin
|
|
if B then Result := 'Y' else Result := 'N';
|
|
end;
|
|
{--------}
|
|
procedure FFEEnableContainer(Container: TWinControl; Switch: Boolean);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
with Container do
|
|
begin
|
|
Enabled := Switch;
|
|
for I := 0 to ControlCount - 1 do
|
|
begin
|
|
Controls[I].Enabled := Switch;
|
|
if (Controls[I] is TGroupBox) or (Controls[I] is TPanel) then
|
|
FFEEnableContainer(Controls[I] as TWinControl, Switch);
|
|
end;
|
|
end;
|
|
end;
|
|
{--------}
|
|
function FFEFieldAllowedDefault(aFieldType : TffFieldType) : Boolean;
|
|
begin
|
|
Result := aFieldType in [fftBoolean,
|
|
fftChar,
|
|
fftWideChar,
|
|
fftByte,
|
|
fftInt8,
|
|
fftInt16,
|
|
fftInt32,
|
|
fftWord16,
|
|
fftWord32,
|
|
fftComp,
|
|
fftSingle,
|
|
fftDouble,
|
|
fftExtended,
|
|
fftCurrency,
|
|
fftStDate,
|
|
fftStTime,
|
|
fftDateTime,
|
|
fftShortString,
|
|
fftShortAnsiStr,
|
|
fftNullString,
|
|
fftNullAnsiStr,
|
|
fftWideString];
|
|
end;
|
|
{--------}
|
|
function FFEFieldTypeHasDecPl(aFieldType: TffFieldType): Boolean;
|
|
begin
|
|
Result := aFieldType in [fftSingle,
|
|
fftDouble,
|
|
fftExtended,
|
|
{fftComp,}
|
|
fftCurrency];
|
|
end;
|
|
{--------}
|
|
function FFEFieldTypeHasUnits(aFieldType: TffFieldType): Boolean;
|
|
begin
|
|
Result := aFieldType in [fftByte,
|
|
fftWord16,
|
|
fftWord32,
|
|
fftInt8,
|
|
fftInt16,
|
|
fftInt32,
|
|
fftSingle,
|
|
fftDouble,
|
|
fftExtended,
|
|
fftComp,
|
|
fftCurrency,
|
|
fftByteArray,
|
|
fftShortString..High(TffFieldType)];
|
|
end;
|
|
{--------}
|
|
function FFEFieldTypeRequiresUnits(aFieldType: TffFieldType): Boolean;
|
|
begin
|
|
Result := aFieldType in [fftByteArray,
|
|
fftShortString..High(TffFieldType)];
|
|
end;
|
|
{--------}
|
|
function FFEFieldTypeToIndex(aFieldType: TffFieldType): Integer;
|
|
begin
|
|
if aFieldType < FFEFirstReservedFieldType then
|
|
Result := Ord(aFieldType)
|
|
else if aFieldType > FFELastReservedFieldType then
|
|
Result := Ord(aFieldType) -
|
|
(Ord(FFELastReservedFieldType) -
|
|
Ord(FFEFirstReservedFieldType) + 1)
|
|
else
|
|
Result := -1;
|
|
end;
|
|
{--------}
|
|
function FFEIndexToFieldType(aIndex: Integer): TffFieldType;
|
|
begin
|
|
if aIndex >= Ord(FFEFirstReservedFieldType) then
|
|
Result := TffFieldType(aIndex +
|
|
(Ord(FFELastReservedFieldType) -
|
|
Ord(FFEFirstReservedFieldType) + 1))
|
|
else
|
|
Result := TffFieldType(Ord(aIndex));
|
|
end;
|
|
{--------}
|
|
procedure PopulateFieldTypes;
|
|
var
|
|
I: TffFieldType;
|
|
begin
|
|
FFEFirstReservedFieldType := fftBoolean;
|
|
FFELastReservedFieldType := fftBoolean;
|
|
for I := Low(I) to High(I) do begin
|
|
FieldTypes[I] := GetEnumName(TypeInfo(TffFieldType), Ord(I));
|
|
|
|
{ Find the range of "reserved" slots. This assumes they will be
|
|
in a single contiguous block }
|
|
if Pos('FFTRESERVED', ANSIUppercase(FieldTypes[I])) = 1 then begin
|
|
if FFEFirstReservedFieldType = fftBoolean then
|
|
FFEFirstReservedFieldType := I;
|
|
end
|
|
else
|
|
if (FFEFirstReservedFieldType <> fftBoolean) and
|
|
(FFELastReservedFieldType = fftBoolean) then
|
|
FFELastReservedFieldType := Pred(I);
|
|
end;
|
|
end;
|
|
{--------}
|
|
function FFEVersionStr: TffShStr;
|
|
begin
|
|
Result := Format('%5.4f %d-bit', [FFVersionNumber / 10000, 32]);
|
|
end;
|
|
{--------}
|
|
|
|
|
|
initialization
|
|
ClosingApp := False;
|
|
PopulateFieldTypes;
|
|
end.
|
|
|