diff --git a/README.md b/README.md
index 5c51d2343..d124957cb 100644
--- a/README.md
+++ b/README.md
@@ -1,92 +1,95 @@
[![GitHub release](https://img.shields.io/github/release/zeromq/czmq.svg)](https://github.com/zeromq/czmq/releases)
+[![OBS draft](https://img.shields.io/badge/OBS%20master-draft-yellow.svg)](http://software.opensuse.org/download.html?project=home%3Azeromq%3Agit-draft&package=czmq)
+[![OBS stable](https://img.shields.io/badge/OBS%20master-stable-yellow.svg)](http://software.opensuse.org/download.html?project=home%3Azeromq%3Agit-stable&package=czmq)
+
[![license](https://img.shields.io/github/license/zeromq/czmq.svg)](https://github.com/zeromq/czmq/blob/master/LICENSE)
-
+
# CZMQ - High-level C binding for ØMQ
-| Linux & MacOSX | Windows | Chat |
-|:--------------:|:--------:|:----:|
-|[![Build Status](https://travis-ci.org/zeromq/czmq.png?branch=master)](https://travis-ci.org/zeromq/czmq)|[![Build status](https://ci.appveyor.com/api/projects/status/q7y22juu3pnl5wq6?svg=true)](https://ci.appveyor.com/project/zeromq/czmq)||
+| Linux & MacOSX | Windows |
+|:--------------:|:--------:|
+|[![Build Status](https://travis-ci.org/zeromq/czmq.png?branch=master)](https://travis-ci.org/zeromq/czmq)|[![Build status](https://ci.appveyor.com/api/projects/status/q7y22juu3pnl5wq6?svg=true)](https://ci.appveyor.com/project/zeromq/czmq)|
-
+
## Contents
-**Overview**
+**Overview**
-**Scope and Goals**
+**Scope and Goals**
-**Ownership and License**
+**Ownership and License**
-**Using CZMQ**
+**Using CZMQ**
-**Building and Installing**
+**Building and Installing**
-**Building on Windows**
+**Building on Windows**
-**Linking with an Application**
+**Linking with an Application**
-**Use from Other Languages**
+**Use from Other Languages**
-**API v3 Summary**
-* zactor - simple actor framework
-* zauth - authentication for ZeroMQ security mechanisms
-* zbeacon - LAN discovery and presence
-* zcert - work with CURVE security certificates
-* zcertstore - work with CURVE security certificate stores
-* zchunk - work with memory chunks
-* zclock - millisecond clocks and delays
-* zconfig - work with config files written in rfc.zeromq.org/spec:4/ZPL.
-* zdigest - provides hashing functions (SHA-1 at present)
-* zdir - work with file-system directories
-* zdir_patch - work with directory patches
-* zfile - provides methods to work with files in a portable fashion.
-* zframe - working with single message frames
-* zgossip - decentralized configuration management
-* zhash - simple generic hash container
-* zhashx - extended generic hash container
-* ziflist - list of network interfaces available on system
-* zlist - simple generic list container
-* zlistx - extended generic list container
-* zloop - event-driven reactor
-* zmonitor - socket event monitor
-* zmsg - working with multipart messages
-* zpoller - trivial socket poller class
-* zproc - process configuration and status
-* zproxy - run a steerable proxy in the background
-* zrex - work with regular expressions
-* zsock - high-level socket API that hides libzmq contexts and sockets
-* zstr - sending and receiving strings
-* zsys - system-level methods
-* ztimerset - timer set
-* ztrie - simple trie for tokenizable strings
-* zuuid - UUID support class
+**API v3 Summary**
+* zactor - simple actor framework
+* zauth - authentication for ZeroMQ security mechanisms
+* zbeacon - LAN discovery and presence
+* zcert - work with CURVE security certificates
+* zcertstore - work with CURVE security certificate stores
+* zchunk - work with memory chunks
+* zclock - millisecond clocks and delays
+* zconfig - work with config files written in rfc.zeromq.org/spec:4/ZPL.
+* zdigest - provides hashing functions (SHA-1 at present)
+* zdir - work with file-system directories
+* zdir_patch - work with directory patches
+* zfile - provides methods to work with files in a portable fashion.
+* zframe - working with single message frames
+* zgossip - decentralized configuration management
+* zhash - simple generic hash container
+* zhashx - extended generic hash container
+* ziflist - list of network interfaces available on system
+* zlist - simple generic list container
+* zlistx - extended generic list container
+* zloop - event-driven reactor
+* zmonitor - socket event monitor
+* zmsg - working with multipart messages
+* zpoller - trivial socket poller class
+* zproc - process configuration and status
+* zproxy - run a steerable proxy in the background
+* zrex - work with regular expressions
+* zsock - high-level socket API that hides libzmq contexts and sockets
+* zstr - sending and receiving strings
+* zsys - system-level methods
+* ztimerset - timer set
+* ztrie - simple trie for tokenizable strings
+* zuuid - UUID support class
-**Error Handling**
+**Error Handling**
-**CZMQ Actors**
+**CZMQ Actors**
-**Under the Hood**
+**Under the Hood**
-**Adding a New Class**
+**Adding a New Class**
-**Documentation**
+**Documentation**
-**Development**
+**Development**
-**Porting CZMQ**
+**Porting CZMQ**
-**Hints to Contributors**
+**Hints to Contributors**
-**Code Generation**
+**Code Generation**
-**This Document**
+**This Document**
-
+
## Overview
-
+
### Scope and Goals
CZMQ has these goals:
@@ -103,7 +106,7 @@ CZMQ grew out of concepts developed in [ØMQ - The Guide](http://zguide.zeromq.o
-
+
### Ownership and License
The contributors are listed in AUTHORS. This project uses the MPL v2 license, see LICENSE.
@@ -114,10 +117,10 @@ CZMQ uses the [CLASS (C Language Style for Scalabilty)](http://rfc.zeromq.org/sp
To report an issue, use the [CZMQ issue tracker](https://github.com/zeromq/czmq/issues) at github.com.
-
+
## Using CZMQ
-
+
### Building and Installing
To start with, you need at least these packages:
@@ -187,7 +190,7 @@ You will need the pkg-config, libtool, and autoreconf packages. After building,
make check
-
+
### Building on Windows
To start with, you need MS Visual Studio (C/C++). The free community edition works well.
@@ -243,14 +246,14 @@ Let's test by running `czmq_selftest`:
czmq\builds\msvc\vs2013\x64\ReleaseDEXE\czmq_selftest.exe
```
-
+
### Linking with an Application
Include `czmq.h` in your application and link with libczmq. Here is a typical gcc link command:
gcc myapp.c -o myapp -lczmq -lzmq
-
+
### Use from Other Languages
This is a list of known higher-level wrappers around CZMQ:
@@ -265,12 +268,12 @@ This is a list of known higher-level wrappers around CZMQ:
* https://github.com/mtortonesi/ruby-czmq-ffi - Ruby FFI
* https://github.com/zeromq/goczmq - Go
-
+
### API v3 Summary
This is the API provided by CZMQ v3.x, in alphabetical order.
-
+
#### zactor - simple actor framework
The zactor class provides a simple actor framework. It replaces the
@@ -352,7 +355,7 @@ This is the class self test code:
zactor_destroy (&actor);
```
-
+
#### zauth - authentication for ZeroMQ security mechanisms
A zauth actor takes over authentication for all incoming connections in
@@ -610,7 +613,7 @@ This is the class self test code:
zdir_destroy (&dir);
```
-
+
#### zbeacon - LAN discovery and presence
The zbeacon class implements a peer-to-peer discovery service for local
@@ -798,7 +801,7 @@ This is the class self test code:
zactor_destroy (&node3);
```
-
+
#### zcert - work with CURVE security certificates
The zcert class provides a way to create and work with security
@@ -980,7 +983,7 @@ This is the class self test code:
zdir_destroy (&dir);
```
-
+
#### zcertstore - work with CURVE security certificate stores
To authenticate new clients using the ZeroMQ CURVE security mechanism,
@@ -1123,7 +1126,7 @@ This is the class self test code:
zdir_destroy (&dir);
```
-
+
#### zchunk - work with memory chunks
The zchunk class works with variable sized blobs. Not as efficient as
@@ -1337,7 +1340,7 @@ This is the class self test code:
zchunk_destroy (&chunk);
```
-
+
#### zclock - millisecond clocks and delays
The zclock class provides essential sleep and system time functions,
@@ -1403,7 +1406,7 @@ This is the class self test code:
free (timestr);
```
-
+
#### zconfig - work with config files written in rfc.zeromq.org/spec:4/ZPL.
Lets applications load, work with, and save configuration files.
@@ -1677,7 +1680,7 @@ This is the class self test code:
zdir_destroy (&dir);
```
-
+
#### zdigest - provides hashing functions (SHA-1 at present)
The zdigest class generates a hash from zchunks of data. The current
@@ -1747,7 +1750,7 @@ This is the class self test code:
free (buffer);
```
-
+
#### zdir - work with file-system directories
The zdir class gives access to the file system index. It will load
@@ -1983,7 +1986,7 @@ This is the class self test code:
zdir_destroy (&testdir);
```
-
+
#### zdir_patch - work with directory patches
The zdir_patch class works with one patch, which says "create this
@@ -2059,7 +2062,7 @@ This is the class self test code:
zdir_patch_destroy (&patch);
```
-
+
#### zfile - provides methods to work with files in a portable fashion.
The zfile class provides methods to work with disk files. A file object
@@ -2355,7 +2358,7 @@ This is the class self test code:
zfile_remove (file);
```
-
+
#### zframe - working with single message frames
The zframe class provides methods to send and receive single message
@@ -2665,7 +2668,7 @@ This is the class self test code:
```
-
+
#### zgossip - decentralized configuration management
Implements a gossip protocol for decentralized configuration management.
@@ -2864,7 +2867,7 @@ This is the class self test code:
```
-
+
#### zhash - simple generic hash container
zhash is an expandable hash table container. This is a simple container.
@@ -3206,7 +3209,7 @@ This is the class self test code:
zhash_destroy (&hash);
```
-
+
#### zhashx - extended generic hash container
zhashx is an extended hash table container with more functionality than
@@ -3675,7 +3678,7 @@ This is the class self test code:
zhashx_destroy (&hash);
```
-
+
#### ziflist - list of network interfaces available on system
The ziflist class takes a snapshot of the network interfaces that the
@@ -3759,7 +3762,7 @@ This is the class self test code:
ziflist_destroy (&iflist);
```
-
+
#### zlist - simple generic list container
Provides a generic container implementing a fast singly-linked list. You
@@ -4025,7 +4028,7 @@ This is the class self test code:
assert (list == NULL);
```
-
+
#### zlistx - extended generic list container
Provides a generic doubly-linked list container. This container provides
@@ -4322,7 +4325,7 @@ This is the class self test code:
zlistx_destroy (&list);
```
-
+
#### zloop - event-driven reactor
The zloop class provides an event-driven reactor pattern. The reactor
@@ -4537,7 +4540,7 @@ This is the class self test code:
zsock_destroy (&output);
```
-
+
#### zmonitor - socket event monitor
The zmonitor actor provides an API for obtaining socket events such as
@@ -4645,7 +4648,7 @@ This is the class self test code:
#endif
```
-
+
#### zmsg - working with multipart messages
The zmsg class provides methods to send and receive multipart messages
@@ -5139,7 +5142,7 @@ This is the class self test code:
#endif
```
-
+
#### zpoller - trivial socket poller class
The zpoller class provides a minimalist interface to ZeroMQ's zmq_poll
@@ -5310,7 +5313,7 @@ This is the class self test code:
#endif
```
-
+
#### zproc - process configuration and status
zproc - process configuration and status
@@ -5462,7 +5465,7 @@ This is the class self test code:
Please add @selftest section in ../src/zproc.c.
-
+
#### zproxy - run a steerable proxy in the background
A zproxy actor switches messages between a frontend and a backend socket.
@@ -5813,7 +5816,7 @@ This is the class self test code:
#endif
```
-
+
#### zrex - work with regular expressions
Wraps a very simple regular expression library (SLRE) as a CZMQ class.
@@ -5952,7 +5955,7 @@ This is the class self test code:
```
-
+
#### zsock - high-level socket API that hides libzmq contexts and sockets
The zsock class wraps the libzmq socket handle (a void *) with a proper
@@ -7122,7 +7125,7 @@ This is the class self test code:
```
-
+
#### zstr - sending and receiving strings
The zstr class provides utility functions for sending and receiving C
@@ -7297,7 +7300,7 @@ This is the class self test code:
#endif
```
-
+
#### zsys - system-level methods
The zsys class provides a portable wrapper for system calls. We collect
@@ -7775,7 +7778,7 @@ This is the class self test code:
zsys_close (logger, NULL, 0);
```
-
+
#### ztimerset - timer set
ztimerset - timer set
@@ -7901,7 +7904,7 @@ This is the class self test code:
ztimerset_destroy (&self);
```
-
+
#### ztrie - simple trie for tokenizable strings
This is a variant of a trie or prefix tree where all the descendants of a
@@ -8144,7 +8147,7 @@ This is the class self test code:
ztrie_destroy (&self);
```
-
+
#### zuuid - UUID support class
The zuuid class generates UUIDs and provides methods for working with
@@ -8265,7 +8268,7 @@ This is the class self test code:
```
-
+
## Error Handling
The CZMQ policy is to reduce the error flow to 0/-1 where possible. libzmq still does a lot of errno setting. CZMQ does not do that, as it creates a fuzzy API. Things either work as expected, or they fail, and the application's best strategy is usually to assert on non-zero return codes.
@@ -8282,7 +8285,7 @@ There are a few cases where the return value is overloaded to return -1, 0, or o
The overall goal with this strategy is robustness, and absolute minimal and predictable expression in the code. You can see that it works: the CZMQ code is generally very simple and clear, with a few exceptions of places where people have used their old C style (we fix these over time).
-
+
## CZMQ Actors
The v2 API had a zthread class that let you create "attached threads" connected to their parent by an inproc:// PIPE socket. In v3 this has been simplified and better wrapped as the zactor class. CZMQ actors are in effect threads with a socket interface. A zactor_t instance works like a socket, and the CZMQ classes that deal with sockets (like zmsg and zpoller) all accept zactor_t references as well as zsock_t and libzmq void * socket handles.
@@ -8428,10 +8431,10 @@ To write an actor, use this template. Note that your actor is a single function
The selftest code shows how to create, talk to, and destroy an actor.
-
+
## Under the Hood
-
+
### Adding a New Class
If you define a new CZMQ class `myclass` you need to:
@@ -8443,7 +8446,7 @@ If you define a new CZMQ class `myclass` you need to:
* Add myclass to 'model/projects.xml` and read model/README.txt.
* Add a section to README.txt.
-
+
### Documentation
Man pages are generated from the class header and source files via the doc/mkman tool, and similar functionality in the gitdown tool (http://github.com/imatix/gitdown). The header file for a class must wrap its interface as follows (example is from include/zclock.h):
@@ -8482,7 +8485,7 @@ The source file for a class then provides the self test example as follows:
The template for man pages is in doc/mkman.
-
+
### Development
CZMQ is developed through a test-driven process that guarantees no memory violations or leaks in the code:
@@ -8492,7 +8495,7 @@ CZMQ is developed through a test-driven process that guarantees no memory violat
* Run the 'selftest' script, which uses the Valgrind memcheck tool.
* Repeat until perfect.
-
+
### Porting CZMQ
When you try CZMQ on an OS that it's not been used on (ever, or for a while), you will hit code that does not compile. In some cases the patches are trivial, in other cases (usually when porting to Windows), the work needed to build equivalent functionality may be non-trivial. In any case, the benefit is that once ported, the functionality is available to all applications.
@@ -8503,7 +8506,7 @@ Before attempting to patch code for portability, please read the `czmq_prelude.h
* Defining macros that rename exotic library functions to more conventional names: do this in czmq_prelude.h.
* Reimplementing specific methods to use a non-standard API: this is typically needed on Windows. Do this in the relevant class, using #ifdefs to properly differentiate code for different platforms.
-
+
### Hints to Contributors
CZMQ is a nice, neat library, and you may not immediately appreciate why. Read the CLASS style guide please, and write your code to make it indistinguishable from the rest of the code in the library. That is the only real criteria for good style: it's invisible.
@@ -8514,14 +8517,14 @@ Do read your code after you write it and ask, "Can I make this simpler?" We do u
Before opening a pull request read our [contribution guidelines](https://github.com/zeromq/czmq/blob/master/CONTRIBUTING.md). Thanks!
-
+
### Code Generation
We generate the zsockopt class using [GSL](https://github.com/imatix/gsl), using a code generator script in scripts/sockopts.gsl. We also generate the project files.
-
+
### This Document
This document is originally at README.txt and is built using [gitdown](http://github.com/imatix/gitdown).
-_This documentation was generated from libczmq/README.txt using [Gitdown](https://github.com/zeromq/gitdown)_
+_This documentation was generated from czmq/README.txt using [Gitdown](https://github.com/zeromq/gitdown)_
diff --git a/README.txt b/README.txt
index 6318ea75b..7c3f3718a 100644
--- a/README.txt
+++ b/README.txt
@@ -2,13 +2,16 @@
.sub 0MQ=ØMQ
[![GitHub release](https://img.shields.io/github/release/zeromq/czmq.svg)](https://github.com/zeromq/czmq/releases)
+[![OBS draft](https://img.shields.io/badge/OBS%20master-draft-yellow.svg)](http://software.opensuse.org/download.html?project=home%3Azeromq%3Agit-draft&package=czmq)
+[![OBS stable](https://img.shields.io/badge/OBS%20master-stable-yellow.svg)](http://software.opensuse.org/download.html?project=home%3Azeromq%3Agit-stable&package=czmq)
+
[![license](https://img.shields.io/github/license/zeromq/czmq.svg)](https://github.com/zeromq/czmq/blob/master/LICENSE)
# CZMQ - High-level C binding for 0MQ
-| Linux & MacOSX | Windows | Chat |
-|:--------------:|:--------:|:----:|
-|[![Build Status](https://travis-ci.org/zeromq/czmq.png?branch=master)](https://travis-ci.org/zeromq/czmq)|[![Build status](https://ci.appveyor.com/api/projects/status/q7y22juu3pnl5wq6?svg=true)](https://ci.appveyor.com/project/zeromq/czmq)||
+| Linux & MacOSX | Windows |
+|:--------------:|:--------:|
+|[![Build Status](https://travis-ci.org/zeromq/czmq.png?branch=master)](https://travis-ci.org/zeromq/czmq)|[![Build status](https://ci.appveyor.com/api/projects/status/q7y22juu3pnl5wq6?svg=true)](https://ci.appveyor.com/project/zeromq/czmq)|
## Contents
diff --git a/images/README_1.png b/images/README_1.png
index b48a2fc6b..80664bbef 100644
Binary files a/images/README_1.png and b/images/README_1.png differ