sftable.c 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /*************************************************************************
  2. * Copyright (c) 2011 AT&T Intellectual Property
  3. * All rights reserved. This program and the accompanying materials
  4. * are made available under the terms of the Eclipse Public License v1.0
  5. * which accompanies this distribution, and is available at
  6. * https://www.eclipse.org/legal/epl-v10.html
  7. *
  8. * Contributors: Details at https://graphviz.org
  9. *************************************************************************/
  10. #include <cgraph/gv_ctype.h>
  11. #include <limits.h>
  12. #include <sfio/sfhdr.h>
  13. #include <stddef.h>
  14. /* Dealing with $ argument addressing stuffs.
  15. **
  16. ** Written by Kiem-Phong Vo.
  17. */
  18. static char *sffmtint(const char *str, int *v)
  19. {
  20. for (*v = 0; gv_isdigit(*str); ++str)
  21. *v = *v * 10 + (*str - '0');
  22. *v -= 1;
  23. return (char *) str;
  24. }
  25. /* table for floating point and integer conversions */
  26. Sftab_t _Sftable = {
  27. .sf_pos10 = {1e1, 1e2, 1e4, 1e8, 1e16, 1e32},
  28. .sf_neg10 = {1e-1, 1e-2, 1e-4, 1e-8, 1e-16, 1e-32},
  29. .sf_dec =
  30. {'0', '0', '0', '1', '0', '2', '0', '3', '0', '4',
  31. '0', '5', '0', '6', '0', '7', '0', '8', '0', '9',
  32. '1', '0', '1', '1', '1', '2', '1', '3', '1', '4',
  33. '1', '5', '1', '6', '1', '7', '1', '8', '1', '9',
  34. '2', '0', '2', '1', '2', '2', '2', '3', '2', '4',
  35. '2', '5', '2', '6', '2', '7', '2', '8', '2', '9',
  36. '3', '0', '3', '1', '3', '2', '3', '3', '3', '4',
  37. '3', '5', '3', '6', '3', '7', '3', '8', '3', '9',
  38. '4', '0', '4', '1', '4', '2', '4', '3', '4', '4',
  39. '4', '5', '4', '6', '4', '7', '4', '8', '4', '9',
  40. '5', '0', '5', '1', '5', '2', '5', '3', '5', '4',
  41. '5', '5', '5', '6', '5', '7', '5', '8', '5', '9',
  42. '6', '0', '6', '1', '6', '2', '6', '3', '6', '4',
  43. '6', '5', '6', '6', '6', '7', '6', '8', '6', '9',
  44. '7', '0', '7', '1', '7', '2', '7', '3', '7', '4',
  45. '7', '5', '7', '6', '7', '7', '7', '8', '7', '9',
  46. '8', '0', '8', '1', '8', '2', '8', '3', '8', '4',
  47. '8', '5', '8', '6', '8', '7', '8', '8', '8', '9',
  48. '9', '0', '9', '1', '9', '2', '9', '3', '9', '4',
  49. '9', '5', '9', '6', '9', '7', '9', '8', '9', '9',
  50. },
  51. .sf_digits = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_",
  52. .sf_fmtintf = sffmtint,
  53. .sf_cv36 =
  54. {
  55. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  56. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  57. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  58. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  59. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  60. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  61. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  62. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  63. 0, 1, 2, 3, 4, 5,
  64. 6, 7, 8, 9, SF_RADIX, SF_RADIX,
  65. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, 62, 10,
  66. 11, 12, 13, 14, 15, 16,
  67. 17, 18, 19, 20, 21, 22,
  68. 23, 24, 25, 26, 27, 28,
  69. 29, 30, 31, 32, 33, 34,
  70. 35, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, 63,
  71. SF_RADIX, 10, 11, 12, 13, 14,
  72. 15, 16, 17, 18, 19, 20,
  73. 21, 22, 23, 24, 25, 26,
  74. 27, 28, 29, 30, 31, 32,
  75. 33, 34, 35, SF_RADIX, SF_RADIX, SF_RADIX,
  76. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  77. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  78. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  79. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  80. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  81. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  82. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  83. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  84. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  85. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  86. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  87. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  88. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  89. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  90. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  91. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  92. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  93. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  94. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  95. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  96. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  97. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  98. },
  99. .sf_cv64 =
  100. {
  101. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  102. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  103. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  104. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  105. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  106. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  107. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  108. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  109. 0, 1, 2, 3, 4, 5,
  110. 6, 7, 8, 9, SF_RADIX, SF_RADIX,
  111. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, 62, 36,
  112. 37, 38, 39, 40, 41, 42,
  113. 43, 44, 45, 46, 47, 48,
  114. 49, 50, 51, 52, 53, 54,
  115. 55, 56, 57, 58, 59, 60,
  116. 61, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, 63,
  117. SF_RADIX, 10, 11, 12, 13, 14,
  118. 15, 16, 17, 18, 19, 20,
  119. 21, 22, 23, 24, 25, 26,
  120. 27, 28, 29, 30, 31, 32,
  121. 33, 34, 35, SF_RADIX, SF_RADIX, SF_RADIX,
  122. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  123. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  124. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  125. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  126. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  127. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  128. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  129. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  130. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  131. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  132. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  133. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  134. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  135. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  136. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  137. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  138. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  139. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  140. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  141. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  142. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  143. SF_RADIX, SF_RADIX, SF_RADIX, SF_RADIX,
  144. },
  145. .sf_type = {
  146. ['d'] = SFFMT_INT,
  147. ['i'] = SFFMT_INT,
  148. ['u'] = SFFMT_UINT,
  149. ['o'] = SFFMT_UINT,
  150. ['x'] = SFFMT_UINT,
  151. ['X'] = SFFMT_UINT,
  152. ['e'] = SFFMT_FLOAT,
  153. ['E'] = SFFMT_FLOAT,
  154. ['g'] = SFFMT_FLOAT,
  155. ['G'] = SFFMT_FLOAT,
  156. ['f'] = SFFMT_FLOAT,
  157. ['s'] = SFFMT_POINTER,
  158. ['n'] = SFFMT_POINTER,
  159. ['p'] = SFFMT_POINTER,
  160. ['!'] = SFFMT_POINTER,
  161. ['c'] = SFFMT_BYTE,
  162. ['['] = SFFMT_CLASS,
  163. }
  164. };