11 #include "threads/CriticalSection.h" 17 #define SUBTITLE_CACHESIZE 50 18 #define TELETEXT_PAGE_SIZE (40 * 25) 20 #define number2char(c) ((c) + (((c) <= 9) ? '0' : ('A' - 10))) 57 enum enumTeletextColor
67 TXT_ColorMenu1 = (4*8),
72 TXT_Color_SIZECOLTABLE
121 NAT_MAX_FROM_HEADER = 13,
130 const unsigned char CountryConversionTable[] = { NAT_UK, NAT_DE, NAT_SW, NAT_IT, NAT_FR, NAT_SP, NAT_CZ, NAT_RO};
131 const unsigned char MapTblFG[] = { 0, 0, 8, 8, 16, 16, 16 };
132 const unsigned char MapTblBG[] = { 8, 16, 8, 16, 8, 16, 24 };
133 const unsigned short DefaultColors[] =
135 0x000, 0x00f, 0x0f0, 0x0ff, 0xf00, 0xf0f, 0xff0, 0xfff,
136 0x000, 0x007, 0x070, 0x077, 0x700, 0x707, 0x770, 0x777,
137 0x50f, 0x07f, 0x7f0, 0xbff, 0xac0, 0x005, 0x256, 0x77c,
138 0x333, 0x77f, 0x7f7, 0x7ff, 0xf77, 0xf7f, 0xff7, 0xddd,
139 0x420, 0x210, 0x420, 0x000, 0x000
143 const unsigned char dehamming[] =
145 0x01, 0xFF, 0x01, 0x01, 0xFF, 0x00, 0x01, 0xFF, 0xFF, 0x02, 0x01, 0xFF, 0x0A, 0xFF, 0xFF, 0x07,
146 0xFF, 0x00, 0x01, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x06, 0xFF, 0xFF, 0x0B, 0xFF, 0x00, 0x03, 0xFF,
147 0xFF, 0x0C, 0x01, 0xFF, 0x04, 0xFF, 0xFF, 0x07, 0x06, 0xFF, 0xFF, 0x07, 0xFF, 0x07, 0x07, 0x07,
148 0x06, 0xFF, 0xFF, 0x05, 0xFF, 0x00, 0x0D, 0xFF, 0x06, 0x06, 0x06, 0xFF, 0x06, 0xFF, 0xFF, 0x07,
149 0xFF, 0x02, 0x01, 0xFF, 0x04, 0xFF, 0xFF, 0x09, 0x02, 0x02, 0xFF, 0x02, 0xFF, 0x02, 0x03, 0xFF,
150 0x08, 0xFF, 0xFF, 0x05, 0xFF, 0x00, 0x03, 0xFF, 0xFF, 0x02, 0x03, 0xFF, 0x03, 0xFF, 0x03, 0x03,
151 0x04, 0xFF, 0xFF, 0x05, 0x04, 0x04, 0x04, 0xFF, 0xFF, 0x02, 0x0F, 0xFF, 0x04, 0xFF, 0xFF, 0x07,
152 0xFF, 0x05, 0x05, 0x05, 0x04, 0xFF, 0xFF, 0x05, 0x06, 0xFF, 0xFF, 0x05, 0xFF, 0x0E, 0x03, 0xFF,
153 0xFF, 0x0C, 0x01, 0xFF, 0x0A, 0xFF, 0xFF, 0x09, 0x0A, 0xFF, 0xFF, 0x0B, 0x0A, 0x0A, 0x0A, 0xFF,
154 0x08, 0xFF, 0xFF, 0x0B, 0xFF, 0x00, 0x0D, 0xFF, 0xFF, 0x0B, 0x0B, 0x0B, 0x0A, 0xFF, 0xFF, 0x0B,
155 0x0C, 0x0C, 0xFF, 0x0C, 0xFF, 0x0C, 0x0D, 0xFF, 0xFF, 0x0C, 0x0F, 0xFF, 0x0A, 0xFF, 0xFF, 0x07,
156 0xFF, 0x0C, 0x0D, 0xFF, 0x0D, 0xFF, 0x0D, 0x0D, 0x06, 0xFF, 0xFF, 0x0B, 0xFF, 0x0E, 0x0D, 0xFF,
157 0x08, 0xFF, 0xFF, 0x09, 0xFF, 0x09, 0x09, 0x09, 0xFF, 0x02, 0x0F, 0xFF, 0x0A, 0xFF, 0xFF, 0x09,
158 0x08, 0x08, 0x08, 0xFF, 0x08, 0xFF, 0xFF, 0x09, 0x08, 0xFF, 0xFF, 0x0B, 0xFF, 0x0E, 0x03, 0xFF,
159 0xFF, 0x0C, 0x0F, 0xFF, 0x04, 0xFF, 0xFF, 0x09, 0x0F, 0xFF, 0x0F, 0x0F, 0xFF, 0x0E, 0x0F, 0xFF,
160 0x08, 0xFF, 0xFF, 0x05, 0xFF, 0x0E, 0x0D, 0xFF, 0xFF, 0x0E, 0x0F, 0xFF, 0x0E, 0x0E, 0xFF, 0x0E
164 const unsigned char deparity[] =
166 ' ' , 0x01, 0x02,
' ' , 0x04,
' ' ,
' ' , 0x07, 0x08,
' ' ,
' ' , 0x0b,
' ' , 0x0d, 0x0e,
' ' ,
167 0x10,
' ' ,
' ' , 0x13,
' ' , 0x15, 0x16,
' ' ,
' ' , 0x19, 0x1a,
' ' , 0x1c,
' ' ,
' ' , 0x1f,
168 0x20,
' ' ,
' ' , 0x23,
' ' , 0x25, 0x26,
' ' ,
' ' , 0x29, 0x2a,
' ' , 0x2c,
' ' ,
' ' , 0x2f,
169 ' ' , 0x31, 0x32,
' ' , 0x34,
' ' ,
' ' , 0x37, 0x38,
' ' ,
' ' , 0x3b,
' ' , 0x3d, 0x3e,
' ' ,
170 0x40,
' ' ,
' ' , 0x43,
' ' , 0x45, 0x46,
' ' ,
' ' , 0x49, 0x4a,
' ' , 0x4c,
' ' ,
' ' , 0x4f,
171 ' ' , 0x51, 0x52,
' ' , 0x54,
' ' ,
' ' , 0x57, 0x58,
' ' ,
' ' , 0x5b,
' ' , 0x5d, 0x5e,
' ' ,
172 ' ' , 0x61, 0x62,
' ' , 0x64,
' ' ,
' ' , 0x67, 0x68,
' ' ,
' ' , 0x6b,
' ' , 0x6d, 0x6e,
' ' ,
173 0x70,
' ' ,
' ' , 0x73,
' ' , 0x75, 0x76,
' ' ,
' ' , 0x79, 0x7a,
' ' , 0x7c,
' ' ,
' ' , 0x7f,
174 0x00,
' ' ,
' ' , 0x03,
' ' , 0x05, 0x06,
' ' ,
' ' , 0x09, 0x0a,
' ' , 0x0c,
' ' ,
' ' , 0x0f,
175 ' ' , 0x11, 0x12,
' ' , 0x14,
' ' ,
' ' , 0x17, 0x18,
' ' ,
' ' , 0x1b,
' ' , 0x1d, 0x1e,
' ' ,
176 ' ' , 0x21, 0x22,
' ' , 0x24,
' ' ,
' ' , 0x27, 0x28,
' ' ,
' ' , 0x2b,
' ' , 0x2d, 0x2e,
' ' ,
177 0x30,
' ' ,
' ' , 0x33,
' ' , 0x35, 0x36,
' ' ,
' ' , 0x39, 0x3a,
' ' , 0x3c,
' ' ,
' ' , 0x3f,
178 ' ' , 0x41, 0x42,
' ' , 0x44,
' ' ,
' ' , 0x47, 0x48,
' ' ,
' ' , 0x4b,
' ' , 0x4d, 0x4e,
' ' ,
179 0x50,
' ' ,
' ' , 0x53,
' ' , 0x55, 0x56,
' ' ,
' ' , 0x59, 0x5a,
' ' , 0x5c,
' ' ,
' ' , 0x5f,
180 0x60,
' ' ,
' ' , 0x63,
' ' , 0x65, 0x66,
' ' ,
' ' , 0x69, 0x6a,
' ' , 0x6c,
' ' ,
' ' , 0x6f,
181 ' ' , 0x71, 0x72,
' ' , 0x74,
' ' ,
' ' , 0x77, 0x78,
' ' ,
' ' , 0x7b,
' ' , 0x7d, 0x7e,
' ' ,
192 const unsigned char hamm24par[3][256] =
196 0, 33, 34, 3, 35, 2, 1, 32, 36, 5, 6, 39, 7, 38, 37, 4,
197 37, 4, 7, 38, 6, 39, 36, 5, 1, 32, 35, 2, 34, 3, 0, 33,
198 38, 7, 4, 37, 5, 36, 39, 6, 2, 35, 32, 1, 33, 0, 3, 34,
199 3, 34, 33, 0, 32, 1, 2, 35, 39, 6, 5, 36, 4, 37, 38, 7,
200 39, 6, 5, 36, 4, 37, 38, 7, 3, 34, 33, 0, 32, 1, 2, 35,
201 2, 35, 32, 1, 33, 0, 3, 34, 38, 7, 4, 37, 5, 36, 39, 6,
202 1, 32, 35, 2, 34, 3, 0, 33, 37, 4, 7, 38, 6, 39, 36, 5,
203 36, 5, 6, 39, 7, 38, 37, 4, 0, 33, 34, 3, 35, 2, 1, 32,
204 40, 9, 10, 43, 11, 42, 41, 8, 12, 45, 46, 15, 47, 14, 13, 44,
205 13, 44, 47, 14, 46, 15, 12, 45, 41, 8, 11, 42, 10, 43, 40, 9,
206 14, 47, 44, 13, 45, 12, 15, 46, 42, 11, 8, 41, 9, 40, 43, 10,
207 43, 10, 9, 40, 8, 41, 42, 11, 15, 46, 45, 12, 44, 13, 14, 47,
208 15, 46, 45, 12, 44, 13, 14, 47, 43, 10, 9, 40, 8, 41, 42, 11,
209 42, 11, 8, 41, 9, 40, 43, 10, 14, 47, 44, 13, 45, 12, 15, 46,
210 41, 8, 11, 42, 10, 43, 40, 9, 13, 44, 47, 14, 46, 15, 12, 45,
211 12, 45, 46, 15, 47, 14, 13, 44, 40, 9, 10, 43, 11, 42, 41, 8
214 0, 41, 42, 3, 43, 2, 1, 40, 44, 5, 6, 47, 7, 46, 45, 4,
215 45, 4, 7, 46, 6, 47, 44, 5, 1, 40, 43, 2, 42, 3, 0, 41,
216 46, 7, 4, 45, 5, 44, 47, 6, 2, 43, 40, 1, 41, 0, 3, 42,
217 3, 42, 41, 0, 40, 1, 2, 43, 47, 6, 5, 44, 4, 45, 46, 7,
218 47, 6, 5, 44, 4, 45, 46, 7, 3, 42, 41, 0, 40, 1, 2, 43,
219 2, 43, 40, 1, 41, 0, 3, 42, 46, 7, 4, 45, 5, 44, 47, 6,
220 1, 40, 43, 2, 42, 3, 0, 41, 45, 4, 7, 46, 6, 47, 44, 5,
221 44, 5, 6, 47, 7, 46, 45, 4, 0, 41, 42, 3, 43, 2, 1, 40,
222 48, 25, 26, 51, 27, 50, 49, 24, 28, 53, 54, 31, 55, 30, 29, 52,
223 29, 52, 55, 30, 54, 31, 28, 53, 49, 24, 27, 50, 26, 51, 48, 25,
224 30, 55, 52, 29, 53, 28, 31, 54, 50, 27, 24, 49, 25, 48, 51, 26,
225 51, 26, 25, 48, 24, 49, 50, 27, 31, 54, 53, 28, 52, 29, 30, 55,
226 31, 54, 53, 28, 52, 29, 30, 55, 51, 26, 25, 48, 24, 49, 50, 27,
227 50, 27, 24, 49, 25, 48, 51, 26, 30, 55, 52, 29, 53, 28, 31, 54,
228 49, 24, 27, 50, 26, 51, 48, 25, 29, 52, 55, 30, 54, 31, 28, 53,
229 28, 53, 54, 31, 55, 30, 29, 52, 48, 25, 26, 51, 27, 50, 49, 24
232 63, 14, 13, 60, 12, 61, 62, 15, 11, 58, 57, 8, 56, 9, 10, 59,
233 10, 59, 56, 9, 57, 8, 11, 58, 62, 15, 12, 61, 13, 60, 63, 14,
234 9, 56, 59, 10, 58, 11, 8, 57, 61, 12, 15, 62, 14, 63, 60, 13,
235 60, 13, 14, 63, 15, 62, 61, 12, 8, 57, 58, 11, 59, 10, 9, 56,
236 8, 57, 58, 11, 59, 10, 9, 56, 60, 13, 14, 63, 15, 62, 61, 12,
237 61, 12, 15, 62, 14, 63, 60, 13, 9, 56, 59, 10, 58, 11, 8, 57,
238 62, 15, 12, 61, 13, 60, 63, 14, 10, 59, 56, 9, 57, 8, 11, 58,
239 11, 58, 57, 8, 56, 9, 10, 59, 63, 14, 13, 60, 12, 61, 62, 15,
240 31, 46, 45, 28, 44, 29, 30, 47, 43, 26, 25, 40, 24, 41, 42, 27,
241 42, 27, 24, 41, 25, 40, 43, 26, 30, 47, 44, 29, 45, 28, 31, 46,
242 41, 24, 27, 42, 26, 43, 40, 25, 29, 44, 47, 30, 46, 31, 28, 45,
243 28, 45, 46, 31, 47, 30, 29, 44, 40, 25, 26, 43, 27, 42, 41, 24,
244 40, 25, 26, 43, 27, 42, 41, 24, 28, 45, 46, 31, 47, 30, 29, 44,
245 29, 44, 47, 30, 46, 31, 28, 45, 41, 24, 27, 42, 26, 43, 40, 25,
246 30, 47, 44, 29, 45, 28, 31, 46, 42, 27, 24, 41, 25, 40, 43, 26,
247 43, 26, 25, 40, 24, 41, 42, 27, 31, 46, 45, 28, 44, 29, 30, 47
256 const unsigned char hamm24val[256] =
258 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1,
259 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3,
260 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5,
261 6, 6, 6, 6, 7, 7, 7, 7, 6, 6, 6, 6, 7, 7, 7, 7,
262 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9, 9, 9,
263 10, 10, 10, 10, 11, 11, 11, 11, 10, 10, 10, 10, 11, 11, 11, 11,
264 12, 12, 12, 12, 13, 13, 13, 13, 12, 12, 12, 12, 13, 13, 13, 13,
265 14, 14, 14, 14, 15, 15, 15, 15, 14, 14, 14, 14, 15, 15, 15, 15,
266 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1,
267 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3,
268 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 5, 5, 5, 5,
269 6, 6, 6, 6, 7, 7, 7, 7, 6, 6, 6, 6, 7, 7, 7, 7,
270 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 8, 9, 9, 9, 9,
271 10, 10, 10, 10, 11, 11, 11, 11, 10, 10, 10, 10, 11, 11, 11, 11,
272 12, 12, 12, 12, 13, 13, 13, 13, 12, 12, 12, 12, 13, 13, 13, 13,
273 14, 14, 14, 14, 15, 15, 15, 15, 14, 14, 14, 14, 15, 15, 15, 15
276 const signed char hamm24err[64] =
278 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
279 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
280 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
281 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1,
290 const unsigned int hamm24cor[64] =
292 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
293 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
294 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
295 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
296 0x00000, 0x00000, 0x00000, 0x00001, 0x00000, 0x00002, 0x00004, 0x00008,
297 0x00000, 0x00010, 0x00020, 0x00040, 0x00080, 0x00100, 0x00200, 0x00400,
298 0x00000, 0x00800, 0x01000, 0x02000, 0x04000, 0x08000, 0x10000, 0x20000,
299 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, 0x00000,
302 inline int IsDec(
int i)
304 return ((i & 0x00F) <= 9) && ((i & 0x0F0) <= 0x90);
312 unsigned char charset :6;
313 unsigned char doubleh :1;
314 unsigned char doublew :1;
318 unsigned char IgnoreAtBlackBgSubst:1;
319 unsigned char concealed:1;
320 unsigned char inverted :1;
321 unsigned char flashing :5;
322 unsigned char diacrit :4;
323 unsigned char underline:1;
324 unsigned char boxwin :1;
325 unsigned char setX26 :1;
326 unsigned char setG0G2 :7;
333 unsigned short subpage;
336 unsigned char drcs:1;
337 unsigned char local:1;
343 unsigned char *p26[16];
345 unsigned short bgr[16];
346 unsigned char DefaultCharset:7;
348 unsigned char SecondCharset:7;
350 unsigned char DefScreenColor:5;
351 unsigned char ColorTableRemapping:3;
352 unsigned char DefRowColor:5;
353 unsigned char BlackBgSubst:1;
354 unsigned char SPL25:1;
355 unsigned char p28Received:1;
356 unsigned char LSPColumns:4;
364 unsigned char boxed :1;
365 unsigned char nationalvalid :1;
366 unsigned char national :3;
367 unsigned char function :3;
374 unsigned char p0[24];
375 unsigned char data[23*40];
387 std::chrono::time_point<std::chrono::steady_clock> Timestamp;
388 unsigned char PageChar[TELETEXT_PAGE_SIZE];
396 int CurrentSubPage[9];
399 unsigned char SubPageTable[0x900];
400 unsigned char BasicTop[0x900];
401 short FlofPages[0x900][FLOFSIZE];
402 char ADIPTable[0x900][13];
412 int NationalSubsetSecondary;
413 bool ZapSubpageManual;
415 unsigned char TimeString[8];
420 unsigned char FullRowColor[25];
421 unsigned char FullScrColor;
422 unsigned char tAPx, tAPy;
423 short pop, gpop, drcs, gdrcs;
424 unsigned short *ColorTable;
429 CCriticalSection m_critSection;
446 int Prev_100, Prev_10, Next_10, Next_100;
451 int FontWidth_Normal;
452 unsigned short rd0[TXT_Color_SIZECOLTABLE];
453 unsigned short gn0[TXT_Color_SIZECOLTABLE];
454 unsigned short bl0[TXT_Color_SIZECOLTABLE];
455 unsigned short tr0[TXT_Color_SIZECOLTABLE];
457 unsigned char PageChar[25*40];
463 unsigned char axdrcs[12+1+10+1];
464 int TTFShiftX, TTFShiftY;
466 int ScreenMode, PrevScreenMode;
468 unsigned int SubtitleDelay;
474 static void NextDec(
int *i);
475 static void PrevDec(
int *i);
476 static void Hex2Str(
char *s,
unsigned int n);
477 static signed int deh24(
unsigned char *p);
Definition: TeletextDefines.h:360
Definition: TeletextDefines.h:330
Definition: TeletextDefines.h:341
Definition: TeletextDefines.h:471
Definition: TeletextDefines.h:393
Definition: TeletextDefines.h:308
Definition: TeletextDefines.h:371
Definition: TeletextDefines.h:433
Definition: TeletextDefines.h:378
Definition: TeletextDefines.h:384