format_int::format_int(t_int64 p_val,unsigned p_width,unsigned p_base) { bool neg = false; t_uint64 val; if (p_val < 0) {neg = true; val = (t_uint64)(-p_val);} else val = (t_uint64)p_val; enum {max_width = PFC_TABSIZE(m_buffer) - 1}; if (p_width > max_width) p_width = max_width; else if (p_width == 0) p_width = 1; if (neg && p_width > 1) p_width --; char temp[max_width]; unsigned n; for(n=0;n<max_width;n++) { temp[max_width-1-n] = format_hex_char((unsigned)(val % p_base)); val /= p_base; } for(n=0;n<max_width && temp[n] == '0';n++) {} if (n > max_width - p_width) n = max_width - p_width; char * out = m_buffer; if (neg) *(out++) = '-'; for(;n<max_width;n++) *(out++) = temp[n]; *out = 0; }
format_file_size_short::format_file_size_short(t_uint64 size) { t_uint64 scale = 1; const char * unit = "B"; const char * const unitTable[] = {"B","KB","MB","GB","TB"}; for(t_size walk = 1; walk < PFC_TABSIZE(unitTable); ++walk) { t_uint64 next = scale * 1024; if (size < next) break; scale = next; unit = unitTable[walk]; } *this << ( size / scale ); if (scale > 1 && length() < 3) { t_size digits = 3 - length(); const t_uint64 mask = pow_int(10,digits); t_uint64 remaining = ( (size * mask / scale) % mask ); while(digits > 0 && (remaining % 10) == 0) { remaining /= 10; --digits; } if (digits > 0) { *this << "." << format_uint(remaining, (t_uint32)digits); } } *this << " " << unit; m_scale = scale; }
format_uint::format_uint(t_uint64 val,unsigned p_width,unsigned p_base) { enum {max_width = PFC_TABSIZE(m_buffer) - 1}; if (p_width > max_width) p_width = max_width; else if (p_width == 0) p_width = 1; char temp[max_width]; unsigned n; for(n=0;n<max_width;n++) { temp[max_width-1-n] = format_hex_char((unsigned)(val % p_base)); val /= p_base; } for(n=0;n<max_width && temp[n] == '0';n++) {} if (n > max_width - p_width) n = max_width - p_width; char * out = m_buffer; for(;n<max_width;n++) *(out++) = temp[n]; *out = 0; }
void configToUI() { for ( unsigned i = 0; i < PFC_TABSIZE( flagsAndButtons ); ++ i ) { auto rec = flagsAndButtons[i]; // CCheckBox: WTL-PP class overlaying ToggleCheck(bool) and bool IsChecked() over WTL CButton CCheckBox cb ( GetDlgItem( rec.btnID ) ); cb.ToggleCheck( (m_flags & rec.flag ) != 0 ); } }
unsigned audio_chunk::g_channel_config_from_wfx(DWORD p_wfx) { unsigned ret = 0; unsigned n; for(n=0;n<PFC_TABSIZE(g_translation_table);n++) { if (p_wfx & g_translation_table[n].m_wfx) ret |= g_translation_table[n].m_native; } return ret; }
DWORD audio_chunk::g_channel_config_to_wfx(unsigned p_config) { DWORD ret = 0; unsigned n; for(n=0;n<PFC_TABSIZE(g_translation_table);n++) { if (p_config & g_translation_table[n].m_native) ret |= g_translation_table[n].m_wfx; } return ret; }
unsigned audio_chunk::g_channel_config_from_wfx(uint32_t p_wfx) { return p_wfx; #if 0 unsigned ret = 0; unsigned n; for(n=0;n<PFC_TABSIZE(g_translation_table);n++) { if (p_wfx & g_translation_table[n].m_wfx) ret |= g_translation_table[n].m_native; } return ret; #endif }
char charToASCII( unsigned c ) { if (c < 128) return (char)c; unsigned lo = 0, hi = PFC_TABSIZE(g_asciiMap); while( lo < hi ) { const unsigned mid = (lo + hi) / 2; const asciiMap_t entry = g_asciiMap[mid]; if ( c > entry.from ) { lo = mid + 1; } else if (c < entry.from) { hi = mid; } else { return (char)entry.to; } } return '?'; }
string_extension::string_extension(const char * src) { buffer[0]=0; const char * start = src + pfc::scan_filename(src); const char * end = start + strlen(start); const char * ptr = end-1; while(ptr>start && *ptr!='.') { if (*ptr=='?') end=ptr; ptr--; } if (ptr>=start && *ptr=='.') { ptr++; t_size len = end-ptr; if (len<PFC_TABSIZE(buffer)) { memcpy(buffer,ptr,len*sizeof(char)); buffer[len]=0; } } }
void OnButtonClicked(UINT uNotifyCode, int nID, CWindow wndCtl) { uint32_t flagToFlip = 0; for ( unsigned i = 0; i < PFC_TABSIZE( flagsAndButtons ); ++ i ) { auto rec = flagsAndButtons[i]; if ( rec.btnID == nID ) { flagToFlip = rec.flag; } } if ( flagToFlip != 0 ) { uint32_t newFlags = m_flags; CCheckBox cb ( wndCtl ); if (cb.IsChecked()) { newFlags |= flagToFlip; } else { newFlags &= ~flagToFlip; } if ( newFlags != m_flags ) { m_flags = newFlags; m_callback->on_min_max_info_change(); } } }
unsigned audio_chunk::g_guess_channel_config_xiph(unsigned count) { if (count == 0 || count >= PFC_TABSIZE(g_audio_channel_config_table_xiph)) throw exception_io_data(); return g_audio_channel_config_table_xiph[count]; }
unsigned audio_chunk::g_guess_channel_config(unsigned count) { if (count >= PFC_TABSIZE(g_audio_channel_config_table)) return 0; return g_audio_channel_config_table[count]; }
static const char * optimize_infoname(const char * p_string) { t_size index; if (!pfc::binarySearch<pfc::comparator_strcmp>::run(standard_infonames,0,PFC_TABSIZE(standard_infonames),p_string,index)) return NULL; return standard_infonames[index]; }
void GetOSVersionStringAppend(pfc::string_base & out) { if (FetchWineInfoAppend(out)) return; OSVERSIONINFO ver = {}; ver.dwOSVersionInfoSize = sizeof(ver); WIN32_OP( GetVersionEx(&ver) ); SYSTEM_INFO info = {}; GetNativeSystemInfo(&info); out << "Windows " << (int)ver.dwMajorVersion << "." << (int)ver.dwMinorVersion << "." << (int)ver.dwBuildNumber; if (ver.szCSDVersion[0] != 0) out << " " << pfc::stringcvt::string_utf8_from_os(ver.szCSDVersion, PFC_TABSIZE(ver.szCSDVersion)); switch(info.wProcessorArchitecture) { case PROCESSOR_ARCHITECTURE_AMD64: out << " x64"; break; case PROCESSOR_ARCHITECTURE_IA64: out << " IA64"; break; case PROCESSOR_ARCHITECTURE_INTEL: out << " x86"; break; } }