#include <stdio.h>
#include <stdlib.h>
#include "sysp.h"

void main(int, char *[]);

void main(int argc, char *argv[]) {

	printf("Распечатка заголовка EXE-файла\n"
			 "Copyright (C)Frolov A., 1990\n\n");

	if( argc != 2 ) {
		printf( "  Задайте путь EXE-файла в качестве параметра\n" );
		exit(0);
	}

	if( gethdr( argv[1]) != 0) {
			printf( "Ошибка в формате файла или нет такого файла\n" );
			exit(0);
	}
	exit(0);
}

int gethdr( char *path) {

	EXE_HDR     header;
	RELOC_TAB   *reloc;
	FILE        *inpfile;
	int         i;

	if((inpfile = fopen(path,"rb")) == 0) return(-1);

	if(get_exeh(&header,&reloc,inpfile) != 0) {
		fclose(inpfile);
		return(-1);
	}
	printf("Магическое число:                    %04X\n"
			 "Длина последней страницы файла:      %d\n"
			 "Количество страниц в файле:          %d\n"
			 "Кол. элементов табл. перемещений:    %d\n"
			 "Размер заголовка в параграфах:       %d\n"
			 "Минимальная память для программы:    %04X\n"
			 "Максимальная память для программы:   %04X\n"
			 "Значение адреса стека SS:SP:         %04X:%04X\n"
			 "Контрольная сумма:                   %04X\n"
			 "Значения для регистров CS:IP:        %04X:%04X\n"
			 "Смещение табл. перемещений:          %02X\n"
			 "Номер оверлея:                       %d\n",
			 header.signature,
			 header.part_pag,
			 header.file_size,
			 header.rel_item,
			 header.hdr_size,
			 header.min_mem,
			 header.max_mem,
			 header.ss_reg,
			 header.sp_reg,
			 header.chk_summ,
			 header.cs_reg,
			 header.ip_reg,
			 header.relt_off,
			 header.overlay);


	if(reloc != 0) {
		printf("\nСодержимое таблицы перемещений:\n\n");

		for(i=0;i < header.rel_item; i++) {
			printf("%04X:%04X\n",
			(reloc+i)->segment,
			(reloc+i)->offset);

		}
		free(reloc);
	}
	fclose(inpfile);
	return(0);
}
