--- /dev/null
+src = $(wildcard src/*.c) $(wildcard src/dos/*.c)
+ssrc = sinlut.s
+obj = $(src:.c=.o) $(ssrc:.s=.o)
+dep = $(src:.c=.d)
+bin = rbench.exe
+
+LUTGEN = tools/lutgen.exe
+
+warn = -pedantic -Wall -Wno-deprecated-declarations
+dbg = -g
+opt = -O3 -ffast-math
+inc = -Isrc
+def = -DNO_STDINT_H
+
+CFLAGS = -pedantic $(warn) $(dbg) $(opt) $(def) $(inc) -MMD
+
+$(bin): $(obj)
+ $(CC) -o $@ $(obj) $(LDFLAGS)
+
+sinlut.s: $(LUTGEN)
+ $(LUTGEN) >$@
+
+-include $(dep)
+-include *.d
+
+.PHONY: clean
+clean:
+ del src\*.o
+ del src\dos\*.o
+ del *.o
+ del $(bin)
+ del sinlut.s
+
+.PHONY: cleandep
+cleandep:
+ del src\*.d
+ del src\dos\*.d
+ del *.d
+
+$(LUTGEN): tools/lutgen.c
+ $(CC) -o $@ $< -lm
--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include "rbench.h"
+
+static int parse_args(int argc, char **argv);
+
+int main(int argc, char **argv)
+{
+ read_config("rbench.cfg");
+
+ if(parse_args(argc, argv) == -1) {
+ return 1;
+ }
+
+ printf("foo %dx%d %dbpp\n", opt.width, opt.height, opt.bpp);
+
+ return 0;
+}
+
+
+static const char *usage_str =
+ "Usage: %s [options]\n"
+ "Options:\n"
+ " -s <WxH>: resolution\n"
+ " -b <bpp>: color depth\n"
+ " -h: print usage and exit\n";
+
+static int parse_args(int argc, char **argv)
+{
+ int i;
+
+ for(i=1; i<argc; i++) {
+ if(argv[i][0] == '-') {
+ if(argv[i][2]) {
+ goto inval_arg;
+ }
+ switch(argv[i][1]) {
+ case 's':
+ if(!argv[++i] || sscanf(argv[i], "%dx%d", &opt.width, &opt.height) != 2) {
+ fprintf(stderr, "-s must be followed by WxH\n");
+ return -1;
+ }
+ break;
+
+ case 'b':
+ if(!argv[++i] || !(opt.bpp = atoi(argv[i]))) {
+ fprintf(stderr, "-b must be followed by the color depth\n");
+ return -1;
+ }
+ break;
+
+ case 'h':
+ printf(usage_str, argv[0]);
+ exit(0);
+
+ default:
+ goto inval_arg;
+ }
+ } else {
+inval_arg: fprintf(stderr, "invalid argument: %s\n", argv[i]);
+ return -1;
+ }
+ }
+ return 0;
+}
+
#ifndef UTIL_H_
#define UTIL_H_
+#ifdef NO_STDINT_H
+typedef char int8_t;
+typedef unsigned char uint8_t;
+typedef short int16_t;
+typedef unsigned short uint16_t;
+typedef int int32_t;
+typedef unsigned int uint32_t;
+#else
+#include <stdint.h>
+#endif
+
extern int sinlut[];
#define SIN(x) sinlut[(x) & 0xff]
--- /dev/null
+deltree /y c:\tmp\rbench
+mkdir c:\tmp\rbench
+mkdir c:\tmp\rbench\src
+mkdir c:\tmp\rbench\src\dos
+mkdir c:\tmp\rbench\tools
+
+copy Makefile.dos c:\tmp\rbench
+copy tools\lutgen.c c:\tmp\rbench\tools
+copy src\*.c c:\tmp\rbench\src
+copy src\*.h c:\tmp\rbench\src
+copy src\dos\*.c c:\tmp\rbench\src\dos
+copy src\dos\*.h c:\tmp\rbench\src\dos
+copy pack.bat c:\tmp\rbench