home *** CD-ROM | disk | FTP | other *** search
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #include <exec/memory.h>
- #include <dos/dostags.h>
- #include <proto/exec.h>
- #include <proto/dos.h>
-
- int execute_command (int argc, char ** argv)
- {
- char * ptr, * buffer;
- int len, t, status;
-
- /* NOP ? */
- if (!argc)
- return 0;
-
- /* Count size of commandline */
- for (len=t=0; t<argc; t++)
- len += strlen(argv[t])+3;
-
- /* Allocate memory for it */
- buffer = AllocMem (len+1, MEMF_ANY);
-
- if (!buffer)
- {
- fprintf (stderr, "FOR: Cannot allocate memory (%d) to call a command\n",
- len);
- return 20;
- }
-
- /* fill it */
- ptr = buffer;
- for (t=0; t<argc; t++)
- {
- if (strchr (argv[t], ' ') || strchr (argv[t], '\t'))
- {
- *ptr ++ = '"';
- strcpy(ptr, argv[t]);
- ptr += strlen (ptr);
- *ptr ++ = '"';
- }
- else
- {
- strcpy(ptr, argv[t]);
- ptr += strlen (ptr);
- }
- *ptr ++ = ' ';
- }
-
- ptr[-1] = '\n';
- *ptr = 0;
-
- /* Call command */
- status = SystemTags (buffer,
- SYS_UserShell, TRUE,
- TAG_END);
-
- if (SetSignal(0L,0L) & SIGBREAKF_CTRL_C)
- {
- Write (Output(), "***Break\n", 9);
- status = 10;
- }
-
- /* Warnings don't count */
- if (status == 5)
- status = 0;
-
- /* free memory */
- FreeMem (buffer, len);
-
- return status;
- } /* execute_command */
-
- #define BUFFERSIZE 256
-
- char * replace_vars (char * str)
- {
- char * newstr;
- int len;
- char * ptr, * iptr;
- char varname[64], * vptr;
- char * varbuffer;
-
- newstr = malloc (4096);
- varbuffer = AllocMem (BUFFERSIZE, MEMF_ANY);
- ptr=newstr;
-
- for (iptr=str; *iptr; )
- {
- if (*iptr=='$')
- {
- vptr = varname;
- iptr ++;
-
- while (isalnum(*iptr))
- *vptr ++ = *iptr ++;
-
- *vptr = 0;
-
- len = GetVar (varname, varbuffer, BUFFERSIZE-1, 0);
- if (len != -1)
- {
- varbuffer[len] = 0;
-
- strcpy (ptr, varbuffer);
- ptr += len;
- }
- else
- {
- *ptr ++ = '$';
- strcpy (ptr, varname);
- ptr += strlen (ptr);
- }
- }
- else
- *ptr ++ = *iptr ++;
- }
-
- *ptr = 0;
-
- FreeMem (varbuffer, BUFFERSIZE);
-
- return newstr;
- } /* replace_vars */
-
-