aboutsummaryrefslogtreecommitdiff
path: root/gcc/f/runtime/libF77/system_.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/f/runtime/libF77/system_.c')
-rw-r--r--gcc/f/runtime/libF77/system_.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/gcc/f/runtime/libF77/system_.c b/gcc/f/runtime/libF77/system_.c
new file mode 100644
index 00000000000..ed024a14ded
--- /dev/null
+++ b/gcc/f/runtime/libF77/system_.c
@@ -0,0 +1,36 @@
+/* f77 interface to system routine */
+
+#include "f2c.h"
+
+#ifdef KR_headers
+extern char *F77_aloc();
+
+ integer
+G77_system_0 (s, n) register char *s; ftnlen n;
+#else
+#undef abs
+#undef min
+#undef max
+#include <stdlib.h>
+extern char *F77_aloc(ftnlen, char*);
+
+ integer
+G77_system_0 (register char *s, ftnlen n)
+#endif
+{
+ char buff0[256], *buff;
+ register char *bp, *blast;
+ integer rv;
+
+ buff = bp = n < sizeof(buff0)
+ ? buff0 : F77_aloc(n+1, "system_");
+ blast = bp + n;
+
+ while(bp < blast && *s)
+ *bp++ = *s++;
+ *bp = 0;
+ rv = system(buff);
+ if (buff != buff0)
+ free(buff);
+ return rv;
+ }