-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsaveiff.c
74 lines (61 loc) · 2.36 KB
/
saveiff.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <exec/types.h>
#include <intuition/screens.h>
#include <libraries/dos.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include "hdrs/ilbm.h"
#include "hdrs/saveiff.p.h"
#include "hdrs/startend.p.h"
#include "hdrs/startend.v.h"
/*------------------------------------------------------------------------*/
#define bufSize 512
/*------------------------------------------------------------------------*/
VOID SaveIFF(STRPTR filename)
{
LONG file;
IFFP iffp = NO_FILE;
file=Open(filename,MODE_NEWFILE);
if(file){
Write(file,"x",1);
iffp=PutPicture(file,rp->BitMap,colormap);
Close(file);
}
}
/*------------------------------------------------------------------------*/
Point2D nullPoint = {0, 0};
/*------------------------------------------------------------------------*/
IFFP PutPicture(LONG file, struct BitMap *bitmap, WORD *colorMap)
{
BYTE buffer[bufSize];
return( PutAnILBM(file,bitmap,NULL,colorMap,bitmap->Depth,
&nullPoint,buffer,bufSize) );
}
/*------------------------------------------------------------------------*/
#define CkErr(expression) { if(ifferr==IFF_OKAY) ifferr=(expression); }
/*------------------------------------------------------------------------*/
IFFP PutAnILBM(LONG file, struct BitMap *bitmap, BYTE *mask, WORD *colorMap,
UBYTE depth, Point2D *xy, BYTE *buffer, LONG bufsize )
{
BitMapHeader bmHdr;
GroupContext fileContext, formContext;
IFFP ifferr;
WORD pageWidth, pageHeight;
pageWidth =(bitmap->BytesPerRow) << 3;
pageHeight=bitmap->Rows;
ifferr=InitBMHdr(&bmHdr,bitmap,mskNone,cmpByteRun1,
NULL,pageWidth,pageHeight);
bmHdr.nPlanes=depth;
if(mask) bmHdr.masking=mskHasMask;
bmHdr.x=xy->x;
bmHdr.y=xy->y;
CkErr(OpenWIFF(file,&fileContext,szNotYetKnown));
CkErr(StartWGroup(&fileContext,FORM,szNotYetKnown,
ID_ILBM,&formContext));
CkErr(PutBMHD(&formContext,&bmHdr));
CkErr(PutCMAP(&formContext,colorMap,depth));
CkErr(PutBODY(&formContext,bitmap,mask,&bmHdr,buffer,bufsize));
CkErr(PutMAND(&formContext));
CkErr(EndWGroup(&formContext));
CkErr(CloseWGroup(&fileContext));
return(ifferr);
}