home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 03 / extra / events.c next >
Encoding:
C/C++ Source or Header  |  1988-12-22  |  2.2 KB  |  89 lines

  1. /*---------------------------------------------*/
  2. /*                   EVENTS.C                  */
  3. /*        Modul zum Turbo C Maustreiber        */
  4. /*        (C) 1988 R.Ziegaus & TOOLBOX         */
  5. /*---------------------------------------------*/
  6.  
  7. #include <alloc.h>
  8. #include <stdio.h>
  9.  
  10. #include "mouse.h"
  11. #include "queue.h"
  12.  
  13. QueueHead *EventQueue;
  14.  
  15. typedef struct
  16.   {
  17.     int   x, y        ;/* x- und y-Koordinaten  */
  18.     int   Status      ;
  19.   } EventType;
  20.  
  21.  
  22. EventType *AllocEvent(void)
  23.  
  24. {
  25.   return((EventType *) calloc(1, sizeof(EventType)));
  26. }
  27.  
  28. /*
  29. Die folgende Prozedur muß unbedingt als Interrupt-
  30. Prozedur deklariert werden. Da die Prozedur  einen
  31. Interrupt darstellt, dürfen hier keine MS-DOS-
  32. Funktionen aufgerufen werden, da MS-DOS bekannter-
  33. maßen nicht reentrant ist. Soll z. B. innerhalb
  34. der Routine eine Bildschirmausgabe erfolgen, so
  35. muß dies mittels cprintf geschehen (printf
  36. hingegen arbeitet via MS-DOS-Aufruf). Dies gilt
  37. jedoch erst ab TURBO-C Version 1.5. Soll unter
  38. TURBO-C 1.0 eine Bildschirmausgabe erfolgen, so
  39. muß dies mit einer Routine geschehen, die direkt
  40. in den Bildschirmspeicher schreibt.              */
  41.  
  42. static void interrupt Update(void)
  43.  
  44. {
  45.   int         Status       ; /* Status der Maus */
  46.   int         Button       ; /* Maustasten      */
  47.   int         x,y          ; /* Mauskoordinaten */
  48.   EventType  *Event;
  49.  
  50.   /* Status ermitteln */
  51.   GetButtonPress(&Status, &Button, &x, &y);
  52.   /* Speicherplatz anlegen */
  53.   Event = AllocEvent();
  54.   Event->x      = x;
  55.   Event->y      = y;
  56.   Event->Status = Status;
  57.   /* Event in Schlange einreihen */
  58.   AppendToQueue((EventType *) Event, EventQueue);
  59. }
  60.  
  61.  
  62. void InitEventQueue(void)
  63.  
  64. {
  65.   int CallMask = 10;
  66.  
  67.   EventQueue = InitQueue(sizeof(EventType));
  68.   SetUserProc(CallMask, Update);
  69. }
  70.  
  71.  
  72. void ShowQueue(void)
  73.  
  74. {
  75.    EventType  *Event;
  76.  
  77.    printf("Länge der Queue  %d\n",
  78.           QueueLength(EventQueue));
  79.    while (!EmptyQueue(EventQueue))
  80.      {
  81.        Event =  (EventType *)
  82.                      GetQueueHead(EventQueue);
  83.        printf("%d %d    Status = %d\n",
  84.        Event->x, Event->y, Event->Status);
  85.        /* Speicherbereich wieder freigeben */
  86.        free(Event);
  87.      }
  88.  }
  89.