Raspberry BASIC

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - John Spikowski

Pages: 1 ... 7 8 [9] 10 11 ... 16
121
Programming Challenges / Re: SALC Ubuntu 64
« on: December 16, 2019, 12:22:58 AM »
Python3 (Ubuntu 64 RPi 4B 4GB)

Code: Python
  1. # Python 3 - 1mil4.py - AIR
  2.  
  3. def main():
  4.     t = []
  5.     r =""
  6.     a = [None] * 1000001
  7.     b = bytearray(26)
  8.     decode = bytearray.decode
  9.     blah = range(1000001)
  10.     append = list.append
  11.  
  12.     for x in blah:
  13.         alpha = x % 26
  14.         b[alpha] = alpha + 65
  15.         a[x] = x
  16.         if alpha == 25:
  17.             append(t, decode(b[::-1]))
  18.  
  19.     r = ''.join(t)
  20.  
  21.     print("r LEN: {}".format(len(r)))
  22.     print("Front: {}".format(r[:26]))
  23.     print("Back:  {}".format(r[-26:]))
  24.     print("UBVal: {}".format(a[1000000]))
  25.  
  26. if __name__ == "__main__":
  27.     main()
  28.  


ubuntu@rpi4b:~/salc/python-dev$ timex python3 1mil4.py
r LEN: 999986
Front: ZYXWVUTSRQPONMLKJIHGFEDCBA
Back:  ZYXWVUTSRQPONMLKJIHGFEDCBA
UBVal: 1000000
0.49user 0.06system 0:00.56elapsed 99%CPU (0avgtext+0avgdata 52408maxresident)k
0inputs+0outputs (0major+12086minor)pagefaults 0swaps
ubuntu@rpi4b:~/salc/python-dev$


122
Programming Challenges / Re: SALC Ubuntu 64
« on: December 16, 2019, 12:07:51 AM »
C (Ubuntu 64 RPi 4B 4GB)

Code: C
  1. // C - 1mil4.c - AIR
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <glib.h>
  6. #include <glib/gprintf.h>
  7.  
  8. int main(int argc, char **argv) {
  9.         GString *s = g_string_new(NULL);
  10.         GString *t = g_string_new(NULL);
  11.         int a[1000001] = {0};
  12.  
  13.         for (int x = 0; x < 1000001; x++) {
  14.                 a[x] = x;
  15.                 g_string_append_c(s,(char)(x%26)+65);
  16.                 if (s->len == 26) {
  17.                         g_string_append(t,g_strreverse(s->str));
  18.                         g_string_assign(s,"");
  19.                 }
  20.         }
  21.  
  22.         g_printf("r LEN: %d\n",t->len);
  23.         g_printf("Front: %.*s\n", 26, t->str);
  24.         g_printf("Back:  %s\n", t->str + t->len - 26);
  25.         g_printf("UBVal: %d\n",a[1000000]);
  26.  
  27.         g_string_free (s,TRUE);
  28.         g_string_free (t,TRUE);
  29. }
  30.  


ubuntu@rpi4b:~/salc/c$ gcc -O3 1mil4.c  $(pkg-config --libs --cflags glib-2.0) -o 1mil4
1mil4.c: In function ‘main’:
1mil4.c:22:27: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘gsize’ {aka ‘long unsigned int’} [-Wformat=]
   22 |         g_printf("r LEN: %d\n",t->len);
      |                          ~^    ~~~~~~
      |                           |     |
      |                           int   gsize {aka long unsigned int}
      |                          %ld
ubuntu@rpi4b:~/salc/c$ ls -l 1mil4
-rwxr-xr-x 1 ubuntu ubuntu 13704 Dec 15 16:03 1mil4
ubuntu@rpi4b:~/salc/c$ timex ./1mil4
r LEN: 999986
Front: ZYXWVUTSRQPONMLKJIHGFEDCBA
Back:  ZYXWVUTSRQPONMLKJIHGFEDCBA
UBVal: 1000000
0.01user 0.01system 0:00.03elapsed 93%CPU (0avgtext+0avgdata 6576maxresident)k
0inputs+0outputs (0major+1352minor)pagefaults 0swaps
ubuntu@rpi4b:~/salc/c$


123
General Discussion / Re: Ubuntu 64 RPI 4B
« on: December 15, 2019, 09:51:04 PM »
Thanks AIR, I'll give that a try.

124
Programming Challenges / Re: SALC Ubuntu 64
« on: December 15, 2019, 10:15:24 AM »
ScriptBasic (Ubuntu 64 RPi 4B 4GB)

Code: Script BASIC
  1. ' ScriptBasic - 1mil4.sb
  2.  
  3. OPEN  "t_file" FOR OUTPUT AS #1
  4.  
  5. s = ""
  6. SPLITA STRING(1000001,"0") BY "" TO a
  7.  
  8. FOR x = 1 TO 1000000
  9.   s &= CHR(((x - 1) % 26) + 65)
  10.   a[x] = x
  11.   IF LEN(s) = 26 THEN
  12.     PRINT #1, s
  13.     s = ""
  14.   END IF
  15. NEXT
  16. CLOSE(1)
  17.  
  18. flen = FILELEN("t_file")
  19. OPEN "t_file" FOR INPUT AS #1
  20. t = INPUT(flen, 1)
  21. CLOSE(1)
  22. t = STRREVERSE(t)
  23.  
  24. PRINT "t LEN: ",LEN(t),"\n"
  25. PRINT "Front: ",LEFT(t, 26),"\n"
  26. PRINT "Back:  ",RIGHT(t, 26),"\n"
  27. PRINT "UBVal: ",a[1000000],"\n"
  28.  


ubuntu@rpi4b:~/sbrt/examples$ timex scriba 1mil4.sb
t LEN: 999986
Front: ZYXWVUTSRQPONMLKJIHGFEDCBA
Back:  ZYXWVUTSRQPONMLKJIHGFEDCBA
UBVal: 1000000
6.60user 0.79system 0:07.42elapsed 99%CPU (0avgtext+0avgdata 277268maxresident)k
0inputs+1960outputs (0major+69241minor)pagefaults 0swaps
ubuntu@rpi4b:~/sbrt/examples$


No big improvement with ScriptBasic under 64 bit on the RPi 4B. Everything built  fine using the Linux dependency list.

125
Programming Challenges / Re: SALC Ubuntu 64
« on: December 15, 2019, 08:47:47 AM »
I think a round 4 is in order but this time running on Ubuntu 64 on the RPi 4B 4GB.

126
Programming Challenges / Re: SALC Ubuntu 64
« on: December 15, 2019, 08:19:34 AM »
I need to build ScriptBasic on this Ubuntu 64 RPi 4B.


127
General Discussion / Ubuntu 64 RPI 4B
« on: December 15, 2019, 08:08:16 AM »
On AIR's lead, I was able to  install Ubuntu server 19.10.1 on my RPi 4B 4GB. I then installed the Unity Desktop. This is so cool to run what I have on my laptop  on my RPi.

It seems to run well.

I said 5 years ago that I was done with 32 bit Linux. That was until the Raspberry Pi came along. I'm done with hobby Raspbian 32 and relieved I'm running on a commercial grade supported 64 bit OS.

128
Programming Challenges / Re: SALC Rasbian 32
« on: December 15, 2019, 06:37:39 AM »
This is running the string / array language challenge on my Lenovo laptop running Ubuntu 19.10. A lot better than the 50 seconds I started off with.


ubuntu@ubuntu:~/sbrt/examples$ timex scriba 1mil3.sb
t LEN: 999986
Front: ZYXWVUTSRQPONMLKJIHGFEDCBA
Back:  ZYXWVUTSRQPONMLKJIHGFEDCBA
UBVal: 1000000
2.12user 0.13system 0:02.26elapsed 99%CPU (0avgtext+0avgdata 277936maxresident)k
408inputs+2008outputs (3major+69233minor)pagefaults 0swaps
ubuntu@ubuntu:~/sbrt/examples$


129
FreeBasic / Re: FreeBasic RPi Install
« on: December 15, 2019, 06:00:52 AM »
I'm going to try and build ScriptBasic on Ubuntu 64 for the RPi 4B.

130
Nim / Re: Nim SB
« on: December 15, 2019, 04:29:27 AM »
I'm beginning to think the best way to deal with calling ScriptBasic functions is to pass and return sbdata structures. SB as the host made this a seamless call.

I think I'm going to create a SB_DataGet and SB_DataSet which will use a static SBData structure the exported functions will use. I don't want to force the host to use C data structures as arguments.

131
Programming Challenges / Re: SALC Rasbian 32
« on: December 15, 2019, 02:19:03 AM »
I still have a couple 256 GB SD cards I haven't used. Where can I get the 64 bit OS you used for the RPi 4B?

Found it.

https://ubuntu.com/download/raspberry-pi

132
Programming Challenges / Re: SALC Rasbian 32
« on: December 15, 2019, 01:26:12 AM »
Looks like 32 bit is hosed. I wonder how Swift would run on a non-RPI in 32 bit.

133
FreeBasic / FreeBasic RPi Install
« on: December 15, 2019, 01:19:34 AM »
Here is the install instructions for installing FreeBasic on the Raspberry Pi.

Quote
wget http://users.freebasic-portal.de/stw/builds/linux-armv7a-hf-debian/freebasic.deb
wget http://users.freebasic-portal.de/stw/builds/freebasic-headers.deb
sudo dpkg -i freebasic.deb
sudo dpkg -i freebasic-headers.deb
apt-get update
apt-get install -f

134
Nim / Re: Nim SB
« on: December 14, 2019, 05:36:43 AM »
Here is a ScriptBasic embedded example using MBC.

$execon "-I/home/jrs/sb/source /home/jrs/sb/source/lmt_none.c -lscriba"
 
#include <scriba.h>
#include <getopt.h>
 
Dim pProgram As pSbProgram
' Dim qdat As pSbData
Dim v As long
' Dim m As long
Dim f1 As long
Dim f2 As long
Dim dVal=11 as long
Dim cArgs As long
Dim ReturnData As SbData
dim ArgData[4] As SbData
 
' LOADING AND RUNNING THE PROGRAM
pProgram = scriba_new(malloc, free)
scriba_SetFileName(pProgram, "E03.bas")
scriba_LoadSourceProgram(pProgram)
scriba_NoRun(pProgram)
 
'' ACCESSING GLOBAL DATA
v = scriba_LookupVariableByName(pProgram, "main::a")
 
'** NO NEED TO PASS THE VARIABLE TO THE qdat STRUCT
'scriba_GetVariable(pProgram, v, &qdat)
 
'** NO NEED FOR EXTRA VARIABLE BELOW (OR A SBDATA POINTER TO qdat)
'~ m = qdat->v.l + 100
 
'** BECAUSE WE CAN SET THE VALUE IN THE STRUCT DIRECTLY, IF WE WANT
'qdat->v.l=100
 
'** THEN PASS IT TO THE FUNCTION
'scriba_SetVariable(pProgram, v, 2, qdat->v.l, 0, "", 0)
 
'** OR WE CAN PASS THE VALUE WE WANT TO SET TO THE RETRIEVED
'** SCRIPTBASIC "a" VARIABLE >>DIRECTLY<< IN THE FOURTH PARAMETER
scriba_SetVariable(pProgram, v, 2, 500, 0, "", 0)
 
'' CALLING SIMPLE SUBROUTINE
f1 = scriba_LookupFunctionByName(pProgram, "main::dprint")
scriba_Call(pProgram, f1)
 
' CALLING FUNCTION, RETURNING DATA AND GETTING ALTERED PARAMS
f2 = scriba_LookupFunctionByName(pProgram, "main::eprint")
 
' SETUP ARGUMENTS - these can be used for both input and output
 
' ArgData[0].type = SBT_DOUBLE
' ArgData[1].type = SBT_DOUBLE
' ArgData[2].type = SBT_DOUBLE
' ArgData[3].type = SBT_DOUBLE
'
' ArgData[0].size = 0
' ArgData[1].size = 0
' ArgData[2].size = 0
' ArgData[3].size = 0
'
' ArgData[0].v.d = 11
' ArgData[1].v.d = 12
' ArgData[2].v.d = 13
' ArgData[3].v.d = 14
'
' cArgs = 4
 
' SETUP ARGUMENTS - shorter code
 
for cArgs=0 to 3
  ArgData[cArgs].type = SBT_DOUBLE
  ArgData[cArgs].size = 0
  ArgData[cArgs].v.d = dVal+cArgs
next
 
scriba_CallArgEx(pProgram, f2, &ReturnData, cArgs, ArgData)
print "Return type:",ReturnData.type
print "Value:";
 
' READ RETURNED VALUE
select case ReturnData.type
 case SBT_UNDEF  :                print "Undefined"
 case SBT_DOUBLE :                print ReturnData.v.d
 case SBT_LONG   :                print ReturnData.v.l
 case =SBT_STRING or =SBT_ZCHAR : print (CHAR PTR)ReturnData.v.s
end select
 
scriba_destroy(pProgram)

135
Nim / Re: Nim SB
« on: December 14, 2019, 04:20:00 AM »
AIR,

It looks like I'm going to need a varidac style function to handle the variable number of arguments for the SB_CallSubArgs function, (last function in  the code) The various return types is also an issue.

THIS post on AllBASIC may refresh our nmemories.

If you know a better way, I'm all ears.

Code: C
  1. // ScriptBasic Shared Object
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <ctype.h>
  7. #include <math.h>
  8. #include <time.h>
  9. #include <unistd.h>
  10. #include "/home/ubuntu/sb-dev-master/basext.h"
  11. #include "/home/ubuntu/sb-dev-master/scriba.h"
  12. #include "cbasic.h"
  13.  
  14.  
  15. /***********************
  16.  Statc Support Routines
  17. ***********************/
  18.  
  19. struct _RunServiceProgram {
  20.   char *pszProgramFileName;
  21.   char *pszCmdLineArgs;
  22.   char *pszConfigFileName;
  23.   pSbProgram pTProgram;
  24.   int iRestart;
  25.   };
  26.  
  27. static void ExecuteProgramThread(void *p){
  28.   pSbProgram pProgram;
  29.   char szInputFile[1024];
  30.   int iErrorCode;
  31.   struct _RunServiceProgram *pRSP;
  32.   pRSP = p;
  33.   strcpy(szInputFile,pRSP->pszProgramFileName);
  34.   pProgram = scriba_new(malloc,free);
  35.   pRSP->pTProgram = pProgram;
  36.   if( pProgram == NULL )return;
  37.   scriba_SetFileName(pProgram,szInputFile);
  38.   if (pRSP->pszConfigFileName != NULL){
  39.         strcpy(szInputFile,pRSP->pszConfigFileName);
  40.         scriba_LoadConfiguration(pProgram, pRSP->pszConfigFileName);
  41.   }else{
  42.         scriba_SetProcessSbObject(pProgram,pProgram);
  43.   }
  44.   scriba_LoadSourceProgram(pProgram);
  45.   if (pRSP->pszCmdLineArgs != NULL){
  46.         strcpy(szInputFile,pRSP->pszCmdLineArgs);
  47.     iErrorCode = scriba_Run(pProgram,pRSP->pszCmdLineArgs);
  48.   }else{
  49.     iErrorCode = scriba_Run(pProgram,NULL);
  50.   }
  51. //  scriba_destroy(pProgram);
  52.   return;
  53. }
  54.  
  55.  
  56. /*****************************
  57.  ScriptBasic Object Functions
  58. *****************************/
  59.  
  60. FUNCTION long SB_New()
  61. BEGIN_FUNCTION
  62.   DIM AS pSbProgram sbobj;
  63.   sbobj = scriba_new(malloc,free);
  64.   RETURN_FUNCTION(sbobj);
  65. END_FUNCTION
  66.  
  67. FUNCTION int SB_Configure(unsigned long sbobj, char PTR cfgfilename)
  68. BEGIN_FUNCTION
  69.   DIM AS int rtnval = -1;
  70.   rtnval = scriba_LoadConfiguration(sbobj, cfgfilename);
  71.   RETURN_FUNCTION(rtnval);
  72. END_FUNCTION
  73.  
  74. FUNCTION int SB_Load(unsigned long sbobj, char PTR sbfilename)
  75. BEGIN_FUNCTION
  76.   DIM AS int rtnval = -1;
  77.   rtnval = scriba_SetFileName(sbobj, sbfilename);
  78.   scriba_LoadSourceProgram(sbobj);
  79.   RETURN_FUNCTION(rtnval);
  80. END_FUNCTION
  81.  
  82. FUNCTION int SB_LoadStr(unsigned long sbobj, char PTR sbpgm)
  83. BEGIN_FUNCTION
  84.   DIM AS int rtnval = -1;
  85.   scriba_SetFileName(sbobj, "fake");
  86.   rtnval = scriba_LoadProgramString(sbobj, sbpgm, strlen(sbpgm));
  87.   RETURN_FUNCTION(rtnval);
  88. END_FUNCTION
  89.  
  90. FUNCTION int SB_Run(unsigned long sbobj, char PTR sbcmdline)
  91. BEGIN_FUNCTION
  92.   DIM AS int rtnval;
  93.   IF (besARGNR < 2) THEN_DO sbcmdline = "";
  94.   rtnval = scriba_Run(sbobj, sbcmdline);
  95.   RETURN_FUNCTION(rtnval);
  96. END_FUNCTION
  97.  
  98. FUNCTION int SB_NoRun(unsigned long sbobj)
  99. BEGIN_FUNCTION
  100.   DIM AS int rtnval;
  101.   rtnval = scriba_NoRun(sbobj);
  102.   RETURN_FUNCTION(rtnval);
  103. END_FUNCTION
  104.  
  105. FUNCTION int SB_ThreadStart(char PTR pszProgramFileName, char PTR pszCmdLineArgs, char PTR pszConfigFileName)
  106. BEGIN_FUNCTION
  107.   DIM AS struct _RunServiceProgram PTR pRSP;
  108.   DIM AS THREADHANDLE T;
  109.   DIM AS unsigned long rtnval;
  110.   pRSP = (struct _RunServiceProgram PTR)malloc( sizeof(struct _RunServiceProgram) );
  111.   pRSP->pszProgramFileName = (char PTR)malloc(strlen(pszProgramFileName) + 1);
  112.   strcpy(pRSP->pszProgramFileName,pszProgramFileName);
  113.   IF (pszCmdLineArgs NE NULL) THEN
  114.     pRSP->pszCmdLineArgs = (char PTR)malloc(strlen(pszCmdLineArgs) + 1);
  115.     strcpy(pRSP->pszCmdLineArgs,pszCmdLineArgs);
  116.   ELSE
  117.         pRSP->pszCmdLineArgs = NULL;
  118.   END_IF
  119.   IF (pszConfigFileName NE NULL) THEN
  120.     pRSP->pszConfigFileName = (char PTR)malloc(strlen(pszConfigFileName) + 1);
  121.     strcpy(pRSP->pszConfigFileName,pszConfigFileName);
  122.   ELSE
  123.         pRSP->pszConfigFileName = NULL;
  124.   END_IF
  125.   pRSP->iRestart = 0;
  126.   thread_CreateThread(AT T,ExecuteProgramThread,pRSP);
  127.   usleep(500);
  128.   rtnval = pRSP->pTProgram;
  129.   RETURN_FUNCTION(rtnval);
  130. END_FUNCTION
  131.  
  132. SUB SB_ThreadEnd()
  133. BEGIN_SUB
  134.   thread_ExitThread();
  135. END_SUB
  136.  
  137. SUB SB_Destroy(unsigned long sbobj)
  138.   scriba_destroy(sbobj);
  139. END_SUB
  140.  
  141. FUNCTION long SB_GetLong(unsigned long sbobj, char PTR varname)
  142. BEGIN_FUNCTION
  143.   DIM AS pSbData varobj;
  144.   DIM AS int vsn;
  145.   vsn = scriba_LookupVariableByName(sbobj, varname);
  146.   scriba_GetVariable(sbobj, vsn, AT varobj);
  147.   RETURN_FUNCTION(varobj[0].v.l);
  148. END_FUNCTION
  149.  
  150. FUNCTION double SB_GetDouble(unsigned long sbobj, char PTR varname)
  151. BEGIN_FUNCTION
  152.   DIM AS pSbData varobj;
  153.   DIM AS int vsn;
  154.   vsn = scriba_LookupVariableByName(sbobj, varname);
  155.   scriba_GetVariable(sbobj, vsn, AT varobj);
  156.   RETURN_FUNCTION(varobj[0].v.d);
  157. END_FUNCTION
  158.  
  159. FUNCTION PTR char SB_GetString(unsigned long sbobj, char PTR varname)
  160. BEGIN_FUNCTION
  161.   DIM AS pSbData varobj;
  162.   DIM AS int vsn;
  163.   vsn = scriba_LookupVariableByName(sbobj, varname);
  164.   scriba_GetVariable(sbobj, vsn, AT varobj);
  165.   RETURN_FUNCTION(varobj[0].v.s);
  166. END_FUNCTION
  167.  
  168. FUNCTION int SB_SetUndef(unsigned long sbobj, char PTR varname)
  169. BEGIN_FUNCTION
  170.   DIM AS pSbData varobj;
  171.   DIM AS int vsn;
  172.   vsn = scriba_LookupVariableByName(sbobj, varname);
  173.   RETURN_FUNCTION(scriba_SetVariable(sbobj, vsn, SBT_UNDEF, NULL, 0, "", 0));
  174. END_FUNCTION
  175.  
  176. FUNCTION int SB_SetInt(unsigned long sbobj, char PTR varname, int usrval)
  177. BEGIN_FUNCTION
  178.   DIM AS pSbData varobj;
  179.   DIM AS int vsn;
  180.   vsn = scriba_LookupVariableByName(sbobj, varname);
  181.   RETURN_FUNCTION(scriba_SetVariable(sbobj, vsn, SBT_LONG, usrval, 0, "", 0));
  182. END_FUNCTION
  183.  
  184. FUNCTION int SB_SetDbl(unsigned long sbobj, char PTR varname, double usrval)
  185. BEGIN_FUNCTION
  186.   DIM AS pSbData varobj;
  187.   DIM AS int vsn;
  188.   vsn = scriba_LookupVariableByName(sbobj, varname);
  189.   RETURN_FUNCTION(scriba_SetVariable(sbobj, vsn,  SBT_DOUBLE, 0, usrval, "", 0));
  190. END_FUNCTION
  191.  
  192. FUNCTION int SB_SetStr(unsigned long sbobj, char PTR varname, char PTR usrval)
  193. BEGIN_FUNCTION
  194.   DIM AS pSbData varobj;
  195.   DIM AS int vsn;
  196.   vsn = scriba_LookupVariableByName(sbobj, varname);
  197.   RETURN_FUNCTION(scriba_SetVariable(sbobj, vsn,  SBT_STRING, 0, 0, usrval, strlen(usrval)));
  198. END_FUNCTION
  199.  
  200. SUB SB_ResetVars(unsigned long sbobj)
  201. BEGIN_SUB
  202.   scriba_ResetVariables(sbobj);
  203. END_SUB
  204.  
  205. SUB SB_msSleep(long t)
  206. BEGIN_SUB
  207.   usleep(t);
  208. END_SUB
  209.  
  210. FUNCTION int SB_CallSub(unsigned long sbobj, char PTR funcname)
  211.   DIM AS int funcsernum;
  212.   funcsernum = scriba_LookupFunctionByName(sbobj, funcname);
  213.   RETURN_FUNCTION(scriba_Call(sbobj, funcsernum));
  214. END_FUNCTION
  215.  
  216. besFUNCTION(SB_CallSubArgs)
  217.   DIM AS VARIABLE Argument;
  218.   DIM AS SbData ArgData[8];
  219.   DIM AS SbData FunctionResult;
  220.   DIM AS unsigned long sbobj;
  221.   DIM AS char PTR funcname;
  222.   DIM AS int i, sbtype, fnsn;
  223.  
  224.   Argument = besARGUMENT(1);
  225.   besDEREFERENCE(Argument);
  226.   sbobj = LONGVALUE(Argument);
  227.  
  228.   Argument = besARGUMENT(2);
  229.   besDEREFERENCE(Argument);
  230.   funcname = STRINGVALUE(Argument);
  231.  
  232.   DEF_FOR (i = 3 TO i <= besARGNR STEP INCR i)
  233.   BEGIN_FOR
  234.     Argument = besARGUMENT(i);
  235.     besDEREFERENCE(Argument);
  236.     SELECT_CASE (sbtype = TYPE(Argument))
  237.     BEGIN_SELECT
  238.       CASE VTYPE_LONG:
  239.         ArgData[i-3] = PTR scriba_NewSbLong(sbobj, LONGVALUE(Argument));
  240.         END_CASE
  241.       CASE VTYPE_DOUBLE:
  242.         ArgData[i-3] = PTR scriba_NewSbDouble(sbobj, DOUBLEVALUE(Argument));
  243.         END_CASE
  244.       CASE VTYPE_STRING:
  245.         ArgData[i-3] = PTR scriba_NewSbString(sbobj, STRINGVALUE(Argument));
  246.         END_CASE
  247.       CASE_ELSE
  248.         ArgData[i-3] = PTR scriba_NewSbUndef(sbobj);
  249.         END_CASE
  250.     END_SELECT
  251.   NEXT
  252.  
  253.   fnsn = scriba_LookupFunctionByName(sbobj, funcname);
  254.   scriba_CallArgEx(sbobj, fnsn, AT FunctionResult, besARGNR - 2, AT ArgData);
  255.  
  256.   SELECT_CASE (FunctionResult.type)
  257.   BEGIN_SELECT
  258.     CASE SBT_LONG:
  259.       besRETURN_LONG(FunctionResult.v.l);
  260.       END_CASE
  261.     CASE SBT_DOUBLE:
  262.       besRETURN_DOUBLE(FunctionResult.v.d);
  263.       END_CASE
  264.     CASE SBT_STRING:
  265.       besRETURN_STRING(FunctionResult.v.s);
  266.       END_CASE
  267.     CASE SBT_UNDEF:
  268.       besRETURNVALUE = NULL;
  269.       END_CASE
  270.   END_SELECT
  271. besEND
  272.  

Pages: 1 ... 7 8 [9] 10 11 ... 16