X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2FSDCCutil.h;h=880d7eb2f74920d631231737434e46fda1442a12;hb=80972b2e54c9b88f11c27b878874fd2a6a681391;hp=ad9a1a4c9e38401ffa555dbf2792f222992d3218;hpb=a1e56892f56d7767259b05a29f1c1805fbdf8f54;p=fw%2Fsdcc diff --git a/src/SDCCutil.h b/src/SDCCutil.h index ad9a1a4c..880d7eb2 100644 --- a/src/SDCCutil.h +++ b/src/SDCCutil.h @@ -26,43 +26,48 @@ #define SDCCUTIL_H #include "SDCChasht.h" +#include "dbuf.h" #include /** Given an array of name, value string pairs creates a new hash containing all of the pairs. */ -hTab *populateStringHash(const char **pin); +hTab *populateStringHash (const char **pin); -/** Given an array of string pointers and another string, adds the - string to the end of the list. The end of the list is assumed to - be the first NULL pointer. +/** Prints elements of the set to the file, each element on new line */ -void addToList (const char **list, const char *str); +void fputStrSet (FILE *fp, set *list); -/** Given an array of string pointers returns a string containing all - of the strings seperated by spaces. The returned string is on the - heap. The join stops when a NULL pointer is hit. +/** Prepend / append given strings to each item of string set. The result is in a + new string set. */ -char *join(const char **pplist); +set *appendStrSet (set *list, const char *pre, const char *post); -/** Given an array of string pointers, returns a string containing all - of the strings seperated by spaces. The returned string is on the - heap. n is the number of strings in the list. +/** Given a set returns a string containing all of the strings seperated + by spaces. The returned string is on the heap. */ -char *joinn(char **pplist, int n); +const char *joinStrSet (set *list); -/** Returns the characters in the path p2 past the last matching characters in - p1. Processes in a host dependent way. For example, on win32 the - test is case insensitive and treats '/' and '\' as the same. -*/ -char *getPathDifference (char *pinto, const char *p1, const char *p2); +/** Split the path string to the directory and file name (including extension) components. + The directory component doesn't contain trailing directory separator. + Returns true if the path contains the directory separator. */ +int dbuf_splitPath (const char *path, struct dbuf_s *dir, struct dbuf_s *file); + +/** Split the path string to the file name (including directory) and file extension components. + The file name component doesn't contain trailing extension separator. + Returns true if the path contains the extension separator. */ +int dbuf_splitFile (const char *path, struct dbuf_s *file, struct dbuf_s *ext); + +/** Combile directory and the file name to a path string using the DIR_SEPARATOR_CHAR. + */ +void dbuf_makePath (struct dbuf_s *path, const char *dir, const char *file); /** Given a file with path information in the binary files directory, - returns what PREFIX must be to get this path. Used for discovery - of where SDCC is installed. Returns NULL if the path is + returns the directory component. Used for discovery of bin + directory of SDCC installation. Returns NULL if the path is impossible. */ -char *getPrefixFromBinPath (const char *prel); +const char *getBinPath (const char *prel); /** Returns true if the given path exists. */ @@ -72,7 +77,7 @@ void setMainValue (const char *pname, const char *pvalue); void populateMainValues (const char **ppin); -void buildCmdLine2 (char *pbuffer, const char *pcmd, size_t len); +void buildCmdLine2 (char *pbuffer, size_t len, const char *pcmd, ...); /** Returns true if sz starts with the string given in key. */ @@ -83,20 +88,28 @@ bool startsWith (const char *sz, const char *key); */ void chomp (char *sz); -hTab * -getRuntimeVariables(void); +hTab *getRuntimeVariables (void); /* strncpy() with guaranteed NULL termination. */ -char *strncpyz(char *dest, const char *src, size_t n); +char *strncpyz (char *dest, const char *src, size_t n); /* like strncat() with guaranteed NULL termination * The passed size should be the size of the dest buffer, not the number of * bytes to copy. */ -char *strncatz(char *dest, const char *src, size_t n); +char *strncatz (char *dest, const char *src, size_t n); + +/* return SDCC build number */ +const char *getBuildNumber (void); + +/* return SDCC build date */ +const char *getBuildDate (void); + +/* return environment used to build SDCC */ +const char *getBuildEnvironment(void); /* snprintf, by hook or by crook. */ -size_t SDCCsnprintf(char *, size_t, const char *, ...); +size_t SDCCsnprintf (char *, size_t, const char *, ...); # if defined(HAVE_VSNPRINTF) @@ -119,7 +132,25 @@ size_t SDCCsnprintf(char *, size_t, const char *, ...); # error "Need at least one of snprintf, vsnprintf, vsprintf!" # endif +/** Pragma tokenizer + */ +enum pragma_token_e { TOKEN_UNKNOWN, TOKEN_STR, TOKEN_INT, TOKEN_EOL }; +struct pragma_token_s { + enum pragma_token_e type; + struct dbuf_s dbuf; + union { + int int_val; + } val; +}; -#endif +void init_pragma_token (struct pragma_token_s *token); +char *get_pragma_token (const char *s, struct pragma_token_s *token); +const char *get_pragma_string (struct pragma_token_s *token); +void free_pragma_token (struct pragma_token_s *token); +unsigned char hexEscape (const char **src); +unsigned char octalEscape (const char **src); +int copyStr (char *dest, const char *src); + +#endif