025aac814799a3b66180f10ab25206d2c16d51e7
16 #define CEIL(x, y) (((x) + (y) - 1) / (y))
17 #define MIN(x, y) (((x) < (y)) ? (x) : (y))
18 #define MAX(x, y) (((x) > (y)) ? (x) : (y))
20 //#define BUFFERSIZE 4096
21 #define BUFFERSIZE 256
34 char *progname
= NULL
;
40 FILE *fd
= ret
? stderr
: stdout
;
41 fprintf (fd
, "usage: %s [-i file] [-h] [-m k&r|ansi|c99] [-o file] [-v]\n", progname
);
42 fprintf (fd
, " -i : input file\n");
43 fprintf (fd
, " -h : help message\n");
44 fprintf (fd
, " -m : indent mode\n");
45 fprintf (fd
, " -o : output file\n");
46 fprintf (fd
, " -v : verbose level (%d)\n", verbose
);
53 int indent (FILE *fin
, FILE *fout
, cmode_t cmode
) {
54 char bufin
[BUFFERSIZE
+ 1] = {0};
55 char bufout
[BUFFERSIZE
* TABSIZE
+ 1] = {0};
68 memset (bufin
, 0, sizeof (bufin
));
69 memset (bufout
, 0, sizeof (bufout
));
72 nb
= fread (bufin
, 1, BUFFERSIZE
, fin
);
73 VERBOSE (DEBUG
, fprintf (stdout
, "buffer in: %d\n", nb
));
75 VERBOSE (ERROR
, fprintf (stderr
, "can't read file (%d)\n", errno
));
82 while (*ptin
!= '\0') {
83 VERBOSE (DEBUG
, fprintf (stdout
, "caracter: %c\n", *ptin
));
87 if (((comment
== 1) && (*ptin
== '\n')) ||
88 ((comment
== 2) && ((*ptin
== '*') && (ptin
[1] == '/')))) {
99 comment
= (ptin
[1] == '/') ? 1 : (ptin
[1] == '*') ? 2 : 0;
101 for (i
= 0; i
< nbindent
* TABSIZE
; i
++) {
111 if ((string
) || (!space
)) {
118 for (i
= 0; i
< nbindent
* TABSIZE
; i
++) {
130 for (i
= 0; i
< nbindent
* TABSIZE
; i
++) {
134 if (ptin
[1] != ';') {
160 if ((*ptin
== '"') && (!character
) && (!special
)) {
163 if ((*ptin
== '\'') && (!string
) && (!special
)) {
167 for (i
= 0; i
< nbindent
* TABSIZE
; i
++) {
174 space
= ((*ptin
== ' ') || (*ptin
== '\t'));
175 special
= (*ptin
== '\\');
176 parent
+= (*ptin
== '(') ? +1 : (*ptin
== ')') ? -1 : 0;
182 VERBOSE (DEBUG
, fprintf (stdout
, "buffer out: %d\n", strlen (bufout
)));
184 while ((nb
= fwrite (ptout
, 1, strlen (ptout
), fout
)) != strlen (ptout
)) {
185 VERBOSE (DEBUG
, fprintf (stdout
, "buffer out: %d/%d\n", nb
, strlen (ptout
)));
187 VERBOSE (ERROR
, fprintf (stderr
, "can't write file (%d)\n", errno
));
203 int main (int argc
, char *argv
[])
205 cmode_t cmode
= e_unknown
;
211 char *pt
= progname
= argv
[0];
213 if ((*pt
== '/') || (*pt
== '\\')) {
220 while ((c
= getopt(argc
, argv
, "i:hm:o:v:")) != EOF
) {
232 verbose
= atoi (optarg
);
239 if (argc
- optind
!= 0) {
240 fprintf (stderr
, "%s: invalid option -- %s\n", progname
, argv
[optind
]);
247 fin
= fopen (input
, "rb");
249 VERBOSE (ERROR
, fprintf (stderr
, "error: can't open file '%s'\n", input
));
258 fout
= fopen (output
, "wb");
260 VERBOSE (ERROR
, fprintf (stderr
, "error: can't open file '%s'\n", output
));
268 if (strcmp (mode
, "ansi") == 0) {
270 } else if (strcmp (mode
, "k&r") == 0) {
273 VERBOSE (ERROR
, fprintf (stderr
, "error: mode '%s' unknown\n", mode
));
276 return indent (fin
, fout
, cmode
);
279 // test: indent.exe -h
280 // test: indent.exe -h | awk '/usage:/ { rc=1 } END { exit (1-rc) }'
281 // test: indent.exe -_ 2> /dev/null | awk 'END { if (NR == 0) { exit(0) } else exit (1) }'
282 // test: indent.exe -_ 2>&1 | awk '/usage:/ { rc=1 } END { exit (1-rc) }'
284 /* vim: set ts=4 sw=4 et: */