[PD-cvs] externals/miXed/shared/common os.c,NONE,1.1 os.h,NONE,1.1 Makefile.sources,1.5,1.6 binport.c,1.7,1.8 binport.h,1.4,1.5 fitter.c,1.1,1.2 fitter.h,1.1,1.2 loud.c,1.5,1.6 port.c,1.16,1.17 port.h,1.2,1.3 fi.c,1.1,NONE fi.h,1.1,NONE

Krzysztof Czaja krzyszcz at users.sourceforge.net
Thu Jan 27 15:42:56 CET 2005


Update of /cvsroot/pure-data/externals/miXed/shared/common
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23748/shared/common

Modified Files:
	Makefile.sources binport.c binport.h fitter.c fitter.h loud.c 
	port.c port.h 
Added Files:
	os.c os.h 
Removed Files:
	fi.c fi.h 
Log Message:
cyclone alpha52 and toxy alpha15 (see notes.txt for cyclone, toxy and shared)

Index: port.h
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/shared/common/port.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** port.h	12 May 2004 15:01:35 -0000	1.2
--- port.h	27 Jan 2005 14:42:53 -0000	1.3
***************
*** 1,3 ****
! /* Copyright (c) 2003-2004 krzYszcz and others.
   * For information on usage and redistribution, and for a DISCLAIMER OF ALL
   * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
--- 1,3 ----
! /* Copyright (c) 2003-2005 krzYszcz and others.
   * For information on usage and redistribution, and for a DISCLAIMER OF ALL
   * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
***************
*** 6,10 ****
  #define __PORT_H__
  
! void import_max(char *fn, char *dir);
  void import_setmapping(int size, char **mapping);
  char **import_getmapping(int *sizep);
--- 6,10 ----
  #define __PORT_H__
  
! int import_max(char *fn, char *dir);
  void import_setmapping(int size, char **mapping);
  char **import_getmapping(int *sizep);

Index: binport.c
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/shared/common/binport.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** binport.c	10 Dec 2004 20:47:03 -0000	1.7
--- binport.c	27 Jan 2005 14:42:53 -0000	1.8
***************
*** 1,3 ****
! /* Copyright (c) 1997-2004 Miller Puckette, krzYszcz, and others.
   * For information on usage and redistribution, and for a DISCLAIMER OF ALL
   * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
--- 1,3 ----
! /* Copyright (c) 1997-2005 Miller Puckette, krzYszcz, and others.
   * For information on usage and redistribution, and for a DISCLAIMER OF ALL
   * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
***************
*** 585,589 ****
      static char pd_header[3] = { '#', 'N', ' ' };  /* canvas or struct */
      if (memcmp(header, bin_header, 4) == 0)
! 	*ftypep = BINPORT_OK;
      else if (memcmp(header, text_header, 4) == 0)
  	*ftypep = BINPORT_MAXTEXT;
--- 585,589 ----
      static char pd_header[3] = { '#', 'N', ' ' };  /* canvas or struct */
      if (memcmp(header, bin_header, 4) == 0)
! 	*ftypep = BINPORT_MAXBINARY;
      else if (memcmp(header, text_header, 4) == 0)
  	*ftypep = BINPORT_MAXTEXT;
***************
*** 632,636 ****
  	    bp->b_ftype = *ftypep;
  	    bp->b_nsymbols = 0;
! 	    if (*ftypep == BINPORT_OK)
  	    {
  		bp->b_symsize = BINPORT_SYMGROW;
--- 632,636 ----
  	    bp->b_ftype = *ftypep;
  	    bp->b_nsymbols = 0;
! 	    if (*ftypep == BINPORT_MAXBINARY)
  	    {
  		bp->b_symsize = BINPORT_SYMGROW;
***************
*** 713,719 ****
  	if (bp)
  	{
! 	    if (ftype == BINPORT_OK)
  		result = (binport_tobinbuf(bp, bb)
! 			  ? BINPORT_OK : BINPORT_CORRUPT);
  	    else if (ftype == BINPORT_MAXTEXT)
  	    {
--- 713,719 ----
  	if (bp)
  	{
! 	    if (ftype == BINPORT_MAXBINARY)
  		result = (binport_tobinbuf(bp, bb)
! 			  ? BINPORT_MAXBINARY : BINPORT_CORRUPT);
  	    else if (ftype == BINPORT_MAXTEXT)
  	    {
***************
*** 726,730 ****
  		    binbuf_addv(bb, "ss;", gensym("max"), gensym("v2"));
  		    result = (binport_tobinbuf(bp, bb)
! 			      ? BINPORT_OK : BINPORT_CORRUPT);
  		}
  		else result = BINPORT_FAILED;
--- 726,730 ----
  		    binbuf_addv(bb, "ss;", gensym("max"), gensym("v2"));
  		    result = (binport_tobinbuf(bp, bb)
! 			      ? BINPORT_MAXTEXT : BINPORT_CORRUPT);
  		}
  		else result = BINPORT_FAILED;
***************
*** 738,742 ****
  		    bp->b_old = old;
  		    if (binpold_load(old) && binport_tobinbuf(bp, bb))
! 			result = BINPORT_OK;
  		}
  		else binpold_failure(filename);
--- 738,742 ----
  		    bp->b_old = old;
  		    if (binpold_load(old) && binport_tobinbuf(bp, bb))
! 			result = BINPORT_MAXOLD;
  		}
  		else binpold_failure(filename);
***************
*** 810,814 ****
  	    if (bp)
  	    {
! 		if (ftype == BINPORT_OK)
  		    binport_print(bp, stdout);
  		else if (ftype == BINPORT_MAXTEXT)
--- 810,814 ----
  	    if (bp)
  	    {
! 		if (ftype == BINPORT_MAXBINARY)
  		    binport_print(bp, stdout);
  		else if (ftype == BINPORT_MAXTEXT)

Index: fitter.c
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/shared/common/fitter.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** fitter.c	11 Jan 2005 10:33:21 -0000	1.1
--- fitter.c	27 Jan 2005 14:42:53 -0000	1.2
***************
*** 26,30 ****
  {
      t_class                    *fc_owner;
!     t_symbol                  **fc_mirror;
      t_fittermode_callback       fc_callback;
      struct _fittermode_client  *fc_next;
--- 26,30 ----
  {
      t_class                    *fc_owner;
!     t_canvas                   *fc_canvas;
      t_fittermode_callback       fc_callback;
      struct _fittermode_client  *fc_next;
***************
*** 37,40 ****
--- 37,41 ----
  static t_symbol *fitterps_hashcompatibility = 0;
  static t_symbol *fitterps_max = 0;
+ static t_symbol *fitterps_none = 0;
  
  /* read access (query), only from fittermode_dosetup() */
***************
*** 56,59 ****
--- 57,65 ----
  static void fittermode_symbol(t_pd *x, t_symbol *s)
  {
+     if (!s || s == &s_)
+     {
+ 	loudbug_bug("fittermode_symbol");
+ 	s = fitterps_none;
+     }
      fittermode_value = s;
  }
***************
*** 65,74 ****
      fittermode_value = s;
      for (fc = fittermode_clients; fc; fc = fc->fc_next)
-     {
- 	if (fc->fc_mirror)
- 	    *fc->fc_mirror = s;
  	if (fc->fc_callback)
! 	    fc->fc_callback(s);
!     }
  }
  
--- 71,76 ----
      fittermode_value = s;
      for (fc = fittermode_clients; fc; fc = fc->fc_next)
  	if (fc->fc_callback)
! 	    fc->fc_callback();
  }
  
***************
*** 79,85 ****
      fitterps_hashcompatibility = gensym("#compatibility");
      fitterps_max = gensym("max");
      fittermode_class = class_new(fitterps_hashcompatibility,
! 					  0, 0, sizeof(t_pd),
! 					  CLASS_PD | CLASS_NOINLET, 0);
      class_addbang(fittermode_class, fittermode_bang);
      class_addsymbol(fittermode_class, fittermode_symbol);
--- 81,89 ----
      fitterps_hashcompatibility = gensym("#compatibility");
      fitterps_max = gensym("max");
+     fitterps_none = gensym("none");
+     fittermode_value = fitterps_none;
      fittermode_class = class_new(fitterps_hashcompatibility,
! 				 0, 0, sizeof(t_pd),
! 				 CLASS_PD | CLASS_NOINLET, 0);
      class_addbang(fittermode_class, fittermode_bang);
      class_addsymbol(fittermode_class, fittermode_symbol);
***************
*** 94,112 ****
  }
  
! void fitter_setup(t_class *owner, t_symbol **mirror,
! 		  t_fittermode_callback callback)
  {
      if (!fittermode_class)
  	fittermode_dosetup(0);
!     if (mirror || callback)
      {
  	t_fittermode_client *fc = getbytes(sizeof(*fc));
  	fc->fc_owner = owner;
! 	fc->fc_mirror = mirror;
  	fc->fc_callback = callback;
  	fc->fc_next = fittermode_clients;
  	fittermode_clients = fc;
- 	if (mirror)
- 	    *mirror = fittermode_value;
      }
  }
--- 98,113 ----
  }
  
! void fitter_setup(t_class *owner, t_fittermode_callback callback)
  {
      if (!fittermode_class)
  	fittermode_dosetup(0);
!     if (callback)
      {
  	t_fittermode_client *fc = getbytes(sizeof(*fc));
  	fc->fc_owner = owner;
! 	fc->fc_canvas = 0;  /* a global client */
  	fc->fc_callback = callback;
  	fc->fc_next = fittermode_clients;
  	fittermode_clients = fc;
      }
  }
***************
*** 141,145 ****
  void fitter_setmode(t_symbol *s)
  {
!     post("setting compatibility mode to '%s'", (s ? s->s_name : "none"));
      if (!fittermode_class)
  	fittermode_dosetup(1);
--- 142,148 ----
  void fitter_setmode(t_symbol *s)
  {
!     if (!s || s == &s_)
! 	s = fitterps_none;
!     post("setting compatibility mode to '%s'", s->s_name);
      if (!fittermode_class)
  	fittermode_dosetup(1);

Index: Makefile.sources
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/shared/common/Makefile.sources,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** Makefile.sources	11 Jan 2005 10:33:21 -0000	1.5
--- Makefile.sources	27 Jan 2005 14:42:53 -0000	1.6
***************
*** 3,7 ****
  clc.c \
  dict.c \
- fi.c \
  fitter.c \
  grow.c \
--- 3,6 ----
***************
*** 9,12 ****
--- 8,12 ----
  loud.c \
  mifi.c \
+ os.c \
  port.c \
  props.c \

Index: port.c
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/shared/common/port.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** port.c	11 Jan 2005 10:33:21 -0000	1.16
--- port.c	27 Jan 2005 14:42:53 -0000	1.17
***************
*** 1,3 ****
! /* Copyright (c) 1997-2004 Miller Puckette, krzYszcz, and others.
   * For information on usage and redistribution, and for a DISCLAIMER OF ALL
   * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
--- 1,3 ----
! /* Copyright (c) 1997-2005 Miller Puckette, krzYszcz, and others.
   * For information on usage and redistribution, and for a DISCLAIMER OF ALL
   * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
***************
*** 1597,1605 ****
  }
  
! void import_max(char *fn, char *dir)
  {
      t_port *x;
      t_binbuf *inbb, *outbb;
!     int fd, ftype;
      char buf[MAXPDSTRING], *bufp;
      t_pd *stackp = 0;
--- 1597,1606 ----
  }
  
! int import_max(char *fn, char *dir)
  {
+     int result;
      t_port *x;
      t_binbuf *inbb, *outbb;
!     int fd;
      char buf[MAXPDSTRING], *bufp;
      t_pd *stackp = 0;
***************
*** 1609,1613 ****
      {
      	loud_error(0, "%s: can't open", fn);
!     	return;
      }
      else close (fd);
--- 1610,1614 ----
      {
      	loud_error(0, "%s: can't open", fn);
!     	return (BINPORT_NOFILE);
      }
      else close (fd);
***************
*** 1616,1629 ****
      inbb = binbuf_new();
      glob_setfilename(0, gensym(bufp), gensym(buf));
!     ftype = binport_read(inbb, bufp, buf);
!     if (ftype == BINPORT_OK)
      {
  #ifdef PORT_DEBUG
  	binport_write(inbb, "import-debug.pat", "");
  #endif
  	outbb = binbuf_new();
! 	if (import_binbuf(x, inbb, outbb) != PORT_OK)
  	{
! 	    loud_error(0, "%s: import failed", fn);
  	    binbuf_free(outbb);
  	    outbb = 0;
--- 1617,1637 ----
      inbb = binbuf_new();
      glob_setfilename(0, gensym(bufp), gensym(buf));
!     result = binport_read(inbb, bufp, buf);
!     if (result == BINPORT_MAXBINARY ||
! 	result == BINPORT_MAXTEXT ||
! 	result == BINPORT_MAXOLD)
      {
+ 	int bbresult;
  #ifdef PORT_DEBUG
  	binport_write(inbb, "import-debug.pat", "");
  #endif
  	outbb = binbuf_new();
! 	if ((bbresult = import_binbuf(x, inbb, outbb)) != PORT_OK)
  	{
! 	    loud_error(0, "%s: import failed (%d)", fn, bbresult);
! 	    if (bbresult == PORT_CORRUPT)
! 		result = BINPORT_CORRUPT;
! 	    else
! 		result = BINPORT_FAILED;
  	    binbuf_free(outbb);
  	    outbb = 0;
***************
*** 1634,1638 ****
  #endif
      }
!     else if (ftype == BINPORT_PDFILE)
  	outbb = inbb;
      else
--- 1642,1646 ----
  #endif
      }
!     else if (result == BINPORT_PDFILE)
  	outbb = inbb;
      else
***************
*** 1657,1659 ****
--- 1665,1669 ----
      pd_doloadbang();
  #endif
+ 
+     return (result);
  }

Index: fitter.h
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/shared/common/fitter.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** fitter.h	11 Jan 2005 10:33:21 -0000	1.1
--- fitter.h	27 Jan 2005 14:42:53 -0000	1.2
***************
*** 6,13 ****
  #define __FITTER_H__
  
! typedef void (*t_fittermode_callback)(t_symbol *s);
  
! void fitter_setup(t_class *owner, t_symbol **mirror,
! 		  t_fittermode_callback callback);
  void fitter_drop(t_class *owner);
  void fitter_setmode(t_symbol *s);
--- 6,12 ----
  #define __FITTER_H__
  
! typedef void (*t_fittermode_callback)(void);
  
! void fitter_setup(t_class *owner, t_fittermode_callback callback);
  void fitter_drop(t_class *owner);
  void fitter_setmode(t_symbol *s);

Index: binport.h
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/shared/common/binport.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** binport.h	8 Dec 2004 15:40:12 -0000	1.4
--- binport.h	27 Jan 2005 14:42:53 -0000	1.5
***************
*** 1,3 ****
! /* Copyright (c) 2003-2004 krzYszcz and others.
   * For information on usage and redistribution, and for a DISCLAIMER OF ALL
   * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
--- 1,3 ----
! /* Copyright (c) 2003-2005 krzYszcz and others.
   * For information on usage and redistribution, and for a DISCLAIMER OF ALL
   * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */
***************
*** 6,11 ****
  #define __BINPORT_H__
  
! enum { BINPORT_OK, BINPORT_MAXTEXT, BINPORT_MAXOLD, BINPORT_PDFILE,
!        BINPORT_INVALID, BINPORT_CORRUPT, BINPORT_FAILED };
  
  #ifndef MIXED_STANDALONE
--- 6,19 ----
  #define __BINPORT_H__
  
! /* return values of binport_read() and import_max(), also passed to
!    outlet_float() by cyclone library objects (cyclone, maxmode...) */
! #define BINPORT_FAILED    -4  /* internal error */
! #define BINPORT_CORRUPT   -3  /* file contents inconsistency */
! #define BINPORT_INVALID   -2  /* file type not recognized */
! #define BINPORT_NOFILE    -1  /* file not found */
! #define BINPORT_MAXBINARY  0
! #define BINPORT_MAXTEXT    1
! #define BINPORT_MAXOLD     2
! #define BINPORT_PDFILE     3
  
  #ifndef MIXED_STANDALONE

--- NEW FILE: os.h ---
/* Copyright (c) 2004-2005 krzYszcz and others.
 * For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */

#ifndef __OS_H__
#define __OS_H__

int ospath_length(char *path, char *cwd);
char *ospath_absolute(char *path, char *cwd, char *result);
FILE *fileread_open(char *filename, t_canvas *cv, int textmode);
FILE *filewrite_open(char *filename, t_canvas *cv, int textmode);

#endif

--- fi.h DELETED ---

Index: loud.c
===================================================================
RCS file: /cvsroot/pure-data/externals/miXed/shared/common/loud.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** loud.c	11 Jan 2005 10:33:21 -0000	1.5
--- loud.c	27 Jan 2005 14:42:53 -0000	1.6
***************
*** 349,352 ****
--- 349,355 ----
      va_end(ap);
      fprintf(stderr, "%s\n", buf);
+ #ifdef MSW
+     fflush(stderr);
+ #endif
  }
  
***************
*** 359,362 ****
--- 362,368 ----
      va_end(ap);
      fputs(buf, stderr);
+ #ifdef MSW
+     fflush(stderr);
+ #endif
  }
  
***************
*** 364,367 ****
--- 370,376 ----
  {
      fputs("\n", stderr);
+ #ifdef MSW
+     fflush(stderr);
+ #endif
  }
  
***************
*** 373,376 ****
--- 382,388 ----
          atom_string(av++, buf, MAXPDSTRING);
  	fprintf(stderr, " %s", buf);
+ #ifdef MSW
+ 	fflush(stderr);
+ #endif
      }
  }
***************
*** 392,398 ****
  	}
  	else fprintf(stderr, "%s", buf);
  	aprev = ap++;
      }
!     if (aprev) fputs("\n", stderr);
  }
  
--- 404,419 ----
  	}
  	else fprintf(stderr, "%s", buf);
+ #ifdef MSW
+ 	fflush(stderr);
+ #endif
  	aprev = ap++;
      }
!     if (aprev)
!     {
! 	fputs("\n", stderr);
! #ifdef MSW
! 	fflush(stderr);
! #endif
!     }
  }
  
***************
*** 405,408 ****
--- 426,432 ----
      va_end(ap);
      fprintf(stderr, "miXed consistency check failed: %s\n", buf);
+ #ifdef MSW
+     fflush(stderr);
+ #endif
      bug(buf);
  }

--- fi.c DELETED ---

--- NEW FILE: os.c ---
/* Copyright (c) 2004-2005 krzYszcz and others.
 * For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.  */

#ifdef MSW
#include <io.h>
#else
#include <unistd.h>
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "m_pd.h"
#include "os.h"

static int ospath_doabsolute(char *path, char *cwd, char *result)
{
    if (*path == 0)
    {
	if (result)
	    strcpy(result, cwd);
	else
	    return (strlen(cwd));
    }
    else if (*path == '~')
    {
	path++;
	if (*path == '/' || *path == 0)
	{
#ifdef UNIX
	    char *home = getenv("HOME");
	    if (home)
	    {
		if (result)
		{
		    strcpy(result, home);
		    if (*path)
			strcat(result, path);
		}
		else return (strlen(home) + strlen(path));
	    }
	    else goto badpath;
#else
	    goto badpath;
#endif
	}
	else goto badpath;
    }
    else if (*path == '/')
    {
#ifdef MSW
	/* path is absolute, drive is implicit, LATER UNC? */
	if (*cwd && cwd[1] == ':')
	{
	    if (result)
	    {
		*result = *cwd;
		result[1] = ':';
		strcpy(result + 2, path);
	    }
	    else return (2 + strlen(path));
	}
	else goto badpath;
#else
	/* path is absolute */
	if (result)
	    strcpy(result, path);
	else
	    return (strlen(path));
#endif
    }
    else
    {
#ifdef MSW
	if (path[1] == ':')
	{
	    if (path[2] == '/')
	    {
		/* path is absolute */
		if (result)
		    strcpy(result, path);
		else
		    return (strlen(path));
	    }
	    else if (*cwd == *path)
	    {
		/* path is relative, drive is explicitly current */
		if (result)
		{
		    int ndx = strlen(cwd);
		    strcpy(result, cwd);
		    result[ndx++] = '/';
		    strcpy(result + ndx, path + 2);
		}
		else return (strlen(cwd) + strlen(path) - 1);
	    }
	    /* we do not maintain per-drive cwd, LATER rethink */
	    else goto badpath;
	}
	/* LATER devices? */
	else
	{
	    /* path is relative */
	    if (result)
	    {
		int ndx = strlen(cwd);
		strcpy(result, cwd);
		result[ndx++] = '/';
		strcpy(result + ndx, path);
	    }
	    else return (strlen(cwd) + 1 + strlen(path));
	}
#else
	/* path is relative */
	if (result)
	{
	    int ndx = strlen(cwd);
	    strcpy(result, cwd);
	    result[ndx++] = '/';
	    strcpy(result + ndx, path);
	}
	else return (strlen(cwd) + 1 + strlen(path));
#endif
    }
    if (result && *result && *result != '.')
    {
	/* clean-up */
	char *inptr, *outptr = result;
	int ndx = strlen(result);
	if (result[ndx - 1] == '.')
	{
	    result[ndx] = '/';  /* guarding slash */
	    result[ndx + 1] = 0;
	}
	for (inptr = result + 1; *inptr; inptr++)
	{
	    if (*inptr == '/')
	    {
		if (*outptr == '/')
		    continue;
		else if (*outptr == '.')
		{
		    if (outptr[-1] == '/')
		    {
			outptr--;
			continue;
		    }
		    else if (outptr[-1] == '.' && outptr[-2] == '/')
		    {
			outptr -= 2;
			if (outptr == result)
			    continue;
			else for (outptr--; outptr != result; outptr--)
			    if (*outptr == '/')
				break;
			continue;
		    }
		}
	    }
	    *++outptr = *inptr;
	}
	if (*outptr == '/' && outptr != result)
	    *outptr = 0;
	else
	    outptr[1] = 0;
    }
    else bug("ospath_doabsolute 1");
    return (0);
badpath:
    if (result)
	bug("ospath_doabsolute 2");
    return (0);
}

/* Returns an estimated length of an absolute path made up from the first arg.
   The actual ospath_absolute()'s length may be shorter (since it erases
   superfluous slashes and dots), but not longer.  Both args should be unbashed
   (system-independent), cwd should be absolute.  Returns 0 in case of any
   error (LATER revisit). */
int ospath_length(char *path, char *cwd)
{
    /* one extra byte used internally (guarding slash) */
    return (ospath_doabsolute(path, cwd, 0) + 1);
}

/* Copies an absolute path to result.  Arguments: path and cwd, are the same
   as in ospath_length().  Caller should first consult ospath_length(), and
   allocate at least ospath_length() + 1 bytes to the result buffer.
   Should never fail (failure is a bug). */
char *ospath_absolute(char *path, char *cwd, char *result)
{
    ospath_doabsolute(path, cwd, result);
    return (result);
}

FILE *fileread_open(char *filename, t_canvas *cv, int textmode)
{
    int fd;
    char path[MAXPDSTRING+2], *nameptr;
    t_symbol *dirsym = (cv ? canvas_getdir(cv) : 0);
    /* path arg is returned unbashed (system-independent) */
    if ((fd = open_via_path((dirsym ? dirsym->s_name : ""), filename,
			    "", path, &nameptr, MAXPDSTRING, 1)) < 0)
    	return (0);
    /* Closing/reopening dance.  This is unnecessary under linux, and we
       could have tried to convert fd to fp, but under windows open_via_path()
       returns what seems to be an invalid fd.
       LATER try to understand what is going on here... */
    close(fd);
    if (path != nameptr)
    {
	char *slashpos = path + strlen(path);
	*slashpos++ = '/';
	/* try not to be dependent on current open_via_path() implementation */
	if (nameptr != slashpos)
	    strcpy(slashpos, nameptr);
    }
    sys_bashfilename(path, path);
    return (fopen(path, (textmode ? "r" : "rb")));
}

FILE *filewrite_open(char *filename, t_canvas *cv, int textmode)
{
    char path[MAXPDSTRING+2];
    if (cv)
	/* path arg is returned unbashed (system-independent) */
	canvas_makefilename(cv, filename, path, MAXPDSTRING);
    else
    {
    	strncpy(path, filename, MAXPDSTRING);
    	path[MAXPDSTRING-1] = 0;
    }
    sys_bashfilename(path, path);
    return (fopen(path, (textmode ? "w" : "wb")));
}





More information about the Pd-cvs mailing list