char cvsroot_include_c[] = "$Id: include.c 11080 2009-01-24 13:15:51Z bhy $";
#include "swig.h"
static List *directories = 0;
static String *lastpath = 0;
static List *pdirectories = 0;
static int dopush = 1;
void Swig_set_push_dir(int push) {
dopush = push;
}
int Swig_get_push_dir(void) {
return dopush;
}
List *Swig_add_directory(const_String_or_char_ptr dirname) {
String *adirname;
if (!directories)
directories = NewList();
assert(directories);
if (dirname) {
adirname = NewString(dirname);
Append(directories,adirname);
Delete(adirname);
}
return directories;
}
void Swig_push_directory(const_String_or_char_ptr dirname) {
String *pdirname;
if (!Swig_get_push_dir())
return;
if (!pdirectories)
pdirectories = NewList();
assert(pdirectories);
pdirname = NewString(dirname);
assert(pdirname);
Insert(pdirectories,0,pdirname);
Delete(pdirname);
}
void Swig_pop_directory(void) {
if (!Swig_get_push_dir())
return;
if (!pdirectories)
return;
Delitem(pdirectories, 0);
}
String *Swig_last_file(void) {
assert(lastpath);
return lastpath;
}
static List *Swig_search_path_any(int syspath) {
String *filename;
List *slist;
int i, ilen;
slist = NewList();
assert(slist);
filename = NewStringEmpty();
assert(filename);
#ifdef MACSWIG
Printf(filename, "%s", SWIG_FILE_DELIMITER);
#else
Printf(filename, ".%s", SWIG_FILE_DELIMITER);
#endif
Append(slist, filename);
Delete(filename);
if (pdirectories) {
ilen = Len(pdirectories);
for (i = 0; i < ilen; i++) {
filename = NewString(Getitem(pdirectories,i));
Append(filename,SWIG_FILE_DELIMITER);
Append(slist,filename);
Delete(filename);
}
}
ilen = Len(directories);
for (i = 0; i < ilen; i++) {
filename = NewString(Getitem(directories,i));
Append(filename,SWIG_FILE_DELIMITER);
if (syspath) {
Insert(slist,i,filename);
} else {
Append(slist,filename);
}
Delete(filename);
}
return slist;
}
List *Swig_search_path() {
return Swig_search_path_any(0);
}
static FILE *Swig_open_file(const_String_or_char_ptr name, int sysfile, int use_include_path) {
FILE *f;
String *filename;
List *spath = 0;
char *cname;
int i, ilen;
if (!directories)
directories = NewList();
assert(directories);
cname = Char(name);
filename = NewString(cname);
assert(filename);
f = fopen(Char(filename), "r");
if (!f && use_include_path) {
spath = Swig_search_path_any(sysfile);
ilen = Len(spath);
for (i = 0; i < ilen; i++) {
Clear(filename);
Printf(filename, "%s%s", Getitem(spath, i), cname);
f = fopen(Char(filename), "r");
if (f)
break;
}
Delete(spath);
}
if (f) {
Delete(lastpath);
lastpath = Swig_filename_escape(filename);
}
Delete(filename);
return f;
}
FILE *Swig_include_open(const_String_or_char_ptr name) {
return Swig_open_file(name, 0, 1);
}
FILE *Swig_open(const_String_or_char_ptr name) {
return Swig_open_file(name, 0, 0);
}
String *Swig_read_file(FILE *f) {
int len;
char buffer[4096];
String *str = NewStringEmpty();
assert(str);
while (fgets(buffer, 4095, f)) {
Append(str, buffer);
}
len = Len(str);
if (len) {
char *cstr = Char(str);
if (cstr[len - 1] != '\n') {
Append(str, "\n");
}
}
return str;
}
static String *Swig_include_any(const_String_or_char_ptr name, int sysfile) {
FILE *f;
String *str;
String *file;
f = Swig_open_file(name, sysfile, 1);
if (!f)
return 0;
str = Swig_read_file(f);
fclose(f);
Seek(str, 0, SEEK_SET);
file = Copy(lastpath);
Setfile(str, file);
Delete(file);
Setline(str, 1);
return str;
}
String *Swig_include(const_String_or_char_ptr name) {
return Swig_include_any(name, 0);
}
String *Swig_include_sys(const_String_or_char_ptr name) {
return Swig_include_any(name, 1);
}
int Swig_insert_file(const_String_or_char_ptr filename, File *outfile) {
char buffer[4096];
int nbytes;
FILE *f = Swig_include_open(filename);
if (!f)
return -1;
while ((nbytes = Read(f, buffer, 4096)) > 0) {
Write(outfile, buffer, nbytes);
}
return 0;
}
static Hash *named_files = 0;
void Swig_register_filebyname(const_String_or_char_ptr filename, File *outfile) {
if (!named_files)
named_files = NewHash();
Setattr(named_files, filename, outfile);
}
File *Swig_filebyname(const_String_or_char_ptr filename) {
if (!named_files)
return 0;
return Getattr(named_files, filename);
}
char *Swig_file_suffix(const_String_or_char_ptr filename) {
char *d;
char *c = Char(filename);
int len = Len(filename);
if (strlen(c)) {
d = c + len - 1;
while (d != c) {
if (*d == '.')
return d;
d--;
}
return c + len;
}
return c;
}
char *Swig_file_basename(const_String_or_char_ptr filename) {
static char tmp[1024];
char *c;
strcpy(tmp, Char(filename));
c = Swig_file_suffix(tmp);
*c = 0;
return tmp;
}
char *Swig_file_filename(const_String_or_char_ptr filename) {
static char tmp[1024];
const char *delim = SWIG_FILE_DELIMITER;
char *c;
strcpy(tmp, Char(filename));
c = strrchr(tmp, *delim);
if (c)
return c + 1;
else
return tmp;
}
char *Swig_file_dirname(const_String_or_char_ptr filename) {
static char tmp[1024];
const char *delim = SWIG_FILE_DELIMITER;
char *c;
strcpy(tmp, Char(filename));
if (!strstr(tmp, delim)) {
return "";
}
c = tmp + strlen(tmp) - 1;
while (*c != *delim)
c--;
*(++c) = 0;
return tmp;
}