Rasterfile Format questions

andrew yeomans mcvax!cel!ajy at uunet.uu.net
Mon Jan 16 18:22:03 AEST 1989


Further to my message on raster files being corrupted by pr_dump when
using RT_BYTE_ENCODED:

I believe the bugs are fixed in the latest Sun releases.  I had problems
with a program built with an early version of pr_dump, which sometimes
refuses to save or load small pixrects, especially when the data would
contain values of 0x80.

'what' reports that the buggy version of the module containing pr_dump is
'pr_io.c 1.1 85/12/19'.  On SunOS 3.5, (yes, I'm still looking forward to
the joys of 4.x!)  the version is 'pr_io.c 1.5 87/08/14', which does not
have the problem.

Conclusion: Software built with an early version of the pixrect library
may fail to save certain pixrects properly. Solution: rebuild it!

	Andrew Yeomans
__________

Patrick J. McEvoy (Sun Entry Systems ISV Liason) <swagman at sun.com> adds
the following:

>	The sun routine pr_dump does not always encode RT_BYTE_ENCODED
>	rasterfiles correctly, if copy_flag = 0 (compress in place).

Not quite.  copy_flag = 0 means don't bother making a copy of the *source*
pixrect before doing all the work.  Nothing is done in place.  (One might
want to make a quick copy of the source pixrect if the data is subject to
modification by another process, e.g. the framebuffer.)

>  My copy of "Pixrect Reference Manual" (admittedly old, dated 17 Feb 1986)
>  states that:
>    "There are two situations where the copy_flag value should be non_zero:
>    
>    -	If the output type is RT_BYTE_ENCODED - This is because the encoding
>    	algorithm does the encoding in place and will destroy the image data
>    	of input_pr if it fails while working on input_pr directly.
>    -	if input_pr is a pixrect in a frame buffer ...."

The 4.0 source code currently really does write directly to a FILE *, when
you specify RT_BYTE_ENCODED.  Nothing gets kept around in memory.

More likely, you can run into trouble when pr_dump'ing a CG2, CG3, or CG5
if the screen gets updated during the dump (likely if you are running a
clocktool).  The CG? has hardware registers that put it into one of
several address modes: 8-bit pixels, 8 1-bit pixel planes, rasterop mode.
Normally the window system cordinates those registers, but pixrects alone
(e.g.  pr_dump) does not.  So if those registers get hit during your dump
the rest of your image is foobar -- even if you specify RT_STANDARD.  Try
setting the copy_flag.

Feel free to post anything I said to sunspots.


Andrew Yeomans		PSTN: 0442 230000 ext 3371
Crosfield Electronics Ltd	INTL: +44 442 230000
Three Cherry Trees Lane	Fax:  0442 232301
Hemel Hempstead		UUCP: ajy at cel.uucp
Hertfordshire		      mcvax!cel!ajy at uunet.uu.net
HP2 7RH
England

>From a program you can call wmgr_refreshwindow (Sunview System
Programmer's Guide Chapter 13 on Window Management). Example: 

main(){
	int rootfd;
	rootfd = open("/dev/win0",0);	/* or getenv("WINDOW_PARENT") */
	if(rootfd>=0)wmgr_refreshwindow(rootfd);
	exit(rootfd<0);
}



More information about the Comp.sys.sun mailing list