diff --git a/module/keyboard.cpp b/module/keyboard.cpp index 14a4257..742984d 100644 --- a/module/keyboard.cpp +++ b/module/keyboard.cpp @@ -56,7 +56,7 @@ extern "C" nasal_ref nas_init(std::vector& args,nasal_gc& gc){ tcflush(0,TCIOFLUSH); tcgetattr(0,&init_termios); new_termios=init_termios; - new_termios.c_lflag&=~(ICANON|ECHO|ECHONL); + new_termios.c_lflag&=~(ICANON|ECHO|ECHONL|ECHOE); // vmin=0 is nonblock input, but in wsl there is a bug that will block input // so we use fcntl to write the nonblock input new_termios.c_cc[VMIN]=1; diff --git a/stl/module.nas b/stl/module.nas index 0168efd..8757d77 100644 --- a/stl/module.nas +++ b/stl/module.nas @@ -4,7 +4,6 @@ # this provides safe usage of dylib # when dylib is closed, # all the invalid functions cannot be called -import("lib.nas"); var module_call_func=func(fptr,args){ return __builtin_dlcall; diff --git a/test/module_test.nas b/test/module_test.nas index bfd2f33..1668671 100644 --- a/test/module_test.nas +++ b/test/module_test.nas @@ -1,5 +1,44 @@ -import("./module/libfib.nas"); +var libfib=func(){ + var (dd,fib,qfib)=(nil,nil,nil); + return { + open:func(){ + if(dd==nil){ + dd=dylib.dlopen("./module/libfib.so"); + fib=dylib.dlsym(dd,"fib"); + qfib=dylib.dlsym(dd,"quick_fib"); + }else{ + println("[info ] already loaded."); + } + }, + close:func(){ + if(dd==nil){ + println("[error ] already closed."); + return; + } + dylib.dlclose(dd); + (dd,fib,qfib)=(nil,nil,nil); + }, + fib:func(x){ + if(fib!=nil) + return dylib.dlcall(fib,x); + println("[error ] cannot call fib."); + return nil; + }, + qfib:func(x){ + if(qfib!=nil) + return dylib.dlcall(qfib,x); + println("[error ] cannot call qfib."); + return nil; + } + } +}(); -println(libfib); -println(libfib.fib(29)); -println(libfib.qfib(29)); \ No newline at end of file +println("[keys ] ",keys(libfib)); +libfib.open(); +libfib.open(); +println("[result] ",libfib.fib(40)); +println("[result] ",libfib.qfib(40)); +libfib.close(); +println("[result] ",libfib.fib(40)); +println("[result] ",libfib.qfib(40)); +libfib.close(); \ No newline at end of file