Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,87 @@
|
|||
integer n, pc, sp;
|
||||
file f;
|
||||
text s;
|
||||
index code, Data;
|
||||
list l, stack, strings;
|
||||
|
||||
f.affix(argv(1));
|
||||
|
||||
f.list(l, 0);
|
||||
|
||||
n = atoi(l[-1]);
|
||||
while (n) {
|
||||
f.lead(s);
|
||||
strings.append(erase(s, -1, 0));
|
||||
n -= 1;
|
||||
}
|
||||
|
||||
while (f.list(l, 0) ^ -1) {
|
||||
code.put(atoi(lf_x_text(l)), l);
|
||||
}
|
||||
|
||||
pc = sp = 0;
|
||||
while (1) {
|
||||
l = code[pc];
|
||||
s = l[0];
|
||||
if (s == "jz") {
|
||||
if (lb_pick(stack)) {
|
||||
isk_greater(code, pc, pc);
|
||||
} else {
|
||||
pc = atoi(l[-1]);
|
||||
}
|
||||
} elif (s == "jmp") {
|
||||
pc = atoi(l[-1]);
|
||||
} else {
|
||||
if (s == "push") {
|
||||
lb_push(stack, atoi(l[1]));
|
||||
} elif (s == "fetch") {
|
||||
lb_push(stack, Data[atoi(erase(l[1], -1, 0))]);
|
||||
} elif (s == "neg") {
|
||||
stack[-1] = -stack[-1];
|
||||
} elif (s == "not") {
|
||||
stack[-1] = !stack[-1];
|
||||
} elif (s == "halt") {
|
||||
break;
|
||||
} else {
|
||||
n = lb_pick(stack);
|
||||
if (s == "store") {
|
||||
Data[atoi(erase(l[1], -1, 0))] = n;
|
||||
} elif (s == "add") {
|
||||
stack[-1] = stack[-1] + n;
|
||||
} elif (s == "sub") {
|
||||
stack[-1] = stack[-1] - n;
|
||||
} elif (s == "mul") {
|
||||
stack[-1] = stack[-1] * n;
|
||||
} elif (s == "div") {
|
||||
stack[-1] = stack[-1] / n;
|
||||
} elif (s == "mod") {
|
||||
stack[-1] = stack[-1] % n;
|
||||
} elif (s == "lt") {
|
||||
stack[-1] = stack[-1] < n;
|
||||
} elif (s == "gt") {
|
||||
stack[-1] = stack[-1] > n;
|
||||
} elif (s == "le") {
|
||||
stack[-1] = stack[-1] <= n;
|
||||
} elif (s == "ge") {
|
||||
stack[-1] = stack[-1] >= n;
|
||||
} elif (s == "eq") {
|
||||
stack[-1] = stack[-1] == n;
|
||||
} elif (s == "ne") {
|
||||
stack[-1] = stack[-1] != n;
|
||||
} elif (s == "and") {
|
||||
stack[-1] = stack[-1] && n;
|
||||
} elif (s == "or") {
|
||||
stack[-1] = stack[-1] || n;
|
||||
} elif (s == "prtc") {
|
||||
o_byte(n);
|
||||
} elif (s == "prti") {
|
||||
o_(n);
|
||||
} elif (s == "prts") {
|
||||
o_(strings[n]);
|
||||
} else {
|
||||
}
|
||||
}
|
||||
|
||||
isk_greater(code, pc, pc);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue