/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ /* * This file should be the first Mcom file included * * All cross-platform definitions, regardless of project, should be * contained in this file or its includes */ #ifndef _MCOM_H_ #define _MCOM_H_ #include "xp_core.h" #include "xp_mem.h" #include "xp_debug.h" #include "xp_str.h" #include "xp_list.h" /* platform-specific types */ /* include header files needed for prototypes/etc */ #include "xp_file.h" XP_BEGIN_PROTOS /* XXX where should this kind of junk go? */ unsigned char *XP_WordWrap(int charset, unsigned char *string, int maxColumn, int checkQuoting); XP_END_PROTOS /* --------------------------------------------------------------------- */ /* Define the hooks for cross-platform string + memory functions */ #ifdef DEBUG XP_BEGIN_PROTOS extern char * NOT_NULL (const char *x); XP_END_PROTOS #else # define NOT_NULL(X) X #endif #include #define XP_STRLEN(s) strlen(NOT_NULL(s)) #define XP_STRCMP(a, b) strcmp(NOT_NULL(a), NOT_NULL(b)) #define XP_STRNCMP(a, b, n) strncmp(NOT_NULL(a), NOT_NULL(b), (n)) #define XP_STRCPY(d, s) strcpy(NOT_NULL(d), NOT_NULL(s)) #define XP_STRCHR strchr #define XP_STRRCHR strrchr #define XP_STRTOK strtok #define XP_STRCAT strcat #define XP_STRNCAT strncat #define XP_STRSTR strstr #define XP_STRTOUL strtoul /* XP_FILENAMECMP compares two filenames, treating case differences appropriately for this OS. */ #if defined(XP_WIN) || defined(XP_OS2) #define XP_FILENAMECMP stricmp #else #define XP_FILENAMECMP XP_STRCMP #endif #if !defined(XP_WIN) && !defined(XP_OS2) && !(defined(__GLIBC__) && __GLIBC__ >= 2) /* strdup is not an ANSI function */ XP_BEGIN_PROTOS extern char * strdup (const char * s); XP_END_PROTOS #endif #include #define XP_STRDUP(s) strdup((s)) #define XP_MEMCPY(d, s, n) memcpy((d), (s), (n)) /* NOTE: XP_MEMMOVE gurantees that overlaps will be properly handled */ #if defined( __sun) && !defined(__svr4__) #define XP_MEMMOVE(Dest,Src,Len) bcopy((Src),(Dest),(Len)) #else #define XP_MEMMOVE(Dest,Src,Len) memmove((Dest),(Src),(Len)) #endif /* __sun */ #define XP_MEMSET memset #define XP_SPRINTF sprintf /* should I really include this here or what? */ #ifdef XP_MAC #include "prprf.h" #else #include "prprf.h" #endif #define XP_SAFE_SPRINTF PR_snprintf #define XP_MEMCMP memcmp #define XP_VSPRINTF vsprintf #define XP_IS_SPACE(VAL) \ (((((intn)(VAL)) & 0x7f) == ((intn)(VAL))) && isspace((intn)(VAL)) ) #define XP_IS_CNTRL(i) ((((unsigned int) (i)) > 0x7f) ? (int) 0 : iscntrl(i)) #define XP_IS_DIGIT(i) ((((unsigned int) (i)) > 0x7f) ? (int) 0 : isdigit(i)) #if defined(XP_WIN) || defined(XP_OS2) #define XP_IS_ALPHA(VAL) (isascii((int)(VAL)) && isalpha((int)(VAL))) #else #define XP_IS_ALPHA(VAL) ((((unsigned int) (VAL)) > 0x7f) ? FALSE : isalpha((int)(VAL))) #endif #define XP_ATOI(PTR) (atoi((PTR))) /* NOTE: XP_BCOPY gurantees that overlaps will be properly handled */ #ifdef XP_WIN16 XP_BEGIN_PROTOS extern void WIN16_bcopy(char *, char *, unsigned long); XP_END_PROTOS #define XP_BCOPY(PTR_FROM, PTR_TO, LEN) \ (WIN16_bcopy((char *) (PTR_FROM), (char *)(PTR_TO), (LEN))) #else #define XP_BCOPY(Src,Dest,Len) XP_MEMMOVE((Dest),(Src),(Len)) #endif #define XP_BZERO(a,b) memset(a,0,b) #ifdef XP_WIN #define XP_RANDOM rand #define XP_SRANDOM(seed) srand((seed)) #endif #ifdef XP_OS2 #define XP_RANDOM rand #define XP_SRANDOM(seed) srand((seed)) #endif #ifdef XP_MAC #define XP_RANDOM rand #define XP_SRANDOM(seed) srand((seed)) #endif #ifdef XP_UNIX #if !defined(XP_RANDOM) || !defined(XP_SRANDOM) /* defined in both xp_mcom.h and xp_str.h */ #if defined(UNIXWARE) || defined(_INCLUDE_HPUX_SOURCE) || (defined(__sun) && defined(__svr4__)) || defined(SNI) || defined(NCR) #define XP_RANDOM rand #define XP_SRANDOM(seed) srand((seed)) #else #define XP_RANDOM random #define XP_SRANDOM(seed) srandom((seed)) #endif #endif #endif #ifdef XP_MAC XP_BEGIN_PROTOS extern time_t GetTimeMac(); extern time_t Mactime(time_t *timer); extern struct tm *Macgmtime(const time_t *timer); extern time_t Macmktime (struct tm *timeptr); extern char * Macctime(const time_t *); extern struct tm *Maclocaltime(const time_t *); XP_END_PROTOS #define XP_TIME() GetTimeMac() #define time(t) Mactime(t) #define gmtime(t) Macgmtime(t) #define mktime(t) Macmktime(t) #define ctime(t) Macctime(t) #define localtime(t) Maclocaltime(t) #define UNIXMINUSMACTIME 2082844800UL #else #define XP_TIME() time(0) #endif #endif /* _MCOM_H_ */