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

📄 swin.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef lint#ifdef sccsstatic	char sccsid[] = "@(#)swin.c 1.1 92/07/30";#endif#endif/* * Sun Microsystems, Inc. *//* * 	Overview:	Set/get runtime SunView controls. *			This is supposed to be the window equivalent of stty. */#include <stdio.h>#include <sunwindow/window_hs.h>#include <sys/file.h>#ifdef STANDALONE#define EXIT(n)		exit(n)#else#define EXIT(n)		return(n)#endif#define	DONT_CARE_SHIFT		-1#define	SHIFT_MASK(bit) (1 << (bit))#ifdef STANDALONEmain(argc, argv)#elseswin_main(argc, argv)#endif	int argc;	char **argv;{	int	parent_fd;	char	parentname[WIN_NAMESIZE];	char	*prog_name = *argv;	Firm_event fe_focus;	int fe_focus_shift = DONT_CARE_SHIFT;	Firm_event fe_restore_focus;	int fe_restore_focus_shift;	struct timeval tv;	/* Determine parent */	if (we_getparentwindow(parentname)) {		(void)fprintf(stderr,		    "%s not passed parent window in environment\n", prog_name);		EXIT(1);	}	/* Open parent window */	if ((parent_fd = open(parentname, O_RDONLY, 0)) < 0) {		(void)fprintf(stderr, "%s (parent) would not open\n", parentname);		EXIT(1);	}	argv++;	argc--;	if (argc == 0)		show_settings(parent_fd);	/* Get application related args */	while (argc > 0 && **argv == '-') {		switch (argv[0][1]) {		case 'c': 	/* Click-to-type */			fe_focus.id = MS_LEFT;			fe_focus.value = 1;			fe_focus_shift = DONT_CARE_SHIFT;			if (win_set_focus_event(parent_fd, &fe_focus,			    fe_focus_shift)) {				perror("win_set_focus_event");				EXIT(1);			}			fe_restore_focus.id = MS_MIDDLE;			fe_restore_focus.value = 1;			fe_restore_focus_shift = DONT_CARE_SHIFT;			if (win_set_swallow_event(parent_fd,			    &fe_restore_focus, fe_restore_focus_shift)) {				perror("win_set_swallow_event");				EXIT(1);			}			tv.tv_usec = 0;			tv.tv_sec = 10;			if (win_set_event_timeout(parent_fd, &tv)) {				perror("win_set_event_timeout");				EXIT(1);			}			break;		case 'g':	/* Get state */			show_settings(parent_fd);			break;		case 'm':	/* Keyboard follows 'm'ouse */			fe_focus.id = LOC_WINENTER;			fe_focus.value = 1;			fe_focus_shift = DONT_CARE_SHIFT;			if (win_set_focus_event(parent_fd, &fe_focus,			    fe_focus_shift)) {				perror("win_set_focus_event");				EXIT(1);			}			fe_restore_focus.id = LOC_WINENTER;			fe_restore_focus.value = 1;			fe_restore_focus_shift = DONT_CARE_SHIFT;			if (win_set_swallow_event(parent_fd,			    &fe_restore_focus, fe_restore_focus_shift)) {				perror("win_set_swallow_event");				EXIT(1);			}			break;		case 'r':	/* Set focus restorer */			get_focus_from_args(&argc, &argv, (short *)&fe_restore_focus.id,			    &fe_restore_focus.value, &fe_restore_focus_shift);			if (win_set_swallow_event(parent_fd,			    &fe_restore_focus, fe_restore_focus_shift)) {				perror("win_set_swallow_event");				EXIT(1);			}			break;		case 's':	/* Set focus changer */			get_focus_from_args(&argc, &argv, (short *)&fe_focus.id,			    &fe_focus.value, &fe_focus_shift);			if (win_set_focus_event(parent_fd, &fe_focus,			    fe_focus_shift)) {				perror("win_set_focus_event");				EXIT(1);			}			break;		case 't': {	/* Set event lock timeout */			if (argc < 2) {				(void)fprintf(stderr, "-t takes a seconds arg\n");				EXIT(1);			}			argv++;			argc--;			tv.tv_usec = 0;			tv.tv_sec = atoi(*argv);			if (win_set_event_timeout(parent_fd, &tv)) {				perror("win_set_event_timeout");				EXIT(1);			}			break;			}		case 'h':	/* Help */		case 'H':	/* Help */		case '?':	/* Help */			usage();			EXIT(0);		default:			;		}		argv++;		argc--;	}	EXIT(0);}staticshow_settings(parent_fd)	int	parent_fd;{	Firm_event focus;	int shift;	struct timeval tv;	if (win_get_focus_event(parent_fd, &focus, &shift)) {		perror("win_get_focus_event");		exit(1);	}	show_focus(focus, shift, "keyboard focus set event");	if (win_get_swallow_event(parent_fd, &focus, &shift)) {		perror("win_get_swallow_event");		exit(1);	}	show_focus(focus, shift, "keyboard focus restore event");	if (win_get_event_timeout(parent_fd, &tv)) {		perror("win_get_event_timeout");		exit(1);	}	(void)fprintf(stderr, "Event timeout secs: %ld\n", tv.tv_sec);}staticusage(){	(void)fprintf(stderr, "Options are\t-c (set `c'lick-to-type)\n");	(void)fprintf(stderr,	  "\t\t-g (`g'et the state of settable options)\n");	(void)fprintf(stderr, "\t\t-h (`h'elp)\n");	(void)fprintf(stderr, "\t\t-m (keyboard follows `m'ouse)\n");	(void)fprintf(stderr,	  "\t\t-r event value shift_state (`r'estore kbd focus event)\n");	(void)fprintf(stderr,	  "\t\t-s event value shift_state (`s'et kbd focus event)\n");	(void)fprintf(stderr, "\t\t-t secs (event lock `t'imeout)\n");	(void)fprintf(stderr,	  "Event samples:\tLOC_WINENTER, MS_LEFT, MS_MIDDLE\n");	(void)fprintf(stderr, "Value samples:\tDOWN, ENTER, UP\n");	(void)fprintf(stderr,	  "Shift_state samples:\tSHIFT_DONT_CARE, SHIFT_ALL_UP, SHIFT_LEFT\n");}staticget_focus_from_args(argc_ptr, argv_ptr, event, value, shift)	int *argc_ptr;	char ***argv_ptr;	register short *event;	register int *value;	register int *shift;{	char str[200];	register char *arg;	if (*argc_ptr < 4) {		(void)fprintf(stderr, "%s arg count error\n", *argv_ptr);		usage();		exit (-1);	}	(*argc_ptr)--;	(*argv_ptr)++;	arg = **argv_ptr;	if (strcmp(arg, "LOC_WINENTER") == 0)		*event = LOC_WINENTER;	else if (strcmp(arg, "MS_LEFT") == 0)		*event = MS_LEFT;	else if (strcmp(arg, "MS_MIDDLE") == 0)		*event = MS_MIDDLE;	else if (strcmp(arg, "MS_RIGHT") == 0)		*event = MS_RIGHT;	else if (sscanf(arg, "BUT%s", str) == 1)		*event = atoi(str)+BUT_FIRST;	else if (sscanf(arg, "KEY_LEFT%s", str) == 1)		*event = atoi(str)+KEY_LEFTFIRST-1;	else if (sscanf(arg, "KEY_RIGHT%s", str) == 1)		*event = atoi(str)+KEY_RIGHTFIRST-1;	else if (sscanf(arg, "KEY_TOP%s", str) == 1)		*event = atoi(str)+KEY_TOPFIRST-1;	else if (strcmp(arg, "KEY_BOTTOMLEFT") == 0)		*event = KEY_BOTTOMLEFT;	else if (strcmp(arg, "KEY_BOTTOMRIGHT") == 0)		*event = KEY_BOTTOMRIGHT;	else		*event = atoi(arg);	(*argc_ptr)--;	(*argv_ptr)++;	arg = **argv_ptr;	if (strcmp(arg, "DOWN") == 0 || strcmp(arg, "Down") == 0 ||	    strcmp(arg, "down") == 0)		*value = 1;	else if (strcmp(arg, "ENTER") == 0 || strcmp(arg, "Enter") == 0 ||	    strcmp(arg, "enter") == 0)		*value = 1;	else if (strcmp(arg, "UP") == 0 || strcmp(arg, "Up") == 0 ||	    strcmp(arg, "up") == 0)		*value = 0;	else		*value = atoi(arg);	(*argc_ptr)--;	(*argv_ptr)++;	arg = **argv_ptr;	if (strcmp(arg, "SHIFT_LEFT") == 0)		*shift = SHIFT_MASK(LEFTSHIFT);	else if (strcmp(arg, "SHIFT_RIGHT") == 0)		*shift = SHIFT_MASK(RIGHTSHIFT);	else if (strcmp(arg, "SHIFT_LEFTCTRL") == 0)		*shift = SHIFT_MASK(LEFTCTRL);	else if (strcmp(arg, "SHIFT_RIGHTCTRL") == 0)		*shift = SHIFT_MASK(RIGHTCTRL);	else if (strcmp(arg, "SHIFT_DONT_CARE") == 0)		*shift = DONT_CARE_SHIFT;	else if (strcmp(arg, "SHIFT_ALL_UP") == 0)		*shift = 0;	else		*shift = atoi(arg);}staticshow_focus(focus, shift, tag)	Firm_event	focus;	int		shift;	char		*tag;{	(void)fprintf(stdout, "State of %s:\n", tag);	(void)fprintf(stdout, "\tId: ");	switch (focus.id) {	case LOC_WINENTER:		(void)fprintf(stdout, "LOC_WINENTER\n");		break;	case MS_LEFT:		(void)fprintf(stdout, "MS_LEFT\n");		break;	case MS_MIDDLE:		(void)fprintf(stdout, "MS_MIDDLE\n");		break;	default: 		(void)fprintf(stdout, "%ld\n", focus.id);		break;	}	(void)fprintf(stdout, "\tValue: ");	switch (focus.value) {	case 0:		(void)fprintf(stdout, "UP\n");		break;	case 1:		(void)fprintf(stdout, "DOWN or ENTER\n");		break;	default:		(void)fprintf(stdout, "%ld\n", focus.value);	}	(void)fprintf(stdout, "\tShift_state: ");	switch (shift) {	case DONT_CARE_SHIFT:		(void)fprintf(stdout, "SHIFT_DONT_CARE\n");		break;	case SHIFT_MASK(LEFTSHIFT):		(void)fprintf(stdout, "SHIFT_LEFT\n");		break;	case SHIFT_MASK(LEFTCTRL):		(void)fprintf(stdout, "SHIFT_LEFTCTRL\n");		break;	case SHIFT_MASK(RIGHTSHIFT):		(void)fprintf(stdout, "SHIFT_RIGHT\n");		break;	case SHIFT_MASK(RIGHTCTRL):		(void)fprintf(stdout, "SHIFT_RIGHTCTRL\n");		break;	case 0:		(void)fprintf(stdout, "SHIFT_ALL_UP\n");		break;	default:		(void)fprintf(stdout, "%lx\n", shift);	}}

⌨️ 快捷键说明

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