본문 바로가기

IT

more1.c

#include <stdio.h>

#include <sys/ioctl.h>


int PAGELEN, LINELEN;

struct winsize wbuf;

void do_more(FILE *);

int see_more(FILE *);


int main(int ac, char *av[])

{

FILE *fp;



if(ioctl(0,TIOCGWINSZ,&wbuf)!=-1)

{

PAGELEN = wbuf.ws_row;

LINELEN = wbuf.ws_col;

}


if (ac == 1)

do_more(stdin);

else

{

while(--ac)

{


if((fp=fopen(*++av, "r"))!=NULL)

{

do_more(fp);

fclose(fp);

}

else

exit(1);

}

}

return 0;

}


void do_more(FILE *fp)

{

char line[LINELEN];

int num_of_lines = 0;

int see_more(FILE *), reply;

FILE *fp_tty;


fp_tty = fopen("/dev/tty","r");

if(fp_tty == NULL)

exit(1);


while(fgets(line, LINELEN, fp))

{

if(ioctl(0,TIOCGWINSZ,&wbuf)!=-1)

{

PAGELEN = wbuf.ws_row;

LINELEN = wbuf.ws_col;

}


if (num_of_lines == PAGELEN)

{

reply = see_more(fp_tty);

if (reply == 0)

break;

num_of_lines -= reply;

}

if(fputs(line, stdout) == EOF)

exit(1);

num_of_lines++;

}

}



int see_more(FILE *cmd)

{

int c;

printf("\033[7m more? \033[m");

while((c=getc(cmd)) != EOF)

{


if (c == 'q')

return 0;

if (c == ' ')

{


return PAGELEN;

}

if (c == '\n')

return 1;

}

return 0;

}

'IT' 카테고리의 다른 글

canonical  (0) 2014.10.19
system programming chapter 5.  (0) 2014.10.08
창크기 알려주는 프로그램  (0) 2014.10.08
terminal info? status? 를 보여주는 프로그램  (0) 2014.10.08
아규먼트로 y를 주면 echo를 켜는 프로그램.  (0) 2014.10.08