Home | History | Annotate | Download | only in head
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License, Version 1.0 only
      6  * (the "License").  You may not use this file except in compliance
      7  * with the License.
      8  *
      9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  * or http://www.opensolaris.org/os/licensing.
     11  * See the License for the specific language governing permissions
     12  * and limitations under the License.
     13  *
     14  * When distributing Covered Code, include this CDDL HEADER in each
     15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  * If applicable, add the following below this CDDL HEADER, with the
     17  * fields enclosed by brackets "[]" replaced with your own identifying
     18  * information: Portions Copyright [yyyy] [name of copyright owner]
     19  *
     20  * CDDL HEADER END
     21  */
     22 /*	Copyright (c) 1988 AT&T	*/
     23 /*	  All Rights Reserved  	*/
     24 
     25 
     26 #ifndef	_MACROS_H
     27 #define	_MACROS_H
     28 
     29 #pragma ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.3.1.7 */
     30 
     31 #include <sys/types.h>
     32 #include <sys/stat.h>
     33 
     34 #ifdef	__cplusplus
     35 extern "C" {
     36 #endif
     37 
     38 /*
     39  *	numeric() is useful in while's, if's, etc., but don't use *p++
     40  *	max() and min() depend on the types of the operands
     41  *	abs() is absolute value
     42  */
     43 #define	numeric(c)		((c) >= '0' && (c) <= '9')
     44 #define	max(a, b) 		((a) < (b) ? (b) : (a))
     45 #define	min(a, b) 		((a) > (b) ? (b) : (a))
     46 #define	abs(x)			((x) >= 0 ? (x) : -(x))
     47 
     48 #define	compare(str1, str2)	strcmp((str1), (str2))
     49 #define	equal(str1, str2)	(strcmp((str1), (str2)) == 0)
     50 #define	length(str)		strlen(str)
     51 #define	size(str)		(strlen(str) + 1)
     52 
     53 /*
     54  *	The global variable Statbuf is available for use as a stat(II)
     55  *	structure.  Note that "stat.h" is included here and should
     56  *	not be included elsewhere.
     57  *	Exists(file) returns 0 if the file does not exist;
     58  *	the flags word if it does (the flags word is always non-zero).
     59  */
     60 
     61 extern struct stat Statbuf;
     62 #define	exists(file)		(stat(file, &Statbuf) < 0 ? 0 : Statbuf.st_mode)
     63 
     64 /*
     65  *	SAVE() and RSTR() use local data in nested blocks.
     66  *	Make sure that they nest cleanly.
     67  */
     68 #define	SAVE(name, place)	{ int place = name;
     69 #define	RSTR(name, place)	name = place; }
     70 
     71 /*
     72  *	Use: DEBUG(sum,d) which becomes fprintf(stderr,"sum = %d\n",sum)
     73  *
     74  *	Note:	Sccsid[] strings are still supported but not the prefered
     75  *		method of labeling files.  Use #ident.
     76  */
     77 #ifdef	__STDC__
     78 #define	DEBUG(var, type)	fprintf(stderr, #var "= %" #type "\n", var)
     79 #define	SCCSID(arg)		static char Sccsid[] = #arg
     80 #else
     81 #define	DEBUG(var, type)	fprintf(stderr, "var = %type\n", var)
     82 #define	SCCSID(arg)		static char Sccsid[] = "arg"
     83 #endif
     84 
     85 /*
     86  *	Use of ERRABORT() will cause libS.a internal
     87  *	errors to cause aborts
     88  */
     89 #define	ERRABORT()	_error() { abort(); }
     90 
     91 /*
     92  *	Use of USXALLOC() is required to force all calls to alloc()
     93  *	(e.g., from libS.a) to call xalloc().
     94  */
     95 #define	NONBLANK(p)	while (*(p) == ' ' || *(p) == '\t') (p)++
     96 
     97 /*
     98  *	A global null string.
     99  */
    100 extern char	Null[1];
    101 
    102 /*
    103  *	A global error message string.
    104  */
    105 extern char	Error[128];
    106 
    107 #ifdef	__cplusplus
    108 }
    109 #endif
    110 
    111 #endif	/* _MACROS_H */
    112