open stream-reference open-modifiers? as attachment

   where stream-reference is



      new shelf ({string-expression})? insertion-point?


Setting a stream to open allows it to be written to and causes previous contents to be lost, just as though the stream had been discarded.

If the second form is used for the stream reference, where the open keyword is followed immediately by the new keyword, a new item is added to the specified stream shelf. The restrictions on this form of the open action are the same as those of the set new action.

A stream can be opened if it is:

  • unattached
  • closed
  • opened, but is not part of current output

The permitted attachments are:

  • buffer, which opens the stream as a buffer.
  • referent string-expression, which opens the stream as a referent whose name is given by the string expression.
  • file string-expression, which opens the stream as a file whose name is given by the string expression. This is the recommended way to open files.
  • external-output-function call, which opens the stream as a "connection" to an external string sink function. When data is written to the stream, it is processed by the external string sink function. This extends the ways in which OmniMark interacts with the external environment, simply by adding external function libraries.

Open modifiers are modifiers that affect how the stream is opened. If more than one open modifier is specified, they must be enclosed in parentheses and separated by "&". Each modifier can be specified only once. The modifiers are:

  local stream x
  open x with binary-mode as file "y"
  open x with buffered as file "y"
  open x with unbuffered text-mode as file "y"

This code fragment includes three different file statements. The first two are equivalent, though the second is the more efficient form of the statement. The third action is different.

The first action opens x in binary mode with the name "y".

The second action opens x as a buffered file with the name "y".

The third action opens x as an unbuffered file in text mode with the name "y".

In previous versions of OmniMark, the keyword file could be omitted. This is deprecated, and may be removed in a future version of the language.