Changed frame numbering to only alter hashes if they are in the filename (not the...
[blender.git] / source / blender / blenlib / BLI_blenlib.h
index 15ab7825cf637901f9bddfb1acd1f04332391238..e24ccad12fb28f6cc376fd06c7b8882493ccf4c5 100644 (file)
@@ -1,15 +1,12 @@
-/**
+/*
  * $Id$
  *
- * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * 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 2
- * of the License, or (at your option) any later version. The Blender
- * Foundation also sells licenses for use in proprietary software under
- * the Blender License.  See http://www.blender.org/BL/ for information
- * about this.
+ * of the License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -27,7 +24,7 @@
  *
  * Contributor(s): none yet.
  *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ * ***** END GPL LICENSE BLOCK *****
  *
  * @mainpage BLI - Blender LIbrary external interface
  *
@@ -69,6 +66,7 @@
        because fillfacebase and fillvertbase are used outside */
 #include "DNA_listBase.h" 
 
+#include <stdlib.h>
 extern ListBase fillfacebase;
 extern ListBase fillvertbase;
 /**
@@ -77,6 +75,8 @@ extern ListBase fillvertbase;
 extern ListBase filledgebase;
 extern int totblock;
 
+extern char btempdir[]; /* creator.c temp dir used instead of U.tempdir, set with BLI_where_is_temp( btempdir, 1 ); */
+
 struct chardesc;
 struct direntry;
 struct rctf;
@@ -84,6 +84,7 @@ struct rcti;
 struct EditVert;
 struct PackedFile;
 struct LinkNode;
+struct DynamicList;
 
 #ifdef __cplusplus
 extern "C" {
@@ -93,24 +94,50 @@ extern "C" {
 char *BLI_gethome(void);
 void BLI_make_file_string(const char *relabase, char *string,  const char *dir, const char *file);
 void BLI_make_exist(char *dir);
+void BLI_make_existing_file(char *name);
 void BLI_split_dirfile(char *string, char *dir, char *file);
-int BLI_testextensie(char *str, char *ext);
+void BLI_split_dirfile_basic(const char *string, char *dir, char *file);
+void BLI_join_dirfile(char *string, const char *dir, const char *file);
+int BLI_testextensie(const char *str, const char *ext);
 void addlisttolist(ListBase *list1, ListBase *list2);
 void BLI_insertlink(struct ListBase *listbase, void *vprevlink, void *vnewlink);
-void * BLI_findlink(struct ListBase *listbase, int number);
+void *BLI_findlink(struct ListBase *listbase, int number);
+int BLI_findindex(struct ListBase *listbase, void *vlink);
 void BLI_freelistN(struct ListBase *listbase);
 void BLI_addtail(struct ListBase *listbase, void *vlink);
 void BLI_remlink(struct ListBase *listbase, void *vlink);
+void BLI_uniquename(struct ListBase *list, void *vlink, char defname[], short name_offs, short len);
 void BLI_newname(char * name, int add);
-int BLI_stringdec(char *string, char *kop, char *staart, unsigned short *numlen);
-void BLI_stringenc(char *string, char *kop, char *staart, unsigned short numlen, int pic);
+int BLI_stringdec(char *string, char *kop, char *start, unsigned short *numlen);
+void BLI_stringenc(char *string, char *kop, char *start, unsigned short numlen, int pic);
 void BLI_addhead(struct ListBase *listbase, void *vlink);
 void BLI_insertlinkbefore(struct ListBase *listbase, void *vnextlink, void *vnewlink);
+void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink);
+void BLI_sortlist(struct ListBase *listbase, int (*cmp)(void *, void *));
 void BLI_freelist(struct ListBase *listbase);
 int BLI_countlist(struct ListBase *listbase);
 void BLI_freelinkN(ListBase *listbase, void *vlink);
 void BLI_splitdirstring(char *di,char *fi);
 
+struct DynamicList *BLI_dlist_from_listbase(struct ListBase *lb);
+struct ListBase *BLI_listbase_from_dlist(struct DynamicList *dlist, struct ListBase *lb);
+void * BLI_dlist_find_link(struct DynamicList *dlist, unsigned int index);
+unsigned int BLI_count_items(struct DynamicList *dlist);
+void BLI_dlist_free_item(struct DynamicList *dlist, unsigned int index);
+void BLI_dlist_rem_item(struct DynamicList *dlist, unsigned int index);
+void * BLI_dlist_add_item_index(struct DynamicList *dlist, void *item, unsigned int index);
+void BLI_dlist_destroy(struct DynamicList *dlist);
+void BLI_dlist_init(struct DynamicList *dlist);
+void BLI_dlist_reinit(struct DynamicList *dlist);
+
+       /**
+        * dir can be any input, like from buttons, and this function
+        * converts it to a regular full path.
+        * Also removes garbage from directory paths, like /../ or double slashes etc 
+        */
+void BLI_cleanup_file(const char *relabase, char *dir);
+void BLI_cleanup_dir(const char *relabase, char *dir); /* same as above but adds a trailing slash */
+
        /**
         * Blender's path code replacement function.
         * Bases @a path strings leading with "//" by the
@@ -123,7 +150,8 @@ void BLI_splitdirstring(char *di,char *fi);
         * @a framenum The framenumber to replace the frame code with.
         * @retval Returns true if the path was relative (started with "//").
         */
-int BLI_convertstringcode(char *path, char *basepath, int framenum);
+int BLI_convertstringcode(char *path, const char *basepath);
+int BLI_convertstringframe(char *path, int frame);
 
 void BLI_makestringcode(const char *relfile, char *file);
 
@@ -150,7 +178,7 @@ void BLI_clean(char *path);
         * @param str The string to be duplicated
         * @retval Returns the duplicated string
         */
-char* BLI_strdup(char *str);
+char *BLI_strdup(const char *str);
 
        /**
         * Duplicates the first @a len bytes of cstring @a str 
@@ -161,7 +189,7 @@ char* BLI_strdup(char *str);
         * @param len The number of bytes to duplicate
         * @retval Returns the duplicated string
         */
-char* BLI_strdupn(char *str, int len);
+char *BLI_strdupn(const char *str, int len);
 
        /**
         * Like strncpy but ensures dst is always
@@ -173,7 +201,12 @@ char* BLI_strdupn(char *str, int len);
         *   the size of dst)
         * @retval Returns dst
         */
-char* BLI_strncpy(char *dst, char *src, int maxncpy);
+char *BLI_strncpy(char *dst, const char *src, int maxncpy);
+
+       /* 
+        * Replacement for snprintf
+        */
+int BLI_snprintf(char *buffer, size_t count, const char *format, ...);
 
        /**
         * Compare two strings
@@ -189,6 +222,11 @@ int BLI_streq(char *a, char *b);
         */
 int BLI_strcaseeq(char *a, char *b);
 
+/* in util.c */
+#ifdef WITH_ICONV
+void BLI_string_to_utf8(char *original, char *utf_8, char *code);
+#endif
+
        /**
         * Read a file as ASCII lines. An empty list is
         * returned if the file cannot be opened or read.
@@ -217,7 +255,19 @@ void BLI_free_file_lines(struct LinkNode *lines);
         * @param fullname The full path and full name of the executable
         * @param name The name of the executable (usually argv[0]) to be checked
         */
-void BLI_where_am_i(char *fullname, char *name);
+void BLI_where_am_i(char *fullname, const char *name);
+
+char *get_install_dir(void);
+       /**
+        * Gets the temp directory when blender first runs.
+        * If the default path is not found, use try $TEMP
+        * 
+        * Also make sure the temp dir has a trailing slash
+        *
+        * @param fullname The full path to the temp directory
+        */
+void BLI_where_is_temp(char *fullname, int usertemp);
+
 
        /**
         * determines the full path to the application bundle on OS X
@@ -229,15 +279,16 @@ char* BLI_getbundle(void);
 #endif
 
 #ifdef WIN32
-int BLI_getInstallationDir( char * str );
+int BLI_getInstallationDir(char *str);
 #endif
                
 /* BLI_storage.h */
 int    BLI_filesize(int file);
+int    BLI_filepathsize(const char *path);
 double BLI_diskfree(char *dir);
-char * BLI_getwdN(char * dir);
+char *BLI_getwdN(char *dir);
 void BLI_hide_dot_files(int set);
-unsigned int BLI_getdir(char *dirname,  struct direntry **filelist);
+unsigned int BLI_getdir(char *dirname, struct direntry **filelist);
 
 /**
  * @attention Do not confuse with BLI_exists
@@ -247,8 +298,7 @@ int    BLI_exist(char *name);
 /* BLI_fileops.h */
 void  BLI_recurdir_fileops(char *dirname);
 int BLI_link(char *file, char *to);
-int BLI_backup(char *file, char *from, char *to);
-
+int BLI_is_writable(char *filename);
 
 /**
  * @attention Do not confuse with BLI_exist
@@ -259,8 +309,10 @@ int   BLI_rename(char *from, char *to);
 int   BLI_gzip(char *from, char *to);
 int   BLI_delete(char *file, int dir, int recursive);
 int   BLI_move(char *file, char *to);
-int   BLI_touch(char *file);
-char *BLI_last_slash(char *string);
+int   BLI_touch(const char *file);
+char *BLI_last_slash(const char *string);
+void  BLI_add_slash(char *string);
+void  BLI_del_slash(char *string);
 
 /* BLI_rct.c */
 /**
@@ -270,13 +322,15 @@ char *BLI_last_slash(char *string);
  *
  * @return True if @a rect is empty.
  */
-int BLI_rcti_is_empty(struct rcti * rect);
+int  BLI_rcti_is_empty(struct rcti *rect);
 void BLI_init_rctf(struct rctf *rect, float xmin, float xmax, float ymin, float ymax);
-int  BLI_in_rcti(struct rcti * rect, int x, int y);
+void BLI_init_rcti(struct rcti *rect, int xmin, int xmax, int ymin, int ymax);
+void BLI_translate_rctf(struct rctf *rect, float x, float y);
+void BLI_translate_rcti(struct rcti *rect, int x, int y);
+int  BLI_in_rcti(struct rcti *rect, int x, int y);
 int  BLI_in_rctf(struct rctf *rect, float x, float y);
 int  BLI_isect_rctf(struct rctf *src1, struct rctf *src2, struct rctf *dest);
-/* why oh why doesn't this work? */
-//void BLI_union_rctf(struct rctf *rct1, struct rctf *rct2);
+int  BLI_isect_rcti(struct rcti *src1, struct rcti *src2, struct rcti *dest);
 void BLI_union_rctf(struct rctf *rcta, struct rctf *rctb);
 
 /* scanfill.c: used in displist only... */
@@ -327,8 +381,17 @@ void BLI_setErrorCallBack(void (*f)(char*));
  */
 void BLI_setInterruptCallBack(int (*f)(void));
 
+char *BLI_strcasestr(const char *s, const char *find);
 int BLI_strcasecmp(const char *s1, const char *s2);
 int BLI_strncasecmp(const char *s1, const char *s2, int n);
+void BLI_timestr(double _time, char *str); /* time var is global */
+
+/** 
+  * Trick to address 32 GB with an int (only for malloced pointers)
+  */
+int BLI_int_from_pointer(void *poin);
+void *BLI_pointer_from_int(int val);
+
 
 #define PRNTSUB(type,arg)                      printf(#arg ": %" #type " ", arg)
 
@@ -357,4 +420,3 @@ int BLI_strncasecmp(const char *s1, const char *s2, int n);
 #endif
 
 #endif
-