diff options
| author | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-06-28 16:38:35 +0000 |
|---|---|---|
| committer | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-06-28 16:38:35 +0000 |
| commit | 2d776fcd61be168e1ff0ff2e4a5e71835e7cea19 (patch) | |
| tree | 7cf274897bf540d5332d446f583ffd066e4e2e1d /src/modules.c | |
| parent | b877ae23ac5d380ab3aa48d7724045cf4883b186 (diff) | |
- prekopanie adresarovej struktury, prva cast
git-svn-id: http://opensvn.csie.org/tuxanci_ng@77 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e
Diffstat (limited to 'src/modules.c')
| -rwxr-xr-x | src/modules.c | 223 |
1 files changed, 0 insertions, 223 deletions
diff --git a/src/modules.c b/src/modules.c deleted file mode 100755 index 34224a4..0000000 --- a/src/modules.c +++ /dev/null @@ -1,223 +0,0 @@ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <dlfcn.h> -#include <assert.h> - -#include "main.h" -#include "configFile.h" -#include "list.h" -#include "path.h" -#include "tux.h" -#include "shot.h" -#include "modules.h" -#include "tux.h" -#include "arena.h" -#include "proto.h" - -#ifndef PUBLIC_SERVER -#include "interface.h" -#include "image.h" -#include "layer.h" -#endif - -int pokus(char *s) -{ - printf("s = %s\n", s); - return 0; -} - -static export_fce_t export_fce = - { -#ifndef PUBLIC_SERVER - .fce_addLayer = addLayer, - .fce_getImage = getImage, -#endif - .fce_getValue = getValue, - .fce_getNetTypeGame = getNetTypeGame, - .fce_getTuxProportion = getTuxProportion, - .fce_setTuxProportion = setTuxProportion, - //.fce_getTuxID = getTuxID, - .fce_actionTux = actionTux, - - .fce_getMyTime = getMyTime, - - .fce_getCurrentArena = getCurrentArena, - .fce_conflictSpace = conflictSpace, - .fce_isFreeSpace = isFreeSpace, - .fce_findFreeSpace = findFreeSpace, - .fce_proto_send_newtux_server = proto_send_newtux_server, - .fce_proto_send_shot_server = proto_send_shot_server, - .fce_destroyShot = destroyShot, - .fce_boundBombBall = boundBombBall, - .fce_transformOnlyLasser = transformOnlyLasser - }; - -static list_t *listModule; - -static void* getFce(module_t *p, char *s) -{ - void *ret; - char *error; - - assert( p != NULL ); - assert( s != NULL ); - - ret = dlsym(p->image, s); - - if( ( error = dlerror() ) != NULL) - { - fprintf (stderr, "error = %s\n", error); - return NULL; - } - - return (void *)ret; -} - -static module_t* newModule(char *name) -{ - module_t *ret; - - assert( name != NULL ); - - ret = malloc( sizeof(module_t) ); - - ret->image = dlopen (name, RTLD_LAZY); - - if(!ret->image) - { - fputs (dlerror(), stderr); - free(ret); - return NULL; - } - - ret->file = strdup(name); - - ret->fce_init = getFce(ret, "init"); -#ifndef PUBLIC_SERVER - ret->fce_draw = getFce(ret, "draw"); -#endif - ret->fce_event = getFce(ret, "event"); - ret->fce_destroy = getFce(ret, "destroy"); - ret->fce_isConflict = getFce(ret, "isConflict"); - ret->fce_cmd = getFce(ret, "cmd"); - - printf("load module.. (%s)\n", name); - - if( ret->fce_init(&export_fce) != 0 ) - { - fprintf(stderr, "init module failed !\n"); - - dlclose(ret->image); - free(ret->file); - free(ret); - return NULL; - } - - return ret; -} - -static int destroyModule(module_t *p) -{ - assert( p != NULL ); - - p->fce_destroy(); - - free(p->file); - dlclose(p->image); - free(p); - - printf("destroy module..\n"); - - return 0; -} - -void initModule() -{ - listModule = newList(); -} - -int loadModule(char *name) -{ - char str[STR_PATH_SIZE]; - module_t *module; - - sprintf(str, PATH_MODULES "%s", name); - accessExistFile(str); - - module = newModule(str); - - if( module == NULL ) - { - fprintf(stderr, "load module %s failed !\n", name); - return -1; - } - - addList(listModule, module); - - return 0; -} - -void cmdModule(char *s) -{ - int i; - - for( i = 0 ; i < listModule->count ; i++ ) - { - module_t *this; - this = (module_t *)listModule->list[i]; - this->fce_cmd(s); - } -} - -#ifndef PUBLIC_SERVER - -void drawModule(int x, int y, int w, int h) -{ - int i; - - for( i = 0 ; i < listModule->count ; i++ ) - { - module_t *this; - this = (module_t *)listModule->list[i]; - this->fce_draw(x, y, w, h); - } -} - -#endif - -void eventModule() -{ - int i; - - for( i = 0 ; i < listModule->count ; i++ ) - { - module_t *this; - this = (module_t *)listModule->list[i]; - this->fce_event(); - } -} - -int isConflictModule(int x, int y, int w, int h) -{ - int i; - - for( i = 0 ; i < listModule->count ; i++ ) - { - module_t *this; - this = (module_t *)listModule->list[i]; - - if( this->fce_isConflict(x, y, w, h) == 1 ) - { - return 1; - } - } - - return 0; -} - -void quitModule() -{ - destroyListItem(listModule, destroyModule); -} |