##---------------------------------------------------------------------------## ## File: ## $Id: mhrmm.pl,v 1.6 2001/09/17 16:10:35 ehood Exp $ ## Author: ## Earl Hood mhonarc@mhonarc.org ## Description: ## Rmm routine for MHonArc. ##---------------------------------------------------------------------------## ## MHonArc -- Internet mail-to-HTML converter ## Copyright (C) 1995-1999 Earl Hood, mhonarc@mhonarc.org ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA ## 02111-1307, USA ##---------------------------------------------------------------------------## package mhonarc; ##--------------------------------------------------------------------------- ## Function for removing messages. ## sub rmm { my(@numbers) = (); my($key, %Num2Index, $num, $i, $pg); local($_); ## Create list of messages to remove foreach (@_) { # range if (/^(\d+)-(\d+)$/) { push(@numbers, int($1) .. int($2)); next; } # single number if (/^\d+$/) { push(@numbers, int($_)); next; } # probably message-id push(@numbers, $_); } if ($#numbers < 0) { warn("Warning: No messages specified\n"); return 0; } ## Make hash to perform deletions foreach $key (keys %IndexNum) { $Num2Index{$IndexNum{$key}} = $key; } ## Set @MListOrder to flag next/prev messages to be updated. ## @TListOrder is already set since it is saved in db. @MListOrder = &sort_messages(); $i=0; foreach $key (@MListOrder) { $Index2MLoc{$key} = $i++; } ## Remove messages foreach $num (@numbers) { if (($key = $Num2Index{$num}) || ($key = $MsgId{$num})) { &delmsg($key); # Need to flag messages that link to deleted message so # they will be updated. foreach (@{$FollowOld{$index}}) { $Update{$IndexNum{$_}} = 1; } $Update{$IndexNum{$TListOrder[$Index2TLoc{$key}-1]}} = 1; $Update{$IndexNum{$TListOrder[$Index2TLoc{$key}+1]}} = 1; $Update{$IndexNum{$MListOrder[$Index2MLoc{$key}-1]}} = 1; $Update{$IndexNum{$MListOrder[$Index2MLoc{$key}+1]}} = 1; # Mark where index page updates start if ($MULTIIDX) { $pg = int($Index2MLoc{$key}/$IDXSIZE)+1; $IdxMinPg = $pg if ($pg < $IdxMinPg || $IdxMinPg < 0); $pg = int($Index2TLoc{$key}/$IDXSIZE)+1; $TIdxMinPg = $pg if ($pg < $TIdxMinPg || $TIdxMinPg < 0); } next; } # message not in archive warn qq/Warning: Message "$num" not in archive\n/; } ## Clear loc data; it will get recomputed @MListOrder = (); %Index2MLoc = (); write_pages(); 1; } ##---------------------------------------------------------------------------## 1;