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