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