FreeBASIC  0.91.0
str_cvmk.c
Go to the documentation of this file.
1 /* CV# and MK#$ routines */
2 
3 #include "fb.h"
4 
5 static void hCV( FBSTRING *str, ssize_t len, void *num )
6 {
7  ssize_t i;
8 
9  if( str == NULL )
10  return;
11 
12  if( (str->data != NULL) && (FB_STRSIZE( str ) >= len) )
13  {
14  for( i = 0; i < len; i++ )
15  ((char *)num)[i] = str->data[i];
16  }
17 
18  /* del if temp */
19  fb_hStrDelTemp( str );
20 }
21 
22 FBCALL double fb_CVD( FBSTRING *str )
23 {
24  double num = 0.0;
25  hCV( str, sizeof( double ), &num );
26  return num;
27 }
28 
29 FBCALL float fb_CVS( FBSTRING *str )
30 {
31  float num = 0.0;
32  hCV( str, sizeof( float ), &num );
33  return num;
34 }
35 
36 FBCALL short fb_CVSHORT( FBSTRING *str )
37 {
38  short num = 0;
39  hCV( str, sizeof( short ), &num );
40  return num;
41 }
42 
43 /* 32bit legacy, fbc after 64bit port always calls fb_CVL() or fb_CVLONGINT() */
44 FBCALL int fb_CVI( FBSTRING *str )
45 {
46  int num = 0;
47  hCV( str, sizeof( int ), &num );
48  return num;
49 }
50 
51 FBCALL int fb_CVL( FBSTRING *str )
52 {
53  int num = 0;
54  hCV( str, sizeof( int ), &num );
55  return num;
56 }
57 
58 FBCALL long long fb_CVLONGINT( FBSTRING *str )
59 {
60  long long num = 0;
61  hCV( str, sizeof( long long ), &num );
62  return num;
63 }
64 
65 static FBSTRING *hMK( ssize_t len, void *num )
66 {
67  ssize_t i;
68  FBSTRING *dst;
69 
70  /* alloc temp string */
71  dst = fb_hStrAllocTemp( NULL, len );
72  if( dst != NULL )
73  {
74  /* convert */
75  for( i = 0; i < len; i++ )
76  dst->data[i] = ((char *)num)[i];
77 
78  dst->data[len] = '\0';
79  }
80  else
81  dst = &__fb_ctx.null_desc;
82 
83  return dst;
84 }
85 
86 FBCALL FBSTRING *fb_MKD( double num )
87 {
88  return hMK( sizeof( double ), &num );
89 }
90 
91 FBCALL FBSTRING *fb_MKS( float num )
92 {
93  return hMK( sizeof( float ), &num );
94 }
95 
96 FBCALL FBSTRING *fb_MKSHORT( short num )
97 {
98  return hMK( sizeof( short ), &num );
99 }
100 
101 FBCALL FBSTRING *fb_MKI( ssize_t num )
102 {
103  return hMK( sizeof( num ), &num );
104 }
105 
106 FBCALL FBSTRING *fb_MKL( int num )
107 {
108  return hMK( sizeof( num ), &num );
109 }
110 
111 FBCALL FBSTRING *fb_MKLONGINT( long long num )
112 {
113  return hMK( sizeof( long long ), &num );
114 }