| ... | ... |
@@ -59,17 +59,18 @@ file_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) |
| 59 | 59 |
Uint8 *m = u->ram.dat; |
| 60 | 60 |
char *name = (char *)&m[(m[ptr + 8] << 8) + m[ptr + 8 + 1]]; |
| 61 | 61 |
Uint16 length = (m[ptr + 8 + 2] << 8) + m[ptr + 8 + 3]; |
| 62 |
+ Uint16 offset = (m[ptr + 0] << 8) + m[ptr + 1]; |
|
| 62 | 63 |
if(b0 == 0x0d) {
|
| 63 | 64 |
Uint16 addr = (m[ptr + 8 + 4] << 8) + b1; |
| 64 | 65 |
FILE *f = fopen(name, "r"); |
| 65 |
- if(f && fread(&m[addr], length, 1, f)) {
|
|
| 66 |
+ if(f && fseek(f, offset, SEEK_SET) != -1 && fread(&m[addr], length, 1, f)) {
|
|
| 66 | 67 |
fclose(f); |
| 67 | 68 |
printf("Loaded %d bytes, at %04x from %s\n", length, addr, name);
|
| 68 | 69 |
} |
| 69 | 70 |
} else if(b0 == 0x0f) {
|
| 70 | 71 |
Uint16 addr = (m[ptr + 8 + 6] << 8) + b1; |
| 71 |
- FILE *f = fopen(name, "w"); |
|
| 72 |
- if(fwrite(&m[addr], length, 1, f)) {
|
|
| 72 |
+ FILE *f = fopen(name, (m[ptr + 2] & 0x1) ? "a" : "w"); |
|
| 73 |
+ if(f && fseek(f, offset, SEEK_SET) != -1 && fwrite(&m[addr], length, 1, f)) {
|
|
| 73 | 74 |
fclose(f); |
| 74 | 75 |
printf("Saved %d bytes, at %04x from %s\n", length, addr, name);
|
| 75 | 76 |
} |
| ... | ... |
@@ -365,17 +365,18 @@ file_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1) |
| 365 | 365 |
Uint8 *m = u->ram.dat; |
| 366 | 366 |
char *name = (char *)&m[(m[ptr + 8] << 8) + m[ptr + 8 + 1]]; |
| 367 | 367 |
Uint16 length = (m[ptr + 8 + 2] << 8) + m[ptr + 8 + 3]; |
| 368 |
+ Uint16 offset = (m[ptr + 0] << 8) + m[ptr + 1]; |
|
| 368 | 369 |
if(b0 == 0x0d) {
|
| 369 | 370 |
Uint16 addr = (m[ptr + 8 + 4] << 8) + b1; |
| 370 | 371 |
FILE *f = fopen(name, "r"); |
| 371 |
- if(f && fread(&m[addr], length, 1, f)) {
|
|
| 372 |
+ if(f && fseek(f, offset, SEEK_SET) != -1 && fread(&m[addr], length, 1, f)) {
|
|
| 372 | 373 |
fclose(f); |
| 373 | 374 |
printf("Loaded %d bytes, at %04x from %s\n", length, addr, name);
|
| 374 | 375 |
} |
| 375 | 376 |
} else if(b0 == 0x0f) {
|
| 376 | 377 |
Uint16 addr = (m[ptr + 8 + 6] << 8) + b1; |
| 377 |
- FILE *f = fopen(name, "w"); |
|
| 378 |
- if(fwrite(&m[addr], length, 1, f)) {
|
|
| 378 |
+ FILE *f = fopen(name, (m[ptr + 2] & 0x1) ? "a" : "w"); |
|
| 379 |
+ if(f && fseek(f, offset, SEEK_SET) != -1 && fwrite(&m[addr], length, 1, f)) {
|
|
| 379 | 380 |
fclose(f); |
| 380 | 381 |
printf("Saved %d bytes, at %04x from %s\n", length, addr, name);
|
| 381 | 382 |
} |