Simplify unnecessary persistence of extended response state

The \chk_vfo  command to  rigctl_parse() accepts an  extended response
prefix but  does not act  upon it, instead it  is held over  until the
next command.  This seems unnecessary  as an extended  response prefix
can just as  easily be added to the following  command if required. By
removing this  carried over  state the processing  of commands  can be
greatly simplified as per this commit.
pull/128/head
Bill Somerville 2019-08-29 14:27:22 +01:00
rodzic d931bd4e18
commit 8028663ef9
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: D864B06D1E81618F
4 zmienionych plików z 19 dodań i 25 usunięć

Wyświetl plik

@ -138,8 +138,6 @@ int main(int argc, char *argv[])
int interactive = 1; /* if no cmd on command line, switch to interactive */ int interactive = 1; /* if no cmd on command line, switch to interactive */
int prompt = 1; /* Print prompt in rotctl */ int prompt = 1; /* Print prompt in rotctl */
char send_cmd_term = '\r'; /* send_cmd termination char */ char send_cmd_term = '\r'; /* send_cmd termination char */
int ext_resp = 0;
char resp_sep = '\n';
while (1) while (1)
{ {
@ -401,8 +399,7 @@ int main(int argc, char *argv[])
do do
{ {
retcode = rotctl_parse(my_rot, stdin, stdout, argv, argc, retcode = rotctl_parse(my_rot, stdin, stdout, argv, argc,
interactive, prompt, send_cmd_term, interactive, prompt, send_cmd_term);
&ext_resp, &resp_sep);
if (retcode == 2) if (retcode == 2)
{ {

Wyświetl plik

@ -504,12 +504,13 @@ static int next_word(char *buffer, int argc, char *argv[], int newline)
int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc, int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc,
int interactive, int prompt, char send_cmd_term, int interactive, int prompt, char send_cmd_term)
int * ext_resp_ptr, char * resp_sep_ptr)
{ {
int retcode; /* generic return code from functions */ int retcode; /* generic return code from functions */
unsigned char cmd; unsigned char cmd;
struct test_table *cmd_entry; struct test_table *cmd_entry;
int ext_resp = 0;
char resp_sep = '\n';
char command[MAXARGSZ + 1]; char command[MAXARGSZ + 1];
char arg1[MAXARGSZ + 1], *p1 = NULL; char arg1[MAXARGSZ + 1], *p1 = NULL;
@ -542,7 +543,7 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc,
*/ */
if (cmd == '+' && !prompt) if (cmd == '+' && !prompt)
{ {
*ext_resp_ptr = 1; ext_resp = 1;
if (scanfc(fin, "%c", &cmd) < 1) if (scanfc(fin, "%c", &cmd) < 1)
{ {
@ -561,8 +562,8 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc,
&& !prompt) && !prompt)
{ {
*ext_resp_ptr = 1; ext_resp = 1;
*resp_sep_ptr = cmd; resp_sep = cmd;
if (scanfc(fin, "%c", &cmd) < 1) if (scanfc(fin, "%c", &cmd) < 1)
{ {
@ -1400,7 +1401,7 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc,
* Extended Response protocol: output received command name and arguments * Extended Response protocol: output received command name and arguments
* response. * response.
*/ */
if (interactive && *ext_resp_ptr && !prompt) if (interactive && ext_resp && !prompt)
{ {
char a1[MAXARGSZ + 2]; char a1[MAXARGSZ + 2];
char a2[MAXARGSZ + 2]; char a2[MAXARGSZ + 2];
@ -1412,7 +1413,7 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc,
p3 == NULL ? a3[0] = '\0' : snprintf(a3, sizeof(a3), " %s", p3); p3 == NULL ? a3[0] = '\0' : snprintf(a3, sizeof(a3), " %s", p3);
p4 == NULL ? a4[0] = '\0' : snprintf(a4, sizeof(a4), " %s", p4); p4 == NULL ? a4[0] = '\0' : snprintf(a4, sizeof(a4), " %s", p4);
fprintf(fout, "%s:%s%s%s%s%c", cmd_entry->name, a1, a2, a3, a4, *resp_sep_ptr); fprintf(fout, "%s:%s%s%s%s%c", cmd_entry->name, a1, a2, a3, a4, resp_sep);
} }
retcode = (*cmd_entry->rot_routine)(my_rot, retcode = (*cmd_entry->rot_routine)(my_rot,
@ -1420,8 +1421,8 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc,
interactive, interactive,
prompt, prompt,
send_cmd_term, send_cmd_term,
*ext_resp_ptr, ext_resp,
*resp_sep_ptr, resp_sep,
cmd_entry, cmd_entry,
p1, p1,
p2 ? p2 : "", p2 ? p2 : "",
@ -1441,8 +1442,8 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc,
if (interactive && !prompt) if (interactive && !prompt)
{ {
fprintf(fout, NETROTCTL_RET "%d\n", retcode); fprintf(fout, NETROTCTL_RET "%d\n", retcode);
*ext_resp_ptr = 0; ext_resp = 0;
*resp_sep_ptr = '\n'; resp_sep = '\n';
} }
else else
{ {
@ -1455,17 +1456,17 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc,
if (interactive && !prompt) if (interactive && !prompt)
{ {
/* netrotctl RIG_OK */ /* netrotctl RIG_OK */
if (!(cmd_entry->flags & ARG_OUT) && !*ext_resp_ptr) if (!(cmd_entry->flags & ARG_OUT) && !ext_resp)
{ {
fprintf(fout, NETROTCTL_RET "0\n"); fprintf(fout, NETROTCTL_RET "0\n");
} }
/* Extended Response protocol */ /* Extended Response protocol */
else if (*ext_resp_ptr && cmd != 0xf0) else if (ext_resp && cmd != 0xf0)
{ {
fprintf(fout, NETROTCTL_RET "0\n"); fprintf(fout, NETROTCTL_RET "0\n");
*ext_resp_ptr = 0; ext_resp = 0;
*resp_sep_ptr = '\n'; resp_sep = '\n';
} }
} }
} }

Wyświetl plik

@ -45,7 +45,6 @@ int print_conf_list(const struct confparams *cfp, rig_ptr_t data);
int set_conf(ROT *my_rot, char *conf_parms); int set_conf(ROT *my_rot, char *conf_parms);
int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc, int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc,
int interactive, int prompt, char send_cmd_term, int interactive, int prompt, char send_cmd_term);
int * ext_resp_ptr, char * resp_sep_ptr);
#endif /* ROTCTL_PARSE_H */ #endif /* ROTCTL_PARSE_H */

Wyświetl plik

@ -591,8 +591,6 @@ void * handle_socket(void *arg)
int retcode; int retcode;
char host[NI_MAXHOST]; char host[NI_MAXHOST];
char serv[NI_MAXSERV]; char serv[NI_MAXSERV];
int ext_resp = 0;
char resp_sep = '\n';
#ifdef __MINGW32__ #ifdef __MINGW32__
int sock_osfhandle = _open_osfhandle(handle_data_arg->sock, _O_RDONLY); int sock_osfhandle = _open_osfhandle(handle_data_arg->sock, _O_RDONLY);
@ -629,8 +627,7 @@ void * handle_socket(void *arg)
do do
{ {
retcode = rotctl_parse(handle_data_arg->rot, fsockin, fsockout, NULL, 0, 1, retcode = rotctl_parse(handle_data_arg->rot, fsockin, fsockout, NULL, 0, 1, 0, '\r');
0, '\r', &ext_resp, &resp_sep);
if (ferror(fsockin) || ferror(fsockout)) if (ferror(fsockin) || ferror(fsockout))
{ {