[comp.windows.x] X11 under Sunview: How to do it

tarsa@elijah.UUCP (Greg Tarsa) (10/08/89)

A few weeks ago I requested information on trying to run X11
under Sunview.  I got a number of replies, requests and
encouragements from my message requesting information on how to
use X11 with Sunview.

What follows here is a consolidation of what I learned.  Thanks to
Jan Peterson ({ ...!utah-cs!caeco | quad1 }!olyis!jlp), Tom Olin
(...!uunet!adiron!tro), Susan Bickford (susan@gotham.East.Sun.COM)
and, indirectly, Dana Chee (dana@bellcore.com) for this information.

    1)	An official announcement of an X11/NeWS, with binary
	SunView compatibility is imminent.

    2)	For those unwilling to wait, or too poor to pay, I have
	included the information necessary to get X to run under
	Sunview.  This should work for monochrome systems on Sun-3's
	at a minimum, since that is what our shop has and it runs
	well here.

	   a) Compile the server with -DSUN_WINDOWS to include support
	      for Sunview/X co-existence.  See site.def and
	      Sun.macros to see how to do this.

	      This will allow

		       overview -w xinit

	      to work properly with X11.  When X11 terminates,
	      control will return to Sunview.

    2)	If you want to be able to *suspend* X11, then you
	must patch xinit and the server with the patch file that
	I have included in this message.  With the patch, META-L2
	will suspend the server and iconify it on the Sunview
	screen.  Opening the icon will restart the X11 server. 

	On my 12meg Sun-3 it all happens very quickly.  Smaller
	memory systems may have some pauses while everything
	swaps around.

	By the way, for the 386i, the Meta key mentioned below is
	really the left-diamond key (next to the spacebar).

Tarsa Software Consulting
--------------------------------
		33 Seabee Street
		Bedford, NH 03102	tarsa@elijah.mv.com
		(603)668-9226		{decuac,decvax}!elijah!tarsa

--------------CUT HERE for metakey.suntools-------------------
Below are the changes:

	Dana Chee
	Bellcore
	MRE 2Q-250
	(201) 829-4488
	dana@bellcore.com

------------  report.metakey ----------------
VERSION:
	X11 release 3

CLIENT MACHINE:
	Sun 3/75 [and 3/160 -greg]

CLIENT OPERATING SYSTEM:
	SunOS 3.2

DISPLAY:
	Sun [Monochrome]

SYNOPSIS:
	Add Meta-L2 support for running X under Sunview.

DESCRIPTION:
	These diff add the Meta-L2 support present in X10R4 which
        allowed an X server running under Sunview to return to
	Sunview by typing Meta-L2.  When the overview icon was
	clicked, the X server was restarted.

	Affected files:
		clients/xinit/xinit.c
		server/ddx/sun/sunInit.c
		server/ddx/sun/sunKbd.c

FIX:
*** clients/xinit/xinit.c.orig	Thu Feb 25 23:53:54 1988
--- clients/xinit/xinit.c	Thu Apr 21 14:29:11 1988
***************
*** 148,156 ****
  #endif /* SYSV */
  	if ((serverpid = startServer(server)) > 0
  	 && (clientpid = startClient(client)) > 0) {
! 		pid = -1;
! 		while (pid != clientpid && pid != serverpid)
! 			pid = wait(NULL);
  	}
  	signal(SIGQUIT, SIG_IGN);
  	signal(SIGINT, SIG_IGN);
--- 148,173 ----
  #endif /* SYSV */
  	if ((serverpid = startServer(server)) > 0
  	 && (clientpid = startClient(client)) > 0) {
! 		while( 1 )
! 		{
! 			union wait	status;
! 
! 			do
! 			{
! 				pid = wait3(&status, WUNTRACED, NULL);
! 			} while (pid != clientpid && pid != serverpid);
! 
! 			if (pid == serverpid &&
! 			    (WIFSTOPPED(status)))
! 			{
! 				kill (getpid(), SIGSTOP);
! 				kill (serverpid, SIGCONT);
! 			}
! 			else
! 			{
! 				break;
! 			}
! 		}
  	}
  	signal(SIGQUIT, SIG_IGN);
  	signal(SIGINT, SIG_IGN);
***************
*** 222,227 ****
--- 239,245 ----
  			break;
  	}
  	laststring = string;
+ 	fprintf(stderr, "\n");
  	return( pid != pidfound );
  }

*** server/ddx/sun/sunInit.c.orig	Sat Jan 16 12:40:55 1988
--- server/ddx/sun/sunInit.c	Thu Apr 21 14:20:51 1988
***************
*** 63,68 ****
--- 63,69 ----
  extern void SetInputCheck();
  extern char *strncpy();
  extern GCPtr CreateScratchGC();
+ extern WindowRec WindowTable[];

  #define	XDEVICE	"XDEVICE"
  #define	PARENT	"WINDOW_GFX"
***************
*** 704,706 ****
--- 705,773 ----

      return (fd);
  }
+ 
+ /*
+  * stopme - stop window for suntools
+  */
+ #ifdef	SUN_WINDOWS
+ stopme()
+ {
+ 	DevicePtr	pKbd;
+ 	int		i;
+ 
+ 	if( !sunUseSunWindows())
+ 		return;
+ 
+ 	/*
+ 	 * on our way out -- shut down keyboard and mouse
+ 	 * and remove the window
+ 	 */
+ 	pKbd = LookupKeyboardDevice();
+ 	sunKbdProc(pKbd,  DEVICE_OFF);
+ 	sunMouseProc(pKbd, DEVICE_OFF);
+ 	win_remove(windowFd);
+ 	kill(0, SIGSTOP);
+ 
+ 	/*
+ 	 * we're back, restore the window, and turn on the
+ 	 * keyboard and mouse
+ 	 */
+ 	win_insert(windowFd);
+ 	sunMouseProc(pKbd, DEVICE_ON);
+ 	sunKbdProc(pKbd, DEVICE_ON);
+ 
+ 	/*
+ 	 * refresh all screens
+ 	 */
+ 	for( i = 0; i < screenInfo.numScreens; i++ )
+ 	{
+ 		ExposeEveryone(&WindowTable[i], &screenInfo.screen[i]);
+ 		HandleExposures(&WindowTable[i]);
+ 	}
+ }
+ 
+ static
+ ExposeEveryone(pWin, pScreen)
+ WindowPtr     pWin;
+ ScreenPtr     pScreen;
+ {
+ 	WindowPtr	pChild;
+ 
+ 	pChild = pWin;
+ 	while( pChild )
+ 	{
+ 		if( pChild->mapped )
+ 		{
+ 			(* pScreen->RegionCopy)(pChild->exposed, pChild->clipList);
+ 			(* pScreen->RegionCopy)(pChild->borderExposed, pChild->borderClip);
+ 			ExposeEveryone(pChild->firstChild, pScreen);
+ 		}
+ 		pChild = pChild->nextSib;
+ 	}
+ }
+ #endif	SUN_WINDOWS
+ 
+ 
+ 	
+ 
+ 
*** server/ddx/sun/sunKbd.c.orig	Tue Feb  9 17:19:51 1988
--- server/ddx/sun/sunKbd.c	Thu Apr 21 14:23:58 1988
***************
*** 734,744 ****
--- 734,763 ----
      register struct inputevent *se;
  {   
      Firm_event	fe;
+     int		loc;
+     static	Meta_On, Meta_hold;

      fe.time = event_time(se);
      fe.id = event_id(se);
      fe.value = (event_is_up(se) ? VKEY_UP : VKEY_DOWN);

+     loc = (fe.id - 1) * sunKeySyms[sysKbPriv.type].mapWidth;
+ 
+     if( sunKeySyms[sysKbPriv.type].map[loc] == XK_Meta_L ||
+        sunKeySyms[sysKbPriv.type].map[loc] == XK_Meta_R ) /* Meta */
+     {
+ 	    Meta_hold = fe.id;
+ 	    Meta_On = (fe.value == VKEY_DOWN);
+     }
+     if( sunKeySyms[sysKbPriv.type].map[loc] == XK_L2 ) /* L2 */
+     {
+ 	    if( fe.value == VKEY_DOWN && Meta_On )
+ 	    {
+ 		    stopme();
+ 		    fe.id = Meta_hold;
+ 		    fe.value = VKEY_UP;
+ 	    }
+     }
      sunKbdProcessEvent (pKeyboard, &fe);
  }
  #endif SUN_WINDOWS

rprobst@SUN.COM (Richard Probst) (10/11/89)

Greg Tarsa writes:

>    1)	An official announcement of an X11/NeWS, with binary
>	SunView compatibility is imminent.

The official announcement has been made.  In fact, I got a mild
flame for announcing a product to this group (or perhaps the flame
was for not editing out enough of the marketing hype; sorry, I'll
edit tougher next time).  But I believe that this news group is an
appropriate place to spread the word about X11 products shipping.

So let me say it again.  X11/NeWS is shipping.  Any SunView program
will run on top of X11/NeWS; full binary compatibility is supported.
However, SunView programs cannot run remotely, always appear on
top of any X11 or NeWS window, and do not look like OPEN LOOK.

On the same tape as X11/NeWS is the XView toolkit.  SunView programs
can be converted to XView with some small effort (after the learning
curve, about a day for many applications), after which the program can
run remotely, shares the screen fairly, and does look like OPEN LOOK.

X11/NeWS is simply another implementation of X11, that happens to
have support for the PostScript language and imaging model.  Any
R3 or R4 client should work with X11/NeWS (but if the client's not
ICCCM-compliant, it may not get the input focus until you make a
simple fix).  And in addition, all SunView programs work with X11/NeWS.

To order the OpenWindows tape, talk to your Sun salescritter.  You 
can get XView source from expo via ftp, or on the X11 R4 tape.

	--Richard Probst

t45126@iemisi.dhc (John Durko) (10/12/89)

I tried out the method posted here for running X and sunview together and it
seems to work except that the sunview arrow cursor keeps poking through my
X windows and leaving tracks all over the place.  i have built the server with
-DSUN_WINDOWS or what ever and also incorporated the patches given and it still
does not work.  Anybody know how to fix it??
--
   ___  ___  ___ ___  _  _ ___
  /__/ /  / /__   /  /\ / /  _   Stephen Martin, Boeing Canada, Toronto.
 /__/ /__/ /__  _/_ /  / /__/             
                                           Nuke the Raisins
UUCP: t45126@iemisi.UUCP
      {uunet|suncan}!jtsv16!isdserv!iemisi!t45126