tWork with characters, not bytes - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 57dbe7518a6f3246df05170bbb362cbf8263a6dc
 (DIR) parent 4de78172baa253ad9297d26834c41ff628204bc1
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Wed,  9 Dec 2020 19:22:23 -0800
       
       Work with characters, not bytes
       
       When outputting fixed width strings, use the width
       in characters, not bytes. Closes #54.
       
       Diffstat:
         M src/curses_client/curses_client.c   |      24 +++++++++++++++---------
       
       1 file changed, 15 insertions(+), 9 deletions(-)
       ---
 (DIR) diff --git a/src/curses_client/curses_client.c b/src/curses_client/curses_client.c
       t@@ -292,22 +292,28 @@ static void mvaddcentstr(const int row, const gchar *str)
        
        /*
         * Displays a string at the given coordinates and with the given
       - * attributes. If the string is longer than "wid", it is truncated, and
       - * if shorter, it is padded with spaces.
       + * attributes. If the string is longer than "wid" characters, it is truncated,
       + * and if shorter, it is padded with spaces.
         */
        static void mvaddfixwidstr(const int row, const int col, const int wid,
                                   const gchar *str, const int attrs)
        {
       -  int strwid = str ? strlen(str) : 0;
       -  int strind;
       +  int strwidch = str ? strcharlen(str) : 0;
       +  int i, strwidbyte;
        
       -  strwid = MIN(strwid, wid);
       +  strwidch = MIN(strwidch, wid);
       +  if (LocaleIsUTF8) {
       +    strwidbyte = g_utf8_offset_to_pointer(str, strwidch) - str;
       +  } else {
       +    strwidbyte = strwidch;
       +  }
        
       -  for (strind = 0; strind < strwid; ++strind) {
       -    mvaddch(row, col + strind, (guchar)str[strind] | attrs);
       +  move(row, col);
       +  for (i = 0; i < strwidbyte; ++i) {
       +    addch((guchar)str[i] | attrs);
          }
       -  for (strind = strwid; strind < wid; ++strind) {
       -    mvaddch(row, col + strind, (guchar)' ' | attrs);
       +  for (i = strwidch; i < wid; ++i) {
       +    addch((guchar)' ' | attrs);
          }
        }