ftp.nice.ch/pub/next/developer/languages/c/gcc.2.7.2.2.I.b.tar.gz#/lib/gcc-lib/i386-next-nextstep3/2.7.2.2.f.2/include/bsd/dev/ev_types.h

This is ev_types.h in view mode; [Download] [Up]

/******************************************************************************
	ev_types.h
	Data types for the events status driver.
	This file contains public API.
	mpaque 11Oct91
	
	Copyright 1991 NeXT Computer, Inc.
	
	Modified:
	
******************************************************************************/

#ifndef _DEV_EV_TYPES_
#define _DEV_EV_TYPES_

#import <mach/boolean.h>

/* Maximum length of SetMouseScaling arrays */
#define NX_MAXMOUSESCALINGS 20

typedef struct evsioKeymapping		/* Match old struct names in kernel */
{
    int size;
    char *mapping;
} NXKeyMapping;

typedef struct evsioMouseScaling	/* Match old struct names in kernel */
{
    int numScaleLevels;
    short scaleThresholds[NX_MAXMOUSESCALINGS];
    short scaleFactors[NX_MAXMOUSESCALINGS];
} NXMouseScaling;

typedef enum {
    NX_OneButton,
    NX_LeftButton,
    NX_RightButton
} NXMouseButton;


/*
 * NXEventSystemInfo() information structures.  These are designed to
 * allow for expansion.
 *
 * The current implementation of NXEventSystemInfo() uses an ioctl call.
 * THIS WILL CHANGE.
 */
 
/*
 * Generic query max size and typedefs.
 *
 *	The maximum size is selected to support anticipated future extensions
 *	of request flavors.  Certain flavors planned for future releases may 
 *	require roughtly 800 ints to represent.  We allow a little extra, in
 *	case further growth is needed.
 */
typedef int *NXEventSystemInfoType;
#define NX_EVS_INFO_MAX		(1024)	/* Max array size */
typedef int NXEventSystemInfoData[NX_EVS_INFO_MAX];

/* Event System Devices query */
#define NX_EVS_DEVICE_MAX	16

	/* Interface types */
#define NX_EVS_DEVICE_INTERFACE_OTHER		0
#define NX_EVS_DEVICE_INTERFACE_NeXT		1 /* NeXT custom, in older sys*/
#define NX_EVS_DEVICE_INTERFACE_ADB		2 /* NeXT/fruit keybds/mice*/
#define NX_EVS_DEVICE_INTERFACE_ACE		3 /* For x86 PC keyboards*/
#define NX_EVS_DEVICE_INTERFACE_SERIAL_ACE	4 /* For PC serial mice */
#define NX_EVS_DEVICE_INTERFACE_BUS_ACE		5 /* For PC bus mice */
#define NX_EVS_DEVICE_INTERFACE_HIL		6 /* For HIL hp keyboard */
#define NX_EVS_DEVICE_INTERFACE_TYPE5		7 /* For Sun Type5 keyboard*/

/*
 * Note! if any new interface types are added above, the following
 * definition of the number of interfaces supported must reflect this.
 * This is used in the libkeymap project (storemap.c module) which needs
 * to be cognizant of the number of new devices coming online
 * via support for heterogeneous architecture platforms.
 * e.g., PCs, HP's HIL, Sun's Type5 keyboard,...
 */
#define NUM_SUPPORTED_INTERFACES	(NX_EVS_DEVICE_INTERFACE_TYPE5 + 1)
					/* Other, NeXT, ADB, ACE,...*/

	/* Device types */
#define NX_EVS_DEVICE_TYPE_OTHER	0
#define NX_EVS_DEVICE_TYPE_KEYBOARD	1
#define NX_EVS_DEVICE_TYPE_MOUSE	2	/* Relative position devices*/
#define NX_EVS_DEVICE_TYPE_TABLET	3	/* Absolute position devices*/

typedef struct {
	int	interface;	/* NeXT, ADB, other */
	int	interface_addr;	/* Device address on the interface */
	int	dev_type;	/* Keyboard, mouse, tablet, other */
	int	id;		/* manufacturer's device handler ID */
} NXEventSystemDevice;

typedef struct {
	NXEventSystemDevice	dev[NX_EVS_DEVICE_MAX];
} NXEventSystemDeviceList;

#define __OLD_NX_EVS_DEVICE_INFO		1
#define NX_EVS_DEVICE_INFO			"Evs_EventDeviceInfo"
#define NX_EVS_DEVICE_INFO_COUNT \
	(sizeof (NXEventSystemDeviceList) / sizeof (int))

/*
 * Multiprocessor locks used within the shared memory area between the
 * kernel and event system.  These must work in both user and kernel mode.
 * 
 * These routines are public, for the purpose of writing frame buffer device
 * drivers which handle their own cursors.  Certain architectures define a
 * generic display class which handles cursor drawing and is subclassed by
 * driver writers.  These drivers need not be concerned with the following
 * types and definitions.
 *
 * The ev_lock(), ev_unlock(), and ev_try_lock() functions are available only
 * to drivers built in or dynamically loaded into the kernel, and to DPS
 * drivers built in or dynamically loaded into the Window Server.  They do not
 * exist in any shared library.
 */
#ifdef hppa
/*
** On HPPA, the load&clear command is used for semaphores.  This command
** requires that the address referenced be 16 byte aligned.  Therefore,
** make ev_lock_data_t an array of 4 words so that we are sure to have an
** aligned word to use.
*/
typedef volatile struct {
    int lock[4];  /* 4 words so that we have one aligned to 16 bytes! */
} ev_lock_data_t;
typedef ev_lock_data_t	*ev_lock_t;

#define ev_init_lock(x)	(*((volatile int *)(((int)(x) + 0x0c) & ~0x0f))  = 1)
#define ev_is_locked(x)	(*((volatile int *)(((int)(x) + 0x0c) & ~0x0f)) == 0)
#else /* hppa */
typedef volatile int	ev_lock_data_t;
typedef ev_lock_data_t	*ev_lock_t;

#define ev_init_lock(l)		(*(l) = (ev_lock_data_t)0)
#define ev_is_locked(l)		(*(l) != (ev_lock_data_t)0)
#endif /* hppa */

extern void ev_lock(ev_lock_t l);		/* Spin lock!*/
extern void ev_unlock(ev_lock_t l);
extern boolean_t ev_try_lock(ev_lock_t l);


/* The following typedefs are defined here for compatibility with PostScript */

#if !defined(__Point__) && !defined(BINTREE_H)
#define __Point__
typedef struct { short x, y; } Point;
#endif

#if !defined(__Bounds__) && !defined(BINTREE_H)
#define __Bounds__
typedef struct { short minx, maxx, miny, maxy; } Bounds;
#endif

/*
 * Types used in evScreen protocol compliant operations.
 */

typedef enum {EVNOP, EVHIDE, EVSHOW, EVMOVE, EVLEVEL} EvCmd; /* Cursor state */

#define EV_SCREEN_MIN_BRIGHTNESS	0
#define EV_SCREEN_MAX_BRIGHTNESS	64
/* Scale should lie between MIN_BRIGHTNESS and MAX_BRIGHTNESS */
#define EV_SCALE_BRIGHTNESS( scale, datum ) \
	((((unsigned long)(datum))*((unsigned long)scale)) >> 6)

/*
 * Definition of a tick, as a time in milliseconds. This controls how
 * often the event system periodic jobs are run.  All actual tick times
 * are derived from the nanosecond timer.  These values are typically used
 * as part of computing mouse velocity for acceleration purposes.
 */
#define EV_TICK_TIME		16			/* 16 milliseconds */
#define EV_TICKS_PER_SEC	(1000/EV_TICK_TIME)	/* ~ 62 Hz */
#define EV_NS_TO_TICK(ns)	((ns)>>24)
#define EV_TICK_TO_NS(tick)	(((ns_time_t)(tick))<<24)

/* Mouse Button bits, as passed from an EventSrc to the Event Driver */
#define EV_RB		(0x01)
#define EV_LB		(0x04)
#define EV_MOUSEBUTTONMASK	(EV_LB | EV_RB)

/* Tablet Pressure Constants, as passed from an EventSrc to the Event Driver */
#define EV_MINPRESSURE 0
#define EV_MAXPRESSURE 255

/* Cursor size in pixels */
#define EV_CURSOR_WIDTH		16
#define EV_CURSOR_HEIGHT	16


#endif /* _DEV_EV_TYPES_ */

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.