Import upstream u-boot 1.1.4
[u-boot.git] / board / MAI / bios_emulator / scitech / src / pm / tests / mouse.c
1 /****************************************************************************
2 *
3 *                   SciTech OS Portability Manager Library
4 *
5 *  ========================================================================
6 *
7 *    The contents of this file are subject to the SciTech MGL Public
8 *    License Version 1.0 (the "License"); you may not use this file
9 *    except in compliance with the License. You may obtain a copy of
10 *    the License at http://www.scitechsoft.com/mgl-license.txt
11 *
12 *    Software distributed under the License is distributed on an
13 *    "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
14 *    implied. See the License for the specific language governing
15 *    rights and limitations under the License.
16 *
17 *    The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.
18 *
19 *    The Initial Developer of the Original Code is SciTech Software, Inc.
20 *    All Rights Reserved.
21 *
22 *  ========================================================================
23 *
24 *
25 * Language:     ANSI C
26 * Environment:  any
27 *
28 * Description:  Test program to check the ability to install an assembly
29 *               language mouse interrupt handler. We use assembly language
30 *               as it must be a far function and should swap to a local
31 *               32 bit stack if it is going to call any C based code (which
32 *               we do in this example).
33 *
34 *               Functions tested:   PM_installMouseHandler()
35 *                                   PM_int86()
36 *
37 *
38 ****************************************************************************/
39
40 #include <stdlib.h>
41 #include <stdio.h>
42 #include "pmapi.h"
43
44 volatile long count = 0;
45
46 #pragma off (check_stack)           /* No stack checking under Watcom   */
47
48 void PMAPI mouseHandler(
49     uint mask,
50     uint butstate,
51     int x,
52     int y,
53     int mickeyX,
54     int mickeyY)
55 {
56     mask = mask;                /* We dont use any of the parameters    */
57     butstate = butstate;
58     x = x;
59     y = y;
60     mickeyX = mickeyX;
61     mickeyY = mickeyY;
62     count++;
63 }
64
65 int main(void)
66 {
67     RMREGS          regs;
68     PM_lockHandle   lh;
69
70     printf("Program running in ");
71     switch (PM_getModeType()) {
72         case PM_realMode:
73             printf("real mode.\n\n");
74             break;
75         case PM_286:
76             printf("16 bit protected mode.\n\n");
77             break;
78         case PM_386:
79             printf("32 bit protected mode.\n\n");
80             break;
81         }
82
83     regs.x.ax = 33;     /* Mouse function 33 - Software reset       */
84     PM_int86(0x33,&regs,&regs);
85     if (regs.x.bx == 0) {
86         printf("No mouse installed.\n");
87         exit(1);
88         }
89
90     /* Install our mouse handler and lock handler pages in memory. It is
91      * difficult to get the size of a function in C, but we know our
92      * function is well less than 100 bytes (and an entire 4k page will
93      * need to be locked by the server anyway).
94      */
95     PM_lockCodePages((__codePtr)mouseHandler,100,&lh);
96     PM_lockDataPages((void*)&count,sizeof(count),&lh);
97     if (!PM_setMouseHandler(0xFFFF, mouseHandler)) {
98         printf("Unable to install mouse handler!\n");
99         exit(1);
100         }
101     printf("Mouse handler installed - Hit any key to exit\n");
102     PM_getch();
103
104     PM_restoreMouseHandler();
105     PM_unlockDataPages((void*)&count,sizeof(count),&lh);
106     PM_unlockCodePages((__codePtr)mouseHandler,100,&lh);
107     printf("Mouse handler was called %ld times\n", count);
108     return 0;
109 }