home *** CD-ROM | disk | FTP | other *** search
- /*
- o_proto.h
- */
- /* Copyright (c) 1994 Christian F. Tschudin. All rights reserved.
-
- Distributed under the terms of the GNU General Public License
- version 2 of june 1991 as published by the Free Software
- Foundation, Inc.
-
- This file is part of M0.
-
- M0 is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY. No author or distributor accepts responsibility to anyone for
- the consequences of using it or for whether it serves any particular
- purpose or works at all, unless he says so in writing. Refer to the GNU
- General Public License for full details.
-
- Everyone is granted permission to copy, modify and redistribute M0, but
- only under the conditions described in the GNU General Public License.
- A copy of this license is supposed to have been given to you along with
- M0 so you can know your rights and responsibilities. It should be in a
- file named LICENSE. Among other things, the copyright notice and this
- notice must be preserved on all copies. */
-
- #ifndef O_PROTO_H
- #define O_PROTO_H
-
- #include "error.h"
-
- /* o_arith.c */
- extern retcode o_add();
- extern retcode o_and();
- extern retcode o_not();
- extern retcode o_div();
- extern retcode o_eq();
- extern retcode o_gt();
- extern retcode o_lt();
- extern retcode o_mod();
- extern retcode o_mul();
- extern retcode o_neg();
- extern retcode o_or();
- extern retcode o_sub();
- extern retcode o_xor();
-
- /* o_array.c */
- extern retcode o_array();
- extern retcode o_bind();
- extern retcode o_makearray();
- extern retcode o_mark();
-
- /* o_attr.c */
- extern retcode o_getattr();
- extern retcode o_setattr();
-
- /* o_chan.c */
- extern retcode channel_defs();
-
- /* o_ctrl.c */
- extern retcode o_exec();
- extern retcode o_exit();
- extern retcode o_halt();
- extern retcode o_halted();
- extern retcode the_halted_proc();
- extern retcode o_ifelse();
- extern retcode o_loop();
- extern retcode the_loop_iproc();
- extern retcode the_loop_aproc();
- extern retcode the_loop_dproc();
- extern retcode the_loop_sproc();
-
- /* o_dict.c */
- extern retcode o_begin();
- extern retcode o_currentdict();
- extern retcode o_dict();
- extern retcode o_end();
- extern retcode o_find();
- extern retcode o_known();
- extern retcode o_undef();
- extern retcode dict_find(mproc p, eindex key, eindex *dict);
- extern retcode dict_load(mproc p, eindex key, eindex *val);
-
- /* o_misc.c */
- extern retcode o_get();
- extern retcode o_gmt();
- extern retcode o_hostid();
- extern retcode o_length();
- extern retcode o_put();
- extern retcode o_random();
-
- /* o_msgr.c */
- extern retcode o_currentqueue();
- extern retcode o_enter();
- extern retcode o_leave();
- extern retcode o_qstate();
- extern retcode o_submit();
-
- /* o_stack.c */
- extern retcode o_copy();
- extern retcode o_count();
- extern retcode o_exch();
- extern retcode o_pop();
- extern retcode o_index();
- extern retcode o_roll();
- extern retcode o_stack();
-
-
- /* o_string.c */
- extern retcode o_string();
-
- /* o_type.c */
- extern retcode o_type();
- extern retcode o_toarray();
- extern retcode o_toexecutable();
- extern retcode o_toextern();
- extern retcode o_tokey();
- extern retcode o_toint();
- extern retcode o_toliteral();
- extern retcode o_tomsgr();
- extern retcode o_toname();
- extern retcode o_tostring();
- extern retcode o_totime();
-
-
- /* o_init.c */
- extern eindex loop_mark; /* used by exit on the exec stack */
- extern eindex loop_iproc; /* loop procedure for int arg */
- extern eindex loop_aproc; /* loop procedure for array arg */
- extern eindex loop_dproc; /* loop procedure for dict arg */
- extern eindex loop_sproc; /* loop procedure for string arg */
- extern eindex halt_mark; /* used by halt on the exec stack */
- extern eindex halted_proc; /* halted procedure */
- extern retcode operator_init();
-
- #define check_o_stack(n) \
- if (current->osp < (n)) return ERR_STACK_UNDERFLOW
-
- #define load_1_arg(a1, p1) \
- eindex a1; eptr p1; \
- check_o_stack(1); \
- a1 = current->os[current->osp-1]; p1 = eaddr(current, a1)
-
- #define load_2_args(a1, a2, p1, p2) \
- eindex a1, a2; \
- eptr p1, p2; \
- check_o_stack(2); \
- a1 = current->os[current->osp-2]; p1 = eaddr(current, a1); \
- a2 = current->os[current->osp-1]; p2 = eaddr(current, a2)
-
- #define load_3_args(a1, a2, a3, p1, p2, p3) \
- eindex a1, a2, a3; \
- eptr p1, p2, p3; \
- check_o_stack(3); \
- a1 = current->os[current->osp-3]; p1 = eaddr(current, a1); \
- a2 = current->os[current->osp-2]; p2 = eaddr(current, a2); \
- a3 = current->os[current->osp-1]; p3 = eaddr(current, a3)
-
- #define return_ok_result(popcnt, res) \
- current->osp -= popcnt-1; \
- current->os[current->osp-1] = res; \
- return OK
-
- #endif
-