Fix unicode more.
This commit is contained in:
@ -59,7 +59,7 @@ function Load(addr, content) {
|
|||||||
for (var i = 0; i < data.length; ++i) {
|
for (var i = 0; i < data.length; ++i) {
|
||||||
u8[addr++] = data.charCodeAt(i);
|
u8[addr++] = data.charCodeAt(i);
|
||||||
}
|
}
|
||||||
return addr;
|
return data.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
function GetString(a, n) {
|
function GetString(a, n) {
|
||||||
@ -67,7 +67,11 @@ function GetString(a, n) {
|
|||||||
for (var i = 0; i < n; ++i) {
|
for (var i = 0; i < n; ++i) {
|
||||||
data += String.fromCharCode(u8[a + i]);
|
data += String.fromCharCode(u8[a + i]);
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
return decodeURIComponent(escape(data));
|
return decodeURIComponent(escape(data));
|
||||||
|
} catch (e) {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function CELL_ALIGNED(n) { return (n + 3) & ~3; }
|
function CELL_ALIGNED(n) { return (n + 3) & ~3; }
|
||||||
@ -113,6 +117,8 @@ function BUILTIN_CODE(i) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function Find(name) {
|
function Find(name) {
|
||||||
|
name = name.toUpperCase();
|
||||||
|
var raw = unescape(encodeURIComponent(name));
|
||||||
for (var voc = i32[g_sys_context>>2]; i32[voc>>2]; voc += 4) {
|
for (var voc = i32[g_sys_context>>2]; i32[voc>>2]; voc += 4) {
|
||||||
var xt = i32[i32[voc>>2]>>2];
|
var xt = i32[i32[voc>>2]>>2];
|
||||||
while (xt) {
|
while (xt) {
|
||||||
@ -120,16 +126,16 @@ function Find(name) {
|
|||||||
var vocab = i32[(TOLINK(xt) + 4 * 3)>>2];
|
var vocab = i32[(TOLINK(xt) + 4 * 3)>>2];
|
||||||
for (var i = 0; BUILTIN_NAME(i); ++i) {
|
for (var i = 0; BUILTIN_NAME(i); ++i) {
|
||||||
if (BUILTIN_VOCAB(i) === vocab &&
|
if (BUILTIN_VOCAB(i) === vocab &&
|
||||||
name.length === BUILTIN_NAMELEN(i) &&
|
raw.length === BUILTIN_NAMELEN(i) &&
|
||||||
name.toUpperCase() === GetString(BUILTIN_NAME(i), name.length).toUpperCase()) {
|
name === GetString(BUILTIN_NAME(i), BUILTIN_NAMELEN(i)).toUpperCase()) {
|
||||||
if (DEBUGGING) { console.log('FOUND: ' + name); }
|
if (DEBUGGING) { console.log('FOUND: ' + name); }
|
||||||
return BUILTIN_CODE(i);
|
return BUILTIN_CODE(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!(u8[TOFLAGS(xt)] & SMUDGE) &&
|
if (!(u8[TOFLAGS(xt)] & SMUDGE) &&
|
||||||
name.length === u8[TONAMELEN(xt)] &&
|
raw.length === u8[TONAMELEN(xt)] &&
|
||||||
name.toUpperCase() === GetString(TONAME(xt), name.length).toUpperCase()) {
|
name.toUpperCase() === GetString(TONAME(xt), u8[TONAMELEN(xt)]).toUpperCase()) {
|
||||||
if (DEBUGGING) { console.log('FOUND REGULAR: ' + name); }
|
if (DEBUGGING) { console.log('FOUND REGULAR: ' + name); }
|
||||||
return xt;
|
return xt;
|
||||||
}
|
}
|
||||||
@ -213,10 +219,11 @@ function Create(name, flags, op) {
|
|||||||
if (DEBUGGING) { console.log('CREATE: ' + name); }
|
if (DEBUGGING) { console.log('CREATE: ' + name); }
|
||||||
Finish();
|
Finish();
|
||||||
i32[g_sys_heap>>2] = CELL_ALIGNED(i32[g_sys_heap>>2]);
|
i32[g_sys_heap>>2] = CELL_ALIGNED(i32[g_sys_heap>>2]);
|
||||||
i32[g_sys_heap>>2] = Load(i32[g_sys_heap>>2], name); // name
|
var name_len = Load(i32[g_sys_heap>>2], name); // name
|
||||||
|
i32[g_sys_heap>>2] += name_len;
|
||||||
i32[g_sys_heap>>2] = CELL_ALIGNED(i32[g_sys_heap>>2]);
|
i32[g_sys_heap>>2] = CELL_ALIGNED(i32[g_sys_heap>>2]);
|
||||||
COMMA(i32[i32[g_sys_current>>2]>>2]); // link
|
COMMA(i32[i32[g_sys_current>>2]>>2]); // link
|
||||||
COMMA((name.length << 8) | flags); // flags & length
|
COMMA((name_len << 8) | flags); // flags & length
|
||||||
i32[i32[g_sys_current>>2]>>2] = i32[g_sys_heap>>2];
|
i32[i32[g_sys_current>>2]>>2] = i32[g_sys_heap>>2];
|
||||||
i32[g_sys_latestxt>>2] = i32[g_sys_heap>>2];
|
i32[g_sys_latestxt>>2] = i32[g_sys_heap>>2];
|
||||||
COMMA(op);
|
COMMA(op);
|
||||||
@ -231,9 +238,10 @@ function SetupBuiltins() {
|
|||||||
for (var i = 0; i < builtins.length; ++i) {
|
for (var i = 0; i < builtins.length; ++i) {
|
||||||
var name = builtins[i][0];
|
var name = builtins[i][0];
|
||||||
builtins[i][0] = i32[g_sys_heap>>2];
|
builtins[i][0] = i32[g_sys_heap>>2];
|
||||||
i32[g_sys_heap>>2] = Load(i32[g_sys_heap>>2], name); // name
|
var name_len = Load(i32[g_sys_heap>>2], name); // name
|
||||||
|
i32[g_sys_heap>>2] += name_len;
|
||||||
i32[g_sys_heap>>2] = CELL_ALIGNED(i32[g_sys_heap>>2]);
|
i32[g_sys_heap>>2] = CELL_ALIGNED(i32[g_sys_heap>>2]);
|
||||||
builtins[i][1] |= (name.length << 8);
|
builtins[i][1] |= (name_len << 8);
|
||||||
}
|
}
|
||||||
i32[g_sys_builtins>>2] = i32[g_sys_heap>>2];
|
i32[g_sys_builtins>>2] = i32[g_sys_heap>>2];
|
||||||
for (var i = 0; i < builtins.length; ++i) {
|
for (var i = 0; i < builtins.length; ++i) {
|
||||||
@ -413,7 +421,8 @@ function Init() {
|
|||||||
|
|
||||||
// setup boot text.
|
// setup boot text.
|
||||||
var source = i32[g_sys_heap>>2];
|
var source = i32[g_sys_heap>>2];
|
||||||
i32[g_sys_heap>>2] = Load(i32[g_sys_heap>>2], boot);
|
var len = Load(i32[g_sys_heap>>2], boot);
|
||||||
|
i32[g_sys_heap>>2] += len;
|
||||||
var source_len = i32[g_sys_heap>>2] - source;
|
var source_len = i32[g_sys_heap>>2] - source;
|
||||||
i32[g_sys_boot>>2] = source;
|
i32[g_sys_boot>>2] = source;
|
||||||
i32[g_sys_boot_size>>2] = source_len;
|
i32[g_sys_boot_size>>2] = source_len;
|
||||||
|
|||||||
Reference in New Issue
Block a user