mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 18:29:28 +02:00
fcl-db/dbase: cosmetic: reorganize struct comments so they show up browsing code
git-svn-id: trunk@24279 -
This commit is contained in:
parent
183d9ebfe1
commit
3e2cedaf59
@ -123,7 +123,7 @@ const
|
||||
DbfLocale_Bul868 = $020000;
|
||||
|
||||
//*************************************************************************//
|
||||
// DB3/DB4/FoxPro/Visual Foxpro Language ID to CodePage conversion table
|
||||
// DB3/DB4/FoxPro Language ID to CodePage conversion table
|
||||
// Visual FoxPro docs call language ID "code page mark"
|
||||
// or "code page identifier"
|
||||
//*************************************************************************//
|
||||
@ -165,6 +165,7 @@ const
|
||||
{F0} 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
{F8} 0, 0, 0, 0, 0, 0, 0, 0);
|
||||
|
||||
|
||||
{$ifdef FPC_VERSION}
|
||||
{$ifdef VER1_0}
|
||||
LANG_ARABIC = $01;
|
||||
@ -469,6 +470,7 @@ const
|
||||
// reverse convert routines
|
||||
//*************************************************************************//
|
||||
|
||||
// Visual DBaseVII specific; the IsFoxPro means a FoxPro codepage, which DB7 supports
|
||||
function ConstructLangName(CodePage: Integer; Locale: LCID; IsFoxPro: Boolean): string;
|
||||
|
||||
function ConstructLangId(CodePage: Integer; Locale: LCID; IsFoxPro: Boolean): Byte;
|
||||
@ -521,7 +523,7 @@ begin
|
||||
end;
|
||||
|
||||
const
|
||||
// range of Dbase locales; these are INCLUSIVE (the rest are FoxPro?)
|
||||
// range of Dbase locales; these are INCLUSIVE (the rest are FoxPro)
|
||||
dBase_RegionCount = 4;
|
||||
dBase_Regions: array[0..dBase_RegionCount*2-1] of Byte =
|
||||
($00, $00,
|
||||
@ -529,9 +531,8 @@ const
|
||||
$69, $69, // a lonely dbf entry :-)
|
||||
$80, $90);
|
||||
|
||||
function FindLangId(CodePage, Info2: Cardinal; Info2Table: PCardinal; IsFoxPro: Boolean): Byte;
|
||||
// Info2: desired locale
|
||||
// Info2Table: pointer to lookup array: language ID=>locale cardinal
|
||||
function FindLangId(CodePage, DesiredLocale: Cardinal; LanguageIDToLocaleTable: PCardinal; IsFoxPro: Boolean): Byte;
|
||||
// DesiredLocale: pointer to lookup array: language ID=>locale
|
||||
var
|
||||
LangID, Region, FoxRes, DbfRes: Integer;
|
||||
begin
|
||||
@ -549,7 +550,7 @@ begin
|
||||
// what a mess :-(
|
||||
//todo: verify this for visual foxpro; we never seem to get a result
|
||||
if ((LangId_To_CodePage[LangID] = CodePage) or (CodePage = 0)) and
|
||||
(PCardinal(PChar(Info2Table)+(LangID*4))^ = Info2) then
|
||||
(PCardinal(PChar(LanguageIDToLocaleTable)+(LangID*4))^ = DesiredLocale) then
|
||||
if LangID <= dBase_Regions[Region+1] then
|
||||
DbfRes := Byte(LangID)
|
||||
else
|
||||
@ -557,7 +558,7 @@ begin
|
||||
end;
|
||||
// if we can find langid in other set, use it
|
||||
if (DbfRes <> 0) and (not IsFoxPro or (FoxRes = 0)) then
|
||||
Result := DbfRes //if not using foxpro
|
||||
Result := DbfRes //... not using foxpro
|
||||
else {(DbfRes = 0) or (IsFoxPro and (FoxRes <> 0)}
|
||||
if (FoxRes <> 0) {and (IsFoxPro or (DbfRes = 0)} then
|
||||
Result := FoxRes
|
||||
@ -565,45 +566,6 @@ begin
|
||||
Result := 0;
|
||||
end;
|
||||
|
||||
{
|
||||
function FindLangId(CodePage, Info2: Cardinal; Info2Table: PCardinal; IsFoxPro: Boolean): Byte;
|
||||
var
|
||||
I, Region, lEnd: Integer;
|
||||
EndReached: Boolean;
|
||||
begin
|
||||
Region := 0;
|
||||
Result := 0;
|
||||
repeat
|
||||
// determine region to scan
|
||||
if IsFoxPro then
|
||||
begin
|
||||
// foxpro, in between dbase regions
|
||||
I := dBase_Regions[Region+1] + 1;
|
||||
lEnd := dBase_Regions[Region+2] - 1;
|
||||
EndReached := Region = dBase_RegionCount*2-4;
|
||||
end else begin
|
||||
// dBase, select regions
|
||||
I := dBase_Regions[Region];
|
||||
lEnd := dBase_Regions[Region+1];
|
||||
EndReached := Region = dBase_RegionCount*2-2;
|
||||
end;
|
||||
// scan
|
||||
repeat
|
||||
// it seems delphi does not properly understand pointers?
|
||||
// what a mess :-(
|
||||
if (LangId_To_CodePage[I] = CodePage) and (PCardinal(PChar(Info2Table)+(I*4))^ = Info2) then
|
||||
Result := Byte(I);
|
||||
Inc(I);
|
||||
// lEnd is included in range
|
||||
until (Result <> 0) or (I > lEnd);
|
||||
// goto next region
|
||||
if (Result = 0) then
|
||||
Inc(Region, 2);
|
||||
// found or end?
|
||||
until (Result <> 0) or EndReached;
|
||||
end;
|
||||
}
|
||||
|
||||
function ConstructLangId(CodePage: Integer; Locale: LCID; IsFoxPro: Boolean): Byte;
|
||||
begin
|
||||
// locale: lower 16bits only, with default sorting
|
||||
@ -639,6 +601,12 @@ begin
|
||||
else
|
||||
CodePage := StrToInt(CodePageStr);
|
||||
// find lang id
|
||||
//todo: debug, remove
|
||||
writeln('');
|
||||
writeln('getlangid_fromLangName');
|
||||
writeln('codepagestr ',codepagestr);
|
||||
writeln('subtype: ',subtype);
|
||||
writeln('codepage: ',codepage);
|
||||
Result := FindLangId(CodePage, SubType, @LangId_To_LocaleStr[0], IsFoxPro);
|
||||
end;
|
||||
|
||||
|
@ -31,10 +31,10 @@ type
|
||||
MultiUse : Integer; // 16-19
|
||||
LastUserID : Integer; // 20-23
|
||||
Dummy2 : array[24..27] of Byte;
|
||||
MDXFlag : Byte; // 28 Flags:
|
||||
// $01: mdx (or cdx for VFP) index file present
|
||||
// $02: (Visual FoxPro): associated memo file?
|
||||
// $04: (Visual FoxPro): is this a dbc/database container
|
||||
MDXFlag : Byte; // 28 Flags:
|
||||
Language : Byte; // 29 code page mark
|
||||
Dummy3 : Word; // 30-31
|
||||
end;
|
||||
@ -59,25 +59,25 @@ type
|
||||
FieldOffset : Integer; // 12..15
|
||||
FieldSize : Byte; // 16
|
||||
FieldPrecision : Byte; // 17, also known as decimal count
|
||||
VisualFoxProFlags : Byte; // 18 Field Flags; flags can be combined
|
||||
// $01: system solumn (not user-visible)
|
||||
// $02: column can store null values
|
||||
// $04: binary column, e.g. don't interpret codepage (char/memo fields)
|
||||
// $0C: column is autoincrementing (only integer fields)
|
||||
AutoIncrementNext : Byte; // 19 VFP only: autoincrement value
|
||||
VisualFoxProFlags : Byte; // 18 Field Flags; flags can be combined
|
||||
// (!!not the next value for a new record!!); the next is calculated by
|
||||
// adding AutoIncrementStep first.
|
||||
// Value covers bytes 19..22 (so no WorkAreaID,Reserved1 for VFP)
|
||||
WorkAreaID : Byte; // 20
|
||||
AutoIncrementNext : Byte; // 19 VFP only: autoincrement value
|
||||
// WorkAreaID only for DBase III, is always $01
|
||||
WorkAreaID : Byte; // 20
|
||||
Reserved1 : array[21..22] of Byte;
|
||||
AutoIncrementStep : Byte; // 23 VFP only: step value for autoincrement
|
||||
Reserved2 : array[24..30] of Byte;
|
||||
MDXIndexField : Byte; //31
|
||||
// DBase IV:
|
||||
// $00: no key for this field;
|
||||
// $01: key exists for this field in MDX index file
|
||||
// todo: implement this??
|
||||
MDXIndexField : Byte; //31
|
||||
end;
|
||||
//====================================================================
|
||||
// OH 2000-11-15 dBase7 support. Header Update (add fields like Next AutoInc Value)
|
||||
|
Loading…
Reference in New Issue
Block a user