14297a3b0SGarrett D'Amore /*
2*2d08521bSGarrett D'Amore  * Copyright 2013 Garrett D'Amore <garrett@damore.org>
36b5e5868SGarrett D'Amore  * Copyright 2010 Nexenta Systems, Inc.  All rights reserved.
44297a3b0SGarrett D'Amore  * Copyright (c) 1993
54297a3b0SGarrett D'Amore  *	The Regents of the University of California.  All rights reserved.
64297a3b0SGarrett D'Amore  *
74297a3b0SGarrett D'Amore  * This code is derived from software contributed to Berkeley by
84297a3b0SGarrett D'Amore  * Paul Borman at Krystal Technologies.
94297a3b0SGarrett D'Amore  *
104297a3b0SGarrett D'Amore  * Redistribution and use in source and binary forms, with or without
114297a3b0SGarrett D'Amore  * modification, are permitted provided that the following conditions
124297a3b0SGarrett D'Amore  * are met:
134297a3b0SGarrett D'Amore  * 1. Redistributions of source code must retain the above copyright
144297a3b0SGarrett D'Amore  *    notice, this list of conditions and the following disclaimer.
154297a3b0SGarrett D'Amore  * 2. Redistributions in binary form must reproduce the above copyright
164297a3b0SGarrett D'Amore  *    notice, this list of conditions and the following disclaimer in the
174297a3b0SGarrett D'Amore  *    documentation and/or other materials provided with the distribution.
184297a3b0SGarrett D'Amore  * 4. Neither the name of the University nor the names of its contributors
194297a3b0SGarrett D'Amore  *    may be used to endorse or promote products derived from this software
204297a3b0SGarrett D'Amore  *    without specific prior written permission.
214297a3b0SGarrett D'Amore  *
224297a3b0SGarrett D'Amore  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
234297a3b0SGarrett D'Amore  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
244297a3b0SGarrett D'Amore  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
254297a3b0SGarrett D'Amore  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
264297a3b0SGarrett D'Amore  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
274297a3b0SGarrett D'Amore  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
284297a3b0SGarrett D'Amore  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
294297a3b0SGarrett D'Amore  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
304297a3b0SGarrett D'Amore  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
314297a3b0SGarrett D'Amore  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
324297a3b0SGarrett D'Amore  * SUCH DAMAGE.
334297a3b0SGarrett D'Amore  */
344297a3b0SGarrett D'Amore 
354297a3b0SGarrett D'Amore #include "lint.h"
364297a3b0SGarrett D'Amore #include <ctype.h>
374297a3b0SGarrett D'Amore #include <stdio.h>
384297a3b0SGarrett D'Amore #include "runetype.h"
394297a3b0SGarrett D'Amore 
40eda71b4aSGarrett D'Amore unsigned int
__runetype(const _RuneLocale * rl,__ct_rune_t c)41*2d08521bSGarrett D'Amore __runetype(const _RuneLocale *rl, __ct_rune_t c)
424297a3b0SGarrett D'Amore {
434297a3b0SGarrett D'Amore 	size_t lim;
44*2d08521bSGarrett D'Amore 	const _RuneRange *rr = &rl->__runetype_ext;
45*2d08521bSGarrett D'Amore 	const _RuneEntry *base, *re;
464297a3b0SGarrett D'Amore 
474297a3b0SGarrett D'Amore 	if (c < 0 || c == EOF)
484297a3b0SGarrett D'Amore 		return (0L);
494297a3b0SGarrett D'Amore 
504297a3b0SGarrett D'Amore 	/* Binary search -- see bsearch.c for explanation. */
514297a3b0SGarrett D'Amore 	base = rr->__ranges;
524297a3b0SGarrett D'Amore 	for (lim = rr->__nranges; lim != 0; lim >>= 1) {
534297a3b0SGarrett D'Amore 		re = base + (lim >> 1);
544297a3b0SGarrett D'Amore 		if (re->__min <= c && c <= re->__max) {
554297a3b0SGarrett D'Amore 			if (re->__types)
564297a3b0SGarrett D'Amore 				return (re->__types[c - re->__min]);
574297a3b0SGarrett D'Amore 			else
584297a3b0SGarrett D'Amore 				return (re->__map);
594297a3b0SGarrett D'Amore 		} else if (c > re->__max) {
604297a3b0SGarrett D'Amore 			base = re + 1;
614297a3b0SGarrett D'Amore 			lim--;
624297a3b0SGarrett D'Amore 		}
634297a3b0SGarrett D'Amore 	}
644297a3b0SGarrett D'Amore 
654297a3b0SGarrett D'Amore 	return (0L);
664297a3b0SGarrett D'Amore }
67