ftp.nice.ch/pub/next/connectivity/infosystems/WAIStation.1.9.6.N.b.tar.gz#/WAIS/config.c

This is config.c in view mode; [Download] [Up]

/* config.c: 
 *  creates a header file with details on a machine's representation of 
 *  numbers, alignment requirements, etc, etc.
 */

#include <stdio.h>

#define SHORT_CODE 0
#define INT_CODE   1
#define LONG_CODE  2
#define CHAR_CODE  3

typedef struct _short_test {
  char c;
  unsigned short s;
} short_test;

typedef struct _long_test {
  char c;
  unsigned long l;
} long_test;

typedef struct _int_test {
  char c;
  unsigned int i;
} int_test;


int main() 
{

  short_test st;
  long_test lt;
  int_test it;

  int four_byte;
  int two_byte;
  int one_byte;

  unsigned int i,*ip;
  unsigned long l,*lp;
  unsigned short s,*sp;
  char c;
  unsigned char *cp;


  if(sizeof(char) == 1) {
    printf("#define ONE_BYTE char\n");
    one_byte = CHAR_CODE;
  } else {
    fprintf(stderr,
	    "Error: chars are %d bytes long. Can't define ONE_BYTE\n",sizeof(char));
    exit(1);
  }

  if(sizeof(int) == 2) {
    printf("#define TWO_BYTE int\n");
    two_byte = INT_CODE;
  } else {
    if(sizeof(short) == 2) {
      printf("#define TWO_BYTE short\n");
      two_byte = SHORT_CODE;
    } else {
      fprintf(stderr,"Error: don't know how to define TWO_BYTE\n");
      exit(1);
    }
  }

  if(sizeof(int) == 4) {
    printf("#define FOUR_BYTE int\n");
    four_byte = INT_CODE;
  } else {
    if(sizeof(long) == 4) {
      printf("#define FOUR_BYTE long\n");
      four_byte = LONG_CODE;
     } else {
       fprintf(stderr,"Error: don't know how to define FOUR_BYTE\n");
     }
  }
    
      
  if(two_byte == SHORT_CODE) {
    printf("#define TWO_BYTE_ALIGN %d\n",(int)(&st.s)-(int)(&st.c));
  } else {
    if (two_byte == INT_CODE) {
      printf("#define TWO_BYTE_ALIGN %d\n",(int)(&it.i)-(int)(&it.c));
    }
  }
  if(four_byte == INT_CODE) {
    printf("#define FOUR_BYTE_ALIGN %d\n",(int)(&it.i)-(int)(&it.c));
  } else {
    if(four_byte == LONG_CODE) {
      printf("#define FOUR_BYTE_ALIGN %d\n",(int)(&lt.l)-(int)(&lt.c));
    }
  }

  l=0xdeadbeef;

  
  cp=(unsigned char*)&l;

  if(*cp == 0xde) {
    printf("#define BIG_ENDIAN\n");
  } else {
    if(*cp == 0xef) {
      printf("#define LITTLE_ENDIAN\n");
      } else {
	fprintf(stderr,"Error: can't find out byte order\n");
	exit(1);
      }
  }
  exit(0);
}
  

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.