#include <stdlib.h>
#include <stdio.h>
-unsigned char buffer[512 * 1024];
-unsigned len;
-FILE *in, *out;
-int n, i;
+FILE *in;
+unsigned int n, i, c;
+
+void usage(char *arg)
+{
+ printf("usage: %s [file]\n", arg);
+ exit(-1);
+}
int main(int argc, char *argv[]) {
- if (argc < 3) {
+ if (argc < 2) {
+ usage(argv[0]);
exit(-1);
}
- in = fopen(argv[1], "rb");
- out = fopen(argv[2], "wb");
- if (!in || !out) {
+
+ if (!(in = fopen(argv[1], "r+b"))) {
+ fprintf(stderr, "couldnt open: '%s'\n", argv[1]);
exit(-1);
}
- len = fread(buffer, 1, 512 * 1024, in);
- n = 0; for (i = 0x1000; i < 0x2000; i++) {
- n += buffer[i];
+ /* read 0x1000 bytes from 0x7000-0x7fff (offset 0x1000) */
+ fseek(in, 0x1000, SEEK_SET);
+ n = 0; for (i = 0; i < 0x1000; i++) {
+ c = fgetc(in);
+ n += c;
}
- buffer[0] = n & 0xff;
- buffer[1] = (n >> 8) & 0xff;
- fwrite(buffer, 1, len, out);
+ /* write checksum to header */
+ fseek(in, 0, SEEK_SET);
+ fputc(n & 0xff, in);
+ fputc((n >> 8) & 0xff, in);
+
fclose(in);
- fclose(out);
return (0);
}