An logical name is a named string that can be set, similar to an environmental variable. However, they are stored in shared memory so more than one process has access to any given name. They are organized into tables, and the tables themselves are logical names that are organized into special tables called directories.
Now each process has its own directory and table. Each job has its own directory and table. Each user has their own directory and table. Finally, there is a system-wide directory and table. But, if that's not enough, you can create your own tables and give them arbitrary scope by passing the handle around to whoever you want.
If you want to find the value of a particular logical name, you can explicitly specify which table to want the system to look the name up in. By default, it will search the process, job, user then system tables.
Each process, job and user has its own directory and table. They are called:
By default, when you create a logical, it goes in the OZ_PROCESS_TABLE for that process. When looking up logicals, the default is to look in the process table, then the job table, then the user table, then finally the system table. If you want to explicitly specify a table, prefix the logical name with the table name followed by a percent. So, for example, to specify logical 'abc' in the job table, you would put OZ_JOB_TABLE%abc.
Examples of process logicals are:
|OZ_DEFAULT_DIR||this process' default device and directory (or working directory)||OZ_INPUT||this process' input file||OZ_THIS_PROCESS||this process' process object|
Examples of job logicals are:
|OZ_CONSOLE||this job's console device||OZ_THIS_JOB||this job's job object|
Examples of user logicals are:
|OZ_THIS_USER||this user's user object||OZ_USERNAME||this user's username|
Examples of system logicals are:
|OZ_LOAD_DIR||the directory the kernel was loaded from||GCC_INCLUDE_DIR||the directory where the GCC includes files are|
Each logical name has the following properties:
These methods are defined: