nfa* nfa_star (nfa* old) { atm_context* context = old->context; atm* fa = atm_create(context); atm_state *source, *dest; dbg_assert(ilist_size(old->accept_states) == 1); foreach_v(ilist_itr_begin(old->states), ilist_itr_end(old->states), add_state, fa); source = atm_state_create(fa); dest = atm_state_create(fa); dbg_assert(source != NULL && dest != NULL); ilist_add_back(fa->states, source); ilist_add_back(fa->states, dest); fa->start_state = source; ilist_add_back(fa->accept_states, dest); atm_transform_create(fa, source, old->start_state, Epsilon); atm_transform_create(fa, source, dest, Epsilon); atm_transform_create(fa, (atm_state*)ilist_front(old->accept_states), dest, Epsilon); atm_transform_create(fa, (atm_state*)ilist_front(old->accept_states), old->start_state, Epsilon); ilist_clear(old->accept_states); ilist_clear(old->states); old->start_state = NULL; old->lifestate = atm_joined; fa->lifestate = atm_active; return fa; }
int main(int argc, char**argv) { char user_input[1000]; ATM *atm = atm_create(); char *atmPath; FILE *atmFile; char *second; int filenamelen = 0; if(argc == 1) { printf("Usage: ATM <filename>\n"); return 62; } //user fails to provide exactly one argument second = argv[1]; filenamelen = strlen(second); atmPath = malloc(1 + filenamelen + 4); strncpy(atmPath, second, strlen(second)); atmPath[filenamelen] = '.'; atmPath[filenamelen+1] = 'a'; atmPath[filenamelen+2] = 't'; atmPath[filenamelen+3] = 'm'; atmPath[filenamelen+4] = 0; atmFile = fopen(atmPath, "r"); if(atmFile == NULL){ printf("Error opening atm initialization file\n"); return 64; } fclose(atmFile); printf("%s", prompt); fflush(stdout); while (fgets(user_input, 10000,stdin) != NULL) { atm_process_command(atm, user_input); if(atm->currentUser != NULL) { printf("ATM (%s): ", atm->currentUser->name); } else { printf("%s", prompt); } fflush(stdout); } return EXIT_SUCCESS; }
int main(int arg, char **argv) { char user_input[1000]; if (arg != 2) { printf("Error opening atm initialization file\n"); return 64; } char *token; char argv_cp[1024]; strcpy(argv_cp, argv[1]); strtok(argv_cp, "."); token = strtok(NULL, "."); if (strcmp(token, "atm") != 0) { printf("Error opening atm initialization file\n"); return 64; } ATM *atm = atm_create(); //Check for command line arguements FILE *fp; fp = fopen(argv[1],"r"); if(fp ==NULL) { printf("Error opening atm initialization file\n"); return 64; } strcpy(atm->symm_key, argv[1]); fclose(fp); printf("%s", prompt); fflush(stdout); while (fgets(user_input, 10000,stdin) != NULL) { atm_process_command(atm, user_input); if(atm->session == 1) { printf("ATM (%s): ",atm->username); } else { printf("%s", prompt); } fflush(stdout); } atm_free(atm); return EXIT_SUCCESS; }
int main(int argc, char *argv[]) { char user_input[1000]; FILE *atm_file; if(argc != 2) { printf("Usage: atm <filename>\n"); exit(62); } if(strncmp(argv[1]+strlen(argv[1])-4, ".atm", 4) != 0) { printf("Error opening ATM initialization file\n"); exit(64); } atm_file = fopen(argv[1], "r"); if(!atm_file) { printf("Error opening ATM initialization file\n"); exit(64); } ATM *atm = atm_create(); fread(atm->key, sizeof(char), BLOCK_SIZE, atm_file); fread(atm->iv, sizeof(char), BLOCK_SIZE, atm_file); printf("%s", prompt); fflush(stdout); while (fgets(user_input, 10000,stdin) != NULL) { if(strlen(user_input) > 0 && strcmp(user_input, "\n") == 0) continue; atm_process_command(atm, user_input); if(atm->session) { printf("ATM (<%s>): ", atm->cur_user); } else { printf("%s", prompt); } fflush(stdout); } atm_free(atm); return EXIT_SUCCESS; }
nfa* nfa_union (nfa* first, nfa* second) { atm_context* context = first->context; atm* fa = atm_create(context); atm_state *source, *dest; dbg_assert(first->context == second->context); dbg_assert(ilist_size(first->accept_states) == 1); dbg_assert(ilist_size(second->accept_states) == 1); foreach_v(ilist_itr_begin(first->states), ilist_itr_end(first->states), add_state, fa); foreach_v(ilist_itr_begin(second->states), ilist_itr_end(second->states), add_state, fa); source = atm_state_create(fa); dest = atm_state_create(fa); dbg_assert(source != NULL && dest != NULL); ilist_add_back(fa->states, source); ilist_add_back(fa->states, dest); fa->start_state = source; ilist_add_back(fa->accept_states, dest); atm_transform_create(fa, source, first->start_state, Epsilon); atm_transform_create(fa, source, second->start_state, Epsilon); atm_transform_create(fa, (atm_state*)ilist_front(first->accept_states), dest, Epsilon); atm_transform_create(fa, (atm_state*)ilist_front(second->accept_states), dest, Epsilon); ilist_clear(first->accept_states); ilist_clear(first->states); first->start_state = NULL; first->lifestate = atm_joined; ilist_clear(second->accept_states); ilist_clear(second->states); second->start_state = NULL; second->lifestate = atm_joined; fa->lifestate = atm_active; return fa; }