예제 #1
0
파일: eruby_main.c 프로젝트: shugo/eruby
static void proc_args(int argc, char **argv)
{
    int option_index;

    ruby_script(argv[0]);

    switch (eruby_parse_options(argc, argv, &option_index)) {
    case 1:
	eruby_exit(0);
    case 2:
	eruby_exit(2);
    }

    if (eruby_mode == MODE_UNKNOWN)
	eruby_mode = guess_mode();

    if (eruby_mode == MODE_CGI || eruby_mode == MODE_NPHCGI) {
	char *path;
        char *tmp_qs;
	char *query_string;
	int qs_has_equal;
	char *path_translated;

	if ((path = getenv("PATH_INFO")) != NULL &&
	    strcmp(path, "/logo.png") == 0) {
	    give_img_logo(eruby_mode);
	    eruby_exit(0);
	}

	if ((tmp_qs = getenv("QUERY_STRING")) == NULL) {
	    query_string = "";
        }
        else {
            query_string = eruby_xmalloc(strlen(tmp_qs) + 1);
            strcpy(query_string, tmp_qs);
        }
	qs_has_equal = (strchr(query_string, '=') != NULL);

	if ((path_translated = getenv("PATH_TRANSLATED")) == NULL)
	    path_translated = "";

	if (path_translated[0] &&
	    ((option_index == argc &&
	      (!query_string[0] || qs_has_equal)) ||
	     (option_index == argc - 1 &&
	      !qs_has_equal && strcmp(argv[option_index], query_string) == 0))) {
	    eruby_filename = path_translated;
	}
	else if ((option_index == argc - 1 &&
		  (!query_string[0] || qs_has_equal)) ||
		 (option_index == argc - 2 &&
		  !qs_has_equal &&
		  strcmp(argv[option_index + 1], query_string) == 0)) {
	    eruby_filename = argv[option_index];
	}
	else {
	    fprintf(stderr, "%s: missing required file to process\n", argv[0]);
	    eruby_exit(1);
	}
        if (tmp_qs) free(query_string);
    }
    else {
	if (option_index == argc) {
	    eruby_filename = "-";
	}
	else {
	    eruby_filename = argv[option_index++];
            ruby_set_argv(argc - option_index, argv + option_index);
	}
    }
}
예제 #2
0
int main(int argc, char **argv)
{
  char *in_name, *out_name, *s;
  struct umatrix *umat;
  struct eps_info einfo;
  int average = 0;
  int median = 0;
  FILE *out_fp;
  struct file_info *out_fi;

  global_options(argc, argv);
  if (extract_parameter(argc, argv, "-help", OPTION2))
    {
      printhelp();
      exit(0);
    }
  
  in_name = NULL;
  out_name = NULL;

  /* default page size is A4 */
  set_paper(get_paper_by_id(PAPER_A4));

  /* parse args */
  
  if (extract_parameter(argc, argv, "-border", OPTION2))
    doborder = 1;

  if (extract_parameter(argc, argv, "-portrait", OPTION2))
    orientation = PORTRAIT;

  if (extract_parameter(argc, argv, "-landscape", OPTION2))
    orientation = LANDSCAPE;

  if (extract_parameter(argc, argv, "-ps", OPTION2))
    mode = OUTPUT_PS;

  if (extract_parameter(argc, argv, "-eps", OPTION2))
    mode = OUTPUT_EPS;

  white_treshold = oatof(extract_parameter(argc, argv, "-W", OPTION), 1.0);

  black_treshold = oatof(extract_parameter(argc, argv, "-B", OPTION), 0.0);

  out_name = extract_parameter(argc, argv, "-o", OPTION);
  if (mode == 0)
    mode = guess_mode(out_name);

  if ((s = extract_parameter(argc, argv, "-font", OPTION)))
    fontname = s;

  fontsize = oatof(extract_parameter(argc, argv, "-fontsize", OPTION), -1.0);
  
  title = extract_parameter(argc, argv, "-title", OPTION);
  
  if (extract_parameter(argc, argv, "-notitle", OPTION2))
    notitle = 1;

  if ((s = extract_parameter(argc, argv, "-paper", OPTION)))
    {
      struct paper_info *p = get_paper_by_name(s);
      if (p == NULL)
	{
	  fprintf(stderr, "Unknown paper type: %s\n", s);
	  exit(1);
	}
      set_paper(p);
    }

  if (extract_parameter(argc, argv, "-average", OPTION2))
    average = 1;

  if (extract_parameter(argc, argv, "-median", OPTION2))
    median = 1;

  if (extract_parameter(argc, argv, "-onlylabs", OPTION2))
    drawblocks = 0;

  if (extract_parameter(argc, argv, "-nolabs", OPTION2))
    drawlabels = 0;

  in_name = extract_parameter(argc, argv, IN_CODE_FILE, ALWAYS);

  if ((s = getenv("UMAT_HEADERFILE")))
    headerfile = s;

  if ((s = extract_parameter(argc, argv, "-headerfile", OPTION)))
    headerfile = s;

  label_not_needed(1);

  if ((umat = read_map(in_name, 0, 0)) == NULL)
    {
      fprintf(stderr, "Can't load file\n");
      exit(1);
    }

  calc_umatrix(umat, 0, 0);

  if (average)
    average_umatrix(umat);

  if (median)
    median_umatrix(umat);

  if (mode == 0)
    mode = OUTPUT_EPS;
    
  if (orientation == BEST)
    orientation =  (umat->mxdim >= umat->mydim) ? LANDSCAPE : PORTRAIT;

  if ((out_fi = open_file(out_name, "w")) == NULL)
    {
      fprintf(stderr, "can't open output file\n");
      free_umat(umat);
      exit(1);
    }
  out_fp = fi2fp(out_fi);

  einfo.umat = umat;
  einfo.title = title ? title : in_name;
      
  image_size(&einfo, 0);
      
  if (mode == OUTPUT_EPS)
    print_eps(out_fp, &einfo);
  else
    print_page(out_fp, &einfo);

  free_umat(umat);
  umat = NULL;

  if (out_fi)
    close_file(out_fi);

  return 0;
}