/*	WebDownloader for X-Window
 *	Copyright (C) 1999-2002 Koshelev Maxim
 *	This Program is free but not GPL!!! You can't modify it
 *	without agreement with author. You can't distribute modified
 *	program but you can distribute unmodified program.
 *
 *	This program is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 */

#include <pthread.h>
#include "var.h"
#include "dbc.h"
#include "locstr.h"
#include "ntlocale.h"
#include "signal.h"

tGlobalVars GVARS;

int METER_LENGTH=50;
int GRAPH_METER_LENGTH=24;
int BLOCK_READ=1500;
int LOCK_FILE_D=0;

tMainCfg CFG={
	{300,5,0,100,0,1,0,0,
	 0,0,0,0,0,1,1,1,0,0,0,0,1,0,0,
	 0,0},
	100,NULL,NULL,NULL,NULL,NULL,NULL,0,0,
	100,0,0,0,NULL,0,0, //Log
	5,0, //List
	1,600,0,0, //flags
	1,0,0,40,40,500,400,300,300,1,0,1,0,20,30,0,5,1,1,0,0,100,0,0,0,0,//interface
	0,1,NULL,NULL, //clipboard
	0xFFFFFF,0x555555,0xAAAAAA,0,0,
	/* Proxy */
	NULL,0,NULL,NULL,1,NULL,0,NULL,NULL,0,0,0,0,0,
	/* SOCKS */
	NULL,0,NULL,NULL,
	1,1,1,1,1,1,
	3,1024,10*1024,
	NULL,0,
	0x0FFFFFFF,
	0,0,1,1,0, //special things
	1,20,10,NULL, //FTP SEARCH
	1,0,(char*)NULL,(char*)NULL,(char*)NULL,(char*)NULL,(char*)NULL,(char*)NULL,
	0,(char*)NULL,(char*)NULL
};

char *DEFAULT_PROTO="ftp";
char *DEFAULT_USER="anonymous";
char *HOME_PAGE="http://www.krasu.ru/soft/chuchelo";

tHistory *ALL_HISTORIES[LAST_HISTORY];
tCookiesTree *COOKIES=NULL;
tQueue *D4X_THEME_DATA=(tQueue *)NULL;

tDB *ALL_DOWNLOADS;
char *HOME_VARIABLE=NULL;
int GLOBAL_SLEEP_DELAY=2;
d4xDUpdate D4X_UPDATE;

void var_check_limits_int(int lower_value,int upper_value,int *value){
	if (*value>upper_value) *value=upper_value;
	if (*value<lower_value) *value=lower_value;
};

void var_check_limits_long(long long lower_value,long long upper_value,long long *value){
	if (*value>upper_value) *value=upper_value;
	if (*value<lower_value) *value=lower_value;
};

void var_check_all_limits(){
	var_check_limits_int(100,999,&CFG.MAX_LOG_LENGTH);
	var_check_limits_int(1,999,&CFG.DEFAULT_CFG.time_for_sleep);
	var_check_limits_int(0,999,&CFG.DEFAULT_CFG.number_of_attempts);
	var_check_limits_int(30,999,&CFG.DEFAULT_CFG.timeout);
	var_check_limits_int(100,9999,&CFG.MAX_MAIN_LOG_LENGTH);
	var_check_limits_long(0,5000,&CFG.DEFAULT_CFG.rollback);
	var_check_limits_int(0,999,&CFG.DEFAULT_CFG.ftp_recurse_depth);
	var_check_limits_int(0,999,&CFG.DEFAULT_CFG.http_recurse_depth);
	var_check_limits_int(100,999999,&CFG.SPEED_LIMIT_1);
	var_check_limits_int(100,999999,&CFG.SPEED_LIMIT_2);
	var_check_limits_int(1,999,&CFG.SAVE_LIST_INTERVAL);
	var_check_limits_int(1,999,&CFG.EXIT_COMPLETE_TIME);
	var_check_limits_long(0,99999,&CFG.MAIN_LOG_FILE_LIMIT);
	var_check_limits_int(1,100,&CFG.SEARCH_PING_TIMES);
	var_check_limits_int(1,30,&CFG.SEARCH_ENTRIES);
	var_check_limits_int(0,10,&CFG.NUMBER_OF_PARTS);
	var_check_limits_int(0,100,&CFG.SEARCH_ENTRIES);
	var_check_limits_int(0,50,&CFG.SEARCH_PERSERVER);
	var_check_limits_int(DBCLA_OPENLOG,DBCLA_LAST-1,&CFG.DBLCLK_ACT);
};

const char *CFG_FILE=".ntrc_2/config";
const char *CFG_DIR=".ntrc_2";

char *SPEED_LIMITATIONS_NAMES[]={
	"",
	N_("low"),
	N_("medium"),
	N_("unlimited")
};

void var_free(tMainCfg *dst){
	if (dst->EXEC_WHEN_QUIT) delete[] dst->EXEC_WHEN_QUIT;
	if (dst->HTTP_PROXY_PASS) delete[] dst->HTTP_PROXY_PASS;
	if (dst->HTTP_PROXY_USER) delete[] dst->HTTP_PROXY_USER;
	if (dst->HTTP_PROXY_HOST) delete[] dst->HTTP_PROXY_HOST;
	if (dst->FTP_PROXY_PASS) delete[] dst->FTP_PROXY_PASS;
	if (dst->FTP_PROXY_USER) delete[] dst->FTP_PROXY_USER;
	if (dst->FTP_PROXY_HOST) delete[] dst->FTP_PROXY_HOST;
	if (dst->SKIP_IN_CLIPBOARD) delete[] dst->SKIP_IN_CLIPBOARD;
	if (dst->CATCH_IN_CLIPBOARD) delete[] dst->CATCH_IN_CLIPBOARD;
	if (dst->SAVE_LOG_PATH) delete[] dst->SAVE_LOG_PATH;
	if (dst->GLOBAL_SAVE_PATH) delete[] dst->GLOBAL_SAVE_PATH;
	if (dst->LOCAL_SAVE_PATH) delete[] dst->LOCAL_SAVE_PATH;
	if (dst->DEFAULT_NAME) delete[] dst->DEFAULT_NAME;
	if (dst->USER_AGENT) delete[] dst->USER_AGENT;
	if (dst->ANONYMOUS_PASS) delete[] dst->ANONYMOUS_PASS;
	if (dst->SOCKS_PASS) delete[] dst->SOCKS_PASS;
	if (dst->SOCKS_USER) delete[] dst->SOCKS_USER;
	if (dst->SOCKS_HOST) delete[] dst->SOCKS_HOST;
	if (dst->SOUND_ADD) delete[] dst->SOUND_ADD;
	if (dst->SOUND_COMPLETE) delete[] dst->SOUND_COMPLETE;
	if (dst->SOUND_FAIL) delete[] dst->SOUND_FAIL;
	if (dst->SOUND_DND_DROP) delete[] dst->SOUND_DND_DROP;
	if (dst->SOUND_QUEUE_FINISH) delete[] dst->SOUND_QUEUE_FINISH;
	if (dst->SOUND_STARTUP) delete[] dst->SOUND_STARTUP;
	if (dst->DEFAULT_FILTER) delete[] dst->DEFAULT_FILTER;
	if (dst->THEME_FILE) delete[] dst->THEME_FILE;
	if (dst->THEMES_DIR) delete[] dst->THEMES_DIR;
	if (dst->SEARCH_ENGINES) delete[] dst->SEARCH_ENGINES;
};

void var_copy_cfg(tMainCfg *dst,tMainCfg *src){
	dst->DEFAULT_CFG.copy_ints(&(src->DEFAULT_CFG));
	dst->MAX_LOG_LENGTH=src->MAX_LOG_LENGTH;
	dst->ALLOW_FORCE_RUN=src->ALLOW_FORCE_RUN;
	dst->MAX_MAIN_LOG_LENGTH=src->MAX_MAIN_LOG_LENGTH;
	dst->MAIN_LOG_DETAILED=src->MAIN_LOG_DETAILED;
	dst->SAVE_MAIN_LOG=src->SAVE_MAIN_LOG;
	dst->APPEND_REWRITE_LOG=src->APPEND_REWRITE_LOG;
	dst->MAIN_LOG_FILE_LIMIT=src->MAIN_LOG_FILE_LIMIT;
	dst->WRITE_DESCRIPTION=src->WRITE_DESCRIPTION;
	dst->SAVE_LIST_INTERVAL=src->SAVE_LIST_INTERVAL;
	dst->SAVE_LIST=src->SAVE_LIST;
	dst->RECURSIVE_OPTIMIZE=src->RECURSIVE_OPTIMIZE;
	dst->DEFAULT_PERMISIONS=src->DEFAULT_PERMISIONS;
	dst->FTP_DIR_IN_LOG=src->FTP_DIR_IN_LOG;
	dst->PAUSE_AFTER_ADDING=src->PAUSE_AFTER_ADDING;
	dst->USE_MAINWIN_TITLE=src->USE_MAINWIN_TITLE;
	dst->USE_MAINWIN_TITLE2=src->USE_MAINWIN_TITLE2;
	dst->SCROLL_MAINWIN_TITLE=src->SCROLL_MAINWIN_TITLE;
	dst->WINDOW_X_POSITION=src->WINDOW_X_POSITION;
	dst->WINDOW_Y_POSITION=src->WINDOW_Y_POSITION;
	dst->WINDOW_WIDTH=src->WINDOW_WIDTH;
	dst->WINDOW_HEIGHT=src->WINDOW_HEIGHT;
	dst->WINDOW_CLIST_HEIGHT=src->WINDOW_CLIST_HEIGHT;
	dst->WINDOW_CLIST_WIDTH=src->WINDOW_CLIST_WIDTH;
	dst->NEED_DIALOG_FOR_DND=src->NEED_DIALOG_FOR_DND;
	dst->WINDOW_LOWER=src->WINDOW_LOWER;
	dst->GRAPH_ORDER=src->GRAPH_ORDER;
	dst->DND_TRASH=src->DND_TRASH;
	dst->DND_TRASH_X=src->DND_TRASH_X;
	dst->DND_TRASH_Y=src->DND_TRASH_Y;
	dst->EXIT_COMPLETE=src->EXIT_COMPLETE;
	dst->EXIT_COMPLETE_TIME=src->EXIT_COMPLETE_TIME;
	dst->FIXED_LOG_FONT=src->FIXED_LOG_FONT;
	dst->CLIPBOARD_MONITOR=src->CLIPBOARD_MONITOR;
	dst->CLIPBOARD_SKIP_OR_CATCH=src->CLIPBOARD_SKIP_OR_CATCH;
	dst->GRAPH_BACK=src->GRAPH_BACK;
	dst->GRAPH_FORE1=src->GRAPH_FORE1;
	dst->GRAPH_FORE2=src->GRAPH_FORE2;
	dst->GRAPH_PICK=src->GRAPH_PICK;
	dst->GRAPH_MODE=src->GRAPH_MODE;
	dst->FTP_PROXY_PORT=src->FTP_PROXY_PORT;
	dst->FTP_PROXY_TYPE=src->FTP_PROXY_TYPE;
	dst->HTTP_PROXY_PORT=src->HTTP_PROXY_PORT;
	dst->USE_PROXY_FOR_FTP=src->USE_PROXY_FOR_FTP;
	dst->USE_PROXY_FOR_HTTP=src->USE_PROXY_FOR_HTTP;
	dst->NEED_PASS_HTTP_PROXY=src->NEED_PASS_HTTP_PROXY;
	dst->NEED_PASS_FTP_PROXY=src->NEED_PASS_FTP_PROXY;
	dst->PROXY_NO_CACHE=src->PROXY_NO_CACHE;
	dst->CONFIRM_DELETE=src->CONFIRM_DELETE;
	dst->CONFIRM_EXIT=src->CONFIRM_EXIT;
	dst->CONFIRM_DELETE_ALL=src->CONFIRM_DELETE_ALL;
	dst->CONFIRM_DELETE_COMPLETED=src->CONFIRM_DELETE_COMPLETED;
	dst->CONFIRM_DELETE_FATALED=src->CONFIRM_DELETE_FATALED;
	dst->CONFIRM_OPENING_MANY=src->CONFIRM_OPENING_MANY;
	dst->SPEED_LIMIT=src->SPEED_LIMIT;
	dst->SPEED_LIMIT_1=src->SPEED_LIMIT_1;
	dst->SPEED_LIMIT_2=src->SPEED_LIMIT_2;
	dst->REMEMBER_PASS=src->REMEMBER_PASS;
	dst->DND_NEED_POPUP=src->DND_NEED_POPUP;
	dst->SEARCH_PING_TIMES=src->SEARCH_PING_TIMES;
	dst->SEARCH_ENTRIES=src->SEARCH_ENTRIES;
	dst->SEARCH_PERSERVER=src->SEARCH_PERSERVER;
	dst->SOCKS_PORT=src->SOCKS_PORT;
	dst->BUTTONS_FLAGS=src->BUTTONS_FLAGS;
	dst->PROGRESS_MODE=src->PROGRESS_MODE;
	dst->ENABLE_SOUNDS=src->ENABLE_SOUNDS;
	dst->ESD_SOUND=src->ESD_SOUND;
	dst->DONOTSET_WINPOS=src->DONOTSET_WINPOS;
	dst->USE_THEME=src->USE_THEME;
	dst->USE_DEFAULT_CFG=src->USE_DEFAULT_CFG;
	dst->NUMBER_OF_PARTS=src->NUMBER_OF_PARTS;
	dst->GRAPH_ON_BASKET=src->GRAPH_ON_BASKET;
	dst->SHOW_SPEED_ON_BASKET=src->SHOW_SPEED_ON_BASKET;
	dst->DBLCLK_ACT=src->DBLCLK_ACT;
	/* strings */
	var_free(dst);
	dst->EXEC_WHEN_QUIT=copy_string(src->EXEC_WHEN_QUIT);
	dst->HTTP_PROXY_PASS=copy_string(src->HTTP_PROXY_PASS);
	dst->HTTP_PROXY_USER=copy_string(src->HTTP_PROXY_USER);
	dst->HTTP_PROXY_HOST=copy_string(src->HTTP_PROXY_HOST);
	dst->FTP_PROXY_PASS=copy_string(src->FTP_PROXY_PASS);
	dst->FTP_PROXY_USER=copy_string(src->FTP_PROXY_USER);
	dst->FTP_PROXY_HOST=copy_string(src->FTP_PROXY_HOST);
	dst->SKIP_IN_CLIPBOARD=copy_string(src->SKIP_IN_CLIPBOARD);
	dst->CATCH_IN_CLIPBOARD=copy_string(src->CATCH_IN_CLIPBOARD);
	dst->SAVE_LOG_PATH=copy_string(src->SAVE_LOG_PATH);
	dst->GLOBAL_SAVE_PATH=copy_string(src->GLOBAL_SAVE_PATH);
	dst->LOCAL_SAVE_PATH=copy_string(src->LOCAL_SAVE_PATH);
	dst->DEFAULT_NAME=copy_string(src->DEFAULT_NAME);
	dst->USER_AGENT=copy_string(src->USER_AGENT);
	dst->ANONYMOUS_PASS=copy_string(src->ANONYMOUS_PASS);
	dst->SOCKS_PASS=copy_string(src->SOCKS_PASS);
	dst->SOCKS_HOST=copy_string(src->SOCKS_HOST);
	dst->SOCKS_USER=copy_string(src->SOCKS_USER);
	dst->SOUND_FAIL=copy_string(src->SOUND_FAIL);
	dst->SOUND_COMPLETE=copy_string(src->SOUND_COMPLETE);
	dst->SOUND_STARTUP=copy_string(src->SOUND_STARTUP);
	dst->SOUND_ADD=copy_string(src->SOUND_ADD);
	dst->SOUND_DND_DROP=copy_string(src->SOUND_DND_DROP);
	dst->SOUND_QUEUE_FINISH=copy_string(src->SOUND_QUEUE_FINISH);
	dst->DEFAULT_FILTER=copy_string(src->DEFAULT_FILTER);
	dst->THEME_FILE=copy_string(src->THEME_FILE);
	dst->THEMES_DIR=copy_string(src->THEMES_DIR);
	dst->SEARCH_ENGINES=copy_string(src->SEARCH_ENGINES);
};


syntax highlighted by Code2HTML, v. 0.9.1