/** * @brief Zuschlag fuer alle Fische eines Besitzers */ static void zuschlag(char *besitzer, int zuschlag) { int fd, ret, gefunden = 0; Fischsatz fisch; evtl_namen_kuerzen(besitzer); writer_lock(); debug_wait(); fd = open(DATEI, O_RDWR); if(fd < 0) { perror("open"); writer_unlock(); exit(1); } while((ret = read(fd, &fisch, sizeof(fisch))) == sizeof(fisch)) { if(!strcmp(fisch.besitzer, besitzer)) { fisch.preis += zuschlag; if(lseek(fd, -sizeof(fisch), SEEK_CUR) ==(off_t)-1) { perror("lseek"); writer_unlock(); exit(1); } if(write(fd, &fisch, sizeof(fisch)) != sizeof(fisch)) { perror("write"); writer_unlock(); exit(1); } gefunden = 1; } } if(ret < 0) { perror("read"); writer_unlock(); exit(1); } else if(ret > 0) { fprintf(stderr, "Warnung: Datei \"%s\" korrumpiert\n", DATEI); } if(!gefunden) { printf("Achtung: Kein Kunde namens \"%s\" in der Datei \"%s\"\n", besitzer, DATEI); } close(fd); writer_unlock(); }
/** * @brief Einen neuen Fisch in die Datenbank eintragen */ static void neu(char *besitzer, char *fischname) { int fd; int ret; Fischsatz fisch; evtl_namen_kuerzen(besitzer); evtl_namen_kuerzen(fischname); writer_lock(); debug_wait(); fd = open(DATEI, O_RDWR|O_CREAT, 0600); if(fd < 0) { perror("open"); writer_unlock(); exit(1); } while((ret = read(fd, &fisch, sizeof(fisch))) == sizeof(fisch)) { if(!strcmp(fisch.besitzer, besitzer) && !strcmp(fisch.fischname, fischname)) { printf("Kann Besitzer \"%s\" / Fisch \"%s\" nicht eintragen: Eintrag existiert bereits!\n", besitzer, fischname); writer_unlock(); exit(1); } } if(ret < 0) { perror("read"); writer_unlock(); exit(1); } else if(ret > 0) { fprintf(stderr, "Warnung: Datei \"%s\" korrumpiert\n", DATEI); lseek(fd, -ret, SEEK_END); } strcpy(fisch.besitzer, besitzer); strcpy(fisch.fischname, fischname); fisch.preis = GRUNDPREIS; if((ret = write(fd, &fisch, sizeof(fisch))) != sizeof(fisch)) { if(ret < 0) perror("write"); else fprintf(stderr, "?!? Konnte nur %d von %d bytes schreiben\n", ret, sizeof(fisch)); } close(fd); writer_unlock(); }
void RTC_IRQHandler(void) { #ifdef DEBUG /* setup uart to send commands to debug interface */ //init_uart_interface_for_debuging(); /* send character indicating RTC time interrupt */ LeUart_SendChar('r'); LeUart_SendChar('\n'); char buff[30]; sprintf(buff, "Rx: %d\n", rxBuff.wrI); LeUart_SendText(buff); if (true == rxBuff.overflow) { LeUart_SendText("Overflow\n"); for (int i = 0; i < rxBuff.wrI; i++) { LeUart_SendChar(rxBuff.data[i]); } RTC_setTime(10000); } /* transmit received data from gps module */ if (true == rxBuff.ready) { for (int i = 0; i < rxBuff.wrI; i++) { LeUart_SendChar(rxBuff.data[i]); } LeUart_SendChar('\n'); clearRxBuffer(); } /* wait */ //debug_wait(); /* setup uart to listen for commands from gps module */ //init_uart_interface(); /* wait */ debug_wait(); #endif RTC_clearInt(); }
/** * @brief Eine Liste des Fischbestandes ausgeben. */ static void liste(char *besitzer) { int fd, ret; int i = 0; int gesamtpreis = 0; Fischsatz fisch; if(besitzer) evtl_namen_kuerzen(besitzer); leser_lock(); debug_wait(); fd = open(DATEI, O_RDONLY); if(fd < 0) { perror("open"); leser_unlock(); exit(1); } while((ret = read(fd, &fisch, sizeof(fisch))) == sizeof(fisch)) { if(besitzer) { if(!strcmp(fisch.besitzer, besitzer)) { if(++i == 1) { printf("Fische von Besitzer %s:\n", besitzer); printf("Name Preis\n"); } printf("%s: %d Eur\n", fisch.fischname, fisch.preis); gesamtpreis += fisch.preis; } } else { if(++i == 1) { printf("Liste aller Fische:\n"); printf("Besitzer Name Preis\n"); } printf("%s %s: %d Eur\n", fisch.besitzer, fisch.fischname, fisch.preis); } } if(ret < 0) { perror("read"); leser_unlock(); exit(1); } else if(ret > 0) { fprintf(stderr, "Warnung: Datei \"%s\" korrumpiert\n", DATEI); } if(i == 0) { if(besitzer) printf("%s hat keine Fische bei uns\n", besitzer); else printf("Keine Fische vorhanden\n"); } else { printf("Insgesamt: %d Fische", i); if(gesamtpreis) printf(", Summe: %d Euro\n", gesamtpreis); else printf("\n"); } close(fd); leser_unlock(); }
/** * @brief Rechnung fuer Besitzer ausgeben, seine Eintraege loeschen */ static void rechnung(char *besitzer) { int fd, fdz, ret, gefunden = 0; Fischsatz fisch; int gesamtpreis = 0; writer_lock(); debug_wait(); if(rename(DATEI, ZWISCHENDATEI) < 0) { perror("rename"); writer_unlock(); exit(1); } evtl_namen_kuerzen(besitzer); fdz = open(ZWISCHENDATEI, O_RDONLY); if(fdz < 0) { perror("open"); writer_unlock(); exit(1); } fd = open(DATEI, O_RDWR|O_CREAT, 0600); if(fd < 0) { perror("open"); writer_unlock(); exit(1); } while((ret = read(fdz, &fisch, sizeof(fisch))) == sizeof(fisch)) { if(!strcmp(fisch.besitzer, besitzer)) { gesamtpreis += fisch.preis; gefunden = 1; } else { if(write(fd, &fisch, sizeof(fisch)) != sizeof(fisch)) { perror("write"); writer_unlock(); exit(1); } } } if(ret < 0) { perror("read"); writer_unlock(); exit(1); } else if(ret > 0) { fprintf(stderr, "Warnung: Datei \"%s\" korrumpiert\n", DATEI); } if(gefunden) { printf("Rechnungsbetrag fuer %s: %d Eur\n", besitzer, gesamtpreis); } else { printf("Achtung: Kein Kunde namens \"%s\" in der Datei \"%s\"\n", besitzer, DATEI); } close(fdz); close(fd); writer_unlock(); }