1fa2b3b63Smrg/* 2fa2b3b63Smrg 3fa2b3b63SmrgCopyright 1990, 1994, 1998 The Open Group 4fa2b3b63Smrg 5fa2b3b63SmrgPermission to use, copy, modify, distribute, and sell this software and its 6fa2b3b63Smrgdocumentation for any purpose is hereby granted without fee, provided that 7fa2b3b63Smrgthe above copyright notice appear in all copies and that both that 8fa2b3b63Smrgcopyright notice and this permission notice appear in supporting 9fa2b3b63Smrgdocumentation. 10fa2b3b63Smrg 11fa2b3b63SmrgThe above copyright notice and this permission notice shall be included in 12fa2b3b63Smrgall copies or substantial portions of the Software. 13fa2b3b63Smrg 14fa2b3b63SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15fa2b3b63SmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16fa2b3b63SmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17fa2b3b63SmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 18fa2b3b63SmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 19fa2b3b63SmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 20fa2b3b63Smrg 21fa2b3b63SmrgExcept as contained in this notice, the name of The Open Group shall not be 22fa2b3b63Smrgused in advertising or otherwise to promote the sale, use or other dealings 23fa2b3b63Smrgin this Software without prior written authorization from The Open Group. 24fa2b3b63Smrg 25fa2b3b63Smrg*/ 26fa2b3b63Smrg 27fa2b3b63Smrg/* 28fa2b3b63Smrg * Author: Keith Packard, MIT X Consortium 29fa2b3b63Smrg */ 30fa2b3b63Smrg 31fa2b3b63Smrg#ifdef HAVE_CONFIG_H 32fa2b3b63Smrg#include <config.h> 33fa2b3b63Smrg#endif 34fa2b3b63Smrg#include "fontmisc.h" 35fa2b3b63Smrg 36e24f450bSmrg/* Utility functions for reformatting font bitmaps */ 37fa2b3b63Smrg 38fa2b3b63Smrgstatic const unsigned char _reverse_byte[0x100] = { 39e24f450bSmrg 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, 40e24f450bSmrg 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, 41e24f450bSmrg 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, 42e24f450bSmrg 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, 43e24f450bSmrg 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, 44e24f450bSmrg 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, 45e24f450bSmrg 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, 46e24f450bSmrg 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, 47e24f450bSmrg 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, 48e24f450bSmrg 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, 49e24f450bSmrg 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, 50e24f450bSmrg 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, 51e24f450bSmrg 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, 52e24f450bSmrg 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, 53e24f450bSmrg 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, 54e24f450bSmrg 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, 55e24f450bSmrg 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, 56e24f450bSmrg 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, 57e24f450bSmrg 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, 58e24f450bSmrg 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, 59e24f450bSmrg 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, 60e24f450bSmrg 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, 61e24f450bSmrg 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, 62e24f450bSmrg 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, 63e24f450bSmrg 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, 64e24f450bSmrg 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, 65e24f450bSmrg 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, 66e24f450bSmrg 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, 67e24f450bSmrg 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, 68e24f450bSmrg 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, 69e24f450bSmrg 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, 70e24f450bSmrg 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff 71fa2b3b63Smrg}; 72fa2b3b63Smrg 73fa2b3b63Smrg/* 74fa2b3b63Smrg * Invert bit order within each BYTE of an array. 75fa2b3b63Smrg */ 76fa2b3b63Smrgvoid 77fa2b3b63SmrgBitOrderInvert(unsigned char *buf, int nbytes) 78fa2b3b63Smrg{ 79fa2b3b63Smrg const unsigned char *rev = _reverse_byte; 80fa2b3b63Smrg 81fa2b3b63Smrg for (; --nbytes >= 0; buf++) 82e24f450bSmrg *buf = rev[*buf]; 83fa2b3b63Smrg} 84fa2b3b63Smrg 85fa2b3b63Smrg/* 86fa2b3b63Smrg * Invert byte order within each 16-bits of an array. 87fa2b3b63Smrg */ 88fa2b3b63Smrgvoid 89fa2b3b63SmrgTwoByteSwap(unsigned char *buf, int nbytes) 90fa2b3b63Smrg{ 91e24f450bSmrg for (; nbytes > 0; nbytes -= 2, buf += 2) { 92e24f450bSmrg unsigned char c; 93fa2b3b63Smrg 94e24f450bSmrg c = buf[0]; 95e24f450bSmrg buf[0] = buf[1]; 96e24f450bSmrg buf[1] = c; 97fa2b3b63Smrg } 98fa2b3b63Smrg} 99fa2b3b63Smrg 100fa2b3b63Smrg/* 101fa2b3b63Smrg * Invert byte order within each 32-bits of an array. 102fa2b3b63Smrg */ 103fa2b3b63Smrgvoid 104fa2b3b63SmrgFourByteSwap(unsigned char *buf, int nbytes) 105fa2b3b63Smrg{ 106e24f450bSmrg for (; nbytes > 0; nbytes -= 4, buf += 4) { 107e24f450bSmrg unsigned char c; 108fa2b3b63Smrg 109e24f450bSmrg c = buf[0]; 110e24f450bSmrg buf[0] = buf[3]; 111e24f450bSmrg buf[3] = c; 112fa2b3b63Smrg 113e24f450bSmrg c = buf[1]; 114e24f450bSmrg buf[1] = buf[2]; 115e24f450bSmrg buf[2] = c; 116fa2b3b63Smrg } 117fa2b3b63Smrg} 118