home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
magazine
/
pcmagazi
/
1989
/
09
/
moudemo2.c
< prev
next >
Wrap
Text File
|
1989-01-02
|
3KB
|
130 lines
/*
MOUDEMO2.C --- Simple OS/2 Demo of Mouse Subsystem
Copyright (C) 1989 Ziff Davis Communications
PC Magazine * Ray Duncan
Compile: CL MOUDEMO2.C
Usage: MOUDEMO2 (press both mouse buttons to exit)
*/
#include <stdio.h>
void cls(void); /* local function prototypes */
void gotoxy(int, int);
int mopen(int *);
void mclose(int);
void mread(int, int *, int *, int *);
void mhide(int);
void munhide(int);
#define API unsigned extern far pascal
API MouClose(int); /* OS/2 function prototypes */
API MouDrawPtr(int);
API MouOpen(void far *, int far *);
API MouReadEventQue(void far *, int far *, int);
API MouRemovePtr(void far *, int);
struct _MouEvent { unsigned Flags;
long Timestamp;
int Row;
int Col;
} ;
main()
{
int x,y,buttons; /* mouse state variables */
int mhandle; /* mouse handle from mopen */
if(! mopen(&mhandle)) /* exit if no mouse */
{
printf("\nMouse not available\n");
exit(1);
}
cls(); /* clear the screen */
gotoxy(45,0); /* and show help info */
puts("Press Both Mouse Buttons To Exit");
munhide(mhandle); /* make mouse cursor visible */
do { /* read mouse position & buttons */
mread(mhandle, &x, &y, &buttons);
gotoxy(0,0); /* display mouse status */
printf("X = %3d Y = %3d", x, y);
} while(buttons != 3); /* exit if both buttons down */
mhide(mhandle); /* hide mouse cursor */
mclose(mhandle); /* release mouse driver */
cls(); /* clear screen and exit */
}
/*
Clear the screen and position cursor at (x,y) = (0,0)
*/
void cls(void)
{
printf("\x01b[2J");
}
/*
Position cursor to (x,y); ANSI driver uses 1-based coordinates.
*/
void gotoxy(int x, int y)
{
printf("\x01b[%d;%dH",y+1,x+1);
}
/*
Initialize mouse driver, return mouse status and handle.
Status is true if mouse available, false if not.
*/
int mopen(int *handle)
{
return(! MouOpen(0L, handle)); /* open mouse, save handle, */
} /* and return status */
/*
Make mouse pointer visible.
*/
void munhide(handle)
{
MouDrawPtr(handle);
}
/*
Hide mouse pointer. For the purposes of this demo, we
assume an 80-by-25 text mode.
*/
void mhide(handle)
{
static int HideArea[4] = { 0, 0, 24, 79 } ;
MouRemovePtr(HideArea, handle);
}
/*
Read mouse position and button status.
*/
void mread(int handle, int *x, int *y, int *buttons)
{
int WaitOption = 1 ; /* wait for a mouse event */
struct _MouEvent MouEvent; /* receives mouse information */
MouReadEventQue(&MouEvent, &WaitOption, handle);
*x = MouEvent.Col; /* return mouse coordinates */
*y = MouEvent.Row; /* and button status */
*buttons = ((MouEvent.Flags&4)>>2) | ((MouEvent.Flags&0x10)>>3) & 3;
}
/*
Release mouse driver.
*/
void mclose(handle)
{
MouClose(handle);
}