externals.C

Go to the documentation of this file.
00001 /* file externals.c    */
00002 
00003 #define MODULE_EXTERNAL 1
00004 
00005 #include "animate.h"
00006 #include "callall.h"
00007 
00008 static long ExportScript(char *name, char *library);
00009 
00010 void DeleteEffect(object *op){
00011  UnloadEffectLibrary(op);
00012  if(op->effect != NULL)X__Free(op->effect);
00013  op->effect=NULL;
00014 }
00015 
00016 void AddEffect(object *op, HWND parent){
00017  long l;
00018  char tname[256];
00019  l=strlen(gszDLLfile);
00020  strcpy((gszDLLfile+l-3),"efx");
00021  if(SelectSfxFileName(0,gszDLLfile,gszDLLdir,IDX_MISC_OPENEFFECT,
00022    "(*.EFX)|*.efx|",parent) == TRUE){
00023    HMODULE hLib;
00024    FARPROC fpFun;
00025    long id,result=0;
00026    X__MEMORY_MANAGER *Evs;
00027    char *(*fpFun1)(char *, HWND, long, char *, X__MEMORY_MANAGER *);
00028    Evs=&EviMemoryManager;
00029    l=strlen(gszDLLfile);
00030    strcpy((gszDLLfile+l-3),"dll");
00031    strcpy(tname,gszDLLfile);
00032    HideWhiteSpaces(tname);
00033    if((hLib=LoadEffectLibrary(tname,op)) != NULL){
00034      if((fpFun=GetProcAddress(hLib,"_SetExternalParameters")) != NULL){
00035        fpFun1 = (void *)fpFun;
00036        op->effect=(*fpFun1)(op->effect,parent,(long)ruler,tname,Evs);
00037      }
00038      else SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00039      if(op->effect == NULL)DeleteEffect(op);
00040    }
00041    else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00042  }
00043  return;
00044 }
00045 
00046 void EditActorEffect(object *op, HWND parent){
00047  HMODULE hLib;
00048  FARPROC fpFun;
00049  long l,id,result=0;
00050  X__MEMORY_MANAGER *Evs;
00051  char *(*fpFun1)(char *, HWND, long, char *, X__MEMORY_MANAGER *);
00052  Evs=&EviMemoryManager;
00053  if(op->effect == NULL){
00054    SendPrgmQuery(IDQ_NOEFFECT1,3);
00055    return;
00056  }
00057  if((hLib=op->hEffect) != NULL){
00058    if((fpFun=GetProcAddress(hLib,"_SetExternalParameters")) != NULL){
00059      fpFun1 = (void *)fpFun;
00060      op->effect=(*fpFun1)(op->effect,parent,(long)ruler,op->effectname,Evs);
00061    }
00062    else SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00063    if(op->effect == NULL)DeleteEffect(op); // hopefully never
00064  }
00065  else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00066  return;
00067 }
00068 
00069 HMODULE LoadEffectLibrary(char *name, object *op){ /*no spaces in name */
00070  HMODULE hLib;
00071  node *Np;
00072  object *Op;
00073  char lname[256];
00074  if(op->hEffect != NULL){
00075    return op->hEffect;
00076  }
00077  if((Np=FirstNp) != NULL)while(Np != NULL){
00078   if((Op=Np->fobj) != NULL)while(Op != NULL){
00079     if(Op->hEffect != NULL){
00080       if(stricmp(name,Op->effectname) == 0){
00081         op->hEffect=Op->hEffect;
00082         strcpy(op->effectname,Op->effectname);
00083         return op->hEffect;
00084       }
00085     }
00086     Op=Op->next;
00087   }
00088   Np=Np->next;
00089  }
00090  strcpy(lname,name);
00091  RestoreWhiteSpaces(lname);
00092  hLib=LoadLibrary(lname);
00093  if(hLib == NULL){ /* try the default effects directory */
00094    char *sfname,tfname[256];
00095    sfname=short_form(lname);
00096    strcpy(tfname,gszHomeDir); strcat(tfname,"effects\\");
00097    strcat(tfname,sfname);
00098    hLib=LoadLibrary(tfname);
00099  }
00100  if(hLib != NULL){
00101    op->hEffect=hLib;
00102    strcpy(op->effectname,name);
00103  }
00104  else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00105  return hLib;
00106 }
00107 
00108 void UnloadEffectLibrary(object *op){
00109  node *Np;
00110  object *Op;
00111  int idcount=0;
00112  if(op->hEffect == NULL)return;
00113  if((Np=FirstNp) != NULL)while(Np != NULL){
00114   if((Op=Np->fobj) != NULL)while(Op != NULL){
00115     if(Op != op && Op->hEffect == op->hEffect)idcount++;
00116     Op=Op->next;
00117   }
00118   Np=Np->next;
00119  }
00120  if(idcount > 0){
00121    op->hEffect=NULL;
00122    op->effectname[0]='\0';
00123    return;
00124  }
00125  FreeLibrary(op->hEffect);
00126  op->hEffect=NULL;
00127  op->effectname[0]='\0';
00128 }
00129 
00130 BOOL PrintImageFile(HWND hwnd){
00131  BOOL status=FALSE;
00132  HMODULE hLib;
00133  FARPROC fpFun;
00134  char lname[256];
00135  BOOL (*fpFun1)(HWND, char *);
00136  if(SelectSfxFileName(0,gszIMGfile,gszIMGdir,IDX_MISC_IMAGEFILE,
00137    "(*.GIF)|*.gif|(*.TGA)|*.tga|(*.CEL)|*.cel|(*.BMP)|*.bmp|",ghwnd_main) == FALSE)
00138    return FALSE;
00139  strcpy(lname,gszHomeDir); strcat(lname,"eprint.dll");
00140  if((hLib=LoadLibrary(lname)) != NULL){
00141    if((fpFun=GetProcAddress(hLib,"_PrintBitmap")) != NULL){
00142      fpFun1 = (void *)fpFun;
00143      EnableToolPannels(ALL_PANNELS,FALSE);
00144      status=(*fpFun1)(hwnd,gszIMGfile);
00145      EnableToolPannels(ALL_PANNELS,TRUE);
00146    }
00147    else SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00148    FreeLibrary(hLib);
00149  }
00150  else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00151  return status;
00152 }
00153 
00154 void EditImageProcess(HWND parent,XIP *Ip){
00155  HMODULE hLib;
00156  FARPROC fpFun;
00157  X__MEMORY_MANAGER *Evs;
00158  char name[256],nname[256];
00159  char *(*fpFun1)(char *, HWND, long, char *, X__MEMORY_MANAGER *);
00160  Evs=&EviMemoryManager;
00161  if(Ip->p == NULL){
00162    SendPrgmQuery(IDQ_NOPARAMETERS,3);
00163    return;
00164  }
00165  sscanf(Ip->p,"%s",name);
00166  strcpy(nname,name);
00167  RestoreWhiteSpaces(nname);
00168  hLib=LoadLibrary(nname);
00169  if(hLib == NULL){ /* try the default post process directory */
00170    char *sfname,tfname[256];
00171    sfname=short_form(nname);
00172    strcpy(tfname,gszHomeDir); strcat(tfname,"postprocess\\");
00173    strcat(tfname,sfname);
00174    hLib=LoadLibrary(tfname);
00175  }
00176  if(hLib != NULL){
00177    if((fpFun=GetProcAddress(hLib,"_SetExternalParameters")) != NULL){
00178      fpFun1 = (void *)fpFun;
00179      Ip->p=(*fpFun1)(Ip->p,parent,(long)ruler,name,Evs);
00180    }
00181    else SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00182    FreeLibrary(hLib);
00183  }
00184  else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00185  if(Ip->p == NULL)DeleteImageProcess(Ip);
00186  return;
00187 }
00188 
00189 char *EditObjectImageProcess(HWND parent, char *p){
00190  HMODULE hLib;
00191  FARPROC fpFun;
00192  X__MEMORY_MANAGER *Evs;
00193  char nname[256],name[256];
00194  char *(*fpFun1)(char *, HWND, long, char *, X__MEMORY_MANAGER *);
00195  long l;
00196  Evs=&EviMemoryManager;
00197  if(p == NULL){
00198    l=strlen(gszXIPfile);
00199    strcpy((gszXIPfile+l-3),"xfx");
00200    if(SelectSfxFileName(0,gszXIPfile,gszXIPdir,IDX_MISC_XIP,
00201      "(*.XFX)|*.xfx|",parent) != TRUE)return p;
00202    l=strlen(gszXIPfile);
00203    strcpy((gszXIPfile+l-3),"dll");
00204    strcpy(name,gszXIPfile);
00205    strcpy(nname,name);
00206    HideWhiteSpaces(name);
00207  }
00208  else{
00209    sscanf(p,"%s",name);
00210    strcpy(nname,name);
00211    RestoreWhiteSpaces(nname);
00212  }
00213  RestoreWhiteSpaces(nname);
00214  hLib=LoadLibrary(nname);
00215  if(hLib == NULL){ /* try the default post process directory */
00216    char *sfname,tfname[256];
00217    sfname=short_form(nname);
00218    strcpy(tfname,gszHomeDir);  strcat(tfname,"postprocess\\");
00219    strcat(tfname,sfname);
00220    hLib=LoadLibrary(tfname);
00221  }
00222  if(hLib != NULL){
00223    if((fpFun=GetProcAddress(hLib,"_SetExternalParameters")) != NULL){
00224      fpFun1 = (void *)fpFun;
00225      p=(*fpFun1)(p,parent,(long)ruler,name,Evs);
00226    }
00227    else SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00228    FreeLibrary(hLib);
00229  }
00230  else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00231  return p;
00232 }
00233 
00234 void DeleteImageProcess(XIP *Ip){
00235  XIP *oldIp;
00236  if(Ip == NULL)return;
00237  EDIT_ACTION=YES;
00238  if(Ip->last != NULL)Ip->last->next=Ip->next;
00239  if(Ip->next != NULL)Ip->next->last=Ip->last;
00240  if(Ip == MainIp )MainIp  = Ip->last;
00241  if(Ip == FirstIp)FirstIp = Ip->next;
00242  if(Ip->p != NULL)X__Free(Ip->p);
00243  NimageProcesses--;
00244  X__Free(Ip);
00245 }
00246 
00247 XIP *CreateImageProcess(HWND parent){
00248  long l;
00249  XIP *temp;
00250  char ftemp[256];
00251  if((temp = (XIP *)X__Malloc(sizeof(XIP))) == NULL){
00252    SendPrgmQuery(IDQ_NOMEM1,0);
00253    return NULL;
00254  }
00255  if(MainIp == NULL)FirstIp=temp;
00256  else              MainIp->next=temp;
00257  temp->last=MainIp;
00258  temp->next=NULL;
00259  MainIp = temp;
00260  MainIp->p=NULL;
00261  NimageProcesses++;
00262  if(parent == NULL)return temp; /* used for loading from file  */
00263  l=strlen(gszXIPfile);
00264  strcpy((gszXIPfile+l-3),"xfx");
00265  if(SelectSfxFileName(0,gszXIPfile,gszXIPdir,IDX_MISC_XIP,
00266    "(*.XFX)|*.xfx|",parent) == TRUE){
00267    HMODULE hLib;
00268    FARPROC fpFun;
00269    X__MEMORY_MANAGER *Evs;
00270    char *(*fpFun1)(char *, HWND, long, char *, X__MEMORY_MANAGER *);
00271    Evs=&EviMemoryManager;
00272    l=strlen(gszXIPfile);
00273    strcpy((gszXIPfile+l-3),"dll");
00274    strcpy(ftemp,gszXIPfile);
00275    HideWhiteSpaces(ftemp);
00276    if((hLib=LoadLibrary(gszXIPfile)) != NULL){
00277      if((fpFun=GetProcAddress(hLib,"_SetExternalParameters")) != NULL){
00278        fpFun1 = (void *)fpFun;
00279        MainIp->p=(*fpFun1)(MainIp->p,parent,(long)ruler,ftemp,Evs);
00280      }
00281      else SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00282      FreeLibrary(hLib);
00283    }
00284    else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00285  }
00286  if(MainIp->p == NULL){
00287    DeleteImageProcess(MainIp);
00288    return NULL;
00289  }
00290  EDIT_ACTION=YES;
00291  return temp;
00292 }
00293 
00294 void StartExternGL(void){
00295  static BOOL in_use=FALSE;
00296  BOOL found=FALSE;
00297  DWORD version;
00298  int result;
00299  char modulename[255];
00300  HWND hWnd;
00301  return;   
00302  version=GetVersion();
00303  if((version & 0x80000000) == 0x80000000){
00304    if(LOBYTE(LOWORD(version)) < 4)return;
00305  }
00306  if((hWnd=FindWindow("OFX:PlayGL",NULL)) != NULL){
00307    SetForegroundWindow(hWnd);
00308    BringWindowToTop(hWnd);
00309    found=TRUE;
00310  }
00311  else{
00312    strcpy(modulename,gszHomeDir);strcat(modulename,"animategl.exe $SAL$");
00313    result=WinExec(modulename,SW_SHOW);
00314    if(result < 32){
00315      if(result == ERROR_FILE_NOT_FOUND || result == ERROR_PATH_NOT_FOUND)
00316        SendPrgmQuery(IDQ_NOLOADMODELER,0);
00317    }
00318    if((hWnd=FindWindow("OFX:PlayGL",NULL)) != NULL){
00319      SetForegroundWindow(hWnd);
00320      BringWindowToTop(hWnd);
00321      found=TRUE;
00322    }
00323  }
00324  if(found && !in_use){
00325    in_use=TRUE;
00326    MakeScript(6,1);
00327    PostMessage(hWnd,(WM_USER+1),0,0);
00328    in_use=FALSE;
00329  }
00330 }
00331 
00332 void ExecuteModeler(void){
00333  int result;
00334  char modulename[255];
00335  HWND hWnd;
00336  if((hWnd=FindWindow("OFX:ModelerClass",NULL)) != NULL){
00337    SetForegroundWindow(hWnd);
00338    BringWindowToTop(hWnd);
00339  }
00340  else{
00341    strcpy(modulename,gszHomeDir);strcat(modulename,"design.exe");
00342    result=WinExec(modulename,SW_SHOW);
00343    if(result < 32){
00344      if(result == ERROR_FILE_NOT_FOUND || result == ERROR_PATH_NOT_FOUND)
00345        SendPrgmQuery(IDQ_NOLOADMODELER,0);
00346    }
00347    if((hWnd=FindWindow("OFX:ModelerClass",NULL)) != NULL){
00348      SetForegroundWindow(hWnd);
00349      BringWindowToTop(hWnd);
00350    }
00351    else SendPrgmQuery(IDQ_NOSTART,3);
00352  }
00353 }
00354 
00355 void UnloadRenderer(void){
00356  HWND hWnd;
00357  if((hWnd=FindWindow("OFX:RenderClass",NULL)) != NULL){
00358    SendMessage(hWnd,WM_COMMAND,IDM_CALLBACK_SHUTDOWN,0);
00359    return;
00360  }
00361  if((hWnd=FindWindow("OFX:PlayGL",NULL)) != NULL){
00362    SendMessage(hWnd,WM_CLOSE,0,0);
00363    return;
00364  }
00365 }
00366 
00367 void LoadRenderer(int anim){ /* LPARAM bad use (WM_USER+1) instead */
00368  char modulename[256];
00369  HWND hWnd,hWndCall;
00370  int result;
00371  if((hWnd=FindWindow("OFX:RenderClass",NULL)) != NULL){
00372    if(anim == 0){
00373      PostMessage(hWnd,IDM_CALLBACK_HIDDENLINE,0,(LPARAM)ghwnd_view);
00374      return;
00375    }
00376    else if(anim == 3){
00377      if(ghwndOpenGLview == NULL)hWndCall=ghwnd_view;
00378      else{
00379        hWndCall=GetWindow(ghwndOpenGLview,GW_CHILD);
00380      }
00381      if(hWndCall != NULL)PostMessage(hWnd,WM_CALLBACK_MATERIAL,0,(LPARAM)hWndCall);
00382 //     PostMessage(hWnd,WM_CALLBACK_MATERIAL,0,(LPARAM)ghwnd_view);
00383      return;
00384    }
00385    else{
00386      if(anim == 2)PostMessage(hWnd,WM_COMMAND,IDM_CALLBACK_RUN,
00387                               (WORD)CurrentFrame);
00388      else{
00389        PostMessage(hWnd,IDM_CALLBACK_SETUP_ANIMATOR,0,
00390                    MAKELPARAM((WORD)CurrentFrame,(WORD)Nframes));
00391        EnableMenuItem(GetMenu(ghwnd_main),IDM_FRAME_RENDERNOW,MF_ENABLED);
00392      }
00393    }
00394    SetForegroundWindow(hWnd);
00395    BringWindowToTop(hWnd);
00396    ShowWindow(hWnd,SW_SHOW);
00397    return;
00398  }
00399  else{
00400    strcpy(modulename,gszHomeDir);strcat(modulename,"render.exe $SAL$");
00401    result=WinExec(modulename,SW_SHOW);
00402    if(result < 32){
00403      if(result == ERROR_FILE_NOT_FOUND ||
00404         result == ERROR_PATH_NOT_FOUND)SendPrgmQuery(IDQ_NOSTART,3);
00405    }
00406    if((hWnd=FindWindow("OFX:RenderClass",NULL)) != NULL){
00407      if(anim == 0){
00408        PostMessage(hWnd,IDM_CALLBACK_HIDDENLINE,0,(LPARAM)ghwnd_view);
00409        return;
00410      }
00411      else if(anim == 3){
00412        if(ghwndOpenGLview == NULL)hWndCall=ghwnd_view;
00413        else{
00414          hWndCall=GetWindow(ghwndOpenGLview,GW_CHILD);
00415        }
00416        if(hWndCall != NULL)PostMessage(hWnd,WM_CALLBACK_MATERIAL,0,(LPARAM)hWndCall);
00417 //       PostMessage(hWnd,WM_CALLBACK_MATERIAL,0,(LPARAM)ghwnd_view);
00418        return;
00419      }
00420      else{
00421        PostMessage(hWnd,IDM_CALLBACK_SETUP_ANIMATOR,0,
00422                    MAKELPARAM((WORD)CurrentFrame,(WORD)Nframes));
00423        EnableMenuItem(GetMenu(ghwnd_main),IDM_FRAME_RENDERNOW,MF_ENABLED);
00424      }
00425      SetForegroundWindow(hWnd);
00426      BringWindowToTop(hWnd);
00427      ShowWindow(hWnd,SW_SHOW);
00428    }
00429    else SendPrgmQuery(IDQ_NOSTART,3);
00430  }
00431  return;
00432 }
00433 
00434 void LoadUtility(char *program, char *class, int message){
00435  BOOL n=FALSE;
00436  int result;
00437  char modulename[255];
00438  HWND hWnd=NULL;
00439  if((class == NULL) || ((hWnd=FindWindow(class,NULL)) == NULL)){
00440    strcpy(modulename,gszHomeDir);strcat(modulename,program);
00441    result=WinExec(modulename,SW_SHOW);
00442    n=TRUE;
00443    if(result < 32){
00444      if(result == ERROR_FILE_NOT_FOUND ||
00445         result == ERROR_PATH_NOT_FOUND)SendPrgmQuery(IDQ_NOSTART,3);
00446      return;
00447    }
00448    if(class != NULL)hWnd=FindWindow(class,NULL);
00449  }
00450  if(hWnd != NULL && IsWindow(hWnd)){
00451    SetForegroundWindow(hWnd);
00452    BringWindowToTop(hWnd);
00453    ShowWindow(hWnd,SW_SHOW);
00454    if(n)PostMessage(hWnd,WM_COMMAND,message,0);
00455  }
00456  return;
00457 }
00458 
00459 BOOL MakeVRMLScript(short type){
00460  return (BOOL)ExportScript(NULL,"vrmlx.dll");
00461 }
00462 
00463 static long ExportScript(char *name, char *library){
00464  char lname[255];
00465  long rv=0;
00466  HMODULE hLib=NULL;
00467  FARPROC fpFun;
00468  ANI_STRUCTURE *Evs;
00469  long (*fpFun1)(HWND, char *, ANI_STRUCTURE *);
00470  Evs=&AniStructure;
00471  strcpy(lname,gszHomeDir); strcat(lname,library);
00472  if((hLib=LoadLibrary(lname)) != NULL){
00473    if((fpFun=GetProcAddress(hLib,"_Export")) != NULL){
00474      fpFun1 = (void *)fpFun;
00475      rv=(*fpFun1)(ghwnd_main,name,Evs);
00476    }
00477    else{
00478      SendPrgmQuery(IDQ_FAILEDFUNCTION,3);
00479    }
00480    FreeLibrary(hLib); hLib=NULL;
00481  }
00482  else SendPrgmQuery(IDQ_FAILEDLIBRARY,3);
00483  return rv;
00484 }
00485 
00486 void LogOnMessage(void){
00487  HMODULE hLib;
00488  FARPROC fpFun;
00489  char lname[256];
00490  int (*fpFun1)(HWND,int);
00491  int id,no_wait;
00492  if(Preferences.splash == 0)return;
00493  if(Preferences.default_start)no_wait = -1;
00494  else                         no_wait=Preferences.splash;
00495  strcpy(lname,gszHomeDir); strcat(lname,"splash.dll");
00496  if((hLib=LoadLibrary(lname)) != NULL){
00497    if((fpFun=GetProcAddress(hLib,"_PrgmLogon")) != NULL){
00498 //   if((fpFun=GetProcAddress(hLib,(LPCSTR)1)) != NULL){
00499      fpFun1 = (void *)fpFun;
00500      EnableToolPannels(ALL_PANNELS,FALSE);
00501      id=(*fpFun1)(ghwnd_main,no_wait);
00502      EnableToolPannels(ALL_PANNELS,TRUE);
00503      if(id < 1)PostQuitMessage(0);
00504      else if(id == 2)PostMessage(ghwnd_main,WM_COMMAND,
00505                       IDM_FILE_LOAD_ANIMATION,0);
00506      else if(id == 3)PostMessage(ghwnd_main,WM_COMMAND,
00507                       IDM_FILE_LOAD_TEMPLATE,0);
00508      else if(id == 4)PostMessage(ghwnd_main,WM_COMMAND,
00509                      IDM_HELP_GENERAL,0);
00510      else if(id == 5)PostMessage(ghwnd_main,WM_COMMAND,
00511                      IDM_FILE_MODELER,0);
00512      else if(id == 6)PostMessage(ghwnd_main,WM_COMMAND,
00513                      IDM_FILE_LOAD_STARTUP,0);
00514    }
00515    FreeLibrary(hLib);
00516  }
00517  return;
00518 }
Generated on Tue Jan 28 06:18:25 2014 for OpenFX by  doxygen 1.6.3