static void dofile( /* plot a file */ int optc, char *optv[], char *file ) { char stmp[256]; int i; /* start fresh */ mgclearall(); /* type options first */ for (i = 0; i < optc; i++) if (istyp(optv[i])) { sprintf(stmp, "include=%s.plt", optv[i]+1); setmgvar(progname, stdin, stmp); } else i++; /* file next */ mgload(file); /* variable options last */ for (i = 0; i < optc; i++) if (isvar(optv[i])) { sprintf(stmp, "%s=%s", optv[i]+1, optv[i+1]); setmgvar(progname, stdin, stmp); i++; } /* graph it */ mgraph(); }
void dofile( /* plot a file */ int optc, char *optv[], char *file ) { int width = 79; int length = 21; char stmp[256]; int i; /* start fresh */ mgclearall(); /* load file */ mgload(file); /* do options */ for (i = 0; i < optc; i += 2) if (optv[i][0] == '+') { sprintf(stmp, "%s=%s", optv[i]+1, optv[i+1]); setmgvar("command line", stdin, stmp); } else switch (optv[i][1]) { case 'w': width = atoi(optv[i+1]); break; case 'l': length = atoi(optv[i+1]); break; default: fprintf(stderr, "%s: unknown option: %s\n", progname, optv[i]); quit(1); } /* graph it */ cgraph(width, length); }
void mgload( /* load a file */ char *file ) { FILE *fp; char sbuf[MAXLINE], *fgets(); int inquote; register char *cp, *cp2; if (file == NULL) { fp = stdin; file = "<stdin>"; } else if ((fp = fopen(file, "r")) == NULL) { fprintf(stderr, "%s: Cannot open: %s\n", progname, file); quit(1); } while (fgets(sbuf+1, sizeof(sbuf)-1, fp) != NULL) { inquote = 0; cp2 = sbuf; for (cp = sbuf+1; *cp; cp++) /* condition the input line */ switch (*cp) { case '#': if (!inquote) { cp[0] = '\n'; cp[1] = '\0'; break; } *cp2++ = *cp; break; case '"': inquote = !inquote; break; case '\\': if (!cp[1]) break; if (cp[1] == '\n') { cp[0] = '\0'; fgets(cp, sizeof(sbuf)-(cp-sbuf), fp); cp--; break; } *cp2++ = *++cp; break; case ' ': case '\t': case '\n': if (!inquote) break; *cp2++ = *cp; break; default: *cp2++ = *cp; break; } *cp2 = '\0'; if (inquote) { fputs(sbuf, stderr); fprintf(stderr, "%s: %s: Missing quote\n", progname, file); quit(1); } if (sbuf[0]) setmgvar(file, fp, sbuf); } if (fp != stdin) fclose(fp); }