CarApp
Notificaciones a celulares al detectar la alarma del auto activada.
 Todo Estructuras de Datos Archivos Funciones Variables Enumeraciones Valores de enumeraciones 'defines'
shell.c
Ir a la documentación de este archivo.
1 //******************************************************************************
2 // Nombre: shell.c
3 // Versión: 1.0
4 // Descripción: Intérprete de comandos. Recibe una cadena de carecteres que
5 // especifica un comando. El comando está especificado por el
6 // nombre y además permite recibir parámetros separados por
7 // espacios. Al recibir un string lo procesa para obtener los
8 // parámetros y el nombre de comando. Luego llama a la función
9 // correspondiente.
10 // Autores: Juan Martín Ortega, Ramiro Barrón, Andrea Cukerman
11 // IIE, Facultad de Ingeniería, UdelaR
12 // Uruguay
13 // Fecha: Junio 2012
14 //******************************************************************************
15 
26 #include <string.h>
27 #include <ctype.h>
28 #include "shell_commands.h"
29 #include "gsm.h"
30 #include "shell.h"
31 #include "aux_functions.h"
32 
41 #define MAX_PAR 4
42 
43 
53 
58 unsigned int number_par;
59 
60 
66 extern shell_command commands[];
67 
74 extern cell_phone users[];
75 
76 
84 void shell_exec(char* str)
85  {
86  number_par = 0; // Inicializa la cantidad de parámetros
87  command_par[number_par] = strtok(str," "); // Guarda puntero a primer parámetro en arreglo de punteros
88  number_par++; // Aumenta la cantidad de parámetros
89  if(command_par[0]==NULL) return; // Si no hay parámetros retorna
90  while((command_par[number_par]=strtok(NULL," ")) != NULL && number_par < MAX_PAR) // Mientras haya otro parámetro y alcanza la cantidad máxima de parámetros,
91  { // guarda el puntero al mismo en el arreglo de punteros y
92  number_par++; // aumenta la cantidad de parámetros
93  }//end while
94  int j = 0; // Define primer contador auxiliar
95  while(strcmp(users[j].number,"0")) // Recorre la lista de celulares habilitados
96  {
97  if(!strcmp(users[j].number, command_par[0])) // Verifica si el celular se encuentra en la lista de celulares habilitados
98  { // SI SE ENCUENTRA EN LA LISTA
99  void (*comando)(unsigned int argc, char** argv); // Define puntero a función
100  int i = 0; // Define segundo contador auxiliar
101  while(commands[i].nombre != 0) // Recorre la lista de comandos
102  {
103  if(!stricmp(commands[i].nombre, command_par[1])) // Verifica si el comando está en la lista de comandos
104  { // SI ESTÁ EN LA LISTA
105  comando = commands[i].funcion; // Carga el comando en el puntero a funciones definido anteriormente
106  break;
107  }//end if
108  i++; // Incrementa segundo contador auxiliar
109  if(commands[i].nombre == 0) // Verifica si se llego al final de la lista de comandos
110  { // SI SE LLEGO AL FINAL DE LA LISTA
111  send_sms(command_par[0],"COMANDO NO EXISTE. UTILICE: AYUDA (COMANDO)."); // Envia sms al celular que envió el comando que el comando ingresado no existe
112  return;
113  }//end if
114  }//end while
115  comando(number_par,command_par); // Llama al comando pasado como argumento
116  return;
117  }//end if
118  j++; // Incrementa el primer contador
119  }//end while
120  }//end shell_exec