#include #include #include #ifndef UNIX #include #endif #ifdef UNIX #include #include #endif #include "aplinks.h" #include "disp_ctr.h" int set_outdir(int argc, char *argv[], char *output_dir) { int i; DIR *dirp; char specify_dir[MAX_DIR_LEN]; #ifdef UNIX glob_t glob_p; int glob_flags; glob_flags = GLOB_MAGCHAR | GLOB_MARK | GLOB_NOCHECK | GLOB_NOSORT | GLOB_TILDE; #endif strcpy(output_dir, ""); strcpy(specify_dir, ""); for(i = 1; i < argc; i++){ if(strncmp(argv[i], "-O", 2) == 0){ if(argv[i][2] == '\0'){ strcpy(specify_dir, argv[i + 1]); } else{ strcpy(specify_dir, &argv[i][2]); } } } if(strcmp(specify_dir, "") != 0){ #ifdef UNIX if(glob(specify_dir, glob_flags, NULL, &glob_p) != 0){ displist_c_printf(2, "Output directory expand error!\n"); } /* GLOB_ERR is not continue when entount that a directory can't open or read. */ /* GLOB_MARK is slash appended. */ /* GLOB_NOCHECK is set pathc to 1 and set matchc to 0 if pattern does not match any pathnamne. */ /* GLOB_NOSORT is no-sorting pathnames(speed up) */ /* GLOB_TILDE is expand '~' to user name home directory */ /* GLOB_TILDE flag can't use caused by difference of environment, because non-standard extensions to IEEE Std1003.2 (``POSIX''). */ c_printf(4, "glob_p.gl_pathv: %s\n", glob_p.gl_pathv[0]); strcpy(specify_dir, glob_p.gl_pathv[0]); globfree(&glob_p); #endif if((dirp = opendir(specify_dir)) == NULL){ displist_c_printf(2, "Specified output directory \"%s\" is not directory.\n", specify_dir); } else{ closedir(dirp); strcpy(output_dir, specify_dir); displist_c_printf(-1, "Set output directory (on)to \""); displist_c_printf(5, "%s", output_dir); displist_c_printf(-1, "\".\n"); } } if(strcmp(output_dir, "") == 0){ /* オプションで指定されたディレクトリがディレクトリでなかった or オプションで指定されなかった。 */ strcpy(output_dir, DEFAULT_OUTPUTDIR); /* aplinks.h のデフォルト出力ディレクトリへの設定を試みる */ #ifdef UNIX if(glob(output_dir, glob_flags, NULL, &glob_p) != 0){ displist_c_printf(2, "Output directory expand error!\n"); } strcpy(output_dir, glob_p.gl_pathv[0]); globfree(&glob_p); #endif if((dirp = opendir(output_dir)) == NULL){ /* デフォルト出力ディレクトリがディレクトリでなかった。 */ displist_c_printf(2, "Default output directory \"%s\" is not directory.\n", output_dir); /* カレントディレクトリに設定する。 */ getcwd(output_dir, MAX_DIR_LEN); displist_c_printf(6, "Set output directory (on)to current directory \""); displist_c_printf(5, "%s", output_dir); displist_c_printf(6, "\".\n"); } else{ closedir(dirp); displist_c_printf(-1, "Set output directory (on)to \""); displist_c_printf(5, "%s", output_dir); displist_c_printf(-1, "\"(Default output directory).\n"); } } return 0; }