// // "$Id: filename_expand.cxx,v 1.3 1998/10/21 14:20:39 mike Exp $" // // Filename expansion routines for the Fast Light Tool Kit (FLTK). // // Copyright 1998 by Bill Spitzak and others. // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library 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 // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. // // Please report all bugs and problems to "fltk-bugs@easysw.com". // /* expand a file name by substuting environment variables and home directories. Returns true if any changes were made. to & from may be the same buffer. */ #include #include #include #ifdef WIN32 #else # include # include #endif #if defined(WIN32) || defined(__EMX__) static inline int isdirsep(char c) {return c=='/' || c=='\\';} #else #define isdirsep(c) ((c)=='/') #endif int filename_expand(char *to,const char *from) { char temp[FL_PATH_MAX]; strcpy(temp,from); const char *start = temp; const char *end = temp+strlen(temp); int ret = 0; for (char *a=temp; apw_dir; #endif } break; case '$': /* an environment variable */ {char t = *e; *(char *)e = 0; value = getenv(a+1); *(char *)e = t;} break; } if (value) { // substitutions that start with slash delete everything before them: if (isdirsep(value[0])) start = a; #if defined(WIN32) || defined(__EMX__) // also if it starts with "A:" if (value[0] && value[1]==':') start = a; #endif int t = strlen(value); if (isdirsep(value[t-1])) t--; memmove(a+t, e, end+1-e); end = a+t+(end-e); memcpy(a, value, t); ret++; } else { a = e+1; #if defined(WIN32) || defined(__EMX__) if (*e == '\\') {*e = '/'; ret++;} // ha ha! #endif } } strcpy(to,start); return ret; } // // End of "$Id: filename_expand.cxx,v 1.3 1998/10/21 14:20:39 mike Exp $". //