1: /*
2: * $Id: events.h,v 1.3 2025/03/09 19:14:24 snw Exp $
3: * event framework
4: *
5: *
6: * Author: Serena Willis <snw@coherent-logic.com>
7: * Copyright (C) 1998 MUG Deutschland
8: * Copyright (C) 2020, 2025 Coherent Logic Development LLC
9: *
10: *
11: * This file is part of FreeM.
12: *
13: * FreeM is free software: you can redistribute it and/or modify
14: * it under the terms of the GNU Affero Public License as published by
15: * the Free Software Foundation, either version 3 of the License, or
16: * (at your option) any later version.
17: *
18: * FreeM is distributed in the hope that it will be useful,
19: * but WITHOUT ANY WARRANTY; without even the implied warranty of
20: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21: * GNU Affero Public License for more details.
22: *
23: * You should have received a copy of the GNU Affero Public License
24: * along with FreeM. If not, see <https://www.gnu.org/licenses/>.
25: *
26: * $Log: events.h,v $
27: * Revision 1.3 2025/03/09 19:14:24 snw
28: * First phase of REUSE compliance and header reformat
29: *
30: *
31: * SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC
32: * SPDX-License-Identifier: AGPL-3.0-or-later
33: **/
34:
35: #if !defined(_EVENTS_H)
36: #define _EVENTS_H
37:
38: #include "freem.h"
39: #include "mref.h"
40:
41: #define EVT_QLENGTH 255
42: #define EVT_MAX 9
43:
44: #define EVT_CLS_COMM 0 /* Device events */
45: #define EVT_CLS_HALT 1 /* Process halted */
46: #define EVT_CLS_IPC 2 /* IPC received */
47: #define EVT_CLS_INTERRUPT 3 /* Interrupt received */
48: #define EVT_CLS_POWER 4 /* Power fail eminent */
49: #define EVT_CLS_TIMER 5 /* Timer interval expired */
50: #define EVT_CLS_USER 6 /* User-defined (ETRIGGER) events */
51: #define EVT_CLS_WAPI 7 /* MWAPI (synchronous only) */
52: #define EVT_CLS_TRIGGER 8 /* Database triggers */
53:
54: #define EVT_S_NOMODIFY -1
55: #define EVT_S_DISABLED 0
56: #define EVT_S_ASYNC 1
57: #define EVT_S_SYNC 2
58:
59: typedef struct evt_entry {
60:
61: char event_id[256]; /* Event identifier */
62: short evt_class; /* EVT_CLS_* */
63:
64: } evt_entry;
65:
66: typedef struct evt_status_t {
67:
68: short comm;
69: short halt;
70: short ipc;
71: short interrupt;
72: short power;
73: short timer;
74: short user;
75: short wapi;
76: short trigger;
77:
78: } evt_status_t;
79:
80: extern short evt_async_enabled;
81: extern short evt_async_restore;
82: extern short evt_async_initial;
83:
84: extern short evt_queue_rear;
85: extern short evt_queue_front;
86: extern evt_entry *evt_queue[];
87: extern short evt_status[];
88: extern int evt_blocks[EVT_MAX];
89: extern int evt_depth;
90:
91: extern int pending_signal_type;
92:
93: /* evt_init(): initialize event framework */
94: extern void evt_init (void);
95:
96: extern int evt_ablock (short evt_class);
97: extern int evt_aunblock (short evt_class);
98:
99: /* evt_enqueue(): enqueue an event. interrupt should be non-zero if you wish to immediately interrupt the interpreter */
100: extern int evt_enqueue (char *event_id, short evt_class, short interrupt);
101: extern evt_entry *evt_dequeue (void);
102: extern char *evt_class_name (evt_entry *e);
103: extern char *evt_class_name_c (int c);
104: extern int evt_get_handlers (char *buf);
105: extern short evt_registered(char *event_id, short evt_class);
106:
107: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>