home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / t / tel2305s.zip / ENGINE / MOUSE.C < prev    next >
C/C++ Source or Header  |  1991-10-20  |  4KB  |  179 lines

  1. /*  Mouse routines for NCSA Telnet */
  2. /* Andrew Tridgell 10/17/90 */
  3.  
  4. /* Basically these can replace n_chkchar,n_getchar and n_scrlck
  5.    with ones that do the following
  6.  
  7.     mouse up : up arrow
  8.     mouse down : down arrow
  9.     mouse right : right arrow
  10.     mouse left : left arrow
  11.  
  12.     left button : space bar
  13.     right button : scroll lock toggle
  14.  
  15.   This is achieved by including mouse.h
  16. */
  17.  
  18. #define MOUSE_H
  19.  
  20. #include <stdio.h>
  21. #include <stdlib.h>
  22. #include "nkeys.h"
  23. #include "externs.h"
  24.  
  25. #ifdef MSC 
  26. #define mousecl mousecml 
  27. #endif 
  28.  
  29. int nm_getchar(void);
  30. int nm_chkchar(void);
  31. int nm_scrlck(void);
  32. int nm_chkmouse(void);
  33. int nm_initmouse(void);
  34. int nm_mousespeed(int change);
  35.  
  36. extern int use_mouse;
  37. extern int ginon;
  38.  
  39. struct     {
  40.     int speed,
  41.         num_right,
  42.         num_down;
  43.     unsigned int installed:1,    /* boolean, whether the mouse has been installed */
  44.         left_flag:1,            /* boolean, whether the left button is down */
  45.         right_flag:1,            /* boolean, whether the right button is down */
  46.         scrlck:1;                /* boolean, whether the scrl-lock is active */
  47.   } mouse;
  48.  
  49. #ifdef GETCHAR_NEEDED
  50. int nm_getchar(void )
  51. {
  52.     int mouse_char;
  53.  
  54.     if ((mouse_char=nm_chkmouse())!=-1)
  55.         return(mouse_char);
  56.     else
  57.         return(n_getchar());
  58. }    /* end nm_getchar() */
  59. #endif
  60.  
  61. int nm_chkchar(void )
  62. {
  63.     int mouse_char;
  64.  
  65.     if((mouse_char=nm_chkmouse())!=-1)
  66.         return(mouse_char);
  67.     else
  68.         return(n_chkchar());
  69. }    /* end nm_chkchar() */
  70.  
  71. int nm_scrlck(void )
  72. {
  73.     if ((int)(mouse.scrlck) != !(!n_scrlck()))
  74.         return(1);
  75.     return(0);
  76. }    /* end nm_scrlck() */
  77.  
  78. int nm_chkmouse(void )
  79.     int m1=3, m2=0 ,m3=0 ,m4=0;        /* mouse variables */ 
  80.     static int press_used=0;
  81.  
  82.      if(!mouse.installed)  
  83.         return(-1); 
  84.  
  85.     m1=11; 
  86.      mousecl(&m1,&m2,&m3,&m4);        /* read mickeys */
  87.  
  88.     mouse.num_right+=m3;
  89.     mouse.num_down+=m4;
  90.     m1=3; 
  91.     mousecl(&m1,&m2,&m3,&m4); 
  92.     if((m2&3)==0) press_used=0;
  93.     if (press_used) return(-1);
  94.     if(m2&1) {                    /* left button */
  95.         if((mouse.right_flag)&&(!ginon)) {
  96.             press_used=1;
  97.             mouse.right_flag=0;
  98.             return(ALTV);
  99.         }
  100.         else mouse.left_flag=1;
  101.     }
  102.     else if(mouse.left_flag) {
  103.         mouse.left_flag=0;
  104.         return((int)'\n');
  105.     }    /* end if */
  106.  
  107.     if (ginon) return(-1);
  108.     if(m2&2) {                    /* right button */
  109.         if(mouse.left_flag) {
  110.             press_used=1;
  111.             mouse.left_flag=0;
  112.             return(ALTC);
  113.         }
  114.         else mouse.right_flag=1;
  115.     }
  116.     else if(mouse.right_flag) {
  117. /*        use_mouse=!mouse.scrlck;
  118. */        mouse.scrlck=!mouse.scrlck;
  119.         mouse.right_flag=0;
  120.     }    /* end if */
  121.  
  122.     if (!use_mouse && !nm_scrlck()) {
  123.         mouse.num_right=0;
  124.         mouse.num_down=0;
  125.         return(-1);
  126.     };
  127.     if(abs(mouse.num_right)>abs(mouse.num_down)) {
  128.         if(mouse.num_right>=mouse.speed) {
  129.             mouse.num_right-=mouse.speed;
  130.             return(E_CURRT);
  131.         }    /* end if */
  132.         if(mouse.num_right<=(-mouse.speed)) {
  133.             mouse.num_right+=mouse.speed;
  134.             return(E_CURLF);
  135.         }    /* end if */
  136.     }    /* end if */
  137.  
  138.     if(mouse.num_down>=mouse.speed) {
  139.         mouse.num_down-=mouse.speed;
  140.         return(E_CURDN);
  141.     }    /* end if */
  142.     if(mouse.num_down<=(-mouse.speed)) {
  143.         mouse.num_down+=mouse.speed;
  144.         return(E_CURUP);
  145.     }    /* end if */
  146.      return(-1); 
  147. }    /* end nm_chkmouse() */
  148.  
  149. int nm_initmouse(void ) 
  150.     int m1=0, m2=0, m3=0, m4=0;              /* mouse variables */
  151.  
  152.     mouse.installed=1;
  153.     mouse.speed=10;
  154.     mouse.num_right=0;
  155.     mouse.num_down=0;
  156.     mouse.left_flag=0;
  157.     mouse.right_flag=0;
  158.     mouse.scrlck=0;
  159.  
  160.     m1=0;                          
  161.     mousecl(&m1,&m2,&m3,&m4);                /* initialize mouse driver */ 
  162.     if(!m1) {
  163.         mouse.installed=0;
  164.         return(0); 
  165.       }    /* end if */
  166.     m1=2; 
  167.     mousecl(&m1,&m2,&m3,&m4);                /* turn off software cursor */ 
  168.     return(1);
  169. }     /* end nm_initmouse() */
  170.  
  171. int nm_mousespeed(int change)
  172. {
  173.     mouse.speed+=change;
  174.     if (mouse.speed<1) mouse.speed=1;
  175.     return(1);
  176. }    /* end nm_mousespeed() */
  177.