rdabst.pl -- read info-mac abstract file
s j moon
think at ut-emx.UUCP
Sat Nov 4 06:39:23 AEST 1989
Here is another small perl program.
It is useful if you access info-mac macintosh archieve.
This can display the title/content of abstract file.
ex: 00da-abstracts.abs
Sometimes the absract file is too long so I coded this program.
It displays title of each .hqx file or its content from abstract.
1: #### BINHEX abc-calculator.hqx ************
2: #### BINHEX about-finder.hqx **************
3: #### BINHEX aclock2.hqx *******************
4: #### BINHEX amortization.hqx **************
You can select any title by number and display its content.
type 'h' for help
q Quit.
c N Change default no. of lines(20)
m Change mode titles/contents(toggle)
<cr> List 20 lines from current pointer.
N change title pointer to title line N.
s j moon <think at emx.utexas.edu>
---------- cut here --------------
#!/usr/uns/perl
# It is not in /bin of my emx computer
#
# Name: rdabst.pl
# by Sungjin Moon think at emx.utexas.edu
# format: perl rdabst file
# or rdabst file if edbh is executable
# description: read info-mac abstract
$abstfile = shift;
die "Usage: rd file" unless $abstfile;
open(abstfile, "$abstfile") || die "Can't open $abstfile";
$mode = 1; # title mode
$cp = 1; # current pointer to content buffer
$tcp = 1; # current pointer to title buffer
$len = 20; # default length of display lines
$first = 1; # pointer to first text
$last = 0; # pointer to last text
$tlast= 0; # pointer to last title
# read in the file
while (<abstfile>) {
if(($buf[++$last] = $_) =~ /^\#\#\#\#/) {
$tbuf[++$tlast]=$buf[$last]; # header
$nbuf[$tlast]=$last; # line number of the header
}
}
close abstfile;
print "$last Lines Read In.\n";
print "Type h for help.\n";
do ED();
#
#
sub ED {
for (;;) {
print " rd -- ";
$cmd = <stdin>;
if ($cmd =~ /^q$/) {
exit 0;
}
if ($cmd =~ /^h$/) {
print "
q Quit.
c N Change default no. of lines(20)
m Change mode titles/contents(toggle)
<cr> List 20 lines from current pointer.
N change title pointer to title line N.
";
next;
}
if ($cmd =~ /^c (.*)/) {
$len = $1;
next;
}
if ($cmd =~ /^([0-9]+)$/) {
$tcp = $1;
$cp = $nbuf[$tcp];
$mode = 1;
next;
}
if ($cmd =~ /^m/) {
$mode = ! $mode;
next;
}
if ($cmd =~ /^$/) {
if($mode) { # diplay title
$k = ($tlast-$tcp)<$len ? ($tlast-$tcp) : $len;
for($i=$tcp;$i < $tcp+$k;$i++) {
print "$i:\t", $tbuf[$i];
}
$tcp += $k - 1;
$cp = $nbuf[$tcp];
}
else { # display content
$k = ($last-$cp)<$len ? ($last-$tcp) : $len;
for($i=$cp;$i < $cp+$k;$i++) {
print " ", $buf[$i];
if($buf[$i] =~ /^\#\#\#\#/) { $tmp = $i; }
}
# change current title pointer
for($i=1;$i < $tlast;$i++) {
if($nbuf[$i] == $tmp) { $tcp = $i; }
}
$cp += $k - 1;
}
next;
}
print "Syntax error: type h for help.\n";
} # end of for
} # end of sub ED
More information about the Alt.sources
mailing list