#ifndef WINELIB
static char RCSId[] = "$Id: dump.c,v 1.2 1993/07/04 04:04:21 root Exp root $";
static char Copyright[] = "Copyright  Robert J. Amstadt, 1993";

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#ifdef linux
#include <linux/unistd.h>
#include <linux/head.h>
#include <linux/ldt.h>
#endif
#include <errno.h>
#include "neexe.h"
#include "segmem.h"
#include "prototypes.h"

/**********************************************************************
 *					PrintFileHeader
 */
void
PrintFileHeader(struct ne_header_s *ne_header)
{
    printf("ne_header: %c%c\n",
	   ne_header->header_type[0], 
	   ne_header->header_type[1]);
    printf("linker version: %d.%d\n", ne_header->linker_version,
	   ne_header->linker_revision);
    printf("format flags: %04.4x\n", ne_header->format_flags);
    printf("automatic data segment: %04.4x\n", ne_header->auto_data_seg);
    printf("CS:IP  %04.4x:%04.4x\n", ne_header->cs, ne_header->ip);
    printf("SS:SP  %04.4x:%04.4x\n", ne_header->ss, ne_header->sp);
    printf("additional flags: %02.2x\n", ne_header->additional_flags);
    printf("operating system: %02.2x\n", ne_header->operating_system);
    printf("fast load offset: %04.4x\n", ne_header->fastload_offset);
    printf("fast load length: %04.4x\n", ne_header->fastload_length);
}

/**********************************************************************
 *					PrintSegmentTable
 */
void
PrintSegmentTable(struct ne_segment_table_entry_s *seg_table, int nentries)
{
    int i;

    for (i = 0; i < nentries; i++)
    {
	printf("  %2d: OFFSET %04.4x, LENGTH %04.4x, ",
	       i + 1, seg_table[i].seg_data_offset, 
	       seg_table[i].seg_data_length);
	printf("FLAGS %04.4x, MIN ALLOC %04.4x\n",
	       seg_table[i].seg_flags, seg_table[i].min_alloc);
    }
}

/**********************************************************************
 *					PrintRelocationTable
 */
void 
PrintRelocationTable(char *exe_ptr, 
		     struct ne_segment_table_entry_s *seg_entry_p,
		     int segment)
{
    struct relocation_entry_s *rep;
    int i;
    int offset;
    u_short n_entries, *sp;

    printf("RELOCATION TABLE %d:\n", segment + 1);
    
    if (seg_entry_p->seg_data_offset == 0)
	return;

    offset = seg_entry_p->seg_data_length;
    if (offset == 0)
	offset = 0x10000;

    sp = (u_short *) (exe_ptr + seg_entry_p->seg_data_offset * 512 + offset);
    n_entries = *sp;

    rep = (struct relocation_entry_s *) (sp + 1);
    for (i = 0; i < n_entries; i++, rep++)
    {
	printf("  ADDR TYPE %d,  TYPE %d,  OFFSET %04.4x,",
	       rep->address_type, rep->relocation_type, rep->offset);
	printf("TARGET %04.4x %04.4x\n", rep->target1, rep->target2);
    }
}
#endif /* ifndef WINELIB */
