diff options
Diffstat (limited to 'src/misc.c')
-rw-r--r-- | src/misc.c | 64 |
1 files changed, 64 insertions, 0 deletions
@@ -57,3 +57,67 @@ int try_write(int _fd, char *_buff, int _size, int _retry) } return 0; } + +struct prog_params parse_args(int argc, char* argv[]) +{ + struct prog_params ret; + memset(&ret, 0, sizeof(ret)); + + for (int i = 1; i < argc; i++) + { + int i_cpy = i; //i might be changed in loop + + if(argv[i_cpy][0] == '-') + { + for (int o = 1; o < strlen(argv[i_cpy]); o++) + { + switch (argv[i_cpy][o]) + { + case 'h': + ERROR_HELP(""); + break; + case 'p': + ret.telnet = 1; + ret.port = atoi(argv[i_cpy + 1]); + i++; + break; + case 'i': + ret.telnet = 1; + ret.ip = argv[i_cpy + 1]; + i++; + break; + case 's'://Serial modem + ret.serial = 1; + ret.serial_port = argv[i_cpy + 1]; + i++; + break; + case 'b': + ret.serial = 1; + ret.serial_baudrate = atoi(argv[i_cpy + 1]); + i++; + break; + case 'f'://PID file for spawned children + ret.fork = 1; + ret.pidfile = argv[i_cpy + 1]; + i++; + break; + default: + ERROR_HELP("Unrecognized Option: '%c'\n", argv[i_cpy][o]); + break; + };//switch + }//for + }//if + else + { + //Copy the rest as arguments for prog to exec + ret.run_argc = argc - i_cpy; + ret.run_argv = &(argv[i_cpy]); + break; + }//else + }//for + + if(ret.telnet == ret.serial)//run EITHER in telnet OR modem mode + ERROR_HELP("Select either modem OR telnet.\n"); + + return ret; +} |