aboutsummaryrefslogtreecommitdiff
path: root/vendor/x11iraf/cdl/test/cdltest.c
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/x11iraf/cdl/test/cdltest.c')
-rw-r--r--vendor/x11iraf/cdl/test/cdltest.c635
1 files changed, 635 insertions, 0 deletions
diff --git a/vendor/x11iraf/cdl/test/cdltest.c b/vendor/x11iraf/cdl/test/cdltest.c
new file mode 100644
index 00000000..85c4b590
--- /dev/null
+++ b/vendor/x11iraf/cdl/test/cdltest.c
@@ -0,0 +1,635 @@
+#include <stdio.h>
+#define CDL_LIBRARY_SOURCE
+#include "cdl.h"
+
+/* CDLTEST -- Test routines for the CDL package.
+ */
+
+#define TEST_PATTERN -1
+
+/* Utility macros. */
+#define max(a,b) (a > b ? a : b)
+#define min(a,b) (a < b ? a : b)
+
+extern int cdl_debug;
+
+main()
+{
+ CDLPtr cdl;
+ char key, cmd[2], name[SZ_NAME], title[SZ_NAME], obj[SZ_NAME];
+ int i, j, zt=1, frame=1, fbconfig=1, color=3, lwidth=1, twidth=1;
+ int debug = 0, nx, ny, bitpix, ix=128, iy=128, lstyle=0;
+ int lx, ly, ux, uy;
+ int fb_w, fb_h, nframes, wcs;
+ int xarray[1024], yarray[1024];
+ float rx=128., ry=128., sx, sy;
+ float a, b, c, d, tx, ty, z1=0.0, z2=0.0;
+ int snx, sny, dnx, dny, dx, dy;
+ uchar *pix, *c_ras;
+ double sin();
+
+ cdl = cdl_open ((char *)getenv("IMTDEV"));
+ if (cdl == (CDLPtr) NULL)
+ exit ();
+
+ c_ras = (uchar *) malloc (1024 * 1024);
+
+ cmd[0] = 'f';
+ cmd[1] = '\n';
+ print_help();
+ do {
+ switch (cmd[0]) {
+ case '<': /* ENABLE DEBUG */
+ cdl_setDebug (1);
+ break;
+
+ case '>': /* DISABLE DEBUG */
+ cdl_setDebug (0);
+ break;
+
+ case 'S': /* SAMPLE CURSOR */
+ (void) cdl_readCursor (cdl, 1, &rx, &ry, &wcs, &key);
+ printf ("cursor: x=%g y=%g wcs=%d key='%d' (%c)\n",
+ rx, ry, wcs, key, key);
+ break;
+
+ case 'C': /* CLIP TEST TOP */
+ if (cdl_readSubRaster (cdl, 128, -32, 128, 128, &c_ras))
+ printf ("...read returns an error\n");
+ if (cdl_writeSubRaster (cdl, 128, -32, 128, 128, c_ras))
+ printf ("...write returns an error\n");
+ if (cdl_readSubRaster (cdl, 128, -8, 16, 16, &c_ras))
+ printf ("...read returns an error\n");
+ for (i=0;i<16;i++) {
+ for (j=0; j<16; j++)
+ printf ("%3d ", c_ras[i*16+j]);
+ printf ("\n");
+ }
+ printf ("\n");
+ if (cdl_readSubRaster (cdl, 128, 504, 16, 16, &c_ras))
+ printf ("...read returns an error\n");
+ for (i=0;i<16;i++) {
+ for (j=0; j<16; j++)
+ printf ("%3d ", c_ras[i*16+j]);
+ printf ("\n");
+ }
+ break;
+
+ case 'c': /* CLEAR FRAME */
+ if (cdl_clearFrame (cdl))
+ printf ("...returns an error\n");
+ break;
+
+ case 'd': /* DELETE MARKER */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ printf ("cursor: x=%g/%d y=%g/%d key='%c'\n", rx,ix,ry,iy,key);
+ if (cdl_deleteMark (cdl, ix, iy))
+ printf ("...returns an error\n");
+ break;
+
+ case 'D': /* DELETE OVERLAY */
+ (void) cdl_clearOverlay (cdl);
+ break;
+
+ case 'f': /* DISPLAY FITS */
+ if (cdl_displayFITS (cdl, "dpix.fits", frame, FB_AUTO, 1))
+ printf ("...returns an error\n");
+ break;
+
+ case 'g': /* READ IMAGE */
+ if (cdl_readImage (cdl, &c_ras, &nx, &ny))
+ printf ("...returns an error\n");
+ printf ("corners: nx=%d ny=%d LL = [%d] UR = [%d]\n",
+ nx, ny, c_ras[0], c_ras[nx*ny-1]);
+ if (cdl_displayPix (cdl, c_ras, nx, ny, 8, frame, FB_AUTO, 0))
+ printf ("...returns an error\n");
+ break;
+
+ case 'G': /* READ FB */
+ if (cdl_readFrameBuffer (cdl, &c_ras, &nx, &ny))
+ printf ("...returns an error\n");
+ printf ("fb corners: nx=%d ny=%d LL = [%d] UR = [%d]\n",
+ nx, ny, c_ras[0], c_ras[nx*ny-1]);
+ if (cdl_displayPix (cdl, c_ras, nx, ny, 8, frame, FB_AUTO, 0))
+ printf ("...returns an error\n");
+ break;
+
+ case 'i': /* DISPLAY IRAF */
+ if (cdl_displayIRAF (cdl, "examples/dpix.imh", 1, frame,
+ FB_AUTO, 0))
+ printf ("...returns an error\n");
+ break;
+
+ case 'm': /* MARK POINT */
+ i = 1;
+ while (cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key) != 'q') {
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ printf ("cursor: x=%g/%d y=%g/%d key='%c'\n",
+ rx, ix, ry, iy, key);
+ if (cdl_markPoint (cdl, ix, iy, i++, 7, M_STAR, C_GREEN))
+ printf ("...returns an error\n");
+ }
+ break;
+
+ case 'n': /* NEXT FRAME */
+ frame = (frame+1 > 16 ? 1 : frame+1);
+ cdl_setFrame (cdl, frame);
+ printf ("set cdl->frame = %d\n", cdl->frame);
+ cdl_getFrame (cdl, &frame);
+ printf ("get cdl->frame = %d\n", frame);
+ break;
+
+ case 'N': /* NEXT CONFIG */
+ fbconfig = (fbconfig+1 > 12 ? 1 : fbconfig+1);
+ cdl_setFBConfig (cdl, fbconfig);
+ i = cdl->fbconfig - 1;
+ printf ("cdl->fbconfig = %d/%d [%d %d %d %d]\n", cdl->fbconfig,
+ i, cdl->imd->fbtab[i]->config, cdl->imd->fbtab[i]->nframes,
+ cdl->imd->fbtab[i]->width, cdl->imd->fbtab[i]->height);
+ break;
+
+ case 'p': /* PREVIOUS FRAME */
+ frame = (frame-1 < 1 ? 4 : frame-1);
+ cdl_setFrame (cdl, frame);
+ printf ("set cdl->frame = %d\n", cdl->frame);
+ cdl_getFrame (cdl, &frame);
+ printf ("get cdl->frame = %d\n", frame);
+ break;
+
+ case 'P': /* PREV CONFIG */
+ cdl_setFBConfig (cdl, fbconfig);
+ fbconfig = (fbconfig-1 < 1 ? 12 : fbconfig)-1;
+ i = cdl->fbconfig - 1;
+ printf ("cdl->fbconfig = %d/%d [%d %d %d %d]\n", cdl->fbconfig,
+ i, cdl->imd->fbtab[i]->config, cdl->imd->fbtab[i]->nframes,
+ cdl->imd->fbtab[i]->width, cdl->imd->fbtab[i]->height);
+ break;
+
+ case 'q': /* QUIT */
+ goto quit;
+
+ case 'r': /* READ CURSOR */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ printf("cursor: x=%g/%d y=%g/%d wcs = %d key='%c' frame=%d\n",
+ rx, ix, ry, iy, wcs, key, wcs / 100);
+ break;
+
+ case 's': /* TEXT STRING */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ if (cdl_markText (cdl, -20, iy, "testing 123", 1., 0.0, C_RED))
+ printf ("...returns an error\n");
+ break;
+
+ case 't': /* TEST IMAGE */
+ printf ("creating raster....\n");
+ make_raster (c_ras, 512, 512, TEST_PATTERN);
+ cdl_setName (cdl, "test image");
+ cdl_setTitle (cdl, "test title");
+ printf ("displaying raster....\n");
+ if (cdl_displayPix (cdl, c_ras, 512, 512, 8, frame,fbconfig,0))
+ printf ("...returns an error\n");
+ break;
+
+ case 'T': /* TEST TILE */
+ if (cdl_readFITS ("dpix.fits", &pix, &nx, &ny,
+ &bitpix, obj))
+ printf ("...returns an error\n");
+ printf ("nx=%d ny=%d bitpix=%d\n", nx, ny, bitpix);
+ cdl_clearFrame (cdl);
+ cdl_selectFB (cdl, 2*nx, 2*ny, &fbconfig, &fb_w, &fb_h,
+ &nframes, 1);
+ if (cdl_setWCS (cdl, "imaname", "imtitle", 1., 0., 0., -1., 0.,
+ (float) 2*ny, 1., 255., 1))
+ printf ("...returns an error\n");
+ cdl_computeZscale (cdl, pix, nx ,ny, bitpix, &z1, &z2);
+ cdl_zscaleImage (cdl, &pix, nx ,ny, bitpix, z1, z2);
+ if (cdl_writeSubRaster (cdl, 0, 0, nx, ny, pix))
+ printf ("...returns an error\n");
+ if (cdl_writeSubRaster (cdl, nx, 0, nx, ny, pix))
+ printf ("...returns an error\n");
+ if (cdl_writeSubRaster (cdl, 0, ny, nx, ny, pix))
+ printf ("...returns an error\n");
+ if (cdl_writeSubRaster (cdl, nx, ny, nx, ny, pix))
+ printf ("...returns an error\n");
+ break;
+
+ case 'w': /* SET WCS */
+ if (cdl_setWCS (cdl, "imname", "imtitle", 1., 0., 0., -1., 0.,
+ 512., 1., 255., 1))
+ printf ("...returns an error\n");
+ break;
+
+ case 'W': /* GET WCS */
+ if (cdl_getWCS (cdl, name, title, &a, &b, &c, &d, &tx, &ty,
+ &z1, &z2, &zt))
+ printf ("...returns an error\n");
+ printf ("name='%s' title='%s'\n a=%g b=%g c=%g d=%g ",
+ name, title, a, b, c, d);
+ printf ("tx=%g ty=%g z1=%g z2=%g zt=%d\n", tx, ty, z1, z2, zt);
+ break;
+
+ case 'b': /* MARK BOX */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ lx = (int) (rx + 0.5); ly = (int) (ry + 0.5);
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ux = (int) (rx + 0.5); uy = (int) (ry + 0.5);
+ printf ("cursor: x=%d/%d y=%d/%d\n", lx,ux,ly,uy);
+ if (cdl_markBox (cdl, lx, ly, ux, uy, 0, C_RED))
+ printf ("...returns an error\n");
+ break;
+
+ case 'B': /* FILL BOX */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ lx = (int) (rx + 0.5); ly = (int) (ry + 0.5);
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ux = (int) (rx + 0.5); uy = (int) (ry + 0.5);
+ printf ("cursor: x=%d/%d y=%d/%d\n", lx,ux,ly,uy);
+ if (cdl_markBox (cdl, lx, ly, ux, uy, 1, C_RED))
+ printf ("...returns an error\n");
+ break;
+
+ case 'L': /* MARK LINE STYLES */
+ break;
+
+ case 'l': /* MARK LINE */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ lx = (int) (rx + 0.5); ly = (int) (ry + 0.5);
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ux = (int) (rx + 0.5); uy = (int) (ry + 0.5);
+ printf ("cursor: x=%d/%d y=%d/%d\n", lx,ux,ly,uy);
+ if (cdl_markLine (cdl, lx, ly, ux, uy, C_YELLOW))
+ printf ("...returns an error\n");
+ break;
+
+ case '[':
+ cdl_setTextWidth (cdl, twidth = (twidth-1 < 1 ? 1 : --twidth));
+ break;
+
+ case ']':
+ cdl_setTextWidth (cdl, ++twidth);
+ break;
+
+ case ',':
+ cdl_setLineWidth (cdl, lwidth = (lwidth-1 < 1 ? 1 : --lwidth));
+ break;
+
+ case '.':
+ cdl_setLineWidth (cdl, ++lwidth);
+ break;
+
+ case '{':
+ cdl_setLineStyle (cdl, lstyle = (lstyle-1 < 1 ? 1 : --lstyle));
+ break;
+
+ case '}':
+ cdl_setLineStyle (cdl, ++lstyle);
+ break;
+
+ case '(': /* MARK POLYLINE */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ printf ("cursor: x=%g/%d y=%g/%d key='%c'\n", rx,ix,ry,iy,key);
+ for (i=0; i < 145; i++) {
+ xarray[i] = ix + i;
+ yarray[i] = iy + (int)(32*sin((double)(i*0.17453)));
+ }
+ if (cdl_markPolyline (cdl, xarray, yarray, 145, C_GREEN))
+ printf ("...returns an error\n");
+ break;
+
+ case ')': /* MARK POLYGON */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ printf ("cursor: x=%g/%d y=%g/%d key='%c'\n", rx,ix,ry,iy,key);
+ xarray[0] = ix - 9; yarray[0] = iy - 9;
+ xarray[1] = ix + 0; yarray[1] = iy + 9;
+ xarray[2] = ix + 9; yarray[2] = iy - 9;
+ if (cdl_markPolygon (cdl, xarray, yarray, 3, 1, C_GREEN))
+ printf ("...returns an error\n");
+ break;
+
+ case 'e': /* MARK ELLIPSE */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ printf ("cursor: x=%g/%d y=%g/%d key='%c'\n", rx,ix,ry,iy,key);
+ if (cdl_markEllipse (cdl, ix, iy, 11, 7, 45.0, 0, C_RED))
+ printf ("...returns an error\n");
+ break;
+
+ case 'E': /* MARK ELLIPSE */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ printf ("cursor: x=%g/%d y=%g/%d key='%c'\n", rx,ix,ry,iy,key);
+ if (cdl_markEllipAnnuli (cdl, ix, iy, 11, 7, 45.0, 2, 5, C_RED))
+ printf ("...returns an error\n");
+ break;
+
+ case 'o': /* MARK CIRCLE */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ printf ("cursor: x=%g/%d y=%g/%d key='%c'\n", rx,ix,ry,iy,key);
+ if (cdl_markCircle (cdl, ix, iy, 27, 0, C_YELLOW))
+ printf ("...returns an error\n");
+ break;
+
+ case 'O': /* MARK CIRCLE */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ printf ("cursor: x=%g/%d y=%g/%d key='%c'\n", rx,ix,ry,iy,key);
+ if (cdl_markCircAnnuli (cdl, ix, iy, 13, 2, 5, C_YELLOW))
+ printf ("...returns an error\n");
+ break;
+
+ case 'M': /* MARK ALL PTS */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ printf ("cursor: x=%g/%d y=%g/%d key='%c'\n", rx,ix,ry,iy,key);
+ cdl_markPoint (cdl,ix+00,iy, 0,13, M_BOX, C_GREEN);
+ cdl_markPoint (cdl,ix+15,iy, 0,13, M_PLUS, C_GREEN);
+ cdl_markPoint (cdl,ix+30,iy, 0,13, M_CROSS, C_GREEN);
+ cdl_markPoint (cdl,ix+45,iy, 0,13, M_DIAMOND,C_GREEN);
+ cdl_markPoint (cdl,ix+60,iy, 0,13, M_CIRCLE, C_GREEN);
+ cdl_markPoint (cdl,ix+75,iy, 0,13, M_STAR, C_GREEN);
+ cdl_markPoint (cdl,ix+90,iy, 0,13, M_HLINE, C_GREEN);
+ cdl_markPoint (cdl,ix+105,iy, 0,13, M_VLINE, C_GREEN);
+ cdl_markPoint (cdl,ix+120,iy, 0,13, M_HBLINE, C_GREEN);
+ cdl_markPoint (cdl,ix+135,iy, 0,13, M_VBLINE, C_GREEN);
+ cdl_markPoint (cdl,ix+00,iy-16,0,13, M_FILL|M_BOX, C_GREEN);
+ cdl_markPoint (cdl,ix+45,iy-16,0,13, M_FILL|M_DIAMOND,C_GREEN);
+ cdl_markPoint (cdl,ix+60,iy-16,0,13, M_FILL|M_CIRCLE, C_GREEN);
+ cdl_markPoint (cdl,ix+90,iy-16,0,13, M_VLINE|M_HLINE, C_GREEN);
+ cdl_markPoint (cdl,ix+105,iy-16,0,13, M_VLINE|M_HLINE, C_GREEN);
+ cdl_markPoint (cdl,ix+120,iy-16,0,13,M_VBLINE|M_HBLINE,C_GREEN);
+ cdl_markPoint (cdl,ix+135,iy-16,0,13,M_VBLINE|M_HBLINE,C_GREEN);
+ cdl_markPoint (cdl,ix+00,iy-32,0,13, M_PLUS|M_BOX, C_GREEN);
+ cdl_markPoint (cdl,ix+45,iy-32,0,13, M_PLUS|M_DIAMOND,C_GREEN);
+ cdl_markPoint (cdl,ix+60,iy-32,0,13, M_PLUS|M_CIRCLE, C_GREEN);
+ cdl_markPoint (cdl,ix+90,iy-32,0,13, M_HLINE|M_POINT, C_GREEN);
+ cdl_markPoint (cdl,ix+105,iy-32,0,13, M_VLINE|M_POINT, C_GREEN);
+ cdl_markPoint (cdl,ix+120,iy-32,0,13, M_HBLINE|M_POINT,C_GREEN);
+ cdl_markPoint (cdl,ix+135,iy-32,0,13, M_VBLINE|M_POINT,C_GREEN);
+ cdl_markPoint (cdl,ix+00,iy-48,0,13, M_CROSS|M_BOX, C_GREEN);
+ cdl_markPoint (cdl,ix+45,iy-48,0,13, M_CROSS|M_DIAMOND,C_GREEN);
+ cdl_markPoint (cdl,ix+60,iy-48,0,13, M_CROSS|M_CIRCLE, C_GREEN);
+ cdl_markPoint (cdl,ix+90,iy-48,0,13, M_VLINE|M_HLINE|M_POINT,
+ C_GREEN);
+ cdl_markPoint (cdl,ix+105,iy-48,0,13, M_HLINE|M_VLINE|M_POINT,
+ C_GREEN);
+ cdl_markPoint (cdl,ix+120,iy-48,0,13, M_VBLINE|M_HBLINE|M_POINT,
+ C_GREEN);
+ cdl_markPoint (cdl,ix+135,iy-48,0,13, M_HBLINE|M_VBLINE|M_POINT,
+ C_GREEN);
+ break;
+
+ case '+': /* MARK PLUS */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ printf ("cursor: x=%g/%d y=%g/%d key='%c'\n", rx,ix,ry,iy,key);
+ if (cdl_markPoint (cdl, ix, iy, 1, 7, M_PLUS, C_KHAKI))
+ printf ("...returns an error\n");
+ break;
+
+ case 'x': /* MARK CROSS */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ printf ("cursor: x=%g/%d y=%g/%d key='%c'\n", rx,ix,ry,iy,key);
+ if (cdl_markPoint (cdl, ix, iy, 1, 7, M_CROSS, C_CYAN))
+ printf ("...returns an error\n");
+ break;
+
+ case '*': /* MARK STAR */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ printf ("cursor: x=%g/%d y=%g/%d key='%c'\n", rx,ix,ry,iy,key);
+ if (cdl_markPoint (cdl, ix, iy, 1, 7, M_STAR, C_GREEN))
+ printf ("...returns an error\n");
+ break;
+
+ case '-':
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ (void) cdl_markPoint (cdl,ix, iy, 0, 30, M_HBLINE, C_RED);
+ break;
+
+ case '|':
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ (void) cdl_markPoint (cdl,ix, iy, 0, 30, M_VBLINE, C_RED);
+ break;
+
+ case '=':
+ cdl_readFrameBuffer (cdl, &pix, &nx, &ny);
+ cdl_printPixToFile (cdl, "foo.eps", pix, nx, ny, 1);
+ break;
+
+ case '&':
+ clock ();
+ for (i=0, ix=16, iy=16; i < 512; i++) {
+ ix = xarray[i] = (ix+10 > 500 ? 16 : ix + 10);
+ iy = yarray[i] = (ix == 16 ? iy + 16: iy);
+ }
+ for (i=0; i < 512; i++) {
+ if (cdl_markPoint (cdl, xarray[i], yarray[i], 0, 7,
+ M_PLUS, C_RED))
+ printf ("...returns an error\n");
+ }
+ printf ("takes %d microseconds\n", clock());
+ break;
+
+ case 'Q':
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ printf("cursor: x=%g/%d y=%g/%d wcs = %d key='%c' frame=%d\n",
+ rx, ix, ry, iy, wcs, key, wcs / 100);
+
+ (void) cdl_queryMap (cdl, wcs, name, &sx, &sy, &snx, &sny,
+ &dx, &dy, &dnx, &dny, obj);
+ printf ("\tregion='%s' ref='%s'\n", name, obj);
+ printf ("\tsrc = %g,%g,%d,%d dest = %d,%d,%d,%d\n",
+ sx, sy, snx, sny, dx, dy, dnx, dny);
+
+ break;
+
+ case '?':
+ print_help();
+ break;
+
+ case '1': /* TEXT STRING */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ if (cdl_markText (cdl, ix, iy, "test", 2, 0.0, C_GREEN))
+ printf ("...returns an error\n");
+ if (cdl_markText (cdl, ix-5, iy+15, "test", 2, 45.0, C_GREEN))
+ printf ("...returns an error\n");
+ if (cdl_markText (cdl, ix-20, iy+30, "test", 2, 90.0, C_GREEN))
+ printf ("...returns an error\n");
+ if (cdl_markText (cdl, ix-35, iy+30, "test", 2, 135.0, C_GREEN))
+ printf ("...returns an error\n");
+ if (cdl_markText (cdl, ix-40, iy+15, "test", 2, 180.0, C_GREEN))
+ printf ("...returns an error\n");
+ if (cdl_markText (cdl, ix-40, iy-10, "test", 2, 225.0, C_GREEN))
+ printf ("...returns an error\n");
+ if (cdl_markText (cdl, ix-30, iy-25, "test", 2, 270.0, C_GREEN))
+ printf ("...returns an error\n");
+ if (cdl_markText (cdl, ix-15, iy-15, "test", 2, 315.0, C_GREEN))
+ printf ("...returns an error\n");
+ break;
+
+ case '2': /* TEXT STRING */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ if (cdl_markText (cdl, ix, iy, "testing", 2, 180.0, C_GREEN))
+ printf ("...returns an error\n");
+ break;
+
+ case '3': /* BLINKING MARKER */
+ (void) cdl_readCursor (cdl, 0, &rx, &ry, &wcs, &key);
+ ix = (int) (rx + 0.5); iy = (int) (ry + 0.5);
+ cdl_blinkCircle (cdl, ix, iy, 10, C_YELLOW, 5);
+ break;
+
+ case '4': /* BLINKING MARKER */
+ (void) cdl_setCursor (cdl, 100, 100, 0);
+ break;
+ }
+ printf ("Command: ");
+
+ /* gets(cmd); */
+ scanf ("%s", cmd);
+ } while (cmd[0] != 'q');
+
+quit: (void) cdl_close (cdl);
+}
+
+cdl_blinkCircle (cdl, x, y, r, color, nblinks)
+CDLPtr cdl;
+int x;
+int y;
+int r;
+int color;
+int nblinks;
+{
+ char *init, *mark, *blink;
+ int i, dim = 2*r + 2, DIM=4*r + 2;
+
+ init = (char *) malloc (DIM*DIM);
+ mark = (char *) malloc (dim*dim);
+ blink = (char *) malloc (DIM*DIM);
+
+ cdl_readSubRaster (cdl, x-dim, y-dim, DIM, DIM, &init);
+
+ cdl_setLineWidth (cdl, 3);
+ cdl_markCircle (cdl, x, y, 2*r-1, 0, color);
+ cdl_readSubRaster (cdl, x-dim, y-dim, DIM, DIM, &blink);
+ cdl_setLineWidth (cdl, 1);
+
+ cdl_markCircle (cdl, x, y, r, 0, color);
+ cdl_readSubRaster (cdl, x-r, y-r, 2*r, 2*r, &mark);
+
+ for (i=0; i<nblinks; i++) {
+ cdl_writeSubRaster (cdl, x-dim, y-dim, DIM, DIM, blink);
+ usleep (333*1000);
+ cdl_writeSubRaster (cdl, x-r, y-r, 2*r, 2*r, mark);
+ usleep (333*1000);
+ cdl_writeSubRaster (cdl, x-dim, y-dim, DIM, DIM, init);
+ usleep (333*1000);
+ }
+ cdl_writeSubRaster (cdl, x-r, y-r, 2*r, 2*r, mark);
+
+ free ((char *)init);
+ free ((char *)blink);
+ free ((char *)mark);
+}
+
+
+print_help ()
+{
+ printf ("\n");
+ printf (" b - mark box ");
+ printf (" B - fill box ");
+ printf (" c - clear frame "); printf ("\n");
+ printf (" d - delete marker ");
+ printf (" D - delete overlay ");
+ printf (" e - mark ellipse "); printf ("\n");
+ printf (" E - mark ellip ann ");
+ printf (" f - display FITS ");
+ printf (" g - read image "); printf ("\n");
+ printf (" G - read fb ");
+ printf (" i - display iraf ");
+ printf (" l - mark line "); printf ("\n");
+ printf (" m - mark point ");
+ printf (" n - next frame ");
+ printf (" N - next config "); printf ("\n");
+ printf (" M - mark all pts ");
+ printf (" o - mark circle ");
+ printf (" O - mark circle ann "); printf ("\n");
+ printf (" p - previous frame ");
+ printf (" P - prev config ");
+ printf (" q - quit "); printf ("\n");
+ printf (" r - read cursor ");
+ printf (" s - text string ");
+ printf (" S - sample cursor "); printf ("\n");
+ printf (" t - test image ");
+ printf (" T - tile image ");
+ printf (" w - set wcs "); printf ("\n");
+ printf (" W - get wcs ");
+ printf (" ( - mark polyline ");
+ printf (" ) - mark polygon "); printf ("\n");
+ printf (" + - mark plus ");
+ printf (" x - mark cross ");
+ printf (" * - mark star "); printf ("\n");
+ printf (" = - test hardcopy ");
+ printf (" & - time 512 points ");
+ printf (" > - enable debug "); printf ("\n");
+ printf (" < - disable debug ");
+ printf (" ? - help ");
+ printf (" , - dec linewidth "); printf ("\n");
+ printf (" . - inc linewidth ");
+ printf (" [ - dec textwidth ");
+ printf (" ] - inc textwidth "); printf ("\n");
+ printf (" { - dec linestyle ");
+ printf (" } - inc linestyle ");
+ printf (" Q - query mapping "); printf ("\n");
+}
+
+
+make_raster (raster, nx, ny, color)
+uchar *raster;
+int nx, ny, color;
+{
+ register uchar pix;
+ register int i, j;
+ register float scale;
+
+ if (color > 0) {
+ /* Build a solid color */
+ for (i = 0; i < nx; i++) {
+ for (j = 0; j < ny; j++) {
+ raster[i * nx + j] = (uchar) color;
+ }
+ }
+ } else {
+ /* Make a test pattern. */
+ for (i = 0; i < nx; i++) {
+ for (j = 0; j < ny; j++) {
+/* Diagonal ramp
+*/
+ scale = 200. / (float)(ny) / 2.;
+ pix = (uchar) max(2, (min(200,(scale*i + scale*j))));
+/* Vertical ramp
+ scale = 200. / (float)(ny);
+ pix = (uchar) max(2, (min(200,(scale * i))));
+*/
+/* Horizontal ramp
+ scale = 200. / (float)(nx);
+ pix = (uchar) max(2, (min(200,(scale * j))));
+*/
+ raster[i * nx + j] = pix;
+ }
+ }
+ }
+}
+