head	1.2;
access;
symbols
	RELEASE_2_0:1.1.1.1
	BETA_2_0:1.1.1.1
	ALPHA_2_0:1.1.1.1.0.2
	perl_4_036_bmake:1.1.1.1
	lwall:1.1.1;
locks; strict;
comment	@# @;


1.2
date	97.07.13.14.16.58;	author peter;	state dead;
branches;
next	1.1;

1.1
date	94.09.10.06.27.36;	author gclarkii;	state Exp;
branches
	1.1.1.1;
next	;

1.1.1.1
date	94.09.10.06.27.37;	author gclarkii;	state Exp;
branches;
next	1.1.1.2;

1.1.1.2
date	95.12.30.18.42.32;	author peter;	state dead;
branches;
next	;


desc
@@


1.2
log
@kill the undead
@
text
@#!./curseperl

eval <<'EndOfMain';   $evaloffset = __LINE__;

    $SIG{'INT'} = 'endit';
    $| = 1;		# command buffering on stdout
    &initterm;
    &inithelp;
    &slurpfile && &pagearray;

EndOfMain

&endit;

################################################################################

sub initterm {

    &initscr; &cbreak; &noecho; &scrollok($stdscr, 1);
    &defbell unless defined &bell;

    $lines = $LINES; $lines1 = $lines - 1; $lines2 = $lines - 2;
    $cols = $COLS;   $cols1  = $cols  - 1; $cols2  = $cols  - 2;;

    $dl = &getcap('dl');
    $al = &getcap('al');
    $ho = &getcap('ho');
    $ce = &getcap('ce');
}

sub slurpfile {
    while (<>) {
	s/^(\t+)/'        ' x length($1)/e;
	&expand($_) if /\t/;
	if (length($_) < $cols) {
	    push(@@lines, $_);
	}
	else {
	    while ($_ && $_ ne "\n") {
		push(@@lines, substr($_,0,$cols));
		substr($_,0,$cols) = '';
	    }
	}
    }
    1;
}

sub drawscreen {
    &move(0,0);
    for ($line .. $line + $lines2) {
	&addstr($lines[$_]);
    }
    &clrtobot;
    &percent;
    &refresh;
}

sub expand {
    while (($off = index($_[0],"\t")) >= 0) {
	substr($_[0], $off, 1) = ' ' x (8 - $off % 8);
    }
}

sub pagearray {
    $line = 0;

    $| = 1;

    for (&drawscreen;;&drawscreen) {

	$ch = &getch;
	$ch = 'j' if $ch eq "\n";

	if ($ch eq ' ') {
	    last if $percent >= 100;
	    &move(0,0);
	    $line += $lines1;
	}
	elsif ($ch eq 'b') {
	    $line -= $lines1;
	    &move(0,0);
	    $line = 0 if $line < 0;
	}
	elsif ($ch eq 'j') {
	    next if $percent >= 100;
	    $line += 1;
	    if ($dl && $ho) {
		print $ho, $dl;
		&mvcur(0,0,$lines2,0);
		print $ce,$lines[$line+$lines2],$ce;
		&wmove($curscr,0,0);
		&wdeleteln($curscr);
		&wmove($curscr,$lines2,0);
		&waddstr($curscr,$lines[$line+$lines2]);
	    }
	    &wmove($stdscr,0,0);
	    &wdeleteln($stdscr);
	    &wmove($stdscr,$lines2,0);
	    &waddstr($stdscr,$lines[$line+$lines2]);
	    &percent;
	    &refresh;
	    redo;
	}
	elsif ($ch eq 'k') {
	    next if $line <= 0;
	    $line -= 1;
	    if ($al && $ho && $ce) {
		print $ho, $al, $ce, $lines[$line];
		&wmove($curscr,0,0);
		&winsertln($curscr);
		&waddstr($curscr,$lines[$line]);
	    }
	    &wmove($stdscr,0,0);
	    &winsertln($stdscr);
	    &waddstr($stdscr,$lines[$line]);
	    &percent;
	    &refresh;
	    redo;
	}
	elsif ($ch eq "\f") {
	    &clear;
	}
	elsif ($ch eq 'q') {
	    last;
	}
	elsif ($ch eq 'h') {
	    &clear;
	    &help;
	    &clear;
	}
	else {
	    &bell;
	}
    }
}

sub defbell {
    eval q#
	sub bell {
	    print "\007";
	}
    #;
}

sub help {
    local(*lines) = *helplines;
    local($line);
    &pagearray;
}

sub inithelp {
    @@helplines = split(/\n/,<<'EOT');

  h              Display this help.
  q              Exit.

  SPACE          Forward  screen.
  b              Backward screen.
  j, CR          Forward  1 line.
  k              Backward 1 line.
  FF             Repaint screen.
EOT
    for (@@helplines) {
	s/$/\n/;
    }
}

sub percent {
    &standout;
      $percent = int(($line + $lines1) * 100 / @@lines);
      &move($lines1,0);
      &addstr("($percent%)");
    &standend;
    &clrtoeol;
}

sub endit {
    &move($lines1,0);
    &clrtoeol;
    &refresh;
    &endwin;

    if ($@@) {
	print "";				# force flush of stdout
	$@@ =~ s/\(eval\)/$0/ && $@@ =~ s/line (\d+)/'line ' . ($1 + $evaloffset)/e;
	die $@@;
    }

    exit;
}
@


1.1
log
@Initial revision
@
text
@@


1.1.1.1
log
@Initial import of Perl 4.046 bmaked

@
text
@@


1.1.1.2
log
@recording cvs-1.6 file death
@
text
@@
