/****************************************************************************** envc.c (Env Clear) 環境変数をクリアするための補助プログラム 97/12/20(Sat) /E.Suzuki ****************************************************************************** 環境変数 COMSPEC を消すとえらいことになるので、デフォルトで無視する用に変更 98/01/10(Sat) /E.Suzuki ******************************************************************************/ #include #include #define IGMAX 40 /* 無視する文字列の最大数 */ int prs_op(char *argv[],char *igstr[]); int print_env_clear(char *envp[],char *igstr[]); char *strdcpy(char *dst,char *src,char dt); void usage(void); /****************************************************************************** メイン関数 ******************************************************************************/ /* 第三の引数もゲット */ int main(int argc,char *argv[],char *envp[]) { char *igstr[IGMAX+1];/* 無視する文字列(最後はNULL) */ if(argc);/*ワーニング対策*/ if(prs_op(argv,igstr))/*オプションをパース*/ { print_env_clear(envp,igstr);/*標準出力に表示*/ } else usage();/*使い方を表示*/ return 0; } /****************************************************************************** コマンドラインオプションから無視する文字列をゲット ヘルプを表示するオプションのときは返値を変更 後の処理を実行するときは返値1 そうでないときは返値0 ******************************************************************************/ int prs_op(char *argv[],char *igstr[]) { int i,ret,ig; ig=0; /* 無視する文字列の数 */ ret=1; /* 返値 */ i=0; /* ループカウンタ */ igstr[ig]=strdup("COMSPEC"); /*COMSPEC は有無を言わさず無視する*/ ig++;/*数を増やす*/ while(argv[++i]) { if(argv[i][0]=='-')/*引数が '-' で始まるときは解釈 */ { if (!strcmp(argv[i],"-v"))ret=0; else if(!strcmp(argv[i],"-h"))ret=0;/*usageを表示*/ else if(!strcmp(argv[i],"-?"))ret=0; else { if(igencv > clrenv.bat\n\ a:\\>clrenv.bat\n\ a:\\>del clrenv.bat\n\ \n\ [usage]\n\ a:\\>envc [-h,-v,-?] [-env1 ,-env2 ...]\n\ [option]\n\ [-h,-v,-?] このメッセージを表示します\n\ [-env1 ,-env2 ...] 一致した環境変数を出力しません\n\ "); return ; }