Ejemplo n.º 1
0
/* This output routine uses two temporary files to keep the
   both the command line syntax of autotrace and the 
   pstoedit API. 

   shape -> bo file(tmpfile_name_p2e) 
   -> specified formatted file(tmpfile_name_pstoedit) 
   -> file */
static int
output_pstoedit_writer (FILE* file, gchar* name,
			int llx, int lly, int urx, int ury, 
			at_output_opts_type * opts,
			at_spline_list_array_type shape,
			at_msg_func msg_func, 
			gpointer msg_data,
			gpointer user_data)
{
  at_spline_writer *  p2e_writer = NULL;
  char  tmpfile_name_p2e[] = TMPDIR "at-bo-" "XXXXXX";
  char  tmpfile_name_pstoedit[] = TMPDIR "at-fo-" "XXXXXX";
  const gchar* symbolicname = (const gchar*)user_data;
  FILE * tmpfile;
  int result = 0;
  int c;

  int argc;
#define CMD_INDEX         0
#define SYMBOLICNAME_FLAG_INDEX 1
#define SYMBOLICNAME_VAL_INDEX  2
#define BO_FLAG_INDEX     3
#define INPUT_INDEX       4
#define OUTPUT_INDEX      5
  const char * argv[]  = {"pstoedit", "-f", 0, "-bo", 0, 0};

  argc = sizeof(argv) / sizeof(char *);

  tmpfile = make_temporary_file(tmpfile_name_p2e, "w");
  if (NULL == tmpfile)
    {
      result = -1;
      goto remove_tmp_p2e;
    }

  /* 
   * shape -> bo file 
   */
  p2e_writer = at_output_get_handler_by_suffix ("p2e");
  at_splines_write (p2e_writer, 
		    tmpfile, 
		    tmpfile_name_p2e,
		    opts, 
		    &shape, 
		    msg_func,
		    msg_data);
		    
  fclose(tmpfile);

  tmpfile = make_temporary_file(tmpfile_name_pstoedit, "r");
  if (NULL == tmpfile)
    {
      result = -1;
      goto remove_tmp_pstoedit;
    }

  /*
   * bo file -> specified formatted file 
   */
  argv[SYMBOLICNAME_VAL_INDEX] = symbolicname;
  argv[INPUT_INDEX]      = tmpfile_name_p2e;
  argv[OUTPUT_INDEX]     = tmpfile_name_pstoedit;
  pstoedit_plainC(argc, argv, NULL);

  /*
   * specified formatted file(tmpfile_name_pstoedit) -> file  
   */
  /* fseek(tmpfile, 0, SEEK_SET); */
  while (EOF != (c = fgetc(tmpfile)))
    fputc(c, file);
  fclose(tmpfile);
  
 remove_tmp_pstoedit:
  remove_temporary_file(tmpfile_name_pstoedit);
 remove_tmp_p2e:
  remove_temporary_file(tmpfile_name_p2e);
  return result;
}
Ejemplo n.º 2
0
/* This output routine uses two temporary files to keep the
   both the command line syntax of autotrace and the 
   pstoedit API. 

   shape -> bo file(tmpfile_name_p2e) 
   -> specified formatted file(tmpfile_name_pstoedit) 
   -> file */
static int
output_pstoedit_writer (const at_string suffix,
			FILE* file, at_string name,
			int llx, int lly, int urx, int ury, 
			at_output_opts_type * opts,
			at_spline_list_array_type shape,
			at_msg_func msg_func, 
			at_address msg_data)
{
  char  tmpfile_name_p2e[] = TMPDIR "at-bo-" "XXXXXX";
  char  tmpfile_name_pstoedit[] = TMPDIR "at-fo-" "XXXXXX";
  char * symbolicname;
  FILE * tmpfile;
  int result = 0;
  int c;

  int argc;
#define CMD_INDEX         0
#define SYMBOLICNAME_FLAG_INDEX 1
#define SYMBOLICNAME_VAL_INDEX  2
#define BO_FLAG_INDEX     3
#define INPUT_INDEX       4
#define OUTPUT_INDEX      5
  char * argv[]  = {"pstoedit", "-f", 0, "-bo", 0, 0};

  argc = sizeof(argv) / sizeof(char *);

  if (false == pstoedit_suffix_table_lookup_shallow(suffix))
    {
      if (msg_func) 
	msg_func ("Suffix for pstoedit backend driver is wrong", 
		  AT_MSG_WARNING, msg_data);
      return -1;
    }

  symbolicname = get_symbolicname(suffix);
  if (!symbolicname)
    {
      if (msg_func) 
	msg_func ("Symbolicname for pstoedit backend driver is wrong", 
		  AT_MSG_WARNING, msg_data);
      return -1;
    }
  
  tmpfile = make_temporary_file(tmpfile_name_p2e, "w");
  if (NULL == tmpfile)
    {
      result = -1;
      goto remove_tmp_p2e;
    }

  /* 
   * shape -> bo file 
   */
  output_p2e_writer(tmpfile, tmpfile_name_p2e,
		    llx, lly, urx, ury, opts,
		    shape, msg_func, msg_data);
  fclose(tmpfile);

  tmpfile = make_temporary_file(tmpfile_name_pstoedit, "r");
  if (NULL == tmpfile)
    {
      result = -1;
      goto remove_tmp_pstoedit;
    }

  /*
   * bo file -> specified formatted file 
   */
  argv[SYMBOLICNAME_VAL_INDEX] = symbolicname;
  argv[INPUT_INDEX]      = tmpfile_name_p2e;
  argv[OUTPUT_INDEX]     = tmpfile_name_pstoedit;
  pstoedit_plainC(argc, argv, NULL);

  /*
   * specified formatted file(tmpfile_name_pstoedit) -> file  
   */
  /* fseek(tmpfile, 0, SEEK_SET); */
  while (EOF != (c = fgetc(tmpfile)))
    fputc(c, file);
  fclose(tmpfile);
  
 remove_tmp_pstoedit:
  remove_temporary_file(tmpfile_name_pstoedit);
 remove_tmp_p2e:
  remove_temporary_file(tmpfile_name_p2e);
  free(symbolicname);
  return result;
}