Annotation of researchv9/X11/src/X.V11R1/lib/X/XParseGeom.c, revision 1.1

1.1     ! root        1: #include "copyright.h"
        !             2: 
        !             3: /* Copyright   Massachusetts Institute of Technology  1985, 1986, 1987 */
        !             4: /* $Header: XParseGeom.c,v 11.10 87/09/11 08:05:25 toddb Exp $ */
        !             5: 
        !             6: #include "Xlibint.h"
        !             7: #include "Xutil.h"
        !             8: 
        !             9: /* 
        !            10:  *Returns pointer to first char ins search which is also in what, else NULL.
        !            11:  */
        !            12: static char *strscan (search, what)
        !            13: char *search, *what;
        !            14: {
        !            15:        int i, len = strlen (what);
        !            16:        char c;
        !            17: 
        !            18:        while ((c = *(search++)) != NULL)
        !            19:                for (i = 0; i < len; i++)
        !            20:                        if (c == what [i])
        !            21:                                return (--search);
        !            22:        return (NULL);
        !            23: }
        !            24: 
        !            25: /*
        !            26:  *    XParseGeometry parses strings of the form
        !            27:  *   "=<width>x<height>{+-}<xoffset>{+-}<yoffset>", where
        !            28:  *   width, height, xoffset, and yoffset are unsigned integers.
        !            29:  *   Example:  "=80x24+300-49"
        !            30:  *   The equal sign is optional.
        !            31:  *   It returns a bitmask that indicates which of the four values
        !            32:  *   were actually found in the string.  For each value found,
        !            33:  *   the corresponding argument is updated;  for each value
        !            34:  *   not found, the corresponding argument is left unchanged. 
        !            35:  */
        !            36: 
        !            37: int
        !            38: ReadInteger(string, NextString)
        !            39: char *string, **NextString;
        !            40: {
        !            41:     int Result = 0;
        !            42:     
        !            43:     *NextString = string;
        !            44:     for (; (**NextString >= '0') && (**NextString <= '9'); (*NextString)++)
        !            45:     {
        !            46:        Result = (Result * 10) + (**NextString - '0');
        !            47:     }
        !            48:     return (Result);
        !            49: }
        !            50: 
        !            51: int XParseGeometry (string, x, y, width, height)
        !            52: char *string;
        !            53: int *x, *y;
        !            54: unsigned int *width, *height;    /* RETURN */
        !            55: {
        !            56:        int mask = NoValue;
        !            57:        register char *strind;
        !            58:        unsigned int tempWidth, tempHeight;
        !            59:        int tempX, tempY;
        !            60:        char *nextCharacter;
        !            61: 
        !            62:        if ( (string == NULL) || (*string == '\0')) return(mask);
        !            63:        if (*string == '=')
        !            64:                string++;  /* ignore possible '=' at beg of geometry spec */
        !            65: 
        !            66:        strind = string;
        !            67:        if (*strind != '+' && *strind != '-' && *strind != 'x') {
        !            68:                tempWidth = ReadInteger(strind, &nextCharacter);
        !            69:                if (strind == nextCharacter) 
        !            70:                    return (0);
        !            71:                strind = nextCharacter;
        !            72:                mask |= WidthValue;
        !            73:        }
        !            74: 
        !            75:        if (*strind == 'x') {   
        !            76:                strind++;
        !            77:                tempHeight = ReadInteger(strind, &nextCharacter);
        !            78:                if (strind == nextCharacter)
        !            79:                    return (0);
        !            80:                strind = nextCharacter;
        !            81:                mask |= HeightValue;
        !            82:        }
        !            83: 
        !            84:        if (strind == strscan (strind, "+-")) {
        !            85:                if (*strind == '-') {
        !            86:                        strind++;
        !            87:                        tempX = -ReadInteger(strind, &nextCharacter);
        !            88:                        if (strind == nextCharacter)
        !            89:                            return (0);
        !            90:                        strind = nextCharacter;
        !            91:                        mask |= XNegative;
        !            92: 
        !            93:                }
        !            94:                else
        !            95:                {       strind++;
        !            96:                        tempX = ReadInteger(strind, &nextCharacter);
        !            97:                        if (strind == nextCharacter)
        !            98:                            return(0);
        !            99:                        strind = nextCharacter;
        !           100:                }
        !           101:                mask |= XValue;
        !           102:                if (strind == strscan (strind, "+-")) {
        !           103:                        if (*strind == '-') {
        !           104:                                strind++;
        !           105:                                tempY = -ReadInteger(strind, &nextCharacter);
        !           106:                                if (strind == nextCharacter)
        !           107:                                    return(0);
        !           108:                                strind = nextCharacter;
        !           109:                                mask |= YNegative;
        !           110: 
        !           111:                        }
        !           112:                        else
        !           113:                        {
        !           114:                                strind++;
        !           115:                                tempY = ReadInteger(strind, &nextCharacter);
        !           116:                                if (strind == nextCharacter)
        !           117:                                    return(0);
        !           118:                                strind = nextCharacter;
        !           119:                        }
        !           120:                        mask |= YValue;
        !           121:                }
        !           122:        }
        !           123:        
        !           124:        /* If strind isn't at the end of the string the it's an invalid
        !           125:                geometry specification. */
        !           126: 
        !           127:        if (*strind != '\0') return (0);
        !           128: 
        !           129:        if (mask & XValue)
        !           130:            *x = tempX;
        !           131:        if (mask & YValue)
        !           132:            *y = tempY;
        !           133:        if (mask & WidthValue)
        !           134:             *width = tempWidth;
        !           135:        if (mask & HeightValue)
        !           136:             *height = tempHeight;
        !           137:        return (mask);
        !           138: }

unix.superglobalmegacorp.com

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