09/20/87 fs_util_ The fs_util_ subroutine provides for uniform handling of file system entries. Supported operations are validate, copy, delete, chname, get_switch, set_switch, get_max_length, set_max_length, set_bit_count, and ACL manipulation. When invoked, the subroutine checks to see if the entry name provided is that of an extended entry and if it is, calls the corresponding entry point of the appropriate suffix_XXX_ subroutine. If the name is not that of an extended entry, then fs_util_ calls the appropriate standard entry entry point handler for the entry. Entry points in fs_util_: (List is generated by the help command) :Entry: add_acl_entries: 02/27/85 fs_util_$add_acl_entries Function: This entry point is used to add to the Access Control List of an entry. If an access name already appears on the ACL of the entry, its mode is changed to the one specified by the call. Syntax: declare fs_util_$add_acl_entries entry (char(*), char(*), ptr, fixed bin(35)); call fs_util_$add_acl_entries (dir_name, entryname, acl_ptr, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) acl_ptr is a pointer to the general_acl structure. (Input) code is a standard system status code. (Output) Notes: The general_acl structure and the named constant GENERAL_ACL_VERSION_1 are defined in the include file acl_structures.incl.pl1. :Entry: add_extended_acl_entries: 02/27/85 fs_util_$add_extended_acl_entries Function: This entry point is used to add to the Extended Access Control List of a standard entry. Syntax: declare fs_util_$add_extended_acl_entries entry (char(*), char(*), ptr, fixed bin(35)); call fs_util_$add_extended_acl_entries (dir_name, entryname, acl_ptr, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) acl_ptr is a pointer to the structure general_extended_acl. (Input) code is a standard system status code. (Output) Notes: This interface is intended to be used only by extended entry type support routines, (also referenced as suffix_XXX_), in order to map an ACL mode provided to fs_util_ into a standard mode/extended mode pair to be placed on the underlying standard entry or entries which are being used to implement the extended entry type. The general_extended_acl structure and the named constant GENERAL_EXTENDED_ACL_VERSION_1 are defined in the include file acl_structures.incl.pl1. :Entry: chname_file: 02/27/85 fs_util_$chname_file Function: This entry point is used to change the name of an entry. If only an old_name is given, the effect is to delete. If only a new_name is given, the effect is to add the name. If both are specified, the effect is to rename the entry. Syntax: declare fs_util_$chname_file entry (char(*), char(*), char(*), char(*), fixed bin (35)); call fs_util_$chname_file (dir_name, entryname, old_name, new_name, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) old_name is the name to be deleted from the entry. (Input) It can be a null character string ("") in which case no name is deleted. If old_name is null, the new_name must not be null. new_name is the new name to be added to the entry. (Input) It must not already exist in the directory on this or another entry. It can be a null string ("") in which case no name is added to the entry. It it is null, then old_name must not be the only name on the entry. code is a standard system status code. (Output) :Entry: copy: 02/27/85 fs_util_$copy Function: This entry point is used to copy an entry. Syntax: declare fs_util_$copy entry (ptr, fixed bin (35)); call fs_util_$copy (copy_options_ptr, code); Arguments: copy_options_ptr is a pointer to the copy_options structure. (Input) code is a standard system status code. (Output) Notes: The copy_options structure and the named constant COPY_OPTIONS_VERSION_1 are defined in the include file copy_options.incl.pl1. :Entry: delete_acl_entries: 02/27/85 fs_util_$delete_acl_entries Function: This entry point deletes a member of an entry's Access Control List. Syntax: declare fs_util_$delete_acl_entries entry (char(*), char(*), ptr, fixed bin(35)); call fs_util_$delete_acl_entries (dir_name, entryname, acl_ptr, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) acl_ptr is a pointer to the structure general_delete_acl. (Input) code is a standard system status code. (Output) Notes: The general_delete_acl structure and the named constant GENERAL_DELETE_ACL_VERSION_1 are defined in the include file acl_structures.incl.pl1. :Entry: delentry_file: 02/27/85 fs_util_$delentry_file Function: This entry point deletes a file system entry. Syntax: declare fs_util_$delentry_file entry (char(*), char(*), fixed bin (35)); call fs_util_$delentry_file (dir_name, entryname, code) Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) code is a standard system status code. (Output) :Entry: get_bit_count: 02/27/85 fs_util_$get_bit_count Function: This entry point returns the number of useful bits in an entry. Syntax: declare fs_util_$get_bit_count entry (char(*), char(*), fixed bin(41), fixed bin (35)); call fs_util_$get_bit_count (dir_name, entryname, bit_count, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) bit_count is the number of bits considered useful in the entry. (Output) code is a standard system status code. (Output) :Entry: get_max_length: 02/27/85 fs_util_$get_max_length Function: This entry point returns the maximum length setting for an entry. Syntax: declare fs_util_$get_max_length entry (char(*), char(*), fixed bin (35), fixed bin (35)); call fs_util_$get_max_length (dir_name, entryname, max_length, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) max_length is the maximum length of the entry in words. (Output) code is a standard system status code. (Output) :Entry: get_ring_brackets: 02/27/85 fs_util_$get_ring_brackets Function: This entry point returns the ring brackets of an entry. Syntax: declare fs_util_$get_ring_brackets entry (char(*), char(*), (*)fixed bin(3), fixed bin(35)); call fs_util_$get_ring_brackets (dir_name, entryname, ring_brackets, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) ring_brackets are the ring numbers which define the upper bounds of the ring brackets which control the various modes of access to the entry. (Output) Ring brackets are discussed in "Intra Process Access Control" in the "Multics Programmer's Reference Manual", Order No. AG91. code is a standard system status code. (Output) :Entry: get_switch: 02/27/85 fs_util_$get_switch Function: This entry point returns the value of a storage system switch for an entry. Syntax: declare fs_util_$get_switch entry (char(*), char(*), char(*), bit(1) aligned, fixed bin(35)); call fs_util_$get_switch (dir_name, entryname, switch_name, value, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) switch_name is the name of the switch whose value is sought. For example, it may be one of the following: "copy," "complete_volume_dump," "damaged," "incremental_volume_dump," "safety," "synchronized," or any additional switch supported by the appropriate extended entry type. (Input) value is the value of the requested switch. (Output) "1"b means the switch is on "0" means that it is off. code is a standard system status code. It should be set to error_table_$argerr if switch_name is invalid. (Output) :Entry: get_type: 02/27/85 fs_util_$get_type Function: This entry point returns the type of a specified entry. Syntax: declare fs_util_$get_type entry (char(*), char(*), char(*), fixed_bin(35)); call fs_util_$get_type (dir_name, entryname, type, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) type is either the suffix if extended, or one of the name constants for standard entry types found in the include file suffix_info.incl.pl1. (Output) code is a standard system status code. (Output) :Entry: get_user_access_modes: 02/27/85 fs_util_$get_user_access_modes Function: This entry point returns a user's effective access mode and extended access mode for an entry. For a description of modes, see "Effective Access" in the "Multics Programmer's Reference Manual", Order No. AG91. Syntax: declare fs_util_$get_user_access_modes entry (char(*), char(*), char(*), fixed bin, bit(36) aligned, bit(36) aligned, fixed bin(35)); call fs_util_$get_user_access_modes (dir_name, entryname, user_name, ring, modes, exmodes, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) user_name is the access name of the user in the form Person_id.Project_id.tag. (Input) This is limited to 32 characters. If null, the access name of the calling process is used. ring is the validation level that is to be used in computing effective access. (Input) It must be a value between 0 and 7 inclusive, or -1. If the ring value is -1, the default value of the validation level of the calling process is used. This default should be used in all cases except those in which a different ring's access is explicitly required. modes are the standard ACL modes of an entry. (Output) xmodes are the extended ACL modes of an entry. (Output) code is a standard system status code. (Output) Notes: The include file access_modes_values.incl.pl1 defines named constants for the different values of modes. Extended access modes are defined by the subsystem owning the extended entry. :Entry: list_acl: 02/27/85 fs_util_$list_acl Function: This entry point lists the components of an entry's Access Control List. Syntax: declare fs_util_$list_acl entry (char(*), char(*), char(*), ptr, ptr, fixed bin(35)); call fs_util_$list_acl (dir_name, entryname, version, area_ptr, acl_ptr, fixed bin(35)); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) version is the version of the acl structure. (Input) area_ptr is a pointer to an area where fs_util_ can allocate the general_acl structure. If area_ptr is null, then the user wants access modes for certain ACL entries; these will be specified by the structure pointed to by acl_ptr. (Input) acl_ptr is a pointer to the general_acl structure. (Input or Output) Input: if area_ptr is null, then acl_ptr points to a general_acl structure filled with access names and into which modes will be placed. Output: if area_ptr is non null, then acl_ptr will point to the start of a newly allocated general_acl structure. code is a standard system status code. (Output) Notes: If acl_ptr is used to obtain modes for specified access names (rather than for all access names on an entry), then each ACL entry in the general_acl structure either has status_code set to 0 and contains the entry's mode or has status_code set to error_table_$user_not_found and contains a mode of 0. The general_acl structure and the named constant GENERAL_ACL_VERSION_1 are defined in the include file acl_structures.incl.pl1. For a description of the general_acl structure, see the add_acl_entries entrypoint above. :Entry: list_extended_acl: 02/27/85 fs_util_$list_extended_acl Function: This entry point returns the contents of the Extended Access Control List of a standard entry. Syntax: declare fs_util_$list_extended_acl entry (char(*), char(*), char(*), ptr, ptr, fixed bin(35)); call fs_util_$list_extended_acl (dir_name, entryname, version, area_ptr, acl_ptr, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) version is the version of the acl structure. (Output) area_ptr is a pointer to an area where fs_util_ can allocate the general_extended_acl structure. If area_ptr is null, then the user wants access modes for certain extended ACL entries; these will be specified by the structure pointed to acl_ptr. (Input) acl_ptr is a pointer to the general_acl structure. (Input or Output) Input: if area_ptr is null, then acl_ptr points to a general_extended_acl structure filled with access names and into which modes will be placed. Output: if area_ptr is non null, then acl_ptr will point to the start of a newly allocated general_extended_acl structure. code is a standard system status code. (Output) Notes: This interface is intended to be used only by extended entry type support routines, (also referenced as suffix_XXX_), in order to map an ACL mode provided to fs_util_ into a standard mode/extended mode pair to be placed on the underlying standard entry or entries which are being used to implement the extended entry type. If acl_ptr is used to obtain modes for specified access names (rather than for all access names on an entry), then each ACL entry in the general_extended_acl structure either has status_code set to 0 and contains the entry's mode or has status_code set to error_table_$user_not_found and contains a mode of 0. The general_extended_acl structure and the named constant GENERAL_EXTENDED_ACL_VERSION_1 are defined in the include file acl_structures.incl.pl1. The general_extended_acl structure is described in the add_extended_acl_entries entrypoint described above. :Entry: list_switches: 02/27/85 fs_util_$list_switches Function: This entry point returns a list of switches supported by the entry type. Syntax: declare fs_util_$list_switches entry (char(*), char(*), char(*), ptr, ptr, fixed bin(35))); call fs_util_$list_switches (dir_name, entryname, version, area_ptr, switch_list_ptr, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) version is the version of the switch list structure. (Input) area_ptr is a pointer to an area where fs_util_ can allocate the structure switch_list. (Input) switch_list_ptr is a pointer to the switch_list structure. (Output) code is a standard system status code. (Input) Notes: The list_switches structure and the named constant SWITCH_LIST_VERSION_1 are defined in the include file suffix_info.incl.pl1. :Entry: list_switches_for_type: 02/27/85 fs_util_$list_switches_for_type Function: This entry point returns a list of switches for a particular type of entry. Syntax: declare fs_util_$list_switches_for_type entry (char(*), char(*), ptr, ptr, fixed bin(35)); call fs_util_$list_switches_for_type (type, version, area_ptr, switch_list_ptr, code); Arguments: type is either the suffix if extended, or one of the name constants for standard entry types found in the include file suffix_info.incl.pl1. (Input) version is the version of the switch_list structure. (Input) area_ptr is a pointer to an area where fs_util_ can allocate the structure switch_list. (Input) switch_list_ptr is a pointer to the switch_list structure. (Output) code is a standard system status code. (Input) Notes: The list_switches structure and the named constant SWITCH_LIST_VERSION_1 are defined in the include file suffix_info.incl.pl1. The list_switches structure is described in the list_switches entrypoint above. :Entry: make_entry: 02/27/85 fs_util_$make_entry Function: This entry point constructs a variable to a specified suffix support subroutine for a specified extended entry. Syntax: declare fs_util_$make_entry entry (char(*), char(*), char(*), entry, fixed bin(35)); call fs_util_$make_entry (dir_name, entryname, entrypoint, entry_to_call, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) entrypoint is the name of the entrypoint that is is to be constructed. (Input) entry_to_call is the entry variable constructed. (Output) code is a standard system status code. (Output) :Entry: make_entry_for_type: 02/27/85 fs_util_$make_entry_for_type Function: This entry point constructs a variable to a specified suffix support subroutine for a specified type of extended entry. Syntax: declare fs_util_$make_entry_for_type entry (char(*), char(*), entry, fixed bin(35)); call fs_util_$make_entry_for_type (type, entrypoint, entry_to_call, code); Arguments: type is either the suffix if extended, or one of the name constants for standard entry types found in the include file suffix_info.incl.pl1. (Input) entrypoint is the name of the entrypoint that is is to be constructed. (Input) entry_to_call is the entry variable constructed. (Output) code is a standard system status code. (Output) :Entry: replace_acl: 09/20/87 fs_util_$replace_acl Function: This entry point is used to replace Access Control List components for an entry. Syntax: declare fs_util_$replace_acl entry (char(*), char(*), ptr, bit(1), fixed bin(35)); call fs_util_$replace_acl (dir_name, entryname, acl_ptr, no_sysdaemon, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) acl_ptr is a pointer to the structure general_acl. (Input) no_sysdaemon is a switch that indicates whether an rw *.SysDaemon.* entry is to be put on the ACL of the segment after the existing ACL has been deleted and before the user-supplied general_acl entries are added. (Input) "0"b adds rw *.SysDaemon.* entry "1"b replaces the existing ACL with only the user-supplied general_acl. code is a standard system status code. (Output) Notes: The general_acl structure and the named constant GENERAL_ACL_VERSION_1 are defined in the include file acl_structure.incl.pl1. The general_acl structure is described above in the entrypoint add_acl_entries. :Entry: replace_extended_acl: 02/27/85 fs_util_$replace_extended_acl Function: This entry point is used to replace Extended Access Control List components for a standard entry. Syntax: declare fs_util_$replace_extended_acl entry (char(*), char(*), ptr, bit(1), fixed bin(35)); call fs_util_$replace_extended_acl (dir_name, entryname, acl_ptr, no_sysdaemon, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) acl_ptr is a pointer to the structure general_extended_acl. (Input) no_sysdaemon is a switch that indicates whether an rw *.SysDaemon.* entry is to be put on the ACL of the segment after the existing ACL has been deleted and before the user-supplied general_acl entries are added. (Input) "0"b adds rw *.SysDaemon.* entry "1"b replaces the existing ACL with only the user-supplied general_acl. code is a standard system status code. (Output) Notes: This interface is intended to be used only by extended entry type support routines, (also referenced as suffix_XXX_), in order to map an ACL mode provided to fs_util_ into a standard mode/extended mode pair to be placed on the underlying standard entry or entries which are being used to implement the extended entry type. The structure general_extended_acl and the named constant GENERAL_EXTENDED_ACL_VERSION_1 are defined in the include file acl_structures.incl.pl1. The structure general_extended_acl is described in the add_extended_acl_entries entry point above. :Entry: set_bit_count: 02/27/85 fs_util_$set_bit_count Function: This entry point sets the number of bits considered useful for an entry. Syntax: declare fs_util_$set_bit_count entry (char (*), char (*), fixed bin (41), fixed bin (35); call fs_util_$set_bit_count (dir_name, entryname, bit_count, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) bit_count is the number of bits to be considered useful in the entry. (Input) code is a standard system status code. (Output) :Entry: set_max_length: 02/27/85 fs_util_$set_max_length Function: This entry point sets the maximum length a particular entry grow to. Syntax: declare fs_util_$set_max_length entry (dir_name, entryname, max_length, code); call fs_util_$set_max_length (char(*), char(*), fixed bin(35), fixed bin(35)); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) max_length is the maximum length in words to be placed on the entry. (Input) code is a standard system status code. (Output) :Entry: set_ring_brackets: 02/27/85 fs_util_$set_ring_brackets Function: This entry point sets the ring brackets of an entry. Syntax: declare fs_util_$set_ring_brackets entry (char(*), char(*), (*)fixed bin(3), fixed bin(35)); call fs_util_$set_ring_brackets (dir_name, entryname, ring_brackets, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) ring_brackets are the bounds of the rings from which an entry is accessible. (Input) code is a standard system status code. (Output) :Entry: set_switch: 10/01/86 fs_util_$set_switch Function: This entry sets the value of a storage system switch for an entry. Syntax: declare fs_util_$set_switch entry (char(*), char(*), char(*), bit(1) aligned, fixed bin(35)); call fs_util_$set_switch (dir_name, entryname, switch_name, value, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) switch_name is the name of the switch whose value is to be set. This can be either "copy," "complete_volume_dump," "damaged," "incremental_volume_dump," "safety," "synchronized," or any switch on an extend entry type. (Input) value is the value to which the switch is to be set. (Input) "1"b means the switch is on "0" means that it is off. code is a standard system status code. It should be set to error_table_$argerr if switch_name is invalid. (Output) :Entry: suffix_info: 02/27/85 fs_util_$suffix_info Function: This entry point returns information about an entry's type. Syntax: declare fs_util_$suffix_info entry (char(*), char(*), ptr, fixed bin(35)); call fs_util_$suffix_info (dir_name, entryname, suffix_info_ptr, code); Arguments: dir_name is the absolute pathname of the directory containing the entry. (Input) entryname is the name of the entry. (Input) suffix_info_ptr is a pointer to the suffix_info structure. (Input) code is a standard system status code. (Output) Notes: The suffix_info structure and the named constant SUFFIX_INFO_VERSION_1 are defined in the include file suffix_info.incl.pl1. :Entry: suffix_info_for_type: 02/27/85 fs_util_$suffix_info_for_type Function: This entry point returns information about the characteristics of an entry that is of a given type. It behaves exactly as the suffix_info entrypoint except that a directory and entry name are not used to determine the type for which suffix info is to be returned. Syntax: declare fs_util_$suffix_info_for_type entry (char(*), ptr, fixed bin(35)); call fs_util_$suffix_info_for_type (type, suffix_info_ptr, code); Arguments: type is either the suffix if extended, or one of the name constants for standard entry types found in the include file suffix_info.incl.pl1. (Input) suffix_info_ptr is a pointer to the suffix_info structure. (Input) code is a standard system status code. (Output) Notes: The suffix_info structure and the named constant SUFFIX_INFO_VERSION_1 are defined in the include file suffix_info.incl.pl1. The suffix_info structure is described in the suffix_info entrypoint above. ----------------------------------------------------------- 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