| #ifndef _UTF_H_ | 
 | #define _UTF_H_ 1 | 
 | #if defined(__cplusplus) | 
 | extern "C" {  | 
 | #endif | 
 |  | 
 | typedef unsigned int Rune;	/* 32 bits */ | 
 |  | 
 | enum | 
 | { | 
 | 	UTFmax		= 4,		/* maximum bytes per rune */ | 
 | 	Runesync	= 0x80,		/* cannot represent part of a UTF sequence (<) */ | 
 | 	Runeself	= 0x80,		/* rune and UTF sequences are the same (<) */ | 
 | 	Runeerror	= 0xFFFD,	/* decoding error in UTF */ | 
 | 	Runemax = 0x10FFFF	/* maximum rune value */ | 
 | }; | 
 |  | 
 | /* Edit .+1,/^$/ | cfn $PLAN9/src/lib9/utf/?*.c | grep -v static |grep -v __ */ | 
 | int		chartorune(Rune *rune, char *str); | 
 | int		fullrune(char *str, int n); | 
 | int		isalpharune(Rune c); | 
 | int		islowerrune(Rune c); | 
 | int		isspacerune(Rune c); | 
 | int		istitlerune(Rune c); | 
 | int		isupperrune(Rune c); | 
 | int		runelen(long c); | 
 | int		runenlen(Rune *r, int nrune); | 
 | Rune*		runestrcat(Rune *s1, Rune *s2); | 
 | Rune*		runestrchr(Rune *s, Rune c); | 
 | int		runestrcmp(Rune *s1, Rune *s2); | 
 | Rune*		runestrcpy(Rune *s1, Rune *s2); | 
 | Rune*		runestrdup(Rune *s) ; | 
 | Rune*		runestrecpy(Rune *s1, Rune *es1, Rune *s2); | 
 | long		runestrlen(Rune *s); | 
 | Rune*		runestrncat(Rune *s1, Rune *s2, long n); | 
 | int		runestrncmp(Rune *s1, Rune *s2, long n); | 
 | Rune*		runestrncpy(Rune *s1, Rune *s2, long n); | 
 | Rune*		runestrrchr(Rune *s, Rune c); | 
 | Rune*		runestrstr(Rune *s1, Rune *s2); | 
 | int		runetochar(char *str, Rune *rune); | 
 | Rune		tolowerrune(Rune c); | 
 | Rune		totitlerune(Rune c); | 
 | Rune		toupperrune(Rune c); | 
 | char*		utfecpy(char *to, char *e, char *from); | 
 | int		utflen(char *s); | 
 | int		utfnlen(char *s, long m); | 
 | char*		utfrrune(char *s, long c); | 
 | char*		utfrune(char *s, long c); | 
 | char*		utfutf(char *s1, char *s2); | 
 |  | 
 | #if defined(__cplusplus) | 
 | } | 
 | #endif | 
 | #endif |