リビジョン | 96230bddddb9bf445c54364261aa8dcd09257664 (tree) |
---|---|
日時 | 2011-03-03 22:38:58 |
作者 | tfuruka1 <tfuruka1> |
コミッター | tfuruka1 |
getoptに対応等
@@ -1,6 +1,5 @@ | ||
1 | 1 | /* -*- mode: c++; coding: sjis-dos; -*- |
2 | - * $Id: main.c,v 1.2 2007/10/04 14:49:36 tfuruka1 Exp $ | |
3 | - * $Name: $ | |
2 | + * $Id: main.c,v 1.3 2011/03/03 13:38:58 tfuruka1 Exp $ | |
4 | 3 | * |
5 | 4 | * 標準入力から読み込んだ値の行末をCRLFに変換し、標準出力に出力します。 |
6 | 5 | * |
@@ -9,13 +8,8 @@ | ||
9 | 8 | * 一切行なっていません。Cygwinのsed等で処理すると、行末がlfに変換され |
10 | 9 | * るので、フィルターとして使用する事を想定しています。 |
11 | 10 | * |
12 | - * $Log: main.c,v $ | |
13 | - * Revision 1.2 2007/10/04 14:49:36 tfuruka1 | |
14 | - * Copyrightの年が間違えてました。 | |
15 | - * | |
16 | - * Revision 1.1 2006/11/15 12:08:04 tfuruka1 | |
17 | - * 新規追加 | |
18 | - * | |
11 | + * 2007/10/04 Copyrightの年が間違えてました。 | |
12 | + * 2006/11/15 新規追加 | |
19 | 13 | */ |
20 | 14 | #include <windows.h> |
21 | 15 | #include <stdio.h> |
@@ -23,6 +17,8 @@ | ||
23 | 17 | #include <sys/types.h> |
24 | 18 | #include <sys/stat.h> |
25 | 19 | |
20 | +#include "getopt.h" | |
21 | + | |
26 | 22 | #define VERSION "Crlf Version 1.0" |
27 | 23 | #define COPYRIGHT "Copyright (c) 2006 T.Furukawa\n\n"\ |
28 | 24 | "標準入力又はファイルから読み込んだテキストの改行コードを CR+LF\n"\ |
@@ -34,7 +30,7 @@ | ||
34 | 30 | #define HELP \ |
35 | 31 | " -d, --direct 結果を入力ファイルに書き戻します。\n"\ |
36 | 32 | " このオプションを指定した場合、入力ファイルは必須です。\n"\ |
37 | - " -?, --help このヘルプメッセージを表示します。\n"\ | |
33 | + " -h, --help このヘルプメッセージを表示します。\n"\ | |
38 | 34 | " --usage 簡潔な使用方法を表示します。\n"\ |
39 | 35 | " --version ヴァージョン情報を表示します。\n"\ |
40 | 36 | "\nReport bugs to <tfuruka1@nifty.com>." |
@@ -79,32 +75,38 @@ makeBackupFile(LPTSTR lpFileName) | ||
79 | 75 | int |
80 | 76 | main(int argc, char *argv[]) |
81 | 77 | { |
82 | - int i; | |
83 | 78 | int c; |
79 | + int option_index; | |
84 | 80 | BOOL bDirect = FALSE; |
85 | - | |
86 | - for (i = 1; i < argc; i++) { | |
87 | - if ('-' != *argv[i]) { | |
81 | + static struct option options[] = { | |
82 | + {"direct", no_argument, NULL, 'd'}, | |
83 | + {"help", no_argument, NULL, 'h'}, | |
84 | + {"usage", no_argument, NULL, 'u'}, | |
85 | + {"version", no_argument, NULL, 'v'}, | |
86 | + {NULL, 0, NULL, 0} | |
87 | + }; | |
88 | + | |
89 | + while (-1 != (c = getopt_long (argc, argv, "dh", | |
90 | + options, &option_index))) { | |
91 | + switch (c) { | |
92 | + case 'd': | |
93 | + bDirect = TRUE; | |
88 | 94 | break; |
89 | - } | |
90 | - if (0 == strcmp("--version", argv[i]) | |
91 | - || 0 == strcmp("--v", argv[i])) { | |
92 | - showVersion(); | |
93 | - return 1; | |
94 | - } else if (0 == strcmp("--usage", argv[i])) { | |
95 | + case 'h': | |
96 | + showHelp(); | |
97 | + return 0; | |
98 | + case 'u': | |
95 | 99 | showUsage(); |
100 | + return 0; | |
101 | + case 'v': | |
102 | + showVersion(); | |
103 | + return 0; | |
104 | + case '?': | |
105 | + fprintf(stderr, "詳しくは `crlf --help' を実行して下さい.\n"); | |
96 | 106 | return 1; |
97 | - } else if (0 == strcmp("--help", argv[i]) | |
98 | - || 0 == strcmp("-?", argv[i])) { | |
99 | - showHelp(); | |
107 | + default: | |
108 | + fprintf(stderr, "想定外のgetoptからの戻り: %c\n", c); | |
100 | 109 | return 1; |
101 | - } else if (0 == strcmp("-d", argv[i]) | |
102 | - || 0 == strcmp("--direct", argv[i])) { | |
103 | - bDirect = TRUE; | |
104 | - } else { | |
105 | - fprintf(stderr, "不正なオプションです: %s\n", argv[i]); | |
106 | - showUsage(); | |
107 | - return 2; | |
108 | 110 | } |
109 | 111 | } |
110 | 112 |
@@ -115,64 +117,72 @@ main(int argc, char *argv[]) | ||
115 | 117 | FILE *fp; |
116 | 118 | size_t size; |
117 | 119 | size_t cnt; |
120 | + int ret; | |
118 | 121 | |
119 | - if (!argv[i]) { | |
122 | + if (!argv[optind]) { | |
120 | 123 | fprintf(stderr, "-d, --directオプションを指定した場合は" |
121 | 124 | "入力ファイルは必須です。\n"); |
122 | 125 | return 2; |
123 | 126 | } |
127 | + for (; argv[optind]; optind++) { | |
128 | + if (0 != _stat(argv[optind], &stat)) { | |
129 | + perror(argv[optind]); | |
130 | + ret++; | |
131 | + continue; | |
132 | + } | |
124 | 133 | |
125 | - if (0 != _stat(argv[i], &stat)) { | |
126 | - perror(argv[i]); | |
127 | - return 3; | |
128 | - } | |
129 | - | |
130 | - if (!(lpBuf = (LPTSTR) malloc(stat.st_size + 1))) { | |
131 | - fprintf(stderr, "メモリ不足です。\n"); | |
132 | - return 3; | |
133 | - } | |
134 | + if (!(lpBuf = (LPTSTR) malloc(stat.st_size + 1))) { | |
135 | + fprintf(stderr, "メモリ不足です。\n"); | |
136 | + ret++; | |
137 | + continue; | |
138 | + } | |
134 | 139 | |
135 | - if (!(fp = fopen(argv[i], "rb"))) { | |
136 | - perror(argv[i]); | |
137 | - free(lpBuf); | |
138 | - return 3; | |
139 | - } | |
140 | - size = fread(lpBuf, 1, stat.st_size, fp); | |
141 | - if (size != (size_t) stat.st_size) { | |
142 | - fprintf(stderr, "入力ファイルを最後迄読み込めません。\n" | |
143 | - "\tファイルサイズ: %u\n" | |
144 | - "\t読み込みサイズ: %u\n", stat.st_size, size); | |
145 | - free(lpBuf); | |
140 | + if (!(fp = fopen(argv[optind], "rb"))) { | |
141 | + perror(argv[optind]); | |
142 | + free(lpBuf); | |
143 | + ret++; | |
144 | + continue; | |
145 | + } | |
146 | + size = fread(lpBuf, 1, stat.st_size, fp); | |
147 | + if (size != (size_t) stat.st_size) { | |
148 | + fprintf(stderr, "入力ファイルを最後迄読み込めません。\n" | |
149 | + "\tファイルサイズ: %u\n" | |
150 | + "\t読み込みサイズ: %u\n", stat.st_size, size); | |
151 | + free(lpBuf); | |
152 | + fclose(fp); | |
153 | + ret++; | |
154 | + continue; | |
155 | + } | |
146 | 156 | fclose(fp); |
147 | - return 3; | |
148 | - } | |
149 | - fclose(fp); | |
150 | - | |
151 | - makeBackupFile(argv[i]); | |
152 | 157 | |
153 | - if (!(fp = fopen(argv[i], "wt"))) { | |
154 | - perror(argv[i]); | |
155 | - free(lpBuf); | |
156 | - return 3; | |
157 | - } | |
158 | + makeBackupFile(argv[optind]); | |
158 | 159 | |
159 | - for (cnt = 0; cnt < size; cnt++) { | |
160 | - if ('\r' == *(lpBuf + cnt)) { | |
160 | + if (!(fp = fopen(argv[optind], "wt"))) { | |
161 | + perror(argv[optind]); | |
162 | + free(lpBuf); | |
163 | + ret++; | |
161 | 164 | continue; |
162 | 165 | } |
163 | - putc(*(lpBuf + cnt), fp); | |
166 | + | |
167 | + for (cnt = 0; cnt < size; cnt++) { | |
168 | + if ('\r' == *(lpBuf + cnt)) { | |
169 | + continue; | |
170 | + } | |
171 | + putc(*(lpBuf + cnt), fp); | |
172 | + } | |
173 | + fclose(fp); | |
174 | + free(lpBuf); | |
164 | 175 | } |
165 | - fclose(fp); | |
166 | - free(lpBuf); | |
176 | + return ret; | |
167 | 177 | } else { |
168 | 178 | //━━━━━━━━━━━━━━━━━━━━━━━━━標準出力へ |
169 | - if (argv[i]) { | |
179 | + if (argv[optind]) { | |
170 | 180 | FILE *fp; |
171 | 181 | |
172 | 182 | fclose(stdin); |
173 | - fp = freopen(argv[i], "rt", stdin); | |
183 | + fp = freopen(argv[optind], "rt", stdin); | |
174 | 184 | if (!fp) { |
175 | - perror(argv[i]); | |
185 | + perror(argv[optind]); | |
176 | 186 | return 3; |
177 | 187 | } |
178 | 188 | } |
@@ -183,6 +193,6 @@ main(int argc, char *argv[]) | ||
183 | 193 | } |
184 | 194 | putc(c, stdout); |
185 | 195 | } |
196 | + return 0; | |
186 | 197 | } |
187 | - return 0; | |
188 | 198 | } |
@@ -1,24 +1,25 @@ | ||
1 | -# $Id: makefile,v 1.1 2006/11/15 12:08:04 tfuruka1 Exp $ | |
2 | -# $Name: $ | |
1 | +# $Id: makefile,v 1.2 2011/03/03 13:38:58 tfuruka1 Exp $ | |
3 | 2 | # |
4 | 3 | # 改行コードの変換 |
5 | 4 | # |
6 | -# $Log: makefile,v $ | |
7 | -# Revision 1.1 2006/11/15 12:08:04 tfuruka1 | |
8 | -# 新規追加 | |
9 | -# | |
5 | +# 2006/11/15 新規追加 | |
10 | 6 | # |
11 | 7 | EXE=crlf.exe |
12 | 8 | OBJS=main.obj |
13 | 9 | |
14 | -CFLAGS=/W3 /Zi | |
15 | -LDFLAGS=/link /debug | |
10 | +CFLAGS=/W3 /Zi /I../libs/getopt /D_CRT_SECURE_NO_WARNINGS | |
11 | +LDFLAGS=/debug /libpath:../libs/getopt | |
12 | + | |
13 | +../../bin/$(EXE) : ../../bin $(EXE) | |
14 | + -cp $(EXE) $@ | |
15 | +../../bin : | |
16 | + sh -c "mkdir $@" | |
16 | 17 | |
17 | -../../bin/$(EXE) : $(EXE) | |
18 | - -cp $(EXE) ../../bin/. | |
18 | +$(EXE) : $(OBJS) getopt | |
19 | + $(CC) $(CFLAGS) $(OBJS) /link $(LDFLAGS) getopt.lib -out:$@ | |
19 | 20 | |
20 | -$(EXE) : $(OBJS) | |
21 | - $(CC) $(CFLAGS) -o $@ $(OBJS) $(LDFLAGS) | |
21 | +getopt : | |
22 | + sh -c "(cd ../libs/getopt; nmake)"; | |
22 | 23 | |
23 | 24 | clean : |
24 | 25 | -rm -f *.obj *~ *.pdb *.ilk |
@@ -1,6 +1,7 @@ | ||
1 | 1 | # -*- mode:makefile; coding:shift_jis-unix -*- |
2 | -# $Id: makefile,v 1.1 2011/03/01 11:00:07 tfuruka1 Exp $ | |
2 | +# $Id: makefile,v 1.2 2011/03/03 13:38:58 tfuruka1 Exp $ | |
3 | 3 | |
4 | +SHELL=/bin/sh | |
4 | 5 | O=obj |
5 | 6 | DLL=getopt.dll |
6 | 7 | OBJS=getopt.$(O) getopt_long.$(O) |
@@ -9,9 +10,12 @@ CFLAGS=/Zi /DGETOPT_API=__declspec(dllexport) /W3\ | ||
9 | 10 | |
10 | 11 | LDFLAGS=/DLL /debug |
11 | 12 | |
12 | -../../../bin/$(DLL) : $(DLL) test.exe | |
13 | +../../../bin/$(DLL) : ../../../bin $(DLL) test.exe | |
13 | 14 | cp $(DLL) $@ |
14 | 15 | |
16 | +../../../bin : | |
17 | + sh -c "mkdir $@" | |
18 | + | |
15 | 19 | $(DLL) : $(OBJS) |
16 | 20 | $(CC) $(CFLAGS) $(OBJS) /link $(LDFLAGS) /def:getopt.def /OUT:$@ |
17 | 21 |
@@ -1,26 +1,18 @@ | ||
1 | -# $Id: makefile,v 1.6 2011/03/01 11:00:07 tfuruka1 Exp $ | |
1 | +# $Id: makefile,v 1.7 2011/03/03 13:38:58 tfuruka1 Exp $ | |
2 | 2 | # $Name: $ |
3 | 3 | # |
4 | 4 | # makeの親玉 |
5 | 5 | # |
6 | 6 | # $Log: makefile,v $ |
7 | -# Revision 1.6 2011/03/01 11:00:07 tfuruka1 | |
8 | -# teeコマンドを新規追加 | |
7 | +# Revision 1.7 2011/03/03 13:38:58 tfuruka1 | |
8 | +# getoptに対応等 | |
9 | 9 | # |
10 | -# Revision 1.5 2007/10/04 14:43:15 tfuruka1 | |
11 | -# MegaFileを追加 | |
12 | -# | |
13 | -# Revision 1.4 2006/12/06 15:40:52 tfuruka1 | |
14 | -# 単純なコーディングミスを修正しました。 | |
15 | -# | |
16 | -# Revision 1.3 2006/12/06 15:37:14 tfuruka1 | |
17 | -# ydmモジュール回線低品質エミュレータを新規追加 | |
18 | -# | |
19 | -# Revision 1.2 2006/12/06 14:05:40 tfuruka1 | |
20 | -# lha32を新規追加 | |
21 | -# | |
22 | -# Revision 1.1 2006/11/15 12:08:03 tfuruka1 | |
23 | -# 新規追加 | |
10 | +# 2011/03/01 teeコマンドを新規追加 | |
11 | +# 2007/10/04 MegaFileを追加 | |
12 | +# 2006/12/06 単純なコーディングミスを修正しました。 | |
13 | +# 2006/12/06 ydmモジュール回線低品質エミュレータを新規追加 | |
14 | +# 2006/12/06 lha32を新規追加 | |
15 | +# 2006/11/15 新規追加 | |
24 | 16 | # |
25 | 17 | |
26 | 18 | all : |
@@ -33,7 +25,7 @@ all : | ||
33 | 25 | sh -c "(cd MegaFile; nmake)" |
34 | 26 | sh -c "(cd wlsfonts; nmake)" |
35 | 27 | sh -c "(cd YdmPoorLineEmu; nmake)" |
36 | - sh -c "(cd tee nmake)" | |
28 | + sh -c "(cd tee; nmake)" | |
37 | 29 | |
38 | 30 | clean : |
39 | 31 | sh -c "(cd libs/getopt; nmake clean)" |
@@ -45,5 +37,5 @@ clean : | ||
45 | 37 | sh -c "(cd MegaFile; nmake clean)" |
46 | 38 | sh -c "(cd wlsfonts; nmake clean)" |
47 | 39 | sh -c "(cd YdmPoorLineEmu; nmake clean)" |
48 | - sh -c "(cd tee nmake clean)" | |
49 | - -rm -fr ../bin/* | |
40 | + sh -c "(cd tee; nmake clean)" | |
41 | + -rm -fr ../bin |