[net.micro.atari16] ProGEM part 4 of 6

bammi@cwruecmp.UUCP (Jwahar R. Bammi) (03/22/86)

#!/bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #!/bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	apndx1.prf
#	apndx2.prf
#	apndx3.prf
#	apndx4.prf
# This archive created: Fri Mar 21 22:40:57 1986
# By:	Jwahar R. Bammi ()
export PATH; PATH=/bin:$PATH
echo shar: extracting "'apndx1.prf'" '(5146 characters)'
if test -f 'apndx1.prf'
then
	echo shar: over-writing existing file "'apndx1.prf'"
fi
sed 's/^X//' << \SHAR_EOF > 'apndx1.prf'
X.!****************************************************************************
X.! 
X.! ANTIC PUBLISHING INC., COPYRIGHT 1985.  REPRINTED BY PERMISSION.
X.!
X.! ** Professional GEM ** by Tim Oren
X.!
X.! Proff File by ST enthusiasts at
X.! Case Western Reserve University
X.! Cleveland, Ohio
X.! uucp : decvax!cwruecmp!bammi
X.! csnet: bammi@case
X.! arpa : bammi%case@csnet-relay
X.! compuserve: 71515,155
X.!
X.!****************************************************************************
X.!
X.!			Begin Appendix 1
X.!
X.!***************************************************************************
X.!
X.!
X.AP I Sample Code for Part II
X/* >>>>>>>>>>>>>>>>>>>>>>>>> Sample Redraw Code <<<<<<<<<<<<<<<<<<<<<<<<<<< */
X
XVOID
Xdo_redraw(wh, area)		/* wh = window handle from msg[3] */
XWORD	wh;		/* area = pointer to redraw rect- */
XGRECT	*area;		/*   tangle in msg[4] thru msg[7] */
X{
X	GRECT	box;
X	
X	graf_mouse(M_OFF, 0x0L);
X	wind_update(BEG_UPDATE);
X	
X	wind_get(wh, WF_FIRSTXYWH, &box.g_x, &box.g_y, &box.g_w, &box.g_h);
X	while ( box.g_w && box.g_h )
X	{
X		if (rc_intersect(full, &box))	  /* Full is entire screen */
X		    if (rc_intersect(area, &box))
X		    {
X			    if (wh == w1_handle)	  /* Test for window 1 handle */
X			    {		  /* AES redraw example	      */
X				    objc_draw(w1_tree, ROOT, MAX_DEPTH, box.g_x, 
X					      box.g_y, box.g_w, box.g_h);
X			    }
X			    else if (wh == w2_handle) /* Test for window 2 handle */
X			    {		  /* VDI redraw example	      */
X				    set_clip(TRUE, &box);
X				    /*  Put VDI drawing calls here */
X			    }
X			    /* add more windows here */
X		    }
X		wind_get(wh, WF_NEXTXYWH, &box.g_x, &box.g_y, &box.g_w, 
X			 &box.g_h);
X	}
X	
X	wind_update(END_UPDATE);
X	graf_mouse(M_ON, 0x0L);
X}
X.bp
X/* >>>>>>>>>>>>>>>>>>>>>>>> Utilities used in do_redraw <<<<<<<<<<<<<<<<<<<< */
X
XVOID
Xset_clip(clip_flag, area)	/* set clip to specified area	*/
XWORD	clip_flag;
XGRECT	*area;
X{
X	WORD	pxy[4];
X	
X	grect_to_array(area, pxy);
X	vs_clip(vdi_handle, clip_flag, pxy);
X}
X
XVOID
Xgrect_to_array(area, array)	/* convert x,y,w,h to upr lt x,y and	*/
XGRECT	*area;		/*		      lwr rt x,y	*/
XWORD	*array;
X{
X	*array++ = area->g_x;
X	*array++ = area->g_y;
X	*array++ = area->g_x + area->g_w - 1;
X	*array = area->g_y + area->g_h - 1;
X}
X
XWORD
Xrc_intersect(p1, p2)		/* compute intersect of two rectangles	*/
XGRECT	*p1, *p2;
X{
X	WORD	tx, ty, tw, th;
X	
X	tw = min(p2->g_x + p2->g_w, p1->g_x + p1->g_w);
X	th = min(p2->g_y + p2->g_h, p1->g_y + p1->g_h);
X	tx = max(p2->g_x, p1->g_x);
X	ty = max(p2->g_y, p1->g_y);
X	p2->g_x = tx;
X	p2->g_y = ty;
X	p2->g_w = tw - tx;
X	p2->g_h = th - ty;
X	return( (tw > tx) && (th > ty) );
X}
X.bp
X/* >>>>>>>>>>>>>>>>>>>>>>> "Self-redraw" Utility <<<<<<<<<<<<<<<<<<<<<<<<< */
X
XVOID
Xsend_redraw(wh, p)
XWORD	wh;
XGRECT	*p;
X{
X	WORD	msg[8];
X	
X	msg[0] = WM_REDRAW;		/* Defined in GEMBIND.H	    */
X	msg[1] = gl_apid;		/* As returned by appl_init */
X	msg[2] = 0;
X	msg[3] = wh;			/* Handle of window to redraw */
X	msg[4] = p->g_x;
X	msg[5] = p->g_y;
X	msg[6] = p->g_w;
X	msg[7] = p->g_h;
X	appl_write(gl_apid, 16, &msg);	/* Use ADDR(msg) for portability */
X}
X.bp
X/* >>>>>>>>>>>>>>>>>>>> Utilities for Window Requests <<<<<<<<<<<<<<<<<< */
X
XVOID
Xrc_constrain(pc, pt)
XGRECT		*pc;
XGRECT		*pt;
X{
X	if (pt->g_x < pc->g_x)
X	    pt->g_x = pc->g_x;
X	if (pt->g_y < pc->g_y)
X	    pt->g_y = pc->g_y;
X	if ((pt->g_x + pt->g_w) > (pc->g_x + pc->g_w))
X	    pt->g_x = (pc->g_x + pc->g_w) - pt->g_w;
X	if ((pt->g_y + pt->g_h) > (pc->g_y + pc->g_h))
X	    pt->g_y = (pc->g_y + pc->g_h) - pt->g_h;
X}
X
XWORD
Xalign(x,n)		/* Snap position x to an n-bit grid         */ 
XWORD 	x, n;   /* Use n = 16 for horizontal word alignment */
X{
X	x += (n >> 2) - 1;		/* Round and... */
X	x = n * (x / n);		/* remove residue */
X	return (x);
X}	
X.bp
X/* >>>>>>>>>>>>>>>>>>>>>>> Window full utility <<<<<<<<<<<<<<<<<<<<<<< */
X
XVOID
Xhndl_full(wh)		/* depending on current window state, make window    */
XWORD	wh;	/*   full size -or- return to previous shrunken size */
X{		/* graf_ calls are optional special effects.	     */
X	GRECT	prev;
X	GRECT	curr;
X	GRECT	full;
X	
X	wind_get(wh, WF_CXYWH, &curr.g_x, &curr.g_y, &curr.g_w, &curr.g_h);
X	wind_get(wh, WF_PXYWH, &prev.g_x, &prev.g_y, &prev.g_w, &prev.g_h);
X	wind_get(wh, WF_FXYWH, &full.g_x, &full.g_y, &full.g_w, &full.g_h);
X	if ( rc_equal(&curr, &full) )
X	{		/* Is full, change to previous 		*/
X		graf_shrinkbox(prev.g_x, prev.g_y, prev.g_w, prev.g_h,
X			       full.g_x, full.g_y, full.g_w, full.g_h);
X		wind_set(wh, WF_CXYWH, prev.g_x, prev.g_y, prev.g_w, prev.g_h);
X		/* put send_redraw here if you need it */
X	}
X	else
X	{		/* is not full, so set to full		*/
X		graf_growbox(curr.g_x, curr.g_y, curr.g_w, curr.g_h,
X			     full.g_x, full.g_y, full.g_w, full.g_h);
X		wind_set(wh, WF_CXYWH, full.g_x, full.g_y, full.g_w, full.g_h);
X	}
X}
X
XWORD
Xrc_equal(p1, p2)		/* tests for two rectangles equal	*/
XGRECT	*p1, *p2;
X{
X	if ((p1->g_x != p2->g_x) ||
X	    (p1->g_y != p2->g_y) ||
X	    (p1->g_w != p2->g_w) ||
X	    (p1->g_h != p2->g_h))
X	    return(FALSE);
X	return(TRUE);
X}
X.!
X.!****************************************************************************
X.!
X.!			End Appendix 1
X.!
X.!****************************************************************************
SHAR_EOF
if test 5146 -ne "`wc -c 'apndx1.prf'`"
then
	echo shar: error transmitting "'apndx1.prf'" '(should have been 5146 characters)'
fi
echo shar: extracting "'apndx2.prf'" '(2869 characters)'
if test -f 'apndx2.prf'
then
	echo shar: over-writing existing file "'apndx2.prf'"
fi
sed 's/^X//' << \SHAR_EOF > 'apndx2.prf'
X.!****************************************************************************
X.! 
X.! ANTIC PUBLISHING INC., COPYRIGHT 1985.  REPRINTED BY PERMISSION.
X.!
X.! ** Professional GEM ** by Tim Oren
X.!
X.! Proff File by ST enthusiasts at
X.! Case Western Reserve University
X.! Cleveland, Ohio
X.! uucp : decvax!cwruecmp!bammi
X.! csnet: bammi@case
X.! arpa : bammi%case@csnet-relay
X.! compuserve: 71515,155
X.!
X.!****************************************************************************
X.!
X.!			Begin Appendix 2
X.!
X.!***************************************************************************
X.!
X.!
X.AP II Sample Code for Part III
X/*
X>>>>>>>>>>>>>>>>>>>>>>> Basic Dialog Handler <<<<<<<<<<<<<<<<<<<<<<<
X*/
X
XWORD
Xhndl_dial(tree, def, x, y, w, h)
XLONG	tree;
XWORD	def;
XWORD	x, y, w, h;
X{
X	WORD	xdial, ydial, wdial, hdial, exitobj;
X
X	form_center(tree, &xdial, &ydial, &wdial, &hdial);
X	form_dial(0, x, y, w, h, xdial, ydial, wdial, hdial);
X	form_dial(1, x, y, w, h, xdial, ydial, wdial, hdial);
X	objc_draw(tree, ROOT, MAX_DEPTH, xdial, ydial, wdial, hdial);
X	exitobj = form_do(tree, def) & 0x7FFF;
X	form_dial(2, x, y, w, h, xdial, ydial, wdial, hdial);
X	form_dial(3, x, y, w, h, xdial, ydial, wdial, hdial);
X	return (exitobj);
X}
X.bp
X/*
X>>>>>>>>>>>>>>>>>>>>>>> Object rectangle utility <<<<<<<<<<<<<<<<<<<<<<<<<
X*/
X
XVOID
Xobjc_xywh(tree, obj, p)		/* get x,y,w,h for specified object	*/
XLONG	tree;
XWORD	obj;
XGRECT	*p;
X{
X	objc_offset(tree, obj, &p->g_x, &p->g_y);
X	p->g_w = LWGET(OB_WIDTH(obj));
X	p->g_h = LWGET(OB_HEIGHT(obj));
X}
X.bp
X/*
X>>>>>>>>>>>>>>>>>>>>>>> Object flag utilities <<<<<<<<<<<<<<<<<<<<<<<<<<<
X*/
X
XVOID
Xundo_obj(tree, which, bit)	/* clear specified bit in object state	*/
XLONG	tree;
XWORD	which, bit;
X{
X	WORD	state;
X
X	state = LWGET(OB_STATE(which));
X	LWSET(OB_STATE(which), state & ~bit);
X}
X
XVOID
Xdesel_obj(tree, which)		/* turn off selected bit of spcfd object*/
XLONG	tree;
XWORD	which;
X{
X	undo_obj(tree, which, SELECTED);
X}
X
XVOID
Xdo_obj(tree, which, bit)	/* set specified bit in object state	*/
XLONG	tree;
XWORD	which, bit;
X{
X	WORD	state;
X
X	state = LWGET(OB_STATE(which));
X	LWSET(OB_STATE(which), state | bit);
X}
X
XVOID
Xsel_obj(tree, which)		/* turn on selected bit of spcfd object	*/
XLONG	tree;
XWORD	which;
X{
X	do_obj(tree, which, SELECTED);
X}
X
XBOOLEAN
Xstatep(tree, which, bit)
XLONG	tree;
XWORD	which;
XWORD	bit;
X{
X	return ( (LWGET(OB_STATE(which)) & bit) != 0);
X}
X
XBOOLEAN
Xselectp(tree, which)
XLONG	tree;
XWORD	which;
X{
X	return statep(tree, which, SELECTED);
X}
X.bp
X/*
X>>>>>>>>>>>>>>>>>>>>>> Sample radio buttons after dialog <<<<<<<<<<<<<<<<<<<<
X*/
X
X
XWORD
Xencode(tree, ob1st, num)
XLONG	tree;
XWORD	ob1st, num;
X{
X	for (; num--; )
X		if (selectp(ob1st+num))
X			return(num);
X	return (-1);
X}
X.!
X.!****************************************************************************
X.!
X.!			End Appendix 3
X.!
X.!****************************************************************************
SHAR_EOF
if test 2869 -ne "`wc -c 'apndx2.prf'`"
then
	echo shar: error transmitting "'apndx2.prf'" '(should have been 2869 characters)'
fi
echo shar: extracting "'apndx3.prf'" '(11344 characters)'
if test -f 'apndx3.prf'
then
	echo shar: over-writing existing file "'apndx3.prf'"
fi
sed 's/^X//' << \SHAR_EOF > 'apndx3.prf'
X.!****************************************************************************
X.! 
X.! ANTIC PUBLISHING INC., COPYRIGHT 1985.  REPRINTED BY PERMISSION.
X.!
X.! ** Professional GEM ** by Tim Oren
X.!
X.! Proff File by ST enthusiasts at
X.! Case Western Reserve University
X.! Cleveland, Ohio
X.! uucp : decvax!cwruecmp!bammi
X.! csnet: bammi@case
X.! arpa : bammi%case@csnet-relay
X.! compuserve: 71515,155
X.!
X.!****************************************************************************
X.!
X.!			Begin Appendix 3
X.!
X.!***************************************************************************
X.!
X.!
X.AP III Sample Code for Part IV 
X/*
X>>>>>>>>>>>>>>>>>>>>>>>>>> Sample C output file from RCS <<<<<<<<<<<<<<<<<<<<
X*/
X					/* (Comments added)	*/
XBYTE *rs_strings[] = {			/* ASCII data		*/
X"Title String",	
X"Exit",
X"Centered Text",
X"",
X"",
X"Butt",
X"Tokyo",
X"",
X"Time: __:__:__",
X"999999",
X"",
X"Time: __:__:__  ",
X"999999",
X"New York"};
X
XWORD IMAG0[] = {				/* Bitmap for G_IMAGE */
X0x7FF, 0xFFFF, 0xFF80, 0xC00, 
X0x0, 0xC0, 0x183F, 0xF03F, 
X0xF060, 0x187F, 0xF860, 0x1860, 
X0x187F, 0xF860, 0x1860, 0x187F, 
X0xF860, 0x1860, 0x187F, 0xF860, 
X0x1860, 0x187F, 0xF860, 0x1860, 
X0x187F, 0xF860, 0x1860, 0x187F, 
X0xF860, 0x1860, 0x187F, 0xF860, 
X0x1860, 0x187F, 0xF860, 0x1860, 
X0x187F, 0xF860, 0x1860, 0x187F, 
X0xF860, 0x1860, 0x183F, 0xF03F, 
X0xF060, 0xC00, 0x0, 0xC0, 
X0x7FF, 0xFFFF, 0xFF80, 0x0, 
X0x0, 0x0, 0x3F30, 0xC787, 
X0x8FE0, 0xC39, 0xCCCC, 0xCC00, 
X0xC36, 0xCFCC, 0xF80, 0xC30, 
X0xCCCD, 0xCC00, 0x3F30, 0xCCC7, 
X0xCFE0, 0x0, 0x0, 0x0};
X
XWORD IMAG1[] = {				/* Mask for first icon */
X0x0, 0x0, 0x0, 0x0, 
X0x7FFE, 0x0, 0x1F, 0xFFFF, 
X0xFC00, 0xFF, 0xFFFF, 0xFF00, 
X0x3FF, 0xFFFF, 0xFFC0, 0xFFF, 
X0xFFFF, 0xFFF0, 0x3FFF, 0xFFFF, 
X0xFFFC, 0x7FFF, 0xFFFF, 0xFFFE, 
X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X0xFFFF, 0xFFFF, 0xFFFF, 0x7FFF, 
X0xFFFF, 0xFFFE, 0x3FFF, 0xFFFF, 
X0xFFFC, 0xFFF, 0xFFFF, 0xFFF0, 
X0x3FF, 0xFFFF, 0xFFC0, 0xFF, 
X0xFFFF, 0xFF00, 0x1F, 0xFFFF, 
X0xF800, 0x0, 0x7FFE, 0x0};
X
XWORD IMAG2[] = {				/* Data for first icon */
X0x0, 0x0, 0x0, 0x0, 
X0x3FFC, 0x0, 0xF, 0xC003, 
X0xF000, 0x78, 0x180, 0x1E00, 
X0x180, 0x180, 0x180, 0x603, 
X0x180, 0xC060, 0x1C00, 0x6, 
X0x38, 0x3000, 0x18C, 0xC, 
X0x60C0, 0x198, 0x306, 0x6000, 
X0x1B0, 0x6, 0x4000, 0x1E0, 
X0x2, 0xC000, 0x1C0, 0x3, 
X0xCFC0, 0x180, 0x3F3, 0xC000, 
X0x0, 0x3, 0x4000, 0x0, 
X0x2, 0x6000, 0x0, 0x6, 
X0x60C0, 0x0, 0x306, 0x3000, 
X0x0, 0xC, 0x1C00, 0x0, 
X0x38, 0x603, 0x180, 0xC060, 
X0x180, 0x180, 0x180, 0x78, 
X0x180, 0x1E00, 0xF, 0xC003, 
X0xF000, 0x0, 0x3FFC, 0x0};
X
XWORD IMAG3[] = {			/* Mask for second icon */
X0x0, 0x0, 0x0, 0x0, 
X0x7FFE, 0x0, 0x1F, 0xFFFF, 
X0xFC00, 0xFF, 0xFFFF, 0xFF00, 
X0x3FF, 0xFFFF, 0xFFC0, 0xFFF, 
X0xFFFF, 0xFFF0, 0x3FFF, 0xFFFF, 
X0xFFFC, 0x7FFF, 0xFFFF, 0xFFFE, 
X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X0xFFFF, 0xFFFF, 0xFFFF, 0x7FFF, 
X0xFFFF, 0xFFFE, 0x3FFF, 0xFFFF, 
X0xFFFC, 0xFFF, 0xFFFF, 0xFFF0, 
X0x3FF, 0xFFFF, 0xFFC0, 0xFF, 
X0xFFFF, 0xFF00, 0x1F, 0xFFFF, 
X0xF800, 0x0, 0x7FFE, 0x0};
X
XWORD IMAG4[] = {			/* Data for second icon */
X0x0, 0x0, 0x0, 0x0, 
X0x3FFC, 0x0, 0xF, 0xC003, 
X0xF000, 0x78, 0x180, 0x1E00, 
X0x180, 0x180, 0x180, 0x603, 
X0x180, 0xC060, 0x1C00, 0x6, 
X0x38, 0x3000, 0x18C, 0xC, 
X0x60C0, 0x198, 0x306, 0x6000, 
X0x1B0, 0x6, 0x4000, 0x1E0, 
X0x2, 0xC000, 0x1C0, 0x3, 
X0xCFC0, 0x180, 0x3F3, 0xC000, 
X0x0, 0x3, 0x4000, 0x0, 
X0x2, 0x6000, 0x0, 0x6, 
X0x60C0, 0x0, 0x306, 0x3000, 
X0x0, 0xC, 0x1C00, 0x0, 
X0x38, 0x603, 0x180, 0xC060, 
X0x180, 0x180, 0x180, 0x78, 
X0x180, 0x1E00, 0xF, 0xC003, 
X0xF000, 0x0, 0x3FFC, 0x0};
X
XLONG rs_frstr[] = {			/* Free string index - unused */
X0};
X
XBITBLK rs_bitblk[] = {			/* First entry is index to image data */
X0L, 6, 24, 0, 0, 0};
X
XLONG rs_frimg[] = {			/* Free image index - unused */
X0};
X
XICONBLK rs_iconblk[] = {		
X1L, 2L, 10L, 4096,0,0, 0,0,48,24, 9,24,30,8,	/* First pointer is mask */
X3L, 4L, 17L, 4864,0,0, 0,0,48,24, 0,24,48,8};	/* Second is data, third */
X						/* is to title string	 */
XTEDINFO rs_tedinfo[] = {
X2L, 3L, 4L, 3, 6, 2, 0x1180, 0x0, -1, 14,1,	/* First pointer is text */
X7L, 8L, 9L, 3, 6, 2, 0x2072, 0x0, -3, 11,1,	/* Second is template	 */
X11L, 12L, 13L, 3, 6, 0, 0x1180, 0x0, -1, 1,15,	/* Third is validation	 */
X14L, 15L, 16L, 3, 6, 1, 0x1173, 0x0, 0, 1,17};
X
XOBJECT rs_object[] = {
X-1, 1, 3, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 18,12,	/* Pointers are to: */
X2, -1, -1, G_STRING, NONE, NORMAL, 0x0L, 3,1, 12,1,	/* rs_strings	*/
X3, -1, -1, G_BUTTON, 0x7, NORMAL, 0x1L, 5,9, 8,1,	/* rs_strings	*/
X0, 4, 4, G_BOX, NONE, NORMAL, 0xFF1172L, 3,3, 12,5,
X3, -1, -1, G_IMAGE, LASTOB, NORMAL, 0x0L, 3,1, 6,3,	/* rs_bitblk	*/
X-1, 1, 6, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 23,12,	
X2, -1, -1, G_TEXT, NONE, NORMAL, 0x0L, 0,1, 23,1,	/* rs_tedinfo	*/
X6, 3, 5, G_IBOX, NONE, NORMAL, 0x1100L, 6,3, 11,5,
X4, -1, -1, G_BUTTON, 0x11, NORMAL, 0x5L, 0,0, 11,1,	/* rs_strings	*/
X5, -1, -1, G_BUTTON, 0x11, NORMAL, 0x6L, 0,2, 11,1,	/* rs_strings	*/
X2, -1, -1, G_BOXCHAR, 0x11, NORMAL, 0x43FF1400L, 0,4, 11,1,
X0, -1, -1, G_BOXTEXT, 0x27, NORMAL, 0x1L, 5,9, 13,1,	/* rs_tedinfo	*/
X-1, 1, 3, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 32,11,
X2, -1, -1, G_ICON, NONE, NORMAL, 0x0L, 4,1, 6,4,	/* rs_iconblk	*/
X3, -1, -1, G_FTEXT, EDITABLE, NORMAL, 0x2L, 12,2, 14,1,	/* rs_tedinfo	*/
X0, 4, 4, G_FBOXTEXT, 0xE, NORMAL, 0x3L, 3,5, 25,4,	/* rs_tedinfo	*/
X3, -1, -1, G_ICON, LASTOB, NORMAL, 0x1L, 1,0, 6,4};	/* rs_iconblk	*/
X
XLONG rs_trindex[] = {			/* Points to start of trees in */
X0L,					/* rs_object		       */
X5L,
X12L};
X
Xstruct foobar {				/* Temporary structure used by    */
X	WORD	dummy;			/* RSCREATE when setting up image */
X	WORD	*image;			/* pointers.			  */
X	} rs_imdope[] = {
X0, &IMAG0[0],
X0, &IMAG1[0],
X0, &IMAG2[0],
X0, &IMAG3[0],
X0, &IMAG4[0]};
X					/* Counts of structures defined */
X#define NUM_STRINGS 18
X#define NUM_FRSTR 0
X#define NUM_IMAGES 5
X#define NUM_BB 1
X#define NUM_FRIMG 0
X#define NUM_IB 2
X#define NUM_TI 4
X#define NUM_OBS 17
X#define NUM_TREE 3
X
XBYTE pname[] = "DEMO.RSC";
X.bp
X/*
X>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Title change utility <<<<<<<<<<<<<<<<<<<<<
X*/
X	VOID
Xset_text(tree, obj, str)
X	LONG	tree, str;
X	WORD	obj;
X	{
X	LONG	obspec;
X
X	obspec = LLGET(OB_SPEC(obj));		/* Get TEDINFO address  */
X	LLSET(TE_PTEXT(obspec), str);		/* Set new text pointer */
X	LWSET(TE_TXTLEN(obspec), LSTRLEN(str)); /* Set new length	*/
X	}
X.bp
X/*
X>>>>>>>>>>>>>>>>>>>>>> Text edit code segment <<<<<<<<<<<<<<<<<<<<<<<<<<
X*/
X	LONG	tree, obspec;
X	BYTE	text[41];
X
X	rsrc_gaddr(R_TREE, DIALOG, &tree);	/* Get tree address  */
X	obspec = LLGET(OB_SPEC(EDITOBJ));	/* Get TEDINFO address  */
X	LLSET(TE_PTEXT(obspec), ADDR(str));	/* Set new text pointer */
X	LWSET(TE_TXTLEN(obspec), 41); 		/* Set max length	*/
X	text[0] = '\0';				/* Make empty string */
X.bp
X/*
X>>>>>>>>>>>>>>>>>>>> Sample 68K only source code <<<<<<<<<<<<<<<<<<<<<<
X*/
X	VOID
Xset_text(tree, obj, str)
X	OBJECT	*tree;
X	WORD	obj;
X	BYTE	*str;
X	{
X	TEDINFO	*obspec;
X
X	obspec = (TEDINFO *) (tree + obj)->ob_spec;
X						/* Get TEDINFO address  */
X	obspec->te_ptext = str;			/* Set new text pointer */
X	obspec->te_txtlen = strlen(str);	/* Set new length	*/
X	}
X.bp
X/*
X>>>>>>>>>>>>>>>>>>>>>>>>>>>> Symbol definitions <<<<<<<<<<<<<<<<<<<<<<<<<
X*/
X						/* Window parts */
X#define NAME 0x0001
X#define CLOSER 0x0002
X#define FULLER 0x0004
X#define MOVER 0x0008
X#define INFO 0x0010
X#define SIZER 0x0020
X#define UPARROW 0x0040
X#define DNARROW 0x0080
X#define VSLIDE 0x0100
X#define LFARROW 0x0200
X#define RTARROW 0x0400
X#define HSLIDE 0x0800
X
X#define WF_KIND 1				/* wind_get/set parameters */
X#define WF_NAME 2
X#define WF_INFO 3
X#define WF_WXYWH 4
X#define WF_CXYWH 5
X#define WF_PXYWH 6
X#define WF_FXYWH 7
X#define WF_HSLIDE 8
X#define WF_VSLIDE 9
X#define WF_TOP 10
X#define WF_FIRSTXYWH 11
X#define WF_NEXTXYWH 12
X#define WF_NEWDESK 14
X#define WF_HSLSIZ 15
X#define WF_VSLSIZ 16
X						/* window messages	*/
X#define WM_REDRAW 20
X#define WM_TOPPED 21
X#define WM_CLOSED 22
X#define WM_FULLED 23
X#define WM_ARROWED 24
X#define WM_HSLID 25
X#define WM_VSLID 26
X#define WM_SIZED 27
X#define WM_MOVED 28
X#define WM_NEWTOP 29
X						/* arrow messages	*/
X#define WA_UPPAGE 0
X#define WA_DNPAGE 1
X#define WA_UPLINE 2
X#define WA_DNLINE 3
X#define WA_LFPAGE 4
X#define WA_RTPAGE 5
X#define WA_LFLINE 6
X#define WA_RTLINE 7
X
X#define R_TREE 0				/* Redraw definitions 	*/
X#define ROOT 0
X#define MAX_DEPTH 8
X						/* update flags		*/
X#define	END_UPDATE 0
X#define	BEG_UPDATE 1
X#define	END_MCTRL  2
X#define	BEG_MCTRL  3
X						/* Mouse state changes   */
X#define M_OFF 256
X#define M_ON 257
X						/* Object flags		 */
X#define NONE       0x0
X#define SELECTABLE 0x1
X#define DEFAULT    0x2
X#define EXIT       0x4
X#define EDITABLE   0x8
X#define RBUTTON   0x10
X						/* Object states	*/
X#define SELECTED  0x1
X#define CROSSED   0x2
X#define CHECKED   0x4
X#define DISABLED  0x8
X#define OUTLINED 0x10
X#define SHADOWED 0x20
X
X#define G_BOX     20
X#define G_TEXT    21
X#define G_BOXTEXT 22
X#define G_IMAGE   23
X#define G_IBOX    25
X#define G_BUTTON  26
X#define G_BOXCHAR 27
X#define G_STRING  28
X#define G_FTEXT   29
X#define G_FBOXTEXT 30
X#define G_ICON    31
X#define G_TITLE   32
X						/* Data structures	*/
Xtypedef struct grect
X	{
X	int	g_x;
X	int	g_y;
X	int	g_w;
X	int	g_h;
X	} GRECT;
X
Xtypedef struct object
X	{
X	int		ob_next;	/* -> object's next sibling	*/
X	int		ob_head;	/* -> head of object's children */
X	int		ob_tail;	/* -> tail of object's children */
X	unsigned int	ob_type;	/* type of object- BOX, CHAR,...*/
X	unsigned int	ob_flags;	/* flags			*/
X	unsigned int	ob_state;	/* state- SELECTED, OPEN, ...	*/
X	long		ob_spec;	/* "out"- -> anything else	*/
X	int		ob_x;		/* upper left corner of object	*/
X	int		ob_y;		/* upper left corner of object	*/
X	int		ob_width;	/* width of obj			*/
X	int		ob_height;	/* height of obj		*/
X	} OBJECT;
X
Xtypedef struct text_edinfo
X	{
X	long		te_ptext;	/* ptr to text (must be 1st)	*/
X	long		te_ptmplt;	/* ptr to template		*/
X	long		te_pvalid;	/* ptr to validation chrs.	*/
X	int		te_font;	/* font				*/
X	int		te_junk1;	/* junk word			*/
X	int		te_just;	/* justification- left, right...*/
X	int		te_color;	/* color information word	*/
X	int		te_junk2;	/* junk word			*/
X	int		te_thickness;	/* border thickness		*/
X	int		te_txtlen;	/* length of text string	*/
X	int		te_tmplen;	/* length of template string	*/
X	} TEDINFO;
X
X					/* "Portable" data definitions */
X#define OB_NEXT(x) (tree + (x) * sizeof(OBJECT) + 0)
X#define OB_HEAD(x) (tree + (x) * sizeof(OBJECT) + 2)
X#define OB_TAIL(x) (tree + (x) * sizeof(OBJECT) + 4)
X#define OB_TYPE(x) (tree + (x) * sizeof(OBJECT) + 6)
X#define OB_FLAGS(x) (tree + (x) * sizeof(OBJECT) + 8)
X#define OB_STATE(x) (tree + (x) * sizeof(OBJECT) + 10)
X#define OB_SPEC(x) (tree + (x) * sizeof(OBJECT) + 12)
X#define OB_X(x) (tree + (x) * sizeof(OBJECT) + 16)
X#define OB_Y(x) (tree + (x) * sizeof(OBJECT) + 18)
X#define OB_WIDTH(x) (tree + (x) * sizeof(OBJECT) + 20)
X#define OB_HEIGHT(x) (tree + (x) * sizeof(OBJECT) + 22)
X
X#define TE_PTEXT(x)  (x)
X#define TE_TXTLEN(x)  (x + 24)
X.!
X.!****************************************************************************
X.!
X.!			End Appendix 3
X.!
X.!****************************************************************************
SHAR_EOF
if test 11344 -ne "`wc -c 'apndx3.prf'`"
then
	echo shar: error transmitting "'apndx3.prf'" '(should have been 11344 characters)'
fi
echo shar: extracting "'apndx4.prf'" '(5968 characters)'
if test -f 'apndx4.prf'
then
	echo shar: over-writing existing file "'apndx4.prf'"
fi
sed 's/^X//' << \SHAR_EOF > 'apndx4.prf'
X.!****************************************************************************
X.! 
X.! ANTIC PUBLISHING INC., COPYRIGHT 1985.  REPRINTED BY PERMISSION.
X.!
X.! ** Professional GEM ** by Tim Oren
X.!
X.! Proff File by ST enthusiasts at
X.! Case Western Reserve University
X.! Cleveland, Ohio
X.! uucp : decvax!cwruecmp!bammi
X.! csnet: bammi@case
X.! arpa : bammi%case@csnet-relay
X.! compuserve: 71515,155
X.!
X.!****************************************************************************
X.!
X.!			Begin Appendix 4
X.!
X.!***************************************************************************
X.!
X.!
X.AP IV Sample Code for Part V 
X/*
X>>>>>>>>>>>>>>>>>>>>>>>>>>> Sample object trees <<<<<<<<<<<<<<<<<<<<<<<<
X*/
X
XOBJECT rs_object[] = {
X-1, 1, 3, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 18,12,	/* Tree # 1 */
X2, -1, -1, G_STRING, NONE, NORMAL, 0x0L, 3,1, 12,1,	
X3, -1, -1, G_BUTTON, 0x7, NORMAL, 0x1L, 5,9, 8,1,	
X0, 4, 4, G_BOX, NONE, NORMAL, 0xFF1172L, 3,3, 12,5,
X3, -1, -1, G_IMAGE, LASTOB, NORMAL, 0x0L, 3,1, 6,3,	
X-1, 1, 6, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 23,12,  /* Tree # 2 */
X2, -1, -1, G_TEXT, NONE, NORMAL, 0x0L, 0,1, 23,1,	
X6, 3, 5, G_IBOX, NONE, NORMAL, 0x1100L, 6,3, 11,5,
X4, -1, -1, G_BUTTON, 0x11, NORMAL, 0x5L, 0,0, 11,1,	
X5, -1, -1, G_BUTTON, 0x11, NORMAL, 0x6L, 0,2, 11,1,	
X2, -1, -1, G_BOXCHAR, 0x11, NORMAL, 0x43FF1400L, 0,4, 11,1,
X0, -1, -1, G_BOXTEXT, 0x27, NORMAL, 0x1L, 5,9, 13,1,	
X-1, 1, 3, G_BOX, NONE, OUTLINED, 0x21100L, 0,0, 32,11,  /* Tree # 3 */
X2, -1, -1, G_ICON, NONE, NORMAL, 0x0L, 4,1, 6,4,	
X3, -1, -1, G_FTEXT, EDITABLE, NORMAL, 0x2L, 12,2, 14,1,	
X0, 4, 4, G_FBOXTEXT, 0xE, NORMAL, 0x3L, 3,5, 25,4,	
X3, -1, -1, G_ICON, LASTOB, NORMAL, 0x1L, 1,0, 6,4};	
X.bp 
X/*
X>>>>>>>>>>>>>>>>>>>>>>>>>> Object tree walk utility <<<<<<<<<<<<<<<<<<<<<<
X*/ 
X        VOID
Xmap_tree(tree, this, last, routine)
X        LONG            tree;
X        WORD            this, last;
X        WORD            (*routine)();
X        {
X        WORD            tmp1;
X 
X        tmp1 = this;            /* Initialize to impossible value: */
X                                /* TAIL won't point to self!       */
X                                /* Look until final node, or off   */
X                                /* the end of tree                 */ 
X        while (this != last && this != NIL)
X                                /* Did we 'pop' into this node     */
X                                /* for the second time?            */
X                if (LWGET(OB_TAIL(this)) != tmp1)
X                        {
X                        tmp1 = this;    /* This is a new node       */
X                        this = NIL;
X                                        /* Apply operation, testing  */
X                                        /* for rejection of sub-tree */
X                        if ((*routine)(tree, tmp1))
X                                this = LWGET(OB_HEAD(tmp1));
X                                        /* Subtree path not taken,   */
X                                        /* so traverse right         */ 
X                        if (this == NIL)
X                                this = LWGET(OB_NEXT(tmp1));
X                        }
X                else                    /* Revisiting parent:        */
X                                        /* No operation, move right  */
X                        {
X                        tmp1 = this;
X                        this = LWGET(OB_NEXT(tmp1));
X                        }
X        }
X.bp
X/*
X>>>>>>>>>>>>>>>>>> Sample routine to use with map_tree() <<<<<<<<<<<<<<<
X*/ 
X	VOID
Xundo_obj(tree, which, bit)	/* clear specified bit in object state	*/
X	LONG	tree;
X	WORD	which, bit;
X	{
X	WORD	state;
X
X	state = LWGET(OB_STATE(which));
X	LWSET(OB_STATE(which), state & ~bit);
X	}
X
X	VOID
Xdesel_obj(tree, which)		/* turn off selected bit of spcfd object*/
X	LONG	tree;
X	WORD	which;
X	{
X	undo_obj(tree, which, SELECTED);
X	return (TRUE);
X	}
X.bp
X/*
X>>>>>>>>>>>>>>>>>>>>>>>>>> Sample .ICN Files <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
X>>>>>>>>>> Save everything between >>><<< lines as CLOCK.ICN <<<<<<<<<<<<<<
X*/
X
X/* GEM Icon Definition: */
X#define ICON_W 0x0030
X#define ICON_H 0x0018
X#define DATASIZE 0x0048
XUWORD clock[DATASIZE] =
X{ 0x0000, 0x0000, 0x0000, 0x0000, 
X  0x3FFC, 0x0000, 0x000F, 0xC003, 
X  0xF000, 0x0078, 0x0180, 0x1E00, 
X  0x0180, 0x0180, 0x0180, 0x0603, 
X  0x0180, 0xC060, 0x1C00, 0x0006, 
X  0x0038, 0x3000, 0x018C, 0x000C, 
X  0x60C0, 0x0198, 0x0306, 0x6000, 
X  0x01B0, 0x0006, 0x4000, 0x01E0, 
X  0x0002, 0xC000, 0x01C0, 0x0003, 
X  0xCFC0, 0x0180, 0x03F3, 0xC000, 
X  0x0000, 0x0003, 0x4000, 0x0000, 
X  0x0002, 0x6000, 0x0000, 0x0006, 
X  0x60C0, 0x0000, 0x0306, 0x3000, 
X  0x0000, 0x000C, 0x1C00, 0x0000, 
X  0x0038, 0x0603, 0x0180, 0xC060, 
X  0x0180, 0x0180, 0x0180, 0x0078, 
X  0x0180, 0x1E00, 0x000F, 0xC003, 
X  0xF000, 0x0000, 0x3FFC, 0x0000
X};
X/*
X>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> End of CLOCK.ICN <<<<<<<<<<<<<<<<<<<<<<<<<<
X*/
X.bp
X/*
X>>>>>>>>> Save everything between >>>><<<<< lines as CLOCKM.ICN <<<<<<<<<<
X*/
X
X/* GEM Icon Definition: */
X#define ICON_W 0x0030
X#define ICON_H 0x0018
X#define DATASIZE 0x0048
XUWORD clockm[DATASIZE] =
X{ 0x0000, 0x0000, 0x0000, 0x0000, 
X  0x7FFE, 0x0000, 0x001F, 0xFFFF, 
X  0xFC00, 0x00FF, 0xFFFF, 0xFF00, 
X  0x03FF, 0xFFFF, 0xFFC0, 0x0FFF, 
X  0xFFFF, 0xFFF0, 0x3FFF, 0xFFFF, 
X  0xFFFC, 0x7FFF, 0xFFFF, 0xFFFE, 
X  0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X  0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X  0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X  0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X  0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X  0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 
X  0xFFFF, 0xFFFF, 0xFFFF, 0x7FFF, 
X  0xFFFF, 0xFFFE, 0x3FFF, 0xFFFF, 
X  0xFFFC, 0x0FFF, 0xFFFF, 0xFFF0, 
X  0x03FF, 0xFFFF, 0xFFC0, 0x00FF, 
X  0xFFFF, 0xFF00, 0x001F, 0xFFFF, 
X  0xF800, 0x0000, 0x7FFE, 0x0000
X};
X/*
X>>>>>>>>>>>>>>>>>>>>>>>>> End of CLOCKM.ICN <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
X*/
X.!
X.!****************************************************************************
X.!
X.!			End Appendix 4
X.!
X.!****************************************************************************
SHAR_EOF
if test 5968 -ne "`wc -c 'apndx4.prf'`"
then
	echo shar: error transmitting "'apndx4.prf'" '(should have been 5968 characters)'
fi
#	End of shell archive
exit 0

-- 
					Jwahar R. Bammi
			       Usenet:  .....!decvax!cwruecmp!bammi
			        CSnet:  bammi@case
				 Arpa:  bammi%case@csnet-relay
			   CompuServe:  71515,155