├── helloworld ├── helloworld │ ├── helloworld │ │ ├── helloworld.dws │ │ ├── helloworld.dyalog │ │ ├── helloworld.h │ │ ├── include │ │ │ ├── call_apl_resources.h │ │ │ ├── dllmain.h │ │ │ ├── dwa_defs.h │ │ │ ├── engine_flags.h │ │ │ ├── copyfns.h │ │ │ └── call_apl.h │ │ ├── helloworld.rc │ │ ├── helloworld.c │ │ └── helloworld.vcxproj │ └── call_helloworld │ │ ├── call_helloworld.c │ │ └── call_helloworld.vcxproj ├── makefile.pi.32 ├── makefile.aix.32 ├── makefile.aix.64 ├── makefile.linux.64 ├── makefile.win.64 ├── makefile.mac.64 ├── makefile.win.32 ├── make_resources ├── helloworld.sln ├── makefile └── makefile.common ├── qa ├── makefile.aix.32 ├── makefile.aix.64 ├── makefile.pi.32 ├── makefile.linux.64 ├── makefile.win.64 ├── makefile.mac.64 ├── makefile.win.32 ├── qa │ ├── qa │ │ ├── include │ │ │ ├── call_apl_resources.h │ │ │ ├── dllmain.h │ │ │ ├── dwa_defs.h │ │ │ ├── engine_flags.h │ │ │ ├── copyfns.h │ │ │ └── call_apl.h │ │ ├── qa.rc │ │ ├── qa.dyalog │ │ ├── qa.cpp │ │ └── qa.vcxproj │ └── call_qa │ │ ├── call_qa.vcxproj │ │ └── call_qa.cpp ├── make_resources ├── qa.sln ├── makefile └── makefile.common ├── sign ├── makefile.aix.32 ├── makefile.aix.64 ├── makefile.pi.32 ├── makefile.linux.64 ├── makefile.win.32 ├── makefile.win.64 ├── makefile.mac.64 ├── sign │ ├── sign │ │ ├── include │ │ │ ├── call_apl_resources.h │ │ │ ├── dllmain.h │ │ │ ├── dwa_defs.h │ │ │ ├── engine_flags.h │ │ │ ├── copyfns.h │ │ │ └── call_apl.h │ │ ├── sign.rc │ │ ├── sign.h │ │ ├── sign.dyalog │ │ ├── sign.c │ │ └── sign.vcxproj │ └── call_sign │ │ ├── call_sign.c │ │ └── call_sign.vcxproj ├── make_resources ├── sign.sln ├── makefile └── makefile.common ├── JSON_APL ├── makefile.aix.32 ├── makefile.aix.64 ├── makefile.pi.32 ├── makefile.linux.64 ├── makefile.win.32 ├── makefile.win.64 ├── makefile.mac.64 ├── JSON_APL │ ├── JSON_APL │ │ ├── include │ │ │ ├── call_apl_resources.h │ │ │ ├── dllmain.h │ │ │ ├── dwa_defs.h │ │ │ ├── engine_flags.h │ │ │ ├── copyfns.h │ │ │ └── call_apl.h │ │ ├── JSON_APL.rc │ │ ├── JSON_APL.dyalog │ │ └── JSON_APL.c │ ├── sign.dyalog │ ├── call_JSON_APL │ │ ├── sign.dyalog │ │ ├── platformpaths.py │ │ ├── call_JSON_APL.c │ │ ├── JSON_APL.py │ │ └── call_JSON_APL.vcxproj │ ├── platformpaths.py │ └── JSON_APL.py ├── make_resources ├── JSON_APL.sln ├── makefile └── makefile.common ├── LICENSE ├── dwa └── lib │ └── README.md └── README.md /helloworld/helloworld/helloworld/helloworld.dws: -------------------------------------------------------------------------------- 1 | Binary file (standard input) matches 2 | -------------------------------------------------------------------------------- /qa/makefile.aix.32: -------------------------------------------------------------------------------- 1 | MK_PORT:=aix 2 | MK_BITS:=32 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/32/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /qa/makefile.aix.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=aix 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/64/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /qa/makefile.pi.32: -------------------------------------------------------------------------------- 1 | MK_PORT:=pi 2 | MK_BITS:=32 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/32/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /sign/makefile.aix.32: -------------------------------------------------------------------------------- 1 | MK_PORT:=aix 2 | MK_BITS:=32 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/32/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /sign/makefile.aix.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=aix 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/64/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /sign/makefile.pi.32: -------------------------------------------------------------------------------- 1 | MK_PORT:=pi 2 | MK_BITS:=32 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/32/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /JSON_APL/makefile.aix.32: -------------------------------------------------------------------------------- 1 | MK_PORT:=aix 2 | MK_BITS:=32 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/32/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /JSON_APL/makefile.aix.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=aix 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/64/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /JSON_APL/makefile.pi.32: -------------------------------------------------------------------------------- 1 | MK_PORT:=pi 2 | MK_BITS:=32 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/32/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /helloworld/makefile.pi.32: -------------------------------------------------------------------------------- 1 | MK_PORT:=pi 2 | MK_BITS:=32 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/32/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /qa/makefile.linux.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=linux 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/64/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /sign/makefile.linux.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=linux 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/64/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /JSON_APL/makefile.linux.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=linux 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/64/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /helloworld/makefile.aix.32: -------------------------------------------------------------------------------- 1 | MK_PORT:=aix 2 | MK_BITS:=32 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/32/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /helloworld/makefile.aix.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=aix 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/64/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /helloworld/makefile.linux.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=linux 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/opt/mdyalog/18.0/64/unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /qa/makefile.win.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=win 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="C:/Program Files/Dyalog/Dyalog APL-64 18.0 Unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /qa/makefile.mac.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=mac 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/Applications/Dyalog-18.0.app/Contents/Resources/dyalog/dwa/lib" 5 | -------------------------------------------------------------------------------- /qa/makefile.win.32: -------------------------------------------------------------------------------- 1 | MK_PORT:=win 2 | MK_BITS:=32 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="C:/Program Files (x86)/Dyalog/Dyalog APL 18.0 Unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /sign/makefile.win.32: -------------------------------------------------------------------------------- 1 | MK_PORT:=win 2 | MK_BITS:=32 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="C:/Program Files (x86)/Dyalog/Dyalog APL 18.0 Unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /sign/makefile.win.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=win 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="C:/Program Files/Dyalog/Dyalog APL-64 18.0 Unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /JSON_APL/makefile.win.32: -------------------------------------------------------------------------------- 1 | MK_PORT:=win 2 | MK_BITS:=32 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="C:/Program Files (x86)/Dyalog/Dyalog APL 18.0 Unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /JSON_APL/makefile.win.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=win 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="C:/Program Files/Dyalog/Dyalog APL-64 18.0 Unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /helloworld/makefile.win.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=win 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="C:/Program Files/Dyalog/Dyalog APL-64 18.0 Unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /sign/makefile.mac.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=mac 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/Applications/Dyalog-18.0.app/Contents/Resources/dyalog/dwa/lib" 5 | -------------------------------------------------------------------------------- /JSON_APL/makefile.mac.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=mac 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/Applications/Dyalog-18.0.app/Contents/Resources/dyalog/dwa/lib" 5 | -------------------------------------------------------------------------------- /helloworld/makefile.mac.64: -------------------------------------------------------------------------------- 1 | MK_PORT:=mac 2 | MK_BITS:=64 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="/Applications/Dyalog-18.0.app/Contents/Resources/dyalog/dwa/lib" 5 | -------------------------------------------------------------------------------- /helloworld/makefile.win.32: -------------------------------------------------------------------------------- 1 | MK_PORT:=win 2 | MK_BITS:=32 3 | MK_CHAR:=unicode 4 | DWA_LIBDIR="C:/Program Files (x86)/Dyalog/Dyalog APL 18.0 Unicode/dwa/lib" 5 | -------------------------------------------------------------------------------- /helloworld/helloworld/helloworld/helloworld.dyalog: -------------------------------------------------------------------------------- 1 | ∇ r←Hello name 2 | ⍝ Simple Hello World sample 3 | 4 | r←'Hello ',name,'! Welcome to APL. This text came from a script' 5 | ∇ 6 | -------------------------------------------------------------------------------- /helloworld/helloworld/helloworld/helloworld.h: -------------------------------------------------------------------------------- 1 | #if _MSC_VER 2 | #define LIBCALL __cdecl 3 | #else 4 | #define LIBCALL 5 | #endif 6 | 7 | extern wchar_t *LIBCALL Hello(wchar_t *name); 8 | -------------------------------------------------------------------------------- /qa/qa/qa/include/call_apl_resources.h: -------------------------------------------------------------------------------- 1 | typedef struct 2 | { 3 | const unsigned char *BOUND_RES_SCRIPT_data; 4 | const unsigned int BOUND_RES_SCRIPT_data_len; 5 | const unsigned char *BOUND_RES_WS_data; 6 | const unsigned int BOUND_RES_WS_data_len; 7 | } APL_RESOURCES; 8 | -------------------------------------------------------------------------------- /sign/sign/sign/include/call_apl_resources.h: -------------------------------------------------------------------------------- 1 | typedef struct 2 | { 3 | const unsigned char *BOUND_RES_SCRIPT_data; 4 | const unsigned int BOUND_RES_SCRIPT_data_len; 5 | const unsigned char *BOUND_RES_WS_data; 6 | const unsigned int BOUND_RES_WS_data_len; 7 | } APL_RESOURCES; 8 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/JSON_APL/include/call_apl_resources.h: -------------------------------------------------------------------------------- 1 | typedef struct 2 | { 3 | const unsigned char *BOUND_RES_SCRIPT_data; 4 | const unsigned int BOUND_RES_SCRIPT_data_len; 5 | const unsigned char *BOUND_RES_WS_data; 6 | const unsigned int BOUND_RES_WS_data_len; 7 | } APL_RESOURCES; 8 | -------------------------------------------------------------------------------- /helloworld/helloworld/helloworld/include/call_apl_resources.h: -------------------------------------------------------------------------------- 1 | typedef struct 2 | { 3 | const unsigned char *BOUND_RES_SCRIPT_data; 4 | const unsigned int BOUND_RES_SCRIPT_data_len; 5 | const unsigned char *BOUND_RES_WS_data; 6 | const unsigned int BOUND_RES_WS_data_len; 7 | } APL_RESOURCES; 8 | -------------------------------------------------------------------------------- /qa/qa/qa/qa.rc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | //If you want to bind a workspace, 5 | // 1) uncomment BOUND_RES_WS 6 | // 2) comment BOUND_RES_SCRIPT 7 | //BOUND_RES_WS RCDATA "apl.dws" 8 | BOUND_RES_SCRIPT RCDATA qa.dyalog 9 | #if DEBUG 10 | BOUND_RES_SCRIPT_FILE RCDATA 11 | { 12 | PROJECT_DIR L"//apl.dyalog" 13 | } 14 | #endif 15 | -------------------------------------------------------------------------------- /sign/sign/sign/sign.rc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | //If you want to bind a workspace, 5 | // 1) uncomment BOUND_RES_WS 6 | // 2) comment BOUND_RES_SCRIPT 7 | //BOUND_RES_WS RCDATA "sign.dws" 8 | BOUND_RES_SCRIPT RCDATA sign.dyalog 9 | #if DEBUG 10 | BOUND_RES_SCRIPT_FILE RCDATA 11 | { 12 | PROJECT_DIR L"//apl.dyalog" 13 | } 14 | #endif 15 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/JSON_APL/JSON_APL.rc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | //If you want to bind a workspace, 5 | // 1) uncomment BOUND_RES_WS 6 | // 2) comment BOUND_RES_SCRIPT 7 | //BOUND_RES_WS RCDATA "JSON_APL.dws" 8 | BOUND_RES_SCRIPT RCDATA JSON_APL.dyalog 9 | #if DEBUG 10 | BOUND_RES_SCRIPT_FILE RCDATA 11 | { 12 | PROJECT_DIR L"//JSON_APL.dyalog" 13 | } 14 | #endif 15 | -------------------------------------------------------------------------------- /helloworld/helloworld/helloworld/helloworld.rc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | //If you want to bind a workspace, 5 | // 1) uncomment BOUND_RES_WS 6 | // 2) comment BOUND_RES_SCRIPT 7 | //BOUND_RES_WS RCDATA "helloworld.dws" 8 | BOUND_RES_SCRIPT RCDATA helloworld.dyalog 9 | #if DEBUG 10 | BOUND_RES_SCRIPT_FILE RCDATA 11 | { 12 | PROJECT_DIR L"//helloworld.dyalog" 13 | } 14 | #endif 15 | -------------------------------------------------------------------------------- /qa/qa/qa/qa.dyalog: -------------------------------------------------------------------------------- 1 | ∇ r←NumericArray (start len);⎕io 2 | ⎕io←0 3 | r←start+⍳len 4 | ∇ 5 | 6 | ∇ r←Add args 7 | r←+/args 8 | ∇ 9 | 10 | ∇ r←UCS args 11 | r←⎕UCS args 12 | ∇ 13 | 14 | ∇ r←Reflect args 15 | r←args 16 | ∇ 17 | 18 | ∇ Signal n 19 | ⎕SIGNAL n 20 | ∇ 21 | 22 | 23 | ∇Error n 24 | Signal n 25 | ∇ 26 | 27 | ∇r←GetEnv n 28 | r←2 ⎕nq '.' 'GetEnvironment' n 29 | ∇ 30 | 31 | ∇r←Execute n 32 | r←⍕⍎n 33 | ∇ 34 | -------------------------------------------------------------------------------- /sign/sign/sign/sign.h: -------------------------------------------------------------------------------- 1 | #if _MSC_VER 2 | #define LIBCALL __cdecl 3 | #else 4 | #define LIBCALL 5 | #endif 6 | 7 | extern int LIBCALL GetSign(int month, int day, wchar_t *rslt,int len); 8 | extern int LIBCALL GetSignObject(wchar_t *in,wchar_t *out,size_t len); 9 | extern wchar_t* LIBCALL ReturnSign(wchar_t *in); 10 | extern void * LIBCALL SignFree(void *); 11 | extern wchar_t* LIBCALL SignOf(int month,int day); 12 | 13 | -------------------------------------------------------------------------------- /helloworld/helloworld/call_helloworld/call_helloworld.c: -------------------------------------------------------------------------------- 1 | #if defined(_MSC_VER) 2 | #include 3 | #endif 4 | #include 5 | #include 6 | 7 | #include "helloworld.h" 8 | 9 | #if defined(_MSC_VER) 10 | int __cdecl main(int argc, char *argv[]) 11 | #else 12 | int main(int argc, char *argv[]) 13 | #endif 14 | { 15 | 16 | wprintf(Hello(L" ")); 17 | wprintf(L"\n\r"); 18 | return 0; 19 | } 20 | -------------------------------------------------------------------------------- /helloworld/helloworld/helloworld/helloworld.c: -------------------------------------------------------------------------------- 1 | #include "call_apl.h" 2 | #define DWA_DISABLE_ASSERTS 3 | #include "dllmain.h" // not defining our own DllMain 4 | 5 | #include "stdio.h" 6 | #include "wchar.h" 7 | 8 | 9 | EXPORT wchar_t * Hello(wchar_t *name) 10 | { 11 | static wchar_t rslt[256]; 12 | int retn; 13 | APL_WCHAR_ARRAY_PARAM (Name,name,0 ,AP_NULLTERM); 14 | APL_WCHAR_ARRAY_RESULT(Rslt,rslt,256,AP_NULLTERM|AP_SIZED); 15 | retn = call_apl(L"Hello",&Name,&Rslt,PARAM_END); 16 | if (retn!=0) 17 | printf("call_apl returned: %i\n",retn); 18 | return rslt; 19 | } 20 | 21 | -------------------------------------------------------------------------------- /sign/sign/sign/sign.dyalog: -------------------------------------------------------------------------------- 1 | ∇ sign←GetSign date;dates;signs 2 | ⍝ Compute sign of the Zodiac from a 2-element integer vector containing [Month,Day] 3 | 4 | signs←13⍴'Capricorn' 'Aquarius' 'Pisces' 'Aries' 'Taurus' 'Gemini' 'Cancer' 'Leo' 'Virgo' 'Libra' 'Scorpio' 'Sagittarius' 5 | dates←119 218 320 419 520 620 722 822 922 1022 1121 1221 6 | sign←signs⊃⍨1+dates⍸100⊥2↑date 7 | ∇ 8 | 9 | ∇ ns←GetSignObject ns 10 | ⍝ Return a sign object contain month, day (provided as input) and sign 11 | 12 | :If (ns.month>12) 13 | ∘ 14 | :EndIf 15 | ns.sign←GetSign ns.(month day) 16 | ∇ 17 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/sign.dyalog: -------------------------------------------------------------------------------- 1 | ∇ sign←GetSign date;dates;signs 2 | ⍝ Compute sign of the Zodiac from a 2-element integer vector containing [Month,Day] 3 | 4 | signs←13⍴'Capricorn' 'Aquarius' 'Pisces' 'Aries' 'Taurus' 'Gemini' 'Cancer' 'Leo' 'Virgo' 'Libra' 'Scorpio' 'Sagittarius' 5 | dates←119 218 320 419 520 620 722 822 922 1022 1121 1221 6 | sign←signs⊃⍨1+dates⍸100⊥2↑date 7 | ∇ 8 | 9 | ∇ ns←GetSignObject ns 10 | ⍝ Return a sign object contain month, day (provided as input) and sign 11 | 12 | :If (ns.month>12) 13 | ∘ 14 | :EndIf 15 | ns.sign←GetSign ns.(month day) 16 | ∇ 17 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/call_JSON_APL/sign.dyalog: -------------------------------------------------------------------------------- 1 | ∇ sign←GetSign date;dates;signs 2 | ⍝ Compute sign of the Zodiac from a 2-element integer vector containing [Month,Day] 3 | 4 | signs←13⍴'Capricorn' 'Aquarius' 'Pisces' 'Aries' 'Taurus' 'Gemini' 'Cancer' 'Leo' 'Virgo' 'Libra' 'Scorpio' 'Sagittarius' 5 | dates←119 218 320 419 520 620 722 822 922 1022 1121 1221 6 | sign←signs⊃⍨1+dates⍸100⊥2↑date 7 | ∇ 8 | 9 | ∇ ns←GetSignObject ns 10 | ⍝ Return a sign object contain month, day (provided as input) and sign 11 | 12 | :If (ns.month>12) 13 | ∘ 14 | :EndIf 15 | ns.sign←GetSign ns.(month day) 16 | ∇ 17 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/call_JSON_APL/platformpaths.py: -------------------------------------------------------------------------------- 1 | sopaths = { 2 | "64bit": { 3 | "Linux": "./JSON_APL.dll", 4 | "Darwin": "./JSON_APL.dll", 5 | "Windows": "./JSON_APL.dll", 6 | }, 7 | "32bit": { 8 | "Windows": "./JSON_APL.dll", 9 | } 10 | } 11 | ridelibpaths = { 12 | "64bit": { 13 | "Linux": "C:/Program Files/Dyalog/Dyalog APL-64 18.0 Unicode/conga33_64.dll", 14 | "Darwin": "C:/Program Files/Dyalog/Dyalog APL-64 18.0 Unicode/conga33_64.dll", 15 | "Windows": "C:/Program Files/Dyalog/Dyalog APL-64 18.0 Unicode/conga33_64.dll", 16 | }, 17 | "32bit": { 18 | "Windows": "C:/Program Files (x86)/Dyalog/Dyalog APL 18.0 Unicode/conga33_64.dll", 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /qa/qa/qa/include/dllmain.h: -------------------------------------------------------------------------------- 1 | #define dwa_enable_asserts(enable) (0) 2 | 3 | #if _MSC_VER 4 | #include 5 | 6 | #if _DEBUG 7 | #undef dwa_enable_asserts 8 | #include 9 | static int dwa_enable_asserts(int enable) 10 | { 11 | return _CrtSetReportMode(_CRT_ASSERT, enable ? _CRTDBG_MODE_WNDW : _CRTDBG_MODE_DEBUG); 12 | } 13 | #endif 14 | 15 | extern HINSTANCE dwa_hInst; 16 | 17 | 18 | int WINAPI DllMain (HMODULE h,DWORD reason,LPVOID process_termination) 19 | { 20 | switch(reason) 21 | { 22 | case DLL_PROCESS_ATTACH: 23 | { 24 | #if defined (DWA_DISABLE_ASSERTS) 25 | dwa_enable_asserts(0); 26 | #endif 27 | dwa_hInst=h; 28 | break; 29 | } 30 | } 31 | return TRUE; 32 | } 33 | 34 | 35 | 36 | #else 37 | extern void * dwa_hInst; 38 | #endif // _MSC_VER 39 | -------------------------------------------------------------------------------- /sign/sign/sign/include/dllmain.h: -------------------------------------------------------------------------------- 1 | #define dwa_enable_asserts(enable) (0) 2 | 3 | #if _MSC_VER 4 | #include 5 | 6 | #if _DEBUG 7 | #undef dwa_enable_asserts 8 | #include 9 | static int dwa_enable_asserts(int enable) 10 | { 11 | return _CrtSetReportMode(_CRT_ASSERT, enable ? _CRTDBG_MODE_WNDW : _CRTDBG_MODE_DEBUG); 12 | } 13 | #endif 14 | 15 | extern HINSTANCE dwa_hInst; 16 | 17 | 18 | int WINAPI DllMain (HMODULE h,DWORD reason,LPVOID process_termination) 19 | { 20 | switch(reason) 21 | { 22 | case DLL_PROCESS_ATTACH: 23 | { 24 | #if defined (DWA_DISABLE_ASSERTS) 25 | dwa_enable_asserts(0); 26 | #endif 27 | dwa_hInst=h; 28 | break; 29 | } 30 | } 31 | return TRUE; 32 | } 33 | 34 | 35 | 36 | #else 37 | extern void * dwa_hInst; 38 | #endif // _MSC_VER 39 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/JSON_APL/include/dllmain.h: -------------------------------------------------------------------------------- 1 | #define dwa_enable_asserts(enable) (0) 2 | 3 | #if _MSC_VER 4 | #include 5 | 6 | #if _DEBUG 7 | #undef dwa_enable_asserts 8 | #include 9 | static int dwa_enable_asserts(int enable) 10 | { 11 | return _CrtSetReportMode(_CRT_ASSERT, enable ? _CRTDBG_MODE_WNDW : _CRTDBG_MODE_DEBUG); 12 | } 13 | #endif 14 | 15 | extern HINSTANCE dwa_hInst; 16 | 17 | 18 | int WINAPI DllMain (HMODULE h,DWORD reason,LPVOID process_termination) 19 | { 20 | switch(reason) 21 | { 22 | case DLL_PROCESS_ATTACH: 23 | { 24 | #if defined (DWA_DISABLE_ASSERTS) 25 | dwa_enable_asserts(0); 26 | #endif 27 | dwa_hInst=h; 28 | break; 29 | } 30 | } 31 | return TRUE; 32 | } 33 | 34 | 35 | 36 | #else 37 | extern void * dwa_hInst; 38 | #endif // _MSC_VER 39 | -------------------------------------------------------------------------------- /helloworld/helloworld/helloworld/include/dllmain.h: -------------------------------------------------------------------------------- 1 | #define dwa_enable_asserts(enable) (0) 2 | 3 | #if _MSC_VER 4 | #include 5 | 6 | #if _DEBUG 7 | #undef dwa_enable_asserts 8 | #include 9 | static int dwa_enable_asserts(int enable) 10 | { 11 | return _CrtSetReportMode(_CRT_ASSERT, enable ? _CRTDBG_MODE_WNDW : _CRTDBG_MODE_DEBUG); 12 | } 13 | #endif 14 | 15 | extern HINSTANCE dwa_hInst; 16 | 17 | 18 | int WINAPI DllMain (HMODULE h,DWORD reason,LPVOID process_termination) 19 | { 20 | switch(reason) 21 | { 22 | case DLL_PROCESS_ATTACH: 23 | { 24 | #if defined (DWA_DISABLE_ASSERTS) 25 | dwa_enable_asserts(0); 26 | #endif 27 | dwa_hInst=h; 28 | break; 29 | } 30 | } 31 | return TRUE; 32 | } 33 | 34 | 35 | 36 | #else 37 | extern void * dwa_hInst; 38 | #endif // _MSC_VER 39 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/platformpaths.py: -------------------------------------------------------------------------------- 1 | # These paths are for an optimised (opt) build from the source code found on https://github.com/Dyalog/NativeLib 2 | sopaths = { 3 | "64bit": { 4 | "Linux": "./obj/JSON_APL/linux/64/opt/libJSON_APL.so", 5 | "Darwin": "./obj/JSON_APL/mac/64/opt/libJSON_APL.dylib", 6 | "Windows": "./x64/Release/JSON_APL.dll", 7 | }, 8 | "32bit": { 9 | "Windows": "./Release/JSON_APL.dll", 10 | } 11 | } 12 | ridelibpaths = { 13 | "64bit": { 14 | "Linux": "/opt/mdyalog/18.0/64/unicode/lib/conga33_64.so", 15 | "Darwin": "/Applications/Dyalog-18.0.app/Contents/Resources/dyalog/lib/conga33_64.dylib", 16 | "Windows": "C:/Program Files/Dyalog/Dyalog APL-64 18.0 Unicode/conga33_64.dll", 17 | }, 18 | "32bit": { 19 | "Windows": "C:/Program Files (x86)/Dyalog/Dyalog APL 18.0 Unicode/conga33_64.dll", 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/JSON_APL/JSON_APL.dyalog: -------------------------------------------------------------------------------- 1 | ∇ r←Load APLCode 2 | :If ∨/('.dyalog'≡¯7↑APLCode)('.aplf' '.aplo' '.apln' '.aplc' '.apli'(∨/∘.≡)⊂¯5↑APLCode) 3 | :Trap 0 4 | 2⎕FIX'file://',APLCode 5 | r←0 6 | :Else 7 | r←1 8 | :EndTrap 9 | :ElseIf '.dws'≡¯4↑APLCode 10 | :Trap 0 11 | r←0 12 | :Else 13 | r←1 14 | :EndTrap 15 | :Else 16 | r←1 17 | :EndIf 18 | ∇ 19 | 20 | ∇ out←Exec APL 21 | :If 9=⎕NC'APL' ⍝ Object here (CallJSON) 22 | :If 0 3 | #endif 4 | #include 5 | #include 6 | #include "sign.h" 7 | 8 | #if defined(_MSC_VER) 9 | #if !defined(CDECL) 10 | #define CDECL __cdecl 11 | #endif 12 | #define scanf scanf_s 13 | #else 14 | #define CDECL 15 | #endif 16 | 17 | int CDECL main(int argc, char *argv[]) 18 | { 19 | 20 | #if defined(_MSC_VER) 21 | // CYGWIN issue: https://github.com/mintty/mintty/issues/218 22 | // doesn't change behaviour in CMD.EXE 23 | setvbuf(stdout, 0, _IONBF, 0); 24 | #endif 25 | 26 | wchar_t *jd = SignOf(8,31); 27 | wprintf(L"jd is a %ls\n" ,jd); 28 | 29 | wchar_t buf[256]; 30 | int err = GetSign(4,10,buf,256); 31 | wprintf(L"GRS is a %ls (error:%i)\n" ,buf,err); 32 | 33 | wchar_t *retn = ReturnSign(L"{\"month\":8,\"day\":31}"); 34 | wprintf(L"jd is a %ls\n" ,retn); 35 | 36 | err = GetSignObject(L"{\"month\":8,\"day\":31}",buf,255); 37 | wprintf(L"jd is a %ls (error:%i)\n" ,buf,err); 38 | 39 | int m,d; 40 | while (EOF!=scanf("%i %i",&m,&d)) 41 | wprintf(L"%i:%i is a %ls\n" ,m,d,SignOf(m,d)); 42 | 43 | return 0; 44 | } 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Dyalog Ltd. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /qa/qa/qa/include/engine_flags.h: -------------------------------------------------------------------------------- 1 | #define ENGINE_F_NOMESSAGES 0x00000001 2 | #define ENGINE_F_CONSOLE 0x00000002 3 | #define ENGINE_F_USEDOTNET 0x00000004 4 | #define ENGINE_F_RUNTIME 0x00000008 5 | 6 | #define ENGINE_F_XPLOOK 0x00000010 7 | #define ENGINE_F_EXTERNAL_WS 0x00000020 8 | #define ENGINE_F_DESCALC 0x00000040 9 | #define ENGINE_F_DISABLE_IO 0x00000080 10 | 11 | #define ENGINE_F_LOAD_DWS_FROM_MEMORY 0x00000100 12 | #define ENGINE_F_LOAD_SCRIPT_FROM_MEMORY 0x00000200 13 | #define ENGINE_F_LOAD_DWS 0x00000400 14 | #define ENGINE_F_LOAD_SCRIPT 0x00000800 15 | 16 | #define ENGINE_F_EMBEDDED 0x00001000 17 | #define ENGINE_F_AUTOOFF 0x00002000 18 | #define ENGINE_F_ALLOWOFF 0x00004000 19 | #define ENGINE_F_IN_DOTNET 0x00008000 20 | 21 | #define ENGINE_F_DYALOGEXE 0x00010000 22 | #define ENGINE_F_CHECKSTACK 0x00020000 23 | #define ENGINE_F_NO_ENVIRONMENT 0x00040000 24 | 25 | #define ENGINE_F_SIGN_ASSEMBLY 0x00100000 26 | #define ENGINE_F_SIGN_DELAY 0x00200000 27 | 28 | #define ENGINE_F_DELETEONUNLOAD 0x01000000 29 | #define ENGINE_F_SINGLETHREADED 0x02000000 30 | #define ENGINE_F_UNLOADWHENEMPTY 0x04000000 31 | 32 | 33 | -------------------------------------------------------------------------------- /sign/sign/sign/include/engine_flags.h: -------------------------------------------------------------------------------- 1 | #define ENGINE_F_NOMESSAGES 0x00000001 2 | #define ENGINE_F_CONSOLE 0x00000002 3 | #define ENGINE_F_USEDOTNET 0x00000004 4 | #define ENGINE_F_RUNTIME 0x00000008 5 | 6 | #define ENGINE_F_XPLOOK 0x00000010 7 | #define ENGINE_F_EXTERNAL_WS 0x00000020 8 | #define ENGINE_F_DESCALC 0x00000040 9 | #define ENGINE_F_DISABLE_IO 0x00000080 10 | 11 | #define ENGINE_F_LOAD_DWS_FROM_MEMORY 0x00000100 12 | #define ENGINE_F_LOAD_SCRIPT_FROM_MEMORY 0x00000200 13 | #define ENGINE_F_LOAD_DWS 0x00000400 14 | #define ENGINE_F_LOAD_SCRIPT 0x00000800 15 | 16 | #define ENGINE_F_EMBEDDED 0x00001000 17 | #define ENGINE_F_AUTOOFF 0x00002000 18 | #define ENGINE_F_ALLOWOFF 0x00004000 19 | #define ENGINE_F_IN_DOTNET 0x00008000 20 | 21 | #define ENGINE_F_DYALOGEXE 0x00010000 22 | #define ENGINE_F_CHECKSTACK 0x00020000 23 | #define ENGINE_F_NO_ENVIRONMENT 0x00040000 24 | 25 | #define ENGINE_F_SIGN_ASSEMBLY 0x00100000 26 | #define ENGINE_F_SIGN_DELAY 0x00200000 27 | 28 | #define ENGINE_F_DELETEONUNLOAD 0x01000000 29 | #define ENGINE_F_SINGLETHREADED 0x02000000 30 | #define ENGINE_F_UNLOADWHENEMPTY 0x04000000 31 | 32 | 33 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/JSON_APL/include/engine_flags.h: -------------------------------------------------------------------------------- 1 | #define ENGINE_F_NOMESSAGES 0x00000001 2 | #define ENGINE_F_CONSOLE 0x00000002 3 | #define ENGINE_F_USEDOTNET 0x00000004 4 | #define ENGINE_F_RUNTIME 0x00000008 5 | 6 | #define ENGINE_F_XPLOOK 0x00000010 7 | #define ENGINE_F_EXTERNAL_WS 0x00000020 8 | #define ENGINE_F_DESCALC 0x00000040 9 | #define ENGINE_F_DISABLE_IO 0x00000080 10 | 11 | #define ENGINE_F_LOAD_DWS_FROM_MEMORY 0x00000100 12 | #define ENGINE_F_LOAD_SCRIPT_FROM_MEMORY 0x00000200 13 | #define ENGINE_F_LOAD_DWS 0x00000400 14 | #define ENGINE_F_LOAD_SCRIPT 0x00000800 15 | 16 | #define ENGINE_F_EMBEDDED 0x00001000 17 | #define ENGINE_F_AUTOOFF 0x00002000 18 | #define ENGINE_F_ALLOWOFF 0x00004000 19 | #define ENGINE_F_IN_DOTNET 0x00008000 20 | 21 | #define ENGINE_F_DYALOGEXE 0x00010000 22 | #define ENGINE_F_CHECKSTACK 0x00020000 23 | #define ENGINE_F_NO_ENVIRONMENT 0x00040000 24 | 25 | #define ENGINE_F_SIGN_ASSEMBLY 0x00100000 26 | #define ENGINE_F_SIGN_DELAY 0x00200000 27 | 28 | #define ENGINE_F_DELETEONUNLOAD 0x01000000 29 | #define ENGINE_F_SINGLETHREADED 0x02000000 30 | #define ENGINE_F_UNLOADWHENEMPTY 0x04000000 31 | 32 | 33 | -------------------------------------------------------------------------------- /qa/qa/qa/include/copyfns.h: -------------------------------------------------------------------------------- 1 | #define ARRAY_FNS(type) \ 2 | extern void LIBCALL pf_a_##type(PP *pp,APL_PARAM *param); \ 3 | extern void LIBCALL pt_a_##type(PP *pp,APL_PARAM *param); 4 | 5 | #define SCALAR_FNS(type) \ 6 | extern void LIBCALL pf_##type(PP *pp,APL_PARAM *param); \ 7 | extern void LIBCALL pt_##type(PP *pp,APL_PARAM *param); 8 | 9 | #define CHAR_ARRAY_FNS(type) \ 10 | extern void LIBCALL pf_a_##type(PP *pp,APL_PARAM *param); \ 11 | extern void LIBCALL pt_a_##type(PP *pp,APL_PARAM *param) 12 | 13 | #define POCK_FNS(type) ARRAY_FNS(type); SCALAR_FNS(type) 14 | 15 | POCK_FNS(int8_t); 16 | POCK_FNS(int16_t); 17 | POCK_FNS(int32_t); 18 | POCK_FNS(int64_t); 19 | POCK_FNS(double); 20 | 21 | POCK_FNS(char); 22 | POCK_FNS(char8); 23 | POCK_FNS(char16); 24 | POCK_FNS(char32); 25 | POCK_FNS(wchar_t); 26 | 27 | //CHAR_ARRAY_FNS(char8); 28 | //CHAR_ARRAY_FNS(char16); 29 | //CHAR_ARRAY_FNS(char32); 30 | //CHAR_ARRAY_FNS(wchar_t); 31 | 32 | extern void LIBCALL pf_str(PP *pp,APL_PARAM *param); 33 | extern void LIBCALL pt_str(PP *pp,APL_PARAM *param); 34 | 35 | extern void LIBCALL pf_z(PP *pp,APL_PARAM *param); 36 | extern void LIBCALL pt_z(PP *pp,APL_PARAM *param); 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /sign/sign/sign/include/copyfns.h: -------------------------------------------------------------------------------- 1 | #define ARRAY_FNS(type) \ 2 | extern void LIBCALL pf_a_##type(PP *pp,APL_PARAM *param); \ 3 | extern void LIBCALL pt_a_##type(PP *pp,APL_PARAM *param); 4 | 5 | #define SCALAR_FNS(type) \ 6 | extern void LIBCALL pf_##type(PP *pp,APL_PARAM *param); \ 7 | extern void LIBCALL pt_##type(PP *pp,APL_PARAM *param); 8 | 9 | #define CHAR_ARRAY_FNS(type) \ 10 | extern void LIBCALL pf_a_##type(PP *pp,APL_PARAM *param); \ 11 | extern void LIBCALL pt_a_##type(PP *pp,APL_PARAM *param) 12 | 13 | #define POCK_FNS(type) ARRAY_FNS(type); SCALAR_FNS(type) 14 | 15 | POCK_FNS(int8_t); 16 | POCK_FNS(int16_t); 17 | POCK_FNS(int32_t); 18 | POCK_FNS(int64_t); 19 | POCK_FNS(double); 20 | 21 | POCK_FNS(char); 22 | POCK_FNS(char8); 23 | POCK_FNS(char16); 24 | POCK_FNS(char32); 25 | POCK_FNS(wchar_t); 26 | 27 | //CHAR_ARRAY_FNS(char8); 28 | //CHAR_ARRAY_FNS(char16); 29 | //CHAR_ARRAY_FNS(char32); 30 | //CHAR_ARRAY_FNS(wchar_t); 31 | 32 | extern void LIBCALL pf_str(PP *pp,APL_PARAM *param); 33 | extern void LIBCALL pt_str(PP *pp,APL_PARAM *param); 34 | 35 | extern void LIBCALL pf_z(PP *pp,APL_PARAM *param); 36 | extern void LIBCALL pt_z(PP *pp,APL_PARAM *param); 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /helloworld/helloworld/helloworld/include/engine_flags.h: -------------------------------------------------------------------------------- 1 | #define ENGINE_F_NOMESSAGES 0x00000001 2 | #define ENGINE_F_CONSOLE 0x00000002 3 | #define ENGINE_F_USEDOTNET 0x00000004 4 | #define ENGINE_F_RUNTIME 0x00000008 5 | 6 | #define ENGINE_F_XPLOOK 0x00000010 7 | #define ENGINE_F_EXTERNAL_WS 0x00000020 8 | #define ENGINE_F_DESCALC 0x00000040 9 | #define ENGINE_F_DISABLE_IO 0x00000080 10 | 11 | #define ENGINE_F_LOAD_DWS_FROM_MEMORY 0x00000100 12 | #define ENGINE_F_LOAD_SCRIPT_FROM_MEMORY 0x00000200 13 | #define ENGINE_F_LOAD_DWS 0x00000400 14 | #define ENGINE_F_LOAD_SCRIPT 0x00000800 15 | 16 | #define ENGINE_F_EMBEDDED 0x00001000 17 | #define ENGINE_F_AUTOOFF 0x00002000 18 | #define ENGINE_F_ALLOWOFF 0x00004000 19 | #define ENGINE_F_IN_DOTNET 0x00008000 20 | 21 | #define ENGINE_F_DYALOGEXE 0x00010000 22 | #define ENGINE_F_CHECKSTACK 0x00020000 23 | #define ENGINE_F_NO_ENVIRONMENT 0x00040000 24 | 25 | #define ENGINE_F_SIGN_ASSEMBLY 0x00100000 26 | #define ENGINE_F_SIGN_DELAY 0x00200000 27 | 28 | #define ENGINE_F_DELETEONUNLOAD 0x01000000 29 | #define ENGINE_F_SINGLETHREADED 0x02000000 30 | #define ENGINE_F_UNLOADWHENEMPTY 0x04000000 31 | 32 | 33 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/JSON_APL/include/copyfns.h: -------------------------------------------------------------------------------- 1 | #define ARRAY_FNS(type) \ 2 | extern void LIBCALL pf_a_##type(PP *pp,APL_PARAM *param); \ 3 | extern void LIBCALL pt_a_##type(PP *pp,APL_PARAM *param); 4 | 5 | #define SCALAR_FNS(type) \ 6 | extern void LIBCALL pf_##type(PP *pp,APL_PARAM *param); \ 7 | extern void LIBCALL pt_##type(PP *pp,APL_PARAM *param); 8 | 9 | #define CHAR_ARRAY_FNS(type) \ 10 | extern void LIBCALL pf_a_##type(PP *pp,APL_PARAM *param); \ 11 | extern void LIBCALL pt_a_##type(PP *pp,APL_PARAM *param) 12 | 13 | #define POCK_FNS(type) ARRAY_FNS(type); SCALAR_FNS(type) 14 | 15 | POCK_FNS(int8_t); 16 | POCK_FNS(int16_t); 17 | POCK_FNS(int32_t); 18 | POCK_FNS(int64_t); 19 | POCK_FNS(double); 20 | 21 | POCK_FNS(char); 22 | POCK_FNS(char8); 23 | POCK_FNS(char16); 24 | POCK_FNS(char32); 25 | POCK_FNS(wchar_t); 26 | 27 | //CHAR_ARRAY_FNS(char8); 28 | //CHAR_ARRAY_FNS(char16); 29 | //CHAR_ARRAY_FNS(char32); 30 | //CHAR_ARRAY_FNS(wchar_t); 31 | 32 | extern void LIBCALL pf_str(PP *pp,APL_PARAM *param); 33 | extern void LIBCALL pt_str(PP *pp,APL_PARAM *param); 34 | 35 | extern void LIBCALL pf_z(PP *pp,APL_PARAM *param); 36 | extern void LIBCALL pt_z(PP *pp,APL_PARAM *param); 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /helloworld/helloworld/helloworld/include/copyfns.h: -------------------------------------------------------------------------------- 1 | #define ARRAY_FNS(type) \ 2 | extern void LIBCALL pf_a_##type(PP *pp,APL_PARAM *param); \ 3 | extern void LIBCALL pt_a_##type(PP *pp,APL_PARAM *param); 4 | 5 | #define SCALAR_FNS(type) \ 6 | extern void LIBCALL pf_##type(PP *pp,APL_PARAM *param); \ 7 | extern void LIBCALL pt_##type(PP *pp,APL_PARAM *param); 8 | 9 | #define CHAR_ARRAY_FNS(type) \ 10 | extern void LIBCALL pf_a_##type(PP *pp,APL_PARAM *param); \ 11 | extern void LIBCALL pt_a_##type(PP *pp,APL_PARAM *param) 12 | 13 | #define POCK_FNS(type) ARRAY_FNS(type); SCALAR_FNS(type) 14 | 15 | POCK_FNS(int8_t); 16 | POCK_FNS(int16_t); 17 | POCK_FNS(int32_t); 18 | POCK_FNS(int64_t); 19 | POCK_FNS(double); 20 | 21 | POCK_FNS(char); 22 | POCK_FNS(char8); 23 | POCK_FNS(char16); 24 | POCK_FNS(char32); 25 | POCK_FNS(wchar_t); 26 | 27 | //CHAR_ARRAY_FNS(char8); 28 | //CHAR_ARRAY_FNS(char16); 29 | //CHAR_ARRAY_FNS(char32); 30 | //CHAR_ARRAY_FNS(wchar_t); 31 | 32 | extern void LIBCALL pf_str(PP *pp,APL_PARAM *param); 33 | extern void LIBCALL pt_str(PP *pp,APL_PARAM *param); 34 | 35 | extern void LIBCALL pf_z(PP *pp,APL_PARAM *param); 36 | extern void LIBCALL pt_z(PP *pp,APL_PARAM *param); 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/JSON_APL/JSON_APL.c: -------------------------------------------------------------------------------- 1 | #include "call_apl.h" 2 | #define DWA_DISABLE_ASSERTS 3 | #include "dllmain.h" // not defining our own DllMain 4 | 5 | #include "stdio.h" 6 | #include "wchar.h" 7 | 8 | EXPORT int LIBCALL Initialise(unsigned int runtime, unsigned int len, wchar_t **args) 9 | { 10 | return load_apl(runtime ? ENGINE_F_RUNTIME : 0, len, args); 11 | } 12 | 13 | EXPORT int LIBCALL ExecAPL(wchar_t *statement, wchar_t *result) 14 | { 15 | APL_WCHAR_ARRAY_PARAM(S, statement, 256, AP_NULLTERM | AP_SIZED); 16 | APL_WCHAR_ARRAY_RESULT(R, result, 256, AP_NULLTERM | AP_SIZED); 17 | return call_apl(L"Exec", &S, &R, PARAM_END); 18 | } 19 | 20 | EXPORT int LIBCALL CallJSON(wchar_t *fname, wchar_t *in, wchar_t *out, unsigned int len) 21 | { 22 | APL_WCHAR_ARRAY_PARAM(Parm, in, 0, AP_NULLTERM | AP_JSON); 23 | APL_WCHAR_ARRAY_RESULT(Res, out, len, AP_NULLTERM | AP_JSON | AP_SIZED); 24 | return call_apl(fname, &Parm, &Res, PARAM_END); 25 | } 26 | 27 | EXPORT int LIBCALL GetEnv(const wchar_t *name, wchar_t *value, size_t len) 28 | { 29 | APL_WCHAR_ARRAY_PARAM(N, (wchar_t*)name, 0, AP_NULLTERM); 30 | APL_WCHAR_ARRAY_RESULT(R, value, len, AP_NULLTERM | AP_SIZED); 31 | return call_apl(L"GetEnv", &N, &R, PARAM_END); 32 | } -------------------------------------------------------------------------------- /dwa/lib/README.md: -------------------------------------------------------------------------------- 1 | # Dyalog Native Library 2 | This file is located in the directory **[DYALOG]/dwa/lib** in standard Dyalog installations. 3 | The two other files in this directory (but not on GitHub), 4 | - dwa_static 5 | - libdyalog 6 | 7 | can be used as part of an SDK to create shared libraries which allow APL code to be called by any language or program that can access native shared libraries. The SDK is described in the document [*APL as a Shared Library*](http://docs.dyalog.com/latest/APL%20as%20a%20Shared%20Library.pdf). It is also possible to produce a static library or a self-contained application containing APL code. 8 | 9 | [*The JSON_APL Shared Object*](http://docs.dyalog.com/latest/The%20JSON_APL%20Shared%20Object.pdf) is an example of such a shared library. It is included with standard installations of Dyalog version 17.1 onwards in **[DYALOG]/Samples/JSON_APL**, alongside an example Python script (**JSON_APL.py**) and dyalog function (**sign.dyalog**). It can be run out-of-the-box with a Python 3 interpreter. 10 | 11 | The C source code, Visual Studio Solution files and makefiles for the JSON_APL Shared Object, as well as three other samples ("helloworld", "qa" and "sign"), can be downloaded from https://github.com/dyalog/NativeLib. 12 | -------------------------------------------------------------------------------- /sign/sign/sign/sign.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #define DWA_DISABLE_ASSERTS 4 | 5 | #include "call_apl.h" 6 | #include "dllmain.h" // not defining our own DllMain 7 | 8 | EXPORT wchar_t* LIBCALL SignOf(int month,int day) 9 | { 10 | static wchar_t sign[256]; 11 | APL_INT32_PARAM(Month,month); 12 | APL_INT32_PARAM(Day,day); 13 | APL_WCHAR_ARRAY_RESULT(Sign,sign,255,AP_NULLTERM|AP_SIZED); 14 | call_apl(L"GetSign",&Month,&Day,&Sign,PARAM_END); 15 | return sign; 16 | } 17 | 18 | EXPORT int LIBCALL GetSign(int month,int day, wchar_t *sign, int len) 19 | { 20 | APL_INT32_PARAM(Month,month); 21 | APL_INT32_PARAM(Day,day); 22 | APL_WCHAR_ARRAY_RESULT(Sign,sign,len,AP_NULLTERM|AP_SIZED); 23 | return call_apl(L"GetSign",&Month,&Day,&Sign,PARAM_END); 24 | } 25 | 26 | 27 | 28 | EXPORT wchar_t * LIBCALL ReturnSign(wchar_t *in) 29 | { 30 | static wchar_t sign[256]; 31 | APL_WCHAR_ARRAY_PARAM (Parm,in,0,AP_NULLTERM|AP_JSON); 32 | APL_WCHAR_ARRAY_RESULT(Sign,sign,255,AP_NULLTERM|AP_SIZED|AP_JSON); 33 | if (0==call_apl(L"GetSignObject",&Parm,&Sign,PARAM_END)) 34 | return sign; 35 | return 0; 36 | } 37 | 38 | 39 | EXPORT int LIBCALL GetSignObject(wchar_t *in,wchar_t *out,unsigned len) 40 | { 41 | APL_WCHAR_ARRAY_PARAM (Parm,in,0,AP_NULLTERM|AP_JSON); 42 | APL_WCHAR_ARRAY_RESULT(Sign ,out,len,AP_NULLTERM|AP_JSON|AP_SIZED); 43 | return call_apl(L"GetSignObject",&Parm,&Sign,PARAM_END); 44 | } 45 | -------------------------------------------------------------------------------- /qa/make_resources: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | #set -x 3 | 4 | embed_file() 5 | { 6 | FILE=$1 7 | NAME=$2 8 | VNAME=$(echo $FILE | sed "s/\./_/") 9 | echo "#undef ${NAME}_data_len" 10 | echo "#undef ${NAME}_data" 11 | xxd -i $FILE | sed "s/unsigned int ${VNAME}_len = \(.*\);/#define ${NAME}_data_len \1/" | sed "s/${VNAME}/${NAME}_data/" 12 | } 13 | 14 | create() 15 | { 16 | echo "#include \"call_apl_resources.h\"" 17 | echo 18 | echo "#define BOUND_RES_SCRIPT_data_len 0" 19 | echo "#define BOUND_RES_SCRIPT_data 0" 20 | echo "#define BOUND_RES_WS_data_len 0" 21 | echo "#define BOUND_RES_WS_data 0" 22 | 23 | cat $RCFILE | sed -n "s/^\(BOUND_RES_[A-Z]*\)[ \t]*RCDATA[ \t]*\([a-zA-Z]*\)/\1 \2/p" | while read name file 24 | do 25 | ( 26 | cd $(dirname $RCFILE) 27 | #echo $file $name 28 | if [ -f $file ] ; then 29 | embed_file $file $name 30 | else 31 | echo file: $file NOT FOUND >&2 32 | exit 2 33 | fi 34 | ) 35 | done 36 | 37 | 38 | echo "const APL_RESOURCES _dwa_hInst={" 39 | echo BOUND_RES_SCRIPT_data, 40 | echo BOUND_RES_SCRIPT_data_len, 41 | echo BOUND_RES_WS_data, 42 | echo BOUND_RES_WS_data_len 43 | echo "};" 44 | 45 | echo "const APL_RESOURCES *dwa_hInst=&_dwa_hInst;" 46 | } 47 | 48 | compile() 49 | { 50 | ${CC} $1 ${C_FLAGS} ${CC_OUTFILE}$OUTPUT 51 | } 52 | 53 | while [ $# -gt 0 ] 54 | do 55 | case $1 in 56 | /Fo*) 57 | OUTPUT=$(echo $1 | sed "s?^/Fo??") 58 | shift 59 | ;; 60 | /I*) 61 | shift 62 | ;; 63 | *) 64 | RCFILE=$1 65 | shift 66 | ;; 67 | esac 68 | done 69 | 70 | 71 | create > ${OUTPUT}.tmp.c 72 | compile ${OUTPUT}.tmp.c 73 | 74 | 75 | 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /sign/make_resources: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | #set -x 3 | 4 | embed_file() 5 | { 6 | FILE=$1 7 | NAME=$2 8 | VNAME=$(echo $FILE | sed "s/\./_/") 9 | echo "#undef ${NAME}_data_len" 10 | echo "#undef ${NAME}_data" 11 | xxd -i $FILE | sed "s/unsigned int ${VNAME}_len = \(.*\);/#define ${NAME}_data_len \1/" | sed "s/${VNAME}/${NAME}_data/" 12 | } 13 | 14 | create() 15 | { 16 | echo "#include \"call_apl_resources.h\"" 17 | echo 18 | echo "#define BOUND_RES_SCRIPT_data_len 0" 19 | echo "#define BOUND_RES_SCRIPT_data 0" 20 | echo "#define BOUND_RES_WS_data_len 0" 21 | echo "#define BOUND_RES_WS_data 0" 22 | 23 | cat $RCFILE | sed -n "s/^\(BOUND_RES_[A-Z]*\)[ \t]*RCDATA[ \t]*\([a-zA-Z]*\)/\1 \2/p" | while read name file 24 | do 25 | ( 26 | cd $(dirname $RCFILE) 27 | #echo $file $name 28 | if [ -f $file ] ; then 29 | embed_file $file $name 30 | else 31 | echo file: $file NOT FOUND >&2 32 | exit 2 33 | fi 34 | ) 35 | done 36 | 37 | 38 | echo "const APL_RESOURCES _dwa_hInst={" 39 | echo BOUND_RES_SCRIPT_data, 40 | echo BOUND_RES_SCRIPT_data_len, 41 | echo BOUND_RES_WS_data, 42 | echo BOUND_RES_WS_data_len 43 | echo "};" 44 | 45 | echo "const APL_RESOURCES *dwa_hInst=&_dwa_hInst;" 46 | } 47 | 48 | compile() 49 | { 50 | ${CC} $1 ${C_FLAGS} ${CC_OUTFILE}$OUTPUT 51 | } 52 | 53 | while [ $# -gt 0 ] 54 | do 55 | case $1 in 56 | /Fo*) 57 | OUTPUT=$(echo $1 | sed "s?^/Fo??") 58 | shift 59 | ;; 60 | /I*) 61 | shift 62 | ;; 63 | *) 64 | RCFILE=$1 65 | shift 66 | ;; 67 | esac 68 | done 69 | 70 | 71 | create > ${OUTPUT}.tmp.c 72 | compile ${OUTPUT}.tmp.c 73 | 74 | 75 | 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /JSON_APL/make_resources: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | #set -x 3 | 4 | embed_file() 5 | { 6 | FILE=$1 7 | NAME=$2 8 | VNAME=$(echo $FILE | sed "s/\./_/") 9 | echo "#undef ${NAME}_data_len" 10 | echo "#undef ${NAME}_data" 11 | xxd -i $FILE | sed "s/unsigned int ${VNAME}_len = \(.*\);/#define ${NAME}_data_len \1/" | sed "s/${VNAME}/${NAME}_data/" 12 | } 13 | 14 | create() 15 | { 16 | echo "#include \"call_apl_resources.h\"" 17 | echo 18 | echo "#define BOUND_RES_SCRIPT_data_len 0" 19 | echo "#define BOUND_RES_SCRIPT_data 0" 20 | echo "#define BOUND_RES_WS_data_len 0" 21 | echo "#define BOUND_RES_WS_data 0" 22 | 23 | cat $RCFILE | sed -n "s/^\(BOUND_RES_[A-Z]*\)[ \t]*RCDATA[ \t]*\([a-zA-Z]*\)/\1 \2/p" | while read name file 24 | do 25 | ( 26 | cd $(dirname $RCFILE) 27 | #echo $file $name 28 | if [ -f $file ] ; then 29 | embed_file $file $name 30 | else 31 | echo file: $file NOT FOUND >&2 32 | exit 2 33 | fi 34 | ) 35 | done 36 | 37 | 38 | echo "const APL_RESOURCES _dwa_hInst={" 39 | echo BOUND_RES_SCRIPT_data, 40 | echo BOUND_RES_SCRIPT_data_len, 41 | echo BOUND_RES_WS_data, 42 | echo BOUND_RES_WS_data_len 43 | echo "};" 44 | 45 | echo "const APL_RESOURCES *dwa_hInst=&_dwa_hInst;" 46 | } 47 | 48 | compile() 49 | { 50 | ${CC} $1 ${C_FLAGS} ${CC_OUTFILE}$OUTPUT 51 | } 52 | 53 | while [ $# -gt 0 ] 54 | do 55 | case $1 in 56 | /Fo*) 57 | OUTPUT=$(echo $1 | sed "s?^/Fo??") 58 | shift 59 | ;; 60 | /I*) 61 | shift 62 | ;; 63 | *) 64 | RCFILE=$1 65 | shift 66 | ;; 67 | esac 68 | done 69 | 70 | 71 | create > ${OUTPUT}.tmp.c 72 | compile ${OUTPUT}.tmp.c 73 | 74 | 75 | 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /helloworld/make_resources: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | #set -x 3 | 4 | embed_file() 5 | { 6 | FILE=$1 7 | NAME=$2 8 | VNAME=$(echo $FILE | sed "s/\./_/") 9 | echo "#undef ${NAME}_data_len" 10 | echo "#undef ${NAME}_data" 11 | xxd -i $FILE | sed "s/unsigned int ${VNAME}_len = \(.*\);/#define ${NAME}_data_len \1/" | sed "s/${VNAME}/${NAME}_data/" 12 | } 13 | 14 | create() 15 | { 16 | echo "#include \"call_apl_resources.h\"" 17 | echo 18 | echo "#define BOUND_RES_SCRIPT_data_len 0" 19 | echo "#define BOUND_RES_SCRIPT_data 0" 20 | echo "#define BOUND_RES_WS_data_len 0" 21 | echo "#define BOUND_RES_WS_data 0" 22 | 23 | cat $RCFILE | sed -n "s/^\(BOUND_RES_[A-Z]*\)[ \t]*RCDATA[ \t]*\([a-zA-Z]*\)/\1 \2/p" | while read name file 24 | do 25 | ( 26 | cd $(dirname $RCFILE) 27 | #echo $file $name 28 | if [ -f $file ] ; then 29 | embed_file $file $name 30 | else 31 | echo file: $file NOT FOUND >&2 32 | exit 2 33 | fi 34 | ) 35 | done 36 | 37 | 38 | echo "const APL_RESOURCES _dwa_hInst={" 39 | echo BOUND_RES_SCRIPT_data, 40 | echo BOUND_RES_SCRIPT_data_len, 41 | echo BOUND_RES_WS_data, 42 | echo BOUND_RES_WS_data_len 43 | echo "};" 44 | 45 | echo "const APL_RESOURCES *dwa_hInst=&_dwa_hInst;" 46 | } 47 | 48 | compile() 49 | { 50 | ${CC} $1 ${C_FLAGS} ${CC_OUTFILE}$OUTPUT 51 | } 52 | 53 | while [ $# -gt 0 ] 54 | do 55 | case $1 in 56 | /Fo*) 57 | OUTPUT=$(echo $1 | sed "s?^/Fo??") 58 | shift 59 | ;; 60 | /I*) 61 | shift 62 | ;; 63 | *) 64 | RCFILE=$1 65 | shift 66 | ;; 67 | esac 68 | done 69 | 70 | 71 | create > ${OUTPUT}.tmp.c 72 | compile ${OUTPUT}.tmp.c 73 | 74 | 75 | 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /qa/qa.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "exe", "qa\call_qa\call_qa.vcxproj", "{25dfc34c-a37d-45f7-93bf-dd23d4a76762}" 7 | ProjectSection(ProjectDependencies) = postProject 8 | {7a4d17a8-9aaa-45e0-8322-2ab5bb5cff61} = {7a4d17a8-9aaa-45e0-8322-2ab5bb5cff61} 9 | EndProjectSection 10 | EndProject 11 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "apl", "qa\qa\qa.vcxproj", "{7a4d17a8-9aaa-45e0-8322-2ab5bb5cff61}" 12 | EndProject 13 | Global 14 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 15 | Debug|x64 = Debug|x64 16 | Release|x64 = Release|x64 17 | EndGlobalSection 18 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 19 | {25dfc34c-a37d-45f7-93bf-dd23d4a76762}.Debug|x64.ActiveCfg = Debug|x64 20 | {25dfc34c-a37d-45f7-93bf-dd23d4a76762}.Debug|x64.Build.0 = Debug|x64 21 | {25dfc34c-a37d-45f7-93bf-dd23d4a76762}.Release|x64.ActiveCfg = Release|x64 22 | {25dfc34c-a37d-45f7-93bf-dd23d4a76762}.Release|x64.Build.0 = Release|x64 23 | {7a4d17a8-9aaa-45e0-8322-2ab5bb5cff61}.Debug|x64.ActiveCfg = Debug|x64 24 | {7a4d17a8-9aaa-45e0-8322-2ab5bb5cff61}.Debug|x64.Build.0 = Debug|x64 25 | {7a4d17a8-9aaa-45e0-8322-2ab5bb5cff61}.Release|x64.ActiveCfg = Release|x64 26 | {7a4d17a8-9aaa-45e0-8322-2ab5bb5cff61}.Release|x64.Build.0 = Release|x64 27 | 28 | EndGlobalSection 29 | GlobalSection(SolutionProperties) = preSolution 30 | HideSolutionNode = FALSE 31 | EndGlobalSection 32 | GlobalSection(ExtensibilityGlobals) = postSolution 33 | SolutionGuid = {994259f8-21a8-4512-b1e8-74b87acc4ec3} 34 | EndGlobalSection 35 | EndGlobal 36 | -------------------------------------------------------------------------------- /sign/sign.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "exe", "sign\call_sign\call_sign.vcxproj", "{3e6ec4f4-1630-4faf-98be-eefb4be3c735}" 7 | ProjectSection(ProjectDependencies) = postProject 8 | {ec21b515-5096-47c3-b369-5da87cb157e4} = {ec21b515-5096-47c3-b369-5da87cb157e4} 9 | EndProjectSection 10 | EndProject 11 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "apl", "sign\sign\sign.vcxproj", "{ec21b515-5096-47c3-b369-5da87cb157e4}" 12 | EndProject 13 | Global 14 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 15 | Debug|x64 = Debug|x64 16 | Release|x64 = Release|x64 17 | EndGlobalSection 18 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 19 | {3e6ec4f4-1630-4faf-98be-eefb4be3c735}.Debug|x64.ActiveCfg = Debug|x64 20 | {3e6ec4f4-1630-4faf-98be-eefb4be3c735}.Debug|x64.Build.0 = Debug|x64 21 | {3e6ec4f4-1630-4faf-98be-eefb4be3c735}.Release|x64.ActiveCfg = Release|x64 22 | {3e6ec4f4-1630-4faf-98be-eefb4be3c735}.Release|x64.Build.0 = Release|x64 23 | {ec21b515-5096-47c3-b369-5da87cb157e4}.Debug|x64.ActiveCfg = Debug|x64 24 | {ec21b515-5096-47c3-b369-5da87cb157e4}.Debug|x64.Build.0 = Debug|x64 25 | {ec21b515-5096-47c3-b369-5da87cb157e4}.Release|x64.ActiveCfg = Release|x64 26 | {ec21b515-5096-47c3-b369-5da87cb157e4}.Release|x64.Build.0 = Release|x64 27 | 28 | EndGlobalSection 29 | GlobalSection(SolutionProperties) = preSolution 30 | HideSolutionNode = FALSE 31 | EndGlobalSection 32 | GlobalSection(ExtensibilityGlobals) = postSolution 33 | SolutionGuid = {cca15c82-76c0-439b-86b8-adfca26f54a1} 34 | EndGlobalSection 35 | EndGlobal 36 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "exe", "JSON_APL\call_JSON_APL\call_JSON_APL.vcxproj", "{8bd1599b-54db-44c1-9632-d2c391aa134f}" 7 | ProjectSection(ProjectDependencies) = postProject 8 | {7faa709a-8484-4e7f-b7ce-7a080b0f8303} = {7faa709a-8484-4e7f-b7ce-7a080b0f8303} 9 | EndProjectSection 10 | EndProject 11 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "apl", "JSON_APL\JSON_APL\JSON_APL.vcxproj", "{7faa709a-8484-4e7f-b7ce-7a080b0f8303}" 12 | EndProject 13 | Global 14 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 15 | Debug|x64 = Debug|x64 16 | Release|x64 = Release|x64 17 | EndGlobalSection 18 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 19 | {8bd1599b-54db-44c1-9632-d2c391aa134f}.Debug|x64.ActiveCfg = Debug|x64 20 | {8bd1599b-54db-44c1-9632-d2c391aa134f}.Debug|x64.Build.0 = Debug|x64 21 | {8bd1599b-54db-44c1-9632-d2c391aa134f}.Release|x64.ActiveCfg = Release|x64 22 | {8bd1599b-54db-44c1-9632-d2c391aa134f}.Release|x64.Build.0 = Release|x64 23 | {7faa709a-8484-4e7f-b7ce-7a080b0f8303}.Debug|x64.ActiveCfg = Debug|x64 24 | {7faa709a-8484-4e7f-b7ce-7a080b0f8303}.Debug|x64.Build.0 = Debug|x64 25 | {7faa709a-8484-4e7f-b7ce-7a080b0f8303}.Release|x64.ActiveCfg = Release|x64 26 | {7faa709a-8484-4e7f-b7ce-7a080b0f8303}.Release|x64.Build.0 = Release|x64 27 | 28 | EndGlobalSection 29 | GlobalSection(SolutionProperties) = preSolution 30 | HideSolutionNode = FALSE 31 | EndGlobalSection 32 | GlobalSection(ExtensibilityGlobals) = postSolution 33 | SolutionGuid = {69e203e7-99c5-46bd-8ec9-b1594630d481} 34 | EndGlobalSection 35 | EndGlobal 36 | -------------------------------------------------------------------------------- /helloworld/helloworld.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "exe", "helloworld\call_helloworld\call_helloworld.vcxproj", "{52228256-7735-45f3-a870-3744288b94d6}" 7 | ProjectSection(ProjectDependencies) = postProject 8 | {404939f2-6ff5-4bf2-ae7c-932aa77296dd} = {404939f2-6ff5-4bf2-ae7c-932aa77296dd} 9 | EndProjectSection 10 | EndProject 11 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "apl", "helloworld\helloworld\helloworld.vcxproj", "{404939f2-6ff5-4bf2-ae7c-932aa77296dd}" 12 | EndProject 13 | Global 14 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 15 | Debug|x64 = Debug|x64 16 | Release|x64 = Release|x64 17 | EndGlobalSection 18 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 19 | {52228256-7735-45f3-a870-3744288b94d6}.Debug|x64.ActiveCfg = Debug|x64 20 | {52228256-7735-45f3-a870-3744288b94d6}.Debug|x64.Build.0 = Debug|x64 21 | {52228256-7735-45f3-a870-3744288b94d6}.Release|x64.ActiveCfg = Release|x64 22 | {52228256-7735-45f3-a870-3744288b94d6}.Release|x64.Build.0 = Release|x64 23 | {404939f2-6ff5-4bf2-ae7c-932aa77296dd}.Debug|x64.ActiveCfg = Debug|x64 24 | {404939f2-6ff5-4bf2-ae7c-932aa77296dd}.Debug|x64.Build.0 = Debug|x64 25 | {404939f2-6ff5-4bf2-ae7c-932aa77296dd}.Release|x64.ActiveCfg = Release|x64 26 | {404939f2-6ff5-4bf2-ae7c-932aa77296dd}.Release|x64.Build.0 = Release|x64 27 | 28 | EndGlobalSection 29 | GlobalSection(SolutionProperties) = preSolution 30 | HideSolutionNode = FALSE 31 | EndGlobalSection 32 | GlobalSection(ExtensibilityGlobals) = postSolution 33 | SolutionGuid = {51f2fb02-bd4f-4837-a5a3-4e44375f15e6} 34 | EndGlobalSection 35 | EndGlobal 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NativeLib 2 | These are the C source and build files for the Dyalog Native Library Samples. 3 | 4 | > The Dyalog interpreter native library files **dwa_static** and **libdyalog** are required to build these projects. They are installed in **[DYALOG]/dwa/lib** in standard Dyalog installations from version 18.0 onwards. Therefore any software bulit from the Dyalog Native Library SDK (described in the document [*APL as a Shared Library*](http://docs.dyalog.com/latest/APL%20as%20a%20Shared%20Library.pdf)) must be used in accordance with a [Dyalog license agreement](https://www.dyalog.com/prices-and-licences.htm). 5 | 6 | ``` 7 | +-----------------------------------------------------------------+ 8 | | Dyalog is free for non-commercial use but is not free software. | 9 | | A non-commercial licence can be used for experiments and | 10 | | proof of concept until the point in time that it is of value. | 11 | | For further information visit | 12 | | https://www.dyalog.com/prices-and-licences.htm | 13 | +-----------------------------------------------------------------+ 14 | ``` 15 | 16 | ## JSON_APL 17 | The JSON_APL sample allows the user to call APL functions from any language which can access native shared libraries (using what is commonly referred to as the "foreign function interface"), passing arguments and receiving results in JSON (JavaScript Object Notation) format. Its use is documented in [*The JSON_APL Shared Object*](http://docs.dyalog.com/latest/The%20JSON_APL%20Shared%20Object.pdf). 18 | 19 | ## HelloWorld 20 | The HelloWorld sample calls into APL to display a simple "hello" message. 21 | 22 | ## Qa 23 | The Qa sample uses and tests most (but not all) of the SDK and is provided for information only. It is used internally at Dyalog Ltd for QA purposes. Some elements of it might prove useful/interesting, for example, the Qa samples shows that the APL code can be called concurrently from multiple threads in the host application. 24 | 25 | ## Sign 26 | The Sign sample calls into APL using various different argument types to return the astrological star sign for a specific date. 27 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/call_JSON_APL/call_JSON_APL.c: -------------------------------------------------------------------------------- 1 | #if defined(_MSC_VER) 2 | #include 3 | #endif 4 | #ifdef __APPLE__ 5 | #include 6 | #endif 7 | #include 8 | #include 9 | 10 | #if _MSC_VER 11 | #define LIBCALL __cdecl 12 | #else 13 | #define LIBCALL 14 | #endif 15 | 16 | #define AV_QUAD 0x2395 17 | #define AV_FMT 0x2355 18 | 19 | extern int LIBCALL Initialise(unsigned int runtime, unsigned int len, wchar_t **args); 20 | extern int LIBCALL ExecAPL(wchar_t *statement, wchar_t *result); 21 | extern int LIBCALL CallJSON(wchar_t *function, wchar_t *in, wchar_t *out, unsigned int len); 22 | extern int LIBCALL GetEnv(const wchar_t *name, wchar_t *value, size_t len); 23 | 24 | int run(void *ignore) 25 | { 26 | #ifdef __APPLE__ 27 | uselocale(newlocale(LC_CTYPE_MASK, "UTF-8", 0)); 28 | #endif 29 | wchar_t buf[256]; 30 | wchar_t APL[256]; 31 | wchar_t *text = L"Hello there APL"; 32 | int err; 33 | // Execute wchar APL statement (expects char return so format required): 34 | 35 | wcscpy(APL,L" +/1 2 3 4"); APL[0]=AV_FMT; 36 | err = ExecAPL(APL, buf); 37 | wprintf(L"ExecAPL: %ls\n%ls\nError: %i\n", APL+1, buf, err); 38 | // LENGTH ERROR 39 | wcscpy(APL, L" 1 2 + 3 4 5"); APL[0]=AV_FMT; 40 | err = ExecAPL(APL, buf); 41 | wprintf(L"ExecAPL: %ls\n%ls\nError: %i\n", APL+1, buf, err); 42 | // Execute an APL function called using JSON 43 | wcscpy(APL,L"{\"Left\":[1,0,1,1,0],\"Function\":\"/\",\"Right\":\"APPLE\"}"); 44 | err = CallJSON(L"Exec", APL, buf, 256); 45 | wprintf(L"CallJSON Exec: %ls\nError: %i\n", buf, err); 46 | // Load a .dyalog script 47 | wcscpy(APL,L"\"sign.dyalog\""); 48 | err = CallJSON(L"Load", APL, buf, 256); 49 | wprintf(L"CallJSON Load: %ls\nError: %i\n", buf, err); 50 | // Execute a function from loaded script using JSON 51 | err = CallJSON(L"GetSign", L"[1,24]", buf, 256); 52 | wprintf(L"CallJSON GetSign 1 24: %ls\nError:%i\n", buf, err); 53 | // Query available workspace (expects char return so format required) 54 | wcscpy(APL,L" WA"); APL[0]=AV_FMT; APL[1]=AV_QUAD; 55 | err = ExecAPL(APL, buf); 56 | wprintf(L"WA: %ls\nError:%i\n", buf, err); 57 | // Query MAXWS 58 | err = GetEnv(L"MAXWS", buf, 256); 59 | wprintf(L"GetEnv MAXWS: %ls\nError: %i\n", buf, err); 60 | // Query SESSION_FILE 61 | err = GetEnv(L"SESSION_FILE", buf, 256); 62 | wprintf(L"GetEnv Session file: %ls\nError: %i\n", buf, err); 63 | return 0; 64 | } 65 | 66 | #if defined(_MSC_VER) 67 | int __cdecl main(int argc, char *argv[]) 68 | #else 69 | int main(int argc, char *argv[]) 70 | #endif 71 | { 72 | wchar_t *WSargs[] = { 73 | L"MAXWS=256Mb", 74 | L"SESSION_FILE=JSON_APL.dse" 75 | }; 76 | Initialise(1, sizeof(WSargs) / sizeof(WSargs[0]), WSargs); 77 | run(NULL); 78 | return 0; 79 | } 80 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/JSON_APL.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import json 5 | import platform 6 | from ctypes import cdll, c_wchar_p, create_unicode_buffer 7 | from platformpaths import sopaths, ridelibpaths 8 | 9 | APL = cdll.LoadLibrary(sopaths[platform.architecture()[0]][platform.system()]) 10 | 11 | def InitAPL(runtime, WSargs): 12 | __C_APL_WSargs_Binding_Params__ = cUnicodeList(WSargs) 13 | APL.Initialise(runtime,len(WSargs),__C_APL_WSargs_Binding_Params__) 14 | 15 | def cUnicodeList(pylist): 16 | cUL = (c_wchar_p * len(pylist))() 17 | cUL[:] = pylist 18 | return cUL 19 | 20 | def CallJSON(function, parms): 21 | result = create_unicode_buffer('', 256) 22 | err = APL.CallJSON(function, json.dumps(parms), result) 23 | return (result.value, err) 24 | 25 | def GetEnv(var): 26 | result = create_unicode_buffer('', 256) 27 | err = APL.GetEnv(var, result, 256) 28 | return (result.value, err) 29 | 30 | def main(): 31 | print("Loaded lib {0}".format(APL)) 32 | print(CallJSON("Load","sign.dyalog")) 33 | print(CallJSON("GetSign", [1, 24])) # Call a function loaded from sign.dyalog 34 | 35 | # Call APL using statements formatted in JSON 36 | APLCode = { 37 | "Left": [1,0,1,1,0], 38 | "Function": "/", 39 | "Right": "APPLE" 40 | } 41 | print(CallJSON("Exec", APLCode)) 42 | APLCode = { 43 | "Function": "+\\", 44 | "Right": [1,2,3,4,5] 45 | } 46 | print(CallJSON("Exec", APLCode)) 47 | 48 | # Set a variable myvar in the APL workspace and assign its value to a python variable pyvar 49 | pyvar = json.loads((CallJSON("Exec", "myvar←⍳9"))[0]) 50 | print(pyvar) 51 | # Alter the variable pyvar in python 52 | for i in range(len(pyvar)): 53 | pyvar[i] += i 54 | print(pyvar) 55 | # Process the APL variable myvar in APL and return the result 56 | print(json.loads(CallJSON("Exec", "+/myvar")[0])) 57 | # Process the contents of pyvar in APL and return the result 58 | APLCode = { 59 | "Function": "+/", 60 | "Right": pyvar 61 | } 62 | print(json.loads(CallJSON("Exec", APLCode)[0])) 63 | 64 | # Query available workspace 65 | APLCode = { 66 | "Function": "⎕WA" 67 | } 68 | print(CallJSON("Exec", APLCode)) 69 | # Query MAXWS 70 | print(GetEnv("MAXWS")) 71 | # Query SESSION_FILE 72 | print(GetEnv("SESSION_FILE")) 73 | # Query RIDE_INIT 74 | print(GetEnv("RIDE_INIT")) 75 | # Query DYALOG_RIDELIB 76 | print(GetEnv("DYALOG_RIDELIB")) 77 | print("Done") 78 | WSargs = [ 79 | "MAXWS=512Mb", 80 | "SESSION_FILE=JSON_APL.dse", 81 | "RIDE_INIT=SERVE:*:4502", 82 | "DYALOG_RIDELIB="+ridelibpaths[platform.architecture()[0]][platform.system()] 83 | ] 84 | InitAPL(1,WSargs) 85 | CallJSON("Exec","3502⌶1") # Start RIDE 86 | #input("You can now use RIDE to access the active workspace. Press Enter to continue...") 87 | main() 88 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/call_JSON_APL/JSON_APL.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import json 5 | import platform 6 | from ctypes import cdll, c_wchar_p, create_unicode_buffer 7 | from platformpaths import sopaths, ridelibpaths 8 | 9 | APL = cdll.LoadLibrary(sopaths[platform.architecture()[0]][platform.system()]) 10 | 11 | def InitAPL(runtime, WSargs): 12 | __C_APL_WSargs_Binding_Params__ = cUnicodeList(WSargs) 13 | APL.Initialise(runtime,len(WSargs),__C_APL_WSargs_Binding_Params__) 14 | 15 | def cUnicodeList(pylist): 16 | cUL = (c_wchar_p * len(pylist))() 17 | cUL[:] = pylist 18 | return cUL 19 | 20 | def CallJSON(function, parms): 21 | result = create_unicode_buffer('', 256) 22 | err = APL.CallJSON(function, json.dumps(parms), result) 23 | return (result.value, err) 24 | 25 | def GetEnv(var): 26 | result = create_unicode_buffer('', 256) 27 | err = APL.GetEnv(var, result, 256) 28 | return (result.value, err) 29 | 30 | def main(): 31 | print("Loaded lib {0}".format(APL)) 32 | print(CallJSON("Load","sign.dyalog")) 33 | print(CallJSON("GetSign", [1, 24])) # Call a function loaded from sign.dyalog 34 | 35 | # Call APL using statements formatted in JSON 36 | APLCode = { 37 | "Left": [1,0,1,1,0], 38 | "Function": "/", 39 | "Right": "APPLE" 40 | } 41 | print(CallJSON("Exec", APLCode)) 42 | APLCode = { 43 | "Function": "+\\", 44 | "Right": [1,2,3,4,5] 45 | } 46 | print(CallJSON("Exec", APLCode)) 47 | 48 | # Set a variable myvar in the APL workspace and assign its value to a python variable pyvar 49 | pyvar = json.loads((CallJSON("Exec", "myvar←⍳9"))[0]) 50 | print(pyvar) 51 | # Alter the variable pyvar in python 52 | for i in range(len(pyvar)): 53 | pyvar[i] += i 54 | print(pyvar) 55 | # Process the APL variable myvar in APL and return the result 56 | print(json.loads(CallJSON("Exec", "+/myvar")[0])) 57 | # Process the contents of pyvar in APL and return the result 58 | APLCode = { 59 | "Function": "+/", 60 | "Right": pyvar 61 | } 62 | print(json.loads(CallJSON("Exec", APLCode)[0])) 63 | 64 | # Query available workspace 65 | APLCode = { 66 | "Function": "⎕WA" 67 | } 68 | print(CallJSON("Exec", APLCode)) 69 | # Query MAXWS 70 | print(GetEnv("MAXWS")) 71 | # Query SESSION_FILE 72 | print(GetEnv("SESSION_FILE")) 73 | # Query RIDE_INIT 74 | print(GetEnv("RIDE_INIT")) 75 | # Query DYALOG_RIDELIB 76 | print(GetEnv("DYALOG_RIDELIB")) 77 | print("Done") 78 | WSargs = [ 79 | "MAXWS=512Mb", 80 | "SESSION_FILE=JSON_APL.dse", 81 | "RIDE_INIT=SERVE:*:4502", 82 | "DYALOG_RIDELIB="+ridelibpaths[platform.architecture()[0]][platform.system()] 83 | ] 84 | InitAPL(1,WSargs) 85 | CallJSON("Exec","3502⌶1") # Start RIDE 86 | #input("You can now use RIDE to access the active workspace. Press Enter to continue...") 87 | main() 88 | -------------------------------------------------------------------------------- /qa/makefile: -------------------------------------------------------------------------------- 1 | SAMPLE:=qa 2 | include makefile.win.64 3 | MK_OPT:=$(if $(MK_OPT),$(MK_OPT),opt) 4 | include makefile.common 5 | 6 | CALLER:=call_$(SAMPLE) 7 | 8 | vpath %.c $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 9 | vpath %.cpp $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 10 | vpath %.rc $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 11 | vpath %.dyalog $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 12 | vpath %.dws $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 13 | 14 | INCS:=$(INCS) -I$(SAMPLE)/$(SAMPLE)/include -I$(SAMPLE)/$(SAMPLE) 15 | 16 | APL_OBJDIR=$(SAMPLE)/obj/$(SAMPLE)/${MK_PORT}/${MK_BITS}/${MK_OPT} 17 | EXE_OBJDIR=$(SAMPLE)/obj/$(CALLER)/${MK_PORT}/${MK_BITS}/${MK_OPT} 18 | 19 | export C_FLAGS:=$(C_FLAGS) $(INCS) ${INCS_${MK_PORT}} 20 | 21 | EXENAME=$(CALLER)$(EXEEXT) 22 | IMPLIBNAME=$(SAMPLE) 23 | DLLNAME=lib$(IMPLIBNAME) 24 | target: EXE 25 | 26 | APL_SOURCES:=$(SAMPLE) 27 | EXE_SOURCES:=$(CALLER) 28 | 29 | APL_OBJS:=${addsuffix $(OBJEXT),${basename ${APL_SOURCES}}} # replace .* with .o 30 | APL_OBJS:=$(APL_OBJS:%=$(APL_OBJDIR)/%) # add the path on the front 31 | 32 | EXE_OBJS:=${addsuffix $(OBJEXT),${basename ${EXE_SOURCES}}} # replace .* with .o 33 | EXE_OBJS:=$(EXE_OBJS:%=$(EXE_OBJDIR)/%) # add the path on the front 34 | 35 | DWA_LIBS:=$(DWA_LIBDIR)/dwa_static$(LIBEXT) $(DWA_LIBDIR)/libdyalog$(LIBEXT) 36 | 37 | ifeq ($(MK_PORT),win) 38 | EXE_LIBS:=$(APL_OBJDIR)/$(DLLNAME)${IMPLIBEXT} 39 | else 40 | EXE_LIBS:=$(APL_OBJDIR)/$(DLLNAME)${IMPLIBEXT} 41 | endif 42 | 43 | $(APL_OBJDIR)/%$(OBJEXT): %.c 44 | @mkdir -p $(APL_OBJDIR) 45 | @$(CC) $(C_FLAGS) $(APL_C_FLAGS) $(CC_OUTFILE)$@ $< 46 | 47 | $(APL_OBJDIR)/%$(OBJEXT): %.cpp 48 | @mkdir -p $(APL_OBJDIR) 49 | @$(CC) $(C_FLAGS) $(APL_C_FLAGS) $(CC_OUTFILE)$@ $< 50 | 51 | $(EXE_OBJDIR)/%$(OBJEXT): %.c 52 | @mkdir -p $(EXE_OBJDIR) 53 | @$(CC) $(C_FLAGS) $(CC_OUTFILE)$@ $< 54 | 55 | $(EXE_OBJDIR)/%$(OBJEXT): %.cpp 56 | @mkdir -p $(EXE_OBJDIR) 57 | @$(CC) $(C_FLAGS) $(CC_OUTFILE)$@ $< 58 | 59 | $(APL_OBJDIR)/%$(RESEXT): %.rc %.dyalog 60 | @mkdir -p $(APL_OBJDIR) 61 | @$(RC) $(R_FLAGS) /Fo$@ $(INCS) $< 62 | 63 | $(APL_OBJDIR)/%$(RESEXT): %.rc %.dws 64 | @mkdir -p $(APL_OBJDIR) 65 | @$(RC) $(R_FLAGS) /Fo$@ $(INCS) $< 66 | 67 | $(APL_OBJDIR)/$(DLLNAME)${DLLEXT}: ${APL_OBJS} $(APL_OBJDIR)/$(SAMPLE)$(RESEXT) 68 | @$(LD) $(APL_OBJS) $(APL_OBJDIR)/$(SAMPLE)$(RESEXT) $(L_FLAGS) $(DWA_LIBS) $(LIBS) $(APL_L_FLAGS) $(LD_OUTFILE)$@ 69 | 70 | $(EXE_OBJDIR)/$(EXENAME): ${EXE_OBJS} $(APL_OBJDIR)/$(DLLNAME)${DLLEXT} 71 | @cp $(APL_OBJDIR)/$(DLLNAME)${DLLEXT} $(EXE_OBJDIR) 72 | @if [ -f $(APL_OBJDIR)/$(DLLNAME)${LIBEXT} ] ; then cp $(APL_OBJDIR)/$(DLLNAME)${LIBEXT} $(EXE_OBJDIR) ; fi 73 | @( cd $(EXE_OBJDIR) ; $(LD) $(notdir $(EXE_OBJS)) $(notdir $(EXE_LIBS)) $(LIBS) $(L_FLAGS) $(LD_OUTFILE)$(notdir $@) ) 74 | @$(SET_RPATH) -change "$(APL_OBJDIR)/$(DLLNAME)$(DLLEXT)" "@loader_path/./$(DLLNAME)$(DLLEXT)" $(EXE_OBJDIR)/$(EXENAME) 75 | 76 | 77 | APL: $(APL_OBJDIR)/$(DLLNAME)${DLLEXT} 78 | EXE: $(EXE_OBJDIR)/$(EXENAME) 79 | 80 | QA: EXE 81 | @$(EXE_OBJDIR)/$(EXENAME) 82 | @cd $(EXE_OBJDIR); ./$(EXENAME) 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /sign/makefile: -------------------------------------------------------------------------------- 1 | SAMPLE:=sign 2 | include makefile.win.64 3 | MK_OPT:=$(if $(MK_OPT),$(MK_OPT),opt) 4 | include makefile.common 5 | 6 | CALLER:=call_$(SAMPLE) 7 | 8 | vpath %.c $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 9 | vpath %.cpp $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 10 | vpath %.rc $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 11 | vpath %.dyalog $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 12 | vpath %.dws $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 13 | 14 | INCS:=$(INCS) -I$(SAMPLE)/$(SAMPLE)/include -I$(SAMPLE)/$(SAMPLE) 15 | 16 | APL_OBJDIR=$(SAMPLE)/obj/$(SAMPLE)/${MK_PORT}/${MK_BITS}/${MK_OPT} 17 | EXE_OBJDIR=$(SAMPLE)/obj/$(CALLER)/${MK_PORT}/${MK_BITS}/${MK_OPT} 18 | 19 | export C_FLAGS:=$(C_FLAGS) $(INCS) ${INCS_${MK_PORT}} 20 | 21 | EXENAME=$(CALLER)$(EXEEXT) 22 | IMPLIBNAME=$(SAMPLE) 23 | DLLNAME=lib$(IMPLIBNAME) 24 | target: EXE 25 | 26 | APL_SOURCES:=$(SAMPLE) 27 | EXE_SOURCES:=$(CALLER) 28 | 29 | APL_OBJS:=${addsuffix $(OBJEXT),${basename ${APL_SOURCES}}} # replace .* with .o 30 | APL_OBJS:=$(APL_OBJS:%=$(APL_OBJDIR)/%) # add the path on the front 31 | 32 | EXE_OBJS:=${addsuffix $(OBJEXT),${basename ${EXE_SOURCES}}} # replace .* with .o 33 | EXE_OBJS:=$(EXE_OBJS:%=$(EXE_OBJDIR)/%) # add the path on the front 34 | 35 | DWA_LIBS:=$(DWA_LIBDIR)/dwa_static$(LIBEXT) $(DWA_LIBDIR)/libdyalog$(LIBEXT) 36 | 37 | ifeq ($(MK_PORT),win) 38 | EXE_LIBS:=$(APL_OBJDIR)/$(DLLNAME)${IMPLIBEXT} 39 | else 40 | EXE_LIBS:=$(APL_OBJDIR)/$(DLLNAME)${IMPLIBEXT} 41 | endif 42 | 43 | $(APL_OBJDIR)/%$(OBJEXT): %.c 44 | @mkdir -p $(APL_OBJDIR) 45 | @$(CC) $(C_FLAGS) $(APL_C_FLAGS) $(CC_OUTFILE)$@ $< 46 | 47 | $(APL_OBJDIR)/%$(OBJEXT): %.cpp 48 | @mkdir -p $(APL_OBJDIR) 49 | @$(CC) $(C_FLAGS) $(APL_C_FLAGS) $(CC_OUTFILE)$@ $< 50 | 51 | $(EXE_OBJDIR)/%$(OBJEXT): %.c 52 | @mkdir -p $(EXE_OBJDIR) 53 | @$(CC) $(C_FLAGS) $(CC_OUTFILE)$@ $< 54 | 55 | $(EXE_OBJDIR)/%$(OBJEXT): %.cpp 56 | @mkdir -p $(EXE_OBJDIR) 57 | @$(CC) $(C_FLAGS) $(CC_OUTFILE)$@ $< 58 | 59 | $(APL_OBJDIR)/%$(RESEXT): %.rc %.dyalog 60 | @mkdir -p $(APL_OBJDIR) 61 | @$(RC) $(R_FLAGS) /Fo$@ $(INCS) $< 62 | 63 | $(APL_OBJDIR)/%$(RESEXT): %.rc %.dws 64 | @mkdir -p $(APL_OBJDIR) 65 | @$(RC) $(R_FLAGS) /Fo$@ $(INCS) $< 66 | 67 | $(APL_OBJDIR)/$(DLLNAME)${DLLEXT}: ${APL_OBJS} $(APL_OBJDIR)/$(SAMPLE)$(RESEXT) 68 | @$(LD) $(APL_OBJS) $(APL_OBJDIR)/$(SAMPLE)$(RESEXT) $(L_FLAGS) $(DWA_LIBS) $(LIBS) $(APL_L_FLAGS) $(LD_OUTFILE)$@ 69 | 70 | $(EXE_OBJDIR)/$(EXENAME): ${EXE_OBJS} $(APL_OBJDIR)/$(DLLNAME)${DLLEXT} 71 | @cp $(APL_OBJDIR)/$(DLLNAME)${DLLEXT} $(EXE_OBJDIR) 72 | @if [ -f $(APL_OBJDIR)/$(DLLNAME)${LIBEXT} ] ; then cp $(APL_OBJDIR)/$(DLLNAME)${LIBEXT} $(EXE_OBJDIR) ; fi 73 | @( cd $(EXE_OBJDIR) ; $(LD) $(notdir $(EXE_OBJS)) $(notdir $(EXE_LIBS)) $(LIBS) $(L_FLAGS) $(LD_OUTFILE)$(notdir $@) ) 74 | @$(SET_RPATH) -change "$(APL_OBJDIR)/$(DLLNAME)$(DLLEXT)" "@loader_path/./$(DLLNAME)$(DLLEXT)" $(EXE_OBJDIR)/$(EXENAME) 75 | 76 | 77 | APL: $(APL_OBJDIR)/$(DLLNAME)${DLLEXT} 78 | EXE: $(EXE_OBJDIR)/$(EXENAME) 79 | 80 | QA: EXE 81 | @$(EXE_OBJDIR)/$(EXENAME) 82 | @cd $(EXE_OBJDIR); ./$(EXENAME) 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /JSON_APL/makefile: -------------------------------------------------------------------------------- 1 | SAMPLE:=JSON_APL 2 | include makefile.win.64 3 | MK_OPT:=$(if $(MK_OPT),$(MK_OPT),opt) 4 | include makefile.common 5 | 6 | CALLER:=call_$(SAMPLE) 7 | 8 | vpath %.c $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 9 | vpath %.cpp $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 10 | vpath %.rc $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 11 | vpath %.dyalog $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 12 | vpath %.dws $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 13 | 14 | INCS:=$(INCS) -I$(SAMPLE)/$(SAMPLE)/include -I$(SAMPLE)/$(SAMPLE) 15 | 16 | APL_OBJDIR=$(SAMPLE)/obj/$(SAMPLE)/${MK_PORT}/${MK_BITS}/${MK_OPT} 17 | EXE_OBJDIR=$(SAMPLE)/obj/$(CALLER)/${MK_PORT}/${MK_BITS}/${MK_OPT} 18 | 19 | export C_FLAGS:=$(C_FLAGS) $(INCS) ${INCS_${MK_PORT}} 20 | 21 | EXENAME=$(CALLER)$(EXEEXT) 22 | IMPLIBNAME=$(SAMPLE) 23 | DLLNAME=lib$(IMPLIBNAME) 24 | target: EXE 25 | 26 | APL_SOURCES:=$(SAMPLE) 27 | EXE_SOURCES:=$(CALLER) 28 | 29 | APL_OBJS:=${addsuffix $(OBJEXT),${basename ${APL_SOURCES}}} # replace .* with .o 30 | APL_OBJS:=$(APL_OBJS:%=$(APL_OBJDIR)/%) # add the path on the front 31 | 32 | EXE_OBJS:=${addsuffix $(OBJEXT),${basename ${EXE_SOURCES}}} # replace .* with .o 33 | EXE_OBJS:=$(EXE_OBJS:%=$(EXE_OBJDIR)/%) # add the path on the front 34 | 35 | DWA_LIBS:=$(DWA_LIBDIR)/dwa_static$(LIBEXT) $(DWA_LIBDIR)/libdyalog$(LIBEXT) 36 | 37 | ifeq ($(MK_PORT),win) 38 | EXE_LIBS:=$(APL_OBJDIR)/$(DLLNAME)${IMPLIBEXT} 39 | else 40 | EXE_LIBS:=$(APL_OBJDIR)/$(DLLNAME)${IMPLIBEXT} 41 | endif 42 | 43 | $(APL_OBJDIR)/%$(OBJEXT): %.c 44 | @mkdir -p $(APL_OBJDIR) 45 | @$(CC) $(C_FLAGS) $(APL_C_FLAGS) $(CC_OUTFILE)$@ $< 46 | 47 | $(APL_OBJDIR)/%$(OBJEXT): %.cpp 48 | @mkdir -p $(APL_OBJDIR) 49 | @$(CC) $(C_FLAGS) $(APL_C_FLAGS) $(CC_OUTFILE)$@ $< 50 | 51 | $(EXE_OBJDIR)/%$(OBJEXT): %.c 52 | @mkdir -p $(EXE_OBJDIR) 53 | @$(CC) $(C_FLAGS) $(CC_OUTFILE)$@ $< 54 | 55 | $(EXE_OBJDIR)/%$(OBJEXT): %.cpp 56 | @mkdir -p $(EXE_OBJDIR) 57 | @$(CC) $(C_FLAGS) $(CC_OUTFILE)$@ $< 58 | 59 | $(APL_OBJDIR)/%$(RESEXT): %.rc %.dyalog 60 | @mkdir -p $(APL_OBJDIR) 61 | @$(RC) $(R_FLAGS) /Fo$@ $(INCS) $< 62 | 63 | $(APL_OBJDIR)/%$(RESEXT): %.rc %.dws 64 | @mkdir -p $(APL_OBJDIR) 65 | @$(RC) $(R_FLAGS) /Fo$@ $(INCS) $< 66 | 67 | $(APL_OBJDIR)/$(DLLNAME)${DLLEXT}: ${APL_OBJS} $(APL_OBJDIR)/$(SAMPLE)$(RESEXT) 68 | @$(LD) $(APL_OBJS) $(APL_OBJDIR)/$(SAMPLE)$(RESEXT) $(L_FLAGS) $(DWA_LIBS) $(LIBS) $(APL_L_FLAGS) $(LD_OUTFILE)$@ 69 | 70 | $(EXE_OBJDIR)/$(EXENAME): ${EXE_OBJS} $(APL_OBJDIR)/$(DLLNAME)${DLLEXT} 71 | @cp $(APL_OBJDIR)/$(DLLNAME)${DLLEXT} $(EXE_OBJDIR) 72 | @if [ -f $(APL_OBJDIR)/$(DLLNAME)${LIBEXT} ] ; then cp $(APL_OBJDIR)/$(DLLNAME)${LIBEXT} $(EXE_OBJDIR) ; fi 73 | @( cd $(EXE_OBJDIR) ; $(LD) $(notdir $(EXE_OBJS)) $(notdir $(EXE_LIBS)) $(LIBS) $(L_FLAGS) $(LD_OUTFILE)$(notdir $@) ) 74 | @$(SET_RPATH) -change "$(APL_OBJDIR)/$(DLLNAME)$(DLLEXT)" "@loader_path/./$(DLLNAME)$(DLLEXT)" $(EXE_OBJDIR)/$(EXENAME) 75 | 76 | 77 | APL: $(APL_OBJDIR)/$(DLLNAME)${DLLEXT} 78 | EXE: $(EXE_OBJDIR)/$(EXENAME) 79 | 80 | QA: EXE 81 | @$(EXE_OBJDIR)/$(EXENAME) 82 | @cd $(EXE_OBJDIR); ./$(EXENAME) 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /helloworld/makefile: -------------------------------------------------------------------------------- 1 | SAMPLE:=helloworld 2 | include makefile.win.64 3 | MK_OPT:=$(if $(MK_OPT),$(MK_OPT),opt) 4 | include makefile.common 5 | 6 | CALLER:=call_$(SAMPLE) 7 | 8 | vpath %.c $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 9 | vpath %.cpp $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 10 | vpath %.rc $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 11 | vpath %.dyalog $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 12 | vpath %.dws $(SAMPLE)/$(SAMPLE) $(SAMPLE)/$(CALLER) 13 | 14 | INCS:=$(INCS) -I$(SAMPLE)/$(SAMPLE)/include -I$(SAMPLE)/$(SAMPLE) 15 | 16 | APL_OBJDIR=$(SAMPLE)/obj/$(SAMPLE)/${MK_PORT}/${MK_BITS}/${MK_OPT} 17 | EXE_OBJDIR=$(SAMPLE)/obj/$(CALLER)/${MK_PORT}/${MK_BITS}/${MK_OPT} 18 | 19 | export C_FLAGS:=$(C_FLAGS) $(INCS) ${INCS_${MK_PORT}} 20 | 21 | EXENAME=$(CALLER)$(EXEEXT) 22 | IMPLIBNAME=$(SAMPLE) 23 | DLLNAME=lib$(IMPLIBNAME) 24 | target: EXE 25 | 26 | APL_SOURCES:=$(SAMPLE) 27 | EXE_SOURCES:=$(CALLER) 28 | 29 | APL_OBJS:=${addsuffix $(OBJEXT),${basename ${APL_SOURCES}}} # replace .* with .o 30 | APL_OBJS:=$(APL_OBJS:%=$(APL_OBJDIR)/%) # add the path on the front 31 | 32 | EXE_OBJS:=${addsuffix $(OBJEXT),${basename ${EXE_SOURCES}}} # replace .* with .o 33 | EXE_OBJS:=$(EXE_OBJS:%=$(EXE_OBJDIR)/%) # add the path on the front 34 | 35 | DWA_LIBS:=$(DWA_LIBDIR)/dwa_static$(LIBEXT) $(DWA_LIBDIR)/libdyalog$(LIBEXT) 36 | 37 | ifeq ($(MK_PORT),win) 38 | EXE_LIBS:=$(APL_OBJDIR)/$(DLLNAME)${IMPLIBEXT} 39 | else 40 | EXE_LIBS:=$(APL_OBJDIR)/$(DLLNAME)${IMPLIBEXT} 41 | endif 42 | 43 | $(APL_OBJDIR)/%$(OBJEXT): %.c 44 | @mkdir -p $(APL_OBJDIR) 45 | @$(CC) $(C_FLAGS) $(APL_C_FLAGS) $(CC_OUTFILE)$@ $< 46 | 47 | $(APL_OBJDIR)/%$(OBJEXT): %.cpp 48 | @mkdir -p $(APL_OBJDIR) 49 | @$(CC) $(C_FLAGS) $(APL_C_FLAGS) $(CC_OUTFILE)$@ $< 50 | 51 | $(EXE_OBJDIR)/%$(OBJEXT): %.c 52 | @mkdir -p $(EXE_OBJDIR) 53 | @$(CC) $(C_FLAGS) $(CC_OUTFILE)$@ $< 54 | 55 | $(EXE_OBJDIR)/%$(OBJEXT): %.cpp 56 | @mkdir -p $(EXE_OBJDIR) 57 | @$(CC) $(C_FLAGS) $(CC_OUTFILE)$@ $< 58 | 59 | $(APL_OBJDIR)/%$(RESEXT): %.rc %.dyalog 60 | @mkdir -p $(APL_OBJDIR) 61 | @$(RC) $(R_FLAGS) /Fo$@ $(INCS) $< 62 | 63 | $(APL_OBJDIR)/%$(RESEXT): %.rc %.dws 64 | @mkdir -p $(APL_OBJDIR) 65 | @$(RC) $(R_FLAGS) /Fo$@ $(INCS) $< 66 | 67 | $(APL_OBJDIR)/$(DLLNAME)${DLLEXT}: ${APL_OBJS} $(APL_OBJDIR)/$(SAMPLE)$(RESEXT) 68 | @$(LD) $(APL_OBJS) $(APL_OBJDIR)/$(SAMPLE)$(RESEXT) $(L_FLAGS) $(DWA_LIBS) $(LIBS) $(APL_L_FLAGS) $(LD_OUTFILE)$@ 69 | 70 | $(EXE_OBJDIR)/$(EXENAME): ${EXE_OBJS} $(APL_OBJDIR)/$(DLLNAME)${DLLEXT} 71 | @cp $(APL_OBJDIR)/$(DLLNAME)${DLLEXT} $(EXE_OBJDIR) 72 | @if [ -f $(APL_OBJDIR)/$(DLLNAME)${LIBEXT} ] ; then cp $(APL_OBJDIR)/$(DLLNAME)${LIBEXT} $(EXE_OBJDIR) ; fi 73 | @( cd $(EXE_OBJDIR) ; $(LD) $(notdir $(EXE_OBJS)) $(notdir $(EXE_LIBS)) $(LIBS) $(L_FLAGS) $(LD_OUTFILE)$(notdir $@) ) 74 | @$(SET_RPATH) -change "$(APL_OBJDIR)/$(DLLNAME)$(DLLEXT)" "@loader_path/./$(DLLNAME)$(DLLEXT)" $(EXE_OBJDIR)/$(EXENAME) 75 | 76 | 77 | APL: $(APL_OBJDIR)/$(DLLNAME)${DLLEXT} 78 | EXE: $(EXE_OBJDIR)/$(EXENAME) 79 | 80 | QA: EXE 81 | @$(EXE_OBJDIR)/$(EXENAME) 82 | @cd $(EXE_OBJDIR); ./$(EXENAME) 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /qa/makefile.common: -------------------------------------------------------------------------------- 1 | ### WINDOWS SETTINGS ### 2 | 3 | CC_win:=cl.exe 4 | LD_win:=link.exe 5 | RC_win:=rc.exe 6 | SET_RPATH_win=true 7 | 8 | CC_OUTFILE_win:=/Fo 9 | LD_OUTFILE_win:=/OUT: 10 | 11 | INCS_WIN:=${INCLUDE} 12 | 13 | APL_L_FLAGS_win:=/DLL 14 | RESEXT_win:=.res 15 | OBJEXT_win:=.obj 16 | LIBEXT_win:=.lib 17 | DLLEXT_win:=.dll 18 | EXEEXT_win:=.exe 19 | IMPLIBEXT_win:=.lib 20 | 21 | LIBS_win:=htmlhelp.lib user32.lib gdi32.lib msimg32.lib comctl32.lib comdlg32.lib crypt32.lib \ 22 | secur32.lib oleaut32.lib ole32.lib oledlg.lib kernel32.lib uuid.lib \ 23 | shell32.lib shlwapi.lib psapi.lib advapi32.lib winspool.lib wsock32.lib \ 24 | version.lib rpcrt4.lib mapi32.lib imm32.lib ws2_32.lib \ 25 | uxtheme.lib gdiplus.lib powrprof.lib 26 | 27 | C_FLAGS_win:=-EHsc -c -nologo -DUNICODE -Zi -FS 28 | C_FLAGS_win_opt:=-Ox -MT 29 | C_FLAGS_win_dbg:=-Od -MTd 30 | 31 | L_FLAGS_win:=/DEBUG:FULL /SUBSYSTEM:CONSOLE /NOLOGO /IGNORE:4099 32 | R_FLAGS_win:=/NOLOGO 33 | APL_L_FLAGS_win_opt:=/LTCG 34 | 35 | 36 | ### LINUX SETTINGS ### 37 | 38 | CC_linux:=gcc 39 | LD_linux:=gcc 40 | RC_linux:=./make_resources 41 | SET_RPATH_linux=true 42 | 43 | C_FLAGS_linux=-c -ggdb 44 | L_FLAGS_linux=-pthread -lstdc++ -Wl,-rpath='$$ORIGIN' 45 | 46 | APL_C_FLAGS_linux:=-fPIC 47 | APL_L_FLAGS_linux:=-shared -ldl -lm -lncurses -lrt 48 | 49 | LD_OUTFILE_linux:=-o 50 | CC_OUTFILE_linux:=-o 51 | 52 | RESEXT_linux:=.res.o 53 | OBJEXT_linux:=.o 54 | LIBEXT_linux:=.a 55 | DLLEXT_linux:=.so 56 | IMPLIBEXT_linux:=.so 57 | 58 | 59 | ### PI SETTINGS ### 60 | 61 | CC_pi:=gcc 62 | LD_pi:=gcc 63 | RC_pi:=./make_resources 64 | SET_RPATH_pi=true 65 | 66 | C_FLAGS_pi=-c 67 | L_FLAGS_pi=-pthread -lstdc++ -Wl,-rpath='$$ORIGIN' 68 | 69 | APL_C_FLAGS_pi:=-fPIC 70 | APL_L_FLAGS_pi:=-shared -ldl -lm -lncurses -lrt 71 | 72 | LD_OUTFILE_pi:=-o 73 | CC_OUTFILE_pi:=-o 74 | 75 | RESEXT_pi:=.res.o 76 | OBJEXT_pi:=.o 77 | LIBEXT_pi:=.a 78 | DLLEXT_pi:=.so 79 | IMPLIBEXT_pi:=.so 80 | 81 | ### MACOS SETTINGS ### 82 | 83 | CC_mac:=gcc 84 | LD_mac:=gcc 85 | RC_mac:=./make_resources 86 | SET_RPATH_mac:=install_name_tool 87 | 88 | C_FLAGS_mac_64=-c -ggdb3 89 | #L_FLAGS_mac_64=-pthread 90 | 91 | APL_C_FLAGS_mac_64:=-fPIC 92 | APL_L_FLAGS_mac_64:=-shared -ldl -lm -lncurses 93 | 94 | LD_OUTFILE_mac:=-o 95 | CC_OUTFILE_mac:=-o 96 | 97 | RESEXT_mac:=.res.o 98 | OBJEXT_mac:=.o 99 | LIBEXT_mac:=.a 100 | DLLEXT_mac:=.dylib 101 | IMPLIBEXT_mac:=.dylib 102 | 103 | 104 | ### AIX SETTINGS 105 | 106 | CC_aix:=xlc_r 107 | LD_aix:=xlc_r 108 | RC_aix:=./make_resources 109 | SET_RPATH_aix=true 110 | 111 | C_FLAGS_aix=-c 112 | C_FLAGS_aix_dbg=-g 113 | C_FLAGS_aix_32=-q32 114 | C_FLAGS_aix_64=-q64 115 | 116 | L_FLAGS_aix= 117 | L_FLAGS_aix_32=-q32 118 | L_FLAGS_aix_64=-q64 119 | 120 | R_FLAGS_aix_32=-q32 121 | R_FLAGS_aix_64=-q64 122 | 123 | APL_C_FLAGS_aix:=-fPIC 124 | APL_L_FLAGS_aix:=-ldl -lC -lm -lncurses -qmkshrobj -ldecNumber -lperfstat -lld 125 | 126 | LD_OUTFILE_aix:=-o 127 | CC_OUTFILE_aix:=-o 128 | 129 | RESEXT_aix:=.res.o 130 | OBJEXT_aix:=.o 131 | LIBEXT_aix:=.a 132 | DLLEXT_aix:=.so 133 | IMPLIBEXT_aix:=.so 134 | 135 | ### 136 | 137 | export LIBPREFIX=lib 138 | 139 | export CC:=${CC_${MK_PORT}} 140 | export LD:=${LD_${MK_PORT}} 141 | export RC:=${RC_${MK_PORT}} 142 | export SET_RPATH:=${SET_RPATH_${MK_PORT}} 143 | 144 | export LD_OUTFILE:=${LD_OUTFILE_${MK_PORT}} 145 | export CC_OUTFILE:=${CC_OUTFILE_${MK_PORT}} 146 | 147 | export RESEXT:=${RESEXT_${MK_PORT}} 148 | export OBJEXT:=${OBJEXT_${MK_PORT}} 149 | export LIBEXT:=${LIBEXT_${MK_PORT}} 150 | export DLLEXT:=${DLLEXT_${MK_PORT}} 151 | export EXEEXT:=${EXEEXT_${MK_PORT}} 152 | export IMPLIBEXT:=${IMPLIBEXT_${MK_PORT}} 153 | 154 | export LIBS:=${LIBS_${MK_PORT}} ${LIBS_${MK_PORT}_${MK_BITS}} 155 | 156 | export C_FLAGS:=${C_FLAGS_${MK_PORT}} ${C_FLAGS_${MK_PORT}_${MK_BITS}} ${C_FLAGS_${MK_PORT}_${MK_OPT}} ${C_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 157 | export L_FLAGS:=${L_FLAGS_${MK_PORT}} ${L_FLAGS_${MK_PORT}_${MK_BITS}} ${L_FLAGS_${MK_PORT}_${MK_OPT}} ${L_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 158 | export R_FLAGS:=${R_FLAGS_${MK_PORT}} ${R_FLAGS_${MK_PORT}_${MK_BITS}} ${R_FLAGS_${MK_PORT}_${MK_OPT}} ${R_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 159 | 160 | export APL_C_FLAGS:=${APL_C_FLAGS_${MK_PORT}} ${APL_C_FLAGS_${MK_PORT}_${MK_BITS}} ${APL_C_FLAGS_${MK_PORT}_${MK_OPT}} ${APL_C_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 161 | export EXE_C_FLAGS:=${EXE_C_FLAGS_${MK_PORT}} ${EXE_C_FLAGS_${MK_PORT}_${MK_BITS}} ${APL_C_FLAGS_${MK_PORT}_${MK_OPT}} ${EXE_C_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 162 | 163 | export APL_L_FLAGS:=${APL_L_FLAGS_${MK_PORT}} ${APL_L_FLAGS_${MK_PORT}_${MK_BITS}} ${APL_L_FLAGS_${MK_PORT}_${MK_OPT}} ${APL_L_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 164 | export EXE_L_FLAGS:=${EXE_L_FLAGS_${MK_PORT}} ${EXE_L_FLAGS_${MK_PORT}_${MK_BITS}} ${EXE_L_FLAGS_${MK_PORT}_${MK_OPT}} ${EXE_L_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 165 | 166 | -------------------------------------------------------------------------------- /sign/makefile.common: -------------------------------------------------------------------------------- 1 | ### WINDOWS SETTINGS ### 2 | 3 | CC_win:=cl.exe 4 | LD_win:=link.exe 5 | RC_win:=rc.exe 6 | SET_RPATH_win=true 7 | 8 | CC_OUTFILE_win:=/Fo 9 | LD_OUTFILE_win:=/OUT: 10 | 11 | INCS_WIN:=${INCLUDE} 12 | 13 | APL_L_FLAGS_win:=/DLL 14 | RESEXT_win:=.res 15 | OBJEXT_win:=.obj 16 | LIBEXT_win:=.lib 17 | DLLEXT_win:=.dll 18 | EXEEXT_win:=.exe 19 | IMPLIBEXT_win:=.lib 20 | 21 | LIBS_win:=htmlhelp.lib user32.lib gdi32.lib msimg32.lib comctl32.lib comdlg32.lib crypt32.lib \ 22 | secur32.lib oleaut32.lib ole32.lib oledlg.lib kernel32.lib uuid.lib \ 23 | shell32.lib shlwapi.lib psapi.lib advapi32.lib winspool.lib wsock32.lib \ 24 | version.lib rpcrt4.lib mapi32.lib imm32.lib ws2_32.lib \ 25 | uxtheme.lib gdiplus.lib powrprof.lib 26 | 27 | C_FLAGS_win:=-EHsc -c -nologo -DUNICODE -Zi -FS 28 | C_FLAGS_win_opt:=-Ox -MT 29 | C_FLAGS_win_dbg:=-Od -MTd 30 | 31 | L_FLAGS_win:=/DEBUG:FULL /SUBSYSTEM:CONSOLE /NOLOGO /IGNORE:4099 32 | R_FLAGS_win:=/NOLOGO 33 | APL_L_FLAGS_win_opt:=/LTCG 34 | 35 | 36 | ### LINUX SETTINGS ### 37 | 38 | CC_linux:=gcc 39 | LD_linux:=gcc 40 | RC_linux:=./make_resources 41 | SET_RPATH_linux=true 42 | 43 | C_FLAGS_linux=-c -ggdb 44 | L_FLAGS_linux=-pthread -lstdc++ -Wl,-rpath='$$ORIGIN' 45 | 46 | APL_C_FLAGS_linux:=-fPIC 47 | APL_L_FLAGS_linux:=-shared -ldl -lm -lncurses -lrt 48 | 49 | LD_OUTFILE_linux:=-o 50 | CC_OUTFILE_linux:=-o 51 | 52 | RESEXT_linux:=.res.o 53 | OBJEXT_linux:=.o 54 | LIBEXT_linux:=.a 55 | DLLEXT_linux:=.so 56 | IMPLIBEXT_linux:=.so 57 | 58 | 59 | ### PI SETTINGS ### 60 | 61 | CC_pi:=gcc 62 | LD_pi:=gcc 63 | RC_pi:=./make_resources 64 | SET_RPATH_pi=true 65 | 66 | C_FLAGS_pi=-c 67 | L_FLAGS_pi=-pthread -lstdc++ -Wl,-rpath='$$ORIGIN' 68 | 69 | APL_C_FLAGS_pi:=-fPIC 70 | APL_L_FLAGS_pi:=-shared -ldl -lm -lncurses -lrt 71 | 72 | LD_OUTFILE_pi:=-o 73 | CC_OUTFILE_pi:=-o 74 | 75 | RESEXT_pi:=.res.o 76 | OBJEXT_pi:=.o 77 | LIBEXT_pi:=.a 78 | DLLEXT_pi:=.so 79 | IMPLIBEXT_pi:=.so 80 | 81 | ### MACOS SETTINGS ### 82 | 83 | CC_mac:=gcc 84 | LD_mac:=gcc 85 | RC_mac:=./make_resources 86 | SET_RPATH_mac:=install_name_tool 87 | 88 | C_FLAGS_mac_64=-c -ggdb3 89 | #L_FLAGS_mac_64=-pthread 90 | 91 | APL_C_FLAGS_mac_64:=-fPIC 92 | APL_L_FLAGS_mac_64:=-shared -ldl -lm -lncurses 93 | 94 | LD_OUTFILE_mac:=-o 95 | CC_OUTFILE_mac:=-o 96 | 97 | RESEXT_mac:=.res.o 98 | OBJEXT_mac:=.o 99 | LIBEXT_mac:=.a 100 | DLLEXT_mac:=.dylib 101 | IMPLIBEXT_mac:=.dylib 102 | 103 | 104 | ### AIX SETTINGS 105 | 106 | CC_aix:=xlc_r 107 | LD_aix:=xlc_r 108 | RC_aix:=./make_resources 109 | SET_RPATH_aix=true 110 | 111 | C_FLAGS_aix=-c 112 | C_FLAGS_aix_dbg=-g 113 | C_FLAGS_aix_32=-q32 114 | C_FLAGS_aix_64=-q64 115 | 116 | L_FLAGS_aix= 117 | L_FLAGS_aix_32=-q32 118 | L_FLAGS_aix_64=-q64 119 | 120 | R_FLAGS_aix_32=-q32 121 | R_FLAGS_aix_64=-q64 122 | 123 | APL_C_FLAGS_aix:=-fPIC 124 | APL_L_FLAGS_aix:=-ldl -lC -lm -lncurses -qmkshrobj -ldecNumber -lperfstat -lld 125 | 126 | LD_OUTFILE_aix:=-o 127 | CC_OUTFILE_aix:=-o 128 | 129 | RESEXT_aix:=.res.o 130 | OBJEXT_aix:=.o 131 | LIBEXT_aix:=.a 132 | DLLEXT_aix:=.so 133 | IMPLIBEXT_aix:=.so 134 | 135 | ### 136 | 137 | export LIBPREFIX=lib 138 | 139 | export CC:=${CC_${MK_PORT}} 140 | export LD:=${LD_${MK_PORT}} 141 | export RC:=${RC_${MK_PORT}} 142 | export SET_RPATH:=${SET_RPATH_${MK_PORT}} 143 | 144 | export LD_OUTFILE:=${LD_OUTFILE_${MK_PORT}} 145 | export CC_OUTFILE:=${CC_OUTFILE_${MK_PORT}} 146 | 147 | export RESEXT:=${RESEXT_${MK_PORT}} 148 | export OBJEXT:=${OBJEXT_${MK_PORT}} 149 | export LIBEXT:=${LIBEXT_${MK_PORT}} 150 | export DLLEXT:=${DLLEXT_${MK_PORT}} 151 | export EXEEXT:=${EXEEXT_${MK_PORT}} 152 | export IMPLIBEXT:=${IMPLIBEXT_${MK_PORT}} 153 | 154 | export LIBS:=${LIBS_${MK_PORT}} ${LIBS_${MK_PORT}_${MK_BITS}} 155 | 156 | export C_FLAGS:=${C_FLAGS_${MK_PORT}} ${C_FLAGS_${MK_PORT}_${MK_BITS}} ${C_FLAGS_${MK_PORT}_${MK_OPT}} ${C_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 157 | export L_FLAGS:=${L_FLAGS_${MK_PORT}} ${L_FLAGS_${MK_PORT}_${MK_BITS}} ${L_FLAGS_${MK_PORT}_${MK_OPT}} ${L_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 158 | export R_FLAGS:=${R_FLAGS_${MK_PORT}} ${R_FLAGS_${MK_PORT}_${MK_BITS}} ${R_FLAGS_${MK_PORT}_${MK_OPT}} ${R_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 159 | 160 | export APL_C_FLAGS:=${APL_C_FLAGS_${MK_PORT}} ${APL_C_FLAGS_${MK_PORT}_${MK_BITS}} ${APL_C_FLAGS_${MK_PORT}_${MK_OPT}} ${APL_C_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 161 | export EXE_C_FLAGS:=${EXE_C_FLAGS_${MK_PORT}} ${EXE_C_FLAGS_${MK_PORT}_${MK_BITS}} ${APL_C_FLAGS_${MK_PORT}_${MK_OPT}} ${EXE_C_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 162 | 163 | export APL_L_FLAGS:=${APL_L_FLAGS_${MK_PORT}} ${APL_L_FLAGS_${MK_PORT}_${MK_BITS}} ${APL_L_FLAGS_${MK_PORT}_${MK_OPT}} ${APL_L_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 164 | export EXE_L_FLAGS:=${EXE_L_FLAGS_${MK_PORT}} ${EXE_L_FLAGS_${MK_PORT}_${MK_BITS}} ${EXE_L_FLAGS_${MK_PORT}_${MK_OPT}} ${EXE_L_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 165 | 166 | -------------------------------------------------------------------------------- /JSON_APL/makefile.common: -------------------------------------------------------------------------------- 1 | ### WINDOWS SETTINGS ### 2 | 3 | CC_win:=cl.exe 4 | LD_win:=link.exe 5 | RC_win:=rc.exe 6 | SET_RPATH_win=true 7 | 8 | CC_OUTFILE_win:=/Fo 9 | LD_OUTFILE_win:=/OUT: 10 | 11 | INCS_WIN:=${INCLUDE} 12 | 13 | APL_L_FLAGS_win:=/DLL 14 | RESEXT_win:=.res 15 | OBJEXT_win:=.obj 16 | LIBEXT_win:=.lib 17 | DLLEXT_win:=.dll 18 | EXEEXT_win:=.exe 19 | IMPLIBEXT_win:=.lib 20 | 21 | LIBS_win:=htmlhelp.lib user32.lib gdi32.lib msimg32.lib comctl32.lib comdlg32.lib crypt32.lib \ 22 | secur32.lib oleaut32.lib ole32.lib oledlg.lib kernel32.lib uuid.lib \ 23 | shell32.lib shlwapi.lib psapi.lib advapi32.lib winspool.lib wsock32.lib \ 24 | version.lib rpcrt4.lib mapi32.lib imm32.lib ws2_32.lib \ 25 | uxtheme.lib gdiplus.lib powrprof.lib 26 | 27 | C_FLAGS_win:=-EHsc -c -nologo -DUNICODE -Zi -FS 28 | C_FLAGS_win_opt:=-Ox -MT 29 | C_FLAGS_win_dbg:=-Od -MTd 30 | 31 | L_FLAGS_win:=/DEBUG:FULL /SUBSYSTEM:CONSOLE /NOLOGO /IGNORE:4099 32 | R_FLAGS_win:=/NOLOGO 33 | APL_L_FLAGS_win_opt:=/LTCG 34 | 35 | 36 | ### LINUX SETTINGS ### 37 | 38 | CC_linux:=gcc 39 | LD_linux:=gcc 40 | RC_linux:=./make_resources 41 | SET_RPATH_linux=true 42 | 43 | C_FLAGS_linux=-c -ggdb 44 | L_FLAGS_linux=-pthread -lstdc++ -Wl,-rpath='$$ORIGIN' 45 | 46 | APL_C_FLAGS_linux:=-fPIC 47 | APL_L_FLAGS_linux:=-shared -ldl -lm -lncurses -lrt 48 | 49 | LD_OUTFILE_linux:=-o 50 | CC_OUTFILE_linux:=-o 51 | 52 | RESEXT_linux:=.res.o 53 | OBJEXT_linux:=.o 54 | LIBEXT_linux:=.a 55 | DLLEXT_linux:=.so 56 | IMPLIBEXT_linux:=.so 57 | 58 | 59 | ### PI SETTINGS ### 60 | 61 | CC_pi:=gcc 62 | LD_pi:=gcc 63 | RC_pi:=./make_resources 64 | SET_RPATH_pi=true 65 | 66 | C_FLAGS_pi=-c 67 | L_FLAGS_pi=-pthread -lstdc++ -Wl,-rpath='$$ORIGIN' 68 | 69 | APL_C_FLAGS_pi:=-fPIC 70 | APL_L_FLAGS_pi:=-shared -ldl -lm -lncurses -lrt 71 | 72 | LD_OUTFILE_pi:=-o 73 | CC_OUTFILE_pi:=-o 74 | 75 | RESEXT_pi:=.res.o 76 | OBJEXT_pi:=.o 77 | LIBEXT_pi:=.a 78 | DLLEXT_pi:=.so 79 | IMPLIBEXT_pi:=.so 80 | 81 | ### MACOS SETTINGS ### 82 | 83 | CC_mac:=gcc 84 | LD_mac:=gcc 85 | RC_mac:=./make_resources 86 | SET_RPATH_mac:=install_name_tool 87 | 88 | C_FLAGS_mac_64=-c -ggdb3 89 | #L_FLAGS_mac_64=-pthread 90 | 91 | APL_C_FLAGS_mac_64:=-fPIC 92 | APL_L_FLAGS_mac_64:=-shared -ldl -lm -lncurses 93 | 94 | LD_OUTFILE_mac:=-o 95 | CC_OUTFILE_mac:=-o 96 | 97 | RESEXT_mac:=.res.o 98 | OBJEXT_mac:=.o 99 | LIBEXT_mac:=.a 100 | DLLEXT_mac:=.dylib 101 | IMPLIBEXT_mac:=.dylib 102 | 103 | 104 | ### AIX SETTINGS 105 | 106 | CC_aix:=xlc_r 107 | LD_aix:=xlc_r 108 | RC_aix:=./make_resources 109 | SET_RPATH_aix=true 110 | 111 | C_FLAGS_aix=-c 112 | C_FLAGS_aix_dbg=-g 113 | C_FLAGS_aix_32=-q32 114 | C_FLAGS_aix_64=-q64 115 | 116 | L_FLAGS_aix= 117 | L_FLAGS_aix_32=-q32 118 | L_FLAGS_aix_64=-q64 119 | 120 | R_FLAGS_aix_32=-q32 121 | R_FLAGS_aix_64=-q64 122 | 123 | APL_C_FLAGS_aix:=-fPIC 124 | APL_L_FLAGS_aix:=-ldl -lC -lm -lncurses -qmkshrobj -ldecNumber -lperfstat -lld 125 | 126 | LD_OUTFILE_aix:=-o 127 | CC_OUTFILE_aix:=-o 128 | 129 | RESEXT_aix:=.res.o 130 | OBJEXT_aix:=.o 131 | LIBEXT_aix:=.a 132 | DLLEXT_aix:=.so 133 | IMPLIBEXT_aix:=.so 134 | 135 | ### 136 | 137 | export LIBPREFIX=lib 138 | 139 | export CC:=${CC_${MK_PORT}} 140 | export LD:=${LD_${MK_PORT}} 141 | export RC:=${RC_${MK_PORT}} 142 | export SET_RPATH:=${SET_RPATH_${MK_PORT}} 143 | 144 | export LD_OUTFILE:=${LD_OUTFILE_${MK_PORT}} 145 | export CC_OUTFILE:=${CC_OUTFILE_${MK_PORT}} 146 | 147 | export RESEXT:=${RESEXT_${MK_PORT}} 148 | export OBJEXT:=${OBJEXT_${MK_PORT}} 149 | export LIBEXT:=${LIBEXT_${MK_PORT}} 150 | export DLLEXT:=${DLLEXT_${MK_PORT}} 151 | export EXEEXT:=${EXEEXT_${MK_PORT}} 152 | export IMPLIBEXT:=${IMPLIBEXT_${MK_PORT}} 153 | 154 | export LIBS:=${LIBS_${MK_PORT}} ${LIBS_${MK_PORT}_${MK_BITS}} 155 | 156 | export C_FLAGS:=${C_FLAGS_${MK_PORT}} ${C_FLAGS_${MK_PORT}_${MK_BITS}} ${C_FLAGS_${MK_PORT}_${MK_OPT}} ${C_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 157 | export L_FLAGS:=${L_FLAGS_${MK_PORT}} ${L_FLAGS_${MK_PORT}_${MK_BITS}} ${L_FLAGS_${MK_PORT}_${MK_OPT}} ${L_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 158 | export R_FLAGS:=${R_FLAGS_${MK_PORT}} ${R_FLAGS_${MK_PORT}_${MK_BITS}} ${R_FLAGS_${MK_PORT}_${MK_OPT}} ${R_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 159 | 160 | export APL_C_FLAGS:=${APL_C_FLAGS_${MK_PORT}} ${APL_C_FLAGS_${MK_PORT}_${MK_BITS}} ${APL_C_FLAGS_${MK_PORT}_${MK_OPT}} ${APL_C_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 161 | export EXE_C_FLAGS:=${EXE_C_FLAGS_${MK_PORT}} ${EXE_C_FLAGS_${MK_PORT}_${MK_BITS}} ${APL_C_FLAGS_${MK_PORT}_${MK_OPT}} ${EXE_C_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 162 | 163 | export APL_L_FLAGS:=${APL_L_FLAGS_${MK_PORT}} ${APL_L_FLAGS_${MK_PORT}_${MK_BITS}} ${APL_L_FLAGS_${MK_PORT}_${MK_OPT}} ${APL_L_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 164 | export EXE_L_FLAGS:=${EXE_L_FLAGS_${MK_PORT}} ${EXE_L_FLAGS_${MK_PORT}_${MK_BITS}} ${EXE_L_FLAGS_${MK_PORT}_${MK_OPT}} ${EXE_L_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 165 | 166 | -------------------------------------------------------------------------------- /helloworld/makefile.common: -------------------------------------------------------------------------------- 1 | ### WINDOWS SETTINGS ### 2 | 3 | CC_win:=cl.exe 4 | LD_win:=link.exe 5 | RC_win:=rc.exe 6 | SET_RPATH_win=true 7 | 8 | CC_OUTFILE_win:=/Fo 9 | LD_OUTFILE_win:=/OUT: 10 | 11 | INCS_WIN:=${INCLUDE} 12 | 13 | APL_L_FLAGS_win:=/DLL 14 | RESEXT_win:=.res 15 | OBJEXT_win:=.obj 16 | LIBEXT_win:=.lib 17 | DLLEXT_win:=.dll 18 | EXEEXT_win:=.exe 19 | IMPLIBEXT_win:=.lib 20 | 21 | LIBS_win:=htmlhelp.lib user32.lib gdi32.lib msimg32.lib comctl32.lib comdlg32.lib crypt32.lib \ 22 | secur32.lib oleaut32.lib ole32.lib oledlg.lib kernel32.lib uuid.lib \ 23 | shell32.lib shlwapi.lib psapi.lib advapi32.lib winspool.lib wsock32.lib \ 24 | version.lib rpcrt4.lib mapi32.lib imm32.lib ws2_32.lib \ 25 | uxtheme.lib gdiplus.lib powrprof.lib 26 | 27 | C_FLAGS_win:=-EHsc -c -nologo -DUNICODE -Zi -FS 28 | C_FLAGS_win_opt:=-Ox -MT 29 | C_FLAGS_win_dbg:=-Od -MTd 30 | 31 | L_FLAGS_win:=/DEBUG:FULL /SUBSYSTEM:CONSOLE /NOLOGO /IGNORE:4099 32 | R_FLAGS_win:=/NOLOGO 33 | APL_L_FLAGS_win_opt:=/LTCG 34 | 35 | 36 | ### LINUX SETTINGS ### 37 | 38 | CC_linux:=gcc 39 | LD_linux:=gcc 40 | RC_linux:=./make_resources 41 | SET_RPATH_linux=true 42 | 43 | C_FLAGS_linux=-c -ggdb 44 | L_FLAGS_linux=-pthread -lstdc++ -Wl,-rpath='$$ORIGIN' 45 | 46 | APL_C_FLAGS_linux:=-fPIC 47 | APL_L_FLAGS_linux:=-shared -ldl -lm -lncurses -lrt 48 | 49 | LD_OUTFILE_linux:=-o 50 | CC_OUTFILE_linux:=-o 51 | 52 | RESEXT_linux:=.res.o 53 | OBJEXT_linux:=.o 54 | LIBEXT_linux:=.a 55 | DLLEXT_linux:=.so 56 | IMPLIBEXT_linux:=.so 57 | 58 | 59 | ### PI SETTINGS ### 60 | 61 | CC_pi:=gcc 62 | LD_pi:=gcc 63 | RC_pi:=./make_resources 64 | SET_RPATH_pi=true 65 | 66 | C_FLAGS_pi=-c 67 | L_FLAGS_pi=-pthread -lstdc++ -Wl,-rpath='$$ORIGIN' 68 | 69 | APL_C_FLAGS_pi:=-fPIC 70 | APL_L_FLAGS_pi:=-shared -ldl -lm -lncurses -lrt 71 | 72 | LD_OUTFILE_pi:=-o 73 | CC_OUTFILE_pi:=-o 74 | 75 | RESEXT_pi:=.res.o 76 | OBJEXT_pi:=.o 77 | LIBEXT_pi:=.a 78 | DLLEXT_pi:=.so 79 | IMPLIBEXT_pi:=.so 80 | 81 | ### MACOS SETTINGS ### 82 | 83 | CC_mac:=gcc 84 | LD_mac:=gcc 85 | RC_mac:=./make_resources 86 | SET_RPATH_mac:=install_name_tool 87 | 88 | C_FLAGS_mac_64=-c -ggdb3 89 | #L_FLAGS_mac_64=-pthread 90 | 91 | APL_C_FLAGS_mac_64:=-fPIC 92 | APL_L_FLAGS_mac_64:=-shared -ldl -lm -lncurses 93 | 94 | LD_OUTFILE_mac:=-o 95 | CC_OUTFILE_mac:=-o 96 | 97 | RESEXT_mac:=.res.o 98 | OBJEXT_mac:=.o 99 | LIBEXT_mac:=.a 100 | DLLEXT_mac:=.dylib 101 | IMPLIBEXT_mac:=.dylib 102 | 103 | 104 | ### AIX SETTINGS 105 | 106 | CC_aix:=xlc_r 107 | LD_aix:=xlc_r 108 | RC_aix:=./make_resources 109 | SET_RPATH_aix=true 110 | 111 | C_FLAGS_aix=-c 112 | C_FLAGS_aix_dbg=-g 113 | C_FLAGS_aix_32=-q32 114 | C_FLAGS_aix_64=-q64 115 | 116 | L_FLAGS_aix= 117 | L_FLAGS_aix_32=-q32 118 | L_FLAGS_aix_64=-q64 119 | 120 | R_FLAGS_aix_32=-q32 121 | R_FLAGS_aix_64=-q64 122 | 123 | APL_C_FLAGS_aix:=-fPIC 124 | APL_L_FLAGS_aix:=-ldl -lC -lm -lncurses -qmkshrobj -ldecNumber -lperfstat -lld 125 | 126 | LD_OUTFILE_aix:=-o 127 | CC_OUTFILE_aix:=-o 128 | 129 | RESEXT_aix:=.res.o 130 | OBJEXT_aix:=.o 131 | LIBEXT_aix:=.a 132 | DLLEXT_aix:=.so 133 | IMPLIBEXT_aix:=.so 134 | 135 | ### 136 | 137 | export LIBPREFIX=lib 138 | 139 | export CC:=${CC_${MK_PORT}} 140 | export LD:=${LD_${MK_PORT}} 141 | export RC:=${RC_${MK_PORT}} 142 | export SET_RPATH:=${SET_RPATH_${MK_PORT}} 143 | 144 | export LD_OUTFILE:=${LD_OUTFILE_${MK_PORT}} 145 | export CC_OUTFILE:=${CC_OUTFILE_${MK_PORT}} 146 | 147 | export RESEXT:=${RESEXT_${MK_PORT}} 148 | export OBJEXT:=${OBJEXT_${MK_PORT}} 149 | export LIBEXT:=${LIBEXT_${MK_PORT}} 150 | export DLLEXT:=${DLLEXT_${MK_PORT}} 151 | export EXEEXT:=${EXEEXT_${MK_PORT}} 152 | export IMPLIBEXT:=${IMPLIBEXT_${MK_PORT}} 153 | 154 | export LIBS:=${LIBS_${MK_PORT}} ${LIBS_${MK_PORT}_${MK_BITS}} 155 | 156 | export C_FLAGS:=${C_FLAGS_${MK_PORT}} ${C_FLAGS_${MK_PORT}_${MK_BITS}} ${C_FLAGS_${MK_PORT}_${MK_OPT}} ${C_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 157 | export L_FLAGS:=${L_FLAGS_${MK_PORT}} ${L_FLAGS_${MK_PORT}_${MK_BITS}} ${L_FLAGS_${MK_PORT}_${MK_OPT}} ${L_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 158 | export R_FLAGS:=${R_FLAGS_${MK_PORT}} ${R_FLAGS_${MK_PORT}_${MK_BITS}} ${R_FLAGS_${MK_PORT}_${MK_OPT}} ${R_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 159 | 160 | export APL_C_FLAGS:=${APL_C_FLAGS_${MK_PORT}} ${APL_C_FLAGS_${MK_PORT}_${MK_BITS}} ${APL_C_FLAGS_${MK_PORT}_${MK_OPT}} ${APL_C_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 161 | export EXE_C_FLAGS:=${EXE_C_FLAGS_${MK_PORT}} ${EXE_C_FLAGS_${MK_PORT}_${MK_BITS}} ${APL_C_FLAGS_${MK_PORT}_${MK_OPT}} ${EXE_C_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 162 | 163 | export APL_L_FLAGS:=${APL_L_FLAGS_${MK_PORT}} ${APL_L_FLAGS_${MK_PORT}_${MK_BITS}} ${APL_L_FLAGS_${MK_PORT}_${MK_OPT}} ${APL_L_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 164 | export EXE_L_FLAGS:=${EXE_L_FLAGS_${MK_PORT}} ${EXE_L_FLAGS_${MK_PORT}_${MK_BITS}} ${EXE_L_FLAGS_${MK_PORT}_${MK_OPT}} ${EXE_L_FLAGS_${MK_PORT}_${MK_OPT}_${MK_BITS}} 165 | 166 | -------------------------------------------------------------------------------- /qa/qa/qa/qa.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | extern "C" { 4 | 5 | #include "call_apl.h" 6 | #include "dllmain.h" // not defining our own DllMain 7 | 8 | } 9 | 10 | EXPORT int Start(unsigned int runtime,const wchar_t *user_param) 11 | { 12 | const wchar_t *args[] = { 13 | L"MAXWS=211Mb", 14 | L"SESSION_FILE=dwa_test.dse", 15 | user_param 16 | 17 | }; 18 | return load_apl(runtime?ENGINE_F_RUNTIME:0,sizeof(args)/sizeof(args[0]),(wchar_t**)args); 19 | } 20 | 21 | EXPORT int LIBCALL enable_asserts(int enable) 22 | { 23 | return dwa_enable_asserts(enable); 24 | } 25 | 26 | #define QA_ARRAY_RESULT(name) APL_##name##_ARRAY_RESULT 27 | #define QA_SCALAR_PARAM(name) APL_##name##_PARAM 28 | #define QA_SCALAR_RESULT(name) APL_##name##_RESULT 29 | #define QA_ARRAY_PARAM(name) APL_##name##_ARRAY_PARAM 30 | 31 | #define NUMERIC_ARRAY(type,name) \ 32 | EXPORT int LIBCALL NumericArray(double start, int32_t len, type *out) { \ 33 | APL_DOUBLE_PARAM(Start,start); APL_INT32_PARAM(Len,len); \ 34 | QA_ARRAY_RESULT(name)(Out,out,len,AP_SIZED); \ 35 | return call_apl(L"NumericArray",&Start,&Len,&Out,PARAM_END); } 36 | 37 | #define SCALAR_ADD(t1,n1,t2,n2,tr,nr) \ 38 | EXPORT int LIBCALL ScalarAdd(t1 p1, t2 p2, tr *out) {; \ 39 | QA_SCALAR_PARAM(n1)(P1,p1); QA_SCALAR_PARAM(n2)(P2,p2); \ 40 | QA_SCALAR_RESULT(nr)(Out); \ 41 | int err= call_apl(L"Add",&P1,&P2,&Out,PARAM_END); \ 42 | *out = SCALAR_VAL(&Out,tr); \ 43 | return err;} 44 | 45 | #define UCSTOCHARARRAY(tr,nr) \ 46 | EXPORT int LIBCALL UCStoCHARArray(int32_t *p1,size_t len, tr *out, size_t olen) { \ 47 | APL_INT32_ARRAY_PARAM(P1,p1,len); \ 48 | QA_ARRAY_RESULT(nr)(Out,out,olen,AP_SIZED); \ 49 | return call_apl(L"UCS",&P1,&Out,PARAM_END); } 50 | 51 | #define UCSTOCHAR(tr,nr) \ 52 | EXPORT int LIBCALL UCStoCHAR(int32_t p1,tr *out) { \ 53 | APL_INT32_PARAM(P1,p1); \ 54 | QA_SCALAR_RESULT(nr)(Out); \ 55 | int err= call_apl(L"UCS",&P1,&Out,PARAM_END); \ 56 | *out = SCALAR_VAL(&Out,tr); \ 57 | return err;} 58 | 59 | #define REFLECT(type,name) \ 60 | EXPORT int LIBCALL Reflect(type *p1, size_t len, type *out, size_t olen) { \ 61 | QA_ARRAY_PARAM(name)(P1,p1,len); \ 62 | QA_ARRAY_RESULT(name)(Out,out,olen,AP_SIZED); \ 63 | return call_apl(L"Reflect",&P1,&Out,PARAM_END); } 64 | 65 | #define REFLECTCHAR(type,name) \ 66 | EXPORT int LIBCALL ReflectChar(type *p1, size_t len,unsigned int iflags, type *out, size_t olen, unsigned int oflags) { \ 67 | QA_ARRAY_PARAM(name)(P1,p1,len,iflags); \ 68 | QA_ARRAY_RESULT(name)(Out,out,olen,oflags); \ 69 | return call_apl(L"Reflect",&P1,&Out,PARAM_END); } 70 | 71 | EXPORT int LIBCALL ReflectLengthShort(void) 72 | { 73 | APL_INT32_PARAM(i1,0); 74 | APL_INT32_RESULT(o1); 75 | APL_INT32_RESULT(o2); 76 | return call_apl(L"Reflect",&i1,&o1,&o2,PARAM_END); 77 | } 78 | 79 | EXPORT int LIBCALL ReflectLengthLong(void) 80 | { 81 | int32_t args[] = {0,1,2,3}; 82 | APL_INT32_ARRAY_PARAM(i1,args,3); 83 | APL_INT32_RESULT(o1); 84 | APL_INT32_RESULT(o2); 85 | return call_apl(L"Reflect",&i1,&o1,&o2,PARAM_END); 86 | } 87 | 88 | 89 | 90 | 91 | NUMERIC_ARRAY(int8_t,INT8); 92 | NUMERIC_ARRAY(int16_t,INT16); 93 | NUMERIC_ARRAY(int32_t,INT32); 94 | NUMERIC_ARRAY(double,DOUBLE); 95 | 96 | SCALAR_ADD(int16_t,INT16,int16_t,INT16,int32_t,INT32); 97 | SCALAR_ADD(int16_t,INT16,int16_t,INT16,int16_t,INT16); 98 | SCALAR_ADD(int16_t,INT16,int16_t,INT16,int8_t,INT8); 99 | 100 | UCSTOCHARARRAY(char,CHAR); 101 | UCSTOCHARARRAY(char16,CHAR16); 102 | UCSTOCHARARRAY(char32,CHAR32); 103 | UCSTOCHARARRAY(wchar_t,WCHAR); 104 | 105 | UCSTOCHAR(char,CHAR); 106 | UCSTOCHAR(char8,CHAR8); 107 | UCSTOCHAR(char16,CHAR16); 108 | UCSTOCHAR(wchar_t,WCHAR); 109 | 110 | REFLECT(int8_t,INT8); 111 | REFLECT(int16_t,INT16); 112 | REFLECT(int32_t,INT32); 113 | 114 | REFLECTCHAR(char,CHAR); 115 | REFLECTCHAR(char8,CHAR8); 116 | REFLECTCHAR(char16,CHAR16); 117 | REFLECTCHAR(char32,CHAR32); 118 | REFLECTCHAR(wchar_t,WCHAR); 119 | 120 | EXPORT int LIBCALL NoAPLFunction(const wchar_t *name) 121 | { 122 | return call_apl(name,PARAM_END); 123 | } 124 | 125 | EXPORT int LIBCALL Signal(int n) 126 | { 127 | APL_INT32_PARAM(N,n); 128 | return call_apl(L"Signal",&N,PARAM_END); 129 | } 130 | 131 | EXPORT int LIBCALL Error(int n) 132 | { 133 | APL_INT32_PARAM(N,n); 134 | return call_apl(L"Error",&N,PARAM_END); 135 | } 136 | 137 | EXPORT int Deserialize(wchar_t *string,size_t len, ubyte *vp) 138 | { 139 | APL_ZFORMAT_PARAM(Z,vp); 140 | APL_WCHAR_ARRAY_RESULT(S,string,len,AP_NULLTERM|AP_SIZED); 141 | return call_apl(L"Reflect",&Z,&S,PARAM_END); 142 | } 143 | 144 | EXPORT int SerializeAndAlloc(wchar_t *string, ubyte **vp) 145 | { 146 | APL_WCHAR_ARRAY_PARAM(S,string,0,AP_NULLTERM); 147 | APL_ZFORMAT_RESULT(Z,0,0,AP_ALLOC); 148 | int retn = call_apl(L"Reflect",&S,&Z,PARAM_END); 149 | *vp=ARRAY_PTR(&Z,ubyte); 150 | return retn; 151 | } 152 | 153 | EXPORT int GetEnv(const wchar_t *name, wchar_t *value, size_t len) 154 | { 155 | APL_WCHAR_ARRAY_PARAM(N,(wchar_t*)name,0,AP_NULLTERM); 156 | APL_WCHAR_ARRAY_RESULT(R,value,len,AP_NULLTERM|AP_SIZED); 157 | return call_apl(L"GetEnv",&N,&R,PARAM_END); 158 | } 159 | 160 | EXPORT int Execute(wchar_t *name, wchar_t *value, size_t len) 161 | { 162 | APL_WCHAR_ARRAY_PARAM(N, name, 0, AP_NULLTERM); 163 | APL_WCHAR_ARRAY_RESULT(R, value, len, AP_NULLTERM | AP_SIZED); 164 | return call_apl(L"Execute", &N, &R, PARAM_END); 165 | } 166 | -------------------------------------------------------------------------------- /qa/qa/call_qa/call_qa.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | {$guid1$} 23 | Win32Proj 24 | qa 25 | 8.1 26 | 27 | 28 | 29 | Application 30 | true 31 | v140 32 | Unicode 33 | 34 | 35 | Application 36 | false 37 | v140 38 | true 39 | Unicode 40 | 41 | 42 | Application 43 | true 44 | v140 45 | Unicode 46 | 47 | 48 | Application 49 | false 50 | v140 51 | true 52 | Unicode 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | true 74 | 75 | 76 | true 77 | 78 | 79 | false 80 | 81 | 82 | false 83 | 84 | 85 | 86 | 87 | 88 | Level3 89 | Disabled 90 | WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) 91 | MultiThreadedDebug 92 | ProgramDatabase 93 | 94 | 95 | Console 96 | true 97 | 98 | 99 | 100 | 101 | 102 | 103 | Level3 104 | Disabled 105 | _DEBUG;_CONSOLE;%(PreprocessorDefinitions) 106 | MultiThreadedDebug 107 | ProgramDatabase 108 | 109 | 110 | Console 111 | true 112 | 113 | 114 | 115 | 116 | Level3 117 | 118 | 119 | MaxSpeed 120 | true 121 | true 122 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 123 | MultiThreaded 124 | 125 | 126 | Console 127 | true 128 | true 129 | true 130 | 131 | 132 | 133 | 134 | Level3 135 | 136 | 137 | MaxSpeed 138 | true 139 | true 140 | NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 141 | MultiThreaded 142 | 143 | 144 | Console 145 | true 146 | true 147 | true 148 | 149 | 150 | 151 | 152 | ..\qa 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | -------------------------------------------------------------------------------- /sign/sign/call_sign/call_sign.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | {$guid1$} 23 | Win32Proj 24 | sign 25 | 8.1 26 | 27 | 28 | 29 | Application 30 | true 31 | v140 32 | Unicode 33 | 34 | 35 | Application 36 | false 37 | v140 38 | true 39 | Unicode 40 | 41 | 42 | Application 43 | true 44 | v140 45 | Unicode 46 | 47 | 48 | Application 49 | false 50 | v140 51 | true 52 | Unicode 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | true 74 | 75 | 76 | true 77 | 78 | 79 | false 80 | 81 | 82 | false 83 | 84 | 85 | 86 | 87 | 88 | Level3 89 | Disabled 90 | WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) 91 | MultiThreadedDebug 92 | ProgramDatabase 93 | 94 | 95 | Console 96 | true 97 | 98 | 99 | 100 | 101 | 102 | 103 | Level3 104 | Disabled 105 | _DEBUG;_CONSOLE;%(PreprocessorDefinitions) 106 | MultiThreadedDebug 107 | ProgramDatabase 108 | 109 | 110 | Console 111 | true 112 | 113 | 114 | 115 | 116 | Level3 117 | 118 | 119 | MaxSpeed 120 | true 121 | true 122 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 123 | MultiThreaded 124 | 125 | 126 | Console 127 | true 128 | true 129 | true 130 | 131 | 132 | 133 | 134 | Level3 135 | 136 | 137 | MaxSpeed 138 | true 139 | true 140 | NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 141 | MultiThreaded 142 | 143 | 144 | Console 145 | true 146 | true 147 | true 148 | 149 | 150 | 151 | 152 | ..\sign 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | -------------------------------------------------------------------------------- /helloworld/helloworld/call_helloworld/call_helloworld.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | {$guid1$} 23 | Win32Proj 24 | helloworld 25 | 8.1 26 | 27 | 28 | 29 | Application 30 | true 31 | v140 32 | Unicode 33 | 34 | 35 | Application 36 | false 37 | v140 38 | true 39 | Unicode 40 | 41 | 42 | Application 43 | true 44 | v140 45 | Unicode 46 | 47 | 48 | Application 49 | false 50 | v140 51 | true 52 | Unicode 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | true 74 | 75 | 76 | true 77 | 78 | 79 | false 80 | 81 | 82 | false 83 | 84 | 85 | 86 | 87 | 88 | Level3 89 | Disabled 90 | WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) 91 | MultiThreadedDebug 92 | ProgramDatabase 93 | 94 | 95 | Console 96 | true 97 | 98 | 99 | 100 | 101 | 102 | 103 | Level3 104 | Disabled 105 | _DEBUG;_CONSOLE;%(PreprocessorDefinitions) 106 | MultiThreadedDebug 107 | ProgramDatabase 108 | 109 | 110 | Console 111 | true 112 | 113 | 114 | 115 | 116 | Level3 117 | 118 | 119 | MaxSpeed 120 | true 121 | true 122 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 123 | MultiThreaded 124 | 125 | 126 | Console 127 | true 128 | true 129 | true 130 | 131 | 132 | 133 | 134 | Level3 135 | 136 | 137 | MaxSpeed 138 | true 139 | true 140 | NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 141 | MultiThreaded 142 | 143 | 144 | Console 145 | true 146 | true 147 | true 148 | 149 | 150 | 151 | 152 | ..\helloworld 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | -------------------------------------------------------------------------------- /qa/qa/qa/include/call_apl.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include "dwa_defs.h" 5 | #include "engine_flags.h" 6 | //#include 7 | 8 | #define AP_END 0x80000000 9 | #define AP_OUT 0x40000000 10 | #define AP_IN 0x20000000 11 | 12 | #define AP_NULLTERM 0x08000000 13 | #define AP_UTF 0x04000000 14 | #define AP_CALL_FREE 0x02000000 15 | #define AP_JSON 0x01000000 16 | 17 | #define AP_SIZED 0x00800000 18 | #define AP_ALLOC 0x00400000 19 | 20 | #if !defined(POCKET_H_INCLUDED) 21 | typedef void *PP; 22 | #endif 23 | 24 | typedef unsigned char ubyte; 25 | typedef unsigned char char8; 26 | typedef uint16_t char16; 27 | typedef uint32_t char32; 28 | 29 | 30 | #define AP_FIELD_NAME(type) f_##type 31 | #define AP_ARRAY_NAME(type) f_a_##type 32 | #define ADD_FIELDS(type) type AP_FIELD_NAME(type); struct { type *p; size_t b; } AP_ARRAY_NAME(type) 33 | 34 | #define ARRAY_PTR(v,t) ((v)->vals.AP_ARRAY_NAME(t).p) 35 | #define ARRAY_BND(v,t) ((v)->vals.AP_ARRAY_NAME(t).b) 36 | #define SCALAR_VAL(v,t) ((v)->vals.AP_FIELD_NAME(t)) 37 | 38 | typedef union 39 | { 40 | ADD_FIELDS(ubyte); 41 | ADD_FIELDS(int8_t); 42 | ADD_FIELDS(int16_t); 43 | ADD_FIELDS(int32_t); 44 | ADD_FIELDS(int64_t); 45 | 46 | ADD_FIELDS(uint8_t); 47 | ADD_FIELDS(uint16_t); 48 | ADD_FIELDS(uint32_t); 49 | ADD_FIELDS(uint64_t); 50 | 51 | ADD_FIELDS(float); 52 | ADD_FIELDS(double); 53 | 54 | ADD_FIELDS(char); 55 | ADD_FIELDS(char8); 56 | ADD_FIELDS(char16); 57 | ADD_FIELDS(char32); 58 | ADD_FIELDS(wchar_t); 59 | 60 | void *str; 61 | } APL_VALUES; 62 | 63 | 64 | 65 | typedef struct APL_PARAM 66 | { 67 | unsigned flags; 68 | void(LIBCALL *mkpock)(PP *pp,struct APL_PARAM *param); 69 | void(LIBCALL *fmpock)(PP *pp,struct APL_PARAM *param); 70 | APL_VALUES vals; 71 | struct APL_PARAM *link; 72 | } APL_PARAM; 73 | 74 | 75 | static APL_PARAM _APL_PARAM_END_={AP_END}; 76 | #define PARAM_END (&_APL_PARAM_END_) 77 | 78 | extern void dwa_free(void*); 79 | extern void *dwa_alloc(size_t len); 80 | extern APL_PARAM *link_str(APL_PARAM *,...); 81 | 82 | #include "copyfns.h" 83 | 84 | #define SET_ARRAY(name,type,ptr,bnd) ARRAY_PTR(&name,type)=ptr; ARRAY_BND(&name,type)=bnd 85 | 86 | #define APL_DEFINE_PARAM(name,flags,fp,tp) APL_PARAM name={flags,fp,tp} 87 | 88 | #define DEFINE_ARRAY_PARAM(name,flags,type,p,c) APL_DEFINE_PARAM(name,flags,pf_a_##type,pt_a_##type); SET_ARRAY(&name,type,p,count) 89 | #define DEFINE_SCALAR_PARAM(name,flags,type,v) APL_DEFINE_PARAM(name,flags,pf_##type,pt_##type); name.vals.AP_FIELD_NAME(type)=v; 90 | 91 | #define APL_NUMBER_ARRAY_PARAM(type,name,v,l,flags) APL_DEFINE_PARAM(name,flags, \ 92 | pf_a_##type, \ 93 | pt_a_##type \ 94 | ); SET_ARRAY(name,type,v,l) 95 | 96 | #define APL_STRUCT_PARAM(name,first,...) APL_DEFINE_PARAM(name,AP_IN,pf_str,pt_str); name.vals.str=link_str(first,__VA_ARGS__); 97 | #define APL_STRUCT_RESULT(name,first,...) APL_DEFINE_PARAM(name,AP_OUT,pf_str,pt_str); name.vals.str=link_str(first,__VA_ARGS__); 98 | #define APL_STRUCT_INOUT(name,first,...) APL_DEFINE_PARAM(name,AP_IN|AP_OUT,pf_str,pt_str); name.vals.str=link_str(first,__VA_ARGS__); 99 | 100 | #define APL_CHARACTER_ARRAY_PARAM(type,name,v,l,flags) APL_DEFINE_PARAM(name,flags, \ 101 | pf_a_##type, \ 102 | pt_a_##type \ 103 | ); SET_ARRAY(name,type,v,l) 104 | 105 | #define APL_DOUBLE_PARAM(name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,double,v) 106 | #define APL_DOUBLE_RESULT(name) APL_PARAM name={AP_OUT,0,pt_double} 107 | 108 | #define APL_INT8_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,int8_t,v) 109 | #define APL_INT8_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,int8_t,v) 110 | #define APL_INT8_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,int8_t,0) 111 | #define APL_INT16_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,int16_t,v) 112 | #define APL_INT16_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,int16_t,v) 113 | #define APL_INT16_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,int16_t,0) 114 | #define APL_INT32_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,int32_t,v) 115 | #define APL_INT32_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,int32_t,v) 116 | #define APL_INT32_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,int32_t,0) 117 | 118 | #define APL_CHAR8_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,char8,v) 119 | #define APL_CHAR8_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,char8,v) 120 | #define APL_CHAR8_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,char8,0) 121 | #define APL_CHAR16_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,char16,v) 122 | #define APL_CHAR16_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,char16,v) 123 | #define APL_CHAR16_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,char16,0) 124 | #define APL_CHAR_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,char,v) 125 | #define APL_CHAR_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,char,v) 126 | #define APL_CHAR_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,char,0) 127 | #define APL_WCHAR_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,wchar_t,v) 128 | #define APL_WCHAR_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,wchar_t,0) 129 | 130 | #define APL_CUSTOM_PARAM(name,val,f,mk,fm) name={f,mk,fm}; name.vals.vp=val 131 | 132 | #define APL_ZFORMAT_PARAM(name,val) APL_DEFINE_PARAM(name,AP_IN,pf_z,pt_z); SET_ARRAY(name,ubyte,val,0) 133 | #define APL_ZFORMAT_RESULT(name,val,l,f) APL_DEFINE_PARAM(name,f|AP_OUT,pf_z,pt_z); SET_ARRAY(name,ubyte,val,l) 134 | #define APL_ZFORMAT_INOUT(name,val,l,f) APL_DEFINE_PARAM(name,f|AP_OUT|AP_IN,pf_z,pt_z); SET_ARRAY(name,ubyte,val,l) 135 | 136 | #define APL_INT8_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int8_t,name,v,l,AP_IN) 137 | #define APL_INT8_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int8_t,name,v,l,f|AP_OUT) 138 | #define APL_INT8_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int8_t,name,v,l,f|AP_IN|AP_OUT) 139 | #define APL_INT16_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int16_t,name,v,l,AP_IN) 140 | #define APL_INT16_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int16_t,name,v,l,f|AP_OUT) 141 | #define APL_INT16_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int16_t,name,v,l,f|AP_IN|AP_OUT) 142 | #define APL_INT32_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int32_t,name,v,l,AP_IN) 143 | #define APL_INT32_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int32_t,name,v,l,f|AP_OUT) 144 | #define APL_INT32_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int32_t,name,v,l,f|AP_IN|AP_OUT) 145 | #define APL_INT64_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int64_t,name,v,l,AP_IN) 146 | #define APL_INT64_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int64_t,name,v,l,f|AP_OUT) 147 | #define APL_INT64_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int64_t,name,v,l,f|AP_IN|AP_OUT) 148 | #define APL_DOUBLE_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(double,name,v,l,AP_IN) 149 | #define APL_DOUBLE_ARRAY_RESULT(name,v,l,f) APL_NUMBER_ARRAY_PARAM(double,name,v,l,f|AP_OUT) 150 | #define APL_DOUBLE_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(double,name,v,l,f|AP_IN|AP_OUT) 151 | 152 | #define APL_CHAR8_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char8,name,v,0,f|AP_IN) 153 | #define APL_CHAR8_ARRAY_RESULT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char8,name,v,l,f|AP_OUT) 154 | #define APL_CHAR8_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char8,name,v,l,f|AP_IN|AP_OUT) 155 | #define APL_CHAR16_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char16,name,v,0,f|AP_IN) 156 | #define APL_CHAR16_ARRAY_RESULT(name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char16,name,v,l,f|AP_OUT) 157 | #define APL_CHAR16_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char16,name,v,l,f|AP_IN|AP_OUT) 158 | #define APL_CHAR32_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char32,name,v,0,f|AP_IN) 159 | #define APL_CHAR32_ARRAY_RESULT(name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char32,name,v,l,f|AP_OUT) 160 | #define APL_CHAR32_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char32,name,v,l,f|AP_IN|AP_OUT) 161 | #define APL_CHAR_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char,name,v,0,f|AP_IN) 162 | #define APL_CHAR_ARRAY_RESULT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char,name,v,l,f|AP_OUT) 163 | #define APL_CHAR_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char,name,v,l,f|AP_IN|AP_OUT) 164 | #define APL_WCHAR_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(wchar_t,name,v,l,f|AP_IN) 165 | #define APL_WCHAR_ARRAY_RESULT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(wchar_t,name,v,l,f|AP_OUT) 166 | #define APL_WCHAR_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(wchar_t,name,v,l,f|AP_IN|AP_OUT) 167 | 168 | 169 | extern int call_apl(const wchar_t *name,APL_PARAM *first,...); 170 | extern int load_apl(unsigned int flags, int argc, wchar_t **argv); 171 | 172 | -------------------------------------------------------------------------------- /sign/sign/sign/include/call_apl.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include "dwa_defs.h" 5 | #include "engine_flags.h" 6 | //#include 7 | 8 | #define AP_END 0x80000000 9 | #define AP_OUT 0x40000000 10 | #define AP_IN 0x20000000 11 | 12 | #define AP_NULLTERM 0x08000000 13 | #define AP_UTF 0x04000000 14 | #define AP_CALL_FREE 0x02000000 15 | #define AP_JSON 0x01000000 16 | 17 | #define AP_SIZED 0x00800000 18 | #define AP_ALLOC 0x00400000 19 | 20 | #if !defined(POCKET_H_INCLUDED) 21 | typedef void *PP; 22 | #endif 23 | 24 | typedef unsigned char ubyte; 25 | typedef unsigned char char8; 26 | typedef uint16_t char16; 27 | typedef uint32_t char32; 28 | 29 | 30 | #define AP_FIELD_NAME(type) f_##type 31 | #define AP_ARRAY_NAME(type) f_a_##type 32 | #define ADD_FIELDS(type) type AP_FIELD_NAME(type); struct { type *p; size_t b; } AP_ARRAY_NAME(type) 33 | 34 | #define ARRAY_PTR(v,t) ((v)->vals.AP_ARRAY_NAME(t).p) 35 | #define ARRAY_BND(v,t) ((v)->vals.AP_ARRAY_NAME(t).b) 36 | #define SCALAR_VAL(v,t) ((v)->vals.AP_FIELD_NAME(t)) 37 | 38 | typedef union 39 | { 40 | ADD_FIELDS(ubyte); 41 | ADD_FIELDS(int8_t); 42 | ADD_FIELDS(int16_t); 43 | ADD_FIELDS(int32_t); 44 | ADD_FIELDS(int64_t); 45 | 46 | ADD_FIELDS(uint8_t); 47 | ADD_FIELDS(uint16_t); 48 | ADD_FIELDS(uint32_t); 49 | ADD_FIELDS(uint64_t); 50 | 51 | ADD_FIELDS(float); 52 | ADD_FIELDS(double); 53 | 54 | ADD_FIELDS(char); 55 | ADD_FIELDS(char8); 56 | ADD_FIELDS(char16); 57 | ADD_FIELDS(char32); 58 | ADD_FIELDS(wchar_t); 59 | 60 | void *str; 61 | } APL_VALUES; 62 | 63 | 64 | 65 | typedef struct APL_PARAM 66 | { 67 | unsigned flags; 68 | void(LIBCALL *mkpock)(PP *pp,struct APL_PARAM *param); 69 | void(LIBCALL *fmpock)(PP *pp,struct APL_PARAM *param); 70 | APL_VALUES vals; 71 | struct APL_PARAM *link; 72 | } APL_PARAM; 73 | 74 | 75 | static APL_PARAM _APL_PARAM_END_={AP_END}; 76 | #define PARAM_END (&_APL_PARAM_END_) 77 | 78 | extern void dwa_free(void*); 79 | extern void *dwa_alloc(size_t len); 80 | extern APL_PARAM *link_str(APL_PARAM *,...); 81 | 82 | #include "copyfns.h" 83 | 84 | #define SET_ARRAY(name,type,ptr,bnd) ARRAY_PTR(&name,type)=ptr; ARRAY_BND(&name,type)=bnd 85 | 86 | #define APL_DEFINE_PARAM(name,flags,fp,tp) APL_PARAM name={flags,fp,tp} 87 | 88 | #define DEFINE_ARRAY_PARAM(name,flags,type,p,c) APL_DEFINE_PARAM(name,flags,pf_a_##type,pt_a_##type); SET_ARRAY(&name,type,p,count) 89 | #define DEFINE_SCALAR_PARAM(name,flags,type,v) APL_DEFINE_PARAM(name,flags,pf_##type,pt_##type); name.vals.AP_FIELD_NAME(type)=v; 90 | 91 | #define APL_NUMBER_ARRAY_PARAM(type,name,v,l,flags) APL_DEFINE_PARAM(name,flags, \ 92 | pf_a_##type, \ 93 | pt_a_##type \ 94 | ); SET_ARRAY(name,type,v,l) 95 | 96 | #define APL_STRUCT_PARAM(name,first,...) APL_DEFINE_PARAM(name,AP_IN,pf_str,pt_str); name.vals.str=link_str(first,__VA_ARGS__); 97 | #define APL_STRUCT_RESULT(name,first,...) APL_DEFINE_PARAM(name,AP_OUT,pf_str,pt_str); name.vals.str=link_str(first,__VA_ARGS__); 98 | #define APL_STRUCT_INOUT(name,first,...) APL_DEFINE_PARAM(name,AP_IN|AP_OUT,pf_str,pt_str); name.vals.str=link_str(first,__VA_ARGS__); 99 | 100 | #define APL_CHARACTER_ARRAY_PARAM(type,name,v,l,flags) APL_DEFINE_PARAM(name,flags, \ 101 | pf_a_##type, \ 102 | pt_a_##type \ 103 | ); SET_ARRAY(name,type,v,l) 104 | 105 | #define APL_DOUBLE_PARAM(name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,double,v) 106 | #define APL_DOUBLE_RESULT(name) APL_PARAM name={AP_OUT,0,pt_double} 107 | 108 | #define APL_INT8_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,int8_t,v) 109 | #define APL_INT8_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,int8_t,v) 110 | #define APL_INT8_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,int8_t,0) 111 | #define APL_INT16_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,int16_t,v) 112 | #define APL_INT16_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,int16_t,v) 113 | #define APL_INT16_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,int16_t,0) 114 | #define APL_INT32_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,int32_t,v) 115 | #define APL_INT32_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,int32_t,v) 116 | #define APL_INT32_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,int32_t,0) 117 | 118 | #define APL_CHAR8_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,char8,v) 119 | #define APL_CHAR8_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,char8,v) 120 | #define APL_CHAR8_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,char8,0) 121 | #define APL_CHAR16_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,char16,v) 122 | #define APL_CHAR16_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,char16,v) 123 | #define APL_CHAR16_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,char16,0) 124 | #define APL_CHAR_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,char,v) 125 | #define APL_CHAR_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,char,v) 126 | #define APL_CHAR_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,char,0) 127 | #define APL_WCHAR_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,wchar_t,v) 128 | #define APL_WCHAR_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,wchar_t,0) 129 | 130 | #define APL_CUSTOM_PARAM(name,val,f,mk,fm) name={f,mk,fm}; name.vals.vp=val 131 | 132 | #define APL_ZFORMAT_PARAM(name,val) APL_DEFINE_PARAM(name,AP_IN,pf_z,pt_z); SET_ARRAY(name,ubyte,val,0) 133 | #define APL_ZFORMAT_RESULT(name,val,l,f) APL_DEFINE_PARAM(name,f|AP_OUT,pf_z,pt_z); SET_ARRAY(name,ubyte,val,l) 134 | #define APL_ZFORMAT_INOUT(name,val,l,f) APL_DEFINE_PARAM(name,f|AP_OUT|AP_IN,pf_z,pt_z); SET_ARRAY(name,ubyte,val,l) 135 | 136 | #define APL_INT8_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int8_t,name,v,l,AP_IN) 137 | #define APL_INT8_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int8_t,name,v,l,f|AP_OUT) 138 | #define APL_INT8_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int8_t,name,v,l,f|AP_IN|AP_OUT) 139 | #define APL_INT16_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int16_t,name,v,l,AP_IN) 140 | #define APL_INT16_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int16_t,name,v,l,f|AP_OUT) 141 | #define APL_INT16_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int16_t,name,v,l,f|AP_IN|AP_OUT) 142 | #define APL_INT32_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int32_t,name,v,l,AP_IN) 143 | #define APL_INT32_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int32_t,name,v,l,f|AP_OUT) 144 | #define APL_INT32_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int32_t,name,v,l,f|AP_IN|AP_OUT) 145 | #define APL_INT64_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int64_t,name,v,l,AP_IN) 146 | #define APL_INT64_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int64_t,name,v,l,f|AP_OUT) 147 | #define APL_INT64_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int64_t,name,v,l,f|AP_IN|AP_OUT) 148 | #define APL_DOUBLE_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(double,name,v,l,AP_IN) 149 | #define APL_DOUBLE_ARRAY_RESULT(name,v,l,f) APL_NUMBER_ARRAY_PARAM(double,name,v,l,f|AP_OUT) 150 | #define APL_DOUBLE_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(double,name,v,l,f|AP_IN|AP_OUT) 151 | 152 | #define APL_CHAR8_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char8,name,v,0,f|AP_IN) 153 | #define APL_CHAR8_ARRAY_RESULT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char8,name,v,l,f|AP_OUT) 154 | #define APL_CHAR8_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char8,name,v,l,f|AP_IN|AP_OUT) 155 | #define APL_CHAR16_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char16,name,v,0,f|AP_IN) 156 | #define APL_CHAR16_ARRAY_RESULT(name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char16,name,v,l,f|AP_OUT) 157 | #define APL_CHAR16_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char16,name,v,l,f|AP_IN|AP_OUT) 158 | #define APL_CHAR32_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char32,name,v,0,f|AP_IN) 159 | #define APL_CHAR32_ARRAY_RESULT(name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char32,name,v,l,f|AP_OUT) 160 | #define APL_CHAR32_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char32,name,v,l,f|AP_IN|AP_OUT) 161 | #define APL_CHAR_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char,name,v,0,f|AP_IN) 162 | #define APL_CHAR_ARRAY_RESULT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char,name,v,l,f|AP_OUT) 163 | #define APL_CHAR_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char,name,v,l,f|AP_IN|AP_OUT) 164 | #define APL_WCHAR_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(wchar_t,name,v,l,f|AP_IN) 165 | #define APL_WCHAR_ARRAY_RESULT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(wchar_t,name,v,l,f|AP_OUT) 166 | #define APL_WCHAR_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(wchar_t,name,v,l,f|AP_IN|AP_OUT) 167 | 168 | 169 | extern int call_apl(const wchar_t *name,APL_PARAM *first,...); 170 | extern int load_apl(unsigned int flags, int argc, wchar_t **argv); 171 | 172 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/JSON_APL/include/call_apl.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include "dwa_defs.h" 5 | #include "engine_flags.h" 6 | //#include 7 | 8 | #define AP_END 0x80000000 9 | #define AP_OUT 0x40000000 10 | #define AP_IN 0x20000000 11 | 12 | #define AP_NULLTERM 0x08000000 13 | #define AP_UTF 0x04000000 14 | #define AP_CALL_FREE 0x02000000 15 | #define AP_JSON 0x01000000 16 | 17 | #define AP_SIZED 0x00800000 18 | #define AP_ALLOC 0x00400000 19 | 20 | #if !defined(POCKET_H_INCLUDED) 21 | typedef void *PP; 22 | #endif 23 | 24 | typedef unsigned char ubyte; 25 | typedef unsigned char char8; 26 | typedef uint16_t char16; 27 | typedef uint32_t char32; 28 | 29 | 30 | #define AP_FIELD_NAME(type) f_##type 31 | #define AP_ARRAY_NAME(type) f_a_##type 32 | #define ADD_FIELDS(type) type AP_FIELD_NAME(type); struct { type *p; size_t b; } AP_ARRAY_NAME(type) 33 | 34 | #define ARRAY_PTR(v,t) ((v)->vals.AP_ARRAY_NAME(t).p) 35 | #define ARRAY_BND(v,t) ((v)->vals.AP_ARRAY_NAME(t).b) 36 | #define SCALAR_VAL(v,t) ((v)->vals.AP_FIELD_NAME(t)) 37 | 38 | typedef union 39 | { 40 | ADD_FIELDS(ubyte); 41 | ADD_FIELDS(int8_t); 42 | ADD_FIELDS(int16_t); 43 | ADD_FIELDS(int32_t); 44 | ADD_FIELDS(int64_t); 45 | 46 | ADD_FIELDS(uint8_t); 47 | ADD_FIELDS(uint16_t); 48 | ADD_FIELDS(uint32_t); 49 | ADD_FIELDS(uint64_t); 50 | 51 | ADD_FIELDS(float); 52 | ADD_FIELDS(double); 53 | 54 | ADD_FIELDS(char); 55 | ADD_FIELDS(char8); 56 | ADD_FIELDS(char16); 57 | ADD_FIELDS(char32); 58 | ADD_FIELDS(wchar_t); 59 | 60 | void *str; 61 | } APL_VALUES; 62 | 63 | 64 | 65 | typedef struct APL_PARAM 66 | { 67 | unsigned flags; 68 | void(LIBCALL *mkpock)(PP *pp,struct APL_PARAM *param); 69 | void(LIBCALL *fmpock)(PP *pp,struct APL_PARAM *param); 70 | APL_VALUES vals; 71 | struct APL_PARAM *link; 72 | } APL_PARAM; 73 | 74 | 75 | static APL_PARAM _APL_PARAM_END_={AP_END}; 76 | #define PARAM_END (&_APL_PARAM_END_) 77 | 78 | extern void dwa_free(void*); 79 | extern void *dwa_alloc(size_t len); 80 | extern APL_PARAM *link_str(APL_PARAM *,...); 81 | 82 | #include "copyfns.h" 83 | 84 | #define SET_ARRAY(name,type,ptr,bnd) ARRAY_PTR(&name,type)=ptr; ARRAY_BND(&name,type)=bnd 85 | 86 | #define APL_DEFINE_PARAM(name,flags,fp,tp) APL_PARAM name={flags,fp,tp} 87 | 88 | #define DEFINE_ARRAY_PARAM(name,flags,type,p,c) APL_DEFINE_PARAM(name,flags,pf_a_##type,pt_a_##type); SET_ARRAY(&name,type,p,count) 89 | #define DEFINE_SCALAR_PARAM(name,flags,type,v) APL_DEFINE_PARAM(name,flags,pf_##type,pt_##type); name.vals.AP_FIELD_NAME(type)=v; 90 | 91 | #define APL_NUMBER_ARRAY_PARAM(type,name,v,l,flags) APL_DEFINE_PARAM(name,flags, \ 92 | pf_a_##type, \ 93 | pt_a_##type \ 94 | ); SET_ARRAY(name,type,v,l) 95 | 96 | #define APL_STRUCT_PARAM(name,first,...) APL_DEFINE_PARAM(name,AP_IN,pf_str,pt_str); name.vals.str=link_str(first,__VA_ARGS__); 97 | #define APL_STRUCT_RESULT(name,first,...) APL_DEFINE_PARAM(name,AP_OUT,pf_str,pt_str); name.vals.str=link_str(first,__VA_ARGS__); 98 | #define APL_STRUCT_INOUT(name,first,...) APL_DEFINE_PARAM(name,AP_IN|AP_OUT,pf_str,pt_str); name.vals.str=link_str(first,__VA_ARGS__); 99 | 100 | #define APL_CHARACTER_ARRAY_PARAM(type,name,v,l,flags) APL_DEFINE_PARAM(name,flags, \ 101 | pf_a_##type, \ 102 | pt_a_##type \ 103 | ); SET_ARRAY(name,type,v,l) 104 | 105 | #define APL_DOUBLE_PARAM(name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,double,v) 106 | #define APL_DOUBLE_RESULT(name) APL_PARAM name={AP_OUT,0,pt_double} 107 | 108 | #define APL_INT8_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,int8_t,v) 109 | #define APL_INT8_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,int8_t,v) 110 | #define APL_INT8_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,int8_t,0) 111 | #define APL_INT16_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,int16_t,v) 112 | #define APL_INT16_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,int16_t,v) 113 | #define APL_INT16_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,int16_t,0) 114 | #define APL_INT32_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,int32_t,v) 115 | #define APL_INT32_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,int32_t,v) 116 | #define APL_INT32_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,int32_t,0) 117 | 118 | #define APL_CHAR8_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,char8,v) 119 | #define APL_CHAR8_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,char8,v) 120 | #define APL_CHAR8_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,char8,0) 121 | #define APL_CHAR16_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,char16,v) 122 | #define APL_CHAR16_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,char16,v) 123 | #define APL_CHAR16_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,char16,0) 124 | #define APL_CHAR_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,char,v) 125 | #define APL_CHAR_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,char,v) 126 | #define APL_CHAR_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,char,0) 127 | #define APL_WCHAR_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,wchar_t,v) 128 | #define APL_WCHAR_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,wchar_t,0) 129 | 130 | #define APL_CUSTOM_PARAM(name,val,f,mk,fm) name={f,mk,fm}; name.vals.vp=val 131 | 132 | #define APL_ZFORMAT_PARAM(name,val) APL_DEFINE_PARAM(name,AP_IN,pf_z,pt_z); SET_ARRAY(name,ubyte,val,0) 133 | #define APL_ZFORMAT_RESULT(name,val,l,f) APL_DEFINE_PARAM(name,f|AP_OUT,pf_z,pt_z); SET_ARRAY(name,ubyte,val,l) 134 | #define APL_ZFORMAT_INOUT(name,val,l,f) APL_DEFINE_PARAM(name,f|AP_OUT|AP_IN,pf_z,pt_z); SET_ARRAY(name,ubyte,val,l) 135 | 136 | #define APL_INT8_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int8_t,name,v,l,AP_IN) 137 | #define APL_INT8_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int8_t,name,v,l,f|AP_OUT) 138 | #define APL_INT8_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int8_t,name,v,l,f|AP_IN|AP_OUT) 139 | #define APL_INT16_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int16_t,name,v,l,AP_IN) 140 | #define APL_INT16_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int16_t,name,v,l,f|AP_OUT) 141 | #define APL_INT16_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int16_t,name,v,l,f|AP_IN|AP_OUT) 142 | #define APL_INT32_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int32_t,name,v,l,AP_IN) 143 | #define APL_INT32_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int32_t,name,v,l,f|AP_OUT) 144 | #define APL_INT32_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int32_t,name,v,l,f|AP_IN|AP_OUT) 145 | #define APL_INT64_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int64_t,name,v,l,AP_IN) 146 | #define APL_INT64_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int64_t,name,v,l,f|AP_OUT) 147 | #define APL_INT64_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int64_t,name,v,l,f|AP_IN|AP_OUT) 148 | #define APL_DOUBLE_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(double,name,v,l,AP_IN) 149 | #define APL_DOUBLE_ARRAY_RESULT(name,v,l,f) APL_NUMBER_ARRAY_PARAM(double,name,v,l,f|AP_OUT) 150 | #define APL_DOUBLE_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(double,name,v,l,f|AP_IN|AP_OUT) 151 | 152 | #define APL_CHAR8_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char8,name,v,0,f|AP_IN) 153 | #define APL_CHAR8_ARRAY_RESULT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char8,name,v,l,f|AP_OUT) 154 | #define APL_CHAR8_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char8,name,v,l,f|AP_IN|AP_OUT) 155 | #define APL_CHAR16_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char16,name,v,0,f|AP_IN) 156 | #define APL_CHAR16_ARRAY_RESULT(name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char16,name,v,l,f|AP_OUT) 157 | #define APL_CHAR16_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char16,name,v,l,f|AP_IN|AP_OUT) 158 | #define APL_CHAR32_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char32,name,v,0,f|AP_IN) 159 | #define APL_CHAR32_ARRAY_RESULT(name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char32,name,v,l,f|AP_OUT) 160 | #define APL_CHAR32_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char32,name,v,l,f|AP_IN|AP_OUT) 161 | #define APL_CHAR_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char,name,v,0,f|AP_IN) 162 | #define APL_CHAR_ARRAY_RESULT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char,name,v,l,f|AP_OUT) 163 | #define APL_CHAR_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char,name,v,l,f|AP_IN|AP_OUT) 164 | #define APL_WCHAR_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(wchar_t,name,v,l,f|AP_IN) 165 | #define APL_WCHAR_ARRAY_RESULT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(wchar_t,name,v,l,f|AP_OUT) 166 | #define APL_WCHAR_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(wchar_t,name,v,l,f|AP_IN|AP_OUT) 167 | 168 | 169 | extern int call_apl(const wchar_t *name,APL_PARAM *first,...); 170 | extern int load_apl(unsigned int flags, int argc, wchar_t **argv); 171 | 172 | -------------------------------------------------------------------------------- /helloworld/helloworld/helloworld/include/call_apl.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include "dwa_defs.h" 5 | #include "engine_flags.h" 6 | //#include 7 | 8 | #define AP_END 0x80000000 9 | #define AP_OUT 0x40000000 10 | #define AP_IN 0x20000000 11 | 12 | #define AP_NULLTERM 0x08000000 13 | #define AP_UTF 0x04000000 14 | #define AP_CALL_FREE 0x02000000 15 | #define AP_JSON 0x01000000 16 | 17 | #define AP_SIZED 0x00800000 18 | #define AP_ALLOC 0x00400000 19 | 20 | #if !defined(POCKET_H_INCLUDED) 21 | typedef void *PP; 22 | #endif 23 | 24 | typedef unsigned char ubyte; 25 | typedef unsigned char char8; 26 | typedef uint16_t char16; 27 | typedef uint32_t char32; 28 | 29 | 30 | #define AP_FIELD_NAME(type) f_##type 31 | #define AP_ARRAY_NAME(type) f_a_##type 32 | #define ADD_FIELDS(type) type AP_FIELD_NAME(type); struct { type *p; size_t b; } AP_ARRAY_NAME(type) 33 | 34 | #define ARRAY_PTR(v,t) ((v)->vals.AP_ARRAY_NAME(t).p) 35 | #define ARRAY_BND(v,t) ((v)->vals.AP_ARRAY_NAME(t).b) 36 | #define SCALAR_VAL(v,t) ((v)->vals.AP_FIELD_NAME(t)) 37 | 38 | typedef union 39 | { 40 | ADD_FIELDS(ubyte); 41 | ADD_FIELDS(int8_t); 42 | ADD_FIELDS(int16_t); 43 | ADD_FIELDS(int32_t); 44 | ADD_FIELDS(int64_t); 45 | 46 | ADD_FIELDS(uint8_t); 47 | ADD_FIELDS(uint16_t); 48 | ADD_FIELDS(uint32_t); 49 | ADD_FIELDS(uint64_t); 50 | 51 | ADD_FIELDS(float); 52 | ADD_FIELDS(double); 53 | 54 | ADD_FIELDS(char); 55 | ADD_FIELDS(char8); 56 | ADD_FIELDS(char16); 57 | ADD_FIELDS(char32); 58 | ADD_FIELDS(wchar_t); 59 | 60 | void *str; 61 | } APL_VALUES; 62 | 63 | 64 | 65 | typedef struct APL_PARAM 66 | { 67 | unsigned flags; 68 | void(LIBCALL *mkpock)(PP *pp,struct APL_PARAM *param); 69 | void(LIBCALL *fmpock)(PP *pp,struct APL_PARAM *param); 70 | APL_VALUES vals; 71 | struct APL_PARAM *link; 72 | } APL_PARAM; 73 | 74 | 75 | static APL_PARAM _APL_PARAM_END_={AP_END}; 76 | #define PARAM_END (&_APL_PARAM_END_) 77 | 78 | extern void dwa_free(void*); 79 | extern void *dwa_alloc(size_t len); 80 | extern APL_PARAM *link_str(APL_PARAM *,...); 81 | 82 | #include "copyfns.h" 83 | 84 | #define SET_ARRAY(name,type,ptr,bnd) ARRAY_PTR(&name,type)=ptr; ARRAY_BND(&name,type)=bnd 85 | 86 | #define APL_DEFINE_PARAM(name,flags,fp,tp) APL_PARAM name={flags,fp,tp} 87 | 88 | #define DEFINE_ARRAY_PARAM(name,flags,type,p,c) APL_DEFINE_PARAM(name,flags,pf_a_##type,pt_a_##type); SET_ARRAY(&name,type,p,count) 89 | #define DEFINE_SCALAR_PARAM(name,flags,type,v) APL_DEFINE_PARAM(name,flags,pf_##type,pt_##type); name.vals.AP_FIELD_NAME(type)=v; 90 | 91 | #define APL_NUMBER_ARRAY_PARAM(type,name,v,l,flags) APL_DEFINE_PARAM(name,flags, \ 92 | pf_a_##type, \ 93 | pt_a_##type \ 94 | ); SET_ARRAY(name,type,v,l) 95 | 96 | #define APL_STRUCT_PARAM(name,first,...) APL_DEFINE_PARAM(name,AP_IN,pf_str,pt_str); name.vals.str=link_str(first,__VA_ARGS__); 97 | #define APL_STRUCT_RESULT(name,first,...) APL_DEFINE_PARAM(name,AP_OUT,pf_str,pt_str); name.vals.str=link_str(first,__VA_ARGS__); 98 | #define APL_STRUCT_INOUT(name,first,...) APL_DEFINE_PARAM(name,AP_IN|AP_OUT,pf_str,pt_str); name.vals.str=link_str(first,__VA_ARGS__); 99 | 100 | #define APL_CHARACTER_ARRAY_PARAM(type,name,v,l,flags) APL_DEFINE_PARAM(name,flags, \ 101 | pf_a_##type, \ 102 | pt_a_##type \ 103 | ); SET_ARRAY(name,type,v,l) 104 | 105 | #define APL_DOUBLE_PARAM(name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,double,v) 106 | #define APL_DOUBLE_RESULT(name) APL_PARAM name={AP_OUT,0,pt_double} 107 | 108 | #define APL_INT8_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,int8_t,v) 109 | #define APL_INT8_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,int8_t,v) 110 | #define APL_INT8_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,int8_t,0) 111 | #define APL_INT16_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,int16_t,v) 112 | #define APL_INT16_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,int16_t,v) 113 | #define APL_INT16_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,int16_t,0) 114 | #define APL_INT32_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,int32_t,v) 115 | #define APL_INT32_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,int32_t,v) 116 | #define APL_INT32_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,int32_t,0) 117 | 118 | #define APL_CHAR8_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,char8,v) 119 | #define APL_CHAR8_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,char8,v) 120 | #define APL_CHAR8_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,char8,0) 121 | #define APL_CHAR16_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,char16,v) 122 | #define APL_CHAR16_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,char16,v) 123 | #define APL_CHAR16_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,char16,0) 124 | #define APL_CHAR_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,char,v) 125 | #define APL_CHAR_INOUT( name,v) DEFINE_SCALAR_PARAM(name,AP_IN|AP_OUT ,char,v) 126 | #define APL_CHAR_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,char,0) 127 | #define APL_WCHAR_PARAM( name,v) DEFINE_SCALAR_PARAM(name,AP_IN ,wchar_t,v) 128 | #define APL_WCHAR_RESULT( name) DEFINE_SCALAR_PARAM(name,AP_OUT ,wchar_t,0) 129 | 130 | #define APL_CUSTOM_PARAM(name,val,f,mk,fm) name={f,mk,fm}; name.vals.vp=val 131 | 132 | #define APL_ZFORMAT_PARAM(name,val) APL_DEFINE_PARAM(name,AP_IN,pf_z,pt_z); SET_ARRAY(name,ubyte,val,0) 133 | #define APL_ZFORMAT_RESULT(name,val,l,f) APL_DEFINE_PARAM(name,f|AP_OUT,pf_z,pt_z); SET_ARRAY(name,ubyte,val,l) 134 | #define APL_ZFORMAT_INOUT(name,val,l,f) APL_DEFINE_PARAM(name,f|AP_OUT|AP_IN,pf_z,pt_z); SET_ARRAY(name,ubyte,val,l) 135 | 136 | #define APL_INT8_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int8_t,name,v,l,AP_IN) 137 | #define APL_INT8_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int8_t,name,v,l,f|AP_OUT) 138 | #define APL_INT8_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int8_t,name,v,l,f|AP_IN|AP_OUT) 139 | #define APL_INT16_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int16_t,name,v,l,AP_IN) 140 | #define APL_INT16_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int16_t,name,v,l,f|AP_OUT) 141 | #define APL_INT16_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int16_t,name,v,l,f|AP_IN|AP_OUT) 142 | #define APL_INT32_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int32_t,name,v,l,AP_IN) 143 | #define APL_INT32_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int32_t,name,v,l,f|AP_OUT) 144 | #define APL_INT32_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int32_t,name,v,l,f|AP_IN|AP_OUT) 145 | #define APL_INT64_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(int64_t,name,v,l,AP_IN) 146 | #define APL_INT64_ARRAY_RESULT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int64_t,name,v,l,f|AP_OUT) 147 | #define APL_INT64_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(int64_t,name,v,l,f|AP_IN|AP_OUT) 148 | #define APL_DOUBLE_ARRAY_PARAM( name,v,l) APL_NUMBER_ARRAY_PARAM(double,name,v,l,AP_IN) 149 | #define APL_DOUBLE_ARRAY_RESULT(name,v,l,f) APL_NUMBER_ARRAY_PARAM(double,name,v,l,f|AP_OUT) 150 | #define APL_DOUBLE_ARRAY_INOUT( name,v,l,f) APL_NUMBER_ARRAY_PARAM(double,name,v,l,f|AP_IN|AP_OUT) 151 | 152 | #define APL_CHAR8_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char8,name,v,0,f|AP_IN) 153 | #define APL_CHAR8_ARRAY_RESULT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char8,name,v,l,f|AP_OUT) 154 | #define APL_CHAR8_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char8,name,v,l,f|AP_IN|AP_OUT) 155 | #define APL_CHAR16_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char16,name,v,0,f|AP_IN) 156 | #define APL_CHAR16_ARRAY_RESULT(name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char16,name,v,l,f|AP_OUT) 157 | #define APL_CHAR16_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char16,name,v,l,f|AP_IN|AP_OUT) 158 | #define APL_CHAR32_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char32,name,v,0,f|AP_IN) 159 | #define APL_CHAR32_ARRAY_RESULT(name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char32,name,v,l,f|AP_OUT) 160 | #define APL_CHAR32_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char32,name,v,l,f|AP_IN|AP_OUT) 161 | #define APL_CHAR_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char,name,v,0,f|AP_IN) 162 | #define APL_CHAR_ARRAY_RESULT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char,name,v,l,f|AP_OUT) 163 | #define APL_CHAR_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(char,name,v,l,f|AP_IN|AP_OUT) 164 | #define APL_WCHAR_ARRAY_PARAM( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(wchar_t,name,v,l,f|AP_IN) 165 | #define APL_WCHAR_ARRAY_RESULT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(wchar_t,name,v,l,f|AP_OUT) 166 | #define APL_WCHAR_ARRAY_INOUT( name,v,l,f) APL_CHARACTER_ARRAY_PARAM(wchar_t,name,v,l,f|AP_IN|AP_OUT) 167 | 168 | 169 | extern int call_apl(const wchar_t *name,APL_PARAM *first,...); 170 | extern int load_apl(unsigned int flags, int argc, wchar_t **argv); 171 | 172 | -------------------------------------------------------------------------------- /JSON_APL/JSON_APL/call_JSON_APL/call_JSON_APL.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | {C1DB6D6C-5E48-43A6-B364-6D2CD6262C15} 23 | Win32Proj 24 | json_apl 25 | 10.0.10586.0 26 | call_JSON_APL 27 | 28 | 29 | 30 | Application 31 | true 32 | v140 33 | Unicode 34 | 35 | 36 | Application 37 | false 38 | v140 39 | true 40 | Unicode 41 | 42 | 43 | Application 44 | true 45 | v140 46 | Unicode 47 | 48 | 49 | Application 50 | false 51 | v140 52 | true 53 | Unicode 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | true 75 | 76 | 77 | true 78 | 79 | 80 | false 81 | 82 | 83 | false 84 | 85 | 86 | 87 | 88 | 89 | Level3 90 | Disabled 91 | WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) 92 | MultiThreadedDebug 93 | ProgramDatabase 94 | 95 | 96 | Console 97 | true 98 | UseLinkTimeCodeGeneration 99 | false 100 | 101 | 102 | 103 | 104 | 105 | 106 | Level3 107 | Disabled 108 | _DEBUG;_CONSOLE;%(PreprocessorDefinitions) 109 | MultiThreadedDebug 110 | ProgramDatabase 111 | true 112 | 113 | 114 | Console 115 | true 116 | UseLinkTimeCodeGeneration 117 | false 118 | 119 | 120 | xcopy /y *.py $(OutDir) & xcopy /y *.dyalog $(OutDir) 121 | 122 | 123 | 124 | 125 | Level3 126 | 127 | 128 | MaxSpeed 129 | true 130 | true 131 | WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 132 | MultiThreaded 133 | 134 | 135 | Console 136 | true 137 | true 138 | true 139 | UseLinkTimeCodeGeneration 140 | false 141 | 142 | 143 | 144 | 145 | Level3 146 | 147 | 148 | MaxSpeed 149 | true 150 | true 151 | NDEBUG;_CONSOLE;%(PreprocessorDefinitions) 152 | MultiThreaded 153 | 154 | 155 | Console 156 | true 157 | true 158 | true 159 | UseLinkTimeCodeGeneration 160 | false 161 | 162 | 163 | 164 | 165 | ..\json_apl 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | true 174 | Document 175 | 176 | 177 | true 178 | Document 179 | 180 | 181 | true 182 | Document 183 | 184 | 185 | 186 | 187 | 188 | 189 | -------------------------------------------------------------------------------- /qa/qa/qa/qa.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | {{7a4d17a8-9aaa-45e0-8322-2ab5bb5cff61}} 23 | Win32Proj 24 | qa 25 | 8.1 26 | 27 | 28 | 29 | DynamicLibrary 30 | true 31 | v140 32 | Unicode 33 | 34 | 35 | DynamicLibrary 36 | false 37 | v140 38 | true 39 | Unicode 40 | 41 | 42 | DynamicLibrary 43 | true 44 | v140 45 | Unicode 46 | 47 | 48 | DynamicLibrary 49 | false 50 | v140 51 | true 52 | Unicode 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | true 74 | false 75 | 76 | 77 | true 78 | 79 | 80 | false 81 | 82 | 83 | false 84 | 85 | 86 | 87 | 88 | 89 | Level3 90 | Disabled 91 | WIN32;_DEBUG;_WINDOWS;_USRDLL;SIGN_EXPORTS;%(PreprocessorDefinitions) 92 | true 93 | include 94 | MultiThreadedDebug 95 | ProgramDatabase 96 | 97 | 98 | Windows 99 | true 100 | C:/Program Files (x86)/Dyalog/Dyalog APL 18.0 Unicode/dwa/lib 101 | libdyalog.lib;dwa_static.lib;htmlhelp.lib;user32.lib;gdi32.lib;msimg32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;secur32.lib;oleaut32.lib;ole32.lib;oledlg.lib;kernel32.lib;uuid.lib;shell32.lib;shlwapi.lib;psapi.lib;advapi32.lib;winspool.lib;wsock32.lib;version.lib;rpcrt4.lib;mapi32.lib;imm32.lib;ws2_32.lib;uxtheme.lib;gdiplus.lib;powrprof.lib;%(AdditionalDependencies) 102 | 103 | 104 | 105 | 106 | 107 | 108 | Level3 109 | Disabled 110 | _DEBUG;_WINDOWS;_USRDLL;SIGN_EXPORTS;%(PreprocessorDefinitions) 111 | true 112 | include 113 | MultiThreadedDebug 114 | ProgramDatabase 115 | 116 | 117 | Windows 118 | true 119 | C:/Program Files/Dyalog/Dyalog APL-64 18.0 Unicode/dwa/lib 120 | libdyalog.lib;dwa_static.lib;htmlhelp.lib;user32.lib;gdi32.lib;msimg32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;secur32.lib;oleaut32.lib;ole32.lib;oledlg.lib;kernel32.lib;uuid.lib;shell32.lib;shlwapi.lib;psapi.lib;advapi32.lib;winspool.lib;wsock32.lib;version.lib;rpcrt4.lib;mapi32.lib;imm32.lib;ws2_32.lib;uxtheme.lib;gdiplus.lib;powrprof.lib;%(AdditionalDependencies) 121 | 122 | 123 | 124 | 125 | Level3 126 | 127 | 128 | MaxSpeed 129 | true 130 | true 131 | include 132 | MultiThreaded 133 | WIN32;NDEBUG;_WINDOWS;_USRDLL;SIGN_EXPORTS;%(PreprocessorDefinitions) 134 | true 135 | 136 | 137 | Windows 138 | true 139 | true 140 | true 141 | C:/Program Files (x86)/Dyalog/Dyalog APL 18.0 Unicode/dwa/lib 142 | libdyalog.lib;dwa_static.lib;htmlhelp.lib;user32.lib;gdi32.lib;msimg32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;secur32.lib;oleaut32.lib;ole32.lib;oledlg.lib;kernel32.lib;uuid.lib;shell32.lib;shlwapi.lib;psapi.lib;advapi32.lib;winspool.lib;wsock32.lib;version.lib;rpcrt4.lib;mapi32.lib;imm32.lib;ws2_32.lib;uxtheme.lib;gdiplus.lib;powrprof.lib;%(AdditionalDependencies) 143 | 144 | 145 | 146 | 147 | Level3 148 | 149 | 150 | MaxSpeed 151 | true 152 | true 153 | include 154 | NDEBUG;_WINDOWS;_USRDLL;SIGN_EXPORTS;%(PreprocessorDefinitions) 155 | true 156 | MultiThreaded 157 | 158 | 159 | Windows 160 | true 161 | true 162 | true 163 | C:/Program Files/Dyalog/Dyalog APL-64 18.0 Unicode/dwa/lib 164 | libdyalog.lib;dwa_static.lib;htmlhelp.lib;user32.lib;gdi32.lib;msimg32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;secur32.lib;oleaut32.lib;ole32.lib;oledlg.lib;kernel32.lib;uuid.lib;shell32.lib;shlwapi.lib;psapi.lib;advapi32.lib;winspool.lib;wsock32.lib;version.lib;rpcrt4.lib;mapi32.lib;imm32.lib;ws2_32.lib;uxtheme.lib;gdiplus.lib;powrprof.lib;%(AdditionalDependencies) 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | include 174 | PROJECT_DIR=L\"$(projectdir)\" 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | -------------------------------------------------------------------------------- /sign/sign/sign/sign.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | {{ec21b515-5096-47c3-b369-5da87cb157e4}} 23 | Win32Proj 24 | sign 25 | 8.1 26 | 27 | 28 | 29 | DynamicLibrary 30 | true 31 | v140 32 | Unicode 33 | 34 | 35 | DynamicLibrary 36 | false 37 | v140 38 | true 39 | Unicode 40 | 41 | 42 | DynamicLibrary 43 | true 44 | v140 45 | Unicode 46 | 47 | 48 | DynamicLibrary 49 | false 50 | v140 51 | true 52 | Unicode 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | true 74 | false 75 | 76 | 77 | true 78 | 79 | 80 | false 81 | 82 | 83 | false 84 | 85 | 86 | 87 | 88 | 89 | Level3 90 | Disabled 91 | WIN32;_DEBUG;_WINDOWS;_USRDLL;SIGN_EXPORTS;%(PreprocessorDefinitions) 92 | true 93 | include 94 | MultiThreadedDebug 95 | ProgramDatabase 96 | 97 | 98 | Windows 99 | true 100 | C:/Program Files (x86)/Dyalog/Dyalog APL 18.0 Unicode/dwa/lib 101 | libdyalog.lib;dwa_static.lib;htmlhelp.lib;user32.lib;gdi32.lib;msimg32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;secur32.lib;oleaut32.lib;ole32.lib;oledlg.lib;kernel32.lib;uuid.lib;shell32.lib;shlwapi.lib;psapi.lib;advapi32.lib;winspool.lib;wsock32.lib;version.lib;rpcrt4.lib;mapi32.lib;imm32.lib;ws2_32.lib;uxtheme.lib;gdiplus.lib;powrprof.lib;%(AdditionalDependencies) 102 | 103 | 104 | 105 | 106 | 107 | 108 | Level3 109 | Disabled 110 | _DEBUG;_WINDOWS;_USRDLL;SIGN_EXPORTS;%(PreprocessorDefinitions) 111 | true 112 | include 113 | MultiThreadedDebug 114 | ProgramDatabase 115 | 116 | 117 | Windows 118 | true 119 | C:/Program Files/Dyalog/Dyalog APL-64 18.0 Unicode/dwa/lib 120 | libdyalog.lib;dwa_static.lib;htmlhelp.lib;user32.lib;gdi32.lib;msimg32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;secur32.lib;oleaut32.lib;ole32.lib;oledlg.lib;kernel32.lib;uuid.lib;shell32.lib;shlwapi.lib;psapi.lib;advapi32.lib;winspool.lib;wsock32.lib;version.lib;rpcrt4.lib;mapi32.lib;imm32.lib;ws2_32.lib;uxtheme.lib;gdiplus.lib;powrprof.lib;%(AdditionalDependencies) 121 | 122 | 123 | 124 | 125 | Level3 126 | 127 | 128 | MaxSpeed 129 | true 130 | true 131 | include 132 | MultiThreaded 133 | WIN32;NDEBUG;_WINDOWS;_USRDLL;SIGN_EXPORTS;%(PreprocessorDefinitions) 134 | true 135 | 136 | 137 | Windows 138 | true 139 | true 140 | true 141 | C:/Program Files (x86)/Dyalog/Dyalog APL 18.0 Unicode/dwa/lib 142 | libdyalog.lib;dwa_static.lib;htmlhelp.lib;user32.lib;gdi32.lib;msimg32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;secur32.lib;oleaut32.lib;ole32.lib;oledlg.lib;kernel32.lib;uuid.lib;shell32.lib;shlwapi.lib;psapi.lib;advapi32.lib;winspool.lib;wsock32.lib;version.lib;rpcrt4.lib;mapi32.lib;imm32.lib;ws2_32.lib;uxtheme.lib;gdiplus.lib;powrprof.lib;%(AdditionalDependencies) 143 | 144 | 145 | 146 | 147 | Level3 148 | 149 | 150 | MaxSpeed 151 | true 152 | true 153 | include 154 | NDEBUG;_WINDOWS;_USRDLL;SIGN_EXPORTS;%(PreprocessorDefinitions) 155 | true 156 | MultiThreaded 157 | 158 | 159 | Windows 160 | true 161 | true 162 | true 163 | C:/Program Files/Dyalog/Dyalog APL-64 18.0 Unicode/dwa/lib 164 | libdyalog.lib;dwa_static.lib;htmlhelp.lib;user32.lib;gdi32.lib;msimg32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;secur32.lib;oleaut32.lib;ole32.lib;oledlg.lib;kernel32.lib;uuid.lib;shell32.lib;shlwapi.lib;psapi.lib;advapi32.lib;winspool.lib;wsock32.lib;version.lib;rpcrt4.lib;mapi32.lib;imm32.lib;ws2_32.lib;uxtheme.lib;gdiplus.lib;powrprof.lib;%(AdditionalDependencies) 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | include 174 | PROJECT_DIR=L\"$(projectdir)\" 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | -------------------------------------------------------------------------------- /helloworld/helloworld/helloworld/helloworld.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | Debug 14 | x64 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | {{404939f2-6ff5-4bf2-ae7c-932aa77296dd}} 23 | Win32Proj 24 | helloworld 25 | 8.1 26 | 27 | 28 | 29 | DynamicLibrary 30 | true 31 | v140 32 | Unicode 33 | 34 | 35 | DynamicLibrary 36 | false 37 | v140 38 | true 39 | Unicode 40 | 41 | 42 | DynamicLibrary 43 | true 44 | v140 45 | Unicode 46 | 47 | 48 | DynamicLibrary 49 | false 50 | v140 51 | true 52 | Unicode 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | true 74 | false 75 | 76 | 77 | true 78 | 79 | 80 | false 81 | 82 | 83 | false 84 | 85 | 86 | 87 | 88 | 89 | Level3 90 | Disabled 91 | WIN32;_DEBUG;_WINDOWS;_USRDLL;SIGN_EXPORTS;%(PreprocessorDefinitions) 92 | true 93 | include 94 | MultiThreadedDebug 95 | ProgramDatabase 96 | 97 | 98 | Windows 99 | true 100 | C:/Program Files (x86)/Dyalog/Dyalog APL 18.0 Unicode/dwa/lib 101 | libdyalog.lib;dwa_static.lib;htmlhelp.lib;user32.lib;gdi32.lib;msimg32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;secur32.lib;oleaut32.lib;ole32.lib;oledlg.lib;kernel32.lib;uuid.lib;shell32.lib;shlwapi.lib;psapi.lib;advapi32.lib;winspool.lib;wsock32.lib;version.lib;rpcrt4.lib;mapi32.lib;imm32.lib;ws2_32.lib;uxtheme.lib;gdiplus.lib;powrprof.lib;%(AdditionalDependencies) 102 | 103 | 104 | 105 | 106 | 107 | 108 | Level3 109 | Disabled 110 | _DEBUG;_WINDOWS;_USRDLL;SIGN_EXPORTS;%(PreprocessorDefinitions) 111 | true 112 | include 113 | MultiThreadedDebug 114 | ProgramDatabase 115 | 116 | 117 | Windows 118 | true 119 | C:/Program Files/Dyalog/Dyalog APL-64 18.0 Unicode/dwa/lib 120 | libdyalog.lib;dwa_static.lib;htmlhelp.lib;user32.lib;gdi32.lib;msimg32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;secur32.lib;oleaut32.lib;ole32.lib;oledlg.lib;kernel32.lib;uuid.lib;shell32.lib;shlwapi.lib;psapi.lib;advapi32.lib;winspool.lib;wsock32.lib;version.lib;rpcrt4.lib;mapi32.lib;imm32.lib;ws2_32.lib;uxtheme.lib;gdiplus.lib;powrprof.lib;%(AdditionalDependencies) 121 | 122 | 123 | 124 | 125 | Level3 126 | 127 | 128 | MaxSpeed 129 | true 130 | true 131 | include 132 | MultiThreaded 133 | WIN32;NDEBUG;_WINDOWS;_USRDLL;SIGN_EXPORTS;%(PreprocessorDefinitions) 134 | true 135 | 136 | 137 | Windows 138 | true 139 | true 140 | true 141 | C:/Program Files (x86)/Dyalog/Dyalog APL 18.0 Unicode/dwa/lib 142 | libdyalog.lib;dwa_static.lib;htmlhelp.lib;user32.lib;gdi32.lib;msimg32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;secur32.lib;oleaut32.lib;ole32.lib;oledlg.lib;kernel32.lib;uuid.lib;shell32.lib;shlwapi.lib;psapi.lib;advapi32.lib;winspool.lib;wsock32.lib;version.lib;rpcrt4.lib;mapi32.lib;imm32.lib;ws2_32.lib;uxtheme.lib;gdiplus.lib;powrprof.lib;%(AdditionalDependencies) 143 | 144 | 145 | 146 | 147 | Level3 148 | 149 | 150 | MaxSpeed 151 | true 152 | true 153 | include 154 | NDEBUG;_WINDOWS;_USRDLL;SIGN_EXPORTS;%(PreprocessorDefinitions) 155 | true 156 | MultiThreaded 157 | 158 | 159 | Windows 160 | true 161 | true 162 | true 163 | C:/Program Files/Dyalog/Dyalog APL-64 18.0 Unicode/dwa/lib 164 | libdyalog.lib;dwa_static.lib;htmlhelp.lib;user32.lib;gdi32.lib;msimg32.lib;comctl32.lib;comdlg32.lib;crypt32.lib;secur32.lib;oleaut32.lib;ole32.lib;oledlg.lib;kernel32.lib;uuid.lib;shell32.lib;shlwapi.lib;psapi.lib;advapi32.lib;winspool.lib;wsock32.lib;version.lib;rpcrt4.lib;mapi32.lib;imm32.lib;ws2_32.lib;uxtheme.lib;gdiplus.lib;powrprof.lib;%(AdditionalDependencies) 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | include 174 | PROJECT_DIR=L\"$(projectdir)\" 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | -------------------------------------------------------------------------------- /qa/qa/call_qa/call_qa.cpp: -------------------------------------------------------------------------------- 1 | extern "C" { 2 | #if defined(_MSC_VER) 3 | #define LIBCALL __cdecl 4 | #include 5 | #else 6 | #define LIBCALL 7 | #define WINAPI 8 | #endif 9 | #if __APPLE__ 10 | #include 11 | #endif 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | } 18 | 19 | #define AV_QUAD 0x2395 20 | #define AV_LEFT 0x2190 21 | 22 | #define EWSFULL 1 23 | #define ESYNTAX 2 24 | #define EINDEX 3 25 | #define ERANK 4 26 | #define ELENGTH 5 27 | #define EVALUE 6 28 | #define ELIMIT 10 29 | #define EDOMAIN 11 30 | #define EHOLD 12 31 | #define EOPTION 13 32 | #define ENONCE 16 33 | #define EACCESS 17 34 | 35 | #define AP_NULLTERM 0x08000000 36 | #define AP_SIZED 0x00800000 37 | #define AP_ALLOC 0x00400000 38 | 39 | typedef unsigned int uint; 40 | typedef unsigned char ubyte; 41 | 42 | extern int LIBCALL Start(uint runtime,const wchar_t *user_param); 43 | 44 | extern int LIBCALL NumericArray(double start, int32_t len, int8_t *out); 45 | extern int LIBCALL NumericArray(double start, int32_t len, int16_t *out); 46 | extern int LIBCALL NumericArray(double start, int32_t len, int32_t *out); 47 | extern int LIBCALL NumericArray(double start, int32_t len, int64_t *out); 48 | extern int LIBCALL NumericArray(double start, int32_t len, double *out); 49 | 50 | extern int LIBCALL ScalarAdd(int16_t,int16_t,int32_t*); 51 | extern int LIBCALL ScalarAdd(int16_t,int16_t,int16_t*); 52 | extern int LIBCALL ScalarAdd(int16_t,int16_t,int8_t*); 53 | extern int LIBCALL enable_asserts(int); 54 | 55 | extern int LIBCALL UCStoCHARArray(int32_t *,size_t, char *, size_t); 56 | extern int LIBCALL UCStoCHARArray(int32_t *,size_t, uint8_t *, size_t); 57 | extern int LIBCALL UCStoCHARArray(int32_t *,size_t, uint16_t *, size_t); 58 | extern int LIBCALL UCStoCHARArray(int32_t *,size_t, wchar_t *, size_t); 59 | 60 | extern int LIBCALL UCStoCHAR(int32_t,wchar_t *); 61 | extern int LIBCALL UCStoCHAR(int32_t,char *); 62 | 63 | extern int LIBCALL Reflect(int8_t *,size_t, int8_t *, size_t); 64 | extern int LIBCALL Reflect(int16_t *,size_t, int16_t *, size_t); 65 | extern int LIBCALL Reflect(int32_t *,size_t, int32_t *, size_t); 66 | 67 | extern int LIBCALL ReflectChar(char *p1, size_t len, uint iflags,char *out, size_t olen, uint flags); 68 | extern int LIBCALL ReflectChar(uint8_t *p1, size_t len, uint iflags,uint8_t *out, size_t olen, uint flags); 69 | extern int LIBCALL ReflectChar(uint16_t *p1, size_t len,uint iflags, uint16_t *out, size_t olen, uint flags); 70 | extern int LIBCALL ReflectChar(uint32_t *p1, size_t len,uint iflags, uint32_t *out, size_t olen, uint flags); 71 | extern int LIBCALL ReflectChar(wchar_t *p1, size_t len,uint iflags, wchar_t *out, size_t olen, unsigned int flags); 72 | 73 | extern int LIBCALL ReflectLengthShort(void); 74 | extern int LIBCALL ReflectLengthLong(void); 75 | 76 | extern int LIBCALL NoAPLFunction(const wchar_t *name); 77 | 78 | extern int LIBCALL Signal(int n); 79 | extern int LIBCALL Error(int n); 80 | 81 | extern int LIBCALL Deserialize(wchar_t *string,size_t len, ubyte *vp); 82 | extern int LIBCALL SerializeAndAlloc(wchar_t *string, ubyte **vp); 83 | 84 | extern int LIBCALL GetEnv(const wchar_t *name, wchar_t *value, size_t len); 85 | extern int LIBCALL Execute(wchar_t *name, wchar_t *value, size_t len); 86 | 87 | 88 | #define ARRAY(...) __VA_ARGS__ 89 | 90 | #define laffirm(expr,l) ((expr)?1:fail(#expr,l)) 91 | #define affirm(expr) laffirm(expr,__LINE__) 92 | 93 | static int RETN=0; 94 | 95 | static int fail(const char *str, int line) 96 | { 97 | RETN=1; 98 | char msg[256]; 99 | sprintf(msg, "QA Failure: \"%s\" is false on line %i\n", str, line); 100 | #if defined (_MSC_VER) 101 | OutputDebugStringA(msg); 102 | #endif 103 | printf("%s",msg); 104 | return 0; 105 | } 106 | 107 | template 108 | int check_array(T *p1, T*p2, int64_t len,int line) 109 | { 110 | for (int64_t i=0;i 210*1024*1024); 268 | #endif 269 | } 270 | 271 | 272 | 273 | 274 | { 275 | // persistent data 276 | wchar_t result[2049]; 277 | wchar_t str[2049]; 278 | wchar_t *expr; 279 | 280 | err = Execute(add_tid(L"GLOBAL%i",str,2048), result, 2048); affirm(err == 6); 281 | 282 | expr=add_tid(L"GLOBAL%i+'THIS_IS_A_TEST'",str,2048); *wcsstr(expr,L"+")=AV_LEFT; 283 | err = Execute(expr,result, 2048); affirm(err == 0); 284 | err = Execute(add_tid(L"GLOBAL%i", str,2048), result, 2048); affirm(err == 0); affirm(0 == wcscmp(result, L"THIS_IS_A_TEST")); 285 | 286 | expr=add_tid(L"+EX'GLOBAL%i'", str,2048); *wcsstr(expr,L"+")=AV_QUAD; 287 | err = Execute(expr, result, 2048); affirm(err == 0); 288 | 289 | err = Execute(add_tid(L"GLOBAL%i", str,2048), result, 2048); affirm(err == 6); 290 | 291 | 292 | } 293 | 294 | return 0; 295 | } 296 | 297 | int LIBCALL main(int argc, char *argv[]) 298 | { 299 | affirm(sizeof(int16_t) == sizeof(short)); 300 | affirm(sizeof(int32_t) == sizeof(int)); 301 | affirm(sizeof(int8_t) == sizeof(signed char)); 302 | 303 | 304 | #if __APPLE__ 305 | uselocale(newlocale(LC_CTYPE_MASK, "UTF-8", 0)); // set per-thread locale 306 | #endif 307 | 308 | #if defined(_MSC_VER) 309 | // CYGWIN issue: https://github.com/mintty/mintty/issues/218 310 | // doesn't change behaviour in CMD.EXE 311 | setvbuf(stdout, 0, _IONBF, 0); 312 | #endif 313 | enable_asserts(0); 314 | wchar_t user_param[256]; 315 | wcscpy(user_param,L"USER_PARAM=user_param"); 316 | Start(1,user_param); 317 | wcscpy(user_param,L"overwritten"); 318 | 319 | #if defined(_MSC_VER) 320 | #define THREAD_COUNT 5 321 | HANDLE threads[THREAD_COUNT]; 322 | 323 | for (int i=0;i