]>
Commit | Line | Data |
---|---|---|
95d675b5 | 1 | /*++\r |
2 | \r | |
3e99020d | 3 | Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>\r |
4b1e1121 | 4 | This program and the accompanying materials \r |
95d675b5 | 5 | are licensed and made available under the terms and conditions of the BSD License \r |
6 | which accompanies this distribution. The full text of the license may be found at \r | |
7 | http://opensource.org/licenses/bsd-license.php \r | |
8 | \r | |
9 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r | |
10 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r | |
11 | \r | |
12 | Module Name:\r | |
13 | \r | |
14 | StringDB.h\r | |
15 | \r | |
16 | Abstract:\r | |
17 | \r | |
18 | Common defines and prototypes for string database management\r | |
19 | \r | |
20 | --*/\r | |
21 | \r | |
22 | #ifndef _STRING_DB_H_\r | |
23 | #define _STRING_DB_H_\r | |
24 | \r | |
25 | #define LANGUAGE_NAME_STRING_NAME L"$LANGUAGE_NAME"\r | |
26 | #define PRINTABLE_LANGUAGE_NAME_STRING_NAME L"$PRINTABLE_LANGUAGE_NAME"\r | |
27 | \r | |
28 | typedef CHAR16 WCHAR;\r | |
29 | \r | |
30 | #define NARROW_CHAR 0xFFF0\r | |
31 | #define WIDE_CHAR 0xFFF1\r | |
32 | #define NON_BREAKING_CHAR 0xFFF2\r | |
33 | #define GLYPH_WIDTH 8\r | |
34 | #define GLYPH_HEIGHT 19\r | |
35 | \r | |
36 | #define STRING_DB_KEY (('S' << 24) | ('D' << 16) | ('B' << 8) | 'K')\r | |
37 | //\r | |
38 | // Version supported by this tool\r | |
39 | //\r | |
40 | #define STRING_DB_VERSION 0x00010000\r | |
41 | \r | |
42 | #define STRING_DB_MAJOR_VERSION_MASK 0xFFFF0000\r | |
43 | #define STRING_DB_MINOR_VERSION_MASK 0x0000FFFF\r | |
44 | \r | |
45 | #define DEFINE_STR L"// #define"\r | |
46 | \r | |
47 | #define EFI_STRING_ID_BEGIN 0x01\r | |
48 | \r | |
49 | //\r | |
50 | // This is the header that gets written to the top of the\r | |
51 | // output binary database file.\r | |
52 | //\r | |
53 | typedef struct {\r | |
54 | UINT32 Key;\r | |
55 | UINT32 HeaderSize;\r | |
56 | UINT32 Version;\r | |
57 | UINT32 NumStringIdenfiers;\r | |
58 | UINT32 StringIdentifiersSize;\r | |
59 | UINT32 NumLanguages;\r | |
60 | } STRING_DB_HEADER;\r | |
61 | \r | |
62 | //\r | |
63 | // When we write out data to the database, we have a UINT16 identifier, which\r | |
64 | // indicates what follows, followed by the data. Here's the structure.\r | |
65 | //\r | |
66 | typedef struct {\r | |
67 | UINT16 DataType;\r | |
68 | UINT16 Reserved;\r | |
69 | } DB_DATA_ITEM_HEADER;\r | |
70 | \r | |
71 | #define DB_DATA_TYPE_INVALID 0x0000\r | |
72 | #define DB_DATA_TYPE_STRING_IDENTIFIER 0x0001\r | |
73 | #define DB_DATA_TYPE_LANGUAGE_DEFINITION 0x0002\r | |
74 | #define DB_DATA_TYPE_STRING_DEFINITION 0x0003\r | |
75 | #define DB_DATA_TYPE_LAST DB_DATA_TYPE_STRING_DEFINITION\r | |
76 | \r | |
77 | //\r | |
78 | // We have to keep track of a list of languages, each of which has its own\r | |
79 | // list of strings. Define a structure to keep track of all languages and\r | |
80 | // their list of strings.\r | |
81 | //\r | |
82 | typedef struct _STRING_LIST {\r | |
83 | struct _STRING_LIST *Next;\r | |
84 | UINT32 Size; // number of bytes in string, including null terminator\r | |
85 | WCHAR *LanguageName;\r | |
86 | WCHAR *StringName; // for example STR_ID_TEXT1\r | |
87 | WCHAR *Scope; //\r | |
88 | WCHAR *Str; // the actual string\r | |
89 | UINT16 Flags; // properties of this string (used, undefined)\r | |
90 | } STRING_LIST;\r | |
91 | \r | |
92 | typedef struct _LANGUAGE_LIST {\r | |
93 | struct _LANGUAGE_LIST *Next;\r | |
94 | WCHAR *LanguageName;\r | |
95 | WCHAR *PrintableLanguageName;\r | |
96 | WCHAR *SecondaryLanguageList;\r | |
97 | STRING_LIST *String;\r | |
98 | STRING_LIST *LastString;\r | |
99 | } LANGUAGE_LIST;\r | |
100 | \r | |
101 | //\r | |
102 | // We also keep track of all the string identifier names, which we assign unique\r | |
103 | // values to. Create a structure to keep track of them all.\r | |
104 | //\r | |
105 | typedef struct _STRING_IDENTIFIER {\r | |
106 | struct _STRING_IDENTIFIER *Next;\r | |
107 | UINT32 Index; // only need 16 bits, but makes it easier with UINT32\r | |
108 | WCHAR *StringName;\r | |
109 | UINT16 Flags; // if someone referenced it via STRING_TOKEN()\r | |
110 | } STRING_IDENTIFIER;\r | |
111 | //\r | |
112 | // Keep our globals in this structure to be as modular as possible.\r | |
113 | //\r | |
114 | typedef struct {\r | |
115 | FILE *StringDBFptr;\r | |
116 | LANGUAGE_LIST *LanguageList;\r | |
117 | LANGUAGE_LIST *LastLanguageList;\r | |
118 | LANGUAGE_LIST *CurrentLanguage; // keep track of the last language they used\r | |
119 | STRING_IDENTIFIER *StringIdentifier;\r | |
120 | STRING_IDENTIFIER *LastStringIdentifier;\r | |
121 | UINT8 *StringDBFileName;\r | |
122 | UINT32 NumStringIdentifiers;\r | |
123 | UINT32 NumStringIdentifiersReferenced;\r | |
124 | STRING_IDENTIFIER *CurrentStringIdentifier; // keep track of the last string identifier they added\r | |
125 | WCHAR *CurrentScope;\r | |
126 | } STRING_DB_DATA;\r | |
127 | \r | |
128 | typedef struct _SPkgBlkBuffer {\r | |
129 | UINT32 mBlkSize;\r | |
130 | VOID *mBlkBuffer;\r | |
131 | struct _SPkgBlkBuffer *mNext;\r | |
132 | } SPkgBlkBuffer;\r | |
133 | \r | |
134 | void\r | |
135 | StringDBConstructor (\r | |
136 | void\r | |
3e99020d LG |
137 | )\r |
138 | ;\r | |
95d675b5 | 139 | void\r |
140 | StringDBDestructor (\r | |
141 | void\r | |
3e99020d LG |
142 | )\r |
143 | ;\r | |
95d675b5 | 144 | \r |
145 | STATUS\r | |
146 | StringDBAddString (\r | |
147 | WCHAR *LanguageName,\r | |
148 | WCHAR *StringIdentifier,\r | |
149 | WCHAR *Scope,\r | |
150 | WCHAR *String,\r | |
151 | BOOLEAN Format,\r | |
152 | UINT16 Flags\r | |
3e99020d LG |
153 | )\r |
154 | ;\r | |
95d675b5 | 155 | \r |
156 | STATUS\r | |
157 | StringDBSetScope (\r | |
158 | WCHAR *Scope\r | |
3e99020d LG |
159 | )\r |
160 | ;\r | |
95d675b5 | 161 | \r |
162 | #define STRING_FLAGS_REFERENCED 0x0001 // if referenced somewhere\r | |
163 | #define STRING_FLAGS_UNDEFINED 0x0002 // if we added it for padding purposes\r | |
164 | #define STRING_FLAGS_INDEX_ASSIGNED 0x0004 // so don't change the index value\r | |
165 | #define STRING_ID_INVALID 0xFFFF\r | |
166 | #define STRING_ID_LANGUAGE_NAME 0x0000\r | |
167 | #define STRING_ID_PRINTABLE_LANGUAGE_NAME 0x0001\r | |
168 | \r | |
169 | STATUS\r | |
170 | StringDBAddStringIdentifier (\r | |
171 | WCHAR *StringIdentifier,\r | |
172 | UINT16 *NewId,\r | |
173 | UINT16 Flags\r | |
3e99020d LG |
174 | )\r |
175 | ;\r | |
95d675b5 | 176 | \r |
177 | STATUS\r | |
178 | StringDBReadDatabase (\r | |
179 | INT8 *DBFileName,\r | |
180 | BOOLEAN IgnoreIfNotExist,\r | |
181 | BOOLEAN Verbose\r | |
3e99020d LG |
182 | )\r |
183 | ;\r | |
95d675b5 | 184 | \r |
185 | STATUS\r | |
186 | StringDBWriteDatabase (\r | |
187 | INT8 *DBFileName,\r | |
188 | BOOLEAN Verbose\r | |
3e99020d LG |
189 | )\r |
190 | ;\r | |
95d675b5 | 191 | \r |
192 | STATUS\r | |
193 | StringDBDumpDatabase (\r | |
194 | INT8 *DBFileName,\r | |
195 | INT8 *OutputFileName,\r | |
196 | BOOLEAN Verbose\r | |
3e99020d LG |
197 | )\r |
198 | ;\r | |
95d675b5 | 199 | \r |
200 | STATUS\r | |
201 | StringDBAddLanguage (\r | |
202 | WCHAR *LanguageName,\r | |
203 | WCHAR *PrintableLanguageName,\r | |
204 | WCHAR *SecondaryLanguageList\r | |
3e99020d LG |
205 | )\r |
206 | ;\r | |
95d675b5 | 207 | \r |
208 | STATUS\r | |
209 | StringDBAddSecondaryLanguage (\r | |
210 | WCHAR *LanguageName,\r | |
211 | WCHAR *SecondaryLanguageList\r | |
3e99020d LG |
212 | )\r |
213 | ;\r | |
95d675b5 | 214 | \r |
215 | STATUS\r | |
216 | StringDBDumpCStrings (\r | |
217 | INT8 *BaseName,\r | |
3e99020d LG |
218 | INT8 *FileName,\r |
219 | WCHAR_STRING_LIST *LanguagesOfInterests\r | |
220 | )\r | |
221 | ;\r | |
222 | \r | |
223 | STATUS\r | |
224 | StringDBCreateHiiExportPack (\r | |
225 | INT8 *OutputFileName,\r | |
226 | WCHAR_STRING_LIST *LanguagesOfInterests\r | |
227 | )\r | |
228 | ;\r | |
95d675b5 | 229 | \r |
230 | STATUS\r | |
231 | StringDBDumpStringDefines (\r | |
232 | INT8 *FileName,\r | |
233 | INT8 *BaseName\r | |
3e99020d LG |
234 | )\r |
235 | ;\r | |
95d675b5 | 236 | \r |
237 | STATUS\r | |
238 | StringDBSetCurrentLanguage (\r | |
239 | WCHAR *LanguageName\r | |
3e99020d LG |
240 | )\r |
241 | ;\r | |
95d675b5 | 242 | \r |
243 | STATUS\r | |
244 | StringDBSetStringReferenced (\r | |
245 | INT8 *StringIdentifierName,\r | |
246 | BOOLEAN IgnoreNotFound\r | |
3e99020d LG |
247 | )\r |
248 | ;\r | |
95d675b5 | 249 | \r |
250 | void\r | |
251 | StringDBFormatString (\r | |
252 | WCHAR *String\r | |
3e99020d LG |
253 | )\r |
254 | ;\r | |
95d675b5 | 255 | \r |
256 | LANGUAGE_LIST *\r | |
257 | StringDBFindLanguageList (\r | |
258 | WCHAR *LanguageName\r | |
3e99020d LG |
259 | )\r |
260 | ;\r | |
95d675b5 | 261 | \r |
262 | #endif // #ifndef _STRING_DB_H_\r |