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(); }
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; }
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; }
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); } }
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; }
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 */ }
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 }