-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathestructura_args.c
72 lines (64 loc) · 1.82 KB
/
estructura_args.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
#include <stdio.h>
#include <string.h>
#include <math.h>
#define NUMBER_OF_ARGS 3
#define CMD_AMPLITUDE_TOKEN_NUMBER 1
#define CMD_AMPLITUDE_VALUE 2
#define CMD_AMPLITUDE_TOKEN "-A"
#define CMD_FREQUENCY_TOKEN_NUMBER 3
#define CMD_FREQUENCY_VALUE 4
#define CMD_FREQUENCY_TOKEN "-f"
#define CMD_PHASE_TOKEN_NUMBER 5
#define CMD_PHASE_TOKEN "-p"
#define CMD_PHASE_VALUE 6
typedef enum{
OK,
ERROR_NULL_POINTER,
ERROR_INVALID_ARGUMENTS,
ERROR_INVALID_NUMBER_OF_ARGUMENTS,
ERROR_INVALID_FLAG,
ERROR_INVALID_RESULT,
ERROR_PROG_INVOCATION
} status_t;
status_t validate_arguments(int argc, char * argv[], double * amp, double * freq, double * phase);
int main(int argc, char *argv[])
{
double v;
double amplitude;
double frequency;
double phase;
if (validate_arguments(argc,argv,&litude,&frequency,&phase)!=OK)
{
fprintf(stderr, "%s\n", "Argumentos invalidos.");
return ERROR_INVALID_ARGUMENTS;
}
return OK;
}
status_t validate_arguments(int argc, char * argv[], double * amp, double * freq, double * phase)
{
char * tmp;
if (amp == NULL || freq == NULL || phase == NULL)
return ERROR_NULL_POINTER;
if (argc != NUMBER_OF_ARGS)
return ERROR_INVALID_NUMBER_OF_ARGUMENTS;
if (!(strcmp(argv[CMD_AMPLITUDE_TOKEN_NUMBER], CMD_AMPLITUDE_TOKEN)))
return ERROR_INVALID_FLAG;
*amp = strtod(argv[CMD_AMPLITUDE_VALUE], &tmp);
if (*tmp)
return ERROR_PROG_INVOCATION;
if (!(strcmp(argv[CMD_FREQUENCY_TOKEN_NUMBER], CMD_FREQUENCY_TOKEN)))
return ERROR_INVALID_FLAG;
*freq = strtod(argv[CMD_FREQUENCY_VALUE], &tmp);
if (*tmp)
return ERROR_PROG_INVOCATION;
if (!(strcmp(argv[CMD_PHASE_TOKEN_NUMBER], CMD_PHASE_TOKEN)))
return ERROR_INVALID_FLAG;
*phase = strtod(argv[CMD_PHASE_VALUE], &tmp);
if (*tmp)
return ERROR_PROG_INVOCATION;
if (*amp < 0 || *freq < 0 || *phase < 0)
{
return ERROR_INVALID_ARGUMENTS;
}
return OK;
}