⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gvccmd.c

📁 GSview 4.6 PostScript previewer。Ghostscript在MS-Windows, OS/2 and Unix下的图形化接口
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -