mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	1998-05-08 21:56 Zack Weinberg <zack@rabi.phys.columbia.edu> * autolock.sh: Removed. * manual/move-if-change: Removed. * scripts: new directory. * =__ify: moved to scripts. * config.guess: Likewise. * config.sub: Likewise. * gen-FAQ.pl: Likewise. * install-sh: Likewise. * mkinstalldirs: Likewise. * move-if-change: Likewise. * printsources: Likewise. * rellns.sh: Likewise. * test-installation.pl: Likewise. * configure.in: Look in scripts for config.guess, config.sub, install-sh. * Makefile: Distribute all above files in their new home. Find gen-FAQ.pl and test-installation.pl in scripts. * manual/Makefile: Find mkinstalldirs and move-if-change in $(..)scripts. Drop them from distribute. Minor cleanups. * Makerules: Find mkinstalldirs and rellns-sh in scripts. * sysdeps/mach/hurd/Makefile: Find move-if-change in scripts. * timezone/Makefile: Find rellns-sh in scripts.
		
			
				
	
	
		
			145 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
#! /usr/bin/perl
 | 
						|
 | 
						|
=pod
 | 
						|
This is a silly little program for generating the libc FAQ.
 | 
						|
 | 
						|
The input format is:
 | 
						|
top boilerplate
 | 
						|
^L
 | 
						|
? section name (one line)
 | 
						|
?? question...
 | 
						|
...
 | 
						|
{ID} answer...
 | 
						|
...
 | 
						|
^L
 | 
						|
{ID} name <email@address>
 | 
						|
...
 | 
						|
 | 
						|
which gets mapped to:
 | 
						|
 | 
						|
top boilerplate
 | 
						|
^L
 | 
						|
1. section 1...
 | 
						|
1.1. q1.1
 | 
						|
1.2. q1.2
 | 
						|
...
 | 
						|
^L
 | 
						|
1. section 1...
 | 
						|
 | 
						|
1.1. q1.1
 | 
						|
 | 
						|
answer 1.1....
 | 
						|
 | 
						|
 | 
						|
^L
 | 
						|
Answers were provided by:
 | 
						|
...
 | 
						|
 | 
						|
=cut
 | 
						|
 | 
						|
# We slurp the whole file into a pair of assoc arrays indexed by
 | 
						|
# the 'section.question' number.
 | 
						|
%questions = ();
 | 
						|
%answers = ();
 | 
						|
$question = 0;
 | 
						|
 | 
						|
# These arrays and counter keep track of the sections.
 | 
						|
@sectcount = ();
 | 
						|
@sections = ();
 | 
						|
$section = 0;
 | 
						|
 | 
						|
# Cross reference list.
 | 
						|
%refs = ();
 | 
						|
 | 
						|
# Separators.
 | 
						|
$sepmaj = "\f\n" . ('~ ' x 36) . "\n\n";
 | 
						|
$sepmin = "\f\n" . ('. ' x 36) . "\n\n";
 | 
						|
 | 
						|
# Pass through the top boilerplate.
 | 
						|
while(<>)
 | 
						|
{
 | 
						|
    last if $_ eq "\f\n";
 | 
						|
    print;
 | 
						|
}
 | 
						|
 | 
						|
# Now the body.
 | 
						|
while(<>)
 | 
						|
{
 | 
						|
    /\f/ && do
 | 
						|
    {
 | 
						|
	$sectcount[$section] = $question;
 | 
						|
	last;
 | 
						|
    };
 | 
						|
 | 
						|
    s/^\?\s+// && do
 | 
						|
    {
 | 
						|
	chomp;
 | 
						|
	$sectcount[$section] = $question if $section > 0;
 | 
						|
	$section++;
 | 
						|
	$sections[$section] = $_;
 | 
						|
	$question = 0;
 | 
						|
	next;
 | 
						|
    };
 | 
						|
    s/^\?\?(\w*?)\s+// && do
 | 
						|
    {
 | 
						|
	$cur = \%questions;
 | 
						|
	$question++;
 | 
						|
	$questions{$section,$question} = $_;
 | 
						|
	$refs{$1} = "$section.$question" if $1 ne "";
 | 
						|
	next;
 | 
						|
    };
 | 
						|
    /^\{/ && do
 | 
						|
    {
 | 
						|
	$cur = \%answers;
 | 
						|
	$answers{$section,$question} .= $_;
 | 
						|
	next;
 | 
						|
    };
 | 
						|
 | 
						|
    ${$cur}{$section,$question} .= $_;
 | 
						|
}
 | 
						|
 | 
						|
# Now we have to clean up the newlines and deal with cross references.
 | 
						|
foreach(keys %questions) { $questions{$_} =~ s/\n+$//; }
 | 
						|
foreach(keys %answers)
 | 
						|
{
 | 
						|
    $answers{$_} =~ s/\n+$//;
 | 
						|
    $answers{$_} =~ s/(\s)\?(\w+)\b/$1 . "question " . ($refs{$2} or badref($2,$_), "!!$2")/eg;
 | 
						|
}
 | 
						|
 | 
						|
# Now output the formatted FAQ.
 | 
						|
print $sepmaj;
 | 
						|
for($i = 1; $i <= $section; $i++)
 | 
						|
{
 | 
						|
    print "$i. $sections[$i]\n\n";
 | 
						|
    for($j = 1; $j <= $sectcount[$i]; $j++)
 | 
						|
    {
 | 
						|
	print "$i.$j.\t$questions{$i,$j}\n";
 | 
						|
    }
 | 
						|
    print "\n";
 | 
						|
}
 | 
						|
 | 
						|
print $sepmaj;
 | 
						|
for($i = 1; $i <= $section; $i++)
 | 
						|
{
 | 
						|
    print "$i. $sections[$i]\n\n";
 | 
						|
    for($j = 1; $j <= $sectcount[$i]; $j++)
 | 
						|
    {
 | 
						|
	print "$i.$j.\t$questions{$i,$j}\n\n";
 | 
						|
	print $answers{$i,$j}, "\n\n";
 | 
						|
	print "\n" if $j < $sectcount[$i];
 | 
						|
    }
 | 
						|
    print $sepmin if $i < $section;
 | 
						|
}
 | 
						|
 | 
						|
print $sepmaj;
 | 
						|
 | 
						|
# Pass through the trailer.
 | 
						|
while(<>) { print; }
 | 
						|
 | 
						|
sub badref
 | 
						|
{
 | 
						|
    my($ref,$quest) = @_;
 | 
						|
    $quest =~ s/$;/./;
 | 
						|
    print STDERR "Undefined reference to $ref in answer to Q$quest\n";
 | 
						|
}
 |