mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-12 23:42:29 +02:00
457 lines
12 KiB
ObjectPascal
457 lines
12 KiB
ObjectPascal
unit xresource;
|
|
|
|
interface
|
|
|
|
uses xlib;
|
|
|
|
|
|
{***************************************************************
|
|
*
|
|
* Quark Management
|
|
*
|
|
***************************************************************}
|
|
|
|
type
|
|
TXrmQuark = Integer;
|
|
PXrmQuark = ^TXrmQuark;
|
|
TXrmQuarkList = PXrmQuark;
|
|
|
|
|
|
Const NULLQUARK = 0 ;
|
|
|
|
type TXrmString = Pchar;
|
|
|
|
const NULLSTRING = 0;
|
|
|
|
{ find quark for string, create new quark if none already exists }
|
|
Function XrmStringToQuark( p1 : pchar ) : TXrmQuark;cdecl;
|
|
|
|
Function XrmPermStringToQuark( p1 : pchar ) : TXrmQuark;cdecl;
|
|
|
|
{ find string for quark }
|
|
Function XrmQuarkToString( p1 : TXrmQuark) : TXrmString;cdecl;
|
|
|
|
|
|
Function XrmUniqueQuark : TXrmQuark;cdecl;
|
|
|
|
{
|
|
#define XrmStringsEqual(a1, a2) (strcmp(a1, a2) == 0)
|
|
}
|
|
|
|
{***************************************************************
|
|
*
|
|
* Conversion of Strings to Lists
|
|
*
|
|
***************************************************************}
|
|
|
|
type
|
|
TXrmBinding = integer;
|
|
TXrmBindingList = ^Integer;
|
|
Const XrmBindTightly = 0;
|
|
XrmBindLoosely = 1;
|
|
|
|
procedure XrmStringToQuarkList(
|
|
p1 : pchar { string };
|
|
p2 : TXrmQuarkList { quarks_return }
|
|
);cdecl;
|
|
|
|
procedure XrmStringToBindingQuarkList(
|
|
p1 : pchar { string };
|
|
p2 : TXrmBindingList { bindings_return };
|
|
p3 : TXrmQuarkList { quarks_return }
|
|
);cdecl;
|
|
|
|
{***************************************************************
|
|
*
|
|
* Name and Class lists.
|
|
*
|
|
***************************************************************}
|
|
|
|
type TXrmName = TXrmQuark;
|
|
TXrmNameList = TXrmQuarkList ;
|
|
{
|
|
#define XrmNameToString(name) XrmQuarkToString(name)
|
|
#define XrmStringToName(string) XrmStringToQuark(string)
|
|
#define XrmStringToNameList(str, name) XrmStringToQuarkList(str, name)
|
|
}
|
|
TXrmClass = TXrmQuark;
|
|
TXrmClassList = TXrmQuarkList;
|
|
{
|
|
#define XrmClassToString(c_class) XrmQuarkToString(c_class)
|
|
#define XrmStringToClass(c_class) XrmStringToQuark(c_class)
|
|
#define XrmStringToClassList(str,c_class) XrmStringToQuarkList(str, c_class)
|
|
}
|
|
|
|
|
|
{***************************************************************
|
|
*
|
|
* Resource Representation Types and Values
|
|
*
|
|
***************************************************************}
|
|
|
|
type TXrmRepresentation = TXrmQuark ;
|
|
PXrmRepresentation = ^TXrmRepresentation;
|
|
{
|
|
#define XrmStringToRepresentation(string) XrmStringToQuark(string)
|
|
#define XrmRepresentationToString(type) XrmQuarkToString(type)
|
|
}
|
|
|
|
type TXrmValue = record
|
|
size : word;
|
|
theaddr : TXPointer;
|
|
end;
|
|
PXrmValue = ^TXrmValue;
|
|
TXrmValuePtr = PXrmValue;
|
|
|
|
|
|
{***************************************************************
|
|
*
|
|
* Resource Manager Functions
|
|
*
|
|
***************************************************************}
|
|
{
|
|
typedef struct _XrmHashBucketRec *XrmHashBucket;
|
|
typedef XrmHashBucket *XrmHashTable;
|
|
typedef XrmHashTable XrmSearchList[];
|
|
typedef struct _XrmHashBucketRec *XrmDatabase;
|
|
}
|
|
Type TXrmHashBucket = pointer;
|
|
TXrmHashTable = ^TXrmHashBucket;
|
|
TXrmSearchList = ^TXrmHashTable;
|
|
TXrmDatabase = pointer;
|
|
PXrmDatabase = ^TXrmDatabase;
|
|
|
|
procedure XrmDestroyDatabase(
|
|
p1 : TXrmDatabase { database }
|
|
);cdecl;
|
|
|
|
Procedure XrmQPutResource(
|
|
p1 : PXrmDatabase { database };
|
|
p2 : TXrmBindingList { bindings };
|
|
p3 : TXrmQuarkList { quarks };
|
|
p4 : TXrmRepresentation { type };
|
|
p5 : PXrmValue { value }
|
|
);cdecl;
|
|
|
|
Procedure XrmPutResource(
|
|
p1 : PXrmDatabase { database };
|
|
p2 : pchar { specifier };
|
|
p3 : pchar { type };
|
|
p4 : PXrmValue { value }
|
|
);cdecl;
|
|
|
|
Procedure XrmQPutStringResource(
|
|
p1 : PXrmDatabase { database };
|
|
p2 : TXrmBindingList { bindings };
|
|
p3 : TXrmQuarkList { quarks };
|
|
p4 : Pchar { value }
|
|
);cdecl;
|
|
|
|
Procedure XrmPutStringResource(
|
|
P1 : PXrmDatabase { database };
|
|
p2,p3 : pchar
|
|
);cdecl;
|
|
|
|
Procedure XrmPutLineResource(
|
|
p1 : PXrmDatabase { database };
|
|
p2 : pchar { line }
|
|
);cdecl;
|
|
|
|
Function XrmQGetResource(
|
|
p1 : PXrmDatabase { database };
|
|
p2 : TXrmNameList { quark_name };
|
|
p3 : TXrmClassList { quark_class };
|
|
p4 : PXrmRepresentation { quark_type_return };
|
|
p5 : PXrmValue { value_return }
|
|
) : Integer;cdecl;
|
|
|
|
Function XrmGetResource(
|
|
p1 : TXrmDatabase { database };
|
|
p2 : pchar { str_name };
|
|
p3 : pchar { str_class };
|
|
p4 : ppchar { str_type_return };
|
|
p5 : PXrmValue { value_return }
|
|
) : Tbool;cdecl;
|
|
|
|
Function XrmQGetSearchList(
|
|
p1 : TXrmDatabase { database };
|
|
p2 : TXrmNameList { names };
|
|
p3 : TXrmClassList { classes };
|
|
p4 : TXrmSearchList { list_return };
|
|
p5 : integer { list_length }
|
|
) : Tbool;cdecl;
|
|
|
|
Function XrmQGetSearchResource(
|
|
P1 : TXrmSearchList { list };
|
|
p2 : TXrmName { name };
|
|
p3 : TXrmClass { class };
|
|
p4 : PXrmRepresentation { type_return };
|
|
p5 : PXrmValue { value_return }
|
|
) : TBool;cdecl;
|
|
|
|
{***************************************************************
|
|
*
|
|
* Resource Database Management
|
|
*
|
|
***************************************************************}
|
|
|
|
procedure XrmSetDatabase(
|
|
p1 : PDisplay { display };
|
|
p2 : TXrmDatabase { database }
|
|
);cdecl;
|
|
|
|
Function XrmGetDatabase(
|
|
p1 : PDisplay { display }
|
|
) : TXrmDatabase;cdecl;
|
|
|
|
Function XrmGetFileDatabase(
|
|
p1 : pchar { filename }
|
|
) : TXrmDatabase ;cdecl;
|
|
|
|
Function XrmCombineFileDatabase(
|
|
p1 : pchar { filename };
|
|
p2 : PXrmDatabase { target };
|
|
p3 : TBool { override }
|
|
) : TStatus ;cdecl;
|
|
|
|
function XrmGetStringDatabase(
|
|
p1 : pchar { data } { null terminated string }
|
|
) : TXrmDatabase ;cdecl;
|
|
|
|
Procedure XrmPutFileDatabase(
|
|
p1 : TXrmDatabase { database };
|
|
p2: pchar { filename }
|
|
);cdecl;
|
|
|
|
Procedure XrmMergeDatabases(
|
|
p1 : TXrmDatabase { source_db };
|
|
p2 : PXrmDatabase { target_db }
|
|
);cdecl;
|
|
|
|
procedure XrmCombineDatabase(
|
|
p1 : TXrmDatabase { source_db };
|
|
p2 : PXrmDatabase { target_db };
|
|
p3 : TBool { override }
|
|
);cdecl;
|
|
|
|
const
|
|
XrmEnumAllLevels = 0;
|
|
XrmEnumOneLevel = 1;
|
|
{
|
|
Function XrmEnumerateDatabase(
|
|
XrmDatabase { db };
|
|
XrmNameList { name_prefix };
|
|
XrmClassList { class_prefix };
|
|
int { mode };
|
|
Bool (*)(#if NeedNestedPrototypes
|
|
XrmDatabase* { db };
|
|
XrmBindingList { bindings };
|
|
XrmQuarkList { quarks };
|
|
XrmRepresentation* { type };
|
|
XrmValue* { value };
|
|
XPointer { closure }
|
|
|
|
) { proc };
|
|
XPointer { closure }
|
|
) : TBool;
|
|
}
|
|
|
|
Function XrmLocaleOfDatabase(
|
|
P1 : TXrmDatabase { database }
|
|
) : Pchar;cdecl;
|
|
|
|
|
|
{***************************************************************
|
|
*
|
|
* Command line option mapping to resource entries
|
|
*
|
|
***************************************************************}
|
|
|
|
Const
|
|
XrmoptionNoArg = 0; { Value is specified in OptionDescRec.value }
|
|
XrmoptionIsArg = 1; { Value is the option string itself }
|
|
XrmoptionStickyArg = 2; { Value is characters immediately following option }
|
|
XrmoptionSepArg = 3; { Value is next argument in argv }
|
|
XrmoptionResArg = 4; { Resource and value in next argument in argv }
|
|
XrmoptionSkipArg = 5; { Ignore this option and the next argument in argv }
|
|
XrmoptionSkipLine = 6; { Ignore this option and the rest of argv }
|
|
XrmoptionSkipNArgs = 7; { Ignore this option and the next
|
|
OptionDescRes.value arguments in argv }
|
|
Type TXrmOptionKind = Integer;
|
|
|
|
TXrmOptionDescRec = record
|
|
option : pchar; { Option abbreviation in argv }
|
|
specifier : pchar; { Resource specifier }
|
|
argKind : TXrmOptionKind; { Which style of option it is }
|
|
value : TXpointer; { Value to provide if XrmoptionNoArg }
|
|
end;
|
|
PXrmOptionDescRec= ^TXrmOptionDescRec;
|
|
TXrmOptionDescList = PXrmOptionDescRec;
|
|
|
|
|
|
Procedure XrmParseCommand(
|
|
p1 : TXrmDatabase { database };
|
|
p2 : TXrmOptionDescList { table };
|
|
p3 : integer { table_count };
|
|
p4 : pchar { name };
|
|
p5 : Pointer { argc_in_out };
|
|
p6 : ppchar { argv_in_out }
|
|
);cdecl;
|
|
|
|
Implementation
|
|
|
|
Function XrmStringToQuark( p1 : pchar ) : TXrmQuark; cdecl; external;
|
|
Function XrmPermStringToQuark( p1 : pchar ) : TXrmQuark; cdecl; external;
|
|
Function XrmQuarkToString( p1 : TXrmQuark) : TXrmString; cdecl; external;
|
|
|
|
Function XrmUniqueQuark : TXrmQuark; cdecl; external;
|
|
procedure XrmStringToQuarkList(
|
|
p1 : pchar { string };
|
|
p2 : TXrmQuarkList { quarks_return }
|
|
); cdecl; external;
|
|
|
|
procedure XrmStringToBindingQuarkList(
|
|
p1 : pchar { string };
|
|
p2 : TXrmBindingList { bindings_return };
|
|
p3 : TXrmQuarkList { quarks_return }
|
|
); cdecl; external;
|
|
procedure XrmDestroyDatabase(
|
|
p1 : TXrmDatabase { database }
|
|
); cdecl; external;
|
|
|
|
Procedure XrmQPutResource(
|
|
p1 : PXrmDatabase { database };
|
|
p2 : TXrmBindingList { bindings };
|
|
p3 : TXrmQuarkList { quarks };
|
|
p4 : TXrmRepresentation { type };
|
|
p5 : PXrmValue { value }
|
|
); cdecl; external;
|
|
|
|
Procedure XrmPutResource(
|
|
p1 : PXrmDatabase { database };
|
|
p2 : pchar { specifier };
|
|
p3 : pchar { type };
|
|
p4 : PXrmValue { value }
|
|
); cdecl; external;
|
|
|
|
Procedure XrmQPutStringResource(
|
|
p1 : PXrmDatabase { database };
|
|
p2 : TXrmBindingList { bindings };
|
|
p3 : TXrmQuarkList { quarks };
|
|
p4 : Pchar { value }
|
|
); cdecl; external;
|
|
|
|
procedure XrmPutStringResource(
|
|
P1 : PXrmDatabase { database };
|
|
p2,p3 : pchar
|
|
); cdecl; external;
|
|
|
|
Procedure XrmPutLineResource(
|
|
p1 : PXrmDatabase { database };
|
|
p2 : pchar { line }
|
|
); cdecl; external;
|
|
|
|
Function XrmQGetResource(
|
|
p1 : PXrmDatabase { database };
|
|
p2 : TXrmNameList { quark_name };
|
|
p3 : TXrmClassList { quark_class };
|
|
p4 : PXrmRepresentation { quark_type_return };
|
|
p5 : PXrmValue { value_return }
|
|
) : Integer; cdecl; external;
|
|
|
|
Function XrmGetResource(
|
|
p1 : TXrmDatabase { database };
|
|
p2 : pchar { str_name };
|
|
p3 : pchar { str_class };
|
|
p4 : ppchar { str_type_return };
|
|
p5 : PXrmValue { value_return }
|
|
) : Tbool; cdecl; external;
|
|
|
|
Function XrmQGetSearchList(
|
|
p1 : TXrmDatabase { database };
|
|
p2 : TXrmNameList { names };
|
|
p3 : TXrmClassList { classes };
|
|
p4 : TXrmSearchList { list_return };
|
|
p5 : integer { list_length }
|
|
) : Tbool; cdecl; external;
|
|
|
|
Function XrmQGetSearchResource(
|
|
P1 : TXrmSearchList { list };
|
|
p2 : TXrmName { name };
|
|
p3 : TXrmClass { class };
|
|
p4 : PXrmRepresentation { type_return };
|
|
p5 : PXrmValue { value_return }
|
|
) : TBool; cdecl; external;
|
|
|
|
procedure XrmSetDatabase(
|
|
p1 : PDisplay { display };
|
|
p2 : TXrmDatabase { database }
|
|
); cdecl; external;
|
|
|
|
Function XrmGetDatabase(
|
|
p1 : PDisplay { display }
|
|
) : TXrmDatabase; cdecl; external;
|
|
|
|
Function XrmGetFileDatabase(
|
|
p1 : pchar { filename }
|
|
) : TXrmDatabase ; cdecl; external;
|
|
|
|
Function XrmCombineFileDatabase(
|
|
p1 : pchar { filename };
|
|
p2 : PXrmDatabase { target };
|
|
p3 : TBool { override }
|
|
) : TStatus ; cdecl; external;
|
|
|
|
function XrmGetStringDatabase(
|
|
p1 : pchar { data } { null terminated string }
|
|
) : TXrmDatabase ; cdecl; external;
|
|
|
|
Procedure XrmPutFileDatabase(
|
|
p1 : TXrmDatabase { database };
|
|
p2: pchar { filename }
|
|
); cdecl; external;
|
|
|
|
Procedure XrmMergeDatabases(
|
|
p1 : TXrmDatabase { source_db };
|
|
p2 : PXrmDatabase { target_db }
|
|
); cdecl; external;
|
|
|
|
procedure XrmCombineDatabase(
|
|
p1 : TXrmDatabase { source_db };
|
|
p2 : PXrmDatabase { target_db };
|
|
p3 : TBool { override }
|
|
); cdecl; external;
|
|
|
|
{
|
|
Function XrmEnumerateDatabase(
|
|
XrmDatabase { db };
|
|
XrmNameList { name_prefix };
|
|
XrmClassList { class_prefix };
|
|
int { mode };
|
|
Bool (*)(#if NeedNestedPrototypes
|
|
XrmDatabase* { db };
|
|
XrmBindingList { bindings };
|
|
XrmQuarkList { quarks };
|
|
XrmRepresentation* { type };
|
|
XrmValue* { value };
|
|
XPointer { closure }
|
|
|
|
) { proc };
|
|
XPointer { closure }
|
|
) : TBool; cdecl; external;
|
|
}
|
|
|
|
Function XrmLocaleOfDatabase(
|
|
P1 : TXrmDatabase { database }
|
|
) : Pchar; cdecl; external;
|
|
|
|
Procedure XrmParseCommand(
|
|
p1 : TXrmDatabase { database };
|
|
p2 : TXrmOptionDescList { table };
|
|
p3 : integer { table_count };
|
|
p4 : pchar { name };
|
|
p5 : Pointer { argc_in_out };
|
|
p6 : ppchar { argv_in_out }
|
|
); cdecl; external;
|
|
|
|
end. |