mirror of
https://github.com/ValKmjolnir/Nasal-Interpreter.git
synced 2026-05-02 19:00:47 +08:00
✨ add cli module and test/wavecity.nas
This commit is contained in:
@@ -4,16 +4,16 @@ use std.io;
|
||||
use std.unix;
|
||||
|
||||
var os_time = func() {
|
||||
return "[\e[33;1m"~os.time()~"\e[0m] ";
|
||||
return "\e[33;1m["~os.time()~"]\e[0m ";
|
||||
}
|
||||
var err_hd = func() {
|
||||
return "[\e[91;1merror\e[0m] ";
|
||||
return "\e[91;1m[error]\e[0m ";
|
||||
}
|
||||
var info_hd = func() {
|
||||
return "[\e[96;1minfo\e[0m] ";
|
||||
return "\e[96;1m[info]\e[0m ";
|
||||
}
|
||||
var modified_hd = func() {
|
||||
return "[\e[92;1mmodified\e[0m] ";
|
||||
return "\e[92;1m[modified]\e[0m ";
|
||||
}
|
||||
var usage = func() {
|
||||
println(os_time(),info_hd(),"\e[1musage: nasal watchdog.nas <filename> [\"argv\"]\e[0m");
|
||||
@@ -41,7 +41,7 @@ if (size(argv)==2) {
|
||||
var modified_time = io.fstat(filename).st_mtime;
|
||||
println(os_time(),info_hd(),"\e[1mwatching ",filename," ..\e[0m");
|
||||
while(1) {
|
||||
unix.sleep(1);
|
||||
unix.sleep(5);
|
||||
if (!io.exists(filename)) {
|
||||
println(os_time(),err_hd(),"\e[1mfile <",filename,"> does not exist\e[0m");
|
||||
break;
|
||||
|
||||
126
test/wavecity.nas
Normal file
126
test/wavecity.nas
Normal file
@@ -0,0 +1,126 @@
|
||||
var table_character_set = [
|
||||
"─", "━", "│", "┃", "╌", "╍", "╎", "╏", "┄", "┅",
|
||||
"┆", "┇", "┈", "┉", "┊", "┋", "┌", "┍", "┎", "┏",
|
||||
"┐", "┑", "┒", "┓", "└", "┕", "┖", "┗", "┘", "┙",
|
||||
"┚", "┛", "├", "┝", "┞", "┟", "┠", "┡", "┢", "┣",
|
||||
"┤", "┥", "┦", "┧", "┨", "┩", "┪", "┫", "┬", "┭",
|
||||
"┮", "┯", "┰", "┱", "┲", "┳", "┴", "┵", "┶", "┷",
|
||||
"┸", "┹", "┺", "┻", "┼", "┽", "┾", "┿", "╀", "╁",
|
||||
"╂", "╃", "╄", "╅", "╆", "╇", "╈", "╉", "╊", "╋",
|
||||
"╪", "╫", "╬", "═", "║", "╒", "╓", "╔", "╕", "╖",
|
||||
"╗", "╘", "╙", "╚", "╛", "╜", "╝", "╞", "╟", "╠",
|
||||
"╡", "╢", "╣", "╤", "╥", "╦", "╧", "╨", "╩", "╔",
|
||||
"╗", "╝", "╚", "╬", "═", "╓", "╩", "┠", "┨", "┯",
|
||||
"┷", "┏", "┓", "┗", "┛", "┳", "⊥", "﹃", "﹄",
|
||||
"╮", "╭", "╯", "╰", "╳"
|
||||
];
|
||||
|
||||
var road_enum = {
|
||||
null: 0,
|
||||
narrow: 1,
|
||||
wide: 2
|
||||
};
|
||||
|
||||
var block = {
|
||||
"┌": [road_enum.null, road_enum.narrow, road_enum.narrow, road_enum.null],
|
||||
"└": [road_enum.narrow, road_enum.narrow, road_enum.null, road_enum.null],
|
||||
"┐": [road_enum.null, road_enum.null, road_enum.narrow, road_enum.narrow],
|
||||
"┘": [road_enum.narrow, road_enum.null, road_enum.null, road_enum.narrow],
|
||||
"╪": [road_enum.narrow, road_enum.wide, road_enum.narrow, road_enum.wide],
|
||||
"│": [road_enum.narrow, road_enum.null, road_enum.narrow, road_enum.null],
|
||||
"─": [road_enum.null, road_enum.narrow, road_enum.null, road_enum.narrow],
|
||||
"┼": [road_enum.narrow, road_enum.narrow, road_enum.narrow, road_enum.narrow],
|
||||
"╫": [road_enum.wide, road_enum.narrow, road_enum.wide, road_enum.narrow],
|
||||
"╬": [road_enum.wide, road_enum.wide, road_enum.wide, road_enum.wide],
|
||||
"═": [road_enum.null, road_enum.wide, road_enum.null, road_enum.wide],
|
||||
"║": [road_enum.wide, road_enum.null, road_enum.wide, road_enum.null],
|
||||
# "╒": [road_enum.null, road_enum.wide, road_enum.narrow, road_enum.null],
|
||||
# "╓": [road_enum.null, road_enum.narrow, road_enum.wide, road_enum.null],
|
||||
"╔": [road_enum.null, road_enum.wide, road_enum.wide, road_enum.null],
|
||||
# "╕": [road_enum.null, road_enum.null, road_enum.narrow, road_enum.wide],
|
||||
# "╖": [road_enum.null, road_enum.null, road_enum.wide, road_enum.narrow],
|
||||
"╗": [road_enum.null, road_enum.null, road_enum.wide, road_enum.wide],
|
||||
# "╘": [road_enum.narrow, road_enum.wide, road_enum.null, road_enum.null],
|
||||
# "╙": [road_enum.wide, road_enum.narrow, road_enum.null, road_enum.null],
|
||||
"╚": [road_enum.wide, road_enum.wide, road_enum.null, road_enum.null],
|
||||
# "╛": [road_enum.narrow, road_enum.null, road_enum.null, road_enum.wide],
|
||||
# "╜": [road_enum.wide, road_enum.null, road_enum.null, road_enum.narrow],
|
||||
"╝": [road_enum.wide, road_enum.null, road_enum.null, road_enum.wide],
|
||||
"╞": [road_enum.narrow, road_enum.wide, road_enum.narrow, road_enum.null],
|
||||
"╟": [road_enum.wide, road_enum.narrow, road_enum.wide, road_enum.null],
|
||||
"╠": [road_enum.wide, road_enum.wide, road_enum.wide, road_enum.null],
|
||||
"╡": [road_enum.narrow, road_enum.null, road_enum.narrow, road_enum.wide],
|
||||
"╢": [road_enum.wide, road_enum.null, road_enum.wide, road_enum.narrow],
|
||||
"╣": [road_enum.wide, road_enum.null, road_enum.wide, road_enum.wide],
|
||||
"╤": [road_enum.null, road_enum.wide, road_enum.narrow, road_enum.wide],
|
||||
"╥": [road_enum.null, road_enum.narrow, road_enum.wide, road_enum.narrow],
|
||||
"╦": [road_enum.null, road_enum.wide, road_enum.wide, road_enum.wide],
|
||||
"╧": [road_enum.narrow, road_enum.wide, road_enum.null, road_enum.wide],
|
||||
"╨": [road_enum.wide, road_enum.narrow, road_enum.null, road_enum.narrow],
|
||||
"╩": [road_enum.wide, road_enum.wide, road_enum.null, road_enum.wide],
|
||||
" ": [road_enum.null, road_enum.null, road_enum.null, road_enum.null]
|
||||
};
|
||||
|
||||
var choice = func(above_block_char,
|
||||
left_block_char,
|
||||
flag_no_road_at_right,
|
||||
flag_no_road_at_bottom) {
|
||||
var above_block = block[above_block_char];
|
||||
var left_block = block[left_block_char];
|
||||
var block_char_set = keys(block);
|
||||
|
||||
var possible = [];
|
||||
foreach(var bcs; block_char_set) {
|
||||
var this_block = block[bcs];
|
||||
if (this_block[0] == above_block[2] and
|
||||
this_block[3] == left_block[1]) {
|
||||
if (flag_no_road_at_right and this_block[1]!=road_enum.null) {
|
||||
continue;
|
||||
}
|
||||
if (flag_no_road_at_bottom and this_block[2]!=road_enum.null) {
|
||||
continue;
|
||||
}
|
||||
append(possible, bcs);
|
||||
}
|
||||
}
|
||||
|
||||
func() {
|
||||
if (vecindex(possible, " ")!=nil) {
|
||||
for(var i = 0; i < 64; i+= 1) {
|
||||
append(possible, " ");
|
||||
}
|
||||
}
|
||||
}();
|
||||
return possible[rand()*size(possible)];
|
||||
}
|
||||
|
||||
var print_whole_line = func(this_line) {
|
||||
var res = "";
|
||||
foreach(var i; this_line) {
|
||||
res ~= i;
|
||||
}
|
||||
println(res);
|
||||
}
|
||||
|
||||
srand();
|
||||
var last_line = [];
|
||||
for(var i = 0; i<100; i+=1) {
|
||||
append(last_line, " ");
|
||||
}
|
||||
|
||||
for(var iteration_times = 0; iteration_times < 25; iteration_times += 1) {
|
||||
var this_line = [];
|
||||
var left_block = " ";
|
||||
for(var i = 0; i < 100; i += 1) {
|
||||
var this_block = choice(
|
||||
last_line[i],
|
||||
left_block,
|
||||
i==99,
|
||||
iteration_times==24
|
||||
);
|
||||
left_block = this_block;
|
||||
append(this_line, this_block);
|
||||
}
|
||||
print_whole_line(this_line);
|
||||
last_line = this_line;
|
||||
}
|
||||
Reference in New Issue
Block a user