1 /* tempresult.c */
2 /*****************************************************************************/
3 /* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only                     */
4 /*                                                                           */
5 /* AS-Portierung                                                             */
6 /*                                                                           */
7 /* internal holder for int/float/string                                      */
8 /*                                                                           */
9 /*****************************************************************************/
10 
11 #include "stdinc.h"
12 
13 #include "strutil.h"
14 #include "asmdef.h"
15 #include "tempresult.h"
16 
17 /*!------------------------------------------------------------------------
18  * \fn     TempResultToFloat(TempResult *pResult)
19  * \brief  convert TempResult to float
20  * \param  pResult tempresult to convert
21  * \return 0 or error code
22  * ------------------------------------------------------------------------ */
23 
TempResultToFloat(TempResult * pResult)24 int TempResultToFloat(TempResult *pResult)
25 {
26   switch (pResult->Typ)
27   {
28     case TempInt:
29       pResult->Contents.Float = pResult->Contents.Int;
30       pResult->Typ = TempFloat;
31       break;
32     case TempFloat:
33       break;
34     default:
35       pResult->Typ = TempNone;
36       return -1;
37   }
38   return 0;
39 }
40 
41 /*!------------------------------------------------------------------------
42  * \fn     TempResultToPlainString(char *pDest, const TempResult *pResult, size_t DestSize)
43  * \brief  convert result to readable form
44  * \param  pDest where to write ASCII representation
45  * \param  pResult result to convert
46  * \param  DestSize size of dest buffer
47  * \return 0 or error code
48  * ------------------------------------------------------------------------ */
49 
TempResultToPlainString(char * pDest,const TempResult * pResult,size_t DestSize)50 int TempResultToPlainString(char *pDest, const TempResult *pResult, size_t DestSize)
51 {
52   switch (pResult->Typ)
53   {
54     case TempInt:
55       as_snprintf(pDest, DestSize, "%llld", pResult->Contents.Int);
56       break;
57     case TempFloat:
58       as_snprintf(pDest, DestSize, "%0.16e", pResult->Contents.Float);
59       KillBlanks(pDest);
60       break;
61     case TempString:
62     {
63       char TmpStr[2];
64 
65       TmpStr[0] = *pDest = (pResult->Flags & eSymbolFlag_StringSingleQuoted) ? '\'' : '"';
66       TmpStr[1] = '\0';
67       snstrlenprint(pDest + 1, DestSize - 1,
68                     pResult->Contents.Ascii.Contents, pResult->Contents.Ascii.Length,
69                     TmpStr[0]);
70       strmaxcat(pDest, TmpStr, DestSize);
71       break;
72     }
73     default:
74       return -1;
75   }
76   return 0;
77 }
78