// Copyright 2018 plutoo

typedef struct {
    u32 Key;
    u32 Flags;
    u64 Value[2];
} ConfigEntry;

enum {
    EntryFlag_IsMandatory = BIT(0),
};

enum {
    EntryType_EndOfList=0,
    EntryType_MainThreadHandle=1,
    EntryType_NextLoadPath=2,
    EntryType_OverrideHeap=3,
    EntryType_OverrideService=4,
    EntryType_Argv=5,
    EntryType_SyscallAvailableHint=6,
    EntryType_AppletType=7,
    EntryType_AppletWorkaround=8,
    EntryType_StdioSockets=9,
    EntryType_ProcessHandle=10,
    EntryType_LastLoadResult=11
};

typedef void NORETURN (*LoaderReturnFn)(int result_code);

void envParse(void* ctx, Handle main_thread, LoaderReturnFn saved_lr);

Handle envGetMainThreadHandle(void);
bool envIsNso(void);

bool  envHasHeapOverride(void);
void* envGetHeapOverrideAddr(void);
u64   envGetHeapOverrideSize(void);

bool  envHasArgv(void);
u64   envGetArgc(void);
void* envGetArgv(void);

bool envIsSyscallHinted(u8 svc);

LoaderReturnFn envGetExitFuncPtr(void);