Files
Arquivotheca.SunOS-4.1.4/usr.lib/libsunwindow/win/win_misc.c
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

145 lines
2.3 KiB
C

#ifndef lint
#ifdef sccs
static char sccsid[] = "@(#)win_misc.c 1.1 94/10/31 Copyr 1984 Sun Micro";
#endif
#endif
/*
* Copyright (c) 1984 by Sun Microsystems, Inc.
*/
/*
* Win_misc.c: Implement the misc functions of the win_struct.h interface.
* Error handling done here.
*/
#include <sys/types.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <sunwindow/rect.h>
#include <sunwindow/cms.h>
#include <sunwindow/win_screen.h>
#include <sunwindow/win_input.h>
#include <sunwindow/win_ioctl.h>
#include <sunwindow/win_struct.h>
extern char *sprintf();
/*
* Misc operations.
*/
int
win_getuserflags(windowfd)
int windowfd;
{
int flags;
(void)werror(ioctl(windowfd, WINGETUSERFLAGS, &flags), WINGETUSERFLAGS);
return(flags);
}
win_setuserflags(windowfd, flags)
int windowfd;
int flags;
{
(void)werror(ioctl(windowfd, WINSETUSERFLAGS, &flags), WINSETUSERFLAGS);
return;
}
int
win_getowner(windowfd)
int windowfd;
{
int pid;
(void)werror(ioctl(windowfd, WINGETOWNER, &pid), WINGETOWNER);
return(pid);
}
win_setowner(windowfd, pid)
int windowfd;
int pid;
{
/*
* Don't set if pid is 0
*/
if (pid)
(void)werror(ioctl(windowfd, WINSETOWNER, &pid), WINSETOWNER);
return;
}
win_print(windowfd)
int windowfd;
{
(void)werror(ioctl(windowfd, WINPRINT, 0), WINPRINT);
}
/*
* Error handling
*/
int win_errordefault();
extern int (*win_error)();
werror(errnum, winopnum)
int errnum, winopnum;
{
win_error(errnum, winopnum);
return;
}
int
(*win_errorhandler(win_errornew))()
int (*win_errornew)();
{
int (*win_errortemp)() = win_error;
win_errortemp = win_error;
win_error = win_errornew;
return(win_errortemp);
}
win_errordefault(errnum, winopnum)
int errnum, winopnum;
{
char message[30];
switch (errnum) {
case 0:
return;
case -1:
/*
* Probably an ioctl err (could check winopnum)
*/
message[0] = '\0';
(void)sprintf(message, "WIN ioctl number %lx", winopnum);
perror(message);
return;
default:
(void)fprintf(stderr, "Window operation %d produced error %d\n",
winopnum, errnum);
}
}
/*
* Utilities
*/
win_setuserflag(windowfd, flag, value)
int windowfd;
int flag;
bool value;
{
int flags = win_getuserflags(windowfd);
if (flag <= WUF_RESERVEDMAX)
return(-1);
else {
if (value)
flags |= flag;
else
flags &= ~flag;
(void)win_setuserflags(windowfd, flags);
}
return(0);
}