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