Spectrum - Jul/Aug 1997
D3/NT - What is OSFI?
Nathan Rector
Natec Systems
nater@northcoast.com
http://www.northcoast.com/~nater/
D3 supports an Open System File Interface (OSFI) which allows you to read and write items in "standard" UNIX, DOS, and NT file formats. The OSFI allows a developer to work with non-Multi-Value files as if they were part of the D3 file system.
OSFI is different from the D3 File System Interface (FSI). The FSI is a hashed file format that Pick Systems developed to allow the host system to be used as the file I/O. The D3 FSI file format can only be accessed through D3.
OSFI files are actually host system directories and each item is a host system file. For example, if someone needed access to word processing documents from a Pick program, then the OSFI could be used. The file would be the directory that document is stored in and the item would be the word processing document.
There are several options that can be applied to OSFI files to define how they operate. Any OSFI file can be open, read, and written to as if it were a standard D3 file. The OSFI files have access to any changes done to the host system files in the same directory. Any changes the OSFI files make to the directory are also available for other programs on the host system.
The definition of an OSFI file is the following:
001 QS
002
003 {UNIX/NT/DOS/NT_BIN}:{directory}]{options}
UNIX - only used when creating OSFI files under D3/UNIX
NT - used for text records which use a line feed to delimit line breaks
DOS - used for text records which use both a carriage return and a line feed to delimit
line breaks. NT_BIN - used to access binary records or data which is not to be translated
in any way.
Options:
t{n} - Converts any white space (space characters) preceding text that line up with tab-stops to be converted to tabs. The n is the length of the tab-stops. For example, if the tab-stops were set to 5 and the string had 7 spaces before the text, then 5 of the spaces will be replaced by a tab. This works the reverse when reading a file; the tab would be replaced with 5 spaces.
A - Specifies that an extra attribute mark always be added when a file is read. This is necessary if copying an item from the OSFI file to a standard D3 file. Again, this works in reverse when writing to the OSFI file.
c - Specifies that this file is a special character file such as a pipe or device.
n - Does the opposite of the A option. Does not allow the extra attribute mark to be added to the end of the item.
R - Does nothing to the file when read or write. The data is read and write as raw data.
Here are a few examples of OSFI files:
001 Q
002
003 DOS:C:\TEMP
or
001 Q
002
003 NT:C:\DOCS]T5
If you need to access an dictionary for an OSFI file, then there needs to be a subdirectory created. If D3/NT is being used, the subdirectory is called $DICT. For D3/UNIX, the subdirectory needs to be called .DICT . If there is no subdirectory and you try writing to an OSFI dictionary, an "file write protected" error results. If you try opening the dictionary and no subdirectory exists, a blank item is opened. If the subdirectory doesn't exist and you try reading the dictionary, the item will not be found.
Why would someone use these files? A good place to use this type of file is for accessing documents. Most word processors write documents as individual UNIX, DOS, or NT files and place them in a directory. This also allows developers the ability to interface with non-D3 files that other non-D3 programs use.
Since OSFI is not a native D3 file system, nor are the file systems it interfaces with designed for large data processing, it is not recommended to use it for anything other than interfacing with the native host file system. The OSFI is slower than native D3 files and requires more overhead to access.
OSFI allows D3 to become more flexible than it has traditionally been. Developers no longer need third-party software to access and manipulate NT, DOS, or UNIX files.