|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T u
Length: 5169 (0x1431)
Types: TextFile
Names: »util.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z«
└─⟦2109abc41⟧
└─⟦this⟧ »./X.V10R4/libsun/util.c«
#ifndef lint
static char *rcsid_util_c = "$Header: util.c,v 10.4 86/11/29 13:49:21 jg Rel $";
#endif lint
#ifdef sun
/*
* The Sun X drivers are a product of Sun Microsystems, Inc. and are provided
* for unrestricted use provided that this legend is included on all tape
* media and as a part of the software program in whole or part. Users
* may copy or modify these drivers without charge, but are not authorized
* to license or distribute them to anyone else except as part of a product or
* program developed by the user.
*
* THE SUN X DRIVERS ARE PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND
* INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A
* PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE
* PRACTICE.
*
* The Sun X Drivers are provided with no support and without any obligation
* on the part of Sun Microsystems, Inc. to assist in their use, correction,
* modification or enhancement.
*
* SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
* INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THE SUN X
* DRIVERS OR ANY PART THEREOF.
*
* In no event will Sun Microsystems, Inc. be liable for any lost revenue
* or profits or other special, indirect and consequential damages, even if
* Sun has been advised of the possibility of such damages.
*
* Sun Microsystems, Inc.
* 2550 Garcia Avenue
* Mountain View, California 94043
*/
#ifndef lint
static char sccsid[] = "@(#)util.c 2.1 86/01/28 Copyright 1986 Sun Micro";
#endif
/*-
* Copyright (c) 1986 by Sun Microsystems, Inc.
*/
/* util.c Various utilities
*
* SoundBell Generate audible bell
* SetKeyClick Control key click
* SetAutoRepeat Control auto repeat
* SetLockLED Control Lock LED
* SetVideo Disable/enable video
* QueryShape Determine shapes
* ResolveColors does nothing
* StoreColors does nothing
*/
/*
* ToDo:
* SetKeyClick
*/
#include "Xsun.h"
#include <sys/time.h>
extern int vsdev;
/*
* Ring the bell on a sun 120, volume between 0 (quiet) and 7 (loud).
* Need to make the /dev/bell device with
* the same major device number as tty[ab] but with a new minor number.
*
* # /etc/mknod /dev/bell c 12 2
*
* crw-rw-rw- 1 root 12, 0 Jan 6 18:18 /dev/ttya
* crw-rw-rw- 1 root 12, 1 Feb 26 1985 /dev/ttyb
* crw-rw-rw- 1 root 12, 2 Jan 14 08:45 /dev/bell
*
*/
#define RING_ON 0x02 /* Control-B */
#define RING_OFF 0x03 /* Control-C */
#define RING_WAIT 25000 /* microseconds, for volume 1 */
#ifndef NULL
#define NULL 0
#endif
SoundBell (volume)
int volume;
{
static int bell = -1;
int status;
char outbuf[1];
struct timeval ring_time;
if (volume == 0) {
return(0);
}
if (bell < 0) {
bell = open("/dev/bell",2);
if (bell < 0) {
return(1);
}
}
ring_time.tv_sec = 0;
ring_time.tv_usec = RING_WAIT * volume;
outbuf[0] = RING_ON;
status = write(bell,outbuf,1);
if (status < 0) {
return(1);
}
select(0, NULL, NULL, NULL, &ring_time);
outbuf[0] = RING_OFF;
status = write(bell,outbuf,1);
if (status < 0) {
return(1);
}
return (0);
}
/* Set key click, volume between -1 (default), 0 (off) and 8 (loud) */
SetKeyClick (volume)
int volume;
{
return (0);
}
/* Set autorepeat */
SetAutoRepeat (onoff)
int onoff;
{
return (0);
}
int SetVideo(onoff)
int onoff;
{
extern struct pixrect *PixRect;
static int have_saved;
static struct pixrect *saved;
if (have_saved && onoff) {
pr_rop (PixRect, 0, 0, PixRect->pr_width, PixRect->pr_height,
PIX_SRC | PIX_DONTCLIP, saved, 0, 0);
have_saved = 0;
}
else if (!have_saved && !onoff) {
if (saved == NULL)
saved = mem_create(PixRect->pr_width,
PixRect->pr_height, PixRect->pr_depth);
if (saved) {
pr_rop (saved, 0, 0, PixRect->pr_width, PixRect->pr_height,
PIX_SRC | PIX_DONTCLIP, PixRect, 0, 0);
pr_rop (PixRect, 0, 0, PixRect->pr_width,
PixRect->pr_height, PIX_SRC | PIX_DONTCLIP, NULL, 0, 0);
have_saved = 1;
}
}
return(0);
}
QueryShape (shape, width, height)
int shape;
short *width, *height;
{
/* Cursors & tiles unrestricted */
}
SetLockLED (onoff)
int onoff;
{
return (0);
}
ResolveColor (red, green, blue)
unsigned short *red, *green, *blue;
{
*red &= ~0377;
*green &= ~0377;
*blue &= ~0377;
}
StoreColors (count, entries)
int count;
ColorDef *entries;
{
/* XXX - should keep interal shadow of color map and rewrite whole */
extern struct pixrect *PixRect;
while (count--) {
u_char r, g, b;
r = (u_char) (entries->red>>8);
g = (u_char) (entries->green>>8);
b = (u_char) (entries->blue>>8);
pr_putcolormap(PixRect, entries->pixel, 1, &r, &g, &b);
entries++;
}
}
extern u_char InvPix[];
InvertPixelOrder(p, n)
register unsigned short *p;
register int n;
{
for (; n--; p++) {
register unsigned short l = (*p & 0xff), h = (*p >> 8)&0xff;
unsigned short old = *p;
*p = (unsigned short) ((InvPix[l] << 8) | InvPix[h]);
}
}
#endif sun