MCPcopy Create free account
hub / github.com/devkitPro/libctru / swkbdInputText

Function swkbdInputText

libctru/source/applets/swkbd.c:170–272  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

168}
169
170SwkbdButton swkbdInputText(SwkbdState* swkbd, char* buf, size_t bufsize)
171{
172 SwkbdExtra extra = swkbd->extra; // Struct copy
173
174 // Calculate sharedmem size
175 size_t sharedMemSize = 0;
176 sharedMemSize += (sizeof(u16)*(swkbd->max_text_len+1) + 3) &~ 3;
177 size_t dictOff = sharedMemSize;
178 sharedMemSize += (sizeof(SwkbdDictWord)*swkbd->dict_word_count + 3) &~ 3;
179 size_t statusOff = sharedMemSize;
180 sharedMemSize += swkbd->initial_status_offset >= 0 ? sizeof(SwkbdStatusData) : 0;
181 size_t learningOff = sharedMemSize;
182 sharedMemSize += swkbd->initial_learning_offset >= 0 ? sizeof(SwkbdLearningData) : 0;
183 if (swkbd->save_state_flags & BIT(0))
184 {
185 swkbd->status_offset = sharedMemSize;
186 sharedMemSize += sizeof(SwkbdStatusData);
187 }
188 if (swkbd->save_state_flags & BIT(1))
189 {
190 swkbd->learning_offset = sharedMemSize;
191 sharedMemSize += sizeof(SwkbdLearningData);
192 }
193 sharedMemSize = (sharedMemSize + 0xFFF) &~ 0xFFF;
194 swkbd->shared_memory_size = sharedMemSize;
195
196 // Allocate sharedmem
197 swkbdSharedMem = (char*)memalign(0x1000, sharedMemSize);
198 if (!swkbdSharedMem)
199 {
200 swkbd->result = SWKBD_OUTOFMEM;
201 return SWKBD_BUTTON_NONE;
202 }
203
204 // Create sharedmem block
205 Result res = svcCreateMemoryBlock(&swkbdSharedMemHandle, (u32)swkbdSharedMem, sharedMemSize, MEMPERM_READ|MEMPERM_WRITE, MEMPERM_READ|MEMPERM_WRITE);
206 if (R_FAILED(res))
207 {
208 free(swkbdSharedMem);
209 swkbd->result = SWKBD_OUTOFMEM;
210 return SWKBD_BUTTON_NONE;
211 }
212
213 // Copy stuff to shared mem
214 if (extra.initial_text)
215 {
216 swkbd->initial_text_offset = 0;
217 swkbdConvertToUTF16((u16*)swkbdSharedMem, extra.initial_text, swkbd->max_text_len);
218 }
219 if (extra.dict)
220 {
221 swkbd->dict_offset = dictOff;
222 memcpy(swkbdSharedMem+dictOff, extra.dict, sizeof(SwkbdDictWord)*swkbd->dict_word_count);
223 }
224 if (swkbd->initial_status_offset >= 0)
225 {
226 swkbd->initial_status_offset = statusOff;
227 memcpy(swkbdSharedMem+statusOff, extra.status_data, sizeof(SwkbdStatusData));

Callers

nothing calls this directly

Calls 4

swkbdConvertToUTF16Function · 0.85
aptSetMessageCallbackFunction · 0.85
aptLaunchLibraryAppletFunction · 0.85
swkbdConvertToUTF8Function · 0.85

Tested by

no test coverage detected