void writep( /* print primitive in human-readable form */ register PRIMITIVE *p, FILE *fp ) { if (fp == NULL) fp = stdout; if (!iscom(p->com)) error(USER, "bad command in writep"); fprintf(fp, "%c ", p->com); if (isprim(p->com)) { fprintf(fp, "%3o ", p->arg0 & 0177); fprintf(fp, "%5d %5d %5d %5d ", p->xy[XMN], p->xy[YMN], p->xy[XMX], p->xy[YMX]); } else fprintf(fp, "%3o ", p->arg0); if (p->args != NULL) { putc(ADELIM, fp); fputs(p->args, fp); } putc('\n', fp); if (p->com == PDRAW || p->com == PEOF) if (fflush(fp) == -1) error(SYSTEM, "error detected writing file in writep"); }
void even(int len) { len/=2; int i,prim; for(i=en[len-1];i<en[len];i++) { prim=i*en[len]+opp[i]; isprim(prim); } }
void odd(int len) { len=(len-1)/2; int i,m,prim; for(i=en[len-1];i<en[len];i++) for(m=0;m<=9;m++) { prim=i*en[len+1]+m*en[len]+opp[i]; isprim(prim); } }
static void dump(word w, int clear) { if(isprim(w)) { fprintf(stderr, "%s", primname[w.prim]); } else if(isnum(w)) { fprintf(stderr, "%g", w.ptr[1].num); } else { if(!clear) fprintf(stderr, "("); dump(w.ptr[0], 1); fprintf(stderr, " "); dump(w.ptr[1], 0); if(!clear) fprintf(stderr, ")"); } if(clear > 1) fprintf(stderr, "\n"); }
void plot( /* plot meta-file */ FILE *infp ) { PRIMITIVE nextp; do { readp(&nextp, infp); while (isprim(nextp.com)) { doprim(&nextp); readp(&nextp, infp); } } while (doglobal(&nextp)); }
void pmergesort( /* merge sorted files with list */ FILE *fi[], /* array of input files */ int nf, /* number of input files */ PLIST *pl, /* sorted list */ int (*pcmp)(), /* comparison function, takes primitive handles */ FILE *ofp /* output file */ ) { PRIMITIVE *plp; /* position in list */ PRIMITIVE *pp[NFILES]; /* input primitives */ int minf = 0; PRIMITIVE *minp; register int i; if (pl == NULL) plp = NULL; /* initialize list */ else plp = pl->ptop; for (i = 0; i < nf; i++) { /* initialize input files */ if ((pp[i] = palloc()) == NULL) error(SYSTEM, "memory exhausted in pmergesort"); readp(pp[i], fi[i]); } for ( ; ; ) { if (plp != NULL && isprim(plp->com)) minp = plp; else minp = NULL; for (i = 0; i < nf; i++) if (isprim(pp[i]->com) && (minp == NULL || (*pcmp)(&pp[i], &minp) < 0)) minp = pp[minf=i]; if (minp == NULL) break; writep(minp, ofp); if (minp == plp) plp = plp->pnext; else { fargs(pp[minf]); readp(pp[minf], fi[minf]); } } if (plp != NULL && plp->com != PEOF) writep(plp, ofp); for (i = 0; i < nf; i++) { if (pp[i]->com != PEOF) writep(pp[i], ofp); pfree(pp[i]); } }