home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1992 September
/
Simtel20_Sept92.cdr
/
msdos
/
turbo_c
/
tchk21ex.arc
/
DEMOMOUS.C
< prev
next >
Wrap
C/C++ Source or Header
|
1989-06-06
|
11KB
|
302 lines
/* TCHK 2.1 - Howard Kapustein's Turbo C library 6-6-89 */
/* Copyright (C) 1988,1989 Howard Kapustein. All rights reserved. */
/* demolite.c - used for testing TCHK mouse functions */
#include <howard.h>
#include <mousehk.h>
#include <video.h>
#include <stdio.h>
#include <stdlib.h>
#include <keyboard.h>
#include <keycode.h>
#include <dos.h>
/* Global variables */
boolean ishidden, restrict = FALSE;
int left, top, right, bottom;
/* function prototypes */
void main();
void Setup(void);
void TestCoord(void);
void RestrictCoord(void);
void TestCursor(void);
void Bye(void);
void main()
{
Setup();
TestCoord();
TestCursor();
Bye();
}
void Setup(void)
{
extern int _mouse2;
extern boolean ishidden; /* is Mouse cursor hidden */
if (!ismouse()) { /* check for mouse */
printf("This demo requires a mouse\n");
exit(0);
}
cursor_off();
MCursorOn(); /* ismouse() sets internal mouse cursor variable to -1, we want it on */
ishidden = FALSE;
cls();
}
void TestCoord(void)
{
extern int _mouse2, _mouse3, _mouse4;
extern boolean ishidden, restrict;
int x,y, status, key;
char savescreen[scrbuff(1,1,80,24)];
boolean done;
gotohv(0,0);
printf("Button pressed at: \n");
printf("Mickeys from last: \n");
gotohv(60,0);
printf("Current: ");
gotohv(0,3);
printf("Press left button to end\n");
printf("Press right button to display mouse coordinates\n");
gotohv(0,6);
printf("Press left/right arrow to change horizontal mickey/pixel ratio\n");
printf("Press up/down arrow to change vertical mickey/pixel ratio\n");
gotohv(0,9);
printf("Press C to hide cursor\n");
printf("Press R to restrict mouse range\n");
printf("Press ALT-R to reset the mouse driver\n");
printf("Press ESC to abort demo\n");
MCursorText(FALSE,0x00FF,0x1F00);
status = MButtonStatus(); /* clear button status */
if (status & LBPRESSED) {
MButtonPress(LEFTBUTTON);
MButtonRelease(LEFTBUTTON);
}
if (status & RBPRESSED) {
MButtonPress(RIGHTBUTTON);
MButtonRelease(RIGHTBUTTON);
}
for (done = FALSE; !done;) {
status = MButtonStatus();
x = _mouse3; y = _mouse4;
delay(100); /* needed to insure cursor is displayed on screen */
/* don't believe me? comment out this function and see */
/* See note below for more details */
if ((key = inkeyc(FALSE)) != 0) {
switch (key) {
case LEFTARROW: { MGetSensitivity();
_mouse2--; /* beware of underflow */
MSetRatio(_mouse2,_mouse3);
break; }
case RIGHTARROW:{ MGetSensitivity();
_mouse2++; /* beware of overflow */
MSetRatio(_mouse2,_mouse3);
break; }
case DOWNARROW: { MGetSensitivity();
_mouse3--; /* beware of underflow */
MSetRatio(_mouse2,_mouse3);
break; }
case UPARROW: { MGetSensitivity();
_mouse3++; /* beware of overflow */
MSetRatio(_mouse2,_mouse3);
break; }
case 'C': { ishidden = !ishidden;
ishidden ? MCursorOff() : MCursorOn();
gotohv(0,9);
printf(ishidden ? "Press C to show cursor" :
"Press C to hide cursor");
break; }
case 'R': { restrict = !restrict;
if (restrict) {
gettext(1,1,80,24,savescreen);
RestrictCoord();
puttext(1,1,80,24,savescreen);
gotohv(60,1);
printf("(%3d,%3d) (%3d,%3d)",left/8,top/8,right/8,bottom/8);
gotohv(0,10);
printf("Press R to unrestrict mouse range\n");
} else {
MCursorRangex(0,79*8); /* each character is 8x8 pixels */
MCursorRangey(0,24*8);
gotohv(60,1);
printf(" ");
gotohv(0,10);
printf("Press R to restrict mouse range \n");
}
break; }
case ALT_R: { MouseReset();
MCursorText(FALSE,0x00FF,0x1F00);
if (!ishidden)
MCursorOn();
break; }
case ESC: cursor_on(); exit(1);
}
}
gotohv(69,0);
printf("(%3d,%3d)",x/8,y/8);
if (status & RBPRESSED) {
MButtonPress(RIGHTBUTTON);
gotohv(20,0);
printf("(%4d,%4d)",_mouse3/8,_mouse4/8);
MMickeysMovedx();
gotohv(20,1);
printf("(%4d,%4d) ",_mouse3,_mouse4);
}
if ((status & LBPRESSED) && (MButtonRelease(LEFTBUTTON) != 0)) {
/* left button pressed AND released */
MButtonPress(LEFTBUTTON); /* clear Left Button Presses */
done = TRUE;
break;
}
}
}
void RestrictCoord(void)
{
extern int left,top,right,bottom;
int status;
cls();
printf("We're about to restrict the mouse coordinates\n");
printf("\nMove the mouse to the upper left corner of the boundary\n");
printf(" and press the right button\n");
if (MButtonStatus() & RBPRESSED) { /* clear button status */
MButtonPress(RIGHTBUTTON);
MButtonRelease(RIGHTBUTTON);
}
do {
status = MButtonStatus();
if (status & RBPRESSED) {
MButtonPress(RIGHTBUTTON);
left = _mouse3;
top = _mouse4;
}
if ((status & RBPRESSED) && (MButtonRelease(RIGHTBUTTON)!=0)) {
MButtonRelease(RIGHTBUTTON); /* clear Right Button Presses */
break;
}
} while (TRUE);
gotohv(0,5);
printf("\nMove the mouse to the lower right corner of the boundary\n");
printf(" and press the right button\n");
if (MButtonStatus() & RBPRESSED) { /* clear button status */
MButtonPress(RIGHTBUTTON);
MButtonRelease(RIGHTBUTTON);
}
do {
status = MButtonStatus();
if (status & RBPRESSED) {
MButtonPress(RIGHTBUTTON);
right = _mouse3;
bottom = _mouse4;
}
if ((status & RBPRESSED) && (MButtonRelease(RIGHTBUTTON)!=0)) {
MButtonRelease(RIGHTBUTTON); /* clear Right Button Presses */
break;
}
} while (TRUE);
MCursorRangex(left,right); /* restrict cursor range */
MCursorRangey(top,bottom);
MButtonPress(LEFTBUTTON); /* clear internal mouse counters */
MButtonRelease(LEFTBUTTON);
MMickeysMovedx();
}
void TestCursor(void)
{
extern unsigned int _Bitmap_StandardCursor[],
_Bitmap_UpArrow[],
_Bitmap_LeftArrow[],
_Bitmap_CheckMark[],
_Bitmap_PointingHand[],
_Bitmap_DiagonalCross[],
_Bitmap_RectangularCross[],
_Bitmap_Hourglass[];
int savemode, status, gcursor, rightpressed=0;
boolean done;
unsigned int *bitmap;
cls();
if ((savemode = MODE) == 7) {
printf("Sorry, but the cursor test requires a graphic (non-mono) display");
cursor_on();
exit(99);
}
set_mode(6);
printf("Press left button to quit\n");
printf("Press right button to change cursor\n");
ismouse();
MCursorOn();
status = MButtonStatus(); /* clear button status */
if (status & LBPRESSED) {
MButtonPress(LEFTBUTTON);
MButtonRelease(LEFTBUTTON);
}
if (status & RBPRESSED) {
MButtonPress(RIGHTBUTTON);
MButtonRelease(RIGHTBUTTON);
}
MCursorGraphic((int)_Bitmap_StandardCursor[0],
(int)_Bitmap_StandardCursor[1],
_Bitmap_StandardCursor+2);
for (gcursor = 0, done = FALSE; !done;) {
status = MButtonStatus();
if ((rightpressed > 0) || (status & RBPRESSED)) {
if (rightpressed == 0)
rightpressed = MButtonPress(RIGHTBUTTON);
if (MButtonRelease(RIGHTBUTTON)) {
rightpressed = 0;
gcursor = (++gcursor) % 8;
switch (gcursor) {
case 0: bitmap = _Bitmap_StandardCursor; break;
case 1: bitmap = _Bitmap_UpArrow; break;
case 2: bitmap = _Bitmap_LeftArrow; break;
case 3: bitmap = _Bitmap_CheckMark; break;
case 4: bitmap = _Bitmap_PointingHand; break;
case 5: bitmap = _Bitmap_DiagonalCross; break;
case 6: bitmap = _Bitmap_RectangularCross; break;
case 7: bitmap = _Bitmap_Hourglass; break;
}
MCursorGraphic((int)*bitmap,(int)*(bitmap+1),bitmap+2);
}
}
if ((status & LBPRESSED) && (MButtonRelease(LEFTBUTTON) != 0)) {
/* left button pressed AND released */
MButtonPress(LEFTBUTTON); /* clear Left Button Presses */
done = TRUE;
break;
}
}
set_mode(savemode);
}
void Bye(void)
{
extern unsigned char _TCHKmajor, _TCHKminor;
cls();
printf("Thank you for sampling TCHK %u.%u\n",_TCHKmajor,_TCHKminor);
exit(0);
}