from stdint import *
import w32.win32console
import t, c
from t import CInt, CExport
import memhub
import stdlib
import sys
import os
import os._win32
import os._posix
import os.path
import shutil
import subprocess
import syslibtest_impl


# MBuddy arena 大小：1MB
ARENA_SIZE: t.CDefine = 1048576


def main() -> CInt | CExport:
    w32.win32console.SetConsoleCP(65001)
    w32.win32console.SetConsoleOutputCP(65001)

    # 初始化全局 MBuddy 内存分配器
    arena: bytes = stdlib.malloc(ARENA_SIZE)
    mbuddy_obj: memhub.MemBuddy | t.CPtr = memhub.MemBuddy(arena, ARENA_SIZE)

    # 将 MBuddy 对象赋值给所有需要内存分配的模块
    sys._mbuddy = mbuddy_obj
    os._mbuddy = mbuddy_obj
    os._win32._mbuddy = mbuddy_obj
    os._posix._mbuddy = mbuddy_obj
    os.path._mbuddy = mbuddy_obj
    shutil._mbuddy = mbuddy_obj
    subprocess._mbuddy = mbuddy_obj

    return syslibtest_impl.run()
