#ifndef RVL_SDK_VF_PF_STRING_H
#define RVL_SDK_VF_PF_STRING_H

#include "common.h"
#ifdef __cplusplus
extern "C" {
#endif

typedef enum {
    PFSTR_CODEMODE_NONE,
    PFSTR_CODEMODE_OEM,
    PFSTR_CODEMODE_UNICODE,
    PFSTR_CODEMODE_LOCAL,
} PFSTR_CodeMode;

typedef struct PF_STR {
    const char *head;  // at 0x0
    const char *tail;  // at 0x4
    const char *local; // at 0x8
    u32 mode;          // at 0xC
} PF_STR;

void VFiPFSTR_SetCodeMode(PF_STR *str, u32 mode);
u32 VFiPFSTR_GetCodeMode(PF_STR *str);
void VFiPFSTR_SetLocalStr(PF_STR *str, char *local);
char *VFiPFSTR_GetStrPos(PF_STR *str, u32 target);
void VFiPFSTR_MoveStrPos(PF_STR *str, s16 n);
s32 VFiPFSTR_InitStr(PF_STR *str, const char *s, u32 mode);
u16 VFiPFSTR_StrLen(PF_STR *str);
u16 VFiPFSTR_StrNumChar(PF_STR *str, u32 target);
s32 VFiPFSTR_StrCmp(const PF_STR *str, const char *cmp);
int VFiPFSTR_StrNCmp(PF_STR *str, const char *cmp, u32 target, s16 offset, u16 n);
void VFiPFSTR_ToUpperNStr(PF_STR *str, u16 n, char *out);

#ifdef __cplusplus
}
#endif
#endif
