Menu kezelés C-ben

Rancz Lajos csiga at fosch.com
Fri Sep 21 13:08:35 CEST 2007


Helló!

Miért? Lehet ugyanaz a függvény más bemenő paraméterekkel. Ha nagyon 
egyfélére csinálod, akkor csak nagyon nagy reszelések árán tudsz olyat 
beletenni, ami nincs benne :-) Már többször megszívtam ezt, úgyhogy ha 
ilyet kéne csinálnom akkor vmilyen scriptnyelv félét találnék ki, amit 
YACC-al (http://dinosaur.compilertools.net/) lefordítanék C-re.

Üdv,
Lajos


hg12345 wrote:
> Szia!
>
> Ha ezt így oldanám meg, minden Menühöz saját programot kellene írni 
> mind az állításra mind a kirirára, mind a feldolgozásra...... Kérdés, hogy 
> elferek a memóriában.
>
> Valami ilyesmit szeretnék:
>
> struct MENUITEM
> {
>            int iString;
>            int *PtrMem;
>            char iNumber;
>            union{
>              struct{
>                      char Setting;
>                      char DecimalPoint;
>                      char Valid;
>                        };
>                       void *Fn(void); 
>                      };
> };
>
> #define    ITEM(s,pm,in,se,de,va)    {s,pm,in,{se,de,va}},
> #define    ITEMF(s,pm,in,f)               {s,pm,in,{f}};
>
>
> const struct MENUITEM Menu[]={
>                 ITEM(.........)
>                 ITEM(.........)
>                 ITEMF(.........)
>                 ITEM(........)
>                 stb
> };
>
> Ez a megoldás egyszerüen szövegesen karbantartható.....
> Ha már benne van a FLASH/ROM-ban onnan már kényelmesen 
> feldolgozható....  
>
>
>
>   
>> Helló!
>>
>> Hát nem egyszerű feladat :-) Az ilyen nagyon általános programok 
>>     
> szoktak 
>   
>> rettenetesen bonyolultak, és nehezen bővíthetőek lenni :-)) Egy 
>>     
> egyszerű 
>   
>> megoldás:
>>
>> // Általános fv. pointer, int-et ad vissza, pointert eszik
>> typedef int (*pfv) (void *);
>>
>> // Menü elem típus
>> typdef struct {
>>     pfv     print;
>>     pfv     exec;
>> } menuElement;
>>
>> // Menü típus
>> typedef struct {
>>     MenuElement   *elements;
>>     int                        numOfElements;
>> } Menu;
>>
>> int menu(Menu *mptr, int choose)
>> {
>>     // Itt le kell kezelni, a lefele, felfele gombokat
>>     // Kiirataskor a menuElement print pointeret kell hivni
>>     // Enter- utesekor, pedig az exec-et, nyilvan tobbszintu 
>> menurendszer eseten a pointer a menu függvényre fog mutatni :-)
>> }
>>
>> Ezt az alap struktúrát lehet pofozgatni mindenféle irányba :-)
>>
>> Üdv,
>> Lajos
>>
>> hg12345 wrote:
>>     
>>> Hi!
>>>
>>> Most tanulom a C-t, kerestem a neten ilyen programot, de nem 
>>>       
> találtam.
>   
>>> Hatha valaki már találkozott ilyen problémával.
>>>
>>> Hogyan lehet C-ben hordozható kódban definiálni olyan szelektiv 
>>>       
> és 
>   
>>> szenzítiv menu-t aminek a kódja nem felejtő és nem átírható 
>>> memóriában van. FLASH,ROM, a program beléspési kódok nem 
>>>       
> írhatók 
>   
>>> át.... ez a kezelésben nem észrevető, azok a menüpontok 
>>>       
> amelyeket 
>   
>>> nem használ a készülék eltünnek, ha szükséges az állítása 
>>>       
> tiltható.....
>   
>>> Úgy szeretném, ha lenne egy konstans tömb amit forditási időben 
>>> töltenék fel a menü leírással, és egy program ami ezt kezelné. Mivel 
>>> nagyon sok menü bejegyzés lehetséges (min. 50, de van olyan 
>>> készülék ami 4500, ill 30000 feletti bejegyzést tartalmaz) elég 
>>>       
> tömör és 
>   
>>> hatásos leiró szükséges egy bejegyzéshez....  Persze sok azonos 
>>> bejegyzés van ami csak egy sorszámban (indexben) tér él.  
>>> Megjegyezném egyes bejegyzések tulajdonságai más 
>>>       
> bejegyzésektől 
>   
>>> függhetnek, öröklödhetnek.
>>>
>>> Jó lenne ha ez a rész minél kisebb területen elférne. Nem 
>>>       
> szeretnék 
>   
>>> nagyon nagy flash memória kapacítású kontrollert használni (32-
>>>       
> 64K 
>   
>>> felett)
>>>
>>> A problémát nem most találtam ki, megoldható és müködik ilyen 
>>> programom, de a technika amivel ezt előállítom, C-ben a fordító 
>>> megkötései miatt nem használható. A jelenlegi kivitel is csak 
>>>       
> teljesen 
>   
>>> egybe forditott program esetén használható, nem viseli el a linkert. 
>>> Ami az átkódolást nehezíti a linkerek nem tudnak kettős cím 
>>>       
> müvelteket 
>   
>>> végezni..... pl.:  const int *pValtozo= &változó1 + &változó2
>>>
>>> Elöre köszönök minden segítséget (link, programrészlet) , de akár 
>>>       
> meg 
>   
>>> is vásárolnám a megoldást.
>>>
>>>   Havas Gábor
>>>
>>> Olvasd az [origo]-t a mobilodon: mini magazinok a Mobizin-en
>>> ___________________________________________________
>>> www.t-mobile.hu/mobizin
>>>
>>> -----------------------------------------
>>>           elektro[-flame|-etc]
>>>   
>>>       
>> -----------------------------------------
>>           elektro[-flame|-etc]
>>
>>     
>
> Olvasd az [origo]-t a mobilodon: mini magazinok a Mobizin-en
> ___________________________________________________
> www.t-mobile.hu/mobizin
>
> -----------------------------------------
>           elektro[-flame|-etc]
>   



More information about the Elektro mailing list