🚀 add new native function `char`

This commit is contained in:
ValKmjolnir 2022-11-12 17:03:56 +08:00
parent f9179188a5
commit 7e4faed4a6
6 changed files with 71 additions and 13 deletions

View File

@ -183,6 +183,12 @@ var chr=func(code){
return __chr(code); return __chr(code);
} }
# char will give you the real character of ascii-number
# instead of extend-ascii when number between 128~256
var char=func(code){
return __char(code);
}
# mut is used to change unmutable strings to mutable. # mut is used to change unmutable strings to mutable.
var mut=func(str){ var mut=func(str){
return str~""; return str~"";

View File

@ -534,6 +534,11 @@ var builtin_chr(var* local,gc& ngc)
return ngc.newstr(" "); return ngc.newstr(" ");
} }
var builtin_char(var* local,gc& ngc)
{
return ngc.newstr((char)local[1].num());
}
var builtin_values(var* local,gc& ngc) var builtin_values(var* local,gc& ngc)
{ {
var hash=local[1]; var hash=local[1];
@ -1262,6 +1267,7 @@ struct
{"__right", builtin_right }, {"__right", builtin_right },
{"__cmp", builtin_cmp }, {"__cmp", builtin_cmp },
{"__chr", builtin_chr }, {"__chr", builtin_chr },
{"__char", builtin_char },
{"__values", builtin_values }, {"__values", builtin_values },
{"__exists", builtin_exists }, {"__exists", builtin_exists },
{"__open", builtin_open }, {"__open", builtin_open },

View File

@ -183,6 +183,12 @@ var chr=func(code){
return __chr(code); return __chr(code);
} }
# char will give you the real character of ascii-number
# instead of extend-ascii when number between 128~256
var char=func(code){
return __char(code);
}
# mut is used to change unmutable strings to mutable. # mut is used to change unmutable strings to mutable.
var mut=func(str){ var mut=func(str){
return str~""; return str~"";

View File

@ -26,7 +26,7 @@ import.module.libmat;
func(){ func(){
# allocate more spaces # allocate more spaces
var t=[]; var t=[];
for(var i=0;i<2048;i+=1) for(var i=0;i<16384;i+=1)
append(t,[],[],[],str(i)); append(t,[],[],[],str(i));
t=[]; t=[];
}(); }();

View File

@ -1,7 +1,11 @@
import.stl.process_bar; import.stl.process_bar;
import.module.libkey; import.module.libkey;
var is_windows_platform=os.platform()=="windows";
var cpu_stat=func(){ var cpu_stat=func(){
if(is_windows_platform)
return nil;
var cpu=split("\n",io.fin("/proc/stat"))[0]; var cpu=split("\n",io.fin("/proc/stat"))[0];
cpu=split(" ",cpu); cpu=split(" ",cpu);
cpu={ cpu={
@ -18,13 +22,23 @@ var cpu_stat=func(){
} }
var cpu_occupation=func(){ var cpu_occupation=func(){
var first_in=1;
while(1){ while(1){
var cpu0=cpu_stat(); var cpu0=cpu_stat();
for(var i=0;i<5;i+=1){ if(first_in){
unix.sleep(0.1); unix.sleep(0.1);
coroutine.yield(nil); first_in=0;
}else{
for(var i=0;i<10;i+=1){
unix.sleep(0.1);
coroutine.yield(nil);
}
} }
var cpu1=cpu_stat(); var cpu1=cpu_stat();
if(is_windows_platform){
coroutine.yield(0);
continue;
}
var t0=cpu0.user+cpu0.nice+cpu0.system+cpu0.idle+cpu0.iowait+cpu0.irq+cpu0.softirq; var t0=cpu0.user+cpu0.nice+cpu0.system+cpu0.idle+cpu0.iowait+cpu0.irq+cpu0.softirq;
var t1=cpu1.user+cpu1.nice+cpu1.system+cpu1.idle+cpu1.iowait+cpu1.irq+cpu1.softirq; var t1=cpu1.user+cpu1.nice+cpu1.system+cpu1.idle+cpu1.iowait+cpu1.irq+cpu1.softirq;
var interval=cpu1.idle-cpu0.idle; var interval=cpu1.idle-cpu0.idle;
@ -33,6 +47,8 @@ var cpu_occupation=func(){
} }
var mem_occupation=func(){ var mem_occupation=func(){
if(is_windows_platform)
return {MemTotal:math.inf,MemFree:math.inf};
var meminfo=split("\n",io.fin("/proc/meminfo")); var meminfo=split("\n",io.fin("/proc/meminfo"));
var mem_res={}; var mem_res={};
forindex(var i;meminfo){ forindex(var i;meminfo){
@ -44,26 +60,27 @@ var mem_occupation=func(){
} }
func(){ func(){
if(os.platform()=="windows"){
println("haven't supported yet.");
return;
}
var co=coroutine.create(cpu_occupation); var co=coroutine.create(cpu_occupation);
var bar=process_bar.high_resolution_bar(30); var bar=process_bar.high_resolution_bar(30);
print("\ec"); print("\ec");
while(1){ while(1){
var mem=mem_occupation(); var mem=mem_occupation();
var mem_occ=(mem.MemTotal-mem.MemFree)/mem.MemTotal*100; var mem_occ=(mem.MemTotal-mem.MemFree)/mem.MemTotal*100;
if(math.isnan(mem_occ) or mem_occ<0 or mem_occ>100){
mem_occ=0;
}
var cpu_occ=nil; var cpu_occ=nil;
while((cpu_occ=coroutine.resume(co)[0])==nil){ while((cpu_occ=coroutine.resume(co)[0])==nil){
var key=libkey.nonblock(); var key=libkey.nonblock();
if(key!=nil and chr(key)=="q") if(key!=nil and chr(key)=="q")
return; return;
} }
println("\e[1;1H\e[1m Memory total(GB) : \e[0m\e[36m",mem.MemTotal/1024/1024,"\e[0m"); println("\e[1;1H\e[1m Operating system : \e[0m",is_windows_platform?"\e[31m":"\e[36m",os.platform(),"\e[0m");
println("\e[2;1H\e[1m Memory free(GB) : \e[0m\e[36m",mem.MemFree/1024/1024,"\e[0m"); println("\e[2;1H\e[1m Current time : \e[0m\e[36m",os.time(),"\e[0m");
println("\e[3;1H\e[1m Memory occupation(%): \e[0m",mem_occ>60?"\e[91m":"\e[32m",bar.bar(mem_occ/100)~" ",mem_occ,"\e[0m "); println("\e[3;1H\e[1m Memory total(GB) : \e[0m\e[36m",mem.MemTotal/1024/1024,"\e[0m");
println("\e[4;1H\e[1m CPU occupation(%) : \e[0m",cpu_occ>90?"\e[91m":"\e[32m",bar.bar(cpu_occ/100)~" ",cpu_occ,"\e[0m "); println("\e[4;1H\e[1m Memory free(GB) : \e[0m\e[36m",mem.MemFree/1024/1024,"\e[0m");
println("\e[5;1H Press 'q' to quit."); println("\e[5;1H\e[1m Memory occupation(%): \e[0m",mem_occ>60?"\e[91m":"\e[32m",bar.bar(mem_occ/100)~" ",mem_occ,"\e[0m ");
println("\e[6;1H\e[1m CPU occupation(%) : \e[0m",cpu_occ>90?"\e[91m":"\e[32m",bar.bar(cpu_occ/100)~" ",cpu_occ,"\e[0m ");
println("\e[7;1H Press 'q' to quit.");
} }
}(); }();

View File

@ -8,6 +8,7 @@ var unicode测试=func(){
foreach(var 内容;测试成功) foreach(var 内容;测试成功)
输出(内容~"\n"); 输出(内容~"\n");
} }
var emoji测试=func(){ var emoji测试=func(){
var 💻=print; var 💻=print;
var 🎤="\n"; var 🎤="\n";
@ -45,5 +46,27 @@ var emoji测试=func(){
foreach(var 📄;keys(🗄️)) foreach(var 📄;keys(🗄️))
💻(📄,🗄️[📄],🎤); 💻(📄,🗄️[📄],🎤);
} }
var dotsgen=func(){
var dots=[];
var s="";
for(var i=0;i<256;i+=1){
var v0=s[0];
var v1=s[1]+int(i/64);
var v2=s[2]+i;
if(v2>191){
v2-=int(i/64)*64;
}
var tmp=char(v0)~char(v1)~char(v2);
append(dots,tmp);
}
forindex(var i;dots){
print(dots[i],(i+1-int((i+1)/32)*32==0)?"\n":"");
}
return dots;
};
unicode测试(); unicode测试();
emoji测试(); emoji测试();
dotsgen();