📄 gvxinit.c
字号:
write_profile();
return TRUE;
}
int load_language(int language)
{
switch(language) {
case IDM_LANGCT:
case IDM_LANGDE:
case IDM_LANGFR:
case IDM_LANGGR:
case IDM_LANGES:
case IDM_LANGIT:
case IDM_LANGNL:
case IDM_LANGRU:
case IDM_LANGSE:
case IDM_LANGSK:
case IDM_LANGEN:
return TRUE;
}
return FALSE;
}
/* should be in gvx.h */
void check_string_order(STRING_ENTRY *st, int stlen);
void set_usermedia(void)
{
GtkWidget *w;
GtkItem *item;
GtkBin *bin;
GtkWidget *label;
int i;
for (i=0; i<sizeof(usermedia)/sizeof(USERMEDIA); i++) {
w = find_menu_widget(i+IDM_USERSIZE1);
if (w) {
if (usermedia[i].name[0]) {
item = >K_MENU_ITEM(w)->item;
bin = &item->bin;
label = bin->child;
gtk_label_set_text(GTK_LABEL(label), usermedia[i].name);
gtk_widget_show(w);
}
else {
gtk_widget_hide(w);
}
}
}
}
void change_language(void)
{
STRING_ENTRY *st;
int stlen;
strcpy(szHelpName, szDocPath);
switch (option.language) {
case IDM_LANGCT:
strcat(szHelpName, "gvxct.htm");
st = string_ct;
stlen = string_ct_len;
break;
case IDM_LANGDE:
strcat(szHelpName, "gvxde.htm");
st = string_de;
stlen = string_de_len;
break;
case IDM_LANGFR:
strcat(szHelpName, "gvxfr.htm");
st = string_fr;
stlen = string_fr_len;
break;
case IDM_LANGGR:
strcat(szHelpName, "gvxgr.htm");
st = string_gr;
stlen = string_gr_len;
break;
case IDM_LANGES:
strcat(szHelpName, "gvxes.htm");
st = string_es;
stlen = string_es_len;
break;
case IDM_LANGIT:
strcat(szHelpName, "gvxit.htm");
st = string_it;
stlen = string_it_len;
break;
case IDM_LANGNL:
strcat(szHelpName, "gvxnl.htm");
st = string_nl;
stlen = string_nl_len;
break;
case IDM_LANGRU:
strcat(szHelpName, "gvxru.htm");
st = string_ru;
stlen = string_ru_len;
break;
case IDM_LANGSE:
strcat(szHelpName, "gvxse.htm");
st = string_se;
stlen = string_se_len;
break;
case IDM_LANGSK:
strcat(szHelpName, "gvxsk.htm");
st = string_sk;
stlen = string_sk_len;
break;
case IDM_LANGEN:
default:
strcat(szHelpName, "gvxen.htm");
st = string_en;
stlen = string_en_len;
}
if (debug & DEBUG_GENERAL)
check_string_order(st, stlen);
remove_main_menu(window);
add_main_menu(window);
set_usermedia();
nHelpTopic = IDS_TOPICROOT;
/* Update the window before we change the check marks */
gtk_main_iteration_do(FALSE);
init_check_menu();
set_last_used();
measure_close();
statusbar_update();
button_settips();
}
int language_value;
void language_select(GtkWidget *w, gpointer data)
{
language_value = (int)data;
gtk_main_quit();
}
int get_language(void)
{
GtkWidget *window; /* main dialog window */
GtkWidget *vbox;
GtkWidget *button_ct;
GtkWidget *button_de;
GtkWidget *button_en;
GtkWidget *button_es;
GtkWidget *button_fr;
GtkWidget *button_gr;
GtkWidget *button_it;
GtkWidget *button_nl;
GtkWidget *button_ru;
GtkWidget *button_se;
GtkWidget *button_sk;
int rc = 0;
language_value = IDM_LANGEN;
window=gtk_window_new(GTK_WINDOW_DIALOG);
gtk_signal_connect(GTK_OBJECT(window), "delete-event",
GTK_SIGNAL_FUNC(modal_delete), &rc);
gtk_window_set_title(GTK_WINDOW(window), get_string(IDS_AASELECTLANGUAGE));
gtk_window_set_default_size(GTK_WINDOW(window),
180, 100); /* only width is important */
vbox = gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show(vbox);
button_en = gtk_button_new_with_label(get_string(IDS_AAENGLISH));
gtk_box_pack_start(GTK_BOX(vbox), button_en, TRUE, TRUE, 5);
gtk_signal_connect(GTK_OBJECT(button_en), "clicked",
GTK_SIGNAL_FUNC(language_select), (gpointer)IDM_LANGEN);
gtk_widget_show(button_en);
button_ct = gtk_button_new_with_label(get_string(IDS_AACATALAN));
gtk_box_pack_start(GTK_BOX(vbox), button_ct, TRUE, TRUE, 5);
gtk_signal_connect(GTK_OBJECT(button_ct), "clicked",
GTK_SIGNAL_FUNC(language_select), (gpointer)IDM_LANGCT);
gtk_widget_show(button_ct);
button_de = gtk_button_new_with_label(get_string(IDS_AADEUTSCH));
gtk_box_pack_start(GTK_BOX(vbox), button_de, TRUE, TRUE, 5);
gtk_signal_connect(GTK_OBJECT(button_de), "clicked",
GTK_SIGNAL_FUNC(language_select), (gpointer)IDM_LANGDE);
gtk_widget_show(button_de);
button_fr = gtk_button_new_with_label(get_string(IDS_AAFRANCAIS));
gtk_box_pack_start(GTK_BOX(vbox), button_fr, TRUE, TRUE, 5);
gtk_signal_connect(GTK_OBJECT(button_fr), "clicked",
GTK_SIGNAL_FUNC(language_select), (gpointer)IDM_LANGFR);
gtk_widget_show(button_fr);
button_gr = gtk_button_new_with_label(get_string(IDS_AAGREEK));
gtk_box_pack_start(GTK_BOX(vbox), button_gr, TRUE, TRUE, 5);
gtk_signal_connect(GTK_OBJECT(button_gr), "clicked",
GTK_SIGNAL_FUNC(language_select), (gpointer)IDM_LANGGR);
gtk_widget_show(button_gr);
button_it = gtk_button_new_with_label(get_string(IDS_AAITALIANO));
gtk_box_pack_start(GTK_BOX(vbox), button_it, TRUE, TRUE, 5);
gtk_signal_connect(GTK_OBJECT(button_it), "clicked",
GTK_SIGNAL_FUNC(language_select), (gpointer)IDM_LANGIT);
gtk_widget_show(button_it);
button_es = gtk_button_new_with_label(get_string(IDS_AAESPANOL));
gtk_box_pack_start(GTK_BOX(vbox), button_es, TRUE, TRUE, 5);
gtk_signal_connect(GTK_OBJECT(button_es), "clicked",
GTK_SIGNAL_FUNC(language_select), (gpointer)IDM_LANGES);
gtk_widget_show(button_es);
button_nl = gtk_button_new_with_label(get_string(IDS_AANEDERLANDS));
gtk_box_pack_start(GTK_BOX(vbox), button_nl, TRUE, TRUE, 5);
gtk_signal_connect(GTK_OBJECT(button_nl), "clicked",
GTK_SIGNAL_FUNC(language_select), (gpointer)IDM_LANGNL);
gtk_widget_show(button_nl);
button_ru = gtk_button_new_with_label(get_string(IDS_AARUSSIAN));
gtk_box_pack_start(GTK_BOX(vbox), button_ru, TRUE, TRUE, 5);
gtk_signal_connect(GTK_OBJECT(button_ru), "clicked",
GTK_SIGNAL_FUNC(language_select), (gpointer)IDM_LANGRU);
gtk_widget_show(button_ru);
button_se = gtk_button_new_with_label(get_string(IDS_AASVENSKA));
gtk_box_pack_start(GTK_BOX(vbox), button_se, TRUE, TRUE, 5);
gtk_signal_connect(GTK_OBJECT(button_se), "clicked",
GTK_SIGNAL_FUNC(language_select), (gpointer)IDM_LANGSE);
gtk_widget_show(button_se);
button_sk = gtk_button_new_with_label(get_string(IDS_AASLOVAK));
gtk_box_pack_start(GTK_BOX(vbox), button_sk, TRUE, TRUE, 5);
gtk_signal_connect(GTK_OBJECT(button_sk), "clicked",
GTK_SIGNAL_FUNC(language_select), (gpointer)IDM_LANGSK);
gtk_widget_show(button_sk);
/* show dialog and wait for language or close */
gtk_window_set_focus(GTK_WINDOW(window), button_en);
gtk_window_set_modal(GTK_WINDOW(window), TRUE);
gtk_widget_show(window);
gtk_main();
gtk_widget_destroy(window);
return language_value;
}
int check_locale(const char *lang)
{
if ((tolower(pszLocale[0]) == lang[0]) &&
(tolower(pszLocale[1]) == lang[1]))
return 0; /* match */
return 1; /* mismatch */
}
void check_language(void)
{
if ( (debug & DEBUG_GENERAL)
|| ((option.language == IDM_LANGEN) && check_locale("en"))
|| ((option.language == IDM_LANGDE) && check_locale("de"))
|| ((option.language == IDM_LANGES) && check_locale("es"))
|| ((option.language == IDM_LANGFR) && check_locale("fr"))
|| ((option.language == IDM_LANGGR) && check_locale("gr"))
|| ((option.language == IDM_LANGIT) && check_locale("it"))
|| ((option.language == IDM_LANGNL) && check_locale("nl"))
|| ((option.language == IDM_LANGNL) && check_locale("se"))
|| ((option.language == IDM_LANGSK) && check_locale("sk"))
|| ((option.language == IDM_LANGRU) && check_locale("ru"))
)
{
/* GSview language doesn't match locale, prompt user */
int language = get_language();
switch (language) {
case IDM_LANGEN:
case IDM_LANGCT:
case IDM_LANGDE:
case IDM_LANGES:
case IDM_LANGFR:
case IDM_LANGGR:
case IDM_LANGIT:
case IDM_LANGNL:
case IDM_LANGRU:
case IDM_LANGSE:
case IDM_LANGSK:
gsview_language(language);
}
}
}
void post_args(void)
{
/* Don't need to do this, because we use delayed parsing of
* the command line instead.
*/
}
/***************************/
void *zlib_hinstance;
PFN_gzopen gzopen;
PFN_gzread gzread;
PFN_gzclose gzclose;
void
unload_zlib(void)
{
if (zlib_hinstance == (void *)NULL)
return;
dlclose(zlib_hinstance);
zlib_hinstance = NULL;
gzopen = NULL;
gzread = NULL;
gzclose = NULL;
}
/* load zlib DLL (libz.so) for gunzip */
BOOL
load_zlib(void)
{
char buf[MAXSTR];
char zlibname[] = "libz.so";
if (zlib_hinstance != (void *)NULL)
return TRUE; /* already loaded */
strcpy(buf, zlibname);
gs_addmess("Attempting to load ");
gs_addmess(buf);
gs_addmess("\n");
zlib_hinstance = dlopen(buf, RTLD_NOW);
if (zlib_hinstance != NULL) {
gzopen = (PFN_gzopen) dlsym(zlib_hinstance, "gzopen");
if (gzopen == NULL) {
unload_zlib();
}
else {
gzread = (PFN_gzread) dlsym(zlib_hinstance, "gzread");
if (gzread == NULL) {
unload_zlib();
}
else {
gzclose = (PFN_gzclose) dlsym(zlib_hinstance, "gzclose");
if (gzclose == NULL) {
unload_zlib();
}
}
}
}
if (zlib_hinstance == NULL) {
load_string(IDS_ZLIB_FAIL, buf, sizeof(buf));
if (message_box(buf, MB_OKCANCEL) == IDOK) {
nHelpTopic = IDS_TOPICZLIB;
get_help();
}
return FALSE;
}
return TRUE;
}
/***************************/
void * bzip2_hinstance;
PFN_bzopen bzopen;
PFN_bzread bzread;
PFN_bzclose bzclose;
void
unload_bzip2(void)
{
if (bzip2_hinstance == (void *)NULL)
return;
dlclose(bzip2_hinstance);
bzip2_hinstance = NULL;
bzopen = NULL;
bzread = NULL;
bzclose = NULL;
}
/* load bzip2 DLL for gunzip */
BOOL
load_bzip2(void)
{
char buf[MAXSTR];
char bzip2name[] = "libbz2.so";
if (bzip2_hinstance != (void *)NULL)
return TRUE; /* already loaded */
strcpy(buf, bzip2name);
gs_addmess("Attempting to load ");
gs_addmess(buf);
gs_addmess("\n");
bzip2_hinstance = dlopen(buf, RTLD_NOW);
if (bzip2_hinstance != (void *)NULL) {
bzopen = (PFN_bzopen) dlsym(bzip2_hinstance, "bzopen");
if (bzopen == NULL) {
unload_bzip2();
}
else {
bzread = (PFN_bzread) dlsym(bzip2_hinstance, "bzread");
if (bzread == NULL) {
unload_bzip2();
}
else {
bzclose = (PFN_bzclose) dlsym(bzip2_hinstance, "bzclose");
if (bzclose == NULL) {
unload_bzip2();
}
}
}
}
if (bzip2_hinstance == NULL) {
load_string(IDS_BZIP2_FAIL, buf, sizeof(buf));
if (message_box(buf, MB_OKCANCEL) == IDOK) {
nHelpTopic = IDS_TOPICBZIP2;
get_help();
}
return FALSE;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -