Esempio n. 1
0
simData ()
{
    fpConfig_t fp;

    /* Get a Page for the pixel data.  */
    page = smcGetPage (smc, TY_DATA, (im_nx*im_ny*(im_bitpix/8)), TRUE, TRUE);
    if (page == (smcPage_t *) NULL) {
	fprintf (stderr, "Error getting data page.\n");
	return;
    }

    fp.xSize = im_nx;			/* Set the fpConfig struct.	*/
    fp.ySize = im_ny;
    fp.xStart = 0;
    fp.yStart = 0;
    fp.dataType = 1;
    smcSetFPConfig (page, &fp);

    smcSetWho (page, 2);		/* Set the 'who' field		*/
    smcSetExpID (page, 3.141592654);	/* Set the 'expid' field	*/
    smcSetObsetID (page, "3.14159");	/* Set the 'obsetid' field	*/

    /* Create a raster in the shared area 
     */
    make_raster ((int *)smcGetPageData(page), im_nx, im_ny, color_mode++);

    /* Unlock and Detach from the page. 
     */
    smcUnlock (page);
    smcDetach (smc, page, FALSE);
}
Esempio n. 2
0
static SkImage* make_encode_gen(GrContext* ctx, const SkPicture* pic, const SkImageInfo& info) {
    SkAutoTUnref<SkImage> src(make_raster(ctx, pic, info));
    if (!src) {
        return nullptr;
    }
    SkAutoTUnref<SkData> encoded(src->encode(SkImageEncoder::kPNG_Type, 100));
    if (!encoded) {
        return nullptr;
    }
    return SkImage::NewFromEncoded(encoded);
}
Esempio n. 3
0
static sk_sp<SkImage> make_encode_gen(GrContext* ctx, SkPicture* pic, const SkImageInfo& info) {
    sk_sp<SkImage> src(make_raster(ctx, pic, info));
    if (!src) {
        return nullptr;
    }
    sk_sp<SkData> encoded(src->encode(SkImageEncoder::kPNG_Type, 100));
    if (!encoded) {
        return nullptr;
    }
    return SkImage::MakeFromEncoded(std::move(encoded));
}
Esempio n. 4
0
raster_t load_image_mem_libjpeg(uint8_t *raw_data, size_t size, const int mode)
{
	struct jpeg_decompress_struct cinfo={0};
	struct jpeg_error_mgr jerr;
	int ret;
	xyi_t ip;
	raster_t im={0};
	uint8_t *scanline, *p0, *p1;
	
	// allocate and initialize JPEG decompression object
	cinfo.err = jpeg_std_error(&jerr);
	jpeg_create_decompress(&cinfo);

	jpeg_mem_src(&cinfo, raw_data, size);

	ret = jpeg_read_header(&cinfo, TRUE);	// read file header
	if (ret != 1)
	{
		fprintf_rl(stderr, "Image cannot be read by jpeg_read_header()\n");
	}
	else
	{
		jpeg_calc_output_dimensions(&cinfo);

		im = make_raster(NULL, xyi(cinfo.output_width, cinfo.output_height), XYI0, IMAGE_USE_SRGB);
		scanline = malloc(cinfo.output_width * cinfo.output_components);

		jpeg_start_decompress(&cinfo);

		for (ip.y=0; ip.y < im.dim.y; ip.y++)
		{
			jpeg_read_scanlines(&cinfo, &scanline, 1);

			for (ip.x=0; ip.x < im.dim.x; ip.x++)
			{
				p0 = &scanline[ip.x * cinfo.output_components];
				p1 = &im.srgb[ip.y*im.dim.x + ip.x];
				p1[0] = p0[0];
				p1[1] = p0[1];
				p1[2] = p0[2];
			}
		}

		free(scanline);
	}

	// free the libjpeg stuff
	jpeg_finish_decompress(&cinfo);
	jpeg_destroy_decompress(&cinfo);

	convert_image_srgb8(&im, im.srgb, mode);		// fills all the necessary buffers with the image data

	return im;
}
Esempio n. 5
0
puchar save_raster_align8(cell *c)
{
 comp_from_kit(c);
 wcomp.rw = ((wcomp.w+63)/64)*8;
 return make_raster();
}
Esempio n. 6
0
/*================ Make raster function =======================*/
puchar save_raster(cell *c)
{
 comp_from_kit(c); return make_raster();
}
Esempio n. 7
0
main()
{
	IMDPtr 	imd, imd_open();
	char	key, cmd[2], name[SZ_NAME], title[SZ_NAME];
	int	i, j, zt=1, frame=1, fbconfig=2, color=201;
	int	debug = 1, nx, ny, ix=128, iy=128, wcs=0;
	int	xarray[1024], yarray[1024];
	float	rx=128., ry=128.;
	float	a, b, c, d, tx, ty, z1, z2;
	uchar	pix, raster[1024*1024];

	imd_setDebug (debug);
	com_setDebug (debug);
	if ((imd = imd_open ((char *)getenv("IMTDEV"))) == (IMDPtr) NULL)
	    exit ();

	cmd[0] = 'd';
	cmd[1] = '\n';
	print_help();
	do {
	    switch (cmd[0]) {
	    case '+':					/* ENABLE DEBUG   */
		imd_setDebug (++debug);
		break;

	    case '-':					/* DISABLE DEBUG  */
		imd_setDebug (--debug);
		break;

	    case 's':					/* SAMPLE CURSOR  */
		sleep (2);
		if (imd_readCursor (imd, 1, &rx, &ry, &wcs, &key))
		    printf ("...returns an error\n");
		printf ("cursor: x=%g  y=%g  key='%c'\n", rx, ry, key);
		break;

	    case 'c':					/* SET CURSOR	  */
		sleep (2);
		if (imd_setCursor (imd, 256, 256))
		    printf ("...returns an error\n");
		break;

	    case 'C':					/* READ CURSOR	  */
		if (imd_readCursor (imd, 0, &rx, &ry, &wcs, &key))
		    printf ("...returns an error\n");
		ix = (int) rx;
		iy = (int) ry;
		printf ("cursor: x=%g/%d  y=%g/%d  key='%c'\n", 
		    rx, ix, ry, iy,  key);
		break;

	    case 'd':					/* WRITE IMAGE	  */
		printf ("creating raster....\n");
		/*
		make_raster (raster, 1024, 1024, TEST_PATTERN);
		*/
		make_raster (raster, 512, 512, TEST_PATTERN);
		imd_setName (imd, "test image");
		imd_setTitle (imd, "test title");
		printf ("displaying raster....\n");
		/*
		if (imd_displayImage(imd,raster,1024,1024,frame,fbconfig,1))
		    printf ("...returns an error\n");
		*/
		if (imd_displayImage(imd,raster,512,512,frame,fbconfig,1))
		    printf ("...returns an error\n");
		break;

	    case 'D':					/* READ IMAGE 	  */
		if (imd_readImage (imd, raster, &nx, &ny))
		    printf ("...returns an error\n");
		printf ("corners: nx=%d  ny=%d  LL = [%d]  UR = [%d]\n",
		    nx, ny, raster[0], raster[nx*ny-1]);
		if (imd_displayImage(imd,raster,nx,ny,frame,fbconfig,1))
		    printf ("...returns an error\n");
		break;

	    case 'e':					/* ERASE FRAME	  */
		if (imd_clearFrame (imd))
		    printf ("...returns an error\n");
		break;

	    case 'F':					/* READ FB 	  */
		if (imd_readFrameBuffer (imd, raster, &nx, &ny))
		    printf ("...returns an error\n");
		printf ("fb corners: nx=%d  ny=%d  LL = [%d]  UR = [%d]\n",
		    nx, ny, raster[0], raster[nx*ny-1]);
		if (imd_displayImage(imd,raster,nx,ny,frame,fbconfig,1))
		    printf ("...returns an error\n");
		break;

	    case 'm':					/* MARK POINT 	  */
		for (key='z'; key != 'q'; ) {
		    if (imd_readCursor (imd, 0, &rx, &ry, &wcs, &key))
		        printf ("...returns an error\n");
		    ix = (int) rx;
		    iy = (int) ry;
		    printf ("cursor: x=%g/%d  y=%g/%d  key='%c'\n", 
		        rx, ix, ry, iy,  key);
		    make_raster (raster, 16, 16, color);
		    color = (color+1 > 209 ? 201 : color+1);
		    if (imd_writeSubRaster (imd, ix-8, iy-8, 16, 16, raster))
		        printf ("...returns an error\n");
		}
		break;

	    case 'n':					/* NEXT FRAME 	  */
		frame = (frame+1 > 4 ? 1 : frame+1);
		if (imd_setFrame (imd, frame))
		    printf ("...returns an error\n");
		printf ("imd->frame = %d\n", imd->frame);
		break;

	    case 'N':					/* NEXT CONFIG 	  */
		fbconfig = (fbconfig+1 > 12 ? 1 : fbconfig+1);
		if (imd_setFBConfig (imd, fbconfig))
		    printf ("...returns an error\n");
		i = imd->fbconfig - 1;
		printf ("imd->fbconfig = %d/%d [%d %d %d %d]\n", imd->fbconfig,
		    i, imd->fbtab[i]->config, imd->fbtab[i]->nframes,
		    imd->fbtab[i]->width, imd->fbtab[i]->height);
		break;

	    case 'p':					/* PREVIOUS FRAME */
		frame = (frame-1 < 1 ? 4 : frame-1);
		if (imd_setFrame (imd, frame))
		    printf ("...returns an error\n");
		printf ("imd->frame = %d\n", imd->frame);
		break;

	    case 'P':					/* PREV CONFIG    */
		if (imd_setFBConfig (imd, fbconfig))
		    printf ("...returns an error\n");
		fbconfig = (fbconfig-1 < 1 ? 12 : fbconfig)-1;
		i = imd->fbconfig - 1;
		printf ("imd->fbconfig = %d/%d [%d %d %d %d]\n", imd->fbconfig,
		    i, imd->fbtab[i]->config, imd->fbtab[i]->nframes,
		    imd->fbtab[i]->width, imd->fbtab[i]->height);
		break;

	    case 'q':					/* QUIT 	  */
		goto quit;
	    case 'r':					/* WRITE REGION	  */
		make_raster (raster, 256, 256, TEST_PATTERN);
		if (imd_writeSubRaster (imd, 128, 128, 256, 256, raster))
		    printf ("...returns an error\n");
		make_raster (raster, 32, 32, color);
		if (imd_writeSubRaster (imd, -16, -16, 32, 32, raster))
		    printf ("...returns an error\n");
		if (imd_writeSubRaster (imd, -16, 496, 32, 32, raster))
		    printf ("...returns an error\n");
		if (imd_writeSubRaster (imd, 496, -16, 32, 32, raster))
		    printf ("...returns an error\n");
		if (imd_writeSubRaster (imd, 496, 496, 32, 32, raster))
		    printf ("...returns an error\n");
		color = (color+1 > 209 ? 201 : color+1);
		break;

	    case 'R':					/* READ REGION 	  */
		if (imd_readSubRaster (imd, -8, -8, 16, 16, raster))
		    printf ("...returns an error\n");
		for (i=15; i > 0; i--) {
		    for (j=0; j < 16; j++) {
			printf ("%3d ", raster[i * 16 + j]);
			raster[i * 16 + j] = 0;
		    }
		    printf ("\n");
		}
		if (imd_writeSubRaster (imd, -8, -8, 16, 16, raster))
		    printf ("...returns an error\n");
		break;

	    case 'w':					/* SET WCS 	  */
		if (imd_setWCS (imd, "imaname", "imtitle", 1., 0., 0., -1., 0.,
		    0., 1., 255., 1))
		        printf ("...returns an error\n");
		break;

	    case 'W':					/* GET WCS 	  */
		if (imd_setWCS (imd, 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 tx=%g ty=%g z1=%g z2=%g zt=%d\n", name, title, a, b, c, d, tx, ty, z1, z2, zt);
		break;

	    case '?':
		print_help();
		break;

	    case '1':					/* WRITE CLIPPING  */
		printf ("creating raster....\n");
		make_raster (raster, 512, 512, TEST_PATTERN);
        	imd_setFrame (imd, frame);
        	imd_clearFrame (imd);
        	imd_setFBConfig (imd, fbconfig);
		imd_setName (imd, "test image");
		imd_setTitle (imd, "test title");
		printf ("displaying raster....\n");
		if (imd_writeImage(imd,raster,512,512,-8, -8))
		    printf ("...returns an error\n");
		break;

	    case '2':					/* READ CLIPPING  */
		if (imd_readSubRaster (imd, -8, -8, 16, 16, raster))
		    printf ("...returns an error\n");
		for (i=15; i >= 0; i--) {
		    for (j=0; j < 16; j++)
			printf ("%3d ", raster[i * 16 + j]);
		    printf ("\n");
		}
		if (imd_writeSubRaster (imd, -8, -8, 16, 16, raster))
		    printf ("...returns an error\n");
		break;

	    case 'a':
		clock ();
		for (i=0, ix=16, iy=16; i < 1024; i++) {
		    ix = xarray[i] = (ix+10 > 500 ? 16 : ix + 10);
		    iy = yarray[i] = (ix == 16 ? iy + 16: iy);
		}
		for (i=0; i < 1024; i++) {
		    make_raster (raster, 8, 8, color);
		    color = (color+1 > 209 ? 201 : color+1);
		    if (imd_writeSubRaster (imd, xarray[i], yarray[i],
			8, 8, raster))
		            printf ("...returns an error\n");
		}
		printf ("takes %d microseconds\n", clock());
	    }
	    printf ("Command: ");

	  scanf ("%s", cmd);
	} while (cmd[0] != 'q');

quit:	(void) imd_close (imd);	
}
Esempio n. 8
0
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);	
}