MWCC/CompilerTools.h

135 lines
4.6 KiB
C

#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);