From 5e1cbd67aad202f6a3222fe7ef5d6fd63bbbcc3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Tue, 24 Feb 1998 11:26:57 -0800 Subject: [PATCH] new file Rev: NT/tools/lib.pike:1.1 --- NT/tools/lib.pike | 102 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 NT/tools/lib.pike diff --git a/NT/tools/lib.pike b/NT/tools/lib.pike new file mode 100644 index 0000000000..312afdf8a5 --- /dev/null +++ b/NT/tools/lib.pike @@ -0,0 +1,102 @@ +#if !constant(strerror) +#define strerror(X) X +#endif + +string fixpath(string s) +{ + string mnt=getenv("NTMOUNT"); + if(mnt && strlen(mnt)) s=replace(s,mnt,""); + return replace(s,"/","\\"); +} + + +string fixabspath(string s) +{ + return replace(s,"/","\\"); +} + +string handle_input(object o) +{ + if(o->proxy) + o->proxy(Stdio.File("stdin")); + else + thread_create(lambda(object o) + { + object stdin=Stdio.File("stdin"); + while(string s=stdin->read(1000,1)) + o->write(s); + },o); +} + + +object low_do_cmd(string *cmd) +{ + object(Stdio.File) f=Stdio.File(); + if(!f->connect(getenv("NTHOST"),(int)getenv("NTPORT"))) + { + werror("Failed to connect "+strerror(errno())+".\n"); + exit(1); + } + + string tmp=getcwd(); + string mnt=getenv("NTMOUNT"); + if(mnt && strlen(mnt)) tmp=replace(tmp,mnt,""); + cmd=({getenv("NTDRIVE")+replace(tmp,"/","\\")})+cmd; + f->write(sprintf("%4c",sizeof(cmd))); + for(int e=0;e<sizeof(cmd);e++) + f->write(sprintf("%4c%s",strlen(cmd[e]),cmd[e])); + return f; +} + +int silent_do_cmd(string *cmd, mixed|void filter) +{ + object(Stdio.File) f=low_do_cmd(cmd); + + handle_input(f); + string ret=""; + while(1) + { + string s; + sscanf(f->read(4),"%4c",int len); + if(!len) break; + write(s=f->read(len)); + ret+=s; + } + if(filter) filter(ret); + sscanf(f->read(4),"%4c",int code); + f->close("r"); + f->close("w"); + destruct(f); + return code; +} + +string getntenv(string var) +{ + string s=""; + object(Stdio.File) f=low_do_cmd( ({"getenv",var}) ); + + while(1) + { + sscanf(f->read(4),"%4c", int len); + if(!len) break; + s+=f->read(len); + } + + sscanf(f->read(4),"%4c",int code); + f->close("r"); + f->close("w"); + destruct(f); + return s; +} + + +int do_cmd(string *cmd, mixed|void filter) +{ + werror("DOING "+cmd*" "+"\n"); + return silent_do_cmd(cmd,filter); +} + +string find_lib_location() +{ + return __FILE__; +} -- GitLab