Current Path : /usr/share/defoma/ |
Current File : //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;