summaryrefslogtreecommitdiffstats
path: root/mbbsd/pmore.c
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-06-29 12:55:02 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-06-29 12:55:02 +0800
commit75169afcc32f1fee13bf7b5027bf41bc14aca93b (patch)
tree226cb127ec2b6d6f38237a044f5b7bb84b281128 /mbbsd/pmore.c
parentff4f367049df2ad17d4ecd5e63d765c9f361cb8d (diff)
downloadpttbbs-75169afcc32f1fee13bf7b5027bf41bc14aca93b.tar
pttbbs-75169afcc32f1fee13bf7b5027bf41bc14aca93b.tar.gz
pttbbs-75169afcc32f1fee13bf7b5027bf41bc14aca93b.tar.bz2
pttbbs-75169afcc32f1fee13bf7b5027bf41bc14aca93b.tar.lz
pttbbs-75169afcc32f1fee13bf7b5027bf41bc14aca93b.tar.xz
pttbbs-75169afcc32f1fee13bf7b5027bf41bc14aca93b.tar.zst
pttbbs-75169afcc32f1fee13bf7b5027bf41bc14aca93b.zip
pmore: dbcs aware search
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2874 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/pmore.c')
-rw-r--r--mbbsd/pmore.c28
1 files changed, 23 insertions, 5 deletions
diff --git a/mbbsd/pmore.c b/mbbsd/pmore.c
index 54eba1bc..74aa4f0f 100644
--- a/mbbsd/pmore.c
+++ b/mbbsd/pmore.c
@@ -157,6 +157,9 @@ int debug = 0;
#endif /* PMORE_STYLE_ANSI */
+#define ANSI_IN_MOVECMD(x) (strchr("ABCDfjHJRu", x) != NULL)
+#define PMORE_DBCS_LEADING(c) (c >= 0x80)
+
// Poor BBS terminal system Workarounds
// - Most BBS implements clrtoeol() as fake command
// and usually messed up when output ANSI quoted string.
@@ -629,8 +632,11 @@ mf_search(int direction)
{
flFound = 1;
break;
- } else
- mf.disps ++;
+ } else {
+ /* go forward. we can do DBCS check here. */
+ if(PMORE_DBCS_LEADING(*mf.disps++))
+ mf.disps++;
+ }
}
mf_backward(0);
if(mf.disps > mf.maxdisps)
@@ -648,7 +654,11 @@ mf_search(int direction)
{
flFound = 1;
} else
- mf.disps ++;
+ {
+ /* go forward. we can do DBCS check here. */
+ if(PMORE_DBCS_LEADING(*mf.disps++))
+ mf.disps++;
+ }
}
if(!flFound)
mf_backward(1);
@@ -719,7 +729,6 @@ pmore_str_chomp(unsigned char *p)
memmove(p, pb, strlen(pb)+1);
}
-#define PMORE_DBCS_LEADING(c) (c >= 0x80)
#if 0
int
pmore_str_safe_big5len(unsigned char *p)
@@ -1167,9 +1176,10 @@ mf_display()
break;
case MFDISP_RAW_PLAIN:
break;
+
default:
#ifdef PMORE_RESTRICT_ANSI_MOVEMENT
- if(strchr("ABCDfjHJRu", c) != NULL)
+ if(ANSI_IN_MOVECMD(c))
c = 's'; // "save cursor pos"
#endif
outc(c);
@@ -2191,7 +2201,15 @@ pmore(char *fpath, int promptend)
if(ch == '|')
bpref.rawmode += MFDISP_RAW_MODES-1;
else
+ {
+ /* '\\' */
+
+ /* should we do first time prompt checking here,
+ * or remove hotkey '\\'?
+ static unsigned char first_prompt = 1;
+ */
bpref.rawmode ++;
+ }
bpref.rawmode %= MFDISP_RAW_MODES;
switch(bpref.rawmode)
{