作者TKyo.bbs@cpu.tfcis.org (暗黑貴公子) 看板: plan
標題[新增] window.c pans() pmsg() 支援 ANSI 字元碼
時間動力核心 (2005/04/11 Mon 18:00:23) Updated: 2005/04/11
/* 本程式碼需先更新過 windows.c pans/pmsg 置中程式碼 */
: maple/window.c
#include "bbs.h"
/* 新增函式 : 剔除 ANSI 字元碼及傳回真正字串長度 */
static int
chk_ansi(char *str)
{
int i = 0, ch;
int is_ansi = 0;
while (ch = *str)
{
if (is_ansi)
{
if (ch == 'm')
is_ansi = 0;
}
else
{
if (ch == KEY_ESC)
is_ansi = 1;
else
i++;
}
str++;
}
return i;
}
: maple/window.c : pans()
int /* 傳回小寫字母或數字 */
pans(x, y, title, desc)
int x, y;
char *title;
char *desc[];
{
- int cur, old_cur, max, ch;
+ int cur, old_cur, max, ch, i; /* 新增變數 i, 加速用 */
char hotkey;
/* 找出 title 及 desc 中最長的長度 */
char buf[512]; /* tsaikd.041005 title 可能有好幾行 */
strcpy(buf, title);
- desc_maxlen = strlen(strtok(buf, "\n"));
+ desc_maxlen = chk_ansi(strtok(buf, "\n"));
char *tmp;
- while ( (tmp = strtok(NULL, "\n")) !=NULL )
- desc_maxlen = (desc_maxlen > strlen(tmp)) ? desc_maxlen : strlen(tmp);
+ while ((tmp = strtok(NULL, "\n")) != NULL)
+ desc_maxlen = ((i = chk_ansi(tmp)) > desc_maxlen) ? i : desc_maxlen;
- for( ch=1 ; desc[ch] ; ch++ )
- desc_maxlen = (desc_maxlen > strlen(desc[ch])) ?
-\ desc_maxlen : strlen(desc[ch]);
+ for (ch = 1; desc[ch]; ch++)
+ desc_maxlen = ((i = chk_ansi(desc[ch])) > desc_maxlen) ? i : desc_maxlen;
.
.
.
}
: maple/window.c : draw_item()
{
.
.
.
- sprintf(buf, " │%s%c %c%c%c%-25s \033[m│ ",
+ sprintf(buf, " │%s%c %c%c%c%-s%*c\033[m│ ",
.
.
.
- (hotkey == *desc) ? ']' : ')', desc + 1);
+ (hotkey == *desc) ? ']' : ')', desc + 1,
+ (desc_maxlen - chk_ansi(desc + 1)), ' ');
.
.
.
}
: maple/window.c : draw_menu()
{
.
.
.
/* tsaikd.041005 借用 meet */
- meet = strlen(ptitle[i]) + (strlen(ptitle[i]) % 2);
+ meet = chk_ansi(ptitle[i]) + (chk_ansi(ptitle[i]) % 2);
.
.
.
}
: maple/window.c : pmsg()
- int len, x, y, i;
+ int len, x, y, i, j; /* 新增變數 j, 加速用 */
- len = strlen(strtok(buf, "\n"));
- for( i=1 ; (pbuf = strtok(NULL, "\n")) != NULL ; i++ )
- len = len<strlen(pbuf) ? strlen(pbuf) : len;
+ len = chk_ansi(strtok(buf, "\n"));
+ for (i = 1; (pbuf = strtok(NULL, "\n")); i++)
+ len = ((j = chk_ansi(pbuf)) > len) ? j : len;
.
.
.
}
--
◤◥ Origin: Maple-itoc˙動力核心 cpu.tfcis.org
◣◢ Author: TKyo 從 cszone.twbbs.org 發表