00001 00002 00007 #include <malloc.h> 00008 #include <string.h> 00009 #include <stdio.h> 00010 00011 #include "libmgk.h" 00012 00013 typedef struct __sdef { 00014 struct __sdef *next; 00015 mgk_script fn; 00016 char name[1]; 00017 } sdef; 00018 00019 static sdef *slist = NULL; 00020 00021 void 00022 mgk_register_script(mgk_script fn, char *name) 00023 { 00024 sdef *sp; 00025 for (sp = slist; sp; sp = sp->next) { 00026 if (strcmp(sp->name, name) == 0) { 00027 sp->fn = fn; 00028 return; 00029 } 00030 } 00031 sp = malloc(sizeof(sdef) + strlen(name) + 1); 00032 if (!sp) { 00033 return; 00034 } 00035 sp->next = slist; 00036 slist = sp; 00037 sp->fn = fn; 00038 strcpy(sp->name, name); 00039 } 00040 00041 mgk_script 00042 __mgk_lookup_script(char *name) 00043 { 00044 sdef *sp; 00045 for (sp = slist; sp; sp = sp->next) { 00046 if (strcmp(sp->name, name) == 0) { 00047 return (sp->fn); 00048 } 00049 } 00050 return (NULL); 00051 } 00052 00053 char * 00054 __mgk_script_name(mgk_script fn) 00055 { 00056 static char name[100]; 00057 sdef *sp; 00058 for (sp = slist; sp; sp = sp->next) { 00059 if (sp->fn == fn) { 00060 return (sp->name); 00061 } 00062 } 00063 sprintf(name, "<script #%p>", sp->fn); 00064 return (name); 00065 }