COMPILATION LISTING OF SEGMENT apl_error_ Compiled by: Multics PL/I Compiler, Release 33e, of October 6, 1992 Compiled at: CGI Compiled on: 2000-05-04_1648.54_Thu_mdt Options: optimize map 1 /* ****************************************************** 2* * * 3* * * 4* * Copyright (c) 1972 by Massachusetts Institute of * 5* * Technology and Honeywell Information Systems, Inc. * 6* * * 7* * * 8* ****************************************************** */ 9 10 apl_error_: proc(code, a_options, a_marker_pos, source_line, function_name_ptr_structure, line_number); 11 12 /* 13* * this module prints error messages for apl. 14* * any fancy error recovery to be done must be done by the caller. 15* * 16* * written 73.7.07 by DAM 17* * modified 73.8.20 by DAM for new dim 18* * Modified 740131 by PG for compatibility error 19* * Modified 750630 by PG to make SYSTEM ERRORS always long 20* Modified 780211 by PG to add RESULT SIZE ERROR. 21* Modified 780914 by PG to move mapping table to apl_error_table_ 22* */ 23 24 /* parameters */ 25 26 dcl code fixed bin(35), /* status code, usually from apl_error_table_ */ 27 a_options bit(36) aligned parameter, 28 a_marker_pos fixed bin, /* position in source_line of character to be marked */ 29 source_line char(*), /* line to print (or null string to suppress) */ 30 1 function_name_ptr_structure aligned structure parameter, 31 2 function_name_ptr ptr unaligned, /* -> symbol bead of function name to put in front of source_line (null ptr to suppress) */ 32 line_number fixed bin; /* line number to put in brackets after function_name */ 33 34 /* automatic */ 35 36 dcl short_error_msg char(8) aligned, 37 brief_msg char (20), 38 error_table_code_option bit(36) aligned init("01"b), /* mask for option that code is from system error_table_, msg 39* is to be put in somewhat different format */ 40 long_error_msg char(100) aligned, 41 long_error_mode bit (1) aligned, 42 options bit(36) aligned, /* options bits */ 43 marker_pos fixed bin, /* copy argument since is input argument and will modify */ 44 i fixed bin; 45 46 dcl 1 buffer_structure aligned, 47 2 buffer char(200) varying, /* message constructed here, length must be multiple of 4 */ 48 2 too_long char(4); /* if buffer fills up, put "...NL" here to tell loser */ 49 50 /* conditions */ 51 52 dcl apl_system_error_ condition; /* also the name of one entry to this procedure */ 53 54 /* entries */ 55 56 dcl convert_status_code_ entry(fixed bin(35), char(8) aligned, char(100) aligned), 57 ios_$order entry (char (*), char (*), ptr, bit (72) aligned), 58 cu_$cl entry, 59 ioa_$rsnpnnl entry options(variable), 60 ios_$write entry(char(*), ptr, fixed bin, fixed bin, fixed bin, bit(72)aligned), 61 ios_write_length fixed bin; 62 dcl ioa_$ioa_stream entry options(variable); 63 64 dcl ios_$resetread entry(char(*), bit(72) aligned); 65 66 /* external static */ 67 68 dcl 1 apl_error_table_$mapping_table (100 /* phony */) aligned external static, 69 2 short_msg char (8), 70 2 brief_msg char (24); 71 72 dcl apl_error_table_$n_map_entries fixed bin external static; 73 74 /* internal static */ 75 76 dcl apl_output_stream char(32) static init("apl_output_"), 77 apl_input_stream char(32) static init("apl_input_"), 78 SystemErrorEntry bit(36) aligned static init("000000000000000000000000000000000001"b), /* (35 0's and a 1) */ 79 HuhEntry bit(36) aligned static init("000000000000000000000000000000000010"b); 80 81 /* builtins */ 82 83 dcl (null, substr, length, lbound, hbound) builtin; 84 85 /* include files */ 86 1 1 /* ====== BEGIN INCLUDE SEGMENT apl_bead_format.incl.pl1 ================================== */ 1 2 1 3 declare 1 general_bead aligned based, /* The Venerable Bead */ 1 4 2 type unaligned, 1 5 3 bead_type unaligned, 1 6 4 operator bit (1), /* ON if operator bead */ 1 7 4 symbol bit (1), /* ON if symbol bead */ 1 8 4 value bit (1), /* ON if value bead */ 1 9 4 function bit (1), /* ON if function bead */ 1 10 4 group bit (1), /* ON if group bead */ 1 11 4 label bit (1), /* ON if label bead */ 1 12 4 shared_variable bit (1), /* ON if shared variable bead */ 1 13 4 lexed_function bit (1), /* ON if lexed function bead */ 1 14 3 data_type unaligned, 1 15 4 list_value bit (1), /* ON if a list value bead */ 1 16 4 character_value bit (1), /* ON if a character value bead */ 1 17 4 numeric_value bit (1), /* ON if a numeric value bead */ 1 18 4 integral_value bit (1), /* ON if an integral value bead */ 1 19 4 zero_or_one_value bit (1), /* ON if a boolean value bead */ 1 20 4 complex_value bit (1), /* ON if a complex, numeric value bead */ 1 21 3 unused_bits bit (4) unaligned, /* pad to 18 bits (for future use) */ 1 22 2 size bit (18) unaligned, /* Number of words this bead occupies 1 23* (used by bead storage manager) */ 1 24 2 reference_count fixed binary (29); /* Number of pointers which point 1 25* to this bead (used by bead manager) */ 1 26 1 27 1 28 /* constant strings for initing type field in various beads */ 1 29 1 30 declare ( 1 31 operator_type init("100000000000000000"b), 1 32 symbol_type init("010000000000000000"b), 1 33 value_type init("001000000000000000"b), 1 34 function_type init("000100000000000000"b), 1 35 group_type init("000010000000000000"b), 1 36 label_type init("001001000011000000"b), 1 37 shared_variable_type init("001000100000000000"b), 1 38 lexed_function_type init("000000010000000000"b), 1 39 1 40 list_value_type init("000000001000000000"b), 1 41 character_value_type init("001000000100000000"b), 1 42 numeric_value_type init("001000000010000000"b), 1 43 integral_value_type init("001000000011000000"b), 1 44 zero_or_one_value_type init("001000000011100000"b), 1 45 complex_value_type init("001000000000010000"b), 1 46 1 47 not_integer_mask init("111111111110011111"b), /* to clear integral, zero_or_one bits */ 1 48 not_zero_or_one_mask init("111111111111011111"b) /* to clear zero_or_one bit */ 1 49 ) bit(18) internal static; 1 50 1 51 /* ------ END INCLUDE SEGMENT apl_bead_format.incl.pl1 ---------------------------------- */ 87 2 1 /* ====== BEGIN INCLUDE SEGMENT apl_symbol_bead.incl.pl1 ================================== */ 2 2 2 3 /* Explanation of fields: 2 4* symbol_bead.hash_link_pointer points to next symbol in same hash bucket in the symbol table. 2 5* symbol_bead.meaning_pointer points to current "value" of this name: 2 6* = null => unused (e.g. undefined variable) 2 7* -> group bead => group name 2 8* -> value bead => variable with a value 2 9* -> function bead => function name 2 10* -> label bead => localized label value 2 11* -> shared var bead => shared variable */ 2 12 2 13 declare 1 symbol_bead aligned based, 2 14 2 header aligned like general_bead, 2 15 2 hash_link_pointer pointer unaligned, 2 16 2 meaning_pointer pointer unaligned, 2 17 2 name_length fixed binary, 2 18 2 name character (0 refer (symbol_bead.name_length)) unaligned; 2 19 2 20 /* ------ END INCLUDE SEGMENT apl_symbol_bead.incl.pl1 ---------------------------------- */ 88 3 1 /* ====== BEGIN INCLUDE SEGMENT apl_number_data.incl.pl1 ================================== */ 3 2 3 3 /* 3 4* This include file contains information about the machine representation of numbers. 3 5* In all programs numbers should simply be declared 'float'. 3 6* All default statements should be in this include file. 3 7* 3 8* This is the binary version. The manifest constant Binary should be used by programs 3 9* that need to know whether we are using binary or decimal. 3 10* */ 3 11 3 12 /* format: style3,initlm0,idind30 */ 3 13 3 14 default (float & ^decimal & ^binary & ^precision & ^constant) float binary (63); 3 15 3 16 declare ( 3 17 TheBiggestNumberWeveGot float initial (0.1701411834604692317e+39), 3 18 TheSmallestNumberWeveGot float initial (.1469367938527859385e-38), 3 19 Binary bit (1) aligned initial ("1"b) 3 20 ) internal static options (constant); 3 21 3 22 /* Number of characters in a number datum entry; used for copying float number arrays as strings. 3 23* (Obsolete! use array copies!) */ 3 24 3 25 declare NumberSize fixed binary precision (4) internal static initial (8); 3 26 3 27 /* ------ END INCLUDE SEGMENT apl_number_data.incl.pl1 ---------------------------------- */ 89 4 1 /* ====== BEGIN INCLUDE SEGMENT apl_ws_info.incl.pl1 ====================================== */ 4 2 4 3 /* This structure contains all of the global data (or pointers to it) for the APL subsystem */ 4 4 4 5 /* automatic */ 4 6 4 7 declare ws_info_ptr ptr initial (apl_static_$ws_info_ptr.static_ws_info_ptr); 4 8 4 9 /* external static */ 4 10 4 11 declare 1 apl_static_$ws_info_ptr external static aligned structure, 4 12 2 static_ws_info_ptr unaligned pointer; 4 13 4 14 /* based */ 4 15 4 16 declare 1 ws_info aligned based (ws_info_ptr), 4 17 2 version_number fixed bin, /* version of this structure (3) */ 4 18 2 switches unaligned, /* mainly ws parameters */ 4 19 3 long_error_mode bit, /* if 1, long Multics format, else APL/360 format */ 4 20 3 debug_mode bit, /* if 1, system error causes escape to command level */ 4 21 3 canonicalize_mode bit, /* if 1, the editor canonicalizes user input */ 4 22 3 restrict_exec_command bit, /* if 1, the )EXEC command may not be used */ 4 23 3 restrict_debug_command bit, /* if 1, the )DEBUG command may not be used */ 4 24 3 restrict_external_functions 4 25 bit, /* if 1, the )ZFN, )MFN, and )DFN commands may not be used */ 4 26 3 restrict_load bit, /* if 1, the )LOAD and )COPY commands may not be used */ 4 27 3 restrict_load_directory bit, /* if 1, no directory allowed in )LOAD or )COPY pathnames */ 4 28 3 restrict_save bit, /* if 1, the )SAVE command may not be used */ 4 29 3 restrict_save_directory bit, /* if 1, no directory allowed in )SAVE pathnames */ 4 30 3 off_hold bit, /* if 1, )OFF HOLD was typed, else just )OFF */ 4 31 3 transparent_to_signals bit, /* if 1, any conditions slip right past APL */ 4 32 3 meter_mode bit, /* if 1, metering may be done, else speed is all-important */ 4 33 3 restrict_msg_command bit, /* if 1, the )MSG command may not be used. */ 4 34 3 compatibility_check_mode 4 35 bit, /* if 1, check for incompatible operators */ 4 36 3 no_quit_handler bit, /* if 1, do not trap QUITs. */ 4 37 /* remaining 20 bits not presently used */ 4 38 4 39 2 values, /* attributes of the workspace */ 4 40 3 digits fixed bin, /* number of digits of precision printed on output */ 4 41 3 width fixed bin, /* line length for formatted output */ 4 42 3 index_origin fixed bin, /* the index origin (0 or 1) */ 4 43 3 random_link fixed bin(35), /* seed for random number generator */ 4 44 3 fuzz float, /* comparison tolerance (relative fuzz) */ 4 45 3 float_index_origin float, /* the index origin in floating point */ 4 46 3 number_of_symbols fixed bin, /* the number of symbol_beads currently in existence */ 4 47 3 maximum_value_stack_size 4 48 fixed bin (18), /* maximum number of words in one segment of value stack */ 4 49 4 50 2 pointers, /* pointers to various internal tables */ 4 51 3 symbol_table_ptr unaligned pointer, /* -> symbol_table (apl_symbol_table.incl.pl1) */ 4 52 3 current_parse_frame_ptr unaligned pointer, /* -> topmost parse frame */ 4 53 3 value_stack_ptr unaligned pointer, /* -> next free location on value stack */ 4 54 3 alloc_free_info_ptr unaligned pointer, /* -> apl_storage_mngr_ data (apl_storage_system_data.incl.pl1) */ 4 55 4 56 2 time_invoked fixed bin(71), /* clock time that APL was entered */ 4 57 2 integer_fuzz float, /* the absolute fuzz used in checking for integers */ 4 58 2 user_number fixed bin(35), /* number under which the user is signed on */ 4 59 2 latent_expression unaligned pointer, /* -> value_bead for QuadLX */ 4 60 2 lock char(32), /* the lock currently set on this workspace (password) */ 4 61 2 wsid char(100), /* the workspace identification: name, number name, or clear ws */ 4 62 2 last_error_code fixed bin(35), /* last code passed to apl_error_ */ 4 63 2 signoff_lock character (32), 4 64 4 65 2 interrupt_info aligned, /* bits used by apl_interpreter_ to tell when to abort */ 4 66 3 dont_interrupt_parse bit, /* if 1, don't do a dirty stop because the parser is running */ 4 67 3 dont_interrupt_operator bit, /* if 1, don't do a dirty stop because an operator is running */ 4 68 3 dont_interrupt_storage_manager /* if 1, don't stop because apl_storage_mngr_ is */ 4 69 bit, /* munging his tables */ 4 70 3 unused_interrupt_bit bit, /* not presently used */ 4 71 3 dont_interrupt_command bit, 4 72 3 can_be_interrupted bit, /* if 1, OK to do a clean stop (we are between lines, reading) */ 4 73 3 clean_interrupt_pending bit, /* interrupt occured, break cleanly (between lines) */ 4 74 3 dirty_interrupt_pending bit, /* interrupt occured, break as soon as not inhibited */ 4 75 4 76 2 user_name char (32), /* process group id of user */ 4 77 2 immediate_input_prompt char (32) varying, /* normal input */ 4 78 2 evaluated_input_prompt char (32) varying, /* quad input */ 4 79 2 character_input_prompt char (32) varying, /* quad-quote input */ 4 80 2 vcpu_time aligned, 4 81 3 total fixed bin (71), 4 82 3 setup fixed bin (71), 4 83 3 parse fixed bin (71), 4 84 3 lex fixed bin (71), 4 85 3 operator fixed bin (71), 4 86 3 storage_manager fixed bin (71), 4 87 2 output_info aligned, /* data pertaining to output buffer */ 4 88 3 output_buffer_ptr unal ptr, /* ptr to output buffer */ 4 89 3 output_buffer_len fixed bin (21), /* length (bytes) of output buffer */ 4 90 3 output_buffer_pos fixed bin (21), /* index of next byte to write in */ 4 91 3 output_buffer_ll fixed bin (21), /* print positions used up so far */ 4 92 2 tab_width fixed bin (21); /* number of columns a tabs moves cursor */ 4 93 4 94 declare output_buffer char (ws_info.output_buffer_len) based (ws_info.output_buffer_ptr); 4 95 4 96 /* internal static */ 4 97 4 98 declare max_parse_stack_depth fixed bin int static init(64536); 4 99 4 100 /* ------ END INCLUDE SEGMENT apl_ws_info.incl.pl1 -------------------------------------- */ 90 5 1 /* ====== BEGIN INCLUDE SEGMENT apl_characters.incl.pl1 =================================== */ 5 2 5 3 /* 5 4* * This include file contains all the characters in the APL character set, 5 5* * declared char(1) [Instead of fixed bin as in the apl_character_codes.incl.pl1 file] 5 6* * 5 7* Modified 780913 by PG to add CentSign 5 8* Modified 790319 by PG to add CommaHyphen 5 9* */ 5 10 5 11 declare ( 5 12 QBell init(""), 5 13 QBackSpace init(""), 5 14 QTab init(" "), 5 15 QNewLine init(" 5 16 "), 5 17 QSpace init(" "), 5 18 QExclamation init("!"), 5 19 QDollar init("$"), 5 20 QApostrophe init("'"), 5 21 QLeftParen init("("), 5 22 QRightParen init(")"), 5 23 QStar init("*"), 5 24 QPlus init("+"), 5 25 QComma init(","), 5 26 QMinus init("-"), 5 27 QPeriod init("."), 5 28 QSlash init("/"), 5 29 QZero init("0"), 5 30 QOne init("1"), 5 31 QTwo init("2"), 5 32 QThree init("3"), 5 33 QFour init("4"), 5 34 QFive init("5"), 5 35 QSix init("6"), 5 36 QSeven init("7"), 5 37 QEight init("8"), 5 38 QNine init("9"), 5 39 QColon init(":"), 5 40 QSemiColon init(";"), 5 41 QLessThan init("<"), 5 42 QEqual init("="), 5 43 QGreaterThan init(">"), 5 44 QQuestion init("?"), 5 45 QLetterA_ init("A"), 5 46 QLetterB_ init("B"), 5 47 QLetterC_ init("C"), 5 48 QLetterD_ init("D"), 5 49 QLetterE_ init("E"), 5 50 QLetterF_ init("F"), 5 51 QLetterG_ init("G"), 5 52 QLetterH_ init("H"), 5 53 QLetterI_ init("I"), 5 54 QLetterJ_ init("J"), 5 55 QLetterK_ init("K"), 5 56 QLetterL_ init("L"), 5 57 QLetterM_ init("M"), 5 58 QLetterN_ init("N"), 5 59 QLetterO_ init("O"), 5 60 QLetterP_ init("P"), 5 61 QLetterQ_ init("Q"), 5 62 QLetterR_ init("R"), 5 63 QLetterS_ init("S"), 5 64 QLetterT_ init("T"), 5 65 QLetterU_ init("U"), 5 66 QLetterV_ init("V"), 5 67 QLetterW_ init("W"), 5 68 QLetterX_ init("X"), 5 69 QLetterY_ init("Y"), 5 70 QLetterZ_ init("Z"), 5 71 QLeftBracket init("["), 5 72 QBackSlash init("\"), 5 73 QRightBracket init("]"), 5 74 QUnderLine init("_"), 5 75 QLetterA init("a"), 5 76 QLetterB init("b"), 5 77 QLetterC init("c"), 5 78 QLetterD init("d"), 5 79 QLetterE init("e"), 5 80 QLetterF init("f"), 5 81 QLetterG init("g"), 5 82 QLetterH init("h"), 5 83 QLetterI init("i"), 5 84 QLetterJ init("j"), 5 85 QLetterK init("k"), 5 86 QLetterL init("l"), 5 87 QLetterM init("m"), 5 88 QLetterN init("n"), 5 89 QLetterO init("o"), 5 90 QLetterP init("p"), 5 91 QLetterQ init("q"), 5 92 QLetterR init("r"), 5 93 QLetterS init("s"), 5 94 QLetterT init("t"), 5 95 QLetterU init("u"), 5 96 QLetterV init("v"), 5 97 QLetterW init("w"), 5 98 QLetterX init("x"), 5 99 QLetterY init("y"), 5 100 QLetterZ init("z"), 5 101 QLeftBrace init("{"), 5 102 QVerticalBar init("|"), 5 103 QRightBrace init("}"), 5 104 QTilde init("~"), 5 105 QLessOrEqual init(""), 5 106 QGreaterOrEqual init(""), 5 107 QNotEqual init(""), 5 108 QOrSign init(""), 5 109 QAndSign init(""), 5 110 QDivision init(""), 5 111 QEpsilon init(""), 5 112 QUpArrow init(""), 5 113 QDownArrow init(""), 5 114 QCircle init(""), 5 115 QCeiling init(""), 5 116 QFloor init(""), 5 117 QDelta init(""), 5 118 QSmallCircle init(""), 5 119 QQuad init(""), 5 120 QCap init(""), 5 121 QDeCode init(""), 5 122 QEnCode init(""), 5 123 QLeftLump init(""), 5 124 QRightLump init(""), 5 125 QCup init(""), 5 126 QNorSign init(""), 5 127 QNandSign init(""), 5 128 QCircleHyphen init(""), 5 129 QSlashHyphen init(""), 5 130 QDelTilde init(""), 5 131 QCircleStar init(""), 5 132 QCircleBar init(""), 5 133 QCircleBackSlash init(""), 5 134 QCircleSlash init(""), 5 135 QGradeDown init(""), 5 136 QGradeUp init(""), 5 137 QLamp init(""), 5 138 QQuadQuote init(""), 5 139 QIBeam init(""), 5 140 QBackSlashHyphen init(""), 5 141 QDomino init(""), 5 142 QDiaresis init(""), 5 143 QOmega init(""), 5 144 QIota init(""), 5 145 QRho init(""), 5 146 QTimes init(""), 5 147 QAlpha init(""), 5 148 QUpperMinus init(""), 5 149 QDel init(""), 5 150 QLeftArrow init(""), 5 151 QRightArrow init(""), 5 152 QDiamond init(""), 5 153 QZero_ init(""), 5 154 QOne_ init(""), 5 155 QTwo_ init(""), 5 156 QThree_ init(""), 5 157 QFour_ init(""), 5 158 QFive_ init(""), 5 159 QSix_ init(""), 5 160 QSeven_ init(""), 5 161 QEight_ init(""), 5 162 QNine_ init(""), 5 163 QDelta_ init(""), 5 164 QMarkError init(""), 5 165 QExecuteSign init(""), 5 166 QFormatSign init(""), 5 167 QLeftTack init(""), 5 168 QRightTack init(""), 5 169 QLineFeed init(""), 5 170 QConditionalNewLine init(""), 5 171 QCentSign init(""), 5 172 QCommaHyphen init("") 5 173 ) char(1) internal static options (constant); 5 174 5 175 /* ------ END INCLUDE SEGMENT apl_characters.incl.pl1 ----------------------------------- */ 91 92 93 /* program */ 94 95 options = a_options; /* copy parameter since to other entry it is not a parameter */ 96 97 if a_marker_pos <= 0 98 then marker_pos = 1; 99 else if a_marker_pos > length (source_line) 100 then marker_pos = length (source_line) + 1; 101 else marker_pos = a_marker_pos; 102 103 join: 104 if ws_info_ptr ^= null /* watch out! */ 105 then ws_info.last_error_code = code; 106 107 call convert_status_code_(code, short_error_msg, long_error_msg); 108 109 /* do conversion of short msg to brief msg */ 110 111 do i = 1 to apl_error_table_$n_map_entries; 112 if apl_error_table_$mapping_table (i).short_msg = short_error_msg 113 then do; 114 brief_msg = apl_error_table_$mapping_table (i).brief_msg; 115 go to exitloop; 116 end; 117 end; 118 119 brief_msg = short_error_msg; /* Oh, well. Don't translate */ 120 121 exitloop: 122 call ios_$order (apl_output_stream, "printer_on", null, (""b)); /* turn on printer in case it is off */ 123 124 if options & HuhEntry /* )HUH - reprint error message */ 125 then do; 126 if substr(long_error_msg, 1, 4) = (4) " " 127 then call ioa_$ioa_stream(apl_output_stream, "^a^a", (QConditionalNewLine), brief_msg); 128 else call ioa_$ioa_stream(apl_output_stream, "^a^a - ^a", (QConditionalNewLine), 129 brief_msg, long_error_msg); 130 131 return; 132 end; 133 134 if ws_info_ptr = null /* don't fault if it is */ 135 then long_error_mode = "1"b; 136 else long_error_mode = ws_info.long_error_mode; 137 138 if short_error_msg = "system" 139 then long_error_mode = "1"b; /* SYSTEM ERRORS are always long */ 140 141 /* put out first line of message */ 142 143 if options & error_table_code_option 144 then call ioa_$ioa_stream(apl_output_stream, "command error: ^a", long_error_msg); 145 else if substr(long_error_msg, 1, 4) = (4)" " /* can't print long msg if there isn't one */ 146 then go to short_form; 147 else if long_error_mode 148 then call ioa_$ioa_stream(apl_output_stream, "^a^a - ^a", (QConditionalNewLine), 149 brief_msg, long_error_msg); 150 else 151 short_form: 152 call ioa_$ioa_stream (apl_output_stream, "^a^a", (QConditionalNewLine), brief_msg); 153 154 if options & SystemErrorEntry 155 then go to finish; 156 157 /* now put out second line (user source with mark) unless suppressed */ 158 159 if source_line = "" then go to finish; 160 161 if function_name_ptr = null /* error in evaluated input */ 162 then do; 163 buffer = ""; /* no longer put in 6 spaces, come from dim */ 164 if marker_pos-1 ^= 0 /* EIS kludge */ 165 then buffer = buffer || substr(source_line, 1, marker_pos-1); 166 buffer = buffer || QMarkError; /* put in char to tell dim to put caret under next char */ 167 if length(source_line) - marker_pos + 1 ^= 0 /* EIS kludge */ 168 then buffer = buffer || substr(source_line, marker_pos); 169 end; 170 else do; /* error in body of a function */ 171 call ioa_$rsnpnnl("^a[^d]^x", buffer, (0), function_name_ptr -> symbol_bead.name, line_number); 172 if length(buffer) < 6 then buffer = buffer || " "; 173 174 if marker_pos-1 ^= 0 /* EIS kludge */ 175 then buffer = buffer || substr(source_line, 1, marker_pos-1); 176 buffer = buffer || QMarkError; 177 if length(source_line) - marker_pos + 1 ^= 0 /* EIS kludge */ 178 then buffer = buffer || substr(source_line, marker_pos); 179 end; 180 181 /* take care of possibility of buffer overflow */ 182 183 if length(buffer) = 200 /* the length it was declared with above */ 184 then do; 185 too_long = "... 186 "; 187 ios_write_length = length (buffer) + length (too_long); 188 end; 189 else do; 190 buffer = buffer || (QConditionalNewLine); /* will put NewLine if line doesn't end in one */ 191 ios_write_length = length(buffer); 192 end; 193 194 call ios_$write(apl_output_stream, addr(buffer), 4 /* varying-string hack */ , ios_write_length, (0), (""b)); 195 196 finish: 197 call ios_$resetread(apl_input_stream, (""b)); /* flush input since was an error */ 198 199 if ws_info_ptr ^= null /* don't fault */ 200 then if ws_info.debug_mode 201 then if short_error_msg = "system" 202 then do; 203 call ioa_$ioa_stream(apl_output_stream, "debug mode -- coming up to command level"); 204 call cu_$cl; 205 end; 206 207 if options & SystemErrorEntry 208 then signal apl_system_error_; /* this will never return */ 209 210 return; 211 212 apl_system_error_: 213 entry (code); /* less parameters for system errors */ 214 215 options = SystemErrorEntry; 216 go to join; 217 218 219 220 apl_error_$huh: 221 entry (code); /* for )HUH command; reprint an error in long form */ 222 223 options = HuhEntry; 224 go to join; 225 226 227 end /* apl_error_ */; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/04/00 1648.5 apl_error_.pl1 >udd>sm>ds>w>ml>apl_error_.pl1 87 1 03/27/82 0538.5 apl_bead_format.incl.pl1 >ldd>incl>apl_bead_format.incl.pl1 88 2 03/27/82 0539.2 apl_symbol_bead.incl.pl1 >ldd>incl>apl_symbol_bead.incl.pl1 89 3 03/27/82 0529.8 apl_number_data.incl.pl1 >ldd>incl>apl_number_data.incl.pl1 90 4 03/27/82 0539.2 apl_ws_info.incl.pl1 >ldd>incl>apl_ws_info.incl.pl1 91 5 03/27/82 0538.6 apl_characters.incl.pl1 >ldd>incl>apl_characters.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. HuhEntry constant bit(36) initial dcl 76 ref 124 223 QConditionalNewLine 001147 constant char(1) initial packed unaligned dcl 5-11 ref 126 128 147 150 190 QMarkError 001150 constant char(1) initial packed unaligned dcl 5-11 ref 166 176 SystemErrorEntry constant bit(36) initial dcl 76 ref 154 207 215 a_marker_pos parameter fixed bin(17,0) dcl 26 ref 10 97 99 101 a_options parameter bit(36) dcl 26 ref 10 95 apl_error_table_$mapping_table 000046 external static structure array level 1 dcl 68 apl_error_table_$n_map_entries 000050 external static fixed bin(17,0) dcl 72 ref 111 apl_input_stream 000020 internal static char(32) initial packed unaligned dcl 76 set ref 196* apl_output_stream 000010 internal static char(32) initial packed unaligned dcl 76 set ref 121* 126* 128* 143* 147* 150* 194* 203* apl_static_$ws_info_ptr 000052 external static structure level 1 dcl 4-11 apl_system_error_ 000232 stack reference condition dcl 52 ref 207 brief_msg 2 000046 external static char(24) array level 2 in structure "apl_error_table_$mapping_table" dcl 68 in procedure "apl_error_" ref 114 brief_msg 000102 automatic char(20) packed unaligned dcl 36 in procedure "apl_error_" set ref 114* 119* 126* 128* 147* 150* buffer 000145 automatic varying char(200) level 2 dcl 46 set ref 163* 164* 164 166* 166 167* 167 171* 172 172* 172 174* 174 176* 176 177* 177 183 187 190* 190 191 194 194 buffer_structure 000145 automatic structure level 1 dcl 46 code parameter fixed bin(35,0) dcl 26 set ref 10 103 107* 212 220 convert_status_code_ 000030 constant entry external dcl 56 ref 107 cu_$cl 000034 constant entry external dcl 56 ref 204 debug_mode 1(01) based bit(1) level 3 packed packed unaligned dcl 4-16 ref 199 error_table_code_option 000107 automatic bit(36) initial dcl 36 set ref 36* 143 function_name_ptr parameter pointer level 2 packed packed unaligned dcl 26 ref 161 171 function_name_ptr_structure parameter structure level 1 dcl 26 ref 10 general_bead based structure level 1 dcl 1-3 i 000144 automatic fixed bin(17,0) dcl 36 set ref 111* 112 114* ioa_$ioa_stream 000042 constant entry external dcl 62 ref 126 128 143 147 150 203 ioa_$rsnpnnl 000036 constant entry external dcl 56 ref 171 ios_$order 000032 constant entry external dcl 56 ref 121 ios_$resetread 000044 constant entry external dcl 64 ref 196 ios_$write 000040 constant entry external dcl 56 ref 194 ios_write_length 000240 automatic fixed bin(17,0) dcl 56 set ref 187* 191* 194* last_error_code 67 based fixed bin(35,0) level 2 dcl 4-16 set ref 103* length builtin function dcl 83 ref 99 99 167 172 177 183 187 187 191 line_number parameter fixed bin(17,0) dcl 26 set ref 10 171* long_error_mode 1 based bit(1) level 3 in structure "ws_info" packed packed unaligned dcl 4-16 in procedure "apl_error_" ref 136 long_error_mode 000141 automatic bit(1) dcl 36 in procedure "apl_error_" set ref 134* 136* 138* 147 long_error_msg 000110 automatic char(100) dcl 36 set ref 107* 126 128* 143* 145 147* marker_pos 000143 automatic fixed bin(17,0) dcl 36 set ref 97* 99* 101* 164 164 167 167 174 174 177 177 name 5 based char level 2 packed packed unaligned dcl 2-13 set ref 171* name_length 4 based fixed bin(17,0) level 2 dcl 2-13 ref 171 171 null builtin function dcl 83 ref 103 121 121 134 161 199 options 000142 automatic bit(36) dcl 36 set ref 95* 124 143 154 207 215* 223* short_error_msg 000100 automatic char(8) dcl 36 set ref 107* 112 119 138 199 short_msg 000046 external static char(8) array level 2 dcl 68 ref 112 source_line parameter char packed unaligned dcl 26 ref 10 99 99 159 164 167 167 174 177 177 static_ws_info_ptr 000052 external static pointer level 2 packed packed unaligned dcl 4-11 ref 4-7 substr builtin function dcl 83 ref 126 145 164 167 174 177 switches 1 based structure level 2 packed packed unaligned dcl 4-16 symbol_bead based structure level 1 dcl 2-13 too_long 63 000145 automatic char(4) level 2 dcl 46 set ref 185* 187 ws_info based structure level 1 dcl 4-16 ws_info_ptr 000242 automatic pointer initial dcl 4-7 set ref 103 103 134 136 199 199 4-7* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. Binary internal static bit(1) initial dcl 3-16 NumberSize internal static fixed bin(4,0) initial dcl 3-25 QAlpha internal static char(1) initial packed unaligned dcl 5-11 QAndSign internal static char(1) initial packed unaligned dcl 5-11 QApostrophe internal static char(1) initial packed unaligned dcl 5-11 QBackSlash internal static char(1) initial packed unaligned dcl 5-11 QBackSlashHyphen internal static char(1) initial packed unaligned dcl 5-11 QBackSpace internal static char(1) initial packed unaligned dcl 5-11 QBell internal static char(1) initial packed unaligned dcl 5-11 QCap internal static char(1) initial packed unaligned dcl 5-11 QCeiling internal static char(1) initial packed unaligned dcl 5-11 QCentSign internal static char(1) initial packed unaligned dcl 5-11 QCircle internal static char(1) initial packed unaligned dcl 5-11 QCircleBackSlash internal static char(1) initial packed unaligned dcl 5-11 QCircleBar internal static char(1) initial packed unaligned dcl 5-11 QCircleHyphen internal static char(1) initial packed unaligned dcl 5-11 QCircleSlash internal static char(1) initial packed unaligned dcl 5-11 QCircleStar internal static char(1) initial packed unaligned dcl 5-11 QColon internal static char(1) initial packed unaligned dcl 5-11 QComma internal static char(1) initial packed unaligned dcl 5-11 QCommaHyphen internal static char(1) initial packed unaligned dcl 5-11 QCup internal static char(1) initial packed unaligned dcl 5-11 QDeCode internal static char(1) initial packed unaligned dcl 5-11 QDel internal static char(1) initial packed unaligned dcl 5-11 QDelTilde internal static char(1) initial packed unaligned dcl 5-11 QDelta internal static char(1) initial packed unaligned dcl 5-11 QDelta_ internal static char(1) initial packed unaligned dcl 5-11 QDiamond internal static char(1) initial packed unaligned dcl 5-11 QDiaresis internal static char(1) initial packed unaligned dcl 5-11 QDivision internal static char(1) initial packed unaligned dcl 5-11 QDollar internal static char(1) initial packed unaligned dcl 5-11 QDomino internal static char(1) initial packed unaligned dcl 5-11 QDownArrow internal static char(1) initial packed unaligned dcl 5-11 QEight internal static char(1) initial packed unaligned dcl 5-11 QEight_ internal static char(1) initial packed unaligned dcl 5-11 QEnCode internal static char(1) initial packed unaligned dcl 5-11 QEpsilon internal static char(1) initial packed unaligned dcl 5-11 QEqual internal static char(1) initial packed unaligned dcl 5-11 QExclamation internal static char(1) initial packed unaligned dcl 5-11 QExecuteSign internal static char(1) initial packed unaligned dcl 5-11 QFive internal static char(1) initial packed unaligned dcl 5-11 QFive_ internal static char(1) initial packed unaligned dcl 5-11 QFloor internal static char(1) initial packed unaligned dcl 5-11 QFormatSign internal static char(1) initial packed unaligned dcl 5-11 QFour internal static char(1) initial packed unaligned dcl 5-11 QFour_ internal static char(1) initial packed unaligned dcl 5-11 QGradeDown internal static char(1) initial packed unaligned dcl 5-11 QGradeUp internal static char(1) initial packed unaligned dcl 5-11 QGreaterOrEqual internal static char(1) initial packed unaligned dcl 5-11 QGreaterThan internal static char(1) initial packed unaligned dcl 5-11 QIBeam internal static char(1) initial packed unaligned dcl 5-11 QIota internal static char(1) initial packed unaligned dcl 5-11 QLamp internal static char(1) initial packed unaligned dcl 5-11 QLeftArrow internal static char(1) initial packed unaligned dcl 5-11 QLeftBrace internal static char(1) initial packed unaligned dcl 5-11 QLeftBracket internal static char(1) initial packed unaligned dcl 5-11 QLeftLump internal static char(1) initial packed unaligned dcl 5-11 QLeftParen internal static char(1) initial packed unaligned dcl 5-11 QLeftTack internal static char(1) initial packed unaligned dcl 5-11 QLessOrEqual internal static char(1) initial packed unaligned dcl 5-11 QLessThan internal static char(1) initial packed unaligned dcl 5-11 QLetterA internal static char(1) initial packed unaligned dcl 5-11 QLetterA_ internal static char(1) initial packed unaligned dcl 5-11 QLetterB internal static char(1) initial packed unaligned dcl 5-11 QLetterB_ internal static char(1) initial packed unaligned dcl 5-11 QLetterC internal static char(1) initial packed unaligned dcl 5-11 QLetterC_ internal static char(1) initial packed unaligned dcl 5-11 QLetterD internal static char(1) initial packed unaligned dcl 5-11 QLetterD_ internal static char(1) initial packed unaligned dcl 5-11 QLetterE internal static char(1) initial packed unaligned dcl 5-11 QLetterE_ internal static char(1) initial packed unaligned dcl 5-11 QLetterF internal static char(1) initial packed unaligned dcl 5-11 QLetterF_ internal static char(1) initial packed unaligned dcl 5-11 QLetterG internal static char(1) initial packed unaligned dcl 5-11 QLetterG_ internal static char(1) initial packed unaligned dcl 5-11 QLetterH internal static char(1) initial packed unaligned dcl 5-11 QLetterH_ internal static char(1) initial packed unaligned dcl 5-11 QLetterI internal static char(1) initial packed unaligned dcl 5-11 QLetterI_ internal static char(1) initial packed unaligned dcl 5-11 QLetterJ internal static char(1) initial packed unaligned dcl 5-11 QLetterJ_ internal static char(1) initial packed unaligned dcl 5-11 QLetterK internal static char(1) initial packed unaligned dcl 5-11 QLetterK_ internal static char(1) initial packed unaligned dcl 5-11 QLetterL internal static char(1) initial packed unaligned dcl 5-11 QLetterL_ internal static char(1) initial packed unaligned dcl 5-11 QLetterM internal static char(1) initial packed unaligned dcl 5-11 QLetterM_ internal static char(1) initial packed unaligned dcl 5-11 QLetterN internal static char(1) initial packed unaligned dcl 5-11 QLetterN_ internal static char(1) initial packed unaligned dcl 5-11 QLetterO internal static char(1) initial packed unaligned dcl 5-11 QLetterO_ internal static char(1) initial packed unaligned dcl 5-11 QLetterP internal static char(1) initial packed unaligned dcl 5-11 QLetterP_ internal static char(1) initial packed unaligned dcl 5-11 QLetterQ internal static char(1) initial packed unaligned dcl 5-11 QLetterQ_ internal static char(1) initial packed unaligned dcl 5-11 QLetterR internal static char(1) initial packed unaligned dcl 5-11 QLetterR_ internal static char(1) initial packed unaligned dcl 5-11 QLetterS internal static char(1) initial packed unaligned dcl 5-11 QLetterS_ internal static char(1) initial packed unaligned dcl 5-11 QLetterT internal static char(1) initial packed unaligned dcl 5-11 QLetterT_ internal static char(1) initial packed unaligned dcl 5-11 QLetterU internal static char(1) initial packed unaligned dcl 5-11 QLetterU_ internal static char(1) initial packed unaligned dcl 5-11 QLetterV internal static char(1) initial packed unaligned dcl 5-11 QLetterV_ internal static char(1) initial packed unaligned dcl 5-11 QLetterW internal static char(1) initial packed unaligned dcl 5-11 QLetterW_ internal static char(1) initial packed unaligned dcl 5-11 QLetterX internal static char(1) initial packed unaligned dcl 5-11 QLetterX_ internal static char(1) initial packed unaligned dcl 5-11 QLetterY internal static char(1) initial packed unaligned dcl 5-11 QLetterY_ internal static char(1) initial packed unaligned dcl 5-11 QLetterZ internal static char(1) initial packed unaligned dcl 5-11 QLetterZ_ internal static char(1) initial packed unaligned dcl 5-11 QLineFeed internal static char(1) initial packed unaligned dcl 5-11 QMinus internal static char(1) initial packed unaligned dcl 5-11 QNandSign internal static char(1) initial packed unaligned dcl 5-11 QNewLine internal static char(1) initial packed unaligned dcl 5-11 QNine internal static char(1) initial packed unaligned dcl 5-11 QNine_ internal static char(1) initial packed unaligned dcl 5-11 QNorSign internal static char(1) initial packed unaligned dcl 5-11 QNotEqual internal static char(1) initial packed unaligned dcl 5-11 QOmega internal static char(1) initial packed unaligned dcl 5-11 QOne internal static char(1) initial packed unaligned dcl 5-11 QOne_ internal static char(1) initial packed unaligned dcl 5-11 QOrSign internal static char(1) initial packed unaligned dcl 5-11 QPeriod internal static char(1) initial packed unaligned dcl 5-11 QPlus internal static char(1) initial packed unaligned dcl 5-11 QQuad internal static char(1) initial packed unaligned dcl 5-11 QQuadQuote internal static char(1) initial packed unaligned dcl 5-11 QQuestion internal static char(1) initial packed unaligned dcl 5-11 QRho internal static char(1) initial packed unaligned dcl 5-11 QRightArrow internal static char(1) initial packed unaligned dcl 5-11 QRightBrace internal static char(1) initial packed unaligned dcl 5-11 QRightBracket internal static char(1) initial packed unaligned dcl 5-11 QRightLump internal static char(1) initial packed unaligned dcl 5-11 QRightParen internal static char(1) initial packed unaligned dcl 5-11 QRightTack internal static char(1) initial packed unaligned dcl 5-11 QSemiColon internal static char(1) initial packed unaligned dcl 5-11 QSeven internal static char(1) initial packed unaligned dcl 5-11 QSeven_ internal static char(1) initial packed unaligned dcl 5-11 QSix internal static char(1) initial packed unaligned dcl 5-11 QSix_ internal static char(1) initial packed unaligned dcl 5-11 QSlash internal static char(1) initial packed unaligned dcl 5-11 QSlashHyphen internal static char(1) initial packed unaligned dcl 5-11 QSmallCircle internal static char(1) initial packed unaligned dcl 5-11 QSpace internal static char(1) initial packed unaligned dcl 5-11 QStar internal static char(1) initial packed unaligned dcl 5-11 QTab internal static char(1) initial packed unaligned dcl 5-11 QThree internal static char(1) initial packed unaligned dcl 5-11 QThree_ internal static char(1) initial packed unaligned dcl 5-11 QTilde internal static char(1) initial packed unaligned dcl 5-11 QTimes internal static char(1) initial packed unaligned dcl 5-11 QTwo internal static char(1) initial packed unaligned dcl 5-11 QTwo_ internal static char(1) initial packed unaligned dcl 5-11 QUnderLine internal static char(1) initial packed unaligned dcl 5-11 QUpArrow internal static char(1) initial packed unaligned dcl 5-11 QUpperMinus internal static char(1) initial packed unaligned dcl 5-11 QVerticalBar internal static char(1) initial packed unaligned dcl 5-11 QZero internal static char(1) initial packed unaligned dcl 5-11 QZero_ internal static char(1) initial packed unaligned dcl 5-11 TheBiggestNumberWeveGot internal static float bin(63) initial dcl 3-16 TheSmallestNumberWeveGot internal static float bin(63) initial dcl 3-16 character_value_type internal static bit(18) initial packed unaligned dcl 1-30 complex_value_type internal static bit(18) initial packed unaligned dcl 1-30 function_type internal static bit(18) initial packed unaligned dcl 1-30 group_type internal static bit(18) initial packed unaligned dcl 1-30 hbound builtin function dcl 83 integral_value_type internal static bit(18) initial packed unaligned dcl 1-30 label_type internal static bit(18) initial packed unaligned dcl 1-30 lbound builtin function dcl 83 lexed_function_type internal static bit(18) initial packed unaligned dcl 1-30 list_value_type internal static bit(18) initial packed unaligned dcl 1-30 max_parse_stack_depth internal static fixed bin(17,0) initial dcl 4-98 not_integer_mask internal static bit(18) initial packed unaligned dcl 1-30 not_zero_or_one_mask internal static bit(18) initial packed unaligned dcl 1-30 numeric_value_type internal static bit(18) initial packed unaligned dcl 1-30 operator_type internal static bit(18) initial packed unaligned dcl 1-30 output_buffer based char packed unaligned dcl 4-94 shared_variable_type internal static bit(18) initial packed unaligned dcl 1-30 symbol_type internal static bit(18) initial packed unaligned dcl 1-30 value_type internal static bit(18) initial packed unaligned dcl 1-30 zero_or_one_value_type internal static bit(18) initial packed unaligned dcl 1-30 NAMES DECLARED BY EXPLICIT CONTEXT. apl_error_ 000110 constant entry external dcl 10 apl_error_$huh 001135 constant entry external dcl 220 apl_system_error_ 001122 constant entry external dcl 212 exitloop 000222 constant label dcl 121 ref 115 finish 001031 constant label dcl 196 ref 154 159 join 000143 constant label dcl 103 ref 216 224 short_form 000501 constant label dcl 150 ref 145 NAME DECLARED BY CONTEXT OR IMPLICATION. addr builtin function ref 194 194 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 1332 1406 1152 1342 Length 1700 1152 54 256 160 20 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME apl_error_ 248 external procedure is an external procedure. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 apl_output_stream apl_error_ 000020 apl_input_stream apl_error_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME apl_error_ 000100 short_error_msg apl_error_ 000102 brief_msg apl_error_ 000107 error_table_code_option apl_error_ 000110 long_error_msg apl_error_ 000141 long_error_mode apl_error_ 000142 options apl_error_ 000143 marker_pos apl_error_ 000144 i apl_error_ 000145 buffer_structure apl_error_ 000240 ios_write_length apl_error_ 000242 ws_info_ptr apl_error_ THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. call_ext_out_desc call_ext_out return_mac signal_op ext_entry ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. convert_status_code_ cu_$cl ioa_$ioa_stream ioa_$rsnpnnl ios_$order ios_$resetread ios_$write THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. apl_error_table_$mapping_table apl_error_table_$n_map_entries apl_static_$ws_info_ptr LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 36 000073 4 7 000075 10 000102 95 000124 97 000127 99 000134 101 000142 103 000143 107 000153 111 000167 112 000177 114 000207 115 000214 117 000215 119 000217 121 000222 124 000260 126 000263 128 000320 131 000357 134 000360 136 000367 138 000373 143 000401 145 000434 147 000437 150 000501 154 000532 159 000536 161 000545 163 000550 164 000551 166 000567 167 000576 169 000620 171 000621 172 000661 174 000673 176 000713 177 000722 183 000746 185 000751 187 000753 188 000755 190 000756 191 000765 194 000767 196 001031 199 001050 203 001064 204 001104 207 001111 210 001116 212 001117 215 001130 216 001132 220 001133 223 001143 224 001145 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved