Ezasm for linux 1.0
Submitted By:
acvivek
Rating:
Not rated (
Rate It)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "s.h"
extern char* check(char [],int);
extern void num_check(char [],int);
char *vl;
void data_parse(char dl[])
{
extern long int loc_ctr;
extern int line_count;
extern int err_count;
extern FILE * list_file;
char var[10]="";
char dt[5]="";
char value[30]="";
char temp[50];
int i=strlen(dl)-1,j,len;
while(dl[i]==' ')
i--;
dl[++i]='\0';
i=0;
fprintf(list_file,"\n%s",dl);
len=strlen(dl);
while(i<len)
{
while(dl[i]==' ')
i++;
if(isalpha(dl[i]))
{
j=0;
while(isalpha(dl[i]) || isdigit(dl[i]))
temp[j++]=dl[i++];
temp[j]='\0';
strcpy(var,temp);
}
while(dl[i]==' ')
i++;
if(isalpha(dl[i]))
{
j=0;
while(isalpha(dl[i]))
temp[j++]=dl[i++];
temp[j]='\0';
strcpy(dt,temp);
}
if(dl[i]!=' ') {printf("\nSyntax error at line (%d) ",line_count);err_count++;return;}
while(dl[i]==' ')
i++;
if(isdigit(dl[i]) || isalpha(dl[i]) || dl[i]=='"')
{
j=0;
while(isdigit(dl[i]) || isalpha(dl[i]) || dl[i]==',' || dl[i]=='(' || dl[i]==')' || dl[i]==' ' || dl[i]=='"')
temp[j++]=dl[i++];
temp[j]='\0';
strcpy(value,temp);
}
}
extern symtab sy;
char wd[3];
if(strcmp(dt,"db")==0) strcpy(wd,"0");
else if(strcmp(dt,"dw")==0) strcpy(wd,"1");
else {printf("\nInvalid Data Type line (%d)",line_count);err_count++;}
if(sy.check_key(var)==1 && sy.check_sym(var)==1) sy.insert(var,wd);
else
{
printf("\nSymbol already defined line(%d)",line_count);
err_count++;
return;
}
if(strcmp(dt,"db")==0) {num_check(value,0);strcpy(wd,"0");}
else if(strcmp(dt,"dw")==0) {num_check(value,1);strcpy(wd,"1");}
}