home *** CD-ROM | disk | FTP | other *** search
/ Carousel / CAROUSEL.cdr / mactosh / lang / skel_azt.sha / drawgraf.c < prev    next >
C/C++ Source or Header  |  1986-07-08  |  2KB  |  98 lines

  1.  
  2. /*
  3.  *    drawgraf.c -- draw the contents of the graphics window
  4.  */
  5.  
  6. #include <quickdraw.h>
  7. #include <memory.h>
  8. #include <pb.h>
  9. #include <syserr.h>
  10. #include <toolutil.h>
  11. #include <window.h>
  12.  
  13. #include "def.h"
  14.  
  15. #define BUFSIZE 10240
  16. #define BMINUSSECT (BUFSIZE-512)
  17.  
  18. void
  19. drawgraf()
  20. {
  21.     long                count;
  22.     char                dest[72];
  23.     Rect                dgr;
  24.     char                *dp;
  25.     OSErr                e;
  26.     char                *ep;
  27.     extern    BitMap        gibits;
  28.     extern    Rect        grafr;
  29.     int                    i, j;
  30.     extern    int            paint;            /* file refnum or zero */
  31.     BitMap                sbm;
  32.     char                *sp;
  33.     char                *srcp;
  34.     extern    WindowPtr    wp[NWINDOWS];
  35.  
  36.     EraseRect(&grafr);
  37.     if (paint) {
  38.         SetRect(&dgr, 0, 0, 576, 1);
  39.         sbm.baseAddr = dest;
  40.         sbm.rowBytes = 72;
  41.         BlockMove(&dgr, &sbm.bounds, (long)sizeof(Rect));
  42.         if (e = SetFPos(paint, fsFromStart, 512L)) {
  43.             errmsg(9, e);    /* file seek error */
  44.             return;
  45.         };
  46.         srcp = NewPtr((Size)BUFSIZE);
  47.         if (srcp == NIL) {
  48.             errmsg(10, 0);    /* Not enough memory to read paint */
  49.             return;
  50.         };
  51.         sp = srcp;
  52.         count = (long)BUFSIZE;
  53.         if ((e = FSRead(paint, &count, srcp)) && e != eofErr) {
  54.             errmsg(4, e);    /* File Read Error */
  55.             DisposPtr(srcp);
  56.             return;
  57.         };
  58.         if (count < 1440L) {
  59.             errmsg(11, (OSErr)count);    /* Not a paint file */
  60.             DisposPtr(srcp);
  61.             return;
  62.         };
  63.         ep = srcp + count;
  64.         for (i = 0;  i < 720;  ) {
  65.             dp = dest;
  66.             UnpackBits(&sp, &dp, 72);
  67.             if (sp > ep) {
  68.                 errmsg(12, 0);    /* Premature end of file */
  69.                 DisposPtr(srcp);
  70.                 return;
  71.             };
  72.             dgr.top = i;
  73.             dgr.bottom = ++i;
  74.             CopyBits(&sbm, &wp[0]->portBits, &sbm.bounds, &dgr,
  75.                 srcCopy, wp[0]->clipRgn);
  76.             if ((sp - srcp) > BMINUSSECT) {
  77.                 BlockMove(srcp + BMINUSSECT, srcp, 512L);
  78.                 count = (long)BMINUSSECT;
  79.                 if ((e = FSRead(paint, &count, srcp + 512)) &&
  80.                   e != eofErr) {
  81.                     errmsg(4, e);    /* File Read Error */
  82.                     DisposPtr(srcp);
  83.                     return;
  84.                 };
  85.                 ep = srcp + count + 512;
  86.                 sp -= BMINUSSECT;
  87.             };
  88.         };
  89.         DisposPtr(srcp);
  90.     }
  91.     else
  92.         for (i = 0, j = 32;  i < 480;  i += j, j <<= 1) {
  93.             SetRect(&dgr, i, i, i + j, i + j);
  94.             CopyBits(&gibits, &wp[0]->portBits, &gibits.bounds, &dgr,
  95.                 srcCopy, wp[0]->clipRgn);
  96.         };
  97. } /* end of drawgraf */
  98.