/* Example program showing bios_disp.c drawbox.c
   and mouse.c. This program shows off the basics
   of event driven programming under MS-DOS!
*/
#include <stdio.h>
#include <dos.h>
#include <bios.h>
#include <box.h>
#include <mouse.h>

main()
   {
   void put_menu(void);
   char buffer[128];
   int xinfo,yinfo,binfo,l,r,c,ch;

   /* white on blue */
   cur_attr = 0x17;

   cls();

   /* put up a dummy menu for testing */
   put_menu();

   mouse_init();
   mouse_text_cursor(0,0xffff);
   mouse_set_cursor(0,0);
   mouse_cursor(1);

   /* report x,y and button status
      until exit line is chosen */
   while(1)
      {
      /* clear out button variables to 0 */
      l=r=c= 0;

      /* turn off mouse cursor */
      mouse_cursor(0);

      /* get mouse x,y and buttons */
      mouse_status(&binfo,&xinfo,&yinfo);

      /* show mouse coordinates */
      bios_move(1,1);
      sprintf(buffer,
      "Mouse X= %d, Mouse Y= %d",xinfo,yinfo);
      bios_puts(buffer);

      /* set button variable if needed */
      if(binfo & 1)
         l = 1;
      if(binfo & 2)
         r = 1;
      if(binfo & 4)
         c = 1;

      /* show button status */
      bios_move(2,1);
      sprintf(buffer,
      "Left = %d, Center = %d, Right = %d",l,c,r);
      bios_puts(buffer);

      /* turn mouse cursor back on */
      mouse_cursor(1);

      /* if left button is down,
         show the char under the mouse */
      if(l)
         {
         /* move text cursor to mouse location */
         bios_move(yinfo/8,xinfo/8);

         /* turn off mouse cursor */
         mouse_cursor(0);

         /* get char at cursor and show it */
         ch = bios_rdchar();
         bios_move(4,1);
         sprintf(buffer,
         "Character under mouse is %c",ch);
         bios_puts(buffer);

         /* turn mouse back on */
         mouse_cursor(1);
         }

      /* if right button is down
         and on the exit line, quit program */
      if(r)
         {
         /* exit line is line 12 * 8 = 96  */
         if(yinfo == 96)
            break;
         }

      /* wait a bit so the mouse cursor shows */
      for(l=0; l<500; l++)
         ;
      }

   /* All done. Turn off mouse cursor */
   mouse_cursor(0);
   cls();
   }

void put_menu()
   {
   int x;
   char buffer[80];

   /* draw a nice box around the display */
   draw_box(0,0,24,79,2);

   /* and put up a simple menu */
   for(x = 1; x<6; x++)
      {
      bios_move(x+5,10);

      sprintf(buffer,"%d) Menu item",x);
      bios_puts(buffer);
      }
   bios_move(12,10);
   bios_puts(
   "Click right button on this line to exit to DOS");
   }


