shorekeeper 8d37628ae7 Fix Windows build and several cross-platform bugs
Cross-platform bugs:

- ncomplib.c: fseek was called as fseek(f, whence, offset) instead of
  fseek(f, offset, whence). Seeks only worked correctly when offset
  happened to numerically equal a valid whence constant.

- neonucleus.c: nn_realloc passed memory pointer instead of ctx to
  nn_alloc in the NULL and sentinel paths. Any call with memory=NULL
  dereferences NULL as a context struct and crashes. Confirmed by
  test_realloc.c which crashes before fix and passes after.

- neonucleus.h: NN_TiB was defined as (1024 * NN_TiB), referencing
  itself. Fixed to ((size_t)1024 * NN_GiB).

- luaarch.c: unicode functions were registered on the component Lua
  table instead of the unicode table. Wrong stack index variable was
  used in all five lua_setfield calls.

- neonucleus.c: NN_ATOMIC_NONE versions of nn_incRef/nn_decRef took
  1 argument but were called with 2 everywhere. Added the missing
  size_t n parameter.

Windows build:

- neonucleus.c: NN_LOCK_CREATE in NN_THREAD_WINDOWS was missing a
  return statement, falling through into NN_LOCK_DESTROY and
  immediately closing the freshly created mutex handle.

- ncomplib.c: Added Windows implementations for opendir, readdir,
  closedir, stat, mkdir and directory removal using FindFirstFileA,
  FindNextFileA, _stat, _mkdir and _rmdir.

- main.c: Fall back to USERNAME env var when USER is not set.

- neonucleus.h: Added NN_VLA macro. Expands to a plain VLA on
  GCC/Clang, uses _alloca on MSVC. Applied in luaarch.c and
  neonucleus.c where VLAs were used.

- neonucleus.h: Added NN_INIT macro. Expands to a compound literal
  cast on GCC/Clang, expands to nothing on MSVC which does not
  support compound literals as constant initializers at file scope.
  Applied to all global struct initializers in neonucleus.c.

- neonucleus.c: Auto-define NN_ATOMIC_NONE on MSVC in C mode since
  MSVC does not provide stdatomic.h outside of C++ mode.
2026-04-01 19:18:00 +03:00
2026-04-01 11:04:22 +02:00
2026-03-16 21:57:18 +01:00
2025-05-19 19:34:07 +02:00
2026-04-01 11:22:19 +02:00
2025-05-19 19:25:46 +02:00
2025-06-28 21:09:29 +02:00

NeoNucleus

The core of NeoComputers.

It provides:

  • the computer model and state implementation
  • architecture system
  • (NOT NOW) basic component implementations
  • (NOT NOW) standard emulator
  • (NOT NOW) some extra components

The library does not provide:

  • The sandbox (equivalent to OpenComputer's machine.lua)
  • Default architectures
  • Default host interop (as in, the vtables that control the basic component's internals, such as the filesystem implementation)

The emulator will (as its gonna be made after the engine is functional) provide:

  • A simple Lua sandbox
  • Very simple workspaces
  • Ocelot components for debug
  • Headless mode (single computer, uses actual terminal for a teletypewriter).
Description
The core of neocomputers, the engine. Provides the entire model and basic system, as well as basic component implementations. It does not provide any architectures.
Readme LGPL-2.1 12 MiB
Languages
C 57.4%
Lua 41.5%
Zig 0.8%
Makefile 0.2%