//<inline(py_registry)> //------------------------------------------------------------------------- PyObject *py_reg_read_string(const char *name, const char *subkey = NULL, const char *def = NULL) { PYW_GIL_CHECK_LOCKED_SCOPE(); char utf8[MAXSTR * 10]; bool ok; Py_BEGIN_ALLOW_THREADS; if ( def == NULL ) { ok = reg_read_string(name, utf8, sizeof(utf8), subkey); } else { reg_read_string(name, sizeof(utf8), utf8, def, subkey); ok = true; } Py_END_ALLOW_THREADS; return PyString_FromString(ok ? utf8 : ""); }
void load_file_filters(HCESVC hkey_filters) { unsigned ext_key_idx = 0; UnicodeString ext_key_name; bool more = true; while (more) { // enum all file extensions DWORD key_name_size = 256; LONG res = RegEnumKeyExW(hkey_filters, ext_key_idx, ext_key_name.buf(key_name_size), &key_name_size, NULL, NULL, NULL, NULL); if (res == ERROR_NO_MORE_ITEMS) more = false; if (more) { CHECK_ADVAPI(res); ext_key_idx++; ext_key_name.set_size(key_name_size); // verify that key is really a file extension (starts with .) if ((ext_key_name.size() != 0) && (ext_key_name[0] == '.')) { FileFilters import_filters; FileFilters export_filters; export_filters.src_ext = import_filters.src_ext = ext_key_name.right(ext_key_name.size() - 1); // open file extension key HKEY hkey_ext; CHECK_ADVAPI(RegOpenKeyExW(hkey_filters, ext_key_name.data(), 0, KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS, &hkey_ext)); try { // default export and import filters UnicodeString default_export = reg_read_string(hkey_ext, L"DefaultExport", L"Binary Copy"); UnicodeString default_import = reg_read_string(hkey_ext, L"DefaultImport", L"Binary Copy"); // list of installed filters for current file extension HKEY hkey_list; LONG res = RegOpenKeyExW(hkey_ext, L"InstalledFilters", 0, KEY_QUERY_VALUE, &hkey_list); if (res != ERROR_FILE_NOT_FOUND) { CHECK_ADVAPI(res); try { unsigned value_idx = 0; // enum all installed filters for current file extension bool more = true; while (more) { Filter filter; DWORD value_name_size = 256; DWORD value_type; LONG res = RegEnumValueW(hkey_list, value_idx, filter.guid.buf(value_name_size), &value_name_size, NULL, &value_type, NULL, NULL); if (res == ERROR_NO_MORE_ITEMS) more = false; if (more) { CHECK_ADVAPI(res); filter.guid.set_size(value_name_size); value_idx++; // value is a string and not a key default value if ((value_type == REG_SZ) && (filter.guid.size() != 0)) { filter.guid.set_size(value_name_size); // open filter class information key HKEY hkey_pegasus; LONG res = RegOpenKeyExW(HKEY_CLASSES_ROOT, (L"CLSID\\" + filter.guid + L"\\PegasusFilter").data(), 0, KEY_QUERY_VALUE, &hkey_pegasus); // does filter class exist in registry? if (res != ERROR_FILE_NOT_FOUND) { CHECK_ADVAPI(res); try { // target file extension filter.dst_ext = reg_read_string(hkey_pegasus, L"NewExtension", L""); // filter GUID if (filter.dst_ext.size() != 0) { filter.description = reg_read_string(hkey_pegasus, L"Description", filter.dst_ext); if (RegQueryValueExW(hkey_pegasus, L"Export", NULL, NULL, NULL, NULL) == ERROR_SUCCESS) { // this is export filter if (filter.guid.icompare(default_export) == 0) export_filters.insert(0, filter); else export_filters += filter; } if (RegQueryValueExW(hkey_pegasus, L"Import", NULL, NULL, NULL, NULL) == ERROR_SUCCESS) { // this is import filter if (filter.guid.icompare(default_import) == 0) import_filters.insert(0, filter); else import_filters += filter; } } } finally (RegCloseKey(hkey_pegasus)); } } } } // end enum of installed filters } finally (RegCloseKey(hkey_list)); } }
/* Draw the "idle" display */ void lcd_home_screen(const char *status) { char buf[16]; struct storage s; int32_t s_hi,s_lo; float tf,slf,shf; lcd_cmd(LCD_DISPCTL(1,0,0)); /* No cursor */ lcd_cmd(LCD_DDADDR(ROW1)); /* Top left is station name, up to 8 characters */ reg_read_string(&ident,buf,9); var_str(buf); lcd_data(' '); /* Now current set range */ s=reg_storage(&set_lo); eeprom_read_block(&s_lo,(void *)s.loc.eeprom.start,4); slf=s_lo/10000.0; s=reg_storage(&set_hi); eeprom_read_block(&s_hi,(void *)s.loc.eeprom.start,4); shf=s_hi/10000.0; snprintf_P(buf,16,PSTR("%0.1f-%0.1f"),(double)slf,(double)shf); var_str(buf); lcd_data(' '); lcd_data(' '); lcd_data(' '); lcd_data(' '); lcd_data(' '); /* Next line */ lcd_cmd(LCD_DDADDR(ROW2)); if (status) { strncpy_P(buf,status,16); fixed_str(buf,16); } else { /* Bottom left is current temp, up to 5 characters */ if (t0_temp==BAD_TEMP) { sprintf_P(buf,PSTR("XXXXX")); } else { tf=t0_temp/10000.0; snprintf_P(buf,9,PSTR("%0.1f"),(double)tf); } fixed_str(buf,5); lcd_data(' '); /* Current mode */ reg_read_string(&mode,buf,9); fixed_str(buf,8); lcd_data(' '); /* Bottom right is valve state as 1 character */ switch (get_valve_state()) { case VALVE_CLOSED: buf[0]='-'; break; case VALVE_OPENING: buf[0]='O'; break; case VALVE_OPEN: buf[0]='|'; break; case VALVE_CLOSING: buf[0]='C'; break; case VALVE_ERROR: buf[0]='E'; break; default: buf[0]='?'; break; } fixed_str(buf,1); } }