added function BLI_filepathsize - so you dont have to open the file to get its size.
[blender.git] / source / blender / blenlib / BLI_blenlib.h
index 49d885e5b301cef3f453860dc1ed030af2056881..4fc4241e6dca94a6b87c10be80efefcafb03fa2b 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * $Id$
  *
  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
@@ -69,6 +69,8 @@
        because fillfacebase and fillvertbase are used outside */
 #include "DNA_listBase.h" 
 
+#include <stdlib.h>
+
 extern ListBase fillfacebase;
 extern ListBase fillvertbase;
 /**
@@ -84,6 +86,7 @@ struct rcti;
 struct EditVert;
 struct PackedFile;
 struct LinkNode;
+struct DynamicList;
 
 #ifdef __cplusplus
 extern "C" {
@@ -91,26 +94,51 @@ extern "C" {
 
 /* BLI_util.h */
 char *BLI_gethome(void);
-void BLI_make_file_string(char *relabase, char *string,  char *dir,  char *file);
+void BLI_make_file_string(const char *relabase, char *string,  const char *dir, const char *file);
 void BLI_make_exist(char *dir);
-void BLI_split_dirfile(char *string, char *dir, char *file);
-int BLI_testextensie(char *str, char *ext);
+void BLI_make_existing_file(char *name);
+void BLI_split_dirfile(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,10 +151,26 @@ 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 framenum);
+
+void BLI_makestringcode(const char *relfile, char *file);
 
-void BLI_makestringcode(char *fromfile, char *str);
+       /**
+        * Change every @a from in @a string into @a to. The
+        * result will be in @a string
+        *
+        * @a string The string to work on
+        * @a from The character to replace
+        * @a to The character to replace with
+        */
+void BLI_char_switch(char *string, char from, char to);
 
+       /**
+        * Makes sure @a path has platform-specific slashes.
+        * 
+        * @a path The path to 'clean'
+        */
+void BLI_clean(char *path);
        /**
         * Duplicates the cstring @a str into a newly mallocN'd
         * string and returns it.
@@ -134,7 +178,7 @@ void BLI_makestringcode(char *fromfile, char *str);
         * @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 
@@ -145,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
@@ -157,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
@@ -173,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.
@@ -201,7 +255,7 @@ 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);
 
        /**
         * determines the full path to the application bundle on OS X
@@ -213,15 +267,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
@@ -232,7 +287,7 @@ int    BLI_exist(char *name);
 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
@@ -240,10 +295,11 @@ int BLI_backup(char *file, char *from, char *to);
 int   BLI_exists(char *file);
 int   BLI_copy_fileops(char *file, char *to);
 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);
 
 /* BLI_rct.c */
 /**
@@ -253,19 +309,21 @@ 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... */
 struct EditVert *BLI_addfillvert(float *vec);
 struct EditEdge *BLI_addfilledge(struct EditVert *v1, struct EditVert *v2);
-int BLI_edgefill(int mode);  /* DE HOOFD FILL ROUTINE */
+int BLI_edgefill(int mode, int mat_nr);
 void BLI_end_edgefill(void);
 
 /* noise.h: */
@@ -310,29 +368,26 @@ void BLI_setErrorCallBack(void (*f)(char*));
  */
 void BLI_setInterruptCallBack(int (*f)(void));
 
-/**
- * Before scanfilling is done, these two references need to be set. If
- * the object reference is NULL, the function will fail. If the object
- * is set, but no colour is available, colour can be omitted. 
- *
- * @attention Also see BLI_setScanFillColourRef
- */
-void BLI_setScanFillObjectRef(void* ob); 
+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);
 
-/**
- * Before scanfilling is done, these two references need to be set. If
- * the object reference is NULL, the function will fail. If the object
- * is set, but no colour is available, colour can be omitted. 
- *
- * @attention Also see BLI_setScanFillObjectRef
- */
-void BLI_setScanFillColourRef(char* c);
 
 #define PRNTSUB(type,arg)                      printf(#arg ": %" #type " ", arg)
+
+#ifndef PRINT
 #define PRINT(t,v)                                     {PRNTSUB(t,v); printf("\n");}
 #define PRINT2(t1,v1,t2,v2)                    {PRNTSUB(t1,v1); PRNTSUB(t2,v2); printf("\n");}
 #define PRINT3(t1,v1,t2,v2,t3,v3)      {PRNTSUB(t1,v1); PRNTSUB(t2,v2); PRNTSUB(t3,v3); printf("\n");}
 #define PRINT4(t1,v1,t2,v2,t3,v3,t4,v4)        {PRNTSUB(t1,v1); PRNTSUB(t2,v2); PRNTSUB(t3,v3); PRNTSUB(t4,v4); printf("\n");}
+#endif
 
 /**
  * @param array The array in question
@@ -345,11 +400,10 @@ void BLI_setScanFillColourRef(char* c);
  * @param member The name of a member field of @a strct
  * @retval The offset in bytes of @a member within @a strct
  */
-#define BLI_STRUCT_OFFSET(strct, member)       (((struct) 0).(membr))
+#define BLI_STRUCT_OFFSET(strct, member)       ((int) &((strct*) 0)->member)
 
 #ifdef __cplusplus
 }
 #endif
 
 #endif
-