File:  [Coherent Logic Development] / freem / src / events.h
Revision 1.3: download - view: text, annotated - select for diffs
Sun Mar 9 19:14:24 2025 UTC (3 weeks, 2 days ago) by snw
Branches: MAIN
CVS tags: v0-62-3, v0-62-2, v0-62-1, v0-62-0, HEAD
First phase of REUSE compliance and header reformat

/*
 *   $Id: events.h,v 1.3 2025/03/09 19:14:24 snw Exp $
 *    event framework
 *
 *  
 *   Author: Serena Willis <snw@coherent-logic.com>
 *    Copyright (C) 1998 MUG Deutschland
 *    Copyright (C) 2020, 2025 Coherent Logic Development LLC
 *
 *
 *   This file is part of FreeM.
 *
 *   FreeM is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU Affero Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   FreeM is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU Affero Public License for more details.
 *
 *   You should have received a copy of the GNU Affero Public License
 *   along with FreeM.  If not, see <https://www.gnu.org/licenses/>.
 *
 *   $Log: events.h,v $
 *   Revision 1.3  2025/03/09 19:14:24  snw
 *   First phase of REUSE compliance and header reformat
 *
 *
 * SPDX-FileCopyrightText:  (C) 2025 Coherent Logic Development LLC
 * SPDX-License-Identifier: AGPL-3.0-or-later
 **/

#if !defined(_EVENTS_H)
#define _EVENTS_H

#include "freem.h"
#include "mref.h"

#define EVT_QLENGTH 255
#define EVT_MAX 9

#define EVT_CLS_COMM 0                          /* Device events */
#define EVT_CLS_HALT 1                          /* Process halted */
#define EVT_CLS_IPC 2                           /* IPC received */
#define EVT_CLS_INTERRUPT 3                     /* Interrupt received */
#define EVT_CLS_POWER 4                         /* Power fail eminent */
#define EVT_CLS_TIMER 5                         /* Timer interval expired */
#define EVT_CLS_USER 6                          /* User-defined (ETRIGGER) events */
#define EVT_CLS_WAPI 7                          /* MWAPI (synchronous only) */
#define EVT_CLS_TRIGGER 8                       /* Database triggers */

#define EVT_S_NOMODIFY -1
#define EVT_S_DISABLED 0
#define EVT_S_ASYNC 1
#define EVT_S_SYNC 2

typedef struct evt_entry {

    char event_id[256];                         /* Event identifier */
    short evt_class;                            /* EVT_CLS_* */

} evt_entry;

typedef struct evt_status_t {

    short comm;
    short halt;
    short ipc;
    short interrupt;
    short power;
    short timer;
    short user;
    short wapi;
    short trigger;
    
} evt_status_t;

extern short evt_async_enabled;
extern short evt_async_restore;
extern short evt_async_initial;

extern short evt_queue_rear;
extern short evt_queue_front;
extern evt_entry *evt_queue[];
extern short evt_status[]; 
extern int evt_blocks[EVT_MAX];
extern int evt_depth;

extern int pending_signal_type;

/* evt_init(): initialize event framework */
extern void evt_init (void);

extern int evt_ablock (short evt_class);
extern int evt_aunblock (short evt_class);

/* evt_enqueue(): enqueue an event. interrupt should be non-zero if you wish to immediately interrupt the interpreter */
extern int evt_enqueue (char *event_id, short evt_class, short interrupt);
extern evt_entry *evt_dequeue (void);
extern char *evt_class_name (evt_entry *e);
extern char *evt_class_name_c (int c);
extern int evt_get_handlers (char *buf);
extern short evt_registered(char *event_id, short evt_class);

#endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>