# HG changeset patch # User Matti Hamalainen # Date 1338035594 -10800 # Node ID d48327519b17224ef5dc1c705110838cc2564c3e # Parent ad7ddce4787809e26f557a8085cbc21cdee48a34 Implement /who / /names functionality. diff -r ad7ddce47878 -r d48327519b17 main.c --- a/main.c Sat May 26 15:30:46 2012 +0300 +++ b/main.c Sat May 26 15:33:14 2012 +0300 @@ -826,12 +826,61 @@ } -int nncmd_names(nn_conn_t *conn, char *buf) +#define NAME_NUM_PER_LINE 3 +#define NAME_ENTRY_SIZE 64 +#define NAME_ENTRY_WIDTH 22 + +typedef struct +{ + char buf[(NAME_NUM_PER_LINE * NAME_ENTRY_SIZE) + 16]; + size_t offs; + int i, total; +} nncmd_namedata_t; + + +static int nncmd_names_do(const nn_user_t *user, void *data) { + nncmd_namedata_t *d = data; + char name[NAME_ENTRY_SIZE]; + size_t len; + + snprintf(name, sizeof(name), "[½3½%-20s½0½] ", user->name); + + d->total++; + if (d->i >= NAME_NUM_PER_LINE) + { + printMsgQ(currWin, "%s\n", d->buf); + d->i = 0; + d->offs = 0; + } + + len = strlen(name); + memcpy(d->buf + d->offs, name, len + 1); + d->offs += len; + d->i++; + + return 0; +} + + +int nncmd_names(nn_conn_t *conn, char *arg) +{ + nncmd_namedata_t data; (void) conn; - (void) buf; - - printMsgQ(currWin, "Not implemented yet.\n"); + (void) arg; + + printMsgQ(currWin, "Users:\n"); + data.i = data.total = 0; + data.offs = 0; + + nn_userhash_foreach(nnUsers, nncmd_names_do, &data); + + if (data.i > 0) + { + printMsgQ(currWin, "%s\n", data.buf); + } + + printMsgQ(currWin, "%d users total.\n", data.total); return 0; }