int isValidAutobahnName(char *Name){// Ist der Autobahnname Erlaubt(von den zeichen her) char* buffer= malloc(sizeof(char)*1000); if(isdigit(Name[0])){ puts(" "); sprintf(buffer," Fehler , Der Autobahn Name muss mit einem Buchstaben beginnen"); printMenuHeader(buffer); free(buffer); return 1; } for(int i=0;i< CountUTF8String(Name);i++){ if(isalnum((int)Name[i])==0 && Name[i]!='_' && Name[i]!='.'){ sprintf(buffer," Fehler , Der Autobahn Name enthält '%c' , ein Verbotenes Zeichen",Name[i]); printMenuHeader(buffer); printMenuItem("Erlaubte zeichen [A-Z] [a-z] [0-9] '_' '.' "); printFooter(); free(buffer); return 1; } } free(buffer); return 0; }
//Draws entire screen Water Level Calibration void WinLvlCalib::draw() { _lcd->fillScr(VGA_WHITE); _buttons.deleteAllButtons(); printMenuHeader(nameWinLvlCalib); addFlowButtons(true,true,true,_waterLevelButtons); print(); _buttons.drawButtons(); }
//Draws entire screen Sensor Polling void WinSensorPolling::draw() { _lcd->fillScr(VGA_WHITE); _buttons.deleteAllButtons(); printMenuHeader(nameWinSensorPolling); addFlowButtons(true,true,true,_sensorPollingButtons); print(); _buttons.drawButtons(); }
//Draws entire screen Time Settings void WinTime::draw() { _lcd->fillScr(VGA_WHITE); _buttons.deleteAllButtons(); printMenuHeader(nameWinTime); addFlowButtons(true,true,true,_timeButtons); print(); _buttons.drawButtons(); }
//Draws entire screen System Settings void WinSystemMenu::draw() { _lcd->fillScr(VGA_WHITE); _buttons.deleteAllButtons(); printMenuHeader(nameWinSystemMenu); addFlowButtons(true,false,true,_systemButtons); print(); _buttons.drawButtons(); }
//Draws entire screen Sensor Calibration void WinPhCalib::draw() { _lcd->fillScr(VGA_WHITE); _buttons.deleteAllButtons(); printMenuHeader(nameWinPhCalib); if (_actScreen == 0) addFlowButtons(true,false,true,_phCalibrationButtons); print(); _buttons.drawButtons(); if (_actScreen == 0) _sensors->getPHinfo(); }
int isValidAutobahnKM(char *KM){// Ist AutobahnKM eine Gueltige zahl(z.b. 9stellen 2nachkommastellen) char* buffer= malloc(sizeof(char)*1000); double f = atof(KM); sprintf(buffer, "%.2f", f); while (buffer[strlen(buffer) - 1] == '0' || buffer[strlen(buffer) - 1] == '.') {//Loescht zuviele 0-en if (buffer[strlen(buffer) - 1] == '.') { chop(buffer); break; } else { chop(buffer); } } if (strcmp(buffer, KM) == 0) {//Sind Buchstaben drin oder weicht die zahl ab von Atof if (f >= 1000000000 || f <= -1000000000) {//Maximal und minimal Groese puts(""); printMenuHeader("Fehler , AutobahnKM dürfen maximal 9 stellig mit 2 Nachkommastellen sein"); printFooter(); free(buffer); return 1; } } else { puts(""); printMenuHeader("Fehler , AutobahnKM ist keine Gültige Zahl [Kommazeichen ist ein Punkt z.b 12.32]"); printFooter(); free(buffer); return 1; } free(buffer); return 0; }
int printPathToTarget(struct Knoten *meineKnoten,int StartKnoten,int Endknoten,double StartZeit){//Gibt gegangenen Weg aus char* BewegungsArray[AnzahlKnoten];//Weg wird mit lastnode zuruckverfolgt , deshalb muss die Ausgabe gedreht werden damit nicht das ende zuerst kommt sondern der Anfang , der "gedrehte" weg wird hier gespeichert char* buffer = malloc(sizeof(char)*1000);// Zwischenspeicer for (int i = 0; i < AnzahlKnoten; i++){ if (meineKnoten[i].ID == Endknoten){//ENDKNOTEN Finden int v = i; int AnzahlBewegungen = 0; ////Zurueckgelegten Weg (Trace) in Bewegungsarray speichern/////// while (meineKnoten[v].knotenZurueck!=NULL) { if (gibWegLaenge(meineKnoten, v, meineKnoten[v].knotenZurueck->ID)>0.001) {//Kreuzuebergange haben den weg 0.00001 werden somit ignoriert in der ausgabe (z.b. K1_2(A1) ---0.00001km--> K1_2(A2) wird ignoriert) sprintf(buffer, "------(%4.2f Km)----->", gibWegLaenge(meineKnoten, v, meineKnoten[v].knotenZurueck->ID)); BewegungsArray[AnzahlBewegungen * 3]=strdup(meineKnoten[v].knotenZurueck->Name);//Ausgangspunkt der "Bewegung" -> Jeder 3. wert (0,3,6,...) BewegungsArray[AnzahlBewegungen * 3 + 1]=strdup(buffer);//Entfernung der "Bewegung" -> Jeder 3.+1 Wert (1,4,7...) BewegungsArray[AnzahlBewegungen * 3 + 2]=strdup(meineKnoten[v].Name);//Endpunkt der "Bewegung" -> Jeder 3.+2 Wert (2,5,8,..) v = meineKnoten[v].knotenZurueck->ID;//Einen Knoten Weiter (zuruck)gehen im nachsten durchlauf AnzahlBewegungen++; }else{// falls es ein Kreuzuebergang ist eifach weiter gehen ohne ausgabe zu generieren v = meineKnoten[v].knotenZurueck->ID; } } ///////////////////////////////////////////////////////////////// //////////////////Bewegungsarray Rueckwarts Lesen und Ausgeben -> resultiert in richtiger logischer Reihenfolge/////////////////////////// if (meineKnoten[i].ID != meineKnoten[StartKnoten].ID) {//Wenn Start!=Endknoten if (meineKnoten[i].entfernungZumUrsprung == INT_MAX) {//Wenn Kein Weg gefunden puts("\n"); sprintf(buffer, " \"%s\" ist von \"%s\" aus nicht Erreichbar ", meineKnoten[i].Name, meineKnoten[StartKnoten].Name); printMenuHeaderContinous(buffer); puts("\n"); } else {//Weg gefunden , ausgabe beginnen //Ueberschrift puts("\n"); sprintf(buffer, " Weg von \"%s\" nach \"%s\" ", meineKnoten[StartKnoten].Name, meineKnoten[i].Name); printMenuHeader(buffer); printMenuItem(""); //BEWEGUNGSARRAY Rueckwarts Ausgeben printTabelHeader(3, " Von ", " Strecke ", " Nach "); for (int x = AnzahlBewegungen - 1; x >= 0; x--) { printTabelRow(3, BewegungsArray[x * 3], BewegungsArray[x * 3 + 1], BewegungsArray[x * 3 + 2]); } //Endzeile sprintf(buffer, " | Gesamt: %0.2f Km | Über %d Knoten | Berechnet in %f Sekunden | ", meineKnoten[i].entfernungZumUrsprung,AnzahlBewegungen-1, get_time()-StartZeit); printFooterText(buffer); puts("\n"); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// break; // Ausgabe erfolgte , Engknoten wurde gefunden , eine weitere suche nach endknoten macht keinen sinn } } return 1; }