63 #include <sys/ioctl.h> 66 #include <sys/types.h> 85 #define CMDBUFSIZE 1024 87 #define CMDDEFNAME "/bin/ksh" 90 #elif defined(OPSYS_SUN) 91 #define CMDDEFNAME "/bin/sh" 95 #define CMDDEFNAME "/bin/bash" 96 #define COMSPEC "bash" 102 #define FULLSEG 65536L 104 #define FILESPEC_PATH 'P' 105 #define FILESPEC_NAME 'N' 106 #define FILESPEC_LOCATION 'L' 107 #define FILESPEC_EXTENSION 'E' 108 #define FILESPEC_DRIVE 'D' 110 #define KIOCSOUND 0x4B2F 147 const char *home_dir = NULL;
148 char *dir_buf = NULL;
155 if (*(st) ==
'~' && (*(st+1) ==
'\0' || *(st+1) ==
'/'|| *(st+1) ==
' ' ))
161 home_dir = getenv(
"HOME");
165 dir_buf = (
char *)malloc(strlen(home_dir)+strlen(st)+2);
169 sprintf(dir_buf,
"%s/%s", home_dir, st);
175 home_dir = getenv(
"HOME");
177 dir_buf = (
char *)malloc(strlen(home_dir)+2);
180 sprintf(dir_buf,
"%s/", home_dir);
184 else if (*(st) ==
'~')
187 slash = strchr(st,
'/');
197 dir_buf = (
char *)malloc(strlen(ppwd->pw_dir)+2);
201 sprintf(dir_buf,
"%s/", ppwd->pw_dir);
209 memcpy(username, st, slash-st);
210 username[slash-st] =
'\0';
211 ppwd = getpwnam(username);
214 dir_buf = (
char *)malloc(strlen(ppwd->pw_dir)+strlen(slash)+2);
218 sprintf(dir_buf,
"%s/%s", ppwd->pw_dir, slash);
251 return context->NullString();
256 char temp[PATH_MAX + 3];
258 return context->NewStringFromAsciiz(temp);
268 const char *endPtr = name + strlen(name);
269 const char *pathEnd = strrchr(name,
'/');
271 const char *pathStart = name;
275 pathEnd = pathEnd == NULL ? pathStart : pathEnd + 1;
277 const char *nameStart = pathEnd == name ? name : pathEnd;
279 switch (toupper(*option))
283 return context->String(pathStart, pathEnd - pathStart);
288 return context->String(nameStart, endPtr - nameStart);
293 return context->NullString();
298 return context->String(name, pathEnd - name);
304 const char *lastDot = strrchr(name,
'.');
306 if (lastDot >= nameStart)
310 return context->String(lastDot, endPtr - lastDot);
314 return context->NullString();
321 optionChar[0] = *option;
322 optionChar[1] =
'\0';
324 RexxArrayObject subs = context->Array(context->String(
"FILESPEC"), context->WholeNumberToObject(1),
325 context->String(
"ELNP"), context->String(optionChar));
364 if (activation->
callExternalRexx(target, arguments, argcount, calltype, result))
445 for (;*Environment != NULL;Environment++)
447 size += strlen(*Environment);
454 if (!(curr_dir=(
char *)malloc(PATH_MAX + 3)))
461 size += strlen(curr_dir);
463 size +=
sizeof(size_t);
470 New +=
sizeof(size_t);
472 memcpy(New,curr_dir,strlen(curr_dir));
473 New += strlen(curr_dir);
481 for (;*Environment != NULL;Environment++)
484 memcpy(New,*Environment,strlen(*Environment));
485 New += strlen(*Environment);
515 char *Env_Var_String;
516 char namebufsave[256],namebufcurr[256];
522 begin = current = (
char *)CurrentEnv;
524 current +=
sizeof(size_t);
525 if (chdir(current) == -1)
528 sprintf(msg,
"Error restoring current directory: %s", current);
531 current += strlen(current);
538 for (;*Environment != NULL;Environment++)
540 length = strlen(*Environment)+1;
542 Env_Var_String = (
char *)malloc(length);
543 memcpy(Env_Var_String,*Environment,length);
544 putenv(Env_Var_String);
550 for (;(size_t)(current-begin)<size;current+=(strlen(current)+1))
557 for (i=0;(*np!=
'=')&&(i<255);np++,i++)
559 memcpy(&(namebufsave[i]),np,1);
561 memcpy(&(namebufsave[i]),
"\0",1);
563 for (;*Environment != NULL;Environment++)
568 for (i=0;(*np!=
'=')&&(i<255);np++,i++)
570 memcpy(&(namebufcurr[i]),np,1);
572 memcpy(&(namebufcurr[i]),
"\0",1);
574 if (!strcmp(namebufsave,namebufcurr))
580 if (putenv(current) == -1)