#include "stdio.h"
#define PAGELEN 24
#define LINELEN 512
void do_more(FILE *);
int see_more();
int main(int ac, char *av[])
{
FILE *fp;
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(), reply;
while (fgets(line, LINELEN, fp)){
if(num_of_lines == PAGELEN){
reply = see_more();
if(reply == 0)
break;
num_of_lines -= reply;
}
if(fputs (line, stdout) == EOF)
exit(1);
num_of_lines++;
}
}
int see_more()
{
int c;
printf("\033[7m more? \033[m");
while ((c=getchar()) != EOF)
{
if (c == 'q')
return 0;
if (c == ' ')
return PAGELEN;
if (c == '\n')
return 1;
}
return 0;
}
PAGELEN = 24
def main(ac, argv)
if ac == 1
do_more(STDIN)
else
while (ac -= 1) >= 0
if (fp = argv.shift) != nil
file = File.open(fp, "r")
do_more(file)
file.close
else
exit(1)
end
end
end
return 0
end
def do_more(fp)
num_of_lines = 0
while line = fp.gets
if num_of_lines == PAGELEN
reply = see_more
if reply == 0
break
end
num_of_lines -= reply
end
if line == nil
exit
end
puts line
num_of_lines += 1
end
end
def see_more
printf "\033[7m more? \033[m\n"
while c = STDIN.getc
if c == "q"
return 0
end
if c == " "
return PAGELEN
end
if c == "\n"
return 1
end
end
return 0
end
argv = ARGV
main(argv.length+1, argv)
PAGELEN = 10
def puts_lines
begin
next_stop = PAGELEN
ARGF.each_with_index do |line, i|
if i == next_stop
case reply = more?
when 0
break
else
next_stop += reply
end
end
puts line
end
rescue Exception => e
puts e
exit(1)
ensure
ARGF.close
end
0
end
def more?
printf "\033[7m more? \033[m"
while c = STDIN.getc
return case c
when "q"
0
when " "
PAGELEN
when "\n"
1
end
end
0
end
puts_lines
No comments:
Post a Comment