relo

 avatar
unknown
plain_text
5 months ago
3.3 kB
1
Indexable
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
char bit[30];
char bitmask[20];

void bitmask_convert(char mask[])
{
	int len;
	len=strlen(mask);
	strcpy(bit,"");

	int i;

	for(i=0;i<len;++i)
	{
		switch(mask[i])
		{
		
			case '0': strcat(bit,"0000");
				  break;
			case '1': strcat(bit,"0001");
				  break;
			case '2': strcat(bit,"0010");
                                  break;
			case '3': strcat(bit,"0011");
                                  break;
			case '4': strcat(bit,"0100");
                                  break;
			case '5': strcat(bit,"0101");
                                  break;
			case '6': strcat(bit,"0110");
                                  break;
			case '7': strcat(bit,"0111");
                                  break;
			case '8': strcat(bit,"1000");
                                  break;
			case '9': strcat(bit,"1001");
                                  break;
			case 'A': strcat(bit,"1010");
                                  break;
			case 'B': strcat(bit,"1011");
                                  break;
			case 'C': strcat(bit,"1100");
                                  break;
	
			case 'D': strcat(bit,"1101");
                                  break;
			case 'E': strcat(bit,"1110");
                                  break;

			case 'F': strcat(bit,"1111");
                                  break;

			default : break;
		}

	}
	
}





void main()
{

	FILE *objptr;
	int start,addr;
	char rec[20];
	char name[20];
	int modif_obj_code;

	char first[3];
	char second[5];
	
	int bitmask_index=0;

	int i;
	////char bitmask[20];
	//char bit[20];

	int  add,len;

	printf("ENTER THE STARTING ADDRESS OF THE PROGRAM\n");
	scanf("%X",&start);
	addr=start;
	
	objptr=fopen("program.txt","r");

       fscanf(objptr,"%s",rec);

       if(strcmp(rec,"H")==0)
       {
	      // printf("HEADER RECORD");
	       fscanf(objptr,"%s",name);
	       fscanf(objptr,"%X",&add);
	       fscanf(objptr,"%X",&len);
	      printf("\nPROGRAM NAME=%s\n\n",name);

	      printf(" ADDRESS   OBJECT CODE \n");
	      printf("____________________________\n");
       }
       else
	{
		printf("INAVLID OBJECT CODE FORMAT\n");
		fclose(objptr);
		exit(1);
	}
      
       strcpy(rec,"");
       
	
       fscanf(objptr,"%s",rec);

       while(strcmp(rec,"E")!=0)
       {
	       //fscanf(objptr,"%s",rec);
	       if(strcmp(rec,"T")==0)
	       {
		       fscanf(objptr,"%X",&add);
		       fscanf(objptr,"%X",&len);
		       fscanf(objptr,"%s",bitmask);
		       add+=start;
		       bitmask_index=0;
		       bitmask_convert(bitmask);
		       fscanf(objptr,"%s",rec);
	       }

		if(bit[bitmask_index]=='1')
	 	{
			//printf("NEED RELOCATION\n");
			
		//	modif_obj_code=atoi(rec);
		//	modif_obj_code+=start;
		//	printf("%X\t%X\n",add,modif_obj_code);
		//	strcpy(first,"");
		//	strcpy(second,"");
			for(i=0;i<6;++i)
			{
				if(i<2)
				{
					
					first[i]=rec[i];
					
				}
				else
				{
					second[i-2]=rec[i];

				}
			}
			first[2]='\0';
			second[4]='\0';
			modif_obj_code=strtol(second,NULL,16);
			modif_obj_code+=start;

			printf("%X\t%s%X\n",add,first,modif_obj_code);
				
		}
		else
		{
			printf("%X\t%s\n",add,rec);

		}		
	       //printf("%s\n",rec);
		add+=3;
		bitmask_index++;
		
	       fscanf(objptr,"%s",rec);
       }
       

       fclose(objptr);
}
Editor is loading...
Leave a Comment