MkMachDep.cpp
上传用户:woshihumen
上传日期:2013-07-18
资源大小:484k
文件大小:3k
源码类别:

Email服务器

开发平台:

Visual C++

  1. /*
  2.  *  XMail by Davide Libenzi ( Intranet and Internet mail server )
  3.  *  Copyright (C) 1999,..,2004  Davide Libenzi
  4.  *
  5.  *  This program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2 of the License, or
  8.  *  (at your option) any later version.
  9.  *
  10.  *  This program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  *  GNU General Public License for more details.
  14.  *
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with this program; if not, write to the Free Software
  17.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18.  *
  19.  *  Davide Libenzi <davidel@xmailserver.org>
  20.  *
  21.  */
  22. #include <stdio.h>
  23. static int MkMachIsLE(void)
  24. {
  25. union MachWordBytes {
  26. unsigned int w;
  27. unsigned char b[sizeof(unsigned int)];
  28. } MWB;
  29. MWB.w = 1;
  30. return MWB.b[0] != 0;
  31. }
  32. static int MkMachIsLEBF(void)
  33. {
  34. union MachBitField {
  35. struct {
  36. unsigned int b:1;
  37. } BF;
  38. unsigned int w;
  39. } MWB;
  40. MWB.w = 1;
  41. return MWB.BF.b != 0;
  42. }
  43. static int MkMachGenType(int iBits, char const *pszBase)
  44. {
  45. fprintf(stdout,
  46. "typedef signed %s MachInt%d;n"
  47. "typedef unsigned %s MachUInt%d;n"
  48. "#define MACH_TYPE_%dBIT %snn", pszBase, iBits, pszBase, iBits, iBits, pszBase);
  49. return 0;
  50. }
  51. int main(int argc, char *argv[])
  52. {
  53. fprintf(stdout, "#ifndef _MACHDEFS_Hn" "#define _MACHDEFS_Hnnn");
  54. if (!MkMachIsLE())
  55. fprintf(stdout, "#define MACH_BIG_ENDIAN_WORDSnn");
  56. else
  57. fprintf(stdout, "#undef MACH_BIG_ENDIAN_WORDSnn");
  58. if (!MkMachIsLEBF())
  59. fprintf(stdout, "#define MACH_BIG_ENDIAN_BITFIELDnn");
  60. else
  61. fprintf(stdout, "#undef MACH_BIG_ENDIAN_BITFIELDnn");
  62. if (sizeof(char) == 1)
  63. MkMachGenType(8, "char");
  64. else if (sizeof(short) == 1)
  65. MkMachGenType(8, "short");
  66. else if (sizeof(int) == 1)
  67. MkMachGenType(8, "int");
  68. else if (sizeof(long) == 1)
  69. MkMachGenType(8, "long");
  70. if (sizeof(char) == 2)
  71. MkMachGenType(16, "char");
  72. else if (sizeof(short) == 2)
  73. MkMachGenType(16, "short");
  74. else if (sizeof(int) == 2)
  75. MkMachGenType(16, "int");
  76. else if (sizeof(long) == 2)
  77. MkMachGenType(16, "long");
  78. if (sizeof(char) == 4)
  79. MkMachGenType(32, "char");
  80. else if (sizeof(short) == 4)
  81. MkMachGenType(32, "short");
  82. else if (sizeof(int) == 4)
  83. MkMachGenType(32, "int");
  84. else if (sizeof(long) == 4)
  85. MkMachGenType(32, "long");
  86. fprintf(stdout, "nn" "#endifnn");
  87. return 0;
  88. }