* New config.sub and config.guess
[make.git] / amiga.c
blobdb8ef0df83328ed004403eb853f92b1b1e911688
1 /* Running commands on Amiga
2 Copyright (C) 1995, 1996 Free Software Foundation, Inc.
3 This file is part of GNU Make.
5 GNU Make is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2, or (at your option)
8 any later version.
10 GNU Make is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GNU Make; see the file COPYING. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
18 MA 02111-1307, USA. */
20 #include "make.h"
21 #include "variable.h"
22 #include "amiga.h"
23 #include <assert.h>
24 #include <exec/memory.h>
25 #include <dos/dostags.h>
26 #include <proto/exec.h>
27 #include <proto/dos.h>
29 static const char Amiga_version[] = "$VER: Make 3.74.3 (12.05.96) \n"
30 "Amiga Port by A. Digulla (digulla@home.lake.de)";
32 int
33 MyExecute (argv)
34 char ** argv;
36 char * buffer, * ptr;
37 char ** aptr;
38 int len = 0;
39 int status;
41 for (aptr=argv; *aptr; aptr++)
43 len += strlen (*aptr) + 4;
46 buffer = AllocMem (len, MEMF_ANY);
48 if (!buffer)
49 fatal (NILF, "MyExecute: Cannot allocate space for calling a command");
51 ptr = buffer;
53 for (aptr=argv; *aptr; aptr++)
55 if (((*aptr)[0] == ';' && !(*aptr)[1]))
57 *ptr ++ = '"';
58 strcpy (ptr, *aptr);
59 ptr += strlen (ptr);
60 *ptr ++ = '"';
62 else if ((*aptr)[0] == '@' && (*aptr)[1] == '@' && !(*aptr)[2])
64 *ptr ++ = '\n';
65 continue;
67 else
69 strcpy (ptr, *aptr);
70 ptr += strlen (ptr);
72 *ptr ++ = ' ';
73 *ptr = 0;
76 ptr[-1] = '\n';
78 status = SystemTags (buffer,
79 SYS_UserShell, TRUE,
80 TAG_END);
82 FreeMem (buffer, len);
84 if (SetSignal(0L,0L) & SIGBREAKF_CTRL_C)
85 status = 20;
87 /* Warnings don't count */
88 if (status == 5)
89 status = 0;
91 return status;
94 char *
95 wildcard_expansion (wc, o)
96 char * wc, * o;
98 # define PATH_SIZE 1024
99 struct AnchorPath * apath;
101 if ( (apath = AllocMem (sizeof (struct AnchorPath) + PATH_SIZE,
102 MEMF_CLEAR))
105 apath->ap_Strlen = PATH_SIZE;
107 if (MatchFirst (wc, apath) == 0)
111 o = variable_buffer_output (o, apath->ap_Buf,
112 strlen (apath->ap_Buf));
113 o = variable_buffer_output (o, " ",1);
114 } while (MatchNext (apath) == 0);
117 MatchEnd (apath);
118 FreeMem (apath, sizeof (struct AnchorPath) + PATH_SIZE);
121 return o;