static int mail_get_subject(char *buf, struct MailHeader *mh) { char *subject = mh->subject; while (isspace(*(buf))) ++buf; str_notab(buf); str_trim(buf); str_decode((unsigned char *)buf); str_ansi(subject, buf, SUBJECT_LEN); return 0; }
int getdata(int line, int col, char *prompt, char *buf, int len, int echo, char *ans) { register int ch; int clen; int x, y; int off_set = 0; /*add color*/ #define MAXLASTCMD 6 static char lastcmd[MAXLASTCMD][80]; if (prompt) { move(line, col); clrtoeol(); outs(prompt); off_set=offset_count(prompt); /*add color*/ } else clrtoeol(); if (echo == NOECHO) { len--; /* 下面這段程式碼是沒有反白 (!echo) */ clen = 0; while ((ch = igetkey()) != '\r') { if (ch == '\n') break; if (ch == KEY_BKSP || ch == Ctrl('H')) { if (!clen) bell(); else clen--; continue; } #ifdef BIT8 if (!isprint2(ch)) #else if (!isprint(ch)) #endif { continue; } if (clen >= len) continue; buf[clen++] = ch; } buf[clen] = '\0'; outc('\n'); oflush(); } else { int cmdpos = MAXLASTCMD -1; int currchar = 0; int keydown; int dirty, i; getyx(&y, &x); x=x-off_set; /*add color by hialan*/ standout(); for (clen = len; clen; clen--) outc(' '); standend(); if (ans != NULL) { str_ansi(buf, ans, len); move(y, x); edit_outs(buf); clen = currchar = strlen(buf); } /* 因為 buf 有可能會和 ans 相同 , 所以先把初始字串完成後 */ /* 再根據 clen 將字串後面清空 */ memset(buf+clen, 0, len-clen); len--; dirty = 0; while (move(y, x + currchar), (ch = igetkey()) != '\r') { keydown = 0; switch (ch) { case Ctrl('Y'): { if (clen && dirty) { for (i = MAXLASTCMD - 1; i; i--) strcpy(lastcmd[i], lastcmd[i - 1]); strlcpy(lastcmd[0], buf, sizeof(lastcmd[0]) ); } move(y, x); for (clen = len; clen; clen--) outc(' '); memset(buf, '\0', len); clen = currchar = 0; continue; } case KEY_DOWN: case Ctrl('N'): keydown = 1; case Ctrl('P'): case KEY_UP: { if (clen && dirty) { for (i = MAXLASTCMD - 1; i; i--) strcpy(lastcmd[i], lastcmd[i - 1]); strlcpy(lastcmd[0], buf, sizeof(lastcmd[0]) ); } i = cmdpos; do { if (keydown) --cmdpos; else ++cmdpos; if (cmdpos < 0) cmdpos = MAXLASTCMD - 1; else if (cmdpos == MAXLASTCMD) cmdpos = 0; } while (cmdpos != i && (!*lastcmd[cmdpos] || !strncmp(buf, lastcmd[cmdpos], len))); if (cmdpos == i) continue; strncpy(buf, lastcmd[cmdpos], len); buf[len] = 0; move(y, x); /* clrtoeof */ for (i = 0; i <= clen; i++) outc(' '); move(y, x); if (echo == PASS) passwd_outs(buf); else edit_outs(buf); clen = currchar = strlen(buf); dirty = 0; continue; } case KEY_ESC: if(currutmp) { if (KEY_ESC_arg == 'c') capture_screen(); if (KEY_ESC_arg == 'n') edit_note(); } continue; /* yagami.000504 : 游標可到最前或最後 */ case Ctrl('A'): case KEY_HOME: currchar = 0; break; case Ctrl('E'): case KEY_END: currchar = clen; break; case KEY_LEFT: if (currchar) --currchar; continue; case KEY_RIGHT: if (buf[currchar]) ++currchar; continue; case Ctrl('K'): { buf[currchar] = 0; move(y, x + currchar); for (i = currchar; i < clen; i++) outc(' '); clen = currchar; dirty = 1; continue; } case Ctrl('D'): { if (buf[currchar]) { clen--; for (i = currchar; i <= clen; i++) buf[i] = buf[i + 1]; move(y, x + clen); outc(' '); move(y, x); if (echo == PASS) passwd_outs(buf); else edit_outs(buf); dirty = 1; } continue; } case KEY_BKSP: case Ctrl('H'): { if (currchar) { currchar--; clen--; for (i = currchar; i <= clen; i++) buf[i] = buf[i + 1]; move(y, x + clen); outc(' '); move(y, x); if (echo == PASS) passwd_outs(buf); else edit_outs(buf); dirty = 1; } continue; } case Ctrl('I'): if(currstat != IDLE && !(currutmp->mode == 0 && (currutmp->chatid[0] == 2 || currutmp->chatid[0] == 3))) { t_idle(); } continue; } /* switch(ch) */ if (ch == '\n' || ch == '\r') break; if (!(isprint2(ch)) || clen >= len || x + clen >= scr_cols) continue; if (buf[currchar]) { /* insert */ for (i = currchar; buf[i] && i < len && i < 80; i++) ; buf[i + 1] = 0; for (; i > currchar; i--) buf[i] = buf[i - 1]; } else /* append */ buf[currchar + 1] = '\0'; buf[currchar] = ch; move(y, x + currchar); if (echo == PASS) passwd_outs(buf + currchar); else /* shakalaca.990422: 原本只有下面那行, 這是為了輸入 passwd 有反白 */ edit_outs(buf + currchar); currchar++; clen++; dirty = 1; } buf[clen] = '\0'; if (clen > 1 && echo != PASS) /* shaklaaca.990514: ^^^^^^^ 不讓輸入的 password 留下紀錄 */ { for (cmdpos = MAXLASTCMD - 1; cmdpos; cmdpos--) strcpy(lastcmd[cmdpos], lastcmd[cmdpos - 1]); strlcpy(lastcmd[0], buf, sizeof(lastcmd[0]) ); } move(y, x + clen); outc('\n'); refresh(); } if(echo == LCECHO) buf[0] = tolower(buf[0]); return clen; }