codename.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*====================================================================*
  2. *
  3. * char const * codename (struct _code_ const list [], size_t size, code_t code, char const * name);
  4. *
  5. * symbol.h
  6. *
  7. * return the name associated with a given code by searching a name
  8. * table arranged in ascending order by code; return the table name
  9. * if the code is found or argument name if not;
  10. *
  11. * typedefs code_t and struct _code_ are defined in codes.h;
  12. *
  13. * Motley Tools by Charles Maier;
  14. * Copyright (c) 2001-2006 by Charles Maier Associates;
  15. * Licensed under the Internet Software Consortium License;
  16. *
  17. *--------------------------------------------------------------------*/
  18. #ifndef CODENAME_SOURCE
  19. #define CODENAME_SOURCE
  20. #include <unistd.h>
  21. #include "../tools/symbol.h"
  22. char const * codename (struct _code_ const list [], size_t size, code_t code, char const * name)
  23. {
  24. size_t lower = 0;
  25. size_t upper = size;
  26. while (lower < upper)
  27. {
  28. size_t index = (lower + upper) >> 1;
  29. signed order = code - list [index].code;
  30. if (order < 0)
  31. {
  32. upper = index - 0;
  33. continue;
  34. }
  35. if (order > 0)
  36. {
  37. lower = index + 1;
  38. continue;
  39. }
  40. return (list [index].name);
  41. }
  42. return (name);
  43. }
  44. #endif