Annotation of researchv9/X11/src/X.V11R1/server/ddx/v9sun/sunBW2.c, revision 1.1

1.1     ! root        1: /*-
        !             2:  * sunBW2.c --
        !             3:  *     Functions for handling the sun BWTWO board.
        !             4:  *
        !             5:  * Copyright (c) 1987 by the Regents of the University of California
        !             6:  * Copyright (c) 1987 by Adam de Boor, UC Berkeley
        !             7:  *
        !             8:  * Permission to use, copy, modify, and distribute this
        !             9:  * software and its documentation for any purpose and without
        !            10:  * fee is hereby granted, provided that the above copyright
        !            11:  * notice appear in all copies.  The University of California
        !            12:  * makes no representations about the suitability of this
        !            13:  * software for any purpose.  It is provided "as is" without
        !            14:  * express or implied warranty.
        !            15:  *
        !            16:  *
        !            17:  */
        !            18: 
        !            19: /************************************************************
        !            20: Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
        !            21: 
        !            22:                     All Rights Reserved
        !            23: 
        !            24: Permission  to  use,  copy,  modify,  and  distribute   this
        !            25: software  and  its documentation for any purpose and without
        !            26: fee is hereby granted, provided that the above copyright no-
        !            27: tice  appear  in all copies and that both that copyright no-
        !            28: tice and this permission notice appear in  supporting  docu-
        !            29: mentation,  and  that the names of Sun or MIT not be used in
        !            30: advertising or publicity pertaining to distribution  of  the
        !            31: software  without specific prior written permission. Sun and
        !            32: M.I.T. make no representations about the suitability of this
        !            33: software for any purpose. It is provided "as is" without any
        !            34: express or implied warranty.
        !            35: 
        !            36: SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO  THIS  SOFTWARE,
        !            37: INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
        !            38: NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE  LI-
        !            39: ABLE  FOR  ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
        !            40: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,  DATA  OR
        !            41: PROFITS,  WHETHER  IN  AN  ACTION OF CONTRACT, NEGLIGENCE OR
        !            42: OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
        !            43: THE USE OR PERFORMANCE OF THIS SOFTWARE.
        !            44: 
        !            45: ********************************************************/
        !            46: 
        !            47: 
        !            48: /*-
        !            49:  * Copyright (c) 1987 by Sun Microsystems,  Inc.
        !            50:  */
        !            51: 
        !            52: #include    "sun.h"
        !            53: #include    "resource.h"
        !            54: 
        !            55: #include    <sys/mman.h>
        !            56: 
        !            57: /*-
        !            58:  *-----------------------------------------------------------------------
        !            59:  * sunBW2SaveScreen --
        !            60:  *     Disable the video on the frame buffer to save the screen.
        !            61:  *
        !            62:  * Results:
        !            63:  *     None.
        !            64:  *
        !            65:  * Side Effects:
        !            66:  *     Video enable state changes.
        !            67:  *
        !            68:  *-----------------------------------------------------------------------
        !            69:  */
        !            70: static Bool
        !            71: sunBW2SaveScreen (pScreen, on)
        !            72:     ScreenPtr    pScreen;
        !            73:     Bool         on;
        !            74: {
        !            75:     int         state = on;
        !            76: 
        !            77:     switch (on) {
        !            78:     case SCREEN_SAVER_FORCER:
        !            79:        SetTimeSinceLastInputEvent();
        !            80:        screenSaved = FALSE;
        !            81: /*
        !            82:        state = FBVIDEO_ON;
        !            83: */
        !            84:        break;
        !            85:     case SCREEN_SAVER_OFF:
        !            86:        screenSaved = FALSE;
        !            87: /*
        !            88:        state = FBVIDEO_ON;
        !            89: */
        !            90:        break;
        !            91:     case SCREEN_SAVER_ON:
        !            92:     default:
        !            93:        screenSaved = TRUE;
        !            94: /*
        !            95:        state = FBVIDEO_OFF;
        !            96: */
        !            97:        break;
        !            98:     }
        !            99: /*
        !           100:     (void) ioctl(sunFbs[pScreen->myNum].fd, FBIOSVIDEO, &state);
        !           101: */
        !           102:     return TRUE;
        !           103: }
        !           104: 
        !           105: /*-
        !           106:  *-----------------------------------------------------------------------
        !           107:  * sunBW2CloseScreen --
        !           108:  *     called to ensure video is enabled when server exits.
        !           109:  *
        !           110:  * Results:
        !           111:  *     Screen is unsaved.
        !           112:  *
        !           113:  * Side Effects:
        !           114:  *     None
        !           115:  *
        !           116:  *-----------------------------------------------------------------------
        !           117:  */
        !           118: /*ARGSUSED*/
        !           119: static Bool
        !           120: sunBW2CloseScreen(i, pScreen)
        !           121:     int                i;
        !           122:     ScreenPtr  pScreen;
        !           123: {
        !           124:     return (pScreen->SaveScreen(pScreen, SCREEN_SAVER_OFF));
        !           125: }
        !           126: 
        !           127: /*-
        !           128:  *-----------------------------------------------------------------------
        !           129:  * sunBW2ResolveColor --
        !           130:  *     Resolve an RGB value into some sort of thing we can handle.
        !           131:  *     Just looks to see if the intensity of the color is greater than
        !           132:  *     1/2 and sets it to 'white' (all ones) if so and 'black' (all zeroes)
        !           133:  *     if not.
        !           134:  *
        !           135:  * Results:
        !           136:  *     *pred, *pgreen and *pblue are overwritten with the resolved color.
        !           137:  *
        !           138:  * Side Effects:
        !           139:  *     see above.
        !           140:  *
        !           141:  *-----------------------------------------------------------------------
        !           142:  */
        !           143: /*ARGSUSED*/
        !           144: static void
        !           145: sunBW2ResolveColor(pred, pgreen, pblue, pVisual)
        !           146:     unsigned short     *pred;
        !           147:     unsigned short     *pgreen;
        !           148:     unsigned short     *pblue;
        !           149:     VisualPtr          pVisual;
        !           150: {
        !           151:     /* 
        !           152:      * Gets intensity from RGB.  If intensity is >= half, pick white, else
        !           153:      * pick black.  This may well be more trouble than it's worth.
        !           154:      */
        !           155:     *pred = *pgreen = *pblue = 
        !           156:         (((39L * *pred +
        !           157:            50L * *pgreen +
        !           158:            11L * *pblue) >> 8) >= (((1<<8)-1)*50)) ? ~0 : 0;
        !           159: }
        !           160: 
        !           161: /*-
        !           162:  *-----------------------------------------------------------------------
        !           163:  * sunBW2CreateColormap --
        !           164:  *     create a bw colormap
        !           165:  *
        !           166:  * Results:
        !           167:  *     None
        !           168:  *
        !           169:  * Side Effects:
        !           170:  *     allocate two pixels
        !           171:  *
        !           172:  *-----------------------------------------------------------------------
        !           173:  */
        !           174: void
        !           175: sunBW2CreateColormap(pmap)
        !           176:     ColormapPtr        pmap;
        !           177: {
        !           178:     int        red, green, blue, pix;
        !           179: 
        !           180:     /* this is a monochrome colormap, it only has two entries, just fill
        !           181:      * them in by hand.  If it were a more complex static map, it would be
        !           182:      * worth writing a for loop or three to initialize it */
        !           183: 
        !           184:     /* this will be pixel 0 */
        !           185:     red = green = blue = ~0;
        !           186:     AllocColor(pmap, &red, &green, &blue, &pix, 0);
        !           187: 
        !           188:     /* this will be pixel 1 */
        !           189:     red = green = blue = 0;
        !           190:     AllocColor(pmap, &red, &green, &blue, &pix, 0);
        !           191: 
        !           192: }
        !           193: 
        !           194: /*-
        !           195:  *-----------------------------------------------------------------------
        !           196:  * sunBW2DestroyColormap --
        !           197:  *     destroy a bw colormap
        !           198:  *
        !           199:  * Results:
        !           200:  *     None
        !           201:  *
        !           202:  * Side Effects:
        !           203:  *     None
        !           204:  *
        !           205:  *-----------------------------------------------------------------------
        !           206:  */
        !           207: /*ARGSUSED*/
        !           208: void
        !           209: sunBW2DestroyColormap(pmap)
        !           210:     ColormapPtr        pmap;
        !           211: {
        !           212: }
        !           213: 
        !           214: /*-
        !           215:  *-----------------------------------------------------------------------
        !           216:  * sunBW2Init --
        !           217:  *     Attempt to find and initialize a bw2 framebuffer
        !           218:  *
        !           219:  * Results:
        !           220:  *     None
        !           221:  *
        !           222:  * Side Effects:
        !           223:  *     Most of the elements of the ScreenRec are filled in.  The
        !           224:  *     video is enabled for the frame buffer...
        !           225:  *
        !           226:  *-----------------------------------------------------------------------
        !           227:  */
        !           228: /*ARGSUSED*/
        !           229: static Bool
        !           230: sunBW2Init (index, pScreen, argc, argv)
        !           231:     int                  index;        /* The index of pScreen in the ScreenInfo */
        !           232:     ScreenPtr    pScreen;      /* The Screen to initialize */
        !           233:     int                  argc;         /* The number of the Server's arguments. */
        !           234:     char         **argv;       /* The arguments themselves. Don't change! */
        !           235: {
        !           236:     ColormapPtr pColormap;
        !           237: 
        !           238:     if (!mfbScreenInit(index, pScreen,
        !           239:                           sunFbs[index].fb,
        !           240:                           sunFbs[index].info.fb_width,
        !           241:                           sunFbs[index].info.fb_height, 90, 90))
        !           242:        return (FALSE);
        !           243: 
        !           244:     pScreen->SaveScreen = sunBW2SaveScreen;
        !           245:     pScreen->RealizeCursor = sunRealizeCursor;
        !           246:     pScreen->UnrealizeCursor = sunUnrealizeCursor;
        !           247:     pScreen->DisplayCursor = sunDisplayCursor;
        !           248:     pScreen->SetCursorPosition = sunSetCursorPosition;
        !           249:     pScreen->CursorLimits = sunCursorLimits;
        !           250:     pScreen->PointerNonInterestBox = sunPointerNonInterestBox;
        !           251:     pScreen->ConstrainCursor = sunConstrainCursor;
        !           252:     pScreen->RecolorCursor = sunRecolorCursor;
        !           253:     pScreen->ResolveColor = sunBW2ResolveColor;
        !           254:     pScreen->CreateColormap = sunBW2CreateColormap;
        !           255:     pScreen->DestroyColormap = sunBW2DestroyColormap;
        !           256:     pScreen->RegionCreate = miRegionCreate;
        !           257:     pScreen->RegionCopy = miRegionCopy;
        !           258:     pScreen->RegionDestroy = miRegionDestroy;
        !           259:     pScreen->Intersect = miIntersect;
        !           260:     pScreen->Inverse = miInverse;
        !           261:     pScreen->Union = miUnion;
        !           262:     pScreen->Subtract = miSubtract;
        !           263:     pScreen->RegionReset = miRegionReset;
        !           264:     pScreen->TranslateRegion = miTranslateRegion;
        !           265:     pScreen->RectIn = miRectIn;
        !           266:     pScreen->PointInRegion = miPointInRegion;
        !           267:     pScreen->whitePixel = 0;
        !           268:     pScreen->blackPixel = 1;
        !           269: 
        !           270:     if (CreateColormap(pScreen->defColormap, pScreen,
        !           271:                   LookupID(pScreen->rootVisual, RT_VISUALID, RC_CORE),
        !           272:                   &pColormap, AllocNone, 0) != Success
        !           273:        || pColormap == NULL)
        !           274:            FatalError("Can't create colormap in sunBW2Init()\n");
        !           275:     mfbInstallColormap(pColormap);
        !           276: 
        !           277:     /*
        !           278:      * Enable video output...? 
        !           279:      */
        !           280:     (void) sunBW2SaveScreen(pScreen, SCREEN_SAVER_FORCER);
        !           281: 
        !           282:     sunScreenInit(pScreen);
        !           283:     return (TRUE);
        !           284: 
        !           285: }
        !           286: 
        !           287: /*-
        !           288:  *-----------------------------------------------------------------------
        !           289:  * sunBW2Probe --
        !           290:  *     Attempt to find and initialize a bw2 framebuffer
        !           291:  *
        !           292:  * Results:
        !           293:  *     None
        !           294:  *
        !           295:  * Side Effects:
        !           296:  *     Memory is allocated for the frame buffer and the buffer is mapped. 
        !           297:  *
        !           298:  *-----------------------------------------------------------------------
        !           299:  */
        !           300: 
        !           301: Bool
        !           302: sunBW2Probe(pScreenInfo, index, fbNum, argc, argv)
        !           303:     ScreenInfo   *pScreenInfo; /* The screenInfo struct */
        !           304:     int                  index;        /* The index of pScreen in the ScreenInfo */
        !           305:     int                  fbNum;        /* Index into the sunFbData array */
        !           306:     int                  argc;         /* The number of the Server's arguments. */
        !           307:     char         **argv;       /* The arguments themselves. Don't change! */
        !           308: {
        !           309:     int         i, oldNumScreens;
        !           310: 
        !           311:     if (sunFbData[fbNum].probeStatus == probedAndFailed) {
        !           312:        return FALSE;
        !           313:     }
        !           314: 
        !           315:     if (sunFbData[fbNum].probeStatus == neverProbed) {
        !           316:        int         fd;
        !           317:        struct fbtype fbType;
        !           318:        char *bitmap = (char *)NULL;
        !           319:        char *valloc();
        !           320: 
        !           321:        if ((fd = sunOpenFrameBuffer(FBTYPE_SUN2BW, &fbType, index, fbNum,
        !           322:                                     argc, argv)) < 0) {
        !           323:            sunFbData[fbNum].probeStatus = probedAndFailed;
        !           324:            return FALSE;
        !           325:        }
        !           326: 
        !           327:         bitmap = valloc(fbType.fb_size);
        !           328:        if (bitmap == (char *) NULL) {
        !           329:            ErrorF("Could not allocate room for frame buffer.\n");
        !           330:            sunFbData[fbNum].probeStatus = probedAndFailed;
        !           331:            (void) close(fd);
        !           332:            return FALSE;
        !           333:        }
        !           334:        if (mmap(bitmap, fbType.fb_size, PROT_READ|PROT_WRITE, fd, 0) < 0) {
        !           335:            ErrorF("Mapping bw2");
        !           336:            sunFbData[fbNum].probeStatus = probedAndFailed;
        !           337:            (void) close(fd);
        !           338:            return FALSE;
        !           339:        }
        !           340: 
        !           341:        sunFbs[index].fb = (pointer) bitmap;
        !           342:        sunFbs[index].fd = fd;
        !           343:        sunFbs[index].info = fbType;
        !           344:         sunFbs[index].EnterLeave = NoopDDA;
        !           345:        sunFbData[fbNum].probeStatus = probedAndSucceeded;
        !           346: 
        !           347:     }
        !           348: 
        !           349:     /*
        !           350:      * If we've ever successfully probed this device, do the following.
        !           351:      */
        !           352:     oldNumScreens = pScreenInfo->numScreens;
        !           353:     i = AddScreen(sunBW2Init, argc, argv);
        !           354:     pScreenInfo->screen[index].CloseScreen = sunBW2CloseScreen;
        !           355:     return (i > oldNumScreens);
        !           356: }
        !           357: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.