steve@lia (Stephen Williams) (04/14/91)
... This shar contains patches necessary to make Xsun correctly search for frame buffers on 4.1.1 UNIX. I discovered the problem on an IPC, so I called it an IPC bug. Is it possible to get this patch into the next release of X11? This patch includes a new file as well as patches to existing files. To apply this patch, cd to the mit directory of your X source, then run the following shar file through sh. This will create the new file, and leave a patch file, patch.ipc-bug. Then, execute patch < patch.ipc-bug. --Steve #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of shell archive." # Contents: server/ddx/sun/sunFB.c patch.ipc-bug # Wrapped by steve@ararat on Tue Apr 9 18:27:14 1991 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f server/ddx/sun/sunFB.c -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"server/ddx/sun/sunFB.c\" else echo shar: Extracting \"server/ddx/sun/sunFB.c\" \(1096 characters\) sed "s/^X//" >server/ddx/sun/sunFB.c <<'END_OF_server/ddx/sun/sunFB.c' X X/* X * This file is a new one to support CORRECT behavior X * of the Xsun server. The idea here is that the probe X * routine simply decides if /dev/fb is needed and available. X * If it is (on both counts) then slip in the correct create X * routine and go. X */ X X X# include "sun.h" X Xextern Bool sunBW2Probe(), sunBW2Create(); X X X/* X * This is the probe for the "/dev/fb" device. This device X * should only be used if there are no other devices. It X * is a device of last resort. X */ XBool XsunDefaultProbe(pScreenInfo, index, fbNum, argc, argv) X ScreenInfo *pScreenInfo; /* The screenInfo struct */ X int index; /* The index of pScreen in the ScreenInfo */ X int fbNum; /* Index into the sunFbData array */ X int argc; /* The number of the Server's arguments. */ X char **argv; /* The arguments themselves. Don't change! */ X{ X X if ( index > 0 ) return FALSE; X X X /* XXXX For no really good reason, pretend this is a BWTWO device */ X X sunFbData[fbNum] . createProc = sunBW2Create; X X return sunBW2Probe(pScreenInfo, index, fbNum, argc, argv); X} END_OF_server/ddx/sun/sunFB.c if test 1096 -ne `wc -c <server/ddx/sun/sunFB.c`; then echo shar: \"server/ddx/sun/sunFB.c\" unpacked with wrong size! fi # end of overwriting check fi if test -f patch.ipc-bug -a "${1}" != "-c" ; then echo shar: Will not over-write existing file \"patch.ipc-bug\" else echo shar: Extracting \"patch.ipc-bug\" \(5685 characters\) sed "s/^X//" >patch.ipc-bug <<'END_OF_patch.ipc-bug' X*** /X/mit/server/ddx/sun/Imakefile Tue Apr 9 15:49:34 1991 X--- server/ddx/sun/Imakefile Mon Apr 8 18:45:00 1991 X*************** X*** 3,8 **** X--- 3,9 ---- X SRCS1 = \ X sunInit.c \ X sunBW2.c \ X+ sunFB.c \ X sunCursor.c \ X sunIo.c \ X sunKbd.c \ X*************** X*** 21,26 **** X--- 22,28 ---- X X OBJS = \ X sunBW2.o \ X+ sunFB.o \ X sunCursor.o \ X sunIo.o \ X sunKbd.o \ X*** /X/mit/server/ddx/sun/sunInit.c Tue Apr 9 15:49:31 1991 X--- server/ddx/sun/sunInit.c Mon Apr 8 18:43:45 1991 X*************** X*** 60,65 **** X--- 60,66 ---- X extern Bool sunCG2CProbe(), sunCG2CCreate(); X extern Bool sunCG3CProbe(), sunCG3CCreate(); X extern Bool sunCG4CProbe(), sunCG4CCreate(); X+ extern Bool sunDefaultProbe(); X #ifdef FBTYPE_SUNFAST_COLOR /* doesn't exist in sunos3.x */ X extern Bool sunCG6CProbe(), sunCG6CCreate(); X #endif X*************** X*** 105,110 **** X--- 106,112 ---- X X sunFbDataRec sunFbData[] = { X sunBW2Probe, "/dev/bwtwo0", sunBW2Create, X+ sunBW2Probe, "/dev/bwtwo1", sunBW2Create, X sunCG2CProbe, "/dev/cgtwo0", sunCG2CCreate, X sunCG3CProbe, "/dev/cgthree0", sunCG3CCreate, X #ifdef FBTYPE_SUNFAST_COLOR X*************** X*** 111,117 **** X sunCG6CProbe, "/dev/cgsix0", sunCG6CCreate, X #endif X sunCG4CProbe, "/dev/cgfour0", sunCG4CCreate, X! sunBW2Probe, "/dev/bwtwo0", sunBW2Create, X }; X X /* X--- 113,119 ---- X sunCG6CProbe, "/dev/cgsix0", sunCG6CCreate, X #endif X sunCG4CProbe, "/dev/cgfour0", sunCG4CCreate, X! sunDefaultProbe, "/dev/fb", 0, X }; X X /* X*************** X*** 119,125 **** X * structures in sunFbData which have an actual probeProc). X */ X #define NUMSCREENS (sizeof(sunFbData)/sizeof(sunFbData[0])) X! #define NUMDEVICES 2 X X fbFd sunFbs[NUMDEVICES]; X X--- 121,127 ---- X * structures in sunFbData which have an actual probeProc). X */ X #define NUMSCREENS (sizeof(sunFbData)/sizeof(sunFbData[0])) X! #define NUMDEVICES 5 X X fbFd sunFbs[NUMDEVICES]; X X*************** X*** 177,183 **** X int i, n, dev; X int nonBlockConsole = 1; X static int setup_on_exit = 0; X- int devStart = 1; X X if (!monitorResolution) X monitorResolution = 90; X--- 179,184 ---- X*************** X*** 185,191 **** X if (!strcmp(argv[i],"-debug")) X nonBlockConsole = 0; X else if (!strcmp(argv[i],"-mono")) X! devStart = 0; X } X /* X * Writes to /dev/console can block - causing an X--- 186,192 ---- X if (!strcmp(argv[i],"-debug")) X nonBlockConsole = 0; X else if (!strcmp(argv[i],"-mono")) X! ErrorF("InitOutput: -mono switch temporarily out of service\n"); X } X /* X * Writes to /dev/console can block - causing an X*************** X*** 220,226 **** X if (!sunDevsProbed) X { X n = 0; X! for (i = NUMSCREENS, dev = devStart; --i > 0; dev++) { X if ((*sunFbData[dev].probeProc)(pScreenInfo, n, dev, argc, argv)) X n++; X else X--- 221,227 ---- X if (!sunDevsProbed) X { X n = 0; X! for (dev = 0; dev < NUMSCREENS; dev+=1) { X if ((*sunFbData[dev].probeProc)(pScreenInfo, n, dev, argc, argv)) X n++; X else X*************** X*** 229,238 **** X sunDevsProbed = TRUE; X if (n == 0) X return; X } X if (!sunSupportsDepth8) X pScreenInfo->numPixmapFormats--; X! for (i = NUMSCREENS, dev = devStart; --i > 0; dev++) { X if (sunFbData[dev].createProc) X (*sunFbData[dev].createProc)(pScreenInfo, argc, argv); X } X--- 230,240 ---- X sunDevsProbed = TRUE; X if (n == 0) X return; X+ X } X if (!sunSupportsDepth8) X pScreenInfo->numPixmapFormats--; X! for (dev = 0; dev < NUMSCREENS; dev+=1) { X if (sunFbData[dev].createProc) X (*sunFbData[dev].createProc)(pScreenInfo, argc, argv); X } X*************** X*** 405,412 **** X char *name=(char *)0; X int i; /* Index into argument list */ X int fd = -1; /* Descriptor to device */ X- static int devFbUsed=FALSE; /* true if /dev/fb has been used for a */ X- /* screen already */ X static Bool inited = FALSE; X static char *xdevice; /* string of devices to use from environ */ X static char *devsw; /* string of devices from args */ X--- 407,412 ---- X*************** X*** 472,484 **** X name = sunFbData[fbNum].devName; X } X X- /* X- * If we still have nothing and have yet to use "/dev/fb" for X- * a screen, default the name to be "/dev/fb" X- */ X- if (devsw == (char *)NULL && name == (char *)NULL && !devFbUsed) { X- name = "/dev/fb"; X- } X X X if (name != (char *) NULL && sunUseSunWindows()) { X--- 472,477 ---- X*************** X*** 683,691 **** X } X } X X- if (name && strcmp (name, "/dev/fb") == 0) { X- devFbUsed = TRUE; X- } X X return (fd); X } X--- 676,681 ---- X*** /X/mit/server/ddx/sun/sunBW2.c Tue Apr 9 15:49:36 1991 X--- server/ddx/sun/sunBW2.c Mon Apr 8 18:42:20 1991 X*************** X*** 256,266 **** X int argc; X char **argv; X { X! if (sunGeneration != serverGeneration) X { X sunBW2ScreenIndex = AllocateScreenPrivateIndex(); X if (sunBW2ScreenIndex < 0) X return FALSE; X } X return (AddScreen(sunBW2Init, argc, argv) >= 0); X } X--- 256,269 ---- X int argc; X char **argv; X { X! static int getScreenGeneration = 0; X! if ( getScreenGeneration != serverGeneration ) X { X sunBW2ScreenIndex = AllocateScreenPrivateIndex(); X if (sunBW2ScreenIndex < 0) X return FALSE; X+ X+ getScreenGeneration = serverGeneration; X } X return (AddScreen(sunBW2Init, argc, argv) >= 0); X } END_OF_patch.ipc-bug if test 5685 -ne `wc -c <patch.ipc-bug`; then echo shar: \"patch.ipc-bug\" unpacked with wrong size! fi # end of overwriting check fi echo shar: End of shell archive. exit 0