tMake the display of fight messages occur in the new user interface area; resize this area and the chat messages window when the curses window is resized. - 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 cfcd93e53df69e6bb0806d59cf6c404a347bfbbb
 (DIR) parent 574051390dc6bfb24f9cf35c036d069c357b3a3c
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Sun, 26 Jan 2003 19:39:42 +0000
       
       Make the display of fight messages occur in the new user interface area;
       resize this area and the chat messages window when the curses window is resized.
       
       
       Diffstat:
         M src/curses_client/curses_client.c   |     112 ++++++++++++++++++-------------
       
       1 file changed, 66 insertions(+), 46 deletions(-)
       ---
 (DIR) diff --git a/src/curses_client/curses_client.c b/src/curses_client/curses_client.c
       t@@ -1,5 +1,4 @@
        /************************************************************************
       - *
         * curses_client.c  dopewars client using the (n)curses console library *
         * Copyright (C)  1998-2003  Ben Webb                                   *
         *                Email: ben@bellatrix.pcl.ox.ac.uk                     *
       t@@ -159,17 +158,30 @@ static int get_msg_area_top(void)
          return 10;
        }
        
       +static int get_separator_line(void)
       +{
       +  if (!Network) {
       +    return 14;
       +  } else if (Depth <= 20) {
       +    return 11;
       +  } else if (Depth <= 24) {
       +    return Depth - 9;
       +  } else {
       +    return 11 + (Depth - 20) * 2 / 3;
       +  }
       +}
       +
        /*
         * Returns the bottommost row of the message area
         */
        static int get_msg_area_bottom(void)
        {
       -  return 14;
       +  return get_separator_line() - 1;
        }
        
        static int get_ui_area_top(void)
        {
       -  return 16;
       +  return get_separator_line() + (Network ? 1 : 2);
        }
        
        static int get_ui_area_bottom(void)
       t@@ -436,7 +448,7 @@ static gboolean SelectServerFromMetaServer(Player *Play, GString *errstr)
            g_string_sprintf(text, _("Comment: %s"), ThisServer->Comment);
            mvaddstr(top + 4, 1, text->str);
            attrset(PromptAttr);
       -    mvaddstr(get_prompt_line() + 1, 1,
       +    mvaddstr(top + 5, 1,
                     _("N>ext server; P>revious server; S>elect this server... "));
        
            /* The three keys that are valid responses to the previous question -
       t@@ -1696,48 +1708,54 @@ void nice_wait()
         */
        void DisplayFightMessage(Player *Play, char *text)
        {
       -  static char Messages[5][79];
       -  static int x, y;
       +  static GList *msgs = NULL;
       +  static int num_msgs = 0;
          gchar *textpt;
          gchar *AttackName, *DefendName, *BitchName;
       -  gint i, DefendHealth, DefendBitches, BitchesKilled, ArmPercent;
       +  gint y, DefendHealth, DefendBitches, BitchesKilled, ArmPercent;
          gboolean Loot;
       +  int top = get_ui_area_top(), bottom = get_ui_area_bottom() - 4;
        
          if (text == NULL) {
       -    x = 0;
       -    y = 15;
       -    for (i = 0; i < 5; i++)
       -      Messages[i][0] = '\0';
       -  } else if (!text[0]) {
       +    GList *pt;
       +    for (pt = msgs; pt; pt = g_list_next(pt)) {
       +      g_free(pt->data);
       +    }
       +    g_list_free(msgs);
       +    msgs = NULL;
       +    num_msgs = 0;
       +  } else {
       +    GList *pt;
       +    if (text[0]) {
       +      if (HaveAbility(Play, A_NEWFIGHT)) {
       +        ReceiveFightMessage(text, &AttackName, &DefendName, &DefendHealth,
       +                            &DefendBitches, &BitchName, &BitchesKilled,
       +                            &ArmPercent, &fp, &RunHere, &Loot, &CanFire,
       +                            &textpt);
       +      } else {
       +        textpt = text;
       +        if (Play->Flags & FIGHTING)
       +          fp = F_MSG;
       +        else
       +          fp = F_LASTLEAVE;
       +        CanFire = (Play->Flags & CANSHOOT);
       +        RunHere = FALSE;
       +      }
       +      msgs = g_list_append(msgs, g_strdup(textpt));
       +      num_msgs++;
       +    }
            attrset(TextAttr);
            clear_bottom();
       -    for (i = 16; i <= 20; i++)
       -      mvaddstr(i, 1, Messages[i - 16]);
       -  } else {
       -    if (HaveAbility(Play, A_NEWFIGHT)) {
       -      ReceiveFightMessage(text, &AttackName, &DefendName, &DefendHealth,
       -                          &DefendBitches, &BitchName, &BitchesKilled,
       -                          &ArmPercent, &fp, &RunHere, &Loot, &CanFire,
       -                          &textpt);
       -    } else {
       -      textpt = text;
       -      if (Play->Flags & FIGHTING)
       -        fp = F_MSG;
       -      else
       -        fp = F_LASTLEAVE;
       -      CanFire = (Play->Flags & CANSHOOT);
       -      RunHere = FALSE;
       +    pt = g_list_last(msgs);
       +    y = bottom;
       +    while (pt && g_list_previous(pt) && y > top) {
       +      y--;
       +      pt = g_list_previous(pt);
            }
       -    while (textpt[0]) {
       -      if (y < 20)
       -        y++;
       -      else
       -        for (i = 0; i < 4; i++)
       -          strcpy(Messages[i], Messages[i + 1]);
       -
       -      strncpy(Messages[y - 16], textpt, 78);
       -      Messages[y - 16][78] = '\0';
       -      textpt += MIN(strlen(textpt), 78);
       +    y = top;
       +    while (pt) {
       +      mvaddstr(y++, 1, pt->data);
       +      pt = g_list_next(pt);
            }
          }
        }
       t@@ -1780,7 +1798,7 @@ void display_message(const char *buf)
          depth = get_msg_area_bottom() - top + 1;
          wid = Width - 4;
        
       -  if (wid < 0 || depth < 0) {
       +  if (wid < 0 || depth < 0 || !Network) {
            return;
          }
        
       t@@ -1807,6 +1825,7 @@ void display_message(const char *buf)
              if (num_msgs == MaxMessages && msgs) {
                g_free(msgs->data);
                msgs = g_list_remove(msgs, msgs->data);
       +        --num_msgs;
              }
              msgs = g_list_append(msgs, g_strdup(buf));
              ++num_msgs;
       t@@ -1882,7 +1901,7 @@ void print_location(char *text)
          move(0, Width / 2 - 9);
          for (i = 0; i < 18; i++)
            addch(' ');
       -  mvaddstr(0, (Width - strlen(text)) / 2, text);
       +  mvaddcentstr(0, text);
          attrset(TextAttr);
        }
        
       t@@ -1904,7 +1923,7 @@ void print_status(Player *Play, gboolean DispDrug)
          mvaddstr(0, 3, text->str);
        
          attrset(StatsAttr);
       -  for (i = 2; i <= 14; i++) {
       +  for (i = get_separator_line() - 1; i >= 2; i--) {
            mvaddch(i, 1, ACS_VLINE);
            mvaddch(i, Width - 2, ACS_VLINE);
          }
       t@@ -1923,11 +1942,11 @@ void print_status(Player *Play, gboolean DispDrug)
              addch(' ');
          }
          if (!Network) {
       -    mvaddch(14, 1, ACS_LLCORNER);
       +    mvaddch(get_separator_line(), 1, ACS_LLCORNER);
            for (i = 0; i < Width - 4; i++)
              addch(ACS_HLINE);
            addch(ACS_LRCORNER);
       -    mvaddch(14, Width / 2, ACS_BTEE);
       +    mvaddch(get_separator_line(), Width / 2, ACS_BTEE);
          } else {
            mvaddch(9, 1, ACS_LTEE);
            for (i = 0; i < Width - 4; i++)
       t@@ -1938,9 +1957,10 @@ void print_status(Player *Play, gboolean DispDrug)
            /* Title of the "Messages" window in the curses client */
            mvaddstr(9, 9, _("Messages (-/+ scrolls up/down)"));
        
       -    mvaddch(15, 1, ACS_LLCORNER);
       -    for (i = 0; i < Width - 4; i++)
       +    mvaddch(get_separator_line(), 1, ACS_LLCORNER);
       +    for (i = 0; i < Width - 4; i++) {
              addch(ACS_HLINE);
       +    }
            addch(ACS_LRCORNER);
          }
        
       t@@ -2038,7 +2058,7 @@ void print_status(Player *Play, gboolean DispDrug)
          }
          attrset(TextAttr);
          if (!Network)
       -    clear_line(15);
       +    clear_line(get_separator_line() + 1);
          refresh();
          g_string_free(text, TRUE);
        }