/*** FIXEXE.C * * Copyright (c) 1991 Microsoft Corporation * * DESCRIPTION * Patches specified .EXE file as required to load Windows KERNEL.EXE * Removes requirement for LINK4 from Build * It also produces same effect as EXEMOD file /MAX 0 * * Set DOS .EXE size to size of file +512 * Set MAX alloc to Zero * * * MODIFICATION HISTORY * 03/18/91 Matt Felton */ #define TRUE 1 #include main(argc, argv) int argc; char **argv; { FILE *hFile; long lFilesize; int iLengthMod512; int iSizeInPages; int iZero; iZero= 0; if (argc == 1) fprintf(stderr, "Usage: fixexe [file]\n"); while (++argv,--argc) { hFile = fopen(*argv, "rb+"); if (!hFile) { fprintf(stderr, "cannot open %s\n", *argv); continue; } printf("Processing %s\n", *argv); /* calculate the .EXE file size in bytes */ fseek(hFile, 0L, SEEK_END); lFilesize = ftell(hFile); iSizeInPages = (lFilesize + 511) / 512; iLengthMod512 = lFilesize % 512; printf("Filesize is %lu bytes, %i pages, %i mod\n",lFilesize,iSizeInPages,iLengthMod512); /* set DOS EXE File size to size of file + 512 */ fseek(hFile, 2L, SEEK_SET); fwrite( &iLengthMod512, sizeof(iLengthMod512), 1, hFile ); fwrite( &iSizeInPages, sizeof(iSizeInPages), 1, hFile ); /* Now perform EXEMOD file /MAX 0 equivalent */ fseek(hFile, 12L, SEEK_SET); fwrite( &iZero, sizeof(iZero), 1, hFile); fclose(hFile); } }