📄 gvccmd.c
字号:
#ifndef VIEWONLY
case IDM_PSTOEPS:
if (not_open())
return 0;
if (psfile.name[0] != '\0') {
if (dfreopen() != 0)
return 0;
ps_to_eps();
dfclose();
}
return 0;
case IDM_MAKEEPSI:
if ( (option.orientation == IDM_PORTRAIT) ||
(option.auto_orientation == TRUE) ) {
char epsname[MAXSTR];
epsname[0] = '\0';
if (dfreopen() != 0)
return 0;
if (!get_filename(epsname, TRUE, FILTER_EPS, 0,
IDS_TOPICPREVIEW)) {
dfclose();
return 0;
}
image_lock(view.img);
make_eps_interchange(FALSE, epsname);
image_unlock(view.img);
dfclose();
}
else
gserror(IDS_MUSTUSEPORTRAIT, 0, MB_ICONEXCLAMATION, 0);
return 0;
case IDM_MAKEEPST4:
case IDM_MAKEEPST6U:
case IDM_MAKEEPST6P:
if ( (option.orientation == IDM_PORTRAIT) ||
(option.auto_orientation == TRUE) ) {
char epsname[MAXSTR];
epsname[0] = '\0';
if (dfreopen() != 0)
return 0;
if (!get_filename(epsname, TRUE, FILTER_EPS, 0,
IDS_TOPICPREVIEW)) {
dfclose();
return 0;
}
image_lock(view.img);
make_eps_tiff(command, FALSE, epsname);
image_unlock(view.img);
dfclose();
}
else
gserror(IDS_MUSTUSEPORTRAIT, 0, MB_ICONEXCLAMATION, 0);
return 0;
case IDM_MAKEEPSW:
if ( (option.orientation == IDM_PORTRAIT) ||
(option.auto_orientation == TRUE) ) {
char epsname[MAXSTR];
epsname[0] = '\0';
if (dfreopen() != 0)
return 0;
if (!get_filename(epsname, TRUE, FILTER_EPS, 0,
IDS_TOPICPREVIEW)) {
dfclose();
return 0;
}
image_lock(view.img);
make_eps_metafile(FALSE, epsname);
image_unlock(view.img);
dfclose();
}
else
gserror(IDS_MUSTUSEPORTRAIT, 0, MB_ICONEXCLAMATION, 0);
return 0;
case IDM_MAKEEPSU:
if (dfreopen() != 0)
return 0;
make_eps_user();
dfclose();
return 0;
case IDM_EXTRACTPS:
case IDM_EXTRACTPRE:
if (dfreopen() != 0)
return 0;
extract_doseps(command);
dfclose();
return 0;
#endif
case IDM_SETTINGS:
write_profile();
return 0;
case IDM_SAVESETTINGS:
option.settings = !option.settings;
check_menu_item(IDM_OPTIONMENU, IDM_SAVESETTINGS, option.settings);
{ char buf[MAXSTR];
PROFILE *prf = profile_open(szIniFile);
sprintf(buf, "%d", (int)option.settings);
profile_write_string(prf, INISECTION, "SaveSettings", buf);
profile_close(prf);
}
return 0;
case IDM_SOUNDS:
change_sounds();
return 0;
case IDM_AUTOORIENT:
case IDM_PORTRAIT:
case IDM_LANDSCAPE:
case IDM_UPSIDEDOWN:
case IDM_SEASCAPE:
case IDM_SWAPLANDSCAPE:
gsview_orientation(command);
return 0;
case IDM_DSC_OFF:
case IDM_DSC_ERROR:
case IDM_DSC_WARN:
case IDM_DSC_INFO:
check_menu_item(IDM_DSCMENU, option.dsc_warn, FALSE);
option.dsc_warn = command;
check_menu_item(IDM_DSCMENU, option.dsc_warn, TRUE);
return 0;
case IDM_ZOOM: /* called indirectly from Right Mouse Button */
if (not_dsc()) {
zoom = FALSE;
return 0;
}
if (order_is_special()) {
zoom = FALSE;
return 0;
}
if (! ((gsdll.state == GS_PAGE) || (gsdll.state == GS_IDLE)) ) {
zoom = FALSE;
gserror(IDS_NOZOOM, NULL, MB_ICONEXCLAMATION, SOUND_ERROR);
return 0;
}
gs_resize();
pending.pagenum = -1; /* default page number is current page */
pending.now = TRUE;
return 0;
case IDM_MAGPLUS:
gs_magnify((float)1.2);
return 0;
case IDM_MAGMINUS:
gs_magnify((float)0.8333);
return 0;
case IDM_FITWIN:
/* fit media to size of current window */
gsview_fitwin();
return 0;
case IDM_DISPLAYSETTINGS:
display_settings();
return 0;
case IDM_MEDIAROTATE:
option.media_rotate = !option.media_rotate;
check_menu_item(IDM_MEDIAMENU, IDM_MEDIAROTATE,
option.media_rotate);
zoom = FALSE;
gs_resize();
return 0;
case IDM_11x17:
case IDM_A3:
case IDM_A4:
case IDM_A5:
case IDM_B4:
case IDM_B5:
case IDM_LEDGER:
case IDM_LEGAL:
case IDM_LETTER:
case IDM_NOTE:
case IDM_USERSIZE:
case IDM_USERSIZE1:
case IDM_USERSIZE2:
case IDM_USERSIZE3:
case IDM_USERSIZE4:
case IDM_USERSIZE5:
case IDM_USERSIZE6:
case IDM_USERSIZE7:
case IDM_USERSIZE8:
case IDM_USERSIZE9:
case IDM_USERSIZE10:
case IDM_USERSIZE11:
case IDM_USERSIZE12:
case IDM_USERSIZE13:
if (command == IDM_USERSIZE)
if (!gsview_usersize())
return 0;
gsview_media(command);
return 0;
case IDM_HELPCONTENT:
#ifdef UNIX
nHelpTopic = IDS_TOPICROOT;
get_help();
#else
#ifdef _Windows
#ifdef USE_HTMLHELP
nHelpTopic = IDS_TOPICROOT;
get_help();
#else
WinHelp(hwndimg,szHelpName,HELP_CONTENTS,(DWORD)NULL);
#endif
#else
WinSendMsg(hwnd_help, HM_HELP_CONTENTS, 0L, 0L);
#endif
#endif
return 0;
case IDM_HELPSEARCH:
#ifdef UNIX
gs_addmess("IDM_HELPSEARCH: not implemented\n");
#else
#ifdef _Windows
#ifdef USE_HTMLHELP
HtmlHelp(hwndimg,szHelpName,HH_DISPLAY_INDEX, (DWORD)TEXT(""));
gs_addmessf("HtmlHelp: %s HH_DISPLAY_INDEX\n", szHelpName);
#else
WinHelp(hwndimg,szHelpName,HELP_PARTIALKEY,(DWORD)"");
#endif
#else
WinSendMsg(hwnd_help, HM_HELP_INDEX, 0L, 0L);
#endif
#endif
return 0;
case IDM_HELPKEYS:
nHelpTopic = IDS_TOPICKEYS;
get_help();
return 0;
case IDM_ABOUT:
show_about();
return 0;
case IDM_REGISTER:
registration_nag();
return 0;
}
return 0;
}
/* if no document open, display error message and return true */
BOOL
not_open()
{
if (psfile.name[0] != '\0')
return FALSE;
gserror(IDS_NOTOPEN, NULL, MB_ICONEXCLAMATION, SOUND_NOTOPEN);
return TRUE;
}
/* if order is SPECIAL, display error message and return TRUE */
BOOL
order_is_special()
{
TCHAR buf[MAXSTR];
if (psfile.dsc==(CDSC *)NULL)
return TRUE;
if (psfile.dsc->page_order != CDSC_SPECIAL)
return FALSE;
if (psfile.dsc->page_count == 1)
return FALSE; /* can't reorder anyway */
if (psfile.ignore_special)
return FALSE;
gsview_fullscreen_end();
load_string(IDS_PAGESPECIAL, buf, sizeof(buf)-1);
if (message_box(buf, MB_OKCANCEL) == IDOK) {
/* don't show this warning again for this file */
psfile.ignore_special = TRUE;
return FALSE; /* User override */
}
return TRUE; /* order is special */
}
/* if not DSC document or not open, display error message and return true */
BOOL
not_dsc()
{
if (not_open())
return TRUE;
if (psfile.dsc!=(CDSC *)NULL)
return FALSE;
gserror(IDS_NOPAGE, NULL, MB_ICONEXCLAMATION, SOUND_NONUMBER);
return TRUE;
}
void
gserror(UINT id, const char *str, UINT icon, int sound)
{
int i;
TCHAR mess[MAXSTR+MAXSTR];
if (sound >= 0)
play_sound(sound);
i = 0;
if (id)
i = load_string(id, mess, sizeof(mess)/sizeof(TCHAR)-1);
mess[i] = '\0';
if (str)
convert_multibyte(mess+i, str, sizeof(mess)/sizeof(TCHAR)-i-1);
message_box(mess, icon);
}
int
not_implemented()
{
gserror(IDS_NOTIMPLEMENTED, NULL, 0, 0);
return 0;
}
static float get_points(const char *str)
{
float val;
char ptbuf[32];
char inchbuf[32];
char mmbuf[32];
TCHAR tbuf[32];
const char *p = str;
int i;
ptbuf[0] = inchbuf[0] = mmbuf[0] = '\0';
load_string(IDS_UNITNAME + IDM_UNITPT - IDM_UNITPT, tbuf, sizeof(tbuf));
convert_widechar(ptbuf, tbuf, sizeof(ptbuf));
load_string(IDS_UNITNAME + IDM_UNITINCH - IDM_UNITPT,
tbuf, sizeof(tbuf));
convert_widechar(inchbuf, tbuf, sizeof(inchbuf));
load_string(IDS_UNITNAME + IDM_UNITMM - IDM_UNITPT, tbuf, sizeof(tbuf));
convert_widechar(mmbuf, tbuf, sizeof(mmbuf));
while (*p && (*p == ' '))
p++;
val = (float)atof(p);
while (*p && (isdigit((int)(*p)) || (*p == '.')))
p++;
while (*p && (*p == ' '))
p++;
i = 0;;
while (p[i] && (isalpha((int)(p[i]))))
i++;
if (p[i])
i++;
if ((strnicmp(p, ptbuf, max(i, (int)strlen(ptbuf))) == 0) ||
(strnicmp(p, "pt", 2) == 0)) {
/* do nothing */
}
else if ((strnicmp(p, inchbuf, max(i, (int)strlen(inchbuf))) == 0) ||
(strnicmp(p, "in", 2) == 0))
val *= 72.0;
else if ((strnicmp(p, mmbuf, max(i, (int)strlen(mmbuf))) == 0) ||
(strnicmp(p, "mm", 2) == 0))
val *= (float)(72.0 / 25.4);
else if (strnicmp(p, "cm", 2) == 0)
val *= (float)(72.0 / 2.54);
else if (strnicmp(p, "m", 1) == 0)
val *= (float)(72.0 / 0.0254);
else if (strnicmp(p, "ft", 2) == 0)
val *= (float)(72.0 * 12.0);
return val;
}
static void put_points(char *buf, int len, float n)
{
TCHAR tbuf[32];
char ubuf[32];
float factor = 1.0;
if (len < 1)
return;
buf[0] = '\0';
ubuf[0] = '\0';
load_string(IDS_UNITNAME + option.unit - IDM_UNITPT, tbuf, sizeof(tbuf));
convert_widechar(ubuf, tbuf, sizeof(ubuf));
if (len < 32 + (int)strlen(ubuf))
return;
switch (option.unit) {
case IDM_UNITMM:
factor = (float)(25.4 / 72.0);
break;
case IDM_UNITINCH:
factor = (float)(1.0 / 72.0);
break;
case IDM_UNITPT:
default:
factor = 1.0;
}
sprintf(buf, "%g %s", n*factor, ubuf);
}
/* get user defined size */
BOOL
gsview_usersize()
{
TCHAR prompt[MAXSTR];
char answer[MAXSTR];
nHelpTopic = IDS_TOPICMEDIA;
load_string(IDS_USERWIDTH, prompt, sizeof(prompt)/sizeof(TCHAR)-1);
put_points(answer, sizeof(answer), (float)option.user_width);
if (!query_string(prompt,answer))
return FALSE;
option.user_width = (int)(get_points(answer) + 0.5);
gsview_check_usersize();
load_string(IDS_USERHEIGHT, prompt, sizeof(prompt)/sizeof(TCHAR)-1);
put_points(answer, sizeof(answer), (float)option.user_height);
if (!query_string(prompt,answer))
return FALSE;
option.user_height = (int)(get_points(answer) + 0.5);
if ((option.user_width==0) || (option.user_height == 0)) {
option.user_width = 640;
option.user_width = 480;
}
gsview_check_usersize();
return TRUE;
}
void
gsview_check_usersize()
{
if ( (option.user_width > 5669) || (option.user_height > 5669) ) {
gserror(IDS_LARGEMEDIA, NULL, 0, SOUND_ERROR);
}
}
/* unzoom when redisplaying or changing page */
void
gsview_unzoom(void)
{
if (zoom) {
zoom = FALSE;
gs_resize();
}
}
void
gsview_language(int new_language)
{
if (load_language(new_language)) {
check_menu_item(IDM_LANGMENU, option.language, FALSE);
option.language = new_language;
check_menu_item(IDM_LANGMENU, option.language, TRUE);
change_language();
}
}
void
gsview_goto_page(int pagenum)
{
if (not_dsc())
return;
if (psfile.dsc->page_count == 0)
return;
if (pagenum > (int)psfile.dsc->page_count) {
pagenum = psfile.dsc->page_count;
play_sound(SOUND_NOPAGE);
}
else if (pagenum < 1) {
pagenum = 1;
play_sound(SOUND_NOPAGE);
}
gsview_unzoom();
pending.pagenum = pagenum;
pending.now = TRUE;
history_add(pagenum);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -