🚀 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);
}
# 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.
var mut=func(str){
return str~"";

View File

@ -534,6 +534,11 @@ var builtin_chr(var* local,gc& ngc)
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 hash=local[1];
@ -1262,6 +1267,7 @@ struct
{"__right", builtin_right },
{"__cmp", builtin_cmp },
{"__chr", builtin_chr },
{"__char", builtin_char },
{"__values", builtin_values },
{"__exists", builtin_exists },
{"__open", builtin_open },

View File

@ -183,6 +183,12 @@ var chr=func(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.
var mut=func(str){
return str~"";

View File

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

View File

@ -1,7 +1,11 @@
import.stl.process_bar;
import.module.libkey;
var is_windows_platform=os.platform()=="windows";
var cpu_stat=func(){
if(is_windows_platform)
return nil;
var cpu=split("\n",io.fin("/proc/stat"))[0];
cpu=split(" ",cpu);
cpu={
@ -18,13 +22,23 @@ var cpu_stat=func(){
}
var cpu_occupation=func(){
var first_in=1;
while(1){
var cpu0=cpu_stat();
for(var i=0;i<5;i+=1){
if(first_in){
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();
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 t1=cpu1.user+cpu1.nice+cpu1.system+cpu1.idle+cpu1.iowait+cpu1.irq+cpu1.softirq;
var interval=cpu1.idle-cpu0.idle;
@ -33,6 +47,8 @@ var cpu_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 mem_res={};
forindex(var i;meminfo){
@ -44,26 +60,27 @@ var mem_occupation=func(){
}
func(){
if(os.platform()=="windows"){
println("haven't supported yet.");
return;
}
var co=coroutine.create(cpu_occupation);
var bar=process_bar.high_resolution_bar(30);
print("\ec");
while(1){
var mem=mem_occupation();
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;
while((cpu_occ=coroutine.resume(co)[0])==nil){
var key=libkey.nonblock();
if(key!=nil and chr(key)=="q")
return;
}
println("\e[1;1H\e[1m Memory total(GB) : \e[0m\e[36m",mem.MemTotal/1024/1024,"\e[0m");
println("\e[2;1H\e[1m Memory free(GB) : \e[0m\e[36m",mem.MemFree/1024/1024,"\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[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[5;1H Press 'q' to quit.");
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 Current time : \e[0m\e[36m",os.time(),"\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 Memory free(GB) : \e[0m\e[36m",mem.MemFree/1024/1024,"\e[0m");
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 内容;测试成功)
输出(内容~"\n");
}
var emoji测试=func(){
var 💻=print;
var 🎤="\n";
@ -45,5 +46,27 @@ var emoji测试=func(){
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测试();
emoji测试();
emoji测试();
dotsgen();