# HG changeset patch # User Matti Hamalainen # Date 1226440669 -7200 # Node ID e763ef5cfd53ea3b069f840ccc3c31f0c70ae35e # Parent 6a3a917303e408af60d0855fe2865f516f214d68 Move more functions to libnnchat. diff -r 6a3a917303e4 -r e763ef5cfd53 libnnchat.c --- a/libnnchat.c Tue Nov 11 22:33:35 2008 +0200 +++ b/libnnchat.c Tue Nov 11 23:57:49 2008 +0200 @@ -336,3 +336,145 @@ return sendToSocket(sock, tmpBuf2, strlen(tmpBuf2) + 1); } + +ringbuf_t * newRingBuf(const size_t size) +{ + ringbuf_t *res = th_calloc(1, sizeof(ringbuf_t)); + + res->data = (char **) th_malloc(size * sizeof(char *)); + res->size = size; + res->n = 0; + + return res; +} + + +void freeRingBuf(ringbuf_t *buf) +{ + size_t i; + + for (i = 0; i < buf->n; i++) + th_free(buf->data[i]); + + th_free(buf->data); + th_free(buf); +} + + +void addRingBuf(ringbuf_t *buf, const char *str) +{ + if (buf->n < buf->size) { + buf->data[buf->n] = strdup(str); + buf->n++; + } else { + th_free(buf->data[0]); + memmove(&(buf->data[0]), &(buf->data[1]), buf->size - 1); + buf->data[buf->size - 1] = strdup(str); + } +} + + +int writeBuf(editbuf_t *buf, ssize_t pos, int ch) +{ + /* Check arguments */ + if (buf->len+1 >= buf->size) return -3; + + if (pos < 0) + return -1; + else if (pos >= buf->len) { + buf->data[buf->len++] = ch; + } else { + buf->data[pos] = ch; + } + return 0; +} + + +int insertBuf(editbuf_t *buf, ssize_t pos, int ch) +{ + /* Check arguments */ + if (buf->len+1 >= buf->size) return -3; + + if (pos < 0) + return -1; + else if (pos >= buf->len) { + buf->data[buf->len] = ch; + } else { + memmove(&(buf->data[pos+1]), &(buf->data[pos]), buf->len - pos + 1); + buf->data[pos] = ch; + } + buf->len++; + return 0; +} + + +int deleteBuf(editbuf_t *buf, ssize_t pos) +{ + /* Check arguments */ + if (pos < 0) + return -1; + else if (pos < buf->len) { + memmove(&(buf->data[pos]), &(buf->data[pos+1]), buf->len - pos); + buf->len--; + return 0; + } else + return -2; +} + + +void clearBuf(editbuf_t *buf) +{ + buf->len = 0; + buf->pos = 0; +} + + +editbuf_t * newBuf(ssize_t n) +{ + editbuf_t *res = th_calloc(1, sizeof(editbuf_t)); + + res->data = (char *) th_malloc(n); + res->size = n; + + return res; +} + + +void freeBuf(editbuf_t *buf) +{ + if (buf) { + th_free(buf->data); + th_free(buf); + } +} + + +editbuf_t * copyBuf(editbuf_t *src) +{ + editbuf_t *res; + + assert(src != NULL); + + if (src == NULL) return NULL; + + if ((res = newBuf(src->size)) == NULL) + return NULL; + + memcpy(res->data, src->data, src->size); + res->pos = res->len = src->len; + + return res; +} + + +void setBufPos(editbuf_t *buf, ssize_t pos) +{ + /* Check arguments */ + if (pos < 0) + buf->pos = 0; + else if (pos >= buf->len) + buf->pos = buf->len; + else + buf->pos = pos; +} + diff -r 6a3a917303e4 -r e763ef5cfd53 libnnchat.h --- a/libnnchat.h Tue Nov 11 22:33:35 2008 +0200 +++ b/libnnchat.h Tue Nov 11 23:57:49 2008 +0200 @@ -24,17 +24,42 @@ #define SET_BUFSIZE (4096) #define SET_ALLOC_SIZE (128) +typedef struct { + char **data; + size_t n, size; +} ringbuf_t; + +typedef struct { + ssize_t pos, len, size; + char *data; +} editbuf_t; + + int openConnection(struct in_addr *addr, const int port); void closeConnection(const int sock); BOOL sendToSocket(const int sock, char *buf, const size_t bufLen); BOOL sendUserMsg(const int sock, const char *user, const char *fmt, ...); -char *encodeStr1(const char *str); -char *decodeStr1(const char *str); -char *encodeStr2(const char *str); -char *decodeStr2(const char *str); -char *stripXMLTags(const char *str); +char * encodeStr1(const char *str); +char * decodeStr1(const char *str); +char * encodeStr2(const char *str); +char * decodeStr2(const char *str); +char * stripXMLTags(const char *str); + + +ringbuf_t * newRingBuf(const size_t size); +void freeRingBuf(ringbuf_t *buf); +void addRingBuf(ringbuf_t *buf, const char *str); + +int writeBuf(editbuf_t *buf, ssize_t pos, int ch); +int insertBuf(editbuf_t *buf, ssize_t pos, int ch); +int deleteBuf(editbuf_t *buf, ssize_t pos); +void clearBuf(editbuf_t *buf); +editbuf_t * newBuf(ssize_t n); +void freeBuf(editbuf_t *buf); +editbuf_t * copyBuf(editbuf_t *src); +void setBufPos(editbuf_t *buf, ssize_t pos); #endif diff -r 6a3a917303e4 -r e763ef5cfd53 nnchat.c --- a/nnchat.c Tue Nov 11 22:33:35 2008 +0200 +++ b/nnchat.c Tue Nov 11 23:57:49 2008 +0200 @@ -148,152 +148,6 @@ } -typedef struct { - char **data; - size_t n, size; -} ringbuf_t; - - -ringbuf_t * newRingBuf(const size_t size) -{ - ringbuf_t *res = th_calloc(1, sizeof(ringbuf_t)); - - res->data = (char **) th_malloc(size * sizeof(char *)); - res->size = size; - res->n = 0; - - return res; -} - - -void freeRingBuf(ringbuf_t *buf) -{ - size_t i; - - for (i = 0; i < buf->n; i++) - th_free(buf->data[i]); - - th_free(buf->data); - th_free(buf); -} - - -void addRingBuf(ringbuf_t *buf, const char *str) -{ - if (buf->n < buf->size) { - buf->data[buf->n] = strdup(str); - buf->n++; - } else { - th_free(buf->data[0]); - memmove(&(buf->data[0]), &(buf->data[1]), buf->size - 1); - buf->data[buf->size - 1] = strdup(str); - } -} - - -typedef struct { - ssize_t pos, len, size; - char *data; -} editbuf_t; - - -int writeBuf(editbuf_t *buf, ssize_t pos, int ch) -{ - /* Check arguments */ - if (buf->len+1 >= buf->size) return -3; - - if (pos < 0) - return -1; - else if (pos >= buf->len) { - buf->data[buf->len++] = ch; - } else { - buf->data[pos] = ch; - } - return 0; -} - -int insertBuf(editbuf_t *buf, ssize_t pos, int ch) -{ - /* Check arguments */ - if (buf->len+1 >= buf->size) return -3; - - if (pos < 0) - return -1; - else if (pos >= buf->len) { - buf->data[buf->len] = ch; - } else { - memmove(&(buf->data[pos+1]), &(buf->data[pos]), buf->len - pos + 1); - buf->data[pos] = ch; - } - buf->len++; - return 0; -} - -int deleteBuf(editbuf_t *buf, ssize_t pos) -{ - /* Check arguments */ - if (pos < 0) - return -1; - else if (pos < buf->len) { - memmove(&(buf->data[pos]), &(buf->data[pos+1]), buf->len - pos); - buf->len--; - return 0; - } else - return -2; -} - -void clearBuf(editbuf_t *buf) -{ - buf->len = 0; - buf->pos = 0; -} - -editbuf_t * newBuf(ssize_t n) -{ - editbuf_t *res = th_calloc(1, sizeof(editbuf_t)); - - res->data = (char *) th_malloc(n); - res->size = n; - - return res; -} - -void freeBuf(editbuf_t *buf) -{ - if (buf) { - th_free(buf->data); - th_free(buf); - } -} - -editbuf_t * copyBuf(editbuf_t *src) -{ - editbuf_t *res; - - assert(src != NULL); - - if (src == NULL) return NULL; - - if ((res = newBuf(src->size)) == NULL) - return NULL; - - memcpy(res->data, src->data, src->size); - res->pos = res->len = src->len; - - return res; -} - -void setBufPos(editbuf_t *buf, ssize_t pos) -{ - /* Check arguments */ - if (pos < 0) - buf->pos = 0; - else if (pos >= buf->len) - buf->pos = buf->len; - else - buf->pos = pos; -} - void updateStatus(BOOL insertMode) { char tmpStr[128] = "";