mobiles.lt forumas

Telefonų modeliai => Sony Ericsson => Darbas su programine įranga => Temą pradėjo: Denukas Sausio 31, 2008, 18:23

Antraštė: ***ELF'ų kurimas***
Parašė: Denukas Sausio 31, 2008, 18:23
ELF'ų kurimas

Paprastų 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*** (http://www.mobiles.lt/forum/index.php/topic,6641.0.html).

Instrukcija


Kaip minėjau visas programavimas vyksta su  "Embedded Workbench 4.0 Evaluation" (http://mobilefree.ru/mydownloads/showfile.php?lid=567) programa, tad ją parsisiunčiame. Parsisiuntę, išskleidžiame ją ir jos aplanke sukuriame kitą aplanką "SE". Tada parsisiunčiame iš iš čia (http://perk11.info/svn/SE/) 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 į šį:

(http://i187.photobucket.com/albums/x241/denukas/elfprog/1.jpg)
Du kartus spragtelėkite su pele ant main.c, jums atidarys programavimo langą.

(http://i187.photobucket.com/albums/x241/denukas/elfprog/3.jpg)
Prieš pradedant programuoti pirmiausią atlikite šį veiksmą!
Project -> Edit Configurations... -> Release -> OK

(http://i187.photobucket.com/albums/x241/denukas/elfprog/4.jpg)
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.

(http://i187.photobucket.com/albums/x241/denukas/elfprog/2.jpg)
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());
}
Mėlynai apibrauktas kodas yra jusų programuojamo elfo komadu kodas: taip pat kiekvienas elfas turi turėti pagrindine funkciją:
Citata
int main (void)

Sėkmės, kuriant naujus ir kietus elfus!!!
Jeigu sudomino, labai daug pamokų, naudojant sudėtingesnes funkcijas rasite čia. (http://mobilefree.ru/newbb_plus/viewforum.php?forum=27)


Elfų funkcijų kodai:


Citata
StatusIndication_ShowNotes(STR("čia rasomas tekstas, kuris bus rodomas ant ekrano"));

Citata
StatusIndication_ShowNotes(0x6FFFFFFF); - išvalo ekraną.

Citata
SetLampLevel(skaičius nuo 0 iki 100, tai yra blykstės švietimo stiprumo %);

Citata
SUBPROC(elf_exit); - išjungia elfą,

Citata
int NewKey(int key, int r1 , int mode)
{
 if (key==mugtuko kodas)
 {
   if(mode==paspaudimo kodas)
   {
   }   
 }


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);
}

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);
}

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);
}

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;
}

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);
}



Manau pradžiai užteks. Bandykit ir išmoksit!!!
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: Denukas Sausio 31, 2008, 18:23
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);
}
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: smiriukas Sausio 31, 2008, 19:34
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
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: bugatis Sausio 31, 2008, 22:21
Butu n ejuokai paciam kazka parasyt... :D asmeniskas as bandysiu kokio nors jau sukurto elfo funkcijas patobulint, padaryt "update" ;D
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: afaustas Vasario 01, 2008, 15:53
Gerai padirbejote, Denuk! Uz tai jums duodu +. Man reikes pabandyti kurti, taip pat mokytis C++.
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: bronius69 Vasario 01, 2008, 17:58
nelabai suprantu kaip veikia elfai,tai ir ant siemensu buvo parasyta viskas su cc++?
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: Denukas Vasario 01, 2008, 18:37
nelabai suprantu kaip veikia elfai,tai ir ant siemensu buvo parasyta viskas su cc++?
Jop. Siemens elfai irgi parašyti su šita pačia programa, tik naudojant jiems pritaikytą library.
P.S. Atsidarykite Lib_Clara.h failą ten surašytos visos galimos funkcijos.
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: z520i Vasario 01, 2008, 20:45
man elfo neissaugo... :'(
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: Denukas Vasario 01, 2008, 21:19
man elfo neissaugo... :'(
Turbut kazkur padarei klaida , paziurek apacioje programavimo lanngo atsiranda laukelis, kuriame uzrasomi komentarai. Jeigu padarai klaidu ten uzraso ir salia eilutes, kurioje yra klaida, atsiranda zenkliukas.
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: z520i Vasario 02, 2008, 10:21
O kaip atsidaryt elfa? As noreciau paredaguot?
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: Denukas Vasario 02, 2008, 11:08
O kaip atsidaryt elfa? As noreciau paredaguot?
Pats nežinau, tie kas nori, kad jų elfus tobulintų duoda source jų.
Antraštė: ***ELF'ų kurimas***
Parašė: Eimantaster Rugpjūčio 24, 2008, 15:39
Citata
O kaip atsidaryt elfa? As noreciau paredaguot?

pabandyk googlint su užklausa "[.elf extension] to [source file extension] converter" ar pan, buvau radęs tokiu būdu SA:MP skriptams
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: Bandytojas Rugpjūčio 01, 2010, 12:34
Sveiki visi, jei ši tema dar "nemirus" tai gal galėtumet kasnors atnaujinti nuorodas, nes turiu tik programa o tuos kitus failus tai ne visus.
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: smiriukas Rugpjūčio 01, 2010, 14:03
Sveikas, na tema kaip ir mirus. :)
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: Bandytojas Rugpjūčio 02, 2010, 13:45
O tu nezinai kokie failai turetu buti tame se_elf aplankale? Arba gal siaip zinai informacijos kaip tuoj elfus kurt?
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: smiriukas Rugpjūčio 02, 2010, 14:07
Na aš pats, tai ne. Bet su Denuku susirašau. Galėsiu užklausti.
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: Bandytojas Rugpjūčio 03, 2010, 13:44
Butu labai gerai jei uzklaustum :)
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: smiriukas Rugpjūčio 03, 2010, 16:32
Sutarta, paprašysiu, kad jis apsireikštų šioje temoje. :)
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: Denukas Rugpjūčio 04, 2010, 21:34
@Bandytojas
Mečiau aš jau telefonų modingą. Gal kada ir grįšiu paprogramint elfų, kai atsiras elfpakas ant se k850.
Viskas ko tik gali prireikt elfų kūrimui slepiasi vat čia. (http://mobilefree.ru/newbb_plus/viewforum.php?forum=27) Ten rasi visus aprašymus, kaip ką padaryt, kas jau naudojama elfuose, tik gaila rusų kalba, pats verčiaus su google translator (jei nemoki versk į en, nes išvertus į lt nieko nesuprasi.).
Ryt poryt, kai turėsiu priėjimą prie senojo pc, pabandysiu surast tuos failus ir atnaujint nuorodas, bet tikrai galima rast ir tam forume, kurio linką katik daviau.
Įrašyta: Rugpjūtis 03, 2010, 20:58
Nu va truputį pakoregavau tutorialą ir atnaujinau linkus. Sėkmės kuryboje.
Antraštė: Ats.: ***ELF'ų kurimas***
Parašė: Bandytojas Rugpjūčio 19, 2010, 12:40
Labai dekui :)