void main() { // Unit Tests test("Empty_String_Test", 0, stringToLong("")); test("Zero_Test", 0, stringToLong("0")); test("Negative_Test", -123, stringToLong("-123")); test("Positive_Test", 123, stringToLong("123")); test("Spaces_Test", 123, stringToLong(" 123 ")); test("Non_Digit_Test", 0, stringToLong("no digit")); test("Partial_Digit_Test", 12, stringToLong("12e")); }
int main(int argc, char *argv[]) { if (2 != argc) { puts("usage: euler <problem_num>"); return EXIT_FAILURE; } stl_parse_result parseResult = stringToLong(argv[1]); if (EXIT_FAILURE == parseResult.status) { puts("Invalid input!"); return EXIT_FAILURE; } printf("Getting solution for problem %ld\n", parseResult.value); profile_result profileResult; switch (parseResult.value) { case 1: profileResult = profileFunc(&solution1); break; case 2: profileResult = profileFunc(&solution2); break; case 3: profileResult = profileFunc(&solution3); break; case 4: profileResult = profileFunc(&solution4); break; case 5: profileResult = profileFunc(&solution5); break; case 6: profileResult = profileFunc(&solution6); break; default: return !(0 < printf("I don't have a solution for that prolem yet.\n")); break; } if (0 <= profileResult.duration) { printf("Execution time: %ld microseonds\n", profileResult.duration); } else { printf("Profiling failed.\n"); } return profileResult.status; }
/* After a connection, handle the messages. */ void handle(int sock){ //printf("Im handle.\n"); //return 0; int n; char msgR[1000]; char msgS[1000]; n = readaline(sock, msgR, 1000); if (strcmp(msgR, "JOIN") == 0){ printf("====Handle: Got JOIN====\n"); node node_new; n = readaline(sock, msgR, 1000); printf("Got JOIN:%s\n", msgR); (&node_new)->id = stringToLong(msgR); n = readaline(sock, msgR, 1000); printf("Got JOIN:%s\n", msgR); strcpy((&node_new)->ip, msgR); n = readaline(sock, msgR, 1000); printf("Got JOIN:%s\n", msgR); (&node_new)->port = atoi(msgR); node *pre_toJoin = malloc(sizeof(node)); node *suc_toJoin = malloc(sizeof(node)); int result = joinIn(node_new, pre_toJoin, suc_toJoin); if (result == 1 || result == 2){ sendto(sock, "JOIN_SUCC\n", 10, 0, (struct sockaddr *) &client_addr, sizeof(client_addr)); printf("=====Handle: JOIN_SUCC=====\n"); sprintf(msgS, "%ld", pre_toJoin->id); strcat(msgS, "\n"); sendto(sock, msgS, strlen(msgS), 0, (struct sockaddr *) &client_addr, sizeof(client_addr)); printf("handle.JOIN_SUCC.predecessor's id:%s\n", msgS); strcpy(msgS, pre_toJoin->ip); strcat(msgS, "\n"); sendto(sock, msgS, strlen(msgS), 0, (struct sockaddr *) &client_addr, sizeof(client_addr)); printf("handle.JOIN_SUCC.predecessor's ip:%s\n", msgS); sprintf(msgS, "%d", pre_toJoin->port); strcat(msgS, "\n"); sendto(sock, msgS, strlen(msgS), 0, (struct sockaddr *) &client_addr, sizeof(client_addr)); printf("handle.JOIN_SUCC.predecessor's port:%s\n", msgS); sprintf(msgS, "%ld", suc_toJoin->id); strcat(msgS, "\n"); sendto(sock, msgS, strlen(msgS), 0, (struct sockaddr *) &client_addr, sizeof(client_addr)); printf("handle.JOIN_SUCC.successor's id:%s\n", msgS); strcpy(msgS, suc_toJoin->ip); strcat(msgS, "\n"); sendto(sock, msgS, strlen(msgS), 0, (struct sockaddr *) &client_addr, sizeof(client_addr)); printf("handle.JOIN_SUCC.successor's ip:%s\n", msgS); sprintf(msgS, "%d", suc_toJoin->port); strcat(msgS, "\n"); sendto(sock, msgS, strlen(msgS), 0, (struct sockaddr *) &client_addr, sizeof(client_addr)); printf("handle.JOIN_SUCC.successor's port:%s\n", msgS); if (result == 2){ node nodes_info[1]; nodes_info[0] = node_new; int number_node = 1; sendNtoN(nodes_info, number_node, "PRE", *suc_toJoin); } } else{ sendto(sock, "JOIN_WAIT\n", 10, 0, (struct sockaddr *) &client_addr, sizeof(client_addr)); node nodes_info[1]; nodes_info[0] = node_new; int number_node = 1; sendNtoN(nodes_info, number_node, "JOIN_FD", *successor0); } } else if (strcmp(msgR, "JOIN_FD") == 0){ printf("=====Handle: Got JOIN_FD=====\n"); node node_new; n = readaline(sock, msgR, 1000); (&node_new)->id = stringToLong(msgR); n = readaline(sock, msgR, 1000); strcpy((&node_new)->ip, msgR); n = readaline(sock, msgR, 1000); (&node_new)->port = atoi(msgR); node *pre_toJoin = malloc(sizeof(node)); node *suc_toJoin = malloc(sizeof(node)); int result = joinIn(node_new, pre_toJoin, suc_toJoin); if (result == 1 || result == 2){ node nodes_info[2]; nodes_info[0] = *pre_toJoin; nodes_info[1] = *suc_toJoin; int number_node = 2; sendNtoN(nodes_info, number_node, "JOIN_SUCC", node_new); if (result == 2){ node nodes_info[1]; nodes_info[0] = node_new; int number_node = 1; sendNtoN(nodes_info, number_node, "PRE", *suc_toJoin); } } else{ sendto(sock, "JOIN_WAIT\n", 10, 0, (struct sockaddr *) &client_addr, sizeof(client_addr)); node nodes_info[1]; nodes_info[0] = node_new; int number_node = 1; sendNtoN(nodes_info, number_node, "JOIN_FD", *successor0); } } else if (strcmp(msgR, "JOIN_SUCC") == 0){ printf("====Handle: Got %s=====\n", msgR); n = readaline(sock, msgR, 1000); predecessor0->id = stringToLong(msgR); n = readaline(sock, msgR, 1000); strcpy(predecessor0->ip, msgR); n = readaline(sock, msgR, 1000); predecessor0->port = atoi(msgR); n = readaline(sock, msgR, 1000); successor0->id = stringToLong(msgR); n = readaline(sock, msgR, 1000); strcpy(successor0->ip, msgR); n = readaline(sock, msgR, 1000); successor0->port = atoi(msgR); initFTable(); /* printf("predecessor0:\n"); printNode(*predecessor0); printf("successor0:\n"); printNode(*successor0); */ //updateFTable(); node node_new[2]; node_new[0] = *current; node_new[1].id = 0; sendNtoN(node_new, 2, "UPDATE", *successor0); } else if (strcmp(msgR, "PRE") == 0){ printf("====Handle: Got %s=====\n", msgR); n = readaline(sock, msgR, 1000); predecessor0->id = stringToLong(msgR); n = readaline(sock, msgR, 1000); strcpy(predecessor0->ip, msgR); n = readaline(sock, msgR, 1000); predecessor0->port = atoi(msgR); /* printf("predecessor0:\n"); printNode(*predecessor0); printf("successor0:\n"); printNode(*successor0); */ } else if (strcmp(msgR, "SUCC") == 0){ printf("====Handle: Got %s=====\n", msgR); n = readaline(sock, msgR, 1000); successor0->id = stringToLong(msgR); n = readaline(sock, msgR, 1000); strcpy(successor0->ip, msgR); n = readaline(sock, msgR, 1000); successor0->port = atoi(msgR); /* printf("predecessor0:\n"); printNode(*predecessor0); printf("successor0:\n"); printNode(*successor0); */ } else if (strcmp(msgR, "UPDATE") == 0){ printf("====Handle: Got %s=====\n", msgR); node node_new; n = readaline(sock, msgR, 1000); node_new.id = stringToLong(msgR); n = readaline(sock, msgR, 1000); strcpy(node_new.ip, msgR); n = readaline(sock, msgR, 1000); node_new.port = atoi(msgR); int power; n = readaline(sock, msgR, 1000); power = atoi(msgR); n = readaline(sock, msgR, 1000); n = readaline(sock, msgR, 1000); if (node_new.id != current->id){ updateFTable(node_new.id, -1, 1); if (power < FINGERTABLE_SIZE ){ int i; int j = 0; char results[FINGERTABLE_SIZE * 2][1000]; for (i = power; i <= FINGERTABLE_SIZE - 1; i++){ long bound = 0; if (node_new.id + (long) pow(2, i) >= KEY_SIZE ){ bound = node_new.id + (long) pow(2, i) - KEY_SIZE; } else{ bound = node_new.id + (long) pow(2, i); } if (current->id >= bound){ sprintf(results[j++], "%ld", bound); sprintf(results[j++], "%ld", current->id); } else if(successor0->id > current->id && current->id < predecessor0->id && predecessor0->id >= successor0->id && bound > current->id){ sprintf(results[j++], "%ld", bound); sprintf(results[j++], "%ld", current->id); } else{ break; } } power = i; if (j > 0) sendStoN("FTABLE_UPDATE", results, j, node_new); } node nodes_new[2]; nodes_new[0] = node_new; nodes_new[1].id = power; sendNtoN(nodes_new, 2, "UPDATE", *successor0); } } else if (strcmp(msgR, "FTABLE_UPDATE") == 0){ printf("====Handle: Got %s=====\n", msgR); int size; n = readaline(sock, msgR, 1000); size = atoi(msgR); int i; long start; long nodeId; for (i = 0; i <= size - 1; i += 2){ n = readaline(sock, msgR, 1000); start = stringToLong(msgR); n = readaline(sock, msgR, 1000); nodeId = stringToLong(msgR); insertFTable(start, nodeId); } } else if (strcmp(msgR, "LEAVE_PRE") == 0){ printf("====Handle: Got %s=====\n", msgR); n = readaline(sock, msgR, 1000); predecessor0->id = stringToLong(msgR); n = readaline(sock, msgR, 1000); strcpy(predecessor0->ip, msgR); n = readaline(sock, msgR, 1000); predecessor0->port = stringToLong(msgR); /* printf("predecessor0:\n"); printNode(*predecessor0); printf("successor0:\n"); printNode(*successor0); */ } else if (strcmp(msgR, "LEAVE_SUC") == 0){ printf("====Handle: Got %s=====\n", msgR); n = readaline(sock, msgR, 1000); successor0->id = stringToLong(msgR); n = readaline(sock, msgR, 1000); strcpy(successor0->ip, msgR); n = readaline(sock, msgR, 1000); successor0->port = atoi(msgR); /* printf("predecessor0:\n"); printNode(*predecessor0); printf("successor0:\n"); printNode(*successor0); */ } else if (strcmp(msgR, "UPDATE_LEAVE") == 0){ printf("====Handle: Got %s=====\n", msgR); node node_leave; n = readaline(sock, msgR, 1000); node_leave.id = stringToLong(msgR); n = readaline(sock, msgR, 1000); strcpy(node_leave.ip, msgR); n = readaline(sock, msgR, 1000); node_leave.port = atoi(msgR); node node_suc; n = readaline(sock, msgR, 1000); node_suc.id = stringToLong(msgR); n = readaline(sock, msgR, 1000); strcpy(node_suc.ip, msgR); n = readaline(sock, msgR, 1000); node_suc.port = atoi(msgR); if (node_leave.id != current->id){ updateFTable(node_leave.id, node_suc.id, 0); node nodes_new[2]; nodes_new[0] = node_leave; nodes_new[1] = node_suc; sendNtoN(nodes_new, 2, "UPDATE_LEAVE", *successor0); } else{ *quitUpdate = 1; } } //Search part else if (strcmp(msgR, "LOOKUP") == 0){ printf("=====Handle: Get LOOKUP Message=====\n"); long key; node node_source; n = readaline(sock, msgR, 1000); printf("handle: lookup message:%s\n", msgR); key = stringToLong(msgR); n = readaline(sock, msgR, 1000); printf("handle: lookup message:%s\n", msgR); n = readaline(sock, msgR, 1000); printf("handle: lookup message:%s\n", msgR); n = readaline(sock, msgR, 1000); node_source.id = stringToLong(msgR); printf("handle: lookup message:%s\n", msgR); n = readaline(sock, msgR, 1000); strcpy(node_source.ip, msgR); printf("handle: lookup message:%s\n", msgR); n = readaline(sock, msgR, 1000); node_source.port = atoi(msgR); printf("handle: lookup message:%s\n", msgR); if (node_source.id == current->id){ printf("Key not found\n"); } else{ node result; result = lookup(key, node_source); if (result.id != -1){ printf("The key belongs to the node:\n"); printNode(*current); printf("Not found.\n"); node node_found[1]; node_found[0] = *current; sendNtoN(node_found, 1, "FOUND", node_source); } } } //Receive a "FOUND" message, print the message out else if (strcmp(msgR, "FOUND") == 0){ printf("handle: Got FOUND: %s\n", msgR); node node_found; n = readaline(sock, msgR, 1000); node_found.id = stringToLong(msgR); n = readaline(sock, msgR, 1000); strcpy(node_found.ip, msgR); n = readaline(sock, msgR, 1000); node_found.port = atoi(msgR); printf("Key found on node:\n"); printNode(node_found); } //else if (strcmp(msgR, "IS_ALIVE") == 0){ //printf("====Handle: Got %s=====\n", msgR); //send back a confirm message //} }
/* In main function: Join in a ring */ void join(char** argv){ // struct sockaddr_in { // short int sin_family; /* 通信类型 */ // unsigned short int sin_port; /* 端口 */ // struct in_addr sin_addr; /* Internet 地址 */ // unsigned char sin_zero[8]; /* 与sockaddr结构的长度相同*/ // }; struct sockaddr_in serveraddr, clientaddr; int serversock; int n; char sendline[1000]; char recvline[1000]; //init parameters serversock = socket(AF_INET, SOCK_STREAM, 0); bzero(&serveraddr, sizeof(serveraddr)); serveraddr.sin_family = AF_INET; if (inet_addr(argv[2]) != -1){ printf("Join: server ip is: %s\n", argv[2]); serveraddr.sin_addr.s_addr = inet_addr(argv[2]); } else{ printf("Join error: server address error"); } printf("Join: server port is: %s\n", argv[3]); serveraddr.sin_port = htons(atoi(argv[3])); //connect to server printf("Join: connect to the server...\n"); n = connect(serversock, (struct sockaddr *) &serveraddr, sizeof(serveraddr)); if (n == 0){ printf("Join: connceted!\n"); } else{ printf("error:%s\n",strerror(errno)); perror("Join: connect failed.\n"); } strcpy(sendline, "JOIN"); strcat(sendline, "\n"); sendto(serversock, sendline, strlen(sendline), 0, (struct sockaddr *) &serveraddr, sizeof(serveraddr)); printf("Join: send join message:%s\n", sendline); sprintf(sendline, "%ld", current->id); strcat(sendline, "\n"); sendto(serversock, sendline, strlen(sendline), 0, (struct sockaddr *) &serveraddr, sizeof(serveraddr)); printf("Join: send my id:%s\n", sendline); strcpy(sendline, current->ip); strcat(sendline, "\n"); sendto(serversock, sendline, strlen(sendline), 0, (struct sockaddr *) &serveraddr, sizeof(serveraddr)); printf("Join: send my ip:%s\n", sendline); sprintf(sendline, "%d", current->port); strcat(sendline, "\n"); sendto(serversock, sendline, strlen(sendline), 0, (struct sockaddr *) &serveraddr, sizeof(serveraddr)); printf("Join: send my port:%s\n", sendline); n = readaline(serversock, recvline, 1000); //printf("recv:%s\n", recvline); if (strcmp(recvline, "JOIN_SUCC") == 0){ printf("JOIN_SUCC: begin to read receive message\n"); n = readaline(serversock, recvline, 1000); predecessor0->id = stringToLong(recvline); printf("Join: receive predecessor id:%s\n", recvline); n = readaline(serversock, recvline, 1000); strcpy(predecessor0->ip, recvline); printf("Join: receive predecessor ip:%s\n", recvline); n = readaline(serversock, recvline, 1000); predecessor0->port = atoi(recvline); printf("Join: receive predecessor port:%s\n", recvline); n = readaline(serversock, recvline, 1000); successor0->id = stringToLong(recvline); printf("Join: receive successor id:%s\n", recvline); n = readaline(serversock, recvline, 1000); strcpy(successor0->ip, recvline); printf("Join: receive successor ip:%s\n", recvline); n = readaline(serversock, recvline, 1000); successor0->port = atoi(recvline); printf("Join: receive successor port:%s\n", recvline); initFTable(); printf("Join: init fingertable finished.\n"); printNode(* current); printNode(* predecessor0); printNode(* successor0); node newN[2]; newN[0] = *current; newN[1].id = 0; printf("Send UPDATE info to successor.\n"); sendNtoN(newN, 2, "UPDATE", *successor0); } close(serversock); }
void runCommand() { unsigned long temp; //ON and OFF command if((strncmp(parameter,QSW, 3)==0)) { if(strncmp(setting_value,TURN_OFF,6)==0) { QSWON=0; strncpy(msg_globe,TURN_OFF,6); echo(); } else { QSWON=1; strncpy(msg_globe,TURN_ON,6); echo(); } qswonAction(); } else if((strncmp(parameter,SHT, 3)==0)) { if(strncmp(setting_value,TURN_OFF,6)==0) { SHTON=0; strncpy(msg_globe,TURN_OFF,6); echo(); } else { SHTON=1; strncpy(msg_globe,TURN_ON,6); echo(); } shtonAction(); } else if((strncmp(parameter,EXT, 3)==0)) { if(strncmp(setting_value,TURN_OFF,6)==0) { QSWEXT=0; strncpy(msg_globe,TURN_OFF,6); echo(); } else { QSWEXT=1; strncpy(msg_globe,TURN_ON,6); echo(); } qswextAction(); } else if((strncmp(parameter,RST, 3)==0)) { if(strncmp(setting_value,TURN_OFF,6)==0) { RESET=0; strncpy(msg_globe,TURN_OFF,6); echo(); } else { RESET=1; strncpy(msg_globe,TURN_ON,6); echo(); TPFLAG = 0; } } else if((strncmp(parameter,DIO, 3)==0)) { if(strncmp(setting_value,TURN_OFF,6)==0) { RF_OFF=1; strncpy(msg_globe,TURN_OFF,6); echo(); } else { RF_OFF=0; strncpy(msg_globe,TURN_ON,6); echo(); } diodeAction(); } else if((strncmp(parameter,FPS, 3)==0)) { if(strncmp(setting_value,TURN_OFF,6)==0) //normal: no FPS { FPS_ON=0; *PEDATDIR = *PEDATDIR & 0xFFBF; FPS_LEVEL=100; //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //*T4CMPR = FPS_LEVEL; //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ } else if(strncmp(setting_value,TURN_ON,6)==0) //method 1: FPS=on, FPL=100% { FPS_ON=1; *PEDATDIR = *PEDATDIR | 0x0040; FPS_LEVEL=100; //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //*T4CMPR = FPS_LEVEL; //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ } else //method 2: FPS=off, FPL=input { FPS_ON=2; //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //*T4CMPR = FPS_LEVEL; //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ *PEDATDIR = *PEDATDIR & 0xFFBF; } if(FPS_ON==2) *XINT2CR = 0x8005; else *XINT2CR = 0x8000; strncpy(msg_globe,(char *)FPS_ON,6); echo(); } //SETTING VALUE COMMAND else if((strncmp(parameter,PRF, 3)==0)) { PULSERATE=stringToLong((char *)setting_value); pulseRateAction(); strncpy(msg_globe,(char *)setting_value,6); echo(); } else if((strncmp(parameter,PWM, 3)==0))//++xiao PWM { PWMTime=stringToLong((char *)setting_value); if( (PWMTime < 20) || (PWMTime > 380) ) PWMTime=20; pulseRateAction(); WriteData(); strncpy(msg_globe,(char *)setting_value,6); echo(); }//++xiao else if((strncmp(parameter,TEV, 3)==0)) { ENVSET=(short)stringToLong((char *)setting_value); strncpy(msg_globe,(char *)setting_value,6); echo(); } else if((strncmp(parameter,TLA, 3)==0)) { //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //D2_SET=(short)stringToLong((char *)setting_value); D2_SET=(float)stringToLong((char *)setting_value); //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ strncpy(msg_globe,(char *)setting_value,6); echo(); } else if((strncmp(parameter,TK1, 3)==0)) { XTL1SET=(short)stringToLong((char *)setting_value); strncpy(msg_globe,(char *)setting_value,6); echo(); } else if((strncmp(parameter,TK2, 3)==0)) { XTL2SET=stringToLong((char *)setting_value); strncpy(msg_globe,(char *)setting_value,6); echo(); } else if((strncmp(parameter,TDI, 3)==0)) { D1_SET=(float)stringToLong((char *)setting_value); strncpy(msg_globe,(char *)setting_value,6); echo(); } else if((strncmp(parameter,IDI, 3)==0)) { DIODECUR=stringToLong((char *)setting_value); if( DIODECUR > DIMAX ) DIODECUR = DIMAX; //ver3c Diode_SetPt= DIODECUR; strncpy(msg_globe,(char *)setting_value,6); echo(); /* while(DIODECUR < Diode_SetPt) // ramp the diode current { DIODECUR++; if(DIMAX > 250) *T3CMPR = (DIODECUR<<2); else *T3CMPR = (DIODECUR<<2); wait(100); PLACE = 25; num2ascii(DIODECUR, 0); } */ } /*else if((strncmp(parameter,PKP, 3)==0)) { Kp=(float)stringToLong((char *)setting_value); strncpy(msg_globe,(char *)setting_value,6); echo(); } else if((strncmp(parameter,PKI, 3)==0)) { Ki=(float)stringToLong((char *)setting_value); strncpy(msg_globe,(char *)setting_value,6); echo(); } else if((strncmp(parameter,PKD, 3)==0)) { Kd=(float)stringToLong((char *)setting_value); strncpy(msg_globe,(char *)setting_value,6); echo(); }*/ else if((strncmp(parameter,FPL, 3)==0)) { if(FPS_ON==2) { FPS_LEVEL=stringToLong((char *)setting_value); //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //*T4CMPR = FPS_LEVEL; //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ } else { FPS_LEVEL=100; //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //*T4CMPR = FPS_LEVEL; //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ } strncpy(msg_globe,(char *)setting_value,6); echo(); } else if((strncmp(parameter,DCL, 3)==0)) { DIMAX=(short)stringToLong((char *)setting_value); strncpy(msg_globe,(char *)setting_value,6); echo(); } else {strncpy(msg_globe,ERROR,6); echo(); } return; }