ParaMonte Fortran 2.0.0
Parallel Monte Carlo and Machine Learning Library
See the latest version documentation.
pm_sysPath Module Reference

This module contains classes and procedures for manipulating system file/folder paths.
More...

Data Types

interface  getBaseName
 Generate and return the basename part of the input path (i.e., all characters that appear after the last directory separator in the path).
More...
 
interface  getDirCurrent
 Generate and return the Current Working Directory (CWD) of the runtime shell.
More...
 
interface  getDirHome
 Generate and return the Home Directory of the current user in the current runtime shell.
More...
 
interface  getDirName
 Generate and return the dirname (directory name) part of the input path.
More...
 
interface  getDirSep
 Generate and return the directory separator symbol based on the runtime system shell.
More...
 
interface  getDirSeps
 Generate and return all the directory separator symbols supported by the current runtime operating system based on the runtime system shell.
More...
 
interface  getExtName
 Generate and return the file extension part of the input path (including the leading dot in the file extension).
More...
 
interface  getFileName
 Generate and return the filename part of the input path.
More...
 
interface  getIndexBaseName
 Generate and return the index of the first character of the basename part of the input path.
More...
 
interface  getIndexDirName
 Generate and return the index of the last character of the dirname (directory part) of the input path.
More...
 
interface  getIndexExtName
 Generate and return the index of the first character of the file extension of the input path (if any extension exists).
More...
 
interface  getPathAbs
 Generate and return the absolute path corresponding to the input (potentially relative) path.
More...
 
interface  getPathExpandedUser
 Generate and return the input path wherein the initial tilde character (~) is expanded to the home directory of current user.
More...
 
interface  getPathHostNameIndex
 Generate and return the index of the last character of the hostname part of the input UNC path.
More...
 
interface  getPathJoined
 Generate and return the path that results from joining the two input path parts, separated by the specified directory separator or the preferred directory separator of the runtime shell.
More...
 
interface  getPathMatch
 Generate and return a list of directory paths matching a requested system application.
More...
 
interface  getPathNew
 Generate and return a unique (directory or file) path name in the specified directory or the default current working directory.
More...
 
interface  getPathPosix
 Generate and return a POSIX-standard (Unix-like) path from the input Windows-style path.
More...
 
interface  getPathPosixEscaped
 Generate and return a POSIX standard (Unix-like) version of the input POSIX-style-separated path where all the relevant POSIX reserved characters are properly escaped via (\).
More...
 
interface  getPathSep
 Generate and return the path separator character used by the runtime processor shell for separating paths from each other in the PATH environmental variable.
More...
 
interface  getPathTemp
 Generate and return a unique (directory or file) path name in the temporary directory of the system or if there is none, in the current working directory of the program, optionally with the user-specified file name segments.
More...
 
interface  getPathVerbatim
 Generate and return a path quoted with single or double quotation marks whose metacharacters are also properly escaped depending on the runtime system shell.
More...
 
interface  getPathVerbatimCMD
 Generate and return a path quoted with double quotation marks where all instances of double quotes \(\ms{"}\) within the path are removed.
More...
 
interface  getPathVerbatimFish
 Generate and return a path quoted with single quotation marks where all instances of backslashes within the path are replaced with double backslash and all single quotes \(\ms{'}\) are replaced with \(\ms{\'}\).
More...
 
interface  getPathVerbatimPosix
 Generate and return a path quoted with single quotation marks where all instances of single quotes \(\ms{'}\) within the path are replaced with \(\ms{'\''}\).
More...
 
interface  getPathVerbatimPowerShell
 Generate and return a path quoted with single quotation marks where all instances of single quotes \(\ms{'}\) within the path are replaced with \(\ms{''}\).
More...
 
interface  getPathWindows
 Generate and return a normalized Windows-style path from the input POSIX-style or Windows-style path, such that it conforms to the path conventions of the Windows Command Prompt (CMD).
More...
 
interface  glob
 Generate and return the result of globing the specified input pattern.
More...
 
interface  hasDriveLetter
 Generate and return .true. is the input Windows-style path begins with a drive-letter pattern like C:.
More...
 
interface  isDir
 Generate and return .true. is the input path is an extant system directory, otherwise return .false..
More...
 
interface  isExtant
 Generate and return .true. if the input path (whether a file or a directory) exists and .false. otherwise.
More...
 
interface  isFailedChangeDir
 Generate and return .true. if the attempt to set the current working directory to the input dir fails, otherwise return .false. upon success.
More...
 
interface  isFailedCopy
 Generate and return .true. if the requested copy action failed, otherwise return .false. indicating success.
More...
 
interface  isFailedGlob
 Generate and return .true. if the attempt to globing the specified input pattern fails, otherwise, return .false..
More...
 
interface  isFailedList
 Generate and return .true. if the attempt to fetch the directory listing of the specified input path fails, otherwise, return .false..
More...
 
interface  isFailedMakeDir
 Generate and return .true. if the attempt to create the requested directory path fails, otherwise return .false..
More...
 
interface  isFailedMakeDirTemp
 Generate and return .true. if the attempt to create a temporary directory fails.
Otherwise return .false. and set the output path to the newly created temporary directory.
More...
 
interface  isFailedMove
 Generate and return .true. if the requested move action failed, otherwise return .false. indicating success.
More...
 
interface  isFailedRemove
 Generate and return .true. if the requested path removal action from the file system failed, otherwise return .false. indicating success.
More...
 
interface  isFile
 Generate and return .true. is the input path is a file (not a directory), otherwise return .false..
More...
 
interface  isPathAbsPosix
 Generate and return .true. is the input path is an absolute POSIX path (whether existing or virtual), otherwise return .false..
More...
 
interface  isPathAbsWindows
 Generate and return .true. is the input path is an absolute Windows path (whether existing or virtual), otherwise return .false..
More...
 
interface  ls
 Generate and return a list of all paths within the specified input path.
More...
 
interface  setPathMatch
 Return a list of directory paths matching a requested system application.
More...
 
interface  setPathPosix
 Return a POSIX-standard (Unix-like) path from the input (Windows-style) path.
More...
 
interface  setPathPosixEscaped
 Return a POSIX standard (Unix-like) version of the input POSIX-style-separated path where all the relevant POSIX reserved characters are properly escaped via (\).
More...
 
interface  setPathWindows
 Normalize the input POSIX-style or Windows-style path to a Windows-style path, such that it conforms to the path conventions of the Windows Command Prompt (CMD).
More...
 
type  verbatim_type
 This is the derived type with no components, whose instantiated objects are used to signify the verbatim interpretation of paths when passed to various procedures within the ParaMonte library.
More...
 

Variables

character(*, SK), parameter MODULE_NAME = SK_"@pm_sysPath"
 
integer(IK), parameter MAX_LEN_FILE_NAME = MAX_NAME
 The scalar integer constant of default kind IK, representing the maximum system-allowed path length (260 on Windows, 255 on Unix).
More...
 
integer(IK), parameter MAX_LEN_FILE_PATH = MAX_PATH
 The scalar integer constant of default kind IK, representing the maximum system-allowed path length (260 on Windows, 4096 on Unix).
Note that the maximum file length path supported by the Intel compilers is also 4096.
More...
 
character(*, SK), parameter DIR_SEP_WINDOWS_ALL = SK_"\/"
 The scalar character constant of default kind SK, containing the directory separator characters recognized by the Windows operating systems.
More...
 
character(*, SK), parameter DIR_SEP_POSIX_ALL = SK_"/"
 The scalar character constant of default kind SK, containing the directory separator characters recognized by the POSIX-compliant systems.
More...
 
character(*, SK), parameter DIR_SEP_WINDOWS = SK_"\"
 The scalar character constant of default kind SK, containing the preferred directory separator character on Windows operating systems.
More...
 
character(*, SK), parameter DIR_SEP_POSIX = SK_"/"
 The scalar character constant of default kind SK, containing the preferred directory separator character on POSIX-compliant systems.
More...
 
character(*, SK), parameter DIR_SEP_ALL = SK_"/\"
 The scalar character constant of default kind SK, containing the directory separator characters recognized by all platforms supported in this library (POSIX and Windows).
More...
 
character(*, SK), parameter PATH_SEP_WINDOWS = SK_";"
 The scalar character constant of default kind SK, containing the preferred directory separator character on Windows operating systems.
More...
 
character(*, SK), parameter PATH_SEP_POSIX = SK_":"
 The scalar character constant of default kind SK, containing the preferred directory separator character on POSIX-compliant systems.
More...
 
character(*, SK), parameter PATH_SEP_ALL = SK_":;"
 The scalar character constant of default kind SK, containing the directory separator characters recognized by all platforms supported in this library (POSIX and Windows).
More...
 
type(verbatim_type), parameter verbatim = verbatim_type()
 The scalar constant of type verbatim_type that can be used to signify the verbatim interpretation of paths when passed to various procedures within the ParaMonte library.
More...
 
character(*, SK), parameter WIN32_NAMESPACE_FILE = SK_"\\?\"
 The scalar character constant of default kind SK, containing the prefix operating systems path-separator symbol ("\" in Windows, "/" in Unix).
More...
 
character(*, SK), parameter WIN32_NAMESPACE_DEVICE = SK_"\\.\"
 The scalar character constant of default kind SK, containing the operating systems path-separator symbol ("\" in Windows, "/" in Unix).
More...
 
character(*, SK), parameter ASCII_CONTROL_STR = achar( 1, SK) // achar( 2, SK) // achar( 3, SK) // achar( 4, SK) // achar( 5, SK) // achar( 6, SK) // achar( 7, SK) // achar( 8, SK) // achar( 9, SK) // achar(10, SK) // achar(11, SK) // achar(12, SK) // achar(13, SK) // achar(14, SK) // achar(15, SK) // achar(16, SK) // achar(17, SK) // achar(18, SK) // achar(19, SK) // achar(21, SK) // achar(22, SK) // achar(23, SK) // achar(24, SK) // achar(25, SK) // achar(26, SK) // achar(27, SK) // achar(28, SK) // achar(29, SK) // achar(30, SK) // achar(31, SK) // achar(127, SK)
 The scalar character of default kind SK containing the ASCII control characters that need special care in paths.
More...
 
character(*, SK), parameter WINDOWS_RESERVED_STR = SK_'\/<>:"|?*'//ASCII_CONTROL_STR
 The scalar character constant of default kind SK, containing the Windows reserved characters not allowed in filenames.
Note that the ASCII control characters (0-31) are also forbidden in Windows paths.
More...
 
character(1, SK), dimension(*), parameter WINDOWS_RESERVED_CHR = [( WINDOWS_RESERVED_STR(i:i), i = 1_IK, len(WINDOWS_RESERVED_STR,IK) )]
 The vector character constant of default kind SK of len = 1 containing the individual characters in WINDOWS_RESERVED_STR.
More...
 
character(*, SK), parameter WINDOWS_CMD_METACHAR_STR = SK_'()%!^"<>&|'
 The scalar character constant of default kind SK, containing the Windows CMD shell metacharacters.
More...
 
character(1, SK), dimension(*), parameter WINDOWS_CMD_METACHAR_CHR = [( WINDOWS_CMD_METACHAR_STR(i:i), i = 1_IK, len(WINDOWS_CMD_METACHAR_STR,IK) )]
 The vector character constant of default kind SK of len = 1 containing the individual characters in WINDOWS_CMD_METACHAR_STR.
More...
 
character(4, SK), dimension(*), parameter WINDOWS_RESERVED_DEVICE_NAME =[ SK_"CON " , SK_"PRN " , SK_"AUX " , SK_"NUL " , SK_"COM1" , SK_"COM2" , SK_"COM3" , SK_"COM4" , SK_"COM5" , SK_"COM6" , SK_"COM7" , SK_"COM8" , SK_"COM9" , SK_"LPT1" , SK_"LPT2" , SK_"LPT3" , SK_"LPT4" , SK_"LPT5" , SK_"LPT6" , SK_"LPT7" , SK_"LPT8" , SK_"LPT9" , SK_"con " , SK_"prn " , SK_"aux " , SK_"nul " , SK_"com1" , SK_"com2" , SK_"com3" , SK_"com4" , SK_"com5" , SK_"com6" , SK_"com7" , SK_"com8" , SK_"com9" , SK_"lpt1" , SK_"lpt2" , SK_"lpt3" , SK_"lpt4" , SK_"lpt5" , SK_"lpt6" , SK_"lpt7" , SK_"lpt8" , SK_"lpt9" ]
 The vector character constant of default kind SK, containing the Windows reserved (forbidden) file names.
No file or directory name can contain these names alone, possibly mixed with leading or trailing blanks.
More...
 
character(*, SK), parameter POSIX_RESERVED_STR = SK_" " // SK_"!" // SK_'"' // SK_"#" // SK_"$" // SK_"&" // SK_"'" // SK_"(" // SK_")" // SK_"*" // SK_"," // SK_";" // SK_"<" // SK_"=" // SK_">" // SK_"?" // SK_"[" // SK_"\" // SK_"]" // SK_"^" // SK_"`" // SK_"{" // SK_"|" // SK_"}" // SK_"~" // ASCII_CONTROL_STR
 The scalar character constant of default kind SK, containing the ASCII characters that require escaping via <ESC> character (if not double-quoted) within the Unix Shell environment.
More...
 
character(1, SK), dimension(*), parameter POSIX_RESERVED_CHR = [( POSIX_RESERVED_STR(i:i), i = 1_IK, len(POSIX_RESERVED_STR,IK) )]
 The vector character constant of default kind SK of len = 1 containing the individual characters in POSIX_RESERVED_STR.
More...
 
character(*, SK), parameter POSIX_RESERVED_DQUOTE_STR = SK_"`$\"""//achar(10, SK)
 The scalar character constant of default kind SK, containing the ASCII characters that require escaping via ESC (Escape) character within the Unix Shell environment even when the string double-quoted. Note that the history expansion character (!) is not included since it is meaningless in the POSIX standard.
See the GNU Bash manual for more information.
More...
 
character(1, SK), dimension(*), parameter POSIX_RESERVED_DQUOTE_CHR = [( POSIX_RESERVED_DQUOTE_STR(i:i), i = 1_IK, len(POSIX_RESERVED_DQUOTE_STR,IK) )]
 The vector character constant of default kind SK of len = 1 containing the individual characters in POSIX_RESERVED_DQUOTE_STR.
More...
 

Detailed Description

This module contains classes and procedures for manipulating system file/folder paths.

This module contains constants, routines, and functionalities for performing actions that are mostly if not entirely independent of the underlying processor runtime shell environment.
The following is a collection of tips and definitions regarding paths in Windows and Unix-like systems.

  1. A path is a string of characters used to uniquely identify a location in a directory structure.
    It is composed by following the directory tree hierarchy in which components, separated by a path separator character, represent each directory.
  2. The delimiting character is most commonly
    1. the (forward) slash (/),
    2. the backslash character (\), or
    3. the colon (:) character, though some operating systems may use a different separator.
  3. Paths are used extensively in computer science to represent the directory/file relationships common in modern operating systems and are essential in the construction of Uniform Resource Locators (URLs).
    Resources can be represented by either absolute or relative paths.
  4. Around 1970, Unix introduced the slash character (/) as its directory separator and used the dash character - as a command line switch prefix.
  5. In 1981, the first version of Microsoft DOS was released.
    MS-DOS 1.0 did not support file directories. Also, a major portion of the utility commands packaged with MS-DOS 1.0 came from IBM and their command line syntax used the slash character / as a switch prefix.
    For example, dir /w runs the dir command with the wide list format option.
    These fundamental difference between Unix and Windows OS still pervade.
    When directory support was added to MS-DOS in version 2.0, / was kept as the switch prefix character for backwards compatibility.
    Microsoft chose the backslash character (\) as a directory separator, which looks similar to the slash character.
    However, modern versions of Windows are slash-agnostic, allowing a mix of both types of directory separators in a paths.
  6. An absolute or full path points to the same location in a file system, regardless of the current working directory.
    To do that, it must include the root directory.
  7. By contrast, a relative path starts from some given working directory, avoiding the need to provide the full absolute path.
    A filename can be considered as a relative path based at the current working directory.

On a Unix-like OS and most POSIX-compliant OS,

  1. The root directory is represented by /.
  2. The directory separator is represented by /.
  3. The current directory is represented by ..
  4. The parent directory is represented by ...
  5. The home directory is represented by ~.

Examples:

/home/user/docs/letter.txt
./inThisDir
../../greatGrandParent
~/.rcinfo

On Windows,

  1. A standard DOS or Windows Command Prompt (CMD) path can consist of three components:

    1. A volume or drive letter followed by the volume separator (:).
    2. A directory name. The directory separator character separates subdirectories within the nested directory hierarchy.
    3. An optional filename. The directory separator character separates the file path and the filename.

    If all three components are present, the path is absolute.
    If no volume or drive letter is specified and the directory name begins with the directory separator character, the path is relative from the root of the current drive.
    Otherwise, the path is relative to the current directory.
    Although UNC paths (beginning with two directory separators as described below) are not recognized by the standard DOS or CMD, they are also considered as absolute paths.
    The following table shows some possible directory and file paths.

    Path Description
    \(\ms{C:\Documents\Newsletters\Summer2018.pdf}\) An absolute file path from the root of drive C:.
    \(\ms{\Program Files\Custom Utilities\StringFinder.exe}\) An absolute path from the root of the current drive.
    \(\ms{2018\January.xlsx}\) A relative path to a file in a subdirectory of the current directory.
    \(\ms{..\Publications\TravelBrochure.pdf}\) A relative path to a file in a directory starting from the current directory.
    \(\ms{C:\Projects\apilibrary\apilibrary.sln}\) An absolute path to a file from the root of drive C:.
    \(\ms{C:Projects\apilibrary\apilibrary.sln}\) A relative path from the current directory of the C: drive.
  2. The Windows path namespaces.
    The Windows operating system has a unified object model that points to all resources, including files.
    These object paths are accessible from the console window and are exposed to the Win32 layer through a special folder of symbolic links that legacy DOS and UNC paths are mapped to.
    This special folder is accessed via the DOS device path syntax, which is one of:
    1. Win32 File Namespaces: \\?\C:\Test\Foo.txt
      For file I/O, the \\?\ prefix to a path string tells the Windows APIs to disable all string parsing and to send the string that follows it straight to the file system.
      For example, if the file system supports large paths and file names, you can exceed the \(\ms{MAX_PATH}\) limits that are otherwise enforced by the Windows APIs.
      Because it turns off automatic expansion of the path string, the \\?\ prefix also allows the use of .. and . in the path names, which can be useful if you are attempting to perform operations on a file with these otherwise reserved relative path specifiers as part of the fully qualified path.
    2. Win32 Device Namespaces: \\.\C:\Test\Foo.txt
      The \\.\ prefix will access the Win32 device namespace instead of the Win32 file namespace.
      This is how access to physical disks and volumes is accomplished directly, without going through the file system, if the API supports this type of access.

  3. A Windows DOS device path consists of the following components:
    1. The device path specifier (\\.\ or \\?\), which identifies the path as a DOS device path.
    2. A symbolic link to the real device object ( \(\ms{C:\\}\) in the case of a drive name, or \(\ms{Volume{b75e2c83-0000-0000-0000-602f00000000}}\) in the case of a volume GUID).
      The first segment of the DOS device path after the device path specifier identifies the volume or drive.
      (For example, \(\ms{\\\\?\\C:\\}\) and \(\ms{\\\\.\\BootPartition\\}\))
      There is a specific link for UNCs that is called, not surprisingly, UNC.
      For example: \(\ms{\\\\.\\UNC\\Server\\Share\\Test\\Foo.txt}\) or \(\ms{\\\\?\\UNC\\Server\\Share\\Test\\Foo.txt}\)
  4. A standard Universal naming convention (UNC) path which are used to access network resources, have the following format:

    1. A server or host name, which is prefaced by \\. The server name can be a NetBIOS machine name or an IP/FQDN address (IPv4 as well as v6 are supported).
    2. A share name, which is separated from the host name by \. Together, the server and share name make up the volume.
    3. A directory name. The directory separator character separates subdirectories within the nested directory hierarchy.
    4. An optional filename. The directory separator character separates the file path and the filename.

    The following are some examples of UNC paths.

    Path Description

    \[\ms{\\\\system07\\C\$\\}\]

    The root directory of the C: drive on \(\ms{system07}\).
    \(\ms{\\\\Server2\Share\Test\Foo.txt}\) The Foo.txt file in the Test directory of the \(\ms{\\\\Server2\Share}\) volume.

    UNC paths must always be fully qualified (absolute). They can include relative directory segments (. and ..), but these must be part of a fully qualified path. Relative paths can be used only by mapping a UNC path to a drive letter.

  5. The root directory in Windows can be represented by either of the following,
    \ (relative to current working directory root)
    <drive_letter>:
    \\<server>\<sharename>
    \\?\<drive_spec>:
    \\?\<server>\<sharename>
    \\?\UNC\<server>\<sharename>
    \\.\<physical_device>
    where <something> is just a placeholder for something (The less-than and greater-than symbols have to be dropped).
  6. The directory separator is represented by \.
  7. The current directory is represented by \ or /.
  8. The parent directory is represented by ...
  9. The home directory is represented by %userprofile%.
    Note that %userprofile% expands to %SystemDrive%\Users\{username} and is equivalent to the $HOME environment variable in Unix/Linux.
    Note that %homedrive%%homepath% also frequently (but not always) refers to home directory on Windows.
    Note that the %homedrive% environment variable typically expands to the network root profile directory.
    Note that the %systemdrive% (typically c:) is the partition with the directory %systemroot% (typically C:\WINDOWS).
  10. The %OS% environment variable expands to operating system name on the user workstation.
  11. Windows path normalization.
    Almost all paths passed to Windows APIs are normalized. During normalization, Windows performs the following steps:
    1. Identifies the path.
      The first step in path normalization is identifying the type of path. Paths fall into one of a few categories:

      1. They are device paths; that is, they begin with two separators and a question mark or period ( \(\ms{\\\\?}\) or \(\ms{\\\\.}\)).
      2. They are UNC paths; that is, they begin with two separators without a question mark or period.
      3. They are fully qualified DOS paths; that is, they begin with a drive letter, a volume separator, and a component separator ( \(\ms{C:\\}\)).
      4. They designate a legacy device (CON, LPT1).
      5. They are relative to the root of the current drive; that is, they begin with a single component separator (\).
      6. They are relative to the current directory of a specified drive; that is, they begin with a drive letter, a volume separator, and no component separator ( \(\ms{C:}\)).
      7. They are relative to the current directory; that is, they begin with anything else ( \(\ms{temp\\testfile.txt}\)).

      The type of the path determines whether or not a current directory is applied in some way. It also determines what the "root" of the path is.
      If the path is a legacy DOS device such as CON, COM1, or LPT1, it is converted into a device path by prepending \(\ms{\\\\.\\}\) and returned.
      A path that begins with a legacy device name is always interpreted as a legacy device.
      For example, the DOS device path for \(\ms{CON.TXT}\) is \(\ms{\\\\.\\CON}\), and the DOS device path for \(\ms{COM1.TXT\\file1.txt}\) is \(\ms{\\\\.\\COM1}\).

    2. Applies the current directory to partially qualified (relative) paths.
      1. If a path isn not fully qualified, Windows applies the current directory to it.
        UNCs and device paths do not have the current directory applied. Neither does a full drive with separator \(\ms{C:\\}\).
      2. If the path starts with a single component separator, the drive from the current directory is applied.
        For example, if the file path is \(\ms{\\utilities}\) and the current directory is \(\ms{C:\\temp\\}\), normalization produces \(\ms{C:\\utilities}\).
      3. If the path starts with a drive letter, volume separator, and no component separator, the last current directory set from the command shell for the specified drive is applied.
        If the last current directory was not set, the drive alone is applied.
        For example, if the file path is \(\ms{D:sources}\), the current directory is \(\ms{C:\\Documents\\}\), and the last current directory on drive \(\ms{D:}\) was \(\ms{D:\\sources\\}\), the result is \(\ms{D:\\sources\\sources}\).
        These drive-relative paths are a common source of program and script logic errors.
        Assuming that a path beginning with a letter and a colon isn not relative is obviously incorrect.
    3. Canonicalizes component and directory separators.
      1. All forward slashes (/) are converted into the standard Windows separator, the backslash (\).
        If two adjacent slashes are present, they are collapsed into a single slash.
    4. Evaluates relative directory components (. for the current directory and .. for the parent directory).
      As the path is processed, any components or segments that are composed of a single or a double period (. or ..) are evaluated:
      1. For a single period, the current segment is removed, since it refers to the current directory.
      2. For a double period, the current segment and the parent segment are removed, since the double period refers to the parent directory.
      3. Parent directories are only removed if they are not past the root of the path.
        The root of the path depends on the type of path.
        It is the drive ( \(\ms{C:\\}\)) for DOS paths, the server/share for UNCs ( \(\ms{\\\\Server\\Share}\)), and the device path prefix for device paths ( \(\ms{\\\\?\\}\) or \(\ms{\\\\.\\}\)).
    5. Trims certain characters.
      Along with the runs of separators and relative segments removed earlier, some additional characters are removed during normalization:
      1. If a segment ends in a single period, that period is removed.
        A segment of a single or double period is normalized in the previous step.
        A segment of three or more periods is not normalized and is actually a valid file/directory name.
      2. If the path does not end in a separator, all trailing periods and spaces (U+0020) are removed.
        If the last segment is simply a single or double period, it falls under the relative components rule above.
        This rule means that one can create a directory name with a trailing space by adding a trailing separator after the space.
        Warning
        You should never create a directory or filename with a trailing space.
        Trailing spaces can make it difficult or impossible to access a directory, and applications commonly fail when attempting to handle directories or files whose names include trailing spaces.
  12. Skipping the Windows path normalization.
    Normally, any path passed to a Windows API is (effectively) passed to the GetFullPathName of Windows API function and normalized.
    There is one important exception: a device path that begins with a question mark instead of a period.
    Unless the path starts exactly with \(\ms{\\\\?\\}\) (note the use of the canonical backslash), it is normalized.
    Why would one want to skip normalization? There are three major reasons:

    1. To get access to paths that are normally unavailable but are legal.
      A file or directory called hidden, for example, is impossible to access in any other way.
    2. To improve performance by skipping normalization if you have already normalized.
    3. On \(\ms{.NET}\) Framework only, to skip the \(\ms{MAX_PATH}\) check for path length to allow for paths that are greater than 259 characters.
      Most APIs allow this, with some exceptions.

    Skipping normalization and max path checks is the only difference between the two device path syntaxes ( \(\ms{\\\\?}\) and \(\ms{\\\\.}\)).
    They are otherwise identical. Skipping Windows path normalization can be dangerous, since one can easily create paths that are difficult for other applications to deal with.

  13. Case-sensitivity and the Windows file system.
    A peculiarity of the Windows file system that non-Windows users and developers find confusing is that path and directory names are case-insensitive.
    That is, directory and file names reflect the casing of the strings used when they are created.
    If you rename a directory or file to change its case, the directory or file name reflects the case of the string used when you rename it.
    However, directory and file name comparisons are case-insensitive.
    If you search for a file named "test.txt", the \(\ms{.NET}\) file system APIs ignore case in the comparison.
    For example, "Test.txt", "TEST.TXT", "test.TXT", and any other combination of uppercase and lowercase letters will match "test.txt".

For more information, see the Microsoft documentation for path conventions.

Remarks
Since the original implementation of this module, other Fortran Path libraries have also come to existence. Notably, there is this MIT-licensed C++-based path manipulation Fortran module.
Most Unix-like Operating Systems (OS), in particular, Linux and macOS, strive to follow the conventions of the POSIX OS standard.
For many applications, it is necessary to identify the path-separator recognized by the processor shell.
On Unix systems, the task is easy. However, on Windows the path-separator symbol depends on the shell being used.
For example, if the codebase is compiled with GNU Fortran Compiler gfortran and used within Cygwin, other Unix shell emulators, then only the Unix style path-separator is recognized.
In a Windows Batch terminal, however, both POSIX and Windows path-separators can be used.
See also
pm_io
pm_sysInfo
pm_sysPath
pm_sysShell
Test:
test_pm_sysPath
Todo:
Normal Priority: The following functionalities need to be added to this module,
  1. Changing file permission: chmod


Final Remarks


If you believe this algorithm or its documentation can be improved, we appreciate your contribution and help to edit this page's documentation and source file on GitHub.
For details on the naming abbreviations, see this page.
For details on the naming conventions, see this page.
This software is distributed under the MIT license with additional terms outlined below.

  1. If you use any parts or concepts from this library to any extent, please acknowledge the usage by citing the relevant publications of the ParaMonte library.
  2. If you regenerate any parts/ideas from this library in a programming environment other than those currently supported by this ParaMonte library (i.e., other than C, C++, Fortran, MATLAB, Python, R), please also ask the end users to cite this original ParaMonte library.

This software is available to the public under a highly permissive license.
Help us justify its continued development and maintenance by acknowledging its benefit to society, distributing it, and contributing to it.

Author:
Amir Shahmoradi, Friday 3:09 AM, Dec 8, 2017, Dell Medical School, Austin, TX

Variable Documentation

◆ ASCII_CONTROL_STR

character(*, SK), parameter pm_sysPath::ASCII_CONTROL_STR = achar( 1, SK) // achar( 2, SK) // achar( 3, SK) // achar( 4, SK) // achar( 5, SK) // achar( 6, SK) // achar( 7, SK) // achar( 8, SK) // achar( 9, SK) // achar(10, SK) // achar(11, SK) // achar(12, SK) // achar(13, SK) // achar(14, SK) // achar(15, SK) // achar(16, SK) // achar(17, SK) // achar(18, SK) // achar(19, SK) // achar(21, SK) // achar(22, SK) // achar(23, SK) // achar(24, SK) // achar(25, SK) // achar(26, SK) // achar(27, SK) // achar(28, SK) // achar(29, SK) // achar(30, SK) // achar(31, SK) // achar(127, SK)

The scalar character of default kind SK containing the ASCII control characters that need special care in paths.

Warning
The zeroth ASCII character (the null character) is intentionally excluded from the list to avoid certain runtime failures that can happen due to the convention of terminating the C strings with the null character.


Final Remarks


If you believe this algorithm or its documentation can be improved, we appreciate your contribution and help to edit this page's documentation and source file on GitHub.
For details on the naming abbreviations, see this page.
For details on the naming conventions, see this page.
This software is distributed under the MIT license with additional terms outlined below.

  1. If you use any parts or concepts from this library to any extent, please acknowledge the usage by citing the relevant publications of the ParaMonte library.
  2. If you regenerate any parts/ideas from this library in a programming environment other than those currently supported by this ParaMonte library (i.e., other than C, C++, Fortran, MATLAB, Python, R), please also ask the end users to cite this original ParaMonte library.

This software is available to the public under a highly permissive license.
Help us justify its continued development and maintenance by acknowledging its benefit to society, distributing it, and contributing to it.

Author:
Amir Shahmoradi, Tuesday March 7, 2017, 3:56 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin

Definition at line 448 of file pm_sysPath.F90.

◆ DIR_SEP_ALL

character(*, SK), parameter pm_sysPath::DIR_SEP_ALL = SK_"/\"

The scalar character constant of default kind SK, containing the directory separator characters recognized by all platforms supported in this library (POSIX and Windows).

Definition at line 315 of file pm_sysPath.F90.

◆ DIR_SEP_POSIX

character(*, SK), parameter pm_sysPath::DIR_SEP_POSIX = SK_"/"

The scalar character constant of default kind SK, containing the preferred directory separator character on POSIX-compliant systems.

Definition at line 311 of file pm_sysPath.F90.

◆ DIR_SEP_POSIX_ALL

character(*, SK), parameter pm_sysPath::DIR_SEP_POSIX_ALL = SK_"/"

The scalar character constant of default kind SK, containing the directory separator characters recognized by the POSIX-compliant systems.

Definition at line 303 of file pm_sysPath.F90.

◆ DIR_SEP_WINDOWS

character(*, SK), parameter pm_sysPath::DIR_SEP_WINDOWS = SK_"\"

The scalar character constant of default kind SK, containing the preferred directory separator character on Windows operating systems.

Definition at line 307 of file pm_sysPath.F90.

◆ DIR_SEP_WINDOWS_ALL

character(*, SK), parameter pm_sysPath::DIR_SEP_WINDOWS_ALL = SK_"\/"

The scalar character constant of default kind SK, containing the directory separator characters recognized by the Windows operating systems.

Definition at line 299 of file pm_sysPath.F90.

◆ MAX_LEN_FILE_NAME

integer(IK), parameter pm_sysPath::MAX_LEN_FILE_NAME = MAX_NAME

The scalar integer constant of default kind IK, representing the maximum system-allowed path length (260 on Windows, 255 on Unix).

Definition at line 289 of file pm_sysPath.F90.

◆ MAX_LEN_FILE_PATH

integer(IK), parameter pm_sysPath::MAX_LEN_FILE_PATH = MAX_PATH

The scalar integer constant of default kind IK, representing the maximum system-allowed path length (260 on Windows, 4096 on Unix).
Note that the maximum file length path supported by the Intel compilers is also 4096.

Definition at line 294 of file pm_sysPath.F90.

◆ MODULE_NAME

character(*, SK), parameter pm_sysPath::MODULE_NAME = SK_"@pm_sysPath"

Definition at line 281 of file pm_sysPath.F90.

◆ PATH_SEP_ALL

character(*, SK), parameter pm_sysPath::PATH_SEP_ALL = SK_":;"

The scalar character constant of default kind SK, containing the directory separator characters recognized by all platforms supported in this library (POSIX and Windows).

Definition at line 328 of file pm_sysPath.F90.

◆ PATH_SEP_POSIX

character(*, SK), parameter pm_sysPath::PATH_SEP_POSIX = SK_":"

The scalar character constant of default kind SK, containing the preferred directory separator character on POSIX-compliant systems.

Definition at line 324 of file pm_sysPath.F90.

◆ PATH_SEP_WINDOWS

character(*, SK), parameter pm_sysPath::PATH_SEP_WINDOWS = SK_";"

The scalar character constant of default kind SK, containing the preferred directory separator character on Windows operating systems.

Definition at line 320 of file pm_sysPath.F90.

◆ POSIX_RESERVED_CHR

character(1, SK), dimension(*), parameter pm_sysPath::POSIX_RESERVED_CHR = [( POSIX_RESERVED_STR(i:i), i = 1_IK, len(POSIX_RESERVED_STR,IK) )]

The vector character constant of default kind SK of len = 1 containing the individual characters in POSIX_RESERVED_STR.


Final Remarks


If you believe this algorithm or its documentation can be improved, we appreciate your contribution and help to edit this page's documentation and source file on GitHub.
For details on the naming abbreviations, see this page.
For details on the naming conventions, see this page.
This software is distributed under the MIT license with additional terms outlined below.

  1. If you use any parts or concepts from this library to any extent, please acknowledge the usage by citing the relevant publications of the ParaMonte library.
  2. If you regenerate any parts/ideas from this library in a programming environment other than those currently supported by this ParaMonte library (i.e., other than C, C++, Fortran, MATLAB, Python, R), please also ask the end users to cite this original ParaMonte library.

This software is available to the public under a highly permissive license.
Help us justify its continued development and maintenance by acknowledging its benefit to society, distributing it, and contributing to it.

Author:
Amir Shahmoradi, Tuesday March 7, 2017, 3:50 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin

Definition at line 676 of file pm_sysPath.F90.

◆ POSIX_RESERVED_DQUOTE_CHR

character(1, SK), dimension(*), parameter pm_sysPath::POSIX_RESERVED_DQUOTE_CHR = [( POSIX_RESERVED_DQUOTE_STR(i:i), i = 1_IK, len(POSIX_RESERVED_DQUOTE_STR,IK) )]

The vector character constant of default kind SK of len = 1 containing the individual characters in POSIX_RESERVED_DQUOTE_STR.


Final Remarks


If you believe this algorithm or its documentation can be improved, we appreciate your contribution and help to edit this page's documentation and source file on GitHub.
For details on the naming abbreviations, see this page.
For details on the naming conventions, see this page.
This software is distributed under the MIT license with additional terms outlined below.

  1. If you use any parts or concepts from this library to any extent, please acknowledge the usage by citing the relevant publications of the ParaMonte library.
  2. If you regenerate any parts/ideas from this library in a programming environment other than those currently supported by this ParaMonte library (i.e., other than C, C++, Fortran, MATLAB, Python, R), please also ask the end users to cite this original ParaMonte library.

This software is available to the public under a highly permissive license.
Help us justify its continued development and maintenance by acknowledging its benefit to society, distributing it, and contributing to it.

Author:
Amir Shahmoradi, Tuesday March 7, 2017, 3:50 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin

Definition at line 706 of file pm_sysPath.F90.

◆ POSIX_RESERVED_DQUOTE_STR

character(*, SK), parameter pm_sysPath::POSIX_RESERVED_DQUOTE_STR = SK_"`$\"""//achar(10, SK)

The scalar character constant of default kind SK, containing the ASCII characters that require escaping via ESC (Escape) character within the Unix Shell environment even when the string double-quoted. Note that the history expansion character (!) is not included since it is meaningless in the POSIX standard.
See the GNU Bash manual for more information.


Final Remarks


If you believe this algorithm or its documentation can be improved, we appreciate your contribution and help to edit this page's documentation and source file on GitHub.
For details on the naming abbreviations, see this page.
For details on the naming conventions, see this page.
This software is distributed under the MIT license with additional terms outlined below.

  1. If you use any parts or concepts from this library to any extent, please acknowledge the usage by citing the relevant publications of the ParaMonte library.
  2. If you regenerate any parts/ideas from this library in a programming environment other than those currently supported by this ParaMonte library (i.e., other than C, C++, Fortran, MATLAB, Python, R), please also ask the end users to cite this original ParaMonte library.

This software is available to the public under a highly permissive license.
Help us justify its continued development and maintenance by acknowledging its benefit to society, distributing it, and contributing to it.

Author:
Amir Shahmoradi, Tuesday March 7, 2017, 3:50 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin

Definition at line 694 of file pm_sysPath.F90.

◆ POSIX_RESERVED_STR

character(*, SK), parameter pm_sysPath::POSIX_RESERVED_STR = SK_" " // SK_"!" // SK_'"' // SK_"#" // SK_"$" // SK_"&" // SK_"'" // SK_"(" // SK_")" // SK_"*" // SK_"," // SK_";" // SK_"<" // SK_"=" // SK_">" // SK_"?" // SK_"[" // SK_"\" // SK_"]" // SK_"^" // SK_"`" // SK_"{" // SK_"|" // SK_"}" // SK_"~" // ASCII_CONTROL_STR

The scalar character constant of default kind SK, containing the ASCII characters that require escaping via <ESC> character (if not double-quoted) within the Unix Shell environment.

The ASCII characters needing escape in POSIX-compliant shells can be obtained via the following Bash script,

for i in {0..127} ;do
printf -v var \\%o $i
printf -v var $var
printf -v res "%q" "$var"
esc=E
[ "$var" = "$res" ] && esc=-
printf "%02X %s %-7s\n" $i $esc "$res"
done |
column

which should render a table with the first field being hexa-value of byte, the second containing E if character need to be escaped and third field showing escaped presentation of character.


Final Remarks


If you believe this algorithm or its documentation can be improved, we appreciate your contribution and help to edit this page's documentation and source file on GitHub.
For details on the naming abbreviations, see this page.
For details on the naming conventions, see this page.
This software is distributed under the MIT license with additional terms outlined below.

  1. If you use any parts or concepts from this library to any extent, please acknowledge the usage by citing the relevant publications of the ParaMonte library.
  2. If you regenerate any parts/ideas from this library in a programming environment other than those currently supported by this ParaMonte library (i.e., other than C, C++, Fortran, MATLAB, Python, R), please also ask the end users to cite this original ParaMonte library.

This software is available to the public under a highly permissive license.
Help us justify its continued development and maintenance by acknowledging its benefit to society, distributing it, and contributing to it.

Author:
Amir Shahmoradi, Tuesday March 7, 2017, 3:50 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin

Definition at line 636 of file pm_sysPath.F90.

◆ verbatim

type(verbatim_type), parameter pm_sysPath::verbatim = verbatim_type()

The scalar constant of type verbatim_type that can be used to signify the verbatim interpretation of paths when passed to various procedures within the ParaMonte library.

For example usage, see the generic interfaces that take objects of this type as input arguments.

See also
verbatim
verbatim_type


Final Remarks


If you believe this algorithm or its documentation can be improved, we appreciate your contribution and help to edit this page's documentation and source file on GitHub.
For details on the naming abbreviations, see this page.
For details on the naming conventions, see this page.
This software is distributed under the MIT license with additional terms outlined below.

  1. If you use any parts or concepts from this library to any extent, please acknowledge the usage by citing the relevant publications of the ParaMonte library.
  2. If you regenerate any parts/ideas from this library in a programming environment other than those currently supported by this ParaMonte library (i.e., other than C, C++, Fortran, MATLAB, Python, R), please also ask the end users to cite this original ParaMonte library.

This software is available to the public under a highly permissive license.
Help us justify its continued development and maintenance by acknowledging its benefit to society, distributing it, and contributing to it.

Author:
Amir Shahmoradi, Tuesday March 7, 2017, 3:56 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin

Definition at line 367 of file pm_sysPath.F90.

◆ WIN32_NAMESPACE_DEVICE

character(*, SK), parameter pm_sysPath::WIN32_NAMESPACE_DEVICE = SK_"\\.\"

The scalar character constant of default kind SK, containing the operating systems path-separator symbol ("\" in Windows, "/" in Unix).

Prefixing Windows paths with this namespace allows Windows APIs to disable all string parsing and to send the string that follows it straight to the file system. For example, if the file system supports large paths and file names, you can exceed the MAX_PATH limits that are otherwise enforced by the Windows APIs. For more information about the normal maximum path limitation, see the Windows API documentation.

Warning
The \\ at the beginning of the namespace indicates that the path should be passed to the system with minimal modification, which means that the path cannot contain forward slashes to represent directory separators, or a period . to represent the current directory, or double dots .. to represent the parent directory.
Remarks
The addition of this namespace prefix allows the use of . or .. in path names, as well as relaxing the 260 character path name limit of Windows OS, if the underlying file system supports long paths and file names.


Final Remarks


If you believe this algorithm or its documentation can be improved, we appreciate your contribution and help to edit this page's documentation and source file on GitHub.
For details on the naming abbreviations, see this page.
For details on the naming conventions, see this page.
This software is distributed under the MIT license with additional terms outlined below.

  1. If you use any parts or concepts from this library to any extent, please acknowledge the usage by citing the relevant publications of the ParaMonte library.
  2. If you regenerate any parts/ideas from this library in a programming environment other than those currently supported by this ParaMonte library (i.e., other than C, C++, Fortran, MATLAB, Python, R), please also ask the end users to cite this original ParaMonte library.

This software is available to the public under a highly permissive license.
Help us justify its continued development and maintenance by acknowledging its benefit to society, distributing it, and contributing to it.

Author:
Amir Shahmoradi, Tuesday March 7, 2017, 3:56 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin

Definition at line 430 of file pm_sysPath.F90.

◆ WIN32_NAMESPACE_FILE

character(*, SK), parameter pm_sysPath::WIN32_NAMESPACE_FILE = SK_"\\?\"

The scalar character constant of default kind SK, containing the prefix operating systems path-separator symbol ("\" in Windows, "/" in Unix).

Prefixing Windows paths with this namespace allows Windows APIs to disable all string parsing and to send the string that follows it straight to the file system. For example, if the file system supports large paths and file names, you can exceed the MAX_PATH limits that are otherwise enforced by the Windows APIs. For more information about the normal maximum path limitation, see the Windows API documentation.

Warning
The \\ at the beginning of the namespace indicates that the path should be passed to the system with minimal modification, which means that the path cannot contain forward slashes to represent directory separators, or a period . to represent the current directory, or double dots .. to represent the parent directory.
Remarks
The presence of \\ at the beginning of a path implies a path that follows the Universal Naming Convention (UNC).
A UNC name of any format always starts with two backslash characters ("\\") followed by an absolute path.
For example the UNC name for Microsoft Subsystem for Linux (WSL2) is \\wsl$\.
The addition of this namespace prefix allows the use of . or .. in path names (without any special meaning), as well as relaxing the 260 character path name limit of Windows OS, if the underlying file system supports long paths and file names.


Final Remarks


If you believe this algorithm or its documentation can be improved, we appreciate your contribution and help to edit this page's documentation and source file on GitHub.
For details on the naming abbreviations, see this page.
For details on the naming conventions, see this page.
This software is distributed under the MIT license with additional terms outlined below.

  1. If you use any parts or concepts from this library to any extent, please acknowledge the usage by citing the relevant publications of the ParaMonte library.
  2. If you regenerate any parts/ideas from this library in a programming environment other than those currently supported by this ParaMonte library (i.e., other than C, C++, Fortran, MATLAB, Python, R), please also ask the end users to cite this original ParaMonte library.

This software is available to the public under a highly permissive license.
Help us justify its continued development and maintenance by acknowledging its benefit to society, distributing it, and contributing to it.

Author:
Amir Shahmoradi, Tuesday March 7, 2017, 3:56 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin

Definition at line 402 of file pm_sysPath.F90.

◆ WINDOWS_CMD_METACHAR_CHR

character(1, SK), dimension(*), parameter pm_sysPath::WINDOWS_CMD_METACHAR_CHR = [( WINDOWS_CMD_METACHAR_STR(i:i), i = 1_IK, len(WINDOWS_CMD_METACHAR_STR,IK) )]

The vector character constant of default kind SK of len = 1 containing the individual characters in WINDOWS_CMD_METACHAR_STR.


Final Remarks


If you believe this algorithm or its documentation can be improved, we appreciate your contribution and help to edit this page's documentation and source file on GitHub.
For details on the naming abbreviations, see this page.
For details on the naming conventions, see this page.
This software is distributed under the MIT license with additional terms outlined below.

  1. If you use any parts or concepts from this library to any extent, please acknowledge the usage by citing the relevant publications of the ParaMonte library.
  2. If you regenerate any parts/ideas from this library in a programming environment other than those currently supported by this ParaMonte library (i.e., other than C, C++, Fortran, MATLAB, Python, R), please also ask the end users to cite this original ParaMonte library.

This software is available to the public under a highly permissive license.
Help us justify its continued development and maintenance by acknowledging its benefit to society, distributing it, and contributing to it.

Author:
Amir Shahmoradi, Tuesday March 7, 2017, 3:50 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin

Definition at line 542 of file pm_sysPath.F90.

◆ WINDOWS_CMD_METACHAR_STR

character(*, SK), parameter pm_sysPath::WINDOWS_CMD_METACHAR_STR = SK_'()%!^"<>&|'

The scalar character constant of default kind SK, containing the Windows CMD shell metacharacters.

Metacharacters are characters that have special meaning for Windows CMD.


Final Remarks


If you believe this algorithm or its documentation can be improved, we appreciate your contribution and help to edit this page's documentation and source file on GitHub.
For details on the naming abbreviations, see this page.
For details on the naming conventions, see this page.
This software is distributed under the MIT license with additional terms outlined below.

  1. If you use any parts or concepts from this library to any extent, please acknowledge the usage by citing the relevant publications of the ParaMonte library.
  2. If you regenerate any parts/ideas from this library in a programming environment other than those currently supported by this ParaMonte library (i.e., other than C, C++, Fortran, MATLAB, Python, R), please also ask the end users to cite this original ParaMonte library.

This software is available to the public under a highly permissive license.
Help us justify its continued development and maintenance by acknowledging its benefit to society, distributing it, and contributing to it.

Author:
Amir Shahmoradi, Tuesday March 7, 2017, 3:56 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin

Definition at line 529 of file pm_sysPath.F90.

◆ WINDOWS_RESERVED_CHR

character(1, SK), dimension(*), parameter pm_sysPath::WINDOWS_RESERVED_CHR = [( WINDOWS_RESERVED_STR(i:i), i = 1_IK, len(WINDOWS_RESERVED_STR,IK) )]

The vector character constant of default kind SK of len = 1 containing the individual characters in WINDOWS_RESERVED_STR.

Warning
The first character must always be the Windows directory separator \.


Final Remarks


If you believe this algorithm or its documentation can be improved, we appreciate your contribution and help to edit this page's documentation and source file on GitHub.
For details on the naming abbreviations, see this page.
For details on the naming conventions, see this page.
This software is distributed under the MIT license with additional terms outlined below.

  1. If you use any parts or concepts from this library to any extent, please acknowledge the usage by citing the relevant publications of the ParaMonte library.
  2. If you regenerate any parts/ideas from this library in a programming environment other than those currently supported by this ParaMonte library (i.e., other than C, C++, Fortran, MATLAB, Python, R), please also ask the end users to cite this original ParaMonte library.

This software is available to the public under a highly permissive license.
Help us justify its continued development and maintenance by acknowledging its benefit to society, distributing it, and contributing to it.

Author:
Amir Shahmoradi, Tuesday March 7, 2017, 3:50 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin

Definition at line 512 of file pm_sysPath.F90.

◆ WINDOWS_RESERVED_DEVICE_NAME

character(4, SK), dimension(*), parameter pm_sysPath::WINDOWS_RESERVED_DEVICE_NAME =[ SK_"CON " , SK_"PRN " , SK_"AUX " , SK_"NUL " , SK_"COM1" , SK_"COM2" , SK_"COM3" , SK_"COM4" , SK_"COM5" , SK_"COM6" , SK_"COM7" , SK_"COM8" , SK_"COM9" , SK_"LPT1" , SK_"LPT2" , SK_"LPT3" , SK_"LPT4" , SK_"LPT5" , SK_"LPT6" , SK_"LPT7" , SK_"LPT8" , SK_"LPT9" , SK_"con " , SK_"prn " , SK_"aux " , SK_"nul " , SK_"com1" , SK_"com2" , SK_"com3" , SK_"com4" , SK_"com5" , SK_"com6" , SK_"com7" , SK_"com8" , SK_"com9" , SK_"lpt1" , SK_"lpt2" , SK_"lpt3" , SK_"lpt4" , SK_"lpt5" , SK_"lpt6" , SK_"lpt7" , SK_"lpt8" , SK_"lpt9" ]

The vector character constant of default kind SK, containing the Windows reserved (forbidden) file names.
No file or directory name can contain these names alone, possibly mixed with leading or trailing blanks.


Final Remarks


If you believe this algorithm or its documentation can be improved, we appreciate your contribution and help to edit this page's documentation and source file on GitHub.
For details on the naming abbreviations, see this page.
For details on the naming conventions, see this page.
This software is distributed under the MIT license with additional terms outlined below.

  1. If you use any parts or concepts from this library to any extent, please acknowledge the usage by citing the relevant publications of the ParaMonte library.
  2. If you regenerate any parts/ideas from this library in a programming environment other than those currently supported by this ParaMonte library (i.e., other than C, C++, Fortran, MATLAB, Python, R), please also ask the end users to cite this original ParaMonte library.

This software is available to the public under a highly permissive license.
Help us justify its continued development and maintenance by acknowledging its benefit to society, distributing it, and contributing to it.

Author:
Amir Shahmoradi, Tuesday March 7, 2017, 3:50 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin

Definition at line 557 of file pm_sysPath.F90.

◆ WINDOWS_RESERVED_STR

character(*, SK), parameter pm_sysPath::WINDOWS_RESERVED_STR = SK_'\/<>:"|?*'//ASCII_CONTROL_STR

The scalar character constant of default kind SK, containing the Windows reserved characters not allowed in filenames.
Note that the ASCII control characters (0-31) are also forbidden in Windows paths.

Warning
It is critical for this constant to begin with the character \.


Final Remarks


If you believe this algorithm or its documentation can be improved, we appreciate your contribution and help to edit this page's documentation and source file on GitHub.
For details on the naming abbreviations, see this page.
For details on the naming conventions, see this page.
This software is distributed under the MIT license with additional terms outlined below.

  1. If you use any parts or concepts from this library to any extent, please acknowledge the usage by citing the relevant publications of the ParaMonte library.
  2. If you regenerate any parts/ideas from this library in a programming environment other than those currently supported by this ParaMonte library (i.e., other than C, C++, Fortran, MATLAB, Python, R), please also ask the end users to cite this original ParaMonte library.

This software is available to the public under a highly permissive license.
Help us justify its continued development and maintenance by acknowledging its benefit to society, distributing it, and contributing to it.

Author:
Amir Shahmoradi, Tuesday March 7, 2017, 3:56 AM, Institute for Computational Engineering and Sciences (ICES), The University of Texas at Austin

Definition at line 496 of file pm_sysPath.F90.