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

1.1     ! root        1: /*-
        !             2:  * sunInit.c --
        !             3:  *     Initialization functions for screen/keyboard/mouse, etc.
        !             4:  *
        !             5:  * Copyright (c) 1987 by the Regents of the University of California
        !             6:  *
        !             7:  * Permission to use, copy, modify, and distribute this
        !             8:  * software and its documentation for any purpose and without
        !             9:  * fee is hereby granted, provided that the above copyright
        !            10:  * notice appear in all copies.  The University of California
        !            11:  * makes no representations about the suitability of this
        !            12:  * software for any purpose.  It is provided "as is" without
        !            13:  * express or implied warranty.
        !            14:  *
        !            15:  *
        !            16:  */
        !            17: 
        !            18: /************************************************************
        !            19: Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA.
        !            20: 
        !            21:                     All Rights Reserved
        !            22: 
        !            23: Permission  to  use,  copy,  modify,  and  distribute   this
        !            24: software  and  its documentation for any purpose and without
        !            25: fee is hereby granted, provided that the above copyright no-
        !            26: tice  appear  in all copies and that both that copyright no-
        !            27: tice and this permission notice appear in  supporting  docu-
        !            28: mentation,  and  that the names of Sun or MIT not be used in
        !            29: advertising or publicity pertaining to distribution  of  the
        !            30: software  without specific prior written permission. Sun and
        !            31: M.I.T. make no representations about the suitability of this
        !            32: software for any purpose. It is provided "as is" without any
        !            33: express or implied warranty.
        !            34: 
        !            35: SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO  THIS  SOFTWARE,
        !            36: INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
        !            37: NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE  LI-
        !            38: ABLE  FOR  ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
        !            39: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,  DATA  OR
        !            40: PROFITS,  WHETHER  IN  AN  ACTION OF CONTRACT, NEGLIGENCE OR
        !            41: OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
        !            42: THE USE OR PERFORMANCE OF THIS SOFTWARE.
        !            43: 
        !            44: ********************************************************/
        !            45: 
        !            46: #ifndef        lint
        !            47: static char sccsid[] = "%W %G Copyright 1987 Sun Micro";
        !            48: #endif
        !            49: 
        !            50: #include    "sun.h"
        !            51: #include    <servermd.h>
        !            52: #include    "dixstruct.h"
        !            53: #include    "dix.h"
        !            54: #include    "opaque.h"
        !            55: 
        !            56: extern int sunMouseProc();
        !            57: extern void sunKbdProc();
        !            58: extern Bool sunBW2Probe();
        !            59: 
        !            60: extern void SetInputCheck();
        !            61: extern GCPtr CreateScratchGC();
        !            62: 
        !            63:        /* What should this *really* be? */
        !            64: #define MOTION_BUFFER_SIZE 0
        !            65: 
        !            66: sunFbDataRec sunFbData[] = {
        !            67:     sunBW2Probe,       "/dev/bwtwo0",      neverProbed,
        !            68: };
        !            69: 
        !            70: /*
        !            71:  * NUMSCREENS is the number of supported frame buffers (i.e. the number of
        !            72:  * structures in sunFbData which have an actual probeProc).
        !            73:  */
        !            74: #define NUMSCREENS (sizeof(sunFbData)/sizeof(sunFbData[0]))
        !            75: 
        !            76: fbFd   sunFbs[NUMSCREENS];  /* Space for descriptors of open frame buffers */
        !            77: 
        !            78: static PixmapFormatRec formats[] = {
        !            79:     1, 1, BITMAP_SCANLINE_PAD, /* 1-bit deep */
        !            80: };
        !            81: #define NUMFORMATS     (sizeof formats)/(sizeof formats[0])
        !            82: 
        !            83: /*-
        !            84:  *-----------------------------------------------------------------------
        !            85:  * InitOutput --
        !            86:  *     Initialize screenInfo for all actually accessible framebuffers.
        !            87:  *     The
        !            88:  *
        !            89:  * Results:
        !            90:  *     screenInfo init proc field set
        !            91:  *
        !            92:  * Side Effects:
        !            93:  *     None
        !            94:  *
        !            95:  *-----------------------------------------------------------------------
        !            96:  */
        !            97: 
        !            98: InitOutput(pScreenInfo, argc, argv)
        !            99:     ScreenInfo           *pScreenInfo;
        !           100:     int          argc;
        !           101:     char         **argv;
        !           102: {
        !           103:     int          i, index, ac = argc;
        !           104: 
        !           105:     pScreenInfo->imageByteOrder = IMAGE_BYTE_ORDER;
        !           106:     pScreenInfo->bitmapScanlineUnit = BITMAP_SCANLINE_UNIT;
        !           107:     pScreenInfo->bitmapScanlinePad = BITMAP_SCANLINE_PAD;
        !           108:     pScreenInfo->bitmapBitOrder = BITMAP_BIT_ORDER;
        !           109: 
        !           110:     pScreenInfo->numPixmapFormats = NUMFORMATS;
        !           111:     for (i=0; i< NUMFORMATS; i++)
        !           112:     {
        !           113:         pScreenInfo->formats[i] = formats[i];
        !           114:     }
        !           115: 
        !           116:     for (i = 0, index = 0; i < NUMSCREENS; i++) {
        !           117:        if ((* sunFbData[i].probeProc) (pScreenInfo, index, i, argc, argv)) {
        !           118:            /* This display exists OK */
        !           119:            index++;
        !           120:        } else {
        !           121:            /* This display can't be opened */
        !           122:            ;
        !           123:        }
        !           124:     }
        !           125:     if (index == 0)
        !           126:        FatalError("Can't find any displays\n");
        !           127: 
        !           128:     pScreenInfo->numScreens = index;
        !           129: 
        !           130:     sunInitCursor();
        !           131: }
        !           132: 
        !           133: /*-
        !           134:  *-----------------------------------------------------------------------
        !           135:  * InitInput --
        !           136:  *     Initialize all supported input devices...what else is there
        !           137:  *     besides pointer and keyboard?
        !           138:  *
        !           139:  * Results:
        !           140:  *     None.
        !           141:  *
        !           142:  * Side Effects:
        !           143:  *     Two DeviceRec's are allocated and registered as the system pointer
        !           144:  *     and keyboard devices.
        !           145:  *
        !           146:  *-----------------------------------------------------------------------
        !           147:  */
        !           148: /*ARGSUSED*/
        !           149: InitInput(argc, argv)
        !           150:     int          argc;
        !           151:     char         **argv;
        !           152: {
        !           153:     DevicePtr p, k;
        !           154:     static int  zero = 0;
        !           155:     
        !           156:     p = AddInputDevice(sunMouseProc, TRUE);
        !           157:     k = AddInputDevice(sunKbdProc, TRUE);
        !           158: 
        !           159:     RegisterPointerDevice(p, MOTION_BUFFER_SIZE);
        !           160:     RegisterKeyboardDevice(k);
        !           161: 
        !           162:     SetInputCheck (&zero, &isItTimeToYield);
        !           163: }
        !           164: 
        !           165: /*-
        !           166:  *-----------------------------------------------------------------------
        !           167:  * sunQueryBestSize --
        !           168:  *     Supposed to hint about good sizes for things.
        !           169:  *
        !           170:  * Results:
        !           171:  *     Perhaps change *pwidth (Height irrelevant)
        !           172:  *
        !           173:  * Side Effects:
        !           174:  *     None.
        !           175:  *
        !           176:  *-----------------------------------------------------------------------
        !           177:  */
        !           178: /*ARGSUSED*/
        !           179: void
        !           180: sunQueryBestSize(class, pwidth, pheight)
        !           181: int class;
        !           182: short *pwidth;
        !           183: short *pheight;
        !           184: {
        !           185:     unsigned width, test;
        !           186: 
        !           187:     switch(class)
        !           188:     {
        !           189:       case CursorShape:
        !           190:       case TileShape:
        !           191:       case StippleShape:
        !           192:          width = *pwidth;
        !           193:          if (width > 0) {
        !           194:              /* Return the closes power of two not less than what they gave me */
        !           195:              test = 0x80000000;
        !           196:              /* Find the highest 1 bit in the width given */
        !           197:              while(!(test & width))
        !           198:                 test >>= 1;
        !           199:              /* If their number is greater than that, bump up to the next
        !           200:               *  power of two */
        !           201:              if((test - 1) & width)
        !           202:                 test <<= 1;
        !           203:              *pwidth = test;
        !           204:          }
        !           205:          /* We don't care what height they use */
        !           206:          break;
        !           207:     }
        !           208: }
        !           209: 
        !           210: /*-
        !           211:  *-----------------------------------------------------------------------
        !           212:  * sunScreenInit --
        !           213:  *     Things which must be done for all types of frame buffers...
        !           214:  *     Should be called last of all.
        !           215:  *
        !           216:  * Results:
        !           217:  *     None.
        !           218:  *
        !           219:  * Side Effects:
        !           220:  *     The graphics context for the screen is created. The CreateGC,
        !           221:  *     CreateWindow and ChangeWindowAttributes vectors are changed in
        !           222:  *     the screen structure.
        !           223:  *
        !           224:  *     Both a BlockHandler and a WakeupHandler are installed for the
        !           225:  *     first screen.  Together, these handlers implement autorepeat
        !           226:  *     keystrokes on the Sun.
        !           227:  *
        !           228:  *-----------------------------------------------------------------------
        !           229:  */
        !           230: void
        !           231: sunScreenInit (pScreen)
        !           232:     ScreenPtr    pScreen;
        !           233: {
        !           234:     fbFd         *fb;
        !           235:     DrawablePtr          pDrawable;
        !           236:  
        !           237:     fb = &sunFbs[pScreen->myNum];
        !           238: 
        !           239:     /*
        !           240:      * Prepare the GC for cursor functions on this screen.
        !           241:      * Do this before setting interceptions to avoid looping when
        !           242:      * putting down the cursor...
        !           243:      */
        !           244:     pDrawable = (DrawablePtr)(pScreen->devPrivate);
        !           245: 
        !           246:     fb->pGC = CreateScratchGC (pDrawable->pScreen, pDrawable->depth);
        !           247: 
        !           248:     /*
        !           249:      * By setting graphicsExposures false, we prevent any expose events
        !           250:      * from being generated in the CopyArea requests used by the cursor
        !           251:      * routines.
        !           252:      */
        !           253:     fb->pGC->graphicsExposures = FALSE;
        !           254: 
        !           255:     /*
        !           256:      * Preserve the "regular" functions
        !           257:      */
        !           258:     fb->CreateGC =                     pScreen->CreateGC;
        !           259:     fb->CreateWindow =                         pScreen->CreateWindow;
        !           260:     fb->ChangeWindowAttributes =       pScreen->ChangeWindowAttributes;
        !           261:     fb->GetImage =                     pScreen->GetImage;
        !           262:     fb->GetSpans =                     pScreen->GetSpans;
        !           263: 
        !           264:     /*
        !           265:      * Interceptions
        !           266:      */
        !           267:     pScreen->CreateGC =                        sunCreateGC;
        !           268:     pScreen->CreateWindow =            sunCreateWindow;
        !           269:     pScreen->ChangeWindowAttributes =  sunChangeWindowAttributes;
        !           270:     pScreen->QueryBestSize =           sunQueryBestSize;
        !           271:     pScreen->GetImage =                        sunGetImage;
        !           272:     pScreen->GetSpans =                        sunGetSpans;
        !           273: 
        !           274:     /*
        !           275:      * Cursor functions
        !           276:      */
        !           277:     pScreen->RealizeCursor =           sunRealizeCursor;
        !           278:     pScreen->UnrealizeCursor =         sunUnrealizeCursor;
        !           279:     pScreen->DisplayCursor =           sunDisplayCursor;
        !           280:     pScreen->SetCursorPosition =       sunSetCursorPosition;
        !           281:     pScreen->CursorLimits =            sunCursorLimits;
        !           282:     pScreen->PointerNonInterestBox =   sunPointerNonInterestBox;
        !           283:     pScreen->ConstrainCursor =                 sunConstrainCursor;
        !           284:     pScreen->RecolorCursor =           sunRecolorCursor;
        !           285: 
        !           286: }
        !           287: 
        !           288: /*-
        !           289:  *-----------------------------------------------------------------------
        !           290:  * sunOpenFrameBuffer --
        !           291:  *     Open a frame buffer.
        !           292:  *
        !           293:  * Results:
        !           294:  *     The fd of the framebuffer.
        !           295:  *
        !           296:  * Side Effects:
        !           297:  *
        !           298:  *-----------------------------------------------------------------------
        !           299:  */
        !           300: int
        !           301: sunOpenFrameBuffer(expect, pfbType, index, fbNum, argc, argv)
        !           302:     int                  expect;       /* The expected type of framebuffer */
        !           303:     struct fbtype *pfbType;    /* Place to store the fb info */
        !           304:     int                  fbNum;        /* Index into the sunFbData array */
        !           305:     int                  index;        /* Screen index */
        !           306:     int                  argc;         /* Command-line arguments... */
        !           307:     char         **argv;       /* ... */
        !           308: {
        !           309:     char                 *name;
        !           310:     int           fd = -1;             /* Descriptor to device */
        !           311: 
        !           312:        name = "/dev/fb";
        !           313:        fd = open(name, 2);
        !           314:         if (fd < 0) {
        !           315:            return (-1);
        !           316:        } 
        !           317:        if (ioctl(fd, FBIOGTYPE, pfbType) < 0) {
        !           318:            perror("sunOpenFrameBuffer");
        !           319:            (void) close(fd);
        !           320:            return (-1);
        !           321:        }
        !           322:        if (pfbType->fb_type != expect) {
        !           323:            (void) close(fd);
        !           324:            return (-1);
        !           325:        }
        !           326:        return (fd);
        !           327: }

unix.superglobalmegacorp.com

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