diff options
author | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-02-25 19:22:25 +0000 |
commit | ad547a6b5986815fda458221149728d9d9ab1d87 (patch) | |
tree | 16296910eb3eca724371474ea9aea3994dc69614 /Build/source/utils/asymptote/util.h | |
parent | 947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff) |
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/asymptote/util.h')
-rw-r--r-- | Build/source/utils/asymptote/util.h | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/Build/source/utils/asymptote/util.h b/Build/source/utils/asymptote/util.h new file mode 100644 index 00000000000..699cef521ee --- /dev/null +++ b/Build/source/utils/asymptote/util.h @@ -0,0 +1,166 @@ +/***** + * util.h + * Andy Hammerlindl 2004/05/10 + * + * A place for useful utility functions. + *****/ + +#ifndef UTIL_H +#define UTIL_H + +#include <sys/types.h> +#include <iostream> +#include <cstdlib> + +#ifdef __CYGWIN__ +extern "C" int sigaddset(sigset_t *set, int signum); +extern "C" int sigemptyset(sigset_t *set); +extern "C" int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); +#endif + +#include <csignal> + +#include "common.h" + +#include <strings.h> + +// Demangle a typeid name (if the proper library is installed. +string demangle(const char *s); + +// Duplicate a string. +char *Strdup(string s); +char *StrdupNoGC(string s); +char *StrdupMalloc(string s); + +// Strip the directory from a filename. +string stripDir(string name); + +// Strip the file from a filename, returning the directory. +string stripFile(string name); + +// Strip the extension from a filename. +string stripExt(string name, const string& suffix=""); + +void readDisabled(); +void writeDisabled(); + +// Replace spaces in file part of name with underscores. +string cleanpath(string name); + +// Construct the full path name, checking access. +string inpath(string name); +string outpath(string name); + +// Construct a filename from the original, adding aux at the end, and +// changing the suffix. +string buildname(string filename, string suffix="", string aux=""); + +// Construct an alternate filename for a temporary file in the current +// directory. +string auxname(string filename, string suffix=""); + +// Cast argument to a string. +template<class T> +string String(T x) +{ + ostringstream buf; + buf << x; + return buf.str(); +} + +typedef void (*sighandler_t)(int); + +// Portable signal (sigaction wrapper). +sighandler_t Signal(int signum, sighandler_t handler); + +// Split string S and push the pieces onto vector a. +void push_split(mem::vector<string>& a, const string& S); + +// Wrapper to append /c start "" to MSDOS cmd. +void push_command(mem::vector<string>& a, const string& s); + +// Return an argv array corresponding to the fields in command delimited +// by spaces not within matching single quotes. +char **args(const mem::vector<string> &args, bool quiet=false); + +// Similar to the standard system call except allows interrupts and does +// not invoke a shell. +int System(const mem::vector<string> &command, int quiet=0, bool wait=true, + const char *hint=NULL, const char *application="", + int *pid=NULL); + +#if defined(__DECCXX_LIBCXX_RH70) +extern "C" char *strsignal(int sig); +extern "C" double asinh(double x); +extern "C" double acosh(double x); +extern "C" double atanh(double x); +extern "C" double cbrt(double x); +extern "C" double erf(double x); +extern "C" double erfc(double x); +extern "C" double lgamma(double x); +extern "C" double remainder(double x, double y); +extern "C" double hypot(double x, double y) throw(); +extern "C" double jn(Int n, double x); +extern "C" double yn(Int n, double x); +extern "C" int isnan(double); +#endif + + +#if defined(__DECCXX_LIBCXX_RH70) || defined(__CYGWIN__) +extern "C" int usleep(useconds_t); +extern "C" int kill(pid_t pid, int sig) throw(); +extern "C" int snprintf(char *str, size_t size, const char *format,...); +#include <stdio.h> +extern "C" FILE *fdopen(int fd, const char *mode); +extern "C" int fileno(FILE *); +extern "C" char *strptime(const char *s, const char *format, struct tm *tm); +extern "C" int setenv(const char *name, const char *value, int overwrite); +extern "C" int unsetenv(const char *name); +#endif + +extern bool False; + +// Strip blank lines (which would break the bidirectional TeX pipe) +string stripblanklines(const string& s); + +const char *startPath(); +const char* setPath(const char *s, bool quiet=false); +const char *changeDirectory(const char *s); +extern char *startpath; +extern void recursive_delete(char *name); + +void backslashToSlash(string& s); +void spaceToUnderscore(string& s); +string Getenv(const char *name, bool msdos); +char *getPath(char *p=NULL); + +void execError(const char *command, const char *hint, const char *application); + +// This invokes a viewer to display the manual. Subsequent calls will only +// pop-up a new viewer if the old one has been closed. +void popupHelp(); + +#ifdef __CYGWIN__ +inline long long llabs(long long x) {return x >= 0 ? x : -x;} +extern "C" char *initstate (unsigned seed, char *state, size_t size); +extern "C" long random (void); +#endif + +inline Int Abs(Int x) { +#ifdef HAVE_LONG_LONG + return llabs(x); +#else +#ifdef HAVE_LONG + return labs(x); +#else + return abs(x); +#endif +#endif +} + +unsigned unsignedcast(Int n); +unsignedInt unsignedIntcast(Int n); +int intcast(Int n); +Int Intcast(unsignedInt n); + +#endif |