FBCALL FB_WCHAR *fb_WstrFill1( ssize_t chars, int c ) { FB_WCHAR *dst; if( chars <= 0 ) return NULL; /* alloc temp string */ dst = fb_wstr_AllocTemp( chars ); if( dst != NULL ) { /* fill it */ fb_wstr_Fill( dst, c, chars ); } return dst; }
FBCALL FB_WCHAR *fb_StrToWstr( const char *src ) { FB_WCHAR *dst; ssize_t chars; if( src == NULL ) return NULL; chars = strlen( src ); if( chars == 0 ) return NULL; dst = fb_wstr_AllocTemp( chars ); if( dst == NULL ) return NULL; fb_wstr_ConvFromA( dst, chars, src ); return dst; }
FBCALL FB_WCHAR *fb_WstrUcase2( const FB_WCHAR *src, int mode ) { FB_WCHAR *dst, *d; const FB_WCHAR *s; FB_WCHAR c; int chars, i; if( src == NULL ) return NULL; chars = fb_wstr_Len( src ); /* alloc temp string */ dst = fb_wstr_AllocTemp( chars ); if( dst == NULL ) return NULL; s = src; d = dst; if( mode == 1 ) { for( i = 0; i < chars; i++ ) { c = *s++; if( (c >= 97) && (c <= 122) ) c -= 97 - 65; *d++ = c; } } else { for( i = 0; i < chars; i++ ) { c = *s++; if( fb_wstr_IsLower( c ) ) c = fb_wstr_ToUpper( c ); *d++ = c; } } /* null char */ *d = _LC('\0'); return dst; }
FBCALL FB_WCHAR *fb_WstrTrimEx ( const FB_WCHAR *src, const FB_WCHAR *pattern ) { FB_WCHAR *dst; ssize_t len; const FB_WCHAR *p = src; if( src == NULL ) { return NULL; } { ssize_t len_pattern = fb_wstr_Len( pattern ); len = fb_wstr_Len( src ); if( len >= len_pattern ) { if( len_pattern==1 ) { p = fb_wstr_SkipChar( src, len, *pattern ); len -= fb_wstr_CalcDiff( src, p ); } else if( len_pattern != 0 ) { p = src; while (len >= len_pattern ) { if( fb_wstr_Compare( p, pattern, len_pattern )!=0 ) break; p += len_pattern; len -= len_pattern; } } } if( len >= len_pattern ) { if( len_pattern==1 ) { const FB_WCHAR *p_tmp = fb_wstr_SkipCharRev( p, len, *pattern ); len = fb_wstr_CalcDiff( p, p_tmp ); } else if( len_pattern != 0 ) { ssize_t test_index = len - len_pattern; while (len >= len_pattern ) { if( fb_wstr_Compare( p + test_index, pattern, len_pattern )!=0 ) break; test_index -= len_pattern; } len = test_index + len_pattern; } } } if( len > 0 ) { /* alloc temp string */ dst = fb_wstr_AllocTemp( len ); if( dst != NULL ) { /* simple copy */ fb_wstr_Copy( dst, p, len ); } else dst = NULL; } else dst = NULL; return dst; }
FBCALL FB_WCHAR *fb_FileWstrInput( ssize_t chars, int fnum ) { FB_FILE *handle; FB_WCHAR *dst; size_t len; int res = FB_RTERROR_OK; fb_DevScrnInit_ReadWstr( ); FB_LOCK(); handle = FB_FILE_TO_HANDLE(fnum); if( !FB_HANDLE_USED(handle) ) { FB_UNLOCK(); return NULL; } dst = fb_wstr_AllocTemp( chars ); if( dst != NULL ) { ssize_t read_chars = 0; if( FB_HANDLE_IS_SCREEN(handle) ) { while( read_chars != chars ) { res = fb_FileGetDataEx( handle, 0, (void *)&dst[read_chars], chars - read_chars, &len, TRUE, TRUE ); if( res != FB_RTERROR_OK ) break; read_chars += len; } } else { res = fb_FileGetDataEx( handle, 0, (void *)dst, chars, &len, TRUE, TRUE ); read_chars = chars; } if( res == FB_RTERROR_OK ) { dst[read_chars] = _LC('\0'); } else { fb_wstr_Del( dst ); dst = NULL; } } else res = FB_RTERROR_OUTOFMEM; FB_UNLOCK(); return dst; }
if( digits <= 0 ) { /* Only use the minimum amount of digits needed; need to count the important 3-bit (base 8) chunks in the number. And if it's zero, use 1 digit for 1 zero. */ digits = 0; num2 = num; while( num2 ) { digits += 1; num2 >>= 3; } if( digits == 0 ) digits = 1; } s = fb_wstr_AllocTemp( digits ); if( s == NULL ) return NULL; i = digits - 1; while( i >= 0 ) { s[i] = _LC('0') + (num & 7); /* '0'..'7' */ num >>= 3; i -= 1; } s[digits] = _LC('\0'); return s; } FBCALL FB_WCHAR *fb_WstrOct_l ( unsigned long long num )
FBCALL FB_WCHAR *fb_WstrTrimAny ( const FB_WCHAR *src, const FB_WCHAR *pattern ) { const FB_WCHAR *pachText = NULL; FB_WCHAR *dst; ssize_t len; if( src == NULL ) { return NULL; } len = 0; { ssize_t len_pattern = fb_wstr_Len( pattern ); pachText = src; len = fb_wstr_Len( src ); while ( len != 0 ) { ssize_t i; for( i=0; i!=len_pattern; ++i ) { if( wcschr( pattern, *pachText )!=NULL ) { break; } } if( i==len_pattern ) { break; } --len; ++pachText; } while ( len != 0 ) { ssize_t i; --len; for( i=0; i!=len_pattern; ++i ) { if( wcschr( pattern, pachText[len] )!=NULL ) { break; } } if( i==len_pattern ) { ++len; break; } } } if( len > 0 ) { /* alloc temp string */ dst = fb_wstr_AllocTemp( len ); if( dst != NULL ) { /* simple copy */ fb_wstr_Copy( dst, pachText, len ); } else dst = NULL; } else dst = NULL; return dst; }