| Current Path : /proc/8644/root/proc/8644/task/8644/root/usr/share/defoma/ | 
| Current File : //proc/8644/root/proc/8644/task/8644/root/usr/share/defoma/libdefoma-subst.pl | 
sub com_subst_edit_rule {
    usage_and_exit if (@ARGV == 0);
    my $rulename = shift(@ARGV);
    mylock(1);
    init_all();
    my $sb = defoma_subst_open(rulename => $rulename);
    unless ($sb) {
	printw("Cannot open $rulename");
	term_all();
	mylock(0);
	exit ERROR;
    }
    my $rulefile = $sb->{rulefile};
    unless (-f $rulefile) {
	printw("No rulefile is found for $rulename");
	term_all();
	mylock(0);
	exit ERROR;
    }
    
    my $newfile = `/bin/tempfile`;
    chomp($newfile);
    
    copy($rulefile, $newfile);
    system('/usr/bin/sensible-editor', $newfile);
    my @new = ();
    if (open(F, $newfile)) {
	while (<F>) {
	    chomp($_);
	    push(@new, $_) if ($_ ne '' && $_ !~ /^\#/);
	}
	my ($i, $j);
	my $max = $sb->{rule_cnt};
	for ($i = 0; $i < $max; $i++) {
	    $j = $sb->{rule}->[$i];
	    next if ($j eq '' || $j =~ /^\#/);
	    unless (grep($_ eq $j, @new)) {
		defoma_subst_remove_rule_by_num($sb, $i);
	    }
	}
	foreach $i (@new) {
	    unless (grep($_ eq $i, @{$sb->{rule}})) {
		defoma_subst_add_rule($sb, split(' ', $i));
	    }
	}
    }
    defoma_subst_close($sb);
    term_all();
    copy($newfile, $rulefile);
    unlink($newfile, $newfile.'~');
    mylock(0);
    exit 0;
}
sub com_subst_add_rule {
    usage_and_exit if (@ARGV <= 1);
    my $rulename = shift(@ARGV);
    mylock(1);
    init_all();
    my $sb = defoma_subst_open(rulename => $rulename);
    unless ($sb) {
	printw("Cannot open $rulename");
	term_all();
	mylock(0);
	exit ERROR;
    }
    my $rulefile = $sb->{rulefile};
    unless (-f $rulefile) {
	printw("No rulefile is found for $rulename");
	term_all();
	mylock(0);
	exit ERROR;
    }
    foreach my $i (@ARGV) {
	my @rule = split(/[ \t]+/, $i);
	my $rulestr = join(' ', @rule);
	unless (grep($_ eq $rulestr, @{$sb->{rule}})) {
	    defoma_subst_add_rule($sb, @rule);
	}
    }
    defoma_subst_close($sb);
    term_all();
    mylock(0);
    exit 0;
}
sub com_subst_remove_rule {
    usage_and_exit if (@ARGV <= 1);
    my $rulename = shift(@ARGV);
    mylock(1);
    init_all();
    my $sb = defoma_subst_open(rulename => $rulename);
    unless ($sb) {
	printw("Cannot open $rulename");
	term_all();
	mylock(0);
	exit ERROR;
    }
    my $rulefile = $sb->{rulefile};
    unless (-f $rulefile) {
	printw("No rulefile is found for $rulename");
	term_all();
	mylock(0);
	exit ERROR;
    }
    foreach my $i (@ARGV) {
	my @rule = split(/[ \t]+/, $i);
	defoma_subst_remove_rule($sb, @rule);
    }
    defoma_subst_close($sb);
    term_all();
    mylock(0);
    exit 0;
}
sub com_subst_new_rule {
    usage_and_exit if (@ARGV == 0);
    
    my $rulename = shift(@ARGV);
    my $rulefile = SUBSTRULEDIR . '/' . $rulename . '.subst-rule';
    defoma_subst_newrule($rulefile, $rulename, @ARGV);
    exit 0;
}
sub com_subst_check_rule {
    usage_and_exit if (@ARGV == 0);
    my $rulename = shift(@ARGV);
    my $rulefile = SUBSTRULEDIR . '/' . $rulename . '.subst-rule';
    if (-f $rulefile) {
	exit 0;
    } else {
	exit 1;
    }
}
sub main {
    my $command = shift;
    
    if ($command eq 'new-rule') {
	com_subst_new_rule();
    } elsif ($command eq 'edit-rule') {
	com_subst_edit_rule();
    } elsif ($command eq 'add-rule') {
	com_subst_add_rule();
    } elsif ($command eq 'remove-rule') {
	com_subst_remove_rule();
    } elsif ($command eq 'check-rule') {
	com_subst_check_rule();
    }
}
1;