/*
* $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>