static int write_pcap_header(FILE * fp) { int res = 0; PcapHeader header; header.m_magic = BIG_INT(0xA1B2C3D4); header.m_major_version = BIG_SHORT(0x02); header.m_minor_version = BIG_SHORT(0x04); header.m_zone = 0; header.m_sig_figs = 0; header.m_snap_len = BIG_INT(2048); header.m_link_type = BIG_INT(1); res = send_to_write(fp, (char *)&header, sizeof(PcapHeader)); return res; }
unsigned short imb_start_iff(struct ImBuf *ibuf, int file) { unsigned int *point, size, *buf; if ((point=buf=(unsigned int *)malloc(32768))==0) return FALSE; *point++ = FORM; /* FORMxxxxILBM in buffer */ *point++ = 0; if (IS_amiga(ibuf)){ struct BitMapHeader *bmhd; *point++ = ILBM; *point++ = CAMG; *point++ = 4; *point++ = (ibuf->ftype & 0xffff); *point++=BMHD; *point++=sizeof(struct BitMapHeader); bmhd=(struct BitMapHeader *)point; /* bmhd points to location where bmhd will be */ point=(unsigned int *)((char *)point+sizeof(struct BitMapHeader)); /* advance pointer already */ bmhd->w=ibuf->x; bmhd->h=ibuf->y; bmhd->pageWidth=ibuf->x; bmhd->pageHeight=ibuf->y; bmhd->x=0; bmhd->y=0; bmhd->nPlanes=ibuf->depth; bmhd->masking=0; if (ibuf->flags & IB_vert){ bmhd->compression=2; } else{ bmhd->compression=1; } bmhd->pad1=0; bmhd->transparentColor=0; bmhd->xAspect=1; bmhd->yAspect=1; } else if (IS_anim(ibuf)){ struct Adat *adat; extern float adat_gamma; extern float adat_distort; *point++ = ANIM; *point++ = ADAT; *point++ = BIG_LONG(sizeof(struct Adat)); adat = (struct Adat *)point; point = (unsigned int *)((char *)point+sizeof(struct Adat)); /* advance pointer already */ adat->w = BIG_SHORT(ibuf->x); adat->h = BIG_SHORT(ibuf->y); adat->type = BIG_SHORT(ibuf->ftype); adat->xorig = BIG_SHORT(ibuf->xorig); adat->yorig = BIG_SHORT(ibuf->yorig); adat->pad = 0; adat->gamma = adat_gamma; adat->distort = adat_distort; } size=((uchar *)point-(uchar *)buf); if (write(file,buf,size)!=size){ free(buf); return (FALSE); } if (ibuf->cmap){ if (IS_anim(ibuf)){ size = ibuf->maxcol * sizeof(int); buf[0] = CMAP; buf[1] = BIG_LONG(size); if (write(file,buf,8) != 8){ free(buf); return (FALSE); } if (write(file,ibuf->cmap,size) != size){ free(buf); return (FALSE); } } else{ uchar *cpoint,*cols; unsigned int i,bits; point = buf; if (IS_amiga(ibuf)){ *(point++) = CMAP; *(point++) = BIG_LONG(3*ibuf->maxcol); } cpoint = (uchar *) point; cols = (uchar *)ibuf->cmap; if ((ibuf->cbits > 0) && (ibuf->cbits < 8)){ bits = ~((1 << (8-ibuf->cbits)) - 1); } else bits = -1; if (IS_ham(ibuf)) bits = -1; for (i=0 ; i<ibuf->maxcol ; i++){ *(cpoint++) = cols[0] & bits; *(cpoint++) = cols[1] & bits; *(cpoint++) = cols[2] & bits; cols += 4; } if (ibuf->maxcol & 1) *(cpoint++)=0; size=(cpoint-(uchar *)buf); if (write(file,buf,size)!=size){ free(buf); return (FALSE); } } } if (IS_amiga(ibuf)) buf[0] = BODY; if (IS_anim(ibuf)) buf[0] = BODY; buf[1]=0; if (write(file,buf,8)!=8){ free(buf); return(FALSE); } free(buf); return (TRUE); }