int list_files(exword_t *d) { int rsp, i; directory_entry_t *entries; uint16_t len; rsp = exword_list(d, &entries, &len); if (rsp != 0x20) goto fail; for (i = 0; i < len; i++) { print_entry(entries + i); } exword_free_list(entries); fail: return rsp; }
DirEnts Exword::List(wxString path, wxString pattern) { exword_dirent_t *entries; uint16_t count; DirEnts list; wxString fullpath = GetStoragePath() + path; if (IsConnected()) { if (exword_setpath(m_device, (uint8_t*)fullpath.utf8_str().data(), 0) == EXWORD_SUCCESS) { if (exword_list(m_device, &entries, &count) == EXWORD_SUCCESS) { for (int i = 0; i < count; i++) { DirEntry entry(&entries[i]); if (wxMatchWild(pattern.Lower(), entry.GetFilename().Lower(), true)) list.Add(entry); } exword_free_list(entries); } } } return list; }
bool Exword::IsSdInserted() { exword_dirent_t *entries; uint16_t count; bool found = false; if (!IsConnected()) return found; if (exword_setpath(m_device, (uint8_t*)"", 0) == EXWORD_SUCCESS) { if (exword_list(m_device, &entries, &count) == EXWORD_SUCCESS) { for (int i = 0; i < count; i++) { if (strcmp((const char*)entries[i].name, "_SD_00") == 0) found = true; } exword_free_list(entries); } } return found; }
bool Exword::Authenticate(wxString user, wxMemoryBuffer& key) { bool success = false; int rsp; uint16_t count; exword_dirent_t *entries; exword_authchallenge_t c; exword_authinfo_t ai; exword_userid_t u; if (!IsConnected()) return success; memcpy(c.challenge, key.GetData(), 20); memcpy(ai.blk1, "FFFFFFFFFFFFFFFF", 16); strncpy((char*)ai.blk2, user.utf8_str().data(), 24); strncpy(u.name, user.utf8_str().data(), 16); exword_setpath(m_device, (uint8_t*)"\\_INTERNAL_00", 0); rsp = exword_authchallenge(m_device, c); if (rsp == EXWORD_SUCCESS) { exword_setpath(m_device, (uint8_t*)"", 0); exword_list(m_device, &entries, &count); for (int i = 0; i < count; i++) { if (strcmp((const char*)entries[i].name, "_SD_00") == 0) { exword_setpath(m_device, (uint8_t*)"\\_SD_00", 0); rsp = exword_authchallenge(m_device, c); if (rsp != EXWORD_SUCCESS) exword_authinfo(m_device, &ai); } } exword_free_list(entries); exword_userid(m_device, u); success = true; } return success; }