🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.sys.ibm.pc.rt
3 messages
3 total messages Started by Steven Parkes Tue, 09 Jan 1990 15:41
compiling X11R4 under AOS for mpel
#1850
Author: Steven Parkes
Date: Tue, 09 Jan 1990 15:41
12 lines
1135 bytes
Can anyone (ibm?) recommend the proper compilers to use in compiling
the server directory for AOS/mpel?  I tried a vanilla compile which does
everything as hc (2.1s) -O and the results seem less than wonderful --
specifically, magic (6.0 beta) causes the server to go off into the trees
by trying to draw some scrollbar glyphs manually using XDrawPoint().

I'm recompiling ppc now w/o -O and if that doesn't work I'll try
the mpel directory, but I would like to optimize as much as possible.

steven parkes ---------------------------------------
University of Illinois Coordinated Science Laboratory
steven@pacific.csl.uiuc.edu -------------------------
Re: compiling X11R4 under AOS for mpel
#1851
Author: John F Carr
Date: Tue, 09 Jan 1990 20:26
209 lines
6394 bytes
In article <1990Jan9.154135.13344@ux1.cso.uiuc.edu> steven@pacific.csl.uiuc.edu writes:
>Can anyone (ibm?) recommend the proper compilers to use in compiling
>the server directory for AOS/mpel?  I tried a vanilla compile which does
>everything as hc (2.1s) -O and the results seem less than wonderful --
>specifically, magic (6.0 beta) causes the server to go off into the trees
>by trying to draw some scrollbar glyphs manually using XDrawPoint().

I recently sent in a fix for this bug.

Subject: Fix for IBM Megapel PolyPoint
Date: Sat, 06 Jan 90 23:58:48 EST
From: John Carr <jfc@ATHENA.MIT.EDU>


VERSION:
	R4

CLIENT MACHINE and OPERATING SYSTEM:
	IBM RT, BSD 4.3

DISPLAY TYPE:
	IBM Megapel

WINDOW MANAGER:
	N/A

AREA:
	server

SYNOPSIS:
	Large poly point requests hang the server

DESCRIPTION:
	The X server does not verify that the size of a command
	sent to the megapel adapter is legal.  Poly point requests
	with 8K or more points are too large.  The server hangs in
	transmitting such a command because the adapter can not
	properly process it.

REPEAT BY:
	Run "xgc" and choose the points test.

SAMPLE FIX:

*** /afs/testers/src/x11r4/src/mit/server/ddx/ibm/mpel/mpelPolyPt.c	Thu Nov  9 22:52:22 1989
--- mpelPolyPt.c	Sat Jan  6 23:34:49 1990
***************
*** 52,57 ****
--- 52,60 ----
  extern int mpelCheckCursor() ;
  extern void mpelReplaceCursor() ;
  
+ /* The maximum number of points in a Polymarker request. */
+ #define MAXRQPTS	(32760 / sizeof(mpelPoint))
+ 
  void
  mpelPolyPoint( pDrawable, pGC, mode, npt, pptInit )
  DrawablePtr	pDrawable ;
***************
*** 65,74 ****
  	register RegionPtr pRegion = devPriv->pCompositeClip ;
  	int	cursor_saved ;
  
! 	TRACE( ("mpelPolyPoint(0x%x,0x%x,%d,%d,0x%x)\n",
! 		pDrawable, pGC, mode, npt, pptInit ) ) ;
  
! 	if ( pGC->alu == GXnoop || REGION_NIL(pRegion) )
  		return ;
  
  	if ( pDrawable->type == DRAWABLE_PIXMAP ) {
--- 68,78 ----
  	register RegionPtr pRegion = devPriv->pCompositeClip ;
  	int	cursor_saved ;
  
! 	TRACE( ("mpelPolyPoint(0x%x,0x%x,\"%s\",%d,0x%x)\n",
! 		pDrawable, pGC, (mode == CoordModePrevious) ?
! 		"Relative" : "Absolute", npt, pptInit));
  
! 	if ( pGC->alu == GXnoop || REGION_NIL(pRegion) || npt == 0)
  		return ;
  
  	if ( pDrawable->type == DRAWABLE_PIXMAP ) {
***************
*** 82,128 ****
  	 */
  	{
  	register const int xorg = pDrawable->x ;
! 	register const int yorg =
! 		( MPEL_HEIGHT - 1 ) - pDrawable->y ;
  	register int nptTmp = npt ;
! 	if ( mode == CoordModePrevious )
! 		for ( ppt = pptInit ; --nptTmp ; ) {
  			ppt++ ;
! 			ppt->x += (ppt-1)->x + xorg ;
! 			ppt->y = yorg - ( ppt->y + (ppt-1)->y ) ;
  		}
! 	else
  		for ( ppt = pptInit ; nptTmp-- ; ppt++ ) {
  			ppt->x += xorg ;
! 			ppt->y = yorg - ppt->y ;
  		}
  	}
! 
! 	{ /* Validate & Translate the point list */
! 		register int (* PointInRegion)() = 
! 			pDrawable->pScreen->PointInRegion ;
!         	register xPoint *mpt ; /* xPoint is the same as mpelPoint */
! 		BoxRec box ; /* Scratch Space */
! 
! 		/* NOTE: pGC->miTranslate is always TRUE in mpel */
! 		for ( ppt = pptInit ;
! 		      npt-- && (* PointInRegion)( pRegion, ppt->x,
! 						  MPEL_HEIGHT - 1 - ppt->y,
! 						  &box ) ;
! 		      ppt++ )
! 			/* Do Nothing */ ;
! 		if ( npt > 0 )
! 			{
! 			for ( mpt = ppt ; npt-- ; ppt++ )
! 				if ( (* PointInRegion)( pRegion, ppt->x,
! 							ppt->y, &box ) )
! 					*mpt++ = *ppt ;
  			}
- 
- 		if ( !( npt = mpt - pptInit) )
- 			return ;
- 
  	}
  	/* If Cursor Is In The Way Remove It */
  	cursor_saved = !mpelcursorSemaphore
  		&& mpelCheckCursor(
--- 86,133 ----
  	 */
  	{
  	register const int xorg = pDrawable->x;
! 	register const int yorg = pDrawable->y;
  	register int nptTmp = npt;
! 	register xPoint *mpt = pptInit;
! 	register int (* PointInRegion)() = pDrawable->pScreen->PointInRegion;
! 	BoxRec box;
! 
! 	if ( mode == CoordModePrevious ) {
! 		ppt = pptInit;
! 		ppt->x += xorg;
! 		ppt->y += yorg;
! 		if((* PointInRegion)( pRegion, ppt->x, ppt->y, &box)) {
! 			mpt->x = ppt->x;
! 			mpt->y = (MPEL_HEIGHT - 1) - ppt->y;
! 			mpt++;
! 		}
! 		while (--nptTmp) {
  			ppt++;
! 			ppt->x += xorg + (ppt-1)->x;
! 			ppt->y = yorg + ppt->y + (ppt-1)->y;
! 			if((* PointInRegion)( pRegion, ppt->x, ppt->y, &box)) {
! 				mpt->x = ppt->x;
! 				mpt->y = (MPEL_HEIGHT - 1) - ppt->y;
! 				mpt++;
  			}
! 		}
! 		npt = mpt - pptInit;
! 	} else {
  		for ( ppt = pptInit ; nptTmp-- ; ppt++ ) {
  			ppt->x += xorg;
! 			ppt->y += yorg;
! 			if((* PointInRegion)( pRegion, ppt->x, ppt->y, &box)) {
! 				mpt->x = ppt->x;
! 				mpt->y = (MPEL_HEIGHT - 1) - ppt->y;
! 				mpt++;
  			}
  		}
! 		npt = mpt - pptInit;
  	}
  	}
+ 	TRACE(("mpelPolyPoint: %d points\n", npt));
+ 	if(!npt)	/* Nothing to do */
+ 		return;
  	/* If Cursor Is In The Way Remove It */
  	cursor_saved = !mpelcursorSemaphore
  		&& mpelCheckCursor(
***************
*** 146,153 ****
  		MPELSetPolymarkerColor( pGC->fgPixel ) ;
  	}
  	MPELSetMarkerType( 1 ) ; /* Magic number for solid dots */
! 	MPELPolymarker( npt, pptInit ) ;
! 
  	if ( cursor_saved )
  		mpelReplaceCursor() ;
  
--- 151,164 ----
  		MPELSetPolymarkerColor( pGC->fgPixel ) ;
  	}
  	MPELSetMarkerType( 1 ) ; /* Magic number for solid dots */
! 	/* Break into bite-sized pieces */
! 	{
! 	  register int rem;
! 	  /* MPELPolymarker does not evaluate any of its arguments
! 	     more than once. */
! 	  for(rem = npt;rem > 0;rem -= MAXRQPTS, pptInit+=MAXRQPTS)
! 	    MPELPolymarker((rem>MAXRQPTS)?MAXRQPTS:rem, pptInit);
! 	}
  	if ( cursor_saved )
  		mpelReplaceCursor() ;
  


  --John Carr (jfc@athena.mit.edu)
  Project Athena Systems Development
Re: compiling X11R4 under AOS for mpel
#1852
Author: Scott Schwartz
Date: Wed, 10 Jan 1990 07:30
11 lines
1130 bytes
In article <1990Jan9.154135.13344@ux1.cso.uiuc.edu> steven@pacific.csl.uiuc.edu writes:
>Can anyone (ibm?) recommend the proper compilers to use in compiling
>the server directory for AOS/mpel?  I tried a vanilla compile which does
>everything as hc (2.1s) -O and the results seem less than wonderful --
>specifically, magic (6.0 beta) causes the server to go off into the trees
>by trying to draw some scrollbar glyphs manually using XDrawPoint().

Try with gcc, if you have it.  I don't have R4 in hand, yet, so I don't
know if this will win, but hc2.1s definately generates bad code, so you
probably can't do much worse.  (Yes, the codegeneration bugs have been
reported to IBM -- about three months ago.)
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads