==== MouOpen ====
**Bindings**: [[open#C bindings|C]], [[open#MASM bindings|MASM]]
This call opens the mouse device for the current session. 
//MouOpen// (**DriverName, DeviceHandle**) 
//DriverName// (**PSZ**) - input 
//DriverName// is a far pointer to an **ASCIIZ** string in application storage containing the name of the pointer draw device driver to be used as the pointer-image drawing routine for this session. 
The name of the device driver must be included in the **CONFIG.SYS** file at system start-up time. Applications that use the default pointer draw device driver supplied by the system must push a double-word of 0s in place of an address. 
//DriverName// has a different definition when the caller is the Base Video Subsystem (**BVS**). In this case the selector portion of the far address is zero. The offset portion is non-zero and contains a display configuration number (sequentially numbered where 1 is the first display configuration). The [[open|MouOpen]] call issued by **BVS** is executed on the [[en:ibm:prcp:vio:setmode|VioSetMode]] path. Using the display configuration number passed on the [[open|MouOpen]] call, the Base Mouse Subsystem can detect a change in display configurations. This form of the MouOpen call is not recommended for applications. Applications should either push the far address of an **ASCIIZ** pointer draw device driver name or push two words of zeros. 
//DeviceHandle// (**PHMOU**) - output 
Address of a 1-word value that represents the mouse handle returned to the application. 
//rc// (**USHORT**) - return 
Return code descriptions are: 
|0 |NO_ERROR |
|385 |ERROR_MOUSE_NO_DEVICE |
|390 |ERROR_MOUSE_INV_MODULE_PT |
|466 |ERROR_MOU_DETACHED |
|501 |ERROR_MOUSE_NO_CONSOLE |
|505 |ERROR_MOU_EXTENDED_SG |
**Remarks**
[[open|MouOpen]] initializes the Mouse functions to a known state. The application may have to issue additional mouse functions to establish the environment it desires. For example, after the [[open|MouOpen]], the collision area is defined to be the size of the entire display. Therefore, to get the pointer to be displayed, the application must issue a [[drawptr|MouDrawPtr]] to remove the collision area. 
The state of the mouse after the first [[open|MouOpen]] is: 
  * Row/Col scale factors set to 16/8. (See [[setscalefact|MouSetScaleFact]].) 
  * All events reported. (See [[seteventmask|MouSetEventMask]].) 
  * Empty event queue. (See [[readeentque|MouReadEventQue]] and [[getnumqueel|MouGetNumQueEl]].) 
  * All user settable Device Status bits reset. (Set to zero. See [[setdevstatus|MouSetDevStatus]].) 
  * Pointer set to center of screen if valid display mode is set. (See [[setptrpos|MouSetPtrPos]].) 
  * Pointer shape set to the default for the pointer device driver currently registered in the session. (See [[setptrshape|MouSetPtrShape]].) 
  * Collision area equal to full screen. (See [[drawptr|MouDrawPtr]] and [[removeptr|MouRemovePtr]].) 
=== C bindings ===
#define INCL_MOU
USHORT  rc = MouOpen(DriverName, DeviceHandle);
PSZ              DriverName;    /* Pointer draw driver name */
PHMOU            DeviceHandle;  /* Mouse device handle */
USHORT           rc;            /* return code */
=== MASM bindings ===
EXTRN  MouOpen:FAR
INCL_MOU            EQU 1
PUSH@  ASCIIZ  DriverName    ;Pointer draw driver name
PUSH@  WORD    DeviceHandle  ;Mouse device handle
CALL   MouOpen
Returns WORD