/* main process */
int process (char *buffer, int nb, FILE *out) {
- int i;
- for (i = 0; i < nb; i++) {
+ for (int i = 0; i < nb; i++) {
if (buffer[i] == 0) {
break;
}
- VERBOSE (DEBUG, fprintf (stderr, "%s: p=%d, buffer='%s', memory=[ ", progname, p, buffer + i); int _i; for (_i = 0; _i < MEMSIZE; _i++) fprintf (stderr," %d", mem[_i]); fprintf (stderr," ]\n"));
+ VERBOSE (DEBUG, fprintf (stderr, "%s: p=%d, buffer='%s', memory=[ ", progname, p, buffer + i); for (int _i = 0; _i < MEMSIZE; _i++) fprintf (stderr," %d", mem[_i]); fprintf (stderr," ]\n"));
switch (buffer[i]) {
case '>': /* increase pointer */
VERBOSE (WARNING, fprintf (stderr, "%s: can't understand '%c'\n", progname, buffer[i]));
}
- //VERBOSE (DEBUG, int _i; fprintf (stderr, "%s: p: %d mem:", progname, p); for (_i = 0; _i < MEMSIZE; _i++) fprintf (stderr, " %d", mem[_i]); fprintf (stderr, "\n"));
+ //VERBOSE (DEBUG, fprintf (stderr, "%s: p: %d mem:", progname, p); for (int _i = 0; _i < MEMSIZE; _i++) fprintf (stderr, " %d", mem[_i]); fprintf (stderr, "\n"));
}
char *input = NULL;
char *output = NULL;
char *buffer = NULL;
- int i;
int n = 0;
int size = 0;
FILE *fid = NULL;
while ((c = getopt(argc, argv, "e:i:m:o:hv:")) != EOF) {
switch (c) {
case 'e':
- if (buffer) {
- free (buffer);
- }
+ free (buffer);
buffer = strdup (optarg);
CHECKALLOC (buffer);
size = strlen (buffer) + 1;
input = optarg;
break;
case 'm':
- for (i = 0; i < MEMSIZE; i++) {
+ for (int i = 0; i < MEMSIZE; i++) {
if (optarg) {
mem[i] = strtol (optarg, &optarg, 10);
VERBOSE (DEBUG, fprintf (stderr, "%s: mem[%d] = %d\n", progname, i, mem[i]));
}
if (*optarg != 0) {
VERBOSE (WARNING, fprintf (stderr, "%s: too many memory values or incorrect value\n", progname));
+ free (buffer);
return 1;
}
break;
break;
case 'h':
default:
+ free (buffer);
return usage (c != 'h');
}
}
if (argc - optind != 0) {
VERBOSE (ERROR, fprintf (stderr, "%s: invalid option -- %s\n", progname, argv[optind]));
+ free (buffer);
return usage (1);
}
fid = fopen (input, "r");
if (fid == NULL) {
VERBOSE (ERROR, fprintf (stderr, "%s: can't open file '%s' for reading\n", progname, input));
+ free (buffer);
return 1;
}
} else if (buffer == NULL) {
CHECKALLOC (buffer);
memset (buffer + size, 0, BUFSIZE);
n = fread (buffer + size, 1, BUFSIZE, fid);
- if ((n == 0) && (errno != 0)) {
+ if (ferror (fid)) {
VERBOSE (ERROR, fprintf (stderr, "%s: can't read data from file '%s'\n", progname, input));
+ if (fid != stdin) {
+ fclose (fid);
+ }
+ free (buffer);
return 1;
}
size += BUFSIZE;
}
- /* close input file */
if (fid != stdin) {
fclose (fid);
}
fid = fopen (output, "w");
if (fid == NULL) {
VERBOSE (ERROR, fprintf (stderr, "%s: can't open file '%s' for writing\n", progname, output));
- if (buffer) free (buffer);
+ free (buffer);
return 1;
}
} else {
fclose (fid);
}
- /* free buffer */
- free (buffer);
- VERBOSE (INFO, fprintf (stdout, "\nmemory:"); int _i; for (_i = 0; _i < MEMSIZE; _i++) fprintf (stdout," %d", (int)mem[_i]); fprintf (stdout,"\n"));
+ VERBOSE (INFO, fprintf (stdout, "\nmemory:"); for (int _i = 0; _i < MEMSIZE; _i++) fprintf (stdout," %d", (int)mem[_i]); fprintf (stdout,"\n"));
+ free (buffer);
return rc;
}
#INCLUDES = -I../debug -D__MEMORY_ALLOCATION__
INCLUDES =
OFLAGS = -O4 -Os
+#OFLAGS = -O0
#OFLAGS = -O4 -ffast-math -finline-functions
#OFLAGS = -O4 -finline-functions
#OFLAGS += -mtune=pentium3 -mmmx -msse -msse2 -m3dnow
#OFLAGS += -minline-all-stringops -fsingle-precision-constant
#OFLAGS += -malign-double
CFLAGS += -W -Wall -Wextra -g
+#CFLAGS += -std=c99 -D_XOPEN_SOURCE=500
CFLAGS += $(OFLAGS) $(INCLUDES) $(OPTIONS)
LDFLAGS += -g $(LDOPTS) $(OPTIONS)
# Linux
else ifneq (, $(findstring mingw, $(MAKE_HOST)))
# Windows MinGw
+CFLAGS += -DWIN32
+#LDLIBS += -lws2_32
LDOPT = winlnk
else ifneq (, $(findstring cygwin, $(MAKE_HOST)))
+CFLAGS += -DWIN32
# Windows CygWin
LDOPT = winlnk
else ifneq (, $(findstring msdos, $(MAKE_HOST)))
# Targets
-ALLEXE =
-ALLEXE += bf
+ALLEXE = $(shell for f in *.c; do grep -q '/\*\slinker:' $$f && echo $${f/.c}; done)
SHELL = bash
all: depends
$(MAKE) $(ALLEXE:%=%.exe)
+analyze:
+ make purge
+ scan-build make
+ #scan-build -stats make
+
count:
wc $(wildcard *.c *.h) $(MAKEFILE_LIST)
touch gcov
rm -f gcov $(wildcard *.gcda *.gcno)
$(MAKE) purge
- grep '#####' *.c.gcov || true
+ grep '^ *#####' *.c.gcov || true
gprof_%:
$(MAKE) purge
eval $$test; \
[ $$? -eq 0 ] && echo -e "\033[1;32mSUCCESS\033[0;0m" \
|| { echo -e "\033[1;31mFAILED\033[0;0m"; RC=1; }; \
+ test "$$RC" = 1 -a "$(STOP)" = 1 && break; \
done; \
test "$$RC" -ne 1
## Phony
-.PHONY: all clean count depends gcovs purge tests
+.PHONY: all analyze clean count depends gcovs purge tests
## Precious