summaryrefslogtreecommitdiffstats
path: root/funtools/funtest/mkdim.c
diff options
context:
space:
mode:
Diffstat (limited to 'funtools/funtest/mkdim.c')
-rw-r--r--funtools/funtest/mkdim.c96
1 files changed, 96 insertions, 0 deletions
diff --git a/funtools/funtest/mkdim.c b/funtools/funtest/mkdim.c
new file mode 100644
index 0000000..d0f468d
--- /dev/null
+++ b/funtools/funtest/mkdim.c
@@ -0,0 +1,96 @@
+/* Solaris:
+ gcc -g -o mkdim mkdim.c -I /soft/saord/include -L/soft/saord/lib -lfuntools
+ -ldl -lsocket -lnsl -lm
+ OS X:
+ gcc -g -o mkdim mkdim.c -I /soft/saord/include -L/soft/saord/lib -lfuntools -lm
+
+*/
+
+#include <funtools.h>
+#include <stdlib.h>
+#include <string.h>
+#include <file.h>
+
+extern char *optarg;
+extern int optind;
+
+#ifdef ANSI_FUNC
+int
+main (int argc, char **argv)
+#else
+main(argc, argv)
+ int argc;
+ char **argv;
+#endif
+{
+ int dim1, dim2, bitpix;
+ int tdim;
+ char *buf=NULL;
+ char *oname=NULL;
+ char lbuf[SZ_LINE];
+ unsigned char *cbuf;
+ short *sbuf;
+ int *ibuf;
+ float *fbuf;
+ double *dbuf;
+ double x, y, val;
+ Fun ofun=NULL;
+
+ /* exit on gio errors */
+ setgerror(2);
+
+ if( argc != 5 ){
+ gerror(stderr, "usage: cat tfile | %s oname xdim ydim bitpix\n", argv[0]);
+ return 1;
+ }
+ oname = argv[1];
+ dim1 = atoi(argv[2]);
+ dim2 = atoi(argv[3]);
+ bitpix = atoi(argv[4]);
+
+ /* open the output FITS file */
+ if( oname ){
+ if( !(ofun = FunOpen(oname, "w", NULL)) )
+ gerror(stderr, "could not FunOpen output file: %s\n", argv[optind-1]);
+ }
+
+ /* set appropriate data type buffer to point to image buffer */
+ /* allocate the buffer */
+ tdim = dim1*dim2;
+ buf = malloc(tdim*ft_sizeof(bitpix));
+ while( fgets(lbuf, SZ_LINE, stdin) ){
+ if( sscanf(lbuf, "%lf %lf %lf", &x, &y, &val) != 3 ){
+ gerror(stderr, "invalid input: requires x, y, val; got %s\n", lbuf);
+ }
+ switch(bitpix){
+ case 8:
+ cbuf = (unsigned char *)buf;
+ cbuf[(int)y*dim2+(int)x] = (unsigned char)val;
+ break;
+ case 16:
+ sbuf = (short *)buf;
+ sbuf[(int)y*dim2+(int)x] = (short)val;
+ break;
+ case 32:
+ ibuf = (int *)buf;
+ ibuf[(int)y*dim2+(int)x] = (int)val;
+ break;
+ case -32:
+ fbuf = (float *)buf;
+ fbuf[(int)y*dim2+(int)x] = (float)val;
+ break;
+ case -64:
+ dbuf = (double *)buf;
+ dbuf[(int)y*dim2+(int)x] = val;
+ break;
+ }
+ }
+ /* write the output image, updating the FITS header from the orig file */
+ if( ofun && buf ){
+ if( !FunImagePut(ofun, buf, dim1, dim2, bitpix, NULL) )
+ gerror(stderr, "could not FunImagePut: %s\n", argv[2]);
+ }
+ if( buf ) free(buf);
+ if( ofun ) FunClose(ofun);
+ return(0);
+}