This is mathcad.c in view mode; [Download] [Up]
#include "incl.h"
extern FILE *fpo, *fpi;
extern char *word1, *word2;
extern char buffer[], newbuf[];
extern int inlinecount, outlinecount;
extern int boundingboxOK, boundingboxOPTION;
extern int pagesOK, atend, EndComments;
extern long CurrentPos, BboxPos, ScalePos;
extern double llx, lly, urx, ury, scx, scy;
mathcad ()
{
char str[MAXBUF+1];
/*
** Get and test first line.
*/
fgets (buffer, MAXBUF, fpi);
inlinecount++;
if (buffer[0] == EOT) {
fgets (buffer, MAXBUF, fpi);
inlinecount++;
}
if (buffer[0] == '%' && buffer[1] == '!') {
fprintf (fpo, "%s", FIRSTLINE);
outlinecount++;
/*
** Adjust BoundingBox and scale values depending on width (-w)
** height (-h) and space (-s) options.
*/
if (adj_bbox (urx - llx) == EXIT_FAILURE) return (EXIT_FAILURE);
fprintf (fpo, "%s %d %d %d %d\n",
PPBOUNDINGBOXC, (int)llx, (int)lly, (int)urx, (int)ury);
outlinecount++;
}
else {
fprintf (stderr, "\n*** First line not beginning with %%!\n\n");
return (EXIT_FAILURE);
}
scx = 1.0;
scy = 1.0;
for (fgets (buffer, MAXBUF, fpi); (!(feof (fpi)));
fgets (buffer, MAXBUF, fpi)) {
inlinecount++;
str[0] = '\0';
sscanf (buffer, "%s", str);
if (buffer[0] == '%' && buffer[1] == '%') {
strcpy (newbuf, buffer);
word1 = strtok (newbuf, " :\n");
word2 = strtok ('\0', " \n\t");
if ((word1 == NULL) || (strcmp (word1, PPPAGESIZE) == 0) ||
(strcmp (word1, PPPAGEBOUNDINGBOX) == 0) ||
(strcmp (word1, PPFEATURE) == 0)) {
sprintf (buffer, "");
}
else if (strcmp (word1, PPPAGE) == 0) {
/*
** This statement means there are more than 1 page.
** Impossible. Statement deleted.
*/
sprintf (buffer, "");
}
else if (strcmp (word1, PPPAGES) == 0) {
pagesOK = TRUE;
sprintf (buffer, "%s: 0 1\n", PPPAGES);
}
else if (strcmp (word1, PPENDCOMMENTS) == 0) {
fprintf (fpo, "%s\n", PPENDCOMMENTS);
/*
** Insert next statement for use with program ``dvialw''
*/
fprintf (fpo, "%s", DVIALW_BEGIN);
/*
** Insert scale statement.
*/
fprintf (fpo, "%.3lf %.3lf %s", scx, scy, SCALE);
outlinecount++;
sprintf (buffer, "");
EndComments = TRUE;
}
if (EndComments && !(pagesOK)) {
fprintf (fpo, "%s: 0 1\n", PPPAGES);
outlinecount++;
}
}
else if ((!(EndComments)) && (buffer[0] != '%')) {
comments ();
}
else if (strcmp (str, Ba4) == 0) {
fprintf (fpo, "%s%s", PPP, buffer);
fgets (buffer, MAXBUF, fpi);
inlinecount++;
fprintf (fpo, "%s%s", PPP, buffer);
outlinecount += 2;
sprintf (buffer, "");
}
else if (strcmp (str, Ba4BSTOPPED) == 0) {
fprintf (fpo, "%s%s", PPP, buffer);
outlinecount++;
sprintf (buffer, "");
}
fprintf (fpo, "%s", buffer);
outlinecount++;
}
/*
** Insert next statement for use with program ``dvialw''
*/
fprintf (fpo, "%s", DVIALW_END);
outlinecount++;
fprintf (stderr, "\n%s\n%s\n%s\n%s\n\n",
" ********* WARNING ********** ",
"When using program `dvialw' the `%end(plot)'",
"statement must be >>before<< a possible",
"`showpage' statement.");
return (EXIT_SUCCESS);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.