Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 6 Jul 1998 13:42:12 GMT
From:      Udo.Schweigert@mchp.siemens.de
To:        FreeBSD-gnats-submit@FreeBSD.ORG
Subject:   ports/7186: New port: coolmail
Message-ID:  <199807061342.NAA14125@reims.mchp.siemens.de>

next in thread | raw e-mail | index | archive | help

>Number:         7186
>Category:       ports
>Synopsis:       New port: coolmail (xbiff clone)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports
>State:          open
>Quarter:
>Keywords:
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jul  6 06:50:01 PDT 1998
>Last-Modified:
>Originator:     Udo Schweigert
>Organization:
Siemens AG, ZT IK 3, Siemens CERT
>Release:        FreeBSD 2.2.6-STABLE i386
>Environment:

	none

>Description:

	New port: coolmail

>How-To-Repeat:

	none

>Fix:
	

# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#	coolmail
#	coolmail/files
#	coolmail/files/md5
#	coolmail/patches
#	coolmail/patches/patch-aa
#	coolmail/pkg
#	coolmail/pkg/COMMENT
#	coolmail/pkg/DESCR
#	coolmail/pkg/PLIST
#	coolmail/Makefile
#
echo c - coolmail
mkdir -p coolmail > /dev/null 2>&1
echo c - coolmail/files
mkdir -p coolmail/files > /dev/null 2>&1
echo x - coolmail/files/md5
sed 's/^X//' >coolmail/files/md5 << 'END-of-coolmail/files/md5'
XMD5 (coolmail-1.3.tgz) = ee355b05b3ebdb9bcf8e83eda63199df
END-of-coolmail/files/md5
echo c - coolmail/patches
mkdir -p coolmail/patches > /dev/null 2>&1
echo x - coolmail/patches/patch-aa
sed 's/^X//' >coolmail/patches/patch-aa << 'END-of-coolmail/patches/patch-aa'
Xdiff -rc coolmail-1.3.org/Makefile coolmail-1.3/Makefile
X*** coolmail-1.3.org/Makefile	Thu Jan 11 18:55:40 1996
X--- coolmail-1.3/Makefile	Fri Jul  3 09:02:25 1998
X***************
X*** 22,52 ****
X  # your linker where to find the libraries it will need, and BINDIR and
X  # MANDIR specify the places to install the binary executable and manpage
X  # files for coolmail when you type `make install'.
X! CFLAGS   = 
X  LINK     = $(CC)
X! INCLUDES = -I/usr/X11R5/include
X! LIB_DIRS = -L/usr/X11R5/lib
X  BINDIR   = /usr/local/bin
X  MANDIR   = /usr/local/man/man1
X  
X  # Comment these out if you can't or don't want to use the digitized audio
X  # feature.
X! AUDIO        = -DAUDIO
X! AUDIO_MODULE = audio.o
X  
X  #### You really don't need to read past this point. ####
X  
X  LIBS  = $(LIB_DIRS) -lXt -lX11 -lm -lXext
X! COPTS = $(CFLAGS) $(AUDIO)
X  
X  all: coolmail
X  	# Done.
X  
X! new:
X! 	rm -f *.o coolmail core
X  
X  clean:
X! 	rm -f *.o core
X  
X  install:
X  	@if [ -w $(BINDIR) ] ; then \
X--- 22,58 ----
X  # your linker where to find the libraries it will need, and BINDIR and
X  # MANDIR specify the places to install the binary executable and manpage
X  # files for coolmail when you type `make install'.
X! CFLAGS   = -DNO_CUSERID
X  LINK     = $(CC)
X! INCLUDES = -I/usr/X11R6/include
X! LIB_DIRS = -L/usr/X11R6/lib
X  BINDIR   = /usr/local/bin
X  MANDIR   = /usr/local/man/man1
X  
X  # Comment these out if you can't or don't want to use the digitized audio
X  # feature.
X! # AUDIO        = -DAUDIO
X! # AUDIO_MODULE = audio.o
X! 
X! # Comment these out if you don't want Maildir support
X! MAILDIR = -DSUPPORT_MAILDIR
X! # for debugging:
X! #MAILDIR = $(MAILDIR) -DSUPPORT_MAILDIR_DEBUG
X! # normally ignores non-regular files in the Maildir; uncomment to change
X! #MAILDIR = $(MAILDIR) -DSUPPORT_MAILDIR_STRICTER
X  
X  #### You really don't need to read past this point. ####
X  
X  LIBS  = $(LIB_DIRS) -lXt -lX11 -lm -lXext
X! COPTS = $(CFLAGS) $(AUDIO) $(MAILDIR)
X  
X  all: coolmail
X  	# Done.
X  
X! new: clean all
X  
X  clean:
X! 	rm -f *.o core coolmail
X  
X  install:
X  	@if [ -w $(BINDIR) ] ; then \
Xdiff -rc coolmail-1.3.org/audio.c coolmail-1.3/audio.c
X*** coolmail-1.3.org/audio.c	Thu Jan 11 18:56:40 1996
X--- coolmail-1.3/audio.c	Fri Jul  3 08:47:51 1998
X***************
X*** 128,133 ****
X--- 128,134 ----
X  	INIT_FD;
X  	audiofd = open( "/dev/audio", O_WRONLY | O_NDELAY ); 
X  	if (audiofd < 0) {
X+ 	        perror("/dev/audio");
X  		fprintf(stderr, "%s: Problem opening /dev/audio.\n",
X  				"Coolmail");
X  		END_FD;
Xdiff -rc coolmail-1.3.org/coolmail.c coolmail-1.3/coolmail.c
X*** coolmail-1.3.org/coolmail.c	Thu Jan 11 18:57:24 1996
X--- coolmail-1.3/coolmail.c	Fri Jul  3 09:01:05 1998
X***************
X*** 25,32 ****
X--- 25,34 ----
X  #include <sys/wait.h>
X  #include <sys/types.h>
X  #include <sys/stat.h>
X+ #include <dirent.h>
X  #include <fcntl.h>
X  
X+ 
X  #ifdef AUDIO
X  #include <string.h>
X  #endif
X***************
X*** 34,41 ****
X  #include "render1.h"
X  #include "mailbox.h"
X  
X! #define DEFAULT_MAIL_DIR  "/var/spool/mail/"
X! #define DEFAULT_COMMAND   "xterm -n Elm -e mail\0"
X  #define DEFAULT_INTERVAL  30
X  #define DEFAULT_FRAMES    15
X  
X--- 36,44 ----
X  #include "render1.h"
X  #include "mailbox.h"
X  
X! #define DEFAULT_MAIL_DIR  "/var/mail/"
X! 
X! #define DEFAULT_COMMAND   "xterm -n Elm -e elm\0"
X  #define DEFAULT_INTERVAL  30
X  #define DEFAULT_FRAMES    15
X  
X***************
X*** 96,102 ****
X--- 99,107 ----
X  int main(int argc, char *argv[])
X  {
X     int reason;
X+ #ifndef NO_CUSERID
X     char username[L_cuserid];
X+ #endif
X  
X     /* Quickly scan for the -h option -- if it is present don't do anything
X      * but print out some help and exit. */
X***************
X*** 104,110 ****
X        return(0);
X  
X     /* Get the username and use it to create a default mailfile name */
X!    strcat(mailfile_str, cuserid(username));
X  
X     /* Initialize the renderer */
X     rend_init(&argc, argv, (float)150.0);
X--- 109,126 ----
X        return(0);
X  
X     /* Get the username and use it to create a default mailfile name */
X! #ifdef SUPPORT_MAILDIR
X! 	if (getenv("MAILDIR") && strlen(getenv("MAILDIR"))) {
X! 		strcpy(mailfile_str,getenv("MAILDIR"));
X! 	} else if (getenv("MAIL") && strlen(getenv("MAIL"))) {
X!    	strcpy(mailfile_str,getenv("MAIL"));
X! 	} else
X! #endif
X! #ifndef NO_CUSERID
X!    	strcat(mailfile_str, cuserid(username));
X! #else
X!    	strcat(mailfile_str, getlogin());
X! #endif
X  
X     /* Initialize the renderer */
X     rend_init(&argc, argv, (float)150.0);
X***************
X*** 432,438 ****
X     printf("  -e command   Specifies a command (usually in quotes) which\n");
X     printf("               is used to invoke your favorite mail-reading\n");
X     printf("               program.\n\n");
X!    printf("  -f filename  Watch filename, instead of the default mail\n");
X     printf("               file, %s<username>.\n\n", DEFAULT_MAIL_DIR);
X     printf("  -fr n        Number of frames to generate for each animation.\n");
X     printf("               Set to an appropriate value for your machine's.\n");
X--- 448,454 ----
X     printf("  -e command   Specifies a command (usually in quotes) which\n");
X     printf("               is used to invoke your favorite mail-reading\n");
X     printf("               program.\n\n");
X!    printf("  -f filename  Watch filename/maildir, instead of the default mail\n");
X     printf("               file, %s<username>.\n\n", DEFAULT_MAIL_DIR);
X     printf("  -fr n        Number of frames to generate for each animation.\n");
X     printf("               Set to an appropriate value for your machine's.\n");
X***************
X*** 626,631 ****
X--- 642,680 ----
X  
X  /* Get file modification time */
X  
X+ 
X+ /* Maildir notes (aqua@sonoma.net, Sun Jan 18 19:42:27 PST 1998):
X+  *
X+  * The maildir mail-storage standard is a replacement for the traditional
X+  * 'mbox' format, intended to remove problems with file contention, locking,
X+  * reduce corruption in the case of a program or system crash, etc, etc.
X+  * Fairly detailed description of it can be had as part of the Qmail MTA
X+  * documentation, http://www.qmail.org/qmail-manual-html/man5/maildir.html.
X+  *
X+  * The general gist of the maildir approach is that mail is stored, one
X+  # message per file, in a subtree of ~/Maildir.  New mail goes in /new,
X+  * the "spool" goes in /cur, and /tmp is available to MUAs &c.  Mail is
X+  * theoretically supposed to be removed from /new immediately by the
X+  * MUA, but I've observed that with mutt 0.88, at least, it isn't if
X+  * the mailfile was generated by an import script (e.g. mbox2maildir)
X+  * rather than the normal delivery agent, presumably due to naming
X+  * differences.
X+  *
X+  * Checking for new mail mostly entails checking the mtime vs. atime of
X+  * every file in /new, and the number of messages in /new; if the latter
X+  * increases, new mail was delivered -- if not, but the files' atimes
X+  * are all later than their mtimes, the MUA read the /new spool.
X+  *
X+  * The specifications suggest skipping over every .file, but reading all
X+  * the others -- I've extended this to include skipping of all non-regular
X+  * files, which seemed to make sense -- define SUPPORT_MAILDIR_STRICTER to
X+  * override this behavior.
X+  *
X+  * This process is more resource-intensive than the old scheme of merely
X+  * calling stat() for a single file -- it's an O(n) rather than O(1)
X+  * operation.
X+  *
X+  */
X  void cool_get_inboxstatus(char *filename, int *anymail, int *unreadmail,
X                            int *newmail)
X  {
X***************
X*** 633,670 ****
X     off_t  newsize;
X     struct stat st;
X     int fd;
X  
X-    fd = open (filename, O_RDONLY, 0);
X-    if (fd < 0)
X-    {
X-       *anymail    = 0;
X-       *newmail    = 0;
X-       *unreadmail = 0;
X-       newsize = 0;
X-    }
X-    else
X-    {
X-       fstat(fd, &st);
X-       close(fd);
X-       newsize = st.st_size;
X- 
X-       if (newsize > 0)
X-          *anymail = 1;
X-       else
X-          *anymail = 0;
X- 
X-       if (st.st_mtime >= st.st_atime && newsize > 0)
X-          *unreadmail = 1;
X-       else
X-          *unreadmail = 0;
X  
X!       if (newsize > oldsize && *unreadmail)
X!          *newmail = 1;
X!       else
X!          *newmail = 0;
X!    }
X! 
X!    oldsize = newsize;
X  }
X  
X  /*---------------------------------------------------------------------------*/
X--- 682,800 ----
X     off_t  newsize;
X     struct stat st;
X     int fd;
X+ #ifdef SUPPORT_MAILDIR
X+    DIR *d;
X+    struct dirent *de;
X+    char maildir[256],mfn[256];
X+ #endif
X  
X  
X! #ifdef SUPPORT_MAILDIR_DEBUG
X!    printf("B anymail=%d, newmail=%d, unreadmail=%d, oldsize=%d, newsize=%d\n",
X!    	*anymail,*newmail,*unreadmail,oldsize,newsize);
X! #endif
X! #ifdef SUPPORT_MAILDIR
X!    if (stat(filename,&st)==-1) {
X!   	   *anymail = *newmail = *unreadmail = 0;
X!      	newsize = oldsize = 0;   
X!       perror(filename);
X!       return;
X!    }
X!    if (S_ISDIR(st.st_mode)) {
X!       /* likely a maildir */
X!    	strcpy(maildir,filename);
X! 	   if (maildir[strlen(maildir)-1]!='/')
X!    	  strcat(maildir,"/");
X! 	   strcat(maildir,"new");
X!    	if (stat(maildir,&st)==-1) {
X!       	perror(maildir);
X! 	      printf("%s is not a maildir (missing/inaccessible %s)\n",filename,maildir);
X!    	   *anymail = *newmail = *unreadmail = 0;
X!       	newsize = oldsize = 0;
X! 	      return;
X!    	}
X! 	   if (!S_ISDIR(st.st_mode)) {
X!    	   printf("%s is not a directory (mode %d)\n",maildir,st.st_mode);
X!       	*anymail = *newmail = *unreadmail = 0;
X! 	      newsize = oldsize = 0;
X!    	   return;
X! 	   }   
X! 	   d=opendir(maildir);
X! 	   newsize=0;
X!    	*unreadmail = 0;
X! 	   while ((de=readdir(d))) {
X!    	   if (de->d_name[0]=='.') /* dotfiles ignored per the maildir specs */
X!       	   continue;
X! 	      strcpy(mfn,maildir);
X!    	   if (mfn[strlen(mfn)-1]!='/')
X!       	  strcat(mfn,"/");
X! 	      strcat(mfn,de->d_name);
X!    	   if (stat(mfn,&st)==-1) {
X!       	  perror(mfn);
X! 	        continue;
X!    	   }
X! #ifndef SUPPORT_MAILDIR_STRICTER
X!       	if (S_ISREG(st.st_mode))
X! #endif
X!          	newsize++;
X! 	      if (st.st_mtime>=st.st_atime) {
X! #ifdef SUPPORT_MAILDIR_DEBUG
X!    	     printf("unread: %s mtime = %d, atime = %d\n",de->d_name,st.st_mtime,st.st_atime);
X! #endif
X! 	        *unreadmail = 1;
X!    	   }
X! 	   }
X! 	   closedir(d);
X! 	   if (newsize) {
X! 	     *anymail = 1;
X!    	  if (newsize>oldsize && *unreadmail)
X!       	 *newmail = 1;
X! 	     else
X!    	    *newmail = 0;
X! 	   } else {
X!    	  *anymail = *newmail = *unreadmail = 0;
X! 	     newsize = 0;
X! 	   }
X! #ifdef SUPPORT_MAILDIR_DEBUG
X!    	printf("A anymail=%d, newmail=%d, unreadmail=%d, oldsize=%d, newsize=%d\n",
X! 		  	*anymail,*newmail,*unreadmail,oldsize,newsize);
X! #endif
X! 	   oldsize=newsize;
X! 	} else {
X! #endif /* SUPPORT_MAILDIR */
X! 	   fd = open (filename, O_RDONLY, 0);
X!    	if (fd < 0)
X! 	   {
X!    	   *anymail    = 0;
X!       	*newmail    = 0;
X! 	      *unreadmail = 0;
X!    	   newsize = 0;
X! 	   }
X! 	   else
X! 	   {
X!    	   fstat(fd, &st);
X! 	      close(fd);
X!    	   newsize = st.st_size;
X! 
X! 	      if (newsize > 0)
X!    	      *anymail = 1;
X!       	else
X! 	         *anymail = 0;
X! 
X!    	   if (st.st_mtime >= st.st_atime && newsize > 0)
X!       	   *unreadmail = 1;
X! 	      else
X!    	      *unreadmail = 0;
X! 
X! 	      if (newsize > oldsize && *unreadmail)
X!    	      *newmail = 1;
X! 	      else
X!    	      *newmail = 0;
X! 	   }
X! #ifdef SUPPORT_MAILDIR
X! 	}
X! #endif
X! 	oldsize = newsize;	
X  }
X  
X  /*---------------------------------------------------------------------------*/
END-of-coolmail/patches/patch-aa
echo c - coolmail/pkg
mkdir -p coolmail/pkg > /dev/null 2>&1
echo x - coolmail/pkg/COMMENT
sed 's/^X//' >coolmail/pkg/COMMENT << 'END-of-coolmail/pkg/COMMENT'
XA Xbiff like mail tool with animated 3D graphics.
END-of-coolmail/pkg/COMMENT
echo x - coolmail/pkg/DESCR
sed 's/^X//' >coolmail/pkg/DESCR << 'END-of-coolmail/pkg/DESCR'
XCoolmail is like xbiff -- it watches your inbox mail file
Xand lets you know when you have mail.  But unlike xbiff, it can launch
Xyour favorite mail utility when you click on it, and it has cool
Xanimated 3D graphics.
END-of-coolmail/pkg/DESCR
echo x - coolmail/pkg/PLIST
sed 's/^X//' >coolmail/pkg/PLIST << 'END-of-coolmail/pkg/PLIST'
Xbin/coolmail
Xman/man1/coolmail.1.gz
Xman/cat1/coolmail.1.gz
END-of-coolmail/pkg/PLIST
echo x - coolmail/Makefile
sed 's/^X//' >coolmail/Makefile << 'END-of-coolmail/Makefile'
X# New ports collection makefile for:	coolmail
X# Version required:		1.3
X# Date created:			Mon  6 Jul 12:00:06 CEST 1998
X# Whom:				Udo Schweigert <Udo.Schweigert@mchp.siemens.de>
X#
X# $Id$
X#
X# DISTNAME/PKGNAME/CATEGORIES/MASTER_SITES/MASTER_SITE_SUBDIR/EXTRACT_SUFX/DISTFILES.
X
XDISTNAME=	coolmail-1.3
XCATEGORIES=	mail
XMASTER_SITES= ${MASTER_SITE_SUNSITE}
XMASTER_SITE_SUBDIR=system/mail/biffs
XEXTRACT_SUFX=   .tgz
X
XMAINTAINER=	Udo.Schweigert@mchp.siemens.de
X
XPATCH_STRIP=    -p1
X
XMAN1=		coolmail.1
X
X# NO_BUILD=	yes
X# NO_PACKAGE=	"Too many questions"
X# WRKSRC=		${WRKDIR}
X
Xdo-install:
X	${INSTALL_PROGRAM} ${WRKSRC}/coolmail ${PREFIX}/bin/coolmail
X	${INSTALL_MAN} ${WRKSRC}/coolmail.man ${PREFIX}/man/man1/coolmail.1;
X
Xpost-install:
X	strip ${PREFIX}/bin/coolmail
X
X.include <bsd.port.mk>
END-of-coolmail/Makefile
exit

>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-ports" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199807061342.NAA14125>