Annotation of researchv9/X11/src/X.V11R1/server/ddx/v9sun/sunBW2.c, revision 1.1.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.