diff options
Diffstat (limited to 'amiga.c')
-rw-r--r-- | amiga.c | 86 |
1 files changed, 86 insertions, 0 deletions
@@ -0,0 +1,86 @@ +/* Running commands on Amiga +Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 1995 Free Software Foundation, Inc. +This file is part of GNU Make. + +GNU Make is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Make is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Make; see the file COPYING. If not, write to +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#include "make.h" +#include <assert.h> +#include <exec/memory.h> +#include <dos/dostags.h> +#include <proto/exec.h> +#include <proto/dos.h> + +int +MyExecute (argv) +char ** argv; +{ + char * buffer, * ptr; + char ** aptr; + int len = 0; + int status; + + for (aptr=argv; *aptr; aptr++) + { + len += strlen (*aptr) + 4; + } + + buffer = AllocMem (len, MEMF_ANY); + + if (!buffer) + fatal ("MyExecute: Cannot allocate space for calling a command"); + + ptr = buffer; + + for (aptr=argv; *aptr; aptr++) + { + if (((*aptr)[0] == ';' && !(*aptr)[1])) + { + *ptr ++ = '"'; + strcpy (ptr, *aptr); + ptr += strlen (ptr); + *ptr ++ = '"'; + } + else if ((*aptr)[0] == '@' && (*aptr)[1] == '@' && !(*aptr)[2]) + { + *ptr ++ = '\n'; + continue; + } + else + { + strcpy (ptr, *aptr); + ptr += strlen (ptr); + } + *ptr ++ = ' '; + *ptr = 0; + } + + ptr[-1] = '\n'; + + status = SystemTags (buffer, + SYS_UserShell, TRUE, + TAG_END); + + FreeMem (buffer, len); + + if (SetSignal(0L,0L) & SIGBREAKF_CTRL_C) + status = 20; + + /* Warnings don't count */ + if (status == 5) + status = 0; + + return status; +} |