Annotation of researchv9/X11/src/X.V11R1/server/dix/dixutils.c, revision 1.1

1.1     ! root        1: /***********************************************************
        !             2: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
        !             3: and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
        !             4: 
        !             5:                         All Rights Reserved
        !             6: 
        !             7: Permission to use, copy, modify, and distribute this software and its 
        !             8: documentation for any purpose and without fee is hereby granted, 
        !             9: provided that the above copyright notice appear in all copies and that
        !            10: both that copyright notice and this permission notice appear in 
        !            11: supporting documentation, and that the names of Digital or MIT not be
        !            12: used in advertising or publicity pertaining to distribution of the
        !            13: software without specific, written prior permission.  
        !            14: 
        !            15: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
        !            16: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
        !            17: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
        !            18: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
        !            19: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
        !            20: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
        !            21: SOFTWARE.
        !            22: 
        !            23: ******************************************************************/
        !            24: 
        !            25: 
        !            26: /* $Header: dixutils.c,v 1.23 87/09/11 17:56:56 sun Exp $ */
        !            27: 
        !            28: #include "X.h"
        !            29: #include "Xmd.h"
        !            30: #include "misc.h"
        !            31: #include "window.h"
        !            32: #include "dixstruct.h"
        !            33: #include "pixmapstr.h"
        !            34: #include "scrnintstr.h"
        !            35: 
        !            36: 
        !            37: /*
        !            38:  * CompareTimeStamps returns -1, 0, or +1 depending on if the first
        !            39:  * argument is less than, equal to or greater than the second argument.
        !            40:  */
        !            41: 
        !            42: int
        !            43: CompareTimeStamps(a, b)
        !            44:     TimeStamp a, b;
        !            45: {
        !            46:     if (a.months < b.months)
        !            47:        return EARLIER;
        !            48:     if (a.months > b.months)
        !            49:        return LATER;
        !            50:     if (a.milliseconds < b.milliseconds)
        !            51:        return EARLIER;
        !            52:     if (a.milliseconds > b.milliseconds)
        !            53:        return LATER;
        !            54:     return SAMETIME;
        !            55: }
        !            56: 
        !            57: /*
        !            58:  * convert client times to server TimeStamps
        !            59:  */
        !            60: 
        !            61: #define HALFMONTH ((unsigned long) 1<<31)
        !            62: TimeStamp
        !            63: ClientTimeToServerTime(c)
        !            64:      CARD32 c;
        !            65: {
        !            66:     TimeStamp ts;
        !            67:     if (c == CurrentTime)
        !            68:        return currentTime;
        !            69:     ts.months = currentTime.months;
        !            70:     ts.milliseconds = c;
        !            71:     if (c > currentTime.milliseconds)
        !            72:     {
        !            73:        if (((unsigned long) c - currentTime.milliseconds) > HALFMONTH)
        !            74:            ts.months -= 1;
        !            75:     }
        !            76:     else if (c < currentTime.milliseconds)
        !            77:     {
        !            78:        if (((unsigned long)currentTime.milliseconds - c) > HALFMONTH)
        !            79:            ts.months -= 1L;
        !            80:     }
        !            81:     return ts;
        !            82: }
        !            83: 
        !            84: WindowPtr
        !            85: LookupWindow(rid, client)
        !            86:     int rid;
        !            87:     ClientPtr client;
        !            88: {
        !            89:     WindowPtr pWin;
        !            90: 
        !            91:     if(rid == INVALID)
        !            92:        return NULL;
        !            93:     if (client->lastDrawableID == rid)
        !            94:     {
        !            95:         DrawablePtr pDraw = (DrawablePtr)client->lastDrawable;
        !            96:         if (pDraw->type != DRAWABLE_PIXMAP)
        !            97:             return ((WindowPtr) client->lastDrawable);
        !            98:         return (WindowPtr) NULL;
        !            99:     }
        !           100:     pWin = (WindowPtr)LookupID(rid, RT_WINDOW, RC_CORE);
        !           101:     client->errorValue = rid;
        !           102:     return pWin;
        !           103: }
        !           104: 
        !           105: 
        !           106: pointer
        !           107: LookupDrawable(rid, client)
        !           108:     int rid;
        !           109:     ClientPtr client;
        !           110: {
        !           111:     DrawablePtr pDraw;
        !           112: 
        !           113:     if(rid == INVALID)
        !           114:        return NULL;
        !           115:     if (client->lastDrawableID == rid)
        !           116:     {
        !           117:         DrawablePtr pDrawT = client->lastDrawable;
        !           118:         if (pDrawT->type == DRAWABLE_WINDOW)
        !           119:             return ((pointer) client->lastDrawable);
        !           120:         return ((pointer) NULL);
        !           121:     }
        !           122:     pDraw = (DrawablePtr)LookupID(rid, RT_DRAWABLE, RC_CORE);
        !           123:     if (!pDraw)
        !           124:         return ((pointer)pDraw);
        !           125:     if ((pDraw->type == DRAWABLE_WINDOW) || (pDraw->type == DRAWABLE_PIXMAP))
        !           126:         return (pointer)pDraw;         
        !           127:     else
        !           128:         return (pointer)NULL;
        !           129: }
        !           130: 
        !           131: 
        !           132: int
        !           133: AlterSaveSetForClient(client, pWin, mode)
        !           134:     ClientPtr client;
        !           135:     pointer pWin;
        !           136:     char mode;
        !           137: {
        !           138:     int numnow;
        !           139:     pointer *pTmp;
        !           140:     int j;
        !           141: 
        !           142:     numnow = client->numSaved;
        !           143:     j = 0;
        !           144:     if (numnow)
        !           145:     {
        !           146:        pTmp = client->saveSet;
        !           147:        while ((j < numnow) && (pTmp[j] != pWin)) 
        !           148:            j++;
        !           149:     }
        !           150:     if (mode == SetModeInsert)
        !           151:     {
        !           152:        if (j < numnow)         /* duplicate */
        !           153:           return(Success);
        !           154:        numnow++;
        !           155:        client->saveSet = (pointer * )Xrealloc(
        !           156:                  client->saveSet, 
        !           157:                  sizeof(int) * numnow);
        !           158:                client->numSaved = numnow;
        !           159:        client->saveSet[numnow - 1] = pWin;
        !           160:        return(Success);
        !           161:     }
        !           162:     else if ((mode == SetModeDelete) && (j < numnow))
        !           163:     {
        !           164:        while (j < numnow-1)
        !           165:        {
        !           166:            pTmp[j] = pTmp[j+1];
        !           167:           j++;
        !           168:        }
        !           169:        numnow--;
        !           170:         if (numnow)
        !           171:            client->saveSet = (pointer * )Xrealloc(
        !           172:                      client->saveSet, 
        !           173:                      sizeof(int) * numnow);
        !           174:         else
        !           175:         {
        !           176:             Xfree(client->saveSet);
        !           177:            client->saveSet = (pointer *)NULL;
        !           178:        }
        !           179:        client->numSaved = numnow;
        !           180:        return(Success);
        !           181:     }
        !           182:     return(Success);
        !           183: }
        !           184: 
        !           185: 
        !           186: DeleteWindowFromAnySaveSet(pWin)
        !           187:     pointer pWin;
        !           188: {
        !           189:     register int i;
        !           190:     register ClientPtr client;
        !           191:     
        !           192:     for (i = 0; i< currentMaxClients; i++)
        !           193:     {    
        !           194:        client = clients[i];
        !           195:        if (client && client->numSaved)
        !           196:            AlterSaveSetForClient(client, pWin, SetModeDelete);
        !           197:     }
        !           198: }
        !           199: 
        !           200: /* No-op Don't Do Anything : sometimes we need to be able to call a procedure
        !           201:  * that doesn't do anything.  For example, on screen with only static
        !           202:  * colormaps, if someone calls install colormap, it's easier to have a dummy
        !           203:  * procedure to call than to check if there's a procedure 
        !           204:  */
        !           205: void
        !           206: NoopDDA()
        !           207: {
        !           208: }
        !           209: 
        !           210: 
        !           211: /* called from the OS layer */
        !           212: BlockHandler(pTimeout, pReadmask)
        !           213: pointer        pTimeout;       /* DIX doesn't want to know how OS represents time */
        !           214: pointer pReadmask;     /* nor how it represents the set of descriptors */
        !           215: {
        !           216:     register int i;
        !           217:     for (i = 0; i < screenInfo.numScreens; i++)
        !           218:        (* screenInfo.screen[i].BlockHandler)(i, 
        !           219:                                screenInfo.screen[i].blockData,
        !           220:                                pTimeout, pReadmask);
        !           221: }
        !           222: 
        !           223: 
        !           224: WakeupHandler(result, pReadmask)
        !           225: unsigned long  result; /* 32 bits of undefined result from the wait */
        !           226: pointer pReadmask;     /* the resulting descriptor mask */
        !           227: {
        !           228:     register int i;
        !           229:     for (i = 0; i < screenInfo.numScreens; i++)
        !           230:        (* screenInfo.screen[i].WakeupHandler)(i, 
        !           231:                                screenInfo.screen[i].wakeupData,
        !           232:                                result, pReadmask);
        !           233: }
        !           234: 

unix.superglobalmegacorp.com

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