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