From rutgers!tut.cis.ohio-state.edu!bloom-beacon!athena.mit.edu!jfc Mon Oct 30 13:40:19 EST 1989
Article 1457 of comp.sys.ibm.pc.rt:
Path: cmcl2!rutgers!tut.cis.ohio-state.edu!bloom-beacon!athena.mit.edu!jfc
>From: jfc@athena.mit.edu (John F Carr)
Newsgroups: comp.sys.ibm.pc.rt,comp.windows.x
Subject: Re: X11 Release 3 Announcement, IBM/4.3 fixes
Keywords: V1.17 X11r3 contributed software
Message-ID: <15481@bloom-beacon.MIT.EDU>
Date: 28 Oct 89 22:04:19 GMT
References: <2708@ibmpa.UUCP> <28586@shemp.CS.UCLA.EDU>
Sender: daemon@bloom-beacon.MIT.EDU
Reply-To: jfc@athena.mit.edu (John F Carr)
Followup-To: comp.sys.ibm.pc.rt
Organization: Massachusetts Institute of Technology
Lines: 172
Xref: cmcl2 comp.sys.ibm.pc.rt:1457 comp.windows.x:16639

>Does anybody have additional patches for the RT for X11R3 ?

These are the patches we have since the May 89 archive on expo.  The
usual disclaimers apply (use at your own risk, etc.), but this is the
code we build for the RTs at Athena.

Patches are delimited by "++++++++++++++++"; the name of the file to
be patched is in parentheses on the line after this (filename relative
to $(TOP)/server/ddx/ibm).

Bugs fixed:

	Poly point requests on the megapel no longer crash the server.

	Cursor code on multiple screens is more reliable (the server won't
	attempt to draw the cursor if it is off the screen).

	Drawing of partially obscured text is now done correctly.

	A bug in the HC compiler caused dashed lines off the edge of the
	screen to crash the server.


++++++++++++++++
(mpel/mpelPolyPt.c)

*** /tmp/,RCSt1015368	Sat Oct 28 17:36:32 1989
--- /tmp/,RCSt2015368	Sat Oct 28 17:36:35 1989
***************
*** 89,95 ****
  						  &box ) ;
  		      ppt++ )
  			/* Do Nothing */ ;
! 		for ( mpt = ppt ; npt-- ; ppt++ )
  			if ( (* PointInRegion)( pRegion, ppt->x,
  						ppt->y, &box ) )
  				*mpt++ = *ppt ;
--- 89,95 ----
  						  &box ) ;
  		      ppt++ )
  			/* Do Nothing */ ;
! 		for ( mpt = ppt ; npt-- > 0; ppt++ )
  			if ( (* PointInRegion)( pRegion, ppt->x,
  						ppt->y, &box ) )
  				*mpt++ = *ppt ;

++++++++++++++++
(mpel/mpelIO.c)

*** /tmp/,RCSt1015413	Sat Oct 28 17:37:58 1989
--- /tmp/,RCSt2015413	Sat Oct 28 17:38:02 1989
***************
*** 76,81 ****
--- 76,82 ----
  
  	ppcCommonScreenInit( pScreen, index, &mpelScreenRec ) ;
  	mpelCursorInit( index ) ;
+ 	mpelInitPlaneMask() ;
  
  	return 1 ;
  }

++++++++++++++++
(mpel/mpelCursor.c)

*** /tmp/,RCSt1015351	Sat Oct 28 17:36:07 1989
--- /tmp/,RCSt2015351	Sat Oct 28 17:36:11 1989
***************
*** 97,102 ****
--- 97,104 ----
      if ( ibmScreenState( screen_index ) != SCREEN_ACTIVE )
  	return ;
      curCursor = ibmCurrentCursor( screen_index ) ;
+     if (x >= MPEL_WIDTH || (x + curCursor->width) < 0)
+ 	return;			/* off the screen, don't bother */
      fSrc = (unsigned short int *) forePtrn ;
      bSrc = (unsigned short int *) backPtrn ;
  
++++++++++++++++
(apa16/apa16Line.c)

*** /tmp/,RCSt1015478	Sat Oct 28 17:45:09 1989
--- /tmp/,RCSt2015478	Sat Oct 28 17:45:11 1989
***************
*** 630,636 ****
--- 630,641 ----
      {
  	if (pdash->newLine)
  	{
+ #if HCVERSION > 1
+ 	    pt1Orig = *pptInit;
+ 	    pt1 = *pptInit++;
+ #else
  	    pt1Orig = pt1 = *pptInit++;
+ #endif
  	    pt2 = *pptInit;
  	    adx = pt2.x - pt1.x;
  	    ady = pt2.y - pt1.y;

++++++++++++++++
(apa16/apa16Text.c)

*** /tmp/,RCSt1015504	Sat Oct 28 17:47:24 1989
--- /tmp/,RCSt2015504	Sat Oct 28 17:47:26 1989
***************
*** 423,429 ****
--- 423,431 ----
  		    charsOut++;
  		    tmpCinfo++;
  		}
+ 		break;
  	case rgnOUT:
+ 		x += info.overallWidth;
  		break;
  	case rgnPART:
  		QUEUE_RESET();

++++++++++++++++
(apa16/apa16Curs.c)

*** /tmp/,RCSt1015539	Sat Oct 28 17:54:31 1989
--- /tmp/,RCSt2015539	Sat Oct 28 17:54:33 1989
***************
*** 221,230 ****
--- 221,232 ----
      if ( ibmScreenState(ibmCurrentScreen)!= SCREEN_ACTIVE) {
  	return;
      }
+ 
      APA16_GET_CMD(ROP_RECT_COPY,GXcopy,cmd);
      if (x<ibmCursorHotX(ibmCurrentScreen)) {
  	offset= ibmCursorHotX(ibmCurrentScreen)-x;
  	apa16ClearCursor(ACTIVE_CURSOR);
+ 	if (offset < CURSOR_WIDTH) {
  	    QUEUE_RESET();
  	    COPY_RECT(cmd, AND_EDGE(ACTIVE_CURSOR)-offset,  CURSOR_AREA_BOTTOM,
  		           AND_EDGE(currentCursor),	    CURSOR_AREA_BOTTOM,
***************
*** 232,237 ****
--- 234,240 ----
  	    COPY_RECT(cmd, XOR_EDGE(ACTIVE_CURSOR)-offset,  CURSOR_AREA_BOTTOM,
  		           XOR_EDGE(currentCursor),	    CURSOR_AREA_BOTTOM,
  		           CURSOR_WIDTH-offset,	    	    CURSOR_HEIGHT);
+ 	}
  	CURSOR_X= 0;
  	CURSOR_Y= y-ibmCursorHotY(ibmCurrentScreen);
  	obscured= TRUE;
***************
*** 239,244 ****
--- 242,248 ----
      else if (x>APA16_WIDTH-CURSOR_WIDTH+ibmCursorHotX(ibmCurrentScreen)) {
  	offset= x-APA16_WIDTH-ibmCursorHotX(ibmCurrentScreen)+CURSOR_WIDTH;
  	apa16ClearCursor(ACTIVE_CURSOR);
+ 	if (offset < CURSOR_WIDTH) {
  	    QUEUE_RESET();
  	    COPY_RECT(cmd, AND_EDGE(ACTIVE_CURSOR),    	    CURSOR_AREA_BOTTOM,
  		           AND_EDGE(currentCursor)-offset,  CURSOR_AREA_BOTTOM,
***************
*** 246,251 ****
--- 250,256 ----
  	    COPY_RECT(cmd, XOR_EDGE(ACTIVE_CURSOR),	    CURSOR_AREA_BOTTOM,
  		           XOR_EDGE(currentCursor)-offset,  CURSOR_AREA_BOTTOM,
  		           CURSOR_WIDTH-offset,		    CURSOR_HEIGHT);
+ 	}
  	CURSOR_X= APA16_WIDTH-48;
  	CURSOR_Y= y-ibmCursorHotY(ibmCurrentScreen);
  	obscured= TRUE;

++++++++++++++++

  --John Carr (jfc@athena.mit.edu)
    Project Athena Systems Development


