2024-05-11 23:24:13 +02:00
|
|
|
package ime
|
|
|
|
|
|
|
|
|
|
import "core:c"
|
|
|
|
|
import sce "../common"
|
|
|
|
|
import sceCommonDialog "../CommonDialog"
|
|
|
|
|
|
|
|
|
|
SCE_IME_DIALOG_MAX_TITLE_LENGTH :: 128
|
|
|
|
|
SCE_IME_DIALOG_MAX_TEXT_LENGTH :: 2048
|
|
|
|
|
|
|
|
|
|
SCE_IME_WORK_BUFFER_SIZE :: (20*1024)
|
|
|
|
|
|
|
|
|
|
SCE_IME_MAX_PREEDIT_LENGTH :: (30)
|
|
|
|
|
SCE_IME_MAX_TEXT_LENGTH :: (2048)
|
|
|
|
|
|
|
|
|
|
SceImeDialogErrorCode :: enum c.uint {
|
|
|
|
|
PARAM = 0x80102001,
|
|
|
|
|
INTERNAL = 0x80102002,
|
|
|
|
|
INVALID_DIALOG_MODE = 0x80102003,
|
|
|
|
|
INVALID_TEXT_BOX_MODE = 0x80102004,
|
|
|
|
|
INVALID_TITLE = 0x80102005
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SceImeDialogDialogMode :: enum c.int {
|
|
|
|
|
DEFAULT = 0,
|
|
|
|
|
WITH_CANCEL = 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SceImeDialogTextboxMode :: enum c.int {
|
|
|
|
|
DEFAULT = 0,
|
|
|
|
|
PASSWORD = 1,
|
|
|
|
|
WITH_CLEAR = 2
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SceImeDialogButton :: enum c.int {
|
|
|
|
|
NONE = 0,
|
|
|
|
|
CLOSE = 1,
|
|
|
|
|
ENTER = 2
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SceImeDialogParam :: struct {
|
|
|
|
|
sdkVersion: sce.UInt32,
|
|
|
|
|
|
|
|
|
|
inputMethod: sce.UInt32,
|
|
|
|
|
supportedLanguages: sce.UInt64, //!< Dialog languages (One or more ::SceImeLanguage)
|
|
|
|
|
languagesForced: sce.Bool,
|
|
|
|
|
type: sce.UInt32, //!< Dialog type (One of ::SceImeType)
|
|
|
|
|
option: sce.UInt32, //!< Dialog options (One or more ::SceImeOption)
|
|
|
|
|
filter: SceImeTextFilter,
|
|
|
|
|
|
|
|
|
|
dialogMode: sce.UInt32, //!< Dialog mode (One of ::SceImeDialogDialogMode)
|
|
|
|
|
textBoxMode: sce.UInt32, //!< Textbox mode (One of ::SceImeDialogTextboxMode)
|
|
|
|
|
title: [^]sce.WChar16,
|
|
|
|
|
maxTextLength: sce.UInt32,
|
|
|
|
|
initialText: [^]sce.WChar16,
|
|
|
|
|
inputTextBuffer: [^]sce.WChar16,
|
|
|
|
|
|
|
|
|
|
commonParam: sceCommonDialog.SceCommonDialogParam,
|
|
|
|
|
|
|
|
|
|
enterLabel: sce.UChar8,
|
|
|
|
|
reserved: [35]sce.Char8,
|
|
|
|
|
}
|
|
|
|
|
when size_of(rawptr) == 4 {
|
|
|
|
|
#assert(size_of(SceImeDialogParam) == 0xA8)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SceImeDialogResult :: struct {
|
|
|
|
|
result: sce.Int32,
|
|
|
|
|
button: sce.Int32,
|
|
|
|
|
reserved: [28]sce.Char8,
|
|
|
|
|
}
|
|
|
|
|
#assert(size_of(SceImeDialogResult) == 0x24)
|
|
|
|
|
|
|
|
|
|
SceImeErrorCode :: enum c.uint {
|
|
|
|
|
ALREADY_OPENED = 0x80100700,
|
|
|
|
|
NOT_OPENED = 0x80100701,
|
|
|
|
|
INVALID_POINTER = 0x80100702,
|
|
|
|
|
INVALID_PARAM = 0x80100703,
|
|
|
|
|
NO_MEMORY = 0x80100704,
|
|
|
|
|
CONNECTION_FAILED = 0x80100705,
|
|
|
|
|
INVALID_TEXT = 0x80100706,
|
|
|
|
|
TOO_MANY_REQUESTS = 0x80100707,
|
|
|
|
|
INVALID_SIZE = 0x80100710,
|
|
|
|
|
INVALID_INPUT_METHOD = 0x80100712,
|
|
|
|
|
INVALID_SUPPORTED_LANGUAGES = 0x80100713,
|
|
|
|
|
INVALID_TYPE = 0x80100714,
|
|
|
|
|
INVALID_OPTION = 0x80100715,
|
|
|
|
|
INVALID_WORK = 0x80100716,
|
|
|
|
|
INVALID_ARG = 0x80100717,
|
|
|
|
|
INVALID_HANDLER = 0x80100718,
|
|
|
|
|
INVALID_MAX_TEXT_LENGTH = 0x80100719,
|
|
|
|
|
INVALID_INPUT_TEXT_BUFFER = 0x8010071a,
|
|
|
|
|
INVALID_RESERVED = 0x8010071b,
|
|
|
|
|
INVALID_ENTER_LABEL = 0x8010071c,
|
|
|
|
|
INTERNAL = 0x80100750
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SceImeLanguage :: enum c.ulonglong {
|
|
|
|
|
DANISH = 0x00000001,
|
|
|
|
|
GERMAN = 0x00000002,
|
|
|
|
|
ENGLISH = 0x00000004,
|
|
|
|
|
SPANISH = 0x00000008,
|
|
|
|
|
FRENCH = 0x00000010,
|
|
|
|
|
ITALIAN = 0x00000020,
|
|
|
|
|
DUTCH = 0x00000040,
|
|
|
|
|
NORWEGIAN = 0x00000080,
|
|
|
|
|
POLISH = 0x00000100,
|
|
|
|
|
PORTUGUESE = 0x00000200,
|
|
|
|
|
RUSSIAN = 0x00000400,
|
|
|
|
|
FINNISH = 0x00000800,
|
|
|
|
|
SWEDISH = 0x00001000,
|
|
|
|
|
JAPANESE = 0x00002000,
|
|
|
|
|
KOREAN = 0x00004000,
|
|
|
|
|
SIMPLIFIED_CHINESE = 0x00008000,
|
|
|
|
|
TRADITIONAL_CHINESE = 0x00010000,
|
|
|
|
|
PORTUGUESE_BR = 0x00020000,
|
|
|
|
|
ENGLISH_GB = 0x00040000,
|
|
|
|
|
TURKISH = 0x00080000,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SceImeType :: enum c.int {
|
|
|
|
|
DEFAULT = 0,
|
|
|
|
|
BASIC_LATIN = 1,
|
|
|
|
|
NUMBER = 2,
|
|
|
|
|
EXTENDED_NUMBER = 3,
|
|
|
|
|
URL = 4,
|
|
|
|
|
MAIL = 5
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SceImeEnterLabel :: enum c.int {
|
|
|
|
|
DEFAULT = 0,
|
|
|
|
|
SEND = 1,
|
|
|
|
|
SEARCH = 2,
|
|
|
|
|
GO = 3
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SceImeOption :: enum c.int {
|
|
|
|
|
MULTILINE = 0x01,
|
|
|
|
|
NO_AUTO_CAPITALIZATION = 0x02,
|
|
|
|
|
NO_ASSISTANCE = 0x04
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SceImeEvent :: enum c.int {
|
|
|
|
|
OPEN = 0,
|
|
|
|
|
UPDATE_TEXT = 1,
|
|
|
|
|
UPDATE_CARET = 2,
|
|
|
|
|
CHANGE_SIZE = 3,
|
|
|
|
|
PRESS_CLOSE = 4,
|
|
|
|
|
PRESS_ENTER = 5
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SceImeRect :: struct {
|
|
|
|
|
x: sce.UInt32,
|
|
|
|
|
y: sce.UInt32,
|
|
|
|
|
width: sce.UInt32,
|
|
|
|
|
height: sce.UInt32,
|
|
|
|
|
}
|
|
|
|
|
#assert(size_of(SceImeRect) == 0x10)
|
|
|
|
|
|
|
|
|
|
SceImeEditText :: struct {
|
|
|
|
|
preeditIndex: sce.UInt32,
|
|
|
|
|
preeditLength: sce.UInt32,
|
|
|
|
|
caretIndex: sce.UInt32,
|
|
|
|
|
str: [^]sce.WChar16,
|
|
|
|
|
editIndex: sce.UInt32,
|
|
|
|
|
editLengthChange: sce.Int32,
|
|
|
|
|
}
|
|
|
|
|
when size_of(rawptr) == 4 {
|
|
|
|
|
#assert(size_of(SceImeEditText) == 0x18)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SceImeEventParam :: struct #raw_union {
|
|
|
|
|
rect: SceImeRect,
|
|
|
|
|
text: SceImeEditText,
|
|
|
|
|
caretIndex: sce.UInt32,
|
|
|
|
|
reserved: [40]sce.UChar8,
|
|
|
|
|
}
|
|
|
|
|
#assert(size_of(SceImeEventParam) == 0x28)
|
|
|
|
|
|
|
|
|
|
SceImeEventData :: struct #packed {
|
|
|
|
|
id: sce.UInt32,
|
|
|
|
|
param: SceImeEventParam,
|
|
|
|
|
}
|
|
|
|
|
#assert(size_of(SceImeEventData) == 0x2C)
|
|
|
|
|
|
|
|
|
|
SceImeCaret :: struct {
|
|
|
|
|
x: sce.UInt32,
|
|
|
|
|
y: sce.UInt32,
|
|
|
|
|
height: sce.UInt32,
|
|
|
|
|
index: sce.UInt32,
|
|
|
|
|
}
|
|
|
|
|
#assert(size_of(SceImeCaret) == 0x10)
|
|
|
|
|
|
|
|
|
|
SceImePreeditGeometry :: struct {
|
|
|
|
|
x: sce.UInt32,
|
|
|
|
|
y: sce.UInt32,
|
|
|
|
|
height: sce.UInt32,
|
|
|
|
|
}
|
|
|
|
|
#assert(size_of(SceImePreeditGeometry) == 0xC)
|
|
|
|
|
|
|
|
|
|
SceImeTextFilter :: #type ^proc(
|
|
|
|
|
outText: [^]sce.WChar16,
|
|
|
|
|
outTextLength: ^sce.UInt32,
|
|
|
|
|
srcText: [^]sce.WChar16,
|
|
|
|
|
srcTextLength: sce.UInt32) -> sce.UInt32
|
2024-05-13 19:02:17 +02:00
|
|
|
SceImeEventHandler :: #type ^proc(arg: rawptr, #by_ptr e: SceImeEventData)
|
2024-05-11 23:24:13 +02:00
|
|
|
|
|
|
|
|
SceImeParam :: struct {
|
|
|
|
|
sdkVersion: sce.UInt32,
|
|
|
|
|
|
|
|
|
|
inputMethod: sce.UInt32,
|
|
|
|
|
supportedLanguages: sce.UInt64, //!< Dialog languages (One or more ::SceImeLanguage)
|
|
|
|
|
languagesForced: sce.Bool,
|
|
|
|
|
type: sce.UInt32, //!< Dialog type (One of ::SceImeType)
|
|
|
|
|
option: sce.UInt32, //!< Dialog options (One or more ::SceImeOption)
|
|
|
|
|
|
|
|
|
|
work: rawptr,
|
|
|
|
|
arg: rawptr,
|
|
|
|
|
handler: SceImeEventHandler,
|
|
|
|
|
filter: SceImeTextFilter,
|
|
|
|
|
|
|
|
|
|
initialText: [^]sce.WChar16,
|
|
|
|
|
maxTextLength: sce.UInt32,
|
|
|
|
|
inputTextBuffer: [^]sce.WChar16,
|
|
|
|
|
|
|
|
|
|
enterLabel: sce.UChar8,
|
|
|
|
|
reserved: [7]sce.UChar8,
|
|
|
|
|
}
|
|
|
|
|
when size_of(rawptr) == 4 {
|
|
|
|
|
#assert(size_of(SceImeParam) == 0x40)
|
|
|
|
|
}
|
|
|
|
|
|