예제 #1
0
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;
}
예제 #2
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();
}
예제 #3
0
//Draws entire screen Sensor Polling
void WinSensorPolling::draw() {
	_lcd->fillScr(VGA_WHITE);
	_buttons.deleteAllButtons();
	printMenuHeader(nameWinSensorPolling);
	addFlowButtons(true,true,true,_sensorPollingButtons);
	print();
	_buttons.drawButtons();
}
예제 #4
0
//Draws entire screen Time Settings
void WinTime::draw() {
	_lcd->fillScr(VGA_WHITE);
	_buttons.deleteAllButtons();
	printMenuHeader(nameWinTime);
	addFlowButtons(true,true,true,_timeButtons);
	print();
	_buttons.drawButtons();
}
예제 #5
0
//Draws entire screen System Settings
void WinSystemMenu::draw() {
	_lcd->fillScr(VGA_WHITE);
	_buttons.deleteAllButtons();
	printMenuHeader(nameWinSystemMenu);
	addFlowButtons(true,false,true,_systemButtons);
	print();
	_buttons.drawButtons();
}
예제 #6
0
//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();
}
예제 #7
0
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;
}
예제 #8
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;
}