# `URP.Call`

Binary frame builders for UNO API calls.

Each function constructs the wire-format payload for a specific UNO remote
procedure call. `URP.Bridge` uses these builders instead of assembling
binary payloads inline. All public functions return iodata (lists of
binaries); the single flattening happens in `URP.Protocol.send_frame/2`.

The `qi_*` functions build complete queryInterface frames (header + null
context + body type parameter).

## Abbreviations

Module attributes use short prefixes borrowed from LibreOffice's own naming
conventions (IDL interfaces, `binaryurp/source/*.hxx`, `include/typelib/`):

| Prefix  | Stands for                | Example                         |
|---------|---------------------------|---------------------------------|
| `xi_`   | X-Interface (UNO IDL)     | `@xi_closeable`                 |
| `qi_`   | queryInterface            | `qi_loader/1`                   |
| `ctx`   | XComponentContext         | `@oid_ctx`, `@func_ctx_*`       |
| `mcf`   | XMultiComponentFactory    | `@func_mcf_create_with_context` |
| `msf`   | XMultiServiceFactory      | `@func_msf_create_with_args`    |
| `na`    | XNameAccess               | `@func_na_get_by_name`          |
| `nr`    | XNameReplace              | `@func_nr_replace_by_name`      |
| `cb`    | XChangesBatch             | `@func_cb_commit_changes`       |
| `sfa`   | XSimpleFileAccess         | `@func_sfa_open_file_read`      |
| `is`    | XInputStream              | `@func_is_read_bytes`           |
| `os`    | XOutputStream             | `@func_os_write_bytes`          |
| `ff`    | FilterFactory service     | `@qi_cache_ff_name_access`      |
| `td`    | TypeDetection service     | `@qi_cache_td_name_access`      |
| `tc`    | TypeClass (typelib enum)  | `@tc_boolean`, `@tc_string`     |

# `create_desktop`

XMultiComponentFactory.createInstanceWithContext (bootstrap — registers type).

# `create_instance_with_context`

XMultiComponentFactory.createInstanceWithContext (cached type).

# `filter_data_property`

Build a FilterData property from a keyword list of export options.

# `get_available_service_names`

XMultiComponentFactory.getAvailableServiceNames.

# `get_filter_element_names`

XNameAccess.getElementNames for FilterFactory.

# `get_type_element_names`

XNameAccess.getElementNames for TypeDetection.

# `get_value_by_name`

XComponentContext.getValueByName — returns an Any(XInterface).

# `input_stream_property`

Build an InputStream property for streaming document load.

# `load_component_from_url`

XComponentLoader.loadComponentFromURL.

# `output_stream_property`

Build an OutputStream property for streaming document store.

# `qi_component_ctx`

QI for XComponentContext (bootstrap only — reuses type from previous message).

# `qi_initial`

Initial QI during bootstrap (registers XInterface type + TID).

# `store_to_url`

XStorable2.storeToURL.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
