Beispiel #1
0
static void
write_msgstr (char *prefix, StringBlock *str, GSList *strn, po_write_modes mode, gboolean preserve_wrapping)
{
	int prefix_len = strlen(prefix);

	if (!(mode & NO_TRANSLATION)) {
		if (str && str->str) {
			potool_printf ("%smsgstr ", prefix);
			print_multi_line (str, 7 + prefix_len, prefix, preserve_wrapping);
		} else {
			GSList *x;
			for (x = strn; x != NULL; x = x->next) {
				MsgStrX *m = x->data;
				potool_printf ("%smsgstr[%d] ", prefix, m->n);
				print_multi_line (m->str, 10 + prefix_len, prefix, preserve_wrapping);
			}
		}
	} else {
		potool_printf ("%smsgstr \"\"\n", prefix);
	}
}
Beispiel #2
0
static void
po_write (PoFile *pof, po_write_modes mode, gboolean preserve_wrapping)
{
	GSList *l;

	for (l = pof->entries; l != NULL; l = l->next) {
		PoEntry *po = l->data;
		GSList *ll;

		if (!(mode & NO_STD_COMMENT)) {
			for (ll = po->comments.std; ll != NULL; ll = ll->next) {
				potool_printf ("#%s\n", (char *) ll->data);
			}
		}
		if (!(mode & NO_RES_COMMENT)) {
			for (ll = po->comments.res; ll != NULL; ll = ll->next) {
				potool_printf ("#%s\n", (char *) ll->data);
			}
		}
		if (!(mode & NO_POS_COMMENT)) {
			if (!(mode & NO_LINF)) {
				for (ll = po->comments.pos; ll != NULL; ll = ll->next) {
					potool_printf ("#:%s\n", (char *) ll->data);
				}
			} else {
				for (ll = po->comments.pos; ll != NULL; ll = ll->next) {
					char *s = g_strdup ((char *) ll->data);
					char *l, *r;

					l = r = s;
					while (*r != '\0') {
						if (*r == ':') {
							*l++ = ':';
							*l++ = '1';
							while (isdigit (*++r))
								;
						} else {
							*l++ = *r++;
						}
					}
					*l = '\0';
					potool_printf ("#:%s\n", s);
					g_free (s);
				}
			}
		}
		if (!(mode & NO_SPEC_COMMENT)) {
			for (ll = po->comments.spec; ll != NULL; ll = ll->next) {
				potool_printf ("#,%s\n", (char *) ll->data);
			}
		}
		if (!(mode & NO_PREVIOUS)) {
			if (po->previous.ctx) {
				potool_printf ("#| msgctxt ");
				print_multi_line (po->previous.ctx, 11, "", preserve_wrapping);
			}
			if (po->previous.id) {
				potool_printf ("#| msgid ");
				print_multi_line (po->previous.id, 9, "", preserve_wrapping);
			}
			if (po->previous.id_plural) {
				potool_printf ("#| msgid_plural ");
				print_multi_line (po->previous.id, 16, "", preserve_wrapping);
			}
		}
		if ((!(mode & NO_CTX)) && po->ctx) {
			potool_printf ("msgctxt ");
			print_multi_line (po->ctx, 8, "", preserve_wrapping);
		}
		if (!(mode & NO_ID)) {
			potool_printf ("msgid ");
			print_multi_line (po->id, 6, "", preserve_wrapping);
			if (po->id_plural) {
				potool_printf ("msgid_plural ");
				print_multi_line (po->id_plural, 13, "", preserve_wrapping);
			}
		}
		if (!(mode & NO_STR)) {
			write_msgstr ("", po->str, po->msgstrxs, mode, preserve_wrapping);
		}

		if (l->next != NULL) {
			potool_printf ("\n");
		}
	}

	if (pof->obsolete_entries != NULL) {
		potool_printf ("\n");
	}

	for (l = pof->obsolete_entries; l != NULL; l = l->next) {
		PoEntry *po = l->data;
		GSList *ll;

		if (!(mode & NO_STD_COMMENT)) {
			for (ll = po->comments.std; ll != NULL; ll = ll->next) {
				potool_printf ("#%s\n", (char *) ll->data);
			}
		}
		if (!(mode & NO_SPEC_COMMENT)) {
			for (ll = po->comments.spec; ll != NULL; ll = ll->next) {
				potool_printf ("#,%s\n", (char *) ll->data);
			}
		}
		if (!(mode & NO_PREVIOUS)) {
			if (po->previous.ctx) {
				potool_printf ("#~| msgctxt ");
				print_multi_line (po->previous.ctx, 12, "", preserve_wrapping);
			}
			if (po->previous.id) {
				potool_printf ("#~| msgid ");
				print_multi_line (po->previous.id, 10, "", preserve_wrapping);
			}
			if (po->previous.id_plural) {
				potool_printf ("#~| msgid_plural ");
				print_multi_line (po->previous.id, 17, "", preserve_wrapping);
			}
		}

		if ((!(mode & NO_CTX)) && po->ctx) {
			potool_printf ("#~ msgctxt ");
			print_multi_line (po->ctx, 11, "#~ ", preserve_wrapping);
		}

		if (!(mode & NO_ID)) {
			potool_printf ("#~ msgid ");
			print_multi_line (po->id, 9, "#~ ", preserve_wrapping);
			if (po->id_plural) {
				potool_printf ("#~ msgid_plural ");
				print_multi_line (po->id_plural, 16, "#~ ", preserve_wrapping);
			}
		}
		if (!(mode & NO_STR)) {
			write_msgstr ("#~ ", po->str, po->msgstrxs, mode, preserve_wrapping);
		}

		if (l->next != NULL) {
			potool_printf ("\n");
		}
	}
}
Beispiel #3
0
int main(int argc, char* argv[])
{
  static const struct option options[] = {
    { "devices" , no_argument , 0 , 'd' } ,
    { "verbose" , no_argument , 0 , 'v' } ,
    { "help"    , no_argument , 0 , 'h' } ,
    { "version" , no_argument , 0 , 'V' } ,
    { NULL , 0 , 0 , 0 }
  };

  int status = EXIT_SUCCESS;
  int r;

  // Parse options:
  int verbose = 0;
  int show_devices = 0;

  while((r = getopt_long(argc, argv, "dvhV", options, 0)) != -1 )
  {
    switch(r)
    {
      case 'h':
        print_help();
        exit(EXIT_SUCCESS);

      case 'd':
        show_devices = 1;
        break;

      case 'v':
        if(verbose < VERBOSE_MAX)
          verbose++;
        break;

      case 'V':
        print_version();
        exit(EXIT_SUCCESS);

      default:
        print_help();
        exit(EXIT_FAILURE);
    }
  }

  struct opentmf_context* ctx;
  if((r = opentmf_init(&ctx)) != OPENTMF_SUCCESS)
  {
    fprintf(stderr, "Error initializing library: %s (%d)\n", opentmf_get_status_str(r), r);
    return EXIT_FAILURE;
  }

  char** list = NULL;
  if((r = opentmf_get_driver_list(ctx, &list)) == OPENTMF_SUCCESS)
  {
    size_t url_size = 1024;
    char* url = malloc(url_size);
    char** driver_name = list;
    struct opentmf_handle* drv;

    while(*driver_name)
    {
      if(10 + strlen(*driver_name) >= url_size)
      {
        url_size *= 2;
        url = realloc(url, url_size);
      }

      url[0] = '\0';
      strcat(url, "opentmf://");
      strcat(url, *driver_name);

      if((r = opentmf_open(ctx, url, &drv)) == OPENTMF_SUCCESS)
      {
        const struct opentmf_driver_info* info = opentmf_drv_get_info(drv);

        switch(verbose)
        {
          case 0:
            printf("%s\n", info->name);
            break;

          case 1:
            printf("%s\t%u.%u", info->name, info->version.major, info->version.minor);
            if(info->version.patch > 0)
              printf(".%u", info->version.patch);
            printf("%s\t%s\t%s\n", info->version.extra, info->license, info->non_free ? "non-free" : "free");
            break;

          case 2:
            printf("Driver: %s\n", info->name);
            printf("Version: %u.%u", info->version.major, info->version.minor);
            if(info->version.patch > 0)
              printf(".%u", info->version.patch);
            printf("%s\n", info->version.extra);
            print_multi_line("Description", info->description);
            print_multi_line("Authors", info->authors);
            printf("License: %s\n",info->license);
            printf("Free: %s\n", info->non_free ? "no" : "yes");
            printf("\n");
            break;
        }

        if(show_devices)
        {
          char** device_list = NULL;

          if((r = opentmf_drv_get_device_list(drv, &device_list)) == OPENTMF_SUCCESS)
          {
            struct opentmf_handle* dev;
            char** device = device_list;
            size_t url_base_len = strlen(url);

            while(*device)
            {
              url[url_base_len] = '\0';
              strcat(url, *device);

              if((r = opentmf_open(ctx, url, &dev)) == OPENTMF_SUCCESS)
              {
                const struct opentmf_device_info* device_info = opentmf_dev_get_info(dev);

                switch(verbose)
                {
                  case 0:
                    printf("  %s\n", *device);
                    break;

                  case 1:
                    printf("  %s\t%s\t%s\n", *device, device_info->name, device_info->serial);
                    break;

                  case 2:
                    printf("  Path: %s\n", *device);
                    printf("  Name: %s\n", device_info->name);
                    printf("  Serial: %s\n", device_info->serial);
                    printf("\n");
                    break;
                }

                opentmf_close(dev);
              }
              else
                fprintf(stderr, "Error opening device `%s`: %s (%d)\n", *device, opentmf_get_status_str(r), r);

              device++;
            }

            if((r = opentmf_drv_free_device_list(drv, device_list)) != OPENTMF_SUCCESS)
              fprintf(stderr, "Error freeing device list: %s (%d)\n", opentmf_get_status_str(r), r);
          }
          else
            fprintf(stderr, "Error getting device list: %s (%d)\n", opentmf_get_status_str(r), r);
        }
        opentmf_close(drv);
      }
      else
        fprintf(stderr, "Error opening driver `%s`: %s (%d)\n", *driver_name, opentmf_get_status_str(r), r);

      driver_name++;
    }

    free(url);

    if((r = opentmf_free_driver_list(ctx, list)) != OPENTMF_SUCCESS)
      fprintf(stderr, "Error freeing driver list: %s (%d)\n", opentmf_get_status_str(r), r);
  }
  else
  {
    fprintf(stderr, "Error getting driver list: %s (%d)\n", opentmf_get_status_str(r), r);
    status = EXIT_FAILURE;
  }

  if((r = opentmf_exit(ctx)) != OPENTMF_SUCCESS)
  {
    fprintf(stderr, "Error finalizing library: %s (%d)\n", opentmf_get_status_str(r), r);
    status = EXIT_FAILURE;
  }

  return status;
}