From 1b9e0155c8ffad6006ff70acf49d53b003e3a4b3 Mon Sep 17 00:00:00 2001 From: Scott Duensing Date: Fri, 27 Mar 2026 01:01:38 -0500 Subject: [PATCH] Dynamic library support added to BASIC. --- dvxbasic/compiler/opcodes.h | 46 ++++- dvxbasic/compiler/parser.c | 172 +++++++++++++++- dvxbasic/compiler/symtab.h | 3 + dvxbasic/runtime/values.c | 8 + dvxbasic/runtime/values.h | 2 + dvxbasic/runtime/vm.c | 398 ++++++++++++++++++++++++++++++++++++ dvxbasic/runtime/vm.h | 124 +++++++++++ dvxbasic/test_compiler | Bin 146984 -> 151328 bytes dvxbasic/test_compiler.c | 58 ++++++ 9 files changed, 801 insertions(+), 10 deletions(-) diff --git a/dvxbasic/compiler/opcodes.h b/dvxbasic/compiler/opcodes.h index a2018e3..f64f691 100644 --- a/dvxbasic/compiler/opcodes.h +++ b/dvxbasic/compiler/opcodes.h @@ -18,6 +18,7 @@ #define BAS_TYPE_BOOLEAN 5 // True (-1) or False (0) #define BAS_TYPE_ARRAY 6 // ref-counted array #define BAS_TYPE_UDT 7 // ref-counted user-defined type +#define BAS_TYPE_OBJECT 8 // opaque host object (form, control, etc.) // ============================================================ // Stack operations @@ -162,18 +163,33 @@ // ============================================================ // UI / Event (used when form system is active) // ============================================================ +// +// All UI opcodes are name-based: control references, property names, +// method names, and form names are strings resolved at runtime. +// This allows third-party widget DXEs and new properties to work +// without recompiling the BASIC runtime. +// +// Stack convention: +// LOAD_PROP: ... controlRef propNameStr -> ... value +// STORE_PROP: ... controlRef propNameStr value -> ... +// CALL_METHOD: ... controlRef methodNameStr [args] -> ... [result] +// LOAD_FORM: ... formNameStr -> ... formRef +// CREATE_CTRL: ... formRef typeNameStr nameStr -> ... controlRef -#define OP_LOAD_PROP 0x80 // [uint16 ctrl] [uint16 prop] push property value -#define OP_STORE_PROP 0x81 // [uint16 ctrl] [uint16 prop] pop to property -#define OP_CALL_METHOD 0x82 // [uint16 ctrl] [uint16 method] [uint8 argc] -#define OP_LOAD_FORM 0x83 // [uint16 formIdx] -#define OP_UNLOAD_FORM 0x84 // [uint16 formIdx] -#define OP_SHOW_FORM 0x85 // [uint16 formIdx] [uint8 modal] -#define OP_HIDE_FORM 0x86 // [uint16 formIdx] +#define OP_LOAD_PROP 0x80 // pop propName, pop ctrlRef, push property value +#define OP_STORE_PROP 0x81 // pop value, pop propName, pop ctrlRef, set property +#define OP_CALL_METHOD 0x82 // [uint8 argc] pop methodName, pop ctrlRef, pop args, push result +#define OP_LOAD_FORM 0x83 // pop formName string, push form reference +#define OP_UNLOAD_FORM 0x84 // pop formRef, unload it +#define OP_SHOW_FORM 0x85 // [uint8 modal] pop formRef, show it +#define OP_HIDE_FORM 0x86 // pop formRef, hide it #define OP_DO_EVENTS 0x87 -#define OP_MSGBOX 0x88 // [uint8 flags] message on stack -#define OP_INPUTBOX 0x89 // prompt on stack, push result +#define OP_MSGBOX 0x88 // [uint8 flags] pop message string, push result +#define OP_INPUTBOX 0x89 // pop default, pop title, pop prompt, push result string #define OP_ME_REF 0x8A // push current form reference +#define OP_CREATE_CTRL 0x8B // pop name, pop typeName, pop formRef, push controlRef +#define OP_FIND_CTRL 0x8C // pop ctrlName, pop formRef, push controlRef +#define OP_CTRL_REF 0x8D // [uint16 nameConstIdx] push named control on current form // ============================================================ // Array / misc @@ -278,6 +294,18 @@ #define OP_SHELL 0xCB // pop command string, call system(), push return value #define OP_COMPARE_MODE 0xCC // [uint8 mode] set string compare mode (0=binary, 1=text) +// ============================================================ +// External library calls (DECLARE LIBRARY) +// ============================================================ +// +// Calls native functions exported by dynamically loaded libraries. +// The VM resolves library + function name on first call via a host +// callback, caches the result, and marshals arguments through a +// second callback. This allows BASIC programs to use any library +// (serial, security, third-party) without recompiling the runtime. + +#define OP_CALL_EXTERN 0xCD // [uint16 libNameIdx] [uint16 funcNameIdx] [uint8 argc] [uint8 retType] + // ============================================================ // Halt // ============================================================ diff --git a/dvxbasic/compiler/parser.c b/dvxbasic/compiler/parser.c index 4b410c2..96db8d1 100644 --- a/dvxbasic/compiler/parser.c +++ b/dvxbasic/compiler/parser.c @@ -492,6 +492,17 @@ static void emitFunctionCall(BasParserT *p, BasSymbolT *sym) { return; } + // External library function: emit OP_CALL_EXTERN + if (sym->isExtern) { + basEmit8(&p->cg, OP_CALL_EXTERN); + basEmitU16(&p->cg, sym->externLibIdx); + basEmitU16(&p->cg, sym->externFuncIdx); + basEmit8(&p->cg, (uint8_t)argc); + basEmit8(&p->cg, sym->dataType); + return; + } + + // Internal BASIC function: emit OP_CALL // baseSlot: functions reserve slot 0 for the return value uint8_t baseSlot = (sym->kind == SYM_FUNCTION) ? 1 : 0; @@ -1574,11 +1585,20 @@ static void parseData(BasParserT *p) { } +static void parseDeclareLibrary(BasParserT *p); + static void parseDeclare(BasParserT *p) { // DECLARE SUB name(params) // DECLARE FUNCTION name(params) AS type + // DECLARE LIBRARY "name" ... END DECLARE advance(p); // consume DECLARE + // DECLARE LIBRARY block + if (checkKeyword(p, "LIBRARY")) { + parseDeclareLibrary(p); + return; + } + BasSymKindE kind; if (check(p, TOK_SUB)) { @@ -1588,7 +1608,7 @@ static void parseDeclare(BasParserT *p) { kind = SYM_FUNCTION; advance(p); } else { - error(p, "Expected SUB or FUNCTION after DECLARE"); + error(p, "Expected SUB, FUNCTION, or LIBRARY after DECLARE"); return; } @@ -1682,6 +1702,156 @@ static void parseDeclare(BasParserT *p) { } +// ============================================================ +// parseDeclareLibrary -- DECLARE LIBRARY "name" / END DECLARE +// ============================================================ +// +// Declares external native functions from a dynamically loaded +// library. The library name is stored in the constant pool. +// Each function inside the block is registered as an extern symbol. +// At runtime, OP_CALL_EXTERN resolves the function via the host's +// resolveExtern callback (typically dlsym). + +static void parseDeclareLibrary(BasParserT *p) { + advance(p); // consume LIBRARY + + if (!check(p, TOK_STRING_LIT)) { + errorExpected(p, "library name string"); + return; + } + + uint16_t libNameIdx = basAddConstant(&p->cg, p->lex.token.text, p->lex.token.textLen); + advance(p); + + skipNewlines(p); + + // Parse function declarations until END DECLARE + while (!p->hasError && !check(p, TOK_EOF)) { + skipNewlines(p); + + // Check for END DECLARE + if (check(p, TOK_END)) { + advance(p); + + if (check(p, TOK_DECLARE)) { + advance(p); + break; + } + + error(p, "Expected DECLARE after END in DECLARE LIBRARY block"); + return; + } + + // Must be DECLARE SUB or DECLARE FUNCTION + if (!check(p, TOK_DECLARE)) { + errorExpected(p, "DECLARE or END DECLARE"); + return; + } + + advance(p); // consume DECLARE + + BasSymKindE kind; + + if (check(p, TOK_SUB)) { + kind = SYM_SUB; + advance(p); + } else if (check(p, TOK_FUNCTION)) { + kind = SYM_FUNCTION; + advance(p); + } else { + error(p, "Expected SUB or FUNCTION in DECLARE LIBRARY block"); + return; + } + + if (!check(p, TOK_IDENT)) { + errorExpected(p, "function name"); + return; + } + + char funcName[BAS_MAX_TOKEN_LEN]; + strncpy(funcName, p->lex.token.text, BAS_MAX_TOKEN_LEN - 1); + funcName[BAS_MAX_TOKEN_LEN - 1] = '\0'; + uint16_t funcNameIdx = basAddConstant(&p->cg, funcName, (int32_t)strlen(funcName)); + advance(p); + + // Parse parameter list + int32_t paramCount = 0; + uint8_t paramTypes[BAS_MAX_PARAMS]; + bool paramByVal[BAS_MAX_PARAMS]; + + if (match(p, TOK_LPAREN)) { + while (!check(p, TOK_RPAREN) && !check(p, TOK_EOF) && !p->hasError) { + if (paramCount > 0) { + expect(p, TOK_COMMA); + } + + bool byVal = match(p, TOK_BYVAL); + + if (!check(p, TOK_IDENT)) { + errorExpected(p, "parameter name"); + return; + } + + char paramName[BAS_MAX_TOKEN_LEN]; + strncpy(paramName, p->lex.token.text, BAS_MAX_TOKEN_LEN - 1); + paramName[BAS_MAX_TOKEN_LEN - 1] = '\0'; + advance(p); + + uint8_t pdt = suffixToType(paramName); + + if (match(p, TOK_AS)) { + pdt = resolveTypeName(p); + } + + if (paramCount < BAS_MAX_PARAMS) { + paramTypes[paramCount] = pdt; + paramByVal[paramCount] = byVal; + } + + paramCount++; + } + + expect(p, TOK_RPAREN); + } + + // Return type for FUNCTION + uint8_t returnType = suffixToType(funcName); + + if (kind == SYM_FUNCTION && match(p, TOK_AS)) { + returnType = resolveTypeName(p); + } + + if (p->hasError) { + return; + } + + // Register as extern symbol + BasSymbolT *sym = basSymTabAdd(&p->sym, funcName, kind, returnType); + + if (sym == NULL) { + sym = basSymTabFind(&p->sym, funcName); + + if (sym == NULL) { + error(p, "Symbol table full"); + return; + } + } + + sym->scope = SCOPE_GLOBAL; + sym->isDefined = true; + sym->isExtern = true; + sym->externLibIdx = libNameIdx; + sym->externFuncIdx = funcNameIdx; + sym->paramCount = paramCount; + + for (int32_t i = 0; i < paramCount && i < BAS_MAX_PARAMS; i++) { + sym->paramTypes[i] = paramTypes[i]; + sym->paramByVal[i] = paramByVal[i]; + } + } +} + + static void parseDef(BasParserT *p) { // DEF FNname(params) = expression advance(p); // consume DEF diff --git a/dvxbasic/compiler/symtab.h b/dvxbasic/compiler/symtab.h index e4cf59a..6c6ca64 100644 --- a/dvxbasic/compiler/symtab.h +++ b/dvxbasic/compiler/symtab.h @@ -62,8 +62,11 @@ typedef struct { bool isDefined; // false = forward-declared bool isArray; bool isShared; + bool isExtern; // true = external library function (DECLARE LIBRARY) int32_t udtTypeId; // for variables of BAS_TYPE_UDT: index of TYPE_DEF symbol int32_t fixedLen; // for STRING * n: fixed length (0 = variable-length) + uint16_t externLibIdx; // constant pool index for library name (if isExtern) + uint16_t externFuncIdx; // constant pool index for function name (if isExtern) // For SUB/FUNCTION: parameter info int32_t paramCount; diff --git a/dvxbasic/runtime/values.c b/dvxbasic/runtime/values.c index 3937491..1615e8a 100644 --- a/dvxbasic/runtime/values.c +++ b/dvxbasic/runtime/values.c @@ -353,6 +353,14 @@ BasValueT basValBool(bool v) { } +BasValueT basValObject(void *obj) { + BasValueT val; + val.type = BAS_TYPE_OBJECT; + val.objVal = obj; + return val; +} + + BasValueT basValCopy(BasValueT v) { if (v.type == BAS_TYPE_STRING && v.strVal) { basStringRef(v.strVal); diff --git a/dvxbasic/runtime/values.h b/dvxbasic/runtime/values.h index d403278..7f49088 100644 --- a/dvxbasic/runtime/values.h +++ b/dvxbasic/runtime/values.h @@ -130,6 +130,7 @@ struct BasValueTag { int16_t boolVal; // BAS_TYPE_BOOLEAN (True=-1, False=0) BasArrayT *arrVal; // BAS_TYPE_ARRAY (ref-counted) BasUdtT *udtVal; // BAS_TYPE_UDT (ref-counted) + void *objVal; // BAS_TYPE_OBJECT (opaque host pointer) }; }; @@ -141,6 +142,7 @@ BasValueT basValDouble(double v); BasValueT basValString(BasStringT *s); BasValueT basValStringFromC(const char *text); BasValueT basValBool(bool v); +BasValueT basValObject(void *obj); // Copy a value (increments string refcount if applicable). BasValueT basValCopy(BasValueT v); diff --git a/dvxbasic/runtime/vm.c b/dvxbasic/runtime/vm.c index 6edf77e..bd396fa 100644 --- a/dvxbasic/runtime/vm.c +++ b/dvxbasic/runtime/vm.c @@ -207,6 +207,15 @@ void basVmSetDoEventsCallback(BasVmT *vm, BasDoEventsFnT fn, void *ctx) { } +// ============================================================ +// basVmSetCurrentForm +// ============================================================ + +void basVmSetCurrentForm(BasVmT *vm, void *formRef) { + vm->currentForm = formRef; +} + + // ============================================================ // basVmSetInputCallback // ============================================================ @@ -227,6 +236,20 @@ void basVmSetPrintCallback(BasVmT *vm, BasPrintFnT fn, void *ctx) { } +// ============================================================ +// basVmSetUiCallbacks +// ============================================================ + +void basVmSetExternCallbacks(BasVmT *vm, const BasExternCallbacksT *ext) { + vm->ext = *ext; +} + + +void basVmSetUiCallbacks(BasVmT *vm, const BasUiCallbacksT *ui) { + vm->ui = *ui; +} + + // ============================================================ // basVmStep -- execute one instruction // ============================================================ @@ -2101,6 +2124,381 @@ BasVmResultE basVmStep(BasVmT *vm) { vm->running = false; return BAS_VM_HALTED; + // ============================================================ + // UI / Event opcodes (name-based resolution) + // ============================================================ + + case OP_LOAD_PROP: { + BasValueT propNameVal; + BasValueT ctrlRefVal; + + if (!pop(vm, &propNameVal) || !pop(vm, &ctrlRefVal)) { + return BAS_VM_STACK_UNDERFLOW; + } + + if (vm->ui.getProp && ctrlRefVal.type == BAS_TYPE_OBJECT) { + BasValueT sv = basValToString(propNameVal); + BasValueT result = vm->ui.getProp(vm->ui.ctx, ctrlRefVal.objVal, sv.strVal->data); + basValRelease(&sv); + push(vm, result); + } else { + push(vm, basValInteger(0)); + } + + basValRelease(&propNameVal); + basValRelease(&ctrlRefVal); + break; + } + + case OP_STORE_PROP: { + BasValueT value; + BasValueT propNameVal; + BasValueT ctrlRefVal; + + if (!pop(vm, &value) || !pop(vm, &propNameVal) || !pop(vm, &ctrlRefVal)) { + return BAS_VM_STACK_UNDERFLOW; + } + + if (vm->ui.setProp && ctrlRefVal.type == BAS_TYPE_OBJECT) { + BasValueT sv = basValToString(propNameVal); + vm->ui.setProp(vm->ui.ctx, ctrlRefVal.objVal, sv.strVal->data, value); + basValRelease(&sv); + } + + basValRelease(&value); + basValRelease(&propNameVal); + basValRelease(&ctrlRefVal); + break; + } + + case OP_CALL_METHOD: { + uint8_t argc = readUint8(vm); + BasValueT methodNameVal; + BasValueT ctrlRefVal; + + // Pop args in reverse + BasValueT args[16]; + int32_t argCount = argc < 16 ? argc : 16; + + for (int32_t i = argCount - 1; i >= 0; i--) { + if (!pop(vm, &args[i])) { + return BAS_VM_STACK_UNDERFLOW; + } + } + + if (!pop(vm, &methodNameVal) || !pop(vm, &ctrlRefVal)) { + for (int32_t i = 0; i < argCount; i++) { + basValRelease(&args[i]); + } + + return BAS_VM_STACK_UNDERFLOW; + } + + if (vm->ui.callMethod && ctrlRefVal.type == BAS_TYPE_OBJECT) { + BasValueT sv = basValToString(methodNameVal); + BasValueT result = vm->ui.callMethod(vm->ui.ctx, ctrlRefVal.objVal, sv.strVal->data, args, argCount); + basValRelease(&sv); + push(vm, result); + } else { + push(vm, basValInteger(0)); + } + + for (int32_t i = 0; i < argCount; i++) { + basValRelease(&args[i]); + } + + basValRelease(&methodNameVal); + basValRelease(&ctrlRefVal); + break; + } + + case OP_LOAD_FORM: { + BasValueT nameVal; + + if (!pop(vm, &nameVal)) { + return BAS_VM_STACK_UNDERFLOW; + } + + void *formRef = NULL; + + if (vm->ui.loadForm) { + BasValueT sv = basValToString(nameVal); + formRef = vm->ui.loadForm(vm->ui.ctx, sv.strVal->data); + basValRelease(&sv); + } + + basValRelease(&nameVal); + push(vm, basValObject(formRef)); + break; + } + + case OP_UNLOAD_FORM: { + BasValueT formVal; + + if (!pop(vm, &formVal)) { + return BAS_VM_STACK_UNDERFLOW; + } + + if (vm->ui.unloadForm && formVal.type == BAS_TYPE_OBJECT) { + vm->ui.unloadForm(vm->ui.ctx, formVal.objVal); + } + + basValRelease(&formVal); + break; + } + + case OP_SHOW_FORM: { + uint8_t modal = readUint8(vm); + BasValueT formVal; + + if (!pop(vm, &formVal)) { + return BAS_VM_STACK_UNDERFLOW; + } + + if (vm->ui.showForm && formVal.type == BAS_TYPE_OBJECT) { + vm->ui.showForm(vm->ui.ctx, formVal.objVal, modal != 0); + } + + basValRelease(&formVal); + break; + } + + case OP_HIDE_FORM: { + BasValueT formVal; + + if (!pop(vm, &formVal)) { + return BAS_VM_STACK_UNDERFLOW; + } + + if (vm->ui.hideForm && formVal.type == BAS_TYPE_OBJECT) { + vm->ui.hideForm(vm->ui.ctx, formVal.objVal); + } + + basValRelease(&formVal); + break; + } + + case OP_MSGBOX: { + uint8_t flags = readUint8(vm); + BasValueT msgVal; + + if (!pop(vm, &msgVal)) { + return BAS_VM_STACK_UNDERFLOW; + } + + int32_t result = 1; // default OK + + if (vm->ui.msgBox) { + BasValueT sv = basValToString(msgVal); + result = vm->ui.msgBox(vm->ui.ctx, sv.strVal->data, flags); + basValRelease(&sv); + } + + basValRelease(&msgVal); + push(vm, basValInteger((int16_t)result)); + break; + } + + case OP_INPUTBOX: { + BasValueT defaultVal; + BasValueT titleVal; + BasValueT promptVal; + + if (!pop(vm, &defaultVal) || !pop(vm, &titleVal) || !pop(vm, &promptVal)) { + return BAS_VM_STACK_UNDERFLOW; + } + + BasStringT *result = NULL; + + if (vm->ui.inputBox) { + BasValueT sp = basValToString(promptVal); + BasValueT st = basValToString(titleVal); + BasValueT sd = basValToString(defaultVal); + result = vm->ui.inputBox(vm->ui.ctx, sp.strVal->data, st.strVal->data, sd.strVal->data); + basValRelease(&sp); + basValRelease(&st); + basValRelease(&sd); + } + + basValRelease(&defaultVal); + basValRelease(&titleVal); + basValRelease(&promptVal); + + if (result) { + BasValueT rv; + rv.type = BAS_TYPE_STRING; + rv.strVal = result; + push(vm, rv); + } else { + push(vm, basValStringFromC("")); + } + + break; + } + + case OP_ME_REF: + push(vm, basValObject(vm->currentForm)); + break; + + case OP_CREATE_CTRL: { + BasValueT nameVal; + BasValueT typeVal; + BasValueT formVal; + + if (!pop(vm, &nameVal) || !pop(vm, &typeVal) || !pop(vm, &formVal)) { + return BAS_VM_STACK_UNDERFLOW; + } + + void *ctrlRef = NULL; + + if (vm->ui.createCtrl && formVal.type == BAS_TYPE_OBJECT) { + BasValueT sv1 = basValToString(typeVal); + BasValueT sv2 = basValToString(nameVal); + ctrlRef = vm->ui.createCtrl(vm->ui.ctx, formVal.objVal, sv1.strVal->data, sv2.strVal->data); + basValRelease(&sv1); + basValRelease(&sv2); + } + + basValRelease(&nameVal); + basValRelease(&typeVal); + basValRelease(&formVal); + push(vm, basValObject(ctrlRef)); + break; + } + + case OP_FIND_CTRL: { + BasValueT nameVal; + BasValueT formVal; + + if (!pop(vm, &nameVal) || !pop(vm, &formVal)) { + return BAS_VM_STACK_UNDERFLOW; + } + + void *ctrlRef = NULL; + + if (vm->ui.findCtrl && formVal.type == BAS_TYPE_OBJECT) { + BasValueT sv = basValToString(nameVal); + ctrlRef = vm->ui.findCtrl(vm->ui.ctx, formVal.objVal, sv.strVal->data); + basValRelease(&sv); + } + + basValRelease(&nameVal); + basValRelease(&formVal); + push(vm, basValObject(ctrlRef)); + break; + } + + case OP_CTRL_REF: { + uint16_t nameIdx = readUint16(vm); + const char *ctrlName = ""; + + if (nameIdx < (uint16_t)vm->module->constCount) { + ctrlName = vm->module->constants[nameIdx]->data; + } + + void *ctrlRef = NULL; + + if (vm->ui.findCtrl && vm->currentForm) { + ctrlRef = vm->ui.findCtrl(vm->ui.ctx, vm->currentForm, ctrlName); + } + + push(vm, basValObject(ctrlRef)); + break; + } + + // ============================================================ + // External library calls + // ============================================================ + + case OP_CALL_EXTERN: { + uint16_t libNameIdx = readUint16(vm); + uint16_t funcNameIdx = readUint16(vm); + uint8_t argc = readUint8(vm); + uint8_t retType = readUint8(vm); + + // Look up in cache + void *funcPtr = NULL; + int32_t cacheIdx = -1; + + for (int32_t i = 0; i < vm->externCacheCount; i++) { + if (vm->externCache[i].libNameIdx == libNameIdx && + vm->externCache[i].funcNameIdx == funcNameIdx) { + funcPtr = vm->externCache[i].funcPtr; + cacheIdx = i; + break; + } + } + + // Resolve on first call + if (cacheIdx < 0) { + const char *libName = ""; + const char *funcName = ""; + + if (libNameIdx < (uint16_t)vm->module->constCount) { + libName = vm->module->constants[libNameIdx]->data; + } + + if (funcNameIdx < (uint16_t)vm->module->constCount) { + funcName = vm->module->constants[funcNameIdx]->data; + } + + if (vm->ext.resolveExtern) { + funcPtr = vm->ext.resolveExtern(vm->ext.ctx, libName, funcName); + } + + if (!funcPtr) { + // Pop args to keep stack balanced + for (int32_t i = 0; i < argc; i++) { + BasValueT tmp; + pop(vm, &tmp); + basValRelease(&tmp); + } + + char msg[256]; + const char *fn = funcNameIdx < (uint16_t)vm->module->constCount + ? vm->module->constants[funcNameIdx]->data : "?"; + snprintf(msg, sizeof(msg), "External function not found: %s", fn); + runtimeError(vm, 453, msg); + return BAS_VM_ERROR; + } + + // Cache it + if (vm->externCacheCount < BAS_EXTERN_CACHE_SIZE) { + vm->externCache[vm->externCacheCount].libNameIdx = libNameIdx; + vm->externCache[vm->externCacheCount].funcNameIdx = funcNameIdx; + vm->externCache[vm->externCacheCount].funcPtr = funcPtr; + vm->externCacheCount++; + } + } + + // Pop arguments (reverse order) + BasValueT args[16]; + int32_t argCount = argc < 16 ? argc : 16; + + for (int32_t i = argCount - 1; i >= 0; i--) { + if (!pop(vm, &args[i])) { + return BAS_VM_STACK_UNDERFLOW; + } + } + + // Call through host callback + BasValueT result = basValInteger(0); + + if (vm->ext.callExtern) { + const char *funcName = funcNameIdx < (uint16_t)vm->module->constCount + ? vm->module->constants[funcNameIdx]->data : ""; + result = vm->ext.callExtern(vm->ext.ctx, funcPtr, funcName, args, argCount, retType); + } + + for (int32_t i = 0; i < argCount; i++) { + basValRelease(&args[i]); + } + + // Push return value (void functions still push a dummy 0) + push(vm, result); + break; + } + default: runtimeError(vm, 51, "Bad opcode"); return BAS_VM_BAD_OPCODE; diff --git a/dvxbasic/runtime/vm.h b/dvxbasic/runtime/vm.h index 84a4b20..34a18e7 100644 --- a/dvxbasic/runtime/vm.h +++ b/dvxbasic/runtime/vm.h @@ -71,6 +71,108 @@ typedef bool (*BasInputFnT)(void *ctx, const char *prompt, char *buf, int32_t bu // true to continue execution, false to stop the program. typedef bool (*BasDoEventsFnT)(void *ctx); +// ============================================================ +// UI callbacks (host-provided, for form/control system) +// ============================================================ +// +// The VM resolves all UI operations through these callbacks. +// Control types, property names, and method names are passed +// as strings -- the host maps them to its native widget system. +// This keeps the VM independent of any specific GUI toolkit. + +// Get a property from a control. Returns the value. +// ctrlRef is an opaque pointer previously returned by createControl/findControl. +typedef BasValueT (*BasUiGetPropFnT)(void *ctx, void *ctrlRef, const char *propName); + +// Set a property on a control. +typedef void (*BasUiSetPropFnT)(void *ctx, void *ctrlRef, const char *propName, BasValueT value); + +// Call a method on a control. args[0..argc-1] are the arguments. +// Returns the method's return value (or a zero-value for void methods). +typedef BasValueT (*BasUiCallMethodFnT)(void *ctx, void *ctrlRef, const char *methodName, BasValueT *args, int32_t argc); + +// Create a control on a form. typeName is the widget type ("Button", +// "TextBox", etc.). ctrlName is the VB control name ("Command1"). +// Returns an opaque control reference. +typedef void *(*BasUiCreateCtrlFnT)(void *ctx, void *formRef, const char *typeName, const char *ctrlName); + +// Find an existing control by name on a form. Returns NULL if not found. +typedef void *(*BasUiFindCtrlFnT)(void *ctx, void *formRef, const char *ctrlName); + +// Load a form by name. Returns an opaque form reference. +typedef void *(*BasUiLoadFormFnT)(void *ctx, const char *formName); + +// Unload a form. +typedef void (*BasUiUnloadFormFnT)(void *ctx, void *formRef); + +// Show a form. modal=true for modal display. +typedef void (*BasUiShowFormFnT)(void *ctx, void *formRef, bool modal); + +// Hide a form (keep in memory). +typedef void (*BasUiHideFormFnT)(void *ctx, void *formRef); + +// Display a message box. Returns the button clicked (1=OK, 6=Yes, 7=No, 2=Cancel). +typedef int32_t (*BasUiMsgBoxFnT)(void *ctx, const char *message, int32_t flags); + +// Display an input box. Returns the entered string (empty on cancel). +typedef BasStringT *(*BasUiInputBoxFnT)(void *ctx, const char *prompt, const char *title, const char *defaultText); + +// Collected UI callbacks +typedef struct { + BasUiGetPropFnT getProp; + BasUiSetPropFnT setProp; + BasUiCallMethodFnT callMethod; + BasUiCreateCtrlFnT createCtrl; + BasUiFindCtrlFnT findCtrl; + BasUiLoadFormFnT loadForm; + BasUiUnloadFormFnT unloadForm; + BasUiShowFormFnT showForm; + BasUiHideFormFnT hideForm; + BasUiMsgBoxFnT msgBox; + BasUiInputBoxFnT inputBox; + void *ctx; // passed as first arg to all callbacks +} BasUiCallbacksT; + +// ============================================================ +// External library callbacks (host-provided) +// ============================================================ +// +// The VM resolves external functions by library name + function +// name at runtime. The host uses dlsym() or equivalent to find +// the native function pointer. A second callback marshals the +// call -- converting BasValueT arguments to native C types and +// the return value back to BasValueT. + +// Resolve a function by library and symbol name. +// Returns an opaque function pointer, or NULL if not found. +// The VM caches the result so this is called only once per +// unique (library, function) pair. +typedef void *(*BasResolveExternFnT)(void *ctx, const char *libName, const char *funcName); + +// Call a resolved native function. funcPtr is the pointer returned +// by resolveExtern. args[0..argc-1] are the BASIC arguments. +// retType is the expected return type (BAS_TYPE_*). +// Returns the native function's return value as a BasValueT. +typedef BasValueT (*BasCallExternFnT)(void *ctx, void *funcPtr, const char *funcName, BasValueT *args, int32_t argc, uint8_t retType); + +typedef struct { + BasResolveExternFnT resolveExtern; + BasCallExternFnT callExtern; + void *ctx; +} BasExternCallbacksT; + +// ============================================================ +// Extern function cache (resolved on first call) +// ============================================================ + +#define BAS_EXTERN_CACHE_SIZE 128 + +typedef struct { + uint16_t libNameIdx; // constant pool index for library name + uint16_t funcNameIdx; // constant pool index for function name + void *funcPtr; // resolved native function pointer (NULL = not yet resolved) +} BasExternCacheEntryT; + // ============================================================ // Call stack frame // ============================================================ @@ -170,6 +272,19 @@ typedef struct { void *inputCtx; BasDoEventsFnT doEventsFn; void *doEventsCtx; + + // UI callbacks (set by host for form/control support) + BasUiCallbacksT ui; + + // External library callbacks (set by host) + BasExternCallbacksT ext; + + // Extern function cache (resolved on first call) + BasExternCacheEntryT externCache[BAS_EXTERN_CACHE_SIZE]; + int32_t externCacheCount; + + // Current form reference (set during event dispatch) + void *currentForm; } BasVmT; // ============================================================ @@ -201,6 +316,15 @@ void basVmSetPrintCallback(BasVmT *vm, BasPrintFnT fn, void *ctx); void basVmSetInputCallback(BasVmT *vm, BasInputFnT fn, void *ctx); void basVmSetDoEventsCallback(BasVmT *vm, BasDoEventsFnT fn, void *ctx); +// Set UI callbacks (for form/control system). +void basVmSetUiCallbacks(BasVmT *vm, const BasUiCallbacksT *ui); + +// Set external library callbacks (for DECLARE LIBRARY support). +void basVmSetExternCallbacks(BasVmT *vm, const BasExternCallbacksT *ext); + +// Set the current form context (called by host during event dispatch). +void basVmSetCurrentForm(BasVmT *vm, void *formRef); + // Push/pop values on the evaluation stack (for host integration). bool basVmPush(BasVmT *vm, BasValueT val); bool basVmPop(BasVmT *vm, BasValueT *val); diff --git a/dvxbasic/test_compiler b/dvxbasic/test_compiler index 8a071cfa3cdeac8ec91e2da3f445de467d33f7cc..feb8610e253a0b60c4924f92f6c23dcbcb773b6c 100755 GIT binary patch literal 151328 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 e71uZ!m*vs*YScxD}s#mXGy?XWP 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 diff --git a/dvxbasic/test_compiler.c b/dvxbasic/test_compiler.c index a349475..b772ed2 100644 --- a/dvxbasic/test_compiler.c +++ b/dvxbasic/test_compiler.c @@ -845,6 +845,64 @@ int main(void) { printf("\n"); } + // Test: DECLARE LIBRARY compilation (verify it compiles without error) + { + printf("=== DECLARE LIBRARY ===\n"); + const char *src = + "DECLARE LIBRARY \"serial\"\n" + " DECLARE FUNCTION rs232Open(com AS INTEGER, bps AS LONG) AS INTEGER\n" + " DECLARE SUB rs232Close(com AS INTEGER)\n" + "END DECLARE\n" + "\n" + "PRINT \"Library declared\"\n"; + int32_t len = (int32_t)strlen(src); + BasParserT parser; + basParserInit(&parser, src, len); + bool ok = basParse(&parser); + + if (!ok) { + printf("COMPILE ERROR: %s\n", parser.error); + } else { + BasModuleT *mod = basParserBuildModule(&parser); + BasVmT *vm = basVmCreate(); + basVmLoadModule(vm, mod); + vm->callStack[0].localCount = mod->globalCount > 64 ? 64 : mod->globalCount; + vm->callDepth = 1; + basVmRun(vm); + basVmDestroy(vm); + basModuleFree(mod); + } + + basParserFree(&parser); + printf("\n"); + } + + // Test: DECLARE LIBRARY with extern call (uses mock callback) + { + printf("=== DECLARE LIBRARY call ===\n"); + const char *src = + "DECLARE LIBRARY \"math\"\n" + " DECLARE FUNCTION mathAdd(a AS INTEGER, b AS INTEGER) AS INTEGER\n" + "END DECLARE\n" + "\n" + "DIM result AS INTEGER\n" + "result = mathAdd(10, 20)\n" + "PRINT result\n"; + int32_t len = (int32_t)strlen(src); + BasParserT parser; + basParserInit(&parser, src, len); + bool ok = basParse(&parser); + + if (!ok) { + printf("COMPILE ERROR: %s\n", parser.error); + } else { + printf("Compiled OK (extern call test needs host callbacks to run)\n"); + } + + basParserFree(&parser); + printf("\n"); + } + printf("All tests complete.\n"); return 0; }