home *** CD-ROM | disk | FTP | other *** search
- /*---------------------------------------------*/
- /* EVENTS.C */
- /* Modul zum Turbo C Maustreiber */
- /* (C) 1988 R.Ziegaus & TOOLBOX */
- /*---------------------------------------------*/
-
- #include <alloc.h>
- #include <stdio.h>
-
- #include "mouse.h"
- #include "queue.h"
-
- QueueHead *EventQueue;
-
- typedef struct
- {
- int x, y ;/* x- und y-Koordinaten */
- int Status ;
- } EventType;
-
-
- EventType *AllocEvent(void)
-
- {
- return((EventType *) calloc(1, sizeof(EventType)));
- }
-
- /*
- Die folgende Prozedur muß unbedingt als Interrupt-
- Prozedur deklariert werden. Da die Prozedur einen
- Interrupt darstellt, dürfen hier keine MS-DOS-
- Funktionen aufgerufen werden, da MS-DOS bekannter-
- maßen nicht reentrant ist. Soll z. B. innerhalb
- der Routine eine Bildschirmausgabe erfolgen, so
- muß dies mittels cprintf geschehen (printf
- hingegen arbeitet via MS-DOS-Aufruf). Dies gilt
- jedoch erst ab TURBO-C Version 1.5. Soll unter
- TURBO-C 1.0 eine Bildschirmausgabe erfolgen, so
- muß dies mit einer Routine geschehen, die direkt
- in den Bildschirmspeicher schreibt. */
-
- static void interrupt Update(void)
-
- {
- int Status ; /* Status der Maus */
- int Button ; /* Maustasten */
- int x,y ; /* Mauskoordinaten */
- EventType *Event;
-
- /* Status ermitteln */
- GetButtonPress(&Status, &Button, &x, &y);
- /* Speicherplatz anlegen */
- Event = AllocEvent();
- Event->x = x;
- Event->y = y;
- Event->Status = Status;
- /* Event in Schlange einreihen */
- AppendToQueue((EventType *) Event, EventQueue);
- }
-
-
- void InitEventQueue(void)
-
- {
- int CallMask = 10;
-
- EventQueue = InitQueue(sizeof(EventType));
- SetUserProc(CallMask, Update);
- }
-
-
- void ShowQueue(void)
-
- {
- EventType *Event;
-
- printf("Länge der Queue %d\n",
- QueueLength(EventQueue));
- while (!EmptyQueue(EventQueue))
- {
- Event = (EventType *)
- GetQueueHead(EventQueue);
- printf("%d %d Status = %d\n",
- Event->x, Event->y, Event->Status);
- /* Speicherbereich wieder freigeben */
- free(Event);
- }
- }