summaryrefslogtreecommitdiff
path: root/src/SDCCutil.h
diff options
context:
space:
mode:
authorXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
committerXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
commit268a53de823a6750d6256ee1fb1e7707b4b45740 (patch)
tree42c1799a9a82b2f7d9790ee9fe181d72a7274751 /src/SDCCutil.h
downloadsdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'src/SDCCutil.h')
-rw-r--r--src/SDCCutil.h157
1 files changed, 157 insertions, 0 deletions
diff --git a/src/SDCCutil.h b/src/SDCCutil.h
new file mode 100644
index 0000000..1e06675
--- /dev/null
+++ b/src/SDCCutil.h
@@ -0,0 +1,157 @@
+/*-------------------------------------------------------------------------
+ SDCCutil.c - Small utility functions.
+
+ Written By - Sandeep Dutta . sandeep.dutta@usa.net (1999)
+
+ 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, 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
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them. Help stamp out software-hoarding!
+-------------------------------------------------------------------------*/
+
+#ifndef SDCCUTIL_H
+#define SDCCUTIL_H
+
+#include "SDCChasht.h"
+#include "dbuf.h"
+#include <stdarg.h>
+
+/** Given an array of name, value string pairs creates a new hash
+ * containing all of the pairs.
+ */
+hTab *populateStringHash (const char **pin);
+
+/** Given an array of name, value string pairs creates a new hash
+ * containing all of the pairs.
+ */
+char *shell_escape (const char *str);
+
+/** Prints elements of the set to the file, each element on new line
+ */
+void fputStrSet (FILE * fp, set * list);
+
+/** Prepend / append given strings to each item of string set. The result is in a
+ * new string set.
+ */
+set *processStrSet (set * list, const char *pre, const char *post, char *(*file) (const char *));
+
+/** Given a set returns a string containing all of the strings seperated
+ * by spaces. The returned string is on the heap.
+ */
+const char *joinStrSet (set * list);
+
+/** 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 the directory component. Used for discovery of bin
+ * directory of SDCC installation. Returns NULL if the path is
+ * impossible.
+ */
+const char *getBinPath (const char *prel);
+
+/** Returns true if the given path exists.
+ */
+bool pathExists (const char *ppath);
+
+void setMainValue (const char *pname, const char *pvalue);
+
+char *buildMacros (const char *cmd);
+
+void populateMainValues (const char **ppin);
+
+char *buildCmdLine (const char **cmds, const char *p1, const char *p2, const char *p3, set *list);
+
+char *buildCmdLine2 (const char *pcmd, ...);
+
+/** Returns true if sz starts with the string given in key.
+ */
+bool startsWith (const char *sz, const char *key);
+
+/** Removes any newline characters from the string.
+ * Not strictly the same as perl's chomp.
+ */
+void chomp (char *sz);
+
+hTab *getRuntimeVariables (void);
+
+/* strncpy() with guaranteed NULL termination.
+ */
+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);
+
+/* return SDCC build number
+ */
+const char *getBuildNumber (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 *, ...);
+
+#define SNPRINTF SDCCsnprintf
+
+/** 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;
+};
+
+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 long int hexEscape (const char **src);
+unsigned long int universalEscape (const char **src, unsigned int n);
+unsigned long int octalEscape (const char **src);
+const char *copyStr (const char *src, size_t *size);
+
+void getPrefixSuffix(const char *);
+char *setPrefixSuffix(const char *);
+
+char *formatInlineAsm (char *);
+#endif