summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorscw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-05-15 16:05:59 +0800
committerscw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-05-15 16:05:59 +0800
commita8b87ec695abd673d76c148985b0f255d7083ae5 (patch)
treed545f3d23782018e87b599f7c41a4d14adadcfc9
parentdc0a8eb34da824f63ad76564999deddcb2c74342 (diff)
downloadpttbbs-a8b87ec695abd673d76c148985b0f255d7083ae5.tar
pttbbs-a8b87ec695abd673d76c148985b0f255d7083ae5.tar.gz
pttbbs-a8b87ec695abd673d76c148985b0f255d7083ae5.tar.bz2
pttbbs-a8b87ec695abd673d76c148985b0f255d7083ae5.tar.lz
pttbbs-a8b87ec695abd673d76c148985b0f255d7083ae5.tar.xz
pttbbs-a8b87ec695abd673d76c148985b0f255d7083ae5.tar.zst
pttbbs-a8b87ec695abd673d76c148985b0f255d7083ae5.zip
Work on linuxx.
git-svn-id: http://opensvn.csie.org/pttbbs/branches/scw.angel@1983 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r--mbbsd/brc.c11
-rw-r--r--mbbsd/io.c9
-rw-r--r--mbbsd/talk.c35
3 files changed, 48 insertions, 7 deletions
diff --git a/mbbsd/brc.c b/mbbsd/brc.c
index ede94386..b41e27a7 100644
--- a/mbbsd/brc.c
+++ b/mbbsd/brc.c
@@ -9,7 +9,7 @@
#define BRC_BLOCKSIZE 1024
-#if MAX_BOARD > 32767 || BRC_MAXSIZE > 32767
+#if MAX_BOARD > 65535 || BRC_MAXSIZE > 65535
#error Max number of boards or BRC_MAXSIZE cannot fit in unsighed short, \
please rewrite brc.c
#endif
@@ -138,7 +138,7 @@ brc_enlarge_buf()
return 0;
memcpy(buffer, brc_buf, brc_alloc);
free(brc_buf);
- brc_alloc += BRC_BLOCKSIZE;
+ do brc_alloc += BRC_BLOCKSIZE; while(brc_size > brc_alloc);
brc_buf = (char*)malloc(brc_alloc);
memcpy(brc_buf, buffer, brc_alloc - BRC_BLOCKSIZE);
return 1;
@@ -172,8 +172,9 @@ brc_insert_record(brcbid_t bid, brcnbrd_t num, time_t* list)
brc_size -= tnum;
/* put on the beginning */
- if (num && (new_size =
- sizeof(brcbid_t) + sizeof(brcnbrd_t) + num * sizeof(time_t))){
+ if (num){
+ new_size = sizeof(brcbid_t) + sizeof(brcnbrd_t)
+ + num * sizeof(time_t);
brc_size += new_size;
if (brc_size > brc_alloc && !brc_enlarge_buf())
brc_size = BRC_MAXSIZE;
@@ -330,6 +331,8 @@ brc_initial_board(const char *boardname)
brc_update(); /* write back first */
currbid = getbnum(boardname);
+ if( currbid == 0 )
+ currbid = getbnum(DEFAULT_BOARD);
currboard = bcache[currbid - 1].brdname;
currbrdattr = bcache[currbid - 1].brdattr;
diff --git a/mbbsd/io.c b/mbbsd/io.c
index 829386f8..9c50a248 100644
--- a/mbbsd/io.c
+++ b/mbbsd/io.c
@@ -305,8 +305,8 @@ igetch()
}
}
return ch;
- case '\n': /* Ptt把 \n拿掉 */
- continue;
+ //case '\n': /* Ptt把 \n拿掉 */
+ // continue;
case Ctrl('T'):
if (WATERMODE(WATER_ORIG) || WATERMODE(WATER_NEW)) {
if (watermode > 0) {
@@ -353,6 +353,11 @@ igetch()
}
}
return ch;
+
+ case Ctrl('J'):
+ CallAngel();
+ continue;
+
case IAC:
// disallow user input telnet protocol leading char IAC chr(255)
// TODO parse telnet protocol
diff --git a/mbbsd/talk.c b/mbbsd/talk.c
index a8238da4..31846c54 100644
--- a/mbbsd/talk.c
+++ b/mbbsd/talk.c
@@ -2735,11 +2735,44 @@ t_changeangel(){
buf, 3, LCECHO);
if( buf[0] == 'y' || buf[0] == 'Y' ){
cuser.myangel[0] = 0;
- vmsg("小天使更新完成,下次呼叫時會選出新的小天使");
+ outs("小天使更新完成,下次呼叫時會選出新的小天使");
}
return 0;
}
+static int
+FindAngel(void){
+ return 0;
+}
+
+static void
+TalkToAngel(){
+ if( cuser.myangel[0] == 0 )
+ if( ! FindAngel() ){
+ move(b_lines, 0);
+ outs("現在沒有小天使在線上,請先在新手板上尋找答案或發問");
+ refresh();
+ sleep(1);
+ if( currutmp->mode != EDITING ){
+ brc_initial_board("PttNewHand");
+ Read();
+ }
+ return;
+ }
+ return;
+}
+
void
CallAngel(){
+ screenline_t *screen0 = calloc(t_lines, sizeof(screenline_t));
+ int x, y;
+ getyx(&y, &x);
+ memcpy(screen0, big_picture, t_lines * sizeof(screenline_t));
+
+ TalkToAngel();
+
+ memcpy(big_picture, screen0, t_lines * sizeof(screenline_t));
+ move(y, x);
+ free(screen0);
+ redoscr();
}