psread.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*====================================================================*
  2. *
  3. * Copyright (c) 2013 Qualcomm Atheros, Inc.
  4. *
  5. * All rights reserved.
  6. *
  7. *====================================================================*/
  8. /*====================================================================*
  9. *
  10. * uint16_t psread (uint16_t values [], uint16_t limit, FILE * fp);
  11. *
  12. * pib.h
  13. *
  14. * read a prescaler file and populate a scaler array;
  15. *
  16. *--------------------------------------------------------------------*/
  17. #include <stdio.h>
  18. #include <ctype.h>
  19. #include <stdint.h>
  20. #include "../tools/chars.h"
  21. #include "../tools/error.h"
  22. #include "../tools/number.h"
  23. #include "../pib/pib.h"
  24. uint16_t psread (uint16_t values [], uint16_t limit, FILE * fp)
  25. {
  26. uint16_t index = 0;
  27. uint16_t count = 0;
  28. uint32_t value = 0;
  29. signed c;
  30. while ((c = getc (fp)) != EOF)
  31. {
  32. if (isspace (c))
  33. {
  34. do
  35. {
  36. c = getc (fp);
  37. }
  38. while (isspace (c));
  39. continue;
  40. }
  41. if ((c == '#') || (c == ';'))
  42. {
  43. do
  44. {
  45. c = getc (fp);
  46. }
  47. while (nobreak (c));
  48. continue;
  49. }
  50. index = 0;
  51. while (isdigit (c))
  52. {
  53. index *= 10;
  54. index += c - '0';
  55. c = getc (fp);
  56. }
  57. if (index != count)
  58. {
  59. error (1, ECANCELED, "Carrier %d out of order", index);
  60. }
  61. if (index >= limit)
  62. {
  63. error (1, EOVERFLOW, "Too many prescalers");
  64. }
  65. while (isblank (c))
  66. {
  67. c = getc (fp);
  68. }
  69. value = 0;
  70. while (isxdigit (c))
  71. {
  72. value *= 16;
  73. value += todigit (c);
  74. c = getc (fp);
  75. }
  76. values [index] = value;
  77. while ((c != '\n') && (c != EOF))
  78. {
  79. c = getc (fp);
  80. };
  81. count++;
  82. }
  83. return (count);
  84. }