#!/usr/pkg/bin/perl

# medit: lock and edit a Majordomo-managed file, then unlock when done.
#
# Copyright 1992, D. Brent Chapman.  All Rights Reserved.  For use by
# permission only.
#
# $Source: /sources/cvsrepos/majordomo/medit,v $
# $Revision: 1.10 $
# $Date: 1997/04/28 18:38:05 $
# $Author: cwilson $
# $State: Exp $
#
# $Locker:  $

# set our path explicitly
$ENV{'PATH'} = "/bin:/usr/bin:/usr/ucb";

# Read and execute the .cf file. Let the environment variable win
$cf = "/etc/majordomo.cf";
if ($ARGV[0] eq "-C") {
    $cf = $ARGV[1];
    shift(@ARGV); 
    shift(@ARGV); 
}

if ($ENV{"MAJORDOMO_CF"}) {
        $cf = $ENV{"MAJORDOMO_CF"};
}

if (! -r $cf) {
    die("$cf not readable; stopped");
}
require "$cf";

# All these should be in the standard PERL library
unshift(@INC, $bindir);
unshift(@INC, $homedir);
require "shlock.pl";		# NNTP-style file locking
require "majordomo.pl";

# Here's where the fun begins...

(defined($listdir) && chdir "$listdir") 
    || die("can't access \$listdir $listdir");


$editor = $ENV{"EDITOR"} || "vi";

foreach (@ARGV) {
    $lockfile = $_;
    $lockfile =~ s,([^/]*)$,L.$1,;
    $shlock'waittime = 5;
    for ($tries = 0 ; $tries < 60 ; $tries++) {
	if (&set_lock($lockfile)) {
	    # got the lock
	    system("$editor $_");
	    &free_lock($lockfile);
	    last;
	} else {
	    print "Waiting for lock on $_...\n";
	}
    }
    if ($tries > 60) {
	print "Giving up on lock for $_...\n";
    }
}
