Pokażę Wam, jak dodać zabezpieczenie przed kilkukrotnym uruchomieniem jednego elfa.
Dodamy więc tą opcję do HelloWorld (oczyszczony przeze mnie ze zbędnego stuffu)
Otwieramy więc main.c:
#include "..\includeLib_Clara.h" #include "..\includeDir.h" BOOK * HWBook; int TerminateElf(void * ,BOOK* book) { FreeBook(book); return(1); } typedef struct { BOOK * book; }MSG; int ShowAuthorInfo(void *mess ,BOOK* book) { MSG * msg = (MSG*)mess; MessageBox(0x6fFFFFFF,STR("Hello Wordl!nnExample elf.."),0, 1 ,5000,msg->book); return(1); } const PAGE_MSG HW_PageEvents[]@ "DYN_PAGE" ={ ELF_TERMINATE_EVENT , TerminateElf, ELF_SHOW_INFO_EVENT , ShowAuthorInfo, 0,0 }; PAGE_DESC base_page ={"HW_BasePage",0,HW_PageEvents}; void elf_exit(void) { kill_data(&ELF_BEGIN, (void(*)(void*))mfree_adr()); } void onCloseHWBook(BOOK * book) { if (book) { StatusIndication_ShowNotes(0x6FFFFFFF); SUBPROC(elf_exit); } } BOOK * CreateHWBook() { HWBook= new BOOK; CreateBook(HWBook,onCloseHWBook,&base_page,"Example",-1,0); return(HWBook); } int main (void) { CreateHWBook(); StatusIndication_ShowNotes(STR("Hello World!")); return(0); }
Przede wszystkim interesuje nas tutaj to:
#include "..\includeLib_Clara.h" #include "..\includeDir.h" BOOK * HWBook; int TerminateElf(void * ,BOOK* book) { FreeBook(book); return(1); } typedef struct { BOOK * book; }MSG; int ShowAuthorInfo(void *mess ,BOOK* book) { MSG * msg = (MSG*)mess; MessageBox(0x6fFFFFFF,STR("Hello Wordl!nnExample elf.."),0, 1 ,5000,msg->book); return(1); } const PAGE_MSG HW_PageEvents[]@ "DYN_PAGE" ={ ELF_TERMINATE_EVENT , TerminateElf, ELF_SHOW_INFO_EVENT , ShowAuthorInfo, 0,0 }; PAGE_DESC base_page ={"HW_BasePage",0,HW_PageEvents}; void elf_exit(void) { kill_data(&ELF_BEGIN, (void(*)(void*))mfree_adr()); } void onCloseHWBook(BOOK * book) { if (book) { StatusIndication_ShowNotes(0x6FFFFFFF); SUBPROC(elf_exit); } } BOOK * CreateHWBook() { HWBook= new BOOK; CreateBook(HWBook,onCloseHWBook,&base_page,"Example",-1,0); return(HWBook); } int isRunned(BOOK * book) { if(!strcmp(book->xbook->name,"Example")) return 1; // nazwa z Bookmanagera return 0; } int main (void) { if (FindBook(isRunned)) //Gdy zakładka "Example" zostanie wykryta... { MessageBox(0x6fFFFFFF,STR("Elf HelloWorld jest juz uruchomiony!"),0, 1 ,5000,0); // ...wyświetl okienko z info. } else { // Jeśli jednak jest inaczej... CreateHWBook(); //...utwórz zakładkę "Example" StatusIndication_ShowNotes(STR("Hello World!")); //... i pokaż notatkę na ekranie. } return(0); }