File:  [Coherent Logic Development] / freem / src / mcommand.h
Revision 1.3: download - view: text, annotated - select for diffs
Sun Mar 9 19:50:47 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
Second phase of REUSE compliance and header reformat

/*
 *   $Id: mcommand.h,v 1.3 2025/03/09 19:50:47 snw Exp $
 *    Generic stuff for handling M commands
 *
 *  
 *   Author: Serena Willis <snw@coherent-logic.com>
 *    Copyright (C) 1998 MUG Deutschland
 *    Copyright (C) 2023, 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: mcommand.h,v $
 *   Revision 1.3  2025/03/09 19:50:47  snw
 *   Second 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(_FREEM_MCOMMAND_H)
# define _FREEM_MCOMMAND_H

/* M tokens */
#define ABLOCK       0
#define ASSIGN      'a'
#define ASTART       1
#define ASTOP        2
#define AUNBLOCK     3
#define BREAK       'b'
#define CLOSE       'c'
#define CONST        24
#define DO          'd'
#define DO_BLOCK     4
#define ELSE        'e'
#define ESTART       5
#define ESTOP        6
#define ETRIGGER     7
#define FOR         'f'     /* ALSO in symtab.c */
#define GOTO        'g'
#define HA          'h'
#define HALT         8
#define HANG         9
#define IF          'i'
#define JOB         'j'
#define KILL        'k'
#define KVALUE      10
#define KSUBSC      11
#define LOCK        'l'
#define MERGE       'm'
#define MAP         26
#define UNMAP       27
#define NEWCMD      'n'
#define OPEN        'o'
#define QUIT        'q'
#define READ        'r'
#define RLOAD       12
#define RSAVE       13
#define SET         's'
#define TCOMMIT     14
#define THEN        15
#define TROLLBACK   17
#define TSTART      18
#define USE         'u'
#define VIEW        'v'
#define WRITE       'w'
#define XECUTE      'x'
#define ZALLOCATE   'A'
#define ZBREAK      'B'
#define ZDEALLOCATE 'D'
#define ZGO         'G'
#define ZHALT       'H'
#define ZINSERT     'I'
#define ZJOB        'J'
#define ZLOAD       'L'
#define ZNAMESPACE  'N' // formerly ZNEW
#define ZPRINT      'P'
#define ZQUIT       'Q'
#define ZREMOVE     'R'
#define ZSAVE       'S'
#define ZTRAP       'T'
#define ZWRITE      'W'
#define WATCH       20
#define ASSERT_TKN  21
#define OO_USING    22
#define OO_WITH     23
#define PRIVATE     SP
#define THROW       25

#define RA_CONTINUE 0
#define RA_PRIVATE 1
#define RA_NEXTCMND 2
#define RA_SKIPLINE 3

typedef short MRESULT;
typedef short MACTION;

extern MRESULT mcmd_tokenize(MACTION *ra, char *tmp3, char *deferrable_codptr, char *deferrable_code, int *j);
extern MRESULT cmd_map(MACTION *ra);
extern MRESULT cmd_unmap(MACTION *ra);
extern MRESULT cmd_then(MACTION *ra, int *then_ctr);
extern MRESULT cmd_throw(MACTION *ra);
extern MRESULT cmd_const(MACTION *ra);
extern MRESULT cmd_kvalue(MACTION *ra);
extern MRESULT cmd_ksubscripts(MACTION *ra);
extern MRESULT cmd_tstart(MACTION *ra);
extern MRESULT cmd_tcommit(MACTION *ra);
extern MRESULT cmd_trollback(MACTION *ra);
/* TODO: cmd_set */
extern MRESULT cmd_if(MACTION *ra);
extern MRESULT cmd_using(MACTION *ra);
extern MRESULT cmd_with(MACTION *ra);
extern MRESULT cmd_write(MACTION *ra, int *i);
extern MRESULT cmd_else(MACTION *ra);
extern MRESULT cmd_read(MACTION *ra);

#define MRESCHECK(ra) {\
        if (merr () > OK) goto err;             \
        switch (ra) { \
            case RA_CONTINUE: \
                break; \
            case RA_NEXTCMND: \
                goto next_cmnd; \
            case RA_PRIVATE: \
                goto private; \
            case RA_SKIPLINE: \
                goto skip_line; \
        } \
        }

#endif

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