#include <string.h>
#include <stdio.h>

//variaveis globais:
float r1,r2,ans;
float pilha[100];
int topo_pilha;

void sum(float a, float b,int lixo)
{
ans=a+b;
}

void sub(float a, float b,int lixo)
{
ans=a-b;
}

void mul(float a, float b,int lixo)
{
ans=a*b;
}

void div(float a, float b,int lixo)
{
ans=a/b;
}

void mov(float a, float b,int qual)
{
	if(qual==1) r1=ans;
	if(qual==2) r2=ans;
}

void push(float a, float b, int qual)
{
	int valor;
	if(qual==1) valor=r1;
	if(qual==2) valor=r2;
	topo_pilha++;
	pilha[topo_pilha]=valor;
}

void pop(float a, float b, int qual)
{
	int valor;
	valor=pilha[topo_pilha];
	topo_pilha--;
	if(qual==1) r1=valor;
	if(qual==2) r2=valor;
}

void show(float a, float b, int qual)
{
	if(qual==1) printf("%f\n",r1);
	if(qual==2) printf("%f\n",r2);
}

int main(void)
{

void (*p)(float,float,int);

float op1,op2,resultado;
int i, qual_registrador;
FILE *fp;
char *aux;
char nomearquivo[60];
char str1[4],str2[10],str3[10],linha[80];

topo_pilha=0;

printf("qual o nome do arquivo de entrada?\n");
scanf("%s",nomearquivo);

if( (fp=fopen(nomearquivo,"r")) == NULL){
	printf("Erro na abertura do arquivo.\n");
	return; //sai do programa
}

while(!feof(fp)){
	fgets(linha,80,fp);
	
	str1[0]=str2[0]=str3[0]=0;

	for(i=0;linha[i];i++){
		if(linha[i]==' '){
			linha[i]=0;
			strcpy(str1,linha);
			linha[i]=' ';
			break;
		}
	}
	i++;
	aux=&linha[i];

	for(;linha[i];i++){
		if( (linha[i]==' ')||(linha[i]=='\n') ){
			linha[i]=0;
			strcpy(str2,aux);
			linha[i]=' ';
			break;
		}
	}
	i++;
	aux=&linha[i];

	for(;linha[i];i++){
		if( (linha[i]==' ')||(linha[i]=='\n') ){
			linha[i]=0;
			strcpy(str3,aux);
			linha[i]=' ';
			break;
		}
	}

	if(!strcmp(str1,"sum")){
		p=sum;
	}

	if(!strcmp(str1,"sub")){
		p=sub;
	}

	if(!strcmp(str1,"mul")){
		p=mul;
	}

	if(!strcmp(str1,"div")){
		p=div;
	}

	if(!strcmp(str1,"mov")){
		p=mov;
	}

	if(!strcmp(str1,"push")){
		p=push;
	}

	if(!strcmp(str1,"pop")){
		p=pop;
	}

	if(!strcmp(str1,"show")){
		p=show;
	}

	if(!strcmp(str2,"r1")){
		op1=r1;
		qual_registrador=1;
	}
	else{
		if(!strcmp(str2,"r2")){
			op1=r2;
			qual_registrador=2;
		}
		else{
			op1=atoi(str2);
		}
	}
	
	if(!strcmp(str3,"r1")){
		op2=r1;
		qual_registrador=1;
	}
	else{
		if(!strcmp(str3,"r2")){
			op2=r2;
			qual_registrador=2;
		}
		else{
			op2=atoi(str3);
		}
	}

	(*p)(op1,op2,qual_registrador);

}

fclose(fp);
}
