-
Notifications
You must be signed in to change notification settings - Fork 1
/
fileio.js
124 lines (121 loc) · 2.99 KB
/
fileio.js
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
"use strict";
var storage = localStorage;
class FileIO {
constructor()
{
this.clear();
}
clear()
{
this.files = [];
}
all_close()
{
for(var i = 0; i < this.files.length; i++)
{
try{
if(this.files[n].mode == "r") this.close(i);
}
catch(e)
{
return false;
}
this.files[n] = null;
}
return true;
}
openr(filename)
{
var value = storage.getItem(filename);
if(value)
{
this.files.push({
"name": filename,
"val" : value,
"pos" : 0,
"mode": "r"
});
return this.files.length - 1;
}
return -1;
}
openw(filename)
{
this.files.push({
"name": filename,
"val" : "",
"pos" : 0,
"mode": "w"
});
return this.files.length - 1;
}
opena(filename)
{
var value = storage.getItem(filename);
var str = value ? value : "";
this.files.push({
"name": filename,
"val" : str,
"pos" : str.length,
"mode": "w"
});
return this.files.length - 1;
}
close(n)
{
if(n >= 0 && n < this.files.length)
{
if(this.files[n])
{
if(this.files[n].mode == "w")
{
try{
storage.setItem(this.files[n].name, this.files[n].val);
}
catch(e)
{
this.files[n] = null;
return false;
}
}
}
this.files[n] = null;
return true;
}
else return false;
}
read_line(n)
{
if(n < 0 || n >= this.files.length || this.files[n] == null) return null;
if(this.files[n].pos >= this.files[n].val.length) return "";
var re = /([^\r\n]*)(\r\n|\r|\n)/;
var substr = this.files[n].val.substring(this.files[n].pos)
var res = re.exec(substr);
if(res)
{
this.files[n].pos += res[1].length + res[2].length;
return res[0];
}
else{
this.files[n].pos += substr.length;
return substr;
}
}
read_ch(n)
{
if(n < 0 || n >= this.files.length || this.files[n] == null) return null;
if(this.files[n].pos >= this.files[n].val.length) return "";
return this.files[n].val[this.files[n].pos++];
}
write_str(n, str, newline)
{
if(n < 0 || n >= this.files.length || this.files[n] == null) return false;
if(this.files[n].mode == "w")
{
this.files[n].val += str + (newline ? "\n" : "");
return true;
}
else return false;
}
};
var filesystem = new FileIO();