Home | History | Annotate | Download | only in csh
      1  0  stevel /*
      2  0  stevel  * Copyright 1997 Sun Microsystems, Inc.  All rights reserved.
      3  0  stevel  * Use is subject to license terms.
      4  0  stevel  */
      5  0  stevel 
      6  0  stevel /*	Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T	*/
      7  0  stevel /*	  All Rights Reserved  	*/
      8  0  stevel 
      9  0  stevel /*
     10  0  stevel  * Copyright (c) 1980 Regents of the University of California.
     11  0  stevel  * All rights reserved.  The Berkeley Software License Agreement
     12  0  stevel  * specifies the terms and conditions for redistribution.
     13  0  stevel  */
     14  0  stevel 
     15  0  stevel #pragma ident	"%Z%%M%	%I%	%E% SMI"
     16  0  stevel 
     17  0  stevel /*
     18  0  stevel  * Macros to classify characters.
     19  0  stevel  */
     20  0  stevel 
     21  0  stevel #ifdef MBCHAR
     22  0  stevel #include <wchar.h>
     23  0  stevel #include <wctype.h>
     24  0  stevel #define	isauxspZ	(!isascii(Z)&&!(Z&QUOTE)&&iswspace(Z))
     25  0  stevel #define	isauxsp(c) 	(Z=((unsigned)(c)), isauxspZ)
     26  0  stevel /* Regocnizes non-ASCII space characters. */
     27  0  stevel #else
     28  0  stevel #include <ctype.h>
     29  0  stevel /* macros of macros to reduce further #ifdef MBCHAR later. Please be patient!*/
     30  0  stevel #define	iswdigit(c)	isdigit(c)
     31  0  stevel #define	iswalpha(c)	isalpha(c)
     32  0  stevel #define	isphonogram(c)	0
     33  0  stevel #define	isideogram(c)	0
     34  0  stevel #define	isauxsp(c) 	0
     35  0  stevel #define	isauxspZ 	0
     36  0  stevel #endif
     37  0  stevel extern unsigned short _cmap[];/* Defined in sh.char.c */
     38  0  stevel unsigned int	Z; 	/* A place to save macro arg to avoid side-effect!*/
     39  0  stevel 
     40  0  stevel #define _Q	0x01		/* '" */
     41  0  stevel #define _Q1	0x02		/* ` */
     42  0  stevel #define _SP	0x04		/* space and tab */
     43  0  stevel #define _NL	0x08		/* \n */
     44  0  stevel #define _META	0x10		/* lex meta characters, sp #'`";&<>()|\t\n */
     45  0  stevel #define _GLOB	0x20		/* glob characters, *?{[` */
     46  0  stevel #define _ESC	0x40		/* \ */
     47  0  stevel #define _DOL	0x80		/* $ */
     48  0  stevel #define _DIG    0x100		/* 0-9 */
     49  0  stevel #define _LET    0x200		/* a-z, A-Z, _ 	NO LONGER OF REAL USE. */
     50  0  stevel 
     51  0  stevel 
     52  0  stevel #define quoted(c)     ((unsigned)(c) & QUOTE)
     53  0  stevel 
     54  0  stevel #define	cmapZ(bits)	(isascii(Z)?(_cmap[Z] & (bits)):0)
     55  0  stevel #define cmap(c, bits)	(Z=((unsigned)(c)), cmapZ(bits))
     56  0  stevel 
     57  0  stevel #define isglob(c)	cmap(c, _GLOB)
     58  0  stevel #define ismeta(c)	cmap(c, _META)
     59  0  stevel #define digit(c)	cmap(c, _DIG)
     60  0  stevel #define issp(c)		(Z=((unsigned)(c)), cmapZ( _SP)||isauxspZ)
     61  0  stevel /*WAS isspace(c)*/
     62  0  stevel #define isspnl(c)	(Z=((unsigned)(c)), cmapZ( _SP|_NL)||isauxspZ)
     63  0  stevel #define letter(c)	\
     64  0  stevel 	(Z=((unsigned)(c)), !quoted(Z)&&(iswalpha(Z)||((Z)=='_')\
     65  0  stevel 	||isphonogram(Z)||isideogram(Z)))
     66  0  stevel #define alnum(c)	\
     67  0  stevel 	(Z=((unsigned)(c)), !quoted(Z)&&(iswalpha(Z)||((Z)=='_')\
     68  0  stevel 	||iswdigit(Z)||isphonogram(Z)||isideogram(Z)))
     69