summaryrefslogtreecommitdiff
path: root/CompilerTools.h
diff options
context:
space:
mode:
authorAsh Wolf <ninji@wuffs.org>2022-10-07 20:02:27 +0100
committerAsh Wolf <ninji@wuffs.org>2022-10-07 20:02:27 +0100
commit97f6a2438df1eaeb4128ce36f29346ea38a3db4a (patch)
tree78260f8f0f2b84fc70fadb1e50e7fc104390eee4 /CompilerTools.h
downloadMWCC-97f6a2438df1eaeb4128ce36f29346ea38a3db4a.tar.gz
MWCC-97f6a2438df1eaeb4128ce36f29346ea38a3db4a.zip
first very unfinished commit lol
Diffstat (limited to '')
-rw-r--r--CompilerTools.h134
1 files changed, 134 insertions, 0 deletions
diff --git a/CompilerTools.h b/CompilerTools.h
new file mode 100644
index 0000000..5c6607e
--- /dev/null
+++ b/CompilerTools.h
@@ -0,0 +1,134 @@
+#include "mwcc_decomp.h"
+#pragma once
+
+extern void CompilerGetPString(short index, unsigned char *str);
+extern void CompilerGetCString(short index, char *str);
+extern unsigned char *CTool_CtoPstr(char *input);
+
+typedef struct _AllocatorBlock {
+ struct _AllocatorBlock *nextBlock;
+ char **handle;
+ long size;
+ long remaining;
+} AllocatorBlock;
+
+typedef struct _Allocator {
+ AllocatorBlock *blockList;
+ long paddingSize;
+ AllocatorBlock *lastBlockUsed;
+ void *ptrToFreeArea;
+ long remaining;
+} Allocator;
+
+typedef struct _HeapInfo {
+ long _0;
+ long _4;
+ long _8;
+ long xx_C;
+ long _10;
+ long _14;
+ long _18;
+} HeapInfo;
+
+typedef struct _StringNode {
+ struct _StringNode *next;
+ long index;
+ short hash;
+ char data[1];
+} StringNode;
+
+typedef struct _GList {
+ char **data;
+ long size;
+ long capacity;
+ long expansion;
+} GList;
+
+extern long hash_name_id;
+extern StringNode **name_hash_nodes;
+extern void (*GListErrorProc)();
+
+// extern void GListError();
+extern int InitGList(GList *list, long capacity);
+extern void FreeGList(GList *list);
+extern void LockGList(GList *list);
+extern void UnlockGList(GList *list);
+extern void ShrinkGList(GList *list);
+extern void AppendGListData(GList *list, const void *data, long size);
+extern void AppendGListNoData(GList *list, long size);
+extern void AppendGListByte(GList *list, char v);
+extern void AppendGListWord(GList *list, short v);
+extern void AppendGListTargetEndianWord(GList *list, short v);
+extern void AppendGListLong(GList *list, long v);
+extern void AppendGListTargetEndianLong(GList *list, long v);
+extern void AppendGListID(GList *list, const char *str);
+extern void AppendGListName(GList *list, const char *str);
+extern void RemoveGListData(GList *list, long size);
+extern char GetGListByte(GList *list);
+extern short GetGListWord(GList *list);
+extern long GetGListLong(GList *list);
+extern short GetGListID(GList *list, char *buf);
+extern void GetGListData(GList *list, char *buf, long size);
+// extern long hashpjw(const char *str);
+// extern short PHash(const unsigned char *str);
+extern short CHash(const char *str);
+extern StringNode *GetHashNameNode(const char *str);
+extern StringNode *GetHashNameNodeHash(const char *str, short hash);
+extern StringNode *GetHashNameNodeHash2(const char *str, short hash);
+extern StringNode *GetHashNameNodeExport(const char *str);
+extern long GetHashNameNodeExportID(StringNode *node);
+extern StringNode *GetHashNameNodeByID(long id);
+extern void NameHashExportReset();
+extern void NameHashWriteNameTable(GList *list);
+extern void NameHashWriteTargetEndianNameTable(GList *list);
+extern void InitNameHash();
+
+typedef void (*heaperror_t)();
+
+extern long CTool_TotalHeapSize();
+// extern void getheapinfo(HeapInfo *result, Allocator *heap);
+extern void CTool_GetHeapInfo(HeapInfo *result, unsigned char heapID);
+// extern void MoreHeapSpace(Allocator *alloc, long size);
+extern int initheaps(heaperror_t failureCallback);
+extern int initgheap(heaperror_t failureCallback);
+extern heaperror_t getheaperror();
+extern void setheaperror(heaperror_t failureCallback);
+// extern void relheap(Allocator *alloc);
+extern void releaseheaps();
+extern void releasegheap();
+extern void releaseoheap();
+extern char *galloc(long size);
+extern char *lalloc(long size);
+extern char *aalloc(long size);
+extern char *oalloc(long size);
+extern char *balloc(long size);
+
+extern void locklheap();
+extern void unlocklheap();
+extern void freelheap();
+extern void freeaheap();
+extern void freeoheap();
+extern void freebheap();
+
+extern char *ScanHex(char *str, long *output, Boolean *overflow);
+extern char *ScanOct(char *str, long *output, Boolean *overflow);
+extern char *ScanDec(char *str, long *output, Boolean *overflow);
+
+// extern char *UnmangleClassname(char *work, char **pNameStart, short *pNameLength, char **a4, short *a5, Boolean a6);
+// extern char *UnmangleAppend(char *src, char srcLen, char **pOutput, short *pOutputLen);
+extern void OldUnmangle(char *input, char *output, Boolean flag);
+
+extern short hash(char *str);
+extern void memclr(void *buffer, long size);
+extern void memclrw(void *buffer, long size);
+extern void CToLowercase(char *src, char *dst);
+extern int getbit(long v);
+typedef struct {
+ unsigned long a, b;
+} WtfWord64; // this has to make sense, somehow... but how?
+extern void CTool_EndianConvertWord64(WtfWord64 value, unsigned long long *p);
+extern unsigned short CTool_EndianConvertInPlaceWord16Ptr(unsigned short *p);
+extern unsigned long CTool_EndianConvertInPlaceWord32Ptr(unsigned long *p);
+extern void CTool_EndianConvertVector128(); // not correct but idc
+extern StringNode *CTool_GetPathName(const FSSpec *spec, long *mdDat);
+extern Boolean strcat_safe(char *dst, const char *src, int maxLen);