diff options
author | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
---|---|---|
committer | Joe Hunkeler <jhunkeler@gmail.com> | 2015-08-11 16:51:37 -0400 |
commit | 40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch) | |
tree | 4464880c571602d54f6ae114729bf62a89518057 /sys/libc/spf.c | |
download | iraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz |
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'sys/libc/spf.c')
-rw-r--r-- | sys/libc/spf.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/sys/libc/spf.c b/sys/libc/spf.c new file mode 100644 index 00000000..2953ed76 --- /dev/null +++ b/sys/libc/spf.c @@ -0,0 +1,65 @@ +/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. +*/ + +#define import_spp +#define import_libc +#define import_xnames +#include <iraf.h> + + +/* +** SPF.C -- String spoolfile utility package. Used to capture in a string +** buffer the output of a routine set up to write to a file. +** +** Example: +** +** fd = spf_open (buf, maxch) +** fprop (pp, fdopen(fd,"w")); +** spf_close (fd); +** +** leaves the output of the fprop() function in the user buffer "buf". +*/ + +static XCHAR *spf_buf; +static char *spf_userbuf; +static int spf_maxch; + + +/* SPF_OPEN -- Spoolfile open. Open a string spoolfile to be written into as +** a file, using ordinary file i/o. Only one such file can be open at a time. +*/ +int +spf_open ( + char *buf, /* user string buffer */ + int maxch /* max chars of storage */ +) +{ + XINT x_maxch = maxch, x_mode = NEW_FILE; + char *malloc(); + + + spf_userbuf = buf; + spf_maxch = maxch; + + /* Malloc always returns a buffer which aligned to at least XCHAR. */ + spf_buf = (XCHAR *) malloc ((maxch + 1) * sizeof(XCHAR)); + + return (STROPEN (spf_buf, &x_maxch, &x_mode)); +} + + +/* SPF_CLOSE -- Close the spoolfile string, which should have been written +** into via file i/o while the string was open. This leaves SPP chars in +** the string; pack the string and return a pointer to the string. +*/ +void +spf_close ( + XINT fd /* file descriptor of stringbuf */ +) +{ + XINT x_fd = fd; + + CLOSE (&x_fd); + c_strpak (spf_buf, spf_userbuf, spf_maxch); + free ((char *)spf_buf); +} |