X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=common.c;h=12a42555b96b4cbc545c6a17ef14ffe135b77ddc;hb=c4c515314af0d41476dd3dca99fa3891549a94a7;hp=9fa0968825ec5e5297c814f5bdde49b7208ea842;hpb=f7979501e5e4cbc90f9420bb1373207bcd470e6c;p=xonotic%2Fdarkplaces.git diff --git a/common.c b/common.c index 9fa09688..12a42555 100644 --- a/common.c +++ b/common.c @@ -51,68 +51,78 @@ char com_modname[MAX_OSPATH] = ""; ============================================================================ */ -short ShortSwap (short l) -{ - unsigned char b1,b2; - - b1 = l&255; - b2 = (l>>8)&255; - return (b1<<8) + b2; +float BuffBigFloat (const unsigned char *buffer) +{ + union + { + float f; + unsigned int i; + } + u; + u.i = (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]; + return u.f; } -int LongSwap (int l) +int BuffBigLong (const unsigned char *buffer) { - unsigned char b1,b2,b3,b4; - - b1 = l&255; - b2 = (l>>8)&255; - b3 = (l>>16)&255; - b4 = (l>>24)&255; + return (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]; +} - return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4; +short BuffBigShort (const unsigned char *buffer) +{ + return (buffer[0] << 8) | buffer[1]; } -float FloatSwap (float f) +float BuffLittleFloat (const unsigned char *buffer) { union { - float f; - unsigned char b[4]; - } dat1, dat2; - - - dat1.f = f; - dat2.b[0] = dat1.b[3]; - dat2.b[1] = dat1.b[2]; - dat2.b[2] = dat1.b[1]; - dat2.b[3] = dat1.b[0]; - return dat2.f; + float f; + unsigned int i; + } + u; + u.i = (buffer[3] << 24) | (buffer[2] << 16) | (buffer[1] << 8) | buffer[0]; + return u.f; } +int BuffLittleLong (const unsigned char *buffer) +{ + return (buffer[3] << 24) | (buffer[2] << 16) | (buffer[1] << 8) | buffer[0]; +} -// Extract integers from buffers - -unsigned int BuffBigLong (const unsigned char *buffer) +short BuffLittleShort (const unsigned char *buffer) { - return (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]; + return (buffer[1] << 8) | buffer[0]; } -unsigned short BuffBigShort (const unsigned char *buffer) +void StoreBigLong (unsigned char *buffer, unsigned int i) { - return (buffer[0] << 8) | buffer[1]; + buffer[0] = (i >> 24) & 0xFF; + buffer[1] = (i >> 16) & 0xFF; + buffer[2] = (i >> 8) & 0xFF; + buffer[3] = i & 0xFF; } -unsigned int BuffLittleLong (const unsigned char *buffer) +void StoreBigShort (unsigned char *buffer, unsigned short i) { - return (buffer[3] << 24) | (buffer[2] << 16) | (buffer[1] << 8) | buffer[0]; + buffer[0] = (i >> 8) & 0xFF; + buffer[1] = i & 0xFF; } -unsigned short BuffLittleShort (const unsigned char *buffer) +void StoreLittleLong (unsigned char *buffer, unsigned int i) { - return (buffer[1] << 8) | buffer[0]; + buffer[0] = i & 0xFF; + buffer[1] = (i >> 8) & 0xFF; + buffer[2] = (i >> 16) & 0xFF; + buffer[3] = (i >> 24) & 0xFF; } +void StoreLittleShort (unsigned char *buffer, unsigned short i) +{ + buffer[0] = i & 0xFF; + buffer[1] = (i >> 8) & 0xFF; +} /* ============================================================================ @@ -680,6 +690,9 @@ would be good for any more. At the beginning of the string, it will be called for the char 0 to initialize a clean state, and then once with the string " " (a space) so the routine knows how long a space is. +In case no single character fits into the given width, the wordWidth function +must return the width of exactly one character. + Wrapped lines get the isContinuation flag set and are continuationWidth less wide. The sum of the return values of the processLine function will be returned. @@ -749,7 +762,7 @@ int COM_Wordwrap(const char *string, size_t length, float continuationWidth, flo } out_inner: spaceUsedForWord = wordWidth(passthroughCW, cursor, &wordLen, maxWidth - continuationWidth); // this may have reduced wordLen when it won't fit - but this is GOOD. TODO fix words that do fit in a non-continuation line - if(wordLen < 1) + if(wordLen < 1) // cannot happen according to current spec of wordWidth { wordLen = 1; spaceUsedForWord = maxWidth + 1; // too high, forces it in a line of itself