Friday, 16 September 2011

Relocation Loader



#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
struct object_code
{          int locctr;
char add[10];
}obcode[300];
void main()
{          char input[100][16], output[100][16], binary[20], address[20], stloc[10];
int len, bitmask, loc, tlen=0, tloc, textloc, i=0, location, j, k, count=0, start, n, num=0, inc=0;
FILE *fp1, *fp2;
clrscr();
fp1=fopen(“linput.dat”, “r”);
fp2=fopen(“loadout.dat”, “w”);
printf(“Enter the location where the program has to be loaded:”);
scanf(“%s”, stloc);
start = atoi(stloc);
location=start;
tloc=start;
fscanf(fp1, “%s”, input[i]);
while(strcmp(input[i], “T”)!=0)
{
strcpy(output[i], input[i]);
i++;
fscanf(fp1, “%s”, input[i]);
strcpy(output[i], input[i]);
}
itoa(start, output[2],10);
while(strcmp(input[i], “E”)!=0)
{
strcpy(output[i], input[i]);
if(strcmp(input[i], “T”)==0)
{
for(j=0; j<3; j++)
{          i++;
fscanf(fp1, “%s”, input[i]);
strcpy(output[i], input[i]);
}
bitmask = atoi(output[i]);
itoa(bitmask, binary, 2);
strcpy(output[i], NULL);
textloc=textloc+start;
itoa(textloc, output[i-2], 10);
for(n=0; n<(textloc-(tloc+tlen)); n++)
{
strcpy(obcode[inc].add, “xx”);
obcode[inc++].locctr=location++;
}
tlen=atoi(output[i-1]);
tloc=textloc;
k=0;
}
else
{
if(binary[k]==’1′)
{
num=0;
len=strlen(output[i]);
strcpy(address, NULL);
for(j=2; j<len; j++)
{
address[num]=output[i][j];
output[i][j]=”;
num++;
}
loc=atoi(address);
loc=loc+start;
itoa(loc, address, 10);
strcat(output[i], address);
}
k++;
len=strlen(output[i]);
num=0;
for(n=0; n<len; n++)
{
obcode[inc].add[num++]=output[i][n];
if(num>1)
{
obcode[inc++].locctr=location++;
num=0;
}
}
}
i++;
fscanf(fp1, “%s”, input[i]);
}
strcpy(output[i], input[i]);
i++;
fscanf(fp1, “%s”, input[i]);
loc=atoi(input[i]);
loc=loc+start;
strcpy(output[i], itoa(loc, address, 10));
count=0;
i=0;
n=0;
fprintf(fp2, “%d\t”,obcode[n].locctr);
for(n=0; n<inc; n++)
{          fprintf(fp2, “%s”, obcode[n].add);
i++;
if(i>3)
{          fprintf(fp2, “\t”);
i=0;
count++;
}
if(count>3)
{          fprintf(fp2, “\n%d\t”, obcode[n+1].locctr);
count=0;
}
}
printf(“\nProgram is relocated…”);
getch();
}

0 comments:

Post a comment