- Reestructuración de ficheros y directorios general
- merge v0.01 --> Añadido fileselector - Añadidas fuentes de Gem y Pure Data - pix2jpg incluído en Gem. Archivos de construcción de Gem modificados. - Añadido fichero ompiling.txt con instrucciones de compilación
This commit is contained in:
parent
c9adfd020b
commit
e85d191b46
3100 changed files with 775434 additions and 3073 deletions
194
fileselector/fileselector.c
Normal file
194
fileselector/fileselector.c
Normal file
|
@ -0,0 +1,194 @@
|
|||
/* --------------------------------------------------------------------------*/
|
||||
/* */
|
||||
/* object for getting file listings using wildcard patterns */
|
||||
/* Written by Hans-Christoph Steiner <hans@eds.org> */
|
||||
/* */
|
||||
/* Copyright (c) 2006 Hans-Christoph Steiner */
|
||||
/* */
|
||||
/* This program is free software; you can redistribute it and/or */
|
||||
/* modify it under the terms of the GNU General Public License */
|
||||
/* as published by the Free Software Foundation; either version 3 */
|
||||
/* of the License, or (at your option) any later version. */
|
||||
/* */
|
||||
/* See file LICENSE for further informations on licensing terms. */
|
||||
/* */
|
||||
/* This program 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 General Public License for more details. */
|
||||
/* */
|
||||
/* You should have received a copy of the GNU General Public License */
|
||||
/* along with this program; if not, write to the Free Software Foundation, */
|
||||
/* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
/* */
|
||||
/* --------------------------------------------------------------------------*/
|
||||
|
||||
#include <m_pd.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#define _WIN32_WINNT 0x0400
|
||||
#include <windows.h>
|
||||
#else
|
||||
#include <stdlib.h>
|
||||
#include <glob.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
//static char *version = "$Revision: 0.01 $";
|
||||
|
||||
#define DEBUG(x)
|
||||
//#define DEBUG(x) x
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* CLASS DEF
|
||||
*/
|
||||
static t_class *fileselector_class;
|
||||
|
||||
typedef struct _fileselector {
|
||||
t_object x_obj;
|
||||
t_symbol* x_pattern;
|
||||
int x_folder;
|
||||
int x_file;
|
||||
int x_type;
|
||||
t_outlet *x_out;
|
||||
} t_fileselector;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* IMPLEMENTATION
|
||||
*/
|
||||
|
||||
static void fileselector_output(t_fileselector* x)
|
||||
{
|
||||
if (strlen(x->x_pattern->s_name) < 6)
|
||||
{
|
||||
post("fileselector: Set path first");
|
||||
return;
|
||||
}
|
||||
char path[FILENAME_MAX] = "";
|
||||
glob_t glob_buffer;
|
||||
unsigned int i;
|
||||
strncpy(path, x->x_pattern->s_name, FILENAME_MAX);
|
||||
if(sys_isabsolutepath(path)) {
|
||||
if(x->x_type < 25) // Make the path video
|
||||
{
|
||||
return;
|
||||
}
|
||||
if((x->x_type > 24) && (x->x_type<50)) // Make the path video
|
||||
{
|
||||
strncat(path,"/video/*",8);
|
||||
glob_t glob_video;
|
||||
switch(glob(path, GLOB_TILDE, NULL, &glob_video))
|
||||
{
|
||||
case GLOB_NOSPACE:
|
||||
pd_error(x,"[fileselector] out of memory for \"%s\"",path);
|
||||
break;
|
||||
# ifdef GLOB_ABORTED
|
||||
case GLOB_ABORTED:
|
||||
pd_error(x,"[fileselector] aborted \"%s\"",path);
|
||||
break;
|
||||
# endif
|
||||
# ifdef GLOB_NOMATCH
|
||||
case GLOB_NOMATCH:
|
||||
pd_error(x,"[fileselector] nothing found for %s ",path);
|
||||
break;
|
||||
# endif
|
||||
}
|
||||
i = x->x_folder;
|
||||
if (i < glob_video.gl_pathc)
|
||||
{
|
||||
strncpy(path, glob_video.gl_pathv[i],strnlen(glob_video.gl_pathv[i],FILENAME_MAX));
|
||||
strncat(path, "/*", 2);
|
||||
globfree(&glob_video);
|
||||
}
|
||||
else
|
||||
{
|
||||
post("fileselector: folder is greater than the number of folders");
|
||||
globfree(&glob_video);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if((x->x_type > 49) && (x->x_type<75)) // Make the path image
|
||||
{
|
||||
strncat(path,"/image/*",8);
|
||||
}
|
||||
if((x->x_type > 74) && (x->x_type<100)) // Make the path image
|
||||
{
|
||||
strncat(path,"/fonts/*",8);
|
||||
}
|
||||
switch(glob(path, GLOB_TILDE, NULL,&glob_buffer))
|
||||
{
|
||||
case GLOB_NOSPACE:
|
||||
pd_error(x,"[fileselector] out of memory for \"%s\"",path);
|
||||
break;
|
||||
# ifdef GLOB_ABORTED
|
||||
case GLOB_ABORTED:
|
||||
pd_error(x,"[fileselector] aborted \"%s\"",path);
|
||||
break;
|
||||
# endif
|
||||
# ifdef GLOB_NOMATCH
|
||||
case GLOB_NOMATCH:
|
||||
pd_error(x,"[fileselector] nothing found for \"%s\"",path);
|
||||
break;
|
||||
# endif
|
||||
}
|
||||
i = x->x_file;
|
||||
if (i < glob_buffer.gl_pathc)
|
||||
{
|
||||
outlet_symbol(x->x_out, gensym(glob_buffer.gl_pathv[i]));
|
||||
}
|
||||
}
|
||||
globfree( &(glob_buffer) );
|
||||
}
|
||||
|
||||
static void fileselector_set(t_fileselector* x, t_symbol *s)
|
||||
{
|
||||
x->x_pattern = s;
|
||||
}
|
||||
|
||||
static void fileselector_folder(t_fileselector* x, t_floatarg f)
|
||||
{
|
||||
x->x_folder = f;
|
||||
return;
|
||||
}
|
||||
|
||||
static void fileselector_file(t_fileselector* x, t_floatarg f)
|
||||
{
|
||||
x->x_file = f;
|
||||
return;
|
||||
}
|
||||
|
||||
static void fileselector_type(t_fileselector* x, t_floatarg f)
|
||||
{
|
||||
x->x_type = f;
|
||||
return;
|
||||
}
|
||||
|
||||
static void *fileselector_new()
|
||||
{
|
||||
t_fileselector *x = (t_fileselector *)pd_new(fileselector_class);
|
||||
x->x_out = outlet_new((t_object *)x, &s_symbol);
|
||||
x->x_folder = 0;
|
||||
x->x_file = 0;
|
||||
x->x_type = 0;
|
||||
x->x_pattern = gensym("empty");
|
||||
return (x);
|
||||
}
|
||||
|
||||
void fileselector_setup(void)
|
||||
{
|
||||
fileselector_class = class_new(gensym("fileselector"),(t_newmethod)fileselector_new,0,sizeof(t_fileselector),0,A_DEFSYMBOL,A_DEFFLOAT,A_DEFFLOAT,A_DEFFLOAT, 0);
|
||||
/* add inlet datatype methods */
|
||||
class_addbang(fileselector_class,(t_method) fileselector_output);
|
||||
// class_addsymbol(fileselector_class,(t_method) fileselector_symbol);
|
||||
/* add inlet message methods */
|
||||
class_addmethod(fileselector_class,(t_method)fileselector_set,gensym("set"),A_DEFSYMBOL, 0);
|
||||
// add inlet folder
|
||||
class_addmethod(fileselector_class,(t_method)fileselector_folder,gensym("folder"),A_FLOAT, 0);
|
||||
// add inlet file
|
||||
class_addmethod(fileselector_class,(t_method)fileselector_file,gensym("file"),A_FLOAT, 0);
|
||||
// add inlet type
|
||||
class_addmethod(fileselector_class,(t_method)fileselector_type,gensym("type"),A_FLOAT, 0);
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue