(play_list): player->combuf[] is user text and must be printed as

such.
(ufindbreak, ufindpfx): Rename, move to pr.c, external linkage.
This commit is contained in:
Markus Armbruster 2005-06-13 08:42:27 +00:00
parent 24672e351b
commit ddfd5c1699
4 changed files with 41 additions and 36 deletions

View file

@ -621,6 +621,7 @@ extern void PRdate(natid cn);
extern void pr_beep(void); extern void pr_beep(void);
extern void mpr(int, s_char *, ...) ATTRIBUTE((format (printf, 2, 3))); extern void mpr(int, s_char *, ...) ATTRIBUTE((format (printf, 2, 3)));
extern void prtoascii(char *buf /* buf is message text */); extern void prtoascii(char *buf /* buf is message text */);
extern int ufindpfx(char *, int);
/* radmap.c */ /* radmap.c */
extern int deltx(struct range *, coord); extern int deltx(struct range *, coord);

View file

@ -39,9 +39,6 @@
#include "file.h" #include "file.h"
#include "commands.h" #include "commands.h"
static int ufindbreak(char *message /* message is message text */,
int num_chars);
int int
flash(void) flash(void)
{ {
@ -143,7 +140,7 @@ sendmessage(struct natstr *us, struct natstr *to, char *message
char c; /* c is message text */ char c; /* c is message text */
int pos; int pos;
pos = ufindbreak(message, 60); pos = ufindpfx(message, 60);
c = message[pos]; c = message[pos];
if (c) if (c)
message[pos] = '\0'; message[pos] = '\0';
@ -206,22 +203,3 @@ sendmessage(struct natstr *us, struct natstr *to, char *message
} }
return 0; return 0;
} }
/*
* Return byte-index of the N-th UTF-8 character in UTF-8 string S.
* If S doesn't have that many characters, return its length instead.
*/
int
ufindbreak(char *s /* s is message text */, int n)
{
int i = 0;
while (n && s[i])
{
if ((s[i++] & 0xc0) == 0xc0)
while ((s[i] & 0xc0) == 0x80)
i++;
--n;
}
return i;
}

View file

@ -70,9 +70,10 @@ static int
play_list(struct player *joe) play_list(struct player *joe)
{ {
time_t now; time_t now;
s_char *com; char com[1 + 6*20 + 2]; /* user text */
struct natstr *natp; struct natstr *natp;
struct natstr *us; struct natstr *us;
int n;
if (joe->cnum >= MAXNOC || !(natp = getnatp(joe->cnum))) if (joe->cnum >= MAXNOC || !(natp = getnatp(joe->cnum)))
return 0; return 0;
@ -98,22 +99,28 @@ play_list(struct player *joe)
} }
time(&now); time(&now);
if (player->god) { pr("%-9.9s %3d %32.32s %2d:%02d %4lds",
if (!joe->combuf || !*joe->combuf)
com = "NULL";
else
com = joe->combuf;
} else
com = "";
pr("%-9.9s %3d %32.32s %2d:%02d %4lds %-20.20s\n",
cname(joe->cnum), cname(joe->cnum),
joe->cnum, joe->cnum,
player->god || joe->cnum == player->cnum ? praddr(joe) : "", player->god || joe->cnum == player->cnum ? praddr(joe) : "",
natp->nat_minused / 60, natp->nat_minused / 60,
natp->nat_minused % 60, natp->nat_minused % 60,
(long)(now - joe->curup), (long)(now - joe->curup));
com);
if (player->god) {
if (!joe->combuf || !*joe->combuf)
pr(" NULL\n");
else {
n = ufindpfx(joe->combuf, 20);
if (CANT_HAPPEN(n + 3u > sizeof(com))) {
pr(" BUGGY\n");
return 1;
}
sprintf(com, " %.*s\n", n, joe->combuf);
uprnf(com);
}
} else
pr("\n");
return 1; return 1;
} }

View file

@ -441,3 +441,22 @@ prtoascii(char *buf /* buf is message text */)
pbuf--; pbuf--;
} }
} }
/*
* Return byte-index of the N-th UTF-8 character in UTF-8 string S.
* If S doesn't have that many characters, return its length instead.
*/
int
ufindpfx(char *s, int n)
{
int i = 0;
while (n && s[i])
{
if ((s[i++] & 0xc0) == 0xc0)
while ((s[i] & 0xc0) == 0x80)
i++;
--n;
}
return i;
}