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

  1. /*
  2.     l_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.  
  26. #ifndef L_PROTO_H
  27. #define L_PROTO_H
  28.  
  29. #include "element.h"
  30. #include "error.h"
  31. #include "proc.h"
  32.  
  33. #ifdef DEBUG
  34. # define TRACE(lev,stmt)    if (trace > lev) stmt;
  35. #else
  36. # define TRACE(lev,stmt)
  37. #endif
  38.  
  39. /* interp.h */
  40. extern retcode    init_interpreter(char *bin, char *lib);
  41. extern int    runable(void);
  42. extern retcode    run(void);
  43.  
  44.  
  45. /* l_array.c */
  46. extern eindex    new_array(mproc p, uint len);
  47. extern eindex    array_get(mproc p, eindex a, uint offs);
  48. extern retcode    array_put(mproc p, eindex a, uint offs, eindex e);
  49. extern eindex    make_array(mproc p, eindex *ip, uint len);
  50. extern void    array_free(mproc p, eindex ei);
  51. extern retcode    array_copy(mproc p, eindex f, eptr from, eptr to);
  52.  
  53.  
  54. /* l_compat.c */
  55. extern void    fillin_hostid(byteptr hid);
  56. extern void    get_utc(uint *sec, uint *usec);
  57.  
  58.  
  59. /* l_dict.c */
  60. extern eindex    systemdict;
  61. extern eindex    new_dict(mproc p);
  62. extern retcode    dict_def(mproc p, eindex d, eindex key, eindex val);
  63. extern eindex    dict_get(mproc p, eindex d, eindex key);
  64. extern retcode    dict_undef(mproc p, eindex d, eindex key);
  65. extern void    dict_free(mproc p, eindex d);
  66. #define DICT_DELETED    (~(1<<(8*sizeof(eindex)-2)))
  67. extern retcode    dict_copy(mproc p, eindex f, eptr from, eptr to);
  68.  
  69.  
  70. /* l_dump.c */
  71. #ifdef DEBUG
  72. extern int    trace;
  73. extern void    dump_element(FILE *f, mproc p, eindex ei);
  74. extern void    dump_elements(FILE *f, mproc p);
  75. extern void    dump_stack(FILE *f, eindex *s, ushort lim);
  76. extern void    dump_elements_to_file(char *fn, mproc p);
  77. extern void    dump_process_to_file(char *fn, mproc p);
  78. extern void    dump_process(FILE *f, mproc p);
  79. #endif
  80. extern void terminate(int s);
  81.  
  82. /* l_elemnt.c */
  83. extern char*    type_names[];
  84. extern eindex    new_element(mproc p, byte t);
  85. extern void    free_element(mproc p, eindex ei);
  86. extern void    decref(mproc p, eindex ei);
  87. extern eindex    element_copy(mproc p, eindex ei); /* make a local copy */
  88. extern eindex    make_sub(mproc p, eindex ei, uint offset);
  89. extern eindex    make_global(mproc p, eindex ei);
  90. extern eindex    desub(mproc p, eindex ei);
  91. extern void    remove_refcycles(void);
  92. extern int    element_equal(mproc p, eindex e1, eindex e2);
  93.  
  94.  
  95. /* l_format.c */
  96. extern byteptr    make_msgr(byteptr q, byteptr c, uint clen,
  97.               byteptr d, uint dlen, uint *len);
  98. extern eindex    make_msgr_str(mproc p, eindex q, eindex c, eindex d);
  99. extern retcode    decomp_msgr(mproc p, eindex m, eindex *q, eindex *c, eindex *d);
  100.  
  101.  
  102. /* l_incom.c */
  103. extern void    add_incoming(int fd, receivefct fct, eindex cname, sint cno);
  104. extern int    incoming_wouldblock(void);
  105. extern int    serve_incoming(long usec);
  106.  
  107.  
  108. /* l_init.h */
  109. extern eptr    global;
  110. extern eindex    systemdict;
  111. extern eindex    queuedict;
  112. extern eindex    channeldict;
  113. extern eindex    errorhandler_name;
  114. extern eindex    null_val;
  115. extern eindex    null_key;
  116. extern eindex    null_name;
  117. extern eindex    msgr_name;
  118. extern eindex    msgrO_name;
  119. extern eindex    code_name;
  120. extern eindex    data_name;
  121. extern eindex    orig_name;
  122. extern eindex    ext_name;
  123. extern eindex    msgr_start;        /* init code (string) of each msgr */
  124. extern eindex    host_id;        /* key */
  125. extern eindex    mark;            /* used on the operand stack */
  126. extern eindex    err_name_array;        /* array with all error names */
  127. extern eindex    type_name_array;        /* array with all type names */
  128. extern retcode    low_level_init(void);
  129.  
  130.  
  131. /* interp.c */
  132. extern retcode    init_interpreter(char *bin, char *lib);
  133. extern int    runable(void);
  134. extern retcode    run(void);
  135.  
  136.  
  137. /* l_misc.c */
  138. extern char*    error_names[];
  139. extern char*    unique_filename(char *pref);
  140. extern void    random64(byte *b); /* fills in 64 random bits */
  141. extern byteptr    load_m0(char *binpath, char *libpath, char *filename);
  142. extern retcode    new_channel(eindex key, void *data, submitfct fct);
  143.  
  144.  
  145. /* l_name.c */
  146. extern eindex    name_add(byteptr n, uint len, byte attr);
  147. extern int    name_eq(eindex n1, eindex n2);
  148. extern eindex    key_add(byteptr k);
  149. extern int    key_eq(eindex k1, eindex k2);
  150. extern void    free_name(eindex ei);
  151.  
  152.  
  153. /* l_proc.c */
  154. extern mproc    current, time_queue;
  155. extern retcode    new_proc(eindex msgr, eindex orig);
  156. extern void    remove_proc(mproc p);
  157. extern retcode    enqueue(mproc p, eindex qkey, eindex t);
  158. extern void    dequeue(mproc p);
  159. extern void    timeout(mproc p);
  160. extern void    queue_state(eindex qk, sint i);
  161.  
  162.  
  163. /* l_str.c */
  164. extern retcode    import_str_from_file(char *fn, eindex *str);
  165. extern eindex    str_import(mproc p, byteptr s, uint len, uint alen);
  166. extern retcode    str_export(mproc p, byteptr dest, eindex str, uint offs, uint len);
  167. extern eindex    new_string(mproc p, uint len);
  168. extern int    str_get(mproc p, eindex str, uint pos);
  169. extern void    str_put(mproc p, eindex str, uint pos, byte c);
  170. extern int    str_gt(mproc p, eindex s1, eindex s2);
  171. extern retcode    str_gettoken(mproc p, eindex str, uint *lp, eindex *e);
  172. extern void    free_string(mproc p,eindex ei);
  173. extern retcode    str_copy(mproc p, eindex f, eptr from, eptr to);
  174.  
  175.  
  176. /* l_time.c */
  177. extern eindex    time_now(mproc p);
  178. extern eindex    time_addint(mproc p, eindex t1, sint usec);
  179. extern eindex     time_diff(mproc p, eindex t1, eindex t2);
  180. extern int    time_eq(struct time_s *t1, struct time_s *t2);
  181. extern int    time_gt(struct time_s *t1, struct time_s *t2);
  182. extern long    next_timeout(void); /* consults the time_queue, result in usecs */
  183.  
  184. #endif
  185.