10/31/92  AG93 (Multics Subroutines and I/O Modules)
          Errata Information for MR12.5


pg 2-40:  for the "ask_$ask_cnf" entry point, change the sentence |
     beginning with "This entry point works like..."  with the    |
     following:                                                   |
                                                                  |
     This entry point works like the ask_$ask_cint entry point    |
     except that it returns a value of 'on' or 'off' if a         |
     character string of either 'on' or 'off' is available.       |


pg 2-40:  for the "ask_$ask_cyn" entry point, change the sentence |
     beginning with "This entry point works like..."  with the    |
     following:                                                   |
                                                                  |
     This entry point works like the ask_$ask_cint entry point    |
     except that it returns a value of 'yes' (or 'y') or 'no' (or |
     'n') if a character string of either 'on' or 'off' is        |
     available.                                                   |


pg 2-42:  for the "ask_$ask_line" entry point, under the "ctl"    |
     argument, delete the sentence "If a period is typed, zero is |
     returned."                                                   |


pg 2-43:  for the "ask_$ask_nf" entry point, under the "ctl"      |
     argument, delete the sentence "If a period is typed, zero is |
     returned."                                                   |


pg 2-44; for the "ask_$ask_nflo" entry point, add the following   |
     to the description of the "flo" argument:                    |
                                                                  |
     If a period is typed, zero is returned.                      |


pg 2-44; for the "ask_$ask_nint" entry point, add the following   |
     to the description of the "flo" argument:                    |
                                                                  |
     If a period is typed, zero is returned.                      |


pg 2-123:  for the "copy_" subroutine, under NOTES add the
     following.

     If copying a non-empty mailbox requires that the max_length
     characteristic of the source be applied to the target, then
     the target max_length value will take on the default value
     that was given to it when created.


pg 2-130:  for the "copy_dir_" subroutine, under NOTES add the
     following.

     If copying a non-empty mailbox requires that the max_length
     characteristic of the source be applied to the target, then
     the target max_length value will take on the default value
     that was given to it when created.


pg 2-196:  for the 'date_time_$from_clock' entry point, change    |
     the call under USAGE to the following:                       |
                                                                  |
     call date_time_$from_clock (clock, zone, addr(time_value),   |
          code);                                                  |


pg 2-205:  for the 'date_time_$set_lang' entrypoint, change the   |
     declaration under USAGE to the following:                    |
                                                                  |
     declare date_time_$set_lang entry (char(*), fixed bin(35));  |


pg 2-206:  for the 'date_time_$to_clock' entrypoint, change the   |
     declaration under USAGE to the following:                    |
                                                                  |
     declare date_time_$to_clock entry (ptr, fixed bin(71),       |
             fixed bin(35));                                      |


pg 2-207:  for the 'date_time_$valid_format' entrypoint, change   |
     the declaration under USAGE to the following:                |
                                                                  |
     declare date_time_$valid_format entry (char(*), fixed bin,   |
             fixed bin(35));                                      |


pgs 2-208.8 to 2-210:  Make the following changes for the
     "decode_definition_" subroutine.

     Replace the paragraph that begins "The decode_definition_
     subroutine, given a pointer to..."  with the following.

       The decode_definition_ subroutine returns the decoded
       information of an object segment definition in a directly
       accessible structure.  This subroutine can be used on only
       one segment at a time because it uses internal static
       storage for information about the current segment.


     Under ARGUMENTS, replace the description of "def_ptr" with
     the following.

       def_ptr
          is a pointer to the selected definition, or to the base
          of the object segment.  (Input).  If def_ptr points to
          the base of the object segment, decode_definition_
          returns the first acceptable definition in the
          definition section (see Notes).  Otherwise, it is
          expected to be pointing to a definition.


     After the STRUCTURE ELEMENTS section (following the
     description of "symbol") add a NOTES section containing the
     following.

       NOTES

       decode_definition_ might not return the definition pointed
       to by def_ptr.  It checks the "ignore" bit of each
       definition, and if that bit is "1"b it will continue
       scanning the list of definitions until it finds one for
       which the "ignore" bit is not set.


       To be sure the internal static information about the
       current segment has been properly initialized, the first
       call to decode_definition_ should either pass a pointer to
       the base of the object segment in def_ptr, or it should
       follow a call to decode_definition_$init.

       When decode_definition_ is called following a call to
       decode_definition_$init for the same object segment, it
       will ignore the value of def_ptr and always return the
       first definition in the definition section (for which
       "ignore" is not set).


pgs 2-210 to 2-211:  Make the following changes for the
     "decode_definition_$decode_cref" entry point.

     Replace the paragraph that begins "This entry point, given a
     pointer to an object segment definition..."  with the
     following.

       This entry point returns the decoded information of an
       object segment definition in a structure similar to that
       used by the "decode_definition_" entry point, but with a
       pointer to the symbol name, instead of to the name itself.
       This entry point can be used on only one segment at a time
       because it uses internal static storage for information
       about the current segment.  It is used only by the
       cross_reference command.


     Under ARGUMENTS, replace the description of "def_ptr" with
     the following.

     def_ptr
        must be a pointer to a definition in the definition
        section.  If link_ptr has a value then def_ptr must point
        to the beginning of the definition section.  (Input).


     Under ARGUMENTS, in the description of "eof", replace
     "(Input)" with "(Output)".


     Under ARGUMENTS, replace the description of "link_ptr" with
     the following.

     link_ptr
        must be either a pointer to the base of the linkage
        section of the object segment, or a null pointer.  If
        link_ptr has a non-null value then def_ptr is assumed to
        point to the base of the definition section.


     Under NOTES, in the first paragraph replace
     "decode_descriptor_str.incl.pl1" with
     "decode_definition_str.incl.pl1".


     After the STRUCTURE ELEMENTS section (following the
     description of "acc_ptr") add a NOTES section containing the
     following.

       NOTES

       The decode_definition_$decode_cref entry point might not
       return the definition pointed to by def_ptr.  It checks
       the "ignore" bit of each definition, and if that bit is
       "1"b it will continue scanning the list of definitions
       until it finds one for which the "ignore" bit is not set.


       The decode_definition_$decode_cref entry point may be
       passed pointers to the bases of the definition and linkage
       sections of the object segment initially.  These values
       will be put in internal static storage.  Subsequent calls
       can pass in def_ptr values for subsequent definitions,
       with a value of null in link_ptr.


pgs 2-211 to 2-213:  Make the following changes for the entry
     point "decode_definition_$full".

     Under USAGE, delete "returns (bit(1) aligned)".


     Under ARGUMENTS, replace the description of "def_ptr" with
     the following.

     def_ptr
        is a pointer to the selected definition.  (Input).


     Under STRUCTURE ELEMENTS, in the descriptions of "nargs" and
     "desc_ptr" replace "descr_sw" with "desc_sw".


     After the STRUCTURE ELEMENTS section (following the
     description of "desc_ptr") add a NOTES section containing
     the following.

       NOTES
       decode_definition_$full will return the definition pointed
       to by def_ptr, whether or not the "ignore" bit is set for
       that definition.  If def_ptr points to the definition
       header, however, this entry point will skip over it and
       return the first definition in the definition section.


pg 2-213:  for the "decode_definition_$init" entry point, replace
     the paragraph that begins "This entry point is used for
     initialization and is especially..."  with the following.

       This entry point is used for initialization of the
       internal static storage used to locate the current
       segment.  It is especially useful when the object segment
       does not begin at offset 0 (as for an archive component).
       This entry point affects only the main entry point,
       decode_definition_.


pgs 2-289 to 2-290:  for the "find_source_file_" subroutine,
     replace the documentation for USAGE and ARGUMENTS with the
     following.

     USAGE

     declare find_source_file_ entry (char(*), char(*), char(*),
          ptr, fixed bin(24), fixed bin(35));

     call find_source_file_ (pathname, suffix, source_name,
          source_ptr, bit_count, code);


     ARGUMENTS

     pathname
        is the pathname of the source program.  (Input)

     suffix
        is the suffix to be added to the pathname (if one does
        not already exist).  (Input)

     source_name
        is the name of the source program.  (Output)

     source_ptr
        is a pointer to the base of the source program.  It is
        null if the source could not be found.  (Output)


     bit_count
        is the bit count of the source program.  (Output)

     code
        is a standard system status code.  (Output)


pg 2-290 to 2-290.1:  for the "find_source_file_$search_path"
     entry point, replace the documentation for USAGE and
     ARGUMENTS with the following.

     USAGE

     dcl find_source_file_$search_path entry (char(*), char (*),
          char(*), char(*), ptr, fixed bin(24), fixed bin(35));

     call find_source_file_$search_path (pathname, suffix,
          search_list_name, source_name, source_ptr, bit_count,
          code);


     ARGUMENTS

     pathname
        is the pathname of the source program.  (Input)

     suffix
        is the suffix to be added to the pathname (if one does
        not already exist).  (Input)

     search_list_name
        is the search list to be used to locate the source file
        specified by the pathname and suffix input arguments.
        (See "NOTES" below.)  (Input)


     source_name
        is the name of the source program.  (Output)

     source_ptr
        is a pointer to the base of the source program.  It is
        null if the source could not be found.  (Output)

     bit_count
        is the bit count of the source program.  (Output)

     code
        is a standard system status code.  (Output)


pg 2-363:  for the 'get_equal_name_' entry point, add a new value |
     to the 'code' argument:                                      |
                                                                  |
     0                                                            |
         the target name was constructed without error.           |


pg 2-363:  for the 'get_equal_name_' entry point, add the         |
     following to the description of the 'error_table_$longeql'   |
     value under the 'code' argument:                             |
                                                                  |
     Only the first 32 characters are returned.                   |


pg 2-363:  add a new entry point just before the                  |
     'get_equal_name_$component' entry point.                     |
                                                                  |
     Entry:  get_equal_name_$check_equal_name                     |
                                                                  |
     This entry point checks the validity of the equal name based |
     on the equal convention.                                     |


     USAGE                                                        |
                                                                  |
     declare get_equal_name_$check_equal_name entry (char (*),    |
          fixed bin (35));                                        |
                                                                  |
     call get_equal_name_$check_equal_name (equalname, code);     |


     ARGUMENTS                                                    |
                                                                  |
     equalname                                                    |
        is the equal string to be checked.  (Input)               |
                                                                  |
     code                                                         |
        is a standard system error code.  (Output) It can have    |
        the same values described for get_equal_name_.            |


pg 2-364:  for the 'get_equal_name_$component' entry point,       |
     change USAGE to the following:                               |
                                                                  |
     declare get_equal_name_$component entry (char(*), char(*),   |
          char(32), char(*), char(32), fixed bin (35));           |
                                                                  |
     call get_equal_name_$component (entryname, equal_entryname,  |
          equal_component, target_entryname, target_component,    |
          code);                                                  |


pg 2-490:  add the following documentation for the
          "hcs_$truncate_seg" subroutine after the documentation
          for "hcs_$truncate_file".

     Name:  hcs_$truncate_seg

     This entry point, given a pointer, truncates a segment to a
     specified length.  If the segment is already shorter than
     the specified length, no truncation is done.  The effect of
     truncating a segment is to store zeros in the words beyond
     the specified length.


     USAGE

     declare hcs_$truncate_seg entry (ptr, fixed bin(19),
             fixed bin(35));
     call hcs_$truncate_seg (seg_ptr, length, code);


     ARGUMENTS

     seg_ptr
        is a pointer to the segment to be truncated.  (Input)
        Only the segment number portion of the pointer is used.

     length
        is the new length of the segment in words.  (Input)

     code
        is a storage system status code.  (Output)

     Access required:  The user must have write access on the
     segment in order to truncate it.


     NOTES

     A directory cannot be truncated.  A segment is truncated as
     follows:  all full pages after the page containing the last
     word of the new length (as defined by the length argument)
     segment are discarded.  The remainder of the page containing
     the last word is converted to zeros.

     Bit count is not automatically set by the hcs_$truncate_seg
     entry point.  If desired, the bit count may be set by using
     the hcs_$set_bc_seg entry point.

     The hcs_$truncate_file entry point performs the same
     function when given the pathname of the segment instead of
     the pointer.


pg 2-546: for the "iox_$open_file" entry point, in the description
     of the "mode" argument, change "(Output)" to "(Input)" at
     the end of the first sentence.


pg 2-627:  add documentation for the new subroutine "null_entry_"
     after the documentation for "nd_handler_".

     Name:  null_entry_

     Performs a return to its caller and does nothing.

     USAGE

     declare null_entry_ entry options (variable); call
     null_entry_();


pg 2-888.1:  for the "translator_info_$component_get_source_info"
     entry point, remove the following line.

     Although there is an argument called component_name, this
     entry point does not currently handle archive components.


pg 2-888.1:  for the "translator_info_$component_get_source_info"
     entry point, replace the description of the "component_name"
     argument with the following.

     component_name
        is the name of the archive component.  If the source
        segment is not a component of an archive, then this value
        is null "".  (Output)


pgs 3-264 to 3-282:  for the "window_io_" module, make the
     following changes:


Page 3-264; replace "PUR CHARS OPERATION" with "PUT CHARS
     OPERATION", and on the last line of the page replace
     "scrren" with "screen".


Page 3-266; under STRUCTURE ELEMENTS replace

       dcl 1 window_status_info aligned based (window_status_
                                               info_ptr),
     with
       dcl 1 window_status      aligned,


Page 3-267;  under NOTES, replace

        The get_window_status and get_window_status control ...
     with
        The get_window_status and set_window_status control ...


Page 3-267; under the description of "get_capabilities", replace

        3 pad              bit(28) unal,
     with
        3 pad              bit(31) unal,


Page 3-269; under NOTES, replace

        io_call window_switch get_editing_chars
     with
        io_call control window_switch get_editing_chars


Page 3-272; on the first line of the page, replace
     "window_more_handler.incl.pl1" with
     "window_more_info.incl.pl1".


Page 3-272; under STRUCTURE ELEMENTS, in the description of
     "version", replace "more_handler_info_version_2" with
     "more_info_version_2".


Page 3-273; under NOTES, replace

       io_call window_switch get_more_handler
       io_call window_switch set_more_handler more_handler
     with
       io_call control window_switch get_more_handler
       io_call control window_switch set_more_handler more_handler


Page 3-273; add the following after the description of
     "get_break_table" and before the line " dcl 1
     break_table_info".

     The info pointer should point to break_table_info, declared
     in window_control_info.incl.pl1:


Page 3-275; under the description of "get_special" replace

        dcl 1 get_special_info_struc aligned
               2 version              char (8)
     with
        dcl 1 get_special_info_struc based aligned,
               2 version              char (8),


Page 3-275; under STRUCTURE ELEMENTS, in the description of
     version replace "SPECIAL_INFO_STRUC_VERSION_1" with
     "SPECIAL_INFO_STRUCT_VERSION_1".


Page 3-275; under the description of "set_special" replace

        dcl 1 c_chars               based aligned,
     with
        dcl 1 c_chars               based (c_chars_ptr) aligned,


Pages 3-275 and 3-276; move the following from page 3-276 to page
     3-275.

     chars
         are the characters that make up the sequence.


Page 3-276; replace the four instances of "(special_chars."  with
     "(special_chars_struc.".


Page 3-277; under NOTES replace the five instances of "_seg" with
     "_seq".


Page 3-279; under the description of "get_token_characters"
     replace

        2 token_characters_count fixed bin,
     with
        2 token_character_count  fixed bin,


Page 3-279; under STRUCTURE ELEMENTS replace
     "token_characters_count" with "token_character_count".


Page 3-279; replace the description of "get_editor_key_bindings"
     with the following.

     get_editor_key_bindings
         returns a pointer to the line_editor_key_binding
         structure describing the key bindings.  io_call support
         prints out the pathname of each editor routine, listing
         only the names of builtin requests in capital letters,
         with the word "builtin" in parentheses.  This control
         order prints or returns current information about the
         key_bindings.  Use the set_editor_key_bindings control
         order to change the bindings.


Page 3-280; under the description of "get_editor_key_bindings"
     replace

        (get_editor_key_binding_info_ptr),
     with
        (get_editor_key_bindings_info_ptr),

     and replace "3 mbx" with "3 mbz".


Page 3-280; before the description of "key_binding_info_ptr", add
     the following.

     mbz
         reserved for future expansion and must be "0"b.


Page 3-281; under the description of "set_editor_key_bindings"
     replace

           3 pad                          bit (34) unaligned,
         2 key_binding_info_ptr;
     with
           3 mbz                          bit (34) unaligned,
         2 key_binding_info_ptr                ptr;


Page 3-281; before the description of 'key_binding_info_ptr' add
     the following.

     mbz
         reserved for future expansion and must be "0"b.


Page 3-282; in the paragraph beginning with "At least one...",
     replace "set_editor_key_binings" with
     "set_editor_key_bindings" and replace "control -a" with
     "control-a".


