/* * JoeyDev * Copyright (C) 2018-2023 Scott Duensing * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. */ #ifndef UTILS_H #define UTILS_H #include "common.h" #include "archive.h" #include "archive_entry.h" #ifdef _WIN32 #define UTIL_PATH_CHAR '\\' #else #define UTIL_PATH_CHAR '/' #endif struct ArchiveS; typedef void (*archiveCallback)(struct ArchiveS*); typedef struct ArchiveS { struct archive *in; // Compressed input file. struct archive *out; // Decompressed output files. struct archive_entry *entry; // Current archive entry. int result; // Result of various archive functions. int compression; // Compression percentage. int fileCount; // Current file number being processed. uint64_t compressed; // Compressed bytes processed. uint64_t uncompressed; // Uncompressed bytes processed. size_t size; // Size of compressed file. char *archive; // Name of compressed file. char *outPath; // Path to store uncompressed files. char *currentFile; // Name of current file being processed. gboolean copying; // Are we copying bytes? gboolean finished; // Decompress complete? gboolean success; // Did it succeed? void *userData; // Anything the user needs to keep. archiveCallback callback; // Non-Null, call when complete/failed. } ArchiveT; extern char __utilFilenameBuffer[FILENAME_MAX]; void utilAddTextToListBox(GtkListBox *list, char *text, gboolean markup); void utilClearContainer(GtkContainer *container); char *utilCreateString(char *format, ...); char *utilCreateStringVArgs(char *format, va_list args); ArchiveT *utilDecompress(char *archive, char *outPath, archiveCallback callback, void *userData); int utilDeleteTree(const char *path); char *utilDeobfuscateASCII(char *obfuscated); void utilDequote(char *string); void utilEnsureBufferSize(unsigned char **buffer, int *length, int wanted); void utilExtractResource(char *path); char *utilFileBasename(char *path); gboolean utilFileCopy(char *from, char *to); gboolean utilFileExists(char *filename); ssize_t utilGetLine(char **lineptr, size_t *n, FILE *stream); gboolean utilFileOpen(WindowDataT *self, char *extension, char *what); char *utilFilePath(char *filename); char *utilFileRemoveExtension(char *filename); gboolean utilFileSaveAs(WindowDataT *self, char *extension, char *what); gboolean utilFileSaveOtherAs(WindowDataT *self, char *extension, char *what, char **filename); size_t utilFileSize(char *filename); GtkWidget *utilFindChildWidget(GtkWidget *parent, const gchar *name); void utilForceUpdate(void); char *utilGetToken(char *input, char *delimit, char *openblock, char *closeblock); WindowDataT *utilGetWindowData(GtkWidget *window); gboolean utilGetWidgetsFromMemory(char *resource, char *name[], GtkWidget **widgets[], gpointer userData); void utilMessageDialog(GtkWidget *parent, char *title, char *message); gboolean utilMkDirP(const char *dir, const mode_t mode); char *utilObfuscateASCII(char *clearText); gboolean utilQuestionDialog(GtkWidget *parent, char *title, char *question); void utilSetDirty(WindowDataT *self, gboolean dirty); void utilShutdown(void); void utilStartup(void); void utilUpdatePath(WindowDataT *self); void utilWindowRegister(gpointer windowData); int utilWindowsCloseAll(void); int utilWindowsOpen(void); gboolean utilWindowUnRegister(gpointer windowData); #endif // UTILS_H