$B:dK\$G$9!#(B
getNextPage() $B$,$i$_$N=$@5(B/$B2~NI$r$7$^$7$?!#(B
$B!&(B-m $B%*%W%7%g%s;HMQ;~$K(B quoted-printable $B$r%G%3!<%I2DG=$K$7$?!#(B
$B!&(BshowProgress $B$r(B getNextPage() $BFb$G8F$VMM$K$7$?!#(B
$B$3$l$K$h$j!"(BTransferred byte(buf->trbyte) $B$K@5$7$/CM$,F~$k$h$&$K$J$C$?!#(B
$B!&JQ?tL>$r(B loadBuffer $BEy$H$@$$$?$$9g$o$;$?!#(B
$B$^$?!"(BgetNextPage $B$H$O4X78L5$$ItJ,$G$b(B
$B!&(BshowProgress $B$r8F$V0LCV$r@5$7$$$H;W$o$l$k0LCV$KJQ99(B
$B$7$F$$$^$9!#(B
$B$b$&$A$g$C$H=PMh$=$&$J$3$H(B
$B!&(BloadBuffer $B$d(B loadHTMLstream $B$HE}0lE*$K07$($kItJ,$rH4$-$@$7$F(B
$BF1$8%k!<%A%s$K$^$H$a$k!#!t(B $BBgItJ,$^$H$a$i$l$=$&!#(B
$B!&(BBuffer $B9=B$BN$K(B URLFile $B9=B$BN(B(uf)$B$r;}$?$9$h$&$K$7$F!"(B
End-Of-File $B$r(B CPIPEBUFFERNAME $B$G$O$J$/(B uf.iseof $B$GH=JL$9$k!#(B
MIME-encoding $B$b(B uf.encoding $B$r;H$&!#(BpagerSource $B$b(B uf.stream.f $B$r;H$&!#(B
$B:#$O$7$F$J$$$1$I!"$A$c$s$H(B [pf]close $B$9$k$?$a$K$b(B URLFile $B9=B$BN$,I,MW!#(B
$B!t(B $B$&!A$s!"$G$b9T$-Ev$?$j$P$C$?$j$G$d$k$h$j!"J}?K$r7h$a$F$d$C$?J}$,NI$$$+$b!#(B
$B!t(B $BA4$F$N%U%!%$%k(B($B4^(B HTML)$B$r%Z!<%8%c$HFI$`MM$K$9$k$J$i$=$A$i$,@h$+!D(B
-----------------------------------
$B:dK\(B $B9@B'(B <hsaka@mth.biglobe.ne.jp>
http://www2u.biglobe.ne.jp/~hsaka/
diff -u fm.h.orig fm.h
--- fm.h.orig Tue Jun 6 14:54:35 2000
+++ fm.h Sat Jun 10 23:57:43 2000
@@ -281,6 +281,7 @@
short width;
short height;
char *type;
+ char encoding;
int allLine;
short bufferprop;
short currentColumn;
@@ -305,6 +306,7 @@
struct frameset *frameset;
struct frameset_queue *frameQ;
int *clone;
+ int linelen;
int trbyte;
char check_url;
#ifdef JP_CHARSET
diff -u file.c.orig file.c
--- file.c.orig Fri Jun 9 22:51:46 2000
+++ file.c Sun Jun 11 00:00:09 2000
@@ -3436,7 +3436,7 @@
mode = PC_ASCII;
effect = 0;
- nlines = -1;
+ nlines = 0;
#ifdef NEW_FORM
buf->formlist = (form_max >= 0) ? forms[form_max] : NULL;
#endif /* NEW_FORM */
@@ -3448,7 +3448,7 @@
break;
pos = 0;
if (showLineNum) {
- tmp = Sprintf("%4d:", nlines + 1);
+ tmp = Sprintf("%4d:", nlines);
for (p = tmp->ptr; *p; p++) {
PPUSH(PC_ASCII, *p);
}
@@ -3815,7 +3815,7 @@
}
}
/* end of processing for one line */
- addnewline(buf, outc, outp, pos, nlines + 1);
+ addnewline(buf, outc, outp, pos, nlines);
if (*str != '\0') {
istr = str;
goto proc_again;
@@ -4622,6 +4622,8 @@
if (src)
Strfputs(lineBuf2, src);
}
+ linelen += lineBuf2->length;
+ showProgress(&linelen, &trbyte);
if (f->encoding == ENC_QUOTE) {
char *p;
if (qp_lbuf != NULL)
@@ -4654,9 +4656,7 @@
}
}
#endif /* USE_NNTP */
- linelen += lineBuf2->length;
HTMLlineproc1(lineBuf2->ptr, &htmlenv1);
- showProgress(&linelen, &trbyte);
}
if (obuf.status == R_ST_CMNT)
HTMLlineproc1("-->", &htmlenv1);
@@ -4841,7 +4841,8 @@
{
FILE *src = NULL;
char code;
- Str lineBuf2, pre_lbuf = NULL, qp_lbuf = NULL;
+ Str lineBuf2, qp_lbuf = NULL;
+ char pre_lbuf = '\0';
int i, j, nlines;
Str tmpf;
Str(*gets_rout) (URLFile *);
@@ -4889,15 +4890,14 @@
if (src)
Strfputs(lineBuf2, src);
}
+ linelen += lineBuf2->length;
+ showProgress(&linelen, &trbyte);
if (squeezeBlankLine) {
- if (pre_lbuf) {
- if (lineBuf2->ptr[0] == '\n' && pre_lbuf->ptr[0] == '\n') {
- ++nlines;
- pre_lbuf = lineBuf2;
- continue;
- }
+ if (lineBuf2->ptr[0] == '\n' && pre_lbuf == '\n') {
+ ++nlines;
+ continue;
}
- pre_lbuf = lineBuf2;
+ pre_lbuf = lineBuf2->ptr[0];
}
if (uf->encoding == ENC_QUOTE) {
char *p;
@@ -4916,8 +4916,6 @@
lineBuf2 = qp_lbuf;
qp_lbuf = NULL;
}
- linelen += lineBuf2->length;
- showProgress(&linelen, &trbyte);
++nlines;
if (showLineNum) {
Str tmp = Sprintf("%4d:", nlines);
@@ -5133,6 +5131,7 @@
}
}
buf->type = t;
+ buf->encoding = uf.encoding;
buf->currentURL.scheme = SCM_LOCAL;
buf->currentURL.file = "-";
return buf;
@@ -5143,9 +5142,11 @@
{
Line *l, *fl, *pl = buf->lastLine;
Line *rl = NULL;
- int len, i, n = 0;
- Str lbuf;
- static Str pre_lbuf = NULL;
+ int len, i, nlines = 0;
+ int linelen = buf->linelen, trbyte = buf->trbyte;
+ Str lineBuf2, qp_lbuf = NULL;
+ char pre_lbuf = '\0';
+ URLFile uf;
#ifdef JP_CHARSET
char code = buf->document_code, ic;
#endif
@@ -5156,61 +5157,83 @@
if (fmInitialized)
crmode();
- if (pl != NULL)
- n = pl->real_linenumber;
-
- if (n == 0)
- pre_lbuf = NULL;
+ if (pl != NULL) {
+ nlines = pl->real_linenumber;
+ pre_lbuf = *(pl->lineBuf);
+ if (showLineNum) {
+ char *p;
+ if ((p = strchr(pl->lineBuf, ':')) != NULL)
+ pre_lbuf = *(p + 1);
+ }
+ if (pre_lbuf == '\0')
+ pre_lbuf = '\n';
+ }
+ uf.scheme = SCM_UNKNOWN;
+ uf.encoding = buf->encoding;
for (i = 0; i < plen; i++) {
- if (lbuf = Strmyfgets(buf->pagerSource), lbuf->length == 0) {
+ lineBuf2 = Strmyfgets(buf->pagerSource);
+ if (lineBuf2->length == 0 && qp_lbuf == NULL) {
/* Assume that `cmd == buf->filename' */
- if (buf->filename) {
- Str bn = Sprintf("%s %s", CPIPEBUFFERNAME, buf->filename);
- buf->buffername = bn->ptr;
- }
- else {
+ if (buf->filename)
+ buf->buffername = Sprintf("%s %s",
+ CPIPEBUFFERNAME, buf->filename)->ptr;
+ else
buf->buffername = CPIPEBUFFERNAME;
- }
+ trbyte += linelen;
+ linelen = 0;
break;
}
+ linelen += lineBuf2->length;
+ showProgress(&linelen, &trbyte);
if (squeezeBlankLine) {
- if (pre_lbuf) {
- squeeze_flag = 0;
- if (lbuf->ptr[0] == '\n' && pre_lbuf->ptr[0] == '\n') {
- ++n;
- pre_lbuf = lbuf;
- squeeze_flag = 1;
- i--;
- continue;
- }
+ squeeze_flag = 0;
+ if (lineBuf2->ptr[0] == '\n' && pre_lbuf == '\n') {
+ ++nlines;
+ --i;
+ squeeze_flag = 1;
+ continue;
+ }
+ pre_lbuf = lineBuf2->ptr[0];
+ }
+ if (uf.encoding == ENC_QUOTE) {
+ char *p;
+ if (qp_lbuf != NULL)
+ Strcat(qp_lbuf, lineBuf2);
+ else
+ qp_lbuf = lineBuf2;
+ p = lineBuf2->ptr;
+ while ((p = strchr(p, '=')) != NULL) {
+ ++p;
+ if (IS_SPACE(*p))
+ break;
}
- pre_lbuf = lbuf;
+ if (p != NULL)
+ continue;
+ lineBuf2 = qp_lbuf;
+ qp_lbuf = NULL;
}
+ ++nlines;
if (showLineNum) {
- Str tmp = Sprintf("%4d:", n + 1);
- Strcat(tmp, lbuf);
- lbuf = tmp;
+ Str tmp = Sprintf("%4d:", nlines);
+ Strcat(tmp, lineBuf2);
+ lineBuf2 = tmp;
}
-#ifdef JP_CHARSET
- if ((ic = checkShiftCode(lbuf->ptr, code)) != '\0')
- lbuf = conv(lbuf->ptr, (code = ic), InnerCode);
-#endif /* JP_CHARSET */
- lbuf = checkType(lbuf->ptr, propBuffer, LINELEN);
- len = lbuf->length;
+ lineBuf2 = convertLine(&uf, lineBuf2, &code);
+ lineBuf2 = checkType(lineBuf2->ptr, propBuffer, LINELEN);
+ len = lineBuf2->length;
l = New(Line);
- l->lineBuf = lbuf->ptr;
+ l->lineBuf = lineBuf2->ptr;
l->propBuf = New_N(Lineprop, len);
bcopy((void *) propBuffer, (void *) l->propBuf, len * sizeof(Lineprop));
l->len = len;
l->prev = pl;
- ++n;
if (squeezeBlankLine) {
- l->real_linenumber = n;
- l->linenumber = (pl == NULL ? n : pl->linenumber + 1);
+ l->real_linenumber = nlines;
+ l->linenumber = (pl == NULL ? nlines : pl->linenumber + 1);
}
else {
- l->real_linenumber = l->linenumber = n;
+ l->real_linenumber = l->linenumber = nlines;
}
if (pl == NULL) {
pl = l;
@@ -5222,7 +5245,7 @@
}
if (rl == NULL)
rl = l;
- if (n > PagerMax) {
+ if (nlines > PagerMax) {
fl = buf->firstLine;
buf->firstLine = fl->next;
fl->next->prev = NULL;
@@ -5240,6 +5263,8 @@
}
if (fmInitialized)
term_raw();
+ buf->linelen = linelen;
+ buf->trbyte = trbyte;
#ifdef JP_CHARSET
buf->document_code = code;
#endif
diff -u etc.c.orig etc.c
--- etc.c.orig Sat Jun 10 21:57:37 2000
+++ etc.c Sun Jun 11 00:11:19 2000
@@ -139,16 +139,14 @@
lineSkip(Buffer * buf, Line * line, int offset, int last)
{
int i, n;
- Line *l = line, *line_p;
- int linelen = 0;
+ Line *l = line;
if (buf->pagerSource && strcmp(buf->buffername, CPIPEBUFFERNAME)) {
n = line->linenumber + offset + LASTLINE;
+ if (buf->lastLine->linenumber < n)
+ getNextPage(buf, n - buf->lastLine->linenumber);
while ((last || (buf->lastLine->linenumber < n)) &&
- ((line_p = getNextPage(buf, 1)) != NULL)) {
- linelen += line_p->len;
- showProgress(&linelen, &(buf->trbyte));
- }
+ (getNextPage(buf, 1) != NULL));
if (last)
l = buf->lastLine;
}
diff -u buffer.c.orig buffer.c
--- buffer.c.orig Fri Jun 9 21:48:23 2000
+++ buffer.c Sun Jun 11 00:13:39 2000
@@ -37,6 +37,7 @@
n->bufferprop = BP_NORMAL;
n->clone = New(int);
*n->clone = 1;
+ n->linelen = 0;
n->trbyte = 0;
return n;
}
@@ -222,17 +223,15 @@
gotoLine(Buffer * buf, int n)
{
char msg[32];
- Line *l = buf->firstLine, *line_p;
- int linelen = 0;
+ Line *l = buf->firstLine;
if (l == NULL)
return;
if (buf->pagerSource && strcmp(buf->buffername, CPIPEBUFFERNAME)) {
+ if (buf->lastLine->linenumber < n)
+ getNextPage(buf, n - buf->lastLine->linenumber);
while ((buf->lastLine->linenumber < n) &&
- ((line_p = getNextPage(buf, 1)) != NULL)) {
- linelen += line_p->len;
- showProgress(&linelen, &(buf->trbyte));
- }
+ (getNextPage(buf, 1) != NULL));
}
if (l->linenumber > n) {
sprintf(msg, "First line is #%ld", l->linenumber);
@@ -265,17 +264,15 @@
gotoRealLine(Buffer * buf, int n)
{
char msg[32];
- Line *l = buf->firstLine, *line_p;
- int linelen = 0;
+ Line *l = buf->firstLine;
if (l == NULL)
return;
if (buf->pagerSource && strcmp(buf->buffername, CPIPEBUFFERNAME)) {
+ if (buf->lastLine->real_linenumber < n)
+ getNextPage(buf, n - buf->lastLine->real_linenumber);
while ((buf->lastLine->real_linenumber < n) &&
- ((line_p = getNextPage(buf, 1)) != NULL)) {
- linelen += line_p->len;
- showProgress(&linelen, &(buf->trbyte));
- }
+ (getNextPage(buf, 1) != NULL));
}
if (l->real_linenumber > n) {
sprintf(msg, "First line is #%ld", l->real_linenumber);
This archive was generated by hypermail 2b29 : Wed Jul 19 2000 - 10:30:56 CDT