-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathblock.cpp
More file actions
33 lines (27 loc) · 838 Bytes
/
block.cpp
File metadata and controls
33 lines (27 loc) · 838 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "c4a.h"
#ifndef FILE_NONE
// Support for blocks
#define BLOCK_FN "blocks.fth"
#define DISK_SZ (BLOCK_SZ*NUM_BLOCKS)
char blocks[DISK_SZ];
extern char *toIn;
void blockInit() {
cell sz = 0, fh = fileOpen(BLOCK_FN, FL_READ);
if (fh) {
sz = fileRead(blocks, DISK_SZ, fh);
fileClose(fh);
}
// if (sz != DISK_SZ) { flushBlocks(); }
}
void flushBlocks() {
cell fh = fileOpen(BLOCK_FN, FL_WRITE);
if (fh) {
fileWrite(blocks, DISK_SZ, fh);
fileClose(fh);
}
}
static void prepForLoad() { toIn[BLOCK_SZ-1]=0; changeState(INTERP); }
char *blockAddr(wc_t blk) { return (char*)&blocks[MIN(blk, BLOCK_MAX)*BLOCK_SZ]; }
void blockLoadNext(wc_t blk) { toIn=blockAddr(blk); prepForLoad(); }
void blockLoad(wc_t blk) { inPush(toIn); blockLoadNext(blk); }
#endif // FILE_NONE