dump2mem.c 3.46 KB

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <PR/sptask.h>

char *InputFileName, *OutputFileName, MemFileName[256], TaskFileName[256];
FILE *InFile, *MemFile, *TaskFile;
int  numRead;

void usage(void)
{
    fprintf(stderr, "Usage: dump2mem -i input -o output \n");
    fprintf(stderr, "will create output.{mem,tsk} \n");
    exit(1);
}

void CheckOptions(void)
{
    if ((InputFileName == NULL) || (OutputFileName == NULL))
	usage();
}

void ParseOptions(int argc, char **argv)
{
    int c;
    extern char *optarg;
    extern int optind;
    char *ofile = NULL;

    while ((c = getopt(argc, argv, "i:o:")) != EOF)
	switch (c)
	    {
	    case 'i':
		InputFileName = strdup(optarg);
		break;
	    case 'o':
		OutputFileName = strdup(optarg);
		break;
	    case '?':
	    default :
		usage();
		break;		
	    }    
}

void OpenFiles(void)
{
    sprintf(MemFileName,  "%s.mem", OutputFileName);
    sprintf(TaskFileName, "%s.tsk", OutputFileName);

    if ((InFile = fopen(InputFileName, "r")) == NULL)
	{
	    fprintf(stderr, "!!!ERROR, could not open input file %s\n", InputFileName);
	    exit(1);
	}    
    
    if ((MemFile = fopen(MemFileName, "w")) == NULL)
	{
	    fprintf(stderr, "!!!ERROR, could not open output file %s\n", MemFileName);
	    exit(1);
	}

    if ((TaskFile = fopen(TaskFileName, "w")) == NULL)
	{
	    fprintf(stderr, "!!!ERROR, could not open output file %s\n", TaskFileName);
	    exit(1);
	}
}

void CloseFiles(void)
{
    fclose(InFile);
    fclose(MemFile);
    fclose(TaskFile);
}

void ConvertFile(void)
{
    OSTask_t	task; 
    unsigned long  ListLocation;
    unsigned long  ListLength;

    char readLine[256];
    long long int InputVal;

    /* Read dummy header line */
    fgets(readLine, 80, InFile);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.type);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.flags);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.ucode_boot);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.ucode_boot_size);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.ucode);

    fgets(readLine, 80, InFile);    
    sscanf(readLine, "%lx", &task.ucode_size);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.ucode_data);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.ucode_data_size);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.dram_stack);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.dram_stack_size);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.output_buff);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.output_buff_size);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.data_ptr);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.data_size);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.yield_data_ptr);

    fgets(readLine, 80, InFile);
    sscanf(readLine, "%lx", &task.yield_data_size);

    /* Read dummy header line */
    fgets(readLine, 80, InFile);

    fwrite(&task, sizeof(OSTask), 1, TaskFile); 
    
    while (fgets(readLine, 80, InFile) != NULL)
	{
	    numRead = sscanf(readLine, "%llx", &InputVal);

	    if (numRead == 1) 
		fwrite(&InputVal, sizeof(long long int), 1, MemFile);
	}
}

void main(int argc, char **argv)
{
    ParseOptions(argc, argv);
    CheckOptions();
    
    OpenFiles();
    ConvertFile();
    CloseFiles();
}