Telefonų modeliai > Darbas su programine įranga
***ELF'ų kurimas***
Denukas:
ELF'ų kurimasPaprastų elfų kūrimas nereikalauja ypatingų programavimo žinių, bet be jų nesukūrsite nieko gero! Elfų kūrimas su "Embedded Workbench 4.0 Evaluation" vyksta C++ kalba. Sukūrtą elfą galite išbandyti ar naudoti tik telefone, kuriame yra įrašytas elfpackas. Daugiau apie elfpacko įrašymą i telefona ir jau sukūrtus elfus galite pasiskaityti šioje temoje ***ELFpack & ELFs***.
Instrukcija
Kaip minėjau visas programavimas vyksta su "Embedded Workbench 4.0 Evaluation" programa, tad ją parsisiunčiame. Parsisiuntę, išskleidžiame ją ir jos aplanke sukuriame kitą aplanką "SE". Tada parsisiunčiame iš iš čia bent "C++", "include", "Library", "ElfPack" ir kokį "HelloWorld" elfą (rekomenduočiau parsisiųsti viską, kas tame aplanke yra, dauguma tų failų opensource elfai), bei sukeliame viską į prieštai sukurtą "SE" aplanką.
Tuomet įeiname į nurodyįą direktoriją "...\Embedded Workbench 4.0 Evaluation\SE\HelloWorld" ir paleidžiame "HelloWorld.eww" failą. Atidarytas failas turi atrodyti panašiai į šį:
Du kartus spragtelėkite su pele ant main.c, jums atidarys programavimo langą.
Prieš pradedant programuoti pirmiausią atlikite šį veiksmą!
Project -> Edit Configurations... -> Release -> OK
Norint patikrinti ar jūsų komandose nėra klaidų spauskite Project -> Compile arba Alt+F7.
Jeigu norite išsaugoti elfą spauskite Project -> Rebuild All, elfas bus išsaugotas "...\SE_ELF\Elf\Release\Exe" aplanke.
Raudonai apibrauktas kodas turi būti įtraukiamas, kuriant betkokį elfą:
--- Citata ---#include "..\\include\Lib_Clara.h"
#include "..\\include\Dir.h"
void elf_exit(void)
{
kill_data(&ELF_BEGIN, (void(*)(void*))mfree_adr());
}
--- Baigti citatą ---
Mėlynai apibrauktas kodas yra jusų programuojamo elfo komadu kodas: taip pat kiekvienas elfas turi turėti pagrindine funkciją:
--- Citata ---int main (void)
--- Baigti citatą ---
Sėkmės, kuriant naujus ir kietus elfus!!!
Jeigu sudomino, labai daug pamokų, naudojant sudėtingesnes funkcijas rasite čia.
Elfų funkcijų kodai:
--- Citata ---StatusIndication_ShowNotes(STR("čia rasomas tekstas, kuris bus rodomas ant ekrano"));
--- Baigti citatą ---
--- Citata ---StatusIndication_ShowNotes(0x6FFFFFFF); - išvalo ekraną.
--- Baigti citatą ---
--- Citata ---SetLampLevel(skaičius nuo 0 iki 100, tai yra blykstės švietimo stiprumo %);
--- Baigti citatą ---
--- Citata ---SUBPROC(elf_exit); - išjungia elfą,
--- Baigti citatą ---
--- Citata ---int NewKey(int key, int r1 , int mode)
{
if (key==mugtuko kodas)
{
if(mode==paspaudimo kodas)
{
}
}
--- Baigti citatą ---
Elfų main.c failai:
SystemTemp
--- Citata ---#include "..\\include\Lib_Clara.h"
#include "..\\include\Dir.h"
void elf_exit(void)
{
kill_data(&ELF_BEGIN, (void(*)(void*))mfree_adr());
}
BATT bat;
u16 ws[193];
int NewKey(int key, int r1 , int mode)
{
if (key==KEY_POWER)
{ if(mode==KBD_SHORT_PRESS)
{
ModifyKeyHook(NewKey,0);
StatusIndication_ShowNotes(0x6FFFFFFF);
SUBPROC(elf_exit);
return(0);
}
}
if(key==KEY_PLAY)
{
if(mode==KBD_SHORT_PRESS)
{
GetBattaryState((int const*)1 , &bat);
snwprintf(ws,196,(u16*)L"Temp = %d C",bat.SystemTemperature);
StatusIndication_ShowNotes(Str2ID(ws,0,SID_ANY_LEN));
}
return(-1);
}
return(0);
}
int main(u16 *exename,u16 *filename)
{
ModifyKeyHook(NewKey,1);
return(0);
}
--- Baigti citatą ---
Lighter
--- Citata ---#include "..\\include\Lib_Clara.h"
#include "..\\include\Dir.h"
void elf_exit(void)
{
kill_data(&ELF_BEGIN, (void(*)(void*))mfree_adr());
}
int i=0;
char flag=0;
int NewKey(int key, int r1 , int mode)
{
if (key==KEY_POWER)
{
if(mode==KBD_SHORT_PRESS)
{
ModifyKeyHook(NewKey,0);
StatusIndication_ShowNotes(0x6FFFFFFF);
SetLampLevel(0);
SUBPROC(elf_exit);
return(0);
}
}
if(key==KEY_VOL_UP)
{
if(mode==KBD_SHORT_PRESS)
{
if(i<100)
{
if(i==110)i=100;
i+=10;
if(flag==1)StatusIndication_ShowNotes(int2strID(i/10));
SetLampLevel(i^0x01);
}
}
return(-1);
}
if(key==KEY_VOL_DOWN)
{
if(mode==KBD_SHORT_PRESS)
{
if(i>0)
{
if(i==-10)i=0;
i-=10;
if(flag==1)StatusIndication_ShowNotes(int2strID(i/10));
SetLampLevel(i^0x01);
}
}
return(-1);
}
if(key==KEY_CAMERA_FOCUS)
{
if(mode==KBD_SHORT_PRESS)
{
if(flag==0)
{
StatusIndication_ShowNotes(STR("ïîêąç óšîâí˙ ˙šêîñòč âêėž÷¨¨í"));
flag=1;
}else
{
flag=0;
StatusIndication_ShowNotes(0x6FFFFFFF);
}
}
return(-1);
}
return(0);
}
int main(const u16 *exename, const u16 *filename)
{
ModifyKeyHook(NewKey,1);
return(0);
}
--- Baigti citatą ---
SoundOnKeyPress v1.3
--- Citata ---#include "..\include\Lib_Clara.h"
#include "..\include\Dir.h"
void elf_exit(void)
{
kill_data(&ELF_BEGIN, (void(*)(void*))mfree_adr());
}
bool pl=false;
u16 * Path;
u16 * PathMP3;
u16 * SFile;
bool ismute=false;
bool stby=false;
int UIHook1(UI_MESSAGE* mes)
{
stby=false;
return 0;
}
int UIHook2(UI_MESSAGE* mes)
{
stby=true;
return 0;
}
int id;
int NewKey(int key, int r1 , int mode)
{
if (mode==KBD_SHORT_PRESS)
{
if (key==KEY_POWER)
{
ModifyKeyHook(NewKey,0);
ModifyUIHook(PHONE_IN_STBY_EVENT,UIHook2,0);
ModifyUIHook(UI_STANDBY_UNFOCUS_EVENT,UIHook1,0);
SUBPROC(elf_exit);
return(0);
}
if(isKeylocked()==0 && stby==true && ismute==false)
{
switch(key)
{
case 0x10:
SFile=(u16*)L"/KeySound/0.mp3";pl=true;break;
case 0x11:
SFile=(u16*)L"/KeySound/1.mp3";pl=true;break;
case 0x12:
SFile=(u16*)L"/KeySound/2.mp3";pl=true;break;
case 0x13:
SFile=(u16*)L"/KeySound/3.mp3";pl=true;break;
case 0x14:
SFile=(u16*)L"/KeySound/4.mp3";pl=true;break;
case 0x15:
SFile=(u16*)L"/KeySound/5.mp3";pl=true;break;
case 0x16:
SFile=(u16*)L"/KeySound/6.mp3";pl=true;break;
case 0x17:
SFile=(u16*)L"/KeySound/7.mp3";pl=true;break;
case 0x18:
SFile=(u16*)L"/KeySound/8.mp3";pl=true;break;
case 0x19:
SFile=(u16*)L"/KeySound/9.mp3";pl=true;break;
case 0x1A:
SFile=(u16*)L"/KeySound/z.mp3";pl=true;break;
case 0x1B:
SFile=(u16*)L"/KeySound/r.mp3";pl=true;break;
default:
pl=false;break;
}
if(pl)
{
Path=GetDir(1);
id=PlayFile(Path,SFile);
if(id)
{pl=false;return(1);}
Path=GetDir(0);
id=PlayFile(Path,SFile);
if(id)
{pl=false;return(1);}
Path=GetDir(9);
id=PlayFile(Path,SFile);
if(id)
{pl=false;return(1);}
Path=GetDir(8);
id=PlayFile(Path,SFile);
if(id)
{pl=false;return(1);}
id=PlayFile(PathMP3,SFile);
if(id)
{pl=false;return(1);}
}
}
}
if (mode==KBD_LONG_PRESS)
{
if (key==KEY_DIEZ)
{
if(ismute)
ismute=false;
else
ismute=true;
}
}
return(1);
}
int main(const u16 *exename, const u16 *filename)
{
PathMP3=(u16*)L"/card/MP3/";
ModifyUIHook(UI_STANDBY_UNFOCUS_EVENT,UIHook1,1);
ModifyUIHook(PHONE_IN_STBY_EVENT,UIHook2,1);
ModifyKeyHook(NewKey,1);
return(0);
}
--- Baigti citatą ---
KeyCode
--- Citata ---#include "..\\include\Lib_Clara.h"
#include "..\\include\Dir.h"
void elf_exit(void)
{
kill_data(&ELF_BEGIN, (void(*)(void*))mfree_adr());
}
u16 timer;
int nkey;
char s[28]="KeyCode (c) Deitro :)";
void onTimer (u16 * unk , void * data)
{
StatusIndication_ShowNotes(Str2ID(s,1,25));
delay(500);
}
int NewKey(int key, int r1 , int mode)
{
if (mode==KBD_SHORT_PRESS)
{
if (key==KEY_DIEZ)
{
StatusIndication_ShowNotes(0x6FFFFFFF);
ModifyKeyHook(NewKey,0);
SUBPROC(elf_exit);
return(0);
}
}
if (key==KEY_ESC)
return(-1);
s[9]=char(key/10+0x30);
s[10]=char(key%10+0x30);
nkey=key;
timer=Timer_Set(500,onTimer,0);
return(-1);
}
int main()
{
ModifyKeyHook(NewKey,1);
return 0;
}
--- Baigti citatą ---
HelloWord
--- Citata ---#include "..\\include\Lib_Clara.h"
#include "..\\include\Dir.h"
void elf_exit(void)
{
kill_data(&ELF_BEGIN, (void(*)(void*))mfree_adr());
}
u16 timer;
int lamp=0;
int n=10;
void onTimer (u16 * unk , void * data)
{
if(n--)
{
Timer_ReSet(&timer,500,onTimer,0);
SetLampLevel(lamp^=0x10);
}
else
{
StatusIndication_ShowNotes(0x6FFFFFFF);
SetLampLevel(0);
SUBPROC(elf_exit);
}
}
int main (void)
{
StatusIndication_ShowNotes(STR("Hello World!"));
timer=Timer_Set(500,onTimer,0);
return(0);
}
--- Baigti citatą ---
Manau pradžiai užteks. Bandykit ir išmoksit!!!
Denukas:
BookManager
--- Citata ---#include "..\\include\Lib_Clara.h"
#include "..\\include\Dir.h"
int onRootListChanged(void * r0, BOOK * bk);
void onMyBookClose(BOOK *);
void CloseMyBook(BOOK * Book, void *);
int CreateMenu(void * r0, BOOK * bk);
typedef struct
{
BOOK book;
char * filebuf;
void * oldOnKey;
LIST * session_list;
}MyBOOK;
typedef struct
{
BOOK * book;
UI_APP_SESSION * session;
int book_name;
}BOOK_ITEM;
typedef struct
{
UI_APP_SESSION * session;
LIST * book_list;
int session_name;
int book_in_session;
}SESSION_ITEM;
// äýôîėòíūå çíą÷åíč˙
int KeyPressMode=3;
int KeyActiv=0x00;
int KeyTerminate=0xff;
int Ignore_KeyLock=0;
int ItemMode=0;
MyBOOK * bman_book=0;
int isBookManager(BOOK * struc);
const PAGE_MSG bk_msglst[] @ "DYN_PAGE" =
{
BOOK_DESTROYED_EVENT_TAG,onRootListChanged,
0,0};
const PAGE_DESC bk = {"BookManagerBook",0,&bk_msglst[0]};
void elf_exit(void)
{
kill_data(&ELF_BEGIN, (void(*)(void*))mfree_adr());
}
//=====================================================================================
int isBookManager(BOOK * struc)
{
if (struc->onClose==(void*)onMyBookClose)
{
return(1);
}
else
{
return(0);
}
}
// âç˙òü çíą÷åíčå čç číč-ôąéėą
int GetParam(char * name)
{
u16 ws[50];
int sID=0;
MyBOOK * myBook = (MyBOOK *) FindBook(isBookManager);
if (myBook->filebuf)
{
char * param;
if (param=manifest_GetParam(myBook->filebuf,name,0))
{
str2wstr(ws,param);
sID=Str2ID(ws,0,SID_ANY_LEN);
mfree(param);
return(sID);
}
}
if(!sID)
{
str2wstr(ws,name);
sID=Str2ID(ws,0,wstrlen(ws));
}
return(sID);
}
// ïîėó÷čòü čì˙ ęąâū
int GetJavaName(BOOK * bk)
{
u16 ws[100];
TextID2wstr(Book_GetSession(bk)->name,ws,100);
if (!wstrncmp(ws,(u16*)L"Foreign app",11))
{
return(JavaSession_GetName());
}
return(0);
}
// ñîç乸ì ñïčñîê ñåññčé/êíčã
void CreateBookLst(MyBOOK * myBook)
{
int i,j,k,cnt;
BOOK * book;
UI_APP_SESSION * session;
SESSION_ITEM *si;
i=root_list_get_session_count();
cnt=0;
for (j=0;j<i;j++)
{
si=0;
session=root_list_get_session(j);
for (k=0;k<session->listbook->FirstFree;k++)
{
book=(BOOK*)ListElement_GetByIndex(session->listbook,k);
if( book->xguilist->guilist->FirstFree)
{
if ((!isBookManager(book))&&(!isVolumeControllerBook(book))&&(!isRightNowBook(book)))
{
if (!si)
{
char s[100];
u16 ws[100];
si=new SESSION_ITEM;
si->book_list=List_New();
TextID2wstr(session->name,ws,100);
si->session_name=GetParam(wstr2strn(s,ws,100));
si->session=session;
}
BOOK_ITEM * b = new BOOK_ITEM;
b->book=book;
b->session=session;
b->book_name=0x6fffffff;
if (!(b->book_name=GetJavaName(book)))
{
b->book_name=GetParam(book->xbook->name);
}
ListElement_Add(si->book_list,b);
}
}
}
if (si)
{
si->book_in_session=si->book_list->FirstFree;
ListElement_AddtoTop(myBook->session_list,si);
cnt++;
}
}
SetNumOfMenuItem(myBook->book.gui,cnt);
}
// ïšč óįčéñòâå êąêîé ėčįî êíčãč
int onRootListChanged(void * r0, BOOK * bk)
{
// åñėč ÃÓČ åñòü, òî óįčėč
if (bk->gui) GUI_Free((GUI*)bk->gui);
// ñîçäąėč ìåíž
CreateMenu(0,bk);
return(0);
};
int SubItem=0;
// óñòąíąâėčâąåì òåêñòū â ïóíêòąõ ìåíž
int onLBMessage(GUI_MESSAGE * msg)
{
// static const u16 *sss="jwefg " __DATE__ "sdjkfwe";
MyBOOK * myBook = (MyBOOK *) FindBook(isBookManager);
int item;
SESSION_ITEM * si;
switch(msg->msg)
{
// onCreateListItem
case 1:
item=GUIonMessage_GetCreatedItemIndex(msg);
si=(SESSION_ITEM *)ListElement_GetByIndex(myBook->session_list,item);
SetMenuItemText0(msg,TextCopyId(si->session_name));
SetMenuItemText2(msg,Str2ID (L"\nBookManager v2.1\nbuild 140108\nCopyright (c) 2007-2008\nHussein",0,100));
if (si->book_list->FirstFree>1)
{
List2lineSetAsSubitem(msg,0,si->book_in_session);
}
else
{
SetMenuItemText1(msg,TextCopyId((int)(((BOOK_ITEM*)(ListElement_GetByIndex(si->book_list,0)))->book_name)));
}
SubItem=0;
break;
// onCreateListSubItem
case 3:
item=GUIonMessage_GetCreatedSubItemParrentIndex(msg);
si=(SESSION_ITEM *)ListElement_GetByIndex(myBook->session_list,item);
BOOK_ITEM * bi =(BOOK_ITEM *) ListElement_GetByIndex(si->book_list,SubItem++);
List2lineSubitemAddText(msg,TextCopyId(bi->book_name));
break;
}
return(1);
};
// ïšč âūįîšå ïóíêòą
void onEnterPressed(BOOK * book,void * lt)
{
MyBOOK * myBook = (MyBOOK *) book;
SESSION_ITEM * si= (SESSION_ITEM*)ListElement_GetByIndex(myBook->session_list,GetFocusetListObjectItem(book->gui));
// ñòąâčì ôîêóñ íą âåšõížž êíčãó â ñåññčč
BookObj_SetFocus(((BOOK_ITEM*)(ListElement_GetByIndex(si->book_list,0)))->book,0);
CloseMyBook(book,0);
};
// ïšč íąęąòčč "Ñ"
void onDelPressed(BOOK * book,void * lt)
{
MyBOOK * myBook = (MyBOOK *) FindBook(isBookManager);
SESSION_ITEM * si= (SESSION_ITEM*)ListElement_GetByIndex(myBook->session_list,GetFocusetListObjectItem(book->gui));
BOOK *bk =(BOOK*)(((BOOK_ITEM*)(ListElement_GetByIndex(si->book_list,0)))->book);
if (bk)
{
if (GetJavaName(bk))
{
JavaSession_Manager(0x0E);
}
else
{
if (Find_StandbyBook()!=bk)
{
UI_Event_toSID(RETURN_TO_STANDBY_EVENT,bk->BookID);
}
}
}
};
// ïąò÷åíūé onKey îò ñâîåé ìåížõč...;)
void myOnKey(void *p, int i1, int i2, int i3, int i4)
{
void (*OldOnKey)(void *, int, int, int, int);
MyBOOK * myBook = (MyBOOK *) FindBook(isBookManager);
OldOnKey=(void(*)(void *,int,int,int,int))myBook->oldOnKey;
OldOnKey(p,i1,i2,i3,i4);
if ((i4==KBD_SHORT_RELEASE)||(i4==KBD_LONG_PRESS))
{
if (i1==KEY_DEL)
{
onDelPressed((BOOK*)myBook,0);
}
if (i1==KEY_DIEZ)
{
if (i4==KBD_SHORT_RELEASE)
{
if (Find_StandbyBook()!=0)Show(Find_StandbyBook());
}
else
{
UI_Event(RETURN_TO_STANDBY_EVENT);
}
CloseMyBook((BOOK*)myBook,0);
}
if (myBook->filebuf)
{
char key[20];
char * param;
sprintf(key,i4==3?"[S_KEY%d]":"[L_KEY%d]",i1-0x10);
if (param=manifest_GetParam(myBook->filebuf,key,0))
{
u16 par[256];
str2wstr(par,param);
StartAPP(par);
mfree(param);
if (Find_StandbyBook()!=0)Show(Find_StandbyBook());
CloseMyBook((BOOK*)myBook,0);
}
}
}
};
// ñîçäąíčå ìåíž
GUI_LIST * CreateGuiList(void * r0, BOOK * bk)
{
int p[2];
GUI_LIST * lo;
lo =CreateListObject(bk,0);
bk->gui=(GUI*)lo;
p[0]=Str2ID (L"Heap : ",0,7);
p[1]=int2strID (GetFreeBytesOnHeap());
GuiObject_SetTitleText(lo,Str2ID(p,5,2));
CreateBookLst((MyBOOK*)bk);
OneOfMany_SetonMessage((GUI_ONEOFMANY*)lo,(void*)onLBMessage);
SetCursorToItem(lo,0);
SetMenuItemStyle(lo,ItemMode);
AddMSGHook(lo,ACTION_BACK, CloseMyBook);
AddMSGHook(lo,ACTION_SELECT1,onEnterPressed);
((MyBOOK*)bk)->oldOnKey=(void*)DISP_OBJ_GetOnKey(lo->DISP_OBJ);
DISP_DESC_SetOnKey( DISP_OBJ_GetDESC (lo->DISP_OBJ), (DISP_OBJ_ONKEY_METHOD)myOnKey );
return(lo);
};
// ñîçäąíčå č îòîįšąęåíčå ìåíž
int CreateMenu(void * r0, BOOK * bk)
{
bk->gui=(GUI*)CreateGuiList(0,bk);
ShowWindow(bk->gui);
return(0);
}
int h2i(char * h)
{
char c;
int res=0;
while((*h++)!='x');
do
{
c=*h++;
if (c>0x60) c-=0x20; else c-=0x30;
if (c>9) c-=7;
res<<=4;
res|=c;
}
while(*h!=';');
return(res);
}
// ïšč çąêšūòčč êíčãč
void onMyBookClose(BOOK * book)
{
MyBOOK * myBook=(MyBOOK*)book;
if (myBook->filebuf)
{
mfree(myBook->filebuf);
myBook->filebuf=0;
}
LIST * lst = myBook->session_list;
SESSION_ITEM * si;
while (lst->FirstFree)
{
int i=0;
si=(SESSION_ITEM *)ListElement_Remove(lst,0);
while (i<si->book_list->FirstFree)
{
BOOK_ITEM * bi=(BOOK_ITEM *)ListElement_GetByIndex(si->book_list,i++);
TextFree(bi->book_name);
delete(bi);
}
TextFree(si->session_name);
List_Free(si->book_list);
delete(si);
}
List_Free(myBook->session_list);
}
void CloseMyBook(BOOK * Book, void *)
{
FreeBook(Book);
bman_book=0;
};
// ñîįñòâåííî ñòąšò
__root int CreateBookList(void)
{
int file;
// u16 f[100];
if (!bman_book)
{
MyBOOK * myBook =bman_book= (MyBOOK *)malloc(sizeof(MyBOOK));
memset(myBook,0,sizeof(MyBOOK));
CreateBook(myBook,onMyBookClose,&bk,"BookManager",-1,0);
//
myBook->session_list=List_New();
myBook->filebuf=0;
// îòêšūâąåì äė˙ ÷òåíč˙ bookman.ini
if ((file=_fopen(GetDir(DIR_INI),(u16*)L"bookman.ini",0x001,0x180,0))>=0)
{
FSTAT fstat;
// îïšåäåė˙åì åãî šąçìåš
if (isFileExist(GetDir(DIR_INI),(u16*)L"bookman.ini",&fstat)==0)
{
// âūäåė˙åì ïąì˙òü
myBook->filebuf=(char*)malloc(fstat.fsize+1);
// ÷òčòąåì åãî
fread(file,(char*)myBook->filebuf,fstat.fsize);
}
// çąêšūâąåì
fclose(file);
}
CreateMenu(0,(BOOK*)myBook);
}
return(0);
}
int NewKey(int key, int r1 , int mode)
{
if (mode==KeyPressMode)
{
if (key==KeyTerminate)
{
if ((isKeylocked())&&(!Ignore_KeyLock)) return(0);
ModifyKeyHook(NewKey,0);
SUBPROC(elf_exit);
return(0);
}
if (key==KeyActiv)
{
if ((isKeylocked())&&(!Ignore_KeyLock)) return(0);
BOOK * bk;
if (!(bk=FindBook(isBookManager)))
{
CreateBookList();
return(-1);
}
else
{
CloseMyBook(bk,0);
return(0);
}
}
}
return(0);
}
// įåšåì çíą÷åíč˙ čç číč-ôąéėą
void get_ini_key(void)
{
int file;
char * buf;
if ((file=_fopen(GetDir(DIR_INI),(u16*)L"bookman.ini",0x001,0x180,0))>=0)
{
FSTAT fstat;
if (isFileExist(GetDir(DIR_INI),(u16*)L"bookman.ini",&fstat)==0)
{
buf=(char*)malloc(fstat.fsize+1);
fread(file,buf,fstat.fsize);
char * param;
if (param=manifest_GetParam(buf,"[START_KEY]",0))
{
KeyActiv=h2i(param);
mfree(param);
}
if (param=manifest_GetParam(buf,"[KEY_MODE]",0))
{
KeyPressMode=h2i(param);
mfree(param);
}
if (param=manifest_GetParam(buf,"[TERMINATE_KEY]",0))
{
KeyTerminate=h2i(param);
mfree(param);
}
if (param=manifest_GetParam(buf,"[IGNORE_KEYLOCK]",0))
{
Ignore_KeyLock=h2i(param);
mfree(param);
}
if (param=manifest_GetParam(buf,"[EXT_MODE]",0))
{
if(h2i(param)) ItemMode=3;
mfree(param);
}
mfree(buf);
}
fclose(file);
}
}
int main (void)
{
get_ini_key();
ModifyKeyHook(NewKey,1);
return(0);
}
--- Baigti citatą ---
smiriukas:
Denukas eilini karta neblogai padirbejo.. :) Na ka gal kada reiks isbandyt.. Laukiam mes jusu forumieciai sukurtu elfu.. bus tikrai idomu paziureti ka sukure forumieciai.. ;D
bugatis:
Butu n ejuokai paciam kazka parasyt... :D asmeniskas as bandysiu kokio nors jau sukurto elfo funkcijas patobulint, padaryt "update" ;D
afaustas:
Gerai padirbejote, Denuk! Uz tai jums duodu +. Man reikes pabandyti kurti, taip pat mokytis C++.