[PD-cvs] externals/hcs folder_list-help.pd, 1.1, 1.2 folder_list.c, 1.1, 1.2

Hans-Christoph Steiner eighthave at users.sourceforge.net
Sun Mar 26 08:08:41 CEST 2006


Update of /cvsroot/pure-data/externals/hcs
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25799

Modified Files:
	folder_list-help.pd folder_list.c 
Log Message:
fully working version based on glob.h

Index: folder_list-help.pd
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/folder_list-help.pd,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** folder_list-help.pd	26 Mar 2006 06:02:23 -0000	1.1
--- folder_list-help.pd	26 Mar 2006 06:08:39 -0000	1.2
***************
*** 1,30 ****
! #N canvas 254 219 474 457 10;
! #X obj 100 214 print OUTPUT;
! #X msg 32 49 bang;
! #X msg 100 100 symbol /;
! #X text 69 48 immediate listing of current directory;
! #X text 160 99 immediate listing of /;
! #X text 180 133 set current dir without no output;
! #X obj 100 180 folder_list /var;
! #X obj 57 392 print OUTPUT;
! #X msg 56 328 bang;
! #X text 182 357 defaults to $HOME;
! #X msg 203 152 symbol /usr;
! #X obj 63 280 print ===================;
! #X msg 63 252 bang;
! #X obj 82 204 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
  -1;
! #X obj 40 377 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
  -1;
! #X obj 57 358 folder_list;
! #X symbolatom 73 79 10 0 0 0 - - -;
! #X connect 1 0 6 0;
! #X connect 2 0 6 0;
! #X connect 6 0 0 0;
! #X connect 6 0 13 0;
! #X connect 8 0 15 0;
! #X connect 10 0 6 1;
! #X connect 12 0 11 0;
! #X connect 15 0 7 0;
! #X connect 15 0 14 0;
! #X connect 16 0 6 0;
--- 1,30 ----
! #N canvas 254 219 494 477 10;
! #X msg 74 72 bang;
! #X msg 101 336 bang;
! #X text 227 365 defaults to $HOME;
! #X obj 124 227 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
  -1;
! #X obj 85 385 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
  -1;
! #X msg 235 178 symbol /usr/*;
! #X text 36 25 Get a listing of files based on a "glob" pattern.;
! #X text 110 74 list current directory;
! #X text 219 160 set pattern without no output;
! #X text 241 111 all files with a dot in your Home;
! #X obj 101 367 folder_list;
! #X obj 142 203 folder_list /*;
! #X obj 143 238 print;
! #X text 34 49 left/hot inlet gives immediate output using stored path
! ;
! #X text 38 279 For UNIX people \, [folder_list] behaves just like "ls
! -d1A";
! #X obj 102 400 print;
! #X msg 142 109 symbol ~/*.*;
! #X connect 0 0 11 0;
! #X connect 1 0 10 0;
! #X connect 5 0 11 1;
! #X connect 10 0 4 0;
! #X connect 10 0 15 0;
! #X connect 11 0 3 0;
! #X connect 11 0 12 0;
! #X connect 16 0 11 0;

Index: folder_list.c
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/folder_list.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** folder_list.c	26 Mar 2006 06:02:23 -0000	1.1
--- folder_list.c	26 Mar 2006 06:08:39 -0000	1.2
***************
*** 1,10 ****
  #include <m_pd.h>
- #include <unistd.h>
  #include <stdlib.h>
! #include <stdio.h>
! #include <dirent.h>
! #include <fnmatch.h>
! #include <string.h>
! #include <sys/stat.h>
  
  static char *version = "$Revision$";
--- 1,5 ----
  #include <m_pd.h>
  #include <stdlib.h>
! #include <glob.h>
  
  static char *version = "$Revision$";
***************
*** 20,26 ****
  typedef struct _folder_list {
  	t_object            x_obj;
- 	t_symbol            *x_folder_name;
  	t_symbol            *x_pattern;
! 	DIR                 *x_folder_pointer;
  } t_folder_list;
  
--- 15,20 ----
  typedef struct _folder_list {
  	t_object            x_obj;
  	t_symbol            *x_pattern;
! 	glob_t              x_glob;
  } t_folder_list;
  
***************
*** 30,73 ****
  
  
- static t_int folder_list_open(t_folder_list* x) 
- {
- 	DEBUG(post("folder_list_rewind"););
- 
- 	if((x->x_folder_pointer = opendir(x->x_folder_name->s_name)) == NULL) {
-         error("cannot open directory: %s\n", x->x_folder_name->s_name);
-         return(0);
-     }
- 	return(1);
- }
- 
- 
- static void folder_list_close(t_folder_list* x) 
- {
- 	DEBUG(post("folder_list_close"););
- 
- 	closedir(x->x_folder_pointer);
- }
- 
- /*
- static void folder_list_rewind(t_folder_list* x) 
- {
- 	DEBUG(post("folder_list_rewind"););
- 	rewinddir(x->x_folder_pointer);
- }
- */
- 
  static void folder_list_output(t_folder_list* x)
  {
  	DEBUG(post("folder_list_output"););
! 	struct dirent *entry;
  
! 	if( !folder_list_open(x) ) return;
!     while( ( entry = readdir( x->x_folder_pointer ) ) != NULL) 
  	{
! 		if( fnmatch( x->x_folder_name, entry->d_name, 0 ) )
! 			if( strcmp(entry->d_name, ".") && strcmp(entry->d_name, "..") ) 
! 				outlet_symbol(x->x_obj.ob_outlet, gensym(entry->d_name));
!     }
! 	folder_list_close(x);
  }
  
--- 24,44 ----
  
  
  static void folder_list_output(t_folder_list* x)
  {
  	DEBUG(post("folder_list_output"););
! 	t_int i;
  
! 	DEBUG(post("globbing %s",x->x_pattern->s_name););
! 	switch( glob( x->x_pattern->s_name, GLOB_TILDE, NULL, &(x->x_glob) ) )
  	{
! 	case GLOB_NOSPACE: 
! 		error("[folder_list] out of memory"); break;
! 	case GLOB_ABORTED: 
! 		error("[folder_list] aborted"); break;
! 	case GLOB_NOMATCH: 
! 		error("[folder_list] no match"); break;
! 	}
! 	for(i = 0; i < x->x_glob.gl_matchc; i++)
! 		outlet_symbol( x->x_obj.ob_outlet, gensym(x->x_glob.gl_pathv[i]) );
  }
  
***************
*** 75,79 ****
  static void folder_list_symbol(t_folder_list *x, t_symbol *s) 
  {
! 	x->x_folder_name = s;
  	folder_list_output(x);
  }
--- 46,50 ----
  static void folder_list_symbol(t_folder_list *x, t_symbol *s) 
  {
! 	x->x_pattern = s;
  	folder_list_output(x);
  }
***************
*** 83,87 ****
  {
  	DEBUG(post("folder_list_set"););
! 	x->x_folder_name = s;
  }
  
--- 54,58 ----
  {
  	DEBUG(post("folder_list_set"););
! 	x->x_pattern = s;
  }
  
***************
*** 91,94 ****
--- 62,66 ----
  	DEBUG(post("folder_list_free"););
  
+ 	globfree( &(x->x_glob) );
  }
  
***************
*** 101,114 ****
  	
  	post("[folder_list] %s, written by Hans-Christoph Steiner <hans at at.or.at>",version);  
! 	
! 	/* init vars */
! 	x->x_folder_name = gensym(getenv("HOME"));
  
!     symbolinlet_new(&x->x_obj, &x->x_folder_name);
  	outlet_new(&x->x_obj, &s_symbol);
  	
  	/* set to the value from the object argument, if that exists */
  	if (s != &s_)
! 		x->x_folder_name = s;
  	
  	return (x);
--- 73,85 ----
  	
  	post("[folder_list] %s, written by Hans-Christoph Steiner <hans at at.or.at>",version);  
! 	/* set HOME as default */
! 	x->x_pattern = gensym(getenv("HOME"));
  
!     symbolinlet_new(&x->x_obj, &x->x_pattern);
  	outlet_new(&x->x_obj, &s_symbol);
  	
  	/* set to the value from the object argument, if that exists */
  	if (s != &s_)
! 		x->x_pattern = s;
  	
  	return (x);
***************
*** 126,206 ****
  								  0);
  	/* add inlet datatype methods */
! //	class_addfloat(folder_list_class,(t_method) folder_list_float);
  	class_addbang(folder_list_class,(t_method) folder_list_output);
  	class_addsymbol(folder_list_class,(t_method) folder_list_symbol);
  	
  	/* add inlet message methods */
- /*	class_addmethod(folder_list_class, 
- 					(t_method) folder_list_rewind, 
- 					gensym("rewind"), 
- 					0);
  	class_addmethod(folder_list_class,(t_method) folder_list_set,gensym("set"), 
!   A_DEFSYM, 0);*/
! }
! 
! 
! 
! /*
!  * WINDOWS EXAMPLE
! http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnucmg/html/UCMGch09.asp
! 
! #include <windows.h>
! #include <stdio.h>
! 
! void ScanDir(char *dirname, int indent)
! {
!     BOOL            fFinished;
!     HANDLE          hList;
!     TCHAR           szDir[MAX_PATH+1];
!     TCHAR           szSubDir[MAX_PATH+1];
!     WIN32_FIND_DATA FileData;
! 
!     // Get the proper directory path
!     sprintf(szDir, "%s\\*", dirname);
! 
!     // Get the first file
!     hList = FindFirstFile(szDir, &FileData);
!     if (hList == INVALID_HANDLE_VALUE)
!     { 
!         printf("No files found\n\n");
!     }
!     else
!     {
!         // Traverse through the directory structure
!         fFinished = FALSE;
!         while (!fFinished)
!         {
!             // Check the object is a directory or not
!             if (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
!             {
!                 if ((strcmp(FileData.cFileName, ".") != 0) &&
! (strcmp(FileData.cFileName, "..") != 0))
!                 {
!                     printf("%*s%s\\\n", indent, "",
!                       FileData.cFileName);
! 
!                     // Get the full path for sub directory
!                     sprintf(szSubDir, "%s\\%s", dirname,
!                       FileData.cFileName);
! 
!                     ScanDir(szSubDir, indent + 4);
!                 }
!             }
!             else
!                 printf("%*s%s\n", indent, "", FileData.cFileName);
! 
! 
!             if (!FindNextFile(hList, &FileData))
!             {
!                 if (GetLastError() == ERROR_NO_MORE_FILES)
!                 {
!                     fFinished = TRUE;
!                 }
!             }
!         }
!     }
! 
!     FindClose(hList);
  }
  
- */
--- 97,107 ----
  								  0);
  	/* add inlet datatype methods */
! //	class_addfloat(folder_list_class,(t_method) glob_float);
  	class_addbang(folder_list_class,(t_method) folder_list_output);
  	class_addsymbol(folder_list_class,(t_method) folder_list_symbol);
  	
  	/* add inlet message methods */
  	class_addmethod(folder_list_class,(t_method) folder_list_set,gensym("set"), 
! 					A_DEFSYM, 0);
  }
  





More information about the Pd-cvs mailing list