windows-nt/Source/XPSP1/NT/base/mvdm/wow16/kernel31/fixexe.c
2020-09-26 16:20:57 +08:00

67 lines
1.4 KiB
C

/*** 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 <stdio.h>
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);
}
}