/* 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 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); }