#!/usr/bin/perl ## ---------------------------------------------------------------------- ## Debian GNU/Linux update-catalog version 0.2 ## ---------------------------------------------------------------------- ## Copyright (c) 2001-2004 Ardo van Rangelrooij ## ## This is free software; see the GNU General Public Licence version 2 ## or later for copying conditions. There is NO warranty. ## ---------------------------------------------------------------------- ## ---------------------------------------------------------------------- use strict; ## ---------------------------------------------------------------------- $0 =~ m|[^/]+$|; ## ---------------------------------------------------------------------- use vars qw( $name ); $name = $&; ## ---------------------------------------------------------------------- use vars qw( $add ); use vars qw( $backup ); use vars qw( $catalog ); use vars qw( @data ); use vars qw( $debug ); use vars qw( $entry ); use vars qw( $quiet ); use vars qw( $remove ); use vars qw( $super ); use vars qw( $template ); use vars qw( $type ); ## ---------------------------------------------------------------------- while ( $ARGV[0] =~ m/^--/ ) { $_ = shift( @ARGV ); last if $_ eq '--'; if ( $_ eq '--add' ) { $add = 1; } elsif ( $_ eq '--remove' ) { $remove = 1; } elsif ( $_ eq '--quiet' ) { $quiet = 1; } elsif ( $_ eq '--super' ) { $super = 1; } elsif ( $_ eq '--test' ) { $debug = 1; } elsif ( $_ eq '--help' ) { &help; exit -1; } elsif ( $_ eq '--version' ) { &help; exit -1; } else { print STDERR "$name: unknown option \`$_'\n"; &help; exit 1; } } ## ---------------------------------------------------------------------- if ( ! @ARGV ) { print STDERR "\n"; &help; exit 1; } ## ---------------------------------------------------------------------- if ( $add || $remove ) { if ( $super ) { $catalog = '/etc/sgml/catalog'; } else { $catalog = shift( @ARGV ); } } ## ---------------------------------------------------------------------- if ( ! @ARGV ) { print STDERR "\n"; &help; exit 1; } ## ---------------------------------------------------------------------- $entry = shift( @ARGV ); ## ---------------------------------------------------------------------- if ( @ARGV ) { print STDERR "$name: too many arguments\n"; &help; exit 1; } ## ---------------------------------------------------------------------- if ( $add == $remove ) { print "Huh? You have to use --add or --remove (not both).\n"; exit 1; } ## ---------------------------------------------------------------------- print STDERR "$name: test mode - catalog file will not be updated\n" if $debug && ! $quiet; ## ---------------------------------------------------------------------- if ( $add ) { print "Adding entry $entry to catalog $catalog...\n" unless $quiet; &read_catalog_without_entry; &add_entry; &write_catalog; } elsif ( $remove ) { print "Removing entry $entry from catalog $catalog...\n" unless $quiet; &read_catalog_without_entry; &write_catalog; } ## ---------------------------------------------------------------------- exit 0; ## ---------------------------------------------------------------------- sub read_catalog_without_entry { if ( -f $catalog ) { print "Reading catalog $catalog and removing entry $entry...\n" if $debug; open( CATALOG, "<$catalog" ) or die "cannot open catalog $catalog for reading: $!"; while ( ) { chop; push( @data, $_ ) unless m/$entry/; } close( CATALOG ); } else { $type = $super ? 'super' : 'centralized'; $template = "/usr/share/sgml-base/catalog.$type"; print "Reading template $template...\n" if $debug; open( TEMPLATE, "<$template" ) or die "cannot open template $template for reading: $!"; while (