Browse code

Renamed prepare for init

Devine Lu Linvega authored on 07/11/2021 15:30:56
Showing 4 changed files
... ...
@@ -48,13 +48,6 @@ reset(void)
48 48
 	state = IDLE;
49 49
 }
50 50
 
51
-void
52
-file_prepare(void *filename)
53
-{
54
-	reset();
55
-	current_filename = (char *)filename;
56
-}
57
-
58 51
 static Uint16
59 52
 get_entry(char *p, Uint16 len, const char *pathname, const char *basename, int fail_nonzero)
60 53
 {
... ...
@@ -76,6 +69,35 @@ get_entry(char *p, Uint16 len, const char *pathname, const char *basename, int f
76 69
 	return strlen(p);
77 70
 }
78 71
 
72
+static Uint16
73
+file_read_dir(void *dest, Uint16 len)
74
+{
75
+	static char pathname[PATH_MAX];
76
+	char *p = dest;
77
+	if(de == NULL) de = readdir(d);
78
+	for(; de != NULL; de = readdir(d)) {
79
+		Uint16 n;
80
+		if(de->d_name[0] == '.' && de->d_name[1] == '\0')
81
+			continue;
82
+		strncpy(pathname, current_filename, sizeof(pathname) - 1);
83
+		strncat(pathname, "/", sizeof(pathname) - 1);
84
+		strncat(pathname, de->d_name, sizeof(pathname) - 1);
85
+		n = get_entry(p, len, pathname, de->d_name, 1);
86
+		if(!n) break;
87
+		p += n;
88
+		len -= n;
89
+	}
90
+	return p - (char *)dest;
91
+}
92
+
93
+Uint16
94
+file_init(void *filename)
95
+{
96
+	reset();
97
+	current_filename = (char *)filename;
98
+	return 0;
99
+}
100
+
79 101
 Uint16
80 102
 file_read(void *dest, Uint16 len)
81 103
 {
... ...
@@ -88,24 +110,8 @@ file_read(void *dest, Uint16 len)
88 110
 	}
89 111
 	if(state == FILE_READ)
90 112
 		return fread(dest, 1, len, f);
91
-	if(state == DIR_READ) {
92
-		static char pathname[PATH_MAX];
93
-		char *p = dest;
94
-		if(de == NULL) de = readdir(d);
95
-		for(; de != NULL; de = readdir(d)) {
96
-			Uint16 n;
97
-			if(de->d_name[0] == '.' && de->d_name[1] == '\0')
98
-				continue;
99
-			strncpy(pathname, current_filename, sizeof(pathname) - 1);
100
-			strncat(pathname, "/", sizeof(pathname) - 1);
101
-			strncat(pathname, de->d_name, sizeof(pathname) - 1);
102
-			n = get_entry(p, len, pathname, de->d_name, 1);
103
-			if(!n) break;
104
-			p += n;
105
-			len -= n;
106
-		}
107
-		return p - (char *)dest;
108
-	}
113
+	if(state == DIR_READ)
114
+		return file_read_dir(dest, len);
109 115
 	return 0;
110 116
 }
111 117
 
... ...
@@ -10,7 +10,7 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 10
 WITH REGARD TO THIS SOFTWARE.
11 11
 */
12 12
 
13
-void file_prepare(void *filename);
13
+Uint16 file_init(void *filename);
14 14
 Uint16 file_read(void *dest, Uint16 len);
15 15
 Uint16 file_write(void *src, Uint16 len, Uint8 flags);
16 16
 Uint16 file_stat(void *dest, Uint16 len);
... ...
@@ -80,24 +80,12 @@ static void
80 80
 file_deo(Device *d, Uint8 port)
81 81
 {
82 82
 	switch(port) {
83
-	case 0x1:
84
-		d->vector = peek16(d->dat, 0x0);
85
-		break;
86
-	case 0x9:
87
-		file_prepare(&d->mem[peek16(d->dat, 0x8)]);
88
-		break;
89
-	case 0xd:
90
-		poke16(d->dat, 0x2, file_read(&d->mem[peek16(d->dat, 0xc)], peek16(d->dat, 0xa)));
91
-		break;
92
-	case 0xf:
93
-		poke16(d->dat, 0x2, file_write(&d->mem[peek16(d->dat, 0xe)], peek16(d->dat, 0xa), d->dat[0x7]));
94
-		break;
95
-	case 0x5:
96
-		poke16(d->dat, 0x2, file_stat(&d->mem[peek16(d->dat, 0x4)], peek16(d->dat, 0xa)));
97
-		break;
98
-	case 0x6:
99
-		poke16(d->dat, 0x2, file_delete());
100
-		break;
83
+	case 0x1: d->vector = peek16(d->dat, 0x0); break;
84
+	case 0x9: poke16(d->dat, 0x2, file_init(&d->mem[peek16(d->dat, 0x8)])); break;
85
+	case 0xd: poke16(d->dat, 0x2, file_read(&d->mem[peek16(d->dat, 0xc)], peek16(d->dat, 0xa))); break;
86
+	case 0xf: poke16(d->dat, 0x2, file_write(&d->mem[peek16(d->dat, 0xe)], peek16(d->dat, 0xa), d->dat[0x7])); break;
87
+	case 0x5: poke16(d->dat, 0x2, file_stat(&d->mem[peek16(d->dat, 0x4)], peek16(d->dat, 0xa))); break;
88
+	case 0x6: poke16(d->dat, 0x2, file_delete()); break;
101 89
 	}
102 90
 }
103 91
 
... ...
@@ -372,24 +372,12 @@ static void
372 372
 file_deo(Device *d, Uint8 port)
373 373
 {
374 374
 	switch(port) {
375
-	case 0x1:
376
-		d->vector = peek16(d->dat, 0x0);
377
-		break;
378
-	case 0x9:
379
-		file_prepare(&d->mem[peek16(d->dat, 0x8)]);
380
-		break;
381
-	case 0xd:
382
-		poke16(d->dat, 0x2, file_read(&d->mem[peek16(d->dat, 0xc)], peek16(d->dat, 0xa)));
383
-		break;
384
-	case 0xf:
385
-		poke16(d->dat, 0x2, file_write(&d->mem[peek16(d->dat, 0xe)], peek16(d->dat, 0xa), d->dat[0x7]));
386
-		break;
387
-	case 0x5:
388
-		poke16(d->dat, 0x2, file_stat(&d->mem[peek16(d->dat, 0x4)], peek16(d->dat, 0xa)));
389
-		break;
390
-	case 0x6:
391
-		poke16(d->dat, 0x2, file_delete());
392
-		break;
375
+	case 0x1: d->vector = peek16(d->dat, 0x0); break;
376
+	case 0x9: poke16(d->dat, 0x2, file_init(&d->mem[peek16(d->dat, 0x8)])); break;
377
+	case 0xd: poke16(d->dat, 0x2, file_read(&d->mem[peek16(d->dat, 0xc)], peek16(d->dat, 0xa))); break;
378
+	case 0xf: poke16(d->dat, 0x2, file_write(&d->mem[peek16(d->dat, 0xe)], peek16(d->dat, 0xa), d->dat[0x7])); break;
379
+	case 0x5: poke16(d->dat, 0x2, file_stat(&d->mem[peek16(d->dat, 0x4)], peek16(d->dat, 0xa))); break;
380
+	case 0x6: poke16(d->dat, 0x2, file_delete()); break;
393 381
 	}
394 382
 }
395 383