Sunday, June 12, 2011

Relocatable Loader


//relocatable loader
/*
THIS IS THE INPUT FILE.SAVE IT AS "linput.txt"( USE NOTEPAD).
H COPY000000 001073
T 00000010 15140033 481039 100036 280030 300015 481061 311003 200030 211033 200033
T 000011 19 045412036 481061 380033 412000 454196 100003 200000
T 000031 15 135140030 430030 141013 301044 241064 210030 301057 543039 212064 381045
T 000058 05 056 100036 520000 151
T 000065 19 080340030 141079 301064 503039 152079 220036 381064 430000 25
E 000000 */
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
struct obj_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,tloc,tlen,textloc,i=0,location,j,k,count=0,start,n,num=0,inc=0;
 FILE *fp1,*fp2;
 clrscr();
 fp1=fopen("linput.txt","r");
 fp2=fopen("loadout.txt","w");
 printf("\n ENTER THE LOCATION WHERE THE PROGRAM HAS TO BE LOADED:\n");
 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=atoi(output[i-2]);
   textloc=textloc+start;
   itoa(textloc,output[i-2],10);
   for(n=0;n<(textloc-(tloc+tlen));n++)
   {
   strcpy(obcode[inc].add,"yy");
   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]='\0';
    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;
  }
 }
getch();
}

No comments:

Post a Comment