static int iffdrv_write_file_header_memmap(int x_size, int y_size, BYTE *palette) { BYTE header[836]; int i; int totalsize; memset(header, 0, sizeof(header)); iffdrv_memmap_iff_rowbytes=((x_size+15)>>4)<<1; totalsize=828+(iffdrv_memmap_iff_rowbytes*y_size*8); header[0]='F'; header[1]='O'; header[2]='R'; header[3]='M'; util_dword_to_be_buf(&header[4], totalsize); header[8]='I'; header[9]='L'; header[10]='B'; header[11]='M'; header[12]='B'; header[13]='M'; header[14]='H'; header[15]='D'; util_dword_to_be_buf(&header[16], 20); util_word_to_be_buf(&header[20],(WORD)(x_size)); util_word_to_be_buf(&header[22],(WORD)(y_size)); header[28]=8; util_word_to_be_buf(&header[36],(WORD)(x_size)); util_word_to_be_buf(&header[38],(WORD)(y_size)); header[40]='C'; header[41]='M'; header[42]='A'; header[43]='P'; util_dword_to_be_buf(&header[44],3*256); for (i = 0; i < 256; i++) { header[48+(i*3)]=palette[i*3]; header[49+(i*3)]=palette[(i*3)+1]; header[50+(i*3)]=palette[(i*3)+2]; } header[816]='C'; header[817]='A'; header[818]='M'; header[819]='G'; util_dword_to_be_buf(&header[820],4); header[828]='B'; header[829]='O'; header[830]='D'; header[831]='Y'; util_dword_to_be_buf(&header[832],iffdrv_memmap_iff_rowbytes*y_size*8); if (fwrite(header,836,1,iffdrv_memmap_fd)<1) return -1; return 0; }
/* Create crt file with header, return NULL on fault, fd otherwise */ FILE *crt_create(const char *filename, int type, int exrom, int game, const char *name) { BYTE crt_header[0x40]; FILE *fd; if (filename == NULL) { return NULL; } fd = fopen(filename, MODE_WRITE); if (fd == NULL) { return NULL; } memset(&crt_header, 0, sizeof(crt_header)); memcpy(crt_header, CRT_HEADER, 16); util_dword_to_be_buf(&crt_header[0x10], sizeof(crt_header)); util_word_to_be_buf(&crt_header[0x14], 0x100); /* version */ util_word_to_be_buf(&crt_header[0x16], (WORD)type); crt_header[0x18] = exrom ? 1 : 0; crt_header[0x19] = game ? 1 : 0; strncpy((char*)&crt_header[0x20], name, sizeof(crt_header) - 0x20); if (fwrite(crt_header, sizeof(crt_header), 1, fd) < 1) { fclose(fd); return NULL; } return fd; }
/* Write chip header and data, return -1 on fault */ int crt_write_chip(BYTE *data, crt_chip_header_t *header, FILE *fd) { BYTE chipheader[0x10]; memcpy(chipheader, CHIP_HEADER, 4); util_dword_to_be_buf(&chipheader[4], header->size + sizeof(chipheader)); util_word_to_be_buf(&chipheader[8], header->type); util_word_to_be_buf(&chipheader[10], header->bank); util_word_to_be_buf(&chipheader[12], header->start); util_word_to_be_buf(&chipheader[14], header->size); if (fwrite(chipheader, sizeof(chipheader), 1, fd) < 1) { return -1; /* could not write chip header */ } if (fwrite(data, header->size, 1, fd) < 1) { return -1; /* could not write chip content */ } return 0; }
static int iffdrv_write_file_header(screenshot_t *screenshot) { gfxoutputdrv_data_t *sdata; BYTE header[836]; int i; int totalsize; memset(header, 0, sizeof(header)); sdata = screenshot->gfxoutputdrv_data; sdata->iff_rowbytes=((screenshot->width+15)>>4)<<1; totalsize=828+(sdata->iff_rowbytes*screenshot->height*8); header[0]='F'; header[1]='O'; header[2]='R'; header[3]='M'; util_dword_to_be_buf(&header[4], totalsize); header[8]='I'; header[9]='L'; header[10]='B'; header[11]='M'; header[12]='B'; header[13]='M'; header[14]='H'; header[15]='D'; util_dword_to_be_buf(&header[16], 20); util_word_to_be_buf(&header[20],(WORD)(screenshot->width)); util_word_to_be_buf(&header[22],(WORD)(screenshot->height)); header[28]=8; util_word_to_be_buf(&header[36],(WORD)(screenshot->width)); util_word_to_be_buf(&header[38],(WORD)(screenshot->height)); header[40]='C'; header[41]='M'; header[42]='A'; header[43]='P'; util_dword_to_be_buf(&header[44],3*256); for (i = 0; i < 256; i++) { header[48+(i*3)]=screenshot->palette->entries[i].red; header[49+(i*3)]=screenshot->palette->entries[i].green; header[50+(i*3)]=screenshot->palette->entries[i].blue; } header[816]='C'; header[817]='A'; header[818]='M'; header[819]='G'; util_dword_to_be_buf(&header[820],4); header[828]='B'; header[829]='O'; header[830]='D'; header[831]='Y'; util_dword_to_be_buf(&header[832],sdata->iff_rowbytes*screenshot->height*8); if (fwrite(header,836,1,sdata->fd)<1) return -1; return 0; }