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:

There is also a system-wide directory and table:

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_DIRthis process' default device and directory (or working directory)
OZ_INPUTthis process' input file
OZ_THIS_PROCESSthis process' process object

Examples of job logicals are:
OZ_CONSOLEthis job's console device
OZ_THIS_JOBthis job's job object

Examples of user logicals are:
OZ_THIS_USERthis user's user object
OZ_USERNAMEthis user's username

Examples of system logicals are:
OZ_LOAD_DIRthe directory the kernel was loaded from
GCC_INCLUDE_DIRthe directory where the GCC includes files are

Each logical name has the following properties:

These methods are defined: