Usermode/SpiderScript - Added language namespace exports
[tpg/acess2.git] / Usermode / Libraries / libspiderscript.so_src / exports.c
1 /*
2  * Acess2 - SpiderScript
3  * - Script Exports (Lang. Namespace)
4  */
5 #include <string.h>
6 #include <stdlib.h>
7 #include <stdio.h>
8 #include <spiderscript.h>
9
10 // === PROTOTYPES ===
11 tSpiderValue    *Exports_sizeof(tSpiderScript *Script, int NArgs, tSpiderValue **Args);
12 tSpiderValue    *Exports_Lang_Strings_Split(tSpiderScript *Script, int NArgs, tSpiderValue **Args);
13 tSpiderValue    *Exports_Lang_Struct(tSpiderScript *Script, int NArgs, tSpiderValue **Args);
14
15 // === GLOBALS ===
16 tSpiderFunction gExports_Lang_Strings_Split = {
17         .Name = "Split",
18         .Handler = Exports_Lang_Strings_Split,
19         .ReturnType = SS_MAKEARRAY(SS_DATATYPE_STRING),
20         .ArgTypes = {SS_DATATYPE_STRING, SS_DATATYPE_STRING, -1}
21 };
22 tSpiderNamespace        gExports_NS_Lang_Strings = {
23         .Name = "Strings",
24         .Functions = &gExports_Lang_Strings_Split
25         };
26
27 tSpiderFunction gExports_Lang_Struct = {
28         .Name = "Struct",
29         .Handler = Exports_Lang_Struct,
30         .ReturnType = SS_DATATYPE_OPAQUE,
31         .ArgTypes = {SS_DATATYPE_STRING, -1}
32 };
33 // - Lang Namespace
34 tSpiderNamespace        gExports_NS_Lang = {
35         .Name = "Lang",
36         .Functions = &gExports_Lang_Struct,
37         .FirstChild = &gExports_NS_Lang_Strings
38         };
39 tSpiderNamespace        gExportNamespaceRoot = {
40         .FirstChild = &gExports_NS_Lang
41 };
42
43 // -- Global Functions
44 tSpiderFunction gExports_sizeof = {
45         .Name = "sizeof",
46         .Handler = Exports_sizeof,
47         .ReturnType = SS_DATATYPE_INTEGER,
48         .ArgTypes = {SS_DATATYPE_UNDEF, -1}
49 };
50 tSpiderFunction *gpExports_First;
51
52 // === CODE ===
53 tSpiderValue *Exports_sizeof(tSpiderScript *Script, int NArgs, tSpiderValue **Args)
54 {
55         if(NArgs != 1 || !Args[0])      return NULL;
56
57         switch( Args[0]->Type )
58         {
59         case SS_DATATYPE_STRING:
60                 return SpiderScript_CreateInteger(Args[0]->String.Length);
61         case SS_DATATYPE_ARRAY:
62                 return SpiderScript_CreateInteger(Args[0]->Array.Length);
63         default:
64                 return NULL;
65         }
66 }
67
68 tSpiderValue *Exports_Lang_Strings_Split(tSpiderScript *Script, int NArgs, tSpiderValue **Args)
69 {
70         return NULL;
71 }
72
73 tSpiderValue *Exports_Lang_Struct(tSpiderScript *Script, int NArgs, tSpiderValue **Args)
74 {
75          int    i;
76         printf("Exports_Lang_Struct: (Script=%p, NArgs=%i, Args=%p)\n", Script, NArgs, Args);
77         
78         for( i = 0; i < NArgs; i ++ )
79         {
80                 printf(" Args[%i] = {Type: %i, ", i, Args[i]->Type);
81                 switch(Args[i]->Type)
82                 {
83                 case SS_DATATYPE_INTEGER:
84                         printf(" Integer: 0x%lx", Args[i]->Integer);
85                         break;
86                 case SS_DATATYPE_REAL:
87                         printf(" Real: %f", Args[i]->Real);
88                         break;
89                 case SS_DATATYPE_STRING:
90                         printf(" Length: %i, Data = '%s'", Args[i]->String.Length, Args[i]->String.Data);
91                         break;
92                 default:
93                         break;
94                 }
95                 printf("}\n");
96         }
97         
98         return NULL;
99 }

UCC git Repository :: git.ucc.asn.au