[858] | 1 | /* |
---|
| 2 | * libcucul Canvas for ultrafast compositing of Unicode letters |
---|
| 3 | * libcaca Colour ASCII-Art library |
---|
| 4 | * Copyright (c) 2006 Sam Hocevar <sam@zoy.org> |
---|
| 5 | * All Rights Reserved |
---|
| 6 | * |
---|
| 7 | * $Id: common.h 865 2006-04-24 21:09:06Z sam $ |
---|
| 8 | * |
---|
| 9 | * This library is free software; you can redistribute it and/or |
---|
| 10 | * modify it under the terms of the Do What The Fuck You Want To |
---|
| 11 | * Public License, Version 2, as published by Sam Hocevar. See |
---|
| 12 | * http://sam.zoy.org/wtfpl/COPYING for more details. |
---|
| 13 | */ |
---|
| 14 | |
---|
| 15 | /* |
---|
| 16 | * This file contains replacements for commonly found object types and |
---|
| 17 | * function prototypes that are sometimes missing. |
---|
| 18 | */ |
---|
| 19 | |
---|
[863] | 20 | #if defined(HAVE_INTTYPES_H) |
---|
| 21 | # include <inttypes.h> |
---|
| 22 | #else |
---|
[858] | 23 | typedef signed char int8_t; |
---|
| 24 | typedef signed short int16_t; |
---|
| 25 | typedef signed long int int32_t; |
---|
[859] | 26 | |
---|
[858] | 27 | typedef unsigned char uint8_t; |
---|
| 28 | typedef unsigned short uint16_t; |
---|
| 29 | typedef unsigned long int uint32_t; |
---|
[859] | 30 | |
---|
| 31 | typedef long int intptr_t; |
---|
| 32 | typedef unsigned long int uintptr_t; |
---|
[858] | 33 | #endif |
---|
| 34 | |
---|
[865] | 35 | #if defined(HAVE_HTONS) |
---|
| 36 | # define hton16 htons |
---|
| 37 | # define hton32 htonl |
---|
| 38 | #else |
---|
[861] | 39 | # if defined(HAVE_ENDIAN_H) |
---|
| 40 | # include <endian.h> |
---|
| 41 | # endif |
---|
[865] | 42 | static inline uint16_t hton16(uint16_t x) |
---|
[861] | 43 | { |
---|
[865] | 44 | /* This is compile-time optimised with at least -O1 or -Os */ |
---|
[861] | 45 | #if defined(HAVE_ENDIAN_H) |
---|
| 46 | if(__BYTE_ORDER == __BIG_ENDIAN) |
---|
| 47 | #else |
---|
| 48 | uint32_t const dummy = 0x12345678; |
---|
| 49 | if(*(uint8_t const *)&dummy == 0x12) |
---|
| 50 | #endif |
---|
| 51 | return x; |
---|
| 52 | else |
---|
| 53 | return (x >> 8) | (x << 8); |
---|
| 54 | } |
---|
| 55 | |
---|
[865] | 56 | static inline uint32_t hton32(uint32_t x) |
---|
[861] | 57 | { |
---|
[865] | 58 | /* This is compile-time optimised with at least -O1 or -Os */ |
---|
[861] | 59 | #if defined(HAVE_ENDIAN_H) |
---|
| 60 | if(__BYTE_ORDER == __BIG_ENDIAN) |
---|
| 61 | #else |
---|
| 62 | uint32_t const dummy = 0x12345678; |
---|
| 63 | if(*(uint8_t const *)&dummy == 0x12) |
---|
| 64 | #endif |
---|
| 65 | return x; |
---|
| 66 | else |
---|
| 67 | return (x >> 24) | ((x >> 8) & 0x0000ff00) |
---|
| 68 | | ((x << 8) & 0x00ff0000) | (x << 24); |
---|
| 69 | } |
---|
| 70 | #endif |
---|
| 71 | |
---|