diff --git a/lib.nas b/lib.nas index e8e0785..295d964 100644 --- a/lib.nas +++ b/lib.nas @@ -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~""; diff --git a/nasal_builtin.h b/nasal_builtin.h index cb975e9..9c7aa48 100644 --- a/nasal_builtin.h +++ b/nasal_builtin.h @@ -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 }, diff --git a/stl/lib.nas b/stl/lib.nas index e8e0785..295d964 100644 --- a/stl/lib.nas +++ b/stl/lib.nas @@ -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~""; diff --git a/test/console3D.nas b/test/console3D.nas index 9129029..d696515 100644 --- a/test/console3D.nas +++ b/test/console3D.nas @@ -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=[]; }(); diff --git a/test/occupation.nas b/test/occupation.nas index a3686e5..de6e4a0 100644 --- a/test/occupation.nas +++ b/test/occupation.nas @@ -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."); } }(); \ No newline at end of file diff --git a/test/utf8chk.nas b/test/utf8chk.nas index 497ba2f..2e47189 100644 --- a/test/utf8chk.nas +++ b/test/utf8chk.nas @@ -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测试(); \ No newline at end of file +emoji测试(); +dotsgen(); \ No newline at end of file