This routine has two uses. It can be used to expand an environment variable in a file specification, where the environment variable contains a list of several paths. It can also determine whether an OPEN INPUT statement using a particular file specification finds the file in a library file or as a separate disk file.
call "CBL_LOCATE_FILE" using user-file-spec user-mode actual-file-spec exist-flag path-flag returning status-code
01 actual-file-spec. 03 buffer-len cblt-x2-compx. 03 buffer pic x(n).
01 actual-file-spec. 03 buffer-len pic x(2) comp-x. 03 buffer pic x(n).
00 | Check whether the file exists in a library or as a separate disk file.
If user-file-spec includes an embedded library-name, that library is opened (if it exists) and searched for the file. The library is left open afterward. If user-file-spec includes an embedded environment variable, the file is searched for along each path specified in that variable. If the file is found, actual-file-spec on exit contains the file specification with the environment variable expanded to the successful path. Otherwise, actual-file-spec on exit contains the file specification with the environment variable expanded to the first path it contained. |
01 | If user-file-spec includes an environment variable, actual-file-spec on exit contains the file specification with the environment variable expanded to the first path it contained. The file is not searched for. |
10 | If user-file-spec includes an environment variable, actual-file-spec on exit contains the file specification with the environment variable expanded to the next path it contained. The file is not searched for. This option should only be used after a successful call with the first two bits of user-mode set to 1 (01) or 2 (10). See path-flag below. |
11 | Reserved. Must not be used. |
0 | user-file-spec and actual-file-spec are both space-terminated. |
1 | user-file-spec and actual-file-spec are both null-terminated. |
0 | File not found or not searched for |
1 | File was found in a library that was already open |
2 | File was found in a library specified in user-file-spec |
3 | File was found as a separate disk file |
0 | actual-file-spec does not include an expanded environment variable |
>0 | actual-file-spec contains an expanded environment variable |
0 | Success |
1 | The environment variable does not exist |
2 | There is no next path |
3 | The resolved filename is too large for the buffer |
4 | Resulting filename is illegal |
255 | Other error |
The user-file-spec can take the form:
Standard filename: | path/filename.ext |
Embedded environment variable: | $envname/filename.ext |
Embedded library name: | path/lbr-name.lbr/filename.ext |
Comments:
CBL_LOCATE_FILE is not stripe-aware. If you use this routine on a striped file, the routine locates the first stripe only. Therefore, use this routine on an individual stripe only and refer to the stripe by the stripe name. For more information on the use of striped files, refer to File Striping.