diff --git a/NT/init_nt b/NT/init_nt index eeb3e110471ef24d7d7d88e78c2eb3da306e48f0..24e0d5d55cac7c821ea5a5bcb8b978143bff80a7 100755 --- a/NT/init_nt +++ b/NT/init_nt @@ -1,5 +1,8 @@ #!/bin/sh +#This can be 'sprsh' or 'wine' +REMOTE_METHOD=sprsh + # Edit NTHOST=10.0.4.10 NTDRIVE='j:' @@ -14,6 +17,10 @@ USE_SPRSH=yes # Port for sprsh NTPORT=4711 +#These are only used if you use wine +watcom=D:\\CDROM +INCLUDE="$watcom\\H;$watcom\\H\\NT" + # Don't edit base=`pwd` @@ -35,18 +42,23 @@ fi IFS=' ' -export NTHOST NTDRIVE NTCC CC PATH NTTOOLS MNTREPLACE MNTREPLACE NTPORT USE_SPRSH NTMOUNT IFS +export NTHOST NTDRIVE NTCC CC PATH NTTOOLS MNTREPLACE MNTREPLACE +export NTPORT USE_SPRSH NTMOUNT IFS REMOTE_METHOD watcom INCLUDE case /$SHELL-$TERM in */bash-xterm) - PROMPT_COMMAND="echo -n ]2\; Remote NT compile ]1\; rntcc" + PROMPT_COMMAND="echo -n ]2\; $REMOTE_METHOD NT compile ]1\; rntcc" export PROMPT_COMMAND ;; esac case /$SHELL in */bash) - PS1="NT $NTHOST \\$ " + if [ $REMOTE_METHOD = sprsh ]; then + PS1="NT $NTHOST \\$ " + else + PS1="WINE \\$ " + fi export PS1 ;; esac diff --git a/NT/tools/lib.pike b/NT/tools/lib.pike index fa8bc901629e0f8726e6fd74d9f8fbe8e793aeae..cdfc3fe89df5c40c9e4a60c183c18a5caa778922 100644 --- a/NT/tools/lib.pike +++ b/NT/tools/lib.pike @@ -15,61 +15,90 @@ 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, int|void silent) { - object(Stdio.File) f=low_do_cmd(cmd); - - handle_input(f); string ret=""; - while(1) + object(Stdio.File) f=Stdio.File(); + + switch(getenv("REMOTE_METHOD")) { - string s; - sscanf(f->read(4),"%4c",int len); - if(!len) break; - s=f->read(len); - s=replace(s,"\r\n","\n"); - if(!silent) write(s); - ret+=s; + default: + werror("Unknown REMOTE method %s\n",getenv("REMOTE_METHOD")); + break; + + case "wine": + case "WINE": +#if 0 + if(!silent && !filter) + { + return Process.create_process(({"wine",cmd*" "}))->wait(); + } + else +#endif + { + object o=f->pipe(Stdio.PROP_BIDIRECTIONAL | Stdio.PROP_IPC); + object proc=Process.create_process(({"wine", + "-debugmsg","fixme-all", + cmd*" "}), + (["stdout":o])); + destruct(o); + while(1) + { + string s=f->read(8192,1); + if(!s || !strlen(s)) break; + s=replace(s,"\r\n","\n"); + if(!silent) write(s); + ret+=s; + } + if(filter) filter(ret); + destruct(f); + return proc->wait(); + } + + case 0: + case "sprsh": + case "SPRSH": + string tmp=getcwd(); + string mnt=getenv("NTMOUNT"); + if(mnt && strlen(mnt)) tmp=replace(tmp,mnt,""); + cmd=({getenv("NTDRIVE")+replace(tmp,"/","\\")})+cmd; + if(!f->connect(getenv("NTHOST"),(int)getenv("NTPORT"))) + { + werror("Failed to connect "+strerror(errno())+".\n"); + exit(1); + } + + f->write(sprintf("%4c",sizeof(cmd))); + for(int e=0;e<sizeof(cmd);e++) + f->write(sprintf("%4c%s",strlen(cmd[e]),cmd[e])); + + if(f->proxy) + f->proxy(Stdio.File("stdin")); + else + thread_create(lambda(object f) + { + object stdin=Stdio.File("stdin"); + while(string s=stdin->read(1000,1)) + f->write(s); + },f); + + while(1) + { + string s; + sscanf(f->read(4),"%4c",int len); + if(!len) break; + s=f->read(len); + s=replace(s,"\r\n","\n"); + if(!silent) write(s); + ret+=s; + } + if(filter) filter(ret); + sscanf(f->read(4),"%4c",int code); + f->close("r"); + f->close("w"); + destruct(f); + return code; } - if(filter) filter(ret); - sscanf(f->read(4),"%4c",int code); - f->close("r"); - f->close("w"); - destruct(f); - return code; } string tmp; @@ -84,20 +113,21 @@ string popen_cmd(string *cmd) string getntenv(string var) { string s=""; - object(Stdio.File) f=low_do_cmd( ({"getenv",var}) ); - - while(1) + switch(getenv("REMOTE_METHOD")) { - sscanf(f->read(4),"%4c", int len); - if(!len) break; - s+=f->read(len); + default: + werror("Unknown REMOTE method %s\n",getenv("REMOTE_METHOD")); + break; + + case "wine": + case "WINE": + return getenv(var) || getenv(lower_case(var)); + + case 0: + case "sprsh": + case "SPRSH": + return popen_cmd( ({"getenv",var}) ); } - - sscanf(f->read(4),"%4c",int code); - f->close("r"); - f->close("w"); - destruct(f); - return s; } diff --git a/NT/tools/rntcc b/NT/tools/rntcc index 78d1bb25a7a3ee0439f9a081ad04959ba391e7da..76c5987c944b270042f7234da84b6da43583b6e8 100755 --- a/NT/tools/rntcc +++ b/NT/tools/rntcc @@ -50,6 +50,10 @@ int compile(string *sources, case "s": cmd=({ "wasm", "-fe"+errorfile, "-fo"+dest,})+ sources; + + default: + werror("Don't know how to compile %s\n",sources[0]); + exit(1); } if(verbose)