/[public]/psiconv/trunk/lib/psiconv/generate_common.c
ViewVC logotype

Diff of /psiconv/trunk/lib/psiconv/generate_common.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 230 Revision 231
41 psiconv_u32 uid2, psiconv_u32 uid3) 41 psiconv_u32 uid2, psiconv_u32 uid3)
42{ 42{
43 int res; 43 int res;
44 psiconv_progress(config,lev,0,"Writing header section"); 44 psiconv_progress(config,lev,0,"Writing header section");
45 if ((res = psiconv_write_u32(config,buf,lev+1,uid1))) 45 if ((res = psiconv_write_u32(config,buf,lev+1,uid1)))
46 return res; 46 goto ERROR;
47 if ((res = psiconv_write_u32(config,buf,lev+1,uid2))) 47 if ((res = psiconv_write_u32(config,buf,lev+1,uid2)))
48 return res; 48 goto ERROR;
49 if ((res = psiconv_write_u32(config,buf,lev+1,uid3))) 49 if ((res = psiconv_write_u32(config,buf,lev+1,uid3)))
50 goto ERROR;
51 if ((res = psiconv_write_u32(config,buf,lev+1,
52 psiconv_checkuid(uid1,uid2,uid3))))
53 goto ERROR;
54 psiconv_progress(config,lev,0,"End of header section");
55 return 0;
56
57ERROR:
58 psiconv_error(config,lev,0,"Writing of header section failed");
50 return res; 59 return res;
51 return psiconv_write_u32(config,buf,lev+1,psiconv_checkuid(uid1,uid2,uid3));
52} 60}
53 61
54int psiconv_write_section_table_section(const psiconv_config config, 62int psiconv_write_section_table_section(const psiconv_config config,
55 psiconv_buffer buf,int lev, 63 psiconv_buffer buf,int lev,
56 const psiconv_section_table_section value) 64 const psiconv_section_table_section value)
58 int res,i; 66 int res,i;
59 psiconv_section_table_entry entry; 67 psiconv_section_table_entry entry;
60 68
61 psiconv_progress(config,lev,0,"Writing section table section"); 69 psiconv_progress(config,lev,0,"Writing section table section");
62 if (!value) { 70 if (!value) {
63 psiconv_error(config,0,psiconv_buffer_length(buf),"Null section table section"); 71 psiconv_error(config,lev,0,"Null section table section");
64 return -PSICONV_E_GENERATE; 72 res = -PSICONV_E_GENERATE;
73 goto ERROR;
65 } 74 }
66 75
67 if ((res = psiconv_write_u8(config,buf,lev+1,2 * psiconv_list_length(value)))) 76 if ((res = psiconv_write_u8(config,buf,lev+1,2 * psiconv_list_length(value))))
68 return res; 77 goto ERROR;
69 for (i = 0; i < psiconv_list_length(value); i++) { 78 for (i = 0; i < psiconv_list_length(value); i++) {
70 if (!(entry = psiconv_list_get(value,i))) { 79 if (!(entry = psiconv_list_get(value,i))) {
71 psiconv_error(config,0,psiconv_buffer_length(buf),"Massive memory corruption"); 80 psiconv_error(config,lev+1,0,"Massive memory corruption");
72 return -PSICONV_E_NOMEM; 81 res = -PSICONV_E_NOMEM;
82 goto ERROR;
73 } 83 }
74 if ((res = psiconv_write_u32(config,buf,lev+1,entry->id))) 84 if ((res = psiconv_write_u32(config,buf,lev+1,entry->id)))
75 return res; 85 goto ERROR;
76 if ((res = psiconv_write_offset(config,buf,lev+1,entry->offset))) 86 if ((res = psiconv_write_offset(config,buf,lev+1,entry->offset)))
77 return res; 87 goto ERROR;
78 } 88 }
89 psiconv_progress(config,lev,0,"End of section table section");
79 return -PSICONV_E_OK; 90 return -PSICONV_E_OK;
91
92ERROR:
93 psiconv_error(config,lev,0,"Writing of section table section failed");
94 return res;
80} 95}
81 96
82int psiconv_write_application_id_section(const psiconv_config config, 97int psiconv_write_application_id_section(const psiconv_config config,
83 psiconv_buffer buf,int lev,psiconv_u32 id, 98 psiconv_buffer buf,int lev,psiconv_u32 id,
84 const psiconv_string_t text) 99 const psiconv_string_t text)
85{ 100{
86 int res; 101 int res;
87 psiconv_progress(config,lev,0,"Writing application id section"); 102 psiconv_progress(config,lev,0,"Writing application id section");
88 if ((res = psiconv_write_u32(config,buf,lev+1,id))) 103 if ((res = psiconv_write_u32(config,buf,lev+1,id)))
104 goto ERROR;
105 if ((res = psiconv_write_string(config,buf,lev+1,text)))
106 goto ERROR;
107 psiconv_progress(config,lev,0,"End of application id section");
108 return 0;
109ERROR:
110 psiconv_error(config,lev,0,"Writing of application id section failed");
89 return res; 111 return res;
90 return psiconv_write_string(config,buf,lev+1,text);
91} 112}
92 113
93int psiconv_write_text_section(const psiconv_config config, 114int psiconv_write_text_section(const psiconv_config config,
94 psiconv_buffer buf,int lev, 115 psiconv_buffer buf,int lev,
95 const psiconv_text_and_layout value) 116 const psiconv_text_and_layout value)
96{ 117{
97 int res; 118 int res;
98 psiconv_buffer extra_buf; 119 psiconv_buffer extra_buf = NULL;
99 int i,j; 120 int i,j;
100 psiconv_paragraph paragraph; 121 psiconv_paragraph paragraph;
101 122
102 psiconv_progress(config,lev,0,"Writing text section"); 123 psiconv_progress(config,lev,0,"Writing text section");
103 if (!value) { 124 if (!value) {
104 psiconv_error(config,0,psiconv_buffer_length(buf),"Null text section"); 125 psiconv_error(config,lev+1,0,"Null text section");
105 return -PSICONV_E_GENERATE; 126 res = -PSICONV_E_GENERATE;
127 goto ERROR;
106 } 128 }
107 129
108 if (psiconv_list_length(value)) { 130 if (psiconv_list_length(value)) {
109 if (!(extra_buf = psiconv_buffer_new())) 131 if (!(extra_buf = psiconv_buffer_new())) {
110 return -PSICONV_E_NOMEM; 132 res = -PSICONV_E_NOMEM;
133 goto ERROR;
134 }
111 for (i = 0; i < psiconv_list_length(value); i++) { 135 for (i = 0; i < psiconv_list_length(value); i++) {
112 if (!(paragraph = psiconv_list_get(value,i))) { 136 if (!(paragraph = psiconv_list_get(value,i))) {
113 psiconv_error(config,0,psiconv_buffer_length(buf),"Massive memory corruption"); 137 psiconv_error(config,lev+1,0,"Massive memory corruption");
114 res = -PSICONV_E_NOMEM; 138 res = -PSICONV_E_NOMEM;
115 goto ERROR; 139 goto ERROR;
116 } 140 }
117 for (j = 0; j < psiconv_unicode_strlen(paragraph->text); j++) 141 for (j = 0; j < psiconv_unicode_strlen(paragraph->text); j++)
118 if ((res = psiconv_unicode_write_char(config,extra_buf,lev+1, 142 if ((res = psiconv_unicode_write_char(config,extra_buf,lev+1,
123 if ((res = psiconv_write_X(config,buf,lev+1,psiconv_buffer_length(extra_buf)))) 147 if ((res = psiconv_write_X(config,buf,lev+1,psiconv_buffer_length(extra_buf))))
124 goto ERROR; 148 goto ERROR;
125 res = psiconv_buffer_concat(buf,extra_buf); 149 res = psiconv_buffer_concat(buf,extra_buf);
126 } else 150 } else
127 /* Hack: empty text sections are just not allowed */ 151 /* Hack: empty text sections are just not allowed */
128 return psiconv_write_u16(config,buf,lev+1,0x0602); 152 if ((res = psiconv_write_u16(config,buf,lev+1,0x0602)))
153 goto ERROR;
154
155 psiconv_progress(config,lev,0,"End of text section");
156 return 0;
129 157
130ERROR: 158ERROR:
159 if (extra_buf)
131 psiconv_buffer_free(extra_buf); 160 psiconv_buffer_free(extra_buf);
161 psiconv_error(config,lev,0,"Writing of text section failed");
132 return res; 162 return res;
133} 163}
134 164
135int psiconv_write_layout_section(const psiconv_config config, 165int psiconv_write_layout_section(const psiconv_config config,
136 psiconv_buffer buf,int lev, 166 psiconv_buffer buf,int lev,
156 psiconv_character_layout para_charlayout; 186 psiconv_character_layout para_charlayout;
157 int i,j,para_type,nr_of_inlines=0,res,ptl_length,pel_length,thislen,paralen; 187 int i,j,para_type,nr_of_inlines=0,res,ptl_length,pel_length,thislen,paralen;
158 188
159 psiconv_progress(config,lev,0,"Writing layout section"); 189 psiconv_progress(config,lev,0,"Writing layout section");
160 if (!value) { 190 if (!value) {
161 psiconv_error(config,0,psiconv_buffer_length(buf),"Null text section"); 191 psiconv_error(config,lev,0,"Null text section");
162 return -PSICONV_E_GENERATE; 192 res = -PSICONV_E_GENERATE;
193 goto ERROR1;
163 } 194 }
164 195
165 if (!(paragraph_type_list = psiconv_list_new(sizeof(new_type)))) { 196 if (!(paragraph_type_list = psiconv_list_new(sizeof(new_type)))) {
166 res = -PSICONV_E_NOMEM; 197 res = -PSICONV_E_NOMEM;
167 goto ERROR1; 198 goto ERROR1;
187 goto ERROR5; 218 goto ERROR5;
188 } 219 }
189 220
190 for (i = 0; i < psiconv_list_length(value); i++) { 221 for (i = 0; i < psiconv_list_length(value); i++) {
191 if (!(paragraph = psiconv_list_get(value,i))) { 222 if (!(paragraph = psiconv_list_get(value,i))) {
192 psiconv_error(config,0,psiconv_buffer_length(buf),"Massive memory corruption"); 223 psiconv_error(config,lev+1,0,"Massive memory corruption");
193 res = -PSICONV_E_NOMEM; 224 res = -PSICONV_E_NOMEM;
194 goto ERROR6; 225 goto ERROR6;
195 } 226 }
196 if ((res = psiconv_write_u32(config,buf_elements,lev+1, 227 if ((res = psiconv_write_u32(config,buf_elements,lev+1,
197 psiconv_unicode_strlen(paragraph->text)+1))) 228 psiconv_unicode_strlen(paragraph->text)+1)))
208 /* Inline layouts, or an object, so we generate a paragraph element 239 /* Inline layouts, or an object, so we generate a paragraph element
209 and inline elements */ 240 and inline elements */
210 if ((res = psiconv_write_u8(config,buf_elements,lev+1,0x00))) 241 if ((res = psiconv_write_u8(config,buf_elements,lev+1,0x00)))
211 goto ERROR6; 242 goto ERROR6;
212 if (!(style = psiconv_get_style(styles,paragraph->base_style))) { 243 if (!(style = psiconv_get_style(styles,paragraph->base_style))) {
213 psiconv_error(config,0,psiconv_buffer_length(buf),"Unknown style"); 244 psiconv_error(config,lev+1,0,"Unknown style");
214 res = -PSICONV_E_GENERATE; 245 res = -PSICONV_E_GENERATE;
215 goto ERROR6; 246 goto ERROR6;
216 } 247 }
217 if ((res = psiconv_write_paragraph_layout_list(config,buf_elements,lev+1, 248 if ((res = psiconv_write_paragraph_layout_list(config,buf_elements,lev+1,
218 paragraph->base_paragraph, 249 paragraph->base_paragraph,
228 /* Generate the inlines. NB: Against what are all settings relative?!? */ 259 /* Generate the inlines. NB: Against what are all settings relative?!? */
229 paralen = 0; 260 paralen = 0;
230 for (j = 0; j < psiconv_list_length(paragraph->in_lines); j++) { 261 for (j = 0; j < psiconv_list_length(paragraph->in_lines); j++) {
231 nr_of_inlines ++; 262 nr_of_inlines ++;
232 if (!(in_line = psiconv_list_get(paragraph->in_lines,j))) { 263 if (!(in_line = psiconv_list_get(paragraph->in_lines,j))) {
233 psiconv_error(config,0,psiconv_buffer_length(buf), 264 psiconv_error(config,lev,0,"Massive memory corruption");
234 "Massive memory corruption");
235 res = -PSICONV_E_NOMEM; 265 res = -PSICONV_E_NOMEM;
236 goto ERROR6; 266 goto ERROR6;
237 } 267 }
238 if ((res = psiconv_write_u8(config,buf_inlines,lev+1,in_line->object?0x01:0x00))) 268 if ((res = psiconv_write_u8(config,buf_inlines,lev+1,in_line->object?0x01:0x00)))
239 goto ERROR6; 269 goto ERROR6;
277 /* Set para_charlayout to the correct character-level layout */ 307 /* Set para_charlayout to the correct character-level layout */
278 if (psiconv_list_length(paragraph->in_lines) == 0) 308 if (psiconv_list_length(paragraph->in_lines) == 0)
279 para_charlayout = paragraph->base_character; 309 para_charlayout = paragraph->base_character;
280 else { 310 else {
281 if (!(in_line = psiconv_list_get(paragraph->in_lines,0))) { 311 if (!(in_line = psiconv_list_get(paragraph->in_lines,0))) {
282 psiconv_error(config,0,psiconv_buffer_length(buf), 312 psiconv_error(config,lev,0,"Massive memory corruption");
283 "Massive memory corruption");
284 res = -PSICONV_E_NOMEM; 313 res = -PSICONV_E_NOMEM;
285 goto ERROR6; 314 goto ERROR6;
286 } 315 }
287 para_charlayout = in_line->layout; 316 para_charlayout = in_line->layout;
288 } 317 }
289 for (j = 0; j < psiconv_list_length(paragraph_type_list); j++) { 318 for (j = 0; j < psiconv_list_length(paragraph_type_list); j++) {
290 if (!(paragraph_type = psiconv_list_get(paragraph_type_list,j))) { 319 if (!(paragraph_type = psiconv_list_get(paragraph_type_list,j))) {
291 psiconv_error(config,0,psiconv_buffer_length(buf), 320 psiconv_error(config,lev,0,"Massive memory corruption");
292 "Massive memory corruption");
293 res = -PSICONV_E_NOMEM; 321 res = -PSICONV_E_NOMEM;
294 goto ERROR6; 322 goto ERROR6;
295 } 323 }
296 if ((paragraph->base_style == paragraph_type->style) && 324 if ((paragraph->base_style == paragraph_type->style) &&
297 !psiconv_compare_character_layout(para_charlayout, 325 !psiconv_compare_character_layout(para_charlayout,
313 if ((res = psiconv_list_add(paragraph_type_list,paragraph_type))) 341 if ((res = psiconv_list_add(paragraph_type_list,paragraph_type)))
314 goto ERROR6; 342 goto ERROR6;
315 if ((res = psiconv_write_u32(config,buf_types,lev+1,paragraph_type->nr))) 343 if ((res = psiconv_write_u32(config,buf_types,lev+1,paragraph_type->nr)))
316 goto ERROR6; 344 goto ERROR6;
317 if (!(style = psiconv_get_style(styles,paragraph_type->style))) { 345 if (!(style = psiconv_get_style(styles,paragraph_type->style))) {
318 psiconv_error(config,0,psiconv_buffer_length(buf),"Unknown style"); 346 psiconv_error(config,lev,0,"Unknown style");
319 res = -PSICONV_E_GENERATE; 347 res = -PSICONV_E_GENERATE;
320 goto ERROR6; 348 goto ERROR6;
321 } 349 }
322 if ((res = psiconv_write_paragraph_layout_list(config,buf_types,lev+1, 350 if ((res = psiconv_write_paragraph_layout_list(config,buf_types,lev+1,
323 paragraph_type->paragraph,style->paragraph))) 351 paragraph_type->paragraph,style->paragraph)))
384ERROR3: 412ERROR3:
385 psiconv_buffer_free(buf_types); 413 psiconv_buffer_free(buf_types);
386ERROR2: 414ERROR2:
387 psiconv_list_free(paragraph_type_list); 415 psiconv_list_free(paragraph_type_list);
388ERROR1: 416ERROR1:
417 if (res)
418 psiconv_error(config,lev,0,"Writing of layout section failed");
419 else
420 psiconv_progress(config,lev,0,"End of layout section");
389 return res; 421 return res;
390} 422}
391 423
392int psiconv_write_styled_layout_section(const psiconv_config config, 424int psiconv_write_styled_layout_section(const psiconv_config config,
393 psiconv_buffer buf,int lev, 425 psiconv_buffer buf,int lev,
394 psiconv_text_and_layout result, 426 psiconv_text_and_layout result,
395 psiconv_word_styles_section styles) 427 psiconv_word_styles_section styles)
396{ 428{
429 int res;
430
397 psiconv_progress(config,lev,0,"Writing styled layout section"); 431 psiconv_progress(config,lev,0,"Writing styled layout section");
398 return psiconv_write_layout_section(config,buf,lev+1,result,styles,1); 432 res = psiconv_write_layout_section(config,buf,lev+1,result,styles,1);
433 if (res)
434 psiconv_error(config,lev,0,"Writing of styles layout section failed");
435 else
436 psiconv_progress(config,lev,0,"End of styled layout section");
437 return res;
399} 438}
400 439
401int psiconv_write_styleless_layout_section(const psiconv_config config, 440int psiconv_write_styleless_layout_section(const psiconv_config config,
402 psiconv_buffer buf,int lev, 441 psiconv_buffer buf,int lev,
403 const psiconv_text_and_layout value, 442 const psiconv_text_and_layout value,
425 struct psiconv_word_style_s)))) 464 struct psiconv_word_style_s))))
426 goto ERROR6; 465 goto ERROR6;
427 466
428 res = psiconv_write_layout_section(config,buf,lev+1,value,styles_section,0); 467 res = psiconv_write_layout_section(config,buf,lev+1,value,styles_section,0);
429 psiconv_free_word_styles_section(styles_section); 468 psiconv_free_word_styles_section(styles_section);
469 psiconv_progress(config,lev,0,"End of styleless layout section");
430 return res; 470 return res;
431 471
432ERROR6: 472ERROR6:
433 free(styles_section->normal->name); 473 free(styles_section->normal->name);
434ERROR5: 474ERROR5:
438ERROR3: 478ERROR3:
439 free(styles_section->normal); 479 free(styles_section->normal);
440ERROR2: 480ERROR2:
441 free(styles_section); 481 free(styles_section);
442ERROR1: 482ERROR1:
483 psiconv_error(config,lev,0,"Writing of styleless layout section failed");
443 if (!res) 484 if (!res)
444 return -PSICONV_E_NOMEM; 485 return -PSICONV_E_NOMEM;
445 else 486 else
446 return res; 487 return res;
447} 488}
455 psiconv_u32 display_id,icon_id,table_id; 496 psiconv_u32 display_id,icon_id,table_id;
456 psiconv_buffer extra_buf; 497 psiconv_buffer extra_buf;
457 498
458 psiconv_progress(config,lev,0,"Writing embedded object section"); 499 psiconv_progress(config,lev,0,"Writing embedded object section");
459 if (!value) { 500 if (!value) {
460 psiconv_error(config,0,psiconv_buffer_length(buf),"Null Object"); 501 psiconv_error(config,lev,0,"Null Object");
461 res = -PSICONV_E_GENERATE; 502 res = -PSICONV_E_GENERATE;
462 goto ERROR1; 503 goto ERROR1;
463 } 504 }
464 505
465 if (!(extra_buf = psiconv_buffer_new())) { 506 if (!(extra_buf = psiconv_buffer_new())) {
512 (psiconv_sheet_f) value->object->file))) 553 (psiconv_sheet_f) value->object->file)))
513 goto ERROR2; 554 goto ERROR2;
514 break; 555 break;
515*/ 556*/
516 default: 557 default:
517 psiconv_error(config,0,psiconv_buffer_length(buf), 558 psiconv_error(config,lev,0,"Unknown or unsupported object type");
518 "Unknown or unsupported object type");
519 res = -PSICONV_E_GENERATE; 559 res = -PSICONV_E_GENERATE;
520 goto ERROR2; 560 goto ERROR2;
521 } 561 }
522 562
523 if ((res = psiconv_buffer_resolve(extra_buf))) 563 if ((res = psiconv_buffer_resolve(extra_buf)))
524 goto ERROR2; 564 goto ERROR2;
525 if ((res = psiconv_buffer_concat(buf,extra_buf))) 565 if ((res = psiconv_buffer_concat(buf,extra_buf)))
526 goto ERROR2; 566 goto ERROR2;
527 psiconv_buffer_free(extra_buf); 567 psiconv_buffer_free(extra_buf);
528 568
569 psiconv_progress(config,lev,0,"End of embedded object section");
529 return 0; 570 return 0;
530 571
531ERROR2: 572ERROR2:
532 psiconv_buffer_free(extra_buf); 573 psiconv_buffer_free(extra_buf);
533ERROR1: 574ERROR1:
575 psiconv_error(config,lev,0,"Writing of embedded object section failed");
534 return res; 576 return res;
535} 577}
536 578
537 579
538int psiconv_write_object_display_section(const psiconv_config config, 580int psiconv_write_object_display_section(const psiconv_config config,
542 int res; 584 int res;
543 585
544 psiconv_progress(config,lev,0,"Writing object display section"); 586 psiconv_progress(config,lev,0,"Writing object display section");
545 587
546 if (!value) { 588 if (!value) {
547 psiconv_error(config,0,psiconv_buffer_length(buf),"Null Object Display Section"); 589 psiconv_error(config,lev,0,"Null Object Display Section");
548 res = -PSICONV_E_GENERATE; 590 res = -PSICONV_E_GENERATE;
549 goto ERROR1; 591 goto ERROR1;
550 } 592 }
551 593
552 if ((res = psiconv_write_u8(config,buf,lev+1,value->show_icon?0x00:0x01))) 594 if ((res = psiconv_write_u8(config,buf,lev+1,value->show_icon?0x00:0x01)))
556 if ((res = psiconv_write_length(config,buf,lev+1,value->height))) 598 if ((res = psiconv_write_length(config,buf,lev+1,value->height)))
557 goto ERROR1; 599 goto ERROR1;
558 if ((res = psiconv_write_u32(config,buf,lev+1,0x00000000))) 600 if ((res = psiconv_write_u32(config,buf,lev+1,0x00000000)))
559 goto ERROR1; 601 goto ERROR1;
560 602
603 psiconv_progress(config,lev,0,"End of object display section");
604
561 return 0; 605 return 0;
562 606
563ERROR1: 607ERROR1:
608 psiconv_error(config,lev,0,"Writing of object display section failed");
564 return res; 609 return res;
565} 610}
566 611
567int psiconv_write_object_icon_section(const psiconv_config config, 612int psiconv_write_object_icon_section(const psiconv_config config,
568 psiconv_buffer buf,int lev, 613 psiconv_buffer buf,int lev,
571 int res; 616 int res;
572 617
573 psiconv_progress(config,lev,0,"Writing object icon section"); 618 psiconv_progress(config,lev,0,"Writing object icon section");
574 619
575 if (!value) { 620 if (!value) {
576 psiconv_error(config,0,psiconv_buffer_length(buf),"Null Object Icon Section"); 621 psiconv_error(config,lev,0,"Null Object Icon Section");
577 res = -PSICONV_E_GENERATE; 622 res = -PSICONV_E_GENERATE;
578 goto ERROR1; 623 goto ERROR1;
579 } 624 }
580 625
581 if ((res = psiconv_write_string(config,buf,lev+1,value->icon_name))) 626 if ((res = psiconv_write_string(config,buf,lev+1,value->icon_name)))
583 if ((res = psiconv_write_length(config,buf,lev+1,value->icon_width))) 628 if ((res = psiconv_write_length(config,buf,lev+1,value->icon_width)))
584 goto ERROR1; 629 goto ERROR1;
585 if ((res = psiconv_write_length(config,buf,lev+1,value->icon_height))) 630 if ((res = psiconv_write_length(config,buf,lev+1,value->icon_height)))
586 goto ERROR1; 631 goto ERROR1;
587 632
633 psiconv_progress(config,lev,0,"End of object icon section");
588 return 0; 634 return 0;
589 635
590ERROR1: 636ERROR1:
637 psiconv_error(config,lev,0,"Writing of object icon section failed");
591 return res; 638 return res;
592} 639}

Legend:
Removed from v.230  
changed lines
  Added in v.231

frodo@frodo.looijaard.name
ViewVC Help
Powered by ViewVC 1.1.26