#### Description:

This function creates a new MocChan and optionally initialises its attributes.

A MocChan is a specialised form of Channel which supports the reading and writing of AST Moc objects as text, using the conventions of the JSON and string encodings described in the IVOA`’` s MOC recommendation, version 1.1. Writing a Moc to a MocChan (using astWrite) will, if the Moc is suitable, generate a textual description of that Moc, and reading from a MocChan will create a new Moc from its textual description. See the Moc class for further information.

Normally, when you use a MocChan, you should provide `"` source`"` and `"` sink`"` functions which connect it to an external data store by reading and writing the resulting text. These functions should perform any conversions needed between external character encodings and the internal ASCII encoding. If no such functions are supplied, a Channel will read from standard input and write to standard output.

Alternatively, a MocChan can be told to read or write from specific text files using the SinkFile and SourceFile attributes, in which case no sink or source function need be supplied.

#### Synopsis

AstMocChan ∗astMocChan( const char ∗(∗ source)( void ), void (∗ sink)( const char ∗ ), const char ∗options, ... )

#### Parameters:

##### source

Pointer to a source function that takes no arguments and returns a pointer to a null-terminated string. If no value has been set for the SourceFile attribute, this function will be used by the MocChan to obtain lines of input text. On each invocation, it should return a pointer to the next input line read from some external data store, and a NULL pointer when there are no more lines to read.

If `"` source`"` is NULL and no value has been set for the SourceFile attribute, the MocChan will read from standard input instead.

##### sink

Pointer to a sink function that takes a pointer to a null-terminated string as an argument and returns void. If no value has been set for the SinkFile attribute, this function will be used by the MocChan to deliver lines of output text. On each invocation, it should deliver the contents of the string supplied to some external data store.

If `"` sink`"` is NULL, and no value has been set for the SinkFile attribute, the MocChan will write to standard output instead.

##### options

Pointer to a null-terminated string containing an optional comma-separated list of attribute assignments to be used for initialising the new MocChan. The syntax used is identical to that for the astSet function and may include `"` printf`"` format specifiers identified by `"` %`"` symbols in the normal way.

##### ...

If the `"` options`"` string contains `"` %`"` format specifiers, then an optional list of additional arguments may follow it in order to supply values to be substituted for these specifiers. The rules for supplying these are identical to those for the astSet function (and for the C `"` printf`"` function).

#### Returned Value

##### astMocChan()

A pointer to the new MocChan.

#### Notes:

- If the external data source or sink uses a character encoding other than ASCII, the supplied source and sink functions should translate between the external character encoding and the internal ASCII encoding used by AST.

- A null Object pointer (AST__NULL) will be returned if this function is invoked with the AST error status set, or if it should fail for any reason.

Copyright (C) 2021 East Asian Observatory