aboutsummaryrefslogtreecommitdiff
path: root/unix/boot/spp/rpp/ratlibc
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /unix/boot/spp/rpp/ratlibc
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'unix/boot/spp/rpp/ratlibc')
-rw-r--r--unix/boot/spp/rpp/ratlibc/README1
-rw-r--r--unix/boot/spp/rpp/ratlibc/cant.c16
-rw-r--r--unix/boot/spp/rpp/ratlibc/close.c10
-rw-r--r--unix/boot/spp/rpp/ratlibc/endst.c10
-rw-r--r--unix/boot/spp/rpp/ratlibc/getarg.c28
-rw-r--r--unix/boot/spp/rpp/ratlibc/getlin.c32
-rw-r--r--unix/boot/spp/rpp/ratlibc/initst.c18
-rw-r--r--unix/boot/spp/rpp/ratlibc/mkpkg.sh9
-rw-r--r--unix/boot/spp/rpp/ratlibc/open.c30
-rw-r--r--unix/boot/spp/rpp/ratlibc/putch.c15
-rw-r--r--unix/boot/spp/rpp/ratlibc/putlin.c16
-rw-r--r--unix/boot/spp/rpp/ratlibc/r4tocstr.c22
-rw-r--r--unix/boot/spp/rpp/ratlibc/ratdef.h73
-rw-r--r--unix/boot/spp/rpp/ratlibc/remark.c43
14 files changed, 323 insertions, 0 deletions
diff --git a/unix/boot/spp/rpp/ratlibc/README b/unix/boot/spp/rpp/ratlibc/README
new file mode 100644
index 00000000..427e3969
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibc/README
@@ -0,0 +1 @@
+RPP/RATLIBC -- Host system interface routines for the RPP program.
diff --git a/unix/boot/spp/rpp/ratlibc/cant.c b/unix/boot/spp/rpp/ratlibc/cant.c
new file mode 100644
index 00000000..2d82c3e9
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibc/cant.c
@@ -0,0 +1,16 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#include "ratdef.h"
+
+extern int ENDST (void);
+
+
+void CANT(rname)
+register RCHAR *rname;
+{
+ while (*rname != REOS)
+ putc(*rname++, stderr);
+ fprintf(stderr, ": cant open\n");
+ ENDST();
+}
diff --git a/unix/boot/spp/rpp/ratlibc/close.c b/unix/boot/spp/rpp/ratlibc/close.c
new file mode 100644
index 00000000..a54d4a80
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibc/close.c
@@ -0,0 +1,10 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#include "ratdef.h"
+
+void CLOSE(fd)
+FINT *fd;
+{
+ fclose(_fdtofile[*fd]);
+}
diff --git a/unix/boot/spp/rpp/ratlibc/endst.c b/unix/boot/spp/rpp/ratlibc/endst.c
new file mode 100644
index 00000000..b8f83f3d
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibc/endst.c
@@ -0,0 +1,10 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#include <stdlib.h>
+#include "ratdef.h"
+
+void ENDST()
+{
+ exit(0);
+}
diff --git a/unix/boot/spp/rpp/ratlibc/getarg.c b/unix/boot/spp/rpp/ratlibc/getarg.c
new file mode 100644
index 00000000..2952d7d7
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibc/getarg.c
@@ -0,0 +1,28 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#include "ratdef.h"
+
+FINT
+GETARG(n, s, maxsiz)
+FINT *n;
+register RCHAR *s;
+FINT *maxsiz;
+{
+ extern int xargc;
+ extern char **xargv;
+ register char *t;
+ register int i;
+
+ if(*n>=0 && *n<xargc)
+ t = xargv[*n];
+ else if (*n == -1)
+ return(xargc);
+ else
+ return(REOF); /* non-existent argument */
+
+ for(i = 0; i<*maxsiz-1 && *t!='\0' ; ++i)
+ *s++ = *t++;
+ *s++ = REOS; /* terminate ratfor string with eos */
+ return(i); /* return length of argument */
+}
diff --git a/unix/boot/spp/rpp/ratlibc/getlin.c b/unix/boot/spp/rpp/ratlibc/getlin.c
new file mode 100644
index 00000000..1949f9cd
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibc/getlin.c
@@ -0,0 +1,32 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#include "ratdef.h"
+
+FINT
+GETLIN(line, fd)
+RCHAR *line;
+FINT *fd;
+{
+ register int c=0;
+ register int count=0;
+ register RCHAR *cs;
+ FILE *fp;
+
+ fp = _fdtofile[*fd];
+ cs = line;
+ while (++count<MAXLINE && (c = getc(fp))>=0) {
+ *cs++ = c;
+ if (c == '\n') {
+ *cs++ = REOS;
+ return (count); /* count includes newline, but does
+ not include the EOS */
+ }
+ }
+
+ if (c<0 && cs==line)
+ return(REOF);
+
+ *cs++ = REOS;
+ return(count);
+}
diff --git a/unix/boot/spp/rpp/ratlibc/initst.c b/unix/boot/spp/rpp/ratlibc/initst.c
new file mode 100644
index 00000000..6cf4a9a4
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibc/initst.c
@@ -0,0 +1,18 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#include "ratdef.h"
+
+FILE *_fdtofile[10];
+
+/*
+ * Ratfor initialization routine. To be called as the first
+ * executable statement of every program using the tools
+ * subroutines.
+ */
+void INITST()
+{
+ _fdtofile[0] = stdin;
+ _fdtofile[1] = stdout;
+ _fdtofile[2] = stderr;
+}
diff --git a/unix/boot/spp/rpp/ratlibc/mkpkg.sh b/unix/boot/spp/rpp/ratlibc/mkpkg.sh
new file mode 100644
index 00000000..8159d992
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibc/mkpkg.sh
@@ -0,0 +1,9 @@
+# Host system interface for the RPP program.
+
+$CC -c -g $HSI_CF cant.c close.c endst.c getarg.c getlin.c initst.c open.c\
+ putch.c putlin.c r4tocstr.c remark.c
+
+ar rv libc.a *.o
+$RANLIB libc.a
+mv -f libc.a ..
+rm *.o
diff --git a/unix/boot/spp/rpp/ratlibc/open.c b/unix/boot/spp/rpp/ratlibc/open.c
new file mode 100644
index 00000000..fa4558d9
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibc/open.c
@@ -0,0 +1,30 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#include "ratdef.h"
+
+extern void r4tocstr (register RCHAR *rstr, register char *cstr);
+
+FINT
+OPEN(rname, mode)
+RCHAR *rname;
+register FINT *mode;
+{
+ register FILE *fp;
+ char cname[FILENAMESIZE];
+
+ r4tocstr(rname, cname);
+
+ if (*mode == APPEND)
+ fp = fopen(cname, "a");
+ else if (*mode == READWRITE || *mode == WRITE)
+ fp = fopen(cname, "w");
+ else
+ fp = fopen(cname, "r");
+
+ if (fp == NULL)
+ return(RERR); /* unable to open file */
+
+ _fdtofile[fileno(fp)] = fp;
+ return(fileno(fp));
+}
diff --git a/unix/boot/spp/rpp/ratlibc/putch.c b/unix/boot/spp/rpp/ratlibc/putch.c
new file mode 100644
index 00000000..322628cc
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibc/putch.c
@@ -0,0 +1,15 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#include "ratdef.h"
+
+int PUTCH(c, fd)
+register RCHAR *c;
+register FINT *fd;
+{
+ register FILE *file;
+
+ file = _fdtofile[*fd];
+ putc(*c, file);
+ return 0;
+}
diff --git a/unix/boot/spp/rpp/ratlibc/putlin.c b/unix/boot/spp/rpp/ratlibc/putlin.c
new file mode 100644
index 00000000..0da6c4d9
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibc/putlin.c
@@ -0,0 +1,16 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#include "ratdef.h"
+
+void PUTLIN(line, fd)
+RCHAR *line;
+FINT *fd;
+{
+ register FILE *fp;
+ register int c;
+
+ fp = _fdtofile[*fd];
+ while((c = *line++) != REOS)
+ putc(c, fp);
+}
diff --git a/unix/boot/spp/rpp/ratlibc/r4tocstr.c b/unix/boot/spp/rpp/ratlibc/r4tocstr.c
new file mode 100644
index 00000000..36924353
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibc/r4tocstr.c
@@ -0,0 +1,22 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#include "ratdef.h"
+
+/* Convert a Ratfor string (one character per integer, terminated
+ * by an EOS) to a C string (one character per 8-bit byte, terminated
+ * by a byte of zero).
+ */
+void r4tocstr(rstr, cstr)
+register RCHAR *rstr;
+register char *cstr;
+{
+ while (*rstr != REOS) {
+ if (*rstr > 0177) {
+ *cstr++ = *((char *)rstr);
+ rstr++;
+ } else
+ *cstr++ = *rstr++;
+ }
+ *cstr = '\0';
+}
diff --git a/unix/boot/spp/rpp/ratlibc/ratdef.h b/unix/boot/spp/rpp/ratlibc/ratdef.h
new file mode 100644
index 00000000..2f5b7e1c
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibc/ratdef.h
@@ -0,0 +1,73 @@
+#include <stdio.h>
+
+extern FILE *_fdtofile[]; /* map file descriptor (small integer) to
+ FILE pointer. Ratfor uses file descriptors,
+ we must use FILE pointers for stdio lib */
+
+/*
+ * The following definitions must be the same as those used by the
+ * Ratfor system.
+ */
+#define REOF (-1) /* Ratfor EOF */
+#define REOS (-2) /* Ratfor end-of-string */
+#define RERR (-3) /* Ratfor error return */
+#define NO 0
+#define YES 1
+#define NOERR 0
+#define OK (-2)
+#define MAXLINE 128
+#define FILENAMESIZE 40 /* max num chars per filename */
+
+#define READ 1 /* modes for file open */
+#define WRITE 2
+#define READWRITE 3
+#define APPEND 4
+
+/*
+ * The following typedefs refer to the data types passed by the
+ * Fortran compiler (Ratfor) calling us.
+ */
+#ifdef ILP32
+typedef int RCHAR; /* Ratfor character string */
+typedef int FINT; /* Fortran plain vanilla integer */
+ /* integer*2 with new f77 on Unix */
+#else
+typedef long int RCHAR; /* Ratfor character string */
+typedef long int FINT; /* Fortran plain vanilla integer */
+ /* integer*2 with new f77 on Unix */
+#endif
+
+
+/* All names of C functions called from ratfor are defined here to make them
+ * easy to change to reflect the characteristics of the host machine. Some
+ * versions of UNIX append an underscore to Fortran external names, some
+ * prepend an underscore, and some do both. VMS renders C and Fortran external
+ * names the same, making it easier to mix the two languages but causing
+ * name conflicts.
+ */
+#define AMOVE amove_
+#define CANT cant_
+#define CLOSE rfclos_
+#define CREATE create_
+#define ENDST endst_
+#define EXIT rexit_
+#define FLUSH rfflus_
+#define GETARG getarg_
+#define GETCH getch_
+#define GETLIN getlin_
+#define GETNOW getnow_
+#define INITST initst_
+#define ISATTY isatty_
+#define MKUNIQ mkuniq_
+#define NOTE rfnote_
+#define OPEN rfopen_
+#define PUTCH putch_
+#define PUTHOL puthol_
+#define PUTLIN putlin_
+#define RATFOR ratfor_
+#define READF readf_
+#define REMARK remark_
+#define REMOVE rfrmov_
+#define RWIND rwind_
+#define SEEK rfseek_
+#define WRITEF writef_
diff --git a/unix/boot/spp/rpp/ratlibc/remark.c b/unix/boot/spp/rpp/ratlibc/remark.c
new file mode 100644
index 00000000..23e30213
--- /dev/null
+++ b/unix/boot/spp/rpp/ratlibc/remark.c
@@ -0,0 +1,43 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#include "ratdef.h"
+
+void REMARK (strarg)
+int *strarg; /* hollerith string is an integer array */
+{
+ register char *strin = (char *)strarg;
+ register char c;
+
+ while (((c = *strin++) != '.') && (c != '\0'))
+ if (c == '@') {
+ switch (*strin) {
+ case '.':
+ putc ('.', stderr);
+ strin++;
+ break;
+
+ case 't':
+ putc ('\t', stderr);
+ strin++;
+ break;
+
+ case 'b':
+ putc ('\b', stderr);
+ strin++;
+ break;
+
+ case 'n':
+ putc ('\n', stderr);
+ strin++;
+ break;
+
+ default:
+ putc ('@', stderr);
+ break;
+ }
+ } else
+ putc (c, stderr);
+
+ putc ('\n', stderr);
+}