[PD-cvs] externals/loaders Makefile, NONE, 1.1 TODO, NONE, 1.1 libdir.c, NONE, 1.1

Hans-Christoph Steiner eighthave at users.sourceforge.net
Mon Nov 20 01:51:32 CET 2006


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

Added Files:
	Makefile TODO libdir.c 
Log Message:
first functional example, it worked in the test at least, time to test some more

--- NEW FILE: Makefile ---
TARGET := $(shell pwd | sed 's|.*/\(.*\)$$|\1|')
EXTERNALS_ROOT := $(shell pwd | sed 's|^\(/.*externals\).*|\1|')

default: 
	make -C $(EXTERNALS_ROOT) $(TARGET)

install:
	make -C $(EXTERNALS_ROOT) $(TARGET)_install

clean:
	make -C $(EXTERNALS_ROOT) $(TARGET)_clean

test_locations:
	make -C $(EXTERNALS_ROOT) test_locations

etags:
	etags *.[ch] ~/cvs/pure-data/pd/src/*.[ch] /usr/include/*.h /usr/include/sys/*.h

--- NEW FILE: libdir.c ---
#include "m_pd.h"
#include "s_stuff.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>

static char *version = "$Revision: 1.1 $";

/* This loader opens a directory as a library.  In the long run, the idea is
 * that one folder will have all of objects files, all of the related
 * *-help.pd files, a file with meta data for the help system, etc.  Then to
 * install the lib, it would just be dropped into extra, or the path anywhere.
 *
 * Ultimately, the meta file will be read for meta data, specifically for
 * the auto-generated Help system, but for other things too.  Right now,
 * its just used as a marker that a directory is meant to be a library.
 * Plus its much easier to implement it this way, I can use
 * open_via_path() instead of writing a new function.  The grand plan is
 * to have one directory hold the objects, help files, manuals,
 * etc. making it a self-contained library. <hans at at.or.at>
 */

static int libdir_loader(t_canvas *canvas, char *classname)
{
    int fd = -1;
    char searchpathname[MAXPDSTRING], helppathname[MAXPDSTRING], 
        fullclassname[MAXPDSTRING], dirbuf[MAXPDSTRING], *nameptr;
    
    post("libdir_loader classname: %s\n", classname);

    /* look for meta file (classname)/(classname).pd <hans at at.or.at> */
    /* TODO: at "-META" to the meta filename */
    strncpy(fullclassname, classname, MAXPDSTRING - 6);
    strcat(fullclassname, "/");
    strncat(fullclassname, classname, MAXPDSTRING - strlen(fullclassname) - 6);
    strncat(fullclassname, classname, MAXPDSTRING - strlen(fullclassname) - 6);
    strcat(fullclassname, "-meta");
/*    if ((fd = open_via_path(dirname, fullclassname, ".pd",
	  dirbuf, &nameptr, MAXPDSTRING, 1)) < 0) */
    post("libdir_loader fullclassname: %s\n", fullclassname);


// TODO: this needs to be figured out! its the new 0.40 way of doing things
/* send NULL as the canvas for the first argument, and it'll only look in the
 * global path and "." */
    if ((fd = canvas_open(canvas, fullclassname, ".pd",
        dirbuf, &nameptr, MAXPDSTRING, 1)) < 0)

    {
        return (0);
    }
    close(fd);

    post("libdir_loader loaded fullclassname: %s\n", fullclassname);
    
        /* create full path to libdir for adding to the paths */
    strcpy(searchpathname,dirbuf);
//    strcat(searchpathname,"/");
//    strncat(searchpathname,classname, MAXPDSTRING-strlen(searchpathname));

    strncpy(helppathname, sys_libdir->s_name, MAXPDSTRING-30);
    helppathname[MAXPDSTRING-30] = 0;
    strcat(helppathname, "/doc/5.reference/");
    strcat(helppathname, classname);

    sys_searchpath = namelist_append_files(sys_searchpath, searchpathname);
    /* this help path supports having the help files in a complete library
     * directory format, where everything is in one folder.  The help meta
     * system needs to be implemented for this to work with the new Help
     * menu/browser system. Ultimately, /path/to/extra will have to be added
     * to sys_helppath in order for this to work properly.<hans at at.or.at> */
    sys_helppath = namelist_append_files(sys_helppath, searchpathname);
    
        /* this should be changed to use sys_debuglevel */
    if (sys_verbose) 
    {
        post("Added to search path: %s", searchpathname);
        post("Added to help path: %s", searchpathname);
        post("Added to help path: %s", helppathname);
    }
    if (sys_verbose) 
        post("Loaded libdir %s from %s", classname, dirbuf);

    return (1);
}

void libdir_setup(void)
{
    sys_register_loader(libdir_loader);
    post("libdir loader %s",version);  
    post("\twritten by Hans-Christoph Steiner <hans at at.or.at>");
    post("\tcompiled on "__DATE__" at "__TIME__ " ");
}

--- NEW FILE: TODO ---

- implement [classpath] which adds a path to the global path, like what
  [declare -stdpath] does.  The idea is that the global path serves as a
  Java-style classpath. and the local path serves as the namespace.

  - inlet accepts bang to output classpath on outlet
  - inlet accepts messages to add items to the classpath
  - follows same interface as [textfile], [qlist]

- implement [import] which adds the libdir path to the canvas path, similar
  [declare -lib] does, except that it only looks in the global path (aka
  classpath)

  - inlet accepts bang to output canvas path on outlet
  - inlet accepts messages to add items to the canvas path
  - follows same interface as [textfile], [qlist]

- make [libdir] load libdirs when they are called with [import] and [declare
  -lib] and [declare -stdlib].

- [libdir] loader should only add the libdir to the helppath, not the
  additional doc/5.reference path to the helppath.  The idea is that libdirs
  are self-contained.







More information about the Pd-cvs mailing list