Path: utzoo!utgpu!attcan!uunet!super!metropolis.super.org!rminnich From: rminnich@metropolis.super.org (Ronald G Minnich) Newsgroups: comp.sys.amiga Subject: Run length encoding for hp paintjet. Message-ID: <605@super.ORG> Date: 9 Aug 88 14:28:14 GMT Sender: uucp@super.ORG Reply-To: rminnich@metropolis.super.org (Ronald G Minnich) Organization: Supercomputing Research Center, Lanham, MD Lines: 56 Well i got the paintjet driver from swan.ulowell.edu (Thanks bob!) and it works great. One thing that it does not do, however, from what i can see: run length encoding. Maybe the author(s) thought it was too complicated. Well, it is so simple that even I could write it, so here is an excerpt from something i wrote* that does run-length encoding. The win is a big one, like at least a factor of four, maybe more in print speed. * well, really, someone else wrote it and i did RLE Here we go: /* tell the paintjet to go to graphics, and tell it we will send RLE data */ fprintf(printer, "\033*r0A\033*b1M") ; /* OK, this loop is copying from p to q, p uncompressed, q is rle, * and p ends at 'endrow' */ while(p < endrow) /* the run-count state machine */ /* the following by ron minnich for paintjet mode 1. * IT is not the tightest code in the universe, but is designed * for clarity. THe tradeoff is ok, since run-coding buys at least * a factor of two in output time, so hot code is not a big deal. */ start: /* p, q, and old are char *; i is an int; real clear names, huh? * and i even have a goto! */ old = q++; i = 0; *old = 0; *q = *p++; rleloop: if (p >= endrow) continue; if (i > 255) goto newcode; if (*p != *q) goto newcode; *old = ++i; p++; goto rleloop; newcode: q++; /* let the for-loop code check p < endrow */ } q++; /* * Now we actually write the stuff to the printer. */ fprintf(printer, "\033*b%dW", q-row) ; /* i omited an fwrite by mistake, but i think it looks like: */ fwrite(q, 1, q-row, file); /* or something like that. You get my drift */ ron P.S. I am going to see if it is worth adding an RLE packet type to DNET. might be a win