From a7c37f8a693091281a8b38fbdab65a6caa2167d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Fillod=2C=20F8CFE?= Date: Wed, 5 May 2010 20:11:55 +0000 Subject: [PATCH] necessary stdout flushing in interactive mode with prompt, under win/wine git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@2909 7ae35d74-ebe9-4afe-98af-79ac388436b8 --- tests/rigctl_parse.c | 21 ++++++++++++++------- tests/rotctl_parse.c | 24 ++++++++++++++++-------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/tests/rigctl_parse.c b/tests/rigctl_parse.c index 3b28e4533..7154fe44d 100644 --- a/tests/rigctl_parse.c +++ b/tests/rigctl_parse.c @@ -275,6 +275,13 @@ static int scanfc(FILE *fin, const char *format, void *p) } while(1); } +#define fprintf_flush(f, a...) \ + ({ int __ret; \ + __ret = fprintf((f), a); \ + fflush((f)); \ + __ret; \ + }) + #define MAXARGSZ 127 extern int interactive; @@ -299,7 +306,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc) if (interactive) { if (prompt) - fprintf(fout, "\nRig command: "); + fprintf_flush(fout, "\nRig command: "); do { if (scanfc(fin, "%c", &cmd) < 1) @@ -346,7 +353,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc) if (last_was_ret) { if (prompt) { fprintf(fout, "? for help, q to quit.\n"); - fprintf(fout, "\nRig command: "); + fprintf_flush(fout, "\nRig command: "); } return 0; } @@ -391,7 +398,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc) if (!(cmd_entry->flags & ARG_NOVFO) && vfo_mode) { if (interactive) { if (prompt) - fprintf(fout, "VFO: "); + fprintf_flush(fout, "VFO: "); if (scanfc(fin, "%s", arg1) < 1) return -1; vfo = rig_parse_vfo(arg1); @@ -410,7 +417,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc) if (interactive) { char *nl; if (prompt) - fprintf(fout, "%s: ", cmd_entry->arg1); + fprintf_flush(fout, "%s: ", cmd_entry->arg1); if (fgets(arg1, MAXARGSZ, fin) == NULL) return -1; if (arg1[0] == 0xa) @@ -431,7 +438,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc) if ((cmd_entry->flags & ARG_IN1) && cmd_entry->arg1) { if (interactive) { if (prompt) - fprintf(fout, "%s: ", cmd_entry->arg1); + fprintf_flush(fout, "%s: ", cmd_entry->arg1); if (scanfc(fin, "%s", arg1) < 1) return -1; p1 = arg1; @@ -447,7 +454,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc) if (p1 && p1[0] != '?' && (cmd_entry->flags & ARG_IN2) && cmd_entry->arg2) { if (interactive) { if (prompt) - fprintf(fout, "%s: ", cmd_entry->arg2); + fprintf_flush(fout, "%s: ", cmd_entry->arg2); if (scanfc(fin, "%s", arg2) < 1) return -1; p2 = arg2; @@ -463,7 +470,7 @@ int rigctl_parse(RIG *my_rig, FILE *fin, FILE *fout, char *argv[], int argc) if (p1 && p1[0] != '?' && (cmd_entry->flags & ARG_IN3) && cmd_entry->arg3) { if (interactive) { if (prompt) - fprintf(fout, "%s: ", cmd_entry->arg3); + fprintf_flush(fout, "%s: ", cmd_entry->arg3); if (scanfc(fin, "%s", arg3) < 1) return -1; p3 = arg3; diff --git a/tests/rotctl_parse.c b/tests/rotctl_parse.c index 2d11ca978..7dce54c21 100644 --- a/tests/rotctl_parse.c +++ b/tests/rotctl_parse.c @@ -179,6 +179,14 @@ static int scanfc(FILE *fin, const char *format, void *p) } while(1); } +#define fprintf_flush(f, a...) \ + ({ int __ret; \ + __ret = fprintf((f), a); \ + fflush((f)); \ + __ret; \ + }) + + #define MAXARGSZ 127 extern int interactive; @@ -203,7 +211,7 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc) if (interactive) { if (prompt) - fprintf(fout, "\nRotator command: "); + fprintf_flush(fout, "\nRotator command: "); do { if (scanfc(fin, "%c", &cmd) < 1) @@ -249,7 +257,7 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc) if (cmd == 0x0a || cmd == 0x0d) { if (last_was_ret) { if (prompt) { - fprintf(fout, "? for help, q to quit.\n"); + fprintf_flush(fout, "? for help, q to quit.\n"); } return 0; } @@ -286,7 +294,7 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc) cmd_entry = find_cmd_entry(cmd); if (!cmd_entry) { - fprintf(stderr, "Command '%c' not found!\n", cmd); + fprintf_flush(stderr, "Command '%c' not found!\n", cmd); return 0; } @@ -297,7 +305,7 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc) if (interactive) { char *nl; if (prompt) - fprintf(fout, "%s: ", cmd_entry->arg1); + fprintf_flush(fout, "%s: ", cmd_entry->arg1); if (fgets(arg1, MAXARGSZ, fin) == NULL) return -1; if (arg1[0] == 0xa) @@ -317,7 +325,7 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc) } else if ((cmd_entry->flags & ARG_IN1) && cmd_entry->arg1) { if (interactive) { if (prompt) - fprintf(fout, "%s: ", cmd_entry->arg1); + fprintf_flush(fout, "%s: ", cmd_entry->arg1); if (scanfc(fin, "%s", arg1) < 1) return -1; p1 = arg1; @@ -333,7 +341,7 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc) if (p1 && p1[0]!='?' && (cmd_entry->flags & ARG_IN2) && cmd_entry->arg2) { if (interactive) { if (prompt) - fprintf(fout, "%s: ", cmd_entry->arg2); + fprintf_flush(fout, "%s: ", cmd_entry->arg2); if (scanfc(fin, "%s", arg2) < 1) return -1; p2 = arg2; @@ -349,7 +357,7 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc) if (p1 && p1[0]!='?' && (cmd_entry->flags & ARG_IN3) && cmd_entry->arg3) { if (interactive) { if (prompt) - fprintf(fout, "%s: ", cmd_entry->arg3); + fprintf_flush(fout, "%s: ", cmd_entry->arg3); if (scanfc(fin, "%s", arg3) < 1) return -1; p3 = arg3; @@ -366,7 +374,7 @@ int rotctl_parse(ROT *my_rot, FILE *fin, FILE *fout, char *argv[], int argc) if (p1 && p1[0]!='?' && (cmd_entry->flags & ARG_IN4) && cmd_entry->arg4) { if (interactive) { if (prompt) - fprintf(fout, "%s: ", cmd_entry->arg4); + fprintf_flush(fout, "%s: ", cmd_entry->arg4); if (scanfc(fin, "%s", arg4) < 1) return -1; p4 = arg4;