get_num.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include <string.h>
  2. #include <math.h>
  3. #include <grass/gis.h>
  4. #include "local_proto.h"
  5. int get_double(const struct proj_parm *parm, const struct proj_desc *desc,
  6. double *val)
  7. {
  8. char answer[200];
  9. sprintf(answer, "Enter %s ", desc->desc);
  10. *val = prompt_num_double(answer, parm->deflt, 1);
  11. return 1;
  12. }
  13. int get_int(const struct proj_parm *parm, const struct proj_desc *desc,
  14. int *val)
  15. {
  16. char answer[200];
  17. sprintf(answer, "Enter %s ", desc->desc);
  18. *val = prompt_num_int(answer, (int)parm->deflt, 1);
  19. return 1;
  20. }
  21. int get_zone(void)
  22. {
  23. char answer[200];
  24. int first_time = 1;
  25. zone = -1;
  26. while ((zone < 0) || (zone > 60)) {
  27. if (first_time)
  28. first_time = 0;
  29. else
  30. fprintf(stdout, "Invalid zone! Try Again:\n");
  31. sprintf(answer, "Enter Zone");
  32. zone = prompt_num_int(answer, 0, 0);
  33. }
  34. return (1);
  35. }
  36. /*
  37. * Get the Prime Meridian value and std parallel value
  38. **** */
  39. int get_LL_stuff(const struct proj_parm *parm, const struct proj_desc *desc,
  40. int lat, double *val)
  41. {
  42. char answer[200];
  43. char buff[256];
  44. /* get LONCEN value arguments */
  45. if (parm->def_exists == 1) {
  46. if (lat == 1) {
  47. G_format_northing(parm->deflt, buff, PROJECTION_LL);
  48. fprintf(stderr, "\n Enter %s (%s) :", desc->desc, buff);
  49. }
  50. else {
  51. G_format_easting((parm->deflt), buff, PROJECTION_LL);
  52. fprintf(stderr, "\n Enter %s (%s) :", desc->desc, buff);
  53. }
  54. G_gets(answer);
  55. if (strlen(answer) == 0) {
  56. *val = parm->deflt;
  57. return (1);
  58. }
  59. }
  60. else {
  61. fprintf(stderr, "\n Enter %s :", desc->desc);
  62. G_gets(answer);
  63. if (strlen(answer) == 0) {
  64. *val = 0.0;
  65. return (0);
  66. }
  67. }
  68. if (lat == 1) {
  69. if (!get_deg(answer, 1)) {
  70. return (0);
  71. }
  72. }
  73. else {
  74. if (!get_deg(answer, 0)) {
  75. return (0);
  76. }
  77. }
  78. sscanf(answer, "%lf", val);
  79. return (1);
  80. }
  81. double prompt_num_double(char *str, double deflt, int is_default)
  82. {
  83. char answer[300];
  84. double tmp;
  85. while (1) {
  86. if (is_default)
  87. fprintf(stderr, "\n%s [%.10f]: ", str, deflt);
  88. else
  89. fprintf(stderr, "\n%s: ", str);
  90. G_gets(answer);
  91. G_strip(answer);
  92. if (strlen(answer) == 0 && is_default)
  93. return deflt;
  94. else if (sscanf(answer, "%lf", &tmp) == 1)
  95. break;
  96. }
  97. return tmp;
  98. }
  99. int prompt_num_int(char *str, int deflt, int is_default)
  100. {
  101. char answer[300];
  102. int tmp;
  103. while (1) {
  104. if (is_default)
  105. fprintf(stderr, "\n%s [%d]: ", str, deflt);
  106. else
  107. fprintf(stderr, "\n%s: ", str);
  108. G_gets(answer);
  109. G_strip(answer);
  110. if (strlen(answer) == 0 && is_default)
  111. return deflt;
  112. else if (1 == sscanf(answer, "%d", &tmp))
  113. break;
  114. }
  115. return tmp;
  116. }