Mail Archives: djgpp-workers/1996/04/09/18:26:26
DJ asked me to forward this to this list. I'm not on this list,
so I won't see any discussion unless you explicitly cc me.
==
Is there any particular reason why DJGPP doesn't use a system
for long file names compatible with Win95?
Win95's long command line support works like this:
If command line is greater than 126 characters, put 127 in the
length byte of the psp tail, put 126 characters, followed by
0x0d. Put the full command line in the CMDLINE environment
variable.
I did a quick hack of dosexec.c to do this, and it seems to work.
(at least, I was able to spawn msvc with a command line > 126
chars)
This probably should be added on the input side too, to pick up
args too.
Sam Paik
paik AT 3dfx DOT com
Here is a context diff:
*** dosexec.c Mon Apr 8 19:09:18 1996
--- dosexec.org Thu Nov 30 06:58:08 1995
***************
*** 79,119 ****
dosmemput(progname, proglen, program_la);
! if (strlen(args) > 126) {
! arg_header[0] = 127;
! arg_header[1] = '\r';
! dosmemput(arg_header, 1, arg_la);
! dosmemput(args, 126, arg_la+1);
! dosmemput(arg_header+1, 1, arg_la+127);
! } else {
! arg_header[0] = strlen(args);
! arg_header[1] = '\r';
! dosmemput(arg_header, 1, arg_la);
! dosmemput(args, strlen(args), arg_la+1);
! dosmemput(arg_header+1, 1, arg_la+1+strlen(args));
! }
do {
env_la = talloc(1);
} while (env_la & 15);
talloc(-1);
! if (strlen(args) > 126) {
! for (i=0; envp[i]; i++)
! {
! if (strncmp(envp[i],"CMDLINE=",8)!=0) {
! env_e_la = talloc(strlen(envp[i])+1);
! dosmemput(envp[i], strlen(envp[i])+1, env_e_la);
! }
! }
! env_e_la = talloc(strlen(args)+8+1);
! dosmemput("CMDLINE=",8,env_e_la);
! dosmemput(args,strlen(args)+1,env_e_la+8);
! } else {
! for (i=0; envp[i]; i++)
! {
! env_e_la = talloc(strlen(envp[i])+1);
! dosmemput(envp[i], strlen(envp[i])+1, env_e_la);
! }
}
arg_header[0] = 0;
arg_header[1] = 1;
--- 79,98 ----
dosmemput(progname, proglen, program_la);
! arg_header[0] = strlen(args);
! arg_header[1] = '\r';
! dosmemput(arg_header, 1, arg_la);
! dosmemput(args, strlen(args), arg_la+1);
! dosmemput(arg_header+1, 1, arg_la+1+strlen(args));
do {
env_la = talloc(1);
} while (env_la & 15);
talloc(-1);
! for (i=0; envp[i]; i++)
! {
! env_e_la = talloc(strlen(envp[i])+1);
! dosmemput(envp[i], strlen(envp[i])+1, env_e_la);
}
arg_header[0] = 0;
arg_header[1] = 1;
***************
*** 171,187 ****
arglen += strlen(argv[i]) + 1;
args = (char *)alloca(arglen+1);
argp = args;
- #if 1
- for (i=1; argv[i]; i++)
- {
- const char *p = argv[i];
- *argp++ = ' ';
- while (*p)
- {
- *argp++ = *p++;
- }
- }
- #else
for (i=1; argv[i]; i++)
{
const char *p = argv[i];
--- 150,155 ----
***************
*** 195,201 ****
*argp++ = *p++;
}
}
- #endif
*argp = 0;
return direct_exec_tail(program, args, envp);
--- 163,168 ----
- Raw text -