Beispiel #1
0
//<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));
          }
        }
Beispiel #3
0
/* 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);
  }
}