int main() { init_LCD(); init_Relay(); init_Switch(); init_Buzzer(); init_LCD(); init_PWM(); sei(); while(1) { stop(); int ile_petli = 0; //wartosc zadana przez uzytkownika int dlugosc = 0; int wait = TAK; wyswietl_LCD("Start -> OK"); _delay_ms(200); wait = TAK; while(wait) if(bit_is_clear(PIN_SWITCH, SWITCH_OK)) wait = NIE; dlugosc = get_distance(); ile_petli = ilosc_petli(); wykonaj(ile_petli, dlugosc); _delay_ms(200); } }
int wykonaj_polecenie(char **polecenie, int n, int k, char **argv){ int tlo = 0; char **i = calloc(sizeof(char*), 128); char **start; char dopisz = 0; char *wyjscie = NULL; char *wejscie = NULL; int fd_we, fd_wy; // deskeyptory WE/WY char *tmp; start = i; ustaw_zmienna(*polecenie); tmp = strtok(*polecenie, " "); while(tmp!=NULL){ zamien_argumenty(argv,&tmp); (*i) = calloc(sizeof(char), strlen(tmp)); strcpy(*i++, tmp); tmp = strtok(NULL," "); } i = start; if(strcmp(*i,"exit") == 0){ exit(0); } else if(strcmp(*i,"fg") == 0){ pid = atoi(*++i); signal(SIGTSTP, przekaz_sygnal); moje_fg(&pid, jobs, N); return 0; } else if(strcmp(*i, "jobs") == 0){ wypisz_jobs(jobs, N); return 0; } else if(strcmp(*i, "unset") == 0){ if(*++i){ //printf("NAZWA ZMIENNEJ: |%s|",*i); unsetenv(*i); return 0; } } while (*i) { if(strcmp(*i,">")==0){ wyjscie = *++i; czysc_polecenie((i-1)); i--; } else if(strcmp(*i,">>")==0){ dopisz = 1; wyjscie = *++i; czysc_polecenie((i-1)); i--; } else if(strcmp(*i++,"<")==0){ wejscie = *i++; czysc_polecenie((i-2)); i-=2; } } if(strcmp(*--i,"&")==0){ *i = NULL; free(*i); tlo = 1; } i = start; int fg_pid; if ((fg_pid=fork())==0){ domyslne_sygnaly(); signal(SIGTSTP, SIG_DFL); if(k > 0){ dup2(fd[k-1][0], 0); close(fd[k-1][1]); } if(n>1){ dup2(fd[k][1], 1); close(fd[k][0]); } if(wyjscie){ close(1); switch (dopisz){ case 0: fd_wy = open(wyjscie, O_WRONLY | O_CREAT, 0644); break; case 1: fd_wy = open(wyjscie, O_WRONLY | O_CREAT | O_APPEND, 0644); break; } } if(wejscie){ fd_we = open(wejscie, O_RDONLY, 0644); dup2(fd_we,0); } if(!tlo){ signal(SIGTSTP, SIG_DFL); wykonaj(i); } else{ int pid_tlo; int status; pid_tlo = fork(); if(pid_tlo == 0){ signal(SIGINT, SIG_IGN); wykonaj(i); } else{ signal(SIGCLD, SIG_DFL); signal(SIGINT, SIG_IGN); waitpid(pid_tlo, &status, 0); printf("PID: %d | STATUS ZAKOŃCZENIA: %d\n", pid_tlo, status); exit(0); } } } else{ if(k>0){ close(fd[k-1][0]); } if(n>1){ close(fd[k][1]); } } free(i); return fg_pid; }