This is expand.c in view mode; [Download] [Up]
static char rcsid[] = "@(#)$Id: expand.c,v 5.3 1992/12/11 01:45:04 syd Exp $";
/*******************************************************************************
* The Elm Mail System - $Revision: 5.3 $ $State: Exp $
*
* Copyright (c) 1988-1992 USENET Community Trust
* Copyright (c) 1986,1987 Dave Taylor
*******************************************************************************
* Bug reports, patches, comments, suggestions should be sent to:
*
* Syd Weinstein, Elm Coordinator
* elm@DSI.COM dsinc!elm
*
*******************************************************************************
* $Log: expand.c,v $
* Revision 5.3 1992/12/11 01:45:04 syd
* remove sys/types.h include, it is now included by defs.h
* and this routine includes defs.h or indirectly includes defs.h
* From: Syd
*
* Revision 5.2 1992/12/07 04:48:15 syd
* add include of types.h to get time_t define
* From: Syd
*
* Revision 5.1 1992/10/03 22:41:36 syd
* Initial checkin as of 2.4 Release at PL0
*
*
******************************************************************************/
/** This is a library routine for the various utilities that allows
users to have the standard 'Elm' folder directory nomenclature
for all filenames (e.g. '+', '=' or '%'). It should be compiled
and then linked in as needed.
**/
#include <stdio.h>
#include "defs.h"
#include "s_elmrc.h"
extern nl_catd elm_msg_cat; /* message catalog */
char *expand_define();
int
expand(filename)
char *filename;
{
/** Expand the filename since the first character is a meta-
character that should expand to the "maildir" variable
in the users ".elmrc" file...
Note: this is a brute force way of getting the entry out
of the .elmrc file, and isn't recommended for the faint
of heart!
**/
FILE *rcfile;
char buffer[SLEN], *expanded_dir, *home, *bufptr;
int foundit = 0;
bufptr = (char *) buffer; /* same address */
if ((home = getenv("HOME")) == NULL) {
printf(catgets(elm_msg_cat, ElmrcSet, ElmrcExpandHome,
"Can't expand environment variable $HOME to find .elmrc file!\n"));
return(NO);
}
sprintf(buffer, "%s/%s", home, elmrcfile);
if ((rcfile = fopen(buffer, "r")) == NULL) {
printf(catgets(elm_msg_cat, ElmrcSet, ElmrcOpenElmrc,
"Can't open your \".elmrc\" file (%s) for reading!\n"),
buffer);
return(NO);
}
while (! foundit && mail_gets(buffer, SLEN, rcfile) != 0) {
if (strncmp(buffer, "maildir", 7) == 0 ||
strncmp(buffer, "folders", 7) == 0) {
while (*bufptr != '=' && *bufptr)
bufptr++;
bufptr++; /* skip the equals sign */
while (whitespace(*bufptr) && *bufptr)
bufptr++;
home = bufptr; /* remember this address */
while (! whitespace(*bufptr) && *bufptr != '\n')
bufptr++;
*bufptr = '\0'; /* remove trailing space */
foundit++;
}
}
fclose(rcfile); /* be nice... */
if (! foundit) {
/* Use default */
sprintf(buffer, "~/%s", default_folders);
home = buffer;
}
/** Home now points to the string containing your maildir, with
no leading or trailing white space...
**/
if ((expanded_dir = expand_define(home)) == NULL)
return(NO);
sprintf(buffer, "%s%s%s", expanded_dir,
(expanded_dir[strlen(expanded_dir)-1] == '/' ||
filename[0] == '/') ? "" : "/", (char *) filename+1);
strcpy(filename, buffer);
return(YES);
}
char *expand_define(maildir)
char *maildir;
{
/** This routine expands any occurances of "~" or "$var" in
the users definition of their maildir directory out of
their .elmrc file.
Again, another routine not for the weak of heart or staunch
of will!
**/
static char buffer[SLEN]; /* static buffer AIEE!! */
char name[SLEN], /* dynamic buffer!! (?) */
*nameptr, /* pointer to name?? */
*value; /* char pointer for munging */
if (*maildir == '~')
sprintf(buffer, "%s%s", getenv("HOME"), ++maildir);
else if (*maildir == '$') { /* shell variable */
/** break it into a single word - the variable name **/
strcpy(name, (char *) maildir + 1); /* hurl the '$' */
nameptr = (char *) name;
while (*nameptr != '/' && *nameptr) nameptr++;
*nameptr = '\0'; /* null terminate */
/** got word "name" for expansion **/
if ((value = getenv(name)) == NULL) {
printf(catgets(elm_msg_cat, ElmrcSet, ElmrcExpandShell,
"Couldn't expand shell variable $%s in .elmrc!\n"),
name);
return(NULL);
}
sprintf(buffer, "%s%s", value, maildir + strlen(name) + 1);
}
else strcpy(buffer, maildir);
return( ( char *) buffer);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.