diff options
Diffstat (limited to 'mbbsd')
-rw-r--r-- | mbbsd/cal.c | 4 | ||||
-rw-r--r-- | mbbsd/friend.c | 25 | ||||
-rw-r--r-- | mbbsd/gomo.c | 27 | ||||
-rw-r--r-- | mbbsd/gomo1.c | 15 | ||||
-rw-r--r-- | mbbsd/io.c | 78 | ||||
-rw-r--r-- | mbbsd/mail.c | 2 | ||||
-rw-r--r-- | mbbsd/page.c | 4 | ||||
-rw-r--r-- | mbbsd/stuff.c | 5 |
8 files changed, 65 insertions, 95 deletions
diff --git a/mbbsd/cal.c b/mbbsd/cal.c index 1567f0c2..89383f99 100644 --- a/mbbsd/cal.c +++ b/mbbsd/cal.c @@ -1,4 +1,4 @@ -/* $Id: cal.c,v 1.27 2003/06/22 04:32:38 in2 Exp $ */ +/* $Id$ */ #include "bbs.h" /* 防堵 Multi play */ @@ -8,7 +8,7 @@ count_multiplay(int unmode) register int i, j; register userinfo_t *uentp; - for (i = j = 0; i < USHM_SIZE; i++) { + for (i = j = 0; i < USHM_SIZE; i++) { // XXX linear search uentp = &(SHM->uinfo[i]); if (uentp->uid == usernum) if (uentp->lockmode == unmode) diff --git a/mbbsd/friend.c b/mbbsd/friend.c index 39ef2148..16e36c63 100644 --- a/mbbsd/friend.c +++ b/mbbsd/friend.c @@ -56,22 +56,15 @@ setfriendfile(char *fpath, int type) setbfile(fpath, currboard, friend_file[type]); } -static unsigned int +static int friend_count(char *fname) { FILE *fp; int count = 0; char buf[200]; -#if 0 - if ((fp = fopen(fname, "r"))) - while (fgets(buf, 200, fp)) - count++; -#endif - - /* rocker.011018: 忘記關檔了... */ if ((fp = fopen(fname, "r"))) { - while (fgets(buf, 200, fp)) + while (fgets(buf, sizeof(buf), fp)) count++; fclose(fp); } @@ -218,7 +211,7 @@ friend_delete(char *uident, int type) setfriendfile(fn, type); sprintf(fnnew, "%s-", fn); - if ((fp = fopen(fn, "r")) && (nfp = fopen(fnnew, "w"))) { // XXX fclose(fp) if nfp fail + if ((fp = fopen(fn, "r")) && (nfp = fopen(fnnew, "w"))) { int length = strlen(uident); while (fgets(genbuf, STRLEN, fp)) @@ -235,11 +228,11 @@ friend_delete(char *uident, int type) static void friend_editdesc(char *uident, int type) { - FILE *fp, *nfp; - char fnnew[200], genbuf[200], fn[200]; + FILE *fp=NULL, *nfp=NULL; + char fnnew[200], genbuf[STRLEN], fn[200]; setfriendfile(fn, type); snprintf(fnnew, sizeof(fnnew), "%s-", fn); - if ((fp = fopen(fn, "r")) && (nfp = fopen(fnnew, "w"))) { // XXX fclose(fp) if nfp fail + if ((fp = fopen(fn, "r")) && (nfp = fopen(fnnew, "w"))) { int length = strlen(uident); while (fgets(genbuf, STRLEN, fp)) { @@ -251,10 +244,12 @@ friend_editdesc(char *uident, int type) fprintf(nfp, "%-13s%s\n", uident, buf); } } - fclose(fp); - fclose(nfp); Rename(fnnew, fn); } + if(fp) + fclose(fp); + if(nfp) + fclose(nfp); } /* type == 0 : load all */ diff --git a/mbbsd/gomo.c b/mbbsd/gomo.c index 3a8fcd5f..0b64e709 100644 --- a/mbbsd/gomo.c +++ b/mbbsd/gomo.c @@ -1,4 +1,4 @@ -/* $Id: gomo.c,v 1.12 2003/01/19 16:06:06 kcwu Exp $ */ +/* $Id$ */ #include "bbs.h" static char *chess[] = {"●", "○"}; @@ -113,7 +113,7 @@ gomo_key(int fd, int ch, Horder_t * mv) if (ch >= 'a' && ch <= 'o') { char pbuf[4], vx, vy; - *pbuf = ch; + pbuf[0] = ch; if (fd) add_io(0, 0); oldgetdata(17, 0, "直接指定位置 :", pbuf, sizeof(pbuf), DOECHO); @@ -130,16 +130,20 @@ gomo_key(int fd, int ch, Horder_t * mv) } else { switch (ch) { case KEY_RIGHT: - mv->x = (mv->x == BRDSIZ - 1) ? mv->x : mv->x + 1; + if(mv->x<BRDSIZ-1) + mv->x++; break; case KEY_LEFT: - mv->x = (mv->x == 0) ? 0 : mv->x - 1; + if(mv->x>0) + mv->x--; break; case KEY_UP: - mv->y = (mv->y == BRDSIZ - 1) ? mv->y : mv->y + 1; + if(mv->y<BRDSIZ-1) + mv->y++; break; case KEY_DOWN: - mv->y = (mv->y == 0) ? 0 : mv->y - 1; + if(mv->y>0) + mv->y--; break; case ' ': case '\r': @@ -164,7 +168,7 @@ int gomoku(int fd) { Horder_t mv; - int me, he, win, ch; + int me, he, ch; int hewantpass, iwantpass; userinfo_t *my = currutmp; Horder_t pool[BRDSIZ*BRDSIZ]; @@ -172,7 +176,6 @@ gomoku(int fd) HO_init(pool); me = !(my->turn) + 1; he = my->turn + 1; - win = 1; tick = now + MAX_TIME; lastcount = MAX_TIME; setutmpmode(M_FIVE); @@ -227,7 +230,6 @@ gomoku(int fd) if (lastcount <= -5 && !my->turn) { move(19, 40); outs("對手太久沒下, 你贏了!"); - win = 1; cuser.five_lose--; cuser.five_win++; my->five_win++; @@ -276,7 +278,6 @@ gomoku(int fd) } continue; } else if (hewantpass) { - win = 0; cuser.five_lose--; cuser.five_tie++; my->five_tie++; @@ -292,7 +293,6 @@ gomoku(int fd) if (ch != sizeof(Horder_t)) { lastcount = tick - now; if (lastcount >= 0) { - win = 1; cuser.five_lose--; if (countgomo(pool) >= 10) { cuser.five_win++; @@ -302,14 +302,12 @@ gomoku(int fd) outmsg("對方認輸了!!"); break; } else { - win = 0; outmsg("你超過時間未下子, 輸了!"); my->five_lose++; break; } } else if (mv.x == -2 && mv.y == -2) { if (iwantpass == 1) { - win = 0; cuser.five_lose--; cuser.five_tie++; my->five_tie++; @@ -329,6 +327,7 @@ gomoku(int fd) continue; } if (!my->turn) { + int win; win = chkmv(&mv, he, he == BBLACK); HO_add(&mv); hislasttick = tick; @@ -347,7 +346,6 @@ gomoku(int fd) passwd_update(usernum, &cuser); } else my->five_lose++; - win = -win; break; } my->turn = 1; @@ -361,6 +359,7 @@ gomoku(int fd) continue; if (!my->turn) { + int win; HO_add(&mv); BGOTO(mv.x, mv.y); outs(chess[me - 1]); diff --git a/mbbsd/gomo1.c b/mbbsd/gomo1.c index 260ce88f..49d484a5 100644 --- a/mbbsd/gomo1.c +++ b/mbbsd/gomo1.c @@ -1,4 +1,4 @@ -/* $Id: gomo1.c,v 1.4 2002/07/21 09:26:02 in2 Exp $ */ +/* $Id$ */ #include "bbs.h" #define QCAST int (*)(const void *, const void *) @@ -11,12 +11,15 @@ intrevcmp(const void *a, const void *b) return (*(int *)b - *(int *)a); } +// 以 (x,y) 為起點, 方向 (dx,dy), 傳回以 bit 表示相鄰哪幾格有子 +// 如 10111 表示該方向相鄰 1,2,3 有子, 4 空地 +// 最高位 1 表示對方的子, 或是牆 /* x,y: 0..BRDSIZ-1 ; color: CBLACK,CWHITE ; dx,dy: -1,0,+1 */ static int gomo_getindex(int x, int y, int color, int dx, int dy) { int i, k, n; - for (n = -1, i = 0, k = 1; i < 5; i++, k <<= 1) { + for (n = -1, i = 0, k = 1; i < 5; i++, k*=2) { x += dx; y += dy; @@ -73,9 +76,12 @@ dirchk(int x, int y, int color, int limit, int dx, int dy) if ((style == 3) || (style == 2)) { int i, n = 0, tmp, nx, ny; - n = adv[loc >> 1]; + n = adv[loc / 2]; - ((loc & 1) == 0) ? (n >>= 4) : (n &= 0x0f); + if(loc%2==0) + n/=16; + else + n%=16; ku[x][y] = color; @@ -110,6 +116,7 @@ getstyle(int x, int y, int color, int limit) if (ku[x][y] != BBLANK) return 0x0d; + // (-1,1), (0,1), (1,0), (1,1) for (i = 0; i < 4; i++) dir[i] = dirchk(x, y, color, limit, i ? (i >> 1) : -1, i ? (i & 1) : 1); @@ -324,8 +324,6 @@ igetch() return 0; } -#define min(a, b) (((a) > (b)) ? (b) : (a)) - int oldgetdata(int line, int col, char *prompt, char *buf, int len, int echo) { @@ -338,15 +336,12 @@ oldgetdata(int line, int col, char *prompt, char *buf, int len, int echo) strip_ansi(buf, buf, STRIP_ALL); if (prompt) { - move(line, col); - clrtoeol(); - outs(prompt); - x += strip_ansi(NULL, prompt, 0); } + if (!echo) { len--; clen = 0; @@ -357,32 +352,15 @@ oldgetdata(int line, int col, char *prompt, char *buf, int len, int echo) continue; } clen--; - if (echo) { - ochar(Ctrl('H')); - ochar(' '); - ochar(Ctrl('H')); - } continue; } - //Ptt -#ifdef BIT8 - if (!isprint2(ch)) -#else - if (!isprint(ch)) -#endif - { - if (echo) - bell(); + if (!isprint(ch)) { continue; } if (clen >= len) { - if (echo) - bell(); continue; } buf[clen++] = ch; - if (echo) - ochar(ch); } buf[clen] = '\0'; outc('\n'); @@ -392,31 +370,26 @@ oldgetdata(int line, int col, char *prompt, char *buf, int len, int echo) int currchar = 0; standout(); - for (clen = len--; clen; clen--) + for(i=0; i<len; i++) outc(' '); standend(); - buf[len] = 0; + len--; + buf[len] = '\0'; move(y, x); edit_outs(buf); clen = currchar = strlen(buf); while (move(y, x + currchar), (ch = igetkey()) != '\r') { switch (ch) { - case KEY_DOWN: - case Ctrl('N'): - buf[clen] = '\0'; /* Ptt */ - strncpy(lastcmd[cmdpos], buf, min(clen, 79)); - cmdpos += MAXLASTCMD - 2; - case Ctrl('P'): - case KEY_UP: - if (ch == KEY_UP || ch == Ctrl('P')) { - buf[clen] = '\0'; /* Ptt */ - strncpy(lastcmd[cmdpos], buf, min(clen, 79)); - } - cmdpos++; + case KEY_DOWN: case Ctrl('N'): + case KEY_UP: case Ctrl('P'): + strlcpy(lastcmd[cmdpos], buf, sizeof(lastcmd[0])); + if (ch == KEY_UP || ch == Ctrl('P')) + cmdpos++; + else + cmdpos += MAXLASTCMD - 1; cmdpos %= MAXLASTCMD; - strncpy(buf, lastcmd[cmdpos], min(len, 79)); - buf[len] = 0; + strlcpy(buf, lastcmd[cmdpos], len+1); move(y, x); /* clrtoeof */ for (i = 0; i <= clen; i++) @@ -449,7 +422,7 @@ oldgetdata(int line, int col, char *prompt, char *buf, int len, int echo) case Ctrl('Y'): currchar = 0; case Ctrl('K'): - buf[currchar] = 0; + buf[currchar] = '\0'; move(y, x + currchar); for (i = currchar; i < clen; i++) outc(' '); @@ -489,20 +462,18 @@ oldgetdata(int line, int col, char *prompt, char *buf, int len, int echo) } /* end case */ } /* end while */ - if (clen > 1) - for (cmdpos = MAXLASTCMD - 1; cmdpos; cmdpos--) { - strlcpy(lastcmd[cmdpos], lastcmd[cmdpos - 1], - sizeof(lastcmd[cmdpos])); - strncpy(lastcmd[0], buf, len); - } - if (echo) - outc('\n'); + if (clen > 1) { + strlcpy(lastcmd[0], buf, sizeof(lastcmd[0])); + memmove(lastcmd+1, lastcmd, (MAXLASTCMD-1)*sizeof(lastcmd[0])); + } + outc('\n'); refresh(); } - if ((echo == LCECHO) && ((ch = buf[0]) >= 'A') && (ch <= 'Z')) - buf[0] = ch | 32; + if ((echo == LCECHO) && isupper(buf[0])) + buf[0] = tolower(buf[0]); #ifdef SUPPORT_GB if (echo == DOECHO && current_font_type == TYPE_GB) { + // FIXME check buffer length strcpy(buf, hc_convert_str(buf, HC_GBtoBIG, HC_DO_SINGLE)); } #endif @@ -528,9 +499,8 @@ getans(char *prompt) int getdata_str(int line, int col, char *prompt, char *buf, int len, int echo, char *defaultstr) { - strncpy(buf, defaultstr, len); + strlcpy(buf, defaultstr, len); - buf[len - 1] = 0; return oldgetdata(line, col, prompt, buf, len, echo); } @@ -553,7 +523,7 @@ rget(int x, char *prompt) ch = igetch(); if (ch >= 'A' && ch <= 'Z') - ch |= 32; + ch = tolower(ch); return ch; } diff --git a/mbbsd/mail.c b/mbbsd/mail.c index bca23743..b45bde0c 100644 --- a/mbbsd/mail.c +++ b/mbbsd/mail.c @@ -1,6 +1,6 @@ /* $Id$ */ #include "bbs.h" -char currmaildir[32]; +static char currmaildir[32]; static char msg_cc[] = "\033[32m[群組名單]\033[m\n"; static char listfile[] = "list.0"; static int mailkeep = 0, mailsum = 0; diff --git a/mbbsd/page.c b/mbbsd/page.c index e1bcd052..9583f4c9 100644 --- a/mbbsd/page.c +++ b/mbbsd/page.c @@ -1,10 +1,10 @@ -/* $Id: page.c,v 1.11 2003/02/11 06:03:31 victor Exp $ */ +/* $Id$ */ #include "bbs.h" #define hpressanykey(a) {move(22, 0); prints(a); pressanykey();} #define TITLE "\033[1;37;45m 火車查詢系統 \033[1;44;33m原作者:Heat\033[m" -void +static void print_station(const char *addr[6][100], int path, int *line, int *num) { int i; diff --git a/mbbsd/stuff.c b/mbbsd/stuff.c index 80428954..9f13b2ef 100644 --- a/mbbsd/stuff.c +++ b/mbbsd/stuff.c @@ -1,4 +1,4 @@ -/* $Id: stuff.c,v 1.13 2003/07/20 00:55:34 in2 Exp $ */ +/* $Id$ */ #include "bbs.h" /* ----------------------------------------------------- */ @@ -158,8 +158,7 @@ trim(char *buf) int isprint2(char ch) { - return ((ch & 0x80) ? 1 : isprint(ch)); - //return 1; + return ((ch & 0x80) || isprint(ch)); } int |