Exemplo n.º 1
0
void FC_FUNC_(getopt_help, GETOPT_HELP)
     (STR_F_TYPE mode, STR_F_TYPE name STR_ARG2)
{
  int c;

#if defined(HAVE_GETOPT_LONG)
  static struct option long_options[] =
    {
      {"help", no_argument, 0, 'h'},
      {"version", no_argument, 0, 'v'},
      {"list", no_argument, 0, 'l'},
      {"search", required_argument, 0, 's'},
      {"print", required_argument, 0, 'p'},
      {0, 0, 0, 0}
    };
#endif


  while (1) {
    int option_index = 0;
#if defined(HAVE_GETOPT_LONG)
    c = getopt_long(argc, argv, "hvls:p:", long_options, &option_index);
#else
    c = getopt(argc, argv, "hvls:p:");
#endif
    if(argc==1) help_help();
    if (c == -1) break;
    switch (c) {

    case 'h':
      help_help();
      break;

    case 'v':
      printf("octopus %s (svn version %s)\n", PACKAGE_VERSION, LATEST_SVN);
      exit(0);

    case 'l':
      TO_F_STR1("list", mode);
      return;

    case 's':
      TO_F_STR1("search", mode);
      TO_F_STR2(optarg, name);
      return;

    case 'p':
      TO_F_STR1("print", mode);
      TO_F_STR2(optarg, name);
      return;

    }
  }
  if (optind < argc) help_help();

}
Exemplo n.º 2
0
void FC_FUNC_(oct_basename, OCT_BASENAME)
     (STR_F_TYPE fnam, STR_F_TYPE bnam STR_ARG2)
{
  char *fn=NULL, *bn=NULL;
  TO_C_STR1(fnam, fn);
  bn = basename(fn);
  free(fn);
  if(bn!=NULL){
    TO_F_STR2(bn, bnam);
  }else{
    TO_F_STR2("", bnam);
  }
  return;
}
Exemplo n.º 3
0
void FC_FUNC_(oct_dirname, OCT_DIRNAME)
     (STR_F_TYPE fnam, STR_F_TYPE dnam STR_ARG2)
{
  char *fn=NULL, *dn=NULL;
  TO_C_STR1(fnam, fn);
  dn = dirname(fn);
  if(dn!=NULL){
    TO_F_STR2(dn, dnam);
  }else{
    TO_F_STR2("", dnam);
  }
  free(fn);
  return;
}
Exemplo n.º 4
0
void FC_FUNC_(oct_getenv, OCT_GETENV)
  (STR_F_TYPE var, STR_F_TYPE value STR_ARG2)
{
  char *name_c, *var_c;

  TO_C_STR1(var, name_c);
  var_c = getenv(name_c);
  free(name_c);

  if(var_c != NULL){
    TO_F_STR2(var_c, value);
  }else{
    TO_F_STR2("", value);
  }
}
Exemplo n.º 5
0
void FC_FUNC_(oct_realpath, OCT_REALPATH)
     (STR_F_TYPE fnam, STR_F_TYPE rnam STR_ARG2)
{
  char *fn=NULL, *rn=NULL;
  TO_C_STR1(fnam, fn);
  rn = realpath(fn, NULL);
  free(fn);
  if(rn!=NULL){
    TO_F_STR2(rn, rnam);
  }else{
    TO_F_STR2("", rnam);
  }
  free(rn);
  return;
}
Exemplo n.º 6
0
void FC_FUNC_(oct_stat, OCT_STAT)
     (fint *ierr, STR_F_TYPE name, STR_F_TYPE mod_time STR_ARG2)
{
  char *name_c, *mod_time_c;
  struct stat statbuf;
  time_t mtime;
  struct tm * timeinfo;

  TO_C_STR1(name, name_c);
  *ierr = stat(name_c, &statbuf);
  free(name_c);

  if(*ierr == 0)
  {
    mtime = statbuf.st_mtime; /* last modification time */
    timeinfo = localtime(&mtime);
    mod_time_c = asctime(timeinfo);
  }
  else
  {
    perror(name_c); /* what is the problem? */
    mod_time_c = malloc(sizeof(char));
    mod_time_c[0] = '\0';
  }

  TO_F_STR2(mod_time_c, mod_time);
  if(*ierr != 0)
  {
    printf("ierr = %i\n", *ierr);
    free(mod_time_c);
  }
  /* otherwise, do not do this since 'mod_time_c' points at static data of asctime */
}
Exemplo n.º 7
0
void FC_FUNC_(oct_printrecipe, OCT_PRINTRECIPE)
  (STR_F_TYPE _dir, STR_F_TYPE filename STR_ARG2)
{

#if defined(HAVE_SCANDIR) && defined(HAVE_ALPHASORT)
  char *lang, *tmp, dir[512];
  struct dirent **namelist;
  int ii, nn;
  gsl_rng *rng;

  /* get language */
  lang = getenv("LANG");
  if(lang == NULL) lang = "en";

  /* convert directory from Fortran to C string */
  TO_C_STR1(_dir, tmp);
  strcpy(dir, tmp);
  free(tmp);

  strcat(dir, "/recipes");

  /* check out if lang dir exists */
  nn = scandir(dir, &namelist, 0, alphasort);
  if (nn < 0){
    printf("Directory does not exist: %s", dir);
    return;
  }

  for(ii=0; ii<nn; ii++)
    if(strncmp(lang, namelist[ii]->d_name, 2) == 0){
      strcat(dir, "/");
      strcat(dir, namelist[ii]->d_name);
      break;
    }

  if(ii == nn)
    strcat(dir, "/en"); /* default */

  /* clean up */
  for(ii=0; ii<nn; ii++)
    free(namelist[ii]);
  free(namelist);

  /* now we read the recipes */
  nn = scandir(dir, &namelist, 0, alphasort);
	
  /* initialize random numbers */
  gsl_rng_env_setup();
  rng = gsl_rng_alloc(gsl_rng_default);
  gsl_rng_set(rng, random_seed());
  ii = gsl_rng_uniform_int(rng, nn - 2);
  gsl_rng_free(rng);

  strcat(dir, "/");
  strcat(dir, namelist[ii+2]->d_name); /* skip ./ and ../ */

  /* clean up again */
  for(ii=0; ii<nn; ii++)
    free(namelist[ii]);
  free(namelist);

  TO_F_STR2(dir, filename);

#else
  printf("Sorry, recipes cannot be printed unless scandir and alphasort are available with your C compiler.\n");
#endif
}