unpack zips in src to better compression

This commit is contained in:
2022-10-20 13:28:49 +02:00
parent e25403bd5f
commit 87eb27f562
447 changed files with 55306 additions and 0 deletions

View File

@@ -0,0 +1,273 @@
#include "general.h"
#include "prefs.h"
#include "plugins.h"
#include "close_modal.h"
#include "ztext.h"
#include "pic_load.h"
#include "catalog/catalog.h"
#include "file/file.h"
void CDECL ( *encoder_quit) ( IMGINFO);
boolean CDECL ( *encoder_write) ( IMGINFO, uint8 *);
boolean CDECL ( *encoder_init) ( const char *, IMGINFO);
void CDECL ( *set_jpg_option) ( int16 set_quality, J_COLOR_SPACE set_color_space, boolean set_progressive) = NULL;
void CDECL ( *set_tiff_option)( int16 set_quality, uint16 set_encode_compression) = NULL;
/* extern function */
extern int16 pic_save( const char *in_file, const char *out_file);
extern void jpg_option_dialog( char *source_file);
extern void tiff_option_dialog( void);
int16 encoder_plugins_nbr = 0;
LDG *encoder[100];
/* Prototype */
void save_dialog( const char *fullfilename);
/* local variable */
static int last_choice = -1;
static OBJECT *save_dialog_content = NULL;
char source_file[MAXNAMLEN];
static boolean encoder_plugin_setup( WINDOW *win, int encoder_selected)
{
encoder_init = ldg_find( "encoder_init", encoder[encoder_selected]);
encoder_write = ldg_find( "encoder_write", encoder[encoder_selected]);
encoder_quit = ldg_find( "encoder_quit", encoder[encoder_selected]);
if ( !encoder_init || !encoder_write || !encoder_quit)
{
errshow( encoder[encoder_selected]->infos, ldg_error());
return FALSE;
}
set_jpg_option = NULL;
set_tiff_option = NULL;
if( strncmp( encoder[encoder_selected]->infos, "JPG", 3) == 0)
set_jpg_option = ldg_find( "set_jpg_option", encoder[encoder_selected]);
else if( strncmp( encoder[encoder_selected]->infos, "TIF", 3) == 0)
set_tiff_option = ldg_find( "set_tiff_option", encoder[encoder_selected]);
else
ObjcChange( OC_FORM, win, SAVE_DIAL_OPTIONS, DISABLED, 0);
zstrncpy( save_dialog_content[SAVE_DIAL_FORMAT].ob_spec.free_string, encoder[encoder_selected]->infos, 4);
if( set_jpg_option != NULL || set_tiff_option != NULL)
ObjcChange( OC_FORM, win, SAVE_DIAL_OPTIONS, NORMAL, 0);
ObjcDraw( OC_FORM, win, SAVE_DIAL_FORMAT, 1);
ObjcDraw( OC_FORM, win, SAVE_DIAL_OPTIONS, 1);
return TRUE;
}
static void format_popup( WINDOW *win, int obj_index)
{
char items[100][4];
char *items_ptr[100];
int16 i, x, y;
int choice;
for( i = 0; i < encoder_plugins_nbr; i++)
{
zstrncpy( items[i], encoder[i]->infos, 4);
items_ptr[i] = items[i];
}
objc_offset( FORM(win), obj_index, &x, &y);
choice = MenuPopUp ( items_ptr, x, y, encoder_plugins_nbr, -1, last_choice, P_LIST + P_WNDW + P_CHCK);
if( choice < 1)
choice = 1;
if( last_choice != choice)
encoder_plugin_setup( win, choice - 1);
last_choice = choice;
if( last_choice)
ObjcChange( OC_FORM, win, SAVE_DIAL_SAVE, NORMAL, TRUE);
else
ObjcChange( OC_FORM, win, SAVE_DIAL_SAVE, DISABLED, TRUE);
}
static void save_dialog_event( WINDOW *win)
{
char target_file[MAX_PATH+MAXNAMLEN];
char target_file_path[MAX_PATH];
char target_file_name[MAXNAMLEN];
char extention[3];
char file_mask[5];
int16 object = evnt.buff[4], source_file_len, source_name_len, source_path_len, i;
switch( object)
{
case SAVE_DIAL_FORMAT:
format_popup( win, evnt.buff[4]);
ObjcChange( OC_FORM, win, evnt.buff[4], NORMAL, TRUE);
break;
case SAVE_DIAL_OPTIONS:
if( strncmp( encoder[last_choice-1]->infos, "JPG", 3) == 0)
{
ObjcChange( OC_FORM, win, object, NORMAL, TRUE);
jpg_option_dialog( source_file);
}
else if( strncmp( encoder[last_choice-1]->infos, "TIF", 3) == 0)
{
ObjcChange( OC_FORM, win, object, NORMAL, TRUE);
tiff_option_dialog();
}
break;
case SAVE_DIAL_SAVE:
source_file_len = ( int16)strlen( source_file);
source_path_len = source_file_len;
while(( source_file[source_path_len] != '/') && ( source_file[source_path_len] != '\\'))
source_path_len--;
source_name_len = ( source_file_len - source_path_len);
strncpy( target_file_path, source_file, source_path_len);
target_file_path[source_path_len] = '\0';
source_path_len++;
for ( i = 0; i < source_name_len; i++)
target_file_name[i] = source_file[source_path_len++];
target_file_name[i] = '\0';
/* copy the source's name in the target's name with the new extention for exemple ( "toto.gif" to "toto.jpg") */
zstrncpy( extention, encoder[last_choice - 1]->infos, 4);
str2lower( extention);
strcpy ( target_file_name + strlen( target_file_name) - 3, extention);
/* The file mask ( for exemple *.jpg) */
strcpy( file_mask, "*.");
strcat( file_mask, extention);
ObjcChange( OC_FORM, win, evnt.buff[4], NORMAL, FALSE);
close_modal( win);
if( FselInput( target_file_path, target_file_name, file_mask, get_string( SAVE_TITLE), NULL, NULL))
{
strcpy( target_file, target_file_path);
/* workaround for a bug in tos fileselector, when we navigate through this one, the file name is deleted */
if( strlen( target_file_name) < 5)
{
source_path_len -= i;
for ( i = 0; i < source_name_len; i++)
target_file_name[i] = source_file[source_path_len++];
target_file_name[i] = '\0';
}
strcat( target_file, target_file_name);
/* for be sure that the extention match with the encoder */
strcpy ( target_file + strlen( target_file) - 4, file_mask + 1);
/* with fat filesystem, the file selector return upper case name, some the strcmp() function doens't work */
str2lower( source_file);
str2lower( target_file);
/* the source can't be the same that the destination */
if( strcmp( source_file, target_file) == 0)
{
errshow( NULL, SOURCE_TARGET_SAME);
break;
}
if( !pic_save( source_file, target_file))
break;
/* if the new file is added in the same dir that win_catalog, we refresh it */
if( win_catalog)
{
WINDICON *wicones = (WINDICON *)DataSearch( win_catalog, WD_ICON);
//strcat( target_file_path, "\\");
if( strcmpi( target_file_path, wicones->directory) == 0)
{
( void)scan_dir( win_catalog, wicones->directory);
WinCatalog_filelist_redraw();
ObjcDraw( OC_TOOLBAR, win_catalog, TOOLBAR_DELETE, 1);
ObjcDraw( OC_TOOLBAR, win_catalog, TOOLBAR_INFO, 1);
ObjcDraw( OC_TOOLBAR, win_catalog, TOOLBAR_SAVE, 1);
menu_ienable( get_tree( MENU_BAR), MENU_BAR_DELETE, 0);
menu_ienable( get_tree( MENU_BAR), MENU_BAR_INFORMATION, 0);
menu_ienable( get_tree( MENU_BAR), MENU_BAR_SAVE, 0);
}
}
}
break;
case SAVE_DIAL_ABORT:
ObjcChange( OC_FORM, win, evnt.buff[4], NORMAL, FALSE);
ApplWrite( app.id, WM_CLOSED, win->handle, 0, 0, 0, 0);
break;
}
}
/*==================================================================================*
* void infobox: *
* Show the infobox for a image or a file. *
*----------------------------------------------------------------------------------*
* input: *
* -- *
*----------------------------------------------------------------------------------*
* returns: *
* -- *
*==================================================================================*/
void save_dialog( const char *fullfilename)
{
WINDOW *win_save_dialog;
if( !encoder_plugins_nbr)
{
int16 i;
for( i = 0; i < plugins_nbr; i++)
{
if( ldg_find( "encoder_init", codecs[i]))
{
encoder[encoder_plugins_nbr] = codecs[i];
encoder_plugins_nbr++;
}
}
if( !encoder_plugins_nbr)
return;
}
strcpy( source_file, fullfilename);
save_dialog_content = get_tree( SAVE_DIAL);
win_save_dialog = FormCreate( save_dialog_content, NAME|MOVER, save_dialog_event, get_string( SAVE_TITLE), NULL, TRUE, FALSE);
/* Make this window modal */
WindSet( win_save_dialog, WF_BEVENT, BEVENT_MODAL, 0, 0, 0);
EvntAttach( win_save_dialog, WM_CLOSED, close_modal);
MenuDisable();
}