- if (!mode || !strcmp (mode, "program"))
- getwordsfrom = FROM_PROGRAM;
- else if (!strcmp (mode, "file"))
- getwordsfrom = FROM_FILE;
- else if (!strcmp (mode, "string"))
- getwordsfrom = FROM_RESRC;
- else
- {
- fprintf (stderr,
- "%s: mode must be program, file, or string, not %s\n",
- progname, mode);
- exit (1);
- }
-
- if (getwordsfrom == FROM_PROGRAM && !program)
- {
- fprintf (stderr, "%s: no program specified.\n", progname);
- exit (1);
- }
- if (getwordsfrom == FROM_FILE && !filename)
- {
- fprintf (stderr, "%s: no file specified.\n", progname);
- exit (1);
- }
-
- words = get_words();
-}
-
-static char *
-get_words()
-{
- FILE *pp;
- static char buf[BUFSIZ];
- register char *p = buf;
-
- buf[0] = '\0';
-
- switch (getwordsfrom)
- {
- case FROM_PROGRAM:
- if (pp = popen(program, "r"))
- {
- while (fgets(p, sizeof(buf) - strlen(buf), pp))
- {
- if (strlen(buf) + 1 < sizeof(buf))
- p = buf + strlen(buf);
- else
- break;
- }
- (void) pclose(pp);
- if (! buf[0])
- sprintf (buf, "\"%s\" produced no output!", orig_program);
- p = buf;
- }
- else
- {
- perror(program);
- p = def_words;
- }
- break;
- case FROM_FILE:
- if (pp = fopen(filename, "r"))
- {
- while (fgets(p, sizeof(buf) - strlen(buf), pp))
- {
- if (strlen(buf) + 1 < sizeof(buf))
- p = buf + strlen(buf);
- else
- break;
- }
- (void) fclose(pp);
- if (! buf[0])
- sprintf (buf, "file \"%s\" is empty!", filename);
- p = buf;
- }
- else
- {
- sprintf (buf, "couldn't read file \"%s\"!", filename);
- p = buf;
- }
- break;
- case FROM_RESRC:
- p = text;
- break;
- default:
- p = def_words;
- break;
- }
-
- if (!p || *p == '\0')
- p = def_words;
- return p;