home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume28 / m0 / part03 / o_proto.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-06  |  4.4 KB  |  163 lines

  1. /*
  2.     o_proto.h
  3. */
  4. /*  Copyright (c) 1994 Christian F. Tschudin. All rights reserved.
  5.  
  6.     Distributed under the terms of the GNU General Public License
  7.     version 2 of june 1991 as published by the Free Software
  8.     Foundation, Inc.
  9.  
  10.              This file is part of M0.
  11.  
  12. M0 is distributed in the hope that it will be useful, but WITHOUT ANY
  13. WARRANTY.  No author or distributor accepts responsibility to anyone for
  14. the consequences of using it or for whether it serves any particular
  15. purpose or works at all, unless he says so in writing.  Refer to the GNU
  16. General Public License for full details. 
  17.  
  18. Everyone is granted permission to copy, modify and redistribute M0, but
  19. only under the conditions described in the GNU General Public License. 
  20. A copy of this license is supposed to have been given to you along with
  21. M0 so you can know your rights and responsibilities.  It should be in a
  22. file named LICENSE.  Among other things, the copyright notice and this
  23. notice must be preserved on all copies.  */
  24.  
  25. #ifndef O_PROTO_H
  26. #define O_PROTO_H
  27.  
  28. #include "error.h"
  29.  
  30. /* o_arith.c */
  31. extern retcode    o_add();
  32. extern retcode    o_and();
  33. extern retcode    o_not();
  34. extern retcode    o_div();
  35. extern retcode    o_eq();
  36. extern retcode    o_gt();
  37. extern retcode    o_lt();
  38. extern retcode    o_mod();
  39. extern retcode    o_mul();
  40. extern retcode    o_neg();
  41. extern retcode    o_or();
  42. extern retcode    o_sub();
  43. extern retcode    o_xor();
  44.  
  45. /* o_array.c */
  46. extern retcode    o_array();
  47. extern retcode    o_bind();
  48. extern retcode    o_makearray();
  49. extern retcode    o_mark();
  50.  
  51. /* o_attr.c */
  52. extern retcode    o_getattr();
  53. extern retcode    o_setattr();
  54.  
  55. /* o_chan.c */
  56. extern retcode    channel_defs();
  57.  
  58. /* o_ctrl.c */
  59. extern retcode    o_exec();
  60. extern retcode    o_exit();
  61. extern retcode    o_halt();
  62. extern retcode    o_halted();
  63. extern retcode    the_halted_proc();
  64. extern retcode    o_ifelse();
  65. extern retcode    o_loop();
  66. extern retcode    the_loop_iproc();
  67. extern retcode    the_loop_aproc();
  68. extern retcode    the_loop_dproc();
  69. extern retcode    the_loop_sproc();
  70.  
  71. /* o_dict.c */
  72. extern retcode    o_begin();
  73. extern retcode    o_currentdict();
  74. extern retcode    o_dict();
  75. extern retcode    o_end();
  76. extern retcode    o_find();
  77. extern retcode    o_known();
  78. extern retcode    o_undef();
  79. extern retcode    dict_find(mproc p, eindex key, eindex *dict);
  80. extern retcode    dict_load(mproc p, eindex key, eindex *val);
  81.  
  82. /* o_misc.c */
  83. extern retcode    o_get();
  84. extern retcode    o_gmt();
  85. extern retcode    o_hostid();
  86. extern retcode    o_length();
  87. extern retcode    o_put();
  88. extern retcode    o_random();
  89.  
  90. /* o_msgr.c */
  91. extern retcode    o_currentqueue();
  92. extern retcode    o_enter();
  93. extern retcode    o_leave();
  94. extern retcode    o_qstate();
  95. extern retcode    o_submit();
  96.  
  97. /* o_stack.c */
  98. extern retcode    o_copy();
  99. extern retcode    o_count();
  100. extern retcode    o_exch();
  101. extern retcode    o_pop();
  102. extern retcode    o_index();
  103. extern retcode    o_roll();
  104. extern retcode    o_stack();
  105.  
  106.  
  107. /* o_string.c */
  108. extern retcode    o_string();
  109.  
  110. /* o_type.c */
  111. extern retcode    o_type();
  112. extern retcode    o_toarray();
  113. extern retcode    o_toexecutable();
  114. extern retcode    o_toextern();
  115. extern retcode    o_tokey();
  116. extern retcode    o_toint();
  117. extern retcode    o_toliteral();
  118. extern retcode    o_tomsgr();
  119. extern retcode    o_toname();
  120. extern retcode    o_tostring();
  121. extern retcode    o_totime();
  122.  
  123.  
  124. /* o_init.c */
  125. extern eindex    loop_mark;        /* used by exit on the exec stack */
  126. extern eindex    loop_iproc;        /* loop procedure for int arg */
  127. extern eindex    loop_aproc;        /* loop procedure for array arg */
  128. extern eindex    loop_dproc;        /* loop procedure for dict arg */
  129. extern eindex    loop_sproc;        /* loop procedure for string arg */
  130. extern eindex    halt_mark;        /* used by halt on the exec stack */
  131. extern eindex    halted_proc;        /* halted procedure */
  132. extern retcode    operator_init();
  133.  
  134. #define check_o_stack(n) \
  135.     if (current->osp < (n)) return ERR_STACK_UNDERFLOW
  136.  
  137. #define load_1_arg(a1, p1) \
  138.     eindex a1; eptr p1; \
  139.     check_o_stack(1); \
  140.     a1 = current->os[current->osp-1]; p1 = eaddr(current, a1)
  141.  
  142. #define load_2_args(a1, a2, p1, p2) \
  143.     eindex a1, a2; \
  144.     eptr p1, p2; \
  145.     check_o_stack(2); \
  146.     a1 = current->os[current->osp-2]; p1 = eaddr(current, a1); \
  147.     a2 = current->os[current->osp-1]; p2 = eaddr(current, a2)
  148.  
  149. #define load_3_args(a1, a2, a3, p1, p2, p3) \
  150.     eindex a1, a2, a3; \
  151.     eptr p1, p2, p3; \
  152.     check_o_stack(3); \
  153.     a1 = current->os[current->osp-3]; p1 = eaddr(current, a1); \
  154.     a2 = current->os[current->osp-2]; p2 = eaddr(current, a2); \
  155.     a3 = current->os[current->osp-1]; p3 = eaddr(current, a3)
  156.  
  157. #define return_ok_result(popcnt, res) \
  158.     current->osp -= popcnt-1; \
  159.     current->os[current->osp-1] = res; \
  160.     return OK
  161.  
  162. #endif
  163.