Program to Implement a Relocating Loader

#include<stdio.h>
#include<stdlib.h>
char line[5][20];
void numtok();
int cur=0;
int lth;
void main()
{
 FILE *fin;
 int i=0,m=0,k=0,t=0,l,j,prevsize;
 int prgstart,prglen,textaddr,disp;
 char str[70];
  struct loccontent
  {
   int addr;
   char content[3];
  } mem[200];
 clrscr();
  for(i=0;i<200;++i)
  {
   mem[i].content[0]='x';
   mem[i].content[1]='x';
   mem[i].content[2]='\0';
  }
  fin=fopen("loadin.txt","r");
  while(!feof(fin))
  {
   fgets(str,70,fin);
   numtok(str);
    if(strcmp(line[0],"H")==0)
    {
     printf("program name is %s\n",line[1]);
     prgstart=random(10000);
     prglen=atoi(line[3]);
     j=0;
     for(i=prgstart;i<=prgstart+prglen;++i)
     {
      mem[j].addr=i;
      j++;
     }
    }
    else if(strcmp(line[0],"T")==0)
    {
     if(t==0)
     {
      textaddr=prgstart;
      t=1;
     }
      disp=textaddr-prgstart;
      for(m=3;m <lth;++m)
      {
       for(i=0;i<5;i+=2)
       {
        mem[disp].addr=textaddr++;
        mem[disp].content[0]=line[m][i];
        mem[disp].content[1]=line[m][i+1];
        mem[disp].content[2]='\0';
        disp++;
       }
      }
    }
    else if(strcmp(line[0],"E")==0)
     break;
   k=0;
  }
  for(i=0;i<prglen;i+=16)
  {
   printf("%d\t",mem[k].addr);
   for(l=0;l<4;l++)
   {
    for(j=0;j<4;j++)
    {
     printf("%c%c",mem[k].content[0],mem[k].content[1]);
     k++;
    }
    printf("\t");
   }
   printf("\n");
  }
    getch();
}
void numtok(char str[70])
{
 int i=0,j=0,k=0;
 while(str[j]!='\0')
 {
  line[i][k]=str[j];
  if(str[j]=='^')
  {
   line[i][k]='\0';
   k=-1;
   i++;
  }
  k++;
  j++;
 }
  line[i][k]='\0';
  lth=i+1;
}

Input File

LOADIN.TXT


H^COPY^1000^115
T^1000^12^141033^482039^001036^281030
T^1012^9^345890^581056^454645
T^1000^12^141033^482039^001036^281030
E^1000

Output




No comments: