/* $Id: map_chars.cc,v 1.2 1997/03/23 13:19:26 dps Exp $ */ #include "tblock.h" #ifndef NULL #define NULL (void *) 0 #endif #define __EXCLUDE_READER_CLASSES #include "lib.h" static const char *map_char(unsigned char s, const cmap *map, int n) { int l, m, r; l=0; r=n-1; while (l<=r) { m=(l+r)/2; if (map[m].win==s) return map[m].ascii; if (map[m].wins) r=m-1; } return NULL; } tblock *__map_string(const char *s, const cmap *map, int map_size) { const char *scan, *sptr; tblock *res; res=new(tblock); scan=s; while (*scan!='\0') { if ((sptr=map_char(*scan, map, map_size))==NULL) { scan++; continue; } if (scan!=s) res->add(s, scan-s); res->add(sptr); scan++; s=scan; } if (scan!=s) res->add(s, scan-s); return res; }