Fix uip/whom.c for C89 compatibility
[mmh] / uip / prompter.c
index 2adbd48..7f71e02 100644 (file)
@@ -38,6 +38,7 @@ static struct swit switches[] = {
        { NULL, 0 }
 };
 
+char *version=VERSION;
 
 volatile sig_atomic_t wtuser = 0;
 volatile sig_atomic_t sigint = 0;
@@ -54,9 +55,10 @@ int
 main(int argc, char **argv)
 {
        int qbody = 1, prepend = 1, rapid = 0;
-       int fdi, fdo, i, state;
+       int fdi, fdo, i;
        char *cp, *drft = NULL;
-       char name[NAMESZ], field[BUFSIZ];
+       enum state state;
+       struct field f = {{0}};
        char buffer[BUFSIZ], tmpfil[BUFSIZ];
        char **arguments, **argp;
        FILE *in, *out;
@@ -137,58 +139,57 @@ main(int argc, char **argv)
        /*
        ** Loop through the lines of the draft skeleton.
        */
-       for (state = FLD;;) {
-               switch (state = m_getfld(state, name, field, sizeof(field),
-                               in)) {
-               case FLD:
-               case FLDPLUS:
+       for (state = FLD2;;) {
+               switch (state = m_getfld2(state, &f, in)) {
+               case LENERR2:
+                       state = FLD2;
+                       /* FALL */
+
+               case FLD2:
                        /*
                        ** Check if the value of field contains
                        ** anything other than space or tab.
                        */
-                       for (cp = field; *cp; cp++)
-                               if (*cp != ' ' && *cp != '\t')
+                       for (cp = f.value; *cp; cp++) {
+                               if (*cp != ' ' && *cp != '\t') {
                                        break;
+                               }
+                       }
 
                        /* If so, just add header line to draft */
                        if (*cp++ != '\n' || *cp) {
-                               printf("%s:%s", name, field);
-                               fprintf(out, "%s:%s", name, field);
-                               while (state == FLDPLUS) {
-                                       state = m_getfld(state, name, field,
-                                                       sizeof(field), in);
-                                       printf("%s", field);
-                                       fprintf(out, "%s", field);
-                               }
+                               printf("%s:%s", f.name, f.value);
+                               fprintf(out, "%s:%s", f.name, f.value);
                        } else {
                                /* Else, get value of header field */
-                               printf("%s: ", name);
+                               printf("%s: ", f.name);
                                fflush(stdout);
-                               i = getln(field, sizeof(field));
+                               i = getln(buffer, sizeof(buffer));
                                if (i == -1) {
 abort:
                                        unlink(tmpfil);
                                        exit(EX_DATAERR);
                                }
-                               if (i || (field[0]!='\n' && field[0]!='\0')) {
-                                       fprintf(out, "%s:", name);
+                               if (i || (buffer[0]!='\n' && buffer[0]!='\0')) {
+                                       fprintf(out, "%s:", f.name);
                                        do {
-                                               if (field[0] != ' ' && field[0] != '\t')
+                                               if (buffer[0] != ' ' && buffer[0] != '\t') {
                                                        putc(' ', out);
-                                               fprintf(out, "%s", field);
-                                       } while (i == 1 && (i = getln(field, sizeof(field))) >= 0);
-                                       if (i == -1)
+                                               }
+                                               fprintf(out, "%s", buffer);
+                                       } while (i == 1 && (i = getln(buffer, sizeof(buffer))) >= 0);
+                                       if (i == -1) {
                                                goto abort;
+                                       }
                                }
                        }
-
                        continue;
 
-               case BODY:
-               case FILEEOF:
+               case BODY2:
+               case FILEEOF2:
                        fprintf(out, "--------\n");
                        if (qbody) {
-                               if (!*field) {
+                               if (f.value == NULL) {
                                        printf("--------\n");
                                        goto has_no_body;
                                }
@@ -198,8 +199,9 @@ abort:
                                        fflush(stdout);
                                        for (;;) {
                                                getln(buffer, sizeof(buffer));
-                                               if (!*buffer)
+                                               if (!*buffer) {
                                                        break;
+                                               }
                                                fprintf(out, "%s", buffer);
                                        }
                                } else {
@@ -207,36 +209,47 @@ abort:
                                }
                        }
 
-                       do {
-                               fprintf(out, "%s", field);
-                               if (!rapid && !sigint)
-                                       printf("%s", field);
-                       } while (state == BODY &&
-                                       (state = m_getfld(state, name,
-                                       field, sizeof(field), in)));
+                       if (state == BODY2) {
+                               do {
+                                       fprintf(out, "%s", f.value);
+                                       if (!rapid && !sigint) {
+                                               printf("%s", f.value);
+                                       }
+                               } while ((state = m_getfld2(state, &f, in))
+                                               ==BODY2);
+                               if (state != FILEEOF2) {
+                                       adios(EX_IOERR, "m_getfld2", "io error");
+                               }
+                       }
 
-                       if (prepend || !qbody)
+                       if (prepend || !qbody) {
                                break;
+                       }
 
                        printf("--------Enter additional text\n");
 has_no_body:
                        fflush(stdout);
                        for (;;) {
-                               getln(field, sizeof(field));
-                               if (!*field)
+                               getln(buffer, sizeof(buffer));
+                               if (!*buffer) {
                                        break;
-                               fprintf(out, "%s", field);
+                               }
+                               fprintf(out, "%s", buffer);
                        }
                        break;
 
+               case FMTERR2:
+                       advise(NULL, "skeleton is poorly formatted");
+                       continue;
                default:
-                       adios(EX_DATAERR, NULL, "skeleton is poorly formatted");
+                       adios(EX_IOERR, "m_getfld2", "io error");
                }
                break;
        }
 
-       if (qbody)
+       if (qbody) {
                printf("--------\n");
+       }
 
        fflush(stdout);
        fclose(in);
@@ -254,7 +267,7 @@ has_no_body:
        close(fdo);
        unlink(tmpfil);
 
-       context_save();  /* save the context file */
+       context_save();
        return EX_OK;
 }