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.