1/* BEGIN LICENSE BLOCK
2 * Version: CMPL 1.1
3 *
4 * The contents of this file are subject to the Cisco-style Mozilla Public
5 * License Version 1.1 (the "License"); you may not use this file except
6 * in compliance with the License.  You may obtain a copy of the License
7 * at www.eclipse-clp.org/license.
8 *
9 * Software distributed under the License is distributed on an "AS IS"
10 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See
11 * the License for the specific language governing rights and limitations
12 * under the License.
13 *
14 * The Original Code is  The ECLiPSe Constraint Logic Programming System.
15 * The Initial Developer of the Original Code is  Cisco Systems, Inc.
16 * Portions created by the Initial Developer are
17 * Copyright (C) 1989-2006 Cisco Systems, Inc.  All Rights Reserved.
18 *
19 * Contributor(s): ECRC GmbH and IC-Parc.
20 *
21 * END LICENSE BLOCK */
22
23/*
24 * ECLiPSe INCLUDE FILE
25 *
26 * $Id: types.h,v 1.15 2013/04/17 01:34:20 jschimpf Exp $
27 *
28 * IDENTIFICATION		types.h
29 *
30 * DESCRIPTION
31 *				include file containing the global
32 *				types of data
33 *
34 * This file shall only contain typedefs, no macros, no extern decls.
35 * It can be included/preprocessed in several environments,
36 * identified by #defines, in order of increasing restrictedness:
37 *
38 * nothing			ECLiPSe kernel (all details visible)
39 * EC_EXTERNAL			Obsolete ECLiPSe "external" API
40 * EC_EXTERNAL|EC_EMBED		ECLiPSe embedding API
41 */
42
43#ifdef EC_EXTERNAL
44#define HIDE_EXT(a,b) b
45#else
46#define HIDE_EXT(a,b) a
47#endif
48
49#ifndef EC_EXTERNAL
50#include <setjmp.h>
51#include "memman.h"
52#else
53typedef void *generic_ptr;
54#endif
55
56/*---------------------------------------------------------------------------
57 * (possibly) machine dependent types
58 *---------------------------------------------------------------------------*/
59
60#ifndef __ECLIPSE_MEMMAN_H
61
62#ifndef __CHAR_UNSIGNED__
63typedef char		int8;			/* exactly 8 bit */
64#else
65typedef signed char	int8;
66#endif
67typedef unsigned char	uint8;
68
69typedef short		int16;			/* exactly 16 bit */
70typedef unsigned short	uint16;
71
72#if (SIZEOF_INT == 4)
73typedef int		int32;			/* exactly 32 bit */
74typedef unsigned int	uint32;
75#endif
76
77#if (SIZEOF_CHAR_P == SIZEOF_INT)
78typedef int		word;			/* pointer-sized */
79typedef unsigned int	uword;
80#elif (SIZEOF_CHAR_P == SIZEOF_LONG)
81typedef long		word;			/* pointer-sized */
82typedef unsigned long	uword;
83#elif (defined(HAVE_LONG_LONG) || defined(__GNUC__)) && (SIZEOF_CHAR_P == __SIZEOF_LONG_LONG__)
84typedef long long 		word;		/* pointer-sized */
85typedef unsigned long long 	uword;
86#elif defined(HAVE___INT64) && SIZEOF_CHAR_P == 8
87typedef __int64          word;
88typedef unsigned __int64 uword;
89#endif
90
91#endif /* __ECLIPSE_MEMMAN_H */
92
93#ifndef _PDS_TYPES_H_
94typedef word		*void_ptr;
95#endif /* _PDS_TYPES_H */
96
97
98#ifdef EC_EXTERNAL
99typedef int		a_mutex_t;
100#endif
101
102
103typedef union {
104	double	as_dbl;
105#if (SIZEOF_WORD == 8)
106	uword as_int;
107#endif
108	struct ieee_parts {
109# ifdef WORDS_BIGENDIAN
110		uint32 mant1;
111		uint32 mant0;
112# else
113		uint32 mant0;
114		uint32 mant1;
115# endif
116	} as_struct;
117} ieee_double;
118
119
120/*---------------------------------------------------------------------------
121 * Dictionary item
122 *---------------------------------------------------------------------------*/
123
124struct dict_item
125{
126    word		arity;		/* functor arity		     */
127    struct s_pword	*string;	/* functor name string		     */
128#ifndef EC_EXTERNAL
129    unsigned		macro:1;	/* maybe a macro		     */
130    unsigned		attainable:1;	/* mark bit for gc		     */
131    unsigned		module:2;	/* module * locked * unlocked	     */
132    unsigned		eval:1;		/* unused			     */
133    unsigned		stability:2;	/* PERMANENT, CODE_REF or VOLATILE   */
134    unsigned		head:1;		/* head of the collision chain	     */
135    unsigned		bitfield:19;	/* bit mask for the var names	     */
136    unsigned		isop:3;		/* maybe an operator		     */
137    unsigned		fill:2;
138    struct pri		*procedure;	/* procedure chain		     */
139    struct property	*properties;	/* property chain		     */
140    struct dict_item	*next;		/* next did with same hash value     */
141#endif
142};
143
144typedef struct dict_item	*dident;
145
146
147/*---------------------------------------------------------------------------
148 * Prolog word
149 *---------------------------------------------------------------------------*/
150
151typedef void_ptr (*func_ptr)(void);
152typedef func_ptr (*continuation_t)(void);
153
154typedef union
155{
156	uword	        all;
157	uword		*wptr;
158	struct s_pword	*ptr;
159	char		*str;
160	word		nint;
161	dident		did;
162#ifdef UNBOXED_DOUBLES
163	double		dbl;
164#endif
165#ifndef EC_EXTERNAL
166	struct pri	*priptr;
167#endif
168} value;
169
170typedef union
171{
172	uword		all;
173	word		kernel;
174} type;
175
176typedef struct s_pword
177{
178	value val;			/* value part first */
179	type tag;			/* then tag part */
180} pword;
181
182
183/*---------------------------------------------------------------------------
184 * The abstract machine code item
185 *---------------------------------------------------------------------------*/
186
187typedef uword vmcode;
188
189
190/*---------------------------------------------------------------------------
191 * Simplified types for Scheduler and message passing system.
192 * For information hiding, we don't inlcude the real definitions here.
193 * Make sure the sizes match the real ones!
194 *---------------------------------------------------------------------------*/
195
196typedef uint32		aport_handle_t;		/* aport_id_t */
197
198typedef aport_handle_t	site_handle_t;		/* site_id_t */
199
200typedef struct st_handle_ds {
201	site_handle_t	site;
202	void_ptr	edge;
203	void_ptr	knot;
204} st_handle_t;					/* st_id_t */
205
206
207/*---------------------------------------------------------------------
208 * Huge, consecutive stacks (for the Prolog stacks)
209 * They come in pairs, growing in opposite direction:
210 *
211 * start --> end ... <gap> ... end <-- start
212 *
213 * This descriptor is only for memory allocation purposes.
214 * The end pointer indicates the end of the allocated (e.g. mapped)
215 * area for the stack, not necessarily the top of the actually used stack.
216 *---------------------------------------------------------------------*/
217
218typedef struct stack_struct {
219	char	*name;		/* symbolic name of the stack	*/
220	uword	*start,		/* start of the allocated area	*/
221		*end,		/* end of the allocated area	*/
222		*peak;		/* highest value 'end' ever had	*/
223} stack_pair[2];
224
225/*---------------------------------------------------------------------------
226 * Safe external references
227 *---------------------------------------------------------------------------*/
228
229enum ec_ref_state { EC_REF_FREE=0,EC_REF_C=1,EC_REF_P=2,EC_REF_C_P=3 };
230typedef struct eclipse_ref_
231{
232	pword var; /* init val ~EC_REF_EC else actual value */
233	struct eclipse_ref_ * prev;
234	struct eclipse_ref_ * next;
235	enum ec_ref_state refstate;
236	int size;
237} * ec_ref;
238
239typedef ec_ref ec_refs;
240
241/*---------------------------------------------------------------------------
242 * Stream descriptor
243 *---------------------------------------------------------------------------*/
244
245#ifndef EC_EXTERNAL
246
247typedef struct stream_d {
248    int			unit;		/* system identifier (fd)	*/
249    void_ptr		methods;	/* I/O method table (io_channel_t *) */
250    unsigned int	nref;		/* # refs from handles and dids	*/
251    int			encoding;	/* bytes, utf8, etc.		*/
252    int			mode;		/* flags			*/
253    int			output_mode;	/* default output mode settings	*/
254    int			print_depth;	/* default print depth		*/
255    dident		name;		/* did of the file name		*/
256    unsigned char 	*buf;		/* buffer address		*/
257    unsigned char 	*wbuf;		/* write buffer (queues only)	*/
258    word		size;		/* max size of the buffer	*/
259    word 		cnt;		/* actual used buffer size	*/
260    unsigned char 	*ptr;		/* next char to be read or written */
261    unsigned char 	*lex_aux;	/* lexical analyser aux buffer	*/
262    word		line;		/* number of read lines, if File */
263    word		lex_size;	/* lex_aux buffer size		*/
264    uword		offset;		/* current offset in the file	*/
265    struct stream_d	*prompt_stream;	/* input: the stream to output  */
266    dident		prompt;		/* did of the prompt string	*/
267    word		nr;		/* the stream number		*/
268    int			fd_pid;		/* process that owns the fd	*/
269    a_mutex_t		lock;		/* shared memory lock (par)	*/
270    aport_handle_t	aport;		/* stream handler's address (par) */
271    generic_ptr		stdfile;	/* FILE stream for this fd	*/
272    pword		event;		/* the event to raise ([] if none) */
273    uint32		rand;		/* random generator state	*/
274    int			last_written;	/* last character written	*/
275    void_ptr		signal_thread;	/* to simulate sigio on Windows	*/
276    dident		pathname;	/* full file path name		*/
277} stream_desc;
278
279typedef stream_desc	*stream_id;
280#else
281typedef void_ptr	stream_id;
282#endif
283
284
285/*
286 * Descriptor for a source location
287 */
288
289typedef struct {
290	dident file;		/* file name atom (or '' if none) */
291	uword line;		/* line number in stream */
292	uword from;		/* stream offset of first char */
293	uword to;		/* stream offset of last char + 1 */
294} source_pos_t;
295
296#define SOURCE_POS_SZ	4	/* words in the structure above */
297
298
299/*---------------------------------------------------------------------------
300 * Tracer/debugger data
301 *---------------------------------------------------------------------------*/
302
303#ifndef EC_EXTERNAL
304
305typedef struct
306{
307    word	invoc;
308    struct pri	*proc;
309    source_pos_t source_pos;
310
311} fail_data_t;
312
313#endif
314
315typedef struct			/* debugger registers */
316{
317    pword	debug_top;
318    HIDE_EXT(fail_data_t *, void_ptr) fail_trace;
319    word	next_invoc;
320
321				/* passing info into notify event */
322    HIDE_EXT(struct pri *, void_ptr) call_proc;
323    word	call_port;
324    word	call_invoc;
325    word	first_delay_invoc;
326
327    word	redo_level;	/* level at which failure was caught */
328    word	fail_drop;	/* number of failed levels */
329    word	fail_culprit;	/* invoc of failure culprit */
330
331    word	port_filter;	/* port pre-filtering */
332    word	min_invoc;
333    word	max_invoc;
334    word	min_level;
335    word	max_level;
336    word	trace_mode;
337
338    source_pos_t source_pos;	/* source position */
339} trace_t;
340
341
342/*---------------------------------------------------------------------------
343 * the control stack
344 *---------------------------------------------------------------------------*/
345
346#ifndef EC_EXTERNAL
347
348typedef union control {
349    pword	 *args;
350    struct choice_frame {
351	pword		*sp;
352	pword		*tg;
353	pword		**tt;
354	pword		*e;
355	pword		*ld;
356	/* arguments */
357    }	*chp;
358    struct parallel_frame {
359	pword		*sp;
360	pword		*tg;
361	pword		**tt;
362	pword		*e;
363	pword		*ld;
364	word		alt;	/* currently executing alternative */
365	pword		*ppb;
366	st_handle_t	node;
367	/* arguments */
368    }	*chp_par;
369    struct invocation_frame {	/* must look like a parallel frame */
370	pword		*sp;
371	pword		*tg;
372	pword		**tt;
373	pword		*e;
374	pword		*ld;
375	word		alt;	/* currently executing alternative */
376	pword		*ppb;
377	st_handle_t	node;
378	pword		*eb;
379	pword		*gb;
380	pword		*pb;
381	uint32		flags;
382	HIDE_EXT(jmp_buf *, void_ptr)	it_buf;
383	vmcode		*pp;
384	pword           *de;
385	pword           *mu;
386	pword           *sv;
387	int		wp;
388	pword		wp_stamp;
389	pword		postponed_list;
390	pword		wl;
391	int		load;
392	pword           *oracle;
393	char		*followed_oracle;
394	char		*pending_oracle;
395	int		global_bip_error;
396	trace_t		trace_data;
397	pword           *gctg;
398	pword           *tg_soft_lim;
399	pword		*tg_before;
400	pword		*global_variable;
401	void_ptr	parser_env;
402	int		nesting_level;
403	pword		arg_0;
404	/* arguments */
405    }	*invoc;
406    struct exception_frame {
407	pword		*sp;
408	pword		*tg;
409	pword		**tt;
410	pword		*e;
411	pword           *ld;
412	pword		*eb;
413	pword		*gb;
414	uint32		flags;
415	pword           *de;
416	pword           *mu;
417	pword		*tg_soft_lim;
418	int		wp;
419#ifdef AS_EMU
420	pword		*s;
421	pword		tr;
422#endif
423	/* arguments */
424    } *exception;
425    struct top_frame {
426	vmcode		*backtrack;
427	union frame {
428	    struct choice_frame		*chp;
429	    struct parallel_frame	*chp_par;
430	    struct invocation_frame	*invoc;
431	    struct exception_frame      *exception;
432	    struct top_frame		*top;
433	    pword			*args;
434	}	frame;
435    }	*top;
436#if !defined(__cplusplus)
437    union frame		any_frame;
438#endif
439} control_ptr;
440
441#if defined(__cplusplus)
442typedef struct control::choice_frame	*chp_ptr;
443typedef struct control::invocation_frame	*invoc_ptr;
444typedef struct control::top_frame	*top_ptr;
445#else
446typedef struct choice_frame	*chp_ptr;
447typedef struct invocation_frame	*invoc_ptr;
448typedef struct top_frame	*top_ptr;
449#endif
450
451#endif /* EC_EXTERNAL */
452
453
454/* ----------------------------------------------------------------------
455 * Circular linked-list for unlimited event queue (synchronously posted)
456 * ---------------------------------------------------------------------- */
457
458typedef struct _dyn_event_q_slot_t {
459    pword event_data;
460    struct _dyn_event_q_slot_t *next;
461} dyn_event_q_slot_t;
462
463typedef struct {
464    dyn_event_q_slot_t *prehead;
465    dyn_event_q_slot_t *tail;
466    uword total_event_slots;
467    uword free_event_slots;
468} dyn_event_q_t;
469
470
471/*---------------------------------------------------------------------------
472 * Abstract Machine descriptor
473 *---------------------------------------------------------------------------*/
474
475struct machine
476{
477    pword *	sp;		/* top of local stack */
478    pword **	tt;		/* top of trail stack */
479    pword *	tg;		/* top of global stack */
480    pword *	e;		/* environment pointer */
481    pword *	eb;		/* local stack backtrack pointer */
482    pword *	gb;		/* global stack backtrack pointer */
483    HIDE_EXT(control_ptr, pword *)
484		b;		/* top of control stack */
485    pword *	lca;		/* last cut action */
486    int		vm_flags;	/* machine flags */
487    volatile int event_flags;	/* flags that may be changed by signals */
488    vmcode	*pp;		/* code pointer */
489
490    pword *	de;		/* current suspension */
491    pword *	ld;		/* list of all suspended goals (last delayed) */
492    pword *	mu;		/* list of meta-unifications */
493    pword *	sv;		/* list of suspending variables */
494    pword 	wl;		/* global woken lists. This register has a
495				 * tag because it is value-trailed, and the
496				 * GC requires a tag in this case. */
497    int		wp;		/* current running priority */
498    pword	wp_stamp;	/* and its time-stamp */
499    pword	postponed_list;	/* postponed goals */
500
501    pword *	pb;		/* top of parallel choicepoints (optional) */
502    pword *	ppb;		/* top of published parallel choicepoints */
503    st_handle_t	*leaf;		/* scheduler node associated with this engine */
504    int		load;		/* to keep track of unpublished load */
505
506    pword *	occur_check_boundary;		/* occur check registers */
507    pword *	top_constructed_structure;
508
509    pword *	oracle;		/* top of recorded oracle */
510    char *	followed_oracle; /* currently followed oracle */
511    char *	pending_oracle;	/* will become followed_oracle */
512    int		ntry;
513
514    int		global_bip_error;
515
516    trace_t	trace_data;
517
518    pword *	gctg;		/* tg after last garbage collection */
519
520    pword * volatile tg_soft_lim;	/* garbage collection trigger point */
521    pword *	tg_soft_lim_shadow;	/* needed in case of faked overflow */
522    volatile int irq_faked_overflow;	/* for faking overflow in interrupts */
523
524    pword *	tg_limit;	/* stack limits for overflow checks */
525    pword **	tt_limit;
526    pword *	b_limit;
527    pword *	sp_limit;
528
529    stack_pair	global_trail;	/* stack allocation descriptors */
530    stack_pair	control_local;
531
532    word	segment_size;	/* garbage collection interval */
533    int		nesting_level;	/* of recursive emulator invovations */
534
535    void_ptr	parser_env;	/* parser data structure */
536    HIDE_EXT(jmp_buf *, void_ptr)
537		it_buf;		/* for longjmp */
538
539    pword	posted;		/* difference list of posted goals */
540    pword	posted_last;	/* always a reference */
541
542    struct eclipse_ref_ allrefs;
543
544    pword	*global_variable;
545    pword	emu_args[NARGREGS];
546
547    dyn_event_q_t dyn_event_q; /* Dynamic synchronous event queue */
548};
549
550
551/*---------------------------------------------------------------------------
552 * Tag descriptor
553 *---------------------------------------------------------------------------*/
554
555struct tag_descriptor {
556	type			tag;		/* tag bit pattern */
557	word			super;		/* is subtype of ... */
558	dident			tag_name;	/* did */
559	dident			type_name;	/* did */
560	int			numeric;	/* numeric type and order  */
561	int			order;		/* standard term order */
562	int	(* write)ARGS((int,stream_id,value,type));
563	int	(* string_size)ARGS((value,type,int));
564	int	(* to_string)ARGS((value,type,char*,int));
565	int	(* from_string)ARGS((char *,pword*,int));
566	int	(* equal)ARGS((pword*,pword*));
567	int	(* compare)ARGS((value,value));
568	int	(* arith_compare)ARGS((value,value,int*));
569	int	(* copy_size)ARGS((value,type));
570	pword * (* copy_to_heap)ARGS((value,type,pword*,pword*));
571	pword * (* copy_to_stack)ARGS((void));
572	int	(* arith_op[ARITH_OPERATIONS])ARGS((Dots));
573	int	(* coerce_to[NTYPES+1])ARGS((value,value*));
574};
575
576
577
578/* ----------------------------------------------------------------------
579 *  Handle type descriptor
580 * ---------------------------------------------------------------------- */
581
582#ifdef HAVE_NO_VOID_PTR
583typedef char *t_ext_ptr;
584#else
585typedef void *t_ext_ptr;
586#endif
587
588
589/* Method table */
590typedef struct {
591    void	(*free)ARGS((t_ext_ptr));
592    t_ext_ptr 	(*copy)ARGS((t_ext_ptr));
593    void	(*mark_dids)ARGS((t_ext_ptr));
594    int		(*string_size)ARGS((t_ext_ptr obj, int quoted_or_radix));
595    int		(*to_string)ARGS((t_ext_ptr obj, char *buf, int quoted_or_radix));
596    int 	(*equal)ARGS((t_ext_ptr, t_ext_ptr));
597    t_ext_ptr 	(*remote_copy)ARGS((t_ext_ptr));
598    pword 	(*get)ARGS((t_ext_ptr, int));
599    int 	(*set)ARGS((t_ext_ptr, int, pword));
600} t_ext_type;
601
602/* ----------------------------------------------------------------------
603 *  Heap copied goal (event handler)
604 * ---------------------------------------------------------------------- */
605
606typedef struct {
607    pword               goal; /* Must be first field - same addr as struct */
608    pword               module;
609    word                ref_ctr;
610    short               enabled;
611    short               defers;	/* defer event handling when entering handler */
612} t_heap_event;
613
614
615/*---------------------------------------------------------------------------
616 * Global data that has to go into shared memory
617 *---------------------------------------------------------------------------*/
618
619struct shared_data_t {
620	a_mutex_t
621		general_lock,			/* if none of the others used */
622		mod_desc_lock,			/* module descriptor */
623		prop_desc_lock,			/* property descriptors */
624		    prop_list_lock,		/* functor property list */
625		proc_desc_lock,			/* procedure descriptors */
626		    proc_list_lock,		/* functor procedure list */
627		    proc_chain_lock,		/* shared procedure chains */
628		    assert_retract_lock;	/* dynamic procedure change */
629
630	int	global_flags,
631		print_depth,
632		output_mode_mask,
633		compile_id,
634		code_heap_used,
635		global_var_index,
636		load_release_delay,
637		publishing_param,
638		nbstreams,
639		nbstreams_free,
640		user_error,
641		max_errors,
642		symbol_table_version,
643		dyn_global_clock,		/* assert_retract_lock */
644		dyn_killed_code_size,		/* assert_retract_lock */
645		dyn_num_of_kills;		/* assert_retract_lock */
646
647	void_ptr
648		dictionary,			/* has its own lock */
649
650		abolished_dynamic_procedures,	/* proc_chain_lock */
651		abolished_procedures,		/* proc_chain_lock */
652		compiled_structures,
653		dynamic_procedures,		/* proc_chain_lock */
654		global_procedures,		/* proc_chain_lock */
655		constant_table,
656
657		stream_descriptors,
658		error_handler,
659		default_error_handler,
660		interrupt_handler,
661		interrupt_handler_flags,
662		interrupt_name,
663		error_message,
664		message,
665		startup_goal,
666		debug_macros,
667		worker_statistics,
668
669		extension_ptr,
670		extension_ptr1,
671		extension_ptr2,
672		extension_ptr3,
673		extension_ptr4,
674		extension_ptr5,
675		extension_ptr6,
676		extension_ptr7;
677};
678
679/*---------------------------------------------------------------------------
680 * Global options for an ECLiPSe worker
681 *---------------------------------------------------------------------------*/
682
683/*
684 * ALLOC_PRE = fixed sizes pre-allocated
685 * ALLOC_FIXED = virtual space at fixed addresses
686 * ALLOC_VIRTUAL = virtual space pre-allocated , system allocates real memory
687 */
688enum t_allocation { ALLOC_PRE,ALLOC_FIXED,ALLOC_VIRTUAL } ;
689enum t_io_option { SHARED_IO,OWN_IO,MEMORY_IO } ;
690
691typedef struct
692{
693    /* memory in kbytes for megalog page buffers */
694    int		option_p;
695
696    /* flag for shared heap and the name of the corresponding mapfile */
697    char	*mapfile;
698
699    /* The number of this worker. 0 for sequential system */
700    int		parallel_worker;
701
702    /* How to initialise the standard I/O streams */
703    int		io_option;
704
705    /* for access the command line in the built-ins	*/
706    char	**Argv;
707    int		Argc;
708
709    /* readline enabled */
710    int		rl;
711
712    /* sizes of stack pairs in bytes */
713    uword	localsize;
714    uword	globalsize;
715    /* sizes of heaps in bytes */
716    uword	privatesize;
717    uword	sharedsize;
718
719    /* panic callback */
720    void	(*user_panic)ARGS((const char*,const char *));
721
722    int		allocation;
723
724    /* the initial user module */
725    char	*default_module;
726
727    /* The directory where eclipse is installed. If this is not set
728     * at initialisation time, the value of $ECLIPSEHOME gets filled in */
729    char	*eclipse_home;
730
731    /* flags for different engine initialisation options */
732    int		init_flags;
733
734    /* flag to enable internal debugging facilities (0=none, or >0) */
735    int		debug_level;
736
737    /* the initial default_language */
738    char	*default_language;
739
740} t_eclipse_options;
741
742
743/*---------------------------------------------------------------------------
744 * A table of pre-computed DIDs
745 *---------------------------------------------------------------------------*/
746
747typedef struct
748{
749    dident
750	abort,
751	apply2,
752	at2,
753	block,
754	block_atomic,
755	call_body,
756	comma,
757	cond,
758	cut,
759	emulate,
760	exit_block,
761	fail,
762	kernel_sepia,
763	list,
764	nil,
765	semicolon,
766	colon,
767	sepia,
768	true0,
769	abolish,
770	abs,
771	acos,
772	all,
773	ampersand,
774	and2,
775	answer,
776	append,
777	arg,
778	subscript,
779	asin,
780	atan,
781	atom,
782	atom0,
783	atomic,
784	bar,
785	bitnot,
786	bignum,
787	break0,
788	bsi,
789	built_in,
790	local_control_overflow,
791	byte,
792	call,
793	call_explicit,
794	clause,
795	clause0,
796	cn,
797	command,
798	comment,
799	compile,
800	compile_stream,
801	compound,
802	compound0,
803	constrained,
804	cos,
805	cprolog,
806	cut_to,
807	debug,
808	log_output,
809	warning_output,
810	debugger,
811	default0,
812	default_module,
813	define_global_macro3,
814	define_local_macro3,
815	delay,
816	denominator1,
817	diff_reg,
818	div,
819	dummy_call,
820	dynamic,
821	e,
822	eclipse_home,
823	ellipsis,
824	empty,
825	eocl,
826	eof,
827	eoi,
828	equal,
829	erase_macro1,
830	err,
831	eerrno,			/* errno causes error on WinNT */
832	error,
833	error_handler,
834	exit_postponed,
835	exp,
836	export1,
837	exportb,
838	external,
839	fail_if,
840	fail_if0,
841	file_query,
842	breal,
843	breal1,
844	breal_from_bounds,
845	breal_min,
846	breal_max,
847	fix,
848	float0,
849	float1,
850	floor1,
851	flush,
852	free,
853	free1,
854	from,
855	functor,
856	garbage_collect_dictionary,
857	global,
858	global0,
859	globalb,
860	go,
861	goal,
862	goalch,
863	grammar,
864	greater,
865	greaterq,
866	ground,
867	throw1,
868	halt,
869	halt0,
870        hang,
871	identical,
872	if2,
873	import,
874	import_fromb,
875	inf,
876	inf0,
877	infq,
878	infq0,
879	input,
880	integer,
881	integer0,
882	invoc,
883	is_event,
884	is_handle,
885	is_list,
886	is_suspension,
887	double1,
888	double0,
889	is,
890	global_trail_overflow,
891	leash,
892	less,
893	lessq,
894	ln,
895	local,
896	local_break,
897	local0,
898	localb,
899	lock,
900	lshift,
901	macro,
902	make_suspension,
903	max,
904	maxint,
905	meta,
906	meta0,
907	metacall,
908	min,
909	minint,
910	minus,
911	minus0,
912	minus1,
913	mode,
914	module0,
915	module1,
916	module_directive,
917	modulo,
918	nilcurbr,
919	nilcurbr1,
920	no_err_handler,
921	nodebug,
922        nohang,
923	nonground,
924	nonvar,
925	naf,
926	not0,
927	not1,
928	not_equal,
929	not_identical,
930	not_not,
931	not_unify,
932	notp0,
933	notrace,
934	null,
935	number,
936	numerator1,
937	off,
938	on,
939	once,
940	once0,
941	or2,
942	output,
943	pcompile,
944	pi,
945	plus,
946	plus0,
947	plus1,
948	plusplus,
949	power,
950	pragma,
951	print,
952	priority,
953	prolog,
954	protect_arg,
955	question,
956	quintus,
957	quotient,
958	rational0,
959	rational1,
960	read,
961	read1,
962	read2,
963	real,
964	real0,
965	reset,
966	round,
967	rshift,
968	rulech0,
969	rulech1,
970	rulech2,
971	semi0,
972	sicstus,
973	sin,
974	skip,
975	softcut,
976	some,
977	spy,
978	sqrt,
979	state,
980	stderr0,
981	stdin0,
982	stdout0,
983	stop,
984	string0,
985	string,
986	sup,
987	sup0,
988	supq,
989	supq0,
990	suspending,
991	suspend_attr,
992	syscut,
993	syserror,
994	system,
995	system_debug,
996	tan,
997	term,
998	times,
999	top_only,
1000	trace,
1001	trace_frame,
1002	trans_term,
1003	unify,
1004	unify0,
1005	univ,
1006	universally_quantified,
1007	user_input,
1008	user_output,
1009	user_error,
1010	update,
1011	uref,
1012	user,
1013	var,
1014	var0,
1015	wake,
1016	with2,
1017	with_attributes2,
1018	woken,
1019	write,
1020	write1,
1021	write2,
1022	writeq1,
1023	writeq2,
1024	xor2;
1025} standard_dids;
1026
1027
1028/*
1029 * A structure containing all exported Eclipse data
1030 */
1031
1032typedef struct
1033{
1034    struct machine		m;
1035    struct shared_data_t	*shared;
1036    struct tag_descriptor	td[NTYPES+1];
1037    standard_dids		d;
1038} t_eclipse_data;
1039
1040