/******************************************************************************************* GAME.C (c) MHG 1992,1997 3 sept 97 MHG Save bmp file 14 feb 97 MHG Parses game infomation file *******************************************************************************************/ #include #include /******************************************************************************************* DEFINES *******************************************************************************************/ #define MAX_GAMES 1000 /******************************************************************************************* STRUCTURES *******************************************************************************************/ typedef struct { char *title; char *company; char *disc_name; char *drive; char *directory; char *run; char *program; } NAMES; typedef struct { char *p[7]; } INDEX; typedef union { INDEX index; NAMES name; } GAME; /******************************************************************************************* DATA *******************************************************************************************/ GAME game[MAX_GAMES]; //room for 1000 games !!! int num_games; /******************************************************************************************* parse_gamefile load file called games.txt and parse it *******************************************************************************************/ void parse_gamefile() { int len; char *mem; char *mem_end; char *p,*q; int i,j; char a; GAME tmp; int indx; num_games=0; len=file_size("games.txt"); if (len==0) return; mem=(char *)malloc(len); load_file("games.txt",mem); mem_end=mem+len; // zero out eol marker for(i=0;i=MAX_GAMES) break; } reset_insert(); for(j=0;jindex.p[k]=p; k++; } p+=len+1; if (k>7) return(0); } if (k!=7) return(0); //printf("\n"); return(1); //line parsed ok } #define insert_string(a,b) sprintf(buff,a,b); insert_text(buff) /******************************************************************************************* load_game run game on a disc in: index of game out: name of disc that game is stored on *******************************************************************************************/ char *load_game(int index) { GAME *p=&game[index]; char buff[64]; // load_disc_image(p->a.disc_name); insert_string("*DR. %s\r",p->name.drive); //change drive insert_string("*DIR %s\r",p->name.directory); //change directory if (*p->name.run=='R') { insert_string("*%s\r",p->name.program); } else { insert_string("CHAIN \"%s\"\r",p->name.program); } return(p->name.disc_name); } /******************************************************************************************* File stuff (C) 1992,97 MHG *******************************************************************************************/ #include #include int load_file(char *name,char *buff) { char *load_addr; FILE *file; int length; int len2; file = fopen(name,"rb"); if (file == NULL) { return(0); } fseek(file,0,SEEK_END); length = ftell(file); fseek(file,0,SEEK_SET); len2=fread(buff,1,length,file); if (len2!=length) { fclose(file); return(0); } fclose(file); return(length); } int save_file(char *name,char *buff,int len) { char *load_addr; FILE *file; int length; file = fopen(name,"wb"); if (file == NULL) { return(0); } len=fwrite(buff,1,len,file); fclose(file); return(len); } int file_size(char *name) { char *load_addr; FILE *file; int length; file = fopen(name,"rb"); if (file == NULL) { return(0); } fseek(file,0,SEEK_END); length = ftell(file); fclose(file); return(length); } /******************************************************************************************* SAVE SCREEN AS A BMP FILE *******************************************************************************************/ typedef unsigned short WORD; const WORD BMP_MAGIC = 'M'*256+'B'; typedef struct { WORD fh_type; //signature - 'MB' long fh_size; //size of file in DWORD WORD fh_reserved1; WORD fh_reserved2; long fh_offbits; //image start offset in bytes } BMP_FILE_HEADER; typedef struct { long ih_size; //size of image header 40 long ih_width; long ih_height; WORD ih_planes; //always 1 WORD ih_bit_count; //bits per pixel long ih_compression; //0 - none 1-rle long ih_size_image; //compressed image size long ih_xpels_per_meter; long ih_ypels_per_meter; long ih_clr_used; long ih_clr_important; } BMP_IMAGE_HEADER; typedef struct { char r; char g; char b; char a; } RGB; int sc_no=0; int save_screen(char *screen) { FILE *file; int len; char title[32]; BMP_FILE_HEADER fh; BMP_IMAGE_HEADER ih; int i; RGB pal[256]= { 0,0,0,0, 0,0,255,0, 0,255,0,0, 0,255,255,0, 255,0,0,0, 255,0,255,0, 255,255,0,0, 255,255,255,0 }; sprintf(title,"pic%d.bmp",sc_no); sc_no++; file = fopen(title,"wb"); if (file == NULL) { return(0); } memset(&fh,0,sizeof(BMP_FILE_HEADER)); memset(&ih,0,sizeof(BMP_IMAGE_HEADER)); fh.fh_type=BMP_MAGIC; fh.fh_size=sizeof(BMP_FILE_HEADER)+sizeof(BMP_IMAGE_HEADER)+4*256+320*256; fh.fh_offbits=4*256+sizeof(BMP_FILE_HEADER)+sizeof(BMP_IMAGE_HEADER); ih.ih_size=40; ih.ih_width=320; ih.ih_height=256; ih.ih_planes=1; ih.ih_bit_count=8; fwrite(&fh,1,sizeof(BMP_FILE_HEADER),file); fwrite(&ih,1,sizeof(BMP_IMAGE_HEADER),file); fwrite(&pal,1,4*256,file); // fwrite(screen,1,320*256,file); for(i=0;i<256;i++) fwrite(&screen[320*(255-i)],1,320,file); fclose(file); return(1); }