/* -*-comment-start: "//";comment-end:""-*- * GNU Mes --- Maxwell Equations of Software * Copyright © 2016,2017,2018,2019 Jan (janneke) Nieuwenhuizen * * This file is part of GNU Mes. * * GNU Mes is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or (at * your option) any later version. * * GNU Mes 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GNU Mes. If not, see . */ #ifndef __MES_MACROS_H #define __MES_MACROS_H #define TYPE(x) g_cells[x].type #define CAR(x) g_cells[x].car #define CDR(x) g_cells[x].cdr #define NTYPE(x) g_news[x].type #define NCAR(x) g_news[x].car #define NCDR(x) g_news[x].cdr #define BYTES(x) g_cells[x].car #define LENGTH(x) g_cells[x].car #define REF(x) g_cells[x].car #define START(x) (g_cells[x].car >> 16) #define LEN(x) (g_cells[x].car & 0xffff) #define VARIABLE(x) g_cells[x].car #define CLOSURE(x) g_cells[x].cdr #define CONTINUATION(x) g_cells[x].cdr #define CBYTES(x) (char*)&g_cells[x].cdr #define CSTRING_STRUCT(x) (char*)&g_cells[x.cdr].cdr #define MACRO(x) g_cells[x].car #define NAME(x) g_cells[x].cdr #define PORT(x) g_cells[x].car #define STRING(x) g_cells[x].cdr #define STRUCT(x) g_cells[x].cdr #define VALUE(x) g_cells[x].cdr #define VECTOR(x) g_cells[x].cdr #define NLENGTH(x) g_news[x].car #define NCBYTES(x) (char*)&g_news[x].cdr #define NVALUE(x) g_news[x].cdr #define NSTRING(x) g_news[x].cdr #define NVECTOR(x) g_news[x].cdr #define CSTRING(x) CBYTES (STRING (x)) #define MAKE_BYTES0(x) make_bytes (x, strlen (x)) #define NAME_SYMBOL(symbol,name) {size_t s = strlen (name); CAR (symbol) = s; CDR (symbol) = make_bytes (name, s);} #define MAKE_CHAR(n) make_cell (TCHAR, 0, n) #define MAKE_CONTINUATION(n) make_cell (TCONTINUATION, n, g_stack) #define MAKE_NUMBER(n) make_cell (TNUMBER, 0, (long)n) #define MAKE_REF(n) make_cell (TREF, n, 0) #define MAKE_STRING0(x) make_string (x, strlen (x)) #define MAKE_STRING_PORT(x) make_cell (TPORT, -length__ (g_ports) - 2, x) #define MAKE_MACRO(name, x) make_cell (TMACRO, x, STRING (name)) #define CAAR(x) CAR (CAR (x)) #define CADR(x) CAR (CDR (x)) #define CDAR(x) CDR (CAR (x)) #define CDDR(x) CDR (CDR (x)) #define CADAR(x) CAR (CDR (CAR (x))) #define CADDR(x) CAR (CDR (CDR (x))) #define CDADAR(x) CAR (CDR (CAR (CDR (x)))) #endif //__MES_MACROS_H