+char as3_schedule_directory(const char*dirname)
+{
+ DEBUG printf("[pass %d] schedule directory %s\n", as3_pass, dirname);
+ char ok=0;
+#ifdef HAVE_DIRENT_H
+ include_dir_t*i = current_include_dirs;
+ while(i) {
+ char*fulldirname = concat_paths(i->path, dirname);
+ DEBUG printf("[pass %d] ... %s\n", as3_pass, fulldirname);
+ DIR*dir = opendir(fulldirname);
+ if(dir) {
+ ok = 1;
+ struct dirent*ent;
+ while(1) {
+ ent = readdir(dir);
+ if (!ent)
+ break;
+ char*name = ent->d_name;
+ char type = 0;
+ if(!name) continue;
+ int l=strlen(name);
+ if(l<4)
+ continue;
+ if(strncasecmp(&name[l-3], ".as", 3))
+ continue;
+ char*fullfilename = concatPaths(fulldirname, name);
+ as3_schedule_file(name, fullfilename);
+ free(fullfilename);
+ }
+ }
+ free(fulldirname);
+ i = i->next;
+ }
+#endif
+ return ok;
+}
+
+void as3_schedule_package(const char*package)
+{
+ DEBUG printf("[pass %d] schedule package %s\n", as3_pass, package);
+ char*dirname = strdup(package);
+ int s=0;
+ while(dirname[s]) {
+ if(dirname[s]=='.')
+ dirname[s] = path_seperator;
+ s++;
+ };
+ if(!as3_schedule_directory(dirname))
+ as3_softwarning("Could not find package %s in file system", package);
+}
+
+static void schedule_class(const char*package, const char*cls, char error)
+{
+ if(error) {
+ DEBUG printf("[pass %d] schedule class %s.%s\n", as3_pass, package, cls);
+ }
+ if(!cls) {
+ as3_schedule_package(package);
+ return;
+ }
+ int l1 = package?strlen(package):0;
+ int l2 = cls?strlen(cls):0;
+ char*filename = malloc(l1+l2+5);
+ int s=0,t=0;
+ while(package[s]) {
+ if(package[s]=='.')
+ filename[t++]='/';
+ else
+ filename[t++] = package[s];
+ s++;
+ }
+ if(t)
+ filename[t++] = '/';
+
+ strcpy(filename+t, cls);
+ strcpy(filename+t+l2, ".as");
+ char*f=find_file(filename, error);
+ if(!f) {
+ int i;
+ filename = filename_to_lowercase(filename);
+ f=find_file(filename, error);
+ }
+ if(!f) {
+ if(error) {
+ strcpy(filename+t, cls);
+ strcpy(filename+t+l2, ".as");
+ as3_warning("Could not open file %s", filename);
+ }
+ return;
+ }
+ as3_schedule_file(filename, f);
+}
+
+void as3_schedule_class(const char*package, const char*cls)
+{
+ schedule_class(package, cls, 1);
+}
+
+void as3_schedule_class_noerror(const char*package, const char*cls)
+{
+ if(config_recurse) {
+ schedule_class(package, cls, 0);
+ }
+}
+
+