X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/4a78cbcd4fa986d9c1e7bd0a5a4bdb619faeb7cb..9322ba2854211794c27fae9468768b80b767c211:/uip/prompter.c diff --git a/uip/prompter.c b/uip/prompter.c index 0aedc8c1..900572b2 100644 --- a/uip/prompter.c +++ b/uip/prompter.c @@ -78,13 +78,7 @@ main (int argc, char **argv) char *tmpfil; m_getfld_state_t gstate = 0; -#ifdef LOCALE - setlocale(LC_ALL, ""); -#endif - invo_name = r1bindex (argv[0], '/'); - - /* read user profile/context */ - context_read(); + if (nmh_init(argv[0], 2)) { return 1; } arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; @@ -220,8 +214,8 @@ main (int argc, char **argv) while (state == FLDPLUS) { fieldsz = sizeof field; state = m_getfld (&gstate, name, field, &fieldsz, in); - printf ("%s", field); - fprintf (out, "%s", field); + fputs(field, stdout); + fputs(field, out); } } else { /* Else, get value of header field */ @@ -233,7 +227,7 @@ abort: if (killp || erasep) { tcsetattr(0, TCSADRAIN, &tio); } - unlink (tmpfil); + (void) m_unlink (tmpfil); done (1); } if (i != 0 || (field[0] != '\n' && field[0] != 0)) { @@ -241,7 +235,7 @@ abort: do { if (field[0] != ' ' && field[0] != '\t') putc (' ', out); - fprintf (out, "%s", field); + fputs(field, out); } while (i == 1 && (i = getln (field, sizeof(field))) >= 0); if (i == -1) @@ -257,7 +251,7 @@ abort: break; fprintf (out, "--------\n"); if (field[0] == 0 || !prepend) - printf ("--------\n"); + puts("--------"); if (field[0]) { if (prepend && body) { printf ("\n--------Enter initial text\n\n"); @@ -268,14 +262,14 @@ abort: break; if (buffer[0] == 0) break; - fprintf (out, "%s", buffer); + fputs(buffer, out); } } do { - fprintf (out, "%s", field); + fputs(field, out); if (!rapid && !sigint) - printf ("%s", field); + fputs(field, stdout); } while (state == BODY && (fieldsz = sizeof field, state = m_getfld (&gstate, name, field, &fieldsz, in))); @@ -292,7 +286,7 @@ abort: break; if (field[0] == 0) break; - fprintf (out, "%s", field); + fputs(field, out); } break; @@ -304,7 +298,7 @@ abort: m_getfld_state_destroy (&gstate); if (body) - printf ("--------\n"); + puts("--------"); fflush (stdout); fclose (in); @@ -322,7 +316,7 @@ abort: cpydata (fdi, fdo, tmpfil, drft); close (fdi); close (fdo); - unlink (tmpfil); + (void) m_unlink (tmpfil); context_save (); /* save the context file */ done (0); @@ -335,9 +329,9 @@ getln (char *buffer, int n) { int c; char *cp; + static int quoting = 0; - cp = buffer; - *cp = 0; + *buffer = 0; switch (setjmp (sigenv)) { case OK: @@ -353,15 +347,20 @@ getln (char *buffer, int n) return NOTOK; } + cp = buffer; + *cp = 0; + for (;;) { switch (c = getchar ()) { case EOF: + quoting = 0; clearerr (stdin); longjmp (sigenv, DONE); case '\n': - if (cp[-1] == QUOTE) { - cp[-1] = c; + if (quoting) { + *(cp - 1) = c; + quoting = 0; wtuser = 0; return 1; } @@ -371,6 +370,11 @@ getln (char *buffer, int n) return 0; default: + if (c == QUOTE) { + quoting = 1; + } else { + quoting = 0; + } if (cp < buffer + n) *cp++ = c; *cp = 0;