From 05634a014663f9b3a9d432945b465f0dc0fde2f4 Mon Sep 17 00:00:00 2001 From: piaip Date: Thu, 9 Jun 2005 08:01:52 +0000 Subject: pmore: backward method update. git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2813 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/pmore.c | 49 ++++++++++++++++--------------------------------- 1 file changed, 16 insertions(+), 33 deletions(-) (limited to 'mbbsd/pmore.c') diff --git a/mbbsd/pmore.c b/mbbsd/pmore.c index 257cdf20..26ab541d 100644 --- a/mbbsd/pmore.c +++ b/mbbsd/pmore.c @@ -511,48 +511,31 @@ mf_determinemaxdisps(int backlines, int update_by_offset) MFPROTO int mf_backward(int lines) { - int flFirstLine = 1; int real_moved = 0; - // first, because we have to trace back to line beginning, - // add one line. - lines ++; - // now try to rollback for lines - if(lines == 1) - { - /* special case! just rollback to start */ - while ( mf.disps > mf.start && - *(mf.disps-1) != '\n') - mf.disps --; - mf.disps --; - lines --; - } - else while(mf.disps > mf.start && lines > 0) + /* backward n lines means to find n times of '\n'. */ + + /* if we're already in a line break, add one mark. */ + if (mf.disps < mf.end && *mf.disps == '\n') + lines++, real_moved --; + + while (1) { - while (mf.disps > mf.start && *--mf.disps != '\n'); - if(flFirstLine) + if (mf.disps < mf.start || *mf.disps == '\n') { - flFirstLine = 0; lines--; - continue; + real_moved ++; + if(lines-- <= 0 || mf.disps < mf.start) + break; } - - if(mf.disps >= mf.start) - mf.lineno--, lines--, real_moved++; + mf.disps --; } - if(mf.disps == mf.start) - mf.lineno = 0; - else - mf.disps ++; + /* now disps points to previous 1 byte of new address */ + mf.disps ++; + real_moved --; + mf.lineno -= real_moved; return real_moved; - - /* - if(lines > 0) - return MFNAV_OK; - else - return MFNAV_EXCEED; - */ } MFPROTO int -- cgit v1.2.3