Browse code

Dropped File.vector, add File.result short

Andrew Alderwick authored on 14/04/2021 19:38:32
Showing 2 changed files
... ...
@@ -8,8 +8,9 @@
8 8
 ;size { width 2 height 2 }
9 9
 
10 10
 |0100 ;System { vector 2 pad 6 r 2 g 2 b 2 }
11
+|0110 ;Console { vector 2 pad 6 char 1 byte 1 short 2 string 2 }
11 12
 |0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 }
12
-|0170 ;File { vector 2 pad 6 name 2 length 2 load 2 save 2 }
13
+|0170 ;File { vector 2 result 2 offset 2 pad 2 name 2 length 2 load 2 save 2 }
13 14
 
14 15
 ( program )
15 16
 
... ...
@@ -27,6 +28,7 @@
27 28
 	#0010 #0010 #0020 #0010 #25 ,dvd_icn ,draw-icn JSR2
28 29
 
29 30
 	( load ) ,filepath =File.name #4000 =File.length ,img =File.load
31
+	~File.result =Console.short
30 32
 
31 33
 BRK
32 34
 
... ...
@@ -219,23 +219,25 @@ file_poke(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1)
219 219
 	Uint8 *m = u->ram.dat;
220 220
 	char *name = (char *)&m[(m[ptr + 8] << 8) + m[ptr + 8 + 1]];
221 221
 	Uint16 length = mempeek16(u, ptr + 8 + 2);
222
-	Uint16 offset = mempeek16(u, ptr + 2);
222
+	Uint16 offset = mempeek16(u, ptr + 4);
223 223
 	if(b0 == 0x0d) {
224 224
 		Uint16 addr = (m[ptr + 8 + 4] << 8) + b1;
225 225
 		FILE *f = fopen(name, "r");
226
-		if(f && fseek(f, offset, SEEK_SET) != -1 && fread(&m[addr], length, 1, f)) {
226
+		if(f && fseek(f, offset, SEEK_SET) != -1 && (length = fread(&m[addr], 1, length, f))) {
227 227
 			fclose(f);
228 228
 			printf("Loaded %d bytes, at %04x from %s\n", length, addr, name);
229
-			evaluxn(u, mempeek16(u, devfile->addr));
230
-		}
229
+		} else
230
+			length = 0;
231
+		mempoke16(u, ptr + 2, length);
231 232
 	} else if(b0 == 0x0f) {
232 233
 		Uint16 addr = (m[ptr + 8 + 6] << 8) + b1;
233 234
 		FILE *f = fopen(name, (m[ptr + 2] & 0x1) ? "a" : "w");
234
-		if(f && fseek(f, offset, SEEK_SET) != -1 && fwrite(&m[addr], length, 1, f)) {
235
+		if(f && fseek(f, offset, SEEK_SET) != -1 && (length = fwrite(&m[addr], 1, length, f))) {
235 236
 			fclose(f);
236 237
 			printf("Saved %d bytes, at %04x from %s\n", length, addr, name);
237
-			evaluxn(u, mempeek16(u, devfile->addr));
238
-		}
238
+		} else
239
+			length = 0;
240
+		mempoke16(u, ptr + 2, length);
239 241
 	}
240 242
 	return b1;
241 243
 }