See (p3,ossim) for information about the environment produced here.
Usage
The simplest for the Gnosis programmer is when no FILEDEF's are used. All keys are passed via explicit gate jumps. Any "file" operations are done with explicit gate jumps or memory mapping. In this mode the OS simulator is supporting only the needs of the run time memory management of the high level language.
The third use takes advantage of both the Gnosis world and the OS world. Some keys are passed through FILEDEF and some via explicit jumps. "File" access is sometimes accomplished with the language access methods and sometimes via explicit gate jumps. The programmer must be familiar with many of the "back doors" of the OS simulator {OSFD and OSCOM, for example} to move keys in and out of the OS simulator environment.
With multiple FILEDEF contexts, it is possible to have fairly standard programs operate in different environments with only changes in the surrounding command system calls. This represents a not too desirable reversion to the days of OS but provides that the structure of an application is visible from the outside through directory listings and FILEDEF? listings.
Slot 3 & 4 are SIK6 & SOK6 keys {(p2,sik6)}. Guard them well: they are the only authority to the circuit that there is. The circuit is lost if they are lost.
Actually it is more complex than this: Much of the OS simulation merely assumes that c-slots 3 and 4 hold terminal SIK and SOK keys. This will not be the case if your program has put something else in these slots or if have initialized your object via the facilities described at (gnbc) or (hi-ord) in which case your object will have no standard terminal keys.
The builder may wish to install some keys that can be used by the program without reference to a directory. The builder is not likely to want his or her directory installed as a component.
The components node is also in c-slot 0 {of the cache} (after the old convention of having WOMBFACIL there).
The requestor, by supplying a FILEDEFQUERY key, allows the program access to some directory. If such access is not wanted {the requestor doesn't know what the builder might do to his/her directory} Filedef's can be done in advance via the OSFD key and the FILEDEFQUERY key may be one that always returns "file not defined". This is how a compiler front end would work.
OSFD - Filedef from the Program
The effect of defining a DDNAME with this key has precedence over defining the DDNAME through the FILEDEF domain. The external FILEDEF key is not called to resolve a DDNAME if the DDNAME has been defined with this key. The binding of the DDNAME with the KEY is permanent, however the key can be replaced by redefining it.
If FK is the capability designating some kind of file supported by OS access method simulation, then:
OSFD(1,((8,DDNAME),(176,JFCB));FK==>;rc) defines a file via a JFCB and associates it with a specific DDNAME. DDNAME must be left justified, with trailing blanks. Rc will be 0, if the JFCB was accepted and the key FK will be accessed whenever the program in OSR requests I/O to the file known by DDNAME. Rc will be 2 if the JFCB was not valid. The key associated with DDNAME can be replaced by a subsequent call specifying the same DDNAME.
RECFM: byte at 100 10.. .... F Fixed. 01.. .... V Variable. 11.. .... U Undefined. ...1 .... B Blocked (with Undefined only!).
LRECL: two bytes at 104, Logical Record Length
BLKSIZE: two bytes at 102, Maximum Block Size
OSFD(kt;==>x'414')
The domain key found in c-slot 3 of the program is the synthetic domain key.
There is an extended question here about what happens when OSSIM itself traps thus leaving the program stopped and itself busy. This is no worse than it is now. An improvement may be to give the OSSIM domain a domain keeper that does not go to DDT but sends the OSSIM domain to a safe place where it can save the reason for the trap and exit to a zero data key. The program domain could be restarted after any repairs are made to the OSSIM domain by the builder.
Eventually there will be two OSSIMF factories. One will be discreet and not trap. It will simply appear to stall when an error occurs. The requestor of the service will have to get the cooperation of both the builder of the service and the builder of the OSSIMF to determine what is wrong. The builder of the service will determine that the domain is trapped and give the synthetic domain key (he may think it is real) to the builder of OSSIMF. OSSIMF may now be debugged.
The second OSSIMF will trap to a DDT on the builder's switcher.
See (p3,synkeys) on similar issues.