unpack zips in src to better compression
This commit is contained in:
124
sources/z-tools/trunk/zview/plugins.c
Normal file
124
sources/z-tools/trunk/zview/plugins.c
Normal file
@@ -0,0 +1,124 @@
|
||||
#include "general.h"
|
||||
#include "ztext.h"
|
||||
|
||||
/* Prototype */
|
||||
int16 plugins_init( void);
|
||||
void plugins_quit( void);
|
||||
|
||||
|
||||
/* LDG function */
|
||||
void CDECL( *codec_init)( void) = NULL;
|
||||
|
||||
/* Global variable */
|
||||
int16 plugins_nbr = 0;
|
||||
LDG *codecs[100];
|
||||
|
||||
|
||||
/*==================================================================================*
|
||||
* void plugins_quit: *
|
||||
* unload all the codec from memory. *
|
||||
*----------------------------------------------------------------------------------*
|
||||
* input: *
|
||||
* -- *
|
||||
*----------------------------------------------------------------------------------*
|
||||
* returns: *
|
||||
* -- *
|
||||
*==================================================================================*/
|
||||
void plugins_quit( void)
|
||||
{
|
||||
int16 i;
|
||||
|
||||
for( i = 0; i < plugins_nbr; i++)
|
||||
ldg_close( codecs[i], ldg_global);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*==================================================================================*
|
||||
* void plugins_init: *
|
||||
* load all the codec to memory. *
|
||||
*----------------------------------------------------------------------------------*
|
||||
* input: *
|
||||
* -- *
|
||||
*----------------------------------------------------------------------------------*
|
||||
* returns: *
|
||||
* -- *
|
||||
*==================================================================================*/
|
||||
int16 plugins_init( void)
|
||||
{
|
||||
char *env_ldg, plugin_dir[MAX_PATH];
|
||||
DIR *dir;
|
||||
LDG_INFOS *cook;
|
||||
struct dirent *de;
|
||||
int16 len;
|
||||
char extention[4];
|
||||
|
||||
strcpy( plugin_dir, zview_path);
|
||||
strcat( plugin_dir, "\\codecs");
|
||||
|
||||
/* We try to find the zcodecs folder in zview directory... */
|
||||
if ( chdir( plugin_dir) != 0)
|
||||
{
|
||||
shel_envrn( &env_ldg, "LDGPATH=");
|
||||
|
||||
/* ...if this directory doesn't exist, we try to find
|
||||
the zcodecs folder in the default LDG path, with
|
||||
the LDG cookie or with the environment variable. */
|
||||
|
||||
if( ldg_cookie( LDG_COOKIE, ( int32*)&cook))
|
||||
strcpy( plugin_dir, cook->path);
|
||||
else if( env_ldg)
|
||||
strcpy( plugin_dir, env_ldg);
|
||||
else
|
||||
strcpy( plugin_dir, "C:\\gemsys\\ldg\\");
|
||||
|
||||
len = ( int16)strlen( plugin_dir);
|
||||
|
||||
if( plugin_dir[len-1] != '\\')
|
||||
strcat( plugin_dir, "\\");
|
||||
|
||||
strcat( plugin_dir, "codecs");
|
||||
|
||||
if ( chdir( plugin_dir) != 0)
|
||||
return( 0);
|
||||
}
|
||||
|
||||
if (( dir = opendir( ".")) != NULL)
|
||||
{
|
||||
while(( de = readdir( dir)) != NULL)
|
||||
{
|
||||
if (( strcmp( de->d_name, ".") == 0) || ( strcmp( de->d_name, "..") == 0))
|
||||
continue;
|
||||
|
||||
strcpy ( extention, de->d_name + strlen( de->d_name) - 3);
|
||||
str2lower( extention);
|
||||
|
||||
if( strcmp ( extention, "ldg") == 0)
|
||||
{
|
||||
if ( ( codecs[plugins_nbr] = ldg_open( de->d_name, ldg_global)))
|
||||
{
|
||||
if ( ( codec_init = ldg_find( "plugin_init", codecs[plugins_nbr])))
|
||||
{
|
||||
codec_init();
|
||||
plugins_nbr++;
|
||||
}
|
||||
else
|
||||
{
|
||||
errshow( de->d_name, ldg_error());
|
||||
ldg_close( codecs[plugins_nbr], ldg_global);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
errshow( de->d_name, ldg_error());
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir( dir);
|
||||
}
|
||||
|
||||
chdir( zview_path);
|
||||
|
||||
return plugins_nbr;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user