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

📄 emptysw.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef lint#ifdef sccsstatic	char sccsid[] = "@(#)emptysw.c 1.1 92/07/30 Copyr 1986 Sun Micro";#endif#endif/* * Copyright (c) 1986 by Sun Microsystems, Inc. *//* * Implements library routines for the full screen access facility */#include <sys/types.h>#include <sys/time.h>#include <errno.h>#include <pixrect/pixrect.h>#include <pixrect/pr_util.h>#include <pixrect/memvar.h>#include <sunwindow/notify.h>#include <sunwindow/rect.h>#include <sunwindow/rectlist.h>#include <sunwindow/pixwin.h>#include <sunwindow/win_input.h>#include <sunwindow/win_struct.h>#include <sunwindow/win_cursor.h>#include "sunwindow/sv_malloc.h"#include <suntool/emptysw.h>#include <suntool/tool.h>extern	int errno;static	short esw_cursorimage[15] = {	0x0100,	/*       #       */	0x0100,	/*       #       */	0x0100,	/*       #       */	0x0100,	/*       #       */	0x0100,	/*       #       */	0x0100,	/*       #       */	0x0000,	/*               */	0xfc7e,	/*######   ######*/	0x0000,	/*               */	0x0100,	/*       #       */	0x0100,	/*       #       */	0x0100,	/*       #       */	0x0100,	/*       #       */	0x0100,	/*       #       */	0x0100,	/*       #       */};mpr_static(esw_mpr, 16, 15, 1, esw_cursorimage);struct	cursor esw_cursor = { 7, 7, PIX_SRC^PIX_DST, &esw_mpr};short	_esw_imagegray[16]={	0xaaaa,	0x5555,	0xaaaa,	0x5555,	0xaaaa,	0x5555,	0xaaaa,	0x5555,	0xaaaa,	0x5555,	0xaaaa,	0x5555,	0xaaaa,	0x5555,	0xaaaa,	0x5555	};mpr_static(_esw_pixrectgray, 16, 16, 1, _esw_imagegray);/*ARGSUSED*/static Notify_valueesw_event(esw, event, arg, type)	Emptysw *esw;	Event *event;	Notify_arg arg;	Notify_event_type type;{	switch (event_id(event)) {	case WIN_REPAINT:		esw_display(esw);		return(NOTIFY_DONE);	case WIN_RESIZE:		/* Will clear and reformat on up comming WIN_REPAINT */		/* VV Fall thru VV */	default:		return(NOTIFY_IGNORED);	}}static Notify_valueesw_destroy(esw, status)	Emptysw *esw;	Destroy_status status;{	if (status != DESTROY_CHECKING) {		(void)win_unregister((Notify_client)(LINT_CAST(esw)));		(void)pw_close(esw->em_pixwin);		free((char *)(LINT_CAST(esw)));		return(NOTIFY_DONE);	}	return(NOTIFY_IGNORED);}/*ARGSUSED*/Emptysw *esw_begin(tool, name, width, height, string, font)	struct	tool *tool;	char	*name;	short	width, height;	char	*string;	struct	pixfont *font;{	struct	toolsw *toolsw;	Emptysw	*esw;	/* Create subwindow */	if ((toolsw = tool_createsubwindow(tool, name, width, height)) ==	    (struct toolsw *)0)		return((Emptysw *) 0);	/* Create empty subwindow */	if ((esw = esw_init(toolsw->ts_windowfd)) ==	    (Emptysw *)0)		return((Emptysw *) 0);	/* Register with window manager */	if (win_register((Notify_client)(LINT_CAST(esw)), 		esw->em_pixwin, esw_event, esw_destroy, 0))		return((Emptysw *) 0);	/* Tool wouldn't wait for window input if no selected routine */	toolsw->ts_data = (caddr_t) esw;	return(esw);}struct	emptysubwindow *esw_init(windowfd)	int	windowfd;{	struct	emptysubwindow *esw;	esw = (struct emptysubwindow *) (LINT_CAST(	    sv_calloc(1, sizeof (struct emptysubwindow))));	esw->em_windowfd = windowfd;	if ((esw->em_pixwin = pw_open_monochrome(windowfd))==(struct pixwin *)0)		return((struct  emptysubwindow *)0);	(void)win_setcursor(windowfd, &esw_cursor);	return(esw);}staticesw_should_not_paint(esw)	Emptysw *esw;{	int	mypid = getpid(), ownerpid = win_getowner(esw->em_windowfd);	struct	inputmask im, imflush;	if (mypid != ownerpid) {		if (ownerpid == 0) {			/*			 * Take back window because ownerpid doesn't exit.			 */			(void)win_setowner(esw->em_windowfd, mypid);			/*			 * Reset input mask and flush input buffer			 */			(void)input_imnull(&im);			imflush = im;			imflush.im_flags |= IM_ASCII;			(void)win_setinputmask(esw->em_windowfd, &im, &imflush,			     WIN_NULLLINK);			(void)win_setcursor(esw->em_windowfd, &esw_cursor);		} else			/*			 * Ownerpid exists so do nothing.			 */			return (1);	}	return (0);}staticesw_display(esw)	Emptysw *esw;{	struct	rect rect;	if (esw_should_not_paint(esw))		return;	(void)win_getsize(esw->em_windowfd, &rect);	(void)pw_replrop(esw->em_pixwin, 0, 0,	    rect.r_width, rect.r_height, PIX_SRC, &_esw_pixrectgray, 0, 0);	return;}esw_done(esw)	Emptysw *esw;{	(void)pw_close(esw->em_pixwin);	free((char *)(LINT_CAST(esw)));}/* Non-notifier based code. */esw_handlesigwinch(esw)	Emptysw *esw;{	struct	rect rect;	if (esw_should_not_paint(esw))		return;	(void)win_getsize(esw->em_windowfd, &rect);	(void)pw_damaged(esw->em_pixwin);	(void)pw_replrop(esw->em_pixwin, 0, 0,	    rect.r_width, rect.r_height, PIX_SRC, &_esw_pixrectgray, 0, 0);	(void)pw_donedamaged(esw->em_pixwin);	return;}struct	toolsw *esw_createtoolsubwindow(tool, name, width, height)	struct	tool *tool;	char	*name;	short	width, height;{	struct	toolsw *toolsw;	/*	 * Create subwindow	 */	toolsw = tool_createsubwindow(tool, name, width, height);	/*	 * Setup empty subwindow	 */	if ((toolsw->ts_data = (caddr_t) esw_init(toolsw->ts_windowfd)) ==	    (caddr_t)0)		return((struct  toolsw *)0);	toolsw->ts_io.tio_handlesigwinch = esw_handlesigwinch;	toolsw->ts_destroy = esw_done;	return(toolsw);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -