Subversion Repositories SvarDOS

Rev

Rev 2014 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2014 Rev 2015
Line 456... Line 456...
456
int main(int argc, char **argv) {
456
int main(int argc, char **argv) {
457
  FILE *fd;
457
  FILE *fd;
458
  int ecode = 0;
458
  int ecode = 0;
459
  int i, output_format = C_OUTPUT;
459
  int i, output_format = C_OUTPUT;
460
  unsigned short biggest_langsz = 0;
460
  unsigned short biggest_langsz = 0;
461
  struct svl_lang *lang, *reflang = NULL;
461
  struct svl_lang *lang = NULL, *reflang = NULL;
462
 
462
 
463
  if (argc < 2) {
463
  if (argc < 2) {
464
    puts("tlumacz ver " SVARLANGVER " - this tool is part of the SvarLANG project.");
464
    puts("tlumacz ver " SVARLANGVER " - this tool is part of the SvarLANG project.");
465
    puts("converts a set of CATS-style translations in files EN.TXT, PL.TXT, etc");
465
    puts("converts a set of CATS-style translations in files EN.TXT, PL.TXT, etc");
466
    puts("into a single resource file (OUT.LNG).");
466
    puts("into a single resource file (OUT.LNG).");
Line 493... Line 493...
493
    }
493
    }
494
 
494
 
495
    if (strlen(argv[i]) != 2) {
495
    if (strlen(argv[i]) != 2) {
496
      fprintf(stderr, "INVALID LANG SPECIFIED: %s\r\n", argv[i]);
496
      fprintf(stderr, "INVALID LANG SPECIFIED: %s\r\n", argv[i]);
497
      ecode = 1;
497
      ecode = 1;
498
      break;
498
      goto exit_main;
499
    }
499
    }
500
    id[0] = argv[i][0];
500
    id[0] = argv[i][0];
501
    id[1] = argv[i][1];
501
    id[1] = argv[i][1];
502
    id[2] = 0;
502
    id[2] = 0;
503
 
503
 
504
    if ((lang = svl_lang_new(id, DICT_CAP, STRINGS_CAP)) == NULL) {
504
    if ((lang = svl_lang_new(id, DICT_CAP, STRINGS_CAP)) == NULL) {
505
      fprintf(stderr, "OUT OF MEMORY\r\n");
505
      fprintf(stderr, "OUT OF MEMORY\r\n");
506
      return(1);
506
      ecode = 1;
-
 
507
      goto exit_main;
507
    }
508
    }
508
 
509
 
509
    sz = svl_lang_from_cats_file(lang, reflang);
510
    sz = svl_lang_from_cats_file(lang, reflang);
510
    if (sz == 0) {
511
    if (sz == 0) {
511
      fprintf(stderr, "ERROR COMPUTING LANG '%s'\r\n", id);
512
      fprintf(stderr, "ERROR COMPUTING LANG '%s'\r\n", id);
512
      ecode = 1;
513
      ecode = 1;
513
      break;
514
      goto exit_main;
514
    } else {
515
    } else {
515
      printf("computed %s lang block of %u bytes\r\n", id, sz);
516
      printf("computed %s lang block of %u bytes\r\n", id, sz);
516
      if (sz > biggest_langsz) biggest_langsz = sz;
517
      if (sz > biggest_langsz) biggest_langsz = sz;
517
    }
518
    }
518
    svl_compact_lang(lang);
519
    svl_compact_lang(lang);
Line 520... Line 521...
520
    /* write header if first (reference) language */
521
    /* write header if first (reference) language */
521
    if (i == 1) {
522
    if (i == 1) {
522
      if (!svl_write_header(lang->num_strings, fd)) {
523
      if (!svl_write_header(lang->num_strings, fd)) {
523
        fprintf(stderr, "ERROR WRITING TO OUTPUT FILE\r\n");
524
        fprintf(stderr, "ERROR WRITING TO OUTPUT FILE\r\n");
524
        ecode = 1;
525
        ecode = 1;
525
        break;
526
        goto exit_main;
526
      }
527
      }
527
    }
528
    }
528
 
529
 
529
    /* write lang ID to file, followed string table size, and then
530
    /* write lang ID to file, followed string table size, and then
530
       the dictionary and string table for current language */
531
       the dictionary and string table for current language */
531
    if (!svl_write_lang(lang, fd)) {
532
    if (!svl_write_lang(lang, fd)) {
532
      fprintf(stderr, "ERROR WRITING TO OUTPUT FILE\r\n");
533
      fprintf(stderr, "ERROR WRITING TO OUTPUT FILE\r\n");
533
      ecode = 1;
534
      ecode = 1;
534
      break;
535
      goto exit_main;
535
    }
536
    }
536
 
537
 
537
    /* remember reference data for other languages */
538
    /* remember reference data for other languages */
538
    if (!reflang) {
539
    if (!reflang) {
539
      reflang = lang;
540
      reflang = lang;
Line 541... Line 542...
541
      svl_lang_free(lang);
542
      svl_lang_free(lang);
542
      lang = NULL;
543
      lang = NULL;
543
    }
544
    }
544
  }
545
  }
545
 
546
 
546
  if (ecode) return ecode;
-
 
547
 
-
 
548
  if (!reflang) {
547
  if (!reflang) {
549
    fprintf(stderr, "ERROR: NO LANGUAGE GIVEN\r\n");
548
    fprintf(stderr, "ERROR: NO LANGUAGE GIVEN\r\n");
550
    return 1;
549
    ecode = 1;
-
 
550
    goto exit_main;
551
  }
551
  }
552
 
552
 
553
  /* compute the deflang file containing a dump of the reference block */
553
  /* compute the deflang file containing a dump of the reference block */
554
  if (output_format == C_OUTPUT) {
554
  if (output_format == C_OUTPUT) {
555
    if (!svl_write_c_source(reflang, "deflang.c", biggest_langsz)) {
555
    if (!svl_write_c_source(reflang, "deflang.c", biggest_langsz)) {
Line 561... Line 561...
561
      fprintf(stderr, "ERROR: FAILED TO OPEN OR CREATE DEFLANG.INC\r\n");
561
      fprintf(stderr, "ERROR: FAILED TO OPEN OR CREATE DEFLANG.INC\r\n");
562
      ecode = 1;
562
      ecode = 1;
563
    }
563
    }
564
  }
564
  }
565
 
565
 
-
 
566
exit_main:
-
 
567
  if (lang && lang != reflang) {
-
 
568
    svl_lang_free(lang);
-
 
569
  }
-
 
570
  if (reflang) {
566
  svl_lang_free(reflang);
571
    svl_lang_free(reflang);
567
  reflang = NULL;
572
    reflang = NULL;
-
 
573
    lang = NULL;    
-
 
574
  }
-
 
575
 
-
 
576
  fclose(fd);
568
 
577
 
569
  return(ecode);
578
  return(ecode);
570
}
579
}