|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T e
Length: 4125 (0x101d) Types: TextFile Names: »expand.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit └─⟦4fd8323b9⟧ »EurOpenD3/mail/elm2.3.tar.Z« └─⟦698c4f91f⟧ └─⟦this⟧ »utils/expand.c«
static char rcsid[] = "@(#)$Id: expand.c,v 4.1 90/04/28 22:44:37 syd Exp $"; /******************************************************************************* * The Elm Mail System - $Revision: 4.1 $ $State: Exp $ * * Copyright (c) 1986, 1987 Dave Taylor * Copyright (c) 1988, 1989, 1990 USENET Community Trust ******************************************************************************* * Bug reports, patches, comments, suggestions should be sent to: * * Syd Weinstein, Elm Coordinator * elm@DSI.COM dsinc!elm * ******************************************************************************* * $Log: expand.c,v $ * Revision 4.1 90/04/28 22:44:37 syd * checkin of Elm 2.3 as of Release 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" 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, *getenv(), *bufptr; int foundit = 0; bufptr = (char *) buffer; /* same address */ if ((home = getenv("HOME")) == NULL) { printf( "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("Can't open your \".elmrc\" file (%s) for reading!\n", buffer); return(NO); } while (fgets(buffer, SLEN, rcfile) != NULL && ! foundit) { 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) { printf("Couldn't find \"maildir\" in your .elmrc file!\n"); return(NO); } /** 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("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); }