1 /* ====== BEGIN INCLUDE SEGMENT         apl_ws_info.incl.pl1 ====================================== */
  2 
  3 /* This structure contains all of the global data (or pointers to it) for the APL subsystem */
  4 
  5 /* automatic */
  6 
  7 declare   ws_info_ptr ptr initial (apl_static_$ws_info_ptr.static_ws_info_ptr);
  8 
  9 /* external static */
 10 
 11 declare   1 apl_static_$ws_info_ptr     external static aligned structure,
 12             2 static_ws_info_ptr        unaligned pointer;
 13 
 14 /* based */
 15 
 16 declare   1 ws_info                     aligned based (ws_info_ptr),
 17             2 version_number            fixed bin,          /* version of this structure (3) */
 18             2 switches                  unaligned,          /* mainly ws parameters */
 19               3 long_error_mode         bit,                /* if 1, long Multics format, else APL/360 format */
 20               3 debug_mode              bit,                /* if 1, system error causes escape to command level */
 21               3 canonicalize_mode       bit,                /* if 1, the editor canonicalizes user input */
 22               3 restrict_exec_command   bit,                /* if 1, the )EXEC command may not be used */
 23               3 restrict_debug_command  bit,                /* if 1, the )DEBUG command may not be used */
 24               3 restrict_external_functions
 25                                         bit,                /* if 1, the )ZFN, )MFN, and )DFN commands may not be used */
 26               3 restrict_load           bit,                /* if 1, the )LOAD and )COPY commands may not be used */
 27               3 restrict_load_directory bit,                /* if 1, no directory allowed in )LOAD or )COPY pathnames */
 28               3 restrict_save           bit,                /* if 1, the )SAVE command may not be used */
 29               3 restrict_save_directory bit,                /* if 1, no directory allowed in )SAVE pathnames */
 30               3 off_hold                bit,                /* if 1, )OFF HOLD was typed, else just )OFF */
 31               3 transparent_to_signals  bit,                /* if 1, any conditions slip right past APL */
 32               3 meter_mode              bit,                /* if 1, metering may be done, else speed is all-important */
 33               3 restrict_msg_command    bit,                /* if 1, the )MSG command may not be used. */
 34               3 compatibility_check_mode
 35                                         bit,                /* if 1, check for incompatible operators */
 36               3 no_quit_handler         bit,                /* if 1, do not trap QUITs. */
 37                                                             /* remaining 20 bits not presently used */
 38 
 39             2 values,                                       /* attributes of the workspace */
 40               3 digits                  fixed bin,          /* number of digits of precision printed on output */
 41               3 width                   fixed bin,          /* line length for formatted output */
 42               3 index_origin            fixed bin,          /* the index origin (0 or 1) */
 43               3 random_link             fixed bin(35),      /* seed for random number generator */
 44               3 fuzz                    float,              /* comparison tolerance (relative fuzz) */
 45               3 float_index_origin      float,              /* the index origin in floating point */
 46               3 number_of_symbols       fixed bin,          /* the number of symbol_beads currently in existence */
 47               3 maximum_value_stack_size
 48                                         fixed bin (18),     /* maximum number of words in one segment of value stack */
 49 
 50             2 pointers,                                     /* pointers to various internal tables */
 51               3 symbol_table_ptr        unaligned pointer,  /* -> symbol_table (apl_symbol_table.incl.pl1) */
 52               3 current_parse_frame_ptr unaligned pointer,  /* -> topmost parse frame */
 53               3 value_stack_ptr         unaligned pointer,  /* -> next free location on value stack */
 54               3 alloc_free_info_ptr     unaligned pointer,  /* -> apl_storage_mngr_ data (apl_storage_system_data.incl.pl1) */
 55 
 56             2 time_invoked              fixed bin(71),      /* clock time that APL was entered */
 57             2 integer_fuzz              float,              /* the absolute fuzz used in checking for integers */
 58             2 user_number               fixed bin(35),      /* number under which the user is signed on */
 59             2 latent_expression         unaligned pointer,  /* -> value_bead for QuadLX */
 60             2 lock                      char(32),           /* the lock currently set on this workspace (password) */
 61             2 wsid                      char(100),          /* the workspace identification: name, number name, or clear ws */
 62             2 last_error_code           fixed bin(35),      /* last code passed to apl_error_ */
 63             2 signoff_lock              character (32),
 64 
 65             2 interrupt_info            aligned,            /* bits used by apl_interpreter_ to tell when to abort */
 66               3 dont_interrupt_parse    bit,                /* if 1, don't do a dirty stop because the parser is running */
 67               3 dont_interrupt_operator bit,                /* if 1, don't do a dirty stop because an operator is running */
 68               3 dont_interrupt_storage_manager              /* if 1, don't stop because apl_storage_mngr_ is */
 69                                         bit,                /*       munging his tables */
 70               3 unused_interrupt_bit    bit,                /* not presently used */
 71               3 dont_interrupt_command  bit,
 72               3 can_be_interrupted      bit,                /* if 1, OK to do a clean stop (we are between lines, reading) */
 73               3 clean_interrupt_pending bit,                /* interrupt occured, break cleanly (between lines) */
 74               3 dirty_interrupt_pending bit,                /* interrupt occured, break as soon as not inhibited */
 75 
 76             2 user_name                 char (32),          /* process group id of user */
 77             2 immediate_input_prompt    char (32) varying,  /* normal input */
 78             2 evaluated_input_prompt    char (32) varying,  /* quad input */
 79             2 character_input_prompt    char (32) varying,  /* quad-quote input */
 80             2 vcpu_time                 aligned,
 81               3 total                   fixed bin (71),
 82               3 setup                   fixed bin (71),
 83               3 parse                   fixed bin (71),
 84               3 lex                     fixed bin (71),
 85               3 operator                fixed bin (71),
 86               3 storage_manager         fixed bin (71),
 87             2 output_info               aligned,            /* data pertaining to output buffer */
 88               3 output_buffer_ptr       unal ptr,           /* ptr to output buffer */
 89               3 output_buffer_len       fixed bin (21),     /* length (bytes) of output buffer */
 90               3 output_buffer_pos       fixed bin (21),     /* index of next byte to write in */
 91               3 output_buffer_ll        fixed bin (21),     /* print positions used up so far */
 92             2 tab_width                 fixed bin (21);     /* number of columns a tabs moves cursor */
 93 
 94 declare   output_buffer char (ws_info.output_buffer_len) based (ws_info.output_buffer_ptr);
 95 
 96 /* internal static */
 97 
 98 declare   max_parse_stack_depth fixed bin int static init(64536);
 99 
100 /* ------ END INCLUDE SEGMENT           apl_ws_info.incl.pl1 -------------------------------------- */