a68g-prelude.h

     
   1  //! @file a68g-prelude.h
   2  //! @author J. Marcel van der Veer
   3  //!
   4  //! @section Copyright
   5  //!
   6  //! This file is part of Algol68G - an Algol 68 compiler-interpreter.
   7  //! Copyright 2001-2023 J. Marcel van der Veer [algol68g@xs4all.nl].
   8  //!
   9  //! @section License
  10  //!
  11  //! This program is free software; you can redistribute it and/or modify it 
  12  //! under the terms of the GNU General Public License as published by the 
  13  //! Free Software Foundation; either version 3 of the License, or 
  14  //! (at your option) any later version.
  15  //!
  16  //! This program is distributed in the hope that it will be useful, but 
  17  //! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  18  //! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 
  19  //! more details. You should have received a copy of the GNU General Public 
  20  //! License along with this program. If not, see [http://www.gnu.org/licenses/].
  21  
  22  #if !defined (__A68G_PRELUDE_H__)
  23  #define __A68G_PRELUDE_H__
  24  
  25  #define A68_STD A68_TRUE
  26  #define A68_EXT A68_FALSE
  27  
  28  extern MOID_T *a68_proc (MOID_T *, ...);
  29  extern void a68_idf (BOOL_T, char *, MOID_T *, GPROC *);
  30  extern void a68_prio (char *, int);
  31  extern void a68_op (BOOL_T, char *, MOID_T *, GPROC *);
  32  extern void a68_mode (int, char *, MOID_T **);
  33  
  34  // ALGOL68C type procs.
  35  
  36  #define A68C_DEFIO(name, pname, mode) {\
  37    m = a68_proc (MODE (mode), M_REF_FILE, NO_MOID);\
  38    a68_idf (A68_EXT, "get" #name, m, genie_get_##pname);\
  39    m = a68_proc (M_VOID, M_REF_FILE, MODE (mode), NO_MOID);\
  40    a68_idf (A68_EXT, "put" #name, m, genie_put_##pname);\
  41    m = a68_proc (MODE (mode), NO_MOID);\
  42    a68_idf (A68_EXT, "read" #name, m, genie_read_##pname);\
  43    m = a68_proc (M_VOID, MODE (mode), NO_MOID);\
  44    a68_idf (A68_EXT, "print" #name, m, genie_print_##pname);\
  45  }
  46  
  47  #define IS_NL_FF(ch) ((ch) == NEWLINE_CHAR || (ch) == FORMFEED_CHAR)
  48  
  49  #define A68_MONAD(n, MODE, OP)\
  50  void n (NODE_T * p) {\
  51    MODE *i;\
  52    POP_OPERAND_ADDRESS (p, i, MODE);\
  53    VALUE (i) = OP (VALUE (i));\
  54  }
  55  
  56  #if (A68_LEVEL >= 3)
  57  extern GPROC genie_lt_bits;
  58  extern GPROC genie_gt_bits;
  59  extern DOUBLE_T mp_to_double_real (NODE_T *, MP_T *, int);
  60  extern MP_T *double_real_to_mp (NODE_T *, MP_T *, DOUBLE_T, int);
  61  #endif
  62  
  63  extern A68_REF c_string_to_row_char (NODE_T *, char *, int);
  64  extern A68_REF c_to_a_string (NODE_T *, char *, int);
  65  extern A68_REF empty_row (NODE_T *, MOID_T *);
  66  extern A68_REF empty_string (NODE_T *);
  67  extern A68_REF genie_make_row (NODE_T *, MOID_T *, int, ADDR_T);
  68  extern A68_REF genie_store (NODE_T *, MOID_T *, A68_REF *, A68_REF *);
  69  extern A68_REF heap_generator (NODE_T *, MOID_T *, int);
  70  extern A68_REF tmp_to_a68_string (NODE_T *, char *);
  71  extern ADDR_T calculate_internal_index (A68_TUPLE *, int);
  72  extern BOOL_T close_device (NODE_T *, A68_FILE *);
  73  extern BOOL_T genie_int_case_unit (NODE_T *, int, int *);
  74  extern BOOL_T increment_internal_index (A68_TUPLE *, int);
  75  extern char *a_to_c_string (NODE_T *, char *, A68_REF);
  76  extern char *propagator_name (PROP_PROC * p);
  77  extern FILE *a68_fopen (char *, char *, char *);
  78  extern GPROC get_global_level;
  79  extern GPROC initialise_frame;
  80  extern int a68_finite (REAL_T);
  81  extern int a68_isinf (REAL_T);
  82  extern int a68_isnan (REAL_T);
  83  extern int a68_string_size (NODE_T *, A68_REF);
  84  extern int char_value (int);
  85  extern int grep_in_string (char *, char *, int *, int *);
  86  extern INT_T a68_round (REAL_T);
  87  extern PROP_T genie_generator (NODE_T *);
  88  extern REAL_T seconds (void);
  89  extern REAL_T ten_up (int);
  90  extern ssize_t io_read_conv (FILE_T, void *, size_t);
  91  extern ssize_t io_read (FILE_T, void *, size_t);
  92  extern ssize_t io_write_conv (FILE_T, const void *, size_t);
  93  extern ssize_t io_write (FILE_T, const void *, size_t);
  94  extern unt heap_available (void);
  95  extern void a68_div_complex (A68_REAL *, A68_REAL *, A68_REAL *);
  96  extern void a68_exit (int);
  97  extern void a68_exp_complex (A68_REAL *, A68_REAL *);
  98  extern void change_breakpoints (NODE_T *, unt, int, BOOL_T *, char *);
  99  extern void change_masks (NODE_T *, unt, BOOL_T);
 100  extern void colour_object (BYTE_T *, MOID_T *);
 101  extern void deltagammainc (REAL_T *, REAL_T *, REAL_T, REAL_T, REAL_T, REAL_T);
 102  extern void exit_genie (NODE_T *, int);
 103  extern void gc_heap (NODE_T *, ADDR_T);
 104  extern void genie_call_event_routine (NODE_T *, MOID_T *, A68_PROCEDURE *, ADDR_T, ADDR_T);
 105  extern void genie_call_operator (NODE_T *, ADDR_T);
 106  extern void genie_call_procedure (NODE_T *, MOID_T *, MOID_T *, MOID_T *, A68_PROCEDURE *, ADDR_T, ADDR_T);
 107  extern void genie_check_initialisation (NODE_T *, BYTE_T *, MOID_T *);
 108  extern void genie_f_and_becomes (NODE_T *, MOID_T *, GPROC *);
 109  extern void genie_find_proc_op (NODE_T *, int *);
 110  extern void genie_free (NODE_T *);
 111  extern void genie_generator_internal (NODE_T *, MOID_T *, TAG_T *, LEAP_T, ADDR_T);
 112  extern void genie_generator_stowed (NODE_T *, BYTE_T *, NODE_T **, ADDR_T *);
 113  extern void genie_init_rng (void);
 114  extern void genie_preprocess (NODE_T *, int *, void *);
 115  extern void genie_push_undefined (NODE_T *, MOID_T *);
 116  extern void genie_read_standard (NODE_T *, MOID_T *, BYTE_T *, A68_REF);
 117  extern void genie_serial_clause (NODE_T *, jmp_buf *);
 118  extern void genie_serial_units (NODE_T *, NODE_T **, jmp_buf *, ADDR_T);
 119  extern void genie_string_to_value (NODE_T *, MOID_T *, BYTE_T *, A68_REF);
 120  extern void genie_subscript (NODE_T *, A68_TUPLE **, INT_T *, NODE_T **);
 121  extern void genie_value_to_string (NODE_T *, MOID_T *, BYTE_T *, int);
 122  extern void genie_variable_dec (NODE_T *, NODE_T **, ADDR_T);
 123  extern void genie (void *);
 124  extern void genie_write_standard (NODE_T *, MOID_T *, BYTE_T *, A68_REF);
 125  extern void initialise_internal_index (A68_TUPLE *, int);
 126  extern void io_close_tty_line (void);
 127  extern void io_write_string (FILE_T, const char *);
 128  extern void monitor_error (char *, char *);
 129  extern void mp_strtou (NODE_T *, MP_T *, char *, MOID_T *);
 130  extern void print_internal_index (FILE_T, A68_TUPLE *, int);
 131  extern void print_item (NODE_T *, FILE_T, BYTE_T *, MOID_T *);
 132  extern void single_step (NODE_T *, unt);
 133  extern void skip_nl_ff (NODE_T *, int *, A68_REF);
 134  extern void stack_dump (FILE_T, ADDR_T, int, int *);
 135  extern void value_sign_error (NODE_T *, MOID_T *, A68_REF);
 136  extern void where_in_source (FILE_T, NODE_T *);
 137  
 138  // Standard prelude RTS
 139  
 140  extern GPROC genie_a68_argc;
 141  extern GPROC genie_a68_argv;
 142  extern GPROC genie_abend;
 143  extern GPROC genie_abs_bits;
 144  extern GPROC genie_abs_bool;
 145  extern GPROC genie_abs_char;
 146  extern GPROC genie_abs_complex;
 147  extern GPROC genie_abs_int;
 148  extern GPROC genie_abs_real;
 149  extern GPROC genie_acos_complex;
 150  extern GPROC genie_acosdg_real;
 151  extern GPROC genie_acosh_complex;
 152  extern GPROC genie_acosh_real;
 153  extern GPROC genie_acos_real;
 154  extern GPROC genie_acotdg_real;
 155  extern GPROC genie_acot_real;
 156  extern GPROC genie_acsc_real;
 157  extern GPROC genie_add_bits;
 158  extern GPROC genie_add_bytes;
 159  extern GPROC genie_add_char;
 160  extern GPROC genie_add_complex;
 161  extern GPROC genie_add_int;
 162  extern GPROC genie_add_long_bytes;
 163  extern GPROC genie_add_mp_int;
 164  extern GPROC genie_add_real;
 165  extern GPROC genie_add_string;
 166  extern GPROC genie_and_bits;
 167  extern GPROC genie_and_bool;
 168  extern GPROC genie_argc;
 169  extern GPROC genie_arg_complex;
 170  extern GPROC genie_argv;
 171  extern GPROC genie_asec_real;
 172  extern GPROC genie_asin_complex;
 173  extern GPROC genie_asindg_real;
 174  extern GPROC genie_asinh_complex;
 175  extern GPROC genie_asinh_real;
 176  extern GPROC genie_asin_real;
 177  extern GPROC genie_associate;
 178  extern GPROC genie_atan2dg_real;
 179  extern GPROC genie_atan2_real;
 180  extern GPROC genie_atan_complex;
 181  extern GPROC genie_atandg_real;
 182  extern GPROC genie_atanh_complex;
 183  extern GPROC genie_atanh_real;
 184  extern GPROC genie_atan_real;
 185  extern GPROC genie_backspace;
 186  extern GPROC genie_backtrace;
 187  extern GPROC genie_beta_inc_cf_real;
 188  extern GPROC genie_beta_real;
 189  extern GPROC genie_bin_int;
 190  extern GPROC genie_bin_possible;
 191  extern GPROC genie_bits;
 192  extern GPROC genie_bits_lengths;
 193  extern GPROC genie_bits_pack;
 194  extern GPROC genie_bits_shorths;
 195  extern GPROC genie_bits_width;
 196  extern GPROC genie_blank_char;
 197  extern GPROC genie_block;
 198  extern GPROC genie_break;
 199  extern GPROC genie_bytes_lengths;
 200  extern GPROC genie_bytespack;
 201  extern GPROC genie_bytes_shorths;
 202  extern GPROC genie_bytes_width;
 203  extern GPROC genie_cd;
 204  extern GPROC genie_char_in_string;
 205  extern GPROC genie_choose_real;
 206  extern GPROC genie_clear_bits;
 207  extern GPROC genie_clear_long_bits;
 208  extern GPROC genie_close;
 209  extern GPROC genie_columns;
 210  extern GPROC genie_complex_lengths;
 211  extern GPROC genie_complex_shorths;
 212  extern GPROC genie_compressible;
 213  extern GPROC genie_conj_complex;
 214  extern GPROC genie_cos_complex;
 215  extern GPROC genie_cosdg_real;
 216  extern GPROC genie_cosh_complex;
 217  extern GPROC genie_cosh_real;
 218  extern GPROC genie_cospi_real;
 219  extern GPROC genie_cos_real;
 220  extern GPROC genie_cotdg_real;
 221  extern GPROC genie_cotpi_real;
 222  extern GPROC genie_cot_real;
 223  extern GPROC genie_cputime;
 224  extern GPROC genie_create;
 225  extern GPROC genie_create_pipe;
 226  extern GPROC genie_csc_real;
 227  extern GPROC genie_curt_real;
 228  extern GPROC genie_debug;
 229  extern GPROC genie_declaration;
 230  extern GPROC genie_directory;
 231  extern GPROC genie_divab_complex;
 232  extern GPROC genie_divab_real;
 233  extern GPROC genie_div_complex;
 234  extern GPROC genie_div_int;
 235  extern GPROC genie_div_real;
 236  extern GPROC genie_draw_possible;
 237  extern GPROC genie_dyad_elems;
 238  extern GPROC genie_dyad_lwb;
 239  extern GPROC genie_dyad_upb;
 240  extern GPROC genie_elem_bits;
 241  extern GPROC genie_elem_bytes;
 242  extern GPROC genie_elem_long_bits;
 243  extern GPROC genie_elem_long_bits;
 244  extern GPROC genie_elem_long_bytes;
 245  extern GPROC genie_elem_string;
 246  extern GPROC genie_enquiry_clause;
 247  extern GPROC genie_entier_real;
 248  extern GPROC genie_eof;
 249  extern GPROC genie_eoln;
 250  extern GPROC genie_eq_bits;
 251  extern GPROC genie_eq_bool;
 252  extern GPROC genie_eq_bytes;
 253  extern GPROC genie_eq_char;
 254  extern GPROC genie_eq_complex;
 255  extern GPROC genie_eq_int;
 256  extern GPROC genie_eq_long_bytes;
 257  extern GPROC genie_eq_real;
 258  extern GPROC genie_eq_string;
 259  extern GPROC genie_erase;
 260  extern GPROC genie_erfc_real;
 261  extern GPROC genie_erf_real;
 262  extern GPROC genie_errno;
 263  extern GPROC genie_error_char;
 264  extern GPROC genie_establish;
 265  extern GPROC genie_evaluate;
 266  extern GPROC genie_exec;
 267  extern GPROC genie_exec_sub;
 268  extern GPROC genie_exec_sub_output;
 269  extern GPROC genie_exec_sub_pipeline;
 270  extern GPROC genie_exp_char;
 271  extern GPROC genie_exp_complex;
 272  extern GPROC genie_exp_real;
 273  extern GPROC genie_exp_width;
 274  extern GPROC genie_fact_real;
 275  extern GPROC genie_file_is_block_device;
 276  extern GPROC genie_file_is_char_device;
 277  extern GPROC genie_file_is_directory;
 278  extern GPROC genie_file_is_regular;
 279  extern GPROC genie_file_mode;
 280  extern GPROC genie_first_random;
 281  extern GPROC genie_flip_char;
 282  extern GPROC genie_flop_char;
 283  extern GPROC genie_fork;
 284  extern GPROC genie_formfeed_char;
 285  extern GPROC genie_gamma_inc_f_real;
 286  extern GPROC genie_gamma_inc_gf_real;
 287  extern GPROC genie_gamma_inc_g_real;
 288  extern GPROC genie_gamma_inc_h_real;
 289  extern GPROC genie_gamma_real;
 290  extern GPROC genie_garbage_collections;
 291  extern GPROC genie_garbage_freed;
 292  extern GPROC genie_garbage_refused;
 293  extern GPROC genie_garbage_seconds;
 294  extern GPROC genie_gc_heap;
 295  extern GPROC genie_ge_bits;
 296  extern GPROC genie_ge_bytes;
 297  extern GPROC genie_ge_char;
 298  extern GPROC genie_ge_int;
 299  extern GPROC genie_ge_long_bits;
 300  extern GPROC genie_ge_long_bytes;
 301  extern GPROC genie_generator_bounds;
 302  extern GPROC genie_ge_real;
 303  extern GPROC genie_ge_string;
 304  extern GPROC genie_get_bits;
 305  extern GPROC genie_get_bool;
 306  extern GPROC genie_get_char;
 307  extern GPROC genie_get_complex;
 308  extern GPROC genie_getenv;
 309  extern GPROC genie_get_int;
 310  extern GPROC genie_get_long_bits;
 311  extern GPROC genie_get_long_int;
 312  extern GPROC genie_get_long_real;
 313  extern GPROC genie_get_possible;
 314  extern GPROC genie_get_real;
 315  extern GPROC genie_get_sound;
 316  extern GPROC genie_get_string;
 317  extern GPROC genie_grep_in_string;
 318  extern GPROC genie_grep_in_substring;
 319  extern GPROC genie_gt_bytes;
 320  extern GPROC genie_gt_char;
 321  extern GPROC genie_gt_int;
 322  extern GPROC genie_gt_long_bytes;
 323  extern GPROC genie_gt_real;
 324  extern GPROC genie_gt_string;
 325  extern GPROC genie_i_complex;
 326  extern GPROC genie_identity_dec;
 327  extern GPROC genie_idf;
 328  extern GPROC genie_idle;
 329  extern GPROC genie_i_int_complex;
 330  extern GPROC genie_im_complex;
 331  extern GPROC genie_infinity_real;
 332  extern GPROC genie_init_heap;
 333  extern GPROC genie_init_transput;
 334  extern GPROC genie_int_lengths;
 335  extern GPROC genie_int_shorths;
 336  extern GPROC genie_int_width;
 337  extern GPROC genie_inverfc_real;
 338  extern GPROC genie_inverf_real;
 339  extern GPROC genie_is_alnum;
 340  extern GPROC genie_is_alpha;
 341  extern GPROC genie_is_cntrl;
 342  extern GPROC genie_is_digit;
 343  extern GPROC genie_is_graph;
 344  extern GPROC genie_is_lower;
 345  extern GPROC genie_is_print;
 346  extern GPROC genie_is_punct;
 347  extern GPROC genie_is_space;
 348  extern GPROC genie_is_upper;
 349  extern GPROC genie_is_xdigit;
 350  extern GPROC genie_last_char_in_string;
 351  extern GPROC genie_le_bits;
 352  extern GPROC genie_le_bytes;
 353  extern GPROC genie_le_char;
 354  extern GPROC genie_le_int;
 355  extern GPROC genie_le_long_bits;
 356  extern GPROC genie_le_long_bytes;
 357  extern GPROC genie_leng_bytes;
 358  extern GPROC genie_lengthen_long_bits_to_row_bool;
 359  extern GPROC genie_le_real;
 360  extern GPROC genie_le_string;
 361  extern GPROC genie_lj_e_12_6;
 362  extern GPROC genie_lj_f_12_6;
 363  extern GPROC genie_ln1p_real;
 364  extern GPROC genie_ln_beta_real;
 365  extern GPROC genie_ln_choose_real;
 366  extern GPROC genie_ln_complex;
 367  extern GPROC genie_ln_fact_real;
 368  extern GPROC genie_ln_gamma_real;
 369  extern GPROC genie_ln_real;
 370  extern GPROC genie_localtime;
 371  extern GPROC genie_lock;
 372  extern GPROC genie_log_real;
 373  extern GPROC genie_long_bits_pack;
 374  extern GPROC genie_long_bits_width;
 375  extern GPROC genie_long_bytespack;
 376  extern GPROC genie_long_bytes_width;
 377  extern GPROC genie_long_exp_width;
 378  extern GPROC genie_long_int_width;
 379  extern GPROC genie_long_max_bits;
 380  extern GPROC genie_long_max_int;
 381  extern GPROC genie_long_max_real;
 382  extern GPROC genie_long_min_real;
 383  extern GPROC genie_long_next_random;
 384  extern GPROC genie_long_real_width;
 385  extern GPROC genie_long_small_real;
 386  extern GPROC genie_lt_bytes;
 387  extern GPROC genie_lt_char;
 388  extern GPROC genie_lt_int;
 389  extern GPROC genie_lt_long_bytes;
 390  extern GPROC genie_lt_real;
 391  extern GPROC genie_lt_string;
 392  extern GPROC genie_make_term;
 393  extern GPROC genie_max_abs_char;
 394  extern GPROC genie_max_bits;
 395  extern GPROC genie_max_int;
 396  extern GPROC genie_max_real;
 397  extern GPROC genie_min_real;
 398  extern GPROC genie_minusab_complex;
 399  extern GPROC genie_minusab_int;
 400  extern GPROC genie_minusab_mp_int;
 401  extern GPROC genie_minusab_real;
 402  extern GPROC genie_minus_complex;
 403  extern GPROC genie_minus_infinity_real;
 404  extern GPROC genie_minus_int;
 405  extern GPROC genie_minus_real;
 406  extern GPROC genie_modab_int;
 407  extern GPROC genie_mod_bits;
 408  extern GPROC genie_mod_int;
 409  extern GPROC genie_monad_elems;
 410  extern GPROC genie_monad_lwb;
 411  extern GPROC genie_monad_upb;
 412  extern GPROC genie_mp_radix;
 413  extern GPROC genie_mul_complex;
 414  extern GPROC genie_mul_int;
 415  extern GPROC genie_mul_mp_int;
 416  extern GPROC genie_mul_real;
 417  extern GPROC genie_ne_bits;
 418  extern GPROC genie_ne_bool;
 419  extern GPROC genie_ne_bytes;
 420  extern GPROC genie_ne_char;
 421  extern GPROC genie_ne_complex;
 422  extern GPROC genie_ne_int;
 423  extern GPROC genie_ne_long_bytes;
 424  extern GPROC genie_ne_real;
 425  extern GPROC genie_ne_string;
 426  extern GPROC genie_new_line;
 427  extern GPROC genie_newline_char;
 428  extern GPROC genie_new_page;
 429  extern GPROC genie_new_sound;
 430  extern GPROC genie_next_random;
 431  extern GPROC genie_next_rnd;
 432  extern GPROC genie_not_bits;
 433  extern GPROC genie_not_bool;
 434  extern GPROC genie_null_char;
 435  extern GPROC genie_odd_int;
 436  extern GPROC genie_on_file_end;
 437  extern GPROC genie_on_format_end;
 438  extern GPROC genie_on_format_error;
 439  extern GPROC genie_on_gc_event;
 440  extern GPROC genie_on_line_end;
 441  extern GPROC genie_on_open_error;
 442  extern GPROC genie_on_page_end;
 443  extern GPROC genie_on_transput_error;
 444  extern GPROC genie_on_value_error;
 445  extern GPROC genie_open;
 446  extern GPROC genie_operator_dec;
 447  extern GPROC genie_or_bits;
 448  extern GPROC genie_or_bool;
 449  extern GPROC genie_overab_int;
 450  extern GPROC genie_over_bits;
 451  extern GPROC genie_over_int;
 452  extern GPROC genie_pi;
 453  extern GPROC genie_plusab_bytes;
 454  extern GPROC genie_plusab_complex;
 455  extern GPROC genie_plusab_int;
 456  extern GPROC genie_plusab_long_bytes;
 457  extern GPROC genie_plusab_mp_int;
 458  extern GPROC genie_plusab_real;
 459  extern GPROC genie_plusab_string;
 460  extern GPROC genie_plusto_bytes;
 461  extern GPROC genie_plusto_long_bytes;
 462  extern GPROC genie_plusto_string;
 463  extern GPROC genie_pow_complex_int;
 464  extern GPROC genie_pow_int;
 465  extern GPROC genie_pow_real;
 466  extern GPROC genie_pow_real_int;
 467  extern GPROC genie_preemptive_gc_heap;
 468  extern GPROC genie_print_bits;
 469  extern GPROC genie_print_bool;
 470  extern GPROC genie_print_char;
 471  extern GPROC genie_print_complex;
 472  extern GPROC genie_print_int;
 473  extern GPROC genie_print_long_bits;
 474  extern GPROC genie_print_long_int;
 475  extern GPROC genie_print_long_real;
 476  extern GPROC genie_print_real;
 477  extern GPROC genie_print_string;
 478  extern GPROC genie_print_string;
 479  extern GPROC genie_proc_variable_dec;
 480  extern GPROC genie_program_idf;
 481  extern GPROC genie_put_bits;
 482  extern GPROC genie_put_bool;
 483  extern GPROC genie_put_char;
 484  extern GPROC genie_put_complex;
 485  extern GPROC genie_put_int;
 486  extern GPROC genie_put_long_bits;
 487  extern GPROC genie_put_long_int;
 488  extern GPROC genie_put_long_real;
 489  extern GPROC genie_put_possible;
 490  extern GPROC genie_put_real;
 491  extern GPROC genie_put_string;
 492  extern GPROC genie_pwd;
 493  extern GPROC genie_read;
 494  extern GPROC genie_read_bin;
 495  extern GPROC genie_read_bin_file;
 496  extern GPROC genie_read_bits;
 497  extern GPROC genie_read_bool;
 498  extern GPROC genie_read_char;
 499  extern GPROC genie_read_complex;
 500  extern GPROC genie_read_file;
 501  extern GPROC genie_read_file_format;
 502  extern GPROC genie_read_format;
 503  extern GPROC genie_read_int;
 504  extern GPROC genie_read_line;
 505  extern GPROC genie_read_long_bits;
 506  extern GPROC genie_read_long_int;
 507  extern GPROC genie_read_long_real;
 508  extern GPROC genie_read_real;
 509  extern GPROC genie_read_string;
 510  extern GPROC genie_real_lengths;
 511  extern GPROC genie_realpath;
 512  extern GPROC genie_real_shorths;
 513  extern GPROC genie_real_width;
 514  extern GPROC genie_re_complex;
 515  extern GPROC genie_reidf_possible;
 516  extern GPROC genie_repr_char;
 517  extern GPROC genie_reset;
 518  extern GPROC genie_reset_errno;
 519  extern GPROC genie_reset_possible;
 520  extern GPROC genie_rol_bits;
 521  extern GPROC genie_ror_bits;
 522  extern GPROC genie_round_real;
 523  extern GPROC genie_rows;
 524  extern GPROC genie_sec_real;
 525  extern GPROC genie_set;
 526  extern GPROC genie_set_bits;
 527  extern GPROC genie_set_long_bits;
 528  extern GPROC genie_set_possible;
 529  extern GPROC genie_set_return_code;
 530  extern GPROC genie_set_sound;
 531  extern GPROC genie_shl_bits;
 532  extern GPROC genie_shorten_bytes;
 533  extern GPROC genie_shr_bits;
 534  extern GPROC genie_sign_int;
 535  extern GPROC genie_sign_real;
 536  extern GPROC genie_sin_complex;
 537  extern GPROC genie_sindg_real;
 538  extern GPROC genie_sinh_complex;
 539  extern GPROC genie_sinh_real;
 540  extern GPROC genie_sinpi_real;
 541  extern GPROC genie_sin_real;
 542  extern GPROC genie_sleep;
 543  extern GPROC genie_small_real;
 544  extern GPROC genie_sort_row_string;
 545  extern GPROC genie_sound_channels;
 546  extern GPROC genie_sound_rate;
 547  extern GPROC genie_sound_resolution;
 548  extern GPROC genie_sound_samples;
 549  extern GPROC genie_space;
 550  extern GPROC genie_sqrt_complex;
 551  extern GPROC genie_sqrt_real;
 552  extern GPROC genie_stack_pointer;
 553  extern GPROC genie_stand_back;
 554  extern GPROC genie_stand_back_channel;
 555  extern GPROC genie_stand_draw_channel;
 556  extern GPROC genie_stand_error;
 557  extern GPROC genie_stand_error_channel;
 558  extern GPROC genie_stand_in;
 559  extern GPROC genie_stand_in_channel;
 560  extern GPROC genie_stand_out;
 561  extern GPROC genie_stand_out_channel;
 562  extern GPROC genie_strerror;
 563  extern GPROC genie_string_in_string;
 564  extern GPROC genie_sub_bits;
 565  extern GPROC genie_sub_complex;
 566  extern GPROC genie_sub_in_string;
 567  extern GPROC genie_sub_int;
 568  extern GPROC genie_sub_mp_int;
 569  extern GPROC genie_sub_real;
 570  extern GPROC genie_system;
 571  extern GPROC genie_system_heap_pointer;
 572  extern GPROC genie_system_stack_pointer;
 573  extern GPROC genie_system_stack_size;
 574  extern GPROC genie_tab_char;
 575  extern GPROC genie_tan_complex;
 576  extern GPROC genie_tandg_real;
 577  extern GPROC genie_tanh_complex;
 578  extern GPROC genie_tanh_real;
 579  extern GPROC genie_tanpi_real;
 580  extern GPROC genie_tan_real;
 581  extern GPROC genie_term;
 582  extern GPROC genie_timesab_complex;
 583  extern GPROC genie_timesab_int;
 584  extern GPROC genie_timesab_mp_int;
 585  extern GPROC genie_timesab_real;
 586  extern GPROC genie_timesab_string;
 587  extern GPROC genie_times_bits;
 588  extern GPROC genie_times_char_int;
 589  extern GPROC genie_times_int_char;
 590  extern GPROC genie_times_int_string;
 591  extern GPROC genie_times_string_int;
 592  extern GPROC genie_to_lower;
 593  extern GPROC genie_to_upper;
 594  extern GPROC genie_unimplemented;
 595  extern GPROC genie_utctime;
 596  extern GPROC genie_waitpid;
 597  extern GPROC genie_whole;
 598  extern GPROC genie_write;
 599  extern GPROC genie_write_bin;
 600  extern GPROC genie_write_bin_file;
 601  extern GPROC genie_write_file;
 602  extern GPROC genie_write_file_format;
 603  extern GPROC genie_write_format;
 604  extern GPROC genie_xor_bits;
 605  extern GPROC genie_xor_bool;
 606  
 607  #if defined (S_ISFIFO)
 608  extern GPROC genie_file_is_fifo;
 609  #endif
 610  
 611  #if defined (S_ISLNK)
 612  extern GPROC genie_file_is_link;
 613  #endif
 614  
 615  #if defined (BUILD_PARALLEL_CLAUSE)
 616  extern GPROC genie_down_sema;
 617  extern GPROC genie_level_int_sema;
 618  extern GPROC genie_level_sema_int;
 619  extern GPROC genie_up_sema;
 620  #endif
 621  
 622  #if defined (BUILD_HTTP)
 623  extern GPROC genie_http_content;
 624  extern GPROC genie_tcp_request;
 625  #endif
 626  
 627  #if defined (HAVE_CURSES)
 628  extern GPROC genie_curses_clear;
 629  extern GPROC genie_curses_del_char;
 630  extern GPROC genie_curses_green;
 631  extern GPROC genie_curses_cyan;
 632  extern GPROC genie_curses_white;
 633  extern GPROC genie_curses_red;
 634  extern GPROC genie_curses_yellow;
 635  extern GPROC genie_curses_magenta;
 636  extern GPROC genie_curses_blue;
 637  extern GPROC genie_curses_green_inverse;
 638  extern GPROC genie_curses_cyan_inverse;
 639  extern GPROC genie_curses_white_inverse;
 640  extern GPROC genie_curses_red_inverse;
 641  extern GPROC genie_curses_yellow_inverse;
 642  extern GPROC genie_curses_magenta_inverse;
 643  extern GPROC genie_curses_blue_inverse;
 644  extern GPROC genie_curses_columns;
 645  extern GPROC genie_curses_end;
 646  extern GPROC genie_curses_getchar;
 647  extern GPROC genie_curses_lines;
 648  extern GPROC genie_curses_move;
 649  extern GPROC genie_curses_putchar;
 650  extern GPROC genie_curses_refresh;
 651  extern GPROC genie_curses_start;
 652  #endif
 653  
 654  #if defined (HAVE_POSTGRESQL)
 655  extern GPROC genie_pq_backendpid;
 656  extern GPROC genie_pq_cmdstatus;
 657  extern GPROC genie_pq_cmdtuples;
 658  extern GPROC genie_pq_connectdb;
 659  extern GPROC genie_pq_db;
 660  extern GPROC genie_pq_errormessage;
 661  extern GPROC genie_pq_exec;
 662  extern GPROC genie_pq_fformat;
 663  extern GPROC genie_pq_finish;
 664  extern GPROC genie_pq_fname;
 665  extern GPROC genie_pq_fnumber;
 666  extern GPROC genie_pq_getisnull;
 667  extern GPROC genie_pq_getvalue;
 668  extern GPROC genie_pq_host;
 669  extern GPROC genie_pq_nfields;
 670  extern GPROC genie_pq_ntuples;
 671  extern GPROC genie_pq_options;
 672  extern GPROC genie_pq_parameterstatus;
 673  extern GPROC genie_pq_pass;
 674  extern GPROC genie_pq_port;
 675  extern GPROC genie_pq_protocolversion;
 676  extern GPROC genie_pq_reset;
 677  extern GPROC genie_pq_resulterrormessage;
 678  extern GPROC genie_pq_serverversion;
 679  extern GPROC genie_pq_socket;
 680  extern GPROC genie_pq_tty;
 681  extern GPROC genie_pq_user;
 682  #endif
 683  
 684  #if defined (HAVE_GNU_PLOTUTILS)
 685  extern GPROC genie_draw_aspect;
 686  extern GPROC genie_draw_atom;
 687  extern GPROC genie_draw_background_colour;
 688  extern GPROC genie_draw_background_colour_name;
 689  extern GPROC genie_draw_circle;
 690  extern GPROC genie_draw_clear;
 691  extern GPROC genie_draw_colour;
 692  extern GPROC genie_draw_colour_name;
 693  extern GPROC genie_draw_fillstyle;
 694  extern GPROC genie_draw_fontname;
 695  extern GPROC genie_draw_fontsize;
 696  extern GPROC genie_draw_get_colour_name;
 697  extern GPROC genie_draw_line;
 698  extern GPROC genie_draw_linestyle;
 699  extern GPROC genie_draw_linewidth;
 700  extern GPROC genie_draw_move;
 701  extern GPROC genie_draw_point;
 702  extern GPROC genie_draw_rect;
 703  extern GPROC genie_draw_show;
 704  extern GPROC genie_draw_star;
 705  extern GPROC genie_draw_text;
 706  extern GPROC genie_draw_textangle;
 707  extern GPROC genie_make_device;
 708  #endif
 709  
 710  #if defined (BUILD_PARALLEL_CLAUSE)
 711  extern PROP_T genie_parallel (NODE_T *);
 712  extern BOOL_T is_main_thread (void);
 713  extern void genie_abend_all_threads (NODE_T *, jmp_buf *, NODE_T *);
 714  extern void genie_set_exit_from_threads (int);
 715  #define SAME_THREAD(p, q) (pthread_equal((p), (q)) != 0)
 716  #define OTHER_THREAD(p, q) (pthread_equal((p), (q)) == 0)
 717  #endif
 718  
 719  #if defined (BUILD_LINUX)
 720  extern GPROC genie_sigsegv;
 721  #endif
 722  
 723  #endif