V09 / menu
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers menu.cpp Source File

menu.cpp

00001 //
00002 // menu file interface class (Version 0.0.1)
00003 //
00004 //
00005 #include "string.h"
00006 #include "menu.h"
00007 #include "SDFileSystem.h"
00008 #include "FATDirHandle.h"
00009 #include "MODSERIAL.h"
00010 
00011 extern MODSERIAL pc;                       // definiert in main
00012 extern SDFileSystem sd;
00013 
00014 // Create a menu file class.
00015 menu::menu() {
00016 
00017 }
00018 
00019 
00020 // Destroy a menu file class.
00021 menu::~menu() {
00022          
00023 }
00024 
00025 
00026 // Read parameter from the target file.
00027 bool menu::getValue(uint8_t pos, char *zeile1, char *zeile2, char *value)
00028 {
00029     bool flag = false;
00030     int e, n, nr = 0;
00031     char buf[80];
00032     
00033     // Open the target file.
00034     FILE *fp = fopen("/sd/menu.csv", "r");
00035     if (fp == NULL) {
00036         return false;
00037     }
00038 
00039     // jeweils eine Zeile aus der Datei lesen
00040    
00041     while (fgets(buf, sizeof(buf), fp) != NULL) 
00042     {
00043         // pc.printf("\nmenu: %s",buf);
00044         
00045         // Ignore a comment.
00046         if (buf[0] == '#') {
00047             continue;
00048         }
00049 
00050         // Trim a return.
00051         const size_t len = strlen(buf);
00052         for (int i = 0; i < len; i++) {
00053             if ((buf[i] == '\r') || (buf[i] == '\n')) {
00054                 buf[i] = '\0';
00055             }
00056         }
00057 
00058         // Separate pos
00059         char temp[40];
00060         char *sp = strchr(buf, ';');
00061         if (sp != NULL) 
00062         {
00063             // pc.printf("\n  separate pos:");
00064             n = sp - buf; 
00065             for (e = 0; e < n; e++)
00066             {
00067               temp[e] = buf[e];
00068               // pc.printf(" %02x",temp[e]);  
00069             }
00070             temp[e] = 0;
00071             sp++;
00072             nr = atoi(temp);
00073         }
00074         // pc.printf("\n  menu 1 temp: %s, %d",temp,nr);
00075         
00076         // Separate Zeile1, zeile2, Wert
00077         if (pos == nr)
00078         {
00079             char *sp1 = strchr(sp, ';');
00080            
00081             // pc.printf("\n  separate Zeile 1:");
00082             
00083             n = sp1 - sp; 
00084             for (e = 0; e < n; e++)
00085             {
00086               zeile1[e] = *sp; sp++;
00087               // pc.printf(" %02x",zeile1[e]);  
00088             }
00089             zeile1[e] = 0;
00090             sp1++;
00091            
00092             // pc.printf("\n  menu 1 zeile 1: [%s]",zeile1);
00093            
00094             char *sp2 = strchr(sp1, ';');
00095             // pc.printf("\n  separate Zeile 2:");
00096             
00097             n = sp2 - sp1; 
00098             for (e = 0; e < n; e++)
00099             {
00100               zeile2[e] = *sp1; sp1++;
00101               // pc.printf(" %02x",zeile2[e]);  
00102             }
00103             zeile2[e] = 0;
00104             sp2++;   
00105            
00106             // pc.printf("\n  menu zeile 2: [%s]",zeile2);
00107             
00108             // den rest der Zeile beinhaltet das value
00109             // pc.printf("\n  separate Zeile 2:");
00110             for (int e = 0;; e++)
00111             {
00112               value[e] = *sp2; sp2++;
00113               // pc.printf(" %02x",value[e]); 
00114               if (value[e] == 0) break; 
00115             }
00116               
00117             // pc.printf("\n  menu value: [%s]",value);
00118            
00119             flag = true;
00120            break;  
00121         }
00122     }
00123     
00124     fclose(fp);
00125     return flag;
00126 }