#include #include #include #include #define WIDTH 255 #define MAPNAME "Diagonal" #define FILENAME "%s.MAP" char fn[100] = FILENAME; typedef unsigned char BYTE; typedef unsigned short int WORD; typedef BYTE ROW[WIDTH]; ROW r; #define MAGIC_NUM 100 #define SQUARE_WIDTH 16 #define SQUARE_HEIGHT 16 #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 200 #define VIRTUAL_WIDTH 352 #define VIRTUAL_HEIGHT 240 typedef struct MAPHEADER { BYTE name[12]; /* 12 Includes [n]=0 and [n+1]=26 */ WORD width; /* 2 */ WORD height; /* 2 */ WORD extent; /* 2 */ WORD off_x1; /* 2 */ WORD off_y1; /* 2 */ WORD off_x2; /* 2 */ WORD off_y2; /* 2 */ WORD x_wrap; /* 2 */ WORD y_wrap; /* 2 */ WORD magic; /* 2 */ } MAPHEADER, far *LPMAPHEADER; MAPHEADER mh; void main(int argc, char *argv[]) { FILE *fp; int i,j; BYTE b; int width = WIDTH; int height = WIDTH; if (argc > 1) { width = atoi(argv[1]); if (width > WIDTH) width = WIDTH; printf("Width = %d\n",width); height=width; if (argc > 2) { height = atoi(argv[2]); if (height > WIDTH) height = WIDTH; printf("Height = %d\n",height); } } sprintf(fn,FILENAME,MAPNAME); fp = fopen(fn,"wb"); if (!fp) { printf("Couldn't open %s for write.\n",fn); exit(1); } memset(&mh, 0xFF, sizeof(MAPHEADER)); /* Will reveal missing initializing */ strcpy((char *)mh.name,MAPNAME); mh.name[8]=0; mh.name[9]=26; /* Ctrl-Z */ mh.width = (WORD)width; mh.height = (WORD)height; mh.extent = (WORD)((WORD)width * (WORD)height); mh.off_x1 = (WORD)0; mh.off_y1 = (WORD)0; mh.off_x2 = (WORD)(((VIRTUAL_WIDTH / SQUARE_WIDTH) - 1) % width); mh.off_y2 = (WORD)((((VIRTUAL_HEIGHT / SQUARE_HEIGHT) - 1) % height) * width); mh.x_wrap = (WORD)width; mh.y_wrap = (WORD)height; mh.magic = MAGIC_NUM; fwrite(&mh, 1, sizeof(MAPHEADER), fp); for (i = 0; i