generate-macros.c - blind - suckless command-line video editing utility
 (HTM) git clone git://git.suckless.org/blind
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       generate-macros.c (1924B)
       ---
            1 /* See LICENSE file for copyright and license details. */
            2 #include <stdint.h>
            3 #include <stdio.h>
            4 
            5 int
            6 main(void)
            7 {
            8         char *u16 = (char *)&(uint16_t){0x0001};
            9         char *u32 = (char *)&(uint32_t){0x00010203};
           10         char *u64 = (char *)&(uint64_t){0x0001020304050607};
           11         int le16 = (u16[1] == 0 && u16[0] == 1);
           12         int le32 = (u32[3] == 0 && u32[2] == 1 && u32[1] == 2 && u32[0] == 3);
           13         int le64 = (u64[7] == 0 && u64[6] == 1 && u64[5] == 2 && u64[4] == 3 &&
           14                     u64[3] == 4 && u64[2] == 5 && u64[1] == 6 && u64[0] == 7);
           15         int be16 = (u16[0] == 0 && u16[1] == 1);
           16         int be32 = (u32[0] == 0 && u32[1] == 1 && u32[2] == 2 && u32[3] == 3);
           17         int be64 = (u64[0] == 0 && u64[1] == 1 && u64[2] == 2 && u64[3] == 3 &&
           18                     u64[4] == 4 && u64[5] == 5 && u64[6] == 6 && u64[7] == 7);
           19 
           20         if (le16)
           21                 printf("#define HOST_ENDIAN_IS_LITTLE_ENDIAN_16\n");
           22         if (le32)
           23                 printf("#define HOST_ENDIAN_IS_LITTLE_ENDIAN_32\n");
           24         if (le64)
           25                 printf("#define HOST_ENDIAN_IS_LITTLE_ENDIAN_64\n");
           26         if (le16 && le32 && le64)
           27                 printf("#define HOST_ENDIAN_IS_LITTLE_ENDIAN\n");
           28 
           29         if (be16)
           30                 printf("#define HOST_ENDIAN_IS_BIG_ENDIAN_16\n");
           31         if (be32)
           32                 printf("#define HOST_ENDIAN_IS_BIG_ENDIAN_32\n");
           33         if (be64)
           34                 printf("#define HOST_ENDIAN_IS_BIG_ENDIAN_64\n");
           35         if (be16 && be32 && be64)
           36                 printf("#define HOST_ENDIAN_IS_BIG_ENDIAN\n");
           37 
           38         if (sizeof(float) == 4) {
           39                 unsigned long int a, b;
           40                 a = (unsigned long int)*(uint32_t *)&(float){  (float)(1. / 12.) };
           41                 b = (unsigned long int)*(uint32_t *)&(float){ -(float)(1. / 12.) };
           42                 printf("#define USING_BINARY32 %i\n",
           43                        a == 0x3daaaaabUL && b == 0xbdaaaaabUL);
           44         }
           45         if (sizeof(double) == 8) {
           46                 unsigned long long int a, b;
           47                 a = (unsigned long long int)*(uint64_t *)&(double){  1. / 12. };
           48                 b = (unsigned long long int)*(uint64_t *)&(double){ -1. / 12. };
           49                 printf("#define USING_BINARY64 %i\n",
           50                        a == 0x3fb5555555555555ULL && b == 0xbfb5555555555555ULL);
           51         }
           52 
           53         return 0;
           54 }