p = &list; while (start--) /*開始行数分 ノードを進める。*/ p = p->next;←この部分の処理? while (n--) { /*一画面分(23 行)表示する。*/ fputs(p->buf, stdout);
p = &list;の部分は、先頭の部分を指すようにしてるのですね・・・ それで・・・ while (start--) /*開始行数分 ノードを進める。*/ p = p->next;←この部分の処理? 上記の部分の動きというのは、どういう仕組みでしょうか? p = p->next;でnextを、また、pに代入というのは、どういう意味でしょうか?
for (cur = list.next; cur != &list; cur = del_line(cur)) ← ここの処理は? ;
for文の使い方は知っているのですが、この場合ちょっと上級な使い方をしてるみたい なので難しいですね。cur != &listの部分は、末尾(or先頭)になったら終了ですね。 cur = list.nextは、初期値ですけど、どこの部分を指しているのですか? cur = del_line(cur)でdel_line()は、何が返ってくるのですか?curを引数にして さらにcurに返り値を入れていますね、この動作はどうなのかわかりません。
LINE *add_line(LINE *, char *); LINE *del_line(LINE *);
#if HAVE_GETCH static void noprompt(char *str) { int n; int i;
n = strlen(str); for (i = 0; i < n; i++) /*"--more--" の長さ分消す。*/ putch('\b'); /*\b はバックスペース。*/ for (i = 0; i < n; i++) /*"--more--" の長さ分空白を表示。*/ putch(' '); for (i = 0; i < n; i++) putch('\b'); } #endif
>if (ln > all - n + 1) /*ファイルの行数を超えた
> ln = all - n + 1; 場合は、最後の 23 行を表示する。*/
このままだとコメントになってしまうので(笑
if (ln > all - n + 1) /*ファイルの行数を超えた */
ln = all - n + 1; /*場合は、最後の 23 行を表示する。*/
こうだと考えて、これは最後の23行を表示するために先頭を求めているのだから
例えば、全24行だとすると最後の23行は2〜24行までの23行になる。
この先頭の2を越えた場合に2にするという条件であり、式