Esempio n. 1
0
/*
 * This function commints the first step of the program.
 * fp - the name of the file that contains the assembler code.
 */
void firstStep(FILE* fp)
{
	int i = 0, z = 1, cmdNum, repeatCmd = 0; /* number of command*/
	int* addType;
	bool errFlag = FALSE, stepOneEnd = FALSE;
	line ln[lineVar], lastOperand;/* last read line*/
	initiateLine(ln);
	IC = 0; DC = 0;
	while(stepOneEnd == FALSE && ++lineNumber){
		z = 1;
		getLine(fp, ln, &stepOneEnd);
		QUE_setPtrToHead();
		if(strcmp(ln[z].word, "EMPTY") == 0)
			continue;
		if((ln[z].word[0] == ';' && strcmp(ln[0].word, "NULL") == 0) || (ln[0].word[0] == ';' ))
			continue;
		if(isLabelOK(ln[z - 1])){
			if(ln[z].word[0] != '.')
				insertToSymbolTable(labelTABLE, ln[z - 1].word, IC, IC + DC);
			else
				insertToSymbolTable(labelTABLE, ln[z - 1].word, DC, IC + DC);
		}
		if(ln[z].word[0] == '.'){ /* in case of guide sentence*/
			guideSentence(ln);
			continue;
		}
		if((cmdNum = checkCmd(ln[z], &repeatCmd)) == -1) continue;
		if(!isArgsNumFits(cmd[cmdNum].args, ln)) errFlag = TRUE;
		addType = calloc(cmd[cmdNum].args, sizeof(int));
		for(i = 0; i < cmd[cmdNum].args; i++){
			addType[i] = checkAddresingType(ln[++z].word);
			if(!isAddressingTypeOK(cmdNum, addType[i], i)) errFlag = TRUE;
			if(i == 0 && !(strcmp(ln[z].word, "$$") == 0)){
				lastOperand = ln[z];
				lastOperand.wordIdx = addType[0];
			}
		}
		if(errFlag == FALSE){
			setLineInMemory(cmdNum, addType, ln[2],ln[3], lastOperand);
			if(repeatCmd == 2){
				setLineInMemory(cmdNum, addType, ln[2],ln[3], lastOperand);
				if(addType[0] == 1 || addType[0] == 1){
					if(mem[IC- cmd[cmdNum].args].fieldNum == 1)
						dupLineLabels(IC- cmd[cmdNum].args );
					else
						dupLineLabels(IC- cmd[cmdNum].args - 1);
				}
			}
		}else errFlag = TRUE;
		free(addType);
		freeLine(ln);
	}
	mem[IC].fieldNum = -1;
	guidel[DC].string = endOfData;
}
Esempio n. 2
0
int main(int argc, char *argv[]) {
	char str[50];
	FILE *file;
	int i,numberTrueAnswer=0;
	char *clientFile="/home/user/workspace/server/registration.txt";
	char numberTest='0';
	char *name=(char*)malloc(50*sizeof(char));


	int sockfd, newsockfd, portno, clilen;
	const int on = 1;
	char buffer[256];
	struct sockaddr_in serv_addr, cli_addr;
	int n;

	sockfd = socket(AF_INET, SOCK_STREAM, 0);
	if (sockfd < 0) {
		perror("ERROR opening socket");
		exit(1);
	}
	setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
	bzero((char *) &serv_addr, sizeof(serv_addr));
	portno = 5001;
	serv_addr.sin_family = AF_INET;
	serv_addr.sin_addr.s_addr = INADDR_ANY;
	serv_addr.sin_port = htons(portno);

	if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
		perror("ERROR on binding");
		exit(1);
	}
	listen(sockfd, 5);
	clilen = sizeof(cli_addr);

	newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
	if (newsockfd < 0) {
		perror("ERROR on accept");
		exit(1);
	}

	//Connect from client

	while(1){
	bzero(buffer, 256);
		n = read(newsockfd, buffer, 255);
		if (n < 0) {
				perror("ERROR reading from socket");
				exit(1);
		}
	if(buffer[0]=='!'){
		n = write(newsockfd, "Login", 5);
		break;
	}
	n = write(newsockfd, "ERROR", 5);
	}
	/*//Registration
	int numberClient;
	int clientSize=sizeFile(clientFile);
	struct Client c[clientSize];
	file = fopen(clientFile, "r");
	for (i = 0; fgets(str, sizeof(str), file); i++) {
						writeSizeClient(&c[i], &str);
	}
	fclose(file);
	while(1){
		numberClient=-1;
		bzero(buffer, 256);
		n = read(newsockfd, buffer, 255);
		for (i = 0; i<clientSize; i++) {
			if(strcmp(buffer, strcat(c[i].login,"\n"))==0){
				numberClient=i;
				break;
		}}
		if(numberClient!=-1){
			n = write(newsockfd, "Parol", 5);
			break;
		}
		n = write(newsockfd, "Login", 5);
		}
	//Enter Password
	while(1){
			bzero(buffer, 256);
			n = read(newsockfd, buffer, 255);
			if(strcmp(buffer, strcat(c[numberClient].parol, "\n"))==0){
					n = write(newsockfd, "OK", 2);
					break;
			}
			n = write(newsockfd, "Parol", 5);
			}
	//Enter last result
	char *string=writeLastResult(&c[numberClient]);
	printf("%s",string);*/

	//Number test
	while (1){
		bzero(buffer, 256);
		n = read(newsockfd, buffer, 255);
		numberTest = buffer[0];
		name=(char*)malloc(50*sizeof(char));
		sprintf(name, "%s%c%s", "/home/user/workspace/server/",numberTest, ".txt");
		if((file = fopen(name, "r"))!=NULL){
			n = write(newsockfd, "OK", 2);
			break;
		}
		n = write(newsockfd, "ERROR", 5);
		free(name);
	}
	int testSize = sizeFile(name);
	struct Line x[testSize];
	file = fopen(name, "r");
		for (i = 0; fgets(str, sizeof(str), file); i++) {
			writeSize(&x[i], &str);
		}
		fclose(file);
		for (i = 0; i < testSize; i++) {
		char *stringOut = writeToClient(&x[i]);
		n = write(newsockfd, stringOut, strlen(stringOut));
		printf("%d", strlen(stringOut));
		bzero(buffer, 256);
		n = read(newsockfd, buffer, 255);
		if (n < 0) {
			perror("ERROR reading from socket");
			exit(1);
		}
		printf("Answer: %s\n", buffer);
		if (buffer[0] == x[i].trueAnswer){
			n = write(newsockfd, "Right\n", 6);
			numberTrueAnswer=numberTrueAnswer+1;
		}
		else
			n = write(newsockfd, "Wrong\n", 6);
		if (n < 0) {
			perror("ERROR writing to socket");
			exit(1);
		}
	}

	free(name);
	name=(char*)malloc(100*sizeof(char));
	sprintf(name, "%s%d\n%s%d\n", "Number of question ",testSize,
			"Number of true answer is ",numberTrueAnswer);
	n = write(newsockfd, name, strlen(name));
	if (n < 0) {
				perror("ERROR writing to socket");
				exit(1);
			}
	n = write(newsockfd, "!\n", 2);
	for (i = 0; i < testSize; i++)
		freeLine(&x[i]);
	free(name);
	//for (i = 0; i < clientSize; i++)
		//freeClient(&c[i]);
	return 0;
}