home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 274.lha / SimGen_Src / MYIFF2.c < prev    next >
C/C++ Source or Header  |  1989-07-26  |  3KB  |  143 lines

  1. /*
  2. ** File: MYIFF2.c
  3. **
  4. ** Routines to load and "track" IFF images.
  5. */
  6.  
  7. #include <iff/intuall.h>
  8. #include <libraries/dos.h>
  9. #include <libraries/dosextens.h>
  10. #include <iff/ilbm.h>
  11. #include <iff/readpict.h>
  12. #include <iff/remalloc.h>
  13. #include <functions.h>
  14. #include "picture.h"
  15.  
  16. /*--------------------------------------------------------------*/
  17.  
  18. extern    char *PreFix;
  19. extern    char *IFFPMessages[];
  20.  
  21. Picture LastPicture;
  22.  
  23. UBYTE *MyAllocMem (size, flags)
  24.     ULONG size;
  25.     ULONG flags;
  26. {
  27.     return (AllocMem (size, flags));
  28. }
  29.  
  30. ClearMem (pntr, size)
  31.     UBYTE *pntr;
  32.     ULONG size;
  33. {
  34.     register UBYTE *rpntr = pntr;
  35.     register ULONG  rsize = size;
  36.  
  37.     while (size) {
  38.         *pntr++ = NULL;
  39.         size--;
  40.     }
  41. }
  42.  
  43. Picture *CreatePic (filename, width, height)
  44.     char    *filename;
  45.     int    width;
  46.     int    height;
  47. {
  48.     ILBMFrame        ilbmFrame;
  49.     Picture            *newpic = NULL;
  50.     NewImage        ni;
  51.     struct    FileHandle    *file;
  52.     IFFP            iffp;
  53.     char            errormsg[250];
  54.     char            tempname[250];
  55.  
  56.     ClearMem (&ni, sizeof (ni));
  57.     ClearMem (&ilbmFrame, sizeof (ilbmFrame));
  58.  
  59.     if (!( newpic = (Picture *)MyAllocMem (sizeof (*newpic), MEMF_CLEAR))) {
  60.         SYSMESS ("Couldn't allocate picture");
  61.         return (NULL);
  62.     }
  63.  
  64.     InitRastPort (&newpic->RastPort);
  65.     newpic->RastPort.BitMap = &newpic->BitMap;
  66.  
  67.     strcpy (tempname, PreFix);
  68.     strcat (tempname, filename);
  69.  
  70.     if (!( file = Open (tempname, MODE_OLDFILE))) {
  71.         DeletePic (newpic);
  72.         SYSMESS ("Couldn't open picture file");
  73.         return (NULL);
  74.     }
  75.  
  76.     ilbmFrame.pic = newpic;
  77.     ilbmFrame.ni  = ∋
  78.     ilbmFrame.allocmem = MyAllocMem;
  79.  
  80.     ni.Width  = width;
  81.     ni.Height = height;
  82.     ni.Flags  = NI_GETCOLORS | 
  83.             NI_CREATEPIC |
  84.             NI_CLIPIMAGE |
  85.             NI_USEBITMAP;
  86.  
  87.     iffp = myReadPicture(file, &ilbmFrame);
  88.  
  89.     Close(file);
  90.  
  91.     if (iffp != IFF_DONE) {
  92.         DeletePic (newpic);
  93.         strcpy (errormsg, "Couldn't read file ");
  94.         strcat (errormsg, filename);
  95.         strcat (errormsg, ". ");
  96.         strcat (errormsg, IFFPMessages[-iffp]);
  97.         SYSMESS (errormsg);
  98.         return (NULL);
  99.     }
  100.  
  101. /*
  102. **  Changed for SIMGEN
  103.     PicHotX(newpic)   = ilbmFrame.bmHdr.x;
  104.     PicHotY(newpic)   = ilbmFrame.bmHdr.y;
  105. **
  106. */
  107.     PicHotX(newpic)   = ni.Left;
  108.     PicHotY(newpic)   = ni.Top;
  109.  
  110.     PicWidth(newpic)  = ilbmFrame.bmHdr.w;
  111.     PicHeight(newpic) = ilbmFrame.bmHdr.h;
  112.     PicDepth(newpic)  = ilbmFrame.bmHdr.nPlanes;
  113.     PicTColor(newpic) = ilbmFrame.bmHdr.transparentColor;
  114.  
  115.     return (newpic);
  116. }    
  117.  
  118. DeletePic (pic)
  119.     Picture *pic;
  120. {
  121.     int        i;
  122.     CycleRange    *cr;
  123.     CycleRange    *nextcr;
  124.  
  125.     if (pic) {
  126.         for (i=0; i<pic->BitMap.Depth; i++) {
  127.             if (pic->BitMap.Planes[i]) {
  128.                 FreeMem (pic->BitMap.Planes[i],
  129.                      pic->BitMap.BytesPerRow * 
  130.                      pic->BitMap.Rows);
  131.             }
  132.         }
  133.         cr = pic->CycleRanges;
  134.         while (cr) {
  135.             nextcr = (CycleRange *)cr->NextRange;
  136.             FreeMem (cr, sizeof (*cr));
  137.             cr = nextcr;
  138.         }
  139.         FreeMem (pic, sizeof (*pic));
  140.     }
  141. }
  142.  
  143.